@skyux/list-builder-view-grids 5.0.0 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/bundles/skyux-list-builder-view-grids-testing.umd.js +6 -6
  2. package/bundles/skyux-list-builder-view-grids-testing.umd.js.map +1 -1
  3. package/bundles/skyux-list-builder-view-grids.umd.js +147 -130
  4. package/bundles/skyux-list-builder-view-grids.umd.js.map +1 -1
  5. package/documentation.json +80 -75
  6. package/esm2015/modules/column-selector/column-selector-modal.component.js +5 -5
  7. package/esm2015/modules/column-selector/column-selector-modal.module.js +9 -13
  8. package/esm2015/modules/list-column-selector-action/list-column-selector-action.component.js +29 -27
  9. package/esm2015/modules/list-column-selector-action/list-column-selector-action.module.js +11 -15
  10. package/esm2015/modules/list-column-selector-action/list-column-selector-button.component.js +5 -5
  11. package/esm2015/modules/list-view-grid/list-view-grid.component.js +73 -58
  12. package/esm2015/modules/list-view-grid/list-view-grid.module.js +10 -12
  13. package/esm2015/modules/list-view-grid/state/columns/columns.orchestrator.js +3 -4
  14. package/esm2015/modules/list-view-grid/state/columns/load.action.js +1 -1
  15. package/esm2015/modules/list-view-grid/state/displayed-columns/displayed-columns.orchestrator.js +3 -4
  16. package/esm2015/modules/list-view-grid/state/displayed-columns/load.action.js +1 -1
  17. package/esm2015/modules/list-view-grid/state/grid-state-action.type.js +1 -1
  18. package/esm2015/modules/list-view-grid/state/grid-state.model.js +1 -1
  19. package/esm2015/modules/list-view-grid/state/grid-state.rxstate.js +4 -4
  20. package/esm2015/modules/list-view-grid/state/grid-state.state-node.js +5 -6
  21. package/esm2015/modules/list-view-grid/types/list-view-grid-message-type.js +1 -1
  22. package/esm2015/modules/list-view-grid/types/list-view-grid-message.js +1 -1
  23. package/esm2015/modules/shared/sky-list-builder-view-grids-resources.module.js +27 -12
  24. package/esm2015/testing/list-view-grid-fixture-cell.js +1 -1
  25. package/esm2015/testing/list-view-grid-fixture-header.js +1 -1
  26. package/esm2015/testing/list-view-grid-fixture-row.js +1 -1
  27. package/esm2015/testing/list-view-grid-fixture.js +4 -4
  28. package/fesm2015/skyux-list-builder-view-grids-testing.js +3 -3
  29. package/fesm2015/skyux-list-builder-view-grids-testing.js.map +1 -1
  30. package/fesm2015/skyux-list-builder-view-grids.js +161 -142
  31. package/fesm2015/skyux-list-builder-view-grids.js.map +1 -1
  32. package/package.json +9 -9
@@ -1,10 +1,10 @@
1
- import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, forwardRef, Input, Output, ViewChild, } from '@angular/core';
2
2
  import { of as observableOf, Subject } from 'rxjs';
3
- import { distinctUntilChanged, map as observableMap, scan, take, takeUntil } from 'rxjs/operators';
3
+ import { distinctUntilChanged, map as observableMap, scan, take, takeUntil, } from 'rxjs/operators';
4
4
  import { getValue } from '@skyux/list-builder-common';
5
- import { SkyGridColumnComponent, SkyGridColumnModel, SkyGridComponent, SkyGridMessageType, SkyGridSelectedRowsSource } from '@skyux/grids';
6
- import { ListSearchModel, ListViewComponent } from '@skyux/list-builder';
7
- import { getData, isObservable } from '@skyux/list-builder-common';
5
+ import { SkyGridColumnComponent, SkyGridColumnModel, SkyGridComponent, SkyGridMessageType, SkyGridSelectedRowsSource, } from '@skyux/grids';
6
+ import { ListSearchModel, ListViewComponent, } from '@skyux/list-builder';
7
+ import { getData, isObservable, } from '@skyux/list-builder-common';
8
8
  import { GridState } from './state/grid-state.state-node';
9
9
  import { GridStateDispatcher } from './state/grid-state.rxstate';
10
10
  import { GridStateModel } from './state/grid-state.model';
@@ -97,19 +97,20 @@ export class SkyListViewGridComponent extends ListViewComponent {
97
97
  }
98
98
  get gridHeight() {
99
99
  /* istanbul ignore next */
100
- return (typeof this.height === 'number')
100
+ return typeof this.height === 'number'
101
101
  ? observableOf(this.height)
102
102
  : this.height;
103
103
  }
104
104
  get gridWidth() {
105
105
  /* istanbul ignore next */
106
- return (typeof this.width === 'number')
106
+ return typeof this.width === 'number'
107
107
  ? observableOf(this.width)
108
108
  : this.width;
109
109
  }
110
110
  ngAfterContentInit() {
111
111
  // Watch for selection changes and update multiselectSelectedIds for local comparison.
112
- this.state.pipe(observableMap(s => s.selected.item), takeUntil(this.ngUnsubscribe), distinctUntilChanged(this.selectedMapEqual))
112
+ this.state
113
+ .pipe(observableMap((s) => s.selected.item), takeUntil(this.ngUnsubscribe), distinctUntilChanged(this.selectedMapEqual))
113
114
  .subscribe((items) => {
114
115
  const selectedIds = [];
115
116
  items.selectedIdMap.forEach((isSelected, id) => {
@@ -123,7 +124,7 @@ export class SkyListViewGridComponent extends ListViewComponent {
123
124
  if (this.columnComponents.length === 0) {
124
125
  throw new Error('Grid view requires at least one sky-grid-column to render.');
125
126
  }
126
- let columnModels = this.columnComponents.map(columnComponent => {
127
+ let columnModels = this.columnComponents.map((columnComponent) => {
127
128
  return new SkyGridColumnModel(columnComponent.template, columnComponent);
128
129
  });
129
130
  if (this.width && !isObservable(this.width)) {
@@ -133,7 +134,7 @@ export class SkyListViewGridComponent extends ListViewComponent {
133
134
  this.height = observableOf(this.height);
134
135
  }
135
136
  // Setup Observables for template
136
- this.columns = this.gridState.pipe(observableMap(s => s.columns.items), distinctUntilChanged(this.arraysEqual), takeUntil(this.ngUnsubscribe));
137
+ this.columns = this.gridState.pipe(observableMap((s) => s.columns.items), distinctUntilChanged(this.arraysEqual), takeUntil(this.ngUnsubscribe));
137
138
  this.selectedColumnIds = this.getSelectedIds();
138
139
  this.items = this.getGridItems();
139
140
  this.loading = this.state.pipe(observableMap((s) => {
@@ -149,12 +150,13 @@ export class SkyListViewGridComponent extends ListViewComponent {
149
150
  /* sanity check */
150
151
  return undefined;
151
152
  }), distinctUntilChanged(), takeUntil(this.ngUnsubscribe));
152
- this.gridState.pipe(observableMap(s => s.columns.items), takeUntil(this.ngUnsubscribe), distinctUntilChanged(this.arraysEqual))
153
- .subscribe(columns => {
153
+ this.gridState
154
+ .pipe(observableMap((s) => s.columns.items), takeUntil(this.ngUnsubscribe), distinctUntilChanged(this.arraysEqual))
155
+ .subscribe((columns) => {
154
156
  /* istanbul ignore else */
155
157
  if (this.hiddenColumns) {
156
158
  getValue(this.hiddenColumns, (hiddenColumns) => {
157
- this.gridDispatcher.next(new ListViewDisplayedGridColumnsLoadAction(columns.filter(x => {
159
+ this.gridDispatcher.next(new ListViewDisplayedGridColumnsLoadAction(columns.filter((x) => {
158
160
  /* istanbul ignore next */
159
161
  /* sanity check */
160
162
  let id = x.id || x.field;
@@ -165,14 +167,14 @@ export class SkyListViewGridComponent extends ListViewComponent {
165
167
  else if (this.displayedColumns) {
166
168
  /* istanbul ignore next */
167
169
  getValue(this.displayedColumns, (displayedColumns) => {
168
- this.gridDispatcher.next(new ListViewDisplayedGridColumnsLoadAction(columns.filter(x => displayedColumns.indexOf(x.id || x.field) !== -1), true));
170
+ this.gridDispatcher.next(new ListViewDisplayedGridColumnsLoadAction(columns.filter((x) => displayedColumns.indexOf(x.id || x.field) !== -1), true));
169
171
  });
170
172
  }
171
173
  else {
172
- this.gridDispatcher.next(new ListViewDisplayedGridColumnsLoadAction(columns.filter(x => !x.hidden), true));
174
+ this.gridDispatcher.next(new ListViewDisplayedGridColumnsLoadAction(columns.filter((x) => !x.hidden), true));
173
175
  }
174
176
  });
175
- this.currentSearchText = this.state.pipe(observableMap(s => s.search.searchText), distinctUntilChanged(), takeUntil(this.ngUnsubscribe));
177
+ this.currentSearchText = this.state.pipe(observableMap((s) => s.search.searchText), distinctUntilChanged(), takeUntil(this.ngUnsubscribe));
176
178
  this.gridDispatcher.next(new ListViewGridColumnsLoadAction(columnModels, true));
177
179
  this.handleColumnChange();
178
180
  if (this.enableMultiselect) {
@@ -191,10 +193,11 @@ export class SkyListViewGridComponent extends ListViewComponent {
191
193
  onMultiselectSelectionChange(event) {
192
194
  if (event.source === SkyGridSelectedRowsSource.CheckboxChange ||
193
195
  event.source === SkyGridSelectedRowsSource.RowClick) {
194
- this.state.pipe(observableMap(s => s.items.items), take(1))
196
+ this.state
197
+ .pipe(observableMap((s) => s.items.items), take(1))
195
198
  .subscribe((items) => {
196
- const newItemIds = this.arrayIntersection(items.map(i => i.id), this.multiselectSelectedIds);
197
- const newIds = items.filter(i => i.isSelected).map(i => i.id);
199
+ const newItemIds = this.arrayIntersection(items.map((i) => i.id), this.multiselectSelectedIds);
200
+ const newIds = items.filter((i) => i.isSelected).map((i) => i.id);
198
201
  // Check for deselected ids & send message to dispatcher.
199
202
  const deselectedIds = this.arrayDiff(newItemIds, newIds);
200
203
  if (deselectedIds.length > 0) {
@@ -209,12 +212,12 @@ export class SkyListViewGridComponent extends ListViewComponent {
209
212
  }
210
213
  }
211
214
  columnIdsChanged(selectedColumnIds) {
212
- this.selectedColumnIds.pipe(take(1))
213
- .subscribe(currentIds => {
214
- if (!(this.arraysEqual(selectedColumnIds, currentIds))) {
215
- this.gridState.pipe(observableMap(s => s.columns.items), take(1))
216
- .subscribe(columns => {
217
- let displayedColumns = selectedColumnIds.map(columnId => columns.filter(c => c.id === columnId)[0]);
215
+ this.selectedColumnIds.pipe(take(1)).subscribe((currentIds) => {
216
+ if (!this.arraysEqual(selectedColumnIds, currentIds)) {
217
+ this.gridState
218
+ .pipe(observableMap((s) => s.columns.items), take(1))
219
+ .subscribe((columns) => {
220
+ let displayedColumns = selectedColumnIds.map((columnId) => columns.filter((c) => c.id === columnId)[0]);
218
221
  this.gridDispatcher.next(new ListViewDisplayedGridColumnsLoadAction(displayedColumns, true));
219
222
  });
220
223
  }
@@ -235,24 +238,27 @@ export class SkyListViewGridComponent extends ListViewComponent {
235
238
  update, the searchText update was consumed after the resulting list item update. Scanning the
236
239
  previous value of items lastUpdate ensures that we only receive the latest items.
237
240
  */
238
- this.gridState.pipe(takeUntil(this.ngUnsubscribe), scan((previousValue, newValue) => {
239
- if (previousValue.displayedColumns.lastUpdate > newValue.displayedColumns.lastUpdate) {
241
+ this.gridState
242
+ .pipe(takeUntil(this.ngUnsubscribe), scan((previousValue, newValue) => {
243
+ if (previousValue.displayedColumns.lastUpdate >
244
+ newValue.displayedColumns.lastUpdate) {
240
245
  return previousValue;
241
246
  }
242
247
  else {
243
248
  return newValue;
244
249
  }
245
- }), observableMap(s => s.displayedColumns.items), distinctUntilChanged(this.arraysEqual))
246
- .subscribe(displayedColumns => {
247
- let setFunctions = this.searchFunction !== undefined ? [this.searchFunction] :
248
- displayedColumns
249
- .map(column => (data, searchText) => column.searchFunction(getData(data, column.field), searchText))
250
- .filter(c => c !== undefined);
251
- this.state.pipe(take(1)).subscribe(s => {
250
+ }), observableMap((s) => s.displayedColumns.items), distinctUntilChanged(this.arraysEqual))
251
+ .subscribe((displayedColumns) => {
252
+ let setFunctions = this.searchFunction !== undefined
253
+ ? [this.searchFunction]
254
+ : displayedColumns
255
+ .map((column) => (data, searchText) => column.searchFunction(getData(data, column.field), searchText))
256
+ .filter((c) => c !== undefined);
257
+ this.state.pipe(take(1)).subscribe((s) => {
252
258
  this.dispatcher.searchSetOptions(new ListSearchModel({
253
259
  searchText: s.search.searchText,
254
260
  functions: setFunctions,
255
- fieldSelectors: displayedColumns.map(d => d.field)
261
+ fieldSelectors: displayedColumns.map((d) => d.field),
256
262
  }));
257
263
  });
258
264
  });
@@ -265,16 +271,16 @@ export class SkyListViewGridComponent extends ListViewComponent {
265
271
  this.gridMessageStream.next({
266
272
  type: SkyGridMessageType.AbortDeleteRow,
267
273
  data: {
268
- abortDeleteRow: message.data.abortDeleteRow
269
- }
274
+ abortDeleteRow: message.data.abortDeleteRow,
275
+ },
270
276
  });
271
277
  }
272
278
  else if (message.type === SkyListViewGridMessageType.PromptDeleteRow) {
273
279
  this.gridMessageStream.next({
274
280
  type: SkyGridMessageType.PromptDeleteRow,
275
281
  data: {
276
- promptDeleteRow: message.data.promptDeleteRow
277
- }
282
+ promptDeleteRow: message.data.promptDeleteRow,
283
+ },
278
284
  });
279
285
  }
280
286
  });
@@ -282,20 +288,23 @@ export class SkyListViewGridComponent extends ListViewComponent {
282
288
  }
283
289
  handleColumnChange() {
284
290
  // watch for changes in column components
285
- this.columnComponents.changes.pipe(takeUntil(this.ngUnsubscribe))
291
+ this.columnComponents.changes
292
+ .pipe(takeUntil(this.ngUnsubscribe))
286
293
  .subscribe((columnComponents) => {
287
- let columnModels = this.columnComponents.map(column => {
294
+ let columnModels = this.columnComponents.map((column) => {
288
295
  return new SkyGridColumnModel(column.template, column);
289
296
  });
290
297
  this.gridDispatcher.next(new ListViewGridColumnsLoadAction(columnModels, true));
291
298
  });
292
299
  // Watch for column heading changes:
293
300
  this.columnComponents.forEach((comp) => {
294
- comp.headingModelChanges.pipe(takeUntil(this.ngUnsubscribe))
301
+ comp.headingModelChanges
302
+ .pipe(takeUntil(this.ngUnsubscribe))
295
303
  .subscribe((change) => {
296
304
  this.gridComponent.updateColumnHeading(change);
297
305
  });
298
- comp.descriptionModelChanges.pipe(takeUntil(this.ngUnsubscribe))
306
+ comp.descriptionModelChanges
307
+ .pipe(takeUntil(this.ngUnsubscribe))
299
308
  .subscribe((change) => {
300
309
  this.gridComponent.updateColumnDescription(change);
301
310
  });
@@ -326,7 +335,7 @@ export class SkyListViewGridComponent extends ListViewComponent {
326
335
  static properties to a static state object with observable properties that you can subscribe
327
336
  to.
328
337
  */
329
- return this.gridState.pipe(observableMap(s => s.displayedColumns), scan((previousValue, newValue) => {
338
+ return this.gridState.pipe(observableMap((s) => s.displayedColumns), scan((previousValue, newValue) => {
330
339
  if (previousValue.lastUpdate > newValue.lastUpdate) {
331
340
  return previousValue;
332
341
  }
@@ -375,26 +384,29 @@ export class SkyListViewGridComponent extends ListViewComponent {
375
384
  return true;
376
385
  }
377
386
  arrayDiff(arrA, arrB) {
378
- return arrA.filter(i => arrB.indexOf(i) < 0);
387
+ return arrA.filter((i) => arrB.indexOf(i) < 0);
379
388
  }
380
389
  arrayIntersection(arrA, arrB) {
381
- return arrA.filter(value => -1 !== arrB.indexOf(value));
390
+ return arrA.filter((value) => -1 !== arrB.indexOf(value));
382
391
  }
383
392
  arraysEqual(arrayA, arrayB) {
384
- return arrayA.length === arrayB.length &&
385
- arrayA.every((value, index) => value === arrayB[index]);
393
+ return (arrayA.length === arrayB.length &&
394
+ arrayA.every((value, index) => value === arrayB[index]));
386
395
  }
387
396
  }
388
- SkyListViewGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.8", ngImport: i0, type: SkyListViewGridComponent, deps: [{ token: i1.ListState }, { token: i1.ListStateDispatcher }, { token: i2.GridState }, { token: i3.GridStateDispatcher }], target: i0.ɵɵFactoryTarget.Component });
389
- SkyListViewGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.8", type: SkyListViewGridComponent, selector: "sky-list-view-grid", inputs: { name: "name", displayedColumns: "displayedColumns", hiddenColumns: "hiddenColumns", fit: "fit", width: "width", height: "height", highlightSearchText: "highlightSearchText", messageStream: "messageStream", rowHighlightedId: "rowHighlightedId", enableMultiselect: "enableMultiselect", settingsKey: "settingsKey", searchFunction: ["search", "searchFunction"] }, outputs: { rowDeleteCancel: "rowDeleteCancel", rowDeleteConfirm: "rowDeleteConfirm", selectedColumnIdsChange: "selectedColumnIdsChange" }, providers: [
397
+ SkyListViewGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SkyListViewGridComponent, deps: [{ token: i1.ListState }, { token: i1.ListStateDispatcher }, { token: i2.GridState }, { token: i3.GridStateDispatcher }], target: i0.ɵɵFactoryTarget.Component });
398
+ SkyListViewGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: SkyListViewGridComponent, selector: "sky-list-view-grid", inputs: { name: "name", displayedColumns: "displayedColumns", hiddenColumns: "hiddenColumns", fit: "fit", width: "width", height: "height", highlightSearchText: "highlightSearchText", messageStream: "messageStream", rowHighlightedId: "rowHighlightedId", enableMultiselect: "enableMultiselect", settingsKey: "settingsKey", searchFunction: ["search", "searchFunction"] }, outputs: { rowDeleteCancel: "rowDeleteCancel", rowDeleteConfirm: "rowDeleteConfirm", selectedColumnIdsChange: "selectedColumnIdsChange" }, providers: [
390
399
  /* tslint:disable */
391
- { provide: ListViewComponent, useExisting: forwardRef(() => SkyListViewGridComponent) },
400
+ {
401
+ provide: ListViewComponent,
402
+ useExisting: forwardRef(() => SkyListViewGridComponent),
403
+ },
392
404
  /* tslint:enable */
393
405
  GridState,
394
406
  GridStateDispatcher,
395
- GridStateModel
396
- ], queries: [{ propertyName: "columnComponents", predicate: SkyGridColumnComponent }], viewQueries: [{ propertyName: "gridComponent", first: true, predicate: SkyGridComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"active | async\">\n <sky-grid\n [columns]=\"columns | async\"\n [data]=\"items | async\"\n [enableMultiselect]=\"enableMultiselect\"\n [fit]=\"fit\"\n [height]=\"gridHeight | async\"\n [highlightText]=\"highlightSearchText ? (currentSearchText | async) : undefined\"\n [rowHighlightedId]=\"rowHighlightedId\"\n [messageStream]=\"gridMessageStream\"\n [selectedColumnIds]=\"selectedColumnIds | async\"\n [selectedRowIds]=\"multiselectSelectedIds\"\n [settingsKey]=\"settingsKey\"\n [sortField]=\"sortField | async\"\n [width]=\"gridWidth | async\"\n (multiselectSelectionChange)=\"onMultiselectSelectionChange($event)\"\n (rowDeleteCancel)=\"cancelRowDelete($event)\"\n (rowDeleteConfirm)=\"confirmRowDelete($event)\"\n (selectedColumnIdsChange)=\"columnIdsChanged($event)\"\n (sortFieldChange)=\"sortFieldChanged($event)\"\n #skyGrid\n >\n </sky-grid>\n <sky-wait\n [isWaiting]=\"loading | async\"\n >\n </sky-wait>\n</div>\n", styles: [":host ::ng-deep .sky-grid-heading{border-top:0!important}\n"], components: [{ type: i4.SkyGridComponent, selector: "sky-grid", inputs: ["columns", "data", "enableMultiselect", "fit", "hasToolbar", "height", "highlightText", "messageStream", "multiselectRowId", "rowHighlightedId", "selectedColumnIds", "selectedRowIds", "settingsKey", "sortField", "width"], outputs: ["columnWidthChange", "multiselectSelectionChange", "rowDeleteCancel", "rowDeleteConfirm", "selectedColumnIdsChange", "sortFieldChange"] }, { type: i5.λ14, selector: "sky-wait", inputs: ["ariaLabel", "isWaiting", "isFullPage", "isNonBlocking"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i6.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
397
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.8", ngImport: i0, type: SkyListViewGridComponent, decorators: [{
407
+ GridStateModel,
408
+ ], queries: [{ propertyName: "columnComponents", predicate: SkyGridColumnComponent }], viewQueries: [{ propertyName: "gridComponent", first: true, predicate: SkyGridComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"active | async\">\n <sky-grid\n [columns]=\"columns | async\"\n [data]=\"items | async\"\n [enableMultiselect]=\"enableMultiselect\"\n [fit]=\"fit\"\n [height]=\"gridHeight | async\"\n [highlightText]=\"\n highlightSearchText ? (currentSearchText | async) : undefined\n \"\n [rowHighlightedId]=\"rowHighlightedId\"\n [messageStream]=\"gridMessageStream\"\n [selectedColumnIds]=\"selectedColumnIds | async\"\n [selectedRowIds]=\"multiselectSelectedIds\"\n [settingsKey]=\"settingsKey\"\n [sortField]=\"sortField | async\"\n [width]=\"gridWidth | async\"\n (multiselectSelectionChange)=\"onMultiselectSelectionChange($event)\"\n (rowDeleteCancel)=\"cancelRowDelete($event)\"\n (rowDeleteConfirm)=\"confirmRowDelete($event)\"\n (selectedColumnIdsChange)=\"columnIdsChanged($event)\"\n (sortFieldChange)=\"sortFieldChanged($event)\"\n #skyGrid\n >\n </sky-grid>\n <sky-wait [isWaiting]=\"loading | async\"> </sky-wait>\n</div>\n", styles: [":host ::ng-deep .sky-grid-heading{border-top:0!important}\n"], components: [{ type: i4.SkyGridComponent, selector: "sky-grid", inputs: ["columns", "data", "enableMultiselect", "fit", "hasToolbar", "height", "highlightText", "messageStream", "multiselectRowId", "rowHighlightedId", "selectedColumnIds", "selectedRowIds", "settingsKey", "sortField", "width"], outputs: ["columnWidthChange", "multiselectSelectionChange", "rowDeleteCancel", "rowDeleteConfirm", "selectedColumnIdsChange", "sortFieldChange"] }, { type: i5.λ14, selector: "sky-wait", inputs: ["ariaLabel", "isWaiting", "isFullPage", "isNonBlocking"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i6.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
409
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SkyListViewGridComponent, decorators: [{
398
410
  type: Component,
399
411
  args: [{
400
412
  selector: 'sky-list-view-grid',
@@ -402,13 +414,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.8", ngImpor
402
414
  styleUrls: ['./list-view-grid.component.scss'],
403
415
  providers: [
404
416
  /* tslint:disable */
405
- { provide: ListViewComponent, useExisting: forwardRef(() => SkyListViewGridComponent) },
417
+ {
418
+ provide: ListViewComponent,
419
+ useExisting: forwardRef(() => SkyListViewGridComponent),
420
+ },
406
421
  /* tslint:enable */
407
422
  GridState,
408
423
  GridStateDispatcher,
409
- GridStateModel
424
+ GridStateModel,
410
425
  ],
411
- changeDetection: ChangeDetectionStrategy.OnPush
426
+ changeDetection: ChangeDetectionStrategy.OnPush,
412
427
  }]
413
428
  }], ctorParameters: function () { return [{ type: i1.ListState }, { type: i1.ListStateDispatcher }, { type: i2.GridState }, { type: i3.GridStateDispatcher }]; }, propDecorators: { name: [{
414
429
  type: Input
@@ -448,4 +463,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.8", ngImpor
448
463
  type: ContentChildren,
449
464
  args: [SkyGridColumnComponent]
450
465
  }] } });
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12aWV3LWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGlzdC1idWlsZGVyLXZpZXctZ3JpZHMvc3JjL21vZHVsZXMvbGlzdC12aWV3LWdyaWQvbGlzdC12aWV3LWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGlzdC1idWlsZGVyLXZpZXctZ3JpZHMvc3JjL21vZHVsZXMvbGlzdC12aWV3LWdyaWQvbGlzdC12aWV3LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUVMLEVBQUUsSUFBSSxZQUFZLEVBQ2xCLE9BQU8sRUFDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsR0FBRyxJQUFJLGFBQWEsRUFDcEIsSUFBSSxFQUNKLElBQUksRUFDSixTQUFTLEVBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBRUwsUUFBUSxFQUNULE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsT0FBTyxFQUNMLHNCQUFzQixFQUd0QixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBRWhCLGtCQUFrQixFQUVsQix5QkFBeUIsRUFDMUIsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUNMLGVBQWUsRUFJZixpQkFBaUIsRUFDbEIsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQ0wsT0FBTyxFQUNQLFlBQVksRUFHYixNQUFNLDRCQUE0QixDQUFDO0FBRXBDLE9BQU8sRUFDTCxTQUFTLEVBQ1YsTUFBTSwrQkFBK0IsQ0FBQztBQUV2QyxPQUFPLEVBQ0wsbUJBQW1CLEVB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aUM7b0JBQzlDLFNBQVMsRUFBRSxDQUFDLGlDQUFpQyxDQUFDO29CQUM5QyxTQUFTLEVBQUU7d0JBQ1Qsb0JBQW9CO3dCQUNwQixFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx5QkFBeUIsQ0FBQyxFQUFFO3dCQUN2RixtQkFBbUI7d0JBQ25CLFNBQVM7d0JBQ1QsbUJBQW1CO3dCQUNuQixjQUFjO3FCQUNmO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs0TEFTWSxJQUFJO3NCQURkLEtBQUs7Z0JBU0MsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQU9DLGFBQWE7c0JBRG5CLEtBQUs7Z0JBVUMsR0FBRztzQkFEVCxLQUFLO2dCQU9DLEtBQUs7c0JBRFgsS0FBSztnQkFPQyxNQUFNO3NCQURaLEtBQUs7Z0JBUUMsbUJBQW1CO3NCQUR6QixLQUFLO2dCQVFLLGFBQWE7c0JBRHZCLEtBQUs7Z0JBdUJDLGdCQUFnQjtzQkFEdEIsS0FBSztnQkFXQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBVUMsV0FBVztzQkFEakIsS0FBSztnQkFPQyxlQUFlO3NCQURyQixNQUFNO2dCQU9BLGdCQUFnQjtzQkFEdEIsTUFBTTtnQkFTQSx1QkFBdUI7c0JBRDdCLE1BQU07Z0JBSUEsYUFBYTtzQkFEbkIsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBNENwQixjQUFjO3NCQURwQixLQUFLO3VCQUFDLFFBQVE7Z0JBSVAsZ0JBQWdCO3NCQUR2QixlQUFlO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBPYnNlcnZhYmxlLFxuICBvZiBhcyBvYnNlcnZhYmxlT2YsXG4gIFN1YmplY3Rcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBtYXAgYXMgb2JzZXJ2YWJsZU1hcCxcbiAgc2NhbixcbiAgdGFrZSxcbiAgdGFrZVVudGlsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgQXN5bmNMaXN0LFxuICBnZXRWYWx1ZVxufSBmcm9tICdAc2t5dXgvbGlzdC1idWlsZGVyLWNvbW1vbic7XG5cbmltcG9ydCB7XG4gIFNreUdyaWRDb2x1bW5Db21wb25lbnQsXG4gIFNreUdyaWRDb2x1bW5IZWFkaW5nTW9kZWxDaGFuZ2UsXG4gIFNreUdyaWRDb2x1bW5EZXNjcmlwdGlvbk1vZGVsQ2hhbmdlLFxuICBTa3lHcmlkQ29sdW1uTW9kZWwsXG4gIFNreUdyaWRDb21wb25lbnQsXG4gIFNreUdyaWRNZXNzYWdlLFxuICBTa3lHcmlkTWVzc2FnZVR5cGUsXG4gIFNreUdyaWRTZWxlY3RlZFJvd3NNb2RlbENoYW5nZSxcbiAgU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZVxufSBmcm9tICdAc2t5dXgvZ3JpZHMnO1xuXG5pbXBvcnQge1xuICBMaXN0U2VhcmNoTW9kZWwsXG4gIExpc3RTZWxlY3RlZE1vZGVsLFxuICBMaXN0U3RhdGUsXG4gIExpc3RTdGF0ZURpc3BhdGNoZXIsXG4gIExpc3RWaWV3Q29tcG9uZW50XG59IGZyb20gJ0Bza3l1eC9saXN0LWJ1aWxkZXInO1xuXG5pbXBvcnQge1xuICBnZXREYXRhLFxuICBpc09ic2VydmFibGUsXG4gIExpc3RJdGVtTW9kZWwsXG4gIExpc3RTb3J0RmllbGRTZWxlY3Rvck1vZGVsXG59IGZyb20gJ0Bza3l1eC9saXN0LWJ1aWxkZXItY29tbW9uJztcblxuaW1wb3J0IHtcbiAgR3JpZFN0YXRlXG59IGZyb20gJy4vc3RhdGUvZ3JpZC1zdGF0ZS5zdGF0ZS1ub2RlJztcblxuaW1wb3J0IHtcbiAgR3JpZFN0YXRlRGlzcGF0Y2hlclxufSBmcm9tICcuL3N0YXRlL2dyaWQtc3RhdGUucnhzdGF0ZSc7XG5cbmltcG9ydCB7XG4gIEdyaWRTdGF0ZU1vZGVsXG59IGZyb20gJy4vc3RhdGUvZ3JpZC1zdGF0ZS5tb2RlbCc7XG5cbmltcG9ydCB7XG4gIExpc3RWaWV3R3JpZENvbHVtbnNMb2FkQWN0aW9uXG59IGZyb20gJy4vc3RhdGUvY29sdW1ucy9sb2FkLmFjdGlvbic7XG5cbmltcG9ydCB7XG4gIExpc3RWaWV3RGlzcGxheWVkR3JpZENvbHVtbnNMb2FkQWN0aW9uXG59IGZyb20gJy4vc3RhdGUvZGlzcGxheWVkLWNvbHVtbnMvbG9hZC5hY3Rpb24nO1xuXG5pbXBvcnQge1xuICBTa3lMaXN0Vmlld0dyaWRNZXNzYWdlXG59IGZyb20gJy4vdHlwZXMvbGlzdC12aWV3LWdyaWQtbWVzc2FnZSc7XG5cbmltcG9ydCB7XG4gIFNreUxpc3RWaWV3R3JpZE1lc3NhZ2VUeXBlXG59IGZyb20gJy4vdHlwZXMvbGlzdC12aWV3LWdyaWQtbWVzc2FnZS10eXBlJztcblxuaW1wb3J0IHtcbiAgU2t5TGlzdFZpZXdHcmlkUm93RGVsZXRlQ2FuY2VsQXJnc1xufSBmcm9tICcuL3R5cGVzL2xpc3Qtdmlldy1ncmlkLXJvdy1kZWxldGUtY2FuY2VsLWFyZ3MnO1xuXG5pbXBvcnQge1xuICBTa3lMaXN0Vmlld0dyaWRSb3dEZWxldGVDb25maXJtQXJnc1xufSBmcm9tICcuL3R5cGVzL2xpc3Qtdmlldy1ncmlkLXJvdy1kZWxldGUtY29uZmlybS1hcmdzJztcblxuLyoqXG4gKiBEaXNwbGF5cyBhIGdyaWQgZm9yIGFcbiAqIFtTS1kgVVgtdGhlbWVkIGxpc3Qgb2YgZGF0YV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2xpc3Qvb3ZlcnZpZXcpXG4gKiB1c2luZyB0aGUgW2dyaWQgY29tcG9uZW50XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvZ3JpZCkuXG4gKiBZb3UgbXVzdCBpbnN0YWxsIGBTa3lMaXN0TW9kdWxlYCBhcyBhIGRlcGVuZGVuY3kuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1saXN0LXZpZXctZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LXZpZXctZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xpc3Qtdmlldy1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIC8qIHRzbGludDpkaXNhYmxlICovXG4gICAgeyBwcm92aWRlOiBMaXN0Vmlld0NvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2t5TGlzdFZpZXdHcmlkQ29tcG9uZW50KSB9LFxuICAgIC8qIHRzbGludDplbmFibGUgKi9cbiAgICBHcmlkU3RhdGUsXG4gICAgR3JpZFN0YXRlRGlzcGF0Y2hlcixcbiAgICBHcmlkU3RhdGVNb2RlbFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTa3lMaXN0Vmlld0dyaWRDb21wb25lbnQgZXh0ZW5kcyBMaXN0Vmlld0NvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgdmlldy5cbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmlld05hbWUgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGNvbHVtbnMgdG8gZGlzcGxheSBieSBkZWZhdWx0IGJhc2VkIG9uIHRoZSBJRCBvciBmaWVsZCBvZiB0aGUgaXRlbS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkaXNwbGF5ZWRDb2x1bW5zOiBBcnJheTxzdHJpbmc+IHwgT2JzZXJ2YWJsZTxBcnJheTxzdHJpbmc+PjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBjb2x1bW5zIHRvIGhpZGUgYnkgZGVmYXVsdCBiYXNlZCBvbiB0aGUgSUQgb3IgZmllbGQgb2YgdGhlIGl0ZW0uXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGlkZGVuQ29sdW1uczogQXJyYXk8c3RyaW5nPiB8IE9ic2VydmFibGU8QXJyYXk8c3RyaW5nPj47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBob3cgdGhlIGdyaWQgZml0cyB0byBpdHMgcGFyZW50LiBgd2lkdGhgIGZpdHMgdGhlIGdyaWQgdG8gdGhlIHBhcmVudCdzIGZ1bGxcbiAgICogd2lkdGgsIGFuZCBgc2Nyb2xsYCBhbGxvd3MgdGhlIGdyaWQgdG8gZXhjZWVkIHRoZSBwYXJlbnQncyB3aWR0aC4gSWYgdGhlIGdyaWQgZG9lcyBub3QgaGF2ZVxuICAgKiBlbm91Z2ggY29sdW1ucyB0byBmaWxsIHRoZSBwYXJlbnQncyB3aWR0aCwgaXQgYWx3YXlzIHN0cmV0Y2hlcyB0byB0aGUgcGFyZW50J3MgZnVsbCB3aWR0aC5cbiAgICogQGRlZmF1bHQgd2lkdGhcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmaXQ6IHN0cmluZyA9ICd3aWR0aCc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgd2lkdGggb2YgdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgd2lkdGg6IG51bWJlciB8IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBoZWlnaHQgb2YgdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVpZ2h0OiBudW1iZXIgfCBPYnNlcnZhYmxlPG51bWJlcj47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGhpZ2hsaWdodCBzZWFyY2ggdGV4dCB3aXRoaW4gdGhlIGdyaWQuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoaWdobGlnaHRTZWFyY2hUZXh0OiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogUHJvdmlkZXMgYW4gb2JzZXJ2YWJsZSB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBncmlkLlxuICAgKiBUaGUgY29tbWFuZHMgc2hvdWxkIHJlc3BlY3QgdGhlIGBTa3lMaXN0Vmlld0dyaWRNZXNzYWdlYCB0eXBlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtZXNzYWdlU3RyZWFtKHN0cmVhbTogU3ViamVjdDxTa3lMaXN0Vmlld0dyaWRNZXNzYWdlPikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuX21lc3NhZ2VTdHJlYW0pIHtcbiAgICAgIHRoaXMuX21lc3NhZ2VTdHJlYW0udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXNzYWdlU3RyZWFtID0gc3RyZWFtO1xuXG4gICAgdGhpcy5pbml0SW5saW5lRGVsZXRlTWVzc2FnZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWVzc2FnZVN0cmVhbSgpOiBTdWJqZWN0PFNreUxpc3RWaWV3R3JpZE1lc3NhZ2U+IHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZVN0cmVhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIElEIG9mIHRoZSByb3cgdG8gaGlnaGxpZ2h0LiBUaGUgSUQgbWF0Y2hlcyB0aGUgYGlkYCBwcm9wZXJ0eSBvZlxuICAgKiB0aGUgYGRhdGFgIG9iamVjdC4gVHlwaWNhbGx5LCB0aGlzIHByb3BlcnR5IGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVcbiAgICogW2ZseW91dCBjb21wb25lbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9mbHlvdXQpIHRvXG4gICAqIGluZGljYXRlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcm93LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHJvd0hpZ2hsaWdodGVkSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBtdWx0aXNlbGVjdCBmZWF0dXJlIHRvIGRpc3BsYXkgYSBjb2x1bW4gb2YgY2hlY2tib3hlc1xuICAgKiBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBncmlkLiBNdWx0aXNlbGVjdCBhbHNvIGRpc3BsYXlzIGFuIGFjdGlvbiBiYXIgd2l0aCBidXR0b25zIHRvXG4gICAqIHNlbGVjdCBhbmQgY2xlYXIgYWxsIGNoZWNrYm94ZXMuIE11bHRpc2VsZWN0IGRlZmF1bHRzIHRvIHRoZSBgaWRgIHByb3BlcnR5IG9uIHRoZSBsaXN0J3NcbiAgICogYGRhdGFgIG9iamVjdC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBlbmFibGVNdWx0aXNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSB1bmlxdWUga2V5IGZvciB0aGUgVUkgQ29uZmlnIFNlcnZpY2UgdG8gcmV0cmlldmUgc3RvcmVkIHNldHRpbmdzIGZyb21cbiAgICogYSBkYXRhYmFzZS4gVGhlIHNlcnZpY2Ugc2F2ZXMgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdXNlcnMgYW5kIHJldHVybnMgYHNlbGVjdGVkQ29sdW1uSWRzYFxuICAgKiBmb3IgdGhlIGNvbHVtbnMgdG8gZGlzcGxheSBhbmQgdGhlIHByZWZlcnJlZCBjb2x1bW4gb3JkZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlXG4gICAqIFtzdGlja3kgc2V0dGluZ3MgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9nZXQtc3RhcnRlZC9hZHZhbmNlZC9zdGlja3ktc2V0dGluZ3MpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldHRpbmdzS2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgY2FuY2VsIHRoZSBkZWxldGlvbiBvZiBhIHJvdy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcm93RGVsZXRlQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lMaXN0Vmlld0dyaWRSb3dEZWxldGVDYW5jZWxBcmdzPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIGNvbmZpcm0gdGhlIGRlbGV0aW9uIG9mIGEgcm93LlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByb3dEZWxldGVDb25maXJtID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lMaXN0Vmlld0dyaWRSb3dEZWxldGVDb25maXJtQXJncz4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiBjb2x1bW5zIGNoYW5nZS4gVGhpcyBpbmNsdWRlcyBjaGFuZ2VzIHRvIHRoZSBkaXNwbGF5ZWQgY29sdW1ucyBhbmQgY2hhbmdlc1xuICAgKiB0byB0aGUgb3JkZXIgb2YgY29sdW1ucy4gVGhlIGV2ZW50IGVtaXRzIGFuIGFycmF5IG9mIElEcyBmb3IgdGhlIGRpc3BsYXllZCBjb2x1bW5zIHRoYXRcbiAgICogcmVmbGVjdHMgdGhlIGNvbHVtbiBvcmRlci5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWRDb2x1bW5JZHNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PHN0cmluZz4+KCk7XG5cbiAgQFZpZXdDaGlsZChTa3lHcmlkQ29tcG9uZW50KVxuICBwdWJsaWMgZ3JpZENvbXBvbmVudDogU2t5R3JpZENvbXBvbmVudDtcblxuICBwdWJsaWMgZ2V0IGdyaWRIZWlnaHQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiAodHlwZW9mIHRoaXMuaGVpZ2h0ID09PSAnbnVtYmVyJylcbiAgICAgID8gb2JzZXJ2YWJsZU9mKHRoaXMuaGVpZ2h0KVxuICAgICAgOiB0aGlzLmhlaWdodDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZ3JpZFdpZHRoKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gKHR5cGVvZiB0aGlzLndpZHRoID09PSAnbnVtYmVyJylcbiAgICAgID8gb2JzZXJ2YWJsZU9mKHRoaXMud2lkdGgpXG4gICAgICA6IHRoaXMud2lkdGg7XG4gIH1cblxuICBwdWJsaWMgY29sdW1uczogT2JzZXJ2YWJsZTxBcnJheTxTa3lHcmlkQ29sdW1uTW9kZWw+PjtcblxuICBwdWJsaWMgc2VsZWN0ZWRDb2x1bW5JZHM6IE9ic2VydmFibGU8QXJyYXk8c3RyaW5nPj47XG5cbiAgcHVibGljIGl0ZW1zOiBPYnNlcnZhYmxlPExpc3RJdGVtTW9kZWxbXT47XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2Ugc3RyZWFtIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGludGVybmFsIGdyaWQgaW5zdGFuY2VcbiAgICogQGludGVyYWxcbiAgICovXG4gIHB1YmxpYyBncmlkTWVzc2FnZVN0cmVhbSA9IG5ldyBTdWJqZWN0PFNreUdyaWRNZXNzYWdlPigpO1xuXG4gIHB1YmxpYyBsb2FkaW5nOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIHB1YmxpYyBzb3J0RmllbGQ6IE9ic2VydmFibGU8TGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWw+O1xuXG4gIHB1YmxpYyBjdXJyZW50U2VhcmNoVGV4dDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIHB1YmxpYyBtdWx0aXNlbGVjdFNlbGVjdGVkSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBzZWFyY2ggZnVuY3Rpb24gdG8gYXBwbHkgb24gdGhlIHZpZXcgZGF0YS5cbiAgICogQHBhcmFtIGRhdGEgU3BlY2lmaWVzIHRoZSBkYXRhIHRvIHNlYXJjaC5cbiAgICogQHBhcmFtIHNlYXJjaFRleHQgU3BlY2lmaWVzIGEgdGV4dCBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnc2VhcmNoJylcbiAgcHVibGljIHNlYXJjaEZ1bmN0aW9uOiAoZGF0YTogYW55LCBzZWFyY2hUZXh0OiBzdHJpbmcpID0+IGJvb2xlYW47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lHcmlkQ29sdW1uQ29tcG9uZW50KVxuICBwcml2YXRlIGNvbHVtbkNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxTa3lHcmlkQ29sdW1uQ29tcG9uZW50PjtcblxuICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xuXG4gIHByaXZhdGUgX21lc3NhZ2VTdHJlYW0gPSBuZXcgU3ViamVjdDxTa3lMaXN0Vmlld0dyaWRNZXNzYWdlPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0YXRlOiBMaXN0U3RhdGUsXG4gICAgcHJpdmF0ZSBkaXNwYXRjaGVyOiBMaXN0U3RhdGVEaXNwYXRjaGVyLFxuICAgIHB1YmxpYyBncmlkU3RhdGU6IEdyaWRTdGF0ZSxcbiAgICBwdWJsaWMgZ3JpZERpc3BhdGNoZXI6IEdyaWRTdGF0ZURpc3BhdGNoZXJcbiAgKSB7XG4gICAgc3VwZXIoc3RhdGUsICdHcmlkIFZpZXcnKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG5cbiAgICAvLyBXYXRjaCBmb3Igc2VsZWN0aW9uIGNoYW5nZXMgYW5kIHVwZGF0ZSBtdWx0aXNlbGVjdFNlbGVjdGVkSWRzIGZvciBsb2NhbCBjb21wYXJpc29uLlxuICAgIHRoaXMuc3RhdGUucGlwZShcbiAgICAgIG9ic2VydmFibGVNYXAocyA9PiBzLnNlbGVjdGVkLml0ZW0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCh0aGlzLnNlbGVjdGVkTWFwRXF1YWwpXG4gICAgKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbXM6IExpc3RTZWxlY3RlZE1vZGVsKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGl0ZW1zLnNlbGVjdGVkSWRNYXAuZm9yRWFjaCgoaXNTZWxlY3RlZCwgaWQpID0+IHtcbiAgICAgICAgICBpZiAoaXRlbXMuc2VsZWN0ZWRJZE1hcC5nZXQoaWQpID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzZWxlY3RlZElkcy5wdXNoKGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RTZWxlY3RlZElkcyA9IHNlbGVjdGVkSWRzO1xuICAgICAgfSk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLmNvbHVtbkNvbXBvbmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyaWQgdmlldyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgc2t5LWdyaWQtY29sdW1uIHRvIHJlbmRlci4nKTtcbiAgICB9XG5cbiAgICBsZXQgY29sdW1uTW9kZWxzID0gdGhpcy5jb2x1bW5Db21wb25lbnRzLm1hcChjb2x1bW5Db21wb25lbnQgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBTa3lHcmlkQ29sdW1uTW9kZWwoY29sdW1uQ29tcG9uZW50LnRlbXBsYXRlLCBjb2x1bW5Db21wb25lbnQpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMud2lkdGggJiYgIWlzT2JzZXJ2YWJsZSh0aGlzLndpZHRoKSkge1xuICAgICAgdGhpcy53aWR0aCA9IG9ic2VydmFibGVPZih0aGlzLndpZHRoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oZWlnaHQgJiYgIWlzT2JzZXJ2YWJsZSh0aGlzLmhlaWdodCkpIHtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gb2JzZXJ2YWJsZU9mKHRoaXMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICAvLyBTZXR1cCBPYnNlcnZhYmxlcyBmb3IgdGVtcGxhdGVcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmdyaWRTdGF0ZS5waXBlKFxuICAgICAgb2JzZXJ2YWJsZU1hcChzID0+IHMuY29sdW1ucy5pdGVtcyksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCh0aGlzLmFycmF5c0VxdWFsKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpXG4gICAgKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHMgPSB0aGlzLmdldFNlbGVjdGVkSWRzKCk7XG5cbiAgICB0aGlzLml0ZW1zID0gdGhpcy5nZXRHcmlkSXRlbXMoKTtcblxuICAgIHRoaXMubG9hZGluZyA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIG9ic2VydmFibGVNYXAoKHMpID0+IHtcbiAgICAgICAgcmV0dXJuIHMuaXRlbXMubG9hZGluZztcbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpXG4gICAgKTtcblxuICAgIHRoaXMuc29ydEZpZWxkID0gdGhpcy5zdGF0ZS5waXBlKFxuICAgICAgb2JzZXJ2YWJsZU1hcCgocykgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAgICAgaWYgKHMuc29ydCAmJiBzLnNvcnQuZmllbGRTZWxlY3RvcnMpIHtcbiAgICAgICAgICByZXR1cm4gcy5zb3J0LmZpZWxkU2VsZWN0b3JzWzBdO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSlcbiAgICApO1xuXG4gICAgdGhpcy5ncmlkU3RhdGUucGlwZShcbiAgICAgIG9ic2VydmFibGVNYXAocyA9PiBzLmNvbHVtbnMuaXRlbXMpLFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCh0aGlzLmFycmF5c0VxdWFsKVxuICAgIClcbiAgICAgIC5zdWJzY3JpYmUoY29sdW1ucyA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmICh0aGlzLmhpZGRlbkNvbHVtbnMpIHtcbiAgICAgICAgICBnZXRWYWx1ZSh0aGlzLmhpZGRlbkNvbHVtbnMsIChoaWRkZW5Db2x1bW5zOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ncmlkRGlzcGF0Y2hlci5uZXh0KFxuICAgICAgICAgICAgICBuZXcgTGlzdFZpZXdEaXNwbGF5ZWRHcmlkQ29sdW1uc0xvYWRBY3Rpb24oXG4gICAgICAgICAgICAgICAgY29sdW1ucy5maWx0ZXIoeCA9PiB7XG4gICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgICAgICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgICAgICAgICAgICAgICBsZXQgaWQgPSB4LmlkIHx8IHguZmllbGQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaGlkZGVuQ29sdW1ucy5pbmRleE9mKGlkKSA9PT0gLTE7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kaXNwbGF5ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICBnZXRWYWx1ZSh0aGlzLmRpc3BsYXllZENvbHVtbnMsIChkaXNwbGF5ZWRDb2x1bW5zOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ncmlkRGlzcGF0Y2hlci5uZXh0KFxuICAgICAgICAgICAgICBuZXcgTGlzdFZpZXdEaXNwbGF5ZWRHcmlkQ29sdW1uc0xvYWRBY3Rpb24oXG4gICAgICAgICAgICAgICAgY29sdW1ucy5maWx0ZXIoeCA9PiBkaXNwbGF5ZWRDb2x1bW5zLmluZGV4T2YoeC5pZCB8fCB4LmZpZWxkKSAhPT0gLTEpLFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZ3JpZERpc3BhdGNoZXIubmV4dChcbiAgICAgICAgICAgIG5ldyBMaXN0Vmlld0Rpc3BsYXllZEdyaWRDb2x1bW5zTG9hZEFjdGlvbihjb2x1bW5zLmZpbHRlcih4ID0+ICF4LmhpZGRlbiksIHRydWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXh0ID0gdGhpcy5zdGF0ZS5waXBlKFxuICAgICAgb2JzZXJ2YWJsZU1hcChzID0+IHMuc2VhcmNoLnNlYXJjaFRleHQpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpXG4gICAgKTtcblxuICAgIHRoaXMuZ3JpZERpc3BhdGNoZXIubmV4dChuZXcgTGlzdFZpZXdHcmlkQ29sdW1uc0xvYWRBY3Rpb24oY29sdW1uTW9kZWxzLCB0cnVlKSk7XG5cbiAgICB0aGlzLmhhbmRsZUNvbHVtbkNoYW5nZSgpO1xuXG4gICAgaWYgKHRoaXMuZW5hYmxlTXVsdGlzZWxlY3QpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci50b29sYmFyU2hvd011bHRpc2VsZWN0VG9vbGJhcih0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRJbmxpbmVEZWxldGVNZXNzYWdlcygpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdXNlciBtYWtlcyBzZWxlY3Rpb24sIHRlbGwgbGlzdC1idWlsZGVyIHRvIHVwZGF0ZSB0aGUgbGlzdCBzdGF0ZS5cbiAgICogVGhpcyBsb2dpYyBzaG91bGQgb25seSBydW4gb24gdXNlciBpbnRlcmFjdGlvbiAtIE5PVCBwcm9ncmFtbWF0aWMgdXBkYXRlcy5cbiAgICovXG4gIHB1YmxpYyBvbk11bHRpc2VsZWN0U2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBTa3lHcmlkU2VsZWN0ZWRSb3dzTW9kZWxDaGFuZ2UpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBldmVudC5zb3VyY2UgPT09IFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UuQ2hlY2tib3hDaGFuZ2UgfHxcbiAgICAgIGV2ZW50LnNvdXJjZSA9PT0gU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZS5Sb3dDbGlja1xuICAgICkge1xuICAgIHRoaXMuc3RhdGUucGlwZShcbiAgICAgIG9ic2VydmFibGVNYXAocyA9PiBzLml0ZW1zLml0ZW1zKSxcbiAgICAgIHRha2UoMSlcbiAgICApXG4gICAgICAuc3Vic2NyaWJlKChpdGVtczogTGlzdEl0ZW1Nb2RlbFtdKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0l0ZW1JZHMgPSB0aGlzLmFycmF5SW50ZXJzZWN0aW9uKGl0ZW1zLm1hcChpID0+IGkuaWQpLCB0aGlzLm11bHRpc2VsZWN0U2VsZWN0ZWRJZHMpO1xuICAgICAgICBjb25zdCBuZXdJZHMgPSBpdGVtcy5maWx0ZXIoaSA9PiBpLmlzU2VsZWN0ZWQpLm1hcChpID0+IGkuaWQpO1xuXG4gICAgICAgIC8vIENoZWNrIGZvciBkZXNlbGVjdGVkIGlkcyAmIHNlbmQgbWVzc2FnZSB0byBkaXNwYXRjaGVyLlxuICAgICAgICBjb25zdCBkZXNlbGVjdGVkSWRzID0gdGhpcy5hcnJheURpZmYobmV3SXRlbUlkcywgbmV3SWRzKTtcbiAgICAgICAgaWYgKGRlc2VsZWN0ZWRJZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hlci5zZXRTZWxlY3RlZChkZXNlbGVjdGVkSWRzLCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3Igc2VsZWN0ZWQgaWRzICYgc2VuZCBtZXNzYWdlIHRvIGRpc3BhdGNoZXIuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gdGhpcy5hcnJheURpZmYobmV3SWRzLCBuZXdJdGVtSWRzKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIuc2V0U2VsZWN0ZWQoc2VsZWN0ZWRJZHMsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY29sdW1uSWRzQ2hhbmdlZChzZWxlY3RlZENvbHVtbklkczogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHMucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZShjdXJyZW50SWRzID0+IHtcbiAgICAgICAgaWYgKCEodGhpcy5hcnJheXNFcXVhbChzZWxlY3RlZENvbHVtbklkcywgY3VycmVudElkcykpKSB7XG4gICAgICAgICAgdGhpcy5ncmlkU3RhdGUucGlwZShcbiAgICAgICAgICAgIG9ic2VydmFibGVNYXAocyA9PiBzLmNvbHVtbnMuaXRlbXMpLFxuICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoY29sdW1ucyA9PiB7XG4gICAgICAgICAgICAgIGxldCBkaXNwbGF5ZWRDb2x1bW5zID0gc2VsZWN0ZWRDb2x1bW5JZHMubWFwKFxuICAgICAgICAgICAgICAgIGNvbHVtbklkID0+IGNvbHVtbnMuZmlsdGVyKGMgPT4gYy5pZCA9PT0gY29sdW1uSWQpWzBdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHRoaXMuZ3JpZERpc3BhdGNoZXIubmV4dChcbiAgICAgICAgICAgICAgICBuZXcgTGlzdFZpZXdEaXNwbGF5ZWRHcmlkQ29sdW1uc0xvYWRBY3Rpb24oZGlzcGxheWVkQ29sdW1ucywgdHJ1ZSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWxSb3dEZWxldGUoYXJnczogU2t5TGlzdFZpZXdHcmlkUm93RGVsZXRlQ2FuY2VsQXJncyk6IHZvaWQge1xuICAgIHRoaXMucm93RGVsZXRlQ2FuY2VsLmVtaXQoYXJncyk7XG4gIH1cblxuICBwdWJsaWMgY29uZmlybVJvd0RlbGV0ZShhcmdzOiBTa3lMaXN0Vmlld0dyaWRSb3dEZWxldGVDb25maXJtQXJncyk6IHZvaWQge1xuICAgIHRoaXMucm93RGVsZXRlQ29uZmlybS5lbWl0KGFyZ3MpO1xuICB9XG5cbiAgcHVibGljIHNvcnRGaWVsZENoYW5nZWQoc29ydEZpZWxkOiBMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbCkge1xuICAgIHRoaXMuZGlzcGF0Y2hlci5zb3J0U2V0RmllbGRTZWxlY3RvcnMoW3NvcnRGaWVsZF0pO1xuICB9XG5cbiAgcHVibGljIG9uVmlld0FjdGl2ZSgpIHtcbiAgICAvKlxuICAgICAgUmFuIGludG8gcHJvYmxlbSB3aGVyZSBzdGF0ZSB1cGRhdGVzIHdlcmUgY29uc3VtZWQgb3V0IG9mIG9yZGVyLiBGb3IgZXhhbXBsZSwgb24gc2VhcmNoIHRleHRcbiAgICAgIHVwZGF0ZSwgdGhlIHNlYXJjaFRleHQgdXBkYXRlIHdhcyBjb25zdW1lZCBhZnRlciB0aGUgcmVzdWx0aW5nIGxpc3QgaXRlbSB1cGRhdGUuIFNjYW5uaW5nIHRoZVxuICAgICAgcHJldmlvdXMgdmFsdWUgb2YgaXRlbXMgbGFzdFVwZGF0ZSBlbnN1cmVzIHRoYXQgd2Ugb25seSByZWNlaXZlIHRoZSBsYXRlc3QgaXRlbXMuXG4gICAgKi9cbiAgICB0aGlzLmdyaWRTdGF0ZS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICBzY2FuKChwcmV2aW91c1ZhbHVlOiBHcmlkU3RhdGVNb2RlbCwgbmV3VmFsdWU6IEdyaWRTdGF0ZU1vZGVsKSA9PiB7XG4gICAgICAgIGlmIChwcmV2aW91c1ZhbHVlLmRpc3BsYXllZENvbHVtbnMubGFzdFVwZGF0ZSA+IG5ld1ZhbHVlLmRpc3BsYXllZENvbHVtbnMubGFzdFVwZGF0ZSkge1xuICAgICAgICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBvYnNlcnZhYmxlTWFwKHMgPT4gcy5kaXNwbGF5ZWRDb2x1bW5zLml0ZW1zKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKHRoaXMuYXJyYXlzRXF1YWwpXG4gICAgKVxuICAgICAgLnN1YnNjcmliZShkaXNwbGF5ZWRDb2x1bW5zID0+IHtcbiAgICAgICAgbGV0IHNldEZ1bmN0aW9ucyA9XG4gICAgICAgICAgdGhpcy5zZWFyY2hGdW5jdGlvbiAhPT0gdW5kZWZpbmVkID8gW3RoaXMuc2VhcmNoRnVuY3Rpb25dIDpcbiAgICAgICAgICAgIGRpc3BsYXllZENvbHVtbnNcbiAgICAgICAgICAgICAgLm1hcChjb2x1bW4gPT4gKGRhdGE6IGFueSwgc2VhcmNoVGV4dDogc3RyaW5nKSA9PlxuICAgICAgICAgICAgICAgIGNvbHVtbi5zZWFyY2hGdW5jdGlvbihnZXREYXRhKGRhdGEsIGNvbHVtbi5maWVsZCksIHNlYXJjaFRleHQpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmZpbHRlcihjID0+IGMgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShzID0+IHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIuc2VhcmNoU2V0T3B0aW9ucyhuZXcgTGlzdFNlYXJjaE1vZGVsKHtcbiAgICAgICAgICAgIHNlYXJjaFRleHQ6IHMuc2VhcmNoLnNlYXJjaFRleHQsXG4gICAgICAgICAgICBmdW5jdGlvbnM6IHNldEZ1bmN0aW9ucyxcbiAgICAgICAgICAgIGZpZWxkU2VsZWN0b3JzOiBkaXNwbGF5ZWRDb2x1bW5zLm1hcChkID0+IGQuZmllbGQpXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0SW5saW5lRGVsZXRlTWVzc2FnZXMoKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodGhpcy5tZXNzYWdlU3RyZWFtKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTdHJlYW0uc3Vic2NyaWJlKChtZXNzYWdlOiBTa3lMaXN0Vmlld0dyaWRNZXNzYWdlKSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09IFNreUxpc3RWaWV3R3JpZE1lc3NhZ2VUeXBlLkFib3J0RGVsZXRlUm93KSB7XG4gICAgICAgICAgdGhpcy5ncmlkTWVzc2FnZVN0cmVhbS5uZXh0KHtcbiAgICAgICAgICAgIHR5cGU6IFNreUdyaWRNZXNzYWdlVHlwZS5BYm9ydERlbGV0ZVJvdyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgYWJvcnREZWxldGVSb3c6IG1lc3NhZ2UuZGF0YS5hYm9ydERlbGV0ZVJvd1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UudHlwZSA9PT0gU2t5TGlzdFZpZXdHcmlkTWVzc2FnZVR5cGUuUHJvbXB0RGVsZXRlUm93KSB7XG4gICAgICAgICAgdGhpcy5ncmlkTWVzc2FnZVN0cmVhbS5uZXh0KHtcbiAgICAgICAgICAgIHR5cGU6IFNreUdyaWRNZXNzYWdlVHlwZS5Qcm9tcHREZWxldGVSb3csXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHByb21wdERlbGV0ZVJvdzogbWVzc2FnZS5kYXRhLnByb21wdERlbGV0ZVJvd1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNvbHVtbkNoYW5nZSgpIHtcbiAgICAvLyB3YXRjaCBmb3IgY2hhbmdlcyBpbiBjb2x1bW4gY29tcG9uZW50c1xuICAgIHRoaXMuY29sdW1uQ29tcG9uZW50cy5jaGFuZ2VzLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKVxuICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGNvbHVtbkNvbXBvbmVudHMpID0+IHtcbiAgICAgICAgbGV0IGNvbHVtbk1vZGVscyA9IHRoaXMuY29sdW1uQ29tcG9uZW50cy5tYXAoY29sdW1uID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IFNreUdyaWRDb2x1bW5Nb2RlbChjb2x1bW4udGVtcGxhdGUsIGNvbHVtbik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdyaWREaXNwYXRjaGVyLm5leHQobmV3IExpc3RWaWV3R3JpZENvbHVtbnNMb2FkQWN0aW9uKGNvbHVtbk1vZGVscywgdHJ1ZSkpO1xuICAgICAgfSk7XG5cbiAgICAvLyBXYXRjaCBmb3IgY29sdW1uIGhlYWRpbmcgY2hhbmdlczpcbiAgICB0aGlzLmNvbHVtbkNvbXBvbmVudHMuZm9yRWFjaCgoY29tcCkgPT4ge1xuICAgICAgY29tcC5oZWFkaW5nTW9kZWxDaGFuZ2VzLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpXG4gICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZTogU2t5R3JpZENvbHVtbkhlYWRpbmdNb2RlbENoYW5nZSkgPT4ge1xuICAgICAgICAgIHRoaXMuZ3JpZENvbXBvbmVudC51cGRhdGVDb2x1bW5IZWFkaW5nKGNoYW5nZSk7XG4gICAgICAgIH0pO1xuICAgICAgY29tcC5kZXNjcmlwdGlvbk1vZGVsQ2hhbmdlcy5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKVxuICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChjaGFuZ2U6IFNreUdyaWRDb2x1bW5EZXNjcmlwdGlvbk1vZGVsQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgdGhpcy5ncmlkQ29tcG9uZW50LnVwZGF0ZUNvbHVtbkRlc2NyaXB0aW9uKGNoYW5nZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRHcmlkSXRlbXMoKTogT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbU1vZGVsPj4ge1xuICAgIC8qXG4gICAgICBTYW1lIHByb2JsZW0gYXMgYWJvdmUuIFdlIHNob3VsZCBtb3ZlIGZyb20gaGF2aW5nIGEgc3RhdGUgb2JqZWN0IG9ic2VydmFibGUgd2l0aCBhIGJ1bmNoIG9mXG4gICAgICBzdGF0aWMgcHJvcGVydGllcyB0byBhIHN0YXRpYyBzdGF0ZSBvYmplY3Qgd2l0aCBvYnNlcnZhYmxlIHByb3BlcnRpZXMgdGhhdCB5b3UgY2FuIHN1YnNjcmliZVxuICAgICAgdG8uXG4gICAgKi9cbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5waXBlKFxuICAgICAgb2JzZXJ2YWJsZU1hcCgocykgPT4ge1xuICAgICAgICByZXR1cm4gcy5pdGVtcztcbiAgICAgIH0pLFxuICAgICAgc2NhbigocHJldmlvdXNWYWx1ZTogQXN5bmNMaXN0PExpc3RJdGVtTW9kZWw+LCBuZXdWYWx1ZTogQXN5bmNMaXN0PExpc3RJdGVtTW9kZWw+KSA9PiB7XG4gICAgICAgIGlmIChwcmV2aW91c1ZhbHVlLmxhc3RVcGRhdGUgPiBuZXdWYWx1ZS5sYXN0VXBkYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG9ic2VydmFibGVNYXAoKHJlc3VsdDogQXN5bmNMaXN0PExpc3RJdGVtTW9kZWw+KSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHQuaXRlbXM7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZElkcygpOiBPYnNlcnZhYmxlPEFycmF5PHN0cmluZz4+IHtcbiAgICAvKlxuICAgICAgU2FtZSBwcm9ibGVtIGFzIGFib3ZlLiBXZSBzaG91bGQgbW92ZSBmcm9tIGhhdmluZyBhIHN0YXRlIG9iamVjdCBvYnNlcnZhYmxlIHdpdGggYSBidW5jaCBvZlxuICAgICAgc3RhdGljIHByb3BlcnRpZXMgdG8gYSBzdGF0aWMgc3RhdGUgb2JqZWN0IHdpdGggb2JzZXJ2YWJsZSBwcm9wZXJ0aWVzIHRoYXQgeW91IGNhbiBzdWJzY3JpYmVcbiAgICAgIHRvLlxuICAgICovXG4gICAgcmV0dXJuIHRoaXMuZ3JpZFN0YXRlLnBpcGUoXG4gICAgICBvYnNlcnZhYmxlTWFwKHMgPT4gcy5kaXNwbGF5ZWRDb2x1bW5zKSxcbiAgICAgIHNjYW4oKHByZXZpb3VzVmFsdWU6IEFzeW5jTGlzdDxTa3lHcmlkQ29sdW1uTW9kZWw+LCBuZXdWYWx1ZTogQXN5bmNMaXN0PFNreUdyaWRDb2x1bW5Nb2RlbD4pID0+IHtcbiAgICAgICAgaWYgKHByZXZpb3VzVmFsdWUubGFzdFVwZGF0ZSA+IG5ld1ZhbHVlLmxhc3RVcGRhdGUpIHtcbiAgICAgICAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgb2JzZXJ2YWJsZU1hcCgocmVzdWx0OiBBc3luY0xpc3Q8U2t5R3JpZENvbHVtbk1vZGVsPikgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVtcy5tYXAoKGNvbHVtbjogU2t5R3JpZENvbHVtbk1vZGVsKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbHVtbi5pZCB8fCBjb2x1bW4uZmllbGQ7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldmlvdXNWYWx1ZTogc3RyaW5nW10sIG5ld1ZhbHVlOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXZlQ29sdW1uSWRzQ2hhbmdlZChwcmV2aW91c1ZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGhhdmVDb2x1bW5JZHNDaGFuZ2VkKHByZXZpb3VzVmFsdWU6IHN0cmluZ1tdLCBuZXdWYWx1ZTogc3RyaW5nW10pIHtcbiAgICBpZiAocHJldmlvdXNWYWx1ZS5sZW5ndGggIT09IG5ld1ZhbHVlLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbklkc0NoYW5nZS5lbWl0KG5ld1ZhbHVlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZpb3VzVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHByZXZpb3VzVmFsdWVbaV0gIT09IG5ld1ZhbHVlW2ldKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHNDaGFuZ2UuZW1pdChuZXdWYWx1ZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdGVkTWFwRXF1YWwocHJldjogTGlzdFNlbGVjdGVkTW9kZWwsIG5leHQ6IExpc3RTZWxlY3RlZE1vZGVsKTogYm9vbGVhbiB7XG4gICAgaWYgKHByZXYuc2VsZWN0ZWRJZE1hcC5zaXplICE9PSBuZXh0LnNlbGVjdGVkSWRNYXAuc2l6ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIG5leHQuc2VsZWN0ZWRJZE1hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcblxuICAgICAgY29uc3QgdmFsdWUgPSBuZXh0LnNlbGVjdGVkSWRNYXAuZ2V0KGtleSk7XG4gICAgICBpZiAodmFsdWUgIT09IHByZXYuc2VsZWN0ZWRJZE1hcC5nZXQoa2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGFycmF5RGlmZihhcnJBOiBBcnJheTxhbnk+LCBhcnJCOiBBcnJheTxhbnk+KTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIGFyckEuZmlsdGVyKGkgPT4gYXJyQi5pbmRleE9mKGkpIDwgMCk7XG4gIH1cblxuICBwcml2YXRlIGFycmF5SW50ZXJzZWN0aW9uKGFyckE6IEFycmF5PGFueT4sIGFyckI6IEFycmF5PGFueT4pOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gYXJyQS5maWx0ZXIodmFsdWUgPT4gLTEgIT09IGFyckIuaW5kZXhPZih2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcnJheXNFcXVhbChhcnJheUE6IGFueVtdLCBhcnJheUI6IGFueVtdKSB7XG4gICAgcmV0dXJuIGFycmF5QS5sZW5ndGggPT09IGFycmF5Qi5sZW5ndGggJiZcbiAgICAgIGFycmF5QS5ldmVyeSgodmFsdWUsIGluZGV4KSA9PlxuICAgICAgICB2YWx1ZSA9PT0gYXJyYXlCW2luZGV4XSk7XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJhY3RpdmUgfCBhc3luY1wiPlxuICA8c2t5LWdyaWRcbiAgICBbY29sdW1uc109XCJjb2x1bW5zIHwgYXN5bmNcIlxuICAgIFtkYXRhXT1cIml0ZW1zIHwgYXN5bmNcIlxuICAgIFtlbmFibGVNdWx0aXNlbGVjdF09XCJlbmFibGVNdWx0aXNlbGVjdFwiXG4gICAgW2ZpdF09XCJmaXRcIlxuICAgIFtoZWlnaHRdPVwiZ3JpZEhlaWdodCB8IGFzeW5jXCJcbiAgICBbaGlnaGxpZ2h0VGV4dF09XCJoaWdobGlnaHRTZWFyY2hUZXh0ID8gKGN1cnJlbnRTZWFyY2hUZXh0IHwgYXN5bmMpIDogdW5kZWZpbmVkXCJcbiAgICBbcm93SGlnaGxpZ2h0ZWRJZF09XCJyb3dIaWdobGlnaHRlZElkXCJcbiAgICBbbWVzc2FnZVN0cmVhbV09XCJncmlkTWVzc2FnZVN0cmVhbVwiXG4gICAgW3NlbGVjdGVkQ29sdW1uSWRzXT1cInNlbGVjdGVkQ29sdW1uSWRzIHwgYXN5bmNcIlxuICAgIFtzZWxlY3RlZFJvd0lkc109XCJtdWx0aXNlbGVjdFNlbGVjdGVkSWRzXCJcbiAgICBbc2V0dGluZ3NLZXldPVwic2V0dGluZ3NLZXlcIlxuICAgIFtzb3J0RmllbGRdPVwic29ydEZpZWxkIHwgYXN5bmNcIlxuICAgIFt3aWR0aF09XCJncmlkV2lkdGggfCBhc3luY1wiXG4gICAgKG11bHRpc2VsZWN0U2VsZWN0aW9uQ2hhbmdlKT1cIm9uTXVsdGlzZWxlY3RTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHJvd0RlbGV0ZUNhbmNlbCk9XCJjYW5jZWxSb3dEZWxldGUoJGV2ZW50KVwiXG4gICAgKHJvd0RlbGV0ZUNvbmZpcm0pPVwiY29uZmlybVJvd0RlbGV0ZSgkZXZlbnQpXCJcbiAgICAoc2VsZWN0ZWRDb2x1bW5JZHNDaGFuZ2UpPVwiY29sdW1uSWRzQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAoc29ydEZpZWxkQ2hhbmdlKT1cInNvcnRGaWVsZENoYW5nZWQoJGV2ZW50KVwiXG4gICAgI3NreUdyaWRcbiAgPlxuICA8L3NreS1ncmlkPlxuICA8c2t5LXdhaXRcbiAgICBbaXNXYWl0aW5nXT1cImxvYWRpbmcgfCBhc3luY1wiXG4gID5cbiAgPC9za3ktd2FpdD5cbjwvZGl2PlxuIl19
466
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12aWV3LWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGlzdC1idWlsZGVyLXZpZXctZ3JpZHMvc3JjL21vZHVsZXMvbGlzdC12aWV3LWdyaWQvbGlzdC12aWV3LWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGlzdC1idWlsZGVyLXZpZXctZ3JpZHMvc3JjL21vZHVsZXMvbGlzdC12aWV3LWdyaWQvbGlzdC12aWV3LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFjLEVBQUUsSUFBSSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9ELE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsR0FBRyxJQUFJLGFBQWEsRUFDcEIsSUFBSSxFQUNKLElBQUksRUFDSixTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQWEsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFakUsT0FBTyxFQUNMLHNCQUFzQixFQUd0QixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBRWhCLGtCQUFrQixFQUVsQix5QkFBeUIsR0FDMUIsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUNMLGVBQWUsRUFJZixpQkFBaUIsR0FDbEIsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQ0wsT0FBTyxFQUNQLFlBQVksR0FHYixNQUFNLDRCQUE0QixDQUFDO0FBRXBDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUxRCxPQUFPLEVBQUUsbUJBQW1CLEVB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Y0FBYztLQUNmLDJEQTBLZ0Isc0JBQXNCLDRFQTlDNUIsZ0JBQWdCLHVFQ3ZON0IsZy9CQTJCQTs0RkRtRWEsd0JBQXdCO2tCQWpCcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixXQUFXLEVBQUUsaUNBQWlDO29CQUM5QyxTQUFTLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQztvQkFDOUMsU0FBUyxFQUFFO3dCQUNULG9CQUFvQjt3QkFDcEI7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUseUJBQXlCLENBQUM7eUJBQ3hEO3dCQUNELG1CQUFtQjt3QkFDbkIsU0FBUzt3QkFDVCxtQkFBbUI7d0JBQ25CLGNBQWM7cUJBQ2Y7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzRMQVVZLElBQUk7c0JBRGQsS0FBSztnQkFTQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBT0MsYUFBYTtzQkFEbkIsS0FBSztnQkFVQyxHQUFHO3NCQURULEtBQUs7Z0JBT0MsS0FBSztzQkFEWCxLQUFLO2dCQU9DLE1BQU07c0JBRFosS0FBSztnQkFRQyxtQkFBbUI7c0JBRHpCLEtBQUs7Z0JBUUssYUFBYTtzQkFEdkIsS0FBSztnQkF1QkMsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQVdDLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFVQyxXQUFXO3NCQURqQixLQUFLO2dCQU9DLGVBQWU7c0JBRHJCLE1BQU07Z0JBT0EsZ0JBQWdCO3NCQUR0QixNQUFNO2dCQVNBLHVCQUF1QjtzQkFEN0IsTUFBTTtnQkFJQSxhQUFhO3NCQURuQixTQUFTO3VCQUFDLGdCQUFnQjtnQkE0Q3BCLGNBQWM7c0JBRHBCLEtBQUs7dUJBQUMsUUFBUTtnQkFJUCxnQkFBZ0I7c0JBRHZCLGVBQWU7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiBhcyBvYnNlcnZhYmxlT2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCBhcyBvYnNlcnZhYmxlTWFwLFxuICBzY2FuLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXN5bmNMaXN0LCBnZXRWYWx1ZSB9IGZyb20gJ0Bza3l1eC9saXN0LWJ1aWxkZXItY29tbW9uJztcblxuaW1wb3J0IHtcbiAgU2t5R3JpZENvbHVtbkNvbXBvbmVudCxcbiAgU2t5R3JpZENvbHVtbkhlYWRpbmdNb2RlbENoYW5nZSxcbiAgU2t5R3JpZENvbHVtbkRlc2NyaXB0aW9uTW9kZWxDaGFuZ2UsXG4gIFNreUdyaWRDb2x1bW5Nb2RlbCxcbiAgU2t5R3JpZENvbXBvbmVudCxcbiAgU2t5R3JpZE1lc3NhZ2UsXG4gIFNreUdyaWRNZXNzYWdlVHlwZSxcbiAgU2t5R3JpZFNlbGVjdGVkUm93c01vZGVsQ2hhbmdlLFxuICBTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlLFxufSBmcm9tICdAc2t5dXgvZ3JpZHMnO1xuXG5pbXBvcnQge1xuICBMaXN0U2VhcmNoTW9kZWwsXG4gIExpc3RTZWxlY3RlZE1vZGVsLFxuICBMaXN0U3RhdGUsXG4gIExpc3RTdGF0ZURpc3BhdGNoZXIsXG4gIExpc3RWaWV3Q29tcG9uZW50LFxufSBmcm9tICdAc2t5dXgvbGlzdC1idWlsZGVyJztcblxuaW1wb3J0IHtcbiAgZ2V0RGF0YSxcbiAgaXNPYnNlcnZhYmxlLFxuICBMaXN0SXRlbU1vZGVsLFxuICBMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbCxcbn0gZnJvbSAnQHNreXV4L2xpc3QtYnVpbGRlci1jb21tb24nO1xuXG5pbXBvcnQgeyBHcmlkU3RhdGUgfSBmcm9tICcuL3N0YXRlL2dyaWQtc3RhdGUuc3RhdGUtbm9kZSc7XG5cbmltcG9ydCB7IEdyaWRTdGF0ZURpc3BhdGNoZXIgfSBmcm9tICcuL3N0YXRlL2dyaWQtc3RhdGUucnhzdGF0ZSc7XG5cbmltcG9ydCB7IEdyaWRTdGF0ZU1vZGVsIH0gZnJvbSAnLi9zdGF0ZS9ncmlkLXN0YXRlLm1vZGVsJztcblxuaW1wb3J0IHsgTGlzdFZpZXdHcmlkQ29sdW1uc0xvYWRBY3Rpb24gfSBmcm9tICcuL3N0YXRlL2NvbHVtbnMvbG9hZC5hY3Rpb24nO1xuXG5pbXBvcnQgeyBMaXN0Vmlld0Rpc3BsYXllZEdyaWRDb2x1bW5zTG9hZEFjdGlvbiB9IGZyb20gJy4vc3RhdGUvZGlzcGxheWVkLWNvbHVtbnMvbG9hZC5hY3Rpb24nO1xuXG5pbXBvcnQgeyBTa3lMaXN0Vmlld0dyaWRNZXNzYWdlIH0gZnJvbSAnLi90eXBlcy9saXN0LXZpZXctZ3JpZC1tZXNzYWdlJztcblxuaW1wb3J0IHsgU2t5TGlzdFZpZXdHcmlkTWVzc2FnZVR5cGUgfSBmcm9tICcuL3R5cGVzL2xpc3Qtdmlldy1ncmlkLW1lc3NhZ2UtdHlwZSc7XG5cbmltcG9ydCB7IFNreUxpc3RWaWV3R3JpZFJvd0RlbGV0ZUNhbmNlbEFyZ3MgfSBmcm9tICcuL3R5cGVzL2xpc3Qtdmlldy1ncmlkLXJvdy1kZWxldGUtY2FuY2VsLWFyZ3MnO1xuXG5pbXBvcnQgeyBTa3lMaXN0Vmlld0dyaWRSb3dEZWxldGVDb25maXJtQXJncyB9IGZyb20gJy4vdHlwZXMvbGlzdC12aWV3LWdyaWQtcm93LWRlbGV0ZS1jb25maXJtLWFyZ3MnO1xuXG4vKipcbiAqIERpc3BsYXlzIGEgZ3JpZCBmb3IgYVxuICogW1NLWSBVWC10aGVtZWQgbGlzdCBvZiBkYXRhXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvbGlzdC9vdmVydmlldylcbiAqIHVzaW5nIHRoZSBbZ3JpZCBjb21wb25lbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9ncmlkKS5cbiAqIFlvdSBtdXN0IGluc3RhbGwgYFNreUxpc3RNb2R1bGVgIGFzIGEgZGVwZW5kZW5jeS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWxpc3Qtdmlldy1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3Qtdmlldy1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC12aWV3LWdyaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgLyogdHNsaW50OmRpc2FibGUgKi9cbiAgICB7XG4gICAgICBwcm92aWRlOiBMaXN0Vmlld0NvbXBvbmVudCxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNreUxpc3RWaWV3R3JpZENvbXBvbmVudCksXG4gICAgfSxcbiAgICAvKiB0c2xpbnQ6ZW5hYmxlICovXG4gICAgR3JpZFN0YXRlLFxuICAgIEdyaWRTdGF0ZURpc3BhdGNoZXIsXG4gICAgR3JpZFN0YXRlTW9kZWwsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lMaXN0Vmlld0dyaWRDb21wb25lbnRcbiAgZXh0ZW5kcyBMaXN0Vmlld0NvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveVxue1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSB2aWV3LlxuICAgKiBAcmVxdWlyZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52aWV3TmFtZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgY29sdW1ucyB0byBkaXNwbGF5IGJ5IGRlZmF1bHQgYmFzZWQgb24gdGhlIElEIG9yIGZpZWxkIG9mIHRoZSBpdGVtLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGRpc3BsYXllZENvbHVtbnM6IEFycmF5PHN0cmluZz4gfCBPYnNlcnZhYmxlPEFycmF5PHN0cmluZz4+O1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGNvbHVtbnMgdG8gaGlkZSBieSBkZWZhdWx0IGJhc2VkIG9uIHRoZSBJRCBvciBmaWVsZCBvZiB0aGUgaXRlbS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoaWRkZW5Db2x1bW5zOiBBcnJheTxzdHJpbmc+IHwgT2JzZXJ2YWJsZTxBcnJheTxzdHJpbmc+PjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyB0aGUgZ3JpZCBmaXRzIHRvIGl0cyBwYXJlbnQuIGB3aWR0aGAgZml0cyB0aGUgZ3JpZCB0byB0aGUgcGFyZW50J3MgZnVsbFxuICAgKiB3aWR0aCwgYW5kIGBzY3JvbGxgIGFsbG93cyB0aGUgZ3JpZCB0byBleGNlZWQgdGhlIHBhcmVudCdzIHdpZHRoLiBJZiB0aGUgZ3JpZCBkb2VzIG5vdCBoYXZlXG4gICAqIGVub3VnaCBjb2x1bW5zIHRvIGZpbGwgdGhlIHBhcmVudCdzIHdpZHRoLCBpdCBhbHdheXMgc3RyZXRjaGVzIHRvIHRoZSBwYXJlbnQncyBmdWxsIHdpZHRoLlxuICAgKiBAZGVmYXVsdCB3aWR0aFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGZpdDogc3RyaW5nID0gJ3dpZHRoJztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSB3aWR0aCBvZiB0aGUgZ3JpZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB3aWR0aDogbnVtYmVyIHwgT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGhlaWdodCBvZiB0aGUgZ3JpZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWlnaHQ6IG51bWJlciB8IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gaGlnaGxpZ2h0IHNlYXJjaCB0ZXh0IHdpdGhpbiB0aGUgZ3JpZC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhpZ2hsaWdodFNlYXJjaFRleHQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBhbiBvYnNlcnZhYmxlIHRvIHNlbmQgY29tbWFuZHMgdG8gdGhlIGdyaWQuXG4gICAqIFRoZSBjb21tYW5kcyBzaG91bGQgcmVzcGVjdCB0aGUgYFNreUxpc3RWaWV3R3JpZE1lc3NhZ2VgIHR5cGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1lc3NhZ2VTdHJlYW0oc3RyZWFtOiBTdWJqZWN0PFNreUxpc3RWaWV3R3JpZE1lc3NhZ2U+KSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5fbWVzc2FnZVN0cmVhbSkge1xuICAgICAgdGhpcy5fbWVzc2FnZVN0cmVhbS51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMuX21lc3NhZ2VTdHJlYW0gPSBzdHJlYW07XG5cbiAgICB0aGlzLmluaXRJbmxpbmVEZWxldGVNZXNzYWdlcygpO1xuICB9XG5cbiAgcHVibGljIGdldCBtZXNzYWdlU3RyZWFtKCk6IFN1YmplY3Q8U2t5TGlzdFZpZXdHcmlkTWVzc2FnZT4ge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlU3RyZWFtO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgSUQgb2YgdGhlIHJvdyB0byBoaWdobGlnaHQuIFRoZSBJRCBtYXRjaGVzIHRoZSBgaWRgIHByb3BlcnR5IG9mXG4gICAqIHRoZSBgZGF0YWAgb2JqZWN0LiBUeXBpY2FsbHksIHRoaXMgcHJvcGVydHkgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZVxuICAgKiBbZmx5b3V0IGNvbXBvbmVudF0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2ZseW91dCkgdG9cbiAgICogaW5kaWNhdGUgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByb3cuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgcm93SGlnaGxpZ2h0ZWRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBlbmFibGUgdGhlIG11bHRpc2VsZWN0IGZlYXR1cmUgdG8gZGlzcGxheSBhIGNvbHVtbiBvZiBjaGVja2JveGVzXG4gICAqIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGdyaWQuIE11bHRpc2VsZWN0IGFsc28gZGlzcGxheXMgYW4gYWN0aW9uIGJhciB3aXRoIGJ1dHRvbnMgdG9cbiAgICogc2VsZWN0IGFuZCBjbGVhciBhbGwgY2hlY2tib3hlcy4gTXVsdGlzZWxlY3QgZGVmYXVsdHMgdG8gdGhlIGBpZGAgcHJvcGVydHkgb24gdGhlIGxpc3Qnc1xuICAgKiBgZGF0YWAgb2JqZWN0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGVuYWJsZU11bHRpc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIHVuaXF1ZSBrZXkgZm9yIHRoZSBVSSBDb25maWcgU2VydmljZSB0byByZXRyaWV2ZSBzdG9yZWQgc2V0dGluZ3MgZnJvbVxuICAgKiBhIGRhdGFiYXNlLiBUaGUgc2VydmljZSBzYXZlcyBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB1c2VycyBhbmQgcmV0dXJucyBgc2VsZWN0ZWRDb2x1bW5JZHNgXG4gICAqIGZvciB0aGUgY29sdW1ucyB0byBkaXNwbGF5IGFuZCB0aGUgcHJlZmVycmVkIGNvbHVtbiBvcmRlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGVcbiAgICogW3N0aWNreSBzZXR0aW5ncyBkb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2dldC1zdGFydGVkL2FkdmFuY2VkL3N0aWNreS1zZXR0aW5ncykuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0dGluZ3NLZXk6IHN0cmluZztcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBjYW5jZWwgdGhlIGRlbGV0aW9uIG9mIGEgcm93LlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByb3dEZWxldGVDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPFNreUxpc3RWaWV3R3JpZFJvd0RlbGV0ZUNhbmNlbEFyZ3M+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgY29uZmlybSB0aGUgZGVsZXRpb24gb2YgYSByb3cuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJvd0RlbGV0ZUNvbmZpcm0gPSBuZXcgRXZlbnRFbWl0dGVyPFNreUxpc3RWaWV3R3JpZFJvd0RlbGV0ZUNvbmZpcm1BcmdzPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIGNvbHVtbnMgY2hhbmdlLiBUaGlzIGluY2x1ZGVzIGNoYW5nZXMgdG8gdGhlIGRpc3BsYXllZCBjb2x1bW5zIGFuZCBjaGFuZ2VzXG4gICAqIHRvIHRoZSBvcmRlciBvZiBjb2x1bW5zLiBUaGUgZXZlbnQgZW1pdHMgYW4gYXJyYXkgb2YgSURzIGZvciB0aGUgZGlzcGxheWVkIGNvbHVtbnMgdGhhdFxuICAgKiByZWZsZWN0cyB0aGUgY29sdW1uIG9yZGVyLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzZWxlY3RlZENvbHVtbklkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8c3RyaW5nPj4oKTtcblxuICBAVmlld0NoaWxkKFNreUdyaWRDb21wb25lbnQpXG4gIHB1YmxpYyBncmlkQ29tcG9uZW50OiBTa3lHcmlkQ29tcG9uZW50O1xuXG4gIHB1YmxpYyBnZXQgZ3JpZEhlaWdodCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLmhlaWdodCA9PT0gJ251bWJlcidcbiAgICAgID8gb2JzZXJ2YWJsZU9mKHRoaXMuaGVpZ2h0KVxuICAgICAgOiB0aGlzLmhlaWdodDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZ3JpZFdpZHRoKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gdHlwZW9mIHRoaXMud2lkdGggPT09ICdudW1iZXInXG4gICAgICA/IG9ic2VydmFibGVPZih0aGlzLndpZHRoKVxuICAgICAgOiB0aGlzLndpZHRoO1xuICB9XG5cbiAgcHVibGljIGNvbHVtbnM6IE9ic2VydmFibGU8QXJyYXk8U2t5R3JpZENvbHVtbk1vZGVsPj47XG5cbiAgcHVibGljIHNlbGVjdGVkQ29sdW1uSWRzOiBPYnNlcnZhYmxlPEFycmF5PHN0cmluZz4+O1xuXG4gIHB1YmxpYyBpdGVtczogT2JzZXJ2YWJsZTxMaXN0SXRlbU1vZGVsW10+O1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIHN0cmVhbSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBpbnRlcm5hbCBncmlkIGluc3RhbmNlXG4gICAqIEBpbnRlcmFsXG4gICAqL1xuICBwdWJsaWMgZ3JpZE1lc3NhZ2VTdHJlYW0gPSBuZXcgU3ViamVjdDxTa3lHcmlkTWVzc2FnZT4oKTtcblxuICBwdWJsaWMgbG9hZGluZzogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBwdWJsaWMgc29ydEZpZWxkOiBPYnNlcnZhYmxlPExpc3RTb3J0RmllbGRTZWxlY3Rvck1vZGVsPjtcblxuICBwdWJsaWMgY3VycmVudFNlYXJjaFRleHQ6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICBwdWJsaWMgbXVsdGlzZWxlY3RTZWxlY3RlZElkczogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgc2VhcmNoIGZ1bmN0aW9uIHRvIGFwcGx5IG9uIHRoZSB2aWV3IGRhdGEuXG4gICAqIEBwYXJhbSBkYXRhIFNwZWNpZmllcyB0aGUgZGF0YSB0byBzZWFyY2guXG4gICAqIEBwYXJhbSBzZWFyY2hUZXh0IFNwZWNpZmllcyBhIHRleHQgc3RyaW5nIHRvIHNlYXJjaCBmb3IuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ3NlYXJjaCcpXG4gIHB1YmxpYyBzZWFyY2hGdW5jdGlvbjogKGRhdGE6IGFueSwgc2VhcmNoVGV4dDogc3RyaW5nKSA9PiBib29sZWFuO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5R3JpZENvbHVtbkNvbXBvbmVudClcbiAgcHJpdmF0ZSBjb2x1bW5Db21wb25lbnRzOiBRdWVyeUxpc3Q8U2t5R3JpZENvbHVtbkNvbXBvbmVudD47XG5cbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIF9tZXNzYWdlU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5TGlzdFZpZXdHcmlkTWVzc2FnZT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdGF0ZTogTGlzdFN0YXRlLFxuICAgIHByaXZhdGUgZGlzcGF0Y2hlcjogTGlzdFN0YXRlRGlzcGF0Y2hlcixcbiAgICBwdWJsaWMgZ3JpZFN0YXRlOiBHcmlkU3RhdGUsXG4gICAgcHVibGljIGdyaWREaXNwYXRjaGVyOiBHcmlkU3RhdGVEaXNwYXRjaGVyXG4gICkge1xuICAgIHN1cGVyKHN0YXRlLCAnR3JpZCBWaWV3Jyk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIC8vIFdhdGNoIGZvciBzZWxlY3Rpb24gY2hhbmdlcyBhbmQgdXBkYXRlIG11bHRpc2VsZWN0U2VsZWN0ZWRJZHMgZm9yIGxvY2FsIGNvbXBhcmlzb24uXG4gICAgdGhpcy5zdGF0ZVxuICAgICAgLnBpcGUoXG4gICAgICAgIG9ic2VydmFibGVNYXAoKHMpID0+IHMuc2VsZWN0ZWQuaXRlbSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCh0aGlzLnNlbGVjdGVkTWFwRXF1YWwpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChpdGVtczogTGlzdFNlbGVjdGVkTW9kZWwpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgaXRlbXMuc2VsZWN0ZWRJZE1hcC5mb3JFYWNoKChpc1NlbGVjdGVkLCBpZCkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtcy5zZWxlY3RlZElkTWFwLmdldChpZCkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkSWRzLnB1c2goaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5tdWx0aXNlbGVjdFNlbGVjdGVkSWRzID0gc2VsZWN0ZWRJZHM7XG4gICAgICB9KTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHRoaXMuY29sdW1uQ29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0dyaWQgdmlldyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgc2t5LWdyaWQtY29sdW1uIHRvIHJlbmRlci4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBjb2x1bW5Nb2RlbHMgPSB0aGlzLmNvbHVtbkNvbXBvbmVudHMubWFwKChjb2x1bW5Db21wb25lbnQpID0+IHtcbiAgICAgIHJldHVybiBuZXcgU2t5R3JpZENvbHVtbk1vZGVsKGNvbHVtbkNvbXBvbmVudC50ZW1wbGF0ZSwgY29sdW1uQ29tcG9uZW50KTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLndpZHRoICYmICFpc09ic2VydmFibGUodGhpcy53aWR0aCkpIHtcbiAgICAgIHRoaXMud2lkdGggPSBvYnNlcnZhYmxlT2YodGhpcy53aWR0aCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGVpZ2h0ICYmICFpc09ic2VydmFibGUodGhpcy5oZWlnaHQpKSB7XG4gICAgICB0aGlzLmhlaWdodCA9IG9ic2VydmFibGVPZih0aGlzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy8gU2V0dXAgT2JzZXJ2YWJsZXMgZm9yIHRlbXBsYXRlXG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5ncmlkU3RhdGUucGlwZShcbiAgICAgIG9ic2VydmFibGVNYXAoKHMpID0+IHMuY29sdW1ucy5pdGVtcyksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCh0aGlzLmFycmF5c0VxdWFsKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpXG4gICAgKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHMgPSB0aGlzLmdldFNlbGVjdGVkSWRzKCk7XG5cbiAgICB0aGlzLml0ZW1zID0gdGhpcy5nZXRHcmlkSXRlbXMoKTtcblxuICAgIHRoaXMubG9hZGluZyA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIG9ic2VydmFibGVNYXAoKHMpID0+IHtcbiAgICAgICAgcmV0dXJuIHMuaXRlbXMubG9hZGluZztcbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpXG4gICAgKTtcblxuICAgIHRoaXMuc29ydEZpZWxkID0gdGhpcy5zdGF0ZS5waXBlKFxuICAgICAgb2JzZXJ2YWJsZU1hcCgocykgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAgICAgaWYgKHMuc29ydCAmJiBzLnNvcnQuZmllbGRTZWxlY3RvcnMpIHtcbiAgICAgICAgICByZXR1cm4gcy5zb3J0LmZpZWxkU2VsZWN0b3JzWzBdO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSlcbiAgICApO1xuXG4gICAgdGhpcy5ncmlkU3RhdGVcbiAgICAgIC5waXBlKFxuICAgICAgICBvYnNlcnZhYmxlTWFwKChzKSA9PiBzLmNvbHVtbnMuaXRlbXMpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQodGhpcy5hcnJheXNFcXVhbClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGNvbHVtbnMpID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuQ29sdW1ucykge1xuICAgICAgICAgIGdldFZhbHVlKHRoaXMuaGlkZGVuQ29sdW1ucywgKGhpZGRlbkNvbHVtbnM6IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdyaWREaXNwYXRjaGVyLm5leHQoXG4gICAgICAgICAgICAgIG5ldyBMaXN0Vmlld0Rpc3BsYXllZEdyaWRDb2x1bW5zTG9hZEFjdGlvbihcbiAgICAgICAgICAgICAgICBjb2x1bW5zLmZpbHRlcigoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgICAgICAgICAgICAgbGV0IGlkID0geC5pZCB8fCB4LmZpZWxkO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGhpZGRlbkNvbHVtbnMuaW5kZXhPZihpZCkgPT09IC0xO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRpc3BsYXllZENvbHVtbnMpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIGdldFZhbHVlKHRoaXMuZGlzcGxheWVkQ29sdW1ucywgKGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdyaWREaXNwYXRjaGVyLm5leHQoXG4gICAgICAgICAgICAgIG5ldyBMaXN0Vmlld0Rpc3BsYXllZEdyaWRDb2x1bW5zTG9hZEFjdGlvbihcbiAgICAgICAgICAgICAgICBjb2x1bW5zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICh4KSA9PiBkaXNwbGF5ZWRDb2x1bW5zLmluZGV4T2YoeC5pZCB8fCB4LmZpZWxkKSAhPT0gLTFcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmdyaWREaXNwYXRjaGVyLm5leHQoXG4gICAgICAgICAgICBuZXcgTGlzdFZpZXdEaXNwbGF5ZWRHcmlkQ29sdW1uc0xvYWRBY3Rpb24oXG4gICAgICAgICAgICAgIGNvbHVtbnMuZmlsdGVyKCh4KSA9PiAheC5oaWRkZW4pLFxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXh0ID0gdGhpcy5zdGF0ZS5waXBlKFxuICAgICAgb2JzZXJ2YWJsZU1hcCgocykgPT4gcy5zZWFyY2guc2VhcmNoVGV4dCksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSlcbiAgICApO1xuXG4gICAgdGhpcy5ncmlkRGlzcGF0Y2hlci5uZXh0KFxuICAgICAgbmV3IExpc3RWaWV3R3JpZENvbHVtbnNMb2FkQWN0aW9uKGNvbHVtbk1vZGVscywgdHJ1ZSlcbiAgICApO1xuXG4gICAgdGhpcy5oYW5kbGVDb2x1bW5DaGFuZ2UoKTtcblxuICAgIGlmICh0aGlzLmVuYWJsZU11bHRpc2VsZWN0KSB7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhclNob3dNdWx0aXNlbGVjdFRvb2xiYXIodHJ1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0SW5saW5lRGVsZXRlTWVzc2FnZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHVzZXIgbWFrZXMgc2VsZWN0aW9uLCB0ZWxsIGxpc3QtYnVpbGRlciB0byB1cGRhdGUgdGhlIGxpc3Qgc3RhdGUuXG4gICAqIFRoaXMgbG9naWMgc2hvdWxkIG9ubHkgcnVuIG9uIHVzZXIgaW50ZXJhY3Rpb24gLSBOT1QgcHJvZ3JhbW1hdGljIHVwZGF0ZXMuXG4gICAqL1xuICBwdWJsaWMgb25NdWx0aXNlbGVjdFNlbGVjdGlvbkNoYW5nZShcbiAgICBldmVudDogU2t5R3JpZFNlbGVjdGVkUm93c01vZGVsQ2hhbmdlXG4gICk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIGV2ZW50LnNvdXJjZSA9PT0gU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZS5DaGVja2JveENoYW5nZSB8fFxuICAgICAgZXZlbnQuc291cmNlID09PSBTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlLlJvd0NsaWNrXG4gICAgKSB7XG4gICAgICB0aGlzLnN0YXRlXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG9ic2VydmFibGVNYXAoKHMpID0+IHMuaXRlbXMuaXRlbXMpLFxuICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogTGlzdEl0ZW1Nb2RlbFtdKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3SXRlbUlkcyA9IHRoaXMuYXJyYXlJbnRlcnNlY3Rpb24oXG4gICAgICAgICAgICBpdGVtcy5tYXAoKGkpID0+IGkuaWQpLFxuICAgICAgICAgICAgdGhpcy5tdWx0aXNlbGVjdFNlbGVjdGVkSWRzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBuZXdJZHMgPSBpdGVtcy5maWx0ZXIoKGkpID0+IGkuaXNTZWxlY3RlZCkubWFwKChpKSA9PiBpLmlkKTtcblxuICAgICAgICAgIC8vIENoZWNrIGZvciBkZXNlbGVjdGVkIGlkcyAmIHNlbmQgbWVzc2FnZSB0byBkaXNwYXRjaGVyLlxuICAgICAgICAgIGNvbnN0IGRlc2VsZWN0ZWRJZHMgPSB0aGlzLmFycmF5RGlmZihuZXdJdGVtSWRzLCBuZXdJZHMpO1xuICAgICAgICAgIGlmIChkZXNlbGVjdGVkSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hlci5zZXRTZWxlY3RlZChkZXNlbGVjdGVkSWRzLCBmYWxzZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgZm9yIHNlbGVjdGVkIGlkcyAmIHNlbmQgbWVzc2FnZSB0byBkaXNwYXRjaGVyLlxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gdGhpcy5hcnJheURpZmYobmV3SWRzLCBuZXdJdGVtSWRzKTtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRJZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnNldFNlbGVjdGVkKHNlbGVjdGVkSWRzLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjb2x1bW5JZHNDaGFuZ2VkKHNlbGVjdGVkQ29sdW1uSWRzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbklkcy5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoY3VycmVudElkcykgPT4ge1xuICAgICAgaWYgKCF0aGlzLmFycmF5c0VxdWFsKHNlbGVjdGVkQ29sdW1uSWRzLCBjdXJyZW50SWRzKSkge1xuICAgICAgICB0aGlzLmdyaWRTdGF0ZVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgb2JzZXJ2YWJsZU1hcCgocykgPT4gcy5jb2x1bW5zLml0ZW1zKSxcbiAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoY29sdW1ucykgPT4ge1xuICAgICAgICAgICAgbGV0IGRpc3BsYXllZENvbHVtbnMgPSBzZWxlY3RlZENvbHVtbklkcy5tYXAoXG4gICAgICAgICAgICAgIChjb2x1bW5JZCkgPT4gY29sdW1ucy5maWx0ZXIoKGMpID0+IGMuaWQgPT09IGNvbHVtbklkKVswXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZERpc3BhdGNoZXIubmV4dChcbiAgICAgICAgICAgICAgbmV3IExpc3RWaWV3RGlzcGxheWVkR3JpZENvbHVtbnNMb2FkQWN0aW9uKGRpc3BsYXllZENvbHVtbnMsIHRydWUpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNhbmNlbFJvd0RlbGV0ZShhcmdzOiBTa3lMaXN0Vmlld0dyaWRSb3dEZWxldGVDYW5jZWxBcmdzKTogdm9pZCB7XG4gICAgdGhpcy5yb3dEZWxldGVDYW5jZWwuZW1pdChhcmdzKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maXJtUm93RGVsZXRlKGFyZ3M6IFNreUxpc3RWaWV3R3JpZFJvd0RlbGV0ZUNvbmZpcm1BcmdzKTogdm9pZCB7XG4gICAgdGhpcy5yb3dEZWxldGVDb25maXJtLmVtaXQoYXJncyk7XG4gIH1cblxuICBwdWJsaWMgc29ydEZpZWxkQ2hhbmdlZChzb3J0RmllbGQ6IExpc3RTb3J0RmllbGRTZWxlY3Rvck1vZGVsKSB7XG4gICAgdGhpcy5kaXNwYXRjaGVyLnNvcnRTZXRGaWVsZFNlbGVjdG9ycyhbc29ydEZpZWxkXSk7XG4gIH1cblxuICBwdWJsaWMgb25WaWV3QWN0aXZlKCkge1xuICAgIC8qXG4gICAgICBSYW4gaW50byBwcm9ibGVtIHdoZXJlIHN0YXRlIHVwZGF0ZXMgd2VyZSBjb25zdW1lZCBvdXQgb2Ygb3JkZXIuIEZvciBleGFtcGxlLCBvbiBzZWFyY2ggdGV4dFxuICAgICAgdXBkYXRlLCB0aGUgc2VhcmNoVGV4dCB1cGRhdGUgd2FzIGNvbnN1bWVkIGFmdGVyIHRoZSByZXN1bHRpbmcgbGlzdCBpdGVtIHVwZGF0ZS4gU2Nhbm5pbmcgdGhlXG4gICAgICBwcmV2aW91cyB2YWx1ZSBvZiBpdGVtcyBsYXN0VXBkYXRlIGVuc3VyZXMgdGhhdCB3ZSBvbmx5IHJlY2VpdmUgdGhlIGxhdGVzdCBpdGVtcy5cbiAgICAqL1xuICAgIHRoaXMuZ3JpZFN0YXRlXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgIHNjYW4oKHByZXZpb3VzVmFsdWU6IEdyaWRTdGF0ZU1vZGVsLCBuZXdWYWx1ZTogR3JpZFN0YXRlTW9kZWwpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlLmRpc3BsYXllZENvbHVtbnMubGFzdFVwZGF0ZSA+XG4gICAgICAgICAgICBuZXdWYWx1ZS5kaXNwbGF5ZWRDb2x1bW5zLmxhc3RVcGRhdGVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgb2JzZXJ2YWJsZU1hcCgocykgPT4gcy5kaXNwbGF5ZWRDb2x1bW5zLml0ZW1zKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQodGhpcy5hcnJheXNFcXVhbClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGRpc3BsYXllZENvbHVtbnMpID0+IHtcbiAgICAgICAgbGV0IHNldEZ1bmN0aW9ucyA9XG4gICAgICAgICAgdGhpcy5zZWFyY2hGdW5jdGlvbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IFt0aGlzLnNlYXJjaEZ1bmN0aW9uXVxuICAgICAgICAgICAgOiBkaXNwbGF5ZWRDb2x1bW5zXG4gICAgICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgICAgIChjb2x1bW4pID0+IChkYXRhOiBhbnksIHNlYXJjaFRleHQ6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnNlYXJjaEZ1bmN0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGdldERhdGEoZGF0YSwgY29sdW1uLmZpZWxkKSxcbiAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hUZXh0XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoYykgPT4gYyAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICB0aGlzLnN0YXRlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChzKSA9PiB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnNlYXJjaFNldE9wdGlvbnMoXG4gICAgICAgICAgICBuZXcgTGlzdFNlYXJjaE1vZGVsKHtcbiAgICAgICAgICAgICAgc2VhcmNoVGV4dDogcy5zZWFyY2guc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgZnVuY3Rpb25zOiBzZXRGdW5jdGlvbnMsXG4gICAgICAgICAgICAgIGZpZWxkU2VsZWN0b3JzOiBkaXNwbGF5ZWRDb2x1bW5zLm1hcCgoZCkgPT4gZC5maWVsZCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRJbmxpbmVEZWxldGVNZXNzYWdlcygpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLm1lc3NhZ2VTdHJlYW0pIHtcbiAgICAgIHRoaXMubWVzc2FnZVN0cmVhbS5zdWJzY3JpYmUoKG1lc3NhZ2U6IFNreUxpc3RWaWV3R3JpZE1lc3NhZ2UpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gU2t5TGlzdFZpZXdHcmlkTWVzc2FnZVR5cGUuQWJvcnREZWxldGVSb3cpIHtcbiAgICAgICAgICB0aGlzLmdyaWRNZXNzYWdlU3RyZWFtLm5leHQoe1xuICAgICAgICAgICAgdHlwZTogU2t5R3JpZE1lc3NhZ2VUeXBlLkFib3J0RGVsZXRlUm93LFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBhYm9ydERlbGV0ZVJvdzogbWVzc2FnZS5kYXRhLmFib3J0RGVsZXRlUm93LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBtZXNzYWdlLnR5cGUgPT09IFNreUxpc3RWaWV3R3JpZE1lc3NhZ2VUeXBlLlByb21wdERlbGV0ZVJvd1xuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmdyaWRNZXNzYWdlU3RyZWFtLm5leHQoe1xuICAgICAgICAgICAgdHlwZTogU2t5R3JpZE1lc3NhZ2VUeXBlLlByb21wdERlbGV0ZVJvdyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgcHJvbXB0RGVsZXRlUm93OiBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDb2x1bW5DaGFuZ2UoKSB7XG4gICAgLy8gd2F0Y2ggZm9yIGNoYW5nZXMgaW4gY29sdW1uIGNvbXBvbmVudHNcbiAgICB0aGlzLmNvbHVtbkNvbXBvbmVudHMuY2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChjb2x1bW5Db21wb25lbnRzKSA9PiB7XG4gICAgICAgIGxldCBjb2x1bW5Nb2RlbHMgPSB0aGlzLmNvbHVtbkNvbXBvbmVudHMubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICByZXR1cm4gbmV3IFNreUdyaWRDb2x1bW5Nb2RlbChjb2x1bW4udGVtcGxhdGUsIGNvbHVtbik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdyaWREaXNwYXRjaGVyLm5leHQoXG4gICAgICAgICAgbmV3IExpc3RWaWV3R3JpZENvbHVtbnNMb2FkQWN0aW9uKGNvbHVtbk1vZGVscywgdHJ1ZSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgLy8gV2F0Y2ggZm9yIGNvbHVtbiBoZWFkaW5nIGNoYW5nZXM6XG4gICAgdGhpcy5jb2x1bW5Db21wb25lbnRzLmZvckVhY2goKGNvbXApID0+IHtcbiAgICAgIGNvbXAuaGVhZGluZ01vZGVsQ2hhbmdlc1xuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoY2hhbmdlOiBTa3lHcmlkQ29sdW1uSGVhZGluZ01vZGVsQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgdGhpcy5ncmlkQ29tcG9uZW50LnVwZGF0ZUNvbHVtbkhlYWRpbmcoY2hhbmdlKTtcbiAgICAgICAgfSk7XG4gICAgICBjb21wLmRlc2NyaXB0aW9uTW9kZWxDaGFuZ2VzXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKChjaGFuZ2U6IFNreUdyaWRDb2x1bW5EZXNjcmlwdGlvbk1vZGVsQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgdGhpcy5ncmlkQ29tcG9uZW50LnVwZGF0ZUNvbHVtbkRlc2NyaXB0aW9uKGNoYW5nZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRHcmlkSXRlbXMoKTogT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbU1vZGVsPj4ge1xuICAgIC8qXG4gICAgICBTYW1lIHByb2JsZW0gYXMgYWJvdmUuIFdlIHNob3VsZCBtb3ZlIGZyb20gaGF2aW5nIGEgc3RhdGUgb2JqZWN0IG9ic2VydmFibGUgd2l0aCBhIGJ1bmNoIG9mXG4gICAgICBzdGF0aWMgcHJvcGVydGllcyB0byBhIHN0YXRpYyBzdGF0ZSBvYmplY3Qgd2l0aCBvYnNlcnZhYmxlIHByb3BlcnRpZXMgdGhhdCB5b3UgY2FuIHN1YnNjcmliZVxuICAgICAgdG8uXG4gICAgKi9cbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5waXBlKFxuICAgICAgb2JzZXJ2YWJsZU1hcCgocykgPT4ge1xuICAgICAgICByZXR1cm4gcy5pdGVtcztcbiAgICAgIH0pLFxuICAgICAgc2NhbihcbiAgICAgICAgKFxuICAgICAgICAgIHByZXZpb3VzVmFsdWU6IEFzeW5jTGlzdDxMaXN0SXRlbU1vZGVsPixcbiAgICAgICAgICBuZXdWYWx1ZTogQXN5bmNMaXN0PExpc3RJdGVtTW9kZWw+XG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIGlmIChwcmV2aW91c1ZhbHVlLmxhc3RVcGRhdGUgPiBuZXdWYWx1ZS5sYXN0VXBkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgIG9ic2VydmFibGVNYXAoKHJlc3VsdDogQXN5bmNMaXN0PExpc3RJdGVtTW9kZWw+KSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHQuaXRlbXM7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZElkcygpOiBPYnNlcnZhYmxlPEFycmF5PHN0cmluZz4+IHtcbiAgICAvKlxuICAgICAgU2FtZSBwcm9ibGVtIGFzIGFib3ZlLiBXZSBzaG91bGQgbW92ZSBmcm9tIGhhdmluZyBhIHN0YXRlIG9iamVjdCBvYnNlcnZhYmxlIHdpdGggYSBidW5jaCBvZlxuICAgICAgc3RhdGljIHByb3BlcnRpZXMgdG8gYSBzdGF0aWMgc3RhdGUgb2JqZWN0IHdpdGggb2JzZXJ2YWJsZSBwcm9wZXJ0aWVzIHRoYXQgeW91IGNhbiBzdWJzY3JpYmVcbiAgICAgIHRvLlxuICAgICovXG4gICAgcmV0dXJuIHRoaXMuZ3JpZFN0YXRlLnBpcGUoXG4gICAgICBvYnNlcnZhYmxlTWFwKChzKSA9PiBzLmRpc3BsYXllZENvbHVtbnMpLFxuICAgICAgc2NhbihcbiAgICAgICAgKFxuICAgICAgICAgIHByZXZpb3VzVmFsdWU6IEFzeW5jTGlzdDxTa3lHcmlkQ29sdW1uTW9kZWw+LFxuICAgICAgICAgIG5ld1ZhbHVlOiBBc3luY0xpc3Q8U2t5R3JpZENvbHVtbk1vZGVsPlxuICAgICAgICApID0+IHtcbiAgICAgICAgICBpZiAocHJldmlvdXNWYWx1ZS5sYXN0VXBkYXRlID4gbmV3VmFsdWUubGFzdFVwZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBvYnNlcnZhYmxlTWFwKChyZXN1bHQ6IEFzeW5jTGlzdDxTa3lHcmlkQ29sdW1uTW9kZWw+KSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZW1zLm1hcCgoY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpID0+IHtcbiAgICAgICAgICByZXR1cm4gY29sdW1uLmlkIHx8IGNvbHVtbi5maWVsZDtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2aW91c1ZhbHVlOiBzdHJpbmdbXSwgbmV3VmFsdWU6IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhdmVDb2x1bW5JZHNDaGFuZ2VkKHByZXZpb3VzVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaGF2ZUNvbHVtbklkc0NoYW5nZWQocHJldmlvdXNWYWx1ZTogc3RyaW5nW10sIG5ld1ZhbHVlOiBzdHJpbmdbXSkge1xuICAgIGlmIChwcmV2aW91c1ZhbHVlLmxlbmd0aCAhPT0gbmV3VmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzQ2hhbmdlLmVtaXQobmV3VmFsdWUpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldmlvdXNWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAocHJldmlvdXNWYWx1ZVtpXSAhPT0gbmV3VmFsdWVbaV0pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbklkc0NoYW5nZS5lbWl0KG5ld1ZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0ZWRNYXBFcXVhbChcbiAgICBwcmV2OiBMaXN0U2VsZWN0ZWRNb2RlbCxcbiAgICBuZXh0OiBMaXN0U2VsZWN0ZWRNb2RlbFxuICApOiBib29sZWFuIHtcbiAgICBpZiAocHJldi5zZWxlY3RlZElkTWFwLnNpemUgIT09IG5leHQuc2VsZWN0ZWRJZE1hcC5zaXplKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgbmV4dC5zZWxlY3RlZElkTWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBjb25zdCB2YWx1ZSA9IG5leHQuc2VsZWN0ZWRJZE1hcC5nZXQoa2V5KTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gcHJldi5zZWxlY3RlZElkTWFwLmdldChrZXkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXJyYXlEaWZmKGFyckE6IEFycmF5PGFueT4sIGFyckI6IEFycmF5PGFueT4pOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gYXJyQS5maWx0ZXIoKGkpID0+IGFyckIuaW5kZXhPZihpKSA8IDApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcnJheUludGVyc2VjdGlvbihhcnJBOiBBcnJheTxhbnk+LCBhcnJCOiBBcnJheTxhbnk+KTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIGFyckEuZmlsdGVyKCh2YWx1ZSkgPT4gLTEgIT09IGFyckIuaW5kZXhPZih2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcnJheXNFcXVhbChhcnJheUE6IGFueVtdLCBhcnJheUI6IGFueVtdKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGFycmF5QS5sZW5ndGggPT09IGFycmF5Qi5sZW5ndGggJiZcbiAgICAgIGFycmF5QS5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiB2YWx1ZSA9PT0gYXJyYXlCW2luZGV4XSlcbiAgICApO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiYWN0aXZlIHwgYXN5bmNcIj5cbiAgPHNreS1ncmlkXG4gICAgW2NvbHVtbnNdPVwiY29sdW1ucyB8IGFzeW5jXCJcbiAgICBbZGF0YV09XCJpdGVtcyB8IGFzeW5jXCJcbiAgICBbZW5hYmxlTXVsdGlzZWxlY3RdPVwiZW5hYmxlTXVsdGlzZWxlY3RcIlxuICAgIFtmaXRdPVwiZml0XCJcbiAgICBbaGVpZ2h0XT1cImdyaWRIZWlnaHQgfCBhc3luY1wiXG4gICAgW2hpZ2hsaWdodFRleHRdPVwiXG4gICAgICBoaWdobGlnaHRTZWFyY2hUZXh0ID8gKGN1cnJlbnRTZWFyY2hUZXh0IHwgYXN5bmMpIDogdW5kZWZpbmVkXG4gICAgXCJcbiAgICBbcm93SGlnaGxpZ2h0ZWRJZF09XCJyb3dIaWdobGlnaHRlZElkXCJcbiAgICBbbWVzc2FnZVN0cmVhbV09XCJncmlkTWVzc2FnZVN0cmVhbVwiXG4gICAgW3NlbGVjdGVkQ29sdW1uSWRzXT1cInNlbGVjdGVkQ29sdW1uSWRzIHwgYXN5bmNcIlxuICAgIFtzZWxlY3RlZFJvd0lkc109XCJtdWx0aXNlbGVjdFNlbGVjdGVkSWRzXCJcbiAgICBbc2V0dGluZ3NLZXldPVwic2V0dGluZ3NLZXlcIlxuICAgIFtzb3J0RmllbGRdPVwic29ydEZpZWxkIHwgYXN5bmNcIlxuICAgIFt3aWR0aF09XCJncmlkV2lkdGggfCBhc3luY1wiXG4gICAgKG11bHRpc2VsZWN0U2VsZWN0aW9uQ2hhbmdlKT1cIm9uTXVsdGlzZWxlY3RTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHJvd0RlbGV0ZUNhbmNlbCk9XCJjYW5jZWxSb3dEZWxldGUoJGV2ZW50KVwiXG4gICAgKHJvd0RlbGV0ZUNvbmZpcm0pPVwiY29uZmlybVJvd0RlbGV0ZSgkZXZlbnQpXCJcbiAgICAoc2VsZWN0ZWRDb2x1bW5JZHNDaGFuZ2UpPVwiY29sdW1uSWRzQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAoc29ydEZpZWxkQ2hhbmdlKT1cInNvcnRGaWVsZENoYW5nZWQoJGV2ZW50KVwiXG4gICAgI3NreUdyaWRcbiAgPlxuICA8L3NreS1ncmlkPlxuICA8c2t5LXdhaXQgW2lzV2FpdGluZ109XCJsb2FkaW5nIHwgYXN5bmNcIj4gPC9za3ktd2FpdD5cbjwvZGl2PlxuIl19
@@ -8,37 +8,35 @@ import { SkyListViewGridComponent } from './list-view-grid.component';
8
8
  import * as i0 from "@angular/core";
9
9
  export class SkyListViewGridModule {
10
10
  }
11
- SkyListViewGridModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.8", ngImport: i0, type: SkyListViewGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12
- SkyListViewGridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.8", ngImport: i0, type: SkyListViewGridModule, declarations: [SkyListViewGridComponent], imports: [CommonModule,
11
+ SkyListViewGridModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SkyListViewGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12
+ SkyListViewGridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SkyListViewGridModule, declarations: [SkyListViewGridComponent], imports: [CommonModule,
13
13
  SkyWaitModule,
14
14
  SkyGridModule,
15
15
  SkyListBuilderViewGridsResourcesModule], exports: [SkyListViewGridComponent,
16
16
  SkyListColumnSelectorActionModule,
17
17
  SkyGridModule] });
18
- SkyListViewGridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.8", ngImport: i0, type: SkyListViewGridModule, imports: [[
18
+ SkyListViewGridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SkyListViewGridModule, imports: [[
19
19
  CommonModule,
20
20
  SkyWaitModule,
21
21
  SkyGridModule,
22
- SkyListBuilderViewGridsResourcesModule
22
+ SkyListBuilderViewGridsResourcesModule,
23
23
  ], SkyListColumnSelectorActionModule,
24
24
  SkyGridModule] });
25
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.8", ngImport: i0, type: SkyListViewGridModule, decorators: [{
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SkyListViewGridModule, decorators: [{
26
26
  type: NgModule,
27
27
  args: [{
28
- declarations: [
29
- SkyListViewGridComponent
30
- ],
28
+ declarations: [SkyListViewGridComponent],
31
29
  imports: [
32
30
  CommonModule,
33
31
  SkyWaitModule,
34
32
  SkyGridModule,
35
- SkyListBuilderViewGridsResourcesModule
33
+ SkyListBuilderViewGridsResourcesModule,
36
34
  ],
37
35
  exports: [
38
36
  SkyListViewGridComponent,
39
37
  SkyListColumnSelectorActionModule,
40
- SkyGridModule
41
- ]
38
+ SkyGridModule,
39
+ ],
42
40
  }]
43
41
  }] });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12aWV3LWdyaWQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGlzdC1idWlsZGVyLXZpZXctZ3JpZHMvc3JjL21vZHVsZXMvbGlzdC12aWV3LWdyaWQvbGlzdC12aWV3LWdyaWQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLFlBQVksRUFDYixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFDTCxhQUFhLEVBQ2QsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQixPQUFPLEVBQ0wsYUFBYSxFQUNkLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFDTCxzQ0FBc0MsRUFDdkMsTUFBTSx3REFBd0QsQ0FBQztBQUVoRSxPQUFPLEVBQ0wsaUNBQWlDLEVBQ2xDLE1BQU0sbUVBQW1FLENBQUM7QUFFM0UsT0FBTyxFQUNMLHdCQUF3QixFQUN6QixNQUFNLDRCQUE0QixDQUFDOztBQWtCcEMsTUFBTSxPQUFPLHFCQUFxQjs7a0hBQXJCLHFCQUFxQjttSEFBckIscUJBQXFCLGlCQWQ5Qix3QkFBd0IsYUFHeEIsWUFBWTtRQUNaLGFBQWE7UUFDYixhQUFhO1FBQ2Isc0NBQXNDLGFBR3RDLHdCQUF3QjtRQUN4QixpQ0FBaUM7UUFDakMsYUFBYTttSEFHSixxQkFBcUIsWUFadkI7WUFDUCxZQUFZO1lBQ1osYUFBYTtZQUNiLGFBQWE7WUFDYixzQ0FBc0M7U0FDdkMsRUFHQyxpQ0FBaUM7UUFDakMsYUFBYTsyRkFHSixxQkFBcUI7a0JBaEJqQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWix3QkFBd0I7cUJBQ3pCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixzQ0FBc0M7cUJBQ3ZDO29CQUNELE9BQU8sRUFBRTt3QkFDUCx3QkFBd0I7d0JBQ3hCLGlDQUFpQzt3QkFDakMsYUFBYTtxQkFDZDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE5nTW9kdWxlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBDb21tb25Nb2R1bGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtcbiAgU2t5V2FpdE1vZHVsZVxufSBmcm9tICdAc2t5dXgvaW5kaWNhdG9ycyc7XG5cbmltcG9ydCB7XG4gIFNreUdyaWRNb2R1bGVcbn0gZnJvbSAnQHNreXV4L2dyaWRzJztcblxuaW1wb3J0IHtcbiAgU2t5TGlzdEJ1aWxkZXJWaWV3R3JpZHNSZXNvdXJjZXNNb2R1bGVcbn0gZnJvbSAnLi4vc2hhcmVkL3NreS1saXN0LWJ1aWxkZXItdmlldy1ncmlkcy1yZXNvdXJjZXMubW9kdWxlJztcblxuaW1wb3J0IHtcbiAgU2t5TGlzdENvbHVtblNlbGVjdG9yQWN0aW9uTW9kdWxlXG59IGZyb20gJy4uL2xpc3QtY29sdW1uLXNlbGVjdG9yLWFjdGlvbi9saXN0LWNvbHVtbi1zZWxlY3Rvci1hY3Rpb24ubW9kdWxlJztcblxuaW1wb3J0IHtcbiAgU2t5TGlzdFZpZXdHcmlkQ29tcG9uZW50XG59IGZyb20gJy4vbGlzdC12aWV3LWdyaWQuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgU2t5TGlzdFZpZXdHcmlkQ29tcG9uZW50XG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgU2t5V2FpdE1vZHVsZSxcbiAgICBTa3lHcmlkTW9kdWxlLFxuICAgIFNreUxpc3RCdWlsZGVyVmlld0dyaWRzUmVzb3VyY2VzTW9kdWxlXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBTa3lMaXN0Vmlld0dyaWRDb21wb25lbnQsXG4gICAgU2t5TGlzdENvbHVtblNlbGVjdG9yQWN0aW9uTW9kdWxlLFxuICAgIFNreUdyaWRNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTa3lMaXN0Vmlld0dyaWRNb2R1bGUgeyB9XG4iXX0=
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC12aWV3LWdyaWQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGlzdC1idWlsZGVyLXZpZXctZ3JpZHMvc3JjL21vZHVsZXMvbGlzdC12aWV3LWdyaWQvbGlzdC12aWV3LWdyaWQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdDLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBRWhILE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBRXRILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQWdCdEUsTUFBTSxPQUFPLHFCQUFxQjs7bUhBQXJCLHFCQUFxQjtvSEFBckIscUJBQXFCLGlCQWJqQix3QkFBd0IsYUFFckMsWUFBWTtRQUNaLGFBQWE7UUFDYixhQUFhO1FBQ2Isc0NBQXNDLGFBR3RDLHdCQUF3QjtRQUN4QixpQ0FBaUM7UUFDakMsYUFBYTtvSEFHSixxQkFBcUIsWUFadkI7WUFDUCxZQUFZO1lBQ1osYUFBYTtZQUNiLGFBQWE7WUFDYixzQ0FBc0M7U0FDdkMsRUFHQyxpQ0FBaUM7UUFDakMsYUFBYTs0RkFHSixxQkFBcUI7a0JBZGpDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsd0JBQXdCLENBQUM7b0JBQ3hDLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixzQ0FBc0M7cUJBQ3ZDO29CQUNELE9BQU8sRUFBRTt3QkFDUCx3QkFBd0I7d0JBQ3hCLGlDQUFpQzt3QkFDakMsYUFBYTtxQkFDZDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IFNreVdhaXRNb2R1bGUgfSBmcm9tICdAc2t5dXgvaW5kaWNhdG9ycyc7XG5cbmltcG9ydCB7IFNreUdyaWRNb2R1bGUgfSBmcm9tICdAc2t5dXgvZ3JpZHMnO1xuXG5pbXBvcnQgeyBTa3lMaXN0QnVpbGRlclZpZXdHcmlkc1Jlc291cmNlc01vZHVsZSB9IGZyb20gJy4uL3NoYXJlZC9za3ktbGlzdC1idWlsZGVyLXZpZXctZ3JpZHMtcmVzb3VyY2VzLm1vZHVsZSc7XG5cbmltcG9ydCB7IFNreUxpc3RDb2x1bW5TZWxlY3RvckFjdGlvbk1vZHVsZSB9IGZyb20gJy4uL2xpc3QtY29sdW1uLXNlbGVjdG9yLWFjdGlvbi9saXN0LWNvbHVtbi1zZWxlY3Rvci1hY3Rpb24ubW9kdWxlJztcblxuaW1wb3J0IHsgU2t5TGlzdFZpZXdHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9saXN0LXZpZXctZ3JpZC5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtTa3lMaXN0Vmlld0dyaWRDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFNreVdhaXRNb2R1bGUsXG4gICAgU2t5R3JpZE1vZHVsZSxcbiAgICBTa3lMaXN0QnVpbGRlclZpZXdHcmlkc1Jlc291cmNlc01vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIFNreUxpc3RWaWV3R3JpZENvbXBvbmVudCxcbiAgICBTa3lMaXN0Q29sdW1uU2VsZWN0b3JBY3Rpb25Nb2R1bGUsXG4gICAgU2t5R3JpZE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5TGlzdFZpZXdHcmlkTW9kdWxlIHt9XG4iXX0=
@@ -9,15 +9,14 @@ export class ListViewGridColumnsOrchestrator extends GridStateOrchestrator {
9
9
  /* istanbul ignore next */
10
10
  constructor() {
11
11
  super();
12
- this
13
- .register(ListViewGridColumnsLoadAction, this.load);
12
+ this.register(ListViewGridColumnsLoadAction, this.load);
14
13
  }
15
14
  load(state, action) {
16
- const newColumns = action.columns.map(g => new SkyGridColumnModel(g.template, g));
15
+ const newColumns = action.columns.map((g) => new SkyGridColumnModel(g.template, g));
17
16
  if (action.refresh) {
18
17
  return new AsyncList([...newColumns], new Date());
19
18
  }
20
19
  return new AsyncList([...state.items, ...newColumns], new Date());
21
20
  }
22
21
  }
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1ucy5vcmNoZXN0cmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saXN0LWJ1aWxkZXItdmlldy1ncmlkcy9zcmMvbW9kdWxlcy9saXN0LXZpZXctZ3JpZC9zdGF0ZS9jb2x1bW5zL2NvbHVtbnMub3JjaGVzdHJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTlELE9BQU8sRUFDTCxTQUFTLEVBQ1YsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbEQsT0FBTyxFQUNMLDZCQUE2QixFQUM5QixNQUFNLGVBQWUsQ0FBQztBQUV2Qjs7R0FFRztBQUNILE1BQU0sT0FBTywrQkFDWCxTQUFRLHFCQUFvRDtJQUM1RCwwQkFBMEI7SUFDMUI7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUk7YUFDRCxRQUFRLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTyxJQUFJLENBQ1YsS0FBb0MsRUFDcEMsTUFBcUM7UUFDckMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDbEIsT0FBTyxJQUFJLFNBQVMsQ0FBcUIsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN2RTtRQUVELE9BQU8sSUFBSSxTQUFTLENBQXFCLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsVUFBVSxDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdyaWRTdGF0ZU9yY2hlc3RyYXRvciB9IGZyb20gJy4uL2dyaWQtc3RhdGUucnhzdGF0ZSc7XG5cbmltcG9ydCB7XG4gIEFzeW5jTGlzdFxufSBmcm9tICdAc2t5dXgvbGlzdC1idWlsZGVyLWNvbW1vbic7XG5cbmltcG9ydCB7IFNreUdyaWRDb2x1bW5Nb2RlbCB9IGZyb20gJ0Bza3l1eC9ncmlkcyc7XG5cbmltcG9ydCB7XG4gIExpc3RWaWV3R3JpZENvbHVtbnNMb2FkQWN0aW9uXG59IGZyb20gJy4vbG9hZC5hY3Rpb24nO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgTGlzdFZpZXdHcmlkQ29sdW1uc09yY2hlc3RyYXRvclxuICBleHRlbmRzIEdyaWRTdGF0ZU9yY2hlc3RyYXRvcjxBc3luY0xpc3Q8U2t5R3JpZENvbHVtbk1vZGVsPj4ge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpc1xuICAgICAgLnJlZ2lzdGVyKExpc3RWaWV3R3JpZENvbHVtbnNMb2FkQWN0aW9uLCB0aGlzLmxvYWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkKFxuICAgIHN0YXRlOiBBc3luY0xpc3Q8U2t5R3JpZENvbHVtbk1vZGVsPixcbiAgICBhY3Rpb246IExpc3RWaWV3R3JpZENvbHVtbnNMb2FkQWN0aW9uKTogQXN5bmNMaXN0PFNreUdyaWRDb2x1bW5Nb2RlbD4ge1xuICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBhY3Rpb24uY29sdW1ucy5tYXAoZyA9PiBuZXcgU2t5R3JpZENvbHVtbk1vZGVsKGcudGVtcGxhdGUsIGcpKTtcblxuICAgIGlmIChhY3Rpb24ucmVmcmVzaCkge1xuICAgICAgcmV0dXJuIG5ldyBBc3luY0xpc3Q8U2t5R3JpZENvbHVtbk1vZGVsPihbLi4ubmV3Q29sdW1uc10sIG5ldyBEYXRlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXN5bmNMaXN0PFNreUdyaWRDb2x1bW5Nb2RlbD4oWy4uLnN0YXRlLml0ZW1zLCAuLi5uZXdDb2x1bW5zXSwgbmV3IERhdGUoKSk7XG4gIH1cbn1cbiJdfQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1ucy5vcmNoZXN0cmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saXN0LWJ1aWxkZXItdmlldy1ncmlkcy9zcmMvbW9kdWxlcy9saXN0LXZpZXctZ3JpZC9zdGF0ZS9jb2x1bW5zL2NvbHVtbnMub3JjaGVzdHJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbEQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLCtCQUFnQyxTQUFRLHFCQUVwRDtJQUNDLDBCQUEwQjtJQUMxQjtRQUNFLEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVPLElBQUksQ0FDVixLQUFvQyxFQUNwQyxNQUFxQztRQUVyQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDbkMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FDN0MsQ0FBQztRQUVGLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUNsQixPQUFPLElBQUksU0FBUyxDQUFxQixDQUFDLEdBQUcsVUFBVSxDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsT0FBTyxJQUFJLFNBQVMsQ0FDbEIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFDL0IsSUFBSSxJQUFJLEVBQUUsQ0FDWCxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JpZFN0YXRlT3JjaGVzdHJhdG9yIH0gZnJvbSAnLi4vZ3JpZC1zdGF0ZS5yeHN0YXRlJztcblxuaW1wb3J0IHsgQXN5bmNMaXN0IH0gZnJvbSAnQHNreXV4L2xpc3QtYnVpbGRlci1jb21tb24nO1xuXG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uTW9kZWwgfSBmcm9tICdAc2t5dXgvZ3JpZHMnO1xuXG5pbXBvcnQgeyBMaXN0Vmlld0dyaWRDb2x1bW5zTG9hZEFjdGlvbiB9IGZyb20gJy4vbG9hZC5hY3Rpb24nO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgTGlzdFZpZXdHcmlkQ29sdW1uc09yY2hlc3RyYXRvciBleHRlbmRzIEdyaWRTdGF0ZU9yY2hlc3RyYXRvcjxcbiAgQXN5bmNMaXN0PFNreUdyaWRDb2x1bW5Nb2RlbD5cbj4ge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5yZWdpc3RlcihMaXN0Vmlld0dyaWRDb2x1bW5zTG9hZEFjdGlvbiwgdGhpcy5sb2FkKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZChcbiAgICBzdGF0ZTogQXN5bmNMaXN0PFNreUdyaWRDb2x1bW5Nb2RlbD4sXG4gICAgYWN0aW9uOiBMaXN0Vmlld0dyaWRDb2x1bW5zTG9hZEFjdGlvblxuICApOiBBc3luY0xpc3Q8U2t5R3JpZENvbHVtbk1vZGVsPiB7XG4gICAgY29uc3QgbmV3Q29sdW1ucyA9IGFjdGlvbi5jb2x1bW5zLm1hcChcbiAgICAgIChnKSA9PiBuZXcgU2t5R3JpZENvbHVtbk1vZGVsKGcudGVtcGxhdGUsIGcpXG4gICAgKTtcblxuICAgIGlmIChhY3Rpb24ucmVmcmVzaCkge1xuICAgICAgcmV0dXJuIG5ldyBBc3luY0xpc3Q8U2t5R3JpZENvbHVtbk1vZGVsPihbLi4ubmV3Q29sdW1uc10sIG5ldyBEYXRlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXN5bmNMaXN0PFNreUdyaWRDb2x1bW5Nb2RlbD4oXG4gICAgICBbLi4uc3RhdGUuaXRlbXMsIC4uLm5ld0NvbHVtbnNdLFxuICAgICAgbmV3IERhdGUoKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==