cps-ui-kit 0.129.0 → 0.130.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/esm2020/lib/components/cps-tree-table/cps-tree-table.component.mjs +74 -45
- package/fesm2015/cps-ui-kit.mjs +72 -43
- package/fesm2015/cps-ui-kit.mjs.map +1 -1
- package/fesm2020/cps-ui-kit.mjs +73 -44
- package/fesm2020/cps-ui-kit.mjs.map +1 -1
- package/lib/components/cps-tree-table/cps-tree-table.component.d.ts +6 -1
- package/package.json +1 -1
|
@@ -34,6 +34,7 @@ export class CpsTreeTableComponent {
|
|
|
34
34
|
this.columns = [];
|
|
35
35
|
this.colHeaderName = 'header';
|
|
36
36
|
this.colFieldName = 'field';
|
|
37
|
+
this.minWidth = 0;
|
|
37
38
|
this.striped = true;
|
|
38
39
|
this.bordered = true;
|
|
39
40
|
this.size = 'normal';
|
|
@@ -54,6 +55,7 @@ export class CpsTreeTableComponent {
|
|
|
54
55
|
this.scrollable = true;
|
|
55
56
|
this.scrollHeight = ''; // 'flex' or value+'px'
|
|
56
57
|
this.virtualScroll = false; // works only if scrollable is true
|
|
58
|
+
this.maxVirtualScrollItemHeight = 0;
|
|
57
59
|
this.numToleratedItems = 10;
|
|
58
60
|
this.paginator = false;
|
|
59
61
|
this.alwaysShowPaginator = true;
|
|
@@ -111,8 +113,17 @@ export class CpsTreeTableComponent {
|
|
|
111
113
|
this.defScrollHeightPx = 0;
|
|
112
114
|
this.defScrollHeight = '';
|
|
113
115
|
this.scrollbarWidth = 0;
|
|
116
|
+
this.observerDebouncers = new WeakMap();
|
|
117
|
+
this.observerHandlers = new WeakMap();
|
|
114
118
|
this.resizeObserver = new ResizeObserver((entries) => {
|
|
115
119
|
entries.forEach((entry) => {
|
|
120
|
+
if (!this.observerHandlers.has(entry.target)) {
|
|
121
|
+
this.observerHandlers.set(entry.target, () => {
|
|
122
|
+
entry.target.dispatchEvent(new CustomEvent('treeTableBodyResized'));
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
clearTimeout(this.observerDebouncers.get(entry.target));
|
|
126
|
+
this.observerDebouncers.set(entry.target, setTimeout(this.observerHandlers.get(entry.target), 100));
|
|
116
127
|
const body = entry.target;
|
|
117
128
|
const sbarVisible = body.scrollHeight > body.clientHeight;
|
|
118
129
|
let wScroll = sbarVisible ? this.scrollbarWidth : 0;
|
|
@@ -161,6 +172,17 @@ export class CpsTreeTableComponent {
|
|
|
161
172
|
this.selectedColumns = this.columns;
|
|
162
173
|
}
|
|
163
174
|
ngAfterViewInit() {
|
|
175
|
+
if (this.minWidth > 0) {
|
|
176
|
+
const treeTableMain = this.primengTreeTable.el.nativeElement.querySelector('.p-treetable');
|
|
177
|
+
if (treeTableMain)
|
|
178
|
+
treeTableMain.style.overflow = 'auto';
|
|
179
|
+
const scrollableWrapper = this.primengTreeTable.el.nativeElement.querySelector('.p-treetable-scrollable-wrapper');
|
|
180
|
+
if (scrollableWrapper)
|
|
181
|
+
scrollableWrapper.style.minWidth = this.minWidth + 'px';
|
|
182
|
+
const treeTableHeader = this.primengTreeTable.el.nativeElement.querySelector('.p-treetable-header');
|
|
183
|
+
if (treeTableHeader)
|
|
184
|
+
treeTableHeader.style.minWidth = this.minWidth + 'px';
|
|
185
|
+
}
|
|
164
186
|
this.scrollableBody = this.primengTreeTable.el.nativeElement.querySelector('.p-treetable-scrollable-body');
|
|
165
187
|
if (this.scrollableBody) {
|
|
166
188
|
this.headerBox = this.primengTreeTable.el.nativeElement.querySelector('.p-treetable-scrollable-header-box');
|
|
@@ -168,17 +190,30 @@ export class CpsTreeTableComponent {
|
|
|
168
190
|
this.defScrollHeightPx = this.scrollableBody.clientHeight;
|
|
169
191
|
if (this.headerBox) {
|
|
170
192
|
this.scrollbarWidth = DomHandler.calculateScrollbarWidth();
|
|
193
|
+
this.scrollableBody.addEventListener('treeTableBodyResized', () => {
|
|
194
|
+
this._recalcVirtualHeight();
|
|
195
|
+
});
|
|
171
196
|
this.resizeObserver.observe(this.scrollableBody);
|
|
172
197
|
}
|
|
173
198
|
}
|
|
174
199
|
}
|
|
200
|
+
_updateVirtualScrollItemSize() {
|
|
201
|
+
if (!this.virtualScroll)
|
|
202
|
+
return;
|
|
203
|
+
const tr = this.primengTreeTable?.el?.nativeElement
|
|
204
|
+
?.querySelector('.p-treetable-tbody')
|
|
205
|
+
?.querySelector('tr');
|
|
206
|
+
if (tr) {
|
|
207
|
+
this.virtualScrollItemSize = tr.clientHeight || 0;
|
|
208
|
+
if (this.maxVirtualScrollItemHeight > 0) {
|
|
209
|
+
this.virtualScrollItemSize = Math.min(this.maxVirtualScrollItemHeight, this.virtualScrollItemSize);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
175
213
|
ngAfterViewChecked() {
|
|
176
214
|
if (!this.virtualScroll || this.virtualScrollItemSize)
|
|
177
215
|
return;
|
|
178
|
-
this.
|
|
179
|
-
this.primengTreeTable?.el?.nativeElement
|
|
180
|
-
?.querySelector('.p-treetable-tbody')
|
|
181
|
-
?.querySelector('tr')?.clientHeight || 0;
|
|
216
|
+
this._recalcVirtualHeight();
|
|
182
217
|
this.cdRef.detectChanges();
|
|
183
218
|
}
|
|
184
219
|
ngOnChanges(changes) {
|
|
@@ -238,28 +273,33 @@ export class CpsTreeTableComponent {
|
|
|
238
273
|
this.customSortFunction.emit(event);
|
|
239
274
|
}
|
|
240
275
|
_recalcVirtualHeight() {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
this.
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
276
|
+
setTimeout(() => {
|
|
277
|
+
if (this.virtualScroll && this.defScrollHeight) {
|
|
278
|
+
this._updateVirtualScrollItemSize();
|
|
279
|
+
const itemsLen = this.primengTreeTable.serializedValue.length;
|
|
280
|
+
if (itemsLen < 1) {
|
|
281
|
+
this.scrollHeight = this.emptyBodyHeight
|
|
282
|
+
? `calc(${this.emptyBodyHeight} + 1px)`
|
|
283
|
+
: this.virtualScrollItemSize + 1 + 'px';
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
const curHeight = this.virtualScrollItemSize * itemsLen + 2;
|
|
287
|
+
if (this.defScrollHeight === 'flex') {
|
|
288
|
+
if (curHeight >= this.defScrollHeightPx) {
|
|
289
|
+
this.scrollHeight = 'flex';
|
|
290
|
+
setTimeout(() => {
|
|
291
|
+
this.scrollableBody.style.height = '100%';
|
|
292
|
+
this.cdRef.markForCheck();
|
|
293
|
+
});
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
258
296
|
}
|
|
297
|
+
this.scrollHeight =
|
|
298
|
+
Math.min(this.defScrollHeightPx, curHeight) + 'px';
|
|
259
299
|
}
|
|
260
|
-
this.
|
|
300
|
+
this.cdRef.markForCheck();
|
|
261
301
|
}
|
|
262
|
-
}
|
|
302
|
+
});
|
|
263
303
|
}
|
|
264
304
|
onFilterGlobal(value) {
|
|
265
305
|
this.primengTreeTable.filterGlobal(value, 'contains');
|
|
@@ -285,10 +325,7 @@ export class CpsTreeTableComponent {
|
|
|
285
325
|
this.data = [...this.data];
|
|
286
326
|
this.rowsRemoved.emit(this.selectedRows);
|
|
287
327
|
this.clearSelection();
|
|
288
|
-
|
|
289
|
-
this._recalcVirtualHeight();
|
|
290
|
-
this.cdRef.markForCheck();
|
|
291
|
-
});
|
|
328
|
+
this._recalcVirtualHeight();
|
|
292
329
|
}
|
|
293
330
|
clearSelection() {
|
|
294
331
|
this.selectedRows = [];
|
|
@@ -300,10 +337,7 @@ export class CpsTreeTableComponent {
|
|
|
300
337
|
this.selectedRows = this.selectedRows.filter((v) => v !== node);
|
|
301
338
|
this._removeNodeFromData(node);
|
|
302
339
|
this.rowsRemoved.emit([node]);
|
|
303
|
-
|
|
304
|
-
this._recalcVirtualHeight();
|
|
305
|
-
this.cdRef.markForCheck();
|
|
306
|
-
});
|
|
340
|
+
this._recalcVirtualHeight();
|
|
307
341
|
}
|
|
308
342
|
_removeNodeFromData(nodeToRemove, single = true) {
|
|
309
343
|
const _findTopSortOrder = (_node) => {
|
|
@@ -397,17 +431,11 @@ export class CpsTreeTableComponent {
|
|
|
397
431
|
}
|
|
398
432
|
onNodeExpanded(event) {
|
|
399
433
|
this.nodeExpanded.emit(event);
|
|
400
|
-
|
|
401
|
-
this._recalcVirtualHeight();
|
|
402
|
-
this.cdRef.markForCheck();
|
|
403
|
-
});
|
|
434
|
+
this._recalcVirtualHeight();
|
|
404
435
|
}
|
|
405
436
|
onNodeCollapsed(event) {
|
|
406
437
|
this.nodeCollapsed.emit(event);
|
|
407
|
-
|
|
408
|
-
this._recalcVirtualHeight();
|
|
409
|
-
this.cdRef.markForCheck();
|
|
410
|
-
});
|
|
438
|
+
this._recalcVirtualHeight();
|
|
411
439
|
}
|
|
412
440
|
onNodeSelected(event) {
|
|
413
441
|
this.nodeSelected.emit(event);
|
|
@@ -420,10 +448,7 @@ export class CpsTreeTableComponent {
|
|
|
420
448
|
}
|
|
421
449
|
onFilter(event) {
|
|
422
450
|
this.filtered.emit(event);
|
|
423
|
-
|
|
424
|
-
this._recalcVirtualHeight();
|
|
425
|
-
this.cdRef.markForCheck();
|
|
426
|
-
});
|
|
451
|
+
this._recalcVirtualHeight();
|
|
427
452
|
}
|
|
428
453
|
onSelectColumn(col) {
|
|
429
454
|
let res = [];
|
|
@@ -446,7 +471,7 @@ export class CpsTreeTableComponent {
|
|
|
446
471
|
}
|
|
447
472
|
}
|
|
448
473
|
CpsTreeTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsTreeTableComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
449
|
-
CpsTreeTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsTreeTableComponent, isStandalone: true, selector: "cps-tree-table", inputs: { data: "data", columns: "columns", colHeaderName: "colHeaderName", colFieldName: "colFieldName", striped: "striped", bordered: "bordered", size: "size", selectable: "selectable", rowHover: "rowHover", showRowMenu: "showRowMenu", loading: "loading", tableStyle: "tableStyle", tableStyleClass: "tableStyleClass", sortable: "sortable", sortMode: "sortMode", customSort: "customSort", hasToolbar: "hasToolbar", toolbarSize: "toolbarSize", toolbarTitle: "toolbarTitle", toolbarIcon: "toolbarIcon", toolbarIconColor: "toolbarIconColor", scrollable: "scrollable", scrollHeight: "scrollHeight", virtualScroll: "virtualScroll", numToleratedItems: "numToleratedItems", paginator: "paginator", alwaysShowPaginator: "alwaysShowPaginator", rowsPerPageOptions: "rowsPerPageOptions", first: "first", rows: "rows", resetPageOnRowsChange: "resetPageOnRowsChange", resetPageOnSort: "resetPageOnSort", totalRecords: "totalRecords", emptyMessage: "emptyMessage", emptyBodyHeight: "emptyBodyHeight", lazy: "lazy", lazyLoadOnInit: "lazyLoadOnInit", showGlobalFilter: "showGlobalFilter", globalFilterPlaceholder: "globalFilterPlaceholder", globalFilterFields: "globalFilterFields", clearGlobalFilterOnLoading: "clearGlobalFilterOnLoading", showRemoveBtnOnSelect: "showRemoveBtnOnSelect", removeBtnOnSelectDisabled: "removeBtnOnSelectDisabled", showAdditionalBtnOnSelect: "showAdditionalBtnOnSelect", additionalBtnOnSelectTitle: "additionalBtnOnSelectTitle", additionalBtnOnSelectDisabled: "additionalBtnOnSelectDisabled", showActionBtn: "showActionBtn", actionBtnTitle: "actionBtnTitle", actionBtnDisabled: "actionBtnDisabled", showDataReloadBtn: "showDataReloadBtn", dataReloadBtnDisabled: "dataReloadBtnDisabled", showColumnsToggleBtn: "showColumnsToggleBtn", columnsToggleBtnDisabled: "columnsToggleBtnDisabled" }, outputs: { selectionChanged: "selectionChanged", actionBtnClicked: "actionBtnClicked", additionalBtnOnSelectClicked: "additionalBtnOnSelectClicked", editRowBtnClicked: "editRowBtnClicked", rowsRemoved: "rowsRemoved", pageChanged: "pageChanged", sorted: "sorted", filtered: "filtered", columnsSelected: "columnsSelected", lazyLoaded: "lazyLoaded", dataReloadBtnClicked: "dataReloadBtnClicked", nodeExpanded: "nodeExpanded", nodeCollapsed: "nodeCollapsed", nodeSelected: "nodeSelected", nodeUnselected: "nodeUnselected", customSortFunction: "customSortFunction" }, providers: [
|
|
474
|
+
CpsTreeTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsTreeTableComponent, isStandalone: true, selector: "cps-tree-table", inputs: { data: "data", columns: "columns", colHeaderName: "colHeaderName", colFieldName: "colFieldName", minWidth: "minWidth", striped: "striped", bordered: "bordered", size: "size", selectable: "selectable", rowHover: "rowHover", showRowMenu: "showRowMenu", loading: "loading", tableStyle: "tableStyle", tableStyleClass: "tableStyleClass", sortable: "sortable", sortMode: "sortMode", customSort: "customSort", hasToolbar: "hasToolbar", toolbarSize: "toolbarSize", toolbarTitle: "toolbarTitle", toolbarIcon: "toolbarIcon", toolbarIconColor: "toolbarIconColor", scrollable: "scrollable", scrollHeight: "scrollHeight", virtualScroll: "virtualScroll", maxVirtualScrollItemHeight: "maxVirtualScrollItemHeight", numToleratedItems: "numToleratedItems", paginator: "paginator", alwaysShowPaginator: "alwaysShowPaginator", rowsPerPageOptions: "rowsPerPageOptions", first: "first", rows: "rows", resetPageOnRowsChange: "resetPageOnRowsChange", resetPageOnSort: "resetPageOnSort", totalRecords: "totalRecords", emptyMessage: "emptyMessage", emptyBodyHeight: "emptyBodyHeight", lazy: "lazy", lazyLoadOnInit: "lazyLoadOnInit", showGlobalFilter: "showGlobalFilter", globalFilterPlaceholder: "globalFilterPlaceholder", globalFilterFields: "globalFilterFields", clearGlobalFilterOnLoading: "clearGlobalFilterOnLoading", showRemoveBtnOnSelect: "showRemoveBtnOnSelect", removeBtnOnSelectDisabled: "removeBtnOnSelectDisabled", showAdditionalBtnOnSelect: "showAdditionalBtnOnSelect", additionalBtnOnSelectTitle: "additionalBtnOnSelectTitle", additionalBtnOnSelectDisabled: "additionalBtnOnSelectDisabled", showActionBtn: "showActionBtn", actionBtnTitle: "actionBtnTitle", actionBtnDisabled: "actionBtnDisabled", showDataReloadBtn: "showDataReloadBtn", dataReloadBtnDisabled: "dataReloadBtnDisabled", showColumnsToggleBtn: "showColumnsToggleBtn", columnsToggleBtnDisabled: "columnsToggleBtnDisabled" }, outputs: { selectionChanged: "selectionChanged", actionBtnClicked: "actionBtnClicked", additionalBtnOnSelectClicked: "additionalBtnOnSelectClicked", editRowBtnClicked: "editRowBtnClicked", rowsRemoved: "rowsRemoved", pageChanged: "pageChanged", sorted: "sorted", filtered: "filtered", columnsSelected: "columnsSelected", lazyLoaded: "lazyLoaded", dataReloadBtnClicked: "dataReloadBtnClicked", nodeExpanded: "nodeExpanded", nodeCollapsed: "nodeCollapsed", nodeSelected: "nodeSelected", nodeUnselected: "nodeUnselected", customSortFunction: "customSortFunction" }, providers: [
|
|
450
475
|
TreeTableService,
|
|
451
476
|
{
|
|
452
477
|
provide: TreeTable,
|
|
@@ -491,6 +516,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
491
516
|
type: Input
|
|
492
517
|
}], colFieldName: [{
|
|
493
518
|
type: Input
|
|
519
|
+
}], minWidth: [{
|
|
520
|
+
type: Input
|
|
494
521
|
}], striped: [{
|
|
495
522
|
type: Input
|
|
496
523
|
}], bordered: [{
|
|
@@ -531,6 +558,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
531
558
|
type: Input
|
|
532
559
|
}], virtualScroll: [{
|
|
533
560
|
type: Input
|
|
561
|
+
}], maxVirtualScrollItemHeight: [{
|
|
562
|
+
type: Input
|
|
534
563
|
}], numToleratedItems: [{
|
|
535
564
|
type: Input
|
|
536
565
|
}], paginator: [{
|
|
@@ -643,4 +672,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
643
672
|
type: ViewChild,
|
|
644
673
|
args: ['colToggleMenu']
|
|
645
674
|
}] } });
|
|
646
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDaEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdEUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixF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QUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUlsQyxvQkFBb0I7c0JBRDFCLFlBQVk7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJeEMsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUl2QyxnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSS9DLGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLGtCQUFrQjtnQkFJN0IsYUFBYTtzQkFEWixTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBUcmVlVGFibGUsXG4gIFRyZWVUYWJsZVNlcnZpY2UsXG4gIFRyZWVUYWJsZU1vZHVsZVxufSBmcm9tICdwcmltZW5nL3RyZWV0YWJsZSc7XG5pbXBvcnQgeyBEb21IYW5kbGVyIH0gZnJvbSAncHJpbWVuZy9kb20nO1xuaW1wb3J0IHsgQW5nbGVEb3VibGVMZWZ0SWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvYW5nbGVkb3VibGVsZWZ0JztcbmltcG9ydCB7IEFuZ2xlTGVmdEljb24gfSBmcm9tICdwcmltZW5nL2ljb25zL2FuZ2xlbGVmdCc7XG5pbXBvcnQgeyBBbmdsZVJpZ2h0SWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvYW5nbGVyaWdodCc7XG5pbXBvcnQgeyBBbmdsZURvdWJsZVJpZ2h0SWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvYW5nbGVkb3VibGVyaWdodCc7XG5pbXBvcnQgeyBTb3J0RXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBmaW5kLCBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IENwc0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWlucHV0L2Nwcy1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWJ1dHRvbi9jcHMtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLW1lbnUvY3BzLW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IENwc0ljb25Db21wb25lbnQgfSBmcm9tICcuLi9jcHMtaWNvbi9jcHMtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLXNlbGVjdC9jcHMtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtbG9hZGVyL2Nwcy1sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENwc1RyZWVUYWJsZUNvbHVtblNvcnRhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLWNvbHVtbi1zb3J0YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVHJlZVRhYmxlVW5zb3J0RGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2ludGVybmFsL3RyZWUtdGFibGUtdW5zb3J0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUYWJsZVJvd01lbnVDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtdGFibGUvdGFibGUtcm93LW1lbnUvdGFibGUtcm93LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IGNvbnZlcnRTaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJuYWwvc2l6ZS11dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmVlVGFibGVGYWN0b3J5KHRhYmxlQ29tcG9uZW50OiBDcHNUcmVlVGFibGVDb21wb25lbnQpIHtcbiAgcmV0dXJuIHRhYmxlQ29tcG9uZW50LnByaW1lbmdUcmVlVGFibGU7XG59XG5cbmV4cG9ydCB0eXBlIENwc1RyZWVUYWJsZVNpemUgPSAnc21hbGwnIHwgJ25vcm1hbCcgfCAnbGFyZ2UnO1xuZXhwb3J0IHR5cGUgQ3BzVHJlZVRhYmxlVG9vbGJhclNpemUgPSAnc21hbGwnIHwgJ25vcm1hbCc7XG5leHBvcnQgdHlwZSBDcHNUcmVlVGFibGVTb3J0TW9kZSA9ICdzaW5nbGUnIHwgJ211bHRpcGxlJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Nwcy10cmVlLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJlZVRhYmxlTW9kdWxlLFxuICAgIENwc0lucHV0Q29tcG9uZW50LFxuICAgIENwc0J1dHRvbkNvbXBvbmVudCxcbiAgICBDcHNNZW51Q29tcG9uZW50LFxuICAgIENwc0ljb25Db21wb25lbnQsXG4gICAgQ3BzU2VsZWN0Q29tcG9uZW50LFxuICAgIENwc0xvYWRlckNvbXBvbmVudCxcbiAgICBBbmdsZURvdWJsZUxlZnRJY29uLFxuICAgIEFuZ2xlTGVmdEljb24sXG4gICAgQW5nbGVSaWdodEljb24sXG4gICAgQW5nbGVEb3VibGVSaWdodEljb24sXG4gICAgQ3BzVHJlZVRhYmxlQ29sdW1uU29ydGFibGVEaXJlY3RpdmUsXG4gICAgVHJlZVRhYmxlVW5zb3J0RGlyZWN0aXZlLFxuICAgIFRhYmxlUm93TWVudUNvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vY3BzLXRyZWUtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcHMtdHJlZS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICBUcmVlVGFibGVTZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRyZWVUYWJsZSxcbiAgICAgIHVzZUZhY3Rvcnk6IHRyZWVUYWJsZUZhY3RvcnksXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgIGRlcHM6IFtDcHNUcmVlVGFibGVDb21wb25lbnRdXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENwc1RyZWVUYWJsZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXNcbntcbiAgQElucHV0KCkgZGF0YTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgY29sdW1uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW107XG4gIEBJbnB1dCgpIGNvbEhlYWRlck5hbWUgPSAnaGVhZGVyJztcbiAgQElucHV0KCkgY29sRmllbGROYW1lID0gJ2ZpZWxkJztcblxuICBASW5wdXQoKSBzdHJpcGVkID0gdHJ1ZTtcbiAgQElucHV0KCkgYm9yZGVyZWQgPSB0cnVlO1xuICBASW5wdXQoKSBzaXplOiBDcHNUcmVlVGFibGVTaXplID0gJ25vcm1hbCc7XG4gIEBJbnB1dCgpIHNlbGVjdGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgcm93SG92ZXIgPSB0cnVlO1xuICBASW5wdXQoKSBzaG93Um93TWVudSA9IGZhbHNlO1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG5cbiAgQElucHV0KCkgdGFibGVTdHlsZSA9IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgdGFibGVTdHlsZUNsYXNzID0gJyc7XG5cbiAgQElucHV0KCkgc29ydGFibGUgPSBmYWxzZTsgLy8gbWFrZXMgYWxsIHNvcnRhYmxlIGlmIGNvbHVtbnMgYXJlIHByb3ZpZGVkXG4gIEBJbnB1dCgpIHNvcnRNb2RlOiBDcHNUcmVlVGFibGVTb3J0TW9kZSA9ICdzaW5nbGUnO1xuICBASW5wdXQoKSBjdXN0b21Tb3J0ID0gZmFsc2U7XG5cbiAgQElucHV0KCkgaGFzVG9vbGJhciA9IHRydWU7XG4gIEBJbnB1dCgpIHRvb2xiYXJTaXplOiBDcHNUcmVlVGFibGVUb29sYmFyU2l6ZSA9ICdub3JtYWwnO1xuICBASW5wdXQoKSB0b29sYmFyVGl0bGUgPSAnJztcbiAgQElucHV0KCkgdG9vbGJhckljb24gPSAnJztcbiAgQElucHV0KCkgdG9vbGJhckljb25Db2xvciA9ICcnO1xuXG4gIEBJbnB1dCgpIHNjcm9sbGFibGUgPSB0cnVlO1xuICBASW5wdXQoKSBzY3JvbGxIZWlnaHQgPSAnJzsgLy8gJ2ZsZXgnIG9yIHZhbHVlKydweCdcbiAgQElucHV0KCkgdmlydHVhbFNjcm9sbCA9IGZhbHNlOyAvLyB3b3JrcyBvbmx5IGlmIHNjcm9sbGFibGUgaXMgdHJ1ZVxuICBASW5wdXQoKSBudW1Ub2xlcmF0ZWRJdGVtcyA9IDEwO1xuXG4gIEBJbnB1dCgpIHBhZ2luYXRvciA9IGZhbHNlO1xuICBASW5wdXQoKSBhbHdheXNTaG93UGFnaW5hdG9yID0gdHJ1ZTtcbiAgQElucHV0KCkgcm93c1BlclBhZ2VPcHRpb25zOiBudW1iZXJbXSA9IFtdO1xuICBASW5wdXQoKSBmaXJzdCA9IDA7XG4gIEBJbnB1dCgpIHJvd3MgPSAwO1xuICBASW5wdXQoKSByZXNldFBhZ2VPblJvd3NDaGFuZ2UgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVzZXRQYWdlT25Tb3J0ID0gdHJ1ZTtcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzID0gMDtcblxuICBASW5wdXQoKSBlbXB0eU1lc3NhZ2UgPSAnTm8gZGF0YSc7XG4gIEBJbnB1dCgpIGVtcHR5Qm9keUhlaWdodDogbnVtYmVyIHwgc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCkgbGF6eSA9IGZhbHNlO1xuICBASW5wdXQoKSBsYXp5TG9hZE9uSW5pdCA9IHRydWU7XG5cbiAgQElucHV0KCkgc2hvd0dsb2JhbEZpbHRlciA9IGZhbHNlO1xuICBASW5wdXQoKSBnbG9iYWxGaWx0ZXJQbGFjZWhvbGRlciA9ICdTZWFyY2gnO1xuICBASW5wdXQoKSBnbG9iYWxGaWx0ZXJGaWVsZHM6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIGNsZWFyR2xvYmFsRmlsdGVyT25Mb2FkaW5nID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2hvd1JlbW92ZUJ0bk9uU2VsZWN0ID0gdHJ1ZTtcbiAgQElucHV0KCkgcmVtb3ZlQnRuT25TZWxlY3REaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNob3dBZGRpdGlvbmFsQnRuT25TZWxlY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgYWRkaXRpb25hbEJ0bk9uU2VsZWN0VGl0bGUgPSAnU2VsZWN0IGFjdGlvbic7XG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxCdG5PblNlbGVjdERpc2FibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2hvd0FjdGlvbkJ0biA9IGZhbHNlO1xuICBASW5wdXQoKSBhY3Rpb25CdG5UaXRsZSA9ICdBY3Rpb24nO1xuICBASW5wdXQoKSBhY3Rpb25CdG5EaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNob3dEYXRhUmVsb2FkQnRuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRhdGFSZWxvYWRCdG5EaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNob3dDb2x1bW5zVG9nZ2xlQnRuID0gZmFsc2U7IC8vIGlmIGV4dGVybmFsIGJvZHkgdGVtcGxhdGUgaXMgcHJvdmlkZWQsIHVzZSBjb2x1bW5zU2VsZWN0ZWQgZXZlbnQgZW1pdHRlclxuICBASW5wdXQoKSBjb2x1bW5zVG9nZ2xlQnRuRGlzYWJsZWQgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gIEBPdXRwdXQoKSBhY3Rpb25CdG5DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgYWRkaXRpb25hbEJ0bk9uU2VsZWN0Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gIEBPdXRwdXQoKSBlZGl0Um93QnRuQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcm93c1JlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuICBAT3V0cHV0KCkgcGFnZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNvcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZmlsdGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNvbHVtbnNTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBba2V5OiBzdHJpbmddOiBhbnkgfVtdPigpO1xuICBAT3V0cHV0KCkgbGF6eUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZGF0YVJlbG9hZEJ0bkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG5vZGVFeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbm9kZUNvbGxhcHNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbm9kZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBub2RlVW5zZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBjdXN0b20gc29ydGluZy4gY3VzdG9tU29ydCBtdXN0IGJlIHRydWUuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBzb3J0IG1ldGEuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGN1c3RvbVNvcnRGdW5jdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAQ29udGVudENoaWxkKCd0b29sYmFyJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHB1YmxpYyB0b29sYmFyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2hlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgaGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ25lc3RlZEhlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgbmVzdGVkSGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2JvZHknLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIGJvZHlUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZCgncHJpbWVuZ1RyZWVUYWJsZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaW1lbmdUcmVlVGFibGUhOiBUcmVlVGFibGU7XG5cbiAgQFZpZXdDaGlsZCgnZ2xvYmFsRmlsdGVyQ29tcCcpXG4gIGdsb2JhbEZpbHRlckNvbXAhOiBDcHNJbnB1dENvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKCdjb2xUb2dnbGVNZW51JylcbiAgY29sVG9nZ2xlTWVudSE6IENwc01lbnVDb21wb25lbnQ7XG5cbiAgc2VsZWN0ZWRDb2x1bW5zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9W10gPSBbXTtcblxuICByb3dPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfVtdID0gW107XG5cbiAgc2VsZWN0ZWRSb3dzOiBhbnlbXSA9IFtdO1xuXG4gIHZpcnR1YWxTY3JvbGxJdGVtU2l6ZSA9IDA7XG4gIGRlZlNjcm9sbEhlaWdodFB4ID0gMDtcbiAgZGVmU2Nyb2xsSGVpZ2h0ID0gJyc7XG5cbiAgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xuICBoZWFkZXJCb3g6IGFueTtcbiAgc2Nyb2xsYWJsZUJvZHk6IGFueTtcbiAgc2Nyb2xsYmFyV2lkdGggPSAwO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICBjb25zdCBib2R5ID0gZW50cnkudGFyZ2V0O1xuICAgICAgICBjb25zdCBzYmFyVmlzaWJsZSA9IGJvZHkuc2Nyb2xsSGVpZ2h0ID4gYm9keS5jbGllbnRIZWlnaHQ7XG5cbiAgICAgICAgbGV0IHdTY3JvbGwgPSBzYmFyVmlzaWJsZSA/IHRoaXMuc2Nyb2xsYmFyV2lkdGggOiAwO1xuICAgICAgICBpZiAod1Njcm9sbCA+IDApIHdTY3JvbGwgLT0gMTtcblxuICAgICAgICB0aGlzLmhlYWRlckJveC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBgJHt3U2Nyb2xsfXB4YDtcbiAgICAgICAgdGhpcy5oZWFkZXJCb3guc3R5bGUuYm9yZGVyUmlnaHQgPVxuICAgICAgICAgIHdTY3JvbGwgPiAwID8gJzFweCBzb2xpZCAjZDdkNWQ1JyA6ICd1bnNldCc7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZW1wdHlCb2R5SGVpZ2h0ID0gY29udmVydFNpemUodGhpcy5lbXB0eUJvZHlIZWlnaHQpO1xuICAgIGlmICghdGhpcy5zY3JvbGxhYmxlKSB0aGlzLnZpcnR1YWxTY3JvbGwgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnNob3dBZGRpdGlvbmFsQnRuT25TZWxlY3QpIHRoaXMuc2hvd1JlbW92ZUJ0bk9uU2VsZWN0ID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICB0aGlzLmRlZlNjcm9sbEhlaWdodCA9IHRoaXMuc2Nyb2xsSGVpZ2h0O1xuXG4gICAgICBpZiAodGhpcy5kZWZTY3JvbGxIZWlnaHQgPT09ICdmbGV4JylcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX29uV2luZG93UmVzaXplLmJpbmQodGhpcykpO1xuXG4gICAgICBpZiAodGhpcy5kZWZTY3JvbGxIZWlnaHQgJiYgdGhpcy5kZWZTY3JvbGxIZWlnaHQgIT09ICdmbGV4Jykge1xuICAgICAgICB0aGlzLmRlZlNjcm9sbEhlaWdodFB4ID0gcGFyc2VJbnQodGhpcy5zY3JvbGxIZWlnaHQsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIGlmICh0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5sZW5ndGggPCAxKVxuICAgICAgICB0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucyA9IFs1LCAxMCwgMjUsIDUwXTtcblxuICAgICAgaWYgKCF0aGlzLnJvd3MpIHRoaXMucm93cyA9IHRoaXMucm93c1BlclBhZ2VPcHRpb25zWzBdO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICghdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMuaW5jbHVkZXModGhpcy5yb3dzKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncm93c1BlclBhZ2VPcHRpb25zIG11c3QgaW5jbHVkZSByb3dzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5yb3dPcHRpb25zID0gdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMubWFwKCh2KSA9PiAoe1xuICAgICAgICBsYWJlbDogJycgKyB2LFxuICAgICAgICB2YWx1ZTogdlxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuc2hvd0dsb2JhbEZpbHRlciAmJlxuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHM/Lmxlbmd0aCA8IDEgJiZcbiAgICAgIHRoaXMuZGF0YT8ubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGFbMF0uZGF0YSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxhYmxlQm9keSA9IHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLnAtdHJlZXRhYmxlLXNjcm9sbGFibGUtYm9keSdcbiAgICApO1xuICAgIGlmICh0aGlzLnNjcm9sbGFibGVCb2R5KSB7XG4gICAgICB0aGlzLmhlYWRlckJveCA9IHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcucC10cmVldGFibGUtc2Nyb2xsYWJsZS1oZWFkZXItYm94J1xuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwgJiYgdGhpcy5kZWZTY3JvbGxIZWlnaHQgPT09ICdmbGV4JylcbiAgICAgICAgdGhpcy5kZWZTY3JvbGxIZWlnaHRQeCA9IHRoaXMuc2Nyb2xsYWJsZUJvZHkuY2xpZW50SGVpZ2h0O1xuXG4gICAgICBpZiAodGhpcy5oZWFkZXJCb3gpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxiYXJXaWR0aCA9IERvbUhhbmRsZXIuY2FsY3VsYXRlU2Nyb2xsYmFyV2lkdGgoKTtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuc2Nyb2xsYWJsZUJvZHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbCB8fCB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtU2l6ZSkgcmV0dXJuO1xuICAgIHRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplID1cbiAgICAgIHRoaXMucHJpbWVuZ1RyZWVUYWJsZT8uZWw/Lm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgPy5xdWVyeVNlbGVjdG9yKCcucC10cmVldGFibGUtdGJvZHknKVxuICAgICAgICA/LnF1ZXJ5U2VsZWN0b3IoJ3RyJyk/LmNsaWVudEhlaWdodCB8fCAwO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIGlmICh0aGlzLmNsZWFyR2xvYmFsRmlsdGVyT25Mb2FkaW5nKSB0aGlzLmNsZWFyR2xvYmFsRmlsdGVyKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YUNoYW5nZXMgPSBjaGFuZ2VzPy5kYXRhO1xuICAgIGlmIChkYXRhQ2hhbmdlcz8ucHJldmlvdXNWYWx1ZSAhPT0gZGF0YUNoYW5nZXM/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsICYmIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcpXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25XaW5kb3dSZXNpemUuYmluZCh0aGlzKSk7XG4gIH1cblxuICBjbGVhckdsb2JhbEZpbHRlcigpIHtcbiAgICB0aGlzLmdsb2JhbEZpbHRlckNvbXA/LmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIF9vbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICB0aGlzLmRlZlNjcm9sbEhlaWdodFB4ID0gdGhpcy5zY3JvbGxhYmxlQm9keS5jbGllbnRIZWlnaHQ7XG4gIH1cblxuICBnZXQgc3R5bGVDbGFzcygpIHtcbiAgICBjb25zdCBjbGFzc2VzTGlzdCA9IFtdO1xuICAgIHN3aXRjaCAodGhpcy5zaXplKSB7XG4gICAgICBjYXNlICdzbWFsbCc6XG4gICAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtdHJlZXRhYmxlLXNtJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGFyZ2UnOlxuICAgICAgICBjbGFzc2VzTGlzdC5wdXNoKCdwLXRyZWV0YWJsZS1sZycpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzVG9vbGJhcikge1xuICAgICAgc3dpdGNoICh0aGlzLnRvb2xiYXJTaXplKSB7XG4gICAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgICAgICBjbGFzc2VzTGlzdC5wdXNoKCdjcHMtdGJhci1zbWFsbCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdub3JtYWwnOlxuICAgICAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ2Nwcy10YmFyLW5vcm1hbCcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5zdHJpcGVkKSB7XG4gICAgICBjbGFzc2VzTGlzdC5wdXNoKCdwLXRyZWV0YWJsZS1zdHJpcGVkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmJvcmRlcmVkKSB7XG4gICAgICBjbGFzc2VzTGlzdC5wdXNoKCdwLXRyZWV0YWJsZS1ncmlkbGluZXMnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zY3JvbGxIZWlnaHQgJiYgIXRoaXMubG9hZGluZyAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgY2xhc3Nlc0xpc3QucHVzaCgnY3BzLXRyZWV0YWJsZS1ib3R0b20tYm9yZGVyZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xhc3Nlc0xpc3Quam9pbignICcpO1xuICB9XG5cbiAgb25Tb3J0RnVuY3Rpb24oZXZlbnQ6IFNvcnRFdmVudCkge1xuICAgIHRoaXMuY3VzdG9tU29ydEZ1bmN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVjYWxjVmlydHVhbEhlaWdodCgpIHtcbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsICYmIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0KSB7XG4gICAgICBjb25zdCBpdGVtc0xlbiA9IHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5zZXJpYWxpemVkVmFsdWUubGVuZ3RoO1xuICAgICAgaWYgKGl0ZW1zTGVuIDwgMSkge1xuICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9IHRoaXMuZW1wdHlCb2R5SGVpZ2h0XG4gICAgICAgICAgPyAoYGNhbGMoJHt0aGlzLmVtcHR5Qm9keUhlaWdodH0gKyAxcHgpYCBhcyBzdHJpbmcpXG4gICAgICAgICAgOiB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtU2l6ZSArIDEgKyAncHgnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY3VySGVpZ2h0ID0gdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgKiBpdGVtc0xlbiArIDI7XG4gICAgICAgIGlmICh0aGlzLmRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnKSB7XG4gICAgICAgICAgaWYgKGN1ckhlaWdodCA+PSB0aGlzLmRlZlNjcm9sbEhlaWdodFB4KSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9ICdmbGV4JztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbGFibGVCb2R5LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9IE1hdGgubWluKHRoaXMuZGVmU2Nyb2xsSGVpZ2h0UHgsIGN1ckhlaWdodCkgKyAncHgnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRmlsdGVyR2xvYmFsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZmlsdGVyR2xvYmFsKHZhbHVlLCAnY29udGFpbnMnKTtcbiAgfVxuXG4gIG9uQ2xpY2tBZGRpdGlvbmFsQnRuT25TZWxlY3QoKSB7XG4gICAgdGhpcy5hZGRpdGlvbmFsQnRuT25TZWxlY3RDbGlja2VkLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgb25DbGlja0FjdGlvbkJ0bigpIHtcbiAgICB0aGlzLmFjdGlvbkJ0bkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbiAgb25SZWxvYWREYXRhKCkge1xuICAgIGlmICh0aGlzLmRhdGFSZWxvYWRCdG5EaXNhYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuZGF0YVJlbG9hZEJ0bkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbiAgb25Db2x1bW5zVG9nZ2xlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zVG9nZ2xlQnRuRGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLmNvbFRvZ2dsZU1lbnU/LnRvZ2dsZShldmVudCk7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkUm93cy5mb3JFYWNoKChyb3cpID0+IHRoaXMuX3JlbW92ZU5vZGVGcm9tRGF0YShyb3csIGZhbHNlKSk7XG4gICAgdGhpcy5kYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5yb3dzUmVtb3ZlZC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gICAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcbiAgfVxuXG4gIG9uRWRpdFJvd0NsaWNrZWQobm9kZTogYW55KSB7XG4gICAgdGhpcy5lZGl0Um93QnRuQ2xpY2tlZC5lbWl0KG5vZGUpO1xuICB9XG5cbiAgb25SZW1vdmVSb3dDbGlja2VkKG5vZGU6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gdGhpcy5zZWxlY3RlZFJvd3MuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IG5vZGUpO1xuICAgIHRoaXMuX3JlbW92ZU5vZGVGcm9tRGF0YShub2RlKTtcbiAgICB0aGlzLnJvd3NSZW1vdmVkLmVtaXQoW25vZGVdKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX3JlY2FsY1ZpcnR1YWxIZWlnaHQoKTtcbiAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yZW1vdmVOb2RlRnJvbURhdGEobm9kZVRvUmVtb3ZlOiBhbnksIHNpbmdsZSA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBfZmluZFRvcFNvcnRPcmRlciA9IChfbm9kZTogYW55KTogYW55ID0+IHtcbiAgICAgIGlmICghX25vZGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAodHlwZW9mIF9ub2RlLl9kZWZhdWx0U29ydE9yZGVyID09PSAnbnVtYmVyJylcbiAgICAgICAgcmV0dXJuIF9ub2RlLl9kZWZhdWx0U29ydE9yZGVyO1xuICAgICAgcmV0dXJuIF9maW5kVG9wU29ydE9yZGVyKF9ub2RlLnBhcmVudCk7XG4gICAgfTtcblxuICAgIGNvbnN0IF9yZW1vdmVGcm9tQ2hpbGRyZW4gPSAoX25vZGU6IGFueSkgPT4ge1xuICAgICAgaWYgKCFfbm9kZT8uY2hpbGRyZW4pIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGlkeCA9IF9ub2RlLmNoaWxkcmVuLmluZGV4T2Yobm9kZVRvUmVtb3ZlKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBfbm9kZS5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgaWYgKF9ub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSBfbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgX25vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoX3JlbW92ZUZyb21DaGlsZHJlbihjaGlsZCkpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gbG9jYXRlIHRvcCBsZXZlbCBub2RlXG4gICAgY29uc3Qgc29ydE9yZGVyID0gX2ZpbmRUb3BTb3J0T3JkZXIobm9kZVRvUmVtb3ZlKTtcbiAgICBpZiAoc29ydE9yZGVyID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBjb25zdCBub2RlID0gdGhpcy5kYXRhLmZpbmQoKG4pID0+IG4uX2RlZmF1bHRTb3J0T3JkZXIgPT09IHNvcnRPcmRlcik7XG4gICAgaWYgKCFub2RlKSByZXR1cm47XG5cbiAgICAvLyByZW1vdmUgdGhlIG5vZGUgaXRzZWxmIG9yIHJlbW92ZSBpdHMgY2hpbGRcbiAgICBpZiAobm9kZVRvUmVtb3ZlID09PSBub2RlKSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IG5vZGVUb1JlbW92ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIF9yZW1vdmVGcm9tQ2hpbGRyZW4obm9kZSk7XG4gICAgICAgIGlmIChzaW5nbGUpIHRoaXMuZGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUFsbENvbHVtbnMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPVxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoIDwgdGhpcy5jb2x1bW5zLmxlbmd0aCA/IHRoaXMuY29sdW1ucyA6IFtdO1xuICAgIHRoaXMuY29sdW1uc1NlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZENvbHVtbnMpO1xuICB9XG5cbiAgaXNDb2x1bW5TZWxlY3RlZChjb2w6IGFueSkge1xuICAgIHJldHVybiAhIWZpbmQodGhpcy5zZWxlY3RlZENvbHVtbnMsIChpdGVtKSA9PiBpc0VxdWFsKGl0ZW0sIGNvbCkpO1xuICB9XG5cbiAgb25Sb3dzUGVyUGFnZUNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMucmVzZXRQYWdlT25Sb3dzQ2hhbmdlKSB7XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZmlyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZVBhZ2UodGhpcy5nZXRQYWdlKCkpO1xuICB9XG5cbiAgZ2V0UGFnZUNvdW50KCkge1xuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5wcmltZW5nVHJlZVRhYmxlLnRvdGFsUmVjb3JkcyAvIHRoaXMucm93cyk7XG4gIH1cblxuICBnZXRQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5wcmltZW5nVHJlZVRhYmxlLmZpcnN0IC8gdGhpcy5yb3dzKTtcbiAgfVxuXG4gIGNoYW5nZVBhZ2UocDogbnVtYmVyKSB7XG4gICAgY29uc3QgcGMgPSBNYXRoLmNlaWwodGhpcy5nZXRQYWdlQ291bnQoKSk7XG5cbiAgICBpZiAocCA+PSAwICYmIHAgPCBwYykge1xuICAgICAgdGhpcy5maXJzdCA9IHRoaXMucm93cyAqIHA7XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUub25QYWdlQ2hhbmdlKHtcbiAgICAgICAgZmlyc3Q6IHRoaXMuZmlyc3QsXG4gICAgICAgIHJvd3M6IHRoaXMucm93c1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpcnN0ID0gZXZlbnQuZmlyc3Q7XG4gICAgdGhpcy5yb3dzID0gZXZlbnQucm93cztcblxuICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgcGFnZTogdGhpcy5nZXRQYWdlKCksXG4gICAgICBmaXJzdDogdGhpcy5maXJzdCxcbiAgICAgIHJvd3M6IHRoaXMucm93cyxcbiAgICAgIHBhZ2VDb3VudDogTWF0aC5jZWlsKHRoaXMuZ2V0UGFnZUNvdW50KCkpXG4gICAgfTtcblxuICAgIHRoaXMucGFnZUNoYW5nZWQuZW1pdChzdGF0ZSk7XG4gIH1cblxuICBvbkxhenlMb2FkZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubGF6eUxvYWRlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uTm9kZUV4cGFuZGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vZGVFeHBhbmRlZC5lbWl0KGV2ZW50KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX3JlY2FsY1ZpcnR1YWxIZWlnaHQoKTtcbiAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBvbk5vZGVDb2xsYXBzZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubm9kZUNvbGxhcHNlZC5lbWl0KGV2ZW50KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX3JlY2FsY1ZpcnR1YWxIZWlnaHQoKTtcbiAgICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBvbk5vZGVTZWxlY3RlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5ub2RlU2VsZWN0ZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbk5vZGVVbnNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vZGVVbnNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25Tb3J0KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNvcnRlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uRmlsdGVyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpbHRlcmVkLmVtaXQoZXZlbnQpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVjYWxjVmlydHVhbEhlaWdodCgpO1xuICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VsZWN0Q29sdW1uKGNvbDogYW55KSB7XG4gICAgbGV0IHJlcyA9IFtdIGFzIGFueTtcbiAgICBpZiAodGhpcy5pc0NvbHVtblNlbGVjdGVkKGNvbCkpIHtcbiAgICAgIHJlcyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbHRlcigodjogYW55KSA9PiAhaXNFcXVhbCh2LCBjb2wpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKG8pID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNvbWUoKHY6IGFueSkgPT4gaXNFcXVhbCh2LCBvKSkgfHxcbiAgICAgICAgICBpc0VxdWFsKGNvbCwgbylcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzLnB1c2gobyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHJlcztcbiAgICB0aGlzLmNvbHVtbnNTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRDb2x1bW5zKTtcbiAgfVxuXG4gIG9uU2VsZWN0aW9uQ2hhbmdlZChzZWxlY3Rpb246IGFueVtdKSB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLmVtaXQoc2VsZWN0aW9uKTtcbiAgfVxufVxuIiwiPHAtdHJlZVRhYmxlXG4gICNwcmltZW5nVHJlZVRhYmxlXG4gIHR0V2l0aFVuc29ydFxuICBbbmdDbGFzc109XCJ7ICdjcHMtdHJlZXRhYmxlLWxvYWRpbmcnOiBsb2FkaW5nIH1cIlxuICBbdmFsdWVdPVwiZGF0YVwiXG4gIFtzY3JvbGxhYmxlXT1cInNjcm9sbGFibGVcIlxuICBbc2Nyb2xsSGVpZ2h0XT1cInNjcm9sbEhlaWdodFwiXG4gIFt2aXJ0dWFsU2Nyb2xsXT1cInZpcnR1YWxTY3JvbGxcIlxuICBbdmlydHVhbFNjcm9sbEl0ZW1TaXplXT1cInZpcnR1YWxTY3JvbGxJdGVtU2l6ZVwiXG4gIFt2aXJ0dWFsU2Nyb2xsT3B0aW9uc109XCJ7XG4gICAgbnVtVG9sZXJhdGVkSXRlbXM6IG51bVRvbGVyYXRlZEl0ZW1zLFxuICAgIGF1dG9TaXplOiBmYWxzZVxuICB9XCJcbiAgW2NvbHVtbnNdPVwic2VsZWN0ZWRDb2x1bW5zXCJcbiAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gIFtyb3dIb3Zlcl09XCJyb3dIb3ZlclwiXG4gIFtsYXp5XT1cImxhenlcIlxuICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRSb3dzXCJcbiAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gIGNvbXBhcmVTZWxlY3Rpb25CeT1cImVxdWFsc1wiXG4gIFtsYXp5TG9hZE9uSW5pdF09XCJsYXp5TG9hZE9uSW5pdFwiXG4gIFtzdHlsZUNsYXNzXT1cInN0eWxlQ2xhc3NcIlxuICBbdGFibGVTdHlsZV09XCJ0YWJsZVN0eWxlXCJcbiAgW3RhYmxlU3R5bGVDbGFzc109XCJ0YWJsZVN0eWxlQ2xhc3NcIlxuICBbY3VzdG9tU29ydF09XCJjdXN0b21Tb3J0XCJcbiAgW3NvcnRNb2RlXT1cInNvcnRNb2RlXCJcbiAgW2dsb2JhbEZpbHRlckZpZWxkc109XCJnbG9iYWxGaWx0ZXJGaWVsZHNcIlxuICBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiXG4gIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXG4gIFthbHdheXNTaG93UGFnaW5hdG9yXT1cImFsd2F5c1Nob3dQYWdpbmF0b3JcIlxuICBbcm93c109XCJyb3dzXCJcbiAgW2ZpcnN0XT1cImZpcnN0XCJcbiAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICBbcmVzZXRQYWdlT25Tb3J0XT1cInJlc2V0UGFnZU9uU29ydFwiXG4gIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IC0ge2xhc3R9IG9mIHt0b3RhbFJlY29yZHN9XCJcbiAgKG9uUGFnZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gIChvblNvcnQpPVwib25Tb3J0KCRldmVudClcIlxuICAob25GaWx0ZXIpPVwib25GaWx0ZXIoJGV2ZW50KVwiXG4gIChvbkxhenlMb2FkKT1cIm9uTGF6eUxvYWRlZCgkZXZlbnQpXCJcbiAgKHNvcnRGdW5jdGlvbik9XCJvblNvcnRGdW5jdGlvbigkZXZlbnQpXCJcbiAgKG9uTm9kZUV4cGFuZCk9XCJvbk5vZGVFeHBhbmRlZCgkZXZlbnQpXCJcbiAgKG9uTm9kZUNvbGxhcHNlKT1cIm9uTm9kZUNvbGxhcHNlZCgkZXZlbnQpXCJcbiAgKG9uTm9kZVNlbGVjdCk9XCJvbk5vZGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgKG9uTm9kZVVuc2VsZWN0KT1cIm9uTm9kZVVuc2VsZWN0ZWQoJGV2ZW50KVwiPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiICpuZ0lmPVwiaGFzVG9vbGJhclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b29sYmFyVGVtcGxhdGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRvb2xiYXJUZW1wbGF0ZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1sZWZ0XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJ0b29sYmFySWNvblwiIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWljb25cIj5cbiAgICAgICAgICA8Y3BzLWljb24gW2ljb25dPVwidG9vbGJhckljb25cIiBbY29sb3JdPVwidG9vbGJhckljb25Db2xvclwiPjwvY3BzLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLXRpdGxlXCI+e3sgdG9vbGJhclRpdGxlIH19PC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93R2xvYmFsRmlsdGVyXCIgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItZ2xvYmFsLWZpbHRlclwiPlxuICAgICAgICAgIDxjcHMtaW5wdXRcbiAgICAgICAgICAgICNnbG9iYWxGaWx0ZXJDb21wXG4gICAgICAgICAgICBwcmVmaXhJY29uPVwic2VhcmNoXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnbG9iYWxGaWx0ZXJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2VkKT1cIm9uRmlsdGVyR2xvYmFsKCRldmVudClcIlxuICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCJcbiAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cInRvb2xiYXJTaXplID09PSAnc21hbGwnID8gJ3VuZGVybGluZWQnIDogJ291dGxpbmVkJ1wiXG4gICAgICAgICAgICBbaGlkZURldGFpbHNdPVwidHJ1ZVwiPlxuICAgICAgICAgIDwvY3BzLWlucHV0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1yaWdodFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG93UmVtb3ZlQnRuT25TZWxlY3QgJiYgc2VsZWN0ZWRSb3dzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWJ0bi1vbi1zZWxlY3RcIj5cbiAgICAgICAgICA8Y3BzLWJ1dHRvblxuICAgICAgICAgICAgbGFiZWw9XCJSZW1vdmVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlbW92ZUJ0bk9uU2VsZWN0RGlzYWJsZWRcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgICB0eXBlPVwiYm9yZGVybGVzc1wiXG4gICAgICAgICAgICBpY29uPVwicmVtb3ZlXCJcbiAgICAgICAgICAgIFtzaXplXT1cInRvb2xiYXJTaXplXCJcbiAgICAgICAgICAgIChjbGlja2VkKT1cInJlbW92ZVNlbGVjdGVkKClcIj5cbiAgICAgICAgICA8L2Nwcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG93QWRkaXRpb25hbEJ0bk9uU2VsZWN0ICYmIHNlbGVjdGVkUm93cy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1idG4tb24tc2VsZWN0XCI+XG4gICAgICAgICAgPGNwcy1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCJhZGRpdGlvbmFsQnRuT25TZWxlY3RUaXRsZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWRkaXRpb25hbEJ0bk9uU2VsZWN0RGlzYWJsZWRcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgICB0eXBlPVwiYm9yZGVybGVzc1wiXG4gICAgICAgICAgICBbc2l6ZV09XCJ0b29sYmFyU2l6ZVwiXG4gICAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNsaWNrQWRkaXRpb25hbEJ0bk9uU2VsZWN0KClcIj5cbiAgICAgICAgICA8L2Nwcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0FjdGlvbkJ0blwiIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWFjdGlvbi1idG5cIj5cbiAgICAgICAgICA8Y3BzLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cImFjdGlvbkJ0blRpdGxlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb25CdG5EaXNhYmxlZFwiXG4gICAgICAgICAgICBjb2xvcj1cInByZXBhcmVkXCJcbiAgICAgICAgICAgIHR5cGU9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICBbc2l6ZV09XCJ0b29sYmFyU2l6ZVwiXG4gICAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNsaWNrQWN0aW9uQnRuKClcIj5cbiAgICAgICAgICA8L2Nwcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG93Q29sdW1uc1RvZ2dsZUJ0biAmJiBjb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWNvbHRvZ2dsZS1idG5cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1kaXNhYmxlZCc6IGNvbHVtbnNUb2dnbGVCdG5EaXNhYmxlZCB9XCI+XG4gICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICBpY29uPVwiY29sdW1uc1wiXG4gICAgICAgICAgICBzaXplPVwibm9ybWFsXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJcbiAgICAgICAgICAgICAgY29sdW1uc1RvZ2dsZUJ0bkRpc2FibGVkID8gJ3RleHQtbGlnaHRlc3QnIDogJ3ByZXBhcmVkLWxpZ2h0ZW4xJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNvbHVtbnNUb2dnbGUoJGV2ZW50KVwiPjwvY3BzLWljb24+XG4gICAgICAgICAgPGNwcy1tZW51ICNjb2xUb2dnbGVNZW51IFt3aXRoQXJyb3ddPVwiZmFsc2VcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51XCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbSBzZWxlY3QtYWxsLW9wdGlvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFsbHNlbGVjdGVkXT1cInNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPT09IGNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsQ29sdW1ucygpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tY2hlY2tcIj4gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+U2hvdyBhbGwgY29sdW1uczwvc3BhblxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3RDb2x1bW4oY29sKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzQ29sdW1uU2VsZWN0ZWQoY29sKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWNoZWNrXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICBjb2xbY29sSGVhZGVyTmFtZV1cbiAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Nwcy1tZW51PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0RhdGFSZWxvYWRCdG5cIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLXJlbG9hZC1idG5cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1kaXNhYmxlZCc6IGRhdGFSZWxvYWRCdG5EaXNhYmxlZCB9XCI+XG4gICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICBpY29uPVwicmVmcmVzaFwiXG4gICAgICAgICAgICBzaXplPVwiMThcIlxuICAgICAgICAgICAgW2NvbG9yXT1cImRhdGFSZWxvYWRCdG5EaXNhYmxlZCA/ICd0ZXh0LWxpZ2h0JyA6ICdwcmVwYXJlZC1saWdodGVuMSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVsb2FkRGF0YSgpXCI+XG4gICAgICAgICAgPC9jcHMtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgKm5nSWY9XCJuZXN0ZWRIZWFkZXJUZW1wbGF0ZVwiIGxldC1jb2x1bW5zPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICBuZXN0ZWRIZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICRpbXBsaWNpdDogY29sdW1ucyxcbiAgICAgICAgfVxuICAgICAgXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiICpuZ0lmPVwiIW5lc3RlZEhlYWRlclRlbXBsYXRlXCIgbGV0LWNvbHVtbnM+XG4gICAgPHRyPlxuICAgICAgPCEtLSA8dGggc3R5bGU9XCJ3aWR0aDogM3JlbVwiICpuZ0lmPVwicmVvcmRlcmFibGVSb3dzXCI+PC90aD4gLS0+XG4gICAgICA8dGggc3R5bGU9XCJ3aWR0aDogNTVweFwiICpuZ0lmPVwic2VsZWN0YWJsZVwiPlxuICAgICAgICA8cC10cmVlVGFibGVIZWFkZXJDaGVja2JveD48L3AtdHJlZVRhYmxlSGVhZGVyQ2hlY2tib3g+XG4gICAgICA8L3RoPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlclRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogY29sdW1ucyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoZWFkZXJUZW1wbGF0ZSAmJiBjb2x1bW5zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNvcnRhYmxlXCI+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIlxuICAgICAgICAgICAgW2Nwc1RUQ29sU29ydGFibGVdPVwiY29sW2NvbEZpZWxkTmFtZV1cIj5cbiAgICAgICAgICAgIHt7IGNvbFtjb2xIZWFkZXJOYW1lXSB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNvcnRhYmxlXCI+XG4gICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxuICAgICAgICAgICAge3sgY29sW2NvbEhlYWRlck5hbWVdIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDx0aCBjbGFzcz1cImNwcy10cmVldGFibGUtcm93LW1lbnUtY2VsbFwiICpuZ0lmPVwic2hvd1Jvd01lbnVcIj48L3RoPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgcFRlbXBsYXRlPVwiYm9keVwiXG4gICAgbGV0LXJvd0RhdGE9XCJyb3dEYXRhXCJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICAgIGxldC1yb3dOb2RlXG4gICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgICA8dHJcbiAgICAgIFt0dFJvd109XCJyb3dOb2RlXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2Nwcy10cmVldGFibGUtcm93LXNlbGVjdGVkJzpcbiAgICAgICAgICBzZWxlY3RhYmxlICYmIHByaW1lbmdUcmVlVGFibGUuaXNTZWxlY3RlZChyb3dOb2RlLm5vZGUpXG4gICAgICB9XCI+XG4gICAgICA8IS0tIDx0ZCAqbmdJZj1cInJlb3JkZXJhYmxlUm93c1wiIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1kcmFnLWhhbmRsZS1jZWxsXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1kcmFnLWhhbmRsZVwiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT7imLA8L3NwYW4+XG4gICAgICA8L3RkPiAtLT5cbiAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiA1NXB4XCIgKm5nSWY9XCJzZWxlY3RhYmxlXCI+XG4gICAgICAgIDxwLXRyZWVUYWJsZUNoZWNrYm94IFt2YWx1ZV09XCJyb3dOb2RlXCI+PC9wLXRyZWVUYWJsZUNoZWNrYm94PlxuICAgICAgPC90ZD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJib2R5VGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBib2R5VGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogcm93Tm9kZSxcbiAgICAgICAgICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgICAgICByb3dEYXRhOiByb3dEYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWJvZHlUZW1wbGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPHAtdHJlZVRhYmxlVG9nZ2xlciBbcm93Tm9kZV09XCJyb3dOb2RlXCIgKm5nSWY9XCJpID09PSAwXCI+XG4gICAgICAgICAgICA8L3AtdHJlZVRhYmxlVG9nZ2xlcj5cbiAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sW2NvbEZpZWxkTmFtZV1dIH19XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDx0ZCAqbmdJZj1cInNob3dSb3dNZW51XCIgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXJvdy1tZW51LWNlbGxcIj5cbiAgICAgICAgPHRhYmxlLXJvdy1tZW51XG4gICAgICAgICAgKGVkaXRSb3dCdG5DbGlja2VkKT1cIm9uRWRpdFJvd0NsaWNrZWQocm93Tm9kZS5ub2RlKVwiXG4gICAgICAgICAgKHJlbW92ZVJvd0J0bkNsaWNrZWQpPVwib25SZW1vdmVSb3dDbGlja2VkKHJvd05vZGUubm9kZSlcIj5cbiAgICAgICAgPC90YWJsZS1yb3ctbWVudT5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxuICAgIDx0cj5cbiAgICAgIDx0ZFxuICAgICAgICBjb2xzcGFuPVwiMTAwXCJcbiAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWVtcHR5LW1lc3NhZ2UtdGRcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7IGhlaWdodDogZW1wdHlCb2R5SGVpZ2h0IH1cIj5cbiAgICAgICAge3sgZW1wdHlNZXNzYWdlIH19XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsb2FkaW5naWNvblwiPlxuICAgIDxjcHMtbG9hZGVyIFtmdWxsU2NyZWVuXT1cImZhbHNlXCIgb3BhY2l0eT1cIjBcIj48L2Nwcy1sb2FkZXI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JsZWZ0XCI+XG4gICAgPGRpdiBjbGFzcz1cImNwcy10YWJsZS1wYWdpbmF0b3ItaXRtcy1wZXItcGFnZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdGFibGUtcGFnaW5hdG9yLWl0ZW1zLXBlci1wYWdlLXRpdGxlXCJcbiAgICAgICAgPlJvd3MgcGVyIHBhZ2U6XG4gICAgICA8L3NwYW4+XG4gICAgICA8Y3BzLXNlbGVjdFxuICAgICAgICBbb3B0aW9uc109XCJyb3dPcHRpb25zXCJcbiAgICAgICAgW2hpZGVEZXRhaWxzXT1cInRydWVcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInJvd3NcIlxuICAgICAgICAodmFsdWVDaGFuZ2VkKT1cIm9uUm93c1BlclBhZ2VDaGFuZ2VkKClcIlxuICAgICAgICBbcmV0dXJuT2JqZWN0XT1cImZhbHNlXCJcbiAgICAgICAgb3B0aW9uc0NsYXNzPVwiY3BzLXBhZ2luYXRvci1wYWdlLW9wdGlvbnNcIj5cbiAgICAgIDwvY3BzLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9yZmlyc3RwYWdlbGlua2ljb25cIj5cbiAgICA8QW5nbGVEb3VibGVMZWZ0SWNvbiAvPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ycHJldmlvdXNwYWdlbGlua2ljb25cIj5cbiAgICA8QW5nbGVMZWZ0SWNvbiAvPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ybmV4dHBhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZVJpZ2h0SWNvbiAvPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ybGFzdHBhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZURvdWJsZVJpZ2h0SWNvbiAvPlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLXRyZWVUYWJsZT5cbiJdfQ==
|
|
675
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDaEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdEUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixF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c0JBQXJDLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBT0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUdBLGVBQWU7c0JBRHJCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJbkMsY0FBYztzQkFEcEIsWUFBWTt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUlsQyxvQkFBb0I7c0JBRDFCLFlBQVk7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJeEMsWUFBWTtzQkFEbEIsWUFBWTt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUl2QyxnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSS9DLGdCQUFnQjtzQkFEZixTQUFTO3VCQUFDLGtCQUFrQjtnQkFJN0IsYUFBYTtzQkFEWixTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBUcmVlVGFibGUsXG4gIFRyZWVUYWJsZVNlcnZpY2UsXG4gIFRyZWVUYWJsZU1vZHVsZVxufSBmcm9tICdwcmltZW5nL3RyZWV0YWJsZSc7XG5pbXBvcnQgeyBEb21IYW5kbGVyIH0gZnJvbSAncHJpbWVuZy9kb20nO1xuaW1wb3J0IHsgQW5nbGVEb3VibGVMZWZ0SWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvYW5nbGVkb3VibGVsZWZ0JztcbmltcG9ydCB7IEFuZ2xlTGVmdEljb24gfSBmcm9tICdwcmltZW5nL2ljb25zL2FuZ2xlbGVmdCc7XG5pbXBvcnQgeyBBbmdsZVJpZ2h0SWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvYW5nbGVyaWdodCc7XG5pbXBvcnQgeyBBbmdsZURvdWJsZVJpZ2h0SWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvYW5nbGVkb3VibGVyaWdodCc7XG5pbXBvcnQgeyBTb3J0RXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBmaW5kLCBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IENwc0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWlucHV0L2Nwcy1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWJ1dHRvbi9jcHMtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLW1lbnUvY3BzLW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IENwc0ljb25Db21wb25lbnQgfSBmcm9tICcuLi9jcHMtaWNvbi9jcHMtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLXNlbGVjdC9jcHMtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtbG9hZGVyL2Nwcy1sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENwc1RyZWVUYWJsZUNvbHVtblNvcnRhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLWNvbHVtbi1zb3J0YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVHJlZVRhYmxlVW5zb3J0RGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2ludGVybmFsL3RyZWUtdGFibGUtdW5zb3J0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUYWJsZVJvd01lbnVDb21wb25lbnQgfSBmcm9tICcuLi9jcHMtdGFibGUvdGFibGUtcm93LW1lbnUvdGFibGUtcm93LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IGNvbnZlcnRTaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJuYWwvc2l6ZS11dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmVlVGFibGVGYWN0b3J5KHRhYmxlQ29tcG9uZW50OiBDcHNUcmVlVGFibGVDb21wb25lbnQpIHtcbiAgcmV0dXJuIHRhYmxlQ29tcG9uZW50LnByaW1lbmdUcmVlVGFibGU7XG59XG5cbmV4cG9ydCB0eXBlIENwc1RyZWVUYWJsZVNpemUgPSAnc21hbGwnIHwgJ25vcm1hbCcgfCAnbGFyZ2UnO1xuZXhwb3J0IHR5cGUgQ3BzVHJlZVRhYmxlVG9vbGJhclNpemUgPSAnc21hbGwnIHwgJ25vcm1hbCc7XG5leHBvcnQgdHlwZSBDcHNUcmVlVGFibGVTb3J0TW9kZSA9ICdzaW5nbGUnIHwgJ211bHRpcGxlJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Nwcy10cmVlLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJlZVRhYmxlTW9kdWxlLFxuICAgIENwc0lucHV0Q29tcG9uZW50LFxuICAgIENwc0J1dHRvbkNvbXBvbmVudCxcbiAgICBDcHNNZW51Q29tcG9uZW50LFxuICAgIENwc0ljb25Db21wb25lbnQsXG4gICAgQ3BzU2VsZWN0Q29tcG9uZW50LFxuICAgIENwc0xvYWRlckNvbXBvbmVudCxcbiAgICBBbmdsZURvdWJsZUxlZnRJY29uLFxuICAgIEFuZ2xlTGVmdEljb24sXG4gICAgQW5nbGVSaWdodEljb24sXG4gICAgQW5nbGVEb3VibGVSaWdodEljb24sXG4gICAgQ3BzVHJlZVRhYmxlQ29sdW1uU29ydGFibGVEaXJlY3RpdmUsXG4gICAgVHJlZVRhYmxlVW5zb3J0RGlyZWN0aXZlLFxuICAgIFRhYmxlUm93TWVudUNvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vY3BzLXRyZWUtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcHMtdHJlZS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICBUcmVlVGFibGVTZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRyZWVUYWJsZSxcbiAgICAgIHVzZUZhY3Rvcnk6IHRyZWVUYWJsZUZhY3RvcnksXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgIGRlcHM6IFtDcHNUcmVlVGFibGVDb21wb25lbnRdXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENwc1RyZWVUYWJsZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXNcbntcbiAgQElucHV0KCkgZGF0YTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgY29sdW1uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW107XG4gIEBJbnB1dCgpIGNvbEhlYWRlck5hbWUgPSAnaGVhZGVyJztcbiAgQElucHV0KCkgY29sRmllbGROYW1lID0gJ2ZpZWxkJztcbiAgQElucHV0KCkgbWluV2lkdGggPSAwO1xuXG4gIEBJbnB1dCgpIHN0cmlwZWQgPSB0cnVlO1xuICBASW5wdXQoKSBib3JkZXJlZCA9IHRydWU7XG4gIEBJbnB1dCgpIHNpemU6IENwc1RyZWVUYWJsZVNpemUgPSAnbm9ybWFsJztcbiAgQElucHV0KCkgc2VsZWN0YWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSByb3dIb3ZlciA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dSb3dNZW51ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcblxuICBASW5wdXQoKSB0YWJsZVN0eWxlID0gdW5kZWZpbmVkO1xuICBASW5wdXQoKSB0YWJsZVN0eWxlQ2xhc3MgPSAnJztcblxuICBASW5wdXQoKSBzb3J0YWJsZSA9IGZhbHNlOyAvLyBtYWtlcyBhbGwgc29ydGFibGUgaWYgY29sdW1ucyBhcmUgcHJvdmlkZWRcbiAgQElucHV0KCkgc29ydE1vZGU6IENwc1RyZWVUYWJsZVNvcnRNb2RlID0gJ3NpbmdsZSc7XG4gIEBJbnB1dCgpIGN1c3RvbVNvcnQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBoYXNUb29sYmFyID0gdHJ1ZTtcbiAgQElucHV0KCkgdG9vbGJhclNpemU6IENwc1RyZWVUYWJsZVRvb2xiYXJTaXplID0gJ25vcm1hbCc7XG4gIEBJbnB1dCgpIHRvb2xiYXJUaXRsZSA9ICcnO1xuICBASW5wdXQoKSB0b29sYmFySWNvbiA9ICcnO1xuICBASW5wdXQoKSB0b29sYmFySWNvbkNvbG9yID0gJyc7XG5cbiAgQElucHV0KCkgc2Nyb2xsYWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNjcm9sbEhlaWdodCA9ICcnOyAvLyAnZmxleCcgb3IgdmFsdWUrJ3B4J1xuICBASW5wdXQoKSB2aXJ0dWFsU2Nyb2xsID0gZmFsc2U7IC8vIHdvcmtzIG9ubHkgaWYgc2Nyb2xsYWJsZSBpcyB0cnVlXG4gIEBJbnB1dCgpIG1heFZpcnR1YWxTY3JvbGxJdGVtSGVpZ2h0ID0gMDtcbiAgQElucHV0KCkgbnVtVG9sZXJhdGVkSXRlbXMgPSAxMDtcblxuICBASW5wdXQoKSBwYWdpbmF0b3IgPSBmYWxzZTtcbiAgQElucHV0KCkgYWx3YXlzU2hvd1BhZ2luYXRvciA9IHRydWU7XG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9uczogbnVtYmVyW10gPSBbXTtcbiAgQElucHV0KCkgZmlyc3QgPSAwO1xuICBASW5wdXQoKSByb3dzID0gMDtcbiAgQElucHV0KCkgcmVzZXRQYWdlT25Sb3dzQ2hhbmdlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlc2V0UGFnZU9uU29ydCA9IHRydWU7XG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkcyA9IDA7XG5cbiAgQElucHV0KCkgZW1wdHlNZXNzYWdlID0gJ05vIGRhdGEnO1xuICBASW5wdXQoKSBlbXB0eUJvZHlIZWlnaHQ6IG51bWJlciB8IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpIGxhenkgPSBmYWxzZTtcbiAgQElucHV0KCkgbGF6eUxvYWRPbkluaXQgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHNob3dHbG9iYWxGaWx0ZXIgPSBmYWxzZTtcbiAgQElucHV0KCkgZ2xvYmFsRmlsdGVyUGxhY2Vob2xkZXIgPSAnU2VhcmNoJztcbiAgQElucHV0KCkgZ2xvYmFsRmlsdGVyRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBjbGVhckdsb2JhbEZpbHRlck9uTG9hZGluZyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNob3dSZW1vdmVCdG5PblNlbGVjdCA9IHRydWU7XG4gIEBJbnB1dCgpIHJlbW92ZUJ0bk9uU2VsZWN0RGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBzaG93QWRkaXRpb25hbEJ0bk9uU2VsZWN0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxCdG5PblNlbGVjdFRpdGxlID0gJ1NlbGVjdCBhY3Rpb24nO1xuICBASW5wdXQoKSBhZGRpdGlvbmFsQnRuT25TZWxlY3REaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25CdG4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWN0aW9uQnRuVGl0bGUgPSAnQWN0aW9uJztcbiAgQElucHV0KCkgYWN0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBzaG93RGF0YVJlbG9hZEJ0biA9IGZhbHNlO1xuICBASW5wdXQoKSBkYXRhUmVsb2FkQnRuRGlzYWJsZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBzaG93Q29sdW1uc1RvZ2dsZUJ0biA9IGZhbHNlOyAvLyBpZiBleHRlcm5hbCBib2R5IHRlbXBsYXRlIGlzIHByb3ZpZGVkLCB1c2UgY29sdW1uc1NlbGVjdGVkIGV2ZW50IGVtaXR0ZXJcbiAgQElucHV0KCkgY29sdW1uc1RvZ2dsZUJ0bkRpc2FibGVkID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuICBAT3V0cHV0KCkgYWN0aW9uQnRuQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGFkZGl0aW9uYWxCdG5PblNlbGVjdENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuICBAT3V0cHV0KCkgZWRpdFJvd0J0bkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHJvd3NSZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzb3J0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGZpbHRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBjb2x1bW5zU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgW2tleTogc3RyaW5nXTogYW55IH1bXT4oKTtcbiAgQE91dHB1dCgpIGxhenlMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGRhdGFSZWxvYWRCdG5DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBub2RlRXhwYW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG5vZGVDb2xsYXBzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG5vZGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbm9kZVVuc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byBpbXBsZW1lbnQgY3VzdG9tIHNvcnRpbmcuIGN1c3RvbVNvcnQgbXVzdCBiZSB0cnVlLlxuICAgKiBAcGFyYW0ge2FueX0gYW55IC0gc29ydCBtZXRhLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBjdXN0b21Tb3J0RnVuY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQENvbnRlbnRDaGlsZCgndG9vbGJhcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgdG9vbGJhclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKCdoZWFkZXInLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIGhlYWRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKCduZXN0ZWRIZWFkZXInLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIG5lc3RlZEhlYWRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKCdib2R5JywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHB1YmxpYyBib2R5VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBWaWV3Q2hpbGQoJ3ByaW1lbmdUcmVlVGFibGUnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwcmltZW5nVHJlZVRhYmxlITogVHJlZVRhYmxlO1xuXG4gIEBWaWV3Q2hpbGQoJ2dsb2JhbEZpbHRlckNvbXAnKVxuICBnbG9iYWxGaWx0ZXJDb21wITogQ3BzSW5wdXRDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgnY29sVG9nZ2xlTWVudScpXG4gIGNvbFRvZ2dsZU1lbnUhOiBDcHNNZW51Q29tcG9uZW50O1xuXG4gIHNlbGVjdGVkQ29sdW1uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW107XG5cbiAgcm93T3B0aW9uczogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogbnVtYmVyIH1bXSA9IFtdO1xuXG4gIHNlbGVjdGVkUm93czogYW55W10gPSBbXTtcblxuICB2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSAwO1xuICBkZWZTY3JvbGxIZWlnaHRQeCA9IDA7XG4gIGRlZlNjcm9sbEhlaWdodCA9ICcnO1xuXG4gIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcbiAgaGVhZGVyQm94OiBhbnk7XG4gIHNjcm9sbGFibGVCb2R5OiBhbnk7XG4gIHNjcm9sbGJhcldpZHRoID0gMDtcblxuICBvYnNlcnZlckRlYm91bmNlcnMgPSBuZXcgV2Vha01hcCgpO1xuICBvYnNlcnZlckhhbmRsZXJzID0gbmV3IFdlYWtNYXAoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLm9ic2VydmVySGFuZGxlcnMuaGFzKGVudHJ5LnRhcmdldCkpIHtcbiAgICAgICAgICB0aGlzLm9ic2VydmVySGFuZGxlcnMuc2V0KGVudHJ5LnRhcmdldCwgKCkgPT4ge1xuICAgICAgICAgICAgZW50cnkudGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCd0cmVlVGFibGVCb2R5UmVzaXplZCcpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5vYnNlcnZlckRlYm91bmNlcnMuZ2V0KGVudHJ5LnRhcmdldCkpO1xuICAgICAgICB0aGlzLm9ic2VydmVyRGVib3VuY2Vycy5zZXQoXG4gICAgICAgICAgZW50cnkudGFyZ2V0LFxuICAgICAgICAgIHNldFRpbWVvdXQodGhpcy5vYnNlcnZlckhhbmRsZXJzLmdldChlbnRyeS50YXJnZXQpLCAxMDApXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgYm9keSA9IGVudHJ5LnRhcmdldDtcbiAgICAgICAgY29uc3Qgc2JhclZpc2libGUgPSBib2R5LnNjcm9sbEhlaWdodCA+IGJvZHkuY2xpZW50SGVpZ2h0O1xuXG4gICAgICAgIGxldCB3U2Nyb2xsID0gc2JhclZpc2libGUgPyB0aGlzLnNjcm9sbGJhcldpZHRoIDogMDtcbiAgICAgICAgaWYgKHdTY3JvbGwgPiAwKSB3U2Nyb2xsIC09IDE7XG5cbiAgICAgICAgdGhpcy5oZWFkZXJCb3guc3R5bGUucGFkZGluZ1JpZ2h0ID0gYCR7d1Njcm9sbH1weGA7XG4gICAgICAgIHRoaXMuaGVhZGVyQm94LnN0eWxlLmJvcmRlclJpZ2h0ID1cbiAgICAgICAgICB3U2Nyb2xsID4gMCA/ICcxcHggc29saWQgI2Q3ZDVkNScgOiAndW5zZXQnO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVtcHR5Qm9keUhlaWdodCA9IGNvbnZlcnRTaXplKHRoaXMuZW1wdHlCb2R5SGVpZ2h0KTtcbiAgICBpZiAoIXRoaXMuc2Nyb2xsYWJsZSkgdGhpcy52aXJ0dWFsU2Nyb2xsID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zaG93QWRkaXRpb25hbEJ0bk9uU2VsZWN0KSB0aGlzLnNob3dSZW1vdmVCdG5PblNlbGVjdCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbCkge1xuICAgICAgdGhpcy5kZWZTY3JvbGxIZWlnaHQgPSB0aGlzLnNjcm9sbEhlaWdodDtcblxuICAgICAgaWYgKHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcpXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9vbldpbmRvd1Jlc2l6ZS5iaW5kKHRoaXMpKTtcblxuICAgICAgaWYgKHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ICYmIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ICE9PSAnZmxleCcpIHtcbiAgICAgICAgdGhpcy5kZWZTY3JvbGxIZWlnaHRQeCA9IHBhcnNlSW50KHRoaXMuc2Nyb2xsSGVpZ2h0LCAxMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICBpZiAodGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMubGVuZ3RoIDwgMSlcbiAgICAgICAgdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMgPSBbNSwgMTAsIDI1LCA1MF07XG5cbiAgICAgIGlmICghdGhpcy5yb3dzKSB0aGlzLnJvd3MgPSB0aGlzLnJvd3NQZXJQYWdlT3B0aW9uc1swXTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMucm93c1BlclBhZ2VPcHRpb25zLmluY2x1ZGVzKHRoaXMucm93cykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jvd3NQZXJQYWdlT3B0aW9ucyBtdXN0IGluY2x1ZGUgcm93cycpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMucm93T3B0aW9ucyA9IHRoaXMucm93c1BlclBhZ2VPcHRpb25zLm1hcCgodikgPT4gKHtcbiAgICAgICAgbGFiZWw6ICcnICsgdixcbiAgICAgICAgdmFsdWU6IHZcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnNob3dHbG9iYWxGaWx0ZXIgJiZcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyRmllbGRzPy5sZW5ndGggPCAxICYmXG4gICAgICB0aGlzLmRhdGE/Lmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyRmllbGRzID0gT2JqZWN0LmtleXModGhpcy5kYXRhWzBdLmRhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1pbldpZHRoID4gMCkge1xuICAgICAgY29uc3QgdHJlZVRhYmxlTWFpbiA9XG4gICAgICAgIHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLXRyZWV0YWJsZScpO1xuICAgICAgaWYgKHRyZWVUYWJsZU1haW4pIHRyZWVUYWJsZU1haW4uc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG5cbiAgICAgIGNvbnN0IHNjcm9sbGFibGVXcmFwcGVyID1cbiAgICAgICAgdGhpcy5wcmltZW5nVHJlZVRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAnLnAtdHJlZXRhYmxlLXNjcm9sbGFibGUtd3JhcHBlcidcbiAgICAgICAgKTtcbiAgICAgIGlmIChzY3JvbGxhYmxlV3JhcHBlcilcbiAgICAgICAgc2Nyb2xsYWJsZVdyYXBwZXIuc3R5bGUubWluV2lkdGggPSB0aGlzLm1pbldpZHRoICsgJ3B4JztcblxuICAgICAgY29uc3QgdHJlZVRhYmxlSGVhZGVyID1cbiAgICAgICAgdGhpcy5wcmltZW5nVHJlZVRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAnLnAtdHJlZXRhYmxlLWhlYWRlcidcbiAgICAgICAgKTtcbiAgICAgIGlmICh0cmVlVGFibGVIZWFkZXIpXG4gICAgICAgIHRyZWVUYWJsZUhlYWRlci5zdHlsZS5taW5XaWR0aCA9IHRoaXMubWluV2lkdGggKyAncHgnO1xuICAgIH1cblxuICAgIHRoaXMuc2Nyb2xsYWJsZUJvZHkgPSB0aGlzLnByaW1lbmdUcmVlVGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5wLXRyZWV0YWJsZS1zY3JvbGxhYmxlLWJvZHknXG4gICAgKTtcbiAgICBpZiAodGhpcy5zY3JvbGxhYmxlQm9keSkge1xuICAgICAgdGhpcy5oZWFkZXJCb3ggPSB0aGlzLnByaW1lbmdUcmVlVGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnAtdHJlZXRhYmxlLXNjcm9sbGFibGUtaGVhZGVyLWJveCdcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsICYmIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcpXG4gICAgICAgIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0UHggPSB0aGlzLnNjcm9sbGFibGVCb2R5LmNsaWVudEhlaWdodDtcblxuICAgICAgaWYgKHRoaXMuaGVhZGVyQm94KSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsYmFyV2lkdGggPSBEb21IYW5kbGVyLmNhbGN1bGF0ZVNjcm9sbGJhcldpZHRoKCk7XG5cbiAgICAgICAgdGhpcy5zY3JvbGxhYmxlQm9keS5hZGRFdmVudExpc3RlbmVyKCd0cmVlVGFibGVCb2R5UmVzaXplZCcsICgpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnNjcm9sbGFibGVCb2R5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVWaXJ0dWFsU2Nyb2xsSXRlbVNpemUoKSB7XG4gICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGwpIHJldHVybjtcbiAgICBjb25zdCB0ciA9IHRoaXMucHJpbWVuZ1RyZWVUYWJsZT8uZWw/Lm5hdGl2ZUVsZW1lbnRcbiAgICAgID8ucXVlcnlTZWxlY3RvcignLnAtdHJlZXRhYmxlLXRib2R5JylcbiAgICAgID8ucXVlcnlTZWxlY3RvcigndHInKTtcblxuICAgIGlmICh0cikge1xuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSB0ci5jbGllbnRIZWlnaHQgfHwgMDtcblxuICAgICAgaWYgKHRoaXMubWF4VmlydHVhbFNjcm9sbEl0ZW1IZWlnaHQgPiAwKSB7XG4gICAgICAgIHRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplID0gTWF0aC5taW4oXG4gICAgICAgICAgdGhpcy5tYXhWaXJ0dWFsU2Nyb2xsSXRlbUhlaWdodCxcbiAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtU2l6ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbCB8fCB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtU2l6ZSkgcmV0dXJuO1xuICAgIHRoaXMuX3JlY2FsY1ZpcnR1YWxIZWlnaHQoKTtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICBpZiAodGhpcy5jbGVhckdsb2JhbEZpbHRlck9uTG9hZGluZykgdGhpcy5jbGVhckdsb2JhbEZpbHRlcigpO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGFDaGFuZ2VzID0gY2hhbmdlcz8uZGF0YTtcbiAgICBpZiAoZGF0YUNoYW5nZXM/LnByZXZpb3VzVmFsdWUgIT09IGRhdGFDaGFuZ2VzPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbCAmJiB0aGlzLmRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnKVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX29uV2luZG93UmVzaXplLmJpbmQodGhpcykpO1xuICB9XG5cbiAgY2xlYXJHbG9iYWxGaWx0ZXIoKSB7XG4gICAgdGhpcy5nbG9iYWxGaWx0ZXJDb21wPy5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25XaW5kb3dSZXNpemUoKSB7XG4gICAgdGhpcy5kZWZTY3JvbGxIZWlnaHRQeCA9IHRoaXMuc2Nyb2xsYWJsZUJvZHkuY2xpZW50SGVpZ2h0O1xuICB9XG5cbiAgZ2V0IHN0eWxlQ2xhc3MoKSB7XG4gICAgY29uc3QgY2xhc3Nlc0xpc3QgPSBbXTtcbiAgICBzd2l0Y2ggKHRoaXMuc2l6ZSkge1xuICAgICAgY2FzZSAnc21hbGwnOlxuICAgICAgICBjbGFzc2VzTGlzdC5wdXNoKCdwLXRyZWV0YWJsZS1zbScpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xhcmdlJzpcbiAgICAgICAgY2xhc3Nlc0xpc3QucHVzaCgncC10cmVldGFibGUtbGcnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1Rvb2xiYXIpIHtcbiAgICAgIHN3aXRjaCAodGhpcy50b29sYmFyU2l6ZSkge1xuICAgICAgICBjYXNlICdzbWFsbCc6XG4gICAgICAgICAgY2xhc3Nlc0xpc3QucHVzaCgnY3BzLXRiYXItc21hbGwnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbm9ybWFsJzpcbiAgICAgICAgICBjbGFzc2VzTGlzdC5wdXNoKCdjcHMtdGJhci1ub3JtYWwnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaXBlZCkge1xuICAgICAgY2xhc3Nlc0xpc3QucHVzaCgncC10cmVldGFibGUtc3RyaXBlZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ib3JkZXJlZCkge1xuICAgICAgY2xhc3Nlc0xpc3QucHVzaCgncC10cmVldGFibGUtZ3JpZGxpbmVzJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Nyb2xsSGVpZ2h0ICYmICF0aGlzLmxvYWRpbmcgJiYgdGhpcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ2Nwcy10cmVldGFibGUtYm90dG9tLWJvcmRlcmVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzZXNMaXN0LmpvaW4oJyAnKTtcbiAgfVxuXG4gIG9uU29ydEZ1bmN0aW9uKGV2ZW50OiBTb3J0RXZlbnQpIHtcbiAgICB0aGlzLmN1c3RvbVNvcnRGdW5jdGlvbi5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlY2FsY1ZpcnR1YWxIZWlnaHQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsICYmIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpO1xuICAgICAgICBjb25zdCBpdGVtc0xlbiA9IHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5zZXJpYWxpemVkVmFsdWUubGVuZ3RoO1xuICAgICAgICBpZiAoaXRlbXNMZW4gPCAxKSB7XG4gICAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSB0aGlzLmVtcHR5Qm9keUhlaWdodFxuICAgICAgICAgICAgPyAoYGNhbGMoJHt0aGlzLmVtcHR5Qm9keUhlaWdodH0gKyAxcHgpYCBhcyBzdHJpbmcpXG4gICAgICAgICAgICA6IHRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplICsgMSArICdweCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY3VySGVpZ2h0ID0gdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgKiBpdGVtc0xlbiArIDI7XG4gICAgICAgICAgaWYgKHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcpIHtcbiAgICAgICAgICAgIGlmIChjdXJIZWlnaHQgPj0gdGhpcy5kZWZTY3JvbGxIZWlnaHRQeCkge1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9ICdmbGV4JztcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxhYmxlQm9keS5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPVxuICAgICAgICAgICAgTWF0aC5taW4odGhpcy5kZWZTY3JvbGxIZWlnaHRQeCwgY3VySGVpZ2h0KSArICdweCc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uRmlsdGVyR2xvYmFsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZmlsdGVyR2xvYmFsKHZhbHVlLCAnY29udGFpbnMnKTtcbiAgfVxuXG4gIG9uQ2xpY2tBZGRpdGlvbmFsQnRuT25TZWxlY3QoKSB7XG4gICAgdGhpcy5hZGRpdGlvbmFsQnRuT25TZWxlY3RDbGlja2VkLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgb25DbGlja0FjdGlvbkJ0bigpIHtcbiAgICB0aGlzLmFjdGlvbkJ0bkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbiAgb25SZWxvYWREYXRhKCkge1xuICAgIGlmICh0aGlzLmRhdGFSZWxvYWRCdG5EaXNhYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuZGF0YVJlbG9hZEJ0bkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbiAgb25Db2x1bW5zVG9nZ2xlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zVG9nZ2xlQnRuRGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLmNvbFRvZ2dsZU1lbnU/LnRvZ2dsZShldmVudCk7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkUm93cy5mb3JFYWNoKChyb3cpID0+IHRoaXMuX3JlbW92ZU5vZGVGcm9tRGF0YShyb3csIGZhbHNlKSk7XG4gICAgdGhpcy5kYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5yb3dzUmVtb3ZlZC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5fcmVjYWxjVmlydHVhbEhlaWdodCgpO1xuICB9XG5cbiAgY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcbiAgfVxuXG4gIG9uRWRpdFJvd0NsaWNrZWQobm9kZTogYW55KSB7XG4gICAgdGhpcy5lZGl0Um93QnRuQ2xpY2tlZC5lbWl0KG5vZGUpO1xuICB9XG5cbiAgb25SZW1vdmVSb3dDbGlja2VkKG5vZGU6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gdGhpcy5zZWxlY3RlZFJvd3MuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IG5vZGUpO1xuICAgIHRoaXMuX3JlbW92ZU5vZGVGcm9tRGF0YShub2RlKTtcbiAgICB0aGlzLnJvd3NSZW1vdmVkLmVtaXQoW25vZGVdKTtcbiAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gIH1cblxuICBwcml2YXRlIF9yZW1vdmVOb2RlRnJvbURhdGEobm9kZVRvUmVtb3ZlOiBhbnksIHNpbmdsZSA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBfZmluZFRvcFNvcnRPcmRlciA9IChfbm9kZTogYW55KTogYW55ID0+IHtcbiAgICAgIGlmICghX25vZGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAodHlwZW9mIF9ub2RlLl9kZWZhdWx0U29ydE9yZGVyID09PSAnbnVtYmVyJylcbiAgICAgICAgcmV0dXJuIF9ub2RlLl9kZWZhdWx0U29ydE9yZGVyO1xuICAgICAgcmV0dXJuIF9maW5kVG9wU29ydE9yZGVyKF9ub2RlLnBhcmVudCk7XG4gICAgfTtcblxuICAgIGNvbnN0IF9yZW1vdmVGcm9tQ2hpbGRyZW4gPSAoX25vZGU6IGFueSkgPT4ge1xuICAgICAgaWYgKCFfbm9kZT8uY2hpbGRyZW4pIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGlkeCA9IF9ub2RlLmNoaWxkcmVuLmluZGV4T2Yobm9kZVRvUmVtb3ZlKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBfbm9kZS5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgaWYgKF9ub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSBfbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgX25vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoX3JlbW92ZUZyb21DaGlsZHJlbihjaGlsZCkpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gbG9jYXRlIHRvcCBsZXZlbCBub2RlXG4gICAgY29uc3Qgc29ydE9yZGVyID0gX2ZpbmRUb3BTb3J0T3JkZXIobm9kZVRvUmVtb3ZlKTtcbiAgICBpZiAoc29ydE9yZGVyID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBjb25zdCBub2RlID0gdGhpcy5kYXRhLmZpbmQoKG4pID0+IG4uX2RlZmF1bHRTb3J0T3JkZXIgPT09IHNvcnRPcmRlcik7XG4gICAgaWYgKCFub2RlKSByZXR1cm47XG5cbiAgICAvLyByZW1vdmUgdGhlIG5vZGUgaXRzZWxmIG9yIHJlbW92ZSBpdHMgY2hpbGRcbiAgICBpZiAobm9kZVRvUmVtb3ZlID09PSBub2RlKSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IG5vZGVUb1JlbW92ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIF9yZW1vdmVGcm9tQ2hpbGRyZW4obm9kZSk7XG4gICAgICAgIGlmIChzaW5nbGUpIHRoaXMuZGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUFsbENvbHVtbnMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPVxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoIDwgdGhpcy5jb2x1bW5zLmxlbmd0aCA/IHRoaXMuY29sdW1ucyA6IFtdO1xuICAgIHRoaXMuY29sdW1uc1NlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZENvbHVtbnMpO1xuICB9XG5cbiAgaXNDb2x1bW5TZWxlY3RlZChjb2w6IGFueSkge1xuICAgIHJldHVybiAhIWZpbmQodGhpcy5zZWxlY3RlZENvbHVtbnMsIChpdGVtKSA9PiBpc0VxdWFsKGl0ZW0sIGNvbCkpO1xuICB9XG5cbiAgb25Sb3dzUGVyUGFnZUNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMucmVzZXRQYWdlT25Sb3dzQ2hhbmdlKSB7XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZmlyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZVBhZ2UodGhpcy5nZXRQYWdlKCkpO1xuICB9XG5cbiAgZ2V0UGFnZUNvdW50KCkge1xuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5wcmltZW5nVHJlZVRhYmxlLnRvdGFsUmVjb3JkcyAvIHRoaXMucm93cyk7XG4gIH1cblxuICBnZXRQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5wcmltZW5nVHJlZVRhYmxlLmZpcnN0IC8gdGhpcy5yb3dzKTtcbiAgfVxuXG4gIGNoYW5nZVBhZ2UocDogbnVtYmVyKSB7XG4gICAgY29uc3QgcGMgPSBNYXRoLmNlaWwodGhpcy5nZXRQYWdlQ291bnQoKSk7XG5cbiAgICBpZiAocCA+PSAwICYmIHAgPCBwYykge1xuICAgICAgdGhpcy5maXJzdCA9IHRoaXMucm93cyAqIHA7XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUub25QYWdlQ2hhbmdlKHtcbiAgICAgICAgZmlyc3Q6IHRoaXMuZmlyc3QsXG4gICAgICAgIHJvd3M6IHRoaXMucm93c1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpcnN0ID0gZXZlbnQuZmlyc3Q7XG4gICAgdGhpcy5yb3dzID0gZXZlbnQucm93cztcblxuICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgcGFnZTogdGhpcy5nZXRQYWdlKCksXG4gICAgICBmaXJzdDogdGhpcy5maXJzdCxcbiAgICAgIHJvd3M6IHRoaXMucm93cyxcbiAgICAgIHBhZ2VDb3VudDogTWF0aC5jZWlsKHRoaXMuZ2V0UGFnZUNvdW50KCkpXG4gICAgfTtcblxuICAgIHRoaXMucGFnZUNoYW5nZWQuZW1pdChzdGF0ZSk7XG4gIH1cblxuICBvbkxhenlMb2FkZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubGF6eUxvYWRlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uTm9kZUV4cGFuZGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vZGVFeHBhbmRlZC5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gIH1cblxuICBvbk5vZGVDb2xsYXBzZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubm9kZUNvbGxhcHNlZC5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gIH1cblxuICBvbk5vZGVTZWxlY3RlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5ub2RlU2VsZWN0ZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbk5vZGVVbnNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vZGVVbnNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25Tb3J0KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNvcnRlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uRmlsdGVyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpbHRlcmVkLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMuX3JlY2FsY1ZpcnR1YWxIZWlnaHQoKTtcbiAgfVxuXG4gIG9uU2VsZWN0Q29sdW1uKGNvbDogYW55KSB7XG4gICAgbGV0IHJlcyA9IFtdIGFzIGFueTtcbiAgICBpZiAodGhpcy5pc0NvbHVtblNlbGVjdGVkKGNvbCkpIHtcbiAgICAgIHJlcyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbHRlcigodjogYW55KSA9PiAhaXNFcXVhbCh2LCBjb2wpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKG8pID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNvbWUoKHY6IGFueSkgPT4gaXNFcXVhbCh2LCBvKSkgfHxcbiAgICAgICAgICBpc0VxdWFsKGNvbCwgbylcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVzLnB1c2gobyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHJlcztcbiAgICB0aGlzLmNvbHVtbnNTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRDb2x1bW5zKTtcbiAgfVxuXG4gIG9uU2VsZWN0aW9uQ2hhbmdlZChzZWxlY3Rpb246IGFueVtdKSB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLmVtaXQoc2VsZWN0aW9uKTtcbiAgfVxufVxuIiwiPHAtdHJlZVRhYmxlXG4gICNwcmltZW5nVHJlZVRhYmxlXG4gIHR0V2l0aFVuc29ydFxuICBbbmdDbGFzc109XCJ7ICdjcHMtdHJlZXRhYmxlLWxvYWRpbmcnOiBsb2FkaW5nIH1cIlxuICBbdmFsdWVdPVwiZGF0YVwiXG4gIFtzY3JvbGxhYmxlXT1cInNjcm9sbGFibGVcIlxuICBbc2Nyb2xsSGVpZ2h0XT1cInNjcm9sbEhlaWdodFwiXG4gIFt2aXJ0dWFsU2Nyb2xsXT1cInZpcnR1YWxTY3JvbGxcIlxuICBbdmlydHVhbFNjcm9sbEl0ZW1TaXplXT1cInZpcnR1YWxTY3JvbGxJdGVtU2l6ZVwiXG4gIFt2aXJ0dWFsU2Nyb2xsT3B0aW9uc109XCJ7XG4gICAgbnVtVG9sZXJhdGVkSXRlbXM6IG51bVRvbGVyYXRlZEl0ZW1zLFxuICAgIGF1dG9TaXplOiBmYWxzZVxuICB9XCJcbiAgW2NvbHVtbnNdPVwic2VsZWN0ZWRDb2x1bW5zXCJcbiAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gIFtyb3dIb3Zlcl09XCJyb3dIb3ZlclwiXG4gIFtsYXp5XT1cImxhenlcIlxuICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRSb3dzXCJcbiAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gIGNvbXBhcmVTZWxlY3Rpb25CeT1cImVxdWFsc1wiXG4gIFtsYXp5TG9hZE9uSW5pdF09XCJsYXp5TG9hZE9uSW5pdFwiXG4gIFtzdHlsZUNsYXNzXT1cInN0eWxlQ2xhc3NcIlxuICBbdGFibGVTdHlsZV09XCJ0YWJsZVN0eWxlXCJcbiAgW3RhYmxlU3R5bGVDbGFzc109XCJ0YWJsZVN0eWxlQ2xhc3NcIlxuICBbY3VzdG9tU29ydF09XCJjdXN0b21Tb3J0XCJcbiAgW3NvcnRNb2RlXT1cInNvcnRNb2RlXCJcbiAgW2dsb2JhbEZpbHRlckZpZWxkc109XCJnbG9iYWxGaWx0ZXJGaWVsZHNcIlxuICBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiXG4gIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXG4gIFthbHdheXNTaG93UGFnaW5hdG9yXT1cImFsd2F5c1Nob3dQYWdpbmF0b3JcIlxuICBbcm93c109XCJyb3dzXCJcbiAgW2ZpcnN0XT1cImZpcnN0XCJcbiAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICBbcmVzZXRQYWdlT25Tb3J0XT1cInJlc2V0UGFnZU9uU29ydFwiXG4gIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IC0ge2xhc3R9IG9mIHt0b3RhbFJlY29yZHN9XCJcbiAgKG9uUGFnZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gIChvblNvcnQpPVwib25Tb3J0KCRldmVudClcIlxuICAob25GaWx0ZXIpPVwib25GaWx0ZXIoJGV2ZW50KVwiXG4gIChvbkxhenlMb2FkKT1cIm9uTGF6eUxvYWRlZCgkZXZlbnQpXCJcbiAgKHNvcnRGdW5jdGlvbik9XCJvblNvcnRGdW5jdGlvbigkZXZlbnQpXCJcbiAgKG9uTm9kZUV4cGFuZCk9XCJvbk5vZGVFeHBhbmRlZCgkZXZlbnQpXCJcbiAgKG9uTm9kZUNvbGxhcHNlKT1cIm9uTm9kZUNvbGxhcHNlZCgkZXZlbnQpXCJcbiAgKG9uTm9kZVNlbGVjdCk9XCJvbk5vZGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgKG9uTm9kZVVuc2VsZWN0KT1cIm9uTm9kZVVuc2VsZWN0ZWQoJGV2ZW50KVwiPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiICpuZ0lmPVwiaGFzVG9vbGJhclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b29sYmFyVGVtcGxhdGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRvb2xiYXJUZW1wbGF0ZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1sZWZ0XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJ0b29sYmFySWNvblwiIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWljb25cIj5cbiAgICAgICAgICA8Y3BzLWljb24gW2ljb25dPVwidG9vbGJhckljb25cIiBbY29sb3JdPVwidG9vbGJhckljb25Db2xvclwiPjwvY3BzLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLXRpdGxlXCI+e3sgdG9vbGJhclRpdGxlIH19PC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93R2xvYmFsRmlsdGVyXCIgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItZ2xvYmFsLWZpbHRlclwiPlxuICAgICAgICAgIDxjcHMtaW5wdXRcbiAgICAgICAgICAgICNnbG9iYWxGaWx0ZXJDb21wXG4gICAgICAgICAgICBwcmVmaXhJY29uPVwic2VhcmNoXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnbG9iYWxGaWx0ZXJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2VkKT1cIm9uRmlsdGVyR2xvYmFsKCRldmVudClcIlxuICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCJcbiAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cInRvb2xiYXJTaXplID09PSAnc21hbGwnID8gJ3VuZGVybGluZWQnIDogJ291dGxpbmVkJ1wiXG4gICAgICAgICAgICBbaGlkZURldGFpbHNdPVwidHJ1ZVwiPlxuICAgICAgICAgIDwvY3BzLWlucHV0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1yaWdodFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG93UmVtb3ZlQnRuT25TZWxlY3QgJiYgc2VsZWN0ZWRSb3dzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWJ0bi1vbi1zZWxlY3RcIj5cbiAgICAgICAgICA8Y3BzLWJ1dHRvblxuICAgICAgICAgICAgbGFiZWw9XCJSZW1vdmVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlbW92ZUJ0bk9uU2VsZWN0RGlzYWJsZWRcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgICB0eXBlPVwiYm9yZGVybGVzc1wiXG4gICAgICAgICAgICBpY29uPVwicmVtb3ZlXCJcbiAgICAgICAgICAgIFtzaXplXT1cInRvb2xiYXJTaXplXCJcbiAgICAgICAgICAgIChjbGlja2VkKT1cInJlbW92ZVNlbGVjdGVkKClcIj5cbiAgICAgICAgICA8L2Nwcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG93QWRkaXRpb25hbEJ0bk9uU2VsZWN0ICYmIHNlbGVjdGVkUm93cy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1idG4tb24tc2VsZWN0XCI+XG4gICAgICAgICAgPGNwcy1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCJhZGRpdGlvbmFsQnRuT25TZWxlY3RUaXRsZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWRkaXRpb25hbEJ0bk9uU2VsZWN0RGlzYWJsZWRcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgICB0eXBlPVwiYm9yZGVybGVzc1wiXG4gICAgICAgICAgICBbc2l6ZV09XCJ0b29sYmFyU2l6ZVwiXG4gICAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNsaWNrQWRkaXRpb25hbEJ0bk9uU2VsZWN0KClcIj5cbiAgICAgICAgICA8L2Nwcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0FjdGlvbkJ0blwiIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWFjdGlvbi1idG5cIj5cbiAgICAgICAgICA8Y3BzLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cImFjdGlvbkJ0blRpdGxlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb25CdG5EaXNhYmxlZFwiXG4gICAgICAgICAgICBjb2xvcj1cInByZXBhcmVkXCJcbiAgICAgICAgICAgIHR5cGU9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICBbc2l6ZV09XCJ0b29sYmFyU2l6ZVwiXG4gICAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNsaWNrQWN0aW9uQnRuKClcIj5cbiAgICAgICAgICA8L2Nwcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG93Q29sdW1uc1RvZ2dsZUJ0biAmJiBjb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWNvbHRvZ2dsZS1idG5cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1kaXNhYmxlZCc6IGNvbHVtbnNUb2dnbGVCdG5EaXNhYmxlZCB9XCI+XG4gICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICBpY29uPVwiY29sdW1uc1wiXG4gICAgICAgICAgICBzaXplPVwibm9ybWFsXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJcbiAgICAgICAgICAgICAgY29sdW1uc1RvZ2dsZUJ0bkRpc2FibGVkID8gJ3RleHQtbGlnaHRlc3QnIDogJ3ByZXBhcmVkLWxpZ2h0ZW4xJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNvbHVtbnNUb2dnbGUoJGV2ZW50KVwiPjwvY3BzLWljb24+XG4gICAgICAgICAgPGNwcy1tZW51ICNjb2xUb2dnbGVNZW51IFt3aXRoQXJyb3ddPVwiZmFsc2VcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51XCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbSBzZWxlY3QtYWxsLW9wdGlvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFsbHNlbGVjdGVkXT1cInNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPT09IGNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsQ29sdW1ucygpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tY2hlY2tcIj4gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+U2hvdyBhbGwgY29sdW1uczwvc3BhblxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3RDb2x1bW4oY29sKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzQ29sdW1uU2VsZWN0ZWQoY29sKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWNoZWNrXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICBjb2xbY29sSGVhZGVyTmFtZV1cbiAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Nwcy1tZW51PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0RhdGFSZWxvYWRCdG5cIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLXJlbG9hZC1idG5cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1kaXNhYmxlZCc6IGRhdGFSZWxvYWRCdG5EaXNhYmxlZCB9XCI+XG4gICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICBpY29uPVwicmVmcmVzaFwiXG4gICAgICAgICAgICBzaXplPVwiMThcIlxuICAgICAgICAgICAgW2NvbG9yXT1cImRhdGFSZWxvYWRCdG5EaXNhYmxlZCA/ICd0ZXh0LWxpZ2h0JyA6ICdwcmVwYXJlZC1saWdodGVuMSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVsb2FkRGF0YSgpXCI+XG4gICAgICAgICAgPC9jcHMtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgKm5nSWY9XCJuZXN0ZWRIZWFkZXJUZW1wbGF0ZVwiIGxldC1jb2x1bW5zPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICBuZXN0ZWRIZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICRpbXBsaWNpdDogY29sdW1ucyxcbiAgICAgICAgfVxuICAgICAgXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiICpuZ0lmPVwiIW5lc3RlZEhlYWRlclRlbXBsYXRlXCIgbGV0LWNvbHVtbnM+XG4gICAgPHRyPlxuICAgICAgPCEtLSA8dGggc3R5bGU9XCJ3aWR0aDogM3JlbVwiICpuZ0lmPVwicmVvcmRlcmFibGVSb3dzXCI+PC90aD4gLS0+XG4gICAgICA8dGggc3R5bGU9XCJ3aWR0aDogNTVweFwiICpuZ0lmPVwic2VsZWN0YWJsZVwiPlxuICAgICAgICA8cC10cmVlVGFibGVIZWFkZXJDaGVja2JveD48L3AtdHJlZVRhYmxlSGVhZGVyQ2hlY2tib3g+XG4gICAgICA8L3RoPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlclRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogY29sdW1ucyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoZWFkZXJUZW1wbGF0ZSAmJiBjb2x1bW5zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNvcnRhYmxlXCI+XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIlxuICAgICAgICAgICAgW2Nwc1RUQ29sU29ydGFibGVdPVwiY29sW2NvbEZpZWxkTmFtZV1cIj5cbiAgICAgICAgICAgIHt7IGNvbFtjb2xIZWFkZXJOYW1lXSB9fVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNvcnRhYmxlXCI+XG4gICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxuICAgICAgICAgICAge3sgY29sW2NvbEhlYWRlck5hbWVdIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDx0aCBjbGFzcz1cImNwcy10cmVldGFibGUtcm93LW1lbnUtY2VsbFwiICpuZ0lmPVwic2hvd1Jvd01lbnVcIj48L3RoPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgcFRlbXBsYXRlPVwiYm9keVwiXG4gICAgbGV0LXJvd0RhdGE9XCJyb3dEYXRhXCJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICAgIGxldC1yb3dOb2RlXG4gICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgICA8dHJcbiAgICAgIFt0dFJvd109XCJyb3dOb2RlXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2Nwcy10cmVldGFibGUtcm93LXNlbGVjdGVkJzpcbiAgICAgICAgICBzZWxlY3RhYmxlICYmIHByaW1lbmdUcmVlVGFibGUuaXNTZWxlY3RlZChyb3dOb2RlLm5vZGUpXG4gICAgICB9XCI+XG4gICAgICA8IS0tIDx0ZCAqbmdJZj1cInJlb3JkZXJhYmxlUm93c1wiIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1kcmFnLWhhbmRsZS1jZWxsXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1kcmFnLWhhbmRsZVwiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT7imLA8L3NwYW4+XG4gICAgICA8L3RkPiAtLT5cbiAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiA1NXB4XCIgKm5nSWY9XCJzZWxlY3RhYmxlXCI+XG4gICAgICAgIDxwLXRyZWVUYWJsZUNoZWNrYm94IFt2YWx1ZV09XCJyb3dOb2RlXCI+PC9wLXRyZWVUYWJsZUNoZWNrYm94PlxuICAgICAgPC90ZD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJib2R5VGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBib2R5VGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogcm93Tm9kZSxcbiAgICAgICAgICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgICAgICByb3dEYXRhOiByb3dEYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWJvZHlUZW1wbGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPHAtdHJlZVRhYmxlVG9nZ2xlciBbcm93Tm9kZV09XCJyb3dOb2RlXCIgKm5nSWY9XCJpID09PSAwXCI+XG4gICAgICAgICAgICA8L3AtdHJlZVRhYmxlVG9nZ2xlcj5cbiAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sW2NvbEZpZWxkTmFtZV1dIH19XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDx0ZCAqbmdJZj1cInNob3dSb3dNZW51XCIgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXJvdy1tZW51LWNlbGxcIj5cbiAgICAgICAgPHRhYmxlLXJvdy1tZW51XG4gICAgICAgICAgKGVkaXRSb3dCdG5DbGlja2VkKT1cIm9uRWRpdFJvd0NsaWNrZWQocm93Tm9kZS5ub2RlKVwiXG4gICAgICAgICAgKHJlbW92ZVJvd0J0bkNsaWNrZWQpPVwib25SZW1vdmVSb3dDbGlja2VkKHJvd05vZGUubm9kZSlcIj5cbiAgICAgICAgPC90YWJsZS1yb3ctbWVudT5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxuICAgIDx0cj5cbiAgICAgIDx0ZFxuICAgICAgICBjb2xzcGFuPVwiMTAwXCJcbiAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWVtcHR5LW1lc3NhZ2UtdGRcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7IGhlaWdodDogZW1wdHlCb2R5SGVpZ2h0IH1cIj5cbiAgICAgICAge3sgZW1wdHlNZXNzYWdlIH19XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsb2FkaW5naWNvblwiPlxuICAgIDxjcHMtbG9hZGVyIFtmdWxsU2NyZWVuXT1cImZhbHNlXCIgb3BhY2l0eT1cIjBcIj48L2Nwcy1sb2FkZXI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JsZWZ0XCI+XG4gICAgPGRpdiBjbGFzcz1cImNwcy10YWJsZS1wYWdpbmF0b3ItaXRtcy1wZXItcGFnZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdGFibGUtcGFnaW5hdG9yLWl0ZW1zLXBlci1wYWdlLXRpdGxlXCJcbiAgICAgICAgPlJvd3MgcGVyIHBhZ2U6XG4gICAgICA8L3NwYW4+XG4gICAgICA8Y3BzLXNlbGVjdFxuICAgICAgICBbb3B0aW9uc109XCJyb3dPcHRpb25zXCJcbiAgICAgICAgW2hpZGVEZXRhaWxzXT1cInRydWVcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInJvd3NcIlxuICAgICAgICAodmFsdWVDaGFuZ2VkKT1cIm9uUm93c1BlclBhZ2VDaGFuZ2VkKClcIlxuICAgICAgICBbcmV0dXJuT2JqZWN0XT1cImZhbHNlXCJcbiAgICAgICAgb3B0aW9uc0NsYXNzPVwiY3BzLXBhZ2luYXRvci1wYWdlLW9wdGlvbnNcIj5cbiAgICAgIDwvY3BzLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9yZmlyc3RwYWdlbGlua2ljb25cIj5cbiAgICA8QW5nbGVEb3VibGVMZWZ0SWNvbiAvPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ycHJldmlvdXNwYWdlbGlua2ljb25cIj5cbiAgICA8QW5nbGVMZWZ0SWNvbiAvPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ybmV4dHBhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZVJpZ2h0SWNvbiAvPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ybGFzdHBhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZURvdWJsZVJpZ2h0SWNvbiAvPlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLXRyZWVUYWJsZT5cbiJdfQ==
|