imm-element-ui 2.7.9 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/form/form/form.component.mjs +5 -3
- package/esm2022/lib/grid/grid/grid.component.mjs +130 -4
- package/esm2022/lib/page-form/page-form.component.mjs +21 -4
- package/esm2022/lib/page-grid-list/page-grid-list.component.mjs +2 -2
- package/esm2022/lib/row-selector/row-selector.component.mjs +2 -2
- package/esm2022/lib/share/utils.mjs +4 -2
- package/fesm2022/imm-element-ui.mjs +156 -10
- package/fesm2022/imm-element-ui.mjs.map +1 -1
- package/lib/crumb-action/crumb-action.component.d.ts +1 -1
- package/lib/form/form/form.component.d.ts +2 -1
- package/lib/grid/grid/grid.component.d.ts +16 -1
- package/lib/page-form/page-form.component.d.ts +3 -0
- package/package.json +1 -1
|
@@ -8,9 +8,12 @@ import { lastValueFrom, of } from 'rxjs';
|
|
|
8
8
|
import { HttpClient } from '@angular/common/http';
|
|
9
9
|
import { components, CLIENTLIMIT } from '../mock-data';
|
|
10
10
|
import { toObservable } from '@angular/core/rxjs-interop';
|
|
11
|
+
import { parseFunctions } from '../../share/utils';
|
|
11
12
|
import * as i0 from "@angular/core";
|
|
12
13
|
import * as i1 from "../../service/action.service";
|
|
13
14
|
import * as i2 from "primeng/button";
|
|
15
|
+
const STATIC_HIDE_KEY = '__immStaticHide';
|
|
16
|
+
const HIDE_EXPRESSION_KEY = '__immHideExpression';
|
|
14
17
|
const defaultOption = {
|
|
15
18
|
// popupParent: document.body,
|
|
16
19
|
defaultColDef: {
|
|
@@ -57,9 +60,12 @@ export class GridComponent {
|
|
|
57
60
|
this.contentMap = {};
|
|
58
61
|
this.upsert = input();
|
|
59
62
|
this.rowData = input(undefined);
|
|
63
|
+
this.hideExpressionData = input({});
|
|
64
|
+
this.hideExpressionVersion = input(0);
|
|
60
65
|
this.searchPrm = input({});
|
|
61
66
|
this.deleteEmit = output();
|
|
62
67
|
this.addEmit = output();
|
|
68
|
+
this.gridDataChanged = output();
|
|
63
69
|
this.addType = input();
|
|
64
70
|
this.selectData = input();
|
|
65
71
|
this.showAct = input(true);
|
|
@@ -92,6 +98,9 @@ export class GridComponent {
|
|
|
92
98
|
minWidth: 180,
|
|
93
99
|
};
|
|
94
100
|
this.columnDefsLoadId = 0;
|
|
101
|
+
this.columnDefsHaveHideExpression = false;
|
|
102
|
+
this.columnHideSignature = '';
|
|
103
|
+
this.columnHideExpressionErrorSet = new WeakSet();
|
|
95
104
|
this.singleClickEdit.set(this.isMobileOrTabletBrowser());
|
|
96
105
|
this.searchPrmSub = toObservable(this.searchPrm).subscribe((searchPrm) => {
|
|
97
106
|
if (searchPrm.modelName !== undefined) {
|
|
@@ -156,6 +165,10 @@ export class GridComponent {
|
|
|
156
165
|
this.grid.api.exportDataAsExcel({ fileName: this.modelName });
|
|
157
166
|
}
|
|
158
167
|
}, { allowSignalWrites: true });
|
|
168
|
+
effect(() => {
|
|
169
|
+
this.hideExpressionVersion();
|
|
170
|
+
untracked(() => this.refreshColumnHideExpressions());
|
|
171
|
+
}, { allowSignalWrites: true });
|
|
159
172
|
this.editingFix();
|
|
160
173
|
}
|
|
161
174
|
withGridContext(options) {
|
|
@@ -174,7 +187,9 @@ export class GridComponent {
|
|
|
174
187
|
this.grid && this.grid.api.destroy();
|
|
175
188
|
this.initGrid = false;
|
|
176
189
|
this.localeText = gridUtils.getLocalText(res);
|
|
177
|
-
this.columnDefs = gridUtils.handleI18nKey(this.toOptions().columnDefs, this.i18nService);
|
|
190
|
+
this.columnDefs = gridUtils.handleI18nKey(this.resolveColumnHideExpressions(this.toOptions().columnDefs), this.i18nService);
|
|
191
|
+
this.columnDefsHaveHideExpression = this.hasColumnHideExpression(this.columnDefs);
|
|
192
|
+
this.columnHideSignature = this.getColumnHideSignature(this.columnDefs);
|
|
178
193
|
setTimeout(() => {
|
|
179
194
|
this.initGrid = true;
|
|
180
195
|
}, 100);
|
|
@@ -229,7 +244,9 @@ export class GridComponent {
|
|
|
229
244
|
if (loadId !== this.columnDefsLoadId) {
|
|
230
245
|
return;
|
|
231
246
|
}
|
|
232
|
-
this.columnDefs = gridUtils.handleI18nKey(columnDefs, this.i18nService);
|
|
247
|
+
this.columnDefs = gridUtils.handleI18nKey(this.resolveColumnHideExpressions(columnDefs), this.i18nService);
|
|
248
|
+
this.columnDefsHaveHideExpression = this.hasColumnHideExpression(this.columnDefs);
|
|
249
|
+
this.columnHideSignature = this.getColumnHideSignature(this.columnDefs);
|
|
233
250
|
if (this.grid?.api) {
|
|
234
251
|
this.grid.api.setGridOption('columnDefs', this.columnDefs);
|
|
235
252
|
this.grid.api.refreshCells({
|
|
@@ -238,6 +255,109 @@ export class GridComponent {
|
|
|
238
255
|
});
|
|
239
256
|
}
|
|
240
257
|
}
|
|
258
|
+
refreshColumnHideExpressions() {
|
|
259
|
+
if (!this.columnDefsHaveHideExpression || !this.grid?.api) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
const nextColumnDefs = this.resolveColumnHideExpressions(this.columnDefs);
|
|
263
|
+
const nextSignature = this.getColumnHideSignature(nextColumnDefs);
|
|
264
|
+
if (nextSignature === this.columnHideSignature) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
this.columnDefs = nextColumnDefs;
|
|
268
|
+
this.columnHideSignature = nextSignature;
|
|
269
|
+
this.grid.api.setGridOption('columnDefs', this.columnDefs);
|
|
270
|
+
this.grid.api.refreshCells({
|
|
271
|
+
force: true,
|
|
272
|
+
suppressFlash: true,
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
resolveColumnHideExpressions(columnDefs = []) {
|
|
276
|
+
return columnDefs.map((item) => this.resolveColumnHideExpression(item));
|
|
277
|
+
}
|
|
278
|
+
resolveColumnHideExpression(item) {
|
|
279
|
+
const staticHide = this.resolveStaticHide(item);
|
|
280
|
+
const hideExpression = this.resolveHideExpression(item);
|
|
281
|
+
let expressionHide = false;
|
|
282
|
+
if (typeof hideExpression === 'function') {
|
|
283
|
+
try {
|
|
284
|
+
expressionHide = !!hideExpression(this.hideExpressionData() || {});
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
if (!this.columnHideExpressionErrorSet.has(hideExpression)) {
|
|
288
|
+
this.columnHideExpressionErrorSet.add(hideExpression);
|
|
289
|
+
console.error('列隐藏条件执行失败:', error, item);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
const nextItem = {
|
|
294
|
+
...item,
|
|
295
|
+
hideExpression: item.hideExpression ? hideExpression : item.hideExpression,
|
|
296
|
+
hide: !!staticHide || expressionHide,
|
|
297
|
+
};
|
|
298
|
+
Object.defineProperty(nextItem, STATIC_HIDE_KEY, {
|
|
299
|
+
value: staticHide,
|
|
300
|
+
enumerable: false,
|
|
301
|
+
configurable: true,
|
|
302
|
+
});
|
|
303
|
+
Object.defineProperty(nextItem, HIDE_EXPRESSION_KEY, {
|
|
304
|
+
value: hideExpression,
|
|
305
|
+
enumerable: false,
|
|
306
|
+
configurable: true,
|
|
307
|
+
});
|
|
308
|
+
if (Array.isArray(item.children)) {
|
|
309
|
+
nextItem.children = this.resolveColumnHideExpressions(item.children);
|
|
310
|
+
}
|
|
311
|
+
return nextItem;
|
|
312
|
+
}
|
|
313
|
+
resolveHideExpression(item) {
|
|
314
|
+
const configuredHideExpression = item.hideExpression === '' || item.hideExpression == null ? undefined : item.hideExpression;
|
|
315
|
+
const hideExpression = item[HIDE_EXPRESSION_KEY] ?? configuredHideExpression ?? this.getDynamicHide(item.hide);
|
|
316
|
+
if (typeof hideExpression === 'function') {
|
|
317
|
+
return hideExpression;
|
|
318
|
+
}
|
|
319
|
+
if (typeof hideExpression === 'string') {
|
|
320
|
+
return parseFunctions(hideExpression, this);
|
|
321
|
+
}
|
|
322
|
+
return hideExpression;
|
|
323
|
+
}
|
|
324
|
+
resolveStaticHide(item) {
|
|
325
|
+
if (Object.prototype.hasOwnProperty.call(item, STATIC_HIDE_KEY)) {
|
|
326
|
+
return !!item[STATIC_HIDE_KEY];
|
|
327
|
+
}
|
|
328
|
+
return item.hideCol === true || item.hide === true;
|
|
329
|
+
}
|
|
330
|
+
getDynamicHide(hide) {
|
|
331
|
+
if (typeof hide === 'function') {
|
|
332
|
+
return hide;
|
|
333
|
+
}
|
|
334
|
+
if (typeof hide === 'string') {
|
|
335
|
+
const parsedHide = parseFunctions(hide, this);
|
|
336
|
+
return typeof parsedHide === 'function' ? parsedHide : undefined;
|
|
337
|
+
}
|
|
338
|
+
return undefined;
|
|
339
|
+
}
|
|
340
|
+
hasColumnHideExpression(columnDefs = []) {
|
|
341
|
+
return columnDefs.some((item) => {
|
|
342
|
+
if (typeof item[HIDE_EXPRESSION_KEY] === 'function' ||
|
|
343
|
+
typeof item.hideExpression === 'function' ||
|
|
344
|
+
typeof item.hideExpression === 'string' ||
|
|
345
|
+
typeof item.hide === 'function' ||
|
|
346
|
+
typeof item.hide === 'string') {
|
|
347
|
+
return true;
|
|
348
|
+
}
|
|
349
|
+
return Array.isArray(item.children) ? this.hasColumnHideExpression(item.children) : false;
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
getColumnHideSignature(columnDefs = []) {
|
|
353
|
+
return columnDefs
|
|
354
|
+
.map((item, index) => {
|
|
355
|
+
const key = item.colId || item.field || item.headerName || index;
|
|
356
|
+
const children = Array.isArray(item.children) ? this.getColumnHideSignature(item.children) : '';
|
|
357
|
+
return `${key}:${item.hide ? 1 : 0}${children ? `[${children}]` : ''}`;
|
|
358
|
+
})
|
|
359
|
+
.join('|');
|
|
360
|
+
}
|
|
241
361
|
async setRichValue(options = this.toOptions()) {
|
|
242
362
|
let col = options.columnDefs || [];
|
|
243
363
|
try {
|
|
@@ -466,6 +586,7 @@ export class GridComponent {
|
|
|
466
586
|
});
|
|
467
587
|
this.upsert()['subsert'][this.subIndex]['subData'] = dt;
|
|
468
588
|
this.action.saveSignal.set(true);
|
|
589
|
+
this.gridDataChanged.emit();
|
|
469
590
|
}
|
|
470
591
|
handleAddedRows(addedRows) {
|
|
471
592
|
let headerName = '';
|
|
@@ -533,6 +654,7 @@ export class GridComponent {
|
|
|
533
654
|
});
|
|
534
655
|
// console.log('upsert-----',this.upsert())
|
|
535
656
|
this.upsert()['subsert'][this.subIndex]['subData'] = dt;
|
|
657
|
+
this.gridDataChanged.emit();
|
|
536
658
|
this.ajustGridHeight();
|
|
537
659
|
}
|
|
538
660
|
handleDeletedRows(deletedRows) {
|
|
@@ -547,6 +669,7 @@ export class GridComponent {
|
|
|
547
669
|
});
|
|
548
670
|
this.upsert()['subsert'][this.subIndex]['subData'] = dt;
|
|
549
671
|
this.grid.api.applyTransaction({ remove: deletedRows });
|
|
672
|
+
this.gridDataChanged.emit();
|
|
550
673
|
this.ajustGridHeight();
|
|
551
674
|
}
|
|
552
675
|
selectRowsDeleted(deletedRows) {
|
|
@@ -608,6 +731,7 @@ export class GridComponent {
|
|
|
608
731
|
dt.push(value);
|
|
609
732
|
});
|
|
610
733
|
this.upsert()['subsert'][this.subIndex]['subData'] = dt;
|
|
734
|
+
this.gridDataChanged.emit();
|
|
611
735
|
this.ajustGridHeight();
|
|
612
736
|
// console.log('result-----', this.upsert())
|
|
613
737
|
}
|
|
@@ -623,6 +747,7 @@ export class GridComponent {
|
|
|
623
747
|
logtmp: new Map(),
|
|
624
748
|
reference: this.toOptions().reference,
|
|
625
749
|
};
|
|
750
|
+
this.gridDataChanged.emit();
|
|
626
751
|
}
|
|
627
752
|
addRow() {
|
|
628
753
|
if (this.addType() == 'handle') {
|
|
@@ -633,6 +758,7 @@ export class GridComponent {
|
|
|
633
758
|
}
|
|
634
759
|
this.action.updateGridAction({ type: 'add', data: [item] });
|
|
635
760
|
this.grid.api.applyTransaction({ add: [item] });
|
|
761
|
+
this.gridDataChanged.emit();
|
|
636
762
|
}
|
|
637
763
|
else {
|
|
638
764
|
this.addEmit.emit();
|
|
@@ -809,7 +935,7 @@ export class GridComponent {
|
|
|
809
935
|
return columnFilter;
|
|
810
936
|
}
|
|
811
937
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GridComponent, deps: [{ token: i1.ActionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
812
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: GridComponent, isStandalone: true, selector: "custom-grid", inputs: { gridOptions: { classPropertyName: "gridOptions", publicName: "gridOptions", isSignal: true, isRequired: false, transformFunction: null }, selectionKeys: { classPropertyName: "selectionKeys", publicName: "selectionKeys", isSignal: true, isRequired: false, transformFunction: null }, upsert: { classPropertyName: "upsert", publicName: "upsert", isSignal: true, isRequired: false, transformFunction: null }, rowData: { classPropertyName: "rowData", publicName: "rowData", isSignal: true, isRequired: false, transformFunction: null }, searchPrm: { classPropertyName: "searchPrm", publicName: "searchPrm", isSignal: true, isRequired: false, transformFunction: null }, addType: { classPropertyName: "addType", publicName: "addType", isSignal: true, isRequired: false, transformFunction: null }, selectData: { classPropertyName: "selectData", publicName: "selectData", isSignal: true, isRequired: false, transformFunction: null }, showAct: { classPropertyName: "showAct", publicName: "showAct", isSignal: true, isRequired: false, transformFunction: null }, actPos: { classPropertyName: "actPos", publicName: "actPos", isSignal: true, isRequired: false, transformFunction: null }, authLevel: { classPropertyName: "authLevel", publicName: "authLevel", isSignal: true, isRequired: false, transformFunction: null }, showDelete: { classPropertyName: "showDelete", publicName: "showDelete", isSignal: true, isRequired: false, transformFunction: null }, deleteHidden: { classPropertyName: "deleteHidden", publicName: "deleteHidden", isSignal: true, isRequired: false, transformFunction: null }, addHidden: { classPropertyName: "addHidden", publicName: "addHidden", isSignal: true, isRequired: false, transformFunction: null }, gridDisable: { classPropertyName: "gridDisable", publicName: "gridDisable", isSignal: true, isRequired: false, transformFunction: null }, addSort: { classPropertyName: "addSort", publicName: "addSort", isSignal: true, isRequired: false, transformFunction: null }, subSaveVisible: { classPropertyName: "subSaveVisible", publicName: "subSaveVisible", isSignal: true, isRequired: false, transformFunction: null }, subSaveHidden: { classPropertyName: "subSaveHidden", publicName: "subSaveHidden", isSignal: true, isRequired: false, transformFunction: null }, subSaveLabel: { classPropertyName: "subSaveLabel", publicName: "subSaveLabel", isSignal: true, isRequired: false, transformFunction: null }, subSaveDisabled: { classPropertyName: "subSaveDisabled", publicName: "subSaveDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { deleteEmit: "deleteEmit", addEmit: "addEmit", subSaveEmit: "subSaveEmit" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "grid", first: true, predicate: AgGridAngular, descendants: true }, { propertyName: "gridRef", first: true, predicate: AgGridAngular, descendants: true, read: ElementRef }, { propertyName: "containerRef", first: true, predicate: ["gridContainer"], descendants: true }], ngImport: i0, template: "@if (initGrid) {\n\t<div\n\t\t#gridContainer\n\t\t[class]=\"\n\t\t\t(toOptions().treeDataField ? 'tree-grid ' : '') +\n\t\t\t'grid-container w-full flex justify-between ' +\n\t\t\t(actPos() == 'bottom' ? 'flex-col' : 'flex-col-reverse')\n\t\t\">\n\t\t<ag-grid-angular\n\t\t\t[theme]=\"myTheme()\"\n\t\t\t[columnDefs]=\"columnDefs\"\n\t\t\t[gridOptions]=\"toOptions()\"\n\t\t\t[localeText]=\"localeText\"\n\t\t\t[components]=\"components\"\n\t\t\t[suppressDragLeaveHidesColumns]=\"true\"\n\t\t\t[undoRedoCellEditing]=\"toOptions().undoRedoCellEditing\"\n\t\t\t[undoRedoCellEditingLimit]=\"toOptions().undoRedoCellEditingLimit\"\n\t\t\t[rowBuffer]=\"30\"\n\t\t\t(cellValueChanged)=\"cellValueChanged($event)\"\n\t\t\t(selectionChanged)=\"onSelectionChanged($event)\"\n\t\t\t(rowGroupOpened)=\"onRowGroupOpened()\"\n\t\t\t(gridReady)=\"onGridReady($event)\"\n\t\t\t(rowDragEnd)=\"onRowDragEnd($event)\"\n\t\t\t(rowDragEnter)=\"rowDragEnter($event)\"\n\t\t\t[singleClickEdit]=\"singleClickEdit()\" />\n\t\t@if (showAct() && authLevel() >= 3 && ((addType() != 'none' && !addHidden()) || (showDelete() && !deleteHidden()) || (subSaveVisible() && !subSaveHidden()))) {\n\t\t\t@if (showHorizontal) {\n\t\t\t\t<div class=\"w-full border-t border-gray-300\"></div>\n\t\t\t}\n\t\t\t<div class=\"flex justify-end py-[5px] pr-[8px]\">\n\t\t\t\t@if (subSaveVisible() && !subSaveHidden()) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\ticon=\"pi pi-cloud-upload\"\n\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\tseverity=\"primary\"\n\t\t\t\t\t\t[disabled]=\"subSaveDisabled()\"\n\t\t\t\t\t\t(onClick)=\"subSaveEmit.emit()\" />\n\t\t\t\t}\n\t\t\t\t@if (addType() != 'none' && !addHidden()) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\ticon=\"pi pi-plus\"\n\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\tseverity=\"success\"\n\t\t\t\t\t\t[disabled]=\"gridDisable()\"\n\t\t\t\t\t\t(onClick)=\"addRow()\" />\n\t\t\t\t}\n\t\t\t\t@if (showDelete() && !deleteHidden()) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\ticon=\"pi pi-trash\"\n\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\tseverity=\"danger\"\n\t\t\t\t\t\t[disabled]=\"gridDisable()\"\n\t\t\t\t\t\t(onClick)=\"delRows()\" />\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n", styles: ["@charset \"UTF-8\";:host ::ng-deep .ag-grid .ag-body{overflow-y:scroll!important;scrollbar-gutter:stable;transition:height .2s ease}:host ::ng-deep .ag-grid{transition:height .2s ease}:host ::ng-deep .ag-root-wrapper{overflow:initial!important}:host ::ng-deep .tree-grid .ag-body-vertical-scroll{width:5px!important;max-width:5px!important;min-width:5px!important;display:block!important}:host ::ng-deep .cell-wrap-text{white-space:normal!important;word-break:break-word!important;line-height:1.5!important;padding:10px 15px}:host ::ng-deep .cell-textarea-wrap-text{display:flex;align-items:center;white-space:pre-wrap!important;word-break:break-word!important}:host ::ng-deep .cell-textarea-wrap-text .ag-cell-wrapper,:host ::ng-deep .cell-textarea-wrap-text .ag-cell-value{width:100%;white-space:pre-wrap!important;word-break:break-word!important;line-height:1.4}:host ::ng-deep .upload-renderer-cell{line-height:normal!important;padding-top:4px;padding-bottom:4px}:host ::ng-deep .editable-column-header .ag-header-cell-text:after{content:\"\\2710\";padding-left:6px;color:var(--p-primary-color)}:host ::ng-deep .rowSpan .ag-cell{border-right:1px solid color-mix(in srgb,transparent,var(--ag-foreground-color) 15%)}\n"], dependencies: [{ kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "hidePaddedHeaderRows", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "animateColumnResizing", "components", "editType", "suppressStartEditOnTab", "getFullRowEditValidationErrors", "invalidEditValueMode", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "findSearchValue", "findOptions", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "advancedFilterParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableFilterHandlers", "filterHandlers", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "suppressOverlays", "overlayComponent", "overlayComponentParams", "overlayComponentSelector", "activeOverlay", "activeOverlayParams", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "formulaDataSource", "formulaFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableCellSpan", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "refreshAfterGroupEdit", "rowDragInsertDelay", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "treeDataChildrenField", "treeDataParentIdField", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "groupHierarchyConfig", "pinnedTopRowData", "pinnedBottomRowData", "enableRowPinning", "isRowPinnable", "isRowPinned", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "rowNumbers", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "themeCssLayer", "styleNonce", "themeStyleContainer", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "ssrmExpandAllAffectsAllRows", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow", "isRowValidDropPosition"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnsReset", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "bulkEditingStarted", "bulkEditingStopped", "batchEditingStarted", "batchEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "filterUiChanged", "floatingFilterUiChanged", "advancedFilterBuilderVisibleChanged", "findChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "rowResizeStarted", "rowResizeEnded", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "pinnedRowsChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }] }); }
|
|
938
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: GridComponent, isStandalone: true, selector: "custom-grid", inputs: { gridOptions: { classPropertyName: "gridOptions", publicName: "gridOptions", isSignal: true, isRequired: false, transformFunction: null }, selectionKeys: { classPropertyName: "selectionKeys", publicName: "selectionKeys", isSignal: true, isRequired: false, transformFunction: null }, upsert: { classPropertyName: "upsert", publicName: "upsert", isSignal: true, isRequired: false, transformFunction: null }, rowData: { classPropertyName: "rowData", publicName: "rowData", isSignal: true, isRequired: false, transformFunction: null }, hideExpressionData: { classPropertyName: "hideExpressionData", publicName: "hideExpressionData", isSignal: true, isRequired: false, transformFunction: null }, hideExpressionVersion: { classPropertyName: "hideExpressionVersion", publicName: "hideExpressionVersion", isSignal: true, isRequired: false, transformFunction: null }, searchPrm: { classPropertyName: "searchPrm", publicName: "searchPrm", isSignal: true, isRequired: false, transformFunction: null }, addType: { classPropertyName: "addType", publicName: "addType", isSignal: true, isRequired: false, transformFunction: null }, selectData: { classPropertyName: "selectData", publicName: "selectData", isSignal: true, isRequired: false, transformFunction: null }, showAct: { classPropertyName: "showAct", publicName: "showAct", isSignal: true, isRequired: false, transformFunction: null }, actPos: { classPropertyName: "actPos", publicName: "actPos", isSignal: true, isRequired: false, transformFunction: null }, authLevel: { classPropertyName: "authLevel", publicName: "authLevel", isSignal: true, isRequired: false, transformFunction: null }, showDelete: { classPropertyName: "showDelete", publicName: "showDelete", isSignal: true, isRequired: false, transformFunction: null }, deleteHidden: { classPropertyName: "deleteHidden", publicName: "deleteHidden", isSignal: true, isRequired: false, transformFunction: null }, addHidden: { classPropertyName: "addHidden", publicName: "addHidden", isSignal: true, isRequired: false, transformFunction: null }, gridDisable: { classPropertyName: "gridDisable", publicName: "gridDisable", isSignal: true, isRequired: false, transformFunction: null }, addSort: { classPropertyName: "addSort", publicName: "addSort", isSignal: true, isRequired: false, transformFunction: null }, subSaveVisible: { classPropertyName: "subSaveVisible", publicName: "subSaveVisible", isSignal: true, isRequired: false, transformFunction: null }, subSaveHidden: { classPropertyName: "subSaveHidden", publicName: "subSaveHidden", isSignal: true, isRequired: false, transformFunction: null }, subSaveLabel: { classPropertyName: "subSaveLabel", publicName: "subSaveLabel", isSignal: true, isRequired: false, transformFunction: null }, subSaveDisabled: { classPropertyName: "subSaveDisabled", publicName: "subSaveDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { deleteEmit: "deleteEmit", addEmit: "addEmit", gridDataChanged: "gridDataChanged", subSaveEmit: "subSaveEmit" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "grid", first: true, predicate: AgGridAngular, descendants: true }, { propertyName: "gridRef", first: true, predicate: AgGridAngular, descendants: true, read: ElementRef }, { propertyName: "containerRef", first: true, predicate: ["gridContainer"], descendants: true }], ngImport: i0, template: "@if (initGrid) {\n\t<div\n\t\t#gridContainer\n\t\t[class]=\"\n\t\t\t(toOptions().treeDataField ? 'tree-grid ' : '') +\n\t\t\t'grid-container w-full flex justify-between ' +\n\t\t\t(actPos() == 'bottom' ? 'flex-col' : 'flex-col-reverse')\n\t\t\">\n\t\t<ag-grid-angular\n\t\t\t[theme]=\"myTheme()\"\n\t\t\t[columnDefs]=\"columnDefs\"\n\t\t\t[gridOptions]=\"toOptions()\"\n\t\t\t[localeText]=\"localeText\"\n\t\t\t[components]=\"components\"\n\t\t\t[suppressDragLeaveHidesColumns]=\"true\"\n\t\t\t[undoRedoCellEditing]=\"toOptions().undoRedoCellEditing\"\n\t\t\t[undoRedoCellEditingLimit]=\"toOptions().undoRedoCellEditingLimit\"\n\t\t\t[rowBuffer]=\"30\"\n\t\t\t(cellValueChanged)=\"cellValueChanged($event)\"\n\t\t\t(selectionChanged)=\"onSelectionChanged($event)\"\n\t\t\t(rowGroupOpened)=\"onRowGroupOpened()\"\n\t\t\t(gridReady)=\"onGridReady($event)\"\n\t\t\t(rowDragEnd)=\"onRowDragEnd($event)\"\n\t\t\t(rowDragEnter)=\"rowDragEnter($event)\"\n\t\t\t[singleClickEdit]=\"singleClickEdit()\" />\n\t\t@if (showAct() && authLevel() >= 3 && ((addType() != 'none' && !addHidden()) || (showDelete() && !deleteHidden()) || (subSaveVisible() && !subSaveHidden()))) {\n\t\t\t@if (showHorizontal) {\n\t\t\t\t<div class=\"w-full border-t border-gray-300\"></div>\n\t\t\t}\n\t\t\t<div class=\"flex justify-end py-[5px] pr-[8px]\">\n\t\t\t\t@if (subSaveVisible() && !subSaveHidden()) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\ticon=\"pi pi-cloud-upload\"\n\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\tseverity=\"primary\"\n\t\t\t\t\t\t[disabled]=\"subSaveDisabled()\"\n\t\t\t\t\t\t(onClick)=\"subSaveEmit.emit()\" />\n\t\t\t\t}\n\t\t\t\t@if (addType() != 'none' && !addHidden()) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\ticon=\"pi pi-plus\"\n\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\tseverity=\"success\"\n\t\t\t\t\t\t[disabled]=\"gridDisable()\"\n\t\t\t\t\t\t(onClick)=\"addRow()\" />\n\t\t\t\t}\n\t\t\t\t@if (showDelete() && !deleteHidden()) {\n\t\t\t\t\t<p-button\n\t\t\t\t\t\ticon=\"pi pi-trash\"\n\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\tseverity=\"danger\"\n\t\t\t\t\t\t[disabled]=\"gridDisable()\"\n\t\t\t\t\t\t(onClick)=\"delRows()\" />\n\t\t\t\t}\n\t\t\t</div>\n\t\t}\n\t</div>\n}\n", styles: ["@charset \"UTF-8\";:host ::ng-deep .ag-grid .ag-body{overflow-y:scroll!important;scrollbar-gutter:stable;transition:height .2s ease}:host ::ng-deep .ag-grid{transition:height .2s ease}:host ::ng-deep .ag-root-wrapper{overflow:initial!important}:host ::ng-deep .tree-grid .ag-body-vertical-scroll{width:5px!important;max-width:5px!important;min-width:5px!important;display:block!important}:host ::ng-deep .cell-wrap-text{white-space:normal!important;word-break:break-word!important;line-height:1.5!important;padding:10px 15px}:host ::ng-deep .cell-textarea-wrap-text{display:flex;align-items:center;white-space:pre-wrap!important;word-break:break-word!important}:host ::ng-deep .cell-textarea-wrap-text .ag-cell-wrapper,:host ::ng-deep .cell-textarea-wrap-text .ag-cell-value{width:100%;white-space:pre-wrap!important;word-break:break-word!important;line-height:1.4}:host ::ng-deep .upload-renderer-cell{line-height:normal!important;padding-top:4px;padding-bottom:4px}:host ::ng-deep .editable-column-header .ag-header-cell-text:after{content:\"\\2710\";padding-left:6px;color:var(--p-primary-color)}:host ::ng-deep .rowSpan .ag-cell{border-right:1px solid color-mix(in srgb,transparent,var(--ag-foreground-color) 15%)}\n"], dependencies: [{ kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "hidePaddedHeaderRows", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "animateColumnResizing", "components", "editType", "suppressStartEditOnTab", "getFullRowEditValidationErrors", "invalidEditValueMode", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "findSearchValue", "findOptions", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "advancedFilterParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableFilterHandlers", "filterHandlers", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "suppressOverlays", "overlayComponent", "overlayComponentParams", "overlayComponentSelector", "activeOverlay", "activeOverlayParams", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "formulaDataSource", "formulaFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableCellSpan", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "refreshAfterGroupEdit", "rowDragInsertDelay", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "treeDataChildrenField", "treeDataParentIdField", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "groupHierarchyConfig", "pinnedTopRowData", "pinnedBottomRowData", "enableRowPinning", "isRowPinnable", "isRowPinned", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "rowNumbers", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "themeCssLayer", "styleNonce", "themeStyleContainer", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "ssrmExpandAllAffectsAllRows", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow", "isRowValidDropPosition"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnsReset", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "bulkEditingStarted", "bulkEditingStopped", "batchEditingStarted", "batchEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "filterUiChanged", "floatingFilterUiChanged", "advancedFilterBuilderVisibleChanged", "findChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "rowResizeStarted", "rowResizeEnded", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "pinnedRowsChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }] }); }
|
|
813
939
|
}
|
|
814
940
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GridComponent, decorators: [{
|
|
815
941
|
type: Component,
|
|
@@ -827,4 +953,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
827
953
|
type: HostListener,
|
|
828
954
|
args: ['window:resize']
|
|
829
955
|
}] } });
|
|
830
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL2dyaWQvZ3JpZC9ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvZ3JpZC9ncmlkL2dyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixNQUFNLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBd0IxRCxNQUFNLGFBQWEsR0FBZ0I7SUFDbEMsOEJBQThCO0lBQzlCLGFBQWEsRUFBRTtRQUNkLElBQUksRUFBRSxD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blx0aW5wdXQsXG5cdGVmZmVjdCxcblx0aW5qZWN0LFxuXHRjb21wdXRlZCxcblx0dW50cmFja2VkLFxuXHRvdXRwdXQsXG5cdE5nWm9uZSxcblx0UmVuZGVyZXIyLFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0SG9zdExpc3RlbmVyLFxuXHRzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXV0b0dyb3VwQ29sdW1uRGVmLCBDZWxsVmFsdWVDaGFuZ2VkRXZlbnQsIENvbERlZiwgR3JpZE9wdGlvbnMgYXMgUmF3R3JpZE9wdGlvbnMsIFJvd0RyYWdFbmRFdmVudCB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IEFnR3JpZEFuZ3VsYXIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xuaW1wb3J0IHsgVGhlbWVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS90aGVtZUNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2FjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9pMThuLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VhcmNoLENvbHVtbkZpbHRlciB9IGZyb20gJy4uLy4uL2FtL2FtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBncmlkVXRpbHMgfSBmcm9tICcuLi9ncmlkLXV0aWxzJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IGxhc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgY29tcG9uZW50cywgQ0xJRU5UTElNSVQgfSBmcm9tICcuLi9tb2NrLWRhdGEnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRPcHRpb25zIGV4dGVuZHMgUmF3R3JpZE9wdGlvbnMge1xuXHRzZXJ2ZXJGdW5jPzogKHNlYXJjaDogU2VhcmNoKSA9PiBPYnNlcnZhYmxlPGFueT47XG5cdGNsaWVudEZ1bmM/OiAoc2VhcmNoOiBTZWFyY2gpID0+IE9ic2VydmFibGU8YW55Pjtcblx0c2hvd1NlYXJjaD86IGJvb2xlYW47XG5cdHByZVNlYXJjaD86IFNlYXJjaDtcblx0dHJlZURhdGFGaWVsZD86IHN0cmluZztcblx0dHJlZUxldmVsPzogbnVtYmVyO1xuXHRoZWFkZXJIZWlnaHQ/OiBudW1iZXI7XG5cdHNjcm9sbEhlaWdodD86IHN0cmluZztcblx0c2hvd0luZGV4PzogYm9vbGVhbjtcblx0dW5kb1JlZG9DZWxsRWRpdGluZz86IGJvb2xlYW47XG5cdHVuZG9SZWRvQ2VsbEVkaXRpbmdMaW1pdD86IG51bWJlcjtcblx0bWFpbkZpZWxkPzogc3RyaW5nO1xuXHRtb2RlbE5hbWU/OiBzdHJpbmc7XG5cdGZrPzogc3RyaW5nO1xuXHRkcmFnU29ydD86IHN0cmluZztcblx0c2VsZWN0aW9uTW9kZT86ICdub25lJyB8ICdzaW5nbGUnIHwgJ211bHRpcGxlJztcblx0ZGF0YUtleT86IHN0cmluZztcblx0cmVmZXJlbmNlPzogc3RyaW5nO1xuXHRhZGREYXRhQ2I/OiAoKSA9PiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb246IEdyaWRPcHRpb25zID0ge1xuXHQvLyBwb3B1cFBhcmVudDogZG9jdW1lbnQuYm9keSxcblx0ZGVmYXVsdENvbERlZjoge1xuXHRcdGZsZXg6IDEsXG5cdFx0bWluV2lkdGg6IDEwMCxcblx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0ZmlsdGVyOiBmYWxzZSxcblx0fSxcblx0cm93U2VsZWN0aW9uOiB7IG1vZGU6ICdtdWx0aVJvdycgfSxcblx0cm93TW9kZWxUeXBlOiAnc2VydmVyU2lkZScsXG5cdGNlbGxTZWxlY3Rpb246IHtcblx0XHRoYW5kbGU6IHtcblx0XHRcdG1vZGU6ICdyYW5nZScsXG5cdFx0fSxcblx0fSxcblx0ZW5hYmxlQ2hhcnRzOiB0cnVlLFxuXHR1bmRvUmVkb0NlbGxFZGl0aW5nOiB0cnVlLFxuXHR1bmRvUmVkb0NlbGxFZGl0aW5nTGltaXQ6IDIwLFxufTtcblxuY29uc3QgZGVmYXVsdFNvcnRzID0gW3sgZmllbGQ6ICdjcmVhdGVkQXQnLCBpc0FzYzogZmFsc2UgfV07XG5mdW5jdGlvbiBmaW5kTGFzdEluZGV4KGFycmF5OiBhbnlbXSwgcHJlZGljYXRlOiBhbnksIHRoaXNBcmc6IGFueSkge1xuXHRmb3IgKGxldCBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRpZiAocHJlZGljYXRlLmNhbGwodGhpc0FyZywgYXJyYXlbaV0sIGksIGFycmF5KSkge1xuXHRcdFx0cmV0dXJuIGk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiAtMTtcbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnY3VzdG9tLWdyaWQnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbQWdHcmlkQW5ndWxhciwgQnV0dG9uTW9kdWxlXSxcblx0dGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybDogJy4vZ3JpZC5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRDb21wb25lbnQge1xuXHRAVmlld0NoaWxkKEFnR3JpZEFuZ3VsYXIpIGdyaWQhOiBBZ0dyaWRBbmd1bGFyO1xuXHRAVmlld0NoaWxkKEFnR3JpZEFuZ3VsYXIsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBncmlkUmVmITogRWxlbWVudFJlZjtcblx0QFZpZXdDaGlsZCgnZ3JpZENvbnRhaW5lcicpIGNvbnRhaW5lclJlZiE6IEVsZW1lbnRSZWY7XG5cdGdyaWRPcHRpb25zID0gaW5wdXQ8R3JpZE9wdGlvbnM+KHt9KTtcblx0c2VsZWN0aW9uS2V5cyA9IGlucHV0PGFueVtdPihbXSk7XG5cdHRvT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+XG5cdFx0dGhpcy53aXRoR3JpZENvbnRleHQoZ3JpZFV0aWxzLm1lcmdlT3B0aW9ucyh7IC4uLmRlZmF1bHRPcHRpb24sIC4uLnRoaXMuZ3JpZE9wdGlvbnMoKSB9LCB1bnRyYWNrZWQoKCkgPT4gdGhpcy5zZWFyY2hQcm0oKSkubGltaXQsIHRoaXMuYWN0aW9uKSksXG5cdCk7XG5cdHRoZW1lQ29uZmlnID0gaW5qZWN0KFRoZW1lQ29uZmlnU2VydmljZSk7XG5cdGxvY2FsZVRleHQ6IGFueTtcblx0aTE4blNlcnZpY2UgPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuXHRteVRoZW1lID0gY29tcHV0ZWQoKCkgPT4gZ3JpZFV0aWxzLmdldFRoZW1lKHRoaXMudGhlbWVDb25maWcpKTtcblx0Y29tcG9uZW50cyA9IGNvbXBvbmVudHM7XG5cdGNvbHVtbkRlZnM6IENvbERlZltdID0gW107XG5cdGluaXRHcmlkID0gdHJ1ZTtcblx0Y29udGVudE1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRtYWluRmllbGQhOiBzdHJpbmc7XG5cdG1vZGVsTmFtZSE6IHN0cmluZztcblx0dXBzZXJ0ID0gaW5wdXQ8YW55PigpO1xuXHRzdWJJbmRleCE6IG51bWJlcjtcblx0cm93RGF0YSA9IGlucHV0PGFueT4odW5kZWZpbmVkKTtcblx0c2VhcmNoUHJtID0gaW5wdXQ8U2VhcmNoPih7fSk7XG5cdHJhd1BybT86IFNlYXJjaDtcblx0ZGVsZXRlRW1pdCA9IG91dHB1dDxudW1iZXJbXT4oKTtcblx0YWRkRW1pdCA9IG91dHB1dCgpO1xuXHRhZGRUeXBlID0gaW5wdXQ8J2hhbmRsZScgfCAnc2VsZWN0JyB8ICdub25lJz4oKTtcblx0c2VsZWN0RGF0YSA9IGlucHV0PGFueVtdPigpO1xuXHRzaG93QWN0ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cdGFjdFBvcyA9IGlucHV0PCd0b3AnIHwgJ2JvdHRvbSc+KCdib3R0b20nKTtcblx0YXV0aExldmVsID0gaW5wdXQ8bnVtYmVyPigtMSk7XG5cdGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG5cdHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cdG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuXHRjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXHRzaG93RGVsZXRlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cdGRlbGV0ZUhpZGRlbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblx0YWRkSGlkZGVuID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXHRncmlkRGlzYWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblx0YWRkU29ydCA9IGlucHV0PHN0cmluZz4oKTtcblx0c3ViU2F2ZVZpc2libGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cdHN1YlNhdmVIaWRkZW4gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cdHN1YlNhdmVMYWJlbCA9IGlucHV0PHN0cmluZz4oJ+S/neWtmCcpO1xuXHRzdWJTYXZlRGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cdHN1YlNhdmVFbWl0ID0gb3V0cHV0KCk7XG5cblx0cmljaE11bHRNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblx0aG9yaXpvbnRhbFNjcm9sbEJhck9ic2VydmVyOiBhbnk7XG5cdGhvcml6b250YWxTY3JvbGxCYXJIZWlnaHQgPSAwO1xuXHR2ZXJ0aWNhbFNjcm9sbEJhck9ic2VydmVyOiBhbnk7XG5cdHZlcnRpY2FsU2Nyb2xsQmFyV2lkdGggPSAwO1xuXHRncmlkSGVpZ2h0ID0gMDtcblx0c2VsZWN0ZWRSb3dzID0gc2lnbmFsPGFueVtdPihbXSk7XG5cdG5vUm93cyA9IHRydWU7XG5cdHNob3dIb3Jpem9udGFsID0gZmFsc2U7XG5cdGRyYWdCZWZvcmVJbmRleCA9IC0xO1xuXHRzaW5nbGVDbGlja0VkaXQgPSBzaWduYWwoZmFsc2UpO1xuXHRhdXRvR3JvdXBDb2x1bW5EZWY6IEF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICBtaW5XaWR0aDogMTgwLFxuICB9O1xuXHRwcml2YXRlIHNlYXJjaFBybVN1YjogYW55O1xuXHRwcml2YXRlIGNvbHVtbkRlZnNMb2FkSWQgPSAwO1xuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcblx0b25SZXNpemUoKSB7XG5cdFx0dGhpcy5zZXRTY3JvbGxIZWlnaHQoKTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aW9uOiBBY3Rpb25TZXJ2aWNlKSB7XG5cdFx0dGhpcy5zaW5nbGVDbGlja0VkaXQuc2V0KHRoaXMuaXNNb2JpbGVPclRhYmxldEJyb3dzZXIoKSk7XG5cdFx0dGhpcy5zZWFyY2hQcm1TdWIgPSB0b09ic2VydmFibGUodGhpcy5zZWFyY2hQcm0pLnN1YnNjcmliZSgoc2VhcmNoUHJtKSA9PiB7XG5cdFx0XHRpZiAoc2VhcmNoUHJtLm1vZGVsTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMucmF3UHJtID0gc2VhcmNoUHJtO1xuXHRcdFx0XHR0aGlzLnNlYXJjaFBybVN1Yi51bnN1YnNjcmliZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMudG9PcHRpb25zKCk7XG5cdFx0XHRcdHZvaWQgdGhpcy5yZWZyZXNoQ29sdW1uRGVmcyhvcHRpb25zKTtcblx0XHRcdFx0dGhpcy5tYWluRmllbGQgPSBvcHRpb25zLm1haW5GaWVsZCE7XG5cdFx0XHRcdHRoaXMubW9kZWxOYW1lID0gb3B0aW9ucy5tb2RlbE5hbWUhO1xuXHRcdFx0XHRpZiAoIXRoaXMudXBzZXJ0KCk/LnN1YnNlcnQ/LmZpbmQoKHY6IGFueSkgPT4gdi5zdWJNb2RlbE5hbWUgPT09IHRoaXMubW9kZWxOYW1lKSkge1xuXHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnQ/LnB1c2goe1xuXHRcdFx0XHRcdFx0c3ViTW9kZWxOYW1lOiBvcHRpb25zLm1vZGVsTmFtZSxcblx0XHRcdFx0XHRcdGZrOiBvcHRpb25zLmZrLFxuXHRcdFx0XHRcdFx0c3ViRGF0YTogW10sXG5cdFx0XHRcdFx0XHRtYXB0bXA6IG5ldyBNYXAoKSxcblx0XHRcdFx0XHRcdGxvZ3RtcDogbmV3IE1hcCgpLFxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlOiBvcHRpb25zLnJlZmVyZW5jZSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnN1YkluZGV4ID0gdGhpcy51cHNlcnQoKT8uc3Vic2VydD8uZmluZEluZGV4KCh2OiBhbnkpID0+IHYuc3ViTW9kZWxOYW1lID09PSB0aGlzLm1vZGVsTmFtZSk7XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuYWN0aW9uLnNlYXJjaE1vbml0b3IodGhpcy50b09wdGlvbnMoKS5tb2RlbE5hbWUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuZ2V0RGF0YSgpO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCByb3dEYXRhID0gdGhpcy5yb3dEYXRhKCk7XG5cdFx0XHRpZiAocm93RGF0YSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvcHRpb25zID0gdGhpcy50b09wdGlvbnMoKTtcblx0XHRcdFx0aWYgKHRoaXMuaGFzRHluYW1pY1NlbGVjdERhdGFDb2x1bW4ob3B0aW9ucykpIHtcblx0XHRcdFx0XHR2b2lkIHRoaXMucmVmcmVzaENvbHVtbkRlZnMob3B0aW9ucyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9wdGlvbnMucm93TW9kZWxUeXBlID09PSAnc2VydmVyU2lkZScgJiYgb3B0aW9ucy5zZXJ2ZXJGdW5jKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9wdGlvbnMucm93TW9kZWxUeXBlID0gJ2NsaWVudFNpZGUnO1xuXHRcdFx0XHRvcHRpb25zLmNsaWVudEZ1bmMgPSAoKSA9PiBvZih7IGRhdGE6IHJvd0RhdGEsIHRvdGFsTnVtOiByb3dEYXRhPy5sZW5ndGggfSk7XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZ2V0Q2xpZW50RGF0YSh1bmRlZmluZWQpO1xuXHRcdFx0XHR9LCAxMDApO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5zZWxlY3REYXRhKCkgJiYgdGhpcy5zZWxlY3REYXRhKCkhLmxlbmd0aCA+IDAgJiYgdGhpcy5ncmlkKSB7XG5cdFx0XHRcdFx0dGhpcy5oYW5kbGVBZGRlZFJvd3ModGhpcy5zZWxlY3REYXRhKCkhKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy50b09wdGlvbnMoKS5wcmVTZWFyY2ggJiZcblx0XHRcdFx0XHR0aGlzLmFjdGlvbi5zZXRTZWFyY2goeyBjb2x1bW5GaWx0ZXJzOiB0aGlzLnRvT3B0aW9ucygpLnByZVNlYXJjaCEuY29sdW1uRmlsdGVycyB9LCB0aGlzLnRvT3B0aW9ucygpLm1vZGVsTmFtZSk7XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvbi5nZXRBY3Rpb24oKTtcblx0XHRcdFx0aWYgKGFjdGlvbj8udHlwZSA9PT0gJ2V4cG9ydCcpIHtcblx0XHRcdFx0XHR0aGlzLmdyaWQuYXBpLmV4cG9ydERhdGFBc0V4Y2VsKHsgZmlsZU5hbWU6IHRoaXMubW9kZWxOYW1lIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0dGhpcy5lZGl0aW5nRml4KCk7XG5cdH1cblxuXHRwcml2YXRlIHdpdGhHcmlkQ29udGV4dChvcHRpb25zOiBhbnkpOiBhbnkge1xuXHRcdHRoaXMuZ3JpZERpc2FibGUoKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4ub3B0aW9ucyxcblx0XHRcdGNvbnRleHQ6IHtcblx0XHRcdFx0Li4uKG9wdGlvbnMuY29udGV4dCB8fCB7fSksXG5cdFx0XHRcdGdyaWREaXNhYmxlZDogKCkgPT4gdGhpcy5ncmlkRGlzYWJsZSgpLFxuXHRcdFx0XHRncmlkOiAoKSA9PiB0aGlzLFxuXHRcdFx0fSxcblx0XHR9O1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5pMThuU2VydmljZS5jaGFuZ2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuZ3JpZCAmJiB0aGlzLmdyaWQuYXBpLmRlc3Ryb3koKTtcblx0XHRcdHRoaXMuaW5pdEdyaWQgPSBmYWxzZTtcblx0XHRcdHRoaXMubG9jYWxlVGV4dCA9IGdyaWRVdGlscy5nZXRMb2NhbFRleHQocmVzKTtcblx0XHRcdHRoaXMuY29sdW1uRGVmcyA9IGdyaWRVdGlscy5oYW5kbGVJMThuS2V5KHRoaXMudG9PcHRpb25zKCkuY29sdW1uRGVmcyEsIHRoaXMuaTE4blNlcnZpY2UpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuaW5pdEdyaWQgPSB0cnVlO1xuXHRcdFx0fSwgMTAwKTtcblx0XHR9KTtcblx0XHR0aGlzLmxvY2FsZVRleHQgPSBncmlkVXRpbHMuZ2V0TG9jYWxUZXh0KHRoaXMuaTE4blNlcnZpY2UuY3VycmVudExhbmcpO1xuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCkge31cblxuXHRuZ09uRGVzdHJveSgpIHtcblx0XHR0aGlzLnNlYXJjaFBybVN1Yj8udW5zdWJzY3JpYmUoKTtcblx0XHRpZiAodGhpcy5ob3Jpem9udGFsU2Nyb2xsQmFyT2JzZXJ2ZXIpIHtcblx0XHRcdHRoaXMuaG9yaXpvbnRhbFNjcm9sbEJhck9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMudmVydGljYWxTY3JvbGxCYXJPYnNlcnZlcikge1xuXHRcdFx0dGhpcy52ZXJ0aWNhbFNjcm9sbEJhck9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHR9XG5cdH1cblxuXHRnZXRHcmlkKCk6IEFnR3JpZEFuZ3VsYXIge1xuXHRcdHJldHVybiB0aGlzLmdyaWQ7XG5cdH1cblxuXHRwcml2YXRlIGlzTW9iaWxlT3JUYWJsZXRCcm93c2VyKCkge1xuXHRcdGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSAndW5kZWZpbmVkJykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcblx0XHRjb25zdCBpc1Bob25lID0gL2FuZHJvaWQuKm1vYmlsZXxpcGhvbmV8aXBvZHx3aW5kb3dzIHBob25lfGJsYWNrYmVycnl8aWVtb2JpbGV8b3BlcmEgbWluaS8udGVzdCh1YSk7XG5cdFx0Y29uc3QgaXNUYWJsZXQgPVxuXHRcdFx0L2lwYWR8dGFibGV0fHBsYXlib29rfHNpbGt8KGFuZHJvaWQoPyEuKm1vYmlsZSkpLy50ZXN0KHVhKSB8fFxuXHRcdFx0KG5hdmlnYXRvci5wbGF0Zm9ybSA9PT0gJ01hY0ludGVsJyAmJiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAxKTtcblx0XHRyZXR1cm4gaXNQaG9uZSB8fCBpc1RhYmxldDtcblx0fVxuXG5cdG9uR3JpZFJlYWR5KGU6IGFueSkge1xuXHRcdHRoaXMuaW5pdEdyaWRIZWlnaHQoKTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMuZ2V0RGF0YSgpO1xuXHRcdH0sIDEwMCk7XG5cdH1cblxuXHRvblNlbGVjdGlvbkNoYW5nZWQoZXZlbnQ6IGFueSk6IGFueSB7XG5cdFx0dGhpcy5zZWxlY3RlZFJvd3Muc2V0KGdyaWRVdGlscy5jYWxjUm93SWRzKGV2ZW50LmFwaSwgdGhpcy50b09wdGlvbnMoKT8ucm93TW9kZWxUeXBlID09ICdzZXJ2ZXJTaWRlJykpO1xuXHR9XG5cblx0b25Sb3dHcm91cE9wZW5lZCgpIHtcblx0XHR0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG5cdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmFqdXN0R3JpZEhlaWdodCgpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGhhc0R5bmFtaWNTZWxlY3REYXRhQ29sdW1uKG9wdGlvbnM6IEdyaWRPcHRpb25zID0gdGhpcy50b09wdGlvbnMoKSkge1xuXHRcdHJldHVybiAhIW9wdGlvbnMuY29sdW1uRGVmcz8uc29tZSgoaXRlbTogYW55KSA9PiBpdGVtPy5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0RGF0YScpICYmIHR5cGVvZiBpdGVtLnNlbGVjdERhdGEgPT09ICdmdW5jdGlvbicpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyByZWZyZXNoQ29sdW1uRGVmcyhvcHRpb25zOiBHcmlkT3B0aW9ucyA9IHRoaXMudG9PcHRpb25zKCkpIHtcblx0XHRjb25zdCBsb2FkSWQgPSArK3RoaXMuY29sdW1uRGVmc0xvYWRJZDtcblx0XHRjb25zdCBjb2x1bW5EZWZzID0gYXdhaXQgdGhpcy5zZXRSaWNoVmFsdWUob3B0aW9ucyk7XG5cdFx0aWYgKGxvYWRJZCAhPT0gdGhpcy5jb2x1bW5EZWZzTG9hZElkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuY29sdW1uRGVmcyA9IGdyaWRVdGlscy5oYW5kbGVJMThuS2V5KGNvbHVtbkRlZnMsIHRoaXMuaTE4blNlcnZpY2UpO1xuXHRcdGlmICh0aGlzLmdyaWQ/LmFwaSkge1xuXHRcdFx0dGhpcy5ncmlkLmFwaS5zZXRHcmlkT3B0aW9uKCdjb2x1bW5EZWZzJywgdGhpcy5jb2x1bW5EZWZzKTtcblx0XHRcdHRoaXMuZ3JpZC5hcGkucmVmcmVzaENlbGxzKHtcblx0XHRcdFx0Zm9yY2U6IHRydWUsXG5cdFx0XHRcdHN1cHByZXNzRmxhc2g6IHRydWUsXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBzZXRSaWNoVmFsdWUob3B0aW9uczogR3JpZE9wdGlvbnMgPSB0aGlzLnRvT3B0aW9ucygpKSB7XG5cdFx0bGV0IGNvbCA9IG9wdGlvbnMuY29sdW1uRGVmcyEgfHwgW107XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHByb2Nlc3NlZENvbHMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0Y29sLm1hcChhc3luYyAoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgbmV4dEl0ZW0gPSB7IC4uLml0ZW0gfTtcblx0XHRcdFx0XHRpZiAobmV4dEl0ZW0uaGFzT3duUHJvcGVydHkoJ2ZpZWxkSWQnKSAmJiAobmV4dEl0ZW0uY2VsbEVkaXRvciA9PSAnYWdSaWNoU2VsZWN0Q2VsbEVkaXRvcicgfHwgbmV4dEl0ZW0uY2VsbEVkaXRvciA9PSAnYWdTZWxlY3RDZWxsRWRpdG9yJyB8fCBuZXh0SXRlbS5jZWxsRWRpdG9yID09ICdjZWxsRWRpdFNlbGVjdEZpZWxkQ29tcG9uZW50JykgJiYgIW5leHRJdGVtLnJvd0dyb3VwKSB7XG5cdFx0XHRcdFx0XHRsZXQgdmFsdWVzOiBhbnkgPSBbXTtcblx0XHRcdFx0XHRcdGNvbnN0IHJhd0NlbGxFZGl0b3JQYXJhbXMgPVxuXHRcdFx0XHRcdFx0XHR0eXBlb2YgaXRlbS5jZWxsRWRpdG9yUGFyYW1zID09PSAnZnVuY3Rpb24nID8gaXRlbS5jZWxsRWRpdG9yUGFyYW1zKCkgfHwge30gOiBpdGVtLmNlbGxFZGl0b3JQYXJhbXMgfHwge307XG5cdFx0XHRcdFx0XHRjb25zdCBjZWxsRWRpdG9yUGFyYW1zID0geyAuLi5yYXdDZWxsRWRpdG9yUGFyYW1zIH07XG5cdFx0XHRcdFx0XHRpZiAoY2VsbEVkaXRvclBhcmFtcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWVzJykpIHtcblx0XHRcdFx0XHRcdFx0dmFsdWVzID0gY2VsbEVkaXRvclBhcmFtcy52YWx1ZXMgfHwgW107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAobmV4dEl0ZW0uaGFzT3duUHJvcGVydHkoJ3NlbGVjdERhdGEnKSAmJiB0eXBlb2YgbmV4dEl0ZW0uc2VsZWN0RGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZXMgPSAoYXdhaXQgaXRlbS5zZWxlY3REYXRhKCkpIHx8IFtdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bmV4dEl0ZW0uY2VsbEVkaXRvclBhcmFtcyA9IHtcblx0XHRcdFx0XHRcdFx0Li4uY2VsbEVkaXRvclBhcmFtcyxcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0TWF4SGVpZ2h0OiAyMDAsXG5cdFx0XHRcdFx0XHRcdHN1cHByZXNzTXVsdGlTZWxlY3RQaWxsUmVuZGVyZXI6IHRydWUsXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0aWYgKG5leHRJdGVtLmNlbGxFZGl0b3JQYXJhbXMuaGFzT3duUHJvcGVydHkoJ3ZhbHVlcycpICYmICEobmV4dEl0ZW0uaGFzT3duUHJvcGVydHkoJ3NlbGVjdERhdGEnKSAmJiB0eXBlb2YgbmV4dEl0ZW0uc2VsZWN0RGF0YSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0XHRcdFx0dmFsdWVzID0gbmV4dEl0ZW0uY2VsbEVkaXRvclBhcmFtcy52YWx1ZXM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRsZXQgaXNTdHJpbmcgPSB2YWx1ZXMuZXZlcnkoKGl0ZW06IGFueSkgPT4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKTtcblx0XHRcdFx0XHRcdGlmICghaXNTdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb3B0aW9uVmFsdWVGaWVsZCA9IG5leHRJdGVtLmNlbGxFZGl0b3JQYXJhbXMub3B0aW9uVmFsdWUgfHwgJ3ZhbHVlJztcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb3B0aW9uTGFiZWxGaWVsZCA9IG5leHRJdGVtLmNlbGxFZGl0b3JQYXJhbXMub3B0aW9uTGFiZWwgfHwgJ2xhYmVsJztcblx0XHRcdFx0XHRcdFx0bmV4dEl0ZW0uY2VsbEVkaXRvclBhcmFtcy5yYXdPcHRpb25zID0gdmFsdWVzO1xuXHRcdFx0XHRcdFx0XHRuZXh0SXRlbS5jZWxsRWRpdG9yUGFyYW1zLnZhbHVlcyA9IHZhbHVlcy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbT8uW29wdGlvblZhbHVlRmllbGRdKTtcblx0XHRcdFx0XHRcdFx0bmV4dEl0ZW0udmFsdWVGb3JtYXR0ZXIgPSAocGFyYW1zOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvcHRpb25zID0gcGFyYW1zLmNvbERlZi5jZWxsRWRpdG9yUGFyYW1zLnJhd09wdGlvbnMgYXMgYW55W107XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdmFsdWVGaWVsZCA9IHBhcmFtcy5jb2xEZWYuY2VsbEVkaXRvclBhcmFtcy5vcHRpb25WYWx1ZSB8fCAndmFsdWUnO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGxhYmVsRmllbGQgPSBwYXJhbXMuY29sRGVmLmNlbGxFZGl0b3JQYXJhbXMub3B0aW9uTGFiZWwgfHwgJ2xhYmVsJztcblx0XHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIHBhcmFtcy52YWx1ZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9wdGlvbiA9IG9wdGlvbnMuZmluZCgob3B0KSA9PiBvcHQ/Llt2YWx1ZUZpZWxkXSA9PSBwYXJhbXMudmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9wdGlvbiA/IG9wdGlvbj8uW2xhYmVsRmllbGRdIDogcGFyYW1zLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgdmFsdWVzOiBhbnkgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0eXBlb2YgcGFyYW1zLnZhbHVlID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAocGFyYW1zLnZhbHVlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZXMgPSBwYXJhbXMudmFsdWUuc3BsaXQoJywnKS5tYXAoKHY6IGFueSkgPT4gKCFpc05hTih2KSA/IE51bWJlcih2KSA6IHYpKSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWVzID0gcGFyYW1zLnZhbHVlIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb3B0aW9uID0gb3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4gdmFsdWVzLmluY2x1ZGVzKG9wdD8uW3ZhbHVlRmllbGRdKSkgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb3B0aW9uLmxlbmd0aCA+IDAgPyBvcHRpb24ubWFwKCh2KSA9PiB2Py5bbGFiZWxGaWVsZF0pIDogcGFyYW1zLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0bmV4dEl0ZW0udmFsdWVHZXR0ZXIgPSAocGFyYW1zOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygncGFtcmFtcy0tLS0nLHBhcmFtcyxpdGVtLmZpZWxkKVxuXHRcdFx0XHRcdFx0XHRcdGlmICgobmV4dEl0ZW0uY2VsbEVkaXRvciA9PSAnYWdSaWNoU2VsZWN0Q2VsbEVkaXRvcicgfHwgbmV4dEl0ZW0uY2VsbEVkaXRvciA9PSAnY2VsbEVkaXRTZWxlY3RGaWVsZENvbXBvbmVudCcpICYmIHBhcmFtcy5kYXRhICYmIHBhcmFtcy5kYXRhLmhhc093blByb3BlcnR5KG5leHRJdGVtLmZpZWxkKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHR5cGVvZiBwYXJhbXMuZGF0YVtuZXh0SXRlbS5maWVsZF0gPT0gJ3N0cmluZycgPyBwYXJhbXMuZGF0YVtuZXh0SXRlbS5maWVsZF0uc3BsaXQoJywnKSA6IHBhcmFtcy5kYXRhW25leHRJdGVtLmZpZWxkXTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHBhcmFtcy5kYXRhID8gcGFyYW1zLmRhdGFbbmV4dEl0ZW0uZmllbGRdOiAnJ1xuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRuZXh0SXRlbS52YWx1ZVBhcnNlciA9IChwYXJhbXM6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdwYXJhbXMtLS0tJyxwYXJhbXMpXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHBhcmFtcy5jb2xEZWYuY2VsbEVkaXRvclBhcmFtcy5yYXdPcHRpb25zIGFzIGFueVtdO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlRmllbGQgPSBwYXJhbXMuY29sRGVmLmNlbGxFZGl0b3JQYXJhbXMub3B0aW9uVmFsdWUgfHwgJ3ZhbHVlJztcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBsYWJlbEZpZWxkID0gcGFyYW1zLmNvbERlZi5jZWxsRWRpdG9yUGFyYW1zLm9wdGlvbkxhYmVsIHx8ICdsYWJlbCc7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb3B0aW9uID0gb3B0aW9ucy5maW5kKChvcHQpID0+IG9wdD8uW2xhYmVsRmllbGRdID09PSBwYXJhbXMubmV3VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvcHRpb24gPyBvcHRpb24/Llt2YWx1ZUZpZWxkXSA6IHBhcmFtcy5uZXdWYWx1ZTtcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG5leHRJdGVtLmNlbGxFZGl0b3JQYXJhbXMudmFsdWVzID0gdmFsdWVzO1xuXHRcdFx0XHRcdFx0XHRuZXh0SXRlbS52YWx1ZUdldHRlciA9IChwYXJhbXM6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmICgobmV4dEl0ZW0uY2VsbEVkaXRvciA9PSAnYWdSaWNoU2VsZWN0Q2VsbEVkaXRvcicgfHwgbmV4dEl0ZW0uY2VsbEVkaXRvciA9PSAnY2VsbEVkaXRTZWxlY3RGaWVsZENvbXBvbmVudCcpICYmIHBhcmFtcy5kYXRhICYmIHBhcmFtcy5kYXRhLmhhc093blByb3BlcnR5KG5leHRJdGVtLmZpZWxkKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHR5cGVvZiBwYXJhbXMuZGF0YVtuZXh0SXRlbS5maWVsZF0gPT0gJ3N0cmluZycgPyBwYXJhbXMuZGF0YVtuZXh0SXRlbS5maWVsZF0uc3BsaXQoJywnKSA6IHBhcmFtcy5kYXRhW25leHRJdGVtLmZpZWxkXTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHBhcmFtcy5kYXRhID8gcGFyYW1zLmRhdGFbbmV4dEl0ZW0uZmllbGRdOiAnJ1xuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbmV4dEl0ZW07XG5cdFx0XHRcdH0pLFxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBwcm9jZXNzZWRDb2xzO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdFcnJvciBwcm9jZXNzaW5nIGNvbHVtbnM6JywgZXJyb3IpO1xuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fVxuXHR9XG5cblx0Z2V0RW51bXMoaWQ6IG51bWJlcikge1xuXHRcdHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0KCdnZXQnLCB7IGlkOiBOdW1iZXIoaWQpLCBtb2RlbE5hbWU6ICdNb2RlbEZpZWxkJywgcHJlbG9hZHM6IFsnRW51bSddIH0pKTtcblx0fVxuXG5cdGhhbmRsZVNlbGVjdGlvbnMoc3RhcnRSb3c6IG51bWJlcikge1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuc2VsZWN0aW9uS2V5cygpPy5sZW5ndGgpIHtcblx0XHRcdFx0Z3JpZFV0aWxzLnNlbGVjdGlvbkhhbmRsZXIodGhpcy5ncmlkLmFwaSwgdGhpcy5zZWxlY3Rpb25LZXlzKCksIHN0YXJ0Um93LCB0aGlzLnRvT3B0aW9ucygpPy5kYXRhS2V5KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGdldERhdGEoKSB7XG5cdFx0dW50cmFja2VkKCgpID0+IHtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCd0aGlzLnRvT3B0aW9ucygpJyx0aGlzLnRvT3B0aW9ucygpKVxuXHRcdFx0aWYgKCF0aGlzLnNlYXJjaFBybSgpLm1vZGVsTmFtZSAmJiAhdGhpcy5yb3dEYXRhKCkpIHJldHVybjtcblx0XHRcdHRoaXMuY2FuY2VsU2VsZWN0KCk7XG5cdFx0XHRjb25zdCBzZWFyY2ggPSB0aGlzLmFjdGlvbi5nZXRTZWFyY2godGhpcy50b09wdGlvbnMoKS5tb2RlbE5hbWUpO1xuXHRcdFx0dGhpcy50b09wdGlvbnMoKT8ucm93TW9kZWxUeXBlID09ICdzZXJ2ZXJTaWRlJyA/IHRoaXMuZ2V0U2VydmVyRGF0YShzZWFyY2gpIDogdGhpcy5nZXRDbGllbnREYXRhKHNlYXJjaCk7XG5cdFx0fSk7XG5cdH1cblxuXHRnZXRTZXJ2ZXJEYXRhKHNlYXJjaD86IFNlYXJjaCkge1xuXHRcdHRoaXMuZ3JpZD8uYXBpLnNldEdyaWRPcHRpb24oJ3NlcnZlclNpZGVEYXRhc291cmNlJywge1xuXHRcdFx0Z2V0Um93czogKHBhcmFtcykgPT4ge1xuXHRcdFx0XHRjb25zdCBzZWFyY2hQcm06IFNlYXJjaCA9IHtcblx0XHRcdFx0XHQuLi50aGlzLnNlYXJjaFBybSgpLFxuXHRcdFx0XHRcdG9mZnNldDogcGFyYW1zLnJlcXVlc3Quc3RhcnRSb3csXG5cdFx0XHRcdFx0Y29sdW1uRmlsdGVyczogWy4uLih0aGlzLnJhd1BybT8uY29sdW1uRmlsdGVycyB8fCBbXSksIC4uLihzZWFyY2g/LmNvbHVtbkZpbHRlcnMgfHwgW10pXSxcblx0XHRcdFx0XHRzb3J0czogc2VhcmNoPy5zb3J0cz8ubGVuZ3RoID8gc2VhcmNoLnNvcnRzIDogdGhpcy5yYXdQcm0/LnNvcnRzPy5sZW5ndGggPyB0aGlzLnJhd1BybS5zb3J0cyA6IGRlZmF1bHRTb3J0cyxcblx0XHRcdFx0fTtcblx0XHRcdFx0c2VhcmNoUHJtLmNvbHVtbkZpbHRlcnMgPSB0aGlzLmlzUmFuZ2Uoc2VhcmNoUHJtLmNvbHVtbkZpbHRlcnMhKSBhcyBDb2x1bW5GaWx0ZXJbXTtcblx0XHRcdFx0dGhpcy5oYW5kbGVTZXJ2ZXJUcmVlKHBhcmFtcywgc2VhcmNoUHJtKTtcblx0XHRcdFx0dGhpcy50b09wdGlvbnMoKVxuXHRcdFx0XHRcdC5zZXJ2ZXJGdW5jPy4oc2VhcmNoUHJtKVxuXHRcdFx0XHRcdC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLmFjdGlvbi5zZXRQYWdlKHtcblx0XHRcdFx0XHRcdFx0c3RhcnRSb3c6IHBhcmFtcy5yZXF1ZXN0LnN0YXJ0Um93LFxuXHRcdFx0XHRcdFx0XHRlbmRSb3c6IHBhcmFtcy5yZXF1ZXN0LmVuZFJvdyEgPCByZXMudG90YWxOdW0gPyBwYXJhbXMucmVxdWVzdC5lbmRSb3cgOiByZXMudG90YWxOdW0sXG5cdFx0XHRcdFx0XHRcdHRvdGFsOiByZXMudG90YWxOdW0sXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHBhcmFtcy5zdWNjZXNzKHsgcm93RGF0YTogcmVzLmRhdGEgfHwgW10gfSk7XG5cdFx0XHRcdFx0XHR0aGlzLmFqdXN0R3JpZEhlaWdodCgpO1xuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVTZWxlY3Rpb25zKHBhcmFtcy5yZXF1ZXN0LnN0YXJ0Um93IHx8IDApO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdGhhbmRsZVNlcnZlclRyZWUocGFyYW1zOiBhbnksIHNlYXJjaFBybTogU2VhcmNoKSB7XG5cdFx0aWYgKCF0aGlzLnRvT3B0aW9ucygpLnRyZWVEYXRhKSByZXR1cm47XG5cdFx0aWYgKHBhcmFtcy5yZXF1ZXN0Lmdyb3VwS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRzZWFyY2hQcm0uY29sdW1uRmlsdGVycyA9IHNlYXJjaFBybS5jb2x1bW5GaWx0ZXJzPy5maWx0ZXIoKGNvbHVtbkZpbHRlcikgPT4gY29sdW1uRmlsdGVyLmNvbHVtbkZpZWxkICE9PSAncGlkJyk7XG5cdFx0XHRzZWFyY2hQcm0uY29sdW1uRmlsdGVycyA9IFtcblx0XHRcdFx0Ly8gLi4uKHNlYXJjaFBybS5jb2x1bW5GaWx0ZXJzIHx8IFtdKSxcblx0XHRcdFx0eyBjb2x1bW5GaWVsZDogJ3BpZCcsIHR5cGU6ICdlcScsIGZpdGVyOiBwYXJhbXMucmVxdWVzdC5ncm91cEtleXNbcGFyYW1zLnJlcXVlc3QuZ3JvdXBLZXlzLmxlbmd0aCAtIDFdIH0sXG5cdFx0XHRdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXNlYXJjaFBybS5jb2x1bW5GaWx0ZXJzPy5maW5kKChjb2x1bW5GaWx0ZXIpID0+IGNvbHVtbkZpbHRlci5jb2x1bW5GaWVsZCA9PT0gJ3BpZCcpKSB7XG5cdFx0XHRcdHNlYXJjaFBybS5jb2x1bW5GaWx0ZXJzID0gWy4uLihzZWFyY2hQcm0uY29sdW1uRmlsdGVycyB8fCBbXSksIHsgY29sdW1uRmllbGQ6ICdwaWQnLCB0eXBlOiAnZXEnLCBmaXRlcjogMCB9XTtcblx0XHRcdH1cblx0XHR9XG5cdFx0c2VhcmNoUHJtLnByZWxvYWRzID0gWydjaGlsZHJlbiddO1xuXHR9XG5cblx0Z2V0Q2xpZW50RGF0YShzZWFyY2g/OiBTZWFyY2gpIHtcblx0XHRjb25zdCBzZWFyY2hQcm06IFNlYXJjaCA9IHtcblx0XHRcdC4uLnRoaXMuc2VhcmNoUHJtKCksXG5cdFx0XHRsaW1pdDogQ0xJRU5UTElNSVQsXG5cdFx0XHRjb2x1bW5GaWx0ZXJzOiBbLi4uKHRoaXMucmF3UHJtPy5jb2x1bW5GaWx0ZXJzIHx8IFtdKSwgLi4uKHNlYXJjaD8uY29sdW1uRmlsdGVycyB8fCBbXSldLFxuXHRcdFx0c29ydHM6IHNlYXJjaD8uc29ydHM/Lmxlbmd0aCA/IHNlYXJjaC5zb3J0cyA6IGRlZmF1bHRTb3J0cyxcblx0XHR9O1xuXHRcdHNlYXJjaFBybS5jb2x1bW5GaWx0ZXJzID0gdGhpcy5pc1JhbmdlKHNlYXJjaFBybS5jb2x1bW5GaWx0ZXJzISkgYXMgQ29sdW1uRmlsdGVyW107XG5cdFx0dGhpcy5oYW5kbGVDbGllbnRUcmVlKHNlYXJjaFBybSk7XG5cdFx0dGhpcy50b09wdGlvbnMoKVxuXHRcdFx0LmNsaWVudEZ1bmM/LihzZWFyY2hQcm0pXG5cdFx0XHQuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuXHRcdFx0XHR0aGlzLmFjdGlvbi5zZXRQYWdlKHtcblx0XHRcdFx0XHR0b3RhbDogcmVzLnRvdGFsTnVtLFxuXHRcdFx0XHRcdG1vZGU6ICdjbGllbnQnLFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy5ncmlkPy5hcGkuc2V0R3JpZE9wdGlvbigncm93RGF0YScsIHJlcy5kYXRhIHx8IFtdKTtcblx0XHRcdFx0dGhpcy5hanVzdEdyaWRIZWlnaHQoKTtcblx0XHRcdFx0dGhpcy5oYW5kbGVTZWxlY3Rpb25zKDApO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRoYW5kbGVDbGllbnRUcmVlKHNlYXJjaFBybTogU2VhcmNoKSB7XG5cdFx0aWYgKCF0aGlzLnRvT3B0aW9ucygpLnRyZWVEYXRhKSByZXR1cm47XG5cdFx0Y29uc3QgcHJlbG9hZHM6IGFueVtdID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLnRvT3B0aW9ucygpLnRyZWVMZXZlbCE7IGkrKykge1xuXHRcdFx0cHJlbG9hZHMucHVzaChBcnJheShpKS5maWxsKCdjaGlsZHJlbicpLmpvaW4oJy4nKSk7XG5cdFx0fVxuXHRcdHNlYXJjaFBybS5wcmVsb2FkcyA9IHByZWxvYWRzO1xuXHR9XG5cblx0Y2VsbFZhbHVlQ2hhbmdlZChlOiBDZWxsVmFsdWVDaGFuZ2VkRXZlbnQpIHtcblx0XHRsZXQge1xuXHRcdFx0Y29sRGVmOiB7IGZpZWxkLCBoZWFkZXJOYW1lLCBjZWxsRWRpdG9yLCBjZWxsRWRpdG9yUGFyYW1zIH0sXG5cdFx0XHRuZXdWYWx1ZSxcblx0XHRcdG9sZFZhbHVlLFxuXHRcdFx0cm93SW5kZXgsXG5cdFx0XHRkYXRhOiB7IGlkIH0sXG5cdFx0fSA9IGU7XG5cdFx0Y29uc29sZS5sb2coJ1vljZXlhYPmoLzlgLzlj5jljJZdJywgZSk7XG5cdFx0aWYgKGNlbGxFZGl0b3IgPT0gJ2FnUmljaFNlbGVjdENlbGxFZGl0b3InICYmIGNlbGxFZGl0b3JQYXJhbXMgJiYgY2VsbEVkaXRvclBhcmFtcy5tdWx0aVNlbGVjdCkge1xuXHRcdFx0bmV3VmFsdWUgPSBuZXdWYWx1ZSAmJiBuZXdWYWx1ZS5sZW5ndGggPiAwID8gbmV3VmFsdWUuam9pbignLCcpIDogJyc7XG5cdFx0XHR0aGlzLnJpY2hNdWx0TWFwW2ZpZWxkIV0gPSBuZXdWYWx1ZTtcblx0XHR9XG5cdFx0aWYgKCFpZCB8fCBpZCA9PT0gMCkge1xuXHRcdFx0aWQgPT09IDAgJiYgZGVsZXRlIGUuZGF0YS5pZDtcblx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLnNldChyb3dJbmRleCEsIE9iamVjdC5hc3NpZ24oeyAuLi5lLmRhdGEgfSwgdGhpcy5yaWNoTXVsdE1hcCkpO1xuXHRcdFx0aWYgKGZpZWxkID09IHRoaXMubWFpbkZpZWxkKSB7XG5cdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLnNldChyb3dJbmRleCEgKyBmaWVsZCEsIHsgbmV3VmFsdWU6IG5ld1ZhbHVlLCBpZDogMCwgbGFiZWw6IGhlYWRlck5hbWUgfSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpZCkge1xuXHRcdFx0Y29uc3QgZmllbGRzdHIgPSBgJHtmaWVsZH1gO1xuXHRcdFx0bGV0IG86IGFueTtcblx0XHRcdGlmICh0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5oYXMocm93SW5kZXghKSkge1xuXHRcdFx0XHRvID0gdGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZ2V0KHJvd0luZGV4ISk7XG5cdFx0XHRcdE9iamVjdC5hc3NpZ24obywgeyBbZmllbGRzdHJdOiBuZXdWYWx1ZSB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG8gPSB7IGlkOiBpZCwgW2ZpZWxkc3RyXTogbmV3VmFsdWUgfTtcblx0XHRcdH1cblx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLnNldChyb3dJbmRleCEsIG8pO1xuXHRcdFx0bGV0IG9sZCA9IHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLmdldChyb3dJbmRleCEgKyBmaWVsZCEpO1xuXHRcdFx0aWYgKG9sZCkge1xuXHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5zZXQocm93SW5kZXghICsgZmllbGQhLCB7XG5cdFx0XHRcdFx0bmV3VmFsdWU6IG5ld1ZhbHVlLFxuXHRcdFx0XHRcdG9sZFZhbHVlOiBvbGQub2xkVmFsdWUsXG5cdFx0XHRcdFx0aWQ6IGlkLFxuXHRcdFx0XHRcdGxhYmVsOiBoZWFkZXJOYW1lLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLnNldChyb3dJbmRleCEgKyBmaWVsZCEsIHtcblx0XHRcdFx0XHRuZXdWYWx1ZTogbmV3VmFsdWUsXG5cdFx0XHRcdFx0b2xkVmFsdWU6IG9sZFZhbHVlLFxuXHRcdFx0XHRcdGlkOiBpZCxcblx0XHRcdFx0XHRsYWJlbDogaGVhZGVyTmFtZSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGxldCBkdDogYW55W10gPSBbXTtcblx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5mb3JFYWNoKCh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4ge1xuXHRcdFx0ZHQucHVzaCh2YWx1ZSk7XG5cdFx0fSk7XG5cdFx0dGhpcy51cHNlcnQoKVsnc3Vic2VydCddW3RoaXMuc3ViSW5kZXhdWydzdWJEYXRhJ10gPSBkdDtcblx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldCh0cnVlKTtcblx0fVxuXG5cdGhhbmRsZUFkZGVkUm93cyhhZGRlZFJvd3M6IGFueVtdKSB7XG5cdFx0bGV0IGhlYWRlck5hbWUgPSAnJztcblx0XHR0aGlzLnRvT3B0aW9ucygpLmNvbHVtbkRlZnM/LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0aWYgKGl0ZW0uZmllbGQgPT0gdGhpcy5tYWluRmllbGQpIHtcblx0XHRcdFx0aGVhZGVyTmFtZSA9IGl0ZW0uaGVhZGVyTmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpZiAodGhpcy5hZGRTb3J0KCkpIHtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCdhZGQtLS0tLScsdGhpcy5hZGRTb3J0KCkpXG5cdFx0XHQvLyBsZXQgbG9nID0gbmV3IE1hcCgpXG5cdFx0XHR0aGlzLnNlbGVjdERhdGEoKSEuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJvd0RhdGEgPSB0aGlzLmdyaWQuYXBpLmdldFJlbmRlcmVkTm9kZXMoKS5tYXAoKG5vZGUpID0+IG5vZGUuZGF0YSk7XG5cdFx0XHRcdGxldCBsYXN0SW5kZXggPSBmaW5kTGFzdEluZGV4KHJvd0RhdGEsICh2OiBhbnkpID0+IHZbdGhpcy5hZGRTb3J0KCkhXSA9PSBpdGVtW3RoaXMuYWRkU29ydCgpIV0sIHRoaXMpO1xuXHRcdFx0XHRsYXN0SW5kZXggPSBsYXN0SW5kZXggPT0gLTEgPyByb3dEYXRhLmxlbmd0aCAtIDEgOiBsYXN0SW5kZXg7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuZ3JpZC5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IGFkZEluZGV4OiBsYXN0SW5kZXggKyAxLCBhZGQ6IFtpdGVtXSB9KTtcblx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uZm9yRWFjaCgodmFsdWU6IGFueSwga2V5OiBhbnkpID0+IHtcblx0XHRcdFx0XHRsZXQgaW5kZXggPSBrZXkubWF0Y2goL15cXGQrLylbMF07XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ2luZGV4LS0tLScsIGluZGV4KTtcblx0XHRcdFx0XHRjb25zdCBpbnNlcnRJbmRleCA9IGxhc3RJbmRleCArIDE7XG5cdFx0XHRcdFx0aWYgKGluZGV4ID09IGluc2VydEluZGV4KSB7XG5cdFx0XHRcdFx0XHRjb25zdCByZXBsYWNlSW5kZXggPSBpbnNlcnRJbmRleCArIDE7XG5cdFx0XHRcdFx0XHRsZXQgbmV3S2V5ID0ga2V5LnJlcGxhY2UoL15cXGQrLywgcmVwbGFjZUluZGV4KTtcblx0XHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLnNldChuZXdLZXksIHZhbHVlKTtcblx0XHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLmRlbGV0ZShrZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGxldCBtYXBEYXRhID0gdGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZ2V0KGxhc3RJbmRleCArIDEpO1xuXHRcdFx0XHRpZiAobWFwRGF0YSkge1xuXHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmRlbGV0ZShsYXN0SW5kZXggKyAxKTtcblx0XHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5zZXQobGFzdEluZGV4ICsgMiwgbWFwRGF0YSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVzdWx0IS5hZGQuZm9yRWFjaCgobm9kZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ25vZGUtLS0tJyxub2RlKVxuXHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLnNldChub2RlLnJvd0luZGV4LCBub2RlLmRhdGEpO1xuXHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLnNldChub2RlLnJvd0luZGV4ISArIHRoaXMubWFpbkZpZWxkISwge1xuXHRcdFx0XHRcdFx0bmV3VmFsdWU6IG5vZGUuZGF0YVt0aGlzLm1haW5GaWVsZF0sXG5cdFx0XHRcdFx0XHRpZDogMCxcblx0XHRcdFx0XHRcdGxhYmVsOiBoZWFkZXJOYW1lLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ2xhc3RJbmRleCcsbGFzdEluZGV4KVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmdyaWQuYXBpLnJlZnJlc2hDZWxscyh7XG5cdFx0XHRcdGZvcmNlOiB0cnVlLCAvLyDlvLrliLbliLfmlrBcblx0XHRcdFx0c3VwcHJlc3NGbGFzaDogdHJ1ZSwgLy8g6YG/5YWN6Zeq54OBXG5cdFx0XHR9KTtcblx0XHRcdC8vIHRoaXMudXBzZXJ0KCkhLnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddID0gbG9nXG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuZ3JpZC5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IGFkZDogYWRkZWRSb3dzIH0pO1xuXHRcdFx0cmVzdWx0IS5hZGQuZm9yRWFjaCgobm9kZTogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHJvd0luZGV4ID0gdGhpcy5ncmlkLmFwaS5nZXRSb3dOb2RlKG5vZGUuaWQpPy5yb3dJbmRleDtcblx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uc2V0KHJvd0luZGV4ISwgbm9kZS5kYXRhKTtcblx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uc2V0KHJvd0luZGV4ISArIHRoaXMubWFpbkZpZWxkISwge1xuXHRcdFx0XHRcdG5ld1ZhbHVlOiBub2RlLmRhdGFbdGhpcy5tYWluRmllbGRdLFxuXHRcdFx0XHRcdGlkOiAwLFxuXHRcdFx0XHRcdGxhYmVsOiBoZWFkZXJOYW1lLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRsZXQgZHQ6IGFueVtdID0gW107XG5cdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZm9yRWFjaCgodmFsdWU6IGFueSwga2V5OiBhbnkpID0+IHtcblx0XHRcdGR0LnB1c2godmFsdWUpO1xuXHRcdH0pO1xuXHRcdC8vIGNvbnNvbGUubG9nKCd1cHNlcnQtLS0tLScsdGhpcy51cHNlcnQoKSlcblx0XHR0aGlzLnVwc2VydCgpWydzdWJzZXJ0J11bdGhpcy5zdWJJbmRleF1bJ3N1YkRhdGEnXSA9IGR0O1xuXHRcdHRoaXMuYWp1c3RHcmlkSGVpZ2h0KCk7XG5cdH1cblxuXHRoYW5kbGVEZWxldGVkUm93cyhkZWxldGVkUm93czogYW55W10pIHtcblx0XHRjb25zdCByZW1vdmVJbmRleGVzID0gdGhpcy5ncmlkLmFwaS5nZXRTZWxlY3RlZE5vZGVzKCkubWFwKChub2RlKSA9PiBub2RlLnJvd0luZGV4KTtcblx0XHRyZW1vdmVJbmRleGVzLmZvckVhY2goKHJvd0luZGV4OiBhbnkpID0+IHtcblx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmRlbGV0ZShyb3dJbmRleCEpO1xuXHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uZGVsZXRlKHJvd0luZGV4ISArIHRoaXMubWFpbkZpZWxkISk7XG5cdFx0fSk7XG5cdFx0bGV0IGR0OiBhbnlbXSA9IFtdO1xuXHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmZvckVhY2goKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiB7XG5cdFx0XHRkdC5wdXNoKHZhbHVlKTtcblx0XHR9KTtcblx0XHR0aGlzLnVwc2VydCgpWydzdWJzZXJ0J11bdGhpcy5zdWJJbmRleF1bJ3N1YkRhdGEnXSA9IGR0O1xuXHRcdHRoaXMuZ3JpZC5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogZGVsZXRlZFJvd3MgfSk7XG5cdFx0dGhpcy5hanVzdEdyaWRIZWlnaHQoKTtcblx0fVxuXG5cdHNlbGVjdFJvd3NEZWxldGVkKGRlbGV0ZWRSb3dzOiBhbnlbXSkge1xuXHRcdGxldCBoZWFkZXJOYW1lID0gJyc7XG5cdFx0dGhpcy50b09wdGlvbnMoKS5jb2x1bW5EZWZzPy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdGlmIChpdGVtLmZpZWxkID09IHRoaXMubWFpbkZpZWxkKSB7XG5cdFx0XHRcdGhlYWRlck5hbWUgPSBpdGVtLmhlYWRlck5hbWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5ncmlkLmFwaS5hcHBseVRyYW5zYWN0aW9uKHsgcmVtb3ZlOiBkZWxldGVkUm93cyB9KTtcblx0XHRyZXN1bHQ/LnJlbW92ZS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnbm9kZS0tLScsbm9kZS5zb3VyY2VSb3dJbmRleCk7XG5cdFx0XHRsZXQga2V5ID0gbm9kZS5zb3VyY2VSb3dJbmRleCArIHRoaXMubWFpbkZpZWxkITtcblx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLmRlbGV0ZShrZXkpO1xuXHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZGVsZXRlKG5vZGUuc291cmNlUm93SW5kZXgpO1xuXHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZm9yRWFjaCgodmFsdWU6IGFueSwga2V5OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKCF2YWx1ZS5pZCAmJiBrZXkgPiBub2RlLnNvdXJjZVJvd0luZGV4KSB7XG5cdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZGVsZXRlKGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uZm9yRWFjaCgodmFsdWU6IGFueSwga2V5OiBhbnkpID0+IHtcblx0XHRcdFx0bGV0IGluZGV4ID0ga2V5Lm1hdGNoKC9eXFxkKy8pWzBdO1xuXHRcdFx0XHRpZiAoIXZhbHVlLmlkICYmIGluZGV4ID4gbm9kZS5zb3VyY2VSb3dJbmRleCkge1xuXHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLmRlbGV0ZShrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHR0aGlzLmdyaWQuYXBpLmZvckVhY2hOb2RlKChub2RlOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IHJvd0luZGV4ID0gbm9kZS5yb3dJbmRleDtcblx0XHRcdGlmICghbm9kZS5kYXRhLmlkKSB7XG5cdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLnNldChyb3dJbmRleCEsIG5vZGUuZGF0YSk7XG5cdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLnNldChyb3dJbmRleCEgKyB0aGlzLm1haW5GaWVsZCEsIHtcblx0XHRcdFx0XHRuZXdWYWx1ZTogbm9kZS5kYXRhW3RoaXMubWFpbkZpZWxkXSxcblx0XHRcdFx0XHRpZDogMCxcblx0XHRcdFx0XHRsYWJlbDogaGVhZGVyTmFtZSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5mb3JFYWNoKCh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGlmICh2YWx1ZS5pZCA9PT0gbm9kZS5kYXRhLmlkICYmIGtleSAhPSByb3dJbmRleCkge1xuXHRcdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZGVsZXRlKGtleSk7XG5cdFx0XHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5zZXQocm93SW5kZXgsIHZhbHVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5mb3JFYWNoKCh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGlmICh2YWx1ZS5pZCA9PSBub2RlLmRhdGEuaWQpIHtcblx0XHRcdFx0XHRcdGxldCBpbmRleCA9IGtleS5tYXRjaCgvXlxcZCsvKVswXTtcblx0XHRcdFx0XHRcdGlmIChpbmRleCAhPSByb3dJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRsZXQgbmV3S2V5ID0ga2V5LnJlcGxhY2UoL15cXGQrLywgcm93SW5kZXgpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5kZWxldGUoa2V5KTtcblx0XHRcdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uc2V0KG5ld0tleSwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0bGV0IGR0OiBhbnlbXSA9IFtdO1xuXHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmZvckVhY2goKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiB7XG5cdFx0XHRkdC5wdXNoKHZhbHVlKTtcblx0XHR9KTtcblx0XHR0aGlzLnVwc2VydCgpWydzdWJzZXJ0J11bdGhpcy5zdWJJbmRleF1bJ3N1YkRhdGEnXSA9IGR0O1xuXHRcdHRoaXMuYWp1c3RHcmlkSGVpZ2h0KCk7XG5cdFx0Ly8gY29uc29sZS5sb2coJ3Jlc3VsdC0tLS0tJywgdGhpcy51cHNlcnQoKSlcblx0fVxuXG5cdGNsZWFyKCkge1xuXHRcdGlmICh0aGlzLnRvT3B0aW9ucygpLnJvd01vZGVsVHlwZSAhPT0gJ3NlcnZlclNpZGUnKSB7XG5cdFx0XHR0aGlzLmdyaWQ/LmFwaS5zZXRHcmlkT3B0aW9uKCdyb3dEYXRhJywgW10pO1xuXHRcdH1cblx0XHR0aGlzLnVwc2VydCgpIS5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdID0ge1xuXHRcdFx0c3ViTW9kZWxOYW1lOiB0aGlzLnRvT3B0aW9ucygpLm1vZGVsTmFtZSxcblx0XHRcdGZrOiB0aGlzLnRvT3B0aW9ucygpLmZrLFxuXHRcdFx0c3ViRGF0YTogW10sXG5cdFx0XHRtYXB0bXA6IG5ldyBNYXAoKSxcblx0XHRcdGxvZ3RtcDogbmV3IE1hcCgpLFxuXHRcdFx0cmVmZXJlbmNlOiB0aGlzLnRvT3B0aW9ucygpLnJlZmVyZW5jZSxcblx0XHR9O1xuXHR9XG5cblx0YWRkUm93KCkge1xuXHRcdGlmICh0aGlzLmFkZFR5cGUoKSA9PSAnaGFuZGxlJykge1xuXHRcdFx0bGV0IGl0ZW0gPSB0eXBlb2YgdGhpcy50b09wdGlvbnMoKS5hZGREYXRhQ2IgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMudG9PcHRpb25zKCkuYWRkRGF0YUNiKCkgOiB7fTtcblx0XHRcdGlmICh0aGlzLmdyaWRPcHRpb25zKCkuZHJhZ1NvcnQpIHtcblx0XHRcdFx0bGV0IHRvdGFsQ291bnQgPSB0aGlzLmdyaWQuYXBpLmdldERpc3BsYXllZFJvd0NvdW50KCk7XG5cdFx0XHRcdGl0ZW1bdGhpcy5ncmlkT3B0aW9ucygpLmRyYWdTb3J0IV0gPSB0b3RhbENvdW50ICsgMTtcblx0XHRcdH1cblx0XHRcdHRoaXMuYWN0aW9uLnVwZGF0ZUdyaWRBY3Rpb24oe3R5cGU6J2FkZCcsZGF0YTogW2l0ZW1dfSlcblx0XHRcdHRoaXMuZ3JpZC5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IGFkZDogW2l0ZW1dIH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFkZEVtaXQuZW1pdCgpO1xuXHRcdH1cblx0XHR0aGlzLmFqdXN0R3JpZEhlaWdodCgpO1xuXHR9XG5cblx0ZGVsUm93cygpIHtcblx0XHRjb25zdCBzZWxlY3RlZE5vZGVzID0gdGhpcy5ncmlkLmFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XG5cdFx0Y29uc3Qgc2VsZWN0ZWREYXRhID0gc2VsZWN0ZWROb2Rlcy5tYXAoKG5vZGUpID0+IG5vZGUuZGF0YSkgfHwgW107XG5cdFx0bGV0IGlkcyA9IHNlbGVjdGVkRGF0YS5tYXAoKGRhdGEpID0+IGRhdGEuaWQpLmZpbHRlcigodikgPT4gdikgfHwgW107XG5cdFx0aWYgKGlkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLmRlbGV0ZUVtaXQuZW1pdChpZHMpO1xuXHRcdH0gZWxzZSBpZiAoc2VsZWN0ZWREYXRhLmxlbmd0aCA+IDAgJiYgaWRzLmxlbmd0aCA9PSAwKSB7XG5cdFx0XHR0aGlzLmhhbmRsZURlbGV0ZWRSb3dzKHNlbGVjdGVkRGF0YSk7XG5cdFx0XHR0aGlzLmFjdGlvbi51cGRhdGVHcmlkQWN0aW9uKHt0eXBlOidkZWxldGUnLGRhdGE6IHNlbGVjdGVkRGF0YX0pXG5cdFx0fVxuXHRcdHRoaXMuYWp1c3RHcmlkSGVpZ2h0KCk7XG5cdH1cblxuXHRzZXRTY3JvbGxIZWlnaHQoaGVpZ2h0Pzogc3RyaW5nKSB7XG5cdFx0aWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNCAmJiB0aGlzLnRvT3B0aW9ucygpLm1haW5GaWVsZCkge1xuXHRcdFx0dGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LCAnbWF4LWhlaWdodCcpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRoZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy50b09wdGlvbnMoKS5zY3JvbGxIZWlnaHQ7XG5cdFx0aWYgKGhlaWdodCkge1xuXHRcdFx0dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LCAnbWF4LWhlaWdodCcsIGhlaWdodCk7XG5cdFx0fVxuXHR9XG5cblx0aW5pdEdyaWRIZWlnaHQoKSB7XG5cdFx0dGhpcy5ob3Jpem9udGFsU2Nyb2xsQmFyT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRcdGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcblx0XHRcdFx0dGhpcy5ob3Jpem9udGFsU2Nyb2xsQmFySGVpZ2h0ID0gZW50cnkudGFyZ2V0LmNsaWVudEhlaWdodDtcblx0XHRcdFx0dGhpcy5hanVzdEdyaWRIZWlnaHQoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHRoaXMuaG9yaXpvbnRhbFNjcm9sbEJhck9ic2VydmVyLm9ic2VydmUodGhpcy5ncmlkUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFnLWJvZHktaG9yaXpvbnRhbC1zY3JvbGwnKSk7XG5cdFx0dGhpcy52ZXJ0aWNhbFNjcm9sbEJhck9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0XHRlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG5cdFx0XHRcdHRoaXMudmVydGljYWxTY3JvbGxCYXJXaWR0aCA9IGVudHJ5LnRhcmdldC5jbGllbnRXaWR0aDtcblx0XHRcdFx0dGhpcy5hanVzdEdyaWRIZWlnaHQoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHRoaXMudmVydGljYWxTY3JvbGxCYXJPYnNlcnZlci5vYnNlcnZlKHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZy1ib2R5LXZlcnRpY2FsLXNjcm9sbCcpKTtcblx0XHR0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50LCAnd2lkdGgnLCAnMTAwJScpO1xuXHRcdHRoaXMuc2V0U2Nyb2xsSGVpZ2h0KCk7XG5cdH1cblxuXHRjYWxjR3JpZE1hcmdpbigpIHtcblx0XHRjb25zdCBtYXJnaW4gPSB0aGlzLnNob3dBY3QoKSAmJiB0aGlzLmF1dGhMZXZlbCgpID49IDMgJiYgKHRoaXMuYWRkVHlwZSgpICE9ICdub25lJyB8fCB0aGlzLnNob3dEZWxldGUoKSkgPyAyIDogMTtcblx0XHRsZXQgYm9yZGVyQm90dG9tID0gMDtcblx0XHRpZiAodGhpcy5ncmlkUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFnLXJvb3Qtd3JhcHBlcicpKSB7XG5cdFx0XHRib3JkZXJCb3R0b20gPSBwYXJzZUZsb2F0KFxuXHRcdFx0XHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuYWctcm9vdC13cmFwcGVyJykpLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1ib3R0b20td2lkdGgnKSxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBNYXRoLm1pbigyLCBtYXJnaW4gKyBib3JkZXJCb3R0b20pO1xuXHR9XG5cblx0Z2V0Q29udGFpbmVySGVpZ2h0KCkge1xuXHRcdGxldCBjb250YWluZXIgPSA1NDY7XG5cdFx0aWYgKHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZy1jZW50ZXItY29scy1jb250YWluZXInKSkge1xuXHRcdFx0Y29udGFpbmVyID0gcGFyc2VGbG9hdChcblx0XHRcdFx0d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5ncmlkUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFnLWNlbnRlci1jb2xzLWNvbnRhaW5lcicpKS5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKSxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjb250YWluZXI7XG5cdH1cblxuXHRhanVzdEdyaWRIZWlnaHQoKSB7XG5cdFx0bGV0IGNvbnRhaW5lciA9IHRoaXMuZ2V0Q29udGFpbmVySGVpZ2h0KCk7XG5cdFx0bGV0IGhlYWRlckhlaWdodCA9IHRoaXMuZ3JpZE9wdGlvbnMoKS5oZWFkZXJIZWlnaHQgPz8gNDk7XG5cdFx0bGV0IG1hcmdpbiA9IHRoaXMuY2FsY0dyaWRNYXJnaW4oKTtcblx0XHRsZXQgdG90YWwgPSBjb250YWluZXIgKyBtYXJnaW4gKyBoZWFkZXJIZWlnaHQ7XG5cdFx0Y29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgodG90YWwsIGhlYWRlckhlaWdodCArIDQyICsgbWFyZ2luKTtcblx0XHR0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuXHRcdFx0dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsIGAke2hlaWdodCArIHRoaXMuaG9yaXpvbnRhbFNjcm9sbEJhckhlaWdodH1weGApO1xuXHRcdFx0dGhpcy5hanVzdEdyaWRTdGF0ZSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0YWp1c3RHcmlkU3RhdGUoKSB7XG5cdFx0dGhpcy5ub1Jvd3MgPSB0aGlzLmdyaWQuYXBpLmdldERpc3BsYXllZFJvd0NvdW50KCkgPT09IDA7XG5cdFx0dGhpcy5ub1Jvd3MgPyB0aGlzLmdyaWQuYXBpLnNob3dOb1Jvd3NPdmVybGF5KCkgOiB0aGlzLmdyaWQuYXBpLmhpZGVPdmVybGF5KCk7XG5cdFx0dGhpcy5zaG93SG9yaXpvbnRhbCA9IHRoaXMuYWN0UG9zKCkgPT0gJ2JvdHRvbScgJiYgKHRoaXMubm9Sb3dzIHx8ICEhdGhpcy52ZXJ0aWNhbFNjcm9sbEJhcldpZHRoKTtcblx0fVxuXG5cdGNhbmNlbFNlbGVjdCgpIHtcblx0XHR0aGlzLmdldEdyaWQoKS5hcGkuZGVzZWxlY3RBbGwoKTtcblx0XHR0aGlzLnNlbGVjdGVkUm93cy5zZXQoW10pO1xuXHR9XG5cblx0ZWRpdGluZ0ZpeCgpIHtcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudDogYW55KSA9PiB7XG5cdFx0XHRpZiAoIXRoaXMuZ3JpZD8uYXBpPy5nZXRFZGl0aW5nQ2VsbHMoKT8ubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGdyaWRFbGVtZW50OiBhbnkgPSB0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuYWctcm9vdC13cmFwcGVyJyk7XG5cdFx0XHRpZiAoIWdyaWRFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcblx0XHRcdFx0dGhpcy5ncmlkLmFwaS5zdG9wRWRpdGluZygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJvd0RyYWdFbnRlcihldmVudDogYW55KSB7XG5cdFx0Y29uc29sZS5sb2coJ2V2ZW50LS0tJywgZXZlbnQpO1xuXHRcdHRoaXMuZHJhZ0JlZm9yZUluZGV4ID0gZXZlbnQub3ZlckluZGV4O1xuXHR9XG5cblx0b25Sb3dEcmFnRW5kKGV2ZW50OiBSb3dEcmFnRW5kRXZlbnQpIHtcblxuXHRcdGlmICghdGhpcy5ncmlkT3B0aW9ucygpLmRyYWdTb3J0KSByZXR1cm47XG5cblx0XHRjb25zdCBzb3J0RmllbGQgPSB0aGlzLmdyaWRPcHRpb25zKCkuZHJhZ1NvcnQhO1xuXHRcdGNvbnN0IGNvbERlZnMgPSBldmVudC5hcGkuZ2V0Q29sdW1uRGVmcygpO1xuXHRcdGNvbnN0IGNvbEl0ZW06IGFueSA9IGNvbERlZnM/LmZpbmQoKHY6IGFueSkgPT4gdi5maWVsZCA9PT0gc29ydEZpZWxkKSB8fCB7fTtcblxuXHRcdGxldCBtYXAgPSBuZXcgTWFwKCk7XG5cdFx0bGV0IGxvZ01hcCA9IG5ldyBNYXAoKTtcblx0XHRsZXQgZHQ6IGFueVtdID0gW107XG5cblx0XHRjb25zdCB1cHNlcnQgPSB0aGlzLnVwc2VydCgpO1xuXHRcdGlmICghdXBzZXJ0KSByZXR1cm47XG5cblx0XHRjb25zdCBtYXBUbXA6IE1hcDxhbnksIGFueT4gPSB1cHNlcnQuc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ107XG5cdFx0Y29uc3QgbG9nVG1wOiBNYXA8YW55LCBhbnk+ID0gdXBzZXJ0LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddO1xuXG5cdFx0dGhpcy5ncmlkPy5hcGkuZm9yRWFjaE5vZGUoKG5vZGUsIGluZGV4KSA9PiB7XG5cblx0XHRcdGNvbnN0IGlkID0gbm9kZS5kYXRhLmlkO1xuXHRcdFx0Y29uc3QgbmV3U29ydCA9IGluZGV4ICsgMTtcblx0XHRcdGNvbnN0IG9sZFNvcnQgPSBub2RlLmRhdGFbc29ydEZpZWxkXTtcblx0XHRcdC8vIOabtOaWsCBncmlkIOaVsOaNrlxuXHRcdFx0bm9kZS5kYXRhW3NvcnRGaWVsZF0gPSBuZXdTb3J0O1xuXHRcdFx0bm9kZS5zZXREYXRhVmFsdWUoc29ydEZpZWxkLCBuZXdTb3J0KTtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCdub2RlLS0tLScsIG5vZGUuZGF0YSwgaW5kZXgsbmV3U29ydCk7XG5cdFx0XHRpZiAoIWlkKSB7XG5cblx0XHRcdFx0bWFwVG1wLnNldChpbmRleCwge1xuXHRcdFx0XHRcdC4uLm5vZGUuZGF0YSxcblx0XHRcdFx0XHRbc29ydEZpZWxkXTogbmV3U29ydFxuXHRcdFx0XHR9KTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRtYXAuc2V0KGluZGV4LCB7XG5cdFx0XHRcdFx0aWQ6IGlkLFxuXHRcdFx0XHRcdFtzb3J0RmllbGRdOiBuZXdTb3J0XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHR9XG5cdFx0XHRpZiAoaWQpIHtcblx0XHRcdFx0Y29uc3Qga2V5ID0gaWQgKyAnXycgKyBzb3J0RmllbGQ7XG5cdFx0XHRcdGxldCBvbGRMb2cgPSBsb2dUbXAuZ2V0KGtleSk7XG5cblx0XHRcdFx0aWYgKG9sZExvZykge1xuXHRcdFx0XHRcdG9sZExvZy5uZXdWYWx1ZSA9IG5ld1NvcnQ7XG5cdFx0XHRcdFx0bG9nTWFwLnNldChrZXksIG9sZExvZyk7XG5cblx0XHRcdFx0fSBlbHNlIGlmIChvbGRTb3J0ICE9PSBuZXdTb3J0KSB7XG5cdFx0XHRcdFx0bG9nTWFwLnNldChrZXksIHtcblx0XHRcdFx0XHRcdGlkOiBpZCxcblx0XHRcdFx0XHRcdGxhYmVsOiBjb2xJdGVtWydoZWFkZXJOYW1lJ10gfHwgJ+aOkuW6jycsXG5cdFx0XHRcdFx0XHRvbGRWYWx1ZTogb2xkU29ydCxcblx0XHRcdFx0XHRcdG5ld1ZhbHVlOiBuZXdTb3J0XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0aWYgKHVwc2VydCkge1xuXHRcdHVwc2VydC5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXSA9XG5cdFx0XHRcdG5ldyBNYXAoWy4uLm1hcFRtcCwgLi4ubWFwXSk7XG5cdFx0XHR1cHNlcnQuc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10gPVxuXHRcdFx0XHRuZXcgTWFwKFsuLi5sb2dUbXAsIC4uLmxvZ01hcF0pO1xuXG5cdFx0XHR1cHNlcnQuc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZm9yRWFjaCgodmFsdWU6IGFueSkgPT4ge1xuXHRcdFx0XHRkdC5wdXNoKHZhbHVlKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR1cHNlcnQuc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnc3ViRGF0YSddID0gZHQ7XG5cdFx0XHRjb25zb2xlLmxvZygnZHJhZ1Vwc2VydC0tLS0nLCB1cHNlcnQpO1xuXHRcdH1cblx0fVxuLy8g5pe26Ze06IyD5Zu05re75Yqg5pe25YiG56eSXG5cdGlzUmFuZ2UoY29sdW1uRmlsdGVyOkNvbHVtbkZpbHRlcltdKXtcblx0XHRjb25zdCBpc0VpeHN0ID0gY29sdW1uRmlsdGVyLnNvbWUoKHY6YW55KSA9PiB2LnR5cGUgPT0gJ2luUmFuZ2UnKVxuXHRcdGlmKGlzRWl4c3Qpe1xuXHRcdFx0bGV0IGNvbHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbHVtbkZpbHRlcikpXG5cdFx0XHRjb2xzLmZvckVhY2goKGl0ZW06Q29sdW1uRmlsdGVyKSA9PiB7XG5cdFx0XHRcdGlmKGl0ZW0udHlwZSA9PSAnaW5SYW5nZScpe1xuXHRcdFx0XHRcdGl0ZW0uZnJvbSA9IGAke2l0ZW0uZnJvbX0gMDA6MDA6MDBgXG5cdFx0XHRcdFx0aXRlbS50byA9IGAke2l0ZW0udG99IDIzOjU5OjU5YFxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0cmV0dXJuIGNvbHNcblx0XHR9XG5cdFx0cmV0dXJuIGNvbHVtbkZpbHRlclxuXHR9XG59XG4iLCJAaWYgKGluaXRHcmlkKSB7XG5cdDxkaXZcblx0XHQjZ3JpZENvbnRhaW5lclxuXHRcdFtjbGFzc109XCJcblx0XHRcdCh0b09wdGlvbnMoKS50cmVlRGF0YUZpZWxkID8gJ3RyZWUtZ3JpZCAnIDogJycpICtcblx0XHRcdCdncmlkLWNvbnRhaW5lciB3LWZ1bGwgZmxleCBqdXN0aWZ5LWJldHdlZW4gJyArXG5cdFx0XHQoYWN0UG9zKCkgPT0gJ2JvdHRvbScgPyAnZmxleC1jb2wnIDogJ2ZsZXgtY29sLXJldmVyc2UnKVxuXHRcdFwiPlxuXHRcdDxhZy1ncmlkLWFuZ3VsYXJcblx0XHRcdFt0aGVtZV09XCJteVRoZW1lKClcIlxuXHRcdFx0W2NvbHVtbkRlZnNdPVwiY29sdW1uRGVmc1wiXG5cdFx0XHRbZ3JpZE9wdGlvbnNdPVwidG9PcHRpb25zKClcIlxuXHRcdFx0W2xvY2FsZVRleHRdPVwibG9jYWxlVGV4dFwiXG5cdFx0XHRbY29tcG9uZW50c109XCJjb21wb25lbnRzXCJcblx0XHRcdFtzdXBwcmVzc0RyYWdMZWF2ZUhpZGVzQ29sdW1uc109XCJ0cnVlXCJcblx0XHRcdFt1bmRvUmVkb0NlbGxFZGl0aW5nXT1cInRvT3B0aW9ucygpLnVuZG9SZWRvQ2VsbEVkaXRpbmdcIlxuXHRcdFx0W3VuZG9SZWRvQ2VsbEVkaXRpbmdMaW1pdF09XCJ0b09wdGlvbnMoKS51bmRvUmVkb0NlbGxFZGl0aW5nTGltaXRcIlxuXHRcdFx0W3Jvd0J1ZmZlcl09XCIzMFwiXG5cdFx0XHQoY2VsbFZhbHVlQ2hhbmdlZCk9XCJjZWxsVmFsdWVDaGFuZ2VkKCRldmVudClcIlxuXHRcdFx0KHNlbGVjdGlvbkNoYW5nZWQpPVwib25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuXHRcdFx0KHJvd0dyb3VwT3BlbmVkKT1cIm9uUm93R3JvdXBPcGVuZWQoKVwiXG5cdFx0XHQoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudClcIlxuXHRcdFx0KHJvd0RyYWdFbmQpPVwib25Sb3dEcmFnRW5kKCRldmVudClcIlxuXHRcdFx0KHJvd0RyYWdFbnRlcik9XCJyb3dEcmFnRW50ZXIoJGV2ZW50KVwiXG5cdFx0XHRbc2luZ2xlQ2xpY2tFZGl0XT1cInNpbmdsZUNsaWNrRWRpdCgpXCIgLz5cblx0XHRAaWYgKHNob3dBY3QoKSAmJiBhdXRoTGV2ZWwoKSA+PSAzICYmICgoYWRkVHlwZSgpICE9ICdub25lJyAmJiAhYWRkSGlkZGVuKCkpIHx8IChzaG93RGVsZXRlKCkgJiYgIWRlbGV0ZUhpZGRlbigpKSB8fCAoc3ViU2F2ZVZpc2libGUoKSAmJiAhc3ViU2F2ZUhpZGRlbigpKSkpIHtcblx0XHRcdEBpZiAoc2hvd0hvcml6b250YWwpIHtcblx0XHRcdFx0PGRpdiBjbGFzcz1cInctZnVsbCBib3JkZXItdCBib3JkZXItZ3JheS0zMDBcIj48L2Rpdj5cblx0XHRcdH1cblx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIHB5LVs1cHhdIHByLVs4cHhdXCI+XG5cdFx0XHRcdEBpZiAoc3ViU2F2ZVZpc2libGUoKSAmJiAhc3ViU2F2ZUhpZGRlbigpKSB7XG5cdFx0XHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdFx0XHRpY29uPVwicGkgcGktY2xvdWQtdXBsb2FkXCJcblx0XHRcdFx0XHRcdFt0ZXh0XT1cInRydWVcIlxuXHRcdFx0XHRcdFx0c2V2ZXJpdHk9XCJwcmltYXJ5XCJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJzdWJTYXZlRGlzYWJsZWQoKVwiXG5cdFx0XHRcdFx0XHQob25DbGljayk9XCJzdWJTYXZlRW1pdC5lbWl0KClcIiAvPlxuXHRcdFx0XHR9XG5cdFx0XHRcdEBpZiAoYWRkVHlwZSgpICE9ICdub25lJyAmJiAhYWRkSGlkZGVuKCkpIHtcblx0XHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRcdGljb249XCJwaSBwaS1wbHVzXCJcblx0XHRcdFx0XHRcdFt0ZXh0XT1cInRydWVcIlxuXHRcdFx0XHRcdFx0c2V2ZXJpdHk9XCJzdWNjZXNzXCJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJncmlkRGlzYWJsZSgpXCJcblx0XHRcdFx0XHRcdChvbkNsaWNrKT1cImFkZFJvdygpXCIgLz5cblx0XHRcdFx0fVxuXHRcdFx0XHRAaWYgKHNob3dEZWxldGUoKSAmJiAhZGVsZXRlSGlkZGVuKCkpIHtcblx0XHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRcdGljb249XCJwaSBwaS10cmFzaFwiXG5cdFx0XHRcdFx0XHRbdGV4dF09XCJ0cnVlXCJcblx0XHRcdFx0XHRcdHNldmVyaXR5PVwiZGFuZ2VyXCJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJncmlkRGlzYWJsZSgpXCJcblx0XHRcdFx0XHRcdChvbkNsaWNrKT1cImRlbFJvd3MoKVwiIC8+XG5cdFx0XHRcdH1cblx0XHRcdDwvZGl2PlxuXHRcdH1cblx0PC9kaXY+XG59XG4iXX0=
|
|
956
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL2dyaWQvZ3JpZC9ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvZ3JpZC9ncmlkL2dyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixNQUFNLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7OztBQUVuRCxNQUFNLGVBQWUsR0FBRyxpQkFB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Q0YsT0FBTyxJQUFJLENBQUE7UUFDWixDQUFDO1FBQ0QsT0FBTyxZQUFZLENBQUE7SUFDcEIsQ0FBQzsrR0FqOUJXLGFBQWE7bUdBQWIsYUFBYSxrbkdBQ2QsYUFBYSwwRUFDYixhQUFhLDJCQUFVLFVBQVUsNkhDaEc3QyxxbkVBMERBLDh2Q0RnQ1csYUFBYSxnMFRBQUUsWUFBWTs7NEZBSXpCLGFBQWE7a0JBUHpCLFNBQVM7K0JBQ0MsYUFBYSxjQUNYLElBQUksV0FDUCxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUM7a0ZBS1osSUFBSTtzQkFBN0IsU0FBUzt1QkFBQyxhQUFhO2dCQUN3QixPQUFPO3NCQUF0RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ2xCLFlBQVk7c0JBQXZDLFNBQVM7dUJBQUMsZUFBZTtnQkFrRTFCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRWaWV3Q2hpbGQsXG5cdEVsZW1lbnRSZWYsXG5cdGlucHV0LFxuXHRlZmZlY3QsXG5cdGluamVjdCxcblx0Y29tcHV0ZWQsXG5cdHVudHJhY2tlZCxcblx0b3V0cHV0LFxuXHROZ1pvbmUsXG5cdFJlbmRlcmVyMixcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdEhvc3RMaXN0ZW5lcixcblx0c2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dG9Hcm91cENvbHVtbkRlZiwgQ2VsbFZhbHVlQ2hhbmdlZEV2ZW50LCBDb2xEZWYsIEdyaWRPcHRpb25zIGFzIFJhd0dyaWRPcHRpb25zLCBSb3dEcmFnRW5kRXZlbnQgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBBZ0dyaWRBbmd1bGFyIH0gZnJvbSAnYWctZ3JpZC1hbmd1bGFyJztcbmltcG9ydCB7IFRoZW1lQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvdGhlbWVDb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvaTE4bi5zZXJ2aWNlJztcbmltcG9ydCB7IFNlYXJjaCxDb2x1bW5GaWx0ZXIgfSBmcm9tICcuLi8uLi9hbS9hbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ3JpZFV0aWxzIH0gZnJvbSAnLi4vZ3JpZC11dGlscyc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBsYXN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGNvbXBvbmVudHMsIENMSUVOVExJTUlUIH0gZnJvbSAnLi4vbW9jay1kYXRhJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IHBhcnNlRnVuY3Rpb25zIH0gZnJvbSAnLi4vLi4vc2hhcmUvdXRpbHMnO1xuXG5jb25zdCBTVEFUSUNfSElERV9LRVkgPSAnX19pbW1TdGF0aWNIaWRlJztcbmNvbnN0IEhJREVfRVhQUkVTU0lPTl9LRVkgPSAnX19pbW1IaWRlRXhwcmVzc2lvbic7XG5cbmV4cG9ydCB0eXBlIENvbHVtbkhpZGVFeHByZXNzaW9uID0gKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGJvb2xlYW47XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZE9wdGlvbnMgZXh0ZW5kcyBSYXdHcmlkT3B0aW9ucyB7XG5cdHNlcnZlckZ1bmM/OiAoc2VhcmNoOiBTZWFyY2gpID0+IE9ic2VydmFibGU8YW55Pjtcblx0Y2xpZW50RnVuYz86IChzZWFyY2g6IFNlYXJjaCkgPT4gT2JzZXJ2YWJsZTxhbnk+O1xuXHRzaG93U2VhcmNoPzogYm9vbGVhbjtcblx0cHJlU2VhcmNoPzogU2VhcmNoO1xuXHR0cmVlRGF0YUZpZWxkPzogc3RyaW5nO1xuXHR0cmVlTGV2ZWw/OiBudW1iZXI7XG5cdGhlYWRlckhlaWdodD86IG51bWJlcjtcblx0c2Nyb2xsSGVpZ2h0Pzogc3RyaW5nO1xuXHRzaG93SW5kZXg/OiBib29sZWFuO1xuXHR1bmRvUmVkb0NlbGxFZGl0aW5nPzogYm9vbGVhbjtcblx0dW5kb1JlZG9DZWxsRWRpdGluZ0xpbWl0PzogbnVtYmVyO1xuXHRtYWluRmllbGQ/OiBzdHJpbmc7XG5cdG1vZGVsTmFtZT86IHN0cmluZztcblx0Zms/OiBzdHJpbmc7XG5cdGRyYWdTb3J0Pzogc3RyaW5nO1xuXHRzZWxlY3Rpb25Nb2RlPzogJ25vbmUnIHwgJ3NpbmdsZScgfCAnbXVsdGlwbGUnO1xuXHRkYXRhS2V5Pzogc3RyaW5nO1xuXHRyZWZlcmVuY2U/OiBzdHJpbmc7XG5cdGFkZERhdGFDYj86ICgpID0+IFJlY29yZDxzdHJpbmcsIGFueT5cbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbjogR3JpZE9wdGlvbnMgPSB7XG5cdC8vIHBvcHVwUGFyZW50OiBkb2N1bWVudC5ib2R5LFxuXHRkZWZhdWx0Q29sRGVmOiB7XG5cdFx0ZmxleDogMSxcblx0XHRtaW5XaWR0aDogMTAwLFxuXHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRmaWx0ZXI6IGZhbHNlLFxuXHR9LFxuXHRyb3dTZWxlY3Rpb246IHsgbW9kZTogJ211bHRpUm93JyB9LFxuXHRyb3dNb2RlbFR5cGU6ICdzZXJ2ZXJTaWRlJyxcblx0Y2VsbFNlbGVjdGlvbjoge1xuXHRcdGhhbmRsZToge1xuXHRcdFx0bW9kZTogJ3JhbmdlJyxcblx0XHR9LFxuXHR9LFxuXHRlbmFibGVDaGFydHM6IHRydWUsXG5cdHVuZG9SZWRvQ2VsbEVkaXRpbmc6IHRydWUsXG5cdHVuZG9SZWRvQ2VsbEVkaXRpbmdMaW1pdDogMjAsXG59O1xuXG5jb25zdCBkZWZhdWx0U29ydHMgPSBbeyBmaWVsZDogJ2NyZWF0ZWRBdCcsIGlzQXNjOiBmYWxzZSB9XTtcbmZ1bmN0aW9uIGZpbmRMYXN0SW5kZXgoYXJyYXk6IGFueVtdLCBwcmVkaWNhdGU6IGFueSwgdGhpc0FyZzogYW55KSB7XG5cdGZvciAobGV0IGkgPSBhcnJheS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdGlmIChwcmVkaWNhdGUuY2FsbCh0aGlzQXJnLCBhcnJheVtpXSwgaSwgYXJyYXkpKSB7XG5cdFx0XHRyZXR1cm4gaTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIC0xO1xufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdjdXN0b20tZ3JpZCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtBZ0dyaWRBbmd1bGFyLCBCdXR0b25Nb2R1bGVdLFxuXHR0ZW1wbGF0ZVVybDogJy4vZ3JpZC5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsOiAnLi9ncmlkLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgR3JpZENvbXBvbmVudCB7XG5cdEBWaWV3Q2hpbGQoQWdHcmlkQW5ndWxhcikgZ3JpZCE6IEFnR3JpZEFuZ3VsYXI7XG5cdEBWaWV3Q2hpbGQoQWdHcmlkQW5ndWxhciwgeyByZWFkOiBFbGVtZW50UmVmIH0pIGdyaWRSZWYhOiBFbGVtZW50UmVmO1xuXHRAVmlld0NoaWxkKCdncmlkQ29udGFpbmVyJykgY29udGFpbmVyUmVmITogRWxlbWVudFJlZjtcblx0Z3JpZE9wdGlvbnMgPSBpbnB1dDxHcmlkT3B0aW9ucz4oe30pO1xuXHRzZWxlY3Rpb25LZXlzID0gaW5wdXQ8YW55W10+KFtdKTtcblx0dG9PcHRpb25zID0gY29tcHV0ZWQoKCkgPT5cblx0XHR0aGlzLndpdGhHcmlkQ29udGV4dChncmlkVXRpbHMubWVyZ2VPcHRpb25zKHsgLi4uZGVmYXVsdE9wdGlvbiwgLi4udGhpcy5ncmlkT3B0aW9ucygpIH0sIHVudHJhY2tlZCgoKSA9PiB0aGlzLnNlYXJjaFBybSgpKS5saW1pdCwgdGhpcy5hY3Rpb24pKSxcblx0KTtcblx0dGhlbWVDb25maWcgPSBpbmplY3QoVGhlbWVDb25maWdTZXJ2aWNlKTtcblx0bG9jYWxlVGV4dDogYW55O1xuXHRpMThuU2VydmljZSA9IGluamVjdChJMThuU2VydmljZSk7XG5cdG15VGhlbWUgPSBjb21wdXRlZCgoKSA9PiBncmlkVXRpbHMuZ2V0VGhlbWUodGhpcy50aGVtZUNvbmZpZykpO1xuXHRjb21wb25lbnRzID0gY29tcG9uZW50cztcblx0Y29sdW1uRGVmczogQ29sRGVmW10gPSBbXTtcblx0aW5pdEdyaWQgPSB0cnVlO1xuXHRjb250ZW50TWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdG1haW5GaWVsZCE6IHN0cmluZztcblx0bW9kZWxOYW1lITogc3RyaW5nO1xuXHR1cHNlcnQgPSBpbnB1dDxhbnk+KCk7XG5cdHN1YkluZGV4ITogbnVtYmVyO1xuXHRyb3dEYXRhID0gaW5wdXQ8YW55Pih1bmRlZmluZWQpO1xuXHRoaWRlRXhwcmVzc2lvbkRhdGEgPSBpbnB1dDxSZWNvcmQ8c3RyaW5nLCBhbnk+Pih7fSk7XG5cdGhpZGVFeHByZXNzaW9uVmVyc2lvbiA9IGlucHV0KDApO1xuXHRzZWFyY2hQcm0gPSBpbnB1dDxTZWFyY2g+KHt9KTtcblx0cmF3UHJtPzogU2VhcmNoO1xuXHRkZWxldGVFbWl0ID0gb3V0cHV0PG51bWJlcltdPigpO1xuXHRhZGRFbWl0ID0gb3V0cHV0KCk7XG5cdGdyaWREYXRhQ2hhbmdlZCA9IG91dHB1dDx2b2lkPigpO1xuXHRhZGRUeXBlID0gaW5wdXQ8J2hhbmRsZScgfCAnc2VsZWN0JyB8ICdub25lJz4oKTtcblx0c2VsZWN0RGF0YSA9IGlucHV0PGFueVtdPigpO1xuXHRzaG93QWN0ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cdGFjdFBvcyA9IGlucHV0PCd0b3AnIHwgJ2JvdHRvbSc+KCdib3R0b20nKTtcblx0YXV0aExldmVsID0gaW5wdXQ8bnVtYmVyPigtMSk7XG5cdGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG5cdHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cdG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuXHRjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXHRzaG93RGVsZXRlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cdGRlbGV0ZUhpZGRlbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblx0YWRkSGlkZGVuID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXHRncmlkRGlzYWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblx0YWRkU29ydCA9IGlucHV0PHN0cmluZz4oKTtcblx0c3ViU2F2ZVZpc2libGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cdHN1YlNhdmVIaWRkZW4gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cdHN1YlNhdmVMYWJlbCA9IGlucHV0PHN0cmluZz4oJ+S/neWtmCcpO1xuXHRzdWJTYXZlRGlzYWJsZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cdHN1YlNhdmVFbWl0ID0gb3V0cHV0KCk7XG5cblx0cmljaE11bHRNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblx0aG9yaXpvbnRhbFNjcm9sbEJhck9ic2VydmVyOiBhbnk7XG5cdGhvcml6b250YWxTY3JvbGxCYXJIZWlnaHQgPSAwO1xuXHR2ZXJ0aWNhbFNjcm9sbEJhck9ic2VydmVyOiBhbnk7XG5cdHZlcnRpY2FsU2Nyb2xsQmFyV2lkdGggPSAwO1xuXHRncmlkSGVpZ2h0ID0gMDtcblx0c2VsZWN0ZWRSb3dzID0gc2lnbmFsPGFueVtdPihbXSk7XG5cdG5vUm93cyA9IHRydWU7XG5cdHNob3dIb3Jpem9udGFsID0gZmFsc2U7XG5cdGRyYWdCZWZvcmVJbmRleCA9IC0xO1xuXHRzaW5nbGVDbGlja0VkaXQgPSBzaWduYWwoZmFsc2UpO1xuXHRhdXRvR3JvdXBDb2x1bW5EZWY6IEF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICBtaW5XaWR0aDogMTgwLFxuICB9O1xuXHRwcml2YXRlIHNlYXJjaFBybVN1YjogYW55O1xuXHRwcml2YXRlIGNvbHVtbkRlZnNMb2FkSWQgPSAwO1xuXHRwcml2YXRlIGNvbHVtbkRlZnNIYXZlSGlkZUV4cHJlc3Npb24gPSBmYWxzZTtcblx0cHJpdmF0ZSBjb2x1bW5IaWRlU2lnbmF0dXJlID0gJyc7XG5cdHByaXZhdGUgY29sdW1uSGlkZUV4cHJlc3Npb25FcnJvclNldCA9IG5ldyBXZWFrU2V0PEZ1bmN0aW9uPigpO1xuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcblx0b25SZXNpemUoKSB7XG5cdFx0dGhpcy5zZXRTY3JvbGxIZWlnaHQoKTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aW9uOiBBY3Rpb25TZXJ2aWNlKSB7XG5cdFx0dGhpcy5zaW5nbGVDbGlja0VkaXQuc2V0KHRoaXMuaXNNb2JpbGVPclRhYmxldEJyb3dzZXIoKSk7XG5cdFx0dGhpcy5zZWFyY2hQcm1TdWIgPSB0b09ic2VydmFibGUodGhpcy5zZWFyY2hQcm0pLnN1YnNjcmliZSgoc2VhcmNoUHJtKSA9PiB7XG5cdFx0XHRpZiAoc2VhcmNoUHJtLm1vZGVsTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMucmF3UHJtID0gc2VhcmNoUHJtO1xuXHRcdFx0XHR0aGlzLnNlYXJjaFBybVN1Yi51bnN1YnNjcmliZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMudG9PcHRpb25zKCk7XG5cdFx0XHRcdHZvaWQgdGhpcy5yZWZyZXNoQ29sdW1uRGVmcyhvcHRpb25zKTtcblx0XHRcdFx0dGhpcy5tYWluRmllbGQgPSBvcHRpb25zLm1haW5GaWVsZCE7XG5cdFx0XHRcdHRoaXMubW9kZWxOYW1lID0gb3B0aW9ucy5tb2RlbE5hbWUhO1xuXHRcdFx0XHRpZiAoIXRoaXMudXBzZXJ0KCk/LnN1YnNlcnQ/LmZpbmQoKHY6IGFueSkgPT4gdi5zdWJNb2RlbE5hbWUgPT09IHRoaXMubW9kZWxOYW1lKSkge1xuXHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnQ/LnB1c2goe1xuXHRcdFx0XHRcdFx0c3ViTW9kZWxOYW1lOiBvcHRpb25zLm1vZGVsTmFtZSxcblx0XHRcdFx0XHRcdGZrOiBvcHRpb25zLmZrLFxuXHRcdFx0XHRcdFx0c3ViRGF0YTogW10sXG5cdFx0XHRcdFx0XHRtYXB0bXA6IG5ldyBNYXAoKSxcblx0XHRcdFx0XHRcdGxvZ3RtcDogbmV3IE1hcCgpLFxuXHRcdFx0XHRcdFx0cmVmZXJlbmNlOiBvcHRpb25zLnJlZmVyZW5jZSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnN1YkluZGV4ID0gdGhpcy51cHNlcnQoKT8uc3Vic2VydD8uZmluZEluZGV4KCh2OiBhbnkpID0+IHYuc3ViTW9kZWxOYW1lID09PSB0aGlzLm1vZGVsTmFtZSk7XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuYWN0aW9uLnNlYXJjaE1vbml0b3IodGhpcy50b09wdGlvbnMoKS5tb2RlbE5hbWUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuZ2V0RGF0YSgpO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCByb3dEYXRhID0gdGhpcy5yb3dEYXRhKCk7XG5cdFx0XHRpZiAocm93RGF0YSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvcHRpb25zID0gdGhpcy50b09wdGlvbnMoKTtcblx0XHRcdFx0aWYgKHRoaXMuaGFzRHluYW1pY1NlbGVjdERhdGFDb2x1bW4ob3B0aW9ucykpIHtcblx0XHRcdFx0XHR2b2lkIHRoaXMucmVmcmVzaENvbHVtbkRlZnMob3B0aW9ucyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9wdGlvbnMucm93TW9kZWxUeXBlID09PSAnc2VydmVyU2lkZScgJiYgb3B0aW9ucy5zZXJ2ZXJGdW5jKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9wdGlvbnMucm93TW9kZWxUeXBlID0gJ2NsaWVudFNpZGUnO1xuXHRcdFx0XHRvcHRpb25zLmNsaWVudEZ1bmMgPSAoKSA9PiBvZih7IGRhdGE6IHJvd0RhdGEsIHRvdGFsTnVtOiByb3dEYXRhPy5sZW5ndGggfSk7XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZ2V0Q2xpZW50RGF0YSh1bmRlZmluZWQpO1xuXHRcdFx0XHR9LCAxMDApO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5zZWxlY3REYXRhKCkgJiYgdGhpcy5zZWxlY3REYXRhKCkhLmxlbmd0aCA+IDAgJiYgdGhpcy5ncmlkKSB7XG5cdFx0XHRcdFx0dGhpcy5oYW5kbGVBZGRlZFJvd3ModGhpcy5zZWxlY3REYXRhKCkhKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy50b09wdGlvbnMoKS5wcmVTZWFyY2ggJiZcblx0XHRcdFx0XHR0aGlzLmFjdGlvbi5zZXRTZWFyY2goeyBjb2x1bW5GaWx0ZXJzOiB0aGlzLnRvT3B0aW9ucygpLnByZVNlYXJjaCEuY29sdW1uRmlsdGVycyB9LCB0aGlzLnRvT3B0aW9ucygpLm1vZGVsTmFtZSk7XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvbi5nZXRBY3Rpb24oKTtcblx0XHRcdFx0aWYgKGFjdGlvbj8udHlwZSA9PT0gJ2V4cG9ydCcpIHtcblx0XHRcdFx0XHR0aGlzLmdyaWQuYXBpLmV4cG9ydERhdGFBc0V4Y2VsKHsgZmlsZU5hbWU6IHRoaXMubW9kZWxOYW1lIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHR0aGlzLmhpZGVFeHByZXNzaW9uVmVyc2lvbigpO1xuXHRcdFx0XHR1bnRyYWNrZWQoKCkgPT4gdGhpcy5yZWZyZXNoQ29sdW1uSGlkZUV4cHJlc3Npb25zKCkpO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdHRoaXMuZWRpdGluZ0ZpeCgpO1xuXHR9XG5cblx0cHJpdmF0ZSB3aXRoR3JpZENvbnRleHQob3B0aW9uczogYW55KTogYW55IHtcblx0XHR0aGlzLmdyaWREaXNhYmxlKCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLm9wdGlvbnMsXG5cdFx0XHRjb250ZXh0OiB7XG5cdFx0XHRcdC4uLihvcHRpb25zLmNvbnRleHQgfHwge30pLFxuXHRcdFx0XHRncmlkRGlzYWJsZWQ6ICgpID0+IHRoaXMuZ3JpZERpc2FibGUoKSxcblx0XHRcdFx0Z3JpZDogKCkgPT4gdGhpcyxcblx0XHRcdH0sXG5cdFx0fTtcblx0fVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuaTE4blNlcnZpY2UuY2hhbmdlLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHR0aGlzLmdyaWQgJiYgdGhpcy5ncmlkLmFwaS5kZXN0cm95KCk7XG5cdFx0XHR0aGlzLmluaXRHcmlkID0gZmFsc2U7XG5cdFx0XHR0aGlzLmxvY2FsZVRleHQgPSBncmlkVXRpbHMuZ2V0TG9jYWxUZXh0KHJlcyk7XG5cdFx0XHR0aGlzLmNvbHVtbkRlZnMgPSBncmlkVXRpbHMuaGFuZGxlSTE4bktleSh0aGlzLnJlc29sdmVDb2x1bW5IaWRlRXhwcmVzc2lvbnModGhpcy50b09wdGlvbnMoKS5jb2x1bW5EZWZzISksIHRoaXMuaTE4blNlcnZpY2UpO1xuXHRcdFx0dGhpcy5jb2x1bW5EZWZzSGF2ZUhpZGVFeHByZXNzaW9uID0gdGhpcy5oYXNDb2x1bW5IaWRlRXhwcmVzc2lvbih0aGlzLmNvbHVtbkRlZnMpO1xuXHRcdFx0dGhpcy5jb2x1bW5IaWRlU2lnbmF0dXJlID0gdGhpcy5nZXRDb2x1bW5IaWRlU2lnbmF0dXJlKHRoaXMuY29sdW1uRGVmcyk7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5pbml0R3JpZCA9IHRydWU7XG5cdFx0XHR9LCAxMDApO1xuXHRcdH0pO1xuXHRcdHRoaXMubG9jYWxlVGV4dCA9IGdyaWRVdGlscy5nZXRMb2NhbFRleHQodGhpcy5pMThuU2VydmljZS5jdXJyZW50TGFuZyk7XG5cdH1cblxuXHRuZ0FmdGVyVmlld0luaXQoKSB7fVxuXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdHRoaXMuc2VhcmNoUHJtU3ViPy51bnN1YnNjcmliZSgpO1xuXHRcdGlmICh0aGlzLmhvcml6b250YWxTY3JvbGxCYXJPYnNlcnZlcikge1xuXHRcdFx0dGhpcy5ob3Jpem9udGFsU2Nyb2xsQmFyT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdH1cblx0XHRpZiAodGhpcy52ZXJ0aWNhbFNjcm9sbEJhck9ic2VydmVyKSB7XG5cdFx0XHR0aGlzLnZlcnRpY2FsU2Nyb2xsQmFyT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdH1cblx0fVxuXG5cdGdldEdyaWQoKTogQWdHcmlkQW5ndWxhciB7XG5cdFx0cmV0dXJuIHRoaXMuZ3JpZDtcblx0fVxuXG5cdHByaXZhdGUgaXNNb2JpbGVPclRhYmxldEJyb3dzZXIoKSB7XG5cdFx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuXHRcdGNvbnN0IGlzUGhvbmUgPSAvYW5kcm9pZC4qbW9iaWxlfGlwaG9uZXxpcG9kfHdpbmRvd3MgcGhvbmV8YmxhY2tiZXJyeXxpZW1vYmlsZXxvcGVyYSBtaW5pLy50ZXN0KHVhKTtcblx0XHRjb25zdCBpc1RhYmxldCA9XG5cdFx0XHQvaXBhZHx0YWJsZXR8cGxheWJvb2t8c2lsa3woYW5kcm9pZCg/IS4qbW9iaWxlKSkvLnRlc3QodWEpIHx8XG5cdFx0XHQobmF2aWdhdG9yLnBsYXRmb3JtID09PSAnTWFjSW50ZWwnICYmIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDEpO1xuXHRcdHJldHVybiBpc1Bob25lIHx8IGlzVGFibGV0O1xuXHR9XG5cblx0b25HcmlkUmVhZHkoZTogYW55KSB7XG5cdFx0dGhpcy5pbml0R3JpZEhlaWdodCgpO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5nZXREYXRhKCk7XG5cdFx0fSwgMTAwKTtcblx0fVxuXG5cdG9uU2VsZWN0aW9uQ2hhbmdlZChldmVudDogYW55KTogYW55IHtcblx0XHR0aGlzLnNlbGVjdGVkUm93cy5zZXQoZ3JpZFV0aWxzLmNhbGNSb3dJZHMoZXZlbnQuYXBpLCB0aGlzLnRvT3B0aW9ucygpPy5yb3dNb2RlbFR5cGUgPT0gJ3NlcnZlclNpZGUnKSk7XG5cdH1cblxuXHRvblJvd0dyb3VwT3BlbmVkKCkge1xuXHRcdHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuYWp1c3RHcmlkSGVpZ2h0KCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgaGFzRHluYW1pY1NlbGVjdERhdGFDb2x1bW4ob3B0aW9uczogR3JpZE9wdGlvbnMgPSB0aGlzLnRvT3B0aW9ucygpKSB7XG5cdFx0cmV0dXJuICEhb3B0aW9ucy5jb2x1bW5EZWZzPy5zb21lKChpdGVtOiBhbnkpID0+IGl0ZW0/Lmhhc093blByb3BlcnR5KCdzZWxlY3REYXRhJykgJiYgdHlwZW9mIGl0ZW0uc2VsZWN0RGF0YSA9PT0gJ2Z1bmN0aW9uJyk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIHJlZnJlc2hDb2x1bW5EZWZzKG9wdGlvbnM6IEdyaWRPcHRpb25zID0gdGhpcy50b09wdGlvbnMoKSkge1xuXHRcdGNvbnN0IGxvYWRJZCA9ICsrdGhpcy5jb2x1bW5EZWZzTG9hZElkO1xuXHRcdGNvbnN0IGNvbHVtbkRlZnMgPSBhd2FpdCB0aGlzLnNldFJpY2hWYWx1ZShvcHRpb25zKTtcblx0XHRpZiAobG9hZElkICE9PSB0aGlzLmNvbHVtbkRlZnNMb2FkSWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5jb2x1bW5EZWZzID0gZ3JpZFV0aWxzLmhhbmRsZUkxOG5LZXkodGhpcy5yZXNvbHZlQ29sdW1uSGlkZUV4cHJlc3Npb25zKGNvbHVtbkRlZnMpLCB0aGlzLmkxOG5TZXJ2aWNlKTtcblx0XHR0aGlzLmNvbHVtbkRlZnNIYXZlSGlkZUV4cHJlc3Npb24gPSB0aGlzLmhhc0NvbHVtbkhpZGVFeHByZXNzaW9uKHRoaXMuY29sdW1uRGVmcyk7XG5cdFx0dGhpcy5jb2x1bW5IaWRlU2lnbmF0dXJlID0gdGhpcy5nZXRDb2x1bW5IaWRlU2lnbmF0dXJlKHRoaXMuY29sdW1uRGVmcyk7XG5cdFx0aWYgKHRoaXMuZ3JpZD8uYXBpKSB7XG5cdFx0XHR0aGlzLmdyaWQuYXBpLnNldEdyaWRPcHRpb24oJ2NvbHVtbkRlZnMnLCB0aGlzLmNvbHVtbkRlZnMpO1xuXHRcdFx0dGhpcy5ncmlkLmFwaS5yZWZyZXNoQ2VsbHMoe1xuXHRcdFx0XHRmb3JjZTogdHJ1ZSxcblx0XHRcdFx0c3VwcHJlc3NGbGFzaDogdHJ1ZSxcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcmVmcmVzaENvbHVtbkhpZGVFeHByZXNzaW9ucygpIHtcblx0XHRpZiAoIXRoaXMuY29sdW1uRGVmc0hhdmVIaWRlRXhwcmVzc2lvbiB8fCAhdGhpcy5ncmlkPy5hcGkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgbmV4dENvbHVtbkRlZnMgPSB0aGlzLnJlc29sdmVDb2x1bW5IaWRlRXhwcmVzc2lvbnModGhpcy5jb2x1bW5EZWZzKTtcblx0XHRjb25zdCBuZXh0U2lnbmF0dXJlID0gdGhpcy5nZXRDb2x1bW5IaWRlU2lnbmF0dXJlKG5leHRDb2x1bW5EZWZzKTtcblx0XHRpZiAobmV4dFNpZ25hdHVyZSA9PT0gdGhpcy5jb2x1bW5IaWRlU2lnbmF0dXJlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuY29sdW1uRGVmcyA9IG5leHRDb2x1bW5EZWZzO1xuXHRcdHRoaXMuY29sdW1uSGlkZVNpZ25hdHVyZSA9IG5leHRTaWduYXR1cmU7XG5cdFx0dGhpcy5ncmlkLmFwaS5zZXRHcmlkT3B0aW9uKCdjb2x1bW5EZWZzJywgdGhpcy5jb2x1bW5EZWZzKTtcblx0XHR0aGlzLmdyaWQuYXBpLnJlZnJlc2hDZWxscyh7XG5cdFx0XHRmb3JjZTogdHJ1ZSxcblx0XHRcdHN1cHByZXNzRmxhc2g6IHRydWUsXG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVDb2x1bW5IaWRlRXhwcmVzc2lvbnMoY29sdW1uRGVmczogYW55W10gPSBbXSkge1xuXHRcdHJldHVybiBjb2x1bW5EZWZzLm1hcCgoaXRlbTogYW55KSA9PiB0aGlzLnJlc29sdmVDb2x1bW5IaWRlRXhwcmVzc2lvbihpdGVtKSk7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVDb2x1bW5IaWRlRXhwcmVzc2lvbihpdGVtOiBhbnkpOiBhbnkge1xuXHRcdGNvbnN0IHN0YXRpY0hpZGUgPSB0aGlzLnJlc29sdmVTdGF0aWNIaWRlKGl0ZW0pO1xuXHRcdGNvbnN0IGhpZGVFeHByZXNzaW9uID0gdGhpcy5yZXNvbHZlSGlkZUV4cHJlc3Npb24oaXRlbSk7XG5cdFx0bGV0IGV4cHJlc3Npb25IaWRlID0gZmFsc2U7XG5cdFx0aWYgKHR5cGVvZiBoaWRlRXhwcmVzc2lvbiA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZXhwcmVzc2lvbkhpZGUgPSAhIWhpZGVFeHByZXNzaW9uKHRoaXMuaGlkZUV4cHJlc3Npb25EYXRhKCkgfHwge30pO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0aWYgKCF0aGlzLmNvbHVtbkhpZGVFeHByZXNzaW9uRXJyb3JTZXQuaGFzKGhpZGVFeHByZXNzaW9uKSkge1xuXHRcdFx0XHRcdHRoaXMuY29sdW1uSGlkZUV4cHJlc3Npb25FcnJvclNldC5hZGQoaGlkZUV4cHJlc3Npb24pO1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ+WIl+makOiXj+adoeS7tuaJp+ihjOWksei0pTonLCBlcnJvciwgaXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgbmV4dEl0ZW0gPSB7XG5cdFx0XHQuLi5pdGVtLFxuXHRcdFx0aGlkZUV4cHJlc3Npb246IGl0ZW0uaGlkZUV4cHJlc3Npb24gPyBoaWRlRXhwcmVzc2lvbiA6IGl0ZW0uaGlkZUV4cHJlc3Npb24sXG5cdFx0XHRoaWRlOiAhIXN0YXRpY0hpZGUgfHwgZXhwcmVzc2lvbkhpZGUsXG5cdFx0fTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobmV4dEl0ZW0sIFNUQVRJQ19ISURFX0tFWSwge1xuXHRcdFx0dmFsdWU6IHN0YXRpY0hpZGUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobmV4dEl0ZW0sIEhJREVfRVhQUkVTU0lPTl9LRVksIHtcblx0XHRcdHZhbHVlOiBoaWRlRXhwcmVzc2lvbixcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdH0pO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGl0ZW0uY2hpbGRyZW4pKSB7XG5cdFx0XHRuZXh0SXRlbS5jaGlsZHJlbiA9IHRoaXMucmVzb2x2ZUNvbHVtbkhpZGVFeHByZXNzaW9ucyhpdGVtLmNoaWxkcmVuKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5leHRJdGVtO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlSGlkZUV4cHJlc3Npb24oaXRlbTogYW55KSB7XG5cdFx0Y29uc3QgY29uZmlndXJlZEhpZGVFeHByZXNzaW9uID0gaXRlbS5oaWRlRXhwcmVzc2lvbiA9PT0gJycgfHwgaXRlbS5oaWRlRXhwcmVzc2lvbiA9PSBudWxsID8gdW5kZWZpbmVkIDogaXRlbS5oaWRlRXhwcmVzc2lvbjtcblx0XHRjb25zdCBoaWRlRXhwcmVzc2lvbiA9IGl0ZW1bSElERV9FWFBSRVNTSU9OX0tFWV0gPz8gY29uZmlndXJlZEhpZGVFeHByZXNzaW9uID8/IHRoaXMuZ2V0RHluYW1pY0hpZGUoaXRlbS5oaWRlKTtcblx0XHRpZiAodHlwZW9mIGhpZGVFeHByZXNzaW9uID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm4gaGlkZUV4cHJlc3Npb247XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgaGlkZUV4cHJlc3Npb24gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRyZXR1cm4gcGFyc2VGdW5jdGlvbnMoaGlkZUV4cHJlc3Npb24sIHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gaGlkZUV4cHJlc3Npb247XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVTdGF0aWNIaWRlKGl0ZW06IGFueSkge1xuXHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaXRlbSwgU1RBVElDX0hJREVfS0VZKSkge1xuXHRcdFx0cmV0dXJuICEhaXRlbVtTVEFUSUNfSElERV9LRVldO1xuXHRcdH1cblx0XHRyZXR1cm4gaXRlbS5oaWRlQ29sID09PSB0cnVlIHx8IGl0ZW0uaGlkZSA9PT0gdHJ1ZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0RHluYW1pY0hpZGUoaGlkZTogYW55KSB7XG5cdFx0aWYgKHR5cGVvZiBoaWRlID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXR1cm4gaGlkZTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBoaWRlID09PSAnc3RyaW5nJykge1xuXHRcdFx0Y29uc3QgcGFyc2VkSGlkZSA9IHBhcnNlRnVuY3Rpb25zKGhpZGUsIHRoaXMpO1xuXHRcdFx0cmV0dXJuIHR5cGVvZiBwYXJzZWRIaWRlID09PSAnZnVuY3Rpb24nID8gcGFyc2VkSGlkZSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHByaXZhdGUgaGFzQ29sdW1uSGlkZUV4cHJlc3Npb24oY29sdW1uRGVmczogYW55W10gPSBbXSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBjb2x1bW5EZWZzLnNvbWUoKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR0eXBlb2YgaXRlbVtISURFX0VYUFJFU1NJT05fS0VZXSA9PT0gJ2Z1bmN0aW9uJyB8fFxuXHRcdFx0XHR0eXBlb2YgaXRlbS5oaWRlRXhwcmVzc2lvbiA9PT0gJ2Z1bmN0aW9uJyB8fFxuXHRcdFx0XHR0eXBlb2YgaXRlbS5oaWRlRXhwcmVzc2lvbiA9PT0gJ3N0cmluZycgfHxcblx0XHRcdFx0dHlwZW9mIGl0ZW0uaGlkZSA9PT0gJ2Z1bmN0aW9uJyB8fFxuXHRcdFx0XHR0eXBlb2YgaXRlbS5oaWRlID09PSAnc3RyaW5nJ1xuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkoaXRlbS5jaGlsZHJlbikgPyB0aGlzLmhhc0NvbHVtbkhpZGVFeHByZXNzaW9uKGl0ZW0uY2hpbGRyZW4pIDogZmFsc2U7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGdldENvbHVtbkhpZGVTaWduYXR1cmUoY29sdW1uRGVmczogYW55W10gPSBbXSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGNvbHVtbkRlZnNcblx0XHRcdC5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBpdGVtLmNvbElkIHx8IGl0ZW0uZmllbGQgfHwgaXRlbS5oZWFkZXJOYW1lIHx8IGluZGV4O1xuXHRcdFx0XHRjb25zdCBjaGlsZHJlbiA9IEFycmF5LmlzQXJyYXkoaXRlbS5jaGlsZHJlbikgPyB0aGlzLmdldENvbHVtbkhpZGVTaWduYXR1cmUoaXRlbS5jaGlsZHJlbikgOiAnJztcblx0XHRcdFx0cmV0dXJuIGAke2tleX06JHtpdGVtLmhpZGUgPyAxIDogMH0ke2NoaWxkcmVuID8gYFske2NoaWxkcmVufV1gIDogJyd9YDtcblx0XHRcdH0pXG5cdFx0XHQuam9pbignfCcpO1xuXHR9XG5cblx0YXN5bmMgc2V0UmljaFZhbHVlKG9wdGlvbnM6IEdyaWRPcHRpb25zID0gdGhpcy50b09wdGlvbnMoKSkge1xuXHRcdGxldCBjb2wgPSBvcHRpb25zLmNvbHVtbkRlZnMhIHx8IFtdO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBwcm9jZXNzZWRDb2xzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdGNvbC5tYXAoYXN5bmMgKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG5leHRJdGVtID0geyAuLi5pdGVtIH07XG5cdFx0XHRcdFx0aWYgKG5leHRJdGVtLmhhc093blByb3BlcnR5KCdmaWVsZElkJykgJiYgKG5leHRJdGVtLmNlbGxFZGl0b3IgPT0gJ2FnUmljaFNlbGVjdENlbGxFZGl0b3InIHx8IG5leHRJdGVtLmNlbGxFZGl0b3IgPT0gJ2FnU2VsZWN0Q2VsbEVkaXRvcicgfHwgbmV4dEl0ZW0uY2VsbEVkaXRvciA9PSAnY2VsbEVkaXRTZWxlY3RGaWVsZENvbXBvbmVudCcpICYmICFuZXh0SXRlbS5yb3dHcm91cCkge1xuXHRcdFx0XHRcdFx0bGV0IHZhbHVlczogYW55ID0gW107XG5cdFx0XHRcdFx0XHRjb25zdCByYXdDZWxsRWRpdG9yUGFyYW1zID1cblx0XHRcdFx0XHRcdFx0dHlwZW9mIGl0ZW0uY2VsbEVkaXRvclBhcmFtcyA9PT0gJ2Z1bmN0aW9uJyA/IGl0ZW0uY2VsbEVkaXRvclBhcmFtcygpIHx8IHt9IDogaXRlbS5jZWxsRWRpdG9yUGFyYW1zIHx8IHt9O1xuXHRcdFx0XHRcdFx0Y29uc3QgY2VsbEVkaXRvclBhcmFtcyA9IHsgLi4ucmF3Q2VsbEVkaXRvclBhcmFtcyB9O1xuXHRcdFx0XHRcdFx0aWYgKGNlbGxFZGl0b3JQYXJhbXMuaGFzT3duUHJvcGVydHkoJ3ZhbHVlcycpKSB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlcyA9IGNlbGxFZGl0b3JQYXJhbXMudmFsdWVzIHx8IFtdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKG5leHRJdGVtLmhhc093blByb3BlcnR5KCdzZWxlY3REYXRhJykgJiYgdHlwZW9mIG5leHRJdGVtLnNlbGVjdERhdGEgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdFx0dmFsdWVzID0gKGF3YWl0IGl0ZW0uc2VsZWN0RGF0YSgpKSB8fCBbXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG5leHRJdGVtLmNlbGxFZGl0b3JQYXJhbXMgPSB7XG5cdFx0XHRcdFx0XHRcdC4uLmNlbGxFZGl0b3JQYXJhbXMsXG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdE1heEhlaWdodDogMjAwLFxuXHRcdFx0XHRcdFx0XHRzdXBwcmVzc011bHRpU2VsZWN0UGlsbFJlbmRlcmVyOiB0cnVlLFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGlmIChuZXh0SXRlbS5jZWxsRWRpdG9yUGFyYW1zLmhhc093blByb3BlcnR5KCd2YWx1ZXMnKSAmJiAhKG5leHRJdGVtLmhhc093blByb3BlcnR5KCdzZWxlY3REYXRhJykgJiYgdHlwZW9mIG5leHRJdGVtLnNlbGVjdERhdGEgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlcyA9IG5leHRJdGVtLmNlbGxFZGl0b3JQYXJhbXMudmFsdWVzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IGlzU3RyaW5nID0gdmFsdWVzLmV2ZXJ5KChpdGVtOiBhbnkpID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyk7XG5cdFx0XHRcdFx0XHRpZiAoIWlzU3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9wdGlvblZhbHVlRmllbGQgPSBuZXh0SXRlbS5jZWxsRWRpdG9yUGFyYW1zLm9wdGlvblZhbHVlIHx8ICd2YWx1ZSc7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9wdGlvbkxhYmVsRmllbGQgPSBuZXh0SXRlbS5jZWxsRWRpdG9yUGFyYW1zLm9wdGlvbkxhYmVsIHx8ICdsYWJlbCc7XG5cdFx0XHRcdFx0XHRcdG5leHRJdGVtLmNlbGxFZGl0b3JQYXJhbXMucmF3T3B0aW9ucyA9IHZhbHVlcztcblx0XHRcdFx0XHRcdFx0bmV4dEl0ZW0uY2VsbEVkaXRvclBhcmFtcy52YWx1ZXMgPSB2YWx1ZXMubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0/LltvcHRpb25WYWx1ZUZpZWxkXSk7XG5cdFx0XHRcdFx0XHRcdG5leHRJdGVtLnZhbHVlRm9ybWF0dGVyID0gKHBhcmFtczogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHBhcmFtcy5jb2xEZWYuY2VsbEVkaXRvclBhcmFtcy5yYXdPcHRpb25zIGFzIGFueVtdO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlRmllbGQgPSBwYXJhbXMuY29sRGVmLmNlbGxFZGl0b3JQYXJhbXMub3B0aW9uVmFsdWUgfHwgJ3ZhbHVlJztcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBsYWJlbEZpZWxkID0gcGFyYW1zLmNvbERlZi5jZWxsRWRpdG9yUGFyYW1zLm9wdGlvbkxhYmVsIHx8ICdsYWJlbCc7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBwYXJhbXMudmFsdWUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBvcHRpb24gPSBvcHRpb25zLmZpbmQoKG9wdCkgPT4gb3B0Py5bdmFsdWVGaWVsZF0gPT0gcGFyYW1zLnZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvcHRpb24gPyBvcHRpb24/LltsYWJlbEZpZWxkXSA6IHBhcmFtcy52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHZhbHVlczogYW55ID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIHBhcmFtcy52YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHBhcmFtcy52YWx1ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWVzID0gcGFyYW1zLnZhbHVlLnNwbGl0KCcsJykubWFwKCh2OiBhbnkpID0+ICghaXNOYU4odikgPyBOdW1iZXIodikgOiB2KSkgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlcyA9IHBhcmFtcy52YWx1ZSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9wdGlvbiA9IG9wdGlvbnMuZmlsdGVyKChvcHQpID0+IHZhbHVlcy5pbmNsdWRlcyhvcHQ/Llt2YWx1ZUZpZWxkXSkpIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9wdGlvbi5sZW5ndGggPiAwID8gb3B0aW9uLm1hcCgodikgPT4gdj8uW2xhYmVsRmllbGRdKSA6IHBhcmFtcy52YWx1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdG5leHRJdGVtLnZhbHVlR2V0dGVyID0gKHBhcmFtczogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coJ3BhbXJhbXMtLS0tJyxwYXJhbXMsaXRlbS5maWVsZClcblx0XHRcdFx0XHRcdFx0XHRpZiAoKG5leHRJdGVtLmNlbGxFZGl0b3IgPT0gJ2FnUmljaFNlbGVjdENlbGxFZGl0b3InIHx8IG5leHRJdGVtLmNlbGxFZGl0b3IgPT0gJ2NlbGxFZGl0U2VsZWN0RmllbGRDb21wb25lbnQnKSAmJiBwYXJhbXMuZGF0YSAmJiBwYXJhbXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShuZXh0SXRlbS5maWVsZCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB0eXBlb2YgcGFyYW1zLmRhdGFbbmV4dEl0ZW0uZmllbGRdID09ICdzdHJpbmcnID8gcGFyYW1zLmRhdGFbbmV4dEl0ZW0uZmllbGRdLnNwbGl0KCcsJykgOiBwYXJhbXMuZGF0YVtuZXh0SXRlbS5maWVsZF07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwYXJhbXMuZGF0YSA/IHBhcmFtcy5kYXRhW25leHRJdGVtLmZpZWxkXTogJydcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0bmV4dEl0ZW0udmFsdWVQYXJzZXIgPSAocGFyYW1zOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygncGFyYW1zLS0tLScscGFyYW1zKVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9wdGlvbnMgPSBwYXJhbXMuY29sRGVmLmNlbGxFZGl0b3JQYXJhbXMucmF3T3B0aW9ucyBhcyBhbnlbXTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB2YWx1ZUZpZWxkID0gcGFyYW1zLmNvbERlZi5jZWxsRWRpdG9yUGFyYW1zLm9wdGlvblZhbHVlIHx8ICd2YWx1ZSc7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbGFiZWxGaWVsZCA9IHBhcmFtcy5jb2xEZWYuY2VsbEVkaXRvclBhcmFtcy5vcHRpb25MYWJlbCB8fCAnbGFiZWwnO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9wdGlvbiA9IG9wdGlvbnMuZmluZCgob3B0KSA9PiBvcHQ/LltsYWJlbEZpZWxkXSA9PT0gcGFyYW1zLm5ld1ZhbHVlKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb3B0aW9uID8gb3B0aW9uPy5bdmFsdWVGaWVsZF0gOiBwYXJhbXMubmV3VmFsdWU7XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRuZXh0SXRlbS5jZWxsRWRpdG9yUGFyYW1zLnZhbHVlcyA9IHZhbHVlcztcblx0XHRcdFx0XHRcdFx0bmV4dEl0ZW0udmFsdWVHZXR0ZXIgPSAocGFyYW1zOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoKG5leHRJdGVtLmNlbGxFZGl0b3IgPT0gJ2FnUmljaFNlbGVjdENlbGxFZGl0b3InIHx8IG5leHRJdGVtLmNlbGxFZGl0b3IgPT0gJ2NlbGxFZGl0U2VsZWN0RmllbGRDb21wb25lbnQnKSAmJiBwYXJhbXMuZGF0YSAmJiBwYXJhbXMuZGF0YS5oYXNPd25Qcm9wZXJ0eShuZXh0SXRlbS5maWVsZCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB0eXBlb2YgcGFyYW1zLmRhdGFbbmV4dEl0ZW0uZmllbGRdID09ICdzdHJpbmcnID8gcGFyYW1zLmRhdGFbbmV4dEl0ZW0uZmllbGRdLnNwbGl0KCcsJykgOiBwYXJhbXMuZGF0YVtuZXh0SXRlbS5maWVsZF07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwYXJhbXMuZGF0YSA/IHBhcmFtcy5kYXRhW25leHRJdGVtLmZpZWxkXTogJydcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG5leHRJdGVtO1xuXHRcdFx0XHR9KSxcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gcHJvY2Vzc2VkQ29scztcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgcHJvY2Vzc2luZyBjb2x1bW5zOicsIGVycm9yKTtcblx0XHRcdHRocm93IGVycm9yO1xuXHRcdH1cblx0fVxuXG5cdGdldEVudW1zKGlkOiBudW1iZXIpIHtcblx0XHRyZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLmh0dHAucG9zdCgnZ2V0JywgeyBpZDogTnVtYmVyKGlkKSwgbW9kZWxOYW1lOiAnTW9kZWxGaWVsZCcsIHByZWxvYWRzOiBbJ0VudW0nXSB9KSk7XG5cdH1cblxuXHRoYW5kbGVTZWxlY3Rpb25zKHN0YXJ0Um93OiBudW1iZXIpIHtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLnNlbGVjdGlvbktleXMoKT8ubGVuZ3RoKSB7XG5cdFx0XHRcdGdyaWRVdGlscy5zZWxlY3Rpb25IYW5kbGVyKHRoaXMuZ3JpZC5hcGksIHRoaXMuc2VsZWN0aW9uS2V5cygpLCBzdGFydFJvdywgdGhpcy50b09wdGlvbnMoKT8uZGF0YUtleSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRnZXREYXRhKCkge1xuXHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygndGhpcy50b09wdGlvbnMoKScsdGhpcy50b09wdGlvbnMoKSlcblx0XHRcdGlmICghdGhpcy5zZWFyY2hQcm0oKS5tb2RlbE5hbWUgJiYgIXRoaXMucm93RGF0YSgpKSByZXR1cm47XG5cdFx0XHR0aGlzLmNhbmNlbFNlbGVjdCgpO1xuXHRcdFx0Y29uc3Qgc2VhcmNoID0gdGhpcy5hY3Rpb24uZ2V0U2VhcmNoKHRoaXMudG9PcHRpb25zKCkubW9kZWxOYW1lKTtcblx0XHRcdHRoaXMudG9PcHRpb25zKCk/LnJvd01vZGVsVHlwZSA9PSAnc2VydmVyU2lkZScgPyB0aGlzLmdldFNlcnZlckRhdGEoc2VhcmNoKSA6IHRoaXMuZ2V0Q2xpZW50RGF0YShzZWFyY2gpO1xuXHRcdH0pO1xuXHR9XG5cblx0Z2V0U2VydmVyRGF0YShzZWFyY2g/OiBTZWFyY2gpIHtcblx0XHR0aGlzLmdyaWQ/LmFwaS5zZXRHcmlkT3B0aW9uKCdzZXJ2ZXJTaWRlRGF0YXNvdXJjZScsIHtcblx0XHRcdGdldFJvd3M6IChwYXJhbXMpID0+IHtcblx0XHRcdFx0Y29uc3Qgc2VhcmNoUHJtOiBTZWFyY2ggPSB7XG5cdFx0XHRcdFx0Li4udGhpcy5zZWFyY2hQcm0oKSxcblx0XHRcdFx0XHRvZmZzZXQ6IHBhcmFtcy5yZXF1ZXN0LnN0YXJ0Um93LFxuXHRcdFx0XHRcdGNvbHVtbkZpbHRlcnM6IFsuLi4odGhpcy5yYXdQcm0/LmNvbHVtbkZpbHRlcnMgfHwgW10pLCAuLi4oc2VhcmNoPy5jb2x1bW5GaWx0ZXJzIHx8IFtdKV0sXG5cdFx0XHRcdFx0c29ydHM6IHNlYXJjaD8uc29ydHM/Lmxlbmd0aCA/IHNlYXJjaC5zb3J0cyA6IHRoaXMucmF3UHJtPy5zb3J0cz8ubGVuZ3RoID8gdGhpcy5yYXdQcm0uc29ydHMgOiBkZWZhdWx0U29ydHMsXG5cdFx0XHRcdH07XG5cdFx0XHRcdHNlYXJjaFBybS5jb2x1bW5GaWx0ZXJzID0gdGhpcy5pc1JhbmdlKHNlYXJjaFBybS5jb2x1bW5GaWx0ZXJzISkgYXMgQ29sdW1uRmlsdGVyW107XG5cdFx0XHRcdHRoaXMuaGFuZGxlU2VydmVyVHJlZShwYXJhbXMsIHNlYXJjaFBybSk7XG5cdFx0XHRcdHRoaXMudG9PcHRpb25zKClcblx0XHRcdFx0XHQuc2VydmVyRnVuYz8uKHNlYXJjaFBybSlcblx0XHRcdFx0XHQuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5hY3Rpb24uc2V0UGFnZSh7XG5cdFx0XHRcdFx0XHRcdHN0YXJ0Um93OiBwYXJhbXMucmVxdWVzdC5zdGFydFJvdyxcblx0XHRcdFx0XHRcdFx0ZW5kUm93OiBwYXJhbXMucmVxdWVzdC5lbmRSb3chIDwgcmVzLnRvdGFsTnVtID8gcGFyYW1zLnJlcXVlc3QuZW5kUm93IDogcmVzLnRvdGFsTnVtLFxuXHRcdFx0XHRcdFx0XHR0b3RhbDogcmVzLnRvdGFsTnVtLFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRwYXJhbXMuc3VjY2Vzcyh7IHJvd0RhdGE6IHJlcy5kYXRhIHx8IFtdIH0pO1xuXHRcdFx0XHRcdFx0dGhpcy5hanVzdEdyaWRIZWlnaHQoKTtcblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlU2VsZWN0aW9ucyhwYXJhbXMucmVxdWVzdC5zdGFydFJvdyB8fCAwKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHRoYW5kbGVTZXJ2ZXJUcmVlKHBhcmFtczogYW55LCBzZWFyY2hQcm06IFNlYXJjaCkge1xuXHRcdGlmICghdGhpcy50b09wdGlvbnMoKS50cmVlRGF0YSkgcmV0dXJuO1xuXHRcdGlmIChwYXJhbXMucmVxdWVzdC5ncm91cEtleXMubGVuZ3RoID4gMCkge1xuXHRcdFx0c2VhcmNoUHJtLmNvbHVtbkZpbHRlcnMgPSBzZWFyY2hQcm0uY29sdW1uRmlsdGVycz8uZmlsdGVyKChjb2x1bW5GaWx0ZXIpID0+IGNvbHVtbkZpbHRlci5jb2x1bW5GaWVsZCAhPT0gJ3BpZCcpO1xuXHRcdFx0c2VhcmNoUHJtLmNvbHVtbkZpbHRlcnMgPSBbXG5cdFx0XHRcdC8vIC4uLihzZWFyY2hQcm0uY29sdW1uRmlsdGVycyB8fCBbXSksXG5cdFx0XHRcdHsgY29sdW1uRmllbGQ6ICdwaWQnLCB0eXBlOiAnZXEnLCBmaXRlcjogcGFyYW1zLnJlcXVlc3QuZ3JvdXBLZXlzW3BhcmFtcy5yZXF1ZXN0Lmdyb3VwS2V5cy5sZW5ndGggLSAxXSB9LFxuXHRcdFx0XTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCFzZWFyY2hQcm0uY29sdW1uRmlsdGVycz8uZmluZCgoY29sdW1uRmlsdGVyKSA9PiBjb2x1bW5GaWx0ZXIuY29sdW1uRmllbGQgPT09ICdwaWQnKSkge1xuXHRcdFx0XHRzZWFyY2hQcm0uY29sdW1uRmlsdGVycyA9IFsuLi4oc2VhcmNoUHJtLmNvbHVtbkZpbHRlcnMgfHwgW10pLCB7IGNvbHVtbkZpZWxkOiAncGlkJywgdHlwZTogJ2VxJywgZml0ZXI6IDAgfV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHNlYXJjaFBybS5wcmVsb2FkcyA9IFsnY2hpbGRyZW4nXTtcblx0fVxuXG5cdGdldENsaWVudERhdGEoc2VhcmNoPzogU2VhcmNoKSB7XG5cdFx0Y29uc3Qgc2VhcmNoUHJtOiBTZWFyY2ggPSB7XG5cdFx0XHQuLi50aGlzLnNlYXJjaFBybSgpLFxuXHRcdFx0bGltaXQ6IENMSUVOVExJTUlULFxuXHRcdFx0Y29sdW1uRmlsdGVyczogWy4uLih0aGlzLnJhd1BybT8uY29sdW1uRmlsdGVycyB8fCBbXSksIC4uLihzZWFyY2g/LmNvbHVtbkZpbHRlcnMgfHwgW10pXSxcblx0XHRcdHNvcnRzOiBzZWFyY2g/LnNvcnRzPy5sZW5ndGggPyBzZWFyY2guc29ydHMgOiBkZWZhdWx0U29ydHMsXG5cdFx0fTtcblx0XHRzZWFyY2hQcm0uY29sdW1uRmlsdGVycyA9IHRoaXMuaXNSYW5nZShzZWFyY2hQcm0uY29sdW1uRmlsdGVycyEpIGFzIENvbHVtbkZpbHRlcltdO1xuXHRcdHRoaXMuaGFuZGxlQ2xpZW50VHJlZShzZWFyY2hQcm0pO1xuXHRcdHRoaXMudG9PcHRpb25zKClcblx0XHRcdC5jbGllbnRGdW5jPy4oc2VhcmNoUHJtKVxuXHRcdFx0LnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5hY3Rpb24uc2V0UGFnZSh7XG5cdFx0XHRcdFx0dG90YWw6IHJlcy50b3RhbE51bSxcblx0XHRcdFx0XHRtb2RlOiAnY2xpZW50Jyxcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuZ3JpZD8uYXBpLnNldEdyaWRPcHRpb24oJ3Jvd0RhdGEnLCByZXMuZGF0YSB8fCBbXSk7XG5cdFx0XHRcdHRoaXMuYWp1c3RHcmlkSGVpZ2h0KCk7XG5cdFx0XHRcdHRoaXMuaGFuZGxlU2VsZWN0aW9ucygwKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0aGFuZGxlQ2xpZW50VHJlZShzZWFyY2hQcm06IFNlYXJjaCkge1xuXHRcdGlmICghdGhpcy50b09wdGlvbnMoKS50cmVlRGF0YSkgcmV0dXJuO1xuXHRcdGNvbnN0IHByZWxvYWRzOiBhbnlbXSA9IFtdO1xuXHRcdGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy50b09wdGlvbnMoKS50cmVlTGV2ZWwhOyBpKyspIHtcblx0XHRcdHByZWxvYWRzLnB1c2goQXJyYXkoaSkuZmlsbCgnY2hpbGRyZW4nKS5qb2luKCcuJykpO1xuXHRcdH1cblx0XHRzZWFyY2hQcm0ucHJlbG9hZHMgPSBwcmVsb2Fkcztcblx0fVxuXG5cdGNlbGxWYWx1ZUNoYW5nZWQoZTogQ2VsbFZhbHVlQ2hhbmdlZEV2ZW50KSB7XG5cdFx0bGV0IHtcblx0XHRcdGNvbERlZjogeyBmaWVsZCwgaGVhZGVyTmFtZSwgY2VsbEVkaXRvciwgY2VsbEVkaXRvclBhcmFtcyB9LFxuXHRcdFx0bmV3VmFsdWUsXG5cdFx0XHRvbGRWYWx1ZSxcblx0XHRcdHJvd0luZGV4LFxuXHRcdFx0ZGF0YTogeyBpZCB9LFxuXHRcdH0gPSBlO1xuXHRcdGNvbnNvbGUubG9nKCdb5Y2V5YWD5qC85YC85Y+Y5YyWXScsIGUpO1xuXHRcdGlmIChjZWxsRWRpdG9yID09ICdhZ1JpY2hTZWxlY3RDZWxsRWRpdG9yJyAmJiBjZWxsRWRpdG9yUGFyYW1zICYmIGNlbGxFZGl0b3JQYXJhbXMubXVsdGlTZWxlY3QpIHtcblx0XHRcdG5ld1ZhbHVlID0gbmV3VmFsdWUgJiYgbmV3VmFsdWUubGVuZ3RoID4gMCA/IG5ld1ZhbHVlLmpvaW4oJywnKSA6ICcnO1xuXHRcdFx0dGhpcy5yaWNoTXVsdE1hcFtmaWVsZCFdID0gbmV3VmFsdWU7XG5cdFx0fVxuXHRcdGlmICghaWQgfHwgaWQgPT09IDApIHtcblx0XHRcdGlkID09PSAwICYmIGRlbGV0ZSBlLmRhdGEuaWQ7XG5cdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5zZXQocm93SW5kZXghLCBPYmplY3QuYXNzaWduKHsgLi4uZS5kYXRhIH0sIHRoaXMucmljaE11bHRNYXApKTtcblx0XHRcdGlmIChmaWVsZCA9PSB0aGlzLm1haW5GaWVsZCkge1xuXHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5zZXQocm93SW5kZXghICsgZmllbGQhLCB7IG5ld1ZhbHVlOiBuZXdWYWx1ZSwgaWQ6IDAsIGxhYmVsOiBoZWFkZXJOYW1lIH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaWQpIHtcblx0XHRcdGNvbnN0IGZpZWxkc3RyID0gYCR7ZmllbGR9YDtcblx0XHRcdGxldCBvOiBhbnk7XG5cdFx0XHRpZiAodGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uaGFzKHJvd0luZGV4ISkpIHtcblx0XHRcdFx0byA9IHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmdldChyb3dJbmRleCEpO1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKG8sIHsgW2ZpZWxkc3RyXTogbmV3VmFsdWUgfSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvID0geyBpZDogaWQsIFtmaWVsZHN0cl06IG5ld1ZhbHVlIH07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5zZXQocm93SW5kZXghLCBvKTtcblx0XHRcdGxldCBvbGQgPSB0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5nZXQocm93SW5kZXghICsgZmllbGQhKTtcblx0XHRcdGlmIChvbGQpIHtcblx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uc2V0KHJvd0luZGV4ISArIGZpZWxkISwge1xuXHRcdFx0XHRcdG5ld1ZhbHVlOiBuZXdWYWx1ZSxcblx0XHRcdFx0XHRvbGRWYWx1ZTogb2xkLm9sZFZhbHVlLFxuXHRcdFx0XHRcdGlkOiBpZCxcblx0XHRcdFx0XHRsYWJlbDogaGVhZGVyTmFtZSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5zZXQocm93SW5kZXghICsgZmllbGQhLCB7XG5cdFx0XHRcdFx0bmV3VmFsdWU6IG5ld1ZhbHVlLFxuXHRcdFx0XHRcdG9sZFZhbHVlOiBvbGRWYWx1ZSxcblx0XHRcdFx0XHRpZDogaWQsXG5cdFx0XHRcdFx0bGFiZWw6IGhlYWRlck5hbWUsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRsZXQgZHQ6IGFueVtdID0gW107XG5cdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZm9yRWFjaCgodmFsdWU6IGFueSwga2V5OiBhbnkpID0+IHtcblx0XHRcdGR0LnB1c2godmFsdWUpO1xuXHRcdH0pO1xuXHRcdHRoaXMudXBzZXJ0KClbJ3N1YnNlcnQnXVt0aGlzLnN1YkluZGV4XVsnc3ViRGF0YSddID0gZHQ7XG5cdFx0dGhpcy5hY3Rpb24uc2F2ZVNpZ25hbC5zZXQodHJ1ZSk7XG5cdFx0dGhpcy5ncmlkRGF0YUNoYW5nZWQuZW1pdCgpO1xuXHR9XG5cblx0aGFuZGxlQWRkZWRSb3dzKGFkZGVkUm93czogYW55W10pIHtcblx0XHRsZXQgaGVhZGVyTmFtZSA9ICcnO1xuXHRcdHRoaXMudG9PcHRpb25zKCkuY29sdW1uRGVmcz8uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXRlbS5maWVsZCA9PSB0aGlzLm1haW5GaWVsZCkge1xuXHRcdFx0XHRoZWFkZXJOYW1lID0gaXRlbS5oZWFkZXJOYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmICh0aGlzLmFkZFNvcnQoKSkge1xuXHRcdFx0Ly8gY29uc29sZS5sb2coJ2FkZC0tLS0tJyx0aGlzLmFkZFNvcnQoKSlcblx0XHRcdC8vIGxldCBsb2cgPSBuZXcgTWFwKClcblx0XHRcdHRoaXMuc2VsZWN0RGF0YSgpIS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgcm93RGF0YSA9IHRoaXMuZ3JpZC5hcGkuZ2V0UmVuZGVyZWROb2RlcygpLm1hcCgobm9kZSkgPT4gbm9kZS5kYXRhKTtcblx0XHRcdFx0bGV0IGxhc3RJbmRleCA9IGZpbmRMYXN0SW5kZXgocm93RGF0YSwgKHY6IGFueSkgPT4gdlt0aGlzLmFkZFNvcnQoKSFdID09IGl0ZW1bdGhpcy5hZGRTb3J0KCkhXSwgdGhpcyk7XG5cdFx0XHRcdGxhc3RJbmRleCA9IGxhc3RJbmRleCA9PSAtMSA/IHJvd0RhdGEubGVuZ3RoIC0gMSA6IGxhc3RJbmRleDtcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5ncmlkLmFwaS5hcHBseVRyYW5zYWN0aW9uKHsgYWRkSW5kZXg6IGxhc3RJbmRleCArIDEsIGFkZDogW2l0ZW1dIH0pO1xuXHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5mb3JFYWNoKCh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGxldCBpbmRleCA9IGtleS5tYXRjaCgvXlxcZCsvKVswXTtcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnaW5kZXgtLS0tJywgaW5kZXgpO1xuXHRcdFx0XHRcdGNvbnN0IGluc2VydEluZGV4ID0gbGFzdEluZGV4ICsgMTtcblx0XHRcdFx0XHRpZiAoaW5kZXggPT0gaW5zZXJ0SW5kZXgpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHJlcGxhY2VJbmRleCA9IGluc2VydEluZGV4ICsgMTtcblx0XHRcdFx0XHRcdGxldCBuZXdLZXkgPSBrZXkucmVwbGFjZSgvXlxcZCsvLCByZXBsYWNlSW5kZXgpO1xuXHRcdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uc2V0KG5ld0tleSwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uZGVsZXRlKGtleSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0bGV0IG1hcERhdGEgPSB0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5nZXQobGFzdEluZGV4ICsgMSk7XG5cdFx0XHRcdGlmIChtYXBEYXRhKSB7XG5cdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZGVsZXRlKGxhc3RJbmRleCArIDEpO1xuXHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLnNldChsYXN0SW5kZXggKyAyLCBtYXBEYXRhKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXN1bHQhLmFkZC5mb3JFYWNoKChub2RlOiBhbnkpID0+IHtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZygnbm9kZS0tLS0nLG5vZGUpXG5cdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uc2V0KG5vZGUucm93SW5kZXgsIG5vZGUuZGF0YSk7XG5cdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uc2V0KG5vZGUucm93SW5kZXghICsgdGhpcy5tYWluRmllbGQhLCB7XG5cdFx0XHRcdFx0XHRuZXdWYWx1ZTogbm9kZS5kYXRhW3RoaXMubWFpbkZpZWxkXSxcblx0XHRcdFx0XHRcdGlkOiAwLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGhlYWRlck5hbWUsXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygnbGFzdEluZGV4JyxsYXN0SW5kZXgpXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuZ3JpZC5hcGkucmVmcmVzaENlbGxzKHtcblx0XHRcdFx0Zm9yY2U6IHRydWUsIC8vIOW8uuWItuWIt+aWsFxuXHRcdFx0XHRzdXBwcmVzc0ZsYXNoOiB0cnVlLCAvLyDpgb/lhY3pl6rng4Fcblx0XHRcdH0pO1xuXHRcdFx0Ly8gdGhpcy51cHNlcnQoKSEuc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10gPSBsb2dcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5ncmlkLmFwaS5hcHBseVRyYW5zYWN0aW9uKHsgYWRkOiBhZGRlZFJvd3MgfSk7XG5cdFx0XHRyZXN1bHQhLmFkZC5mb3JFYWNoKChub2RlOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgcm93SW5kZXggPSB0aGlzLmdyaWQuYXBpLmdldFJvd05vZGUobm9kZS5pZCk/LnJvd0luZGV4O1xuXHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5zZXQocm93SW5kZXghLCBub2RlLmRhdGEpO1xuXHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5zZXQocm93SW5kZXghICsgdGhpcy5tYWluRmllbGQhLCB7XG5cdFx0XHRcdFx0bmV3VmFsdWU6IG5vZGUuZGF0YVt0aGlzLm1haW5GaWVsZF0sXG5cdFx0XHRcdFx0aWQ6IDAsXG5cdFx0XHRcdFx0bGFiZWw6IGhlYWRlck5hbWUsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGxldCBkdDogYW55W10gPSBbXTtcblx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5mb3JFYWNoKCh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4ge1xuXHRcdFx0ZHQucHVzaCh2YWx1ZSk7XG5cdFx0fSk7XG5cdFx0Ly8gY29uc29sZS5sb2coJ3Vwc2VydC0tLS0tJyx0aGlzLnVwc2VydCgpKVxuXHRcdHRoaXMudXBzZXJ0KClbJ3N1YnNlcnQnXVt0aGlzLnN1YkluZGV4XVsnc3ViRGF0YSddID0gZHQ7XG5cdFx0dGhpcy5ncmlkRGF0YUNoYW5nZWQuZW1pdCgpO1xuXHRcdHRoaXMuYWp1c3RHcmlkSGVpZ2h0KCk7XG5cdH1cblxuXHRoYW5kbGVEZWxldGVkUm93cyhkZWxldGVkUm93czogYW55W10pIHtcblx0XHRjb25zdCByZW1vdmVJbmRleGVzID0gdGhpcy5ncmlkLmFwaS5nZXRTZWxlY3RlZE5vZGVzKCkubWFwKChub2RlKSA9PiBub2RlLnJvd0luZGV4KTtcblx0XHRyZW1vdmVJbmRleGVzLmZvckVhY2goKHJvd0luZGV4OiBhbnkpID0+IHtcblx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmRlbGV0ZShyb3dJbmRleCEpO1xuXHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uZGVsZXRlKHJvd0luZGV4ISArIHRoaXMubWFpbkZpZWxkISk7XG5cdFx0fSk7XG5cdFx0bGV0IGR0OiBhbnlbXSA9IFtdO1xuXHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmZvckVhY2goKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiB7XG5cdFx0XHRkdC5wdXNoKHZhbHVlKTtcblx0XHR9KTtcblx0XHR0aGlzLnVwc2VydCgpWydzdWJzZXJ0J11bdGhpcy5zdWJJbmRleF1bJ3N1YkRhdGEnXSA9IGR0O1xuXHRcdHRoaXMuZ3JpZC5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogZGVsZXRlZFJvd3MgfSk7XG5cdFx0dGhpcy5ncmlkRGF0YUNoYW5nZWQuZW1pdCgpO1xuXHRcdHRoaXMuYWp1c3RHcmlkSGVpZ2h0KCk7XG5cdH1cblxuXHRzZWxlY3RSb3dzRGVsZXRlZChkZWxldGVkUm93czogYW55W10pIHtcblx0XHRsZXQgaGVhZGVyTmFtZSA9ICcnO1xuXHRcdHRoaXMudG9PcHRpb25zKCkuY29sdW1uRGVmcz8uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXRlbS5maWVsZCA9PSB0aGlzLm1haW5GaWVsZCkge1xuXHRcdFx0XHRoZWFkZXJOYW1lID0gaXRlbS5oZWFkZXJOYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuZ3JpZC5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IHJlbW92ZTogZGVsZXRlZFJvd3MgfSk7XG5cdFx0cmVzdWx0Py5yZW1vdmUuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0Ly8gY29uc29sZS5sb2coJ25vZGUtLS0nLG5vZGUuc291cmNlUm93SW5kZXgpO1xuXHRcdFx0bGV0IGtleSA9IG5vZGUuc291cmNlUm93SW5kZXggKyB0aGlzLm1haW5GaWVsZCE7XG5cdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5kZWxldGUoa2V5KTtcblx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmRlbGV0ZShub2RlLnNvdXJjZVJvd0luZGV4KTtcblx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmZvckVhY2goKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiB7XG5cdFx0XHRcdGlmICghdmFsdWUuaWQgJiYga2V5ID4gbm9kZS5zb3VyY2VSb3dJbmRleCkge1xuXHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmRlbGV0ZShrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLmZvckVhY2goKHZhbHVlOiBhbnksIGtleTogYW55KSA9PiB7XG5cdFx0XHRcdGxldCBpbmRleCA9IGtleS5tYXRjaCgvXlxcZCsvKVswXTtcblx0XHRcdFx0aWYgKCF2YWx1ZS5pZCAmJiBpbmRleCA+IG5vZGUuc291cmNlUm93SW5kZXgpIHtcblx0XHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5kZWxldGUoa2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0dGhpcy5ncmlkLmFwaS5mb3JFYWNoTm9kZSgobm9kZTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCByb3dJbmRleCA9IG5vZGUucm93SW5kZXg7XG5cdFx0XHRpZiAoIW5vZGUuZGF0YS5pZCkge1xuXHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5zZXQocm93SW5kZXghLCBub2RlLmRhdGEpO1xuXHRcdFx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydsb2d0bXAnXS5zZXQocm93SW5kZXghICsgdGhpcy5tYWluRmllbGQhLCB7XG5cdFx0XHRcdFx0bmV3VmFsdWU6IG5vZGUuZGF0YVt0aGlzLm1haW5GaWVsZF0sXG5cdFx0XHRcdFx0aWQ6IDAsXG5cdFx0XHRcdFx0bGFiZWw6IGhlYWRlck5hbWUsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZm9yRWFjaCgodmFsdWU6IGFueSwga2V5OiBhbnkpID0+IHtcblx0XHRcdFx0XHRpZiAodmFsdWUuaWQgPT09IG5vZGUuZGF0YS5pZCAmJiBrZXkgIT0gcm93SW5kZXgpIHtcblx0XHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ21hcHRtcCddLmRlbGV0ZShrZXkpO1xuXHRcdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uc2V0KHJvd0luZGV4LCB2YWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uZm9yRWFjaCgodmFsdWU6IGFueSwga2V5OiBhbnkpID0+IHtcblx0XHRcdFx0XHRpZiAodmFsdWUuaWQgPT0gbm9kZS5kYXRhLmlkKSB7XG5cdFx0XHRcdFx0XHRsZXQgaW5kZXggPSBrZXkubWF0Y2goL15cXGQrLylbMF07XG5cdFx0XHRcdFx0XHRpZiAoaW5kZXggIT0gcm93SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0bGV0IG5ld0tleSA9IGtleS5yZXBsYWNlKC9eXFxkKy8sIHJvd0luZGV4KTtcblx0XHRcdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10uZGVsZXRlKGtleSk7XG5cdFx0XHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddLnNldChuZXdLZXksIHZhbHVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGxldCBkdDogYW55W10gPSBbXTtcblx0XHR0aGlzLnVwc2VydCgpPy5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXS5mb3JFYWNoKCh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4ge1xuXHRcdFx0ZHQucHVzaCh2YWx1ZSk7XG5cdFx0fSk7XG5cdFx0dGhpcy51cHNlcnQoKVsnc3Vic2VydCddW3RoaXMuc3ViSW5kZXhdWydzdWJEYXRhJ10gPSBkdDtcblx0XHR0aGlzLmdyaWREYXRhQ2hhbmdlZC5lbWl0KCk7XG5cdFx0dGhpcy5hanVzdEdyaWRIZWlnaHQoKTtcblx0XHQvLyBjb25zb2xlLmxvZygncmVzdWx0LS0tLS0nLCB0aGlzLnVwc2VydCgpKVxuXHR9XG5cblx0Y2xlYXIoKSB7XG5cdFx0aWYgKHRoaXMudG9PcHRpb25zKCkucm93TW9kZWxUeXBlICE9PSAnc2VydmVyU2lkZScpIHtcblx0XHRcdHRoaXMuZ3JpZD8uYXBpLnNldEdyaWRPcHRpb24oJ3Jvd0RhdGEnLCBbXSk7XG5cdFx0fVxuXHRcdHRoaXMudXBzZXJ0KCkhLnN1YnNlcnRbdGhpcy5zdWJJbmRleF0gPSB7XG5cdFx0XHRzdWJNb2RlbE5hbWU6IHRoaXMudG9PcHRpb25zKCkubW9kZWxOYW1lLFxuXHRcdFx0Zms6IHRoaXMudG9PcHRpb25zKCkuZmssXG5cdFx0XHRzdWJEYXRhOiBbXSxcblx0XHRcdG1hcHRtcDogbmV3IE1hcCgpLFxuXHRcdFx0bG9ndG1wOiBuZXcgTWFwKCksXG5cdFx0XHRyZWZlcmVuY2U6IHRoaXMudG9PcHRpb25zKCkucmVmZXJlbmNlLFxuXHRcdH07XG5cdFx0dGhpcy5ncmlkRGF0YUNoYW5nZWQuZW1pdCgpO1xuXHR9XG5cblx0YWRkUm93KCkge1xuXHRcdGlmICh0aGlzLmFkZFR5cGUoKSA9PSAnaGFuZGxlJykge1xuXHRcdFx0bGV0IGl0ZW0gPSB0eXBlb2YgdGhpcy50b09wdGlvbnMoKS5hZGREYXRhQ2IgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMudG9PcHRpb25zKCkuYWRkRGF0YUNiKCkgOiB7fTtcblx0XHRcdGlmICh0aGlzLmdyaWRPcHRpb25zKCkuZHJhZ1NvcnQpIHtcblx0XHRcdFx0bGV0IHRvdGFsQ291bnQgPSB0aGlzLmdyaWQuYXBpLmdldERpc3BsYXllZFJvd0NvdW50KCk7XG5cdFx0XHRcdGl0ZW1bdGhpcy5ncmlkT3B0aW9ucygpLmRyYWdTb3J0IV0gPSB0b3RhbENvdW50ICsgMTtcblx0XHRcdH1cblx0XHRcdHRoaXMuYWN0aW9uLnVwZGF0ZUdyaWRBY3Rpb24oe3R5cGU6J2FkZCcsZGF0YTogW2l0ZW1dfSlcblx0XHRcdHRoaXMuZ3JpZC5hcGkuYXBwbHlUcmFuc2FjdGlvbih7IGFkZDogW2l0ZW1dIH0pO1xuXHRcdFx0dGhpcy5ncmlkRGF0YUNoYW5nZWQuZW1pdCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFkZEVtaXQuZW1pdCgpO1xuXHRcdH1cblx0XHR0aGlzLmFqdXN0R3JpZEhlaWdodCgpO1xuXHR9XG5cblx0ZGVsUm93cygpIHtcblx0XHRjb25zdCBzZWxlY3RlZE5vZGVzID0gdGhpcy5ncmlkLmFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XG5cdFx0Y29uc3Qgc2VsZWN0ZWREYXRhID0gc2VsZWN0ZWROb2Rlcy5tYXAoKG5vZGUpID0+IG5vZGUuZGF0YSkgfHwgW107XG5cdFx0bGV0IGlkcyA9IHNlbGVjdGVkRGF0YS5tYXAoKGRhdGEpID0+IGRhdGEuaWQpLmZpbHRlcigodikgPT4gdikgfHwgW107XG5cdFx0aWYgKGlkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLmRlbGV0ZUVtaXQuZW1pdChpZHMpO1xuXHRcdH0gZWxzZSBpZiAoc2VsZWN0ZWREYXRhLmxlbmd0aCA+IDAgJiYgaWRzLmxlbmd0aCA9PSAwKSB7XG5cdFx0XHR0aGlzLmhhbmRsZURlbGV0ZWRSb3dzKHNlbGVjdGVkRGF0YSk7XG5cdFx0XHR0aGlzLmFjdGlvbi51cGRhdGVHcmlkQWN0aW9uKHt0eXBlOidkZWxldGUnLGRhdGE6IHNlbGVjdGVkRGF0YX0pXG5cdFx0fVxuXHRcdHRoaXMuYWp1c3RHcmlkSGVpZ2h0KCk7XG5cdH1cblxuXHRzZXRTY3JvbGxIZWlnaHQoaGVpZ2h0Pzogc3RyaW5nKSB7XG5cdFx0aWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNCAmJiB0aGlzLnRvT3B0aW9ucygpLm1haW5GaWVsZCkge1xuXHRcdFx0dGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LCAnbWF4LWhlaWdodCcpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRoZWlnaHQgPSBoZWlnaHQgfHwgdGhpcy50b09wdGlvbnMoKS5zY3JvbGxIZWlnaHQ7XG5cdFx0aWYgKGhlaWdodCkge1xuXHRcdFx0dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LCAnbWF4LWhlaWdodCcsIGhlaWdodCk7XG5cdFx0fVxuXHR9XG5cblx0aW5pdEdyaWRIZWlnaHQoKSB7XG5cdFx0dGhpcy5ob3Jpem9udGFsU2Nyb2xsQmFyT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRcdGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcblx0XHRcdFx0dGhpcy5ob3Jpem9udGFsU2Nyb2xsQmFySGVpZ2h0ID0gZW50cnkudGFyZ2V0LmNsaWVudEhlaWdodDtcblx0XHRcdFx0dGhpcy5hanVzdEdyaWRIZWlnaHQoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHRoaXMuaG9yaXpvbnRhbFNjcm9sbEJhck9ic2VydmVyLm9ic2VydmUodGhpcy5ncmlkUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFnLWJvZHktaG9yaXpvbnRhbC1zY3JvbGwnKSk7XG5cdFx0dGhpcy52ZXJ0aWNhbFNjcm9sbEJhck9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0XHRlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG5cdFx0XHRcdHRoaXMudmVydGljYWxTY3JvbGxCYXJXaWR0aCA9IGVudHJ5LnRhcmdldC5jbGllbnRXaWR0aDtcblx0XHRcdFx0dGhpcy5hanVzdEdyaWRIZWlnaHQoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHRoaXMudmVydGljYWxTY3JvbGxCYXJPYnNlcnZlci5vYnNlcnZlKHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZy1ib2R5LXZlcnRpY2FsLXNjcm9sbCcpKTtcblx0XHR0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50LCAnd2lkdGgnLCAnMTAwJScpO1xuXHRcdHRoaXMuc2V0U2Nyb2xsSGVpZ2h0KCk7XG5cdH1cblxuXHRjYWxjR3JpZE1hcmdpbigpIHtcblx0XHRjb25zdCBtYXJnaW4gPSB0aGlzLnNob3dBY3QoKSAmJiB0aGlzLmF1dGhMZXZlbCgpID49IDMgJiYgKHRoaXMuYWRkVHlwZSgpICE9ICdub25lJyB8fCB0aGlzLnNob3dEZWxldGUoKSkgPyAyIDogMTtcblx0XHRsZXQgYm9yZGVyQm90dG9tID0gMDtcblx0XHRpZiAodGhpcy5ncmlkUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFnLXJvb3Qtd3JhcHBlcicpKSB7XG5cdFx0XHRib3JkZXJCb3R0b20gPSBwYXJzZUZsb2F0KFxuXHRcdFx0XHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuYWctcm9vdC13cmFwcGVyJykpLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1ib3R0b20td2lkdGgnKSxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBNYXRoLm1pbigyLCBtYXJnaW4gKyBib3JkZXJCb3R0b20pO1xuXHR9XG5cblx0Z2V0Q29udGFpbmVySGVpZ2h0KCkge1xuXHRcdGxldCBjb250YWluZXIgPSA1NDY7XG5cdFx0aWYgKHRoaXMuZ3JpZFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZy1jZW50ZXItY29scy1jb250YWluZXInKSkge1xuXHRcdFx0Y29udGFpbmVyID0gcGFyc2VGbG9hdChcblx0XHRcdFx0d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5ncmlkUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFnLWNlbnRlci1jb2xzLWNvbnRhaW5lcicpKS5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKSxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjb250YWluZXI7XG5cdH1cblxuXHRhanVzdEdyaWRIZWlnaHQoKSB7XG5cdFx0bGV0IGNvbnRhaW5lciA9IHRoaXMuZ2V0Q29udGFpbmVySGVpZ2h0KCk7XG5cdFx0bGV0IGhlYWRlckhlaWdodCA9IHRoaXMuZ3JpZE9wdGlvbnMoKS5oZWFkZXJIZWlnaHQgPz8gNDk7XG5cdFx0bGV0IG1hcmdpbiA9IHRoaXMuY2FsY0dyaWRNYXJnaW4oKTtcblx0XHRsZXQgdG90YWwgPSBjb250YWluZXIgKyBtYXJnaW4gKyBoZWFkZXJIZWlnaHQ7XG5cdFx0Y29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgodG90YWwsIGhlYWRlckhlaWdodCArIDQyICsgbWFyZ2luKTtcblx0XHR0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuXHRcdFx0dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsIGAke2hlaWdodCArIHRoaXMuaG9yaXpvbnRhbFNjcm9sbEJhckhlaWdodH1weGApO1xuXHRcdFx0dGhpcy5hanVzdEdyaWRTdGF0ZSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0YWp1c3RHcmlkU3RhdGUoKSB7XG5cdFx0dGhpcy5ub1Jvd3MgPSB0aGlzLmdyaWQuYXBpLmdldERpc3BsYXllZFJvd0NvdW50KCkgPT09IDA7XG5cdFx0dGhpcy5ub1Jvd3MgPyB0aGlzLmdyaWQuYXBpLnNob3dOb1Jvd3NPdmVybGF5KCkgOiB0aGlzLmdyaWQuYXBpLmhpZGVPdmVybGF5KCk7XG5cdFx0dGhpcy5zaG93SG9yaXpvbnRhbCA9IHRoaXMuYWN0UG9zKCkgPT0gJ2JvdHRvbScgJiYgKHRoaXMubm9Sb3dzIHx8ICEhdGhpcy52ZXJ0aWNhbFNjcm9sbEJhcldpZHRoKTtcblx0fVxuXG5cdGNhbmNlbFNlbGVjdCgpIHtcblx0XHR0aGlzLmdldEdyaWQoKS5hcGkuZGVzZWxlY3RBbGwoKTtcblx0XHR0aGlzLnNlbGVjdGVkUm93cy5zZXQoW10pO1xuXHR9XG5cblx0ZWRpdGluZ0ZpeCgpIHtcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudDogYW55KSA9PiB7XG5cdFx0XHRpZiAoIXRoaXMuZ3JpZD8uYXBpPy5nZXRFZGl0aW5nQ2VsbHMoKT8ubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGdyaWRFbGVtZW50OiBhbnkgPSB0aGlzLmdyaWRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuYWctcm9vdC13cmFwcGVyJyk7XG5cdFx0XHRpZiAoIWdyaWRFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcblx0XHRcdFx0dGhpcy5ncmlkLmFwaS5zdG9wRWRpdGluZygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJvd0RyYWdFbnRlcihldmVudDogYW55KSB7XG5cdFx0Y29uc29sZS5sb2coJ2V2ZW50LS0tJywgZXZlbnQpO1xuXHRcdHRoaXMuZHJhZ0JlZm9yZUluZGV4ID0gZXZlbnQub3ZlckluZGV4O1xuXHR9XG5cblx0b25Sb3dEcmFnRW5kKGV2ZW50OiBSb3dEcmFnRW5kRXZlbnQpIHtcblxuXHRcdGlmICghdGhpcy5ncmlkT3B0aW9ucygpLmRyYWdTb3J0KSByZXR1cm47XG5cblx0XHRjb25zdCBzb3J0RmllbGQgPSB0aGlzLmdyaWRPcHRpb25zKCkuZHJhZ1NvcnQhO1xuXHRcdGNvbnN0IGNvbERlZnMgPSBldmVudC5hcGkuZ2V0Q29sdW1uRGVmcygpO1xuXHRcdGNvbnN0IGNvbEl0ZW06IGFueSA9IGNvbERlZnM/LmZpbmQoKHY6IGFueSkgPT4gdi5maWVsZCA9PT0gc29ydEZpZWxkKSB8fCB7fTtcblxuXHRcdGxldCBtYXAgPSBuZXcgTWFwKCk7XG5cdFx0bGV0IGxvZ01hcCA9IG5ldyBNYXAoKTtcblx0XHRsZXQgZHQ6IGFueVtdID0gW107XG5cblx0XHRjb25zdCB1cHNlcnQgPSB0aGlzLnVwc2VydCgpO1xuXHRcdGlmICghdXBzZXJ0KSByZXR1cm47XG5cblx0XHRjb25zdCBtYXBUbXA6IE1hcDxhbnksIGFueT4gPSB1cHNlcnQuc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ107XG5cdFx0Y29uc3QgbG9nVG1wOiBNYXA8YW55LCBhbnk+ID0gdXBzZXJ0LnN1YnNlcnRbdGhpcy5zdWJJbmRleF1bJ2xvZ3RtcCddO1xuXG5cdFx0dGhpcy5ncmlkPy5hcGkuZm9yRWFjaE5vZGUoKG5vZGUsIGluZGV4KSA9PiB7XG5cblx0XHRcdGNvbnN0IGlkID0gbm9kZS5kYXRhLmlkO1xuXHRcdFx0Y29uc3QgbmV3U29ydCA9IGluZGV4ICsgMTtcblx0XHRcdGNvbnN0IG9sZFNvcnQgPSBub2RlLmRhdGFbc29ydEZpZWxkXTtcblx0XHRcdC8vIOabtOaWsCBncmlkIOaVsOaNrlxuXHRcdFx0bm9kZS5kYXRhW3NvcnRGaWVsZF0gPSBuZXdTb3J0O1xuXHRcdFx0bm9kZS5zZXREYXRhVmFsdWUoc29ydEZpZWxkLCBuZXdTb3J0KTtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCdub2RlLS0tLScsIG5vZGUuZGF0YSwgaW5kZXgsbmV3U29ydCk7XG5cdFx0XHRpZiAoIWlkKSB7XG5cblx0XHRcdFx0bWFwVG1wLnNldChpbmRleCwge1xuXHRcdFx0XHRcdC4uLm5vZGUuZGF0YSxcblx0XHRcdFx0XHRbc29ydEZpZWxkXTogbmV3U29ydFxuXHRcdFx0XHR9KTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRtYXAuc2V0KGluZGV4LCB7XG5cdFx0XHRcdFx0aWQ6IGlkLFxuXHRcdFx0XHRcdFtzb3J0RmllbGRdOiBuZXdTb3J0XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHR9XG5cdFx0XHRpZiAoaWQpIHtcblx0XHRcdFx0Y29uc3Qga2V5ID0gaWQgKyAnXycgKyBzb3J0RmllbGQ7XG5cdFx0XHRcdGxldCBvbGRMb2cgPSBsb2dUbXAuZ2V0KGtleSk7XG5cblx0XHRcdFx0aWYgKG9sZExvZykge1xuXHRcdFx0XHRcdG9sZExvZy5uZXdWYWx1ZSA9IG5ld1NvcnQ7XG5cdFx0XHRcdFx0bG9nTWFwLnNldChrZXksIG9sZExvZyk7XG5cblx0XHRcdFx0fSBlbHNlIGlmIChvbGRTb3J0ICE9PSBuZXdTb3J0KSB7XG5cdFx0XHRcdFx0bG9nTWFwLnNldChrZXksIHtcblx0XHRcdFx0XHRcdGlkOiBpZCxcblx0XHRcdFx0XHRcdGxhYmVsOiBjb2xJdGVtWydoZWFkZXJOYW1lJ10gfHwgJ+aOkuW6jycsXG5cdFx0XHRcdFx0XHRvbGRWYWx1ZTogb2xkU29ydCxcblx0XHRcdFx0XHRcdG5ld1ZhbHVlOiBuZXdTb3J0XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0aWYgKHVwc2VydCkge1xuXHRcdHVwc2VydC5zdWJzZXJ0W3RoaXMuc3ViSW5kZXhdWydtYXB0bXAnXSA9XG5cdFx0XHRcdG5ldyBNYXAoWy4uLm1hcFRtcCwgLi4ubWFwXSk7XG5cdFx0XHR1cHNlcnQuc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbG9ndG1wJ10gPVxuXHRcdFx0XHRuZXcgTWFwKFsuLi5sb2dUbXAsIC4uLmxvZ01hcF0pO1xuXG5cdFx0XHR1cHNlcnQuc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnbWFwdG1wJ10uZm9yRWFjaCgodmFsdWU6IGFueSkgPT4ge1xuXHRcdFx0XHRkdC5wdXNoKHZhbHVlKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR1cHNlcnQuc3Vic2VydFt0aGlzLnN1YkluZGV4XVsnc3ViRGF0YSddID0gZHQ7XG5cdFx0XHRjb25zb2xlLmxvZygnZHJhZ1Vwc2VydC0tLS0nLCB1cHNlcnQpO1xuXHRcdH1cblx0fVxuLy8g5pe26Ze06IyD5Zu05re75Yqg5pe25YiG56eSXG5cdGlzUmFuZ2UoY29sdW1uRmlsdGVyOkNvbHVtbkZpbHRlcltdKXtcblx0XHRjb25zdCBpc0VpeHN0ID0gY29sdW1uRmlsdGVyLnNvbWUoKHY6YW55KSA9PiB2LnR5cGUgPT0gJ2luUmFuZ2UnKVxuXHRcdGlmKGlzRWl4c3Qpe1xuXHRcdFx0bGV0IGNvbHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbHVtbkZpbHRlcikpXG5cdFx0XHRjb2xzLmZvckVhY2goKGl0ZW06Q29sdW1uRmlsdGVyKSA9PiB7XG5cdFx0XHRcdGlmKGl0ZW0udHlwZSA9PSAnaW5SYW5nZScpe1xuXHRcdFx0XHRcdGl0ZW0uZnJvbSA9IGAke2l0ZW0uZnJvbX0gMDA6MDA6MDBgXG5cdFx0XHRcdFx0aXRlbS50byA9IGAke2l0ZW0udG99IDIzOjU5OjU5YFxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0cmV0dXJuIGNvbHNcblx0XHR9XG5cdFx0cmV0dXJuIGNvbHVtbkZpbHRlclxuXHR9XG59XG4iLCJAaWYgKGluaXRHcmlkKSB7XG5cdDxkaXZcblx0XHQjZ3JpZENvbnRhaW5lclxuXHRcdFtjbGFzc109XCJcblx0XHRcdCh0b09wdGlvbnMoKS50cmVlRGF0YUZpZWxkID8gJ3RyZWUtZ3JpZCAnIDogJycpICtcblx0XHRcdCdncmlkLWNvbnRhaW5lciB3LWZ1bGwgZmxleCBqdXN0aWZ5LWJldHdlZW4gJyArXG5cdFx0XHQoYWN0UG9zKCkgPT0gJ2JvdHRvbScgPyAnZmxleC1jb2wnIDogJ2ZsZXgtY29sLXJldmVyc2UnKVxuXHRcdFwiPlxuXHRcdDxhZy1ncmlkLWFuZ3VsYXJcblx0XHRcdFt0aGVtZV09XCJteVRoZW1lKClcIlxuXHRcdFx0W2NvbHVtbkRlZnNdPVwiY29sdW1uRGVmc1wiXG5cdFx0XHRbZ3JpZE9wdGlvbnNdPVwidG9PcHRpb25zKClcIlxuXHRcdFx0W2xvY2FsZVRleHRdPVwibG9jYWxlVGV4dFwiXG5cdFx0XHRbY29tcG9uZW50c109XCJjb21wb25lbnRzXCJcblx0XHRcdFtzdXBwcmVzc0RyYWdMZWF2ZUhpZGVzQ29sdW1uc109XCJ0cnVlXCJcblx0XHRcdFt1bmRvUmVkb0NlbGxFZGl0aW5nXT1cInRvT3B0aW9ucygpLnVuZG9SZWRvQ2VsbEVkaXRpbmdcIlxuXHRcdFx0W3VuZG9SZWRvQ2VsbEVkaXRpbmdMaW1pdF09XCJ0b09wdGlvbnMoKS51bmRvUmVkb0NlbGxFZGl0aW5nTGltaXRcIlxuXHRcdFx0W3Jvd0J1ZmZlcl09XCIzMFwiXG5cdFx0XHQoY2VsbFZhbHVlQ2hhbmdlZCk9XCJjZWxsVmFsdWVDaGFuZ2VkKCRldmVudClcIlxuXHRcdFx0KHNlbGVjdGlvbkNoYW5nZWQpPVwib25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuXHRcdFx0KHJvd0dyb3VwT3BlbmVkKT1cIm9uUm93R3JvdXBPcGVuZWQoKVwiXG5cdFx0XHQoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudClcIlxuXHRcdFx0KHJvd0RyYWdFbmQpPVwib25Sb3dEcmFnRW5kKCRldmVudClcIlxuXHRcdFx0KHJvd0RyYWdFbnRlcik9XCJyb3dEcmFnRW50ZXIoJGV2ZW50KVwiXG5cdFx0XHRbc2luZ2xlQ2xpY2tFZGl0XT1cInNpbmdsZUNsaWNrRWRpdCgpXCIgLz5cblx0XHRAaWYgKHNob3dBY3QoKSAmJiBhdXRoTGV2ZWwoKSA+PSAzICYmICgoYWRkVHlwZSgpICE9ICdub25lJyAmJiAhYWRkSGlkZGVuKCkpIHx8IChzaG93RGVsZXRlKCkgJiYgIWRlbGV0ZUhpZGRlbigpKSB8fCAoc3ViU2F2ZVZpc2libGUoKSAmJiAhc3ViU2F2ZUhpZGRlbigpKSkpIHtcblx0XHRcdEBpZiAoc2hvd0hvcml6b250YWwpIHtcblx0XHRcdFx0PGRpdiBjbGFzcz1cInctZnVsbCBib3JkZXItdCBib3JkZXItZ3JheS0zMDBcIj48L2Rpdj5cblx0XHRcdH1cblx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIHB5LVs1cHhdIHByLVs4cHhdXCI+XG5cdFx0XHRcdEBpZiAoc3ViU2F2ZVZpc2libGUoKSAmJiAhc3ViU2F2ZUhpZGRlbigpKSB7XG5cdFx0XHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdFx0XHRpY29uPVwicGkgcGktY2xvdWQtdXBsb2FkXCJcblx0XHRcdFx0XHRcdFt0ZXh0XT1cInRydWVcIlxuXHRcdFx0XHRcdFx0c2V2ZXJpdHk9XCJwcmltYXJ5XCJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJzdWJTYXZlRGlzYWJsZWQoKVwiXG5cdFx0XHRcdFx0XHQob25DbGljayk9XCJzdWJTYXZlRW1pdC5lbWl0KClcIiAvPlxuXHRcdFx0XHR9XG5cdFx0XHRcdEBpZiAoYWRkVHlwZSgpICE9ICdub25lJyAmJiAhYWRkSGlkZGVuKCkpIHtcblx0XHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRcdGljb249XCJwaSBwaS1wbHVzXCJcblx0XHRcdFx0XHRcdFt0ZXh0XT1cInRydWVcIlxuXHRcdFx0XHRcdFx0c2V2ZXJpdHk9XCJzdWNjZXNzXCJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJncmlkRGlzYWJsZSgpXCJcblx0XHRcdFx0XHRcdChvbkNsaWNrKT1cImFkZFJvdygpXCIgLz5cblx0XHRcdFx0fVxuXHRcdFx0XHRAaWYgKHNob3dEZWxldGUoKSAmJiAhZGVsZXRlSGlkZGVuKCkpIHtcblx0XHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRcdGljb249XCJwaSBwaS10cmFzaFwiXG5cdFx0XHRcdFx0XHRbdGV4dF09XCJ0cnVlXCJcblx0XHRcdFx0XHRcdHNldmVyaXR5PVwiZGFuZ2VyXCJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJncmlkRGlzYWJsZSgpXCJcblx0XHRcdFx0XHRcdChvbkNsaWNrKT1cImRlbFJvd3MoKVwiIC8+XG5cdFx0XHRcdH1cblx0XHRcdDwvZGl2PlxuXHRcdH1cblx0PC9kaXY+XG59XG4iXX0=
|