@acorex/data-grid 6.5.56 → 6.5.57

Sign up to get free protection for your applications and to get access to all the features.
@@ -42,10 +42,11 @@ export class AXDataGridComponent {
42
42
  this.gridView = false;
43
43
  this.groupSelectsChildren = false;
44
44
  this.oldSelectionNodes = [];
45
- this.paginationAutoPageSize = true;
46
- this.paginationPageSize = 10;
47
45
  // @Input()
48
46
  // showRowNumber: boolean = true;
47
+ this.paginationAutoPageSize = false;
48
+ this.paginationPageSize = 20;
49
+ this.cacheBlockSize = this.paginationPageSize;
49
50
  this.remoteOperation = false;
50
51
  this.rowMultiSelectWithClick = true;
51
52
  this.suppressRowClickSelection = true;
@@ -53,7 +54,6 @@ export class AXDataGridComponent {
53
54
  this.sizeColumnsToFit = true;
54
55
  this.showCheckBox = true;
55
56
  this.floatingFilter = false;
56
- this.cacheBlockSize = 100;
57
57
  // @Input()
58
58
  // takeCount: number;
59
59
  this.autoGroupColumnDef = {};
@@ -158,20 +158,6 @@ export class AXDataGridComponent {
158
158
  set dataSource(v) {
159
159
  this._dataSource = v;
160
160
  }
161
- getRowHeight(param) {
162
- if (param.data && param.data.rowHeight && param.node.level == 0) {
163
- return param.data.rowHeight;
164
- }
165
- else if (this.masterDetail == true && param.node.level == 1) {
166
- return this.detailRowHeight;
167
- }
168
- else if (this.masterDetail == false && param.data && param.data.rowHeight) {
169
- return param.data.rowHeight;
170
- }
171
- else {
172
- return null;
173
- }
174
- }
175
161
  calcHeight() {
176
162
  if (this.toolbar) {
177
163
  this.internalHeight = `calc(100% - ${40}px)`;
@@ -185,13 +171,10 @@ export class AXDataGridComponent {
185
171
  return {
186
172
  rowCount: null,
187
173
  getRows: (params) => {
188
- // that.gridApi.gridOptionsWrapper.setProperty('cacheBlockSize', this.takeCount ? this.takeCount : params.api.paginationGetPageSize());
189
174
  that.dataSourceSuccessCallback = params.successCallback;
190
175
  const loadParams = {};
191
176
  loadParams.searchText = that.searchText;
192
177
  loadParams.skip = params.request.startRow;
193
- // loadParams.take = params.request.endRow - params.request.startRow;
194
- //// loadParams.take = that.takeCount ? that.takeCount : params.api.paginationGetPageSize() * 2;
195
178
  loadParams.take = params.request.endRow - params.request.startRow;
196
179
  loadParams.sort = params.request.sortModel.map((c) => {
197
180
  return {
@@ -199,18 +182,13 @@ export class AXDataGridComponent {
199
182
  dir: c.sort
200
183
  };
201
184
  });
202
- // loadParams.groups = params.request.rowGroupCols.map(r => r.field);
203
- // loadParams.groupKeys = params.request.groupKeys;
204
- // loadParams.data = params.parentNode.data;
205
185
  loadParams.group = {
206
186
  fields: params.request.rowGroupCols.map((r) => r.field),
207
187
  keys: params.request.groupKeys,
208
188
  parentData: params.parentNode.data
209
189
  };
210
190
  loadParams.filter = params.request.filterModel;
211
- /// setTimeout(() => {
212
191
  that.dataSource.fetch(loadParams);
213
- // }, 5000);
214
192
  }
215
193
  };
216
194
  }
@@ -223,12 +201,13 @@ export class AXDataGridComponent {
223
201
  paginationGoToPage(number) {
224
202
  this.gridApi.paginationGoToPage(number - 1);
225
203
  }
226
- // todo gridOptions: GridOptions
227
204
  internalGridReady(gridOptions) {
228
- //// gridOptions.api.checkGridSize();
229
- //// this.takeCount = this.takeCount ? this.takeCount : gridOptions.api.paginationGetPageSize() * 2;
230
- // this.takeCount = this.takeCount < 20 ? 20 : this.takeCount;
231
- //// gridOptions.api.gridOptionsWrapper.setProperty('cacheBlockSize', this.takeCount);
205
+ if (this.remoteOperation && !this.paginationAutoPageSize) {
206
+ this.handlePageSize();
207
+ }
208
+ else {
209
+ this.cacheBlockSize = this.paginationPageSize > 20 ? this.paginationPageSize : 100;
210
+ }
232
211
  this.gridApi = gridOptions.api;
233
212
  this.mapColumns();
234
213
  this.calcHeight();
@@ -260,14 +239,8 @@ export class AXDataGridComponent {
260
239
  this.isFullWidthCell = () => {
261
240
  return that.rowTemplate != null;
262
241
  };
263
- //this.cdr
264
242
  }
265
243
  ngOnInit() {
266
- // if (this.takeCount && this.takeCount > 0) {
267
- // this.paginationPageSize = this.takeCount;
268
- // this.paginationAutoPageSize = false;
269
- // this.cacheBlockSize = this.takeCount;
270
- // }
271
244
  if (this.selectionMode === 'single') {
272
245
  this.groupSelectsChildren = false;
273
246
  }
@@ -321,12 +294,6 @@ export class AXDataGridComponent {
321
294
  }
322
295
  }
323
296
  }
324
- // ngAfterViewChecked(): void {
325
- // //Called after every check of the component's view. Applies to components only.
326
- // //Add 'implements AfterViewChecked' to the class.
327
- // // this.selectByValues();
328
- // this.enabelSelect = false;
329
- // }
330
297
  rebuildGrid() {
331
298
  this.mapColumns();
332
299
  setTimeout(() => {
@@ -351,9 +318,7 @@ export class AXDataGridComponent {
351
318
  }
352
319
  });
353
320
  }
354
- //setTimeout(() => {
355
321
  this.gridView = true;
356
- //});
357
322
  this.enabelSelect = true;
358
323
  this.dataSource.onDataReceived.subscribe((_data) => {
359
324
  const result = _data.data.result;
@@ -394,18 +359,10 @@ export class AXDataGridComponent {
394
359
  this.searchText = c.value;
395
360
  });
396
361
  }
397
- //
398
362
  this.cdr.detectChanges();
399
363
  }
400
364
  mapColumns() {
401
365
  this.columnDefs = this.columns.map((c) => c.render());
402
- // if (this.showRowNumber) {
403
- // this.columnDefs.push({
404
- // headerName: AXConfig.get('layout.rtl') ? 'ردیف' : 'Row',
405
- // valueGetter: 'node.rowIndex + 1',
406
- // pinned: AXConfig.get('layout.rtl') ? 'right' : 'left'
407
- // });
408
- // }
409
366
  if (this.gridDetailTemplate) {
410
367
  if (this.columnDefs[0].checkboxSelection === true && this.columnDefs[0].field === '') {
411
368
  this.columnDefs[1].cellRenderer = 'agGroupCellRenderer';
@@ -423,7 +380,6 @@ export class AXDataGridComponent {
423
380
  cellRendererParams: { checkbox: this.showCheckBox },
424
381
  field: groupColumn.field
425
382
  };
426
- // groupColumn.hide = true;
427
383
  }
428
384
  }
429
385
  this.columnDefs.forEach((elm) => {
@@ -444,7 +400,6 @@ export class AXDataGridComponent {
444
400
  field: eee.colDef.field
445
401
  };
446
402
  }
447
- // eee.hide = true;
448
403
  }
449
404
  }
450
405
  refresh(route = []) {
@@ -453,7 +408,6 @@ export class AXDataGridComponent {
453
408
  this.gridApi.setServerSideDatasource(this.intenalGridDataSource);
454
409
  }
455
410
  else {
456
- // TODO : check fetch param
457
411
  this.dataSource.fetch(null);
458
412
  }
459
413
  }
@@ -491,11 +445,6 @@ export class AXDataGridComponent {
491
445
  return temp.sort((a, b) => a - b);
492
446
  }
493
447
  rowSelectionChanged(e) {
494
- // this.gridApi.forEachNode((node) => {
495
- // if (node.data[this.keyField] == e.node.data[this.keyField]) {
496
- // node.setSelected(e.node.selected);
497
- // }
498
- // });
499
448
  if (e.node.selected == true) {
500
449
  this.selectRow = this.selectRow.filter((c) => c[this.keyField] != e.data[this.keyField]);
501
450
  this.selectRow.push(e.data);
@@ -566,8 +515,6 @@ export class AXDataGridComponent {
566
515
  if (e.clientWidth > 0 && e.clientHeight > 0) {
567
516
  this.performSizeColumnsToFit(e.api);
568
517
  }
569
- // this.refresh();
570
- // this.gridApi.paginationGoToFirstPage();
571
518
  }
572
519
  internalGridFirstDataRendered(e) {
573
520
  this.performSizeColumnsToFit(e.api);
@@ -577,13 +524,40 @@ export class AXDataGridComponent {
577
524
  api.sizeColumnsToFit();
578
525
  }
579
526
  }
527
+ handlePageSize() {
528
+ const pagingPanel = this.ref.nativeElement.querySelector('.ag-paging-panel');
529
+ const select = document.createElement('select');
530
+ select.addEventListener('change', (e) => {
531
+ this.gridApi.paginationSetPageSize(Number(e.target.value));
532
+ this.gridApi.setCacheBlockSize(Number(e.target.value));
533
+ });
534
+ const option1 = document.createElement('option');
535
+ option1.setAttribute('value', '10');
536
+ option1.textContent = '10';
537
+ const option2 = document.createElement('option');
538
+ option2.setAttribute('value', '20');
539
+ option2.textContent = '20';
540
+ select.appendChild(option1);
541
+ select.appendChild(option2);
542
+ select.value = '20';
543
+ select.style.backgroundColor = 'white';
544
+ select.style.color = 'gray';
545
+ select.style.padding = '2px';
546
+ select.style.border = '1px solid gray';
547
+ select.style.borderRadius = '4px';
548
+ pagingPanel.appendChild(select);
549
+ }
580
550
  }
581
551
  AXDataGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXDataGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
582
- AXDataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AXDataGridComponent, selector: "ax-data-grid", inputs: { remoteOperation: "remoteOperation", rowMultiSelectWithClick: "rowMultiSelectWithClick", suppressRowClickSelection: "suppressRowClickSelection", suppressCellSelection: "suppressCellSelection", sizeColumnsToFit: "sizeColumnsToFit", showCheckBox: "showCheckBox", floatingFilter: "floatingFilter", cacheBlockSize: "cacheBlockSize", selectionMode: "selectionMode", pagination: "pagination", selectRow: "selectRow", rowGroupPanelShow: "rowGroupPanelShow", loadOnInit: "loadOnInit", keyField: "keyField", hasChildField: "hasChildField", searchText: "searchText", filter: "filter", columns: "columns", rowHeight: "rowHeight", dataSource: "dataSource", groupHideOpenParents: "groupHideOpenParents", rowClass: "rowClass", rtl: "rtl" }, outputs: { columnsChange: "columnsChange", cellClick: "cellClick", cellDbClick: "cellDbClick", cellFocuse: "cellFocuse", rowClick: "rowClick", rowDbClick: "rowDbClick", selectionChanged: "selectionChanged", rowSelectionChange: "rowSelectionChange", onRowSelectionChanged: "onRowSelectionChanged" }, queries: [{ propertyName: "searchInput", first: true, predicate: AXToolbarSearchComponent, descendants: true, static: true }, { propertyName: "toolbar", first: true, predicate: AXToolbarComponent, descendants: true, static: true }, { propertyName: "rowTemplate", first: true, predicate: AXDataGridRowTemplateComponent, descendants: true, static: true }, { propertyName: "gridDetailTemplate", first: true, predicate: AXDataGridDetailTemplateComponent, descendants: true, static: true }, { propertyName: "_contentDataSource", first: true, predicate: AXDataSourceComponent, descendants: true, static: true }, { propertyName: "_inlineColumns", predicate: AXGridDataColumn }], ngImport: i0, template: "<div class=\"ax-grid-toolbar\" *ngIf=\"toolbar\">\n <ng-content select=\"ax-toolbar\"></ng-content>\n</div>\n<!-- [enableSorting]=\"true\" [enableColResize]=\"true\" [enableFilter]=\"allowFiltering\" -->\n<ag-grid-angular *ngIf=\"gridView\" class=\"ag-theme-balham\" [getRowClass]=\"internalGetRowClass\"\n [style.height]=\"internalHeight\" [columnDefs]=\"columnDefs\" [enableRtl]=\"rtl\" [pagination]=\"pagination\"\n [rowGroupPanelShow]=\"rowGroupPanelShow\" [rowModelType]=\"rowModelType\" [detailRowHeight]=\"detailRowHeight\"\n [getRowHeight]=\"getRowHeight\" [paginationAutoPageSize]=\"paginationAutoPageSize\"\n [paginationPageSize]=\"paginationPageSize\" [suppressMenuHide]=\"true\" [frameworkComponents]=\"frameworkComponents\"\n [isFullWidthCell]=\"isFullWidthCell\" [rowSelection]=\"selectionMode\" [rowMultiSelectWithClick]=\"rowMultiSelectWithClick\"\n [fullWidthCellRendererFramework]=\"fullWidthCellRendererFramework\" [cacheBlockSize]=\"cacheBlockSize\"\n [fullWidthCellRendererParams]=\"fullWidthCellRendererParams\" (cellClicked)=\"internalGridCellClicked($event)\"\n (cellDoubleClicked)=\"internalGridCellDoubleClicked($event)\" (cellFocused)=\"internalGridCellFocused($event)\"\n (rowClicked)=\"internalGridRowClicked($event)\" (selectionChanged)=\"internalGridSelectionChanged($event)\"\n (rowSelected)=\"rowSelectionChanged($event)\" (rowDoubleClicked)=\"internalGridRowDoubleClicked($event)\"\n (gridReady)=\"internalGridReady($event)\" [groupSelectsChildren]=\"groupSelectsChildren\"\n [suppressRowClickSelection]=\"suppressRowClickSelection\" [groupSelectsFiltered]=\"true\"\n [suppressCellSelection]=\"suppressCellSelection\" [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [suppressAggFuncInHeader]=\"true\" [treeData]=\"treeData\" [animateRows]=\"true\" [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\" [masterDetail]=\"masterDetail\"\n [detailCellRendererParams]=\"detailCellRendererParams\" [detailCellRenderer]=\"detailCellRenderer\"\n (gridSizeChanged)=\"internalGridSizeChanged($event)\" (firstDataRendered)=\"internalGridFirstDataRendered($event)\"\n [localeText]=\"localeText\" [groupHideOpenParents]=\"groupHideOpenParents\" [enableRangeSelection]=\"true\"\n [enableRangeSelection]=\"false\" [allowContextMenuWithControlKey]=\"false\" [getMainMenuItems]=\"getMainMenuItems\">\n</ag-grid-angular>\n\n<!-- (displayedColumnsChanged)=\"displayedColumnsChanged($event)\" -->\n", components: [{ type: i1.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
552
+ AXDataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AXDataGridComponent, selector: "ax-data-grid", inputs: { paginationAutoPageSize: "paginationAutoPageSize", paginationPageSize: "paginationPageSize", remoteOperation: "remoteOperation", rowMultiSelectWithClick: "rowMultiSelectWithClick", suppressRowClickSelection: "suppressRowClickSelection", suppressCellSelection: "suppressCellSelection", sizeColumnsToFit: "sizeColumnsToFit", showCheckBox: "showCheckBox", floatingFilter: "floatingFilter", selectionMode: "selectionMode", pagination: "pagination", selectRow: "selectRow", rowGroupPanelShow: "rowGroupPanelShow", loadOnInit: "loadOnInit", keyField: "keyField", hasChildField: "hasChildField", searchText: "searchText", filter: "filter", columns: "columns", rowHeight: "rowHeight", dataSource: "dataSource", groupHideOpenParents: "groupHideOpenParents", rowClass: "rowClass", rtl: "rtl" }, outputs: { columnsChange: "columnsChange", cellClick: "cellClick", cellDbClick: "cellDbClick", cellFocuse: "cellFocuse", rowClick: "rowClick", rowDbClick: "rowDbClick", selectionChanged: "selectionChanged", rowSelectionChange: "rowSelectionChange", onRowSelectionChanged: "onRowSelectionChanged" }, queries: [{ propertyName: "searchInput", first: true, predicate: AXToolbarSearchComponent, descendants: true, static: true }, { propertyName: "toolbar", first: true, predicate: AXToolbarComponent, descendants: true, static: true }, { propertyName: "rowTemplate", first: true, predicate: AXDataGridRowTemplateComponent, descendants: true, static: true }, { propertyName: "gridDetailTemplate", first: true, predicate: AXDataGridDetailTemplateComponent, descendants: true, static: true }, { propertyName: "_contentDataSource", first: true, predicate: AXDataSourceComponent, descendants: true, static: true }, { propertyName: "_inlineColumns", predicate: AXGridDataColumn }], ngImport: i0, template: "<div class=\"ax-grid-toolbar\" *ngIf=\"toolbar\">\n <ng-content select=\"ax-toolbar\"></ng-content>\n</div>\n<!-- [enableSorting]=\"true\" [enableColResize]=\"true\" [enableFilter]=\"allowFiltering\" -->\n\n\n<ag-grid-angular *ngIf=\"gridView\" class=\"ag-theme-balham\" [getRowClass]=\"internalGetRowClass\"\n [serverSideStoreType]=\"'partial'\" [style.height]=\"internalHeight\" [columnDefs]=\"columnDefs\" [enableRtl]=\"rtl\"\n [pagination]=\"pagination\" [rowGroupPanelShow]=\"rowGroupPanelShow\" [rowModelType]=\"rowModelType\"\n [detailRowHeight]=\"detailRowHeight\" [paginationAutoPageSize]=\"paginationAutoPageSize\"\n [paginationPageSize]=\"paginationPageSize\" [suppressMenuHide]=\"true\" [frameworkComponents]=\"frameworkComponents\"\n [isFullWidthCell]=\"isFullWidthCell\" [rowSelection]=\"selectionMode\" [rowMultiSelectWithClick]=\"rowMultiSelectWithClick\"\n [fullWidthCellRendererFramework]=\"fullWidthCellRendererFramework\" [cacheBlockSize]=\"cacheBlockSize\"\n [fullWidthCellRendererParams]=\"fullWidthCellRendererParams\" (cellClicked)=\"internalGridCellClicked($event)\"\n (cellDoubleClicked)=\"internalGridCellDoubleClicked($event)\" (cellFocused)=\"internalGridCellFocused($event)\"\n (rowClicked)=\"internalGridRowClicked($event)\" (selectionChanged)=\"internalGridSelectionChanged($event)\"\n (rowSelected)=\"rowSelectionChanged($event)\" (rowDoubleClicked)=\"internalGridRowDoubleClicked($event)\"\n (gridReady)=\"internalGridReady($event)\" [groupSelectsChildren]=\"groupSelectsChildren\"\n [suppressRowClickSelection]=\"suppressRowClickSelection\" [groupSelectsFiltered]=\"true\"\n [suppressCellSelection]=\"suppressCellSelection\" [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [suppressAggFuncInHeader]=\"true\" [treeData]=\"treeData\" [animateRows]=\"true\" [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\" [masterDetail]=\"masterDetail\"\n [detailCellRendererParams]=\"detailCellRendererParams\" [detailCellRenderer]=\"detailCellRenderer\"\n (gridSizeChanged)=\"internalGridSizeChanged($event)\" (firstDataRendered)=\"internalGridFirstDataRendered($event)\"\n [localeText]=\"localeText\" [groupHideOpenParents]=\"groupHideOpenParents\" [enableRangeSelection]=\"true\"\n [enableRangeSelection]=\"false\" [allowContextMenuWithControlKey]=\"false\" [getMainMenuItems]=\"getMainMenuItems\">\n</ag-grid-angular>\n\n\n<!-- (displayedColumnsChanged)=\"displayedColumnsChanged($event)\" -->", components: [{ type: i1.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
583
553
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AXDataGridComponent, decorators: [{
584
554
  type: Component,
585
- args: [{ selector: 'ax-data-grid', encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-grid-toolbar\" *ngIf=\"toolbar\">\n <ng-content select=\"ax-toolbar\"></ng-content>\n</div>\n<!-- [enableSorting]=\"true\" [enableColResize]=\"true\" [enableFilter]=\"allowFiltering\" -->\n<ag-grid-angular *ngIf=\"gridView\" class=\"ag-theme-balham\" [getRowClass]=\"internalGetRowClass\"\n [style.height]=\"internalHeight\" [columnDefs]=\"columnDefs\" [enableRtl]=\"rtl\" [pagination]=\"pagination\"\n [rowGroupPanelShow]=\"rowGroupPanelShow\" [rowModelType]=\"rowModelType\" [detailRowHeight]=\"detailRowHeight\"\n [getRowHeight]=\"getRowHeight\" [paginationAutoPageSize]=\"paginationAutoPageSize\"\n [paginationPageSize]=\"paginationPageSize\" [suppressMenuHide]=\"true\" [frameworkComponents]=\"frameworkComponents\"\n [isFullWidthCell]=\"isFullWidthCell\" [rowSelection]=\"selectionMode\" [rowMultiSelectWithClick]=\"rowMultiSelectWithClick\"\n [fullWidthCellRendererFramework]=\"fullWidthCellRendererFramework\" [cacheBlockSize]=\"cacheBlockSize\"\n [fullWidthCellRendererParams]=\"fullWidthCellRendererParams\" (cellClicked)=\"internalGridCellClicked($event)\"\n (cellDoubleClicked)=\"internalGridCellDoubleClicked($event)\" (cellFocused)=\"internalGridCellFocused($event)\"\n (rowClicked)=\"internalGridRowClicked($event)\" (selectionChanged)=\"internalGridSelectionChanged($event)\"\n (rowSelected)=\"rowSelectionChanged($event)\" (rowDoubleClicked)=\"internalGridRowDoubleClicked($event)\"\n (gridReady)=\"internalGridReady($event)\" [groupSelectsChildren]=\"groupSelectsChildren\"\n [suppressRowClickSelection]=\"suppressRowClickSelection\" [groupSelectsFiltered]=\"true\"\n [suppressCellSelection]=\"suppressCellSelection\" [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [suppressAggFuncInHeader]=\"true\" [treeData]=\"treeData\" [animateRows]=\"true\" [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\" [masterDetail]=\"masterDetail\"\n [detailCellRendererParams]=\"detailCellRendererParams\" [detailCellRenderer]=\"detailCellRenderer\"\n (gridSizeChanged)=\"internalGridSizeChanged($event)\" (firstDataRendered)=\"internalGridFirstDataRendered($event)\"\n [localeText]=\"localeText\" [groupHideOpenParents]=\"groupHideOpenParents\" [enableRangeSelection]=\"true\"\n [enableRangeSelection]=\"false\" [allowContextMenuWithControlKey]=\"false\" [getMainMenuItems]=\"getMainMenuItems\">\n</ag-grid-angular>\n\n<!-- (displayedColumnsChanged)=\"displayedColumnsChanged($event)\" -->\n" }]
586
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { remoteOperation: [{
555
+ args: [{ selector: 'ax-data-grid', encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-grid-toolbar\" *ngIf=\"toolbar\">\n <ng-content select=\"ax-toolbar\"></ng-content>\n</div>\n<!-- [enableSorting]=\"true\" [enableColResize]=\"true\" [enableFilter]=\"allowFiltering\" -->\n\n\n<ag-grid-angular *ngIf=\"gridView\" class=\"ag-theme-balham\" [getRowClass]=\"internalGetRowClass\"\n [serverSideStoreType]=\"'partial'\" [style.height]=\"internalHeight\" [columnDefs]=\"columnDefs\" [enableRtl]=\"rtl\"\n [pagination]=\"pagination\" [rowGroupPanelShow]=\"rowGroupPanelShow\" [rowModelType]=\"rowModelType\"\n [detailRowHeight]=\"detailRowHeight\" [paginationAutoPageSize]=\"paginationAutoPageSize\"\n [paginationPageSize]=\"paginationPageSize\" [suppressMenuHide]=\"true\" [frameworkComponents]=\"frameworkComponents\"\n [isFullWidthCell]=\"isFullWidthCell\" [rowSelection]=\"selectionMode\" [rowMultiSelectWithClick]=\"rowMultiSelectWithClick\"\n [fullWidthCellRendererFramework]=\"fullWidthCellRendererFramework\" [cacheBlockSize]=\"cacheBlockSize\"\n [fullWidthCellRendererParams]=\"fullWidthCellRendererParams\" (cellClicked)=\"internalGridCellClicked($event)\"\n (cellDoubleClicked)=\"internalGridCellDoubleClicked($event)\" (cellFocused)=\"internalGridCellFocused($event)\"\n (rowClicked)=\"internalGridRowClicked($event)\" (selectionChanged)=\"internalGridSelectionChanged($event)\"\n (rowSelected)=\"rowSelectionChanged($event)\" (rowDoubleClicked)=\"internalGridRowDoubleClicked($event)\"\n (gridReady)=\"internalGridReady($event)\" [groupSelectsChildren]=\"groupSelectsChildren\"\n [suppressRowClickSelection]=\"suppressRowClickSelection\" [groupSelectsFiltered]=\"true\"\n [suppressCellSelection]=\"suppressCellSelection\" [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [suppressAggFuncInHeader]=\"true\" [treeData]=\"treeData\" [animateRows]=\"true\" [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\" [masterDetail]=\"masterDetail\"\n [detailCellRendererParams]=\"detailCellRendererParams\" [detailCellRenderer]=\"detailCellRenderer\"\n (gridSizeChanged)=\"internalGridSizeChanged($event)\" (firstDataRendered)=\"internalGridFirstDataRendered($event)\"\n [localeText]=\"localeText\" [groupHideOpenParents]=\"groupHideOpenParents\" [enableRangeSelection]=\"true\"\n [enableRangeSelection]=\"false\" [allowContextMenuWithControlKey]=\"false\" [getMainMenuItems]=\"getMainMenuItems\">\n</ag-grid-angular>\n\n\n<!-- (displayedColumnsChanged)=\"displayedColumnsChanged($event)\" -->" }]
556
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { paginationAutoPageSize: [{
557
+ type: Input
558
+ }], paginationPageSize: [{
559
+ type: Input
560
+ }], remoteOperation: [{
587
561
  type: Input
588
562
  }], rowMultiSelectWithClick: [{
589
563
  type: Input
@@ -597,8 +571,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
597
571
  type: Input
598
572
  }], floatingFilter: [{
599
573
  type: Input
600
- }], cacheBlockSize: [{
601
- type: Input
602
574
  }], selectionMode: [{
603
575
  type: Input
604
576
  }], pagination: [{
@@ -666,4 +638,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
666
638
  }], rtl: [{
667
639
  type: Input
668
640
  }] } });
669
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNvcmV4L2RhdGEtZ3JpZC9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvZGF0YS1ncmlkL3NyYy9saWIvZGF0YS1ncmlkL2RhdGFncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxlQUFlLEVBQ2YsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sVUFBVSxFQUNWLGlCQUFpQixFQUVsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQWE5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0csT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7O0FBRXhDLGNBQWMsQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFH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QkFERixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIElucHV0LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPdXRwdXQsXG4gIEVsZW1lbnRSZWYsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYRGF0YVNvdXJjZUNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWEdyaWREYXRhQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhEYXRhU291cmNlUmVhZFBhcmFtcyB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBHcmlkT3B0aW9ucyxcbiAgQ2VsbENsaWNrZWRFdmVudCxcbiAgUm93Q2xpY2tlZEV2ZW50LFxuICBDZWxsRXZlbnQsXG4gIFJvd0V2ZW50LFxuICBGaXJzdERhdGFSZW5kZXJlZEV2ZW50LFxuICBHcmlkU2l6ZUNoYW5nZWRFdmVudCxcbiAgR3JpZEFwaVxufSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5cbmltcG9ydCB7IExpY2Vuc2VNYW5hZ2VyIH0gZnJvbSAnYWctZ3JpZC1lbnRlcnByaXNlJztcbmltcG9ydCB7IFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWEdyaWRDZWxsRXZlbnQsIEFYR3JpZFJvd0V2ZW50LCBBWEdyaWRSb3dTZWxlY3Rpb25FdmVudCwgQVhHcmlkUm93UGFyYW1zIH0gZnJvbSAnLi9kYXRhZ3JpZC5ldmVudHMnO1xuXG5pbXBvcnQgeyBBWERhdGFHcmlkUm93VGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL3RlbXBsYXRlcy9yb3ctdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEFYVG9vbGJhclNlYXJjaENvbXBvbmVudCwgQVhUb29sYmFyQ29tcG9uZW50LCBBWERhdGFFdmVudCwgQVhWYWx1ZUV2ZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzJztcbmltcG9ydCB7IEFYRGF0YUdyaWREZXRhaWxUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vdGVtcGxhdGVzL2RldGFpbC10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcbmltcG9ydCB7IEFYRGF0ZVBpY2tlckZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1ucy9kYXRlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhDb25maWcgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xuXG5MaWNlbnNlTWFuYWdlci5wcm90b3R5cGUudmFsaWRhdGVMaWNlbnNlID0gZnVuY3Rpb24gKCkge1xuICAvL2NvbnNvbGUuaW5mbygnQ3JhY2tlZCBieSBBcmFzaCBPc2hub3VkaSEnKTtcbn07XG5cbi8vIFdhdGVybWFya0NvbXAucHJvdG90eXBlLnNob3VsZERpc3BsYXlXYXRlcm1hcmsgPSBmdW5jdGlvbiAoKSB7XG4vLyAgIHJldHVybiBmYWxzZTtcbi8vIH1cblxuZXhwb3J0IGNsYXNzIEFYRGF0YUdyaWRDb2x1bW5zQ2hhbmdlRXZlbnQgZXh0ZW5kcyBBWFZhbHVlRXZlbnQ8QVhHcmlkRGF0YUNvbHVtbltdPiB7XG4gIGNvbXBvbmVudDogQVhEYXRhR3JpZENvbXBvbmVudDtcbn1cbmV4cG9ydCBjbGFzcyBBWERhdGFHcmlkQ2VsbEV2ZW50IGV4dGVuZHMgQVhEYXRhRXZlbnQ8QVhHcmlkQ2VsbEV2ZW50PiB7XG4gIGNvbXBvbmVudDogQVhEYXRhR3JpZENvbXBvbmVudDtcbn1cbmV4cG9ydCBjbGFzcyBBWERhYWdyaWRSb3dDbGlja0V2ZW50IGV4dGVuZHMgQVhEYXRhRXZlbnQ8QVhHcmlkUm93RXZlbnQ+IHtcbiAgY29tcG9uZW50OiBBWERhdGFHcmlkQ29tcG9uZW50O1xufVxuXG5leHBvcnQgY2xhc3MgQVhEYXRhR3JpZFNlbGVjdGlvbkNoYW5nZUV2ZW50IGV4dGVuZHMgQVhEYXRhRXZlbnQ8QVhHcmlkUm93U2VsZWN0aW9uRXZlbnQ+IHtcbiAgY29tcG9uZW50OiBBWERhdGFHcmlkQ29tcG9uZW50O1xufVxuXG5leHBvcnQgY2xhc3MgQVhEYXRhR3JpZFJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50IGV4dGVuZHMgQVhEYXRhRXZlbnQ8YW55PiB7XG4gIGNvbXBvbmVudDogQVhEYXRhR3JpZENvbXBvbmVudDtcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWRhdGEtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQVhEYXRhR3JpZENvbXBvbmVudCB7XG4gIHByaXZhdGUgZ3JpZEFwaTtcbiAgcHJpdmF0ZSBkYXRhU291cmNlU3VjY2Vzc0NhbGxiYWNrO1xuICBsb2NhbGVUZXh0OiBhbnk7XG5cbiAgZ3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zO1xuICBjb2x1bW5EZWZzOiBhbnlbXSA9IFtdO1xuICByb3dNb2RlbFR5cGUgPSAnY2xpZW50U2lkZSc7XG4gIGZ1bGxXaWR0aENlbGxSZW5kZXJlckZyYW1ld29yazogYW55O1xuICBmdWxsV2lkdGhDZWxsUmVuZGVyZXJQYXJhbXM6IGFueTtcbiAgZnJhbWV3b3JrQ29tcG9uZW50czogYW55ID0ge307XG4gIGlzRnVsbFdpZHRoQ2VsbDogRnVuY3Rpb247XG4gIGludGVybmFsSGVpZ2h0OiBzdHJpbmcgPSAnMTAwJSc7XG4gIGRldGFpbENlbGxSZW5kZXJlcjogYW55O1xuICBkZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXM6IGFueTtcbiAgZGV0YWlsUm93SGVpZ2h0OiBudW1iZXI7XG4gIG1hc3RlckRldGFpbDogYm9vbGVhbiA9IGZhbHNlO1xuICB0cmVlRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuICBlbmFiZWxTZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ3JpZFZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ3JvdXBTZWxlY3RzQ2hpbGRyZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgb2xkU2VsZWN0aW9uTm9kZXM6IGFueVtdID0gW107XG4gIHBhZ2luYXRpb25BdXRvUGFnZVNpemU6IGJvb2xlYW4gPSB0cnVlO1xuICBwYWdpbmF0aW9uUGFnZVNpemU6IG51bWJlciA9IDEwO1xuICAvLyBASW5wdXQoKVxuICAvLyBzaG93Um93TnVtYmVyOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcmVtb3RlT3BlcmF0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHJvd011bHRpU2VsZWN0V2l0aENsaWNrOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc3VwcHJlc3NSb3dDbGlja1NlbGVjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHN1cHByZXNzQ2VsbFNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaXplQ29sdW1uc1RvRml0OiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBzaG93Q2hlY2tCb3g6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIGZsb2F0aW5nRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgY2FjaGVCbG9ja1NpemUgPSAxMDBcblxuICAvLyBASW5wdXQoKVxuICAvLyB0YWtlQ291bnQ6IG51bWJlcjtcblxuICBhdXRvR3JvdXBDb2x1bW5EZWY6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpXG4gIHNlbGVjdGlvbk1vZGU6ICdzaW5nbGUnIHwgJ211bHRpcGxlJyA9ICdzaW5nbGUnO1xuXG4gIC8vIEBJbnB1dCgpXG4gIC8vIGFsbG93RmlsdGVyaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcGFnaW5hdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgc2VsZWN0Um93OiBhbnlbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHJvd0dyb3VwUGFuZWxTaG93OiAnYWx3YXlzJyB8ICduZXZlcicgPSAnbmV2ZXInO1xuXG4gIEBJbnB1dCgpXG4gIGxvYWRPbkluaXQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIEBJbnB1dCgpXG4gIC8vIGdyb3VwRGVmYXVsdEV4cGFuZGVkOiBudW1iZXIgPSAwO1xuXG4gIEBJbnB1dCgpXG4gIGtleUZpZWxkOiBzdHJpbmcgPSAnbnVsbCc7XG5cbiAgQElucHV0KClcbiAgaGFzQ2hpbGRGaWVsZDogc3RyaW5nID0gJ251bGwnO1xuXG4gIHByaXZhdGUgX3NlYXJjaFRleHQ6IHN0cmluZztcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBzZWFyY2hUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFRleHQ7XG4gIH1cbiAgcHVibGljIHNldCBzZWFyY2hUZXh0KHY6IHN0cmluZykge1xuICAgIGlmICh2ICE9PSB0aGlzLl9zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLl9zZWFyY2hUZXh0ID0gdjtcbiAgICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRRdWlja0ZpbHRlcih0aGlzLnNlYXJjaFRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpbHRlcjogYW55W107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZmlsdGVyKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyO1xuICB9XG4gIHB1YmxpYyBzZXQgZmlsdGVyKHY6IGFueVtdKSB7XG4gICAgaWYgKHYgIT09IHRoaXMuX2ZpbHRlcikge1xuICAgICAgdGhpcy5fZmlsdGVyID0gdjtcbiAgICAgIHRoaXMuX2ZpbHRlci5mb3JFYWNoKChmKSA9PiB7XG4gICAgICAgIGNvbnN0IGZjID0gdGhpcy5ncmlkQXBpLmdldEZpbHRlckluc3RhbmNlKGYuZmllbGQpO1xuICAgICAgICBpZiAoZmMpIHtcbiAgICAgICAgICBjb25zdCBmZiA9IGZjLmdldEZyYW1ld29ya0NvbXBvbmVudEluc3RhbmNlKCk7XG4gICAgICAgICAgZmYuc2V0TW9kZWwoZik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBDb250ZW50Q2hpbGRyZW4oQVhHcmlkRGF0YUNvbHVtbilcbiAgcHJpdmF0ZSBfaW5saW5lQ29sdW1uczogUXVlcnlMaXN0PEFYR3JpZERhdGFDb2x1bW4+O1xuXG4gIEBPdXRwdXQoKVxuICBjb2x1bW5zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENvbHVtbnNDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDb2x1bW5zQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSBfY29sdW1uczogQVhHcmlkRGF0YUNvbHVtbltdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBBWEdyaWREYXRhQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9pbmxpbmVDb2x1bW5zID8gWy4uLnRoaXMuX2NvbHVtbnMsIC4uLnRoaXMuX2lubGluZUNvbHVtbnMudG9BcnJheSgpXSA6IHRoaXMuX2NvbHVtbnM7XG4gIH1cblxuICBwdWJsaWMgc2V0IGNvbHVtbnModmFsOiBBWEdyaWREYXRhQ29sdW1uW10pIHtcbiAgICBpZiAodmFsICYmIHZhbC5sZW5ndGgpIHtcbiAgICAgIGxldCBvbGQgPSB0aGlzLl9jb2x1bW5zO1xuICAgICAgdGhpcy5fY29sdW1ucyA9IHZhbDtcbiAgICAgIHRoaXMuY29sdW1uc0NoYW5nZS5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCB2YWx1ZTogdmFsLCBvbGRWYWx1ZTogb2xkLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgICB9XG4gIH1cblxuICBkZWZhdWx0Q29sRGVmOiBhbnkgPSB7XG4gICAgZmlsdGVyOiB0cnVlLFxuICAgIGZsb2F0aW5nRmlsdGVyOiB0cnVlXG4gIH07XG5cbiAgQElucHV0KClcbiAgcm93SGVpZ2h0OiBhbnk7XG5cbiAgQENvbnRlbnRDaGlsZChBWFRvb2xiYXJTZWFyY2hDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHNlYXJjaElucHV0OiBBWFRvb2xiYXJTZWFyY2hDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZChBWFRvb2xiYXJDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHRvb2xiYXI6IEFYVG9vbGJhckNvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkKEFYRGF0YUdyaWRSb3dUZW1wbGF0ZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcm93VGVtcGxhdGU6IEFYRGF0YUdyaWRSb3dUZW1wbGF0ZUNvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkKEFYRGF0YUdyaWREZXRhaWxUZW1wbGF0ZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ3JpZERldGFpbFRlbXBsYXRlOiBBWERhdGFHcmlkRGV0YWlsVGVtcGxhdGVDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZChBWERhdGFTb3VyY2VDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgX2NvbnRlbnREYXRhU291cmNlOiBBWERhdGFTb3VyY2VDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfZGF0YVNvdXJjZTogQVhEYXRhU291cmNlQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZGF0YVNvdXJjZSgpOiBBWERhdGFTb3VyY2VDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlID8gdGhpcy5fZGF0YVNvdXJjZSA6IHRoaXMuX2NvbnRlbnREYXRhU291cmNlO1xuICB9XG5cbiAgcHVibGljIHNldCBkYXRhU291cmNlKHY6IEFYRGF0YVNvdXJjZUNvbXBvbmVudCkge1xuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB2O1xuICB9XG5cbiAgQElucHV0KClcbiAgZ3JvdXBIaWRlT3BlblBhcmVudHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KClcbiAgY2VsbENsaWNrOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDZWxsRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGNlbGxEYkNsaWNrOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDZWxsRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGNlbGxGb2N1c2U6IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkQ2VsbEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxBWERhYWdyaWRSb3dDbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhEYWFncmlkUm93Q2xpY2tFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgcm93RGJDbGljazogRXZlbnRFbWl0dGVyPEFYRGFhZ3JpZFJvd0NsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWERhYWdyaWRSb3dDbGlja0V2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBzZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZFNlbGVjdGlvbkNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZFNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICByb3dTZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uUm93U2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudD4oKTtcblxuICBnZXRSb3dIZWlnaHQocGFyYW0pIHtcbiAgICBpZiAocGFyYW0uZGF0YSAmJiBwYXJhbS5kYXRhLnJvd0hlaWdodCAmJiBwYXJhbS5ub2RlLmxldmVsID09IDApIHtcbiAgICAgIHJldHVybiBwYXJhbS5kYXRhLnJvd0hlaWdodDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWFzdGVyRGV0YWlsID09IHRydWUgJiYgcGFyYW0ubm9kZS5sZXZlbCA9PSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXRhaWxSb3dIZWlnaHQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1hc3RlckRldGFpbCA9PSBmYWxzZSAmJiBwYXJhbS5kYXRhICYmIHBhcmFtLmRhdGEucm93SGVpZ2h0KSB7XG4gICAgICByZXR1cm4gcGFyYW0uZGF0YS5yb3dIZWlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHJvd0NsYXNzPzogKHBhcmFtczogQVhHcmlkUm93UGFyYW1zKSA9PiAoc3RyaW5nIHwgc3RyaW5nW10pIHwgKHN0cmluZyB8IHN0cmluZ1tdKTtcblxuICBASW5wdXQoKVxuICBydGw6IGJvb2xlYW4gPSBBWENvbmZpZy5nZXQoJ2xheW91dC5ydGwnKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5sb2NhbGVUZXh0ID0gQVhUcmFuc2xhdG9yLmdldCgnZGF0YUdyaWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0hlaWdodCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50b29sYmFyKSB7XG4gICAgICB0aGlzLmludGVybmFsSGVpZ2h0ID0gYGNhbGMoMTAwJSAtICR7NDB9cHgpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnRlcm5hbEhlaWdodCA9ICcxMDAlJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBpbnRlbmFsR3JpZERhdGFTb3VyY2UoKSB7XG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvd0NvdW50OiBudWxsLFxuICAgICAgZ2V0Um93czogKHBhcmFtcykgPT4ge1xuICAgICAgICAvLyB0aGF0LmdyaWRBcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLnNldFByb3BlcnR5KCdjYWNoZUJsb2NrU2l6ZScsIHRoaXMudGFrZUNvdW50ID8gdGhpcy50YWtlQ291bnQgOiBwYXJhbXMuYXBpLnBhZ2luYXRpb25HZXRQYWdlU2l6ZSgpKTtcbiAgICAgICAgdGhhdC5kYXRhU291cmNlU3VjY2Vzc0NhbGxiYWNrID0gcGFyYW1zLnN1Y2Nlc3NDYWxsYmFjaztcbiAgICAgICAgY29uc3QgbG9hZFBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xuICAgICAgICBsb2FkUGFyYW1zLnNlYXJjaFRleHQgPSB0aGF0LnNlYXJjaFRleHQ7XG4gICAgICAgIGxvYWRQYXJhbXMuc2tpcCA9IHBhcmFtcy5yZXF1ZXN0LnN0YXJ0Um93O1xuICAgICAgICAvLyAgbG9hZFBhcmFtcy50YWtlID0gcGFyYW1zLnJlcXVlc3QuZW5kUm93IC0gcGFyYW1zLnJlcXVlc3Quc3RhcnRSb3c7XG4gICAgICAgIC8vLy8gIGxvYWRQYXJhbXMudGFrZSA9IHRoYXQudGFrZUNvdW50ID8gdGhhdC50YWtlQ291bnQgOiBwYXJhbXMuYXBpLnBhZ2luYXRpb25HZXRQYWdlU2l6ZSgpICogMjtcblxuICAgICAgICBsb2FkUGFyYW1zLnRha2UgPSBwYXJhbXMucmVxdWVzdC5lbmRSb3cgLSBwYXJhbXMucmVxdWVzdC5zdGFydFJvdztcblxuICAgICAgICBsb2FkUGFyYW1zLnNvcnQgPSBwYXJhbXMucmVxdWVzdC5zb3J0TW9kZWwubWFwKChjKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpZWxkOiBjLmNvbElkLFxuICAgICAgICAgICAgZGlyOiBjLnNvcnRcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gbG9hZFBhcmFtcy5ncm91cHMgPSBwYXJhbXMucmVxdWVzdC5yb3dHcm91cENvbHMubWFwKHIgPT4gci5maWVsZCk7XG4gICAgICAgIC8vIGxvYWRQYXJhbXMuZ3JvdXBLZXlzID0gcGFyYW1zLnJlcXVlc3QuZ3JvdXBLZXlzO1xuICAgICAgICAvLyBsb2FkUGFyYW1zLmRhdGEgPSBwYXJhbXMucGFyZW50Tm9kZS5kYXRhO1xuICAgICAgICBsb2FkUGFyYW1zLmdyb3VwID0ge1xuICAgICAgICAgIGZpZWxkczogcGFyYW1zLnJlcXVlc3Qucm93R3JvdXBDb2xzLm1hcCgocikgPT4gci5maWVsZCksXG4gICAgICAgICAga2V5czogcGFyYW1zLnJlcXVlc3QuZ3JvdXBLZXlzLFxuICAgICAgICAgIHBhcmVudERhdGE6IHBhcmFtcy5wYXJlbnROb2RlLmRhdGFcbiAgICAgICAgfTtcbiAgICAgICAgbG9hZFBhcmFtcy5maWx0ZXIgPSBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbDtcbiAgICAgICAgLy8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGF0LmRhdGFTb3VyY2UuZmV0Y2gobG9hZFBhcmFtcyk7XG4gICAgICAgIC8vIH0sIDUwMDApO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZ2V0TWFpbk1lbnVJdGVtcyhlKSB7XG4gICAgcmV0dXJuIFsncGluU3ViTWVudScsICdzZXBhcmF0b3InXTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZ3JpZEFwaS5kZXN0cm95KCk7XG4gIH1cblxuICBpc1NlcnZlclNpZGVHcm91cCA9IChlKSA9PiB7XG4gICAgcmV0dXJuIGVbdGhpcy5oYXNDaGlsZEZpZWxkXTtcbiAgfTtcblxuICBnZXRDb2x1bW5EZWZzID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmdyaWRBcGkuZ2V0Q29sdW1uRGVmcygpO1xuICB9O1xuXG4gIGdldEN1cnJlbnRQYWdlTnVtYmVyID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50OiB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldEN1cnJlbnRQYWdlKCkgKyAxLFxuICAgICAgdG90YWw6IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0VG90YWxQYWdlcygpXG4gICAgfTtcbiAgfTtcblxuICBwYWdpbmF0aW9uR29Ub1BhZ2UobnVtYmVyKSB7XG4gICAgdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25Hb1RvUGFnZShudW1iZXIgLSAxKTtcbiAgfVxuXG4gIGdldFNlcnZlclNpZGVHcm91cEtleSA9IChlKSA9PiB7XG4gICAgcmV0dXJuIGVbdGhpcy5rZXlGaWVsZF07XG4gIH07XG4gIC8vIHRvZG8gZ3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zXG4gIGludGVybmFsR3JpZFJlYWR5KGdyaWRPcHRpb25zKSB7XG4gICAgLy8vLyAgZ3JpZE9wdGlvbnMuYXBpLmNoZWNrR3JpZFNpemUoKTtcbiAgICAvLy8vIHRoaXMudGFrZUNvdW50ID0gdGhpcy50YWtlQ291bnQgPyB0aGlzLnRha2VDb3VudCA6IGdyaWRPcHRpb25zLmFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKSAqIDI7XG4gICAgLy8gIHRoaXMudGFrZUNvdW50ID0gdGhpcy50YWtlQ291bnQgPCAyMCA/IDIwIDogdGhpcy50YWtlQ291bnQ7XG4gICAgLy8vLyBncmlkT3B0aW9ucy5hcGkuZ3JpZE9wdGlvbnNXcmFwcGVyLnNldFByb3BlcnR5KCdjYWNoZUJsb2NrU2l6ZScsIHRoaXMudGFrZUNvdW50KTtcblxuICAgIHRoaXMuZ3JpZEFwaSA9IGdyaWRPcHRpb25zLmFwaTtcblxuICAgIHRoaXMubWFwQ29sdW1ucygpO1xuICAgIHRoaXMuY2FsY0hlaWdodCgpO1xuXG4gICAgaWYgKCF0aGlzLmxvYWRPbkluaXQpIHtcbiAgICAgIHRoaXMubG9hZE9uSW5pdCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XG4gICAgICB0aGlzLmdyaWRBcGkuc2V0U2VydmVyU2lkZURhdGFzb3VyY2UodGhpcy5pbnRlbmFsR3JpZERhdGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCB0aGF0ID0gdGhpcztcbiAgICBpZiAodGhpcy5yb3dUZW1wbGF0ZSkge1xuICAgICAgdGhpcy5mdWxsV2lkdGhDZWxsUmVuZGVyZXJGcmFtZXdvcmsgPSB0aGlzLnJvd1RlbXBsYXRlLnJlbmRlcmVyO1xuICAgICAgdGhpcy5mdWxsV2lkdGhDZWxsUmVuZGVyZXJQYXJhbXMgPSB0aGlzLnJvd1RlbXBsYXRlLnBhcmFtcztcbiAgICB9XG4gICAgdGhpcy5mcmFtZXdvcmtDb21wb25lbnRzLmFnRGF0ZUlucHV0ID0gQVhEYXRlUGlja2VyRmlsdGVyQ29tcG9uZW50O1xuXG4gICAgaWYgKHRoaXMuZ3JpZERldGFpbFRlbXBsYXRlKSB7XG4gICAgICB0aGlzLm1hc3RlckRldGFpbCA9IHRydWU7XG4gICAgICB0aGlzLmRldGFpbENlbGxSZW5kZXJlclBhcmFtcyA9IHRoaXMuZ3JpZERldGFpbFRlbXBsYXRlLnBhcmFtcztcbiAgICAgIHRoaXMuZGV0YWlsQ2VsbFJlbmRlcmVyID0gJ2RldGFpbFJlbmRlcmVyRnJhbWV3b3JrJztcbiAgICAgIHRoaXMuZnJhbWV3b3JrQ29tcG9uZW50cy5kZXRhaWxSZW5kZXJlckZyYW1ld29yayA9IHRoaXMuZ3JpZERldGFpbFRlbXBsYXRlLnJlbmRlcmVyO1xuXG4gICAgICB0aGlzLmRldGFpbFJvd0hlaWdodCA9IHRoaXMuZ3JpZERldGFpbFRlbXBsYXRlLmhlaWdodDtcbiAgICB9XG4gICAgdGhpcy5pc0Z1bGxXaWR0aENlbGwgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhhdC5yb3dUZW1wbGF0ZSAhPSBudWxsO1xuICAgIH07XG4gICAgLy90aGlzLmNkclxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gaWYgKHRoaXMudGFrZUNvdW50ICYmIHRoaXMudGFrZUNvdW50ID4gMCkge1xuICAgIC8vICAgdGhpcy5wYWdpbmF0aW9uUGFnZVNpemUgPSB0aGlzLnRha2VDb3VudDtcbiAgICAvLyAgIHRoaXMucGFnaW5hdGlvbkF1dG9QYWdlU2l6ZSA9IGZhbHNlO1xuICAgIC8vICAgdGhpcy5jYWNoZUJsb2NrU2l6ZSA9IHRoaXMudGFrZUNvdW50O1xuICAgIC8vIH1cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgdGhpcy5ncm91cFNlbGVjdHNDaGlsZHJlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5rZXlGaWVsZCAhPT0gJ251bGwnICYmIHRoaXMuaGFzQ2hpbGRGaWVsZCAhPT0gJ251bGwnKSB7XG4gICAgICB0aGlzLnJvd0dyb3VwUGFuZWxTaG93ID0gJ25ldmVyJztcbiAgICAgIHRoaXMudHJlZURhdGEgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcbiAgICAgIHRoaXMucm93TW9kZWxUeXBlID0gJ3NlcnZlclNpZGUnO1xuICAgIH1cbiAgICAvL1xuICAgIGlmICh0aGlzLnJ0bCA9PSBudWxsKSB7XG4gICAgICB0aGlzLnJ0bCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2RpcmVjdGlvbicpID09PSAncnRsJztcbiAgICB9XG4gICAgLy9cbiAgfVxuXG4gIGdyaWRTZWxlY3RSb3coKSB7XG4gICAgaWYgKHRoaXMuZ3JpZEFwaSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0Um93ICYmIHRoaXMuc2VsZWN0Um93Lmxlbmd0aCA+IDAgJiYgdGhpcy5ncmlkQXBpICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHRoaXMuc2VsZWN0Um93WzBdICE9ICdvYmplY3QnKSB7XG4gICAgICAgIHRoaXMuZ3JpZEFwaS5mb3JFYWNoTm9kZSgobm9kZSkgPT4ge1xuICAgICAgICAgIGlmIChub2RlLmRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3cuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG5vZGUuZGF0YVt0aGlzLmtleUZpZWxkXSA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG5vZGUuc2V0U2VsZWN0ZWQoc2VsZWN0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ3JpZEFwaS5mb3JFYWNoTm9kZSgobm9kZSkgPT4ge1xuICAgICAgICAgIGlmIChub2RlLmRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3cuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXRlbS5yb3dJbmRleCAhPSB1bmRlZmluZWQgJiYgaXRlbS5yb3dMZXZlbCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5kYXRhW3RoaXMua2V5RmllbGRdID09PSBpdGVtLmRhdGFbdGhpcy5rZXlGaWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmRhdGFbdGhpcy5rZXlGaWVsZF0gPT09IGl0ZW1bdGhpcy5rZXlGaWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5vZGUuc2V0U2VsZWN0ZWQoc2VsZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcblxuICAvLyAgIC8vQ2FsbGVkIGFmdGVyIGV2ZXJ5IGNoZWNrIG9mIHRoZSBjb21wb25lbnQncyB2aWV3LiBBcHBsaWVzIHRvIGNvbXBvbmVudHMgb25seS5cbiAgLy8gICAvL0FkZCAnaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkJyB0byB0aGUgY2xhc3MuXG4gIC8vICAgLy8gdGhpcy5zZWxlY3RCeVZhbHVlcygpO1xuICAvLyAgIHRoaXMuZW5hYmVsU2VsZWN0ID0gZmFsc2U7XG5cbiAgLy8gfVxuICByZWJ1aWxkR3JpZCgpIHtcbiAgICB0aGlzLm1hcENvbHVtbnMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNpemVDb2x1bW5zVG9GaXQpIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcbiAgICAgIH1cbiAgICB9LCAxMCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHJlZURhdGEgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY29sdW1uRGVmcyA9IHRoaXMuY29sdW1ucy5tYXAoKGMpID0+IGMucmVuZGVyKCkpO1xuXG4gICAgICBjb25zdCBncm91cENvbHVtbiA9IHRoaXMuY29sdW1uRGVmcy5maW5kKChjKSA9PiBjLnJvd0dyb3VwSW5kZXggPT0gJzAnICYmIGMuZmllbGQgIT09ICcnKTtcblxuICAgICAgdGhpcy5hdXRvR3JvdXBDb2x1bW5EZWYgPSB7XG4gICAgICAgIGhlYWRlck5hbWU6IGdyb3VwQ29sdW1uLmhlYWRlck5hbWUsXG4gICAgICAgIHdpZHRoOiBncm91cENvbHVtbi53aWR0aCxcbiAgICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7IGNoZWNrYm94OiB0aGlzLnNob3dDaGVja0JveCB9LFxuICAgICAgICBmaWVsZDogZ3JvdXBDb2x1bW4uZmllbGRcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY29sdW1uRGVmcy5mb3JFYWNoKChlbG0pID0+IHtcbiAgICAgICAgaWYgKGVsbS5yb3dHcm91cEluZGV4ID4gLTEpIHtcbiAgICAgICAgICBlbG0uaGlkZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICAvL3NldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRoaXMuZ3JpZFZpZXcgPSB0cnVlO1xuICAgIC8vfSk7XG5cbiAgICB0aGlzLmVuYWJlbFNlbGVjdCA9IHRydWU7XG4gICAgdGhpcy5kYXRhU291cmNlLm9uRGF0YVJlY2VpdmVkLnN1YnNjcmliZSgoX2RhdGEpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IF9kYXRhLmRhdGEucmVzdWx0O1xuICAgICAgdGhpcy5oaWRlTG9hZGluZygpO1xuICAgICAgbGV0IGl0ZW1zOiBhbnlbXTtcbiAgICAgIGxldCB0b3RhbENvdW50OiBudW1iZXI7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgIGl0ZW1zID0gcmVzdWx0O1xuICAgICAgICB0b3RhbENvdW50ID0gcmVzdWx0Lmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1zID0gcmVzdWx0Lml0ZW1zO1xuICAgICAgICB0b3RhbENvdW50ID0gcmVzdWx0LnRvdGFsQ291bnQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kYXRhU291cmNlU3VjY2Vzc0NhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5sb2FkT25Jbml0KSB7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlU3VjY2Vzc0NhbGxiYWNrKFtdLCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VTdWNjZXNzQ2FsbGJhY2soaXRlbXMsIHRvdGFsQ291bnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMubG9hZE9uSW5pdCAmJiB0aGlzLmdyaWRBcGkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRSb3dEYXRhKFtdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdyaWRBcGkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRSb3dEYXRhKGl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmdyaWRTZWxlY3RSb3coKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGF0YVNvdXJjZS5vbkZldGNoU3RhcnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0xvYWRpbmcoKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnNlYXJjaElucHV0KSB7XG4gICAgICB0aGlzLnNlYXJjaElucHV0Lm9uVmFsdWVDaGFuZ2VkLnN1YnNjcmliZSgoYykgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBjLnZhbHVlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbWFwQ29sdW1ucygpIHtcbiAgICB0aGlzLmNvbHVtbkRlZnMgPSB0aGlzLmNvbHVtbnMubWFwKChjKSA9PiBjLnJlbmRlcigpKTtcblxuICAgIC8vIGlmICh0aGlzLnNob3dSb3dOdW1iZXIpIHtcbiAgICAvLyAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAvLyAgICAgaGVhZGVyTmFtZTogQVhDb25maWcuZ2V0KCdsYXlvdXQucnRsJykgPyAn2LHYr9uM2YEnIDogJ1JvdycsXG4gICAgLy8gICAgIHZhbHVlR2V0dGVyOiAnbm9kZS5yb3dJbmRleCArIDEnLFxuICAgIC8vICAgICBwaW5uZWQ6IEFYQ29uZmlnLmdldCgnbGF5b3V0LnJ0bCcpID8gJ3JpZ2h0JyA6ICdsZWZ0J1xuICAgIC8vICAgfSk7XG4gICAgLy8gfVxuXG4gICAgaWYgKHRoaXMuZ3JpZERldGFpbFRlbXBsYXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5EZWZzWzBdLmNoZWNrYm94U2VsZWN0aW9uID09PSB0cnVlICYmIHRoaXMuY29sdW1uRGVmc1swXS5maWVsZCA9PT0gJycpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5EZWZzWzFdLmNlbGxSZW5kZXJlciA9ICdhZ0dyb3VwQ2VsbFJlbmRlcmVyJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29sdW1uRGVmc1swXS5jZWxsUmVuZGVyZXIgPSAnYWdHcm91cENlbGxSZW5kZXJlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzQ2hpbGRGaWVsZCA9PT0gJ251bGwnKSB7XG4gICAgICBjb25zdCBncm91cENvbHVtbiA9IHRoaXMuY29sdW1uRGVmcy5maW5kKChjKSA9PiBjLnJvd0dyb3VwSW5kZXggPT09IHVuZGVmaW5lZCAmJiBjLmZpZWxkICE9PSAnJyk7XG4gICAgICBpZiAoZ3JvdXBDb2x1bW4gJiYgdGhpcy5ncm91cEhpZGVPcGVuUGFyZW50cyA9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICAgICAgICBoZWFkZXJOYW1lOiBncm91cENvbHVtbi5oZWFkZXJOYW1lLFxuICAgICAgICAgIHdpZHRoOiBncm91cENvbHVtbi53aWR0aCxcbiAgICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHsgY2hlY2tib3g6IHRoaXMuc2hvd0NoZWNrQm94IH0sXG4gICAgICAgICAgZmllbGQ6IGdyb3VwQ29sdW1uLmZpZWxkXG4gICAgICAgIH07XG4gICAgICAgIC8vICBncm91cENvbHVtbi5oaWRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNvbHVtbkRlZnMuZm9yRWFjaCgoZWxtKSA9PiB7XG4gICAgICBpZiAoZWxtLnJvd0dyb3VwSW5kZXggPiAtMSkge1xuICAgICAgICBlbG0uaGlkZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBkaXNwbGF5ZWRDb2x1bW5zQ2hhbmdlZChlKSB7XG4gICAgaWYgKHRoaXMuaGFzQ2hpbGRGaWVsZCA9PT0gJ251bGwnKSB7XG4gICAgICBjb25zdCBlZSA9IGUuY29sdW1uQXBpLmdldEFsbERpc3BsYXllZENvbHVtbkdyb3VwcygpO1xuICAgICAgY29uc3QgZWVlID0gZWUuZmluZCgoYykgPT4gYy5jb2xJZCAhPT0gJ2FnLUdyaWQtQXV0b0NvbHVtbicgJiYgYy5jb2xJZCAhPT0gJzAnKTtcbiAgICAgIGlmIChlZWUgJiYgZWVlLmNvbElkKSB7XG4gICAgICAgIHRoaXMuYXV0b0dyb3VwQ29sdW1uRGVmID0ge1xuICAgICAgICAgIGhlYWRlck5hbWU6IGVlZS5jb2xEZWYuaGVhZGVyTmFtZSxcbiAgICAgICAgICB3aWR0aDogZWVlLmNvbERlZi53aWR0aCxcbiAgICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHsgY2hlY2tib3g6IHRoaXMuc2hvd0NoZWNrQm94IH0sXG4gICAgICAgICAgZmllbGQ6IGVlZS5jb2xEZWYuZmllbGRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIGVlZS5oaWRlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZWZyZXNoKHJvdXRlOiBhbnlbXSA9IFtdKSB7XG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMuZ3JpZEFwaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAgdGhpcy5ncmlkQXBpLnB1cmdlU2VydmVyU2lkZUNhY2hlKHJvdXRlKTtcbiAgICAgIHRoaXMuZ3JpZEFwaS5zZXRTZXJ2ZXJTaWRlRGF0YXNvdXJjZSh0aGlzLmludGVuYWxHcmlkRGF0YVNvdXJjZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE8gOiBjaGVjayBmZXRjaCBwYXJhbVxuICAgICAgdGhpcy5kYXRhU291cmNlLmZldGNoKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGludGVybmFsR3JpZENlbGxDbGlja2VkKGU6IENlbGxDbGlja2VkRXZlbnQpIHtcbiAgICB0aGlzLmNlbGxDbGljay5lbWl0KHsgZGF0YTogdGhpcy5tYXBDZWxsRXZlbnQoZSksIGNvbXBvbmVudDogdGhpcywgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQgfSk7XG4gIH1cblxuICBpbnRlcm5hbEdyaWRDZWxsRG91YmxlQ2xpY2tlZChlOiBDZWxsQ2xpY2tlZEV2ZW50KSB7XG4gICAgdGhpcy5jZWxsRGJDbGljay5lbWl0KHsgZGF0YTogdGhpcy5tYXBDZWxsRXZlbnQoZSksIGNvbXBvbmVudDogdGhpcywgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQgfSk7XG4gIH1cblxuICBpbnRlcm5hbEdyaWRDZWxsRm9jdXNlZChlOiBDZWxsQ2xpY2tlZEV2ZW50KSB7XG4gICAgdGhpcy5jZWxsRm9jdXNlLmVtaXQoeyBkYXRhOiB0aGlzLm1hcENlbGxFdmVudChlKSwgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsIGNvbXBvbmVudDogdGhpcyB9KTtcbiAgfVxuXG4gIGludGVybmFsR3JpZFJvd0NsaWNrZWQoZTogUm93Q2xpY2tlZEV2ZW50KSB7XG4gICAgaWYgKCFlLm5vZGUuZ3JvdXApIHtcbiAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh7IGRhdGE6IHRoaXMubWFwUm93RXZlbnQoZSksIGNvbXBvbmVudDogdGhpcywgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQgfSk7XG4gICAgfVxuICB9XG5cbiAgaW50ZXJuYWxHcmlkUm93RG91YmxlQ2xpY2tlZChlOiBDZWxsQ2xpY2tlZEV2ZW50KSB7XG4gICAgaWYgKCFlLm5vZGUuZ3JvdXApIHtcbiAgICAgIHRoaXMucm93RGJDbGljay5lbWl0KHsgZGF0YTogdGhpcy5tYXBSb3dFdmVudChlKSwgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsIGNvbXBvbmVudDogdGhpcyB9KTtcbiAgICB9XG4gIH1cblxuICBkaWZmZXJlbmNlT2YyQXJyYXlzKGFycmF5MTogYW55LCBhcnJheTI6IGFueSkge1xuICAgIGNvbnN0IHRlbXAgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGkgaW4gYXJyYXkxKSB7XG4gICAgICBpZiAoYXJyYXkyLmluZGV4T2YoYXJyYXkxW2ldKSA9PT0gLTEpIHtcbiAgICAgICAgdGVtcC5wdXNoKGFycmF5MVtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgaSBpbiBhcnJheTIpIHtcbiAgICAgIGlmIChhcnJheTEuaW5kZXhPZihhcnJheTJbaV0pID09PSAtMSkge1xuICAgICAgICB0ZW1wLnB1c2goYXJyYXkyW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRlbXAuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICB9XG5cbiAgcm93U2VsZWN0aW9uQ2hhbmdlZChlKSB7XG4gICAgLy8gdGhpcy5ncmlkQXBpLmZvckVhY2hOb2RlKChub2RlKSA9PiB7XG4gICAgLy8gICBpZiAobm9kZS5kYXRhW3RoaXMua2V5RmllbGRdID09IGUubm9kZS5kYXRhW3RoaXMua2V5RmllbGRdKSB7XG4gICAgLy8gICAgIG5vZGUuc2V0U2VsZWN0ZWQoZS5ub2RlLnNlbGVjdGVkKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9KTtcbiAgICBpZiAoZS5ub2RlLnNlbGVjdGVkID09IHRydWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0Um93ID0gdGhpcy5zZWxlY3RSb3cuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9IGUuZGF0YVt0aGlzLmtleUZpZWxkXSk7XG4gICAgICB0aGlzLnNlbGVjdFJvdy5wdXNoKGUuZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0Um93ID0gdGhpcy5zZWxlY3RSb3cuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9IGUuZGF0YVt0aGlzLmtleUZpZWxkXSk7XG4gICAgfVxuICAgIHRoaXMucm93U2VsZWN0aW9uQ2hhbmdlLmVtaXQoeyBjb21wb25lbnQ6IHRoaXMsIGRhdGE6IGUsIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50IH0pO1xuICB9XG5cbiAgaW50ZXJuYWxHcmlkU2VsZWN0aW9uQ2hhbmdlZChlKSB7XG4gICAgY29uc3QgYXJnczogQVhHcmlkUm93U2VsZWN0aW9uRXZlbnQgPSB7IGl0ZW1zOiBbXSB9O1xuICAgIGNvbnN0IG9sZE5vZGVzID0gdGhpcy5vbGRTZWxlY3Rpb25Ob2RlcztcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XG4gICAgbm9kZXMuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgYXJncy5pdGVtcy5wdXNoKHtcbiAgICAgICAgcm93TGV2ZWw6IGkubGV2ZWwsXG4gICAgICAgIHJvd0luZGV4OiBpLnJvd0luZGV4LFxuICAgICAgICBkYXRhOiBpLmRhdGFcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHsgZGF0YTogYXJncywgY29tcG9uZW50OiB0aGlzLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgICBsZXQgYWN0aW9uID0gbm9kZXMubGVuZ3RoID4gb2xkTm9kZXMubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmRpZmZlcmVuY2VPZjJBcnJheXMobm9kZXMsIG9sZE5vZGVzKTtcbiAgICB0aGlzLm9uUm93U2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBzZWxlY3RlZDogYWN0aW9uLCBkYXRhOiBub2RlLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgICB0aGlzLm9sZFNlbGVjdGlvbk5vZGVzID0gbm9kZXM7XG4gIH1cblxuICBwcml2YXRlIG1hcENlbGxFdmVudChlOiBDZWxsRXZlbnQpOiBBWEdyaWRDZWxsRXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICByb3dMZXZlbDogMCxcbiAgICAgIGNvbHVtbjogZS5jb2x1bW4sXG4gICAgICBkYXRhOiBlLmRhdGEsXG4gICAgICByb3dJbmRleDogZS5yb3dJbmRleCxcbiAgICAgIHZhbHVlOiBlLnZhbHVlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwUm93RXZlbnQoZTogUm93RXZlbnQpOiBBWEdyaWRSb3dFdmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvd0xldmVsOiAwLFxuICAgICAgZGF0YTogZS5kYXRhLFxuICAgICAgcm93SW5kZXg6IGUucm93SW5kZXhcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGRlc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuZ3JpZEFwaS5kZXNlbGVjdEFsbCgpO1xuICB9XG5cblxuICBwdWJsaWMgZGVzZWxlY3RCeUtleUZpZWxkKGtleUZpZWxkKSB7XG5cbiAgICB0aGlzLmdyaWRBcGkuZm9yRWFjaE5vZGUoKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLmRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgIGlmIChub2RlLmRhdGFbdGhpcy5rZXlGaWVsZF0gPT09IGtleUZpZWxkKSB7XG4gICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZChzZWxlY3QpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0Um93ID0gdGhpcy5zZWxlY3RSb3cuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9IGtleUZpZWxkKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgfVxuXG4gIGludGVybmFsR2V0Um93Q2xhc3MgPSAocDogYW55KSA9PiB7XG4gICAgaWYgKHRoaXMucm93Q2xhc3MpIHtcbiAgICAgIGlmICh0aGlzLnJvd0NsYXNzIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93Q2xhc3Moe1xuICAgICAgICAgIHJvd0luZGV4OiBwLm5vZGUucm93SW5kZXgsXG4gICAgICAgICAgcm93TGV2ZWw6IHAubm9kZS5sZXZlbCxcbiAgICAgICAgICBkYXRhOiBwLmRhdGFcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dDbGFzcztcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgc2hvd0xvYWRpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZ3JpZEFwaSkge1xuICAgICAgdGhpcy5ncmlkQXBpLnNob3dMb2FkaW5nT3ZlcmxheSgpO1xuICAgIH1cbiAgfVxuXG4gIGhpZGVMb2FkaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcbiAgICAgIHRoaXMuZ3JpZEFwaS5oaWRlT3ZlcmxheSgpO1xuICAgIH1cbiAgfVxuXG4gIGludGVybmFsR3JpZFNpemVDaGFuZ2VkKGU6IEdyaWRTaXplQ2hhbmdlZEV2ZW50KSB7XG4gICAgaWYgKGUuY2xpZW50V2lkdGggPiAwICYmIGUuY2xpZW50SGVpZ2h0ID4gMCkge1xuICAgICAgdGhpcy5wZXJmb3JtU2l6ZUNvbHVtbnNUb0ZpdChlLmFwaSk7XG4gICAgfVxuICAgIC8vICB0aGlzLnJlZnJlc2goKTtcbiAgICAvLyAgdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25Hb1RvRmlyc3RQYWdlKCk7XG4gIH1cblxuICBpbnRlcm5hbEdyaWRGaXJzdERhdGFSZW5kZXJlZChlOiBGaXJzdERhdGFSZW5kZXJlZEV2ZW50KSB7XG4gICAgdGhpcy5wZXJmb3JtU2l6ZUNvbHVtbnNUb0ZpdChlLmFwaSk7XG4gIH1cblxuICBwcml2YXRlIHBlcmZvcm1TaXplQ29sdW1uc1RvRml0KGFwaTogR3JpZEFwaSkge1xuICAgIGlmICh0aGlzLnNpemVDb2x1bW5zVG9GaXQpIHtcbiAgICAgIGFwaS5zaXplQ29sdW1uc1RvRml0KCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtZ3JpZC10b29sYmFyXCIgKm5nSWY9XCJ0b29sYmFyXCI+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImF4LXRvb2xiYXJcIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbjwhLS0gW2VuYWJsZVNvcnRpbmddPVwidHJ1ZVwiICBbZW5hYmxlQ29sUmVzaXplXT1cInRydWVcIiBbZW5hYmxlRmlsdGVyXT1cImFsbG93RmlsdGVyaW5nXCIgIC0tPlxuPGFnLWdyaWQtYW5ndWxhciAqbmdJZj1cImdyaWRWaWV3XCIgY2xhc3M9XCJhZy10aGVtZS1iYWxoYW1cIiBbZ2V0Um93Q2xhc3NdPVwiaW50ZXJuYWxHZXRSb3dDbGFzc1wiXG4gIFtzdHlsZS5oZWlnaHRdPVwiaW50ZXJuYWxIZWlnaHRcIiBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCIgW2VuYWJsZVJ0bF09XCJydGxcIiBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgW3Jvd0dyb3VwUGFuZWxTaG93XT1cInJvd0dyb3VwUGFuZWxTaG93XCIgW3Jvd01vZGVsVHlwZV09XCJyb3dNb2RlbFR5cGVcIiBbZGV0YWlsUm93SGVpZ2h0XT1cImRldGFpbFJvd0hlaWdodFwiXG4gIFtnZXRSb3dIZWlnaHRdPVwiZ2V0Um93SGVpZ2h0XCIgW3BhZ2luYXRpb25BdXRvUGFnZVNpemVdPVwicGFnaW5hdGlvbkF1dG9QYWdlU2l6ZVwiXG4gIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvblBhZ2VTaXplXCIgW3N1cHByZXNzTWVudUhpZGVdPVwidHJ1ZVwiIFtmcmFtZXdvcmtDb21wb25lbnRzXT1cImZyYW1ld29ya0NvbXBvbmVudHNcIlxuICBbaXNGdWxsV2lkdGhDZWxsXT1cImlzRnVsbFdpZHRoQ2VsbFwiIFtyb3dTZWxlY3Rpb25dPVwic2VsZWN0aW9uTW9kZVwiIFtyb3dNdWx0aVNlbGVjdFdpdGhDbGlja109XCJyb3dNdWx0aVNlbGVjdFdpdGhDbGlja1wiXG4gIFtmdWxsV2lkdGhDZWxsUmVuZGVyZXJGcmFtZXdvcmtdPVwiZnVsbFdpZHRoQ2VsbFJlbmRlcmVyRnJhbWV3b3JrXCIgW2NhY2hlQmxvY2tTaXplXT1cImNhY2hlQmxvY2tTaXplXCJcbiAgW2Z1bGxXaWR0aENlbGxSZW5kZXJlclBhcmFtc109XCJmdWxsV2lkdGhDZWxsUmVuZGVyZXJQYXJhbXNcIiAoY2VsbENsaWNrZWQpPVwiaW50ZXJuYWxHcmlkQ2VsbENsaWNrZWQoJGV2ZW50KVwiXG4gIChjZWxsRG91YmxlQ2xpY2tlZCk9XCJpbnRlcm5hbEdyaWRDZWxsRG91YmxlQ2xpY2tlZCgkZXZlbnQpXCIgKGNlbGxGb2N1c2VkKT1cImludGVybmFsR3JpZENlbGxGb2N1c2VkKCRldmVudClcIlxuICAocm93Q2xpY2tlZCk9XCJpbnRlcm5hbEdyaWRSb3dDbGlja2VkKCRldmVudClcIiAoc2VsZWN0aW9uQ2hhbmdlZCk9XCJpbnRlcm5hbEdyaWRTZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAocm93U2VsZWN0ZWQpPVwicm93U2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCIgKHJvd0RvdWJsZUNsaWNrZWQpPVwiaW50ZXJuYWxHcmlkUm93RG91YmxlQ2xpY2tlZCgkZXZlbnQpXCJcbiAgKGdyaWRSZWFkeSk9XCJpbnRlcm5hbEdyaWRSZWFkeSgkZXZlbnQpXCIgW2dyb3VwU2VsZWN0c0NoaWxkcmVuXT1cImdyb3VwU2VsZWN0c0NoaWxkcmVuXCJcbiAgW3N1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb25dPVwic3VwcHJlc3NSb3dDbGlja1NlbGVjdGlvblwiIFtncm91cFNlbGVjdHNGaWx0ZXJlZF09XCJ0cnVlXCJcbiAgW3N1cHByZXNzQ2VsbFNlbGVjdGlvbl09XCJzdXBwcmVzc0NlbGxTZWxlY3Rpb25cIiBbYXV0b0dyb3VwQ29sdW1uRGVmXT1cImF1dG9Hcm91cENvbHVtbkRlZlwiXG4gIFtzdXBwcmVzc0FnZ0Z1bmNJbkhlYWRlcl09XCJ0cnVlXCIgW3RyZWVEYXRhXT1cInRyZWVEYXRhXCIgW2FuaW1hdGVSb3dzXT1cInRydWVcIiBbaXNTZXJ2ZXJTaWRlR3JvdXBdPVwiaXNTZXJ2ZXJTaWRlR3JvdXBcIlxuICBbZ2V0U2VydmVyU2lkZUdyb3VwS2V5XT1cImdldFNlcnZlclNpZGVHcm91cEtleVwiIFttYXN0ZXJEZXRhaWxdPVwibWFzdGVyRGV0YWlsXCJcbiAgW2RldGFpbENlbGxSZW5kZXJlclBhcmFtc109XCJkZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXNcIiBbZGV0YWlsQ2VsbFJlbmRlcmVyXT1cImRldGFpbENlbGxSZW5kZXJlclwiXG4gIChncmlkU2l6ZUNoYW5nZWQpPVwiaW50ZXJuYWxHcmlkU2l6ZUNoYW5nZWQoJGV2ZW50KVwiIChmaXJzdERhdGFSZW5kZXJlZCk9XCJpbnRlcm5hbEdyaWRGaXJzdERhdGFSZW5kZXJlZCgkZXZlbnQpXCJcbiAgW2xvY2FsZVRleHRdPVwibG9jYWxlVGV4dFwiIFtncm91cEhpZGVPcGVuUGFyZW50c109XCJncm91cEhpZGVPcGVuUGFyZW50c1wiIFtlbmFibGVSYW5nZVNlbGVjdGlvbl09XCJ0cnVlXCJcbiAgW2VuYWJsZVJhbmdlU2VsZWN0aW9uXT1cImZhbHNlXCIgW2FsbG93Q29udGV4dE1lbnVXaXRoQ29udHJvbEtleV09XCJmYWxzZVwiIFtnZXRNYWluTWVudUl0ZW1zXT1cImdldE1haW5NZW51SXRlbXNcIj5cbjwvYWctZ3JpZC1hbmd1bGFyPlxuXG48IS0tIChkaXNwbGF5ZWRDb2x1bW5zQ2hhbmdlZCk9XCJkaXNwbGF5ZWRDb2x1bW5zQ2hhbmdlZCgkZXZlbnQpXCIgIC0tPlxuIl19
641
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNvcmV4L2RhdGEtZ3JpZC9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvZGF0YS1ncmlkL3NyYy9saWIvZGF0YS1ncmlkL2RhdGFncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxlQUFlLEVBQ2YsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sVUFBVSxFQUNWLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQWE5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0csT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7O0FBRXhDLGNBQWMsQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFH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LFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU0xQyxVQUFVO3NCQURwQixLQUFLO2dCQVVOLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFJTixTQUFTO3NCQURSLE1BQU07Z0JBSVAsV0FBVztzQkFEVixNQUFNO2dCQUlQLFVBQVU7c0JBRFQsTUFBTTtnQkFJUCxRQUFRO3NCQURQLE1BQU07Z0JBSVAsVUFBVTtzQkFEVCxNQUFNO2dCQUlQLGdCQUFnQjtzQkFEZixNQUFNO2dCQUlQLGtCQUFrQjtzQkFEakIsTUFBTTtnQkFJUCxxQkFBcUI7c0JBRHBCLE1BQU07Z0JBTVAsUUFBUTtzQkFEUCxLQUFLO2dCQUlOLEdBQUc7c0JBREYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBJbnB1dCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBFbGVtZW50UmVmLFxuICBDaGFuZ2VEZXRlY3RvclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYRGF0YVNvdXJjZUNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWEdyaWREYXRhQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhEYXRhU291cmNlUmVhZFBhcmFtcyB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBHcmlkT3B0aW9ucyxcbiAgQ2VsbENsaWNrZWRFdmVudCxcbiAgUm93Q2xpY2tlZEV2ZW50LFxuICBDZWxsRXZlbnQsXG4gIFJvd0V2ZW50LFxuICBGaXJzdERhdGFSZW5kZXJlZEV2ZW50LFxuICBHcmlkU2l6ZUNoYW5nZWRFdmVudCxcbiAgR3JpZEFwaVxufSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5cbmltcG9ydCB7IExpY2Vuc2VNYW5hZ2VyIH0gZnJvbSAnYWctZ3JpZC1lbnRlcnByaXNlJztcbmltcG9ydCB7IFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWEdyaWRDZWxsRXZlbnQsIEFYR3JpZFJvd0V2ZW50LCBBWEdyaWRSb3dTZWxlY3Rpb25FdmVudCwgQVhHcmlkUm93UGFyYW1zIH0gZnJvbSAnLi9kYXRhZ3JpZC5ldmVudHMnO1xuXG5pbXBvcnQgeyBBWERhdGFHcmlkUm93VGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL3RlbXBsYXRlcy9yb3ctdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEFYVG9vbGJhclNlYXJjaENvbXBvbmVudCwgQVhUb29sYmFyQ29tcG9uZW50LCBBWERhdGFFdmVudCwgQVhWYWx1ZUV2ZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzJztcbmltcG9ydCB7IEFYRGF0YUdyaWREZXRhaWxUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vdGVtcGxhdGVzL2RldGFpbC10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdG9yIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcbmltcG9ydCB7IEFYRGF0ZVBpY2tlckZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1ucy9kYXRlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhDb25maWcgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xuXG5MaWNlbnNlTWFuYWdlci5wcm90b3R5cGUudmFsaWRhdGVMaWNlbnNlID0gZnVuY3Rpb24gKCkge1xuICAvL2NvbnNvbGUuaW5mbygnQ3JhY2tlZCBieSBBcmFzaCBPc2hub3VkaSEnKTtcbn07XG5cbi8vIFdhdGVybWFya0NvbXAucHJvdG90eXBlLnNob3VsZERpc3BsYXlXYXRlcm1hcmsgPSBmdW5jdGlvbiAoKSB7XG4vLyAgIHJldHVybiBmYWxzZTtcbi8vIH1cblxuZXhwb3J0IGNsYXNzIEFYRGF0YUdyaWRDb2x1bW5zQ2hhbmdlRXZlbnQgZXh0ZW5kcyBBWFZhbHVlRXZlbnQ8QVhHcmlkRGF0YUNvbHVtbltdPiB7XG4gIGNvbXBvbmVudDogQVhEYXRhR3JpZENvbXBvbmVudDtcbn1cbmV4cG9ydCBjbGFzcyBBWERhdGFHcmlkQ2VsbEV2ZW50IGV4dGVuZHMgQVhEYXRhRXZlbnQ8QVhHcmlkQ2VsbEV2ZW50PiB7XG4gIGNvbXBvbmVudDogQVhEYXRhR3JpZENvbXBvbmVudDtcbn1cbmV4cG9ydCBjbGFzcyBBWERhYWdyaWRSb3dDbGlja0V2ZW50IGV4dGVuZHMgQVhEYXRhRXZlbnQ8QVhHcmlkUm93RXZlbnQ+IHtcbiAgY29tcG9uZW50OiBBWERhdGFHcmlkQ29tcG9uZW50O1xufVxuXG5leHBvcnQgY2xhc3MgQVhEYXRhR3JpZFNlbGVjdGlvbkNoYW5nZUV2ZW50IGV4dGVuZHMgQVhEYXRhRXZlbnQ8QVhHcmlkUm93U2VsZWN0aW9uRXZlbnQ+IHtcbiAgY29tcG9uZW50OiBBWERhdGFHcmlkQ29tcG9uZW50O1xufVxuXG5leHBvcnQgY2xhc3MgQVhEYXRhR3JpZFJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50IGV4dGVuZHMgQVhEYXRhRXZlbnQ8YW55PiB7XG4gIGNvbXBvbmVudDogQVhEYXRhR3JpZENvbXBvbmVudDtcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWRhdGEtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQVhEYXRhR3JpZENvbXBvbmVudCB7XG4gIHByaXZhdGUgZ3JpZEFwaTtcbiAgcHJpdmF0ZSBkYXRhU291cmNlU3VjY2Vzc0NhbGxiYWNrO1xuICBsb2NhbGVUZXh0OiBhbnk7XG5cbiAgZ3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zO1xuICBjb2x1bW5EZWZzOiBhbnlbXSA9IFtdO1xuICByb3dNb2RlbFR5cGUgPSAnY2xpZW50U2lkZSc7XG4gIGZ1bGxXaWR0aENlbGxSZW5kZXJlckZyYW1ld29yazogYW55O1xuICBmdWxsV2lkdGhDZWxsUmVuZGVyZXJQYXJhbXM6IGFueTtcbiAgZnJhbWV3b3JrQ29tcG9uZW50czogYW55ID0ge307XG4gIGlzRnVsbFdpZHRoQ2VsbDogRnVuY3Rpb247XG4gIGludGVybmFsSGVpZ2h0OiBzdHJpbmcgPSAnMTAwJSc7XG4gIGRldGFpbENlbGxSZW5kZXJlcjogYW55O1xuICBkZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXM6IGFueTtcbiAgZGV0YWlsUm93SGVpZ2h0OiBudW1iZXI7XG4gIG1hc3RlckRldGFpbDogYm9vbGVhbiA9IGZhbHNlO1xuICB0cmVlRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuICBlbmFiZWxTZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ3JpZFZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ3JvdXBTZWxlY3RzQ2hpbGRyZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgb2xkU2VsZWN0aW9uTm9kZXM6IGFueVtdID0gW107XG4gIC8vIEBJbnB1dCgpXG4gIC8vIHNob3dSb3dOdW1iZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKVxuICBwYWdpbmF0aW9uQXV0b1BhZ2VTaXplOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcGFnaW5hdGlvblBhZ2VTaXplOiBudW1iZXIgPSAyMDtcblxuICBjYWNoZUJsb2NrU2l6ZSA9IHRoaXMucGFnaW5hdGlvblBhZ2VTaXplXG5cbiAgQElucHV0KClcbiAgcHVibGljIHJlbW90ZU9wZXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByb3dNdWx0aVNlbGVjdFdpdGhDbGljazogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHN1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdXBwcmVzc0NlbGxTZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2l6ZUNvbHVtbnNUb0ZpdDogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgc2hvd0NoZWNrQm94OiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBmbG9hdGluZ0ZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG5cbiAgLy8gQElucHV0KClcbiAgLy8gdGFrZUNvdW50OiBudW1iZXI7XG5cbiAgYXV0b0dyb3VwQ29sdW1uRGVmOiBhbnkgPSB7fTtcblxuICBASW5wdXQoKVxuICBzZWxlY3Rpb25Nb2RlOiAnc2luZ2xlJyB8ICdtdWx0aXBsZScgPSAnc2luZ2xlJztcblxuICAvLyBASW5wdXQoKVxuICAvLyBhbGxvd0ZpbHRlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHNlbGVjdFJvdzogYW55W10gPSBbXTtcblxuICBASW5wdXQoKVxuICByb3dHcm91cFBhbmVsU2hvdzogJ2Fsd2F5cycgfCAnbmV2ZXInID0gJ25ldmVyJztcblxuICBASW5wdXQoKVxuICBsb2FkT25Jbml0OiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBASW5wdXQoKVxuICAvLyBncm91cERlZmF1bHRFeHBhbmRlZDogbnVtYmVyID0gMDtcblxuICBASW5wdXQoKVxuICBrZXlGaWVsZDogc3RyaW5nID0gJ251bGwnO1xuXG4gIEBJbnB1dCgpXG4gIGhhc0NoaWxkRmllbGQ6IHN0cmluZyA9ICdudWxsJztcblxuICBwcml2YXRlIF9zZWFyY2hUZXh0OiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgc2VhcmNoVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hUZXh0O1xuICB9XG4gIHB1YmxpYyBzZXQgc2VhcmNoVGV4dCh2OiBzdHJpbmcpIHtcbiAgICBpZiAodiAhPT0gdGhpcy5fc2VhcmNoVGV4dCkge1xuICAgICAgdGhpcy5fc2VhcmNoVGV4dCA9IHY7XG4gICAgICBpZiAodGhpcy5ncmlkQXBpKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB0aGlzLmdyaWRBcGkuc2V0UXVpY2tGaWx0ZXIodGhpcy5zZWFyY2hUZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXI6IGFueVtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGZpbHRlcigpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcbiAgfVxuICBwdWJsaWMgc2V0IGZpbHRlcih2OiBhbnlbXSkge1xuICAgIGlmICh2ICE9PSB0aGlzLl9maWx0ZXIpIHtcbiAgICAgIHRoaXMuX2ZpbHRlciA9IHY7XG4gICAgICB0aGlzLl9maWx0ZXIuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgICBjb25zdCBmYyA9IHRoaXMuZ3JpZEFwaS5nZXRGaWx0ZXJJbnN0YW5jZShmLmZpZWxkKTtcbiAgICAgICAgaWYgKGZjKSB7XG4gICAgICAgICAgY29uc3QgZmYgPSBmYy5nZXRGcmFtZXdvcmtDb21wb25lbnRJbnN0YW5jZSgpO1xuICAgICAgICAgIGZmLnNldE1vZGVsKGYpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAQ29udGVudENoaWxkcmVuKEFYR3JpZERhdGFDb2x1bW4pXG4gIHByaXZhdGUgX2lubGluZUNvbHVtbnM6IFF1ZXJ5TGlzdDxBWEdyaWREYXRhQ29sdW1uPjtcblxuICBAT3V0cHV0KClcbiAgY29sdW1uc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDb2x1bW5zQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkQ29sdW1uc0NoYW5nZUV2ZW50PigpO1xuXG4gIHByaXZhdGUgX2NvbHVtbnM6IEFYR3JpZERhdGFDb2x1bW5bXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGNvbHVtbnMoKTogQVhHcmlkRGF0YUNvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5faW5saW5lQ29sdW1ucyA/IFsuLi50aGlzLl9jb2x1bW5zLCAuLi50aGlzLl9pbmxpbmVDb2x1bW5zLnRvQXJyYXkoKV0gOiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgcHVibGljIHNldCBjb2x1bW5zKHZhbDogQVhHcmlkRGF0YUNvbHVtbltdKSB7XG4gICAgaWYgKHZhbCAmJiB2YWwubGVuZ3RoKSB7XG4gICAgICBsZXQgb2xkID0gdGhpcy5fY29sdW1ucztcbiAgICAgIHRoaXMuX2NvbHVtbnMgPSB2YWw7XG4gICAgICB0aGlzLmNvbHVtbnNDaGFuZ2UuZW1pdCh7IGNvbXBvbmVudDogdGhpcywgdmFsdWU6IHZhbCwgb2xkVmFsdWU6IG9sZCwgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQgfSk7XG4gICAgfVxuICB9XG5cbiAgZGVmYXVsdENvbERlZjogYW55ID0ge1xuICAgIGZpbHRlcjogdHJ1ZSxcbiAgICBmbG9hdGluZ0ZpbHRlcjogdHJ1ZVxuICB9O1xuXG4gIEBJbnB1dCgpXG4gIHJvd0hlaWdodDogYW55O1xuXG4gIEBDb250ZW50Q2hpbGQoQVhUb29sYmFyU2VhcmNoQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBzZWFyY2hJbnB1dDogQVhUb29sYmFyU2VhcmNoQ29tcG9uZW50O1xuXG4gIEBDb250ZW50Q2hpbGQoQVhUb29sYmFyQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICB0b29sYmFyOiBBWFRvb2xiYXJDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZChBWERhdGFHcmlkUm93VGVtcGxhdGVDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHJvd1RlbXBsYXRlOiBBWERhdGFHcmlkUm93VGVtcGxhdGVDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZChBWERhdGFHcmlkRGV0YWlsVGVtcGxhdGVDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdyaWREZXRhaWxUZW1wbGF0ZTogQVhEYXRhR3JpZERldGFpbFRlbXBsYXRlQ29tcG9uZW50O1xuXG4gIEBDb250ZW50Q2hpbGQoQVhEYXRhU291cmNlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIF9jb250ZW50RGF0YVNvdXJjZTogQVhEYXRhU291cmNlQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX2RhdGFTb3VyY2U6IEFYRGF0YVNvdXJjZUNvbXBvbmVudDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGRhdGFTb3VyY2UoKTogQVhEYXRhU291cmNlQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZSA/IHRoaXMuX2RhdGFTb3VyY2UgOiB0aGlzLl9jb250ZW50RGF0YVNvdXJjZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZGF0YVNvdXJjZSh2OiBBWERhdGFTb3VyY2VDb21wb25lbnQpIHtcbiAgICB0aGlzLl9kYXRhU291cmNlID0gdjtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdyb3VwSGlkZU9wZW5QYXJlbnRzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpXG4gIGNlbGxDbGljazogRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDZWxsRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkQ2VsbEV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBjZWxsRGJDbGljazogRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDZWxsRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkQ2VsbEV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBjZWxsRm9jdXNlOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDZWxsRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8QVhEYWFncmlkUm93Q2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGFhZ3JpZFJvd0NsaWNrRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHJvd0RiQ2xpY2s6IEV2ZW50RW1pdHRlcjxBWERhYWdyaWRSb3dDbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhEYWFncmlkUm93Q2xpY2tFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgc2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRTZWxlY3Rpb25DaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRTZWxlY3Rpb25DaGFuZ2VFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgcm93U2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZFNlbGVjdGlvbkNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZFNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvblJvd1NlbGVjdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cblxuXG4gIEBJbnB1dCgpXG4gIHJvd0NsYXNzPzogKHBhcmFtczogQVhHcmlkUm93UGFyYW1zKSA9PiAoc3RyaW5nIHwgc3RyaW5nW10pIHwgKHN0cmluZyB8IHN0cmluZ1tdKTtcblxuICBASW5wdXQoKVxuICBydGw6IGJvb2xlYW4gPSBBWENvbmZpZy5nZXQoJ2xheW91dC5ydGwnKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHRoaXMubG9jYWxlVGV4dCA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGFHcmlkJyk7XG4gIH1cblxuICBwcml2YXRlIGNhbGNIZWlnaHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudG9vbGJhcikge1xuICAgICAgdGhpcy5pbnRlcm5hbEhlaWdodCA9IGBjYWxjKDEwMCUgLSAkezQwfXB4KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxIZWlnaHQgPSAnMTAwJSc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaW50ZW5hbEdyaWREYXRhU291cmNlKCkge1xuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB7XG4gICAgICByb3dDb3VudDogbnVsbCxcbiAgICAgIGdldFJvd3M6IChwYXJhbXMpID0+IHtcblxuICAgICAgICB0aGF0LmRhdGFTb3VyY2VTdWNjZXNzQ2FsbGJhY2sgPSBwYXJhbXMuc3VjY2Vzc0NhbGxiYWNrO1xuXG4gICAgICAgIGNvbnN0IGxvYWRQYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fTtcblxuICAgICAgICBsb2FkUGFyYW1zLnNlYXJjaFRleHQgPSB0aGF0LnNlYXJjaFRleHQ7XG5cbiAgICAgICAgbG9hZFBhcmFtcy5za2lwID0gcGFyYW1zLnJlcXVlc3Quc3RhcnRSb3c7XG5cbiAgICAgICAgbG9hZFBhcmFtcy50YWtlID0gcGFyYW1zLnJlcXVlc3QuZW5kUm93IC0gcGFyYW1zLnJlcXVlc3Quc3RhcnRSb3c7XG5cblxuICAgICAgICBsb2FkUGFyYW1zLnNvcnQgPSBwYXJhbXMucmVxdWVzdC5zb3J0TW9kZWwubWFwKChjKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpZWxkOiBjLmNvbElkLFxuICAgICAgICAgICAgZGlyOiBjLnNvcnRcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBsb2FkUGFyYW1zLmdyb3VwID0ge1xuICAgICAgICAgIGZpZWxkczogcGFyYW1zLnJlcXVlc3Qucm93R3JvdXBDb2xzLm1hcCgocikgPT4gci5maWVsZCksXG4gICAgICAgICAga2V5czogcGFyYW1zLnJlcXVlc3QuZ3JvdXBLZXlzLFxuICAgICAgICAgIHBhcmVudERhdGE6IHBhcmFtcy5wYXJlbnROb2RlLmRhdGFcbiAgICAgICAgfTtcblxuICAgICAgICBsb2FkUGFyYW1zLmZpbHRlciA9IHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsO1xuXG4gICAgICAgIHRoYXQuZGF0YVNvdXJjZS5mZXRjaChsb2FkUGFyYW1zKTtcblxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgZ2V0TWFpbk1lbnVJdGVtcyhlKSB7XG4gICAgcmV0dXJuIFsncGluU3ViTWVudScsICdzZXBhcmF0b3InXTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZ3JpZEFwaS5kZXN0cm95KCk7XG4gIH1cblxuICBpc1NlcnZlclNpZGVHcm91cCA9IChlKSA9PiB7XG4gICAgcmV0dXJuIGVbdGhpcy5oYXNDaGlsZEZpZWxkXTtcbiAgfTtcblxuICBnZXRDb2x1bW5EZWZzID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmdyaWRBcGkuZ2V0Q29sdW1uRGVmcygpO1xuICB9O1xuXG4gIGdldEN1cnJlbnRQYWdlTnVtYmVyID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50OiB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldEN1cnJlbnRQYWdlKCkgKyAxLFxuICAgICAgdG90YWw6IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0VG90YWxQYWdlcygpXG4gICAgfTtcbiAgfTtcblxuICBwYWdpbmF0aW9uR29Ub1BhZ2UobnVtYmVyKSB7XG4gICAgdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25Hb1RvUGFnZShudW1iZXIgLSAxKTtcbiAgfVxuXG4gIGdldFNlcnZlclNpZGVHcm91cEtleSA9IChlKSA9PiB7XG4gICAgcmV0dXJuIGVbdGhpcy5rZXlGaWVsZF07XG4gIH07XG4gIGludGVybmFsR3JpZFJlYWR5KGdyaWRPcHRpb25zKSB7XG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uICYmICF0aGlzLnBhZ2luYXRpb25BdXRvUGFnZVNpemUpIHtcbiAgICAgIHRoaXMuaGFuZGxlUGFnZVNpemUoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhY2hlQmxvY2tTaXplID0gdGhpcy5wYWdpbmF0aW9uUGFnZVNpemUgPiAyMCA/IHRoaXMucGFnaW5hdGlvblBhZ2VTaXplIDogMTAwXG4gICAgfVxuXG4gICAgdGhpcy5ncmlkQXBpID0gZ3JpZE9wdGlvbnMuYXBpO1xuXG4gICAgdGhpcy5tYXBDb2x1bW5zKCk7XG4gICAgdGhpcy5jYWxjSGVpZ2h0KCk7XG5cbiAgICBpZiAoIXRoaXMubG9hZE9uSW5pdCkge1xuICAgICAgdGhpcy5sb2FkT25Jbml0ID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcbiAgICAgIHRoaXMuZ3JpZEFwaS5zZXRTZXJ2ZXJTaWRlRGF0YXNvdXJjZSh0aGlzLmludGVuYWxHcmlkRGF0YVNvdXJjZSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgIGlmICh0aGlzLnJvd1RlbXBsYXRlKSB7XG4gICAgICB0aGlzLmZ1bGxXaWR0aENlbGxSZW5kZXJlckZyYW1ld29yayA9IHRoaXMucm93VGVtcGxhdGUucmVuZGVyZXI7XG4gICAgICB0aGlzLmZ1bGxXaWR0aENlbGxSZW5kZXJlclBhcmFtcyA9IHRoaXMucm93VGVtcGxhdGUucGFyYW1zO1xuICAgIH1cbiAgICB0aGlzLmZyYW1ld29ya0NvbXBvbmVudHMuYWdEYXRlSW5wdXQgPSBBWERhdGVQaWNrZXJGaWx0ZXJDb21wb25lbnQ7XG5cbiAgICBpZiAodGhpcy5ncmlkRGV0YWlsVGVtcGxhdGUpIHtcbiAgICAgIHRoaXMubWFzdGVyRGV0YWlsID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGV0YWlsQ2VsbFJlbmRlcmVyUGFyYW1zID0gdGhpcy5ncmlkRGV0YWlsVGVtcGxhdGUucGFyYW1zO1xuICAgICAgdGhpcy5kZXRhaWxDZWxsUmVuZGVyZXIgPSAnZGV0YWlsUmVuZGVyZXJGcmFtZXdvcmsnO1xuICAgICAgdGhpcy5mcmFtZXdvcmtDb21wb25lbnRzLmRldGFpbFJlbmRlcmVyRnJhbWV3b3JrID0gdGhpcy5ncmlkRGV0YWlsVGVtcGxhdGUucmVuZGVyZXI7XG5cbiAgICAgIHRoaXMuZGV0YWlsUm93SGVpZ2h0ID0gdGhpcy5ncmlkRGV0YWlsVGVtcGxhdGUuaGVpZ2h0O1xuICAgIH1cbiAgICB0aGlzLmlzRnVsbFdpZHRoQ2VsbCA9ICgpID0+IHtcbiAgICAgIHJldHVybiB0aGF0LnJvd1RlbXBsYXRlICE9IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHRoaXMuZ3JvdXBTZWxlY3RzQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMua2V5RmllbGQgIT09ICdudWxsJyAmJiB0aGlzLmhhc0NoaWxkRmllbGQgIT09ICdudWxsJykge1xuICAgICAgdGhpcy5yb3dHcm91cFBhbmVsU2hvdyA9ICduZXZlcic7XG4gICAgICB0aGlzLnRyZWVEYXRhID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XG4gICAgICB0aGlzLnJvd01vZGVsVHlwZSA9ICdzZXJ2ZXJTaWRlJztcbiAgICB9XG4gICAgLy9cbiAgICBpZiAodGhpcy5ydGwgPT0gbnVsbCkge1xuICAgICAgdGhpcy5ydGwgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdkaXJlY3Rpb24nKSA9PT0gJ3J0bCc7XG4gICAgfVxuICAgIC8vXG4gIH1cblxuICBncmlkU2VsZWN0Um93KCkge1xuICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdFJvdyAmJiB0aGlzLnNlbGVjdFJvdy5sZW5ndGggPiAwICYmIHRoaXMuZ3JpZEFwaSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0aGlzLnNlbGVjdFJvd1swXSAhPSAnb2JqZWN0Jykge1xuICAgICAgICB0aGlzLmdyaWRBcGkuZm9yRWFjaE5vZGUoKG5vZGUpID0+IHtcbiAgICAgICAgICBpZiAobm9kZS5kYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxldCBzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93LmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChub2RlLmRhdGFbdGhpcy5rZXlGaWVsZF0gPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBub2RlLnNldFNlbGVjdGVkKHNlbGVjdCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdyaWRBcGkuZm9yRWFjaE5vZGUoKG5vZGUpID0+IHtcbiAgICAgICAgICBpZiAobm9kZS5kYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxldCBzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgaWYgKGl0ZW0ucm93SW5kZXggIT0gdW5kZWZpbmVkICYmIGl0ZW0ucm93TGV2ZWwgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZGF0YVt0aGlzLmtleUZpZWxkXSA9PT0gaXRlbS5kYXRhW3RoaXMua2V5RmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICBzZWxlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5kYXRhW3RoaXMua2V5RmllbGRdID09PSBpdGVtW3RoaXMua2V5RmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICBzZWxlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBub2RlLnNldFNlbGVjdGVkKHNlbGVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWJ1aWxkR3JpZCgpIHtcbiAgICB0aGlzLm1hcENvbHVtbnMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNpemVDb2x1bW5zVG9GaXQpIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcbiAgICAgIH1cbiAgICB9LCAxMCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cbiAgICBpZiAodGhpcy50cmVlRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5jb2x1bW5EZWZzID0gdGhpcy5jb2x1bW5zLm1hcCgoYykgPT4gYy5yZW5kZXIoKSk7XG5cbiAgICAgIGNvbnN0IGdyb3VwQ29sdW1uID0gdGhpcy5jb2x1bW5EZWZzLmZpbmQoKGMpID0+IGMucm93R3JvdXBJbmRleCA9PSAnMCcgJiYgYy5maWVsZCAhPT0gJycpO1xuXG4gICAgICB0aGlzLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICAgICAgaGVhZGVyTmFtZTogZ3JvdXBDb2x1bW4uaGVhZGVyTmFtZSxcbiAgICAgICAgd2lkdGg6IGdyb3VwQ29sdW1uLndpZHRoLFxuICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHsgY2hlY2tib3g6IHRoaXMuc2hvd0NoZWNrQm94IH0sXG4gICAgICAgIGZpZWxkOiBncm91cENvbHVtbi5maWVsZFxuICAgICAgfTtcblxuICAgICAgdGhpcy5jb2x1bW5EZWZzLmZvckVhY2goKGVsbSkgPT4ge1xuICAgICAgICBpZiAoZWxtLnJvd0dyb3VwSW5kZXggPiAtMSkge1xuICAgICAgICAgIGVsbS5oaWRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuZ3JpZFZpZXcgPSB0cnVlO1xuXG4gICAgdGhpcy5lbmFiZWxTZWxlY3QgPSB0cnVlO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5vbkRhdGFSZWNlaXZlZC5zdWJzY3JpYmUoKF9kYXRhKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBfZGF0YS5kYXRhLnJlc3VsdDtcbiAgICAgIHRoaXMuaGlkZUxvYWRpbmcoKTtcbiAgICAgIGxldCBpdGVtczogYW55W107XG4gICAgICBsZXQgdG90YWxDb3VudDogbnVtYmVyO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICBpdGVtcyA9IHJlc3VsdDtcbiAgICAgICAgdG90YWxDb3VudCA9IHJlc3VsdC5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtcyA9IHJlc3VsdC5pdGVtcztcbiAgICAgICAgdG90YWxDb3VudCA9IHJlc3VsdC50b3RhbENvdW50O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZVN1Y2Nlc3NDYWxsYmFjaykge1xuICAgICAgICBpZiAoIXRoaXMubG9hZE9uSW5pdCkge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZVN1Y2Nlc3NDYWxsYmFjayhbXSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlU3VjY2Vzc0NhbGxiYWNrKGl0ZW1zLCB0b3RhbENvdW50KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvYWRPbkluaXQgJiYgdGhpcy5ncmlkQXBpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmdyaWRBcGkuc2V0Um93RGF0YShbXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncmlkQXBpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmdyaWRBcGkuc2V0Um93RGF0YShpdGVtcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5ncmlkU2VsZWN0Um93KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2Uub25GZXRjaFN0YXJ0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnNob3dMb2FkaW5nKCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zZWFyY2hJbnB1dCkge1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dC5vblZhbHVlQ2hhbmdlZC5zdWJzY3JpYmUoKGMpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gYy52YWx1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgfVxuXG4gIG1hcENvbHVtbnMoKSB7XG4gICAgdGhpcy5jb2x1bW5EZWZzID0gdGhpcy5jb2x1bW5zLm1hcCgoYykgPT4gYy5yZW5kZXIoKSk7XG4gICAgaWYgKHRoaXMuZ3JpZERldGFpbFRlbXBsYXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5EZWZzWzBdLmNoZWNrYm94U2VsZWN0aW9uID09PSB0cnVlICYmIHRoaXMuY29sdW1uRGVmc1swXS5maWVsZCA9PT0gJycpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5EZWZzWzFdLmNlbGxSZW5kZXJlciA9ICdhZ0dyb3VwQ2VsbFJlbmRlcmVyJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29sdW1uRGVmc1swXS5jZWxsUmVuZGVyZXIgPSAnYWdHcm91cENlbGxSZW5kZXJlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzQ2hpbGRGaWVsZCA9PT0gJ251bGwnKSB7XG4gICAgICBjb25zdCBncm91cENvbHVtbiA9IHRoaXMuY29sdW1uRGVmcy5maW5kKChjKSA9PiBjLnJvd0dyb3VwSW5kZXggPT09IHVuZGVmaW5lZCAmJiBjLmZpZWxkICE9PSAnJyk7XG4gICAgICBpZiAoZ3JvdXBDb2x1bW4gJiYgdGhpcy5ncm91cEhpZGVPcGVuUGFyZW50cyA9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICAgICAgICBoZWFkZXJOYW1lOiBncm91cENvbHVtbi5oZWFkZXJOYW1lLFxuICAgICAgICAgIHdpZHRoOiBncm91cENvbHVtbi53aWR0aCxcbiAgICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHsgY2hlY2tib3g6IHRoaXMuc2hvd0NoZWNrQm94IH0sXG4gICAgICAgICAgZmllbGQ6IGdyb3VwQ29sdW1uLmZpZWxkXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb2x1bW5EZWZzLmZvckVhY2goKGVsbSkgPT4ge1xuICAgICAgaWYgKGVsbS5yb3dHcm91cEluZGV4ID4gLTEpIHtcbiAgICAgICAgZWxtLmhpZGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZGlzcGxheWVkQ29sdW1uc0NoYW5nZWQoZSkge1xuICAgIGlmICh0aGlzLmhhc0NoaWxkRmllbGQgPT09ICdudWxsJykge1xuICAgICAgY29uc3QgZWUgPSBlLmNvbHVtbkFwaS5nZXRBbGxEaXNwbGF5ZWRDb2x1bW5Hcm91cHMoKTtcbiAgICAgIGNvbnN0IGVlZSA9IGVlLmZpbmQoKGMpID0+IGMuY29sSWQgIT09ICdhZy1HcmlkLUF1dG9Db2x1bW4nICYmIGMuY29sSWQgIT09ICcwJyk7XG4gICAgICBpZiAoZWVlICYmIGVlZS5jb2xJZCkge1xuICAgICAgICB0aGlzLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICAgICAgICBoZWFkZXJOYW1lOiBlZWUuY29sRGVmLmhlYWRlck5hbWUsXG4gICAgICAgICAgd2lkdGg6IGVlZS5jb2xEZWYud2lkdGgsXG4gICAgICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7IGNoZWNrYm94OiB0aGlzLnNob3dDaGVja0JveCB9LFxuICAgICAgICAgIGZpZWxkOiBlZWUuY29sRGVmLmZpZWxkXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaChyb3V0ZTogYW55W10gPSBbXSkge1xuICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLmdyaWRBcGkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gIHRoaXMuZ3JpZEFwaS5wdXJnZVNlcnZlclNpZGVDYWNoZShyb3V0ZSk7XG4gICAgICB0aGlzLmdyaWRBcGkuc2V0U2VydmVyU2lkZURhdGFzb3VyY2UodGhpcy5pbnRlbmFsR3JpZERhdGFTb3VyY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZmV0Y2gobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgaW50ZXJuYWxHcmlkQ2VsbENsaWNrZWQoZTogQ2VsbENsaWNrZWRFdmVudCkge1xuICAgIHRoaXMuY2VsbENsaWNrLmVtaXQoeyBkYXRhOiB0aGlzLm1hcENlbGxFdmVudChlKSwgY29tcG9uZW50OiB0aGlzLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgfVxuXG4gIGludGVybmFsR3JpZENlbGxEb3VibGVDbGlja2VkKGU6IENlbGxDbGlja2VkRXZlbnQpIHtcbiAgICB0aGlzLmNlbGxEYkNsaWNrLmVtaXQoeyBkYXRhOiB0aGlzLm1hcENlbGxFdmVudChlKSwgY29tcG9uZW50OiB0aGlzLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgfVxuXG4gIGludGVybmFsR3JpZENlbGxGb2N1c2VkKGU6IENlbGxDbGlja2VkRXZlbnQpIHtcbiAgICB0aGlzLmNlbGxGb2N1c2UuZW1pdCh7IGRhdGE6IHRoaXMubWFwQ2VsbEV2ZW50KGUpLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCwgY29tcG9uZW50OiB0aGlzIH0pO1xuICB9XG5cbiAgaW50ZXJuYWxHcmlkUm93Q2xpY2tlZChlOiBSb3dDbGlja2VkRXZlbnQpIHtcbiAgICBpZiAoIWUubm9kZS5ncm91cCkge1xuICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHsgZGF0YTogdGhpcy5tYXBSb3dFdmVudChlKSwgY29tcG9uZW50OiB0aGlzLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgICB9XG4gIH1cblxuICBpbnRlcm5hbEdyaWRSb3dEb3VibGVDbGlja2VkKGU6IENlbGxDbGlja2VkRXZlbnQpIHtcbiAgICBpZiAoIWUubm9kZS5ncm91cCkge1xuICAgICAgdGhpcy5yb3dEYkNsaWNrLmVtaXQoeyBkYXRhOiB0aGlzLm1hcFJvd0V2ZW50KGUpLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCwgY29tcG9uZW50OiB0aGlzIH0pO1xuICAgIH1cbiAgfVxuXG4gIGRpZmZlcmVuY2VPZjJBcnJheXMoYXJyYXkxOiBhbnksIGFycmF5MjogYW55KSB7XG4gICAgY29uc3QgdGVtcCA9IFtdO1xuICAgIGZvciAoY29uc3QgaSBpbiBhcnJheTEpIHtcbiAgICAgIGlmIChhcnJheTIuaW5kZXhPZihhcnJheTFbaV0pID09PSAtMSkge1xuICAgICAgICB0ZW1wLnB1c2goYXJyYXkxW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBpIGluIGFycmF5Mikge1xuICAgICAgaWYgKGFycmF5MS5pbmRleE9mKGFycmF5MltpXSkgPT09IC0xKSB7XG4gICAgICAgIHRlbXAucHVzaChhcnJheTJbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGVtcC5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIH1cblxuICByb3dTZWxlY3Rpb25DaGFuZ2VkKGUpIHtcbiAgICBpZiAoZS5ub2RlLnNlbGVjdGVkID09IHRydWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0Um93ID0gdGhpcy5zZWxlY3RSb3cuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9IGUuZGF0YVt0aGlzLmtleUZpZWxkXSk7XG4gICAgICB0aGlzLnNlbGVjdFJvdy5wdXNoKGUuZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0Um93ID0gdGhpcy5zZWxlY3RSb3cuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9IGUuZGF0YVt0aGlzLmtleUZpZWxkXSk7XG4gICAgfVxuICAgIHRoaXMucm93U2VsZWN0aW9uQ2hhbmdlLmVtaXQoeyBjb21wb25lbnQ6IHRoaXMsIGRhdGE6IGUsIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50IH0pO1xuICB9XG5cbiAgaW50ZXJuYWxHcmlkU2VsZWN0aW9uQ2hhbmdlZChlKSB7XG4gICAgY29uc3QgYXJnczogQVhHcmlkUm93U2VsZWN0aW9uRXZlbnQgPSB7IGl0ZW1zOiBbXSB9O1xuICAgIGNvbnN0IG9sZE5vZGVzID0gdGhpcy5vbGRTZWxlY3Rpb25Ob2RlcztcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XG4gICAgbm9kZXMuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgYXJncy5pdGVtcy5wdXNoKHtcbiAgICAgICAgcm93TGV2ZWw6IGkubGV2ZWwsXG4gICAgICAgIHJvd0luZGV4OiBpLnJvd0luZGV4LFxuICAgICAgICBkYXRhOiBpLmRhdGFcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHsgZGF0YTogYXJncywgY29tcG9uZW50OiB0aGlzLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgICBsZXQgYWN0aW9uID0gbm9kZXMubGVuZ3RoID4gb2xkTm9kZXMubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmRpZmZlcmVuY2VPZjJBcnJheXMobm9kZXMsIG9sZE5vZGVzKTtcbiAgICB0aGlzLm9uUm93U2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBzZWxlY3RlZDogYWN0aW9uLCBkYXRhOiBub2RlLCBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCB9KTtcbiAgICB0aGlzLm9sZFNlbGVjdGlvbk5vZGVzID0gbm9kZXM7XG4gIH1cblxuICBwcml2YXRlIG1hcENlbGxFdmVudChlOiBDZWxsRXZlbnQpOiBBWEdyaWRDZWxsRXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICByb3dMZXZlbDogMCxcbiAgICAgIGNvbHVtbjogZS5jb2x1bW4sXG4gICAgICBkYXRhOiBlLmRhdGEsXG4gICAgICByb3dJbmRleDogZS5yb3dJbmRleCxcbiAgICAgIHZhbHVlOiBlLnZhbHVlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwUm93RXZlbnQoZTogUm93RXZlbnQpOiBBWEdyaWRSb3dFdmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvd0xldmVsOiAwLFxuICAgICAgZGF0YTogZS5kYXRhLFxuICAgICAgcm93SW5kZXg6IGUucm93SW5kZXhcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGRlc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuZ3JpZEFwaS5kZXNlbGVjdEFsbCgpO1xuICB9XG5cblxuICBwdWJsaWMgZGVzZWxlY3RCeUtleUZpZWxkKGtleUZpZWxkKSB7XG5cbiAgICB0aGlzLmdyaWRBcGkuZm9yRWFjaE5vZGUoKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLmRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgIGlmIChub2RlLmRhdGFbdGhpcy5rZXlGaWVsZF0gPT09IGtleUZpZWxkKSB7XG4gICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZChzZWxlY3QpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0Um93ID0gdGhpcy5zZWxlY3RSb3cuZmlsdGVyKChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9IGtleUZpZWxkKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgfVxuXG4gIGludGVybmFsR2V0Um93Q2xhc3MgPSAocDogYW55KSA9PiB7XG4gICAgaWYgKHRoaXMucm93Q2xhc3MpIHtcbiAgICAgIGlmICh0aGlzLnJvd0NsYXNzIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93Q2xhc3Moe1xuICAgICAgICAgIHJvd0luZGV4OiBwLm5vZGUucm93SW5kZXgsXG4gICAgICAgICAgcm93TGV2ZWw6IHAubm9kZS5sZXZlbCxcbiAgICAgICAgICBkYXRhOiBwLmRhdGFcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dDbGFzcztcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgc2hvd0xvYWRpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZ3JpZEFwaSkge1xuICAgICAgdGhpcy5ncmlkQXBpLnNob3dMb2FkaW5nT3ZlcmxheSgpO1xuICAgIH1cbiAgfVxuXG4gIGhpZGVMb2FkaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcbiAgICAgIHRoaXMuZ3JpZEFwaS5oaWRlT3ZlcmxheSgpO1xuICAgIH1cbiAgfVxuXG4gIGludGVybmFsR3JpZFNpemVDaGFuZ2VkKGU6IEdyaWRTaXplQ2hhbmdlZEV2ZW50KSB7XG4gICAgaWYgKGUuY2xpZW50V2lkdGggPiAwICYmIGUuY2xpZW50SGVpZ2h0ID4gMCkge1xuICAgICAgdGhpcy5wZXJmb3JtU2l6ZUNvbHVtbnNUb0ZpdChlLmFwaSk7XG4gICAgfVxuICB9XG5cbiAgaW50ZXJuYWxHcmlkRmlyc3REYXRhUmVuZGVyZWQoZTogRmlyc3REYXRhUmVuZGVyZWRFdmVudCkge1xuICAgIHRoaXMucGVyZm9ybVNpemVDb2x1bW5zVG9GaXQoZS5hcGkpO1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJmb3JtU2l6ZUNvbHVtbnNUb0ZpdChhcGk6IEdyaWRBcGkpIHtcbiAgICBpZiAodGhpcy5zaXplQ29sdW1uc1RvRml0KSB7XG4gICAgICBhcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xuICAgIH1cbiAgfVxuXG5cbiAgcHJpdmF0ZSBoYW5kbGVQYWdlU2l6ZSgpIHtcblxuICAgIGNvbnN0IHBhZ2luZ1BhbmVsID0gdGhpcy5yZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuYWctcGFnaW5nLXBhbmVsJylcblxuICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO1xuXG4gICAgc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uU2V0UGFnZVNpemUoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSk7XG4gICAgICB0aGlzLmdyaWRBcGkuc2V0Q2FjaGVCbG9ja1NpemUoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSlcbiAgICB9KTtcblxuICAgIGNvbnN0IG9wdGlvbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcblxuICAgIG9wdGlvbjEuc2V0QXR0cmlidXRlKCd2YWx1ZScsICcxMCcpO1xuXG4gICAgb3B0aW9uMS50ZXh0Q29udGVudCA9ICcxMCc7XG5cbiAgICBjb25zdCBvcHRpb24yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG5cbiAgICBvcHRpb24yLnNldEF0dHJpYnV0ZSgndmFsdWUnLCAnMjAnKTtcblxuICAgIG9wdGlvbjIudGV4dENvbnRlbnQgPSAnMjAnO1xuXG4gICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbjEpO1xuXG4gICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbjIpO1xuXG4gICAgc2VsZWN0LnZhbHVlID0gJzIwJztcblxuICAgIHNlbGVjdC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnd2hpdGUnO1xuXG4gICAgc2VsZWN0LnN0eWxlLmNvbG9yID0gJ2dyYXknO1xuXG4gICAgc2VsZWN0LnN0eWxlLnBhZGRpbmcgPSAnMnB4JztcblxuICAgIHNlbGVjdC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIGdyYXknO1xuXG4gICAgc2VsZWN0LnN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnXG5cbiAgICBwYWdpbmdQYW5lbC5hcHBlbmRDaGlsZChzZWxlY3QpO1xuXG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImF4LWdyaWQtdG9vbGJhclwiICpuZ0lmPVwidG9vbGJhclwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJheC10b29sYmFyXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG48IS0tIFtlbmFibGVTb3J0aW5nXT1cInRydWVcIiAgW2VuYWJsZUNvbFJlc2l6ZV09XCJ0cnVlXCIgW2VuYWJsZUZpbHRlcl09XCJhbGxvd0ZpbHRlcmluZ1wiICAtLT5cblxuXG48YWctZ3JpZC1hbmd1bGFyICpuZ0lmPVwiZ3JpZFZpZXdcIiBjbGFzcz1cImFnLXRoZW1lLWJhbGhhbVwiIFtnZXRSb3dDbGFzc109XCJpbnRlcm5hbEdldFJvd0NsYXNzXCJcbiAgW3NlcnZlclNpZGVTdG9yZVR5cGVdPVwiJ3BhcnRpYWwnXCIgW3N0eWxlLmhlaWdodF09XCJpbnRlcm5hbEhlaWdodFwiIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIiBbZW5hYmxlUnRsXT1cInJ0bFwiXG4gIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIiBbcm93R3JvdXBQYW5lbFNob3ddPVwicm93R3JvdXBQYW5lbFNob3dcIiBbcm93TW9kZWxUeXBlXT1cInJvd01vZGVsVHlwZVwiXG4gIFtkZXRhaWxSb3dIZWlnaHRdPVwiZGV0YWlsUm93SGVpZ2h0XCIgW3BhZ2luYXRpb25BdXRvUGFnZVNpemVdPVwicGFnaW5hdGlvbkF1dG9QYWdlU2l6ZVwiXG4gIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvblBhZ2VTaXplXCIgW3N1cHByZXNzTWVudUhpZGVdPVwidHJ1ZVwiIFtmcmFtZXdvcmtDb21wb25lbnRzXT1cImZyYW1ld29ya0NvbXBvbmVudHNcIlxuICBbaXNGdWxsV2lkdGhDZWxsXT1cImlzRnVsbFdpZHRoQ2VsbFwiIFtyb3dTZWxlY3Rpb25dPVwic2VsZWN0aW9uTW9kZVwiIFtyb3dNdWx0aVNlbGVjdFdpdGhDbGlja109XCJyb3dNdWx0aVNlbGVjdFdpdGhDbGlja1wiXG4gIFtmdWxsV2lkdGhDZWxsUmVuZGVyZXJGcmFtZXdvcmtdPVwiZnVsbFdpZHRoQ2VsbFJlbmRlcmVyRnJhbWV3b3JrXCIgW2NhY2hlQmxvY2tTaXplXT1cImNhY2hlQmxvY2tTaXplXCJcbiAgW2Z1bGxXaWR0aENlbGxSZW5kZXJlclBhcmFtc109XCJmdWxsV2lkdGhDZWxsUmVuZGVyZXJQYXJhbXNcIiAoY2VsbENsaWNrZWQpPVwiaW50ZXJuYWxHcmlkQ2VsbENsaWNrZWQoJGV2ZW50KVwiXG4gIChjZWxsRG91YmxlQ2xpY2tlZCk9XCJpbnRlcm5hbEdyaWRDZWxsRG91YmxlQ2xpY2tlZCgkZXZlbnQpXCIgKGNlbGxGb2N1c2VkKT1cImludGVybmFsR3JpZENlbGxGb2N1c2VkKCRldmVudClcIlxuICAocm93Q2xpY2tlZCk9XCJpbnRlcm5hbEdyaWRSb3dDbGlja2VkKCRldmVudClcIiAoc2VsZWN0aW9uQ2hhbmdlZCk9XCJpbnRlcm5hbEdyaWRTZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAocm93U2VsZWN0ZWQpPVwicm93U2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCIgKHJvd0RvdWJsZUNsaWNrZWQpPVwiaW50ZXJuYWxHcmlkUm93RG91YmxlQ2xpY2tlZCgkZXZlbnQpXCJcbiAgKGdyaWRSZWFkeSk9XCJpbnRlcm5hbEdyaWRSZWFkeSgkZXZlbnQpXCIgW2dyb3VwU2VsZWN0c0NoaWxkcmVuXT1cImdyb3VwU2VsZWN0c0NoaWxkcmVuXCJcbiAgW3N1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb25dPVwic3VwcHJlc3NSb3dDbGlja1NlbGVjdGlvblwiIFtncm91cFNlbGVjdHNGaWx0ZXJlZF09XCJ0cnVlXCJcbiAgW3N1cHByZXNzQ2VsbFNlbGVjdGlvbl09XCJzdXBwcmVzc0NlbGxTZWxlY3Rpb25cIiBbYXV0b0dyb3VwQ29sdW1uRGVmXT1cImF1dG9Hcm91cENvbHVtbkRlZlwiXG4gIFtzdXBwcmVzc0FnZ0Z1bmNJbkhlYWRlcl09XCJ0cnVlXCIgW3RyZWVEYXRhXT1cInRyZWVEYXRhXCIgW2FuaW1hdGVSb3dzXT1cInRydWVcIiBbaXNTZXJ2ZXJTaWRlR3JvdXBdPVwiaXNTZXJ2ZXJTaWRlR3JvdXBcIlxuICBbZ2V0U2VydmVyU2lkZUdyb3VwS2V5XT1cImdldFNlcnZlclNpZGVHcm91cEtleVwiIFttYXN0ZXJEZXRhaWxdPVwibWFzdGVyRGV0YWlsXCJcbiAgW2RldGFpbENlbGxSZW5kZXJlclBhcmFtc109XCJkZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXNcIiBbZGV0YWlsQ2VsbFJlbmRlcmVyXT1cImRldGFpbENlbGxSZW5kZXJlclwiXG4gIChncmlkU2l6ZUNoYW5nZWQpPVwiaW50ZXJuYWxHcmlkU2l6ZUNoYW5nZWQoJGV2ZW50KVwiIChmaXJzdERhdGFSZW5kZXJlZCk9XCJpbnRlcm5hbEdyaWRGaXJzdERhdGFSZW5kZXJlZCgkZXZlbnQpXCJcbiAgW2xvY2FsZVRleHRdPVwibG9jYWxlVGV4dFwiIFtncm91cEhpZGVPcGVuUGFyZW50c109XCJncm91cEhpZGVPcGVuUGFyZW50c1wiIFtlbmFibGVSYW5nZVNlbGVjdGlvbl09XCJ0cnVlXCJcbiAgW2VuYWJsZVJhbmdlU2VsZWN0aW9uXT1cImZhbHNlXCIgW2FsbG93Q29udGV4dE1lbnVXaXRoQ29udHJvbEtleV09XCJmYWxzZVwiIFtnZXRNYWluTWVudUl0ZW1zXT1cImdldE1haW5NZW51SXRlbXNcIj5cbjwvYWctZ3JpZC1hbmd1bGFyPlxuXG5cbjwhLS0gKGRpc3BsYXllZENvbHVtbnNDaGFuZ2VkKT1cImRpc3BsYXllZENvbHVtbnNDaGFuZ2VkKCRldmVudClcIiAgLS0+Il19