@colijnit/corecomponents_v12 258.1.5 → 258.1.7
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/bundles/colijnit-corecomponents_v12.umd.js +200 -92
- package/bundles/colijnit-corecomponents_v12.umd.js.map +1 -1
- package/colijnit-corecomponents_v12.d.ts +17 -16
- package/colijnit-corecomponents_v12.metadata.json +1 -1
- package/esm2015/colijnit-corecomponents_v12.js +18 -17
- package/esm2015/lib/components/simple-grid/simple-grid.component.js +190 -201
- package/esm2015/lib/core/enum/core-components-icon.enum.js +3 -1
- package/esm2015/lib/core/model/core-components-icon-svg.js +3 -1
- package/esm2015/lib/service/excel-export.service.js +125 -0
- package/fesm2015/colijnit-corecomponents_v12.js +315 -200
- package/fesm2015/colijnit-corecomponents_v12.js.map +1 -1
- package/lib/components/simple-grid/simple-grid.component.d.ts +7 -6
- package/lib/components/simple-grid/style/_layout.scss +36 -8
- package/lib/core/enum/core-components-icon.enum.d.ts +2 -0
- package/lib/service/excel-export.service.d.ts +44 -0
- package/package.json +1 -1
|
@@ -3,15 +3,16 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Hos
|
|
|
3
3
|
import { FormMasterService } from '../../core/service/form-master.service';
|
|
4
4
|
import { BaseSimpleGridComponent } from './base-simple-grid.component';
|
|
5
5
|
import { ColumnAlign } from './simple-grid-column.directive';
|
|
6
|
-
import { CoreComponentsIcon } from
|
|
7
|
-
import { IconCacheService } from
|
|
8
|
-
import
|
|
6
|
+
import { CoreComponentsIcon } from '../../core/enum/core-components-icon.enum';
|
|
7
|
+
import { IconCacheService } from '../icon/icon-cache.service';
|
|
8
|
+
import { ExcelExportService } from '../../service/excel-export.service';
|
|
9
9
|
export class SimpleGridComponent extends BaseSimpleGridComponent {
|
|
10
|
-
constructor(icons, _changeDetection, _formMaster) {
|
|
10
|
+
constructor(icons, _changeDetection, _formMaster, excelExportService) {
|
|
11
11
|
super();
|
|
12
12
|
this.icons = icons;
|
|
13
13
|
this._changeDetection = _changeDetection;
|
|
14
14
|
this._formMaster = _formMaster;
|
|
15
|
+
this.excelExportService = excelExportService;
|
|
15
16
|
this.defaultTextAlign = ColumnAlign.Left;
|
|
16
17
|
this.showAdd = false;
|
|
17
18
|
this.showDelete = false;
|
|
@@ -19,6 +20,7 @@ export class SimpleGridComponent extends BaseSimpleGridComponent {
|
|
|
19
20
|
this.rightToolbar = false;
|
|
20
21
|
this.showGridSettings = false;
|
|
21
22
|
this.rowsPerPage = 1000;
|
|
23
|
+
this.showColumnSort = false;
|
|
22
24
|
this.editing = false;
|
|
23
25
|
this.isSettingsMenuOpen = false;
|
|
24
26
|
this.editRowIndex = -1;
|
|
@@ -90,13 +92,6 @@ export class SimpleGridComponent extends BaseSimpleGridComponent {
|
|
|
90
92
|
}
|
|
91
93
|
});
|
|
92
94
|
}
|
|
93
|
-
isSingleColumn(column) {
|
|
94
|
-
return column.singleColumn;
|
|
95
|
-
}
|
|
96
|
-
rowContainsSingleColumn(row, columns) {
|
|
97
|
-
const singleColumn = columns.find(column => this.isSingleColumn(column) && !!row[column.field]);
|
|
98
|
-
return !!singleColumn;
|
|
99
|
-
}
|
|
100
95
|
addNewRow() {
|
|
101
96
|
return __awaiter(this, void 0, void 0, function* () {
|
|
102
97
|
if (this.inlineEdit) {
|
|
@@ -239,74 +234,51 @@ export class SimpleGridComponent extends BaseSimpleGridComponent {
|
|
|
239
234
|
return obj !== col;
|
|
240
235
|
});
|
|
241
236
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
// return 1 * sign;
|
|
272
|
-
// }
|
|
273
|
-
// return 0;
|
|
274
|
-
// });
|
|
275
|
-
//
|
|
276
|
-
//
|
|
277
|
-
//
|
|
278
|
-
// this._detectChanges();
|
|
279
|
-
// // this.data.sort((a, b) => a[this.sortColumnValue] - b[this.sortColumnValue]);
|
|
280
|
-
// console.log(this.data);
|
|
281
|
-
// }
|
|
282
|
-
_sortData(tableData) {
|
|
283
|
-
return tableData.sort((a, b) => {
|
|
284
|
-
const sign = this.sortDirection === 'asc' ? 1 : -1;
|
|
285
|
-
console.log("a " + a);
|
|
286
|
-
console.log("b " + b);
|
|
287
|
-
console.log(a[this.sortColumnValue]);
|
|
288
|
-
console.log(b[this.sortColumnValue]);
|
|
289
|
-
console.log("sign " + sign);
|
|
290
|
-
if (a[this.sortColumnValue] < b[this.sortColumnValue]) {
|
|
291
|
-
return -1 * sign;
|
|
237
|
+
sortColumn(col, columnValue) {
|
|
238
|
+
col.isSelected = false;
|
|
239
|
+
if (this.sortColumnValue === columnValue) {
|
|
240
|
+
this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
this.sortColumnValue = columnValue;
|
|
244
|
+
this.sortDirection = 'asc';
|
|
245
|
+
}
|
|
246
|
+
const direction = this.sortDirection === 'asc' ? 1 : -1;
|
|
247
|
+
const sorted = [...this.data].sort((a, b) => {
|
|
248
|
+
let valA = a[columnValue];
|
|
249
|
+
let valB = b[columnValue];
|
|
250
|
+
if (valA == null && valB == null) {
|
|
251
|
+
return 0;
|
|
252
|
+
}
|
|
253
|
+
if (valA == null) {
|
|
254
|
+
return -1 * direction;
|
|
255
|
+
}
|
|
256
|
+
if (valB == null) {
|
|
257
|
+
return 1 * direction;
|
|
258
|
+
}
|
|
259
|
+
// Handle ISO date string
|
|
260
|
+
const isDateA = typeof valA === 'string' && /^\d{4}-\d{2}-\d{2}T/.test(valA);
|
|
261
|
+
const isDateB = typeof valB === 'string' && /^\d{4}-\d{2}-\d{2}T/.test(valB);
|
|
262
|
+
if (isDateA && isDateB) {
|
|
263
|
+
const timeA = new Date(valA).getTime();
|
|
264
|
+
const timeB = new Date(valB).getTime();
|
|
265
|
+
return (timeA - timeB) * direction;
|
|
292
266
|
}
|
|
293
|
-
|
|
294
|
-
|
|
267
|
+
// Fallback for numbers/strings
|
|
268
|
+
if (typeof valA === 'string' && typeof valB === 'string') {
|
|
269
|
+
return valA.localeCompare(valB) * direction;
|
|
295
270
|
}
|
|
296
|
-
return 0;
|
|
271
|
+
return (valA > valB ? 1 : valA < valB ? -1 : 0) * direction;
|
|
297
272
|
});
|
|
273
|
+
this.data = sorted;
|
|
274
|
+
this._detectChanges();
|
|
298
275
|
}
|
|
299
276
|
showAllColumns() {
|
|
300
277
|
this.isSettingsMenuOpen = false;
|
|
301
278
|
this.headerColumnsCopy = this.headerColumns;
|
|
302
279
|
}
|
|
303
280
|
exportToExcel() {
|
|
304
|
-
this.
|
|
305
|
-
let element = document.getElementById('simple-grid-table');
|
|
306
|
-
const ws = XLSX.utils.table_to_sheet(element);
|
|
307
|
-
const wb = XLSX.utils.book_new();
|
|
308
|
-
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
|
|
309
|
-
XLSX.writeFile(wb, 'ExcelSheet.xlsx');
|
|
281
|
+
this.excelExportService.exportTableToExcel('simple-grid-table', 'ExcelSheet', 'Sheet1');
|
|
310
282
|
}
|
|
311
283
|
prepareDataRow(row, index) {
|
|
312
284
|
this.isRowDisabled(row, index);
|
|
@@ -453,140 +425,155 @@ SimpleGridComponent.decorators = [
|
|
|
453
425
|
{ type: Component, args: [{
|
|
454
426
|
selector: 'co-simple-grid',
|
|
455
427
|
template: `
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
428
|
+
<co-grid-toolbar
|
|
429
|
+
*ngIf="showToolbar" [class.right]="rightToolbar"
|
|
430
|
+
[showEdit]="showEdit"
|
|
431
|
+
[showAdd]="showAdd"
|
|
432
|
+
[showDelete]="showDelete"
|
|
433
|
+
[deleteEnabled]="selectedRowIndex > -1"
|
|
434
|
+
(addClick)="addNewRow()"
|
|
435
|
+
(editClick)="editRow($event)"
|
|
436
|
+
(saveClick)="validateAndSave()"
|
|
437
|
+
(cancelClick)="cancelEditRow()"
|
|
438
|
+
(deleteClick)="removeRow()">
|
|
439
|
+
</co-grid-toolbar>
|
|
440
|
+
|
|
441
|
+
<table
|
|
442
|
+
id="simple-grid-table"
|
|
443
|
+
class="simple-grid-table"
|
|
444
|
+
[clickOutside]="editing"
|
|
445
|
+
(clickOutside)="handleClickOutsideRow()">
|
|
446
|
+
<colgroup>
|
|
447
|
+
<col
|
|
448
|
+
*ngFor="let column of headerColumnsCopy; let index = index"
|
|
449
|
+
[class.simple-grid-column-auto-fit]="column.autoFit"
|
|
450
|
+
[style.width.px]="column.width"
|
|
451
|
+
[style.min-width.px]="MIN_COLUMN_WIDTH">
|
|
452
|
+
</colgroup>
|
|
453
|
+
<thead>
|
|
454
|
+
<tr>
|
|
455
|
+
<th
|
|
456
|
+
scope="col"
|
|
457
|
+
#headerCell
|
|
458
|
+
class="simple-grid-column-header"
|
|
459
|
+
*ngFor="let column of headerColumnsCopy; let index = index">
|
|
460
|
+
<div
|
|
461
|
+
class="simple-grid-column-header-wrapper"
|
|
462
|
+
[class.resizable]="resizable"
|
|
463
|
+
[class.selected]="column.isSelected"
|
|
464
|
+
[ngClass]="column.textAlign ? column.textAlign : defaultTextAlign">
|
|
465
|
+
<ng-container *ngIf="column.headerTemplate; else noHeaderTemplate">
|
|
466
|
+
<ng-container [ngTemplateOutlet]="column.headerTemplate"></ng-container>
|
|
467
|
+
</ng-container>
|
|
468
|
+
<ng-template #noHeaderTemplate>
|
|
469
|
+
<div
|
|
470
|
+
class="simple-grid-column-header-label"
|
|
471
|
+
[ngClass]="column.textAlign ? column.textAlign : defaultTextAlign"
|
|
472
|
+
[class.with-menu]="showGridSettings"
|
|
473
|
+
[class.with-sort]="showColumnSort"
|
|
474
|
+
[textContent]="column.headerText || ' '"
|
|
475
|
+
(click)="showColumnSort ? sortColumn(column, column.field) : toggleColumnMenu(column)">
|
|
476
|
+
</div>
|
|
500
477
|
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
478
|
+
<div class="sort-column" *ngIf="showColumnSort">
|
|
479
|
+
<co-button
|
|
480
|
+
(click)="sortColumn(column, column?.field)"
|
|
481
|
+
[iconData]="icons.getIcon(Icons.ArrowUpArrowDown)">
|
|
482
|
+
</co-button>
|
|
483
|
+
</div>
|
|
484
|
+
|
|
485
|
+
<div class="column-menu" *ngIf="column.isSelected">
|
|
486
|
+
<h3 [textContent]="'COLUMN_OPTIONS' | coreLocalize"></h3>
|
|
487
|
+
<ul>
|
|
488
|
+
<li (click)="hideColumn(column)">Hide Column</li>
|
|
489
|
+
<li (click)="sortColumn(column, column.field)">Sort Column</li>
|
|
490
|
+
</ul>
|
|
491
|
+
</div>
|
|
492
|
+
</ng-template>
|
|
493
|
+
<div
|
|
494
|
+
*ngIf="resizable && column.resizable"
|
|
495
|
+
class="simple-grid-column-sizer"
|
|
496
|
+
(mousedown)="handleSizerMouseDown($event, column)">
|
|
497
|
+
</div>
|
|
498
|
+
</div>
|
|
499
|
+
</th>
|
|
500
|
+
</tr>
|
|
501
|
+
|
|
502
|
+
<div *ngIf="showGridSettings" class="grid-settings">
|
|
503
|
+
<co-button
|
|
504
|
+
[class.selected]="isSettingsMenuOpen"
|
|
505
|
+
[iconData]="icons.getIcon(Icons.CogWheels)"
|
|
506
|
+
(click)="toggleSettingsMenu()">
|
|
507
|
+
</co-button>
|
|
508
|
+
|
|
509
|
+
<div class="settings-menu" *ngIf="isSettingsMenuOpen">
|
|
510
|
+
<h3 [textContent]="'GRID_OPTIONS' | coreLocalize"></h3>
|
|
511
|
+
<ul>
|
|
512
|
+
<li (click)="exportToExcel()">Export to Excel</li>
|
|
513
|
+
<li *ngIf="headerColumnsCopy.length !== headerColumns.length" (click)="showAllColumns()">
|
|
514
|
+
Show All Columns
|
|
515
|
+
</li>
|
|
516
|
+
</ul>
|
|
507
517
|
</div>
|
|
508
|
-
</ng-template>
|
|
509
|
-
<div *ngIf="resizable && column.resizable" class="simple-grid-column-sizer"
|
|
510
|
-
(mousedown)="handleSizerMouseDown($event, column)"
|
|
511
|
-
></div>
|
|
512
518
|
</div>
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
519
|
+
</thead>
|
|
520
|
+
<tbody
|
|
521
|
+
#dropList cdkDropList cdkDropListOrientation="vertical"
|
|
522
|
+
class="simple-grid-drag-drop-list"
|
|
523
|
+
[cdkDropListDisabled]="!dragDropEnabled || editing"
|
|
524
|
+
[cdkDropListData]="data"
|
|
525
|
+
[cdkDropListEnterPredicate]="handleCanDragDrop"
|
|
526
|
+
(cdkDropListDropped)="handleDrop($event)">
|
|
527
|
+
<co-form class="simple-grid-row-form">
|
|
528
|
+
<tr
|
|
529
|
+
class="simple-grid-row"
|
|
530
|
+
[class.selected]="rowIndex === selectedRowIndex && !editing" observeVisibility
|
|
531
|
+
[class.disabled]="getIsRowDisabled(rowIndex)"
|
|
532
|
+
[class.editing]="rowIndex === editRowIndex"
|
|
533
|
+
*ngFor="let row of (!!rowsPerPage ? (data | paginate: {itemsPerPage: rowsPerPage, currentPage: currentPage}) : data); last as last; let rowIndex = index"
|
|
534
|
+
cdkDrag
|
|
535
|
+
(click)="handleClickRow($event, rowIndex, row)" (dblclick)="handleDblClickRow($event, rowIndex, row)"
|
|
536
|
+
(visibilityChange)="rowVisible.next(row)">
|
|
537
|
+
<ng-container *ngIf="isSingleColumnRow(row)">
|
|
538
|
+
<td class="simple-grid-single-column-cell" [attr.colspan]="headerColumnsCopy.length">
|
|
539
|
+
<co-simple-grid-cell
|
|
540
|
+
[column]="columns[singleColumnIndex(row)]"
|
|
541
|
+
[row]="row"
|
|
542
|
+
[editMode]="false">
|
|
543
|
+
</co-simple-grid-cell>
|
|
544
|
+
</td>
|
|
545
|
+
</ng-container>
|
|
546
|
+
<ng-container *ngIf="!isSingleColumnRow(row)">
|
|
547
|
+
<ng-container *ngFor="let column of headerColumnsCopy; let columnIndex = index">
|
|
548
|
+
<td class="simple-grid-column-cell" *ngIf="columnIndex !== singleColumnIndex(row)">
|
|
549
|
+
<co-simple-grid-cell
|
|
550
|
+
[column]="column"
|
|
551
|
+
[row]="row"
|
|
552
|
+
[editMode]="inlineEdit && editing && rowIndex === editRowIndex"
|
|
553
|
+
[fieldEditMode]="editCellIndex === columnIndex && rowIndex === editRowIndex"
|
|
554
|
+
(cellClick)="handleCellClick($event, row, rowIndex, columnIndex)">
|
|
555
|
+
</co-simple-grid-cell>
|
|
556
|
+
<div *ngIf="column.resizable" class="simple-grid-column-sizer-placeholder"></div>
|
|
557
|
+
</td>
|
|
558
|
+
</ng-container>
|
|
559
|
+
</ng-container>
|
|
560
|
+
</tr>
|
|
561
|
+
</co-form>
|
|
562
|
+
</tbody>
|
|
563
|
+
</table>
|
|
520
564
|
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
</tr>
|
|
532
|
-
</thead>
|
|
533
|
-
<tbody #dropList cdkDropList cdkDropListOrientation="vertical"
|
|
534
|
-
class="simple-grid-drag-drop-list"
|
|
535
|
-
[cdkDropListDisabled]="!dragDropEnabled || editing"
|
|
536
|
-
[cdkDropListData]="data"
|
|
537
|
-
[cdkDropListEnterPredicate]="handleCanDragDrop"
|
|
538
|
-
(cdkDropListDropped)="handleDrop($event)">
|
|
539
|
-
<tr
|
|
540
|
-
class="simple-grid-row"
|
|
541
|
-
[class.selected]="rowIndex === selectedRowIndex && !editing" observeVisibility
|
|
542
|
-
[class.disabled]="getIsRowDisabled(rowIndex)"
|
|
543
|
-
[class.editing]="rowIndex === editRowIndex"
|
|
544
|
-
*ngFor="let row of (!!rowsPerPage ? (data | paginate: {itemsPerPage: rowsPerPage, currentPage: currentPage}) : data); last as last; let rowIndex = index"
|
|
545
|
-
cdkDrag
|
|
546
|
-
(click)="handleClickRow($event, rowIndex, row)" (dblclick)="handleDblClickRow($event, rowIndex, row)"
|
|
547
|
-
(visibilityChange)="rowVisible.next(row)">
|
|
548
|
-
<co-form class="simple-grid-row-form">
|
|
549
|
-
<ng-container *ngIf="isSingleColumnRow(row)">
|
|
550
|
-
<td class="simple-grid-single-column-cell" [attr.colspan]="headerColumnsCopy.length">
|
|
551
|
-
<co-simple-grid-cell
|
|
552
|
-
[column]="columns[singleColumnIndex(row)]"
|
|
553
|
-
[row]="row"
|
|
554
|
-
[editMode]="false"
|
|
555
|
-
></co-simple-grid-cell>
|
|
556
|
-
</td>
|
|
557
|
-
</ng-container>
|
|
558
|
-
<ng-container *ngIf="!isSingleColumnRow(row)">
|
|
559
|
-
<ng-container *ngFor="let column of headerColumnsCopy; let columnIndex = index">
|
|
560
|
-
<td class="simple-grid-column-cell" *ngIf="columnIndex !== singleColumnIndex(row)">
|
|
561
|
-
<co-simple-grid-cell
|
|
562
|
-
[column]="column"
|
|
563
|
-
[row]="row"
|
|
564
|
-
[editMode]="inlineEdit && editing && rowIndex === editRowIndex"
|
|
565
|
-
[fieldEditMode]="editCellIndex === columnIndex && rowIndex === editRowIndex"
|
|
566
|
-
(cellClick)="handleCellClick($event, row, rowIndex, columnIndex)"
|
|
567
|
-
></co-simple-grid-cell>
|
|
568
|
-
<div *ngIf="column.resizable" class="simple-grid-column-sizer-placeholder"></div>
|
|
569
|
-
</td>
|
|
570
|
-
</ng-container>
|
|
571
|
-
</ng-container>
|
|
572
|
-
<td *ngIf="showGridSettings"></td>
|
|
573
|
-
</co-form>
|
|
574
|
-
</tr>
|
|
575
|
-
</tbody>
|
|
576
|
-
</table>
|
|
577
|
-
<co-pagination-bar *ngIf="data?.length > rowsPerPage" class="pagination-bar"
|
|
578
|
-
[itemsPerPage]="rowsPerPage"
|
|
579
|
-
[currentPage]="currentPage"
|
|
580
|
-
[totalItems]="data.length"
|
|
581
|
-
[autoHide]="true"
|
|
582
|
-
(previousClick)="goToPreviousPage()"
|
|
583
|
-
(nextClick)="goToNextPage()"
|
|
584
|
-
(pageClick)="setCurrentPage($event)"
|
|
585
|
-
></co-pagination-bar>
|
|
565
|
+
<co-pagination-bar
|
|
566
|
+
*ngIf="data?.length > rowsPerPage" class="pagination-bar"
|
|
567
|
+
[itemsPerPage]="rowsPerPage"
|
|
568
|
+
[currentPage]="currentPage"
|
|
569
|
+
[totalItems]="data.length"
|
|
570
|
+
[autoHide]="true"
|
|
571
|
+
(previousClick)="goToPreviousPage()"
|
|
572
|
+
(nextClick)="goToNextPage()"
|
|
573
|
+
(pageClick)="setCurrentPage($event)">
|
|
574
|
+
</co-pagination-bar>
|
|
586
575
|
`,
|
|
587
|
-
providers: [
|
|
588
|
-
FormMasterService
|
|
589
|
-
],
|
|
576
|
+
providers: [FormMasterService],
|
|
590
577
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
591
578
|
encapsulation: ViewEncapsulation.None
|
|
592
579
|
},] }
|
|
@@ -594,7 +581,8 @@ SimpleGridComponent.decorators = [
|
|
|
594
581
|
SimpleGridComponent.ctorParameters = () => [
|
|
595
582
|
{ type: IconCacheService },
|
|
596
583
|
{ type: ChangeDetectorRef },
|
|
597
|
-
{ type: FormMasterService }
|
|
584
|
+
{ type: FormMasterService },
|
|
585
|
+
{ type: ExcelExportService }
|
|
598
586
|
];
|
|
599
587
|
SimpleGridComponent.propDecorators = {
|
|
600
588
|
headerCells: [{ type: ViewChildren, args: ['headerCell',] }],
|
|
@@ -605,8 +593,9 @@ SimpleGridComponent.propDecorators = {
|
|
|
605
593
|
showGridSettings: [{ type: Input }],
|
|
606
594
|
rowsPerPage: [{ type: Input }],
|
|
607
595
|
rowDisabledFn: [{ type: Input }],
|
|
596
|
+
showColumnSort: [{ type: Input }],
|
|
608
597
|
canRowBeEdittedFn: [{ type: Input }],
|
|
609
598
|
showClass: [{ type: HostBinding, args: ['class.co-simple-grid',] }],
|
|
610
599
|
handleKeyDown: [{ type: HostListener, args: ['keydown', ['$event'],] }]
|
|
611
600
|
};
|
|
612
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NpbXBsZS1ncmlkL3NpbXBsZS1ncmlkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLFlBQVksRUFDWixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDekUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLFdBQVcsRUFBNEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQThJN0IsTUFBTSxPQUFPLG1CQUFvQixTQUFRLHVCQUF1QjtJQThFOUQsWUFDUyxLQUF1QixFQUN0QixnQkFBbUMsRUFDbkMsV0FBOEI7UUFFdEMsS0FBSyxFQUFFLENBQUM7UUFKRCxVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUN0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBQ25DLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtRQWhGeEIscUJBQWdCLEdBQWdCLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFVMUQsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUd6QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBRzVCLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBR2hDLGlCQUFZLEdBQVks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UUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0Zvcm1NYXN0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2UvZm9ybS1tYXN0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7QmFzZVNpbXBsZUdyaWRDb21wb25lbnR9IGZyb20gJy4vYmFzZS1zaW1wbGUtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvbHVtbkFsaWduLCBTaW1wbGVHcmlkQ29sdW1uRGlyZWN0aXZlfSBmcm9tICcuL3NpbXBsZS1ncmlkLWNvbHVtbi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQge0NvcmVDb21wb25lbnRzSWNvbn0gZnJvbSBcIi4uLy4uL2NvcmUvZW51bS9jb3JlLWNvbXBvbmVudHMtaWNvbi5lbnVtXCI7XHJcbmltcG9ydCB7SWNvbkNhY2hlU2VydmljZX0gZnJvbSBcIi4uL2ljb24vaWNvbi1jYWNoZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCAqIGFzIFhMU1ggZnJvbSAneGxzeCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvLXNpbXBsZS1ncmlkJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGNvLWdyaWQtdG9vbGJhciAqbmdJZj1cInNob3dUb29sYmFyXCIgW2NsYXNzLnJpZ2h0XT1cInJpZ2h0VG9vbGJhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtzaG93RWRpdF09XCJzaG93RWRpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtzaG93QWRkXT1cInNob3dBZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc2hvd0RlbGV0ZV09XCJzaG93RGVsZXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2RlbGV0ZUVuYWJsZWRdPVwic2VsZWN0ZWRSb3dJbmRleCA+IC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGFkZENsaWNrKT1cImFkZE5ld1JvdygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGVkaXRDbGljayk9XCJlZGl0Um93KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoc2F2ZUNsaWNrKT1cInZhbGlkYXRlQW5kU2F2ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNhbmNlbENsaWNrKT1cImNhbmNlbEVkaXRSb3coKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChkZWxldGVDbGljayk9XCJyZW1vdmVSb3coKVwiXHJcbiAgICA+PC9jby1ncmlkLXRvb2xiYXI+XHJcbiAgICA8dGFibGVcclxuICAgICAgaWQ9XCJzaW1wbGUtZ3JpZC10YWJsZVwiXHJcbiAgICAgIGNsYXNzPVwic2ltcGxlLWdyaWQtdGFibGVcIlxyXG4gICAgICBbY2xpY2tPdXRzaWRlXT1cImVkaXRpbmdcIlxyXG4gICAgICAoY2xpY2tPdXRzaWRlKT1cImhhbmRsZUNsaWNrT3V0c2lkZVJvdygpXCI+XHJcbiAgICAgIDxjb2xncm91cD5cclxuICAgICAgICA8Y29sICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgaGVhZGVyQ29sdW1uc0NvcHk7IGxldCBpbmRleCA9IGluZGV4XCJcclxuICAgICAgICAgICAgIFtjbGFzcy5zaW1wbGUtZ3JpZC1jb2x1bW4tYXV0by1maXRdPVwiY29sdW1uLmF1dG9GaXRcIlxyXG4gICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbHVtbi53aWR0aFwiXHJcbiAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cIk1JTl9DT0xVTU5fV0lEVEhcIj5cclxuICAgICAgPC9jb2xncm91cD5cclxuICAgICAgPHRoZWFkPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRoXHJcbiAgICAgICAgICBzY29wZT1cImNvbFwiXHJcbiAgICAgICAgICAjaGVhZGVyQ2VsbFxyXG4gICAgICAgICAgY2xhc3M9XCJzaW1wbGUtZ3JpZC1jb2x1bW4taGVhZGVyXCJcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgaGVhZGVyQ29sdW1uc0NvcHk7IGxldCBpbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwic2ltcGxlLWdyaWQtY29sdW1uLWhlYWRlci13cmFwcGVyXCJcclxuICAgICAgICAgICAgW2NsYXNzLnJlc2l6YWJsZV09XCJyZXNpemFibGVcIlxyXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiY29sdW1uLmlzU2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4udGV4dEFsaWduID8gY29sdW1uLnRleHRBbGlnbiA6IGRlZmF1bHRUZXh0QWxpZ25cIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZTsgZWxzZSBub0hlYWRlclRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9IZWFkZXJUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2ltcGxlLWdyaWQtY29sdW1uLWhlYWRlci1sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4udGV4dEFsaWduID8gY29sdW1uLnRleHRBbGlnbiA6IGRlZmF1bHRUZXh0QWxpZ25cIlxyXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzLndpdGgtbWVudV09XCJzaG93R3JpZFNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJjb2x1bW4uaGVhZGVyVGV4dCB8fCAnJm5ic3A7J1wiXHJcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29sdW1uTWVudShjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tbWVudVwiICpuZ0lmPVwiY29sdW1uLmlzU2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgICAgIDxoMyBbdGV4dENvbnRlbnRdPVwiJ0NPTFVNTl9PUFRJT05TJyB8IGNvcmVMb2NhbGl6ZVwiPjwvaDM+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwiaGlkZUNvbHVtbihjb2x1bW4pXCI+SGlkZSBDb2x1bW48L2xpPlxyXG48IS0tICAgICAgICAgICAgICAgICAgPGxpIChjbGljayk9XCJzb3J0Q29sdW1uKGNvbHVtbiwgY29sdW1uLmZpZWxkKVwiPlNvcnQgQ29sdW1uPC9saT4tLT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyZXNpemFibGUgJiYgY29sdW1uLnJlc2l6YWJsZVwiIGNsYXNzPVwic2ltcGxlLWdyaWQtY29sdW1uLXNpemVyXCJcclxuICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cImhhbmRsZVNpemVyTW91c2VEb3duKCRldmVudCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRoICpuZ0lmPVwic2hvd0dyaWRTZXR0aW5nc1wiIGNsYXNzPVwic2ltcGxlLWdyaWQtY29sdW1uLWhlYWRlciBncmlkLXNldHRpbmdzXCI+XHJcbiAgICAgICAgICA8Y28tYnV0dG9uXHJcbiAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc1NldHRpbmdzTWVudU9wZW5cIlxyXG4gICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbnMuZ2V0SWNvbihJY29ucy5Db2dXaGVlbHMpXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNldHRpbmdzTWVudSgpXCI+XHJcbiAgICAgICAgICA8L2NvLWJ1dHRvbj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2V0dGluZ3MtbWVudVwiICpuZ0lmPVwiaXNTZXR0aW5nc01lbnVPcGVuXCI+XHJcbiAgICAgICAgICAgIDxoMyBbdGV4dENvbnRlbnRdPVwiJ0dSSURfT1BUSU9OUycgfCBjb3JlTG9jYWxpemVcIj48L2gzPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgPGxpIChjbGljayk9XCJleHBvcnRUb0V4Y2VsKClcIj5FeHBvcnQgdG8gRXhjZWw8L2xpPlxyXG4gICAgICAgICAgICAgIDxsaSAqbmdJZj1cImhlYWRlckNvbHVtbnNDb3B5Lmxlbmd0aCAhPT0gaGVhZGVyQ29sdW1ucy5sZW5ndGhcIiAoY2xpY2spPVwic2hvd0FsbENvbHVtbnMoKVwiPlNob3cgQWxsXHJcbiAgICAgICAgICAgICAgICBDb2x1bW5zXHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGhlYWQ+XHJcbiAgICAgIDx0Ym9keSAjZHJvcExpc3QgY2RrRHJvcExpc3QgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cInZlcnRpY2FsXCJcclxuICAgICAgICAgICAgIGNsYXNzPVwic2ltcGxlLWdyaWQtZHJhZy1kcm9wLWxpc3RcIlxyXG4gICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiIWRyYWdEcm9wRW5hYmxlZCB8fCBlZGl0aW5nXCJcclxuICAgICAgICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwiZGF0YVwiXHJcbiAgICAgICAgICAgICBbY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZV09XCJoYW5kbGVDYW5EcmFnRHJvcFwiXHJcbiAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImhhbmRsZURyb3AoJGV2ZW50KVwiPlxyXG4gICAgICA8dHJcclxuICAgICAgICBjbGFzcz1cInNpbXBsZS1ncmlkLXJvd1wiXHJcbiAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cInJvd0luZGV4ID09PSBzZWxlY3RlZFJvd0luZGV4ICYmICFlZGl0aW5nXCIgb2JzZXJ2ZVZpc2liaWxpdHlcclxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZ2V0SXNSb3dEaXNhYmxlZChyb3dJbmRleClcIlxyXG4gICAgICAgIFtjbGFzcy5lZGl0aW5nXT1cInJvd0luZGV4ID09PSBlZGl0Um93SW5kZXhcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2YgKCEhcm93c1BlclBhZ2UgPyAoZGF0YSB8IHBhZ2luYXRlOiB7aXRlbXNQZXJQYWdlOiByb3dzUGVyUGFnZSwgY3VycmVudFBhZ2U6IGN1cnJlbnRQYWdlfSkgOiBkYXRhKTsgbGFzdCBhcyBsYXN0OyBsZXQgcm93SW5kZXggPSBpbmRleFwiXHJcbiAgICAgICAgY2RrRHJhZ1xyXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVDbGlja1JvdygkZXZlbnQsIHJvd0luZGV4LCByb3cpXCIgKGRibGNsaWNrKT1cImhhbmRsZURibENsaWNrUm93KCRldmVudCwgcm93SW5kZXgsIHJvdylcIlxyXG4gICAgICAgICh2aXNpYmlsaXR5Q2hhbmdlKT1cInJvd1Zpc2libGUubmV4dChyb3cpXCI+XHJcbiAgICAgICAgPGNvLWZvcm0gY2xhc3M9XCJzaW1wbGUtZ3JpZC1yb3ctZm9ybVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2luZ2xlQ29sdW1uUm93KHJvdylcIj5cclxuICAgICAgICAgICAgPHRkIGNsYXNzPVwic2ltcGxlLWdyaWQtc2luZ2xlLWNvbHVtbi1jZWxsXCIgW2F0dHIuY29sc3Bhbl09XCJoZWFkZXJDb2x1bW5zQ29weS5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY2VsbFxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5zW3NpbmdsZUNvbHVtbkluZGV4KHJvdyldXCJcclxuICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcclxuICAgICAgICAgICAgICAgIFtlZGl0TW9kZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgPjwvY28tc2ltcGxlLWdyaWQtY2VsbD5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1NpbmdsZUNvbHVtblJvdyhyb3cpXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBoZWFkZXJDb2x1bW5zQ29weTsgbGV0IGNvbHVtbkluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzaW1wbGUtZ3JpZC1jb2x1bW4tY2VsbFwiICpuZ0lmPVwiY29sdW1uSW5kZXggIT09IHNpbmdsZUNvbHVtbkluZGV4KHJvdylcIj5cclxuICAgICAgICAgICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jZWxsXHJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICBbZWRpdE1vZGVdPVwiaW5saW5lRWRpdCAmJiBlZGl0aW5nICYmIHJvd0luZGV4ID09PSBlZGl0Um93SW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICBbZmllbGRFZGl0TW9kZV09XCJlZGl0Q2VsbEluZGV4ID09PSBjb2x1bW5JbmRleCAmJiByb3dJbmRleCA9PT0gZWRpdFJvd0luZGV4XCJcclxuICAgICAgICAgICAgICAgICAgKGNlbGxDbGljayk9XCJoYW5kbGVDZWxsQ2xpY2soJGV2ZW50LCByb3csIHJvd0luZGV4LCBjb2x1bW5JbmRleClcIlxyXG4gICAgICAgICAgICAgICAgPjwvY28tc2ltcGxlLWdyaWQtY2VsbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4ucmVzaXphYmxlXCIgY2xhc3M9XCJzaW1wbGUtZ3JpZC1jb2x1bW4tc2l6ZXItcGxhY2Vob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPHRkICpuZ0lmPVwic2hvd0dyaWRTZXR0aW5nc1wiPjwvdGQ+XHJcbiAgICAgICAgPC9jby1mb3JtPlxyXG4gICAgICA8L3RyPlxyXG4gICAgICA8L3Rib2R5PlxyXG4gICAgPC90YWJsZT5cclxuICAgIDxjby1wYWdpbmF0aW9uLWJhciAqbmdJZj1cImRhdGE/Lmxlbmd0aCA+IHJvd3NQZXJQYWdlXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWJhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJyb3dzUGVyUGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbdG90YWxJdGVtc109XCJkYXRhLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9IaWRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChwcmV2aW91c0NsaWNrKT1cImdvVG9QcmV2aW91c1BhZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKG5leHRDbGljayk9XCJnb1RvTmV4dFBhZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VDbGljayk9XCJzZXRDdXJyZW50UGFnZSgkZXZlbnQpXCJcclxuICAgID48L2NvLXBhZ2luYXRpb24tYmFyPlxyXG4gIGAsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBGb3JtTWFzdGVyU2VydmljZVxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNpbXBsZUdyaWRDb21wb25lbnQgZXh0ZW5kcyBCYXNlU2ltcGxlR3JpZENvbXBvbmVudCB7XHJcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRUZXh0QWxpZ246IENvbHVtbkFsaWduID0gQ29sdW1uQWxpZ24uTGVmdDtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignaGVhZGVyQ2VsbCcpIHNldCBoZWFkZXJDZWxscyhjZWxscykge1xyXG4gICAgY29uc3QgaGVhZGVyRWxlbWVudHMgPSBjZWxscy50b0FycmF5KCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlckVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuY29sdW1uc1tpXS5lbGVtZW50UmVmID0gaGVhZGVyRWxlbWVudHNbaV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzaG93QWRkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNob3dEZWxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZWRpdE9uQ2VsbENsaWNrOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcmlnaHRUb29sYmFyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNob3dHcmlkU2V0dGluZ3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcm93c1BlclBhZ2U6IG51bWJlciA9IDEwMDA7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJvd0Rpc2FibGVkRm46IEZ1bmN0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBQcm9taXNlIGZ1bmN0aW9uLCBpZiBwcm92aWRlZCBzaG91bGQgcmV0dXJuIGJvb2xlYW5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjYW5Sb3dCZUVkaXR0ZWRGbjogRnVuY3Rpb247XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuY28tc2ltcGxlLWdyaWQnKVxyXG4gIHB1YmxpYyBzaG93Q2xhc3MoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaW5saW5lRWRpdCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgdGhpcy5fbmV4dEF2YWlsYWJsZUNlbGxUb0VkaXQoIWV2ZW50LnNoaWZ0S2V5LCB0aGlzLmVkaXRDZWxsSW5kZXgpXHJcbiAgICAgICAgLnRoZW4oKGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIHRoaXMuZWRpdENlbGxJbmRleCA9IGluZGV4O1xyXG4gICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChldmVudC5jb2RlID09PSAnRXNjYXBlJykge1xyXG4gICAgICB0aGlzLmNhbmNlbEVkaXRSb3coKTtcclxuICAgIH1cclxuICAgIGlmIChldmVudC5jb2RlID09PSAnRW50ZXInKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGVBbmRTYXZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc1NldHRpbmdzTWVudU9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZWRpdFJvd0luZGV4OiBudW1iZXIgPSAtMTtcclxuICBwdWJsaWMgZWRpdENlbGxJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgcHVibGljIHNlbGVjdGVkUm93SW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIHB1YmxpYyByb3dUb0VkaXQ6IGFueTtcclxuICBwdWJsaWMgY3VycmVudFBhZ2U6IG51bWJlciA9IDE7XHJcbiAgcHVibGljIHNvcnRDb2x1bW5WYWx1ZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBzb3J0RGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyA9ICdhc2MnO1xyXG4gIHB1YmxpYyByZWFkb25seSBJY29ucyA9IENvcmVDb21wb25lbnRzSWNvbjtcclxuXHJcbiAgcHJpdmF0ZSBfZG91YmxlQ2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX25ld1JvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBpY29uczogSWNvbkNhY2hlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9mb3JtTWFzdGVyOiBGb3JtTWFzdGVyU2VydmljZSxcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmRhdGFDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVDbGlja091dHNpZGVSb3coKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbGlkYXRlQW5kU2F2ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElzUm93RGlzYWJsZWQoaWR4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRpc2FibGVkUm93cy5pbmRleE9mKGlkeCkgPiAtMTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpc1Jvd0Rpc2FibGVkKHJvdzogYW55LCBpbmRleDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAodGhpcy5yb3dEaXNhYmxlZEZuICYmICh0eXBlb2YgdGhpcy5yb3dEaXNhYmxlZEZuID09PSAnZnVuY3Rpb24nKSkge1xyXG4gICAgICBjb25zdCBkaXNhYmxlZCA9IGF3YWl0IHRoaXMucm93RGlzYWJsZWRGbi5jYWxsKHRoaXMsIHJvdyk7XHJcbiAgICAgIGNvbnN0IGlkeFJvdzogbnVtYmVyID0gdGhpcy5kaXNhYmxlZFJvd3MuaW5kZXhPZihpbmRleCk7XHJcbiAgICAgIGlmIChkaXNhYmxlZCkge1xyXG4gICAgICAgIGlmIChpZHhSb3cgPCAwKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVkUm93cy5wdXNoKGluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGlkeFJvdyA+IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVkUm93cy5zcGxpY2UoaWR4Um93LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGRpc2FibGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzU2luZ2xlQ29sdW1uKGNvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGNvbHVtbi5zaW5nbGVDb2x1bW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcm93Q29udGFpbnNTaW5nbGVDb2x1bW4ocm93LCBjb2x1bW5zKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzaW5nbGVDb2x1bW4gPSBjb2x1bW5zLmZpbmQoY29sdW1uID0+IHRoaXMuaXNTaW5nbGVDb2x1bW4oY29sdW1uKSAmJiAhIXJvd1tjb2x1bW4uZmllbGRdKTtcclxuICAgIHJldHVybiAhIXNpbmdsZUNvbHVtbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBhZGROZXdSb3coKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5pbmxpbmVFZGl0KSB7XHJcbiAgICAgIGNvbnN0IHZhbGlkOiBib29sZWFuID0gdGhpcy52YWxpZGF0ZUFuZFNhdmUoKTtcclxuICAgICAgLy8gdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICB0aGlzLmRhdGEucHVzaCh7fSk7XHJcbiAgICAgICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuX25ld1JvdyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVkaXRSb3dJbmRleCA9IHRoaXMuZGF0YS5sZW5ndGggLSAxO1xyXG4gICAgICAgIHRoaXMucm93VG9FZGl0ID0gdGhpcy5kYXRhW3RoaXMuZWRpdFJvd0luZGV4XTtcclxuICAgICAgICB0aGlzLmVkaXRDZWxsSW5kZXggPSBhd2FpdCB0aGlzLl9uZXh0QXZhaWxhYmxlQ2VsbFRvRWRpdCh0cnVlKTtcclxuICAgICAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWRkUm93Lm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB2YWxpZGF0ZUFuZFNhdmUoc3RvcGVkaXRpbmc6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZWRpdGluZykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbGlkOiBib29sZWFuID0gdGhpcy5fZm9ybU1hc3Rlci5zdWJtaXRTbGF2ZXMoKTtcclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICB0aGlzLl9zYXZlUm93KHN0b3BlZGl0aW5nKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsRWRpdFJvdygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5lZGl0aW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9uZXdSb3cpIHtcclxuICAgICAgdGhpcy5kYXRhLnNwbGljZSh0aGlzLmRhdGEubGVuZ3RoIC0gMSwgMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRhdGFbdGhpcy5lZGl0Um93SW5kZXhdID0gdGhpcy5yb3dUb0VkaXQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yZXNldEVkaXQoKTtcclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVSb3coKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlbGV0ZVJvdy5uZXh0KHRoaXMuZGF0YVt0aGlzLnNlbGVjdGVkUm93SW5kZXhdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVDbGlja1JvdyhldmVudDogTW91c2VFdmVudCwgaW5kZXg6IG51bWJlciwgcm93OiBhbnkpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5fZG91YmxlQ2xpY2tlZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdFRoZVJvdyhpbmRleCk7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFRoZVJvdyhpbmRleDogbnVtYmVyLCBlbWl0OiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9PT0gLTEgfHwgKHRoaXMuc2VsZWN0ZWRSb3dJbmRleCAhPT0gaW5kZXggJiYgKCh0aGlzLmVkaXRpbmcgJiYgdGhpcy52YWxpZGF0ZUFuZFNhdmUoKSkgfHwgIXRoaXMuZWRpdGluZykpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IGluZGV4O1xyXG4gICAgfVxyXG4gICAgaWYgKGVtaXQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RSb3cubmV4dCh0aGlzLmRhdGFbdGhpcy5zZWxlY3RlZFJvd0luZGV4XSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaGFuZGxlRGJsQ2xpY2tSb3coZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIsIHJvdzogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoYXdhaXQgdGhpcy5pc1Jvd0Rpc2FibGVkKHJvdywgaW5kZXgpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IC0xO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgY2FuRWRpdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jYW5Sb3dCZUVkaXR0ZWRGbiAmJiB0eXBlb2YgdGhpcy5jYW5Sb3dCZUVkaXR0ZWRGbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjYW5FZGl0ID0gYXdhaXQgdGhpcy5jYW5Sb3dCZUVkaXR0ZWRGbi5jYWxsKHRoaXMsIHJvdyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2FuRWRpdCkge1xyXG4gICAgICB0aGlzLl9kb3VibGVDbGlja2VkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5kYmxDbGlja1Jvdy5uZXh0KHRoaXMuZGF0YVtpbmRleF0pO1xyXG4gICAgICB0aGlzLnNlbGVjdFRoZVJvdyhpbmRleCwgZmFsc2UpO1xyXG4gICAgICBpZiAodGhpcy5pbmxpbmVFZGl0KSB7XHJcbiAgICAgICAgdGhpcy5lZGl0Um93KGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fcmVzZXREYmxDbGljaygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRSb3coZXZlbnQ6IE1vdXNlRXZlbnQsIHNlbGVjdENlbGw6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleDtcclxuICAgIHRoaXMucm93VG9FZGl0ID0gdGhpcy5kYXRhW3RoaXMuZWRpdFJvd0luZGV4XTtcclxuICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XHJcbiAgICBpZiAoc2VsZWN0Q2VsbCkge1xyXG4gICAgICB0aGlzLl9uZXh0QXZhaWxhYmxlQ2VsbFRvRWRpdCh0cnVlKS50aGVuKChpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5lZGl0Q2VsbEluZGV4ID0gaW5kZXg7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGhhbmRsZUNlbGxDbGljayhldmVudDogTW91c2VFdmVudCwgcm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5lZGl0T25DZWxsQ2xpY2spIHtcclxuICAgICAgaWYgKGF3YWl0IHRoaXMuaXNSb3dEaXNhYmxlZChyb3csIHJvd0luZGV4KSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IC0xO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdFRoZVJvdyhyb3dJbmRleCwgZmFsc2UpO1xyXG4gICAgICBpZiAodGhpcy5pbmxpbmVFZGl0KSB7XHJcbiAgICAgICAgdGhpcy5lZGl0Um93SW5kZXggPSByb3dJbmRleDtcclxuICAgICAgICB0aGlzLmVkaXRDZWxsSW5kZXggPSBjZWxsSW5kZXg7XHJcbiAgICAgICAgdGhpcy5lZGl0aW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVkaXRSb3coZXZlbnQsIGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lZGl0Q2VsbEluZGV4ID0gY2VsbEluZGV4O1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvZ2dsZVNldHRpbmdzTWVudSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaGVhZGVyQ29sdW1uc0NvcHkuZm9yRWFjaChpID0+IGkuaXNTZWxlY3RlZCA9IGZhbHNlKTtcclxuICAgIHRoaXMuaXNTZXR0aW5nc01lbnVPcGVuID0gIXRoaXMuaXNTZXR0aW5nc01lbnVPcGVuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvZ2dsZUNvbHVtbk1lbnUoY29sOiAgYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2hvd0dyaWRTZXR0aW5ncykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc1NldHRpbmdzTWVudU9wZW4gPSBmYWxzZTtcclxuICAgIGlmIChjb2wuaXNTZWxlY3RlZCkge1xyXG4gICAgICBjb2wuaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oZWFkZXJDb2x1bW5zQ29weS5mb3JFYWNoKGkgPT4gaS5pc1NlbGVjdGVkID0gZmFsc2UpO1xyXG4gICAgICBjb2wuaXNTZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlkZUNvbHVtbihjb2w6IGFueSk6IHZvaWQge1xyXG4gICAgY29sLmlzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaGVhZGVyQ29sdW1uc0NvcHkgPSB0aGlzLmhlYWRlckNvbHVtbnNDb3B5LmZpbHRlcigob2JqKSA9PiB7XHJcbiAgICAgIHJldHVybiBvYmogIT09IGNvbDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gVE9ETyBGaXggdGhpcyBzb3J0IG1ldGhvZFxyXG4gIC8vIHB1YmxpYyBzb3J0Q29sdW1uKGNvbDogYW55LCBjb2x1bW5WYWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgLy8gICBjb25zb2xlLmxvZyhjb2wpO1xyXG4gIC8vICAgY29uc29sZS5sb2coXCJjb2x1bW5WYWx1ZSBcIiArIGNvbHVtblZhbHVlKTtcclxuICAvLyAgIGNvbC5pc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgLy9cclxuICAvLyAgIGlmICh0aGlzLnNvcnRDb2x1bW5WYWx1ZSA9PT0gY29sdW1uVmFsdWUpIHtcclxuICAvLyAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gdGhpcy5zb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnO1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgdGhpcy5zb3J0Q29sdW1uVmFsdWUgPSBjb2x1bW5WYWx1ZTtcclxuICAvLyAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gJ2FzYyc7XHJcbiAgLy8gICB9XHJcbiAgLy9cclxuICAvLyAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YSk7XHJcbiAgLy8gICAvLyB0aGlzLmRhdGEgPSB0aGlzLl9zb3J0RGF0YSh0aGlzLmRhdGEpO1xyXG4gIC8vXHJcbiAgLy9cclxuICAvLyAgIHRoaXMuZGF0YS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgLy8gICAgIGNvbnN0IHNpZ24gPSB0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xO1xyXG4gIC8vXHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKFwiYSBcIiArIGEpO1xyXG4gIC8vICAgICBjb25zb2xlLmxvZyhcImIgXCIgKyBiKTtcclxuICAvLyAgICAgY29uc29sZS5sb2coYVt0aGlzLnNvcnRDb2x1bW5WYWx1ZV0pO1xyXG4gIC8vICAgICBjb25zb2xlLmxvZyhiW3RoaXMuc29ydENvbHVtblZhbHVlXSk7XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKFwic2lnbiBcIiArIHNpZ24pO1xyXG4gIC8vXHJcbiAgLy8gICAgIGlmIChhW3RoaXMuc29ydENvbHVtblZhbHVlXSA8IGJbdGhpcy5zb3J0Q29sdW1uVmFsdWVdKSB7XHJcbiAgLy8gICAgICAgcmV0dXJuIC0xICogc2lnbjtcclxuICAvLyAgICAgfSBlbHNlIGlmIChhW3RoaXMuc29ydENvbHVtblZhbHVlXSA+IGJbdGhpcy5zb3J0Q29sdW1uVmFsdWVdKSB7XHJcbiAgLy8gICAgICAgcmV0dXJuIDEgKiBzaWduO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIHJldHVybiAwO1xyXG4gIC8vICAgfSk7XHJcbiAgLy9cclxuICAvL1xyXG4gIC8vXHJcbiAgLy8gICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgLy8gICAvLyB0aGlzLmRhdGEuc29ydCgoYSwgYikgPT4gYVt0aGlzLnNvcnRDb2x1bW5WYWx1ZV0gLSBiW3RoaXMuc29ydENvbHVtblZhbHVlXSk7XHJcbiAgLy8gICBjb25zb2xlLmxvZyh0aGlzLmRhdGEpO1xyXG4gIC8vIH1cclxuXHJcbiAgcHJpdmF0ZSBfc29ydERhdGEodGFibGVEYXRhOiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRhYmxlRGF0YS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNpZ24gPSB0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xO1xyXG5cclxuICAgICAgY29uc29sZS5sb2coXCJhIFwiICsgYSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiYiBcIiArIGIpO1xyXG4gICAgICBjb25zb2xlLmxvZyhhW3RoaXMuc29ydENvbHVtblZhbHVlXSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKGJbdGhpcy5zb3J0Q29sdW1uVmFsdWVdKTtcclxuICAgICAgY29uc29sZS5sb2coXCJzaWduIFwiICsgc2lnbik7XHJcblxyXG4gICAgICBpZiAoYVt0aGlzLnNvcnRDb2x1bW5WYWx1ZV0gPCBiW3RoaXMuc29ydENvbHVtblZhbHVlXSkge1xyXG4gICAgICAgIHJldHVybiAtMSAqIHNpZ247XHJcbiAgICAgIH0gZWxzZSBpZiAoYVt0aGlzLnNvcnRDb2x1bW5WYWx1ZV0gPiBiW3RoaXMuc29ydENvbHVtblZhbHVlXSkge1xyXG4gICAgICAgIHJldHVybiAxICogc2lnbjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dBbGxDb2x1bW5zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1NldHRpbmdzTWVudU9wZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuaGVhZGVyQ29sdW1uc0NvcHkgPSB0aGlzLmhlYWRlckNvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwb3J0VG9FeGNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNTZXR0aW5nc01lbnVPcGVuID0gZmFsc2U7XHJcbiAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaW1wbGUtZ3JpZC10YWJsZScpO1xyXG4gICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gWExTWC51dGlscy50YWJsZV90b19zaGVldChlbGVtZW50KTtcclxuICAgIGNvbnN0IHdiOiBYTFNYLldvcmtCb29rID0gWExTWC51dGlscy5ib29rX25ldygpO1xyXG4gICAgWExTWC51dGlscy5ib29rX2FwcGVuZF9zaGVldCh3Yiwgd3MsICdTaGVldDEnKTtcclxuICAgIFhMU1gud3JpdGVGaWxlKHdiLCAnRXhjZWxTaGVldC54bHN4Jyk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHJlcGFyZURhdGFSb3cocm93OiBhbnksIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNSb3dEaXNhYmxlZChyb3csIGluZGV4KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Jlc2V0RGJsQ2xpY2soKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5fZG91YmxlQ2xpY2tlZCA9IGZhbHNlO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIG5leHQ7IE1vdmUgdG8gbmV4dCBvciBwcmV2aW91cyBjZWxsXHJcbiAgICogQHBhcmFtIHN0YXJ0OyBTdGFydCBmcm9tIGNlbGxpbmRleFxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbmV4dEF2YWlsYWJsZUNlbGxUb0VkaXQobmV4dDogYm9vbGVhbiwgc3RhcnQ6IG51bWJlciA9IC0xKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgY29uc3QgbnVtRWRpdGFibGVDb2x1bW5zOiBudW1iZXIgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGMgPT4gIWMucmVhZG9ubHkpLmxlbmd0aDtcclxuICAgICAgY29uc3Qgd2FudGVkSW5kZXggPSBzdGFydCArIChuZXh0ID8gMSA6IC0xKTtcclxuICAgICAgaWYgKHdhbnRlZEluZGV4ID49IG51bUVkaXRhYmxlQ29sdW1ucykge1xyXG4gICAgICAgIHRoaXMuX2dldE5leHRFZGl0Um93SW5kZXgoKVxyXG4gICAgICAgICAgLnRoZW4oKGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0Um93SW5kZXggPSBpbmRleDtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9nZXROZXh0RWRpdENlbGxJbmRleCgwKSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAod2FudGVkSW5kZXggPCAwKSB7XHJcbiAgICAgICAgdGhpcy5fZ2V0UHJldmlvdXNFZGl0Um93SW5kZXgoKVxyXG4gICAgICAgICAgLnRoZW4oKGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0Um93SW5kZXggPSBpbmRleDtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9nZXRQcmV2aW91c0VkaXRDZWxsSW5kZXgodGhpcy5jb2x1bW5zLmxlbmd0aCAtIDEpKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXNvbHZlKG5leHQgPyB0aGlzLl9nZXROZXh0RWRpdENlbGxJbmRleChzdGFydCArIDEpIDogdGhpcy5fZ2V0UHJldmlvdXNFZGl0Q2VsbEluZGV4KHN0YXJ0IC0gMSkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldE5leHRFZGl0Q2VsbEluZGV4KHN0YXJ0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gc3RhcnQ7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKCF0aGlzLmNvbHVtbnNbaV0ucmVhZG9ubHkpIHtcclxuICAgICAgICByZXR1cm4gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0UHJldmlvdXNFZGl0Q2VsbEluZGV4KHN0YXJ0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGlmICghdGhpcy5jb2x1bW5zW2ldLnJlYWRvbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldE5leHRFZGl0Um93SW5kZXgoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgbGV0IG5ld1Jvd0luZGV4OiBudW1iZXIgPSAwO1xyXG4gICAgICBpZiAodGhpcy5lZGl0Um93SW5kZXggKyAxID49IHRoaXMuZGF0YS5sZW5ndGgpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvQWRkUm93KSB7XHJcbiAgICAgICAgICB0aGlzLmFkZE5ld1JvdygpO1xyXG4gICAgICAgICAgbmV3Um93SW5kZXggPSB0aGlzLmVkaXRSb3dJbmRleDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbmV3Um93SW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdSb3dJbmRleCA9IHRoaXMuZWRpdFJvd0luZGV4ICsgMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobmV3Um93SW5kZXggIT09IHRoaXMuZWRpdFJvd0luZGV4KSB7IC8vIGdvIHRvIGRpZmZlcmVudCByb3cgdmFsaWRhdGUgY3VycmVudCBvbmUgZmlyc3RcclxuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZUFuZFNhdmUoZmFsc2UpKSB7XHJcbiAgICAgICAgICB0aGlzLnJvd1RvRWRpdCA9IHRoaXMuZGF0YVtuZXdSb3dJbmRleF07XHJcbiAgICAgICAgICByZXNvbHZlKG5ld1Jvd0luZGV4KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc29sdmUobmV3Um93SW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFByZXZpb3VzRWRpdFJvd0luZGV4KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIGxldCBuZXdSb3dJbmRleDogbnVtYmVyID0gMDtcclxuICAgICAgaWYgKHRoaXMuZWRpdFJvd0luZGV4IC0gMSA8IDApIHtcclxuICAgICAgICBuZXdSb3dJbmRleCA9IHRoaXMuZGF0YS5sZW5ndGggLSAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld1Jvd0luZGV4ID0gdGhpcy5lZGl0Um93SW5kZXggLSAxO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChuZXdSb3dJbmRleCAhPT0gdGhpcy5lZGl0Um93SW5kZXgpIHsgLy8gZ28gdG8gZGlmZmVyZW50IHJvdyB2YWxpZGF0ZSBjdXJyZW50IG9uZSBmaXJzdFxyXG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRlQW5kU2F2ZShmYWxzZSkpIHtcclxuICAgICAgICAgIHRoaXMucm93VG9FZGl0ID0gdGhpcy5kYXRhW25ld1Jvd0luZGV4XTtcclxuICAgICAgICAgIHJlc29sdmUobmV3Um93SW5kZXgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzb2x2ZShuZXdSb3dJbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2F2ZVJvdyhzdG9wZWRpdGluZzogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIC8vIGVtaXQgc2F2ZUV2ZW50XHJcbiAgICBpZiAodGhpcy5yb3dUb0VkaXQpIHtcclxuICAgICAgdGhpcy5zYXZlUm93Lm5leHQodGhpcy5yb3dUb0VkaXQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fbmV3Um93ID0gZmFsc2U7XHJcbiAgICBpZiAoc3RvcGVkaXRpbmcpIHtcclxuICAgICAgdGhpcy5fcmVzZXRFZGl0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ29Ub1ByZXZpb3VzUGFnZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgLT0gMTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnb1RvTmV4dFBhZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlICs9IDE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q3VycmVudFBhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RldGVjdENoYW5nZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb24uZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVzZXRFZGl0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbmV3Um93ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAtMTtcclxuICAgIHRoaXMuZWRpdFJvd0luZGV4ID0gLTE7XHJcbiAgICB0aGlzLmVkaXRDZWxsSW5kZXggPSAtMTtcclxuICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5yb3dUb0VkaXQgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
601
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NpbXBsZS1ncmlkL3NpbXBsZS1ncmlkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLFlBQVksRUFDWixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDekUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBNkp0RSxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsdUJBQXVCO0lBb0Y5RCxZQUNTLEtBQXVCLEVBQ3RCLGdCQUFtQyxFQUNuQyxXQUE4QixFQUM5QixrQkFBc0M7UUFFOUMsS0FBSyxFQUFFLENBQUM7UUFMRCxVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUN0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBQ25DLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtRQUM5Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBdkZoQyxxQkFBZ0IsR0FBZ0IsV0FBVyxDQUFDLElBQUksQ0FBQztRQVUxRCxZQUFPLEdBQVksS0FBSyxDQUFDO1FBR3pCLGVBQVUsR0FBWSxL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QUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7OztZQWxuQkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9KVDtnQkFDRCxTQUFTLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDOUIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07Z0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3RDOzs7WUE3Sk8sZ0JBQWdCO1lBWnRCLGlCQUFpQjtZQVFYLGlCQUFpQjtZQUtqQixrQkFBa0I7OzswQkFnS3ZCLFlBQVksU0FBQyxZQUFZO3NCQU96QixLQUFLO3lCQUdMLEtBQUs7OEJBR0wsS0FBSzsyQkFHTCxLQUFLOytCQUdMLEtBQUs7MEJBR0wsS0FBSzs0QkFHTCxLQUFLOzZCQUdMLEtBQUs7Z0NBTUwsS0FBSzt3QkFHTCxXQUFXLFNBQUMsc0JBQXNCOzRCQUtsQyxZQUFZLFNBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0Zvcm1NYXN0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2UvZm9ybS1tYXN0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7QmFzZVNpbXBsZUdyaWRDb21wb25lbnR9IGZyb20gJy4vYmFzZS1zaW1wbGUtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvbHVtbkFsaWdufSBmcm9tICcuL3NpbXBsZS1ncmlkLWNvbHVtbi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQge0NvcmVDb21wb25lbnRzSWNvbn0gZnJvbSAnLi4vLi4vY29yZS9lbnVtL2NvcmUtY29tcG9uZW50cy1pY29uLmVudW0nO1xyXG5pbXBvcnQge0ljb25DYWNoZVNlcnZpY2V9IGZyb20gJy4uL2ljb24vaWNvbi1jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtFeGNlbEV4cG9ydFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2UvZXhjZWwtZXhwb3J0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjby1zaW1wbGUtZ3JpZCcsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgICAgPGNvLWdyaWQtdG9vbGJhclxyXG4gICAgICAgICAgICAgICpuZ0lmPVwic2hvd1Rvb2xiYXJcIiBbY2xhc3MucmlnaHRdPVwicmlnaHRUb29sYmFyXCJcclxuICAgICAgICAgICAgICBbc2hvd0VkaXRdPVwic2hvd0VkaXRcIlxyXG4gICAgICAgICAgICAgIFtzaG93QWRkXT1cInNob3dBZGRcIlxyXG4gICAgICAgICAgICAgIFtzaG93RGVsZXRlXT1cInNob3dEZWxldGVcIlxyXG4gICAgICAgICAgICAgIFtkZWxldGVFbmFibGVkXT1cInNlbGVjdGVkUm93SW5kZXggPiAtMVwiXHJcbiAgICAgICAgICAgICAgKGFkZENsaWNrKT1cImFkZE5ld1JvdygpXCJcclxuICAgICAgICAgICAgICAoZWRpdENsaWNrKT1cImVkaXRSb3coJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgKHNhdmVDbGljayk9XCJ2YWxpZGF0ZUFuZFNhdmUoKVwiXHJcbiAgICAgICAgICAgICAgKGNhbmNlbENsaWNrKT1cImNhbmNlbEVkaXRSb3coKVwiXHJcbiAgICAgICAgICAgICAgKGRlbGV0ZUNsaWNrKT1cInJlbW92ZVJvdygpXCI+XHJcbiAgICAgIDwvY28tZ3JpZC10b29sYmFyPlxyXG5cclxuICAgICAgPHRhYmxlXHJcbiAgICAgICAgICAgICAgaWQ9XCJzaW1wbGUtZ3JpZC10YWJsZVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzaW1wbGUtZ3JpZC10YWJsZVwiXHJcbiAgICAgICAgICAgICAgW2NsaWNrT3V0c2lkZV09XCJlZGl0aW5nXCJcclxuICAgICAgICAgICAgICAoY2xpY2tPdXRzaWRlKT1cImhhbmRsZUNsaWNrT3V0c2lkZVJvdygpXCI+XHJcbiAgICAgICAgICA8Y29sZ3JvdXA+XHJcbiAgICAgICAgICAgICAgPGNvbFxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBoZWFkZXJDb2x1bW5zQ29weTsgbGV0IGluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNpbXBsZS1ncmlkLWNvbHVtbi1hdXRvLWZpdF09XCJjb2x1bW4uYXV0b0ZpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiTUlOX0NPTFVNTl9XSURUSFwiPlxyXG4gICAgICAgICAgPC9jb2xncm91cD5cclxuICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICA8dGhcclxuICAgICAgICAgICAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICNoZWFkZXJDZWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNpbXBsZS1ncmlkLWNvbHVtbi1oZWFkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBoZWFkZXJDb2x1bW5zQ29weTsgbGV0IGluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2ltcGxlLWdyaWQtY29sdW1uLWhlYWRlci13cmFwcGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVzaXphYmxlXT1cInJlc2l6YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImNvbHVtbi5pc1NlbGVjdGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4udGV4dEFsaWduID8gY29sdW1uLnRleHRBbGlnbiA6IGRlZmF1bHRUZXh0QWxpZ25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGU7IGVsc2Ugbm9IZWFkZXJUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9IZWFkZXJUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNpbXBsZS1ncmlkLWNvbHVtbi1oZWFkZXItbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLnRleHRBbGlnbiA/IGNvbHVtbi50ZXh0QWxpZ24gOiBkZWZhdWx0VGV4dEFsaWduXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy53aXRoLW1lbnVdPVwic2hvd0dyaWRTZXR0aW5nc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mud2l0aC1zb3J0XT1cInNob3dDb2x1bW5Tb3J0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJjb2x1bW4uaGVhZGVyVGV4dCB8fCAnJm5ic3A7J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0NvbHVtblNvcnQgPyBzb3J0Q29sdW1uKGNvbHVtbiwgY29sdW1uLmZpZWxkKSA6IHRvZ2dsZUNvbHVtbk1lbnUoY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic29ydC1jb2x1bW5cIiAqbmdJZj1cInNob3dDb2x1bW5Tb3J0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic29ydENvbHVtbihjb2x1bW4sIGNvbHVtbj8uZmllbGQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbnMuZ2V0SWNvbihJY29ucy5BcnJvd1VwQXJyb3dEb3duKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1tZW51XCIgKm5nSWY9XCJjb2x1bW4uaXNTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgW3RleHRDb250ZW50XT1cIidDT0xVTU5fT1BUSU9OUycgfCBjb3JlTG9jYWxpemVcIj48L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cImhpZGVDb2x1bW4oY29sdW1uKVwiPkhpZGUgQ29sdW1uPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwic29ydENvbHVtbihjb2x1bW4sIGNvbHVtbi5maWVsZClcIj5Tb3J0IENvbHVtbjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJlc2l6YWJsZSAmJiBjb2x1bW4ucmVzaXphYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaW1wbGUtZ3JpZC1jb2x1bW4tc2l6ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cImhhbmRsZVNpemVyTW91c2VEb3duKCRldmVudCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93R3JpZFNldHRpbmdzXCIgY2xhc3M9XCJncmlkLXNldHRpbmdzXCI+XHJcbiAgICAgICAgICAgICAgPGNvLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzU2V0dGluZ3NNZW51T3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbnMuZ2V0SWNvbihJY29ucy5Db2dXaGVlbHMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZXR0aW5nc01lbnUoKVwiPlxyXG4gICAgICAgICAgICAgIDwvY28tYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2V0dGluZ3MtbWVudVwiICpuZ0lmPVwiaXNTZXR0aW5nc01lbnVPcGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxoMyBbdGV4dENvbnRlbnRdPVwiJ0dSSURfT1BUSU9OUycgfCBjb3JlTG9jYWxpemVcIj48L2gzPlxyXG4gICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cImV4cG9ydFRvRXhjZWwoKVwiPkV4cG9ydCB0byBFeGNlbDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJoZWFkZXJDb2x1bW5zQ29weS5sZW5ndGggIT09IGhlYWRlckNvbHVtbnMubGVuZ3RoXCIgKGNsaWNrKT1cInNob3dBbGxDb2x1bW5zKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93IEFsbCBDb2x1bW5zXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgPHRib2R5XHJcbiAgICAgICAgICAgICAgICAgICNkcm9wTGlzdCBjZGtEcm9wTGlzdCBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwidmVydGljYWxcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNpbXBsZS1ncmlkLWRyYWctZHJvcC1saXN0XCJcclxuICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiIWRyYWdEcm9wRW5hYmxlZCB8fCBlZGl0aW5nXCJcclxuICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJkYXRhXCJcclxuICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RW50ZXJQcmVkaWNhdGVdPVwiaGFuZGxlQ2FuRHJhZ0Ryb3BcIlxyXG4gICAgICAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImhhbmRsZURyb3AoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPGNvLWZvcm0gY2xhc3M9XCJzaW1wbGUtZ3JpZC1yb3ctZm9ybVwiPlxyXG4gICAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaW1wbGUtZ3JpZC1yb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cInJvd0luZGV4ID09PSBzZWxlY3RlZFJvd0luZGV4ICYmICFlZGl0aW5nXCIgb2JzZXJ2ZVZpc2liaWxpdHlcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJnZXRJc1Jvd0Rpc2FibGVkKHJvd0luZGV4KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZWRpdGluZ109XCJyb3dJbmRleCA9PT0gZWRpdFJvd0luZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2YgKCEhcm93c1BlclBhZ2UgPyAoZGF0YSB8IHBhZ2luYXRlOiB7aXRlbXNQZXJQYWdlOiByb3dzUGVyUGFnZSwgY3VycmVudFBhZ2U6IGN1cnJlbnRQYWdlfSkgOiBkYXRhKTsgbGFzdCBhcyBsYXN0OyBsZXQgcm93SW5kZXggPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjZGtEcmFnXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2tSb3coJGV2ZW50LCByb3dJbmRleCwgcm93KVwiIChkYmxjbGljayk9XCJoYW5kbGVEYmxDbGlja1JvdygkZXZlbnQsIHJvd0luZGV4LCByb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICh2aXNpYmlsaXR5Q2hhbmdlKT1cInJvd1Zpc2libGUubmV4dChyb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1NpbmdsZUNvbHVtblJvdyhyb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzaW1wbGUtZ3JpZC1zaW5nbGUtY29sdW1uLWNlbGxcIiBbYXR0ci5jb2xzcGFuXT1cImhlYWRlckNvbHVtbnNDb3B5Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jZWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtbnNbc2luZ2xlQ29sdW1uSW5kZXgocm93KV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRNb2RlXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jby1zaW1wbGUtZ3JpZC1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNTaW5nbGVDb2x1bW5Sb3cocm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGhlYWRlckNvbHVtbnNDb3B5OyBsZXQgY29sdW1uSW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNpbXBsZS1ncmlkLWNvbHVtbi1jZWxsXCIgKm5nSWY9XCJjb2x1bW5JbmRleCAhPT0gc2luZ2xlQ29sdW1uSW5kZXgocm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY2VsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRNb2RlXT1cImlubGluZUVkaXQgJiYgZWRpdGluZyAmJiByb3dJbmRleCA9PT0gZWRpdFJvd0luZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRFZGl0TW9kZV09XCJlZGl0Q2VsbEluZGV4ID09PSBjb2x1bW5JbmRleCAmJiByb3dJbmRleCA9PT0gZWRpdFJvd0luZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2VsbENsaWNrKT1cImhhbmRsZUNlbGxDbGljaygkZXZlbnQsIHJvdywgcm93SW5kZXgsIGNvbHVtbkluZGV4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4ucmVzaXphYmxlXCIgY2xhc3M9XCJzaW1wbGUtZ3JpZC1jb2x1bW4tc2l6ZXItcGxhY2Vob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L2NvLWZvcm0+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICA8L3RhYmxlPlxyXG5cclxuICAgICAgPGNvLXBhZ2luYXRpb24tYmFyXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhPy5sZW5ndGggPiByb3dzUGVyUGFnZVwiIGNsYXNzPVwicGFnaW5hdGlvbi1iYXJcIlxyXG4gICAgICAgICAgICAgIFtpdGVtc1BlclBhZ2VdPVwicm93c1BlclBhZ2VcIlxyXG4gICAgICAgICAgICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiXHJcbiAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwiZGF0YS5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgIFthdXRvSGlkZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAocHJldmlvdXNDbGljayk9XCJnb1RvUHJldmlvdXNQYWdlKClcIlxyXG4gICAgICAgICAgICAgIChuZXh0Q2xpY2spPVwiZ29Ub05leHRQYWdlKClcIlxyXG4gICAgICAgICAgICAgIChwYWdlQ2xpY2spPVwic2V0Q3VycmVudFBhZ2UoJGV2ZW50KVwiPlxyXG4gICAgICA8L2NvLXBhZ2luYXRpb24tYmFyPlxyXG4gIGAsXHJcbiAgcHJvdmlkZXJzOiBbRm9ybU1hc3RlclNlcnZpY2VdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIFNpbXBsZUdyaWRDb21wb25lbnQgZXh0ZW5kcyBCYXNlU2ltcGxlR3JpZENvbXBvbmVudCB7XHJcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRUZXh0QWxpZ246IENvbHVtbkFsaWduID0gQ29sdW1uQWxpZ24uTGVmdDtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignaGVhZGVyQ2VsbCcpIHNldCBoZWFkZXJDZWxscyhjZWxscykge1xyXG4gICAgY29uc3QgaGVhZGVyRWxlbWVudHMgPSBjZWxscy50b0FycmF5KCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlckVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuY29sdW1uc1tpXS5lbGVtZW50UmVmID0gaGVhZGVyRWxlbWVudHNbaV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzaG93QWRkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNob3dEZWxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZWRpdE9uQ2VsbENsaWNrOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcmlnaHRUb29sYmFyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNob3dHcmlkU2V0dGluZ3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcm93c1BlclBhZ2U6IG51bWJlciA9IDEwMDA7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJvd0Rpc2FibGVkRm46IEZ1bmN0aW9uO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzaG93Q29sdW1uU29ydDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBQcm9taXNlIGZ1bmN0aW9uLCBpZiBwcm92aWRlZCBzaG91bGQgcmV0dXJuIGJvb2xlYW5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjYW5Sb3dCZUVkaXR0ZWRGbjogRnVuY3Rpb247XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuY28tc2ltcGxlLWdyaWQnKVxyXG4gIHB1YmxpYyBzaG93Q2xhc3MoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaW5saW5lRWRpdCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHRoaXMuX25leHRBdmFpbGFibGVDZWxsVG9FZGl0KCFldmVudC5zaGlmdEtleSwgdGhpcy5lZGl0Q2VsbEluZGV4KVxyXG4gICAgICAgIC50aGVuKChpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVkaXRDZWxsSW5kZXggPSBpbmRleDtcclxuICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdGlvbi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KTtcclxuICAgICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudC5jb2RlID09PSAnRXNjYXBlJykge1xyXG4gICAgICB0aGlzLmNhbmNlbEVkaXRSb3coKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0VudGVyJykge1xyXG4gICAgICB0aGlzLnZhbGlkYXRlQW5kU2F2ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNTZXR0aW5nc01lbnVPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGVkaXRSb3dJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgcHVibGljIGVkaXRDZWxsSW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFJvd0luZGV4OiBudW1iZXIgPSAtMTtcclxuICBwdWJsaWMgcm93VG9FZGl0OiBhbnk7XHJcbiAgcHVibGljIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAxO1xyXG4gIHB1YmxpYyBzb3J0Q29sdW1uVmFsdWU6IHN0cmluZztcclxuICBwdWJsaWMgc29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJztcclxuICBwdWJsaWMgcmVhZG9ubHkgSWNvbnMgPSBDb3JlQ29tcG9uZW50c0ljb247XHJcblxyXG4gIHByaXZhdGUgX2RvdWJsZUNsaWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9uZXdSb3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgaWNvbnM6IEljb25DYWNoZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfZm9ybU1hc3RlcjogRm9ybU1hc3RlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGV4Y2VsRXhwb3J0U2VydmljZTogRXhjZWxFeHBvcnRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNsaWNrT3V0c2lkZVJvdygpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsaWRhdGVBbmRTYXZlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXNSb3dEaXNhYmxlZChpZHg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWRSb3dzLmluZGV4T2YoaWR4KSA+IC0xO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGlzUm93RGlzYWJsZWQocm93OiBhbnksIGluZGV4OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICh0aGlzLnJvd0Rpc2FibGVkRm4gJiYgKHR5cGVvZiB0aGlzLnJvd0Rpc2FibGVkRm4gPT09ICdmdW5jdGlvbicpKSB7XHJcbiAgICAgIGNvbnN0IGRpc2FibGVkID0gYXdhaXQgdGhpcy5yb3dEaXNhYmxlZEZuLmNhbGwodGhpcywgcm93KTtcclxuICAgICAgY29uc3QgaWR4Um93OiBudW1iZXIgPSB0aGlzLmRpc2FibGVkUm93cy5pbmRleE9mKGluZGV4KTtcclxuICAgICAgaWYgKGRpc2FibGVkKSB7XHJcbiAgICAgICAgaWYgKGlkeFJvdyA8IDApIHtcclxuICAgICAgICAgIHRoaXMuZGlzYWJsZWRSb3dzLnB1c2goaW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaWR4Um93ID4gLTEpIHtcclxuICAgICAgICAgIHRoaXMuZGlzYWJsZWRSb3dzLnNwbGljZShpZHhSb3csIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZGlzYWJsZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgYWRkTmV3Um93KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuaW5saW5lRWRpdCkge1xyXG4gICAgICBjb25zdCB2YWxpZDogYm9vbGVhbiA9IHRoaXMudmFsaWRhdGVBbmRTYXZlKCk7XHJcbiAgICAgIC8vIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICAgICAgaWYgKHZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhLnB1c2goe30pO1xyXG4gICAgICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLl9uZXdSb3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lZGl0Um93SW5kZXggPSB0aGlzLmRhdGEubGVuZ3RoIC0gMTtcclxuICAgICAgICB0aGlzLnJvd1RvRWRpdCA9IHRoaXMuZGF0YVt0aGlzLmVkaXRSb3dJbmRleF07XHJcbiAgICAgICAgdGhpcy5lZGl0Q2VsbEluZGV4ID0gYXdhaXQgdGhpcy5fbmV4dEF2YWlsYWJsZUNlbGxUb0VkaXQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFkZFJvdy5uZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdmFsaWRhdGVBbmRTYXZlKHN0b3BlZGl0aW5nOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmVkaXRpbmcpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2YWxpZDogYm9vbGVhbiA9IHRoaXMuX2Zvcm1NYXN0ZXIuc3VibWl0U2xhdmVzKCk7XHJcbiAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBpZiAodmFsaWQpIHtcclxuICAgICAgdGhpcy5fc2F2ZVJvdyhzdG9wZWRpdGluZyk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEVkaXRSb3coKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZWRpdGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fbmV3Um93KSB7XHJcbiAgICAgIHRoaXMuZGF0YS5zcGxpY2UodGhpcy5kYXRhLmxlbmd0aCAtIDEsIDEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRhW3RoaXMuZWRpdFJvd0luZGV4XSA9IHRoaXMucm93VG9FZGl0O1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcmVzZXRFZGl0KCk7XHJcbiAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlUm93KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZWxldGVSb3cubmV4dCh0aGlzLmRhdGFbdGhpcy5zZWxlY3RlZFJvd0luZGV4XSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ2xpY2tSb3coZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIsIHJvdzogYW55KTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuX2RvdWJsZUNsaWNrZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWxlY3RUaGVSb3coaW5kZXgpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RUaGVSb3coaW5kZXg6IG51bWJlciwgZW1pdDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93SW5kZXggPT09IC0xIHx8ICh0aGlzLnNlbGVjdGVkUm93SW5kZXggIT09IGluZGV4ICYmICgodGhpcy5lZGl0aW5nICYmIHRoaXMudmFsaWRhdGVBbmRTYXZlKCkpIHx8ICF0aGlzLmVkaXRpbmcpKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSBpbmRleDtcclxuICAgIH1cclxuICAgIGlmIChlbWl0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0Um93Lm5leHQodGhpcy5kYXRhW3RoaXMuc2VsZWN0ZWRSb3dJbmRleF0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGhhbmRsZURibENsaWNrUm93KGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleDogbnVtYmVyLCByb3c6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKGF3YWl0IHRoaXMuaXNSb3dEaXNhYmxlZChyb3csIGluZGV4KSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAtMTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGNhbkVkaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuY2FuUm93QmVFZGl0dGVkRm4gJiYgdHlwZW9mIHRoaXMuY2FuUm93QmVFZGl0dGVkRm4gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY2FuRWRpdCA9IGF3YWl0IHRoaXMuY2FuUm93QmVFZGl0dGVkRm4uY2FsbCh0aGlzLCByb3cpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNhbkVkaXQpIHtcclxuICAgICAgdGhpcy5fZG91YmxlQ2xpY2tlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGJsQ2xpY2tSb3cubmV4dCh0aGlzLmRhdGFbaW5kZXhdKTtcclxuICAgICAgdGhpcy5zZWxlY3RUaGVSb3coaW5kZXgsIGZhbHNlKTtcclxuICAgICAgaWYgKHRoaXMuaW5saW5lRWRpdCkge1xyXG4gICAgICAgIHRoaXMuZWRpdFJvdyhldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX3Jlc2V0RGJsQ2xpY2soKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0Um93KGV2ZW50OiBNb3VzZUV2ZW50LCBzZWxlY3RDZWxsOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0Um93SW5kZXggPSB0aGlzLnNlbGVjdGVkUm93SW5kZXg7XHJcbiAgICB0aGlzLnJvd1RvRWRpdCA9IHRoaXMuZGF0YVt0aGlzLmVkaXRSb3dJbmRleF07XHJcbiAgICB0aGlzLmVkaXRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKHNlbGVjdENlbGwpIHtcclxuICAgICAgdGhpcy5fbmV4dEF2YWlsYWJsZUNlbGxUb0VkaXQodHJ1ZSkudGhlbigoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIHRoaXMuZWRpdENlbGxJbmRleCA9IGluZGV4O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVDZWxsQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyLCBjZWxsSW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuZWRpdE9uQ2VsbENsaWNrKSB7XHJcbiAgICAgIGlmIChhd2FpdCB0aGlzLmlzUm93RGlzYWJsZWQocm93LCByb3dJbmRleCkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAtMTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWxlY3RUaGVSb3cocm93SW5kZXgsIGZhbHNlKTtcclxuICAgICAgaWYgKHRoaXMuaW5saW5lRWRpdCkge1xyXG4gICAgICAgIHRoaXMuZWRpdFJvd0luZGV4ID0gcm93SW5kZXg7XHJcbiAgICAgICAgdGhpcy5lZGl0Q2VsbEluZGV4ID0gY2VsbEluZGV4O1xyXG4gICAgICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lZGl0Um93KGV2ZW50LCBmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZWRpdENlbGxJbmRleCA9IGNlbGxJbmRleDtcclxuICAgIH1cclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVTZXR0aW5nc01lbnUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmhlYWRlckNvbHVtbnNDb3B5LmZvckVhY2goaSA9PiBpLmlzU2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICB0aGlzLmlzU2V0dGluZ3NNZW51T3BlbiA9ICF0aGlzLmlzU2V0dGluZ3NNZW51T3BlbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVDb2x1bW5NZW51KGNvbDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2hvd0dyaWRTZXR0aW5ncykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc1NldHRpbmdzTWVudU9wZW4gPSBmYWxzZTtcclxuICAgIGlmIChjb2wuaXNTZWxlY3RlZCkge1xyXG4gICAgICBjb2wuaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oZWFkZXJDb2x1bW5zQ29weS5mb3JFYWNoKGkgPT4gaS5pc1NlbGVjdGVkID0gZmFsc2UpO1xyXG4gICAgICBjb2wuaXNTZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlkZUNvbHVtbihjb2w6IGFueSk6IHZvaWQge1xyXG4gICAgY29sLmlzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaGVhZGVyQ29sdW1uc0NvcHkgPSB0aGlzLmhlYWRlckNvbHVtbnNDb3B5LmZpbHRlcigob2JqKSA9PiB7XHJcbiAgICAgIHJldHVybiBvYmogIT09IGNvbDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNvcnRDb2x1bW4oY29sOiBhbnksIGNvbHVtblZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbC5pc1NlbGVjdGVkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuc29ydENvbHVtblZhbHVlID09PSBjb2x1bW5WYWx1ZSkge1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNvcnRDb2x1bW5WYWx1ZSA9IGNvbHVtblZhbHVlO1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAnYXNjJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xO1xyXG5cclxuICAgIGNvbnN0IHNvcnRlZCA9IFsuLi50aGlzLmRhdGFdLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgbGV0IHZhbEEgPSBhW2NvbHVtblZhbHVlXTtcclxuICAgICAgbGV0IHZhbEIgPSBiW2NvbHVtblZhbHVlXTtcclxuXHJcbiAgICAgIGlmICh2YWxBID09IG51bGwgJiYgdmFsQiA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHZhbEEgPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiAtMSAqIGRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodmFsQiA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgKiBkaXJlY3Rpb247XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEhhbmRsZSBJU08gZGF0ZSBzdHJpbmdcclxuICAgICAgY29uc3QgaXNEYXRlQSA9IHR5cGVvZiB2YWxBID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VC8udGVzdCh2YWxBKTtcclxuICAgICAgY29uc3QgaXNEYXRlQiA9IHR5cGVvZiB2YWxCID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VC8udGVzdCh2YWxCKTtcclxuXHJcbiAgICAgIGlmIChpc0RhdGVBICYmIGlzRGF0ZUIpIHtcclxuICAgICAgICBjb25zdCB0aW1lQSA9IG5ldyBEYXRlKHZhbEEpLmdldFRpbWUoKTtcclxuICAgICAgICBjb25zdCB0aW1lQiA9IG5ldyBEYXRlKHZhbEIpLmdldFRpbWUoKTtcclxuICAgICAgICByZXR1cm4gKHRpbWVBIC0gdGltZUIpICogZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBGYWxsYmFjayBmb3IgbnVtYmVycy9zdHJpbmdzXHJcbiAgICAgIGlmICh0eXBlb2YgdmFsQSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbEIgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbEEubG9jYWxlQ29tcGFyZSh2YWxCKSAqIGRpcmVjdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuICh2YWxBID4gdmFsQiA/IDEgOiB2YWxBIDwgdmFsQiA/IC0xIDogMCkgKiBkaXJlY3Rpb247XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRhdGEgPSBzb3J0ZWQ7XHJcbiAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd0FsbENvbHVtbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzU2V0dGluZ3NNZW51T3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5oZWFkZXJDb2x1bW5zQ29weSA9IHRoaXMuaGVhZGVyQ29sdW1ucztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBvcnRUb0V4Y2VsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5leGNlbEV4cG9ydFNlcnZpY2UuZXhwb3J0VGFibGVUb0V4Y2VsKFxyXG4gICAgICAnc2ltcGxlLWdyaWQtdGFibGUnLFxyXG4gICAgICAnRXhjZWxTaGVldCcsXHJcbiAgICAgICdTaGVldDEnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHByZXBhcmVEYXRhUm93KHJvdzogYW55LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzUm93RGlzYWJsZWQocm93LCBpbmRleCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXNldERibENsaWNrKCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2RvdWJsZUNsaWNrZWQgPSBmYWxzZTtcclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBuZXh0OyBNb3ZlIHRvIG5leHQgb3IgcHJldmlvdXMgY2VsbFxyXG4gICAqIEBwYXJhbSBzdGFydDsgU3RhcnQgZnJvbSBjZWxsaW5kZXhcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX25leHRBdmFpbGFibGVDZWxsVG9FZGl0KG5leHQ6IGJvb2xlYW4sIHN0YXJ0OiBudW1iZXIgPSAtMSk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIGNvbnN0IG51bUVkaXRhYmxlQ29sdW1uczogbnVtYmVyID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+ICFjLnJlYWRvbmx5KS5sZW5ndGg7XHJcbiAgICAgIGNvbnN0IHdhbnRlZEluZGV4ID0gc3RhcnQgKyAobmV4dCA/IDEgOiAtMSk7XHJcbiAgICAgIGlmICh3YW50ZWRJbmRleCA+PSBudW1FZGl0YWJsZUNvbHVtbnMpIHtcclxuICAgICAgICB0aGlzLl9nZXROZXh0RWRpdFJvd0luZGV4KClcclxuICAgICAgICAgIC50aGVuKChpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdFJvd0luZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5fZ2V0TmV4dEVkaXRDZWxsSW5kZXgoMCkpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHdhbnRlZEluZGV4IDwgMCkge1xyXG4gICAgICAgIHRoaXMuX2dldFByZXZpb3VzRWRpdFJvd0luZGV4KClcclxuICAgICAgICAgIC50aGVuKChpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdFJvd0luZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5fZ2V0UHJldmlvdXNFZGl0Q2VsbEluZGV4KHRoaXMuY29sdW1ucy5sZW5ndGggLSAxKSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzb2x2ZShuZXh0ID8gdGhpcy5fZ2V0TmV4dEVkaXRDZWxsSW5kZXgoc3RhcnQgKyAxKSA6IHRoaXMuX2dldFByZXZpb3VzRWRpdENlbGxJbmRleChzdGFydCAtIDEpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXROZXh0RWRpdENlbGxJbmRleChzdGFydDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IHN0YXJ0OyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICghdGhpcy5jb2x1bW5zW2ldLnJlYWRvbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFByZXZpb3VzRWRpdENlbGxJbmRleChzdGFydDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IHN0YXJ0OyBpID49IDA7IGktLSkge1xyXG4gICAgICBpZiAoIXRoaXMuY29sdW1uc1tpXS5yZWFkb25seSkge1xyXG4gICAgICAgIHJldHVybiBpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXROZXh0RWRpdFJvd0luZGV4KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIGxldCBuZXdSb3dJbmRleDogbnVtYmVyID0gMDtcclxuICAgICAgaWYgKHRoaXMuZWRpdFJvd0luZGV4ICsgMSA+PSB0aGlzLmRhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b0FkZFJvdykge1xyXG4gICAgICAgICAgdGhpcy5hZGROZXdSb3coKTtcclxuICAgICAgICAgIG5ld1Jvd0luZGV4ID0gdGhpcy5lZGl0Um93SW5kZXg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG5ld1Jvd0luZGV4ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3Um93SW5kZXggPSB0aGlzLmVkaXRSb3dJbmRleCArIDE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5ld1Jvd0luZGV4ICE9PSB0aGlzLmVkaXRSb3dJbmRleCkgeyAvLyBnbyB0byBkaWZmZXJlbnQgcm93IHZhbGlkYXRlIGN1cnJlbnQgb25lIGZpcnN0XHJcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVBbmRTYXZlKGZhbHNlKSkge1xyXG4gICAgICAgICAgdGhpcy5yb3dUb0VkaXQgPSB0aGlzLmRhdGFbbmV3Um93SW5kZXhdO1xyXG4gICAgICAgICAgcmVzb2x2ZShuZXdSb3dJbmRleCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXNvbHZlKG5ld1Jvd0luZGV4KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRQcmV2aW91c0VkaXRSb3dJbmRleCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICBsZXQgbmV3Um93SW5kZXg6IG51bWJlciA9IDA7XHJcbiAgICAgIGlmICh0aGlzLmVkaXRSb3dJbmRleCAtIDEgPCAwKSB7XHJcbiAgICAgICAgbmV3Um93SW5kZXggPSB0aGlzLmRhdGEubGVuZ3RoIC0gMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdSb3dJbmRleCA9IHRoaXMuZWRpdFJvd0luZGV4IC0gMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobmV3Um93SW5kZXggIT09IHRoaXMuZWRpdFJvd0luZGV4KSB7IC8vIGdvIHRvIGRpZmZlcmVudCByb3cgdmFsaWRhdGUgY3VycmVudCBvbmUgZmlyc3RcclxuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZUFuZFNhdmUoZmFsc2UpKSB7XHJcbiAgICAgICAgICB0aGlzLnJvd1RvRWRpdCA9IHRoaXMuZGF0YVtuZXdSb3dJbmRleF07XHJcbiAgICAgICAgICByZXNvbHZlKG5ld1Jvd0luZGV4KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc29sdmUobmV3Um93SW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NhdmVSb3coc3RvcGVkaXRpbmc6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICAvLyBlbWl0IHNhdmVFdmVudFxyXG4gICAgaWYgKHRoaXMucm93VG9FZGl0KSB7XHJcbiAgICAgIHRoaXMuc2F2ZVJvdy5uZXh0KHRoaXMucm93VG9FZGl0KTtcclxuICAgIH1cclxuICAgIHRoaXMuX25ld1JvdyA9IGZhbHNlO1xyXG4gICAgaWYgKHN0b3BlZGl0aW5nKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2V0RWRpdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdvVG9QcmV2aW91c1BhZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlIC09IDE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ29Ub05leHRQYWdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSArPSAxO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEN1cnJlbnRQYWdlKHBhZ2U6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0aW9uLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Jlc2V0RWRpdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX25ld1JvdyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gLTE7XHJcbiAgICB0aGlzLmVkaXRSb3dJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5lZGl0Q2VsbEluZGV4ID0gLTE7XHJcbiAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMucm93VG9FZGl0ID0gdW5kZWZpbmVkO1xyXG4gIH1cclxufVxyXG4iXX0=
|