@angular-generic-table/core 5.0.0-rc.12 → 5.0.0-rc.14

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 (42) hide show
  1. package/esm2020/lib/core.component.mjs +74 -21
  2. package/esm2020/lib/core.module.mjs +11 -8
  3. package/esm2020/lib/core.service.mjs +4 -4
  4. package/esm2020/lib/gt-delta/gt-delta.component.mjs +8 -19
  5. package/esm2020/lib/models/table-column.interface.mjs +1 -1
  6. package/esm2020/lib/models/table-config.interface.mjs +1 -1
  7. package/esm2020/lib/models/table-events.interface.mjs +2 -0
  8. package/esm2020/lib/models/table-meta.interface.mjs +1 -1
  9. package/esm2020/lib/models/table-row.interface.mjs +1 -1
  10. package/esm2020/lib/pagination/pagination.component.mjs +6 -6
  11. package/esm2020/lib/pagination/pagination.module.mjs +6 -7
  12. package/esm2020/lib/pipes/capital-case.pipe.mjs +5 -4
  13. package/esm2020/lib/pipes/dash-case.pipe.mjs +5 -4
  14. package/esm2020/lib/pipes/dynamic.pipe.mjs +5 -4
  15. package/esm2020/lib/pipes/highlight.pipe.mjs +5 -4
  16. package/esm2020/lib/pipes/sort-class.pipe.mjs +5 -4
  17. package/esm2020/lib/utilities/utilities.mjs +72 -2
  18. package/esm2020/public-api.mjs +2 -1
  19. package/fesm2015/angular-generic-table-core.mjs +219 -95
  20. package/fesm2015/angular-generic-table-core.mjs.map +1 -1
  21. package/fesm2020/angular-generic-table-core.mjs +212 -94
  22. package/fesm2020/angular-generic-table-core.mjs.map +1 -1
  23. package/{angular-generic-table-core.d.ts → index.d.ts} +0 -0
  24. package/lib/core.component.d.ts +20 -3
  25. package/lib/core.module.d.ts +9 -9
  26. package/lib/gt-delta/gt-delta.component.d.ts +3 -3
  27. package/lib/models/table-column.interface.d.ts +4 -2
  28. package/lib/models/table-config.interface.d.ts +24 -3
  29. package/lib/models/table-events.interface.d.ts +11 -0
  30. package/lib/models/table-meta.interface.d.ts +3 -3
  31. package/lib/models/table-row.interface.d.ts +0 -1
  32. package/lib/pagination/pagination.component.d.ts +3 -3
  33. package/lib/pagination/pagination.module.d.ts +3 -3
  34. package/lib/pipes/capital-case.pipe.d.ts +1 -1
  35. package/lib/pipes/dash-case.pipe.d.ts +1 -1
  36. package/lib/pipes/dynamic.pipe.d.ts +1 -1
  37. package/lib/pipes/highlight.pipe.d.ts +1 -1
  38. package/lib/pipes/sort-class.pipe.d.ts +1 -1
  39. package/lib/utilities/utilities.d.ts +5 -0
  40. package/package.json +5 -5
  41. package/public-api.d.ts +1 -0
  42. package/scss/index.scss +35 -0
@@ -1,17 +1,21 @@
1
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
2
2
  import { BehaviorSubject, combineLatest, EMPTY, isObservable, of, ReplaySubject, Subject, } from 'rxjs';
3
- import { map, shareReplay, startWith, switchMap, withLatestFrom, } from 'rxjs/operators';
3
+ import { AsyncPipe, KeyValuePipe, NgClass, NgForOf, NgIf, NgTemplateOutlet, SlicePipe, } from '@angular/common';
4
+ import { debounceTime, distinctUntilChanged, map, shareReplay, startWith, switchMap, take, tap, withLatestFrom, } from 'rxjs/operators';
4
5
  import { Order } from './enums/order.enum';
5
- import { chunk, search } from './utilities/utilities';
6
+ import { calculate, chunk, search } from './utilities/utilities';
7
+ import { CapitalCasePipe } from './pipes/capital-case.pipe';
8
+ import { SortClassPipe } from './pipes/sort-class.pipe';
9
+ import { DashCasePipe } from './pipes/dash-case.pipe';
10
+ import { DynamicPipe } from './pipes/dynamic.pipe';
11
+ import { HighlightPipe } from './pipes/highlight.pipe';
6
12
  import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common";
8
- import * as i2 from "./pipes/dash-case.pipe";
9
- import * as i3 from "./pipes/sort-class.pipe";
10
- import * as i4 from "./pipes/capital-case.pipe";
11
- import * as i5 from "./pipes/highlight.pipe";
12
- import * as i6 from "./pipes/dynamic.pipe";
13
13
  export class CoreComponent {
14
14
  constructor() {
15
+ this.rowClick = new EventEmitter();
16
+ this._rowHover$ = new ReplaySubject(1);
17
+ this.rowHover = new EventEmitter();
18
+ this.rowHover$ = this._rowHover$.asObservable().pipe(debounceTime(50), distinctUntilChanged((p, q) => p.index === q.index), tap((event) => this.rowHover.emit(event)), shareReplay(1));
15
19
  this._loading$ = new ReplaySubject(1);
16
20
  this.sortBy$ = new Subject();
17
21
  // tslint:disable-next-line:variable-name
@@ -28,16 +32,18 @@ export class CoreComponent {
28
32
  (config.rows &&
29
33
  !!Object.values(config.rows).find((column) => !!column.mapTo))) {
30
34
  // ...map data to new keys on row...
31
- data = data.map((row) => {
35
+ const newData = [];
36
+ for (let i = 0; i < data.length; i++) {
37
+ const row = data[i];
32
38
  const newKeys = Object.entries(config.columns || config.rows || [])
33
39
  .filter(([key, value]) => !!value.mapTo) // add keys for columns with mapTo config...
34
- .reduce((previousValue, currentValue) => ({
40
+ .reduce((previousValue, [key, value]) => ({
35
41
  ...previousValue,
36
- // tslint:disable-next-line:no-non-null-assertion
37
- [currentValue[0]]: this.nestedValue(row, currentValue[1].mapTo.path, currentValue[1].mapTo?.missingValue),
42
+ [key]: this.nestedValue(row, value.mapTo.path, value.mapTo?.missingValue),
38
43
  }), {});
39
- return { ...row, ...newKeys };
40
- });
44
+ newData[i] = { ...row, ...newKeys };
45
+ }
46
+ data = newData;
41
47
  }
42
48
  return { data, config };
43
49
  }), switchMap((obs) => combineLatest([
@@ -67,6 +73,7 @@ export class CoreComponent {
67
73
  : 0;
68
74
  });
69
75
  }), shareReplay(1));
76
+ this.calculations$ = combineLatest([this.data$, this.tableConfig$]).pipe(map(([data, config]) => calculate(data, config)), shareReplay(1));
70
77
  this.table$ = combineLatest([
71
78
  this.data$,
72
79
  this.tableConfig$,
@@ -100,7 +107,17 @@ export class CoreComponent {
100
107
  }), shareReplay(1));
101
108
  this.colspan$ = this.tableConfig$.pipe(switchMap((config) => config.columns
102
109
  ? of(Object.values(config.columns || config.rows || {}).filter((value) => value.hidden !== true).length)
103
- : this.data$.pipe(map((data) => data.length + 1))));
110
+ : this.data$.pipe(map((data) => data.length + 1))), shareReplay(1));
111
+ this.footerColspan$ = this.tableConfig$.pipe(map((config) => {
112
+ let colspan = 0;
113
+ Object.values(config?.footer?.columns || {}).forEach((calculations) => {
114
+ if (Object.values(calculations).filter((value) => value !== false)
115
+ .length >= 0) {
116
+ colspan += 1;
117
+ }
118
+ }, {});
119
+ return colspan;
120
+ }), shareReplay(1));
104
121
  this.columnOrder = (a, b) => {
105
122
  return (a.value.order || 0) - (b.value.order || 0);
106
123
  };
@@ -120,6 +137,25 @@ export class CoreComponent {
120
137
  set data(data) {
121
138
  this._data$.next(data);
122
139
  }
140
+ _rowClick(row, index, event) {
141
+ this.rowClick.emit({ row, index, event });
142
+ }
143
+ hoverRow(arg) {
144
+ if (typeof arg === 'number') {
145
+ this.data$
146
+ .pipe(map((data) => data[arg]), take(1))
147
+ .subscribe((row) => this._hoverRow(row, arg));
148
+ }
149
+ else if (typeof arg === 'string') {
150
+ // TODO: implement hover by id
151
+ }
152
+ else {
153
+ this._hoverRow(null, null);
154
+ }
155
+ }
156
+ _hoverRow(row, index, event) {
157
+ this._rowHover$.next({ row, index, event });
158
+ }
123
159
  get loading$() {
124
160
  return this._loading$.pipe(startWith(false), map((value) => (isObservable(value) ? value : of(value))), switchMap((obs) => obs), shareReplay(1));
125
161
  }
@@ -142,11 +178,24 @@ export class CoreComponent {
142
178
  (index === levels.length - 1 ? missingValue : {}), object);
143
179
  }
144
180
  }
145
- CoreComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CoreComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
146
- CoreComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CoreComponent, selector: "angular-generic-table", inputs: { loading: "loading", page: "page", search: "search", config: "config", data: "data" }, ngImport: i0, template: "<table\n [ngClass]=\"(tableConfig$ | async)?.class || 'table'\"\n [class.table-mobile]=\"(tableConfig$ | async)?.mobileLayout\"\n [class.table-horizontal]=\"(tableConfig$ | async)?.rows\"\n [class.table-loading]=\"loading$ | async\"\n [class.gt-sticky-row-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.row && (tableConfig$ | async)?.rows\n \"\n [class.gt-sticky-column-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.column\n \"\n [attr.aria-busy]=\"(loading$ | async) === true ? true : null\"\n>\n <thead>\n <tr\n *ngIf=\"{\n config: (tableConfig$ | async)!,\n isLoading: loading$ | async\n } as table\"\n >\n <ng-container\n *ngFor=\"let column of table?.config?.columns | keyvalue: columnOrder\"\n >\n <th\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value.class\n }}\"\n [class.disabled]=\"table.isLoading\"\n [attr.aria-sort]=\"sortBy$ | async | sortClass: column.key:true\"\n [class.gt-sortable]=\"true\"\n scope=\"col\"\n >\n <button\n *ngIf=\"column.value?.sortable\"\n class=\"gt-sort\"\n (click)=\"\n table.isLoading || !column.value?.sortable || sort(column.key)\n \"\n >\n <span *ngIf=\"column.value?.header !== false\">{{\n column.value?.header || column.key | capitalCase\n }}</span>\n </button>\n <span\n *ngIf=\"!column.value?.sortable && column.value?.header !== false\"\n >{{ column.value?.header || column.key | capitalCase }}</span\n >\n </th>\n </ng-container>\n <ng-container\n *ngIf=\"\n ((table?.config?.rows | keyvalue: columnOrder) || [])[0] as headerRow\n \"\n >\n <th\n class=\"row-header\"\n [attr.aria-sort]=\"sortBy$ | async | sortClass: headerRow.key:true\"\n ngClass=\"{{ headerRow.value?.sortable ? 'sort ' : '' }} {{\n sortBy$ | async | sortClass: headerRow.key\n }} {{ (headerRow.key | dashCase) + '-column' }}\"\n (click)=\"\n table.isLoading || !headerRow.value?.sortable || sort(headerRow.key)\n \"\n scope=\"col\"\n >\n <ng-container *ngIf=\"headerRow?.value?.header !== false\">{{\n headerRow?.value?.header || headerRow.key | capitalCase\n }}</ng-container>\n </th>\n <th\n *ngFor=\"let column of ((table$ | async)?.data || [])[0]\"\n ngClass=\"{{ headerRow.value?.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config?.rows || {})[headerRow.key].templateRef\n ? templateRef\n : (table.config?.rows || {})[headerRow.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: headerRow,\n transform: (table.config?.rows || {})[headerRow.key].transform,\n templateRef: (table.config?.rows || {})[headerRow.key]\n .templateRef,\n index: 0\n }\"\n >\n </ng-container>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody *ngIf=\"loading$ | async; else tableContent\">\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-loading\"></ng-content>\n </td>\n </tr>\n </tbody>\n</table>\n<ng-template #tableContent>\n <ng-container *ngIf=\"(table$ | async)! as table\">\n <tbody *ngIf=\"(table!.data![0] || table!.data!).length > 0; else noData\">\n <ng-container *ngIf=\"table.config.columns\">\n <tr\n *ngFor=\"\n let row of table!.data![(currentPage$ | async) || 0];\n let i = index\n \"\n [attr.id]=\"'tableRow_' + i\"\n >\n <ng-container\n *ngFor=\"let column of table.config?.columns | keyvalue: columnOrder\"\n >\n <td\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value?.class\n }}\"\n [attr.data-label]=\"\n table.config?.mobileLayout && column.value?.mobileHeader\n ? column.value?.mobileHeader !== true\n ? column.value?.mobileHeader\n : (column.value?.header || column.key | capitalCase)\n : null\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (searchBy$ | async) &&\n !(table.config?.columns || {})[column.key].templateRef\n ? highlighted\n : (table.config?.columns || {})[column.key].templateRef\n ? templateRef\n : (table.config?.columns || {})[column.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: row,\n column: column,\n search: (searchBy$ | async),\n transform: (table.config?.columns || {})[column.key]\n .transform,\n templateRef: (table.config?.columns || {})[column.key]\n .templateRef,\n index: i,\n data: table.data[(currentPage$ | async) || 0]\n }\"\n ></ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n <ng-container *ngIf=\"table.config.rows\">\n <ng-container\n *ngFor=\"\n let row of table?.config?.rows | keyvalue: columnOrder | slice: 1;\n let i = index\n \"\n >\n <tr\n *ngIf=\"!row.value?.hidden\"\n [attr.id]=\"'tableRow_' + i\"\n ngClass=\"{{ (row.key | dashCase) + '-row' }}\"\n >\n <th class=\"row-header\" scope=\"row\">\n {{ row.value?.header || row.key | capitalCase }}\n </th>\n <td\n *ngFor=\"let column of (table?.data || [])[0]; let y = index\"\n ngClass=\"{{ row.value?.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config?.rows || {})[row.key].templateRef\n ? templateRef\n : (table.config?.rows || {})[row.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: row,\n transform: (table.config?.rows || {})[row.key].transform,\n templateRef: (table.config?.rows || {})[row.key].templateRef,\n index: table.config?.rows ? y : i,\n data: table.data[(currentPage$ | async) || 0]\n }\"\n >\n </ng-container>\n </td>\n </tr>\n </ng-container>\n </ng-container>\n </tbody>\n </ng-container>\n</ng-template>\n<ng-template #noData>\n <tbody>\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-no-data\"></ng-content>\n </td>\n </tr>\n </tbody>\n</ng-template>\n<ng-template #highlighted let-row=\"row\" let-column=\"column\" let-search=\"search\">\n <div [innerHTML]=\"row[column.key] | highlight: search\"></div>\n</ng-template>\n<ng-template #rawData let-row=\"row\" let-column=\"column\">\n {{ row[column.key] }}\n</ng-template>\n<ng-template\n #transformData\n let-row=\"row\"\n let-column=\"column\"\n let-transform=\"transform\"\n let-data=\"data\"\n>\n {{ row[column.key] | dynamicPipe: transform.pipe:transform?.args }}\n</ng-template>\n<ng-template\n #templateRef\n let-row=\"row\"\n let-column=\"column\"\n let-index=\"index\"\n let-templateRef=\"templateRef\"\n let-data=\"data\"\n>\n <ng-container\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{\n row: row,\n col: column,\n index: index,\n data: data\n }\"\n ></ng-container>\n</ng-template>\n", directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i1.AsyncPipe, "keyvalue": i1.KeyValuePipe, "dashCase": i2.DashCasePipe, "sortClass": i3.SortClassPipe, "capitalCase": i4.CapitalCasePipe, "slice": i1.SlicePipe, "highlight": i5.HighlightPipe, "dynamicPipe": i6.DynamicPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
147
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CoreComponent, decorators: [{
181
+ CoreComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: CoreComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
182
+ CoreComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: CoreComponent, isStandalone: true, selector: "angular-generic-table", inputs: { loading: "loading", page: "page", search: "search", config: "config", data: "data" }, outputs: { rowClick: "rowClick", rowHover: "rowHover" }, ngImport: i0, template: "<table\n [ngClass]=\"(tableConfig$ | async)?.class || 'table'\"\n [class.table-mobile]=\"(tableConfig$ | async)?.mobileLayout\"\n [class.table-horizontal]=\"(tableConfig$ | async)?.rows\"\n [class.table-loading]=\"loading$ | async\"\n [class.gt-sticky-row-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.row && (tableConfig$ | async)?.rows\n \"\n [class.gt-sticky-column-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.column\n \"\n [attr.aria-busy]=\"(loading$ | async) === true ? true : null\"\n>\n <thead>\n <tr\n *ngIf=\"{\n config: (tableConfig$ | async)!,\n isLoading: loading$ | async\n } as table\"\n >\n <ng-container\n *ngFor=\"let column of table.config?.columns | keyvalue: columnOrder\"\n >\n <th\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value.class\n }}\"\n [class.disabled]=\"table.isLoading\"\n [attr.aria-sort]=\"sortBy$ | async | sortClass: column.key:true\"\n [class.gt-sortable]=\"true\"\n scope=\"col\"\n >\n <button\n *ngIf=\"column.value?.sortable\"\n class=\"gt-sort\"\n (click)=\"\n table.isLoading || !column.value.sortable || sort(column.key)\n \"\n >\n <span *ngIf=\"column.value?.header !== false\">{{\n column.value.header || column.key | capitalCase\n }}</span>\n </button>\n <span\n *ngIf=\"!column.value?.sortable && column.value?.header !== false\"\n >{{ column.value.header || column.key | capitalCase }}</span\n >\n </th>\n </ng-container>\n <ng-container\n *ngIf=\"\n ((table?.config?.rows | keyvalue: columnOrder) || [])[0] as headerRow\n \"\n >\n <th\n class=\"row-header\"\n [attr.aria-sort]=\"sortBy$ | async | sortClass: headerRow.key:true\"\n ngClass=\"{{ headerRow.value.sortable ? 'sort ' : '' }} {{\n sortBy$ | async | sortClass: headerRow.key\n }} {{ (headerRow.key | dashCase) + '-column' }}\"\n (click)=\"\n table.isLoading || !headerRow.value.sortable || sort(headerRow.key)\n \"\n scope=\"col\"\n >\n <ng-container *ngIf=\"headerRow?.value?.header !== false\">{{\n headerRow?.value?.header || headerRow.key | capitalCase\n }}</ng-container>\n </th>\n <th\n *ngFor=\"let column of ((table$ | async)?.data || [])[0]\"\n ngClass=\"{{ headerRow.value.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config.rows || {})[headerRow.key].templateRef\n ? templateRef\n : (table.config.rows || {})[headerRow.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: headerRow,\n transform: (table.config.rows || {})[headerRow.key].transform,\n templateRef: (table.config.rows || {})[headerRow.key].templateRef,\n index: 0\n }\"\n >\n </ng-container>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody *ngIf=\"loading$ | async; else tableContent\">\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-loading\"></ng-content>\n </td>\n </tr>\n </tbody>\n <tfoot *ngIf=\"(table$ | async)! as table\">\n <ng-container *ngIf=\"table.data.length > 0 && !(loading$ | async)\">\n <ng-container *ngIf=\"(calculations$ | async)! as calculations\">\n <tr\n *ngFor=\"let calculation of calculations.calculations; let i = index\"\n >\n <ng-container\n *ngIf=\"{\n showHeader: (colspan$ | async) !== (footerColspan$ | async)\n } as footerRow\"\n >\n <th\n *ngIf=\"footerRow.showHeader\"\n [colSpan]=\"\n ((colspan$ | async) || 0) - ((footerColspan$ | async) || 0)\n \"\n scope=\"row\"\n >\n <ng-container\n *ngIf=\"table.config?.footer?.headers?.[calculation] as showHeader\"\n >{{showHeader === true ? (calculation | capitalCase): table.config.footer?.headers?.[calculation]}}\n </ng-container>\n </th>\n <ng-container\n *ngFor=\"\n let column of table.config?.columns | keyvalue: columnOrder\n \"\n >\n <td\n *ngIf=\"\n !column.value?.hidden && calculations.calculated[column.key]\n \"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value.class\n }}\"\n [attr.data-header]=\"\n !footerRow.showHeader && table.config.footer?.headers?.[calculation]\n ? table.config.footer?.headers?.[calculation] === true ? (calculation | capitalCase) : table.config.footer?.headers?.[calculation]\n : null\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config.columns || {})[column.key].transform\n ? transformFooter\n : rawFooter\n \"\n [ngTemplateOutletContext]=\"{\n value: calculations.calculated[column.key][calculation],\n transform: (table.config.columns || {})[column.key]\n .transform\n }\"\n ></ng-container>\n </td>\n </ng-container>\n </ng-container>\n </tr>\n </ng-container>\n </ng-container>\n </tfoot>\n</table>\n<ng-template #tableContent>\n <ng-container *ngIf=\"(table$ | async)! as table\">\n <tbody *ngIf=\"(table!.data![0] || table!.data!).length > 0; else noData\">\n <ng-container *ngIf=\"table.config.columns\">\n <tr\n *ngFor=\"\n let row of table!.data![(currentPage$ | async) || 0];\n let i = index\n \"\n [attr.id]=\"'tableRow_' + i\"\n (click)=\"table?.config?.rowClick && _rowClick(row, i, $event)\"\n (mouseover)=\"table?.config?.rowHover && _hoverRow(row, i, $event)\"\n (mouseout)=\"table?.config?.rowHover && _hoverRow(null, null, $event)\"\n [class.gt-hover]=\"(rowHover$ | async)?.index === i\"\n >\n <ng-container\n *ngFor=\"let column of table.config?.columns | keyvalue: columnOrder\"\n >\n <td\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value.class\n }}\"\n [attr.data-label]=\"\n table.config.mobileLayout && column.value.mobileHeader\n ? column.value.mobileHeader !== true\n ? column.value.mobileHeader\n : (column.value.header || column.key | capitalCase)\n : null\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (searchBy$ | async) &&\n !(table.config.columns || {})[column.key].templateRef\n ? highlighted\n : (table.config.columns || {})[column.key].templateRef\n ? templateRef\n : (table.config.columns || {})[column.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: row,\n column: column,\n search: (searchBy$ | async),\n transform: (table.config.columns || {})[column.key].transform,\n templateRef: (table.config.columns || {})[column.key]\n .templateRef,\n index: i,\n data: table.data[(currentPage$ | async) || 0]\n }\"\n ></ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n <ng-container *ngIf=\"table.config.rows\">\n <ng-container\n *ngFor=\"\n let row of table?.config?.rows | keyvalue: columnOrder | slice: 1;\n let i = index\n \"\n >\n <tr\n *ngIf=\"!row.value?.hidden\"\n [attr.id]=\"'tableRow_' + i\"\n ngClass=\"{{ (row.key | dashCase) + '-row' }}\"\n (click)=\"table?.config?.rowClick && _rowClick(row, i, $event)\"\n (mouseover)=\"table?.config?.rowHover && _hoverRow(row, i, $event)\"\n (mouseout)=\"\n table?.config?.rowHover && _hoverRow(null, null, $event)\n \"\n [class.gt-hover]=\"(rowHover$ | async)?.index === i\"\n >\n <th class=\"row-header\" scope=\"row\">\n {{ row.value.header || row.key | capitalCase }}\n </th>\n <td\n *ngFor=\"let column of (table?.data || [])[0]; let y = index\"\n ngClass=\"{{ row.value.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config.rows || {})[row.key].templateRef\n ? templateRef\n : (table.config.rows || {})[row.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: row,\n transform: (table.config.rows || {})[row.key].transform,\n templateRef: (table.config.rows || {})[row.key].templateRef,\n index: table.config.rows ? y : i,\n data: table.data[(currentPage$ | async) || 0]\n }\"\n >\n </ng-container>\n </td>\n </tr>\n </ng-container>\n </ng-container>\n </tbody>\n </ng-container>\n</ng-template>\n<ng-template #noData>\n <tbody>\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-no-data\"></ng-content>\n </td>\n </tr>\n </tbody>\n</ng-template>\n<ng-template\n #highlighted\n let-row=\"row\"\n let-column=\"column\"\n let-search=\"search\"\n let-transform=\"transform\"\n>\n <div\n *ngIf=\"!transform\"\n [innerHTML]=\"row[column.key] | highlight: search\"\n ></div>\n <div\n *ngIf=\"transform\"\n [innerHTML]=\"\n row[column.key]\n | dynamicPipe: transform.pipe:transform?.args\n | highlight: search\n \"\n ></div>\n</ng-template>\n<ng-template #rawData let-row=\"row\" let-column=\"column\">\n {{ row[column.key] }}\n</ng-template>\n<ng-template\n #transformData\n let-row=\"row\"\n let-column=\"column\"\n let-transform=\"transform\"\n let-data=\"data\"\n>\n {{ row[column.key] | dynamicPipe: transform.pipe:transform?.args }}\n</ng-template>\n<ng-template #transformFooter let-value=\"value\" let-transform=\"transform\">\n {{\n (value | dynamicPipe: transform.pipe:transform?.args) ||\n (tableConfig$ | async)?.footer?.emptyContent\n }}\n</ng-template>\n<ng-template #rawFooter let-value=\"value\">\n {{ value || (tableConfig$ | async)?.footer?.emptyContent }}\n</ng-template>\n<ng-template\n #templateRef\n let-row=\"row\"\n let-column=\"column\"\n let-index=\"index\"\n let-templateRef=\"templateRef\"\n let-data=\"data\"\n>\n <ng-container\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{\n row: row,\n col: column,\n index: index,\n data: data\n }\"\n ></ng-container>\n</ng-template>\n", dependencies: [{ kind: "pipe", type: CapitalCasePipe, name: "capitalCase" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: SortClassPipe, name: "sortClass" }, { kind: "pipe", type: DashCasePipe, name: "dashCase" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: SlicePipe, name: "slice" }, { kind: "pipe", type: DynamicPipe, name: "dynamicPipe" }, { kind: "pipe", type: HighlightPipe, name: "highlight" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: CoreComponent, decorators: [{
148
184
  type: Component,
149
- args: [{ selector: 'angular-generic-table', styles: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<table\n [ngClass]=\"(tableConfig$ | async)?.class || 'table'\"\n [class.table-mobile]=\"(tableConfig$ | async)?.mobileLayout\"\n [class.table-horizontal]=\"(tableConfig$ | async)?.rows\"\n [class.table-loading]=\"loading$ | async\"\n [class.gt-sticky-row-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.row && (tableConfig$ | async)?.rows\n \"\n [class.gt-sticky-column-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.column\n \"\n [attr.aria-busy]=\"(loading$ | async) === true ? true : null\"\n>\n <thead>\n <tr\n *ngIf=\"{\n config: (tableConfig$ | async)!,\n isLoading: loading$ | async\n } as table\"\n >\n <ng-container\n *ngFor=\"let column of table?.config?.columns | keyvalue: columnOrder\"\n >\n <th\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value.class\n }}\"\n [class.disabled]=\"table.isLoading\"\n [attr.aria-sort]=\"sortBy$ | async | sortClass: column.key:true\"\n [class.gt-sortable]=\"true\"\n scope=\"col\"\n >\n <button\n *ngIf=\"column.value?.sortable\"\n class=\"gt-sort\"\n (click)=\"\n table.isLoading || !column.value?.sortable || sort(column.key)\n \"\n >\n <span *ngIf=\"column.value?.header !== false\">{{\n column.value?.header || column.key | capitalCase\n }}</span>\n </button>\n <span\n *ngIf=\"!column.value?.sortable && column.value?.header !== false\"\n >{{ column.value?.header || column.key | capitalCase }}</span\n >\n </th>\n </ng-container>\n <ng-container\n *ngIf=\"\n ((table?.config?.rows | keyvalue: columnOrder) || [])[0] as headerRow\n \"\n >\n <th\n class=\"row-header\"\n [attr.aria-sort]=\"sortBy$ | async | sortClass: headerRow.key:true\"\n ngClass=\"{{ headerRow.value?.sortable ? 'sort ' : '' }} {{\n sortBy$ | async | sortClass: headerRow.key\n }} {{ (headerRow.key | dashCase) + '-column' }}\"\n (click)=\"\n table.isLoading || !headerRow.value?.sortable || sort(headerRow.key)\n \"\n scope=\"col\"\n >\n <ng-container *ngIf=\"headerRow?.value?.header !== false\">{{\n headerRow?.value?.header || headerRow.key | capitalCase\n }}</ng-container>\n </th>\n <th\n *ngFor=\"let column of ((table$ | async)?.data || [])[0]\"\n ngClass=\"{{ headerRow.value?.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config?.rows || {})[headerRow.key].templateRef\n ? templateRef\n : (table.config?.rows || {})[headerRow.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: headerRow,\n transform: (table.config?.rows || {})[headerRow.key].transform,\n templateRef: (table.config?.rows || {})[headerRow.key]\n .templateRef,\n index: 0\n }\"\n >\n </ng-container>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody *ngIf=\"loading$ | async; else tableContent\">\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-loading\"></ng-content>\n </td>\n </tr>\n </tbody>\n</table>\n<ng-template #tableContent>\n <ng-container *ngIf=\"(table$ | async)! as table\">\n <tbody *ngIf=\"(table!.data![0] || table!.data!).length > 0; else noData\">\n <ng-container *ngIf=\"table.config.columns\">\n <tr\n *ngFor=\"\n let row of table!.data![(currentPage$ | async) || 0];\n let i = index\n \"\n [attr.id]=\"'tableRow_' + i\"\n >\n <ng-container\n *ngFor=\"let column of table.config?.columns | keyvalue: columnOrder\"\n >\n <td\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value?.class\n }}\"\n [attr.data-label]=\"\n table.config?.mobileLayout && column.value?.mobileHeader\n ? column.value?.mobileHeader !== true\n ? column.value?.mobileHeader\n : (column.value?.header || column.key | capitalCase)\n : null\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (searchBy$ | async) &&\n !(table.config?.columns || {})[column.key].templateRef\n ? highlighted\n : (table.config?.columns || {})[column.key].templateRef\n ? templateRef\n : (table.config?.columns || {})[column.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: row,\n column: column,\n search: (searchBy$ | async),\n transform: (table.config?.columns || {})[column.key]\n .transform,\n templateRef: (table.config?.columns || {})[column.key]\n .templateRef,\n index: i,\n data: table.data[(currentPage$ | async) || 0]\n }\"\n ></ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n <ng-container *ngIf=\"table.config.rows\">\n <ng-container\n *ngFor=\"\n let row of table?.config?.rows | keyvalue: columnOrder | slice: 1;\n let i = index\n \"\n >\n <tr\n *ngIf=\"!row.value?.hidden\"\n [attr.id]=\"'tableRow_' + i\"\n ngClass=\"{{ (row.key | dashCase) + '-row' }}\"\n >\n <th class=\"row-header\" scope=\"row\">\n {{ row.value?.header || row.key | capitalCase }}\n </th>\n <td\n *ngFor=\"let column of (table?.data || [])[0]; let y = index\"\n ngClass=\"{{ row.value?.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config?.rows || {})[row.key].templateRef\n ? templateRef\n : (table.config?.rows || {})[row.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: row,\n transform: (table.config?.rows || {})[row.key].transform,\n templateRef: (table.config?.rows || {})[row.key].templateRef,\n index: table.config?.rows ? y : i,\n data: table.data[(currentPage$ | async) || 0]\n }\"\n >\n </ng-container>\n </td>\n </tr>\n </ng-container>\n </ng-container>\n </tbody>\n </ng-container>\n</ng-template>\n<ng-template #noData>\n <tbody>\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-no-data\"></ng-content>\n </td>\n </tr>\n </tbody>\n</ng-template>\n<ng-template #highlighted let-row=\"row\" let-column=\"column\" let-search=\"search\">\n <div [innerHTML]=\"row[column.key] | highlight: search\"></div>\n</ng-template>\n<ng-template #rawData let-row=\"row\" let-column=\"column\">\n {{ row[column.key] }}\n</ng-template>\n<ng-template\n #transformData\n let-row=\"row\"\n let-column=\"column\"\n let-transform=\"transform\"\n let-data=\"data\"\n>\n {{ row[column.key] | dynamicPipe: transform.pipe:transform?.args }}\n</ng-template>\n<ng-template\n #templateRef\n let-row=\"row\"\n let-column=\"column\"\n let-index=\"index\"\n let-templateRef=\"templateRef\"\n let-data=\"data\"\n>\n <ng-container\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{\n row: row,\n col: column,\n index: index,\n data: data\n }\"\n ></ng-container>\n</ng-template>\n" }]
185
+ args: [{ selector: 'angular-generic-table', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
186
+ CapitalCasePipe,
187
+ KeyValuePipe,
188
+ SortClassPipe,
189
+ DashCasePipe,
190
+ AsyncPipe,
191
+ NgTemplateOutlet,
192
+ SlicePipe,
193
+ DynamicPipe,
194
+ HighlightPipe,
195
+ NgClass,
196
+ NgIf,
197
+ NgForOf,
198
+ ], template: "<table\n [ngClass]=\"(tableConfig$ | async)?.class || 'table'\"\n [class.table-mobile]=\"(tableConfig$ | async)?.mobileLayout\"\n [class.table-horizontal]=\"(tableConfig$ | async)?.rows\"\n [class.table-loading]=\"loading$ | async\"\n [class.gt-sticky-row-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.row && (tableConfig$ | async)?.rows\n \"\n [class.gt-sticky-column-header]=\"\n (tableConfig$ | async)?.stickyHeaders?.column\n \"\n [attr.aria-busy]=\"(loading$ | async) === true ? true : null\"\n>\n <thead>\n <tr\n *ngIf=\"{\n config: (tableConfig$ | async)!,\n isLoading: loading$ | async\n } as table\"\n >\n <ng-container\n *ngFor=\"let column of table.config?.columns | keyvalue: columnOrder\"\n >\n <th\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value.class\n }}\"\n [class.disabled]=\"table.isLoading\"\n [attr.aria-sort]=\"sortBy$ | async | sortClass: column.key:true\"\n [class.gt-sortable]=\"true\"\n scope=\"col\"\n >\n <button\n *ngIf=\"column.value?.sortable\"\n class=\"gt-sort\"\n (click)=\"\n table.isLoading || !column.value.sortable || sort(column.key)\n \"\n >\n <span *ngIf=\"column.value?.header !== false\">{{\n column.value.header || column.key | capitalCase\n }}</span>\n </button>\n <span\n *ngIf=\"!column.value?.sortable && column.value?.header !== false\"\n >{{ column.value.header || column.key | capitalCase }}</span\n >\n </th>\n </ng-container>\n <ng-container\n *ngIf=\"\n ((table?.config?.rows | keyvalue: columnOrder) || [])[0] as headerRow\n \"\n >\n <th\n class=\"row-header\"\n [attr.aria-sort]=\"sortBy$ | async | sortClass: headerRow.key:true\"\n ngClass=\"{{ headerRow.value.sortable ? 'sort ' : '' }} {{\n sortBy$ | async | sortClass: headerRow.key\n }} {{ (headerRow.key | dashCase) + '-column' }}\"\n (click)=\"\n table.isLoading || !headerRow.value.sortable || sort(headerRow.key)\n \"\n scope=\"col\"\n >\n <ng-container *ngIf=\"headerRow?.value?.header !== false\">{{\n headerRow?.value?.header || headerRow.key | capitalCase\n }}</ng-container>\n </th>\n <th\n *ngFor=\"let column of ((table$ | async)?.data || [])[0]\"\n ngClass=\"{{ headerRow.value.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config.rows || {})[headerRow.key].templateRef\n ? templateRef\n : (table.config.rows || {})[headerRow.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: headerRow,\n transform: (table.config.rows || {})[headerRow.key].transform,\n templateRef: (table.config.rows || {})[headerRow.key].templateRef,\n index: 0\n }\"\n >\n </ng-container>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody *ngIf=\"loading$ | async; else tableContent\">\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-loading\"></ng-content>\n </td>\n </tr>\n </tbody>\n <tfoot *ngIf=\"(table$ | async)! as table\">\n <ng-container *ngIf=\"table.data.length > 0 && !(loading$ | async)\">\n <ng-container *ngIf=\"(calculations$ | async)! as calculations\">\n <tr\n *ngFor=\"let calculation of calculations.calculations; let i = index\"\n >\n <ng-container\n *ngIf=\"{\n showHeader: (colspan$ | async) !== (footerColspan$ | async)\n } as footerRow\"\n >\n <th\n *ngIf=\"footerRow.showHeader\"\n [colSpan]=\"\n ((colspan$ | async) || 0) - ((footerColspan$ | async) || 0)\n \"\n scope=\"row\"\n >\n <ng-container\n *ngIf=\"table.config?.footer?.headers?.[calculation] as showHeader\"\n >{{showHeader === true ? (calculation | capitalCase): table.config.footer?.headers?.[calculation]}}\n </ng-container>\n </th>\n <ng-container\n *ngFor=\"\n let column of table.config?.columns | keyvalue: columnOrder\n \"\n >\n <td\n *ngIf=\"\n !column.value?.hidden && calculations.calculated[column.key]\n \"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value.class\n }}\"\n [attr.data-header]=\"\n !footerRow.showHeader && table.config.footer?.headers?.[calculation]\n ? table.config.footer?.headers?.[calculation] === true ? (calculation | capitalCase) : table.config.footer?.headers?.[calculation]\n : null\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config.columns || {})[column.key].transform\n ? transformFooter\n : rawFooter\n \"\n [ngTemplateOutletContext]=\"{\n value: calculations.calculated[column.key][calculation],\n transform: (table.config.columns || {})[column.key]\n .transform\n }\"\n ></ng-container>\n </td>\n </ng-container>\n </ng-container>\n </tr>\n </ng-container>\n </ng-container>\n </tfoot>\n</table>\n<ng-template #tableContent>\n <ng-container *ngIf=\"(table$ | async)! as table\">\n <tbody *ngIf=\"(table!.data![0] || table!.data!).length > 0; else noData\">\n <ng-container *ngIf=\"table.config.columns\">\n <tr\n *ngFor=\"\n let row of table!.data![(currentPage$ | async) || 0];\n let i = index\n \"\n [attr.id]=\"'tableRow_' + i\"\n (click)=\"table?.config?.rowClick && _rowClick(row, i, $event)\"\n (mouseover)=\"table?.config?.rowHover && _hoverRow(row, i, $event)\"\n (mouseout)=\"table?.config?.rowHover && _hoverRow(null, null, $event)\"\n [class.gt-hover]=\"(rowHover$ | async)?.index === i\"\n >\n <ng-container\n *ngFor=\"let column of table.config?.columns | keyvalue: columnOrder\"\n >\n <td\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ (column.key | dashCase) + '-column' }} {{\n column.value.class\n }}\"\n [attr.data-label]=\"\n table.config.mobileLayout && column.value.mobileHeader\n ? column.value.mobileHeader !== true\n ? column.value.mobileHeader\n : (column.value.header || column.key | capitalCase)\n : null\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (searchBy$ | async) &&\n !(table.config.columns || {})[column.key].templateRef\n ? highlighted\n : (table.config.columns || {})[column.key].templateRef\n ? templateRef\n : (table.config.columns || {})[column.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: row,\n column: column,\n search: (searchBy$ | async),\n transform: (table.config.columns || {})[column.key].transform,\n templateRef: (table.config.columns || {})[column.key]\n .templateRef,\n index: i,\n data: table.data[(currentPage$ | async) || 0]\n }\"\n ></ng-container>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n <ng-container *ngIf=\"table.config.rows\">\n <ng-container\n *ngFor=\"\n let row of table?.config?.rows | keyvalue: columnOrder | slice: 1;\n let i = index\n \"\n >\n <tr\n *ngIf=\"!row.value?.hidden\"\n [attr.id]=\"'tableRow_' + i\"\n ngClass=\"{{ (row.key | dashCase) + '-row' }}\"\n (click)=\"table?.config?.rowClick && _rowClick(row, i, $event)\"\n (mouseover)=\"table?.config?.rowHover && _hoverRow(row, i, $event)\"\n (mouseout)=\"\n table?.config?.rowHover && _hoverRow(null, null, $event)\n \"\n [class.gt-hover]=\"(rowHover$ | async)?.index === i\"\n >\n <th class=\"row-header\" scope=\"row\">\n {{ row.value.header || row.key | capitalCase }}\n </th>\n <td\n *ngFor=\"let column of (table?.data || [])[0]; let y = index\"\n ngClass=\"{{ row.value.class }}\"\n >\n <ng-container\n [ngTemplateOutlet]=\"\n (table.config.rows || {})[row.key].templateRef\n ? templateRef\n : (table.config.rows || {})[row.key].transform\n ? transformData\n : rawData\n \"\n [ngTemplateOutletContext]=\"{\n row: column,\n column: row,\n transform: (table.config.rows || {})[row.key].transform,\n templateRef: (table.config.rows || {})[row.key].templateRef,\n index: table.config.rows ? y : i,\n data: table.data[(currentPage$ | async) || 0]\n }\"\n >\n </ng-container>\n </td>\n </tr>\n </ng-container>\n </ng-container>\n </tbody>\n </ng-container>\n</ng-template>\n<ng-template #noData>\n <tbody>\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-no-data\"></ng-content>\n </td>\n </tr>\n </tbody>\n</ng-template>\n<ng-template\n #highlighted\n let-row=\"row\"\n let-column=\"column\"\n let-search=\"search\"\n let-transform=\"transform\"\n>\n <div\n *ngIf=\"!transform\"\n [innerHTML]=\"row[column.key] | highlight: search\"\n ></div>\n <div\n *ngIf=\"transform\"\n [innerHTML]=\"\n row[column.key]\n | dynamicPipe: transform.pipe:transform?.args\n | highlight: search\n \"\n ></div>\n</ng-template>\n<ng-template #rawData let-row=\"row\" let-column=\"column\">\n {{ row[column.key] }}\n</ng-template>\n<ng-template\n #transformData\n let-row=\"row\"\n let-column=\"column\"\n let-transform=\"transform\"\n let-data=\"data\"\n>\n {{ row[column.key] | dynamicPipe: transform.pipe:transform?.args }}\n</ng-template>\n<ng-template #transformFooter let-value=\"value\" let-transform=\"transform\">\n {{\n (value | dynamicPipe: transform.pipe:transform?.args) ||\n (tableConfig$ | async)?.footer?.emptyContent\n }}\n</ng-template>\n<ng-template #rawFooter let-value=\"value\">\n {{ value || (tableConfig$ | async)?.footer?.emptyContent }}\n</ng-template>\n<ng-template\n #templateRef\n let-row=\"row\"\n let-column=\"column\"\n let-index=\"index\"\n let-templateRef=\"templateRef\"\n let-data=\"data\"\n>\n <ng-container\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{\n row: row,\n col: column,\n index: index,\n data: data\n }\"\n ></ng-container>\n</ng-template>\n" }]
150
199
  }], propDecorators: { loading: [{
151
200
  type: Input
152
201
  }], page: [{
@@ -157,5 +206,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
157
206
  type: Input
158
207
  }], data: [{
159
208
  type: Input
209
+ }], rowClick: [{
210
+ type: Output
211
+ }], rowHover: [{
212
+ type: Output
160
213
  }] } });
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixLQUFLLEVBQ0wsWUFBWSxFQUVaLEVBQUUsRUFDRixhQUFhLEVBQ2IsT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBR2QsT0FBTyxFQUNMLEdBQUcsRUFDSCxXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7QUFXdEQsTUFBTSxPQUFPLGFBQWE7SUFOMUI7UUF1Q1UsY0FBUyxHQUNmLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLFlBQU8sR0FBdUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUk1Qyx5Q0FBeUM7UUFDakMsZUFBVSxHQUNoQixJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixjQUFTLEdBQThCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUN6RCxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQ2IsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FB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RyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQ25ELE1BQU0sQ0FDUCxDQUFDO0lBQ0osQ0FBQzs7MkdBek5VLGFBQWE7K0ZBQWIsYUFBYSw2SkNqQzFCLDAxUUFvUEE7NEZEbk5hLGFBQWE7a0JBTnpCLFNBQVM7K0JBQ0UsdUJBQXVCLFVBRXpCLEVBQUUsbUJBQ08sdUJBQXVCLENBQUMsTUFBTTs4QkFHbEMsT0FBTztzQkFBbkIsS0FBSztnQkFJRixJQUFJO3NCQURQLEtBQUs7Z0JBTUYsTUFBTTtzQkFEVCxLQUFLO2dCQU1GLE1BQU07c0JBRFQsS0FBSztnQkFNRixJQUFJO3NCQURQLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBFTVBUWSxcbiAgaXNPYnNlcnZhYmxlLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgUmVwbGF5U3ViamVjdCxcbiAgU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgbWFwLFxuICBzaGFyZVJlcGxheSxcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHdpdGhMYXRlc3RGcm9tLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLWNvbHVtbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT3JkZXIgfSBmcm9tICcuL2VudW1zL29yZGVyLmVudW0nO1xuaW1wb3J0IHsgY2h1bmssIHNlYXJjaCB9IGZyb20gJy4vdXRpbGl0aWVzL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBUYWJsZVJvdyB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLXJvdy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVTb3J0IH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtc29ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVNZXRhIH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtbWV0YS5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhbmd1bGFyLWdlbmVyaWMtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb3JlQ29tcG9uZW50IHtcbiAgQElucHV0KCkgc2V0IGxvYWRpbmcoaXNMb2FkaW5nOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbikge1xuICAgIHRoaXMuX2xvYWRpbmckLm5leHQoaXNMb2FkaW5nKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgcGFnZShwYWdlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9jdXJyZW50UGFnZSQubmV4dChwYWdlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBzZWFyY2goc3RyaW5nOiBPYnNlcnZhYmxlPHN0cmluZz4gfCBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5fc2VhcmNoQnkkLm5leHQoc3RyaW5nKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBjb25maWcoY29uZmlnOiBPYnNlcnZhYmxlPFRhYmxlQ29uZmlnPiB8IFRhYmxlQ29uZmlnKSB7XG4gICAgdGhpcy5fdGFibGVDb25maWckLm5leHQoY29uZmlnKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhKGRhdGE6IE9ic2VydmFibGU8QXJyYXk8VGFibGVSb3c+PiB8IEFycmF5PFRhYmxlUm93Pikge1xuICAgIHRoaXMuX2RhdGEkLm5leHQoZGF0YSk7XG4gIH1cblxuICBnZXQgbG9hZGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmckLnBpcGUoXG4gICAgICBzdGFydFdpdGgoZmFsc2UpLFxuICAgICAgbWFwKCh2YWx1ZSkgPT4gKGlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyB2YWx1ZSA6IG9mKHZhbHVlKSkpLFxuICAgICAgc3dpdGNoTWFwKChvYnMpID0+IG9icyksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkaW5nJDogUmVwbGF5U3ViamVjdDxPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbj4gPVxuICAgIG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuICBzb3J0QnkkOiBTdWJqZWN0PFRhYmxlU29ydD4gPSBuZXcgU3ViamVjdCgpO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICBwcml2YXRlIF9zb3J0Qnk6IFRhYmxlU29ydCB8IHVuZGVmaW5lZDtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICBwcml2YXRlIF9zZWFyY2hCeSQ6IFJlcGxheVN1YmplY3Q8T2JzZXJ2YWJsZTxzdHJpbmc+IHwgc3RyaW5nIHwgbnVsbD4gPVxuICAgIG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuICBzZWFyY2hCeSQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4gPSB0aGlzLl9zZWFyY2hCeSQucGlwZShcbiAgICBzdGFydFdpdGgoJycpLFxuICAgIG1hcCgodmFsdWUpID0+IChpc09ic2VydmFibGUodmFsdWUpID8gdmFsdWUgOiBvZih2YWx1ZSkpKSxcbiAgICBzd2l0Y2hNYXAoKG9icykgPT4gb2JzKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gIHByaXZhdGUgX3RhYmxlQ29uZmlnJDogUmVwbGF5U3ViamVjdDxUYWJsZUNvbmZpZyB8IE9ic2VydmFibGU8VGFibGVDb25maWc+PiA9XG4gICAgbmV3IFJlcGxheVN1YmplY3QoMSk7XG4gIHRhYmxlQ29uZmlnJDogT2JzZXJ2YWJsZTxUYWJsZUNvbmZpZz4gPSB0aGlzLl90YWJsZUNvbmZpZyQucGlwZShcbiAgICBtYXAoKHZhbHVlKSA9PiAoaXNPYnNlcnZhYmxlKHZhbHVlKSA/IHZhbHVlIDogb2YodmFsdWUpKSksXG4gICAgc3dpdGNoTWFwKChvYnMpID0+IG9icyksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBwcml2YXRlIF9kYXRhJDogUmVwbGF5U3ViamVjdDxBcnJheTxUYWJsZVJvdz4gfCBPYnNlcnZhYmxlPEFycmF5PFRhYmxlUm93Pj4+ID1cbiAgICBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgZGF0YSQ6IE9ic2VydmFibGU8QXJyYXk8VGFibGVSb3c+PiA9IHRoaXMuX2RhdGEkLnBpcGUoXG4gICAgbWFwKCh2YWx1ZSkgPT4gKGlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyB2YWx1ZSA6IG9mKHZhbHVlKSkpLFxuICAgIHN3aXRjaE1hcCgob2JzKSA9PiBjb21iaW5lTGF0ZXN0KFtvYnNdKSksXG4gICAgd2l0aExhdGVzdEZyb20odGhpcy50YWJsZUNvbmZpZyQpLFxuICAgIG1hcCgoW1tkYXRhXSwgY29uZmlnXSkgPT4ge1xuICAgICAgLy8gaWYgY29sdW1ucyBvciByb3dzIGNvbnRhaW5zIGNvbmZpZyBmb3IgbWFwVG8uLi5cbiAgICAgIGlmIChcbiAgICAgICAgKGNvbmZpZy5jb2x1bW5zICYmXG4gICAgICAgICAgISFPYmplY3QudmFsdWVzKGNvbmZpZy5jb2x1bW5zKS5maW5kKChjb2x1bW4pID0+ICEhY29sdW1uLm1hcFRvKSkgfHxcbiAgICAgICAgKGNvbmZpZy5yb3dzICYmXG4gICAgICAgICAgISFPYmplY3QudmFsdWVzKGNvbmZpZy5yb3dzKS5maW5kKChjb2x1bW4pID0+ICEhY29sdW1uLm1hcFRvKSlcbiAgICAgICkge1xuICAgICAgICAvLyAuLi5tYXAgZGF0YSB0byBuZXcga2V5cyBvbiByb3cuLi5cbiAgICAgICAgZGF0YSA9IGRhdGEubWFwKChyb3cpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdLZXlzID0gT2JqZWN0LmVudHJpZXMoY29uZmlnLmNvbHVtbnMgfHwgY29uZmlnLnJvd3MgfHwgW10pXG4gICAgICAgICAgICAuZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+ICEhdmFsdWUubWFwVG8pIC8vIGFkZCBrZXlzIGZvciBjb2x1bW5zIHdpdGggbWFwVG8gY29uZmlnLi4uXG4gICAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgICAocHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnByZXZpb3VzVmFsdWUsXG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgIFtjdXJyZW50VmFsdWVbMF1dOiB0aGlzLm5lc3RlZFZhbHVlKFxuICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlWzFdLm1hcFRvIS5wYXRoLFxuICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlWzFdLm1hcFRvPy5taXNzaW5nVmFsdWVcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ucm93LCAuLi5uZXdLZXlzIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZGF0YSwgY29uZmlnIH07XG4gICAgfSksXG4gICAgc3dpdGNoTWFwKChvYnMpID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgb2Yob2JzKSxcbiAgICAgICAgdGhpcy5zb3J0QnkkLnBpcGUoc3RhcnRXaXRoKEVNUFRZKSksXG4gICAgICAgIHRoaXMuc2VhcmNoQnkkLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcCgoW3RhYmxlLCBzb3J0QnksIHNlYXJjaEJ5XSkgPT4ge1xuICAgICAgLy8gY3JlYXRlIGEgbmV3IGFycmF5IHJlZmVyZW5jZSBhbmQgc29ydCBuZXcgYXJyYXkgKHByZXZlbnQgbXV0YXRpbmcgZXhpc3Rpbmcgc3RhdGUpXG4gICAgICB0YWJsZS5kYXRhID0gWy4uLnRhYmxlLmRhdGFdO1xuICAgICAgcmV0dXJuICFzb3J0QnlcbiAgICAgICAgPyBzZWFyY2hCeVxuICAgICAgICAgID8gc2VhcmNoKHNlYXJjaEJ5LCBmYWxzZSwgdGFibGUuZGF0YSwgdGFibGUuY29uZmlnKVxuICAgICAgICAgIDogdGFibGUuZGF0YVxuICAgICAgICA6IChzZWFyY2hCeVxuICAgICAgICAgICAgPyBzZWFyY2goc2VhcmNoQnksIGZhbHNlLCB0YWJsZS5kYXRhLCB0YWJsZS5jb25maWcpXG4gICAgICAgICAgICA6IHRhYmxlLmRhdGFcbiAgICAgICAgICApPy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAvLyBUT0RPOiBpbXByb3ZlIGxvZ2ljXG4gICAgICAgICAgICBjb25zdCB0eXBlZCA9IHNvcnRCeSBhcyBUYWJsZVNvcnQ7XG4gICAgICAgICAgICByZXR1cm4gYVt0eXBlZC5zb3J0QnldID4gYlt0eXBlZC5zb3J0QnldXG4gICAgICAgICAgICAgID8gdHlwZWQuc29ydEJ5T3JkZXIgPT09IE9yZGVyLkFTQ1xuICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgIDogLTFcbiAgICAgICAgICAgICAgOiBiW3R5cGVkLnNvcnRCeV0gPiBhW3R5cGVkLnNvcnRCeV1cbiAgICAgICAgICAgICAgPyB0eXBlZC5zb3J0QnlPcmRlciA9PT0gT3JkZXIuQVNDXG4gICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgIDogMVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgfSk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICB0YWJsZSQ6IE9ic2VydmFibGU8VGFibGVNZXRhPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuZGF0YSQsXG4gICAgdGhpcy50YWJsZUNvbmZpZyQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbc29ydGVkLCBjb25maWddKSA9PiB7XG4gICAgICAvLyBpZiBwYWdpbmF0aW9uIGlzIGRpc2FibGVkLi4uXG4gICAgICBpZiAoIWNvbmZpZy5wYWdpbmF0aW9uIHx8IGNvbmZpZy5wYWdpbmF0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyAuLi5yZXR1cm4gdW5hbHRlcmVkIGFycmF5XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogW3NvcnRlZF0sXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGluZm86IHsgcmVjb3Jkczogc29ydGVkLmxlbmd0aCwgcGFnZVRvdGFsOiAxIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gcmVjb3JkIHNldFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogY2h1bmsoc29ydGVkLCArKGNvbmZpZy5wYWdpbmF0aW9uLmxlbmd0aCB8fCAwKSksXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgaW5mbzoge1xuICAgICAgICAgIHJlY29yZHM6IHNvcnRlZC5sZW5ndGgsXG4gICAgICAgICAgcGFnZVRvdGFsOiBNYXRoLmNlaWwoXG4gICAgICAgICAgICBzb3J0ZWQubGVuZ3RoIC8gKyhjb25maWcucGFnaW5hdGlvbi5sZW5ndGggfHwgMClcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRQYWdlJDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDApO1xuICBjdXJyZW50UGFnZSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9jdXJyZW50UGFnZSQsIHRoaXMudGFibGUkXSkucGlwZShcbiAgICBtYXAoKFtwYWdlLCB0YWJsZV06IGFueSkgPT4ge1xuICAgICAgLy8gZGV0ZXJtaW5lIGxhc3QgcGFnZVxuICAgICAgY29uc3QgbGFzdFBhZ2UgPVxuICAgICAgICBNYXRoLmNlaWwoXG4gICAgICAgICAgdGFibGUuaW5mby5yZWNvcmRzIC9cbiAgICAgICAgICAgICh0YWJsZS5jb25maWc/LnBhZ2luYXRpb24/Lmxlbmd0aCB8fCB0YWJsZS5pbmZvLnJlY29yZHMpXG4gICAgICAgICkgLSAxO1xuICAgICAgLy8gZGV0ZXJtaW5lIG1heC9taW4gcG9zaXRpb25cbiAgICAgIHJldHVybiArcGFnZSA8IDAgPyAwIDogK3BhZ2UgPiBsYXN0UGFnZSA/IGxhc3RQYWdlIDogK3BhZ2U7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBjb2xzcGFuJCA9IHRoaXMudGFibGVDb25maWckLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjb25maWcpID0+XG4gICAgICBjb25maWcuY29sdW1uc1xuICAgICAgICA/IG9mKFxuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhjb25maWcuY29sdW1ucyB8fCBjb25maWcucm93cyB8fCB7fSkuZmlsdGVyKFxuICAgICAgICAgICAgICAodmFsdWUpID0+IHZhbHVlLmhpZGRlbiAhPT0gdHJ1ZVxuICAgICAgICAgICAgKS5sZW5ndGhcbiAgICAgICAgICApXG4gICAgICAgIDogdGhpcy5kYXRhJC5waXBlKG1hcCgoZGF0YSkgPT4gZGF0YS5sZW5ndGggKyAxKSlcbiAgICApXG4gICk7XG5cbiAgc29ydChwcm9wZXJ0eTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmV3U29ydE9yZGVyID1cbiAgICAgIHRoaXMuX3NvcnRCeT8uc29ydEJ5ICE9PSBwcm9wZXJ0eSB8fFxuICAgICAgdGhpcy5fc29ydEJ5Py5zb3J0QnlPcmRlciA9PT0gT3JkZXIuREVTQyB8fFxuICAgICAgIXRoaXMuX3NvcnRCeS5zb3J0QnlPcmRlclxuICAgICAgICA/IE9yZGVyLkFTQ1xuICAgICAgICA6IE9yZGVyLkRFU0M7XG4gICAgY29uc3QgbmV3U29ydEJ5ID0ge1xuICAgICAgc29ydEJ5OiBwcm9wZXJ0eSxcbiAgICAgIHNvcnRCeU9yZGVyOiBuZXdTb3J0T3JkZXIsXG4gICAgfTtcbiAgICB0aGlzLnNvcnRCeSQubmV4dChuZXdTb3J0QnkpO1xuICAgIHRoaXMuX3NvcnRCeSA9IG5ld1NvcnRCeTtcbiAgfVxuXG4gIGNvbHVtbk9yZGVyID0gKFxuICAgIGE6IEtleVZhbHVlPHN0cmluZywgVGFibGVDb2x1bW4+LFxuICAgIGI6IEtleVZhbHVlPHN0cmluZywgVGFibGVDb2x1bW4+XG4gICk6IG51bWJlciA9PiB7XG4gICAgcmV0dXJuIChhLnZhbHVlLm9yZGVyIHx8IDApIC0gKGIudmFsdWUub3JkZXIgfHwgMCk7XG4gIH07XG5cbiAgbmVzdGVkVmFsdWUoXG4gICAgb2JqZWN0OiBhbnksXG4gICAgbWFwVG86IHN0cmluZyxcbiAgICBtaXNzaW5nVmFsdWU6IHN0cmluZyB8IG51bWJlciB8IG51bGwgPSBudWxsXG4gICk6IHVua25vd24ge1xuICAgIGNvbnN0IGxldmVscyA9IG1hcFRvLnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIGxldmVscy5yZWR1Y2UoXG4gICAgICAocHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlLCBpbmRleCkgPT5cbiAgICAgICAgcHJldmlvdXNWYWx1ZVtjdXJyZW50VmFsdWVdIHx8XG4gICAgICAgIChpbmRleCA9PT0gbGV2ZWxzLmxlbmd0aCAtIDEgPyBtaXNzaW5nVmFsdWUgOiB7fSksXG4gICAgICBvYmplY3RcbiAgICApO1xuICB9XG59XG4iLCI8dGFibGVcbiAgW25nQ2xhc3NdPVwiKHRhYmxlQ29uZmlnJCB8IGFzeW5jKT8uY2xhc3MgfHwgJ3RhYmxlJ1wiXG4gIFtjbGFzcy50YWJsZS1tb2JpbGVdPVwiKHRhYmxlQ29uZmlnJCB8IGFzeW5jKT8ubW9iaWxlTGF5b3V0XCJcbiAgW2NsYXNzLnRhYmxlLWhvcml6b250YWxdPVwiKHRhYmxlQ29uZmlnJCB8IGFzeW5jKT8ucm93c1wiXG4gIFtjbGFzcy50YWJsZS1sb2FkaW5nXT1cImxvYWRpbmckIHwgYXN5bmNcIlxuICBbY2xhc3MuZ3Qtc3RpY2t5LXJvdy1oZWFkZXJdPVwiXG4gICAgKHRhYmxlQ29uZmlnJCB8IGFzeW5jKT8uc3RpY2t5SGVhZGVycz8ucm93ICYmICh0YWJsZUNvbmZpZyQgfCBhc3luYyk/LnJvd3NcbiAgXCJcbiAgW2NsYXNzLmd0LXN0aWNreS1jb2x1bW4taGVhZGVyXT1cIlxuICAgICh0YWJsZUNvbmZpZyQgfCBhc3luYyk/LnN0aWNreUhlYWRlcnM/LmNvbHVtblxuICBcIlxuICBbYXR0ci5hcmlhLWJ1c3ldPVwiKGxvYWRpbmckIHwgYXN5bmMpID09PSB0cnVlID8gdHJ1ZSA6IG51bGxcIlxuPlxuICA8dGhlYWQ+XG4gICAgPHRyXG4gICAgICAqbmdJZj1cIntcbiAgICAgICAgY29uZmlnOiAodGFibGVDb25maWckIHwgYXN5bmMpISxcbiAgICAgICAgaXNMb2FkaW5nOiBsb2FkaW5nJCB8IGFzeW5jXG4gICAgICB9IGFzIHRhYmxlXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGFibGU/LmNvbmZpZz8uY29sdW1ucyB8IGtleXZhbHVlOiBjb2x1bW5PcmRlclwiXG4gICAgICA+XG4gICAgICAgIDx0aFxuICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi52YWx1ZT8uaGlkZGVuXCJcbiAgICAgICAgICBuZ0NsYXNzPVwie3sgKGNvbHVtbi5rZXkgfCBkYXNoQ2FzZSkgKyAnLWNvbHVtbicgfX0ge3tcbiAgICAgICAgICAgIGNvbHVtbi52YWx1ZS5jbGFzc1xuICAgICAgICAgIH19XCJcbiAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwidGFibGUuaXNMb2FkaW5nXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXNvcnRdPVwic29ydEJ5JCB8IGFzeW5jIHwgc29ydENsYXNzOiBjb2x1bW4ua2V5OnRydWVcIlxuICAgICAgICAgIFtjbGFzcy5ndC1zb3J0YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImNvbHVtbi52YWx1ZT8uc29ydGFibGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJndC1zb3J0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgdGFibGUuaXNMb2FkaW5nIHx8ICFjb2x1bW4udmFsdWU/LnNvcnRhYmxlIHx8IHNvcnQoY29sdW1uLmtleSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4udmFsdWU/LmhlYWRlciAhPT0gZmFsc2VcIj57e1xuICAgICAgICAgICAgICBjb2x1bW4udmFsdWU/LmhlYWRlciB8fCBjb2x1bW4ua2V5IHwgY2FwaXRhbENhc2VcbiAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cIiFjb2x1bW4udmFsdWU/LnNvcnRhYmxlICYmIGNvbHVtbi52YWx1ZT8uaGVhZGVyICE9PSBmYWxzZVwiXG4gICAgICAgICAgICA+e3sgY29sdW1uLnZhbHVlPy5oZWFkZXIgfHwgY29sdW1uLmtleSB8IGNhcGl0YWxDYXNlIH19PC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICA8L3RoPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgKCh0YWJsZT8uY29uZmlnPy5yb3dzIHwga2V5dmFsdWU6IGNvbHVtbk9yZGVyKSB8fCBbXSlbMF0gYXMgaGVhZGVyUm93XG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDx0aFxuICAgICAgICAgIGNsYXNzPVwicm93LWhlYWRlclwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1zb3J0XT1cInNvcnRCeSQgfCBhc3luYyB8IHNvcnRDbGFzczogaGVhZGVyUm93LmtleTp0cnVlXCJcbiAgICAgICAgICBuZ0NsYXNzPVwie3sgaGVhZGVyUm93LnZhbHVlPy5zb3J0YWJsZSA/ICdzb3J0ICcgOiAnJyB9fSB7e1xuICAgICAgICAgICAgc29ydEJ5JCB8IGFzeW5jIHwgc29ydENsYXNzOiBoZWFkZXJSb3cua2V5XG4gICAgICAgICAgfX0ge3sgKGhlYWRlclJvdy5rZXkgfCBkYXNoQ2FzZSkgKyAnLWNvbHVtbicgfX1cIlxuICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgIHRhYmxlLmlzTG9hZGluZyB8fCAhaGVhZGVyUm93LnZhbHVlPy5zb3J0YWJsZSB8fCBzb3J0KGhlYWRlclJvdy5rZXkpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyUm93Py52YWx1ZT8uaGVhZGVyICE9PSBmYWxzZVwiPnt7XG4gICAgICAgICAgICBoZWFkZXJSb3c/LnZhbHVlPy5oZWFkZXIgfHwgaGVhZGVyUm93LmtleSB8IGNhcGl0YWxDYXNlXG4gICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiAoKHRhYmxlJCB8IGFzeW5jKT8uZGF0YSB8fCBbXSlbMF1cIlxuICAgICAgICAgIG5nQ2xhc3M9XCJ7eyBoZWFkZXJSb3cudmFsdWU/LmNsYXNzIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIlxuICAgICAgICAgICAgICAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtoZWFkZXJSb3cua2V5XS50ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgICAgID8gdGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICA6ICh0YWJsZS5jb25maWc/LnJvd3MgfHwge30pW2hlYWRlclJvdy5rZXldLnRyYW5zZm9ybVxuICAgICAgICAgICAgICAgID8gdHJhbnNmb3JtRGF0YVxuICAgICAgICAgICAgICAgIDogcmF3RGF0YVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgIHJvdzogY29sdW1uLFxuICAgICAgICAgICAgICBjb2x1bW46IGhlYWRlclJvdyxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtoZWFkZXJSb3cua2V5XS50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgIHRlbXBsYXRlUmVmOiAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtoZWFkZXJSb3cua2V5XVxuICAgICAgICAgICAgICAgIC50ZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgaW5kZXg6IDBcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90aD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG4gIDx0Ym9keSAqbmdJZj1cImxvYWRpbmckIHwgYXN5bmM7IGVsc2UgdGFibGVDb250ZW50XCI+XG4gICAgPHRyPlxuICAgICAgPHRkIGNsYXNzPVwicC0wXCIgW2NvbFNwYW5dPVwiY29sc3BhbiQgfCBhc3luY1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIudGFibGUtbG9hZGluZ1wiPjwvbmctY29udGVudD5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvdGFibGU+XG48bmctdGVtcGxhdGUgI3RhYmxlQ29udGVudD5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIih0YWJsZSQgfCBhc3luYykhIGFzIHRhYmxlXCI+XG4gICAgPHRib2R5ICpuZ0lmPVwiKHRhYmxlIS5kYXRhIVswXSB8fCB0YWJsZSEuZGF0YSEpLmxlbmd0aCA+IDA7IGVsc2Ugbm9EYXRhXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGUuY29uZmlnLmNvbHVtbnNcIj5cbiAgICAgICAgPHRyXG4gICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICBsZXQgcm93IG9mIHRhYmxlIS5kYXRhIVsoY3VycmVudFBhZ2UkIHwgYXN5bmMpIHx8IDBdO1xuICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2F0dHIuaWRdPVwiJ3RhYmxlUm93XycgKyBpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGFibGUuY29uZmlnPy5jb2x1bW5zIHwga2V5dmFsdWU6IGNvbHVtbk9yZGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgKm5nSWY9XCIhY29sdW1uLnZhbHVlPy5oaWRkZW5cIlxuICAgICAgICAgICAgICBuZ0NsYXNzPVwie3sgKGNvbHVtbi5rZXkgfCBkYXNoQ2FzZSkgKyAnLWNvbHVtbicgfX0ge3tcbiAgICAgICAgICAgICAgICBjb2x1bW4udmFsdWU/LmNsYXNzXG4gICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICB0YWJsZS5jb25maWc/Lm1vYmlsZUxheW91dCAmJiBjb2x1bW4udmFsdWU/Lm1vYmlsZUhlYWRlclxuICAgICAgICAgICAgICAgICAgPyBjb2x1bW4udmFsdWU/Lm1vYmlsZUhlYWRlciAhPT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi52YWx1ZT8ubW9iaWxlSGVhZGVyXG4gICAgICAgICAgICAgICAgICAgIDogKGNvbHVtbi52YWx1ZT8uaGVhZGVyIHx8IGNvbHVtbi5rZXkgfCBjYXBpdGFsQ2FzZSlcbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiXG4gICAgICAgICAgICAgICAgICAoc2VhcmNoQnkkIHwgYXN5bmMpICYmXG4gICAgICAgICAgICAgICAgICAhKHRhYmxlLmNvbmZpZz8uY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV0udGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgPyBoaWdobGlnaHRlZFxuICAgICAgICAgICAgICAgICAgICA6ICh0YWJsZS5jb25maWc/LmNvbHVtbnMgfHwge30pW2NvbHVtbi5rZXldLnRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgICAgICAgID8gdGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgOiAodGFibGUuY29uZmlnPy5jb2x1bW5zIHx8IHt9KVtjb2x1bW4ua2V5XS50cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICAgICAgPyB0cmFuc2Zvcm1EYXRhXG4gICAgICAgICAgICAgICAgICAgIDogcmF3RGF0YVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICBzZWFyY2g6IChzZWFyY2hCeSQgfCBhc3luYyksXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICh0YWJsZS5jb25maWc/LmNvbHVtbnMgfHwge30pW2NvbHVtbi5rZXldXG4gICAgICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVJlZjogKHRhYmxlLmNvbmZpZz8uY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV1cbiAgICAgICAgICAgICAgICAgICAgLnRlbXBsYXRlUmVmLFxuICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YWJsZS5kYXRhWyhjdXJyZW50UGFnZSQgfCBhc3luYykgfHwgMF1cbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlLmNvbmZpZy5yb3dzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgIGxldCByb3cgb2YgdGFibGU/LmNvbmZpZz8ucm93cyB8IGtleXZhbHVlOiBjb2x1bW5PcmRlciB8IHNsaWNlOiAxO1xuICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8dHJcbiAgICAgICAgICAgICpuZ0lmPVwiIXJvdy52YWx1ZT8uaGlkZGVuXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cIid0YWJsZVJvd18nICsgaVwiXG4gICAgICAgICAgICBuZ0NsYXNzPVwie3sgKHJvdy5rZXkgfCBkYXNoQ2FzZSkgKyAnLXJvdycgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cInJvdy1oZWFkZXJcIiBzY29wZT1cInJvd1wiPlxuICAgICAgICAgICAgICB7eyByb3cudmFsdWU/LmhlYWRlciB8fCByb3cua2V5IHwgY2FwaXRhbENhc2UgfX1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiAodGFibGU/LmRhdGEgfHwgW10pWzBdOyBsZXQgeSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgbmdDbGFzcz1cInt7IHJvdy52YWx1ZT8uY2xhc3MgfX1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiXG4gICAgICAgICAgICAgICAgICAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtyb3cua2V5XS50ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgICAgICAgICA/IHRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgICAgICAgIDogKHRhYmxlLmNvbmZpZz8ucm93cyB8fCB7fSlbcm93LmtleV0udHJhbnNmb3JtXG4gICAgICAgICAgICAgICAgICAgID8gdHJhbnNmb3JtRGF0YVxuICAgICAgICAgICAgICAgICAgICA6IHJhd0RhdGFcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICByb3c6IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIGNvbHVtbjogcm93LFxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtyb3cua2V5XS50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVJlZjogKHRhYmxlLmNvbmZpZz8ucm93cyB8fCB7fSlbcm93LmtleV0udGVtcGxhdGVSZWYsXG4gICAgICAgICAgICAgICAgICBpbmRleDogdGFibGUuY29uZmlnPy5yb3dzID8geSA6IGksXG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YWJsZS5kYXRhWyhjdXJyZW50UGFnZSQgfCBhc3luYykgfHwgMF1cbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3Rib2R5PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI25vRGF0YT5cbiAgPHRib2R5PlxuICAgIDx0cj5cbiAgICAgIDx0ZCBjbGFzcz1cInAtMFwiIFtjb2xTcGFuXT1cImNvbHNwYW4kIHwgYXN5bmNcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnRhYmxlLW5vLWRhdGFcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGJvZHk+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNoaWdobGlnaHRlZCBsZXQtcm93PVwicm93XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiIGxldC1zZWFyY2g9XCJzZWFyY2hcIj5cbiAgPGRpdiBbaW5uZXJIVE1MXT1cInJvd1tjb2x1bW4ua2V5XSB8IGhpZ2hsaWdodDogc2VhcmNoXCI+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyYXdEYXRhIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIHt7IHJvd1tjb2x1bW4ua2V5XSB9fVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZVxuICAjdHJhbnNmb3JtRGF0YVxuICBsZXQtcm93PVwicm93XCJcbiAgbGV0LWNvbHVtbj1cImNvbHVtblwiXG4gIGxldC10cmFuc2Zvcm09XCJ0cmFuc2Zvcm1cIlxuICBsZXQtZGF0YT1cImRhdGFcIlxuPlxuICB7eyByb3dbY29sdW1uLmtleV0gfCBkeW5hbWljUGlwZTogdHJhbnNmb3JtLnBpcGU6dHJhbnNmb3JtPy5hcmdzIH19XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlXG4gICN0ZW1wbGF0ZVJlZlxuICBsZXQtcm93PVwicm93XCJcbiAgbGV0LWNvbHVtbj1cImNvbHVtblwiXG4gIGxldC1pbmRleD1cImluZGV4XCJcbiAgbGV0LXRlbXBsYXRlUmVmPVwidGVtcGxhdGVSZWZcIlxuICBsZXQtZGF0YT1cImRhdGFcIlxuPlxuICA8bmctY29udGFpbmVyXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVSZWZcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICByb3c6IHJvdyxcbiAgICAgIGNvbDogY29sdW1uLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgZGF0YTogZGF0YVxuICAgIH1cIlxuICA+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixLQUFLLEVBQ0wsWUFBWSxFQUVaLEVBQUUsRUFDRixhQUFhLEVBQ2IsT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osT0FBTyxFQUNQLE9BQU8sRUFDUCxJQUFJLEVBQ0osZ0JBQWdCLEVBQ2hCLFNBQVMsR0FDVixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLEdBQUcsRUFDSCxXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxJQUFJLEVBQ0osR0FBRyxFQUNILGNBQWMsR0FDZixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVFqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQs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QkFDaEIsU0FBUzt3QkFDVCxXQUFXO3dCQUNYLGFBQWE7d0JBQ2IsT0FBTzt3QkFDUCxJQUFJO3dCQUNKLE9BQU87cUJBQ1I7OEJBR1ksT0FBTztzQkFBbkIsS0FBSztnQkFJRixJQUFJO3NCQURQLEtBQUs7Z0JBTUYsTUFBTTtzQkFEVCxLQUFLO2dCQU1GLE1BQU07c0JBRFQsS0FBSztnQkFNRixJQUFJO3NCQURQLEtBQUs7Z0JBS0ksUUFBUTtzQkFBakIsTUFBTTtnQkFPRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgRU1QVFksXG4gIGlzT2JzZXJ2YWJsZSxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFJlcGxheVN1YmplY3QsXG4gIFN1YmplY3QsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuL21vZGVscy90YWJsZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEFzeW5jUGlwZSxcbiAgS2V5VmFsdWUsXG4gIEtleVZhbHVlUGlwZSxcbiAgTmdDbGFzcyxcbiAgTmdGb3JPZixcbiAgTmdJZixcbiAgTmdUZW1wbGF0ZU91dGxldCxcbiAgU2xpY2VQaXBlLFxufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgbWFwLFxuICBzaGFyZVJlcGxheSxcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcCxcbiAgd2l0aExhdGVzdEZyb20sXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtY29sdW1uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPcmRlciB9IGZyb20gJy4vZW51bXMvb3JkZXIuZW51bSc7XG5pbXBvcnQgeyBjYWxjdWxhdGUsIGNodW5rLCBzZWFyY2ggfSBmcm9tICcuL3V0aWxpdGllcy91dGlsaXRpZXMnO1xuaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICcuL21vZGVscy90YWJsZS1yb3cuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRhYmxlU29ydCB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLXNvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRhYmxlTWV0YSB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLW1ldGEuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEd0Um93Q2xpY2tFdmVudCxcbiAgR3RSb3dIb3ZlckV2ZW50LFxufSBmcm9tICcuL21vZGVscy90YWJsZS1ldmVudHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IENhcGl0YWxDYXNlUGlwZSB9IGZyb20gJy4vcGlwZXMvY2FwaXRhbC1jYXNlLnBpcGUnO1xuaW1wb3J0IHsgU29ydENsYXNzUGlwZSB9IGZyb20gJy4vcGlwZXMvc29ydC1jbGFzcy5waXBlJztcbmltcG9ydCB7IERhc2hDYXNlUGlwZSB9IGZyb20gJy4vcGlwZXMvZGFzaC1jYXNlLnBpcGUnO1xuaW1wb3J0IHsgRHluYW1pY1BpcGUgfSBmcm9tICcuL3BpcGVzL2R5bmFtaWMucGlwZSc7XG5pbXBvcnQgeyBIaWdobGlnaHRQaXBlIH0gZnJvbSAnLi9waXBlcy9oaWdobGlnaHQucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FuZ3VsYXItZ2VuZXJpYy10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDYXBpdGFsQ2FzZVBpcGUsXG4gICAgS2V5VmFsdWVQaXBlLFxuICAgIFNvcnRDbGFzc1BpcGUsXG4gICAgRGFzaENhc2VQaXBlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIFNsaWNlUGlwZSxcbiAgICBEeW5hbWljUGlwZSxcbiAgICBIaWdobGlnaHRQaXBlLFxuICAgIE5nQ2xhc3MsXG4gICAgTmdJZixcbiAgICBOZ0Zvck9mLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3JlQ29tcG9uZW50IHtcbiAgQElucHV0KCkgc2V0IGxvYWRpbmcoaXNMb2FkaW5nOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbikge1xuICAgIHRoaXMuX2xvYWRpbmckLm5leHQoaXNMb2FkaW5nKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgcGFnZShwYWdlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9jdXJyZW50UGFnZSQubmV4dChwYWdlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBzZWFyY2goc3RyaW5nOiBPYnNlcnZhYmxlPHN0cmluZz4gfCBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5fc2VhcmNoQnkkLm5leHQoc3RyaW5nKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBjb25maWcoY29uZmlnOiBPYnNlcnZhYmxlPFRhYmxlQ29uZmlnPGFueT4+IHwgVGFibGVDb25maWc8YW55Pikge1xuICAgIHRoaXMuX3RhYmxlQ29uZmlnJC5uZXh0KGNvbmZpZyk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgZGF0YShkYXRhOiBPYnNlcnZhYmxlPEFycmF5PFRhYmxlUm93Pj4gfCBBcnJheTxUYWJsZVJvdz4pIHtcbiAgICB0aGlzLl9kYXRhJC5uZXh0KGRhdGEpO1xuICB9XG5cbiAgQE91dHB1dCgpIHJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxHdFJvd0NsaWNrRXZlbnQ+KCk7XG5cbiAgX3Jvd0NsaWNrKHJvdzogVGFibGVSb3csIGluZGV4OiBudW1iZXIsIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5yb3dDbGljay5lbWl0KHsgcm93LCBpbmRleCwgZXZlbnQgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yb3dIb3ZlciQgPSBuZXcgUmVwbGF5U3ViamVjdDxHdFJvd0hvdmVyRXZlbnQ+KDEpO1xuICBAT3V0cHV0KCkgcm93SG92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEd0Um93SG92ZXJFdmVudD4oKTtcbiAgcm93SG92ZXIkID0gdGhpcy5fcm93SG92ZXIkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgcSkgPT4gcC5pbmRleCA9PT0gcS5pbmRleCksXG4gICAgdGFwKChldmVudCkgPT4gdGhpcy5yb3dIb3Zlci5lbWl0KGV2ZW50KSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBob3ZlclJvdyhpZDogc3RyaW5nKTogdm9pZDtcbiAgaG92ZXJSb3coaW5kZXg6IG51bWJlcik6IHZvaWQ7XG4gIGhvdmVyUm93KG5vbmU6IG51bGwpOiB2b2lkO1xuICBob3ZlclJvdyhhcmc6IHN0cmluZyB8IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuZGF0YSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChkYXRhKSA9PiBkYXRhW2FyZ10pLFxuICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyb3cpID0+IHRoaXMuX2hvdmVyUm93KHJvdywgYXJnKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IGhvdmVyIGJ5IGlkXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2hvdmVyUm93KG51bGwsIG51bGwpO1xuICAgIH1cbiAgfVxuICBfaG92ZXJSb3coXG4gICAgcm93OiBUYWJsZVJvdyB8IG51bGwsXG4gICAgaW5kZXg6IG51bWJlciB8IG51bGwsXG4gICAgZXZlbnQ/OiBNb3VzZUV2ZW50XG4gICk6IHZvaWQge1xuICAgIHRoaXMuX3Jvd0hvdmVyJC5uZXh0KHsgcm93LCBpbmRleCwgZXZlbnQgfSk7XG4gIH1cblxuICBnZXQgbG9hZGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmckLnBpcGUoXG4gICAgICBzdGFydFdpdGgoZmFsc2UpLFxuICAgICAgbWFwKCh2YWx1ZSkgPT4gKGlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyB2YWx1ZSA6IG9mKHZhbHVlKSkpLFxuICAgICAgc3dpdGNoTWFwKChvYnMpID0+IG9icyksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkaW5nJDogUmVwbGF5U3ViamVjdDxPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbj4gPVxuICAgIG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuICBzb3J0QnkkOiBTdWJqZWN0PFRhYmxlU29ydD4gPSBuZXcgU3ViamVjdCgpO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICBwcml2YXRlIF9zb3J0Qnk6IFRhYmxlU29ydCB8IHVuZGVmaW5lZDtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICBwcml2YXRlIF9zZWFyY2hCeSQ6IFJlcGxheVN1YmplY3Q8T2JzZXJ2YWJsZTxzdHJpbmc+IHwgc3RyaW5nIHwgbnVsbD4gPVxuICAgIG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuICBzZWFyY2hCeSQ6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4gPSB0aGlzLl9zZWFyY2hCeSQucGlwZShcbiAgICBzdGFydFdpdGgoJycpLFxuICAgIG1hcCgodmFsdWUpID0+IChpc09ic2VydmFibGUodmFsdWUpID8gdmFsdWUgOiBvZih2YWx1ZSkpKSxcbiAgICBzd2l0Y2hNYXAoKG9icykgPT4gb2JzKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gIHByaXZhdGUgX3RhYmxlQ29uZmlnJDogUmVwbGF5U3ViamVjdDxcbiAgICBUYWJsZUNvbmZpZzxhbnk+IHwgT2JzZXJ2YWJsZTxUYWJsZUNvbmZpZzxhbnk+PlxuICA+ID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XG4gIHRhYmxlQ29uZmlnJCA9IHRoaXMuX3RhYmxlQ29uZmlnJC5waXBlKFxuICAgIG1hcCgodmFsdWUpID0+IChpc09ic2VydmFibGUodmFsdWUpID8gdmFsdWUgOiBvZih2YWx1ZSkpKSxcbiAgICBzd2l0Y2hNYXAoKG9icykgPT4gb2JzKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHByaXZhdGUgX2RhdGEkOiBSZXBsYXlTdWJqZWN0PEFycmF5PFRhYmxlUm93PiB8IE9ic2VydmFibGU8QXJyYXk8VGFibGVSb3c+Pj4gPVxuICAgIG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuICBkYXRhJDogT2JzZXJ2YWJsZTxBcnJheTxUYWJsZVJvdz4+ID0gdGhpcy5fZGF0YSQucGlwZShcbiAgICBtYXAoKHZhbHVlKSA9PiAoaXNPYnNlcnZhYmxlKHZhbHVlKSA/IHZhbHVlIDogb2YodmFsdWUpKSksXG4gICAgc3dpdGNoTWFwKChvYnMpID0+IGNvbWJpbmVMYXRlc3QoW29ic10pKSxcbiAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnRhYmxlQ29uZmlnJCksXG4gICAgbWFwKChbW2RhdGFdLCBjb25maWddKSA9PiB7XG4gICAgICAvLyBpZiBjb2x1bW5zIG9yIHJvd3MgY29udGFpbnMgY29uZmlnIGZvciBtYXBUby4uLlxuICAgICAgaWYgKFxuICAgICAgICAoY29uZmlnLmNvbHVtbnMgJiZcbiAgICAgICAgICAhIU9iamVjdC52YWx1ZXMoY29uZmlnLmNvbHVtbnMpLmZpbmQoKGNvbHVtbikgPT4gISFjb2x1bW4ubWFwVG8pKSB8fFxuICAgICAgICAoY29uZmlnLnJvd3MgJiZcbiAgICAgICAgICAhIU9iamVjdC52YWx1ZXMoY29uZmlnLnJvd3MpLmZpbmQoKGNvbHVtbikgPT4gISFjb2x1bW4ubWFwVG8pKVxuICAgICAgKSB7XG4gICAgICAgIC8vIC4uLm1hcCBkYXRhIHRvIG5ldyBrZXlzIG9uIHJvdy4uLlxuICAgICAgICBjb25zdCBuZXdEYXRhOiBUYWJsZVJvd1tdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHJvdyA9IGRhdGFbaV07XG4gICAgICAgICAgY29uc3QgbmV3S2V5cyA9IE9iamVjdC5lbnRyaWVzKGNvbmZpZy5jb2x1bW5zIHx8IGNvbmZpZy5yb3dzIHx8IFtdKVxuICAgICAgICAgICAgLmZpbHRlcigoW2tleSwgdmFsdWVdKSA9PiAhIXZhbHVlLm1hcFRvKSAvLyBhZGQga2V5cyBmb3IgY29sdW1ucyB3aXRoIG1hcFRvIGNvbmZpZy4uLlxuICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgKHByZXZpb3VzVmFsdWUsIFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi5wcmV2aW91c1ZhbHVlLFxuICAgICAgICAgICAgICAgIFtrZXldOiB0aGlzLm5lc3RlZFZhbHVlKFxuICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgdmFsdWUubWFwVG8hLnBhdGgsXG4gICAgICAgICAgICAgICAgICB2YWx1ZS5tYXBUbz8ubWlzc2luZ1ZhbHVlXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIG5ld0RhdGFbaV0gPSB7IC4uLnJvdywgLi4ubmV3S2V5cyB9O1xuICAgICAgICB9XG4gICAgICAgIGRhdGEgPSBuZXdEYXRhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZGF0YSwgY29uZmlnIH07XG4gICAgfSksXG4gICAgc3dpdGNoTWFwKChvYnMpID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgb2Yob2JzKSxcbiAgICAgICAgdGhpcy5zb3J0QnkkLnBpcGUoc3RhcnRXaXRoKEVNUFRZKSksXG4gICAgICAgIHRoaXMuc2VhcmNoQnkkLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcCgoW3RhYmxlLCBzb3J0QnksIHNlYXJjaEJ5XSkgPT4ge1xuICAgICAgLy8gY3JlYXRlIGEgbmV3IGFycmF5IHJlZmVyZW5jZSBhbmQgc29ydCBuZXcgYXJyYXkgKHByZXZlbnQgbXV0YXRpbmcgZXhpc3Rpbmcgc3RhdGUpXG4gICAgICB0YWJsZS5kYXRhID0gWy4uLnRhYmxlLmRhdGFdO1xuICAgICAgcmV0dXJuICFzb3J0QnlcbiAgICAgICAgPyBzZWFyY2hCeVxuICAgICAgICAgID8gc2VhcmNoKHNlYXJjaEJ5LCBmYWxzZSwgdGFibGUuZGF0YSwgdGFibGUuY29uZmlnKVxuICAgICAgICAgIDogdGFibGUuZGF0YVxuICAgICAgICA6IChzZWFyY2hCeVxuICAgICAgICAgICAgPyBzZWFyY2goc2VhcmNoQnksIGZhbHNlLCB0YWJsZS5kYXRhLCB0YWJsZS5jb25maWcpXG4gICAgICAgICAgICA6IHRhYmxlLmRhdGFcbiAgICAgICAgICApPy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAvLyBUT0RPOiBpbXByb3ZlIGxvZ2ljXG4gICAgICAgICAgICBjb25zdCB0eXBlZCA9IHNvcnRCeSBhcyBUYWJsZVNvcnQ7XG4gICAgICAgICAgICByZXR1cm4gYVt0eXBlZC5zb3J0QnldID4gYlt0eXBlZC5zb3J0QnldXG4gICAgICAgICAgICAgID8gdHlwZWQuc29ydEJ5T3JkZXIgPT09IE9yZGVyLkFTQ1xuICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgIDogLTFcbiAgICAgICAgICAgICAgOiBiW3R5cGVkLnNvcnRCeV0gPiBhW3R5cGVkLnNvcnRCeV1cbiAgICAgICAgICAgICAgPyB0eXBlZC5zb3J0QnlPcmRlciA9PT0gT3JkZXIuQVNDXG4gICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgIDogMVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgfSk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBjYWxjdWxhdGlvbnMkID0gY29tYmluZUxhdGVzdChbdGhpcy5kYXRhJCwgdGhpcy50YWJsZUNvbmZpZyRdKS5waXBlKFxuICAgIG1hcCgoW2RhdGEsIGNvbmZpZ10pID0+IGNhbGN1bGF0ZShkYXRhLCBjb25maWcpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHRhYmxlJDogT2JzZXJ2YWJsZTxUYWJsZU1ldGE+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5kYXRhJCxcbiAgICB0aGlzLnRhYmxlQ29uZmlnJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtzb3J0ZWQsIGNvbmZpZ10pID0+IHtcbiAgICAgIC8vIGlmIHBhZ2luYXRpb24gaXMgZGlzYWJsZWQuLi5cbiAgICAgIGlmICghY29uZmlnLnBhZ2luYXRpb24gfHwgY29uZmlnLnBhZ2luYXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIC4uLnJldHVybiB1bmFsdGVyZWQgYXJyYXlcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBbc29ydGVkXSxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgaW5mbzogeyByZWNvcmRzOiBzb3J0ZWQubGVuZ3RoLCBwYWdlVG90YWw6IDEgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiByZWNvcmQgc2V0XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBjaHVuayhzb3J0ZWQsICsoY29uZmlnLnBhZ2luYXRpb24ubGVuZ3RoIHx8IDApKSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBpbmZvOiB7XG4gICAgICAgICAgcmVjb3Jkczogc29ydGVkLmxlbmd0aCxcbiAgICAgICAgICBwYWdlVG90YWw6IE1hdGguY2VpbChcbiAgICAgICAgICAgIHNvcnRlZC5sZW5ndGggLyArKGNvbmZpZy5wYWdpbmF0aW9uLmxlbmd0aCB8fCAwKVxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcHJpdmF0ZSBfY3VycmVudFBhZ2UkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG4gIGN1cnJlbnRQYWdlJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX2N1cnJlbnRQYWdlJCwgdGhpcy50YWJsZSRdKS5waXBlKFxuICAgIG1hcCgoW3BhZ2UsIHRhYmxlXTogYW55KSA9PiB7XG4gICAgICAvLyBkZXRlcm1pbmUgbGFzdCBwYWdlXG4gICAgICBjb25zdCBsYXN0UGFnZSA9XG4gICAgICAgIE1hdGguY2VpbChcbiAgICAgICAgICB0YWJsZS5pbmZvLnJlY29yZHMgL1xuICAgICAgICAgICAgKHRhYmxlLmNvbmZpZz8ucGFnaW5hdGlvbj8ubGVuZ3RoIHx8IHRhYmxlLmluZm8ucmVjb3JkcylcbiAgICAgICAgKSAtIDE7XG4gICAgICAvLyBkZXRlcm1pbmUgbWF4L21pbiBwb3NpdGlvblxuICAgICAgcmV0dXJuICtwYWdlIDwgMCA/IDAgOiArcGFnZSA+IGxhc3RQYWdlID8gbGFzdFBhZ2UgOiArcGFnZTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIGNvbHNwYW4kID0gdGhpcy50YWJsZUNvbmZpZyQucGlwZShcbiAgICBzd2l0Y2hNYXAoKGNvbmZpZykgPT5cbiAgICAgIGNvbmZpZy5jb2x1bW5zXG4gICAgICAgID8gb2YoXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKGNvbmZpZy5jb2x1bW5zIHx8IGNvbmZpZy5yb3dzIHx8IHt9KS5maWx0ZXIoXG4gICAgICAgICAgICAgICh2YWx1ZSkgPT4gdmFsdWUuaGlkZGVuICE9PSB0cnVlXG4gICAgICAgICAgICApLmxlbmd0aFxuICAgICAgICAgIClcbiAgICAgICAgOiB0aGlzLmRhdGEkLnBpcGUobWFwKChkYXRhKSA9PiBkYXRhLmxlbmd0aCArIDEpKVxuICAgICksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBmb290ZXJDb2xzcGFuJCA9IHRoaXMudGFibGVDb25maWckLnBpcGUoXG4gICAgbWFwKChjb25maWcpID0+IHtcbiAgICAgIGxldCBjb2xzcGFuID0gMDtcbiAgICAgIE9iamVjdC52YWx1ZXMoY29uZmlnPy5mb290ZXI/LmNvbHVtbnMgfHwge30pLmZvckVhY2goKGNhbGN1bGF0aW9ucykgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhjYWxjdWxhdGlvbnMpLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSBmYWxzZSlcbiAgICAgICAgICAgIC5sZW5ndGggPj0gMFxuICAgICAgICApIHtcbiAgICAgICAgICBjb2xzcGFuICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH0sIHt9KTtcbiAgICAgIHJldHVybiBjb2xzcGFuO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgc29ydChwcm9wZXJ0eTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmV3U29ydE9yZGVyID1cbiAgICAgIHRoaXMuX3NvcnRCeT8uc29ydEJ5ICE9PSBwcm9wZXJ0eSB8fFxuICAgICAgdGhpcy5fc29ydEJ5Py5zb3J0QnlPcmRlciA9PT0gT3JkZXIuREVTQyB8fFxuICAgICAgIXRoaXMuX3NvcnRCeS5zb3J0QnlPcmRlclxuICAgICAgICA/IE9yZGVyLkFTQ1xuICAgICAgICA6IE9yZGVyLkRFU0M7XG4gICAgY29uc3QgbmV3U29ydEJ5ID0ge1xuICAgICAgc29ydEJ5OiBwcm9wZXJ0eSxcbiAgICAgIHNvcnRCeU9yZGVyOiBuZXdTb3J0T3JkZXIsXG4gICAgfTtcbiAgICB0aGlzLnNvcnRCeSQubmV4dChuZXdTb3J0QnkpO1xuICAgIHRoaXMuX3NvcnRCeSA9IG5ld1NvcnRCeTtcbiAgfVxuXG4gIGNvbHVtbk9yZGVyID0gKFxuICAgIGE6IEtleVZhbHVlPHN0cmluZywgVGFibGVDb2x1bW4+LFxuICAgIGI6IEtleVZhbHVlPHN0cmluZywgVGFibGVDb2x1bW4+XG4gICk6IG51bWJlciA9PiB7XG4gICAgcmV0dXJuIChhLnZhbHVlLm9yZGVyIHx8IDApIC0gKGIudmFsdWUub3JkZXIgfHwgMCk7XG4gIH07XG5cbiAgbmVzdGVkVmFsdWUoXG4gICAgb2JqZWN0OiBhbnksXG4gICAgbWFwVG86IHN0cmluZyxcbiAgICBtaXNzaW5nVmFsdWU6IHN0cmluZyB8IG51bWJlciB8IG51bGwgPSBudWxsXG4gICk6IHVua25vd24ge1xuICAgIGNvbnN0IGxldmVscyA9IG1hcFRvLnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIGxldmVscy5yZWR1Y2UoXG4gICAgICAocHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlLCBpbmRleCkgPT5cbiAgICAgICAgcHJldmlvdXNWYWx1ZVtjdXJyZW50VmFsdWVdIHx8XG4gICAgICAgIChpbmRleCA9PT0gbGV2ZWxzLmxlbmd0aCAtIDEgPyBtaXNzaW5nVmFsdWUgOiB7fSksXG4gICAgICBvYmplY3RcbiAgICApO1xuICB9XG59XG4iLCI8dGFibGVcbiAgW25nQ2xhc3NdPVwiKHRhYmxlQ29uZmlnJCB8IGFzeW5jKT8uY2xhc3MgfHwgJ3RhYmxlJ1wiXG4gIFtjbGFzcy50YWJsZS1tb2JpbGVdPVwiKHRhYmxlQ29uZmlnJCB8IGFzeW5jKT8ubW9iaWxlTGF5b3V0XCJcbiAgW2NsYXNzLnRhYmxlLWhvcml6b250YWxdPVwiKHRhYmxlQ29uZmlnJCB8IGFzeW5jKT8ucm93c1wiXG4gIFtjbGFzcy50YWJsZS1sb2FkaW5nXT1cImxvYWRpbmckIHwgYXN5bmNcIlxuICBbY2xhc3MuZ3Qtc3RpY2t5LXJvdy1oZWFkZXJdPVwiXG4gICAgKHRhYmxlQ29uZmlnJCB8IGFzeW5jKT8uc3RpY2t5SGVhZGVycz8ucm93ICYmICh0YWJsZUNvbmZpZyQgfCBhc3luYyk/LnJvd3NcbiAgXCJcbiAgW2NsYXNzLmd0LXN0aWNreS1jb2x1bW4taGVhZGVyXT1cIlxuICAgICh0YWJsZUNvbmZpZyQgfCBhc3luYyk/LnN0aWNreUhlYWRlcnM/LmNvbHVtblxuICBcIlxuICBbYXR0ci5hcmlhLWJ1c3ldPVwiKGxvYWRpbmckIHwgYXN5bmMpID09PSB0cnVlID8gdHJ1ZSA6IG51bGxcIlxuPlxuICA8dGhlYWQ+XG4gICAgPHRyXG4gICAgICAqbmdJZj1cIntcbiAgICAgICAgY29uZmlnOiAodGFibGVDb25maWckIHwgYXN5bmMpISxcbiAgICAgICAgaXNMb2FkaW5nOiBsb2FkaW5nJCB8IGFzeW5jXG4gICAgICB9IGFzIHRhYmxlXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGFibGUuY29uZmlnPy5jb2x1bW5zIHwga2V5dmFsdWU6IGNvbHVtbk9yZGVyXCJcbiAgICAgID5cbiAgICAgICAgPHRoXG4gICAgICAgICAgKm5nSWY9XCIhY29sdW1uLnZhbHVlPy5oaWRkZW5cIlxuICAgICAgICAgIG5nQ2xhc3M9XCJ7eyAoY29sdW1uLmtleSB8IGRhc2hDYXNlKSArICctY29sdW1uJyB9fSB7e1xuICAgICAgICAgICAgY29sdW1uLnZhbHVlLmNsYXNzXG4gICAgICAgICAgfX1cIlxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJ0YWJsZS5pc0xvYWRpbmdcIlxuICAgICAgICAgIFthdHRyLmFyaWEtc29ydF09XCJzb3J0QnkkIHwgYXN5bmMgfCBzb3J0Q2xhc3M6IGNvbHVtbi5rZXk6dHJ1ZVwiXG4gICAgICAgICAgW2NsYXNzLmd0LXNvcnRhYmxlXT1cInRydWVcIlxuICAgICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnZhbHVlPy5zb3J0YWJsZVwiXG4gICAgICAgICAgICBjbGFzcz1cImd0LXNvcnRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICB0YWJsZS5pc0xvYWRpbmcgfHwgIWNvbHVtbi52YWx1ZS5zb3J0YWJsZSB8fCBzb3J0KGNvbHVtbi5rZXkpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLnZhbHVlPy5oZWFkZXIgIT09IGZhbHNlXCI+e3tcbiAgICAgICAgICAgICAgY29sdW1uLnZhbHVlLmhlYWRlciB8fCBjb2x1bW4ua2V5IHwgY2FwaXRhbENhc2VcbiAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cIiFjb2x1bW4udmFsdWU/LnNvcnRhYmxlICYmIGNvbHVtbi52YWx1ZT8uaGVhZGVyICE9PSBmYWxzZVwiXG4gICAgICAgICAgICA+e3sgY29sdW1uLnZhbHVlLmhlYWRlciB8fCBjb2x1bW4ua2V5IHwgY2FwaXRhbENhc2UgfX08L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAoKHRhYmxlPy5jb25maWc/LnJvd3MgfCBrZXl2YWx1ZTogY29sdW1uT3JkZXIpIHx8IFtdKVswXSBhcyBoZWFkZXJSb3dcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHRoXG4gICAgICAgICAgY2xhc3M9XCJyb3ctaGVhZGVyXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXNvcnRdPVwic29ydEJ5JCB8IGFzeW5jIHwgc29ydENsYXNzOiBoZWFkZXJSb3cua2V5OnRydWVcIlxuICAgICAgICAgIG5nQ2xhc3M9XCJ7eyBoZWFkZXJSb3cudmFsdWUuc29ydGFibGUgPyAnc29ydCAnIDogJycgfX0ge3tcbiAgICAgICAgICAgIHNvcnRCeSQgfCBhc3luYyB8IHNvcnRDbGFzczogaGVhZGVyUm93LmtleVxuICAgICAgICAgIH19IHt7IChoZWFkZXJSb3cua2V5IHwgZGFzaENhc2UpICsgJy1jb2x1bW4nIH19XCJcbiAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICB0YWJsZS5pc0xvYWRpbmcgfHwgIWhlYWRlclJvdy52YWx1ZS5zb3J0YWJsZSB8fCBzb3J0KGhlYWRlclJvdy5rZXkpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyUm93Py52YWx1ZT8uaGVhZGVyICE9PSBmYWxzZVwiPnt7XG4gICAgICAgICAgICBoZWFkZXJSb3c/LnZhbHVlPy5oZWFkZXIgfHwgaGVhZGVyUm93LmtleSB8IGNhcGl0YWxDYXNlXG4gICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiAoKHRhYmxlJCB8IGFzeW5jKT8uZGF0YSB8fCBbXSlbMF1cIlxuICAgICAgICAgIG5nQ2xhc3M9XCJ7eyBoZWFkZXJSb3cudmFsdWUuY2xhc3MgfX1cIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiXG4gICAgICAgICAgICAgICh0YWJsZS5jb25maWcucm93cyB8fCB7fSlbaGVhZGVyUm93LmtleV0udGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICA/IHRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgICAgOiAodGFibGUuY29uZmlnLnJvd3MgfHwge30pW2hlYWRlclJvdy5rZXldLnRyYW5zZm9ybVxuICAgICAgICAgICAgICAgID8gdHJhbnNmb3JtRGF0YVxuICAgICAgICAgICAgICAgIDogcmF3RGF0YVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgIHJvdzogY29sdW1uLFxuICAgICAgICAgICAgICBjb2x1bW46IGhlYWRlclJvdyxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiAodGFibGUuY29uZmlnLnJvd3MgfHwge30pW2hlYWRlclJvdy5rZXldLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgdGVtcGxhdGVSZWY6ICh0YWJsZS5jb25maWcucm93cyB8fCB7fSlbaGVhZGVyUm93LmtleV0udGVtcGxhdGVSZWYsXG4gICAgICAgICAgICAgIGluZGV4OiAwXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3RyPlxuICA8L3RoZWFkPlxuICA8dGJvZHkgKm5nSWY9XCJsb2FkaW5nJCB8IGFzeW5jOyBlbHNlIHRhYmxlQ29udGVudFwiPlxuICAgIDx0cj5cbiAgICAgIDx0ZCBjbGFzcz1cInAtMFwiIFtjb2xTcGFuXT1cImNvbHNwYW4kIHwgYXN5bmNcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnRhYmxlLWxvYWRpbmdcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGJvZHk+XG4gIDx0Zm9vdCAqbmdJZj1cIih0YWJsZSQgfCBhc3luYykhIGFzIHRhYmxlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlLmRhdGEubGVuZ3RoID4gMCAmJiAhKGxvYWRpbmckIHwgYXN5bmMpXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGNhbGN1bGF0aW9ucyQgfCBhc3luYykhIGFzIGNhbGN1bGF0aW9uc1wiPlxuICAgICAgICA8dHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY2FsY3VsYXRpb24gb2YgY2FsY3VsYXRpb25zLmNhbGN1bGF0aW9uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cIntcbiAgICAgICAgICAgICAgc2hvd0hlYWRlcjogKGNvbHNwYW4kIHwgYXN5bmMpICE9PSAoZm9vdGVyQ29sc3BhbiQgfCBhc3luYylcbiAgICAgICAgICAgIH0gYXMgZm9vdGVyUm93XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgKm5nSWY9XCJmb290ZXJSb3cuc2hvd0hlYWRlclwiXG4gICAgICAgICAgICAgIFtjb2xTcGFuXT1cIlxuICAgICAgICAgICAgICAgICgoY29sc3BhbiQgfCBhc3luYykgfHwgMCkgLSAoKGZvb3RlckNvbHNwYW4kIHwgYXN5bmMpIHx8IDApXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIHNjb3BlPVwicm93XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwidGFibGUuY29uZmlnPy5mb290ZXI/LmhlYWRlcnM/LltjYWxjdWxhdGlvbl0gYXMgc2hvd0hlYWRlclwiXG4gICAgICAgICAgICAgICAgPnt7c2hvd0hlYWRlciA9PT0gdHJ1ZSA/IChjYWxjdWxhdGlvbiB8IGNhcGl0YWxDYXNlKTogdGFibGUuY29uZmlnLmZvb3Rlcj8uaGVhZGVycz8uW2NhbGN1bGF0aW9uXX19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbiBvZiB0YWJsZS5jb25maWc/LmNvbHVtbnMgfCBrZXl2YWx1ZTogY29sdW1uT3JkZXJcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICFjb2x1bW4udmFsdWU/LmhpZGRlbiAmJiBjYWxjdWxhdGlvbnMuY2FsY3VsYXRlZFtjb2x1bW4ua2V5XVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgbmdDbGFzcz1cInt7IChjb2x1bW4ua2V5IHwgZGFzaENhc2UpICsgJy1jb2x1bW4nIH19IHt7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4udmFsdWUuY2xhc3NcbiAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1oZWFkZXJdPVwiXG4gICAgICAgICAgICAgICAgICAhZm9vdGVyUm93LnNob3dIZWFkZXIgJiYgdGFibGUuY29uZmlnLmZvb3Rlcj8uaGVhZGVycz8uW2NhbGN1bGF0aW9uXVxuICAgICAgICAgICAgICAgICAgICA/IHRhYmxlLmNvbmZpZy5mb290ZXI/LmhlYWRlcnM/LltjYWxjdWxhdGlvbl0gPT09IHRydWUgPyAoY2FsY3VsYXRpb24gfCBjYXBpdGFsQ2FzZSkgOiB0YWJsZS5jb25maWcuZm9vdGVyPy5oZWFkZXJzPy5bY2FsY3VsYXRpb25dXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJcbiAgICAgICAgICAgICAgICAgICAgKHRhYmxlLmNvbmZpZy5jb2x1bW5zIHx8IHt9KVtjb2x1bW4ua2V5XS50cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICAgICAgICA/IHRyYW5zZm9ybUZvb3RlclxuICAgICAgICAgICAgICAgICAgICAgIDogcmF3Rm9vdGVyXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNhbGN1bGF0aW9ucy5jYWxjdWxhdGVkW2NvbHVtbi5rZXldW2NhbGN1bGF0aW9uXSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAodGFibGUuY29uZmlnLmNvbHVtbnMgfHwge30pW2NvbHVtbi5rZXldXG4gICAgICAgICAgICAgICAgICAgICAgLnRyYW5zZm9ybVxuICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC90Zm9vdD5cbjwvdGFibGU+XG48bmctdGVtcGxhdGUgI3RhYmxlQ29udGVudD5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIih0YWJsZSQgfCBhc3luYykhIGFzIHRhYmxlXCI+XG4gICAgPHRib2R5ICpuZ0lmPVwiKHRhYmxlIS5kYXRhIVswXSB8fCB0YWJsZSEuZGF0YSEpLmxlbmd0aCA+IDA7IGVsc2Ugbm9EYXRhXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGUuY29uZmlnLmNvbHVtbnNcIj5cbiAgICAgICAgPHRyXG4gICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICBsZXQgcm93IG9mIHRhYmxlIS5kYXRhIVsoY3VycmVudFBhZ2UkIHwgYXN5bmMpIHx8IDBdO1xuICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2F0dHIuaWRdPVwiJ3RhYmxlUm93XycgKyBpXCJcbiAgICAgICAgICAoY2xpY2spPVwidGFibGU/LmNvbmZpZz8ucm93Q2xpY2sgJiYgX3Jvd0NsaWNrKHJvdywgaSwgJGV2ZW50KVwiXG4gICAgICAgICAgKG1vdXNlb3Zlcik9XCJ0YWJsZT8uY29uZmlnPy5yb3dIb3ZlciAmJiBfaG92ZXJSb3cocm93LCBpLCAkZXZlbnQpXCJcbiAgICAgICAgICAobW91c2VvdXQpPVwidGFibGU/LmNvbmZpZz8ucm93SG92ZXIgJiYgX2hvdmVyUm93KG51bGwsIG51bGwsICRldmVudClcIlxuICAgICAgICAgIFtjbGFzcy5ndC1ob3Zlcl09XCIocm93SG92ZXIkIHwgYXN5bmMpPy5pbmRleCA9PT0gaVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRhYmxlLmNvbmZpZz8uY29sdW1ucyB8IGtleXZhbHVlOiBjb2x1bW5PcmRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi52YWx1ZT8uaGlkZGVuXCJcbiAgICAgICAgICAgICAgbmdDbGFzcz1cInt7IChjb2x1bW4ua2V5IHwgZGFzaENhc2UpICsgJy1jb2x1bW4nIH19IHt7XG4gICAgICAgICAgICAgICAgY29sdW1uLnZhbHVlLmNsYXNzXG4gICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICB0YWJsZS5jb25maWcubW9iaWxlTGF5b3V0ICYmIGNvbHVtbi52YWx1ZS5tb2JpbGVIZWFkZXJcbiAgICAgICAgICAgICAgICAgID8gY29sdW1uLnZhbHVlLm1vYmlsZUhlYWRlciAhPT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi52YWx1ZS5tb2JpbGVIZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgOiAoY29sdW1uLnZhbHVlLmhlYWRlciB8fCBjb2x1bW4ua2V5IHwgY2FwaXRhbENhc2UpXG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIlxuICAgICAgICAgICAgICAgICAgKHNlYXJjaEJ5JCB8IGFzeW5jKSAmJlxuICAgICAgICAgICAgICAgICAgISh0YWJsZS5jb25maWcuY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV0udGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgPyBoaWdobGlnaHRlZFxuICAgICAgICAgICAgICAgICAgICA6ICh0YWJsZS5jb25maWcuY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV0udGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgPyB0ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgICAgICAgICA6ICh0YWJsZS5jb25maWcuY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV0udHJhbnNmb3JtXG4gICAgICAgICAgICAgICAgICAgID8gdHJhbnNmb3JtRGF0YVxuICAgICAgICAgICAgICAgICAgICA6IHJhd0RhdGFcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgc2VhcmNoOiAoc2VhcmNoQnkkIHwgYXN5bmMpLFxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAodGFibGUuY29uZmlnLmNvbHVtbnMgfHwge30pW2NvbHVtbi5rZXldLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUmVmOiAodGFibGUuY29uZmlnLmNvbHVtbnMgfHwge30pW2NvbHVtbi5rZXldXG4gICAgICAgICAgICAgICAgICAgIC50ZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgZGF0YTogdGFibGUuZGF0YVsoY3VycmVudFBhZ2UkIHwgYXN5bmMpIHx8IDBdXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZS5jb25maWcucm93c1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICBsZXQgcm93IG9mIHRhYmxlPy5jb25maWc/LnJvd3MgfCBrZXl2YWx1ZTogY29sdW1uT3JkZXIgfCBzbGljZTogMTtcbiAgICAgICAgICAgIGxldCBpID0gaW5kZXhcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICAqbmdJZj1cIiFyb3cudmFsdWU/LmhpZGRlblwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCIndGFibGVSb3dfJyArIGlcIlxuICAgICAgICAgICAgbmdDbGFzcz1cInt7IChyb3cua2V5IHwgZGFzaENhc2UpICsgJy1yb3cnIH19XCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0YWJsZT8uY29uZmlnPy5yb3dDbGljayAmJiBfcm93Q2xpY2socm93LCBpLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChtb3VzZW92ZXIpPVwidGFibGU/LmNvbmZpZz8ucm93SG92ZXIgJiYgX2hvdmVyUm93KHJvdywgaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAobW91c2VvdXQpPVwiXG4gICAgICAgICAgICAgIHRhYmxlPy5jb25maWc/LnJvd0hvdmVyICYmIF9ob3ZlclJvdyhudWxsLCBudWxsLCAkZXZlbnQpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLmd0LWhvdmVyXT1cIihyb3dIb3ZlciQgfCBhc3luYyk/LmluZGV4ID09PSBpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGggY2xhc3M9XCJyb3ctaGVhZGVyXCIgc2NvcGU9XCJyb3dcIj5cbiAgICAgICAgICAgICAge3sgcm93LnZhbHVlLmhlYWRlciB8fCByb3cua2V5IHwgY2FwaXRhbENhc2UgfX1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiAodGFibGU/LmRhdGEgfHwgW10pWzBdOyBsZXQgeSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgbmdDbGFzcz1cInt7IHJvdy52YWx1ZS5jbGFzcyB9fVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJcbiAgICAgICAgICAgICAgICAgICh0YWJsZS5jb25maWcucm93cyB8fCB7fSlbcm93LmtleV0udGVtcGxhdGVSZWZcbiAgICAgICAgICAgICAgICAgICAgPyB0ZW1wbGF0ZVJlZlxuICAgICAgICAgICAgICAgICAgICA6ICh0YWJsZS5jb25maWcucm93cyB8fCB7fSlbcm93LmtleV0udHJhbnNmb3JtXG4gICAgICAgICAgICAgICAgICAgID8gdHJhbnNmb3JtRGF0YVxuICAgICAgICAgICAgICAgICAgICA6IHJhd0RhdGFcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICByb3c6IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgIGNvbHVtbjogcm93LFxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAodGFibGUuY29uZmlnLnJvd3MgfHwge30pW3Jvdy5rZXldLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUmVmOiAodGFibGUuY29uZmlnLnJvd3MgfHwge30pW3Jvdy5rZXldLnRlbXBsYXRlUmVmLFxuICAgICAgICAgICAgICAgICAgaW5kZXg6IHRhYmxlLmNvbmZpZy5yb3dzID8geSA6IGksXG4gICAgICAgICAgICAgICAgICBkYXRhOiB0YWJsZS5kYXRhWyhjdXJyZW50UGFnZSQgfCBhc3luYykgfHwgMF1cbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3Rib2R5PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI25vRGF0YT5cbiAgPHRib2R5PlxuICAgIDx0cj5cbiAgICAgIDx0ZCBjbGFzcz1cInAtMFwiIFtjb2xTcGFuXT1cImNvbHNwYW4kIHwgYXN5bmNcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnRhYmxlLW5vLWRhdGFcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGJvZHk+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlXG4gICNoaWdobGlnaHRlZFxuICBsZXQtcm93PVwicm93XCJcbiAgbGV0LWNvbHVtbj1cImNvbHVtblwiXG4gIGxldC1zZWFyY2g9XCJzZWFyY2hcIlxuICBsZXQtdHJhbnNmb3JtPVwidHJhbnNmb3JtXCJcbj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiIXRyYW5zZm9ybVwiXG4gICAgW2lubmVySFRNTF09XCJyb3dbY29sdW1uLmtleV0gfCBoaWdobGlnaHQ6IHNlYXJjaFwiXG4gID48L2Rpdj5cbiAgPGRpdlxuICAgICpuZ0lmPVwidHJhbnNmb3JtXCJcbiAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgcm93W2NvbHVtbi5rZXldXG4gICAgICAgIHwgZHluYW1pY1BpcGU6IHRyYW5zZm9ybS5waXBlOnRyYW5zZm9ybT8uYXJnc1xuICAgICAgICB8IGhpZ2hsaWdodDogc2VhcmNoXG4gICAgXCJcbiAgPjwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcmF3RGF0YSBsZXQtcm93PVwicm93XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICB7eyByb3dbY29sdW1uLmtleV0gfX1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGVcbiAgI3RyYW5zZm9ybURhdGFcbiAgbGV0LXJvdz1cInJvd1wiXG4gIGxldC1jb2x1bW49XCJjb2x1bW5cIlxuICBsZXQtdHJhbnNmb3JtPVwidHJhbnNmb3JtXCJcbiAgbGV0LWRhdGE9XCJkYXRhXCJcbj5cbiAge3sgcm93W2NvbHVtbi5rZXldIHwgZHluYW1pY1BpcGU6IHRyYW5zZm9ybS5waXBlOnRyYW5zZm9ybT8uYXJncyB9fVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjdHJhbnNmb3JtRm9vdGVyIGxldC12YWx1ZT1cInZhbHVlXCIgbGV0LXRyYW5zZm9ybT1cInRyYW5zZm9ybVwiPlxuICB7e1xuICAgICh2YWx1ZSB8IGR5bmFtaWNQaXBlOiB0cmFuc2Zvcm0ucGlwZTp0cmFuc2Zvcm0/LmFyZ3MpIHx8XG4gICAgICAodGFibGVDb25maWckIHwgYXN5bmMpPy5mb290ZXI/LmVtcHR5Q29udGVudFxuICB9fVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcmF3Rm9vdGVyIGxldC12YWx1ZT1cInZhbHVlXCI+XG4gIHt7IHZhbHVlIHx8ICh0YWJsZUNvbmZpZyQgfCBhc3luYyk/LmZvb3Rlcj8uZW1wdHlDb250ZW50IH19XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlXG4gICN0ZW1wbGF0ZVJlZlxuICBsZXQtcm93PVwicm93XCJcbiAgbGV0LWNvbHVtbj1cImNvbHVtblwiXG4gIGxldC1pbmRleD1cImluZGV4XCJcbiAgbGV0LXRlbXBsYXRlUmVmPVwidGVtcGxhdGVSZWZcIlxuICBsZXQtZGF0YT1cImRhdGFcIlxuPlxuICA8bmctY29udGFpbmVyXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVSZWZcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICByb3c6IHJvdyxcbiAgICAgIGNvbDogY29sdW1uLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgZGF0YTogZGF0YVxuICAgIH1cIlxuICA+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -10,20 +10,24 @@ import { GtDeltaComponent } from './gt-delta/gt-delta.component';
10
10
  import * as i0 from "@angular/core";
11
11
  export class GenericTableCoreModule {
12
12
  }
13
- GenericTableCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GenericTableCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
- GenericTableCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GenericTableCoreModule, declarations: [CoreComponent,
13
+ GenericTableCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: GenericTableCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
+ GenericTableCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.8", ngImport: i0, type: GenericTableCoreModule, imports: [CommonModule,
15
+ CoreComponent,
15
16
  SortClassPipe,
16
17
  DashCasePipe,
17
18
  HighlightPipe,
18
19
  CapitalCasePipe,
19
20
  CapitalCasePipe,
20
21
  DynamicPipe,
21
- GtDeltaComponent], imports: [CommonModule], exports: [CoreComponent, GtDeltaComponent] });
22
- GenericTableCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GenericTableCoreModule, imports: [[CommonModule]] });
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GenericTableCoreModule, decorators: [{
22
+ GtDeltaComponent], exports: [CoreComponent, GtDeltaComponent] });
23
+ GenericTableCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: GenericTableCoreModule, imports: [CommonModule,
24
+ CoreComponent,
25
+ GtDeltaComponent] });
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: GenericTableCoreModule, decorators: [{
24
27
  type: NgModule,
25
28
  args: [{
26
- declarations: [
29
+ imports: [
30
+ CommonModule,
27
31
  CoreComponent,
28
32
  SortClassPipe,
29
33
  DashCasePipe,
@@ -33,8 +37,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
33
37
  DynamicPipe,
34
38
  GtDeltaComponent,
35
39
  ],
36
- imports: [CommonModule],
37
40
  exports: [CoreComponent, GtDeltaComponent],
38
41
  }]
39
42
  }] });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBZ0JqRSxNQUFNLE9BQU8sc0JBQXNCOztvSEFBdEIsc0JBQXNCO3FIQUF0QixzQkFBc0IsaUJBWi9CLGFBQWE7UUFDYixhQUFhO1FBQ2IsWUFBWTtRQUNaLGFBQWE7UUFDYixlQUFlO1FBQ2YsZUFBZTtRQUNmLFdBQVc7UUFDWCxnQkFBZ0IsYUFFUixZQUFZLGFBQ1osYUFBYSxFQUFFLGdCQUFnQjtxSEFFOUIsc0JBQXNCLFlBSHhCLENBQUMsWUFBWSxDQUFDOzRGQUdaLHNCQUFzQjtrQkFkbEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osYUFBYTt3QkFDYixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsV0FBVzt3QkFDWCxnQkFBZ0I7cUJBQ2pCO29CQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDO2lCQUMzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb3JlQ29tcG9uZW50IH0gZnJvbSAnLi9jb3JlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU29ydENsYXNzUGlwZSB9IGZyb20gJy4vcGlwZXMvc29ydC1jbGFzcy5waXBlJztcbmltcG9ydCB7IERhc2hDYXNlUGlwZSB9IGZyb20gJy4vcGlwZXMvZGFzaC1jYXNlLnBpcGUnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0UGlwZSB9IGZyb20gJy4vcGlwZXMvaGlnaGxpZ2h0LnBpcGUnO1xuaW1wb3J0IHsgQ2FwaXRhbENhc2VQaXBlIH0gZnJvbSAnLi9waXBlcy9jYXBpdGFsLWNhc2UucGlwZSc7XG5pbXBvcnQgeyBEeW5hbWljUGlwZSB9IGZyb20gJy4vcGlwZXMvZHluYW1pYy5waXBlJztcbmltcG9ydCB7IEd0RGVsdGFDb21wb25lbnQgfSBmcm9tICcuL2d0LWRlbHRhL2d0LWRlbHRhLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIENvcmVDb21wb25lbnQsXG4gICAgU29ydENsYXNzUGlwZSxcbiAgICBEYXNoQ2FzZVBpcGUsXG4gICAgSGlnaGxpZ2h0UGlwZSxcbiAgICBDYXBpdGFsQ2FzZVBpcGUsXG4gICAgQ2FwaXRhbENhc2VQaXBlLFxuICAgIER5bmFtaWNQaXBlLFxuICAgIEd0RGVsdGFDb21wb25lbnQsXG4gIF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBleHBvcnRzOiBbQ29yZUNvbXBvbmVudCwgR3REZWx0YUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIEdlbmVyaWNUYWJsZUNvcmVNb2R1bGUge31cbiJdfQ==
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBZ0JqRSxNQUFNLE9BQU8sc0JBQXNCOzttSEFBdEIsc0JBQXNCO29IQUF0QixzQkFBc0IsWUFaL0IsWUFBWTtRQUNaLGFBQWE7UUFDYixhQUFhO1FBQ2IsWUFBWTtRQUNaLGFBQWE7UUFDYixlQUFlO1FBQ2YsZUFBZTtRQUNmLFdBQVc7UUFDWCxnQkFBZ0IsYUFFUixhQUFhLEVBQUUsZ0JBQWdCO29IQUU5QixzQkFBc0IsWUFaL0IsWUFBWTtRQUNaLGFBQWE7UUFPYixnQkFBZ0I7MkZBSVAsc0JBQXNCO2tCQWRsQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixlQUFlO3dCQUNmLFdBQVc7d0JBQ1gsZ0JBQWdCO3FCQUNqQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUM7aUJBQzNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvcmVDb21wb25lbnQgfSBmcm9tICcuL2NvcmUuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTb3J0Q2xhc3NQaXBlIH0gZnJvbSAnLi9waXBlcy9zb3J0LWNsYXNzLnBpcGUnO1xuaW1wb3J0IHsgRGFzaENhc2VQaXBlIH0gZnJvbSAnLi9waXBlcy9kYXNoLWNhc2UucGlwZSc7XG5pbXBvcnQgeyBIaWdobGlnaHRQaXBlIH0gZnJvbSAnLi9waXBlcy9oaWdobGlnaHQucGlwZSc7XG5pbXBvcnQgeyBDYXBpdGFsQ2FzZVBpcGUgfSBmcm9tICcuL3BpcGVzL2NhcGl0YWwtY2FzZS5waXBlJztcbmltcG9ydCB7IER5bmFtaWNQaXBlIH0gZnJvbSAnLi9waXBlcy9keW5hbWljLnBpcGUnO1xuaW1wb3J0IHsgR3REZWx0YUNvbXBvbmVudCB9IGZyb20gJy4vZ3QtZGVsdGEvZ3QtZGVsdGEuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBDb3JlQ29tcG9uZW50LFxuICAgIFNvcnRDbGFzc1BpcGUsXG4gICAgRGFzaENhc2VQaXBlLFxuICAgIEhpZ2hsaWdodFBpcGUsXG4gICAgQ2FwaXRhbENhc2VQaXBlLFxuICAgIENhcGl0YWxDYXNlUGlwZSxcbiAgICBEeW5hbWljUGlwZSxcbiAgICBHdERlbHRhQ29tcG9uZW50LFxuICBdLFxuICBleHBvcnRzOiBbQ29yZUNvbXBvbmVudCwgR3REZWx0YUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIEdlbmVyaWNUYWJsZUNvcmVNb2R1bGUge31cbiJdfQ==
@@ -3,12 +3,12 @@ import * as i0 from "@angular/core";
3
3
  export class CoreService {
4
4
  constructor() { }
5
5
  }
6
- CoreService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7
- CoreService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CoreService, providedIn: 'root' });
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CoreService, decorators: [{
6
+ CoreService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: CoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7
+ CoreService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: CoreService, providedIn: 'root' });
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: CoreService, decorators: [{
9
9
  type: Injectable,
10
10
  args: [{
11
11
  providedIn: 'root',
12
12
  }]
13
13
  }], ctorParameters: function () { return []; } });
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2NvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sV0FBVztJQUN0QixnQkFBZSxDQUFDOzt5R0FETCxXQUFXOzZHQUFYLFdBQVcsY0FGVixNQUFNOzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29yZVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcigpIHt9XG59XG4iXX0=
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2NvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sV0FBVztJQUN0QixnQkFBZSxDQUFDOzt3R0FETCxXQUFXOzRHQUFYLFdBQVcsY0FGVixNQUFNOzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29yZVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcigpIHt9XG59XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import { NgIf, PercentPipe } from '@angular/common';
2
3
  import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
4
  export class GtDeltaComponent {
5
5
  constructor() {
6
6
  this.Math = Math;
@@ -17,8 +17,8 @@ export class GtDeltaComponent {
17
17
  this.initialValue = '-';
18
18
  }
19
19
  }
20
- GtDeltaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GtDeltaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
- GtDeltaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: GtDeltaComponent, selector: "gt-delta", inputs: { data: "data", index: "index", baseIndex: "baseIndex", classes: "classes", key: "key", notApplicableValue: "notApplicableValue", initialValue: "initialValue" }, ngImport: i0, template: `<span
20
+ GtDeltaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: GtDeltaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
+ GtDeltaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: GtDeltaComponent, isStandalone: true, selector: "gt-delta", inputs: { data: "data", index: "index", baseIndex: "baseIndex", classes: "classes", key: "key", notApplicableValue: "notApplicableValue", initialValue: "initialValue" }, ngImport: i0, template: `<span
22
22
  *ngIf="{
23
23
  value:
24
24
  index === 0
@@ -50,12 +50,10 @@ GtDeltaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versi
50
50
  ? initialValue
51
51
  : notApplicableValue
52
52
  }}</span
53
- >`, isInline: true, styles: [":host{display:inline-block}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "percent": i1.PercentPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GtDeltaComponent, decorators: [{
53
+ >`, isInline: true, styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "pipe", type: PercentPipe, name: "percent" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: GtDeltaComponent, decorators: [{
55
55
  type: Component,
56
- args: [{
57
- selector: 'gt-delta',
58
- template: `<span
56
+ args: [{ selector: 'gt-delta', template: `<span
59
57
  *ngIf="{
60
58
  value:
61
59
  index === 0
@@ -87,16 +85,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
87
85
  ? initialValue
88
86
  : notApplicableValue
89
87
  }}</span
90
- >`,
91
- styles: [
92
- `
93
- :host {
94
- display: inline-block;
95
- }
96
- `,
97
- ],
98
- changeDetection: ChangeDetectionStrategy.OnPush,
99
- }]
88
+ >`, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [PercentPipe, NgIf], styles: [":host{display:inline-block}\n"] }]
100
89
  }], ctorParameters: function () { return []; }, propDecorators: { data: [{
101
90
  type: Input
102
91
  }], index: [{
@@ -112,4 +101,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
112
101
  }], initialValue: [{
113
102
  type: Input
114
103
  }] } });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3QtZGVsdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2d0LWRlbHRhL2d0LWRlbHRhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBK0MxRSxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCO1FBQ0EsU0FBSSxHQUFHLElBQUksQ0FBQztRQUNaLFdBQU0sR0FBRyxNQUFNLENBQUM7UUFDUCxTQUFJLEdBQWMsRUFBRSxDQUFDO1FBQ3JCLFVBQUssR0FBVyxDQUFDLENBQUM7UUFFbEIsWUFBTyxHQUFHO1lBQ2pCLElBQUksRUFBRSxVQUFVO1lBQ2hCLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLFFBQVEsRUFBRSxhQUFhO1NBQ3hCLENBQUM7UUFDTyxRQUFHLEdBQVcsT0FBTyxDQUFDO1FBQ3RCLHVCQUFrQixHQUFXLEtBQUssQ0FBQztRQUNuQyxpQkFBWSxHQUFXLEdBQUcsQ0FBQztJQWJyQixDQUFDOzs4R0FETCxnQkFBZ0I7a0dBQWhCLGdCQUFnQiwwTkExQ2pCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQWdDUjs0RkFVUyxnQkFBZ0I7a0JBNUM1QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxVQUFVO29CQUNwQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBZ0NSO29CQUNGLE1BQU0sRUFBRTt3QkFDTjs7OztLQUlDO3FCQUNGO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDswRUFLVSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUtHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYWJsZVJvd3MgfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtcm93LmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2d0LWRlbHRhJyxcbiAgdGVtcGxhdGU6IGA8c3BhblxuICAgICpuZ0lmPVwie1xuICAgICAgdmFsdWU6XG4gICAgICAgIGluZGV4ID09PSAwXG4gICAgICAgICAgPyBpbml0aWFsVmFsdWVcbiAgICAgICAgICA6ICgoYmFzZUluZGV4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBkYXRhW2luZGV4IC0gMV1ba2V5XVxuICAgICAgICAgICAgICA6IGRhdGFbYmFzZUluZGV4XVtrZXldKSAtXG4gICAgICAgICAgICAgIGRhdGFbaW5kZXhdW2tleV0pIC9cbiAgICAgICAgICAgIC1NYXRoLmFicyhcbiAgICAgICAgICAgICAgYmFzZUluZGV4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IGRhdGFbaW5kZXggLSAxXVtrZXldXG4gICAgICAgICAgICAgICAgOiBkYXRhW2Jhc2VJbmRleF1ba2V5XVxuICAgICAgICAgICAgKVxuICAgIH0gYXMgZGVsdGFcIlxuICAgIFtjbGFzc109XCJbXG4gICAgICBjbGFzc2VzLnNwYW4sXG4gICAgICAhZGVsdGEudmFsdWUgfHwgIU51bWJlci5pc0Zpbml0ZShkZWx0YS52YWx1ZSlcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogZGVsdGEudmFsdWUgPiAwXG4gICAgICAgID8gY2xhc3Nlcy5wb3NpdGl2ZVxuICAgICAgICA6IGNsYXNzZXMubmVnYXRpdmVcbiAgICBdXCJcbiAgICBbY2xhc3MuZ3QtZGVsdGEtcG9zaXRpdmVdPVwiZGVsdGEudmFsdWUgPiAwICYmIE51bWJlci5pc0Zpbml0ZShkZWx0YS52YWx1ZSlcIlxuICAgIFtjbGFzcy5ndC1kZWx0YS1uZWdhdGl2ZV09XCJkZWx0YS52YWx1ZSA8IDBcIlxuICAgID57e1xuICAgICAgTnVtYmVyLmlzRmluaXRlKGRlbHRhLnZhbHVlKVxuICAgICAgICA/IChkZWx0YS52YWx1ZSB8IHBlcmNlbnQpXG4gICAgICAgIDogZGVsdGEudmFsdWUgPT09IGluaXRpYWxWYWx1ZVxuICAgICAgICA/IGluaXRpYWxWYWx1ZVxuICAgICAgICA6IG5vdEFwcGxpY2FibGVWYWx1ZVxuICAgIH19PC9zcGFuXG4gID5gLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIH1cbiAgICBgLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgR3REZWx0YUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgTWF0aCA9IE1hdGg7XG4gIE51bWJlciA9IE51bWJlcjtcbiAgQElucHV0KCkgZGF0YTogVGFibGVSb3dzID0gW107XG4gIEBJbnB1dCgpIGluZGV4OiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBiYXNlSW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGNsYXNzZXMgPSB7XG4gICAgc3BhbjogJ2d0LWRlbHRhJyxcbiAgICBwb3NpdGl2ZTogJ3RleHQtc3VjY2VzcycsXG4gICAgbmVnYXRpdmU6ICd0ZXh0LWRhbmdlcicsXG4gIH07XG4gIEBJbnB1dCgpIGtleTogc3RyaW5nID0gJ3ZhbHVlJztcbiAgQElucHV0KCkgbm90QXBwbGljYWJsZVZhbHVlOiBzdHJpbmcgPSAnbi9hJztcbiAgQElucHV0KCkgaW5pdGlhbFZhbHVlOiBzdHJpbmcgPSAnLSc7XG59XG4iXX0=
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3QtZGVsdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL2d0LWRlbHRhL2d0LWRlbHRhLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQWdEcEQsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQjtRQUNBLFNBQUksR0FBRyxJQUFJLENBQUM7UUFDWixXQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ1AsU0FBSSxHQUFvQixFQUFFLENBQUM7UUFDM0IsVUFBSyxHQUFXLENBQUMsQ0FBQztRQUVsQixZQUFPLEdBQUc7WUFDakIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsUUFBUSxFQUFFLGNBQWM7WUFDeEIsUUFBUSxFQUFFLGFBQWE7U0FDeEIsQ0FBQztRQUNPLFFBQUcsR0FBVyxPQUFPLENBQUM7UUFDdEIsdUJBQWtCLEdBQVcsS0FBSyxDQUFDO1FBQ25DLGlCQUFZLEdBQVcsR0FBRyxDQUFDO0lBYnJCLENBQUM7OzZHQURMLGdCQUFnQjtpR0FBaEIsZ0JBQWdCLDhPQTVDakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBZ0NSLGtHQVVRLFdBQVcsZ0RBQUUsSUFBSTsyRkFFaEIsZ0JBQWdCO2tCQTlDNUIsU0FBUzsrQkFDRSxVQUFVLFlBQ1Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBZ0NSLG1CQVFlLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQzswRUFNbkIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtcm93LmludGVyZmFjZSc7XG5pbXBvcnQgeyBOZ0lmLCBQZXJjZW50UGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2d0LWRlbHRhJyxcbiAgdGVtcGxhdGU6IGA8c3BhblxuICAgICpuZ0lmPVwie1xuICAgICAgdmFsdWU6XG4gICAgICAgIGluZGV4ID09PSAwXG4gICAgICAgICAgPyBpbml0aWFsVmFsdWVcbiAgICAgICAgICA6ICgoYmFzZUluZGV4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBkYXRhW2luZGV4IC0gMV1ba2V5XVxuICAgICAgICAgICAgICA6IGRhdGFbYmFzZUluZGV4XVtrZXldKSAtXG4gICAgICAgICAgICAgIGRhdGFbaW5kZXhdW2tleV0pIC9cbiAgICAgICAgICAgIC1NYXRoLmFicyhcbiAgICAgICAgICAgICAgYmFzZUluZGV4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IGRhdGFbaW5kZXggLSAxXVtrZXldXG4gICAgICAgICAgICAgICAgOiBkYXRhW2Jhc2VJbmRleF1ba2V5XVxuICAgICAgICAgICAgKVxuICAgIH0gYXMgZGVsdGFcIlxuICAgIFtjbGFzc109XCJbXG4gICAgICBjbGFzc2VzLnNwYW4sXG4gICAgICAhZGVsdGEudmFsdWUgfHwgIU51bWJlci5pc0Zpbml0ZShkZWx0YS52YWx1ZSlcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogZGVsdGEudmFsdWUgPiAwXG4gICAgICAgID8gY2xhc3Nlcy5wb3NpdGl2ZVxuICAgICAgICA6IGNsYXNzZXMubmVnYXRpdmVcbiAgICBdXCJcbiAgICBbY2xhc3MuZ3QtZGVsdGEtcG9zaXRpdmVdPVwiZGVsdGEudmFsdWUgPiAwICYmIE51bWJlci5pc0Zpbml0ZShkZWx0YS52YWx1ZSlcIlxuICAgIFtjbGFzcy5ndC1kZWx0YS1uZWdhdGl2ZV09XCJkZWx0YS52YWx1ZSA8IDBcIlxuICAgID57e1xuICAgICAgTnVtYmVyLmlzRmluaXRlKGRlbHRhLnZhbHVlKVxuICAgICAgICA/IChkZWx0YS52YWx1ZSB8IHBlcmNlbnQpXG4gICAgICAgIDogZGVsdGEudmFsdWUgPT09IGluaXRpYWxWYWx1ZVxuICAgICAgICA/IGluaXRpYWxWYWx1ZVxuICAgICAgICA6IG5vdEFwcGxpY2FibGVWYWx1ZVxuICAgIH19PC9zcGFuXG4gID5gLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIH1cbiAgICBgLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1BlcmNlbnRQaXBlLCBOZ0lmXSxcbn0pXG5leHBvcnQgY2xhc3MgR3REZWx0YUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgTWF0aCA9IE1hdGg7XG4gIE51bWJlciA9IE51bWJlcjtcbiAgQElucHV0KCkgZGF0YTogQXJyYXk8VGFibGVSb3c+ID0gW107XG4gIEBJbnB1dCgpIGluZGV4OiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBiYXNlSW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGNsYXNzZXMgPSB7XG4gICAgc3BhbjogJ2d0LWRlbHRhJyxcbiAgICBwb3NpdGl2ZTogJ3RleHQtc3VjY2VzcycsXG4gICAgbmVnYXRpdmU6ICd0ZXh0LWRhbmdlcicsXG4gIH07XG4gIEBJbnB1dCgpIGtleTogc3RyaW5nID0gJ3ZhbHVlJztcbiAgQElucHV0KCkgbm90QXBwbGljYWJsZVZhbHVlOiBzdHJpbmcgPSAnbi9hJztcbiAgQElucHV0KCkgaW5pdGlhbFZhbHVlOiBzdHJpbmcgPSAnLSc7XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9tb2RlbHMvdGFibGUtY29sdW1uLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUNvbHVtbiB7XG4gIGhlYWRlcj86IHN0cmluZyB8IGZhbHNlO1xuICBtb2JpbGVIZWFkZXI/OiBzdHJpbmcgfCBib29sZWFuO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG4gIG9yZGVyPzogbnVtYmVyO1xuICBzZWFyY2g/OiBib29sZWFuO1xuICB0ZW1wbGF0ZVJlZj86IFRlbXBsYXRlUmVmPGFueT47XG4gIHRyYW5zZm9ybT86IHtcbiAgICBwaXBlOiBhbnk7XG4gICAgYXJncz86IEFycmF5PGFueT47XG4gIH07XG4gIGNsYXNzPzogc3RyaW5nO1xuICBtYXBUbz86IHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgbWlzc2luZ1ZhbHVlPzogc3RyaW5nIHwgbnVtYmVyO1xuICB9O1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9tb2RlbHMvdGFibGUtY29sdW1uLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnLi90YWJsZS1yb3cuaW50ZXJmYWNlJztcbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb2x1bW48UiA9IFRhYmxlUm93PiB7XG4gIGhlYWRlcj86IHN0cmluZyB8IGZhbHNlO1xuICBtb2JpbGVIZWFkZXI/OiBzdHJpbmcgfCBib29sZWFuO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG4gIG9yZGVyPzogbnVtYmVyO1xuICBzZWFyY2g/OiBib29sZWFuIHwgU2VhcmNoRnVuY3Rpb248Uj47XG4gIHRlbXBsYXRlUmVmPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgdHJhbnNmb3JtPzoge1xuICAgIHBpcGU6IGFueTtcbiAgICBhcmdzPzogQXJyYXk8YW55PjtcbiAgfTtcbiAgY2xhc3M/OiBzdHJpbmc7XG4gIG1hcFRvPzoge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBtaXNzaW5nVmFsdWU/OiBzdHJpbmcgfCBudW1iZXI7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNlYXJjaEZ1bmN0aW9uPFIgPSBUYWJsZVJvdz4gPSAoXG4gIHJvdzogUixcbiAgY29sdW1uOiBrZXlvZiBSLFxuICB2YWx1ZTogdHlwZW9mIHJvd1trZXlvZiBSXVxuKSA9PiBzdHJpbmc7XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9tb2RlbHMvdGFibGUtY29uZmlnLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuL3RhYmxlLWNvbHVtbi5pbnRlcmZhY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29uZmlnIHtcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgbW9iaWxlTGF5b3V0PzogYm9vbGVhbjtcbiAgc3RpY2t5SGVhZGVycz86IHtcbiAgICByb3c/OiBib29sZWFuO1xuICAgIGNvbHVtbj86IGJvb2xlYW47XG4gIH07XG4gIGNsYXNzPzogc3RyaW5nO1xuICByb3dzPzoge1xuICAgIFtrZXk6IHN0cmluZ106IFRhYmxlQ29sdW1uO1xuICB9O1xuICBjb2x1bW5zPzoge1xuICAgIFtrZXk6IHN0cmluZ106IFRhYmxlQ29sdW1uO1xuICB9O1xuICBwYWdpbmF0aW9uPzoge1xuICAgIGxlbmd0aD86IG51bWJlcjtcbiAgfTtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9tb2RlbHMvdGFibGUtY29uZmlnLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuL3RhYmxlLWNvbHVtbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICcuL3RhYmxlLXJvdy5pbnRlcmZhY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29uZmlnPFIgPSBUYWJsZVJvdz4ge1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBtb2JpbGVMYXlvdXQ/OiBib29sZWFuO1xuICBzdGlja3lIZWFkZXJzPzoge1xuICAgIHJvdz86IGJvb2xlYW47XG4gICAgY29sdW1uPzogYm9vbGVhbjtcbiAgfTtcbiAgY2xhc3M/OiBzdHJpbmc7XG4gIHJvd3M/OiB7XG4gICAgW1Byb3BlcnR5IGluIGtleW9mIFJdOiBUYWJsZUNvbHVtbjxSPjtcbiAgfTtcbiAgY29sdW1ucz86IHtcbiAgICBbUHJvcGVydHkgaW4ga2V5b2YgUl06IFRhYmxlQ29sdW1uPFI+O1xuICB9O1xuICBwYWdpbmF0aW9uPzoge1xuICAgIGxlbmd0aD86IG51bWJlcjtcbiAgfTtcbiAgcm93Q2xpY2s/OiBib29sZWFuO1xuICByb3dIb3Zlcj86IGJvb2xlYW47XG4gIGZvb3Rlcj86IHtcbiAgICBoZWFkZXJzPzoge1xuICAgICAgW2tleTogRm9vdGVyQ2FsY3VsYXRpb24gfCBzdHJpbmddOiBzdHJpbmcgfCBib29sZWFuO1xuICAgIH07XG4gICAgY29sdW1ucz86IHtcbiAgICAgIFtQcm9wZXJ0eSBpbiBrZXlvZiBSXTogUGFydGlhbDxUYWJsZUZvb3RlckNvbHVtbjxSPj47XG4gICAgfTtcbiAgICByb3dPcmRlcj86IEFycmF5PGtleW9mIFIgfCBGb290ZXJDYWxjdWxhdGlvbj47XG4gICAgZW1wdHlDb250ZW50Pzogc3RyaW5nO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgVGFibGVGb290ZXJDb2x1bW48Uj4ge1xuICBba2V5OiBGb290ZXJDYWxjdWxhdGlvbiB8IHN0cmluZ106IGJvb2xlYW4gfCBudW1iZXIgfCBzdHJpbmcgfCBDYWxjRnVuYzxSPjtcbn1cbmludGVyZmFjZSBDYWxjRnVuYzxSPiB7XG4gIChkYXRhOiBBcnJheTxSPiwga2V5OiBrZXlvZiBSKTogbnVtYmVyIHwgc3RyaW5nO1xufVxudHlwZSBGb290ZXJDYWxjdWxhdGlvbiA9ICdzdW0nIHwgJ2F2ZycgfCAnY291bnQnIHwgJ21heCcgfCAnbWluJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZXZlbnRzLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9tb2RlbHMvdGFibGUtZXZlbnRzLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICcuL3RhYmxlLXJvdy5pbnRlcmZhY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEd0Um93Q2xpY2tFdmVudDxSID0gVGFibGVSb3c+IHtcbiAgcm93OiBSO1xuICBpbmRleDogbnVtYmVyO1xuICBldmVudDogTW91c2VFdmVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHdFJvd0hvdmVyRXZlbnQ8UiA9IFRhYmxlUm93PiB7XG4gIHJvdzogUiB8IG51bGw7XG4gIGluZGV4OiBudW1iZXIgfCBudWxsO1xuICBldmVudD86IE1vdXNlRXZlbnQ7XG59XG4iXX0=