@colijnit/corecomponents_v12 259.1.0 → 259.1.2
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 +137 -247
- package/bundles/colijnit-corecomponents_v12.umd.js.map +1 -1
- package/colijnit-corecomponents_v12-259.1.0.tgz +0 -0
- package/colijnit-corecomponents_v12.metadata.json +1 -1
- package/esm2015/lib/components/grid-toolbar/grid-toolbar.component.js +2 -2
- package/esm2015/lib/components/simple-grid/simple-grid.component.js +242 -193
- package/esm2015/lib/core/utils/file-utils.js +2 -2
- package/fesm2015/colijnit-corecomponents_v12.js +254 -333
- package/fesm2015/colijnit-corecomponents_v12.js.map +1 -1
- package/lib/components/simple-grid/simple-grid.component.d.ts +5 -2
- package/lib/components/simple-grid/style/_layout.scss +1 -0
- package/lib/core/utils/file-utils.d.ts +1 -1
- package/package.json +1 -1
- package/esm2015/lib/core/enum/co-document-image-display-kind.enum.js +0 -7
- package/esm2015/lib/core/enum/object-right-type.enum.js +0 -7
- package/esm2015/lib/core/enum/table-name.enum.js +0 -81
- package/esm2015/lib/core/model/co-document-right.bo.js +0 -3
- package/esm2015/lib/core/model/co-document.bo.js +0 -121
- package/lib/core/enum/co-document-image-display-kind.enum.d.ts +0 -5
- package/lib/core/enum/object-right-type.enum.d.ts +0 -5
- package/lib/core/enum/table-name.enum.d.ts +0 -79
- package/lib/core/model/co-document-right.bo.d.ts +0 -6
- package/lib/core/model/co-document.bo.d.ts +0 -61
|
@@ -21,6 +21,7 @@ export class SimpleGridComponent extends BaseSimpleGridComponent {
|
|
|
21
21
|
this.showGridSettings = false;
|
|
22
22
|
this.rowsPerPage = 50;
|
|
23
23
|
this.showColumnSort = false;
|
|
24
|
+
this.showRowButtons = false;
|
|
24
25
|
this.editing = false;
|
|
25
26
|
this.isSettingsMenuOpen = false;
|
|
26
27
|
this.editRowIndex = -1;
|
|
@@ -99,26 +100,37 @@ export class SimpleGridComponent extends BaseSimpleGridComponent {
|
|
|
99
100
|
return __awaiter(this, void 0, void 0, function* () {
|
|
100
101
|
if (this.inlineEdit) {
|
|
101
102
|
const valid = this.validateAndSave();
|
|
102
|
-
// this._detectChanges();
|
|
103
103
|
if (valid) {
|
|
104
|
-
this.
|
|
104
|
+
this._newRowReference = {};
|
|
105
|
+
this.data.push(this._newRowReference);
|
|
105
106
|
this._detectChanges();
|
|
106
107
|
this._newRow = true;
|
|
107
108
|
this.editing = true;
|
|
108
109
|
if (this.rowsPerPage && this.data.length > this.rowsPerPage) {
|
|
109
|
-
// navigate to
|
|
110
|
+
// navigate to last page
|
|
110
111
|
this.currentPage = Math.ceil(this.data.length / this.rowsPerPage);
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
this.
|
|
114
|
-
|
|
112
|
+
const relativeIndex = (this.data.length - 1) % this.rowsPerPage;
|
|
113
|
+
this.selectedRowIndex = relativeIndex;
|
|
114
|
+
this.editRowIndex = relativeIndex;
|
|
115
|
+
// store reference
|
|
116
|
+
this.rowToEdit = this._newRowReference;
|
|
117
|
+
this.editCellIndex = yield this._nextAvailableCellToEdit(true);
|
|
118
|
+
setTimeout(() => {
|
|
119
|
+
var _a, _b;
|
|
120
|
+
const el = (_b = (_a = this.rowElements) === null || _a === void 0 ? void 0 : _a.last) === null || _b === void 0 ? void 0 : _b.nativeElement;
|
|
121
|
+
if (el) {
|
|
122
|
+
el.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
123
|
+
}
|
|
124
|
+
}, 200);
|
|
125
|
+
// reset reference to the new row after editCellIndex
|
|
126
|
+
this.rowToEdit = this._newRowReference;
|
|
115
127
|
}
|
|
116
128
|
else {
|
|
117
129
|
this.editRowIndex = this.data.length - 1;
|
|
118
|
-
this.rowToEdit = this.
|
|
130
|
+
this.rowToEdit = this._newRowReference;
|
|
119
131
|
this.editCellIndex = yield this._nextAvailableCellToEdit(true);
|
|
120
|
-
this._detectChanges();
|
|
121
132
|
}
|
|
133
|
+
this._detectChanges();
|
|
122
134
|
}
|
|
123
135
|
}
|
|
124
136
|
else {
|
|
@@ -152,22 +164,41 @@ export class SimpleGridComponent extends BaseSimpleGridComponent {
|
|
|
152
164
|
this._detectChanges();
|
|
153
165
|
}
|
|
154
166
|
removeRow() {
|
|
155
|
-
this.
|
|
167
|
+
let absoluteIndex = this.selectedRowIndex;
|
|
168
|
+
if (this.rowsPerPage) {
|
|
169
|
+
absoluteIndex = (this.currentPage - 1) * this.rowsPerPage + this.selectedRowIndex;
|
|
170
|
+
}
|
|
171
|
+
this.deleteRow.next(this.data[absoluteIndex]);
|
|
172
|
+
if (this.currentPage !== 1) {
|
|
173
|
+
this.currentPage = 1;
|
|
174
|
+
this.selectedRowIndex = -1;
|
|
175
|
+
window.scrollTo({ top: 0, behavior: 'smooth' });
|
|
176
|
+
}
|
|
177
|
+
this._detectChanges();
|
|
156
178
|
}
|
|
157
|
-
handleClickRow(event, index
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
179
|
+
handleClickRow(event, index) {
|
|
180
|
+
if (this.inlineEdit && this.showRowButtons && !this.editing) {
|
|
181
|
+
this.editing = false;
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
setTimeout(() => {
|
|
185
|
+
if (this._doubleClicked) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
this.selectTheRow(index);
|
|
189
|
+
if (this.inlineEdit && !this.showRowButtons) {
|
|
190
|
+
this.editRow(event, true, index);
|
|
191
|
+
}
|
|
192
|
+
}, 200);
|
|
193
|
+
}
|
|
164
194
|
}
|
|
165
195
|
selectTheRow(index, emit = true) {
|
|
166
196
|
if (this.selectedRowIndex === -1 || (this.selectedRowIndex !== index && ((this.editing && this.validateAndSave()) || !this.editing))) {
|
|
167
197
|
this.selectedRowIndex = index;
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
198
|
+
const absoluteIndex = this.rowsPerPage ? (this.currentPage - 1) * this.rowsPerPage + index : index;
|
|
199
|
+
if (emit) {
|
|
200
|
+
this.selectRow.next(this.data[absoluteIndex]);
|
|
201
|
+
}
|
|
171
202
|
}
|
|
172
203
|
this._detectChanges();
|
|
173
204
|
}
|
|
@@ -185,7 +216,7 @@ export class SimpleGridComponent extends BaseSimpleGridComponent {
|
|
|
185
216
|
this._doubleClicked = true;
|
|
186
217
|
this.dblClickRow.next(this.data[index]);
|
|
187
218
|
this.selectTheRow(index, false);
|
|
188
|
-
if (this.inlineEdit) {
|
|
219
|
+
if (this.inlineEdit && !this.showRowButtons) {
|
|
189
220
|
this.editRow(event);
|
|
190
221
|
}
|
|
191
222
|
}
|
|
@@ -195,12 +226,12 @@ export class SimpleGridComponent extends BaseSimpleGridComponent {
|
|
|
195
226
|
editRow(event, selectCell = true, rowIndex) {
|
|
196
227
|
return __awaiter(this, void 0, void 0, function* () {
|
|
197
228
|
if (rowIndex !== undefined) {
|
|
198
|
-
this.selectTheRow(rowIndex
|
|
229
|
+
this.selectTheRow(rowIndex);
|
|
199
230
|
}
|
|
231
|
+
this.editing = true;
|
|
200
232
|
this.editRowIndex = this.selectedRowIndex;
|
|
201
233
|
this.rowToEdit = this.data[this.editRowIndex];
|
|
202
|
-
this.
|
|
203
|
-
if (selectCell) {
|
|
234
|
+
if (this.showRowButtons && this.inlineEdit && selectCell) {
|
|
204
235
|
this.editCellIndex = yield this._nextAvailableCellToEdit(true);
|
|
205
236
|
}
|
|
206
237
|
this._detectChanges();
|
|
@@ -213,12 +244,10 @@ export class SimpleGridComponent extends BaseSimpleGridComponent {
|
|
|
213
244
|
this.selectedRowIndex = -1;
|
|
214
245
|
return;
|
|
215
246
|
}
|
|
216
|
-
this.selectTheRow(rowIndex, false);
|
|
217
247
|
if (this.inlineEdit) {
|
|
218
248
|
this.editRowIndex = rowIndex;
|
|
219
249
|
this.editCellIndex = cellIndex;
|
|
220
250
|
this.editing = true;
|
|
221
|
-
this.editRow(event, false);
|
|
222
251
|
}
|
|
223
252
|
}
|
|
224
253
|
else {
|
|
@@ -466,9 +495,26 @@ export class SimpleGridComponent extends BaseSimpleGridComponent {
|
|
|
466
495
|
});
|
|
467
496
|
}
|
|
468
497
|
_saveRow(stopediting = true) {
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
this.
|
|
498
|
+
if (this._newRow) {
|
|
499
|
+
this.saveRow.next(this._newRowReference);
|
|
500
|
+
this._newRowReference = null; // clear
|
|
501
|
+
}
|
|
502
|
+
else {
|
|
503
|
+
let index = -1; // existing row
|
|
504
|
+
if (this.rowsPerPage) {
|
|
505
|
+
index = (this.currentPage - 1) * this.rowsPerPage + this.editRowIndex;
|
|
506
|
+
}
|
|
507
|
+
else {
|
|
508
|
+
index = this.editRowIndex;
|
|
509
|
+
}
|
|
510
|
+
if (index >= 0 && index < this.data.length) {
|
|
511
|
+
this.saveRow.next(this.data[index]);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
if (this.currentPage !== 1) {
|
|
515
|
+
this.currentPage = 1;
|
|
516
|
+
this.selectedRowIndex = -1;
|
|
517
|
+
window.scrollTo({ top: 0, behavior: 'smooth' });
|
|
472
518
|
}
|
|
473
519
|
this._newRow = false;
|
|
474
520
|
if (stopediting) {
|
|
@@ -504,175 +550,176 @@ SimpleGridComponent.decorators = [
|
|
|
504
550
|
{ type: Component, args: [{
|
|
505
551
|
selector: 'co-simple-grid',
|
|
506
552
|
template: `
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
553
|
+
<co-grid-toolbar
|
|
554
|
+
*ngIf="showToolbar" [class.right]="rightToolbar"
|
|
555
|
+
[showEdit]="showEdit"
|
|
556
|
+
[showAdd]="showAdd"
|
|
557
|
+
[showDelete]="showDelete"
|
|
558
|
+
[deleteEnabled]="selectedRowIndex > -1"
|
|
559
|
+
(addClick)="addNewRow()"
|
|
560
|
+
(editClick)="editRow($event)"
|
|
561
|
+
(saveClick)="validateAndSave()"
|
|
562
|
+
(cancelClick)="cancelEditRow()"
|
|
563
|
+
(deleteClick)="removeRow()">
|
|
564
|
+
</co-grid-toolbar>
|
|
519
565
|
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
566
|
+
<table
|
|
567
|
+
id="simple-grid-table"
|
|
568
|
+
class="simple-grid-table"
|
|
569
|
+
[clickOutside]="editing"
|
|
570
|
+
(clickOutside)="handleClickOutsideRow()">
|
|
571
|
+
<colgroup>
|
|
572
|
+
<col
|
|
573
|
+
*ngFor="let column of headerColumnsCopy; let index = index"
|
|
574
|
+
[class.simple-grid-column-auto-fit]="column.autoFit"
|
|
575
|
+
[style.width.px]="column.width"
|
|
576
|
+
[style.min-width.px]="MIN_COLUMN_WIDTH">
|
|
577
|
+
</colgroup>
|
|
578
|
+
<thead>
|
|
579
|
+
<tr>
|
|
580
|
+
<th
|
|
581
|
+
scope="col"
|
|
582
|
+
#headerCell
|
|
583
|
+
class="simple-grid-column-header"
|
|
584
|
+
*ngFor="let column of headerColumnsCopy; let index = index">
|
|
585
|
+
<div
|
|
586
|
+
class="simple-grid-column-header-wrapper"
|
|
587
|
+
[class.resizable]="resizable"
|
|
588
|
+
[class.selected]="column.isSelected"
|
|
589
|
+
[ngClass]="column.textAlign ? column.textAlign : defaultTextAlign">
|
|
590
|
+
<ng-container *ngIf="column.headerTemplate; else noHeaderTemplate">
|
|
591
|
+
<ng-container [ngTemplateOutlet]="column.headerTemplate"></ng-container>
|
|
592
|
+
</ng-container>
|
|
593
|
+
<ng-template #noHeaderTemplate>
|
|
594
|
+
<div
|
|
595
|
+
class="simple-grid-column-header-label"
|
|
596
|
+
[ngClass]="column.textAlign ? column.textAlign : defaultTextAlign"
|
|
597
|
+
[class.with-menu]="showGridSettings"
|
|
598
|
+
[class.with-sort]="showColumnSort"
|
|
599
|
+
[textContent]="column.headerText || ' '"
|
|
600
|
+
(click)="showColumnSort ? sortColumn(column, column.field) : toggleColumnMenu(column)">
|
|
601
|
+
</div>
|
|
556
602
|
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
603
|
+
<div class="sort-column" *ngIf="showColumnSort">
|
|
604
|
+
<co-button
|
|
605
|
+
(click)="sortColumn(column, column?.field)"
|
|
606
|
+
[iconData]="icons.getIcon(Icons.ArrowUpArrowDown)">
|
|
607
|
+
</co-button>
|
|
608
|
+
</div>
|
|
563
609
|
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
610
|
+
<div class="column-menu" *ngIf="column.isSelected">
|
|
611
|
+
<h3 [textContent]="'COLUMN_OPTIONS' | coreLocalize"></h3>
|
|
612
|
+
<ul>
|
|
613
|
+
<li (click)="hideColumn(column)">Hide Column</li>
|
|
614
|
+
<li (click)="sortColumn(column, column.field)">Sort Column</li>
|
|
615
|
+
</ul>
|
|
616
|
+
</div>
|
|
617
|
+
</ng-template>
|
|
618
|
+
<div
|
|
619
|
+
*ngIf="resizable && column.resizable"
|
|
620
|
+
class="simple-grid-column-sizer"
|
|
621
|
+
(mousedown)="handleSizerMouseDown($event, column)">
|
|
622
|
+
</div>
|
|
623
|
+
</div>
|
|
624
|
+
</th>
|
|
625
|
+
</tr>
|
|
580
626
|
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
627
|
+
<div *ngIf="showGridSettings" class="grid-settings">
|
|
628
|
+
<co-button
|
|
629
|
+
[class.selected]="isSettingsMenuOpen"
|
|
630
|
+
[iconData]="icons.getIcon(Icons.CogWheels)"
|
|
631
|
+
(click)="toggleSettingsMenu()">
|
|
632
|
+
</co-button>
|
|
587
633
|
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
634
|
+
<div class="settings-menu" *ngIf="isSettingsMenuOpen">
|
|
635
|
+
<h3 [textContent]="'GRID_OPTIONS' | coreLocalize"></h3>
|
|
636
|
+
<ul>
|
|
637
|
+
<li (click)="exportToExcel()">Export to Excel</li>
|
|
638
|
+
<li *ngIf="headerColumnsCopy.length !== headerColumns.length" (click)="showAllColumns()">
|
|
639
|
+
Show All Columns
|
|
640
|
+
</li>
|
|
641
|
+
</ul>
|
|
642
|
+
</div>
|
|
643
|
+
</div>
|
|
644
|
+
</thead>
|
|
645
|
+
<tbody
|
|
646
|
+
#dropList cdkDropList cdkDropListOrientation="vertical"
|
|
647
|
+
class="simple-grid-drag-drop-list"
|
|
648
|
+
[cdkDropListDisabled]="!dragDropEnabled || editing"
|
|
649
|
+
[cdkDropListData]="data"
|
|
650
|
+
[cdkDropListEnterPredicate]="handleCanDragDrop"
|
|
651
|
+
(cdkDropListDropped)="handleDrop($event)">
|
|
652
|
+
<co-form class="simple-grid-row-form">
|
|
653
|
+
<tr
|
|
654
|
+
#rowElement
|
|
655
|
+
class="simple-grid-row"
|
|
656
|
+
[class.selected]="rowIndex === selectedRowIndex && !editing" observeVisibility
|
|
657
|
+
[class.disabled]="getIsRowDisabled(rowIndex)"
|
|
658
|
+
[class.editing]="rowIndex === editRowIndex"
|
|
659
|
+
*ngFor="let row of (!!rowsPerPage ? (data | paginate: {itemsPerPage: rowsPerPage, currentPage: currentPage}) : data); last as last; let rowIndex = index"
|
|
660
|
+
cdkDrag
|
|
661
|
+
(click)="handleClickRow($event, rowIndex)" (dblclick)="handleDblClickRow($event, rowIndex, row)"
|
|
662
|
+
(visibilityChange)="rowVisible.next(row)"
|
|
663
|
+
(mouseenter)="hoveredRowIndex = rowIndex"
|
|
664
|
+
(mouseleave)="hoveredRowIndex = -1"
|
|
665
|
+
>
|
|
666
|
+
<ng-container *ngIf="isSingleColumnRow(row)">
|
|
667
|
+
<td class="simple-grid-single-column-cell" [attr.colspan]="headerColumnsCopy.length">
|
|
668
|
+
<co-simple-grid-cell
|
|
669
|
+
[column]="columns[singleColumnIndex(row)]"
|
|
670
|
+
[row]="row"
|
|
671
|
+
[editMode]="false">
|
|
672
|
+
</co-simple-grid-cell>
|
|
673
|
+
</td>
|
|
674
|
+
</ng-container>
|
|
675
|
+
<ng-container *ngIf="!isSingleColumnRow(row)">
|
|
676
|
+
<ng-container *ngFor="let column of headerColumnsCopy; let columnIndex = index">
|
|
677
|
+
<td class="simple-grid-column-cell" *ngIf="columnIndex !== singleColumnIndex(row)">
|
|
678
|
+
<co-simple-grid-cell
|
|
679
|
+
[column]="column"
|
|
680
|
+
[row]="row"
|
|
681
|
+
[editMode]="inlineEdit && editing && rowIndex === editRowIndex"
|
|
682
|
+
[fieldEditMode]="editCellIndex === columnIndex && rowIndex === editRowIndex"
|
|
683
|
+
(cellClick)="handleCellClick($event, row, rowIndex, columnIndex)">
|
|
684
|
+
</co-simple-grid-cell>
|
|
685
|
+
<div *ngIf="column.resizable" class="simple-grid-column-sizer-placeholder"></div>
|
|
686
|
+
</td>
|
|
687
|
+
</ng-container>
|
|
688
|
+
<ng-container *ngIf="inlineEdit && showRowButtons">
|
|
689
|
+
<div class="icons-container" *ngIf="!editing">
|
|
690
|
+
<co-icon class="icon-item icon-edit"
|
|
691
|
+
[iconData]="icons.getIcon(Icons.PenToSquareSolid)" *ngIf="hoveredRowIndex === rowIndex"
|
|
692
|
+
(click)="editRow($event, true, rowIndex); $event.stopPropagation()"></co-icon>
|
|
693
|
+
<co-icon class="icon-item icon-delete"
|
|
694
|
+
[iconData]="icons.getIcon(Icons.TrashBin)" *ngIf="hoveredRowIndex === rowIndex"
|
|
695
|
+
(click)="selectTheRow(rowIndex); removeRow();"></co-icon>
|
|
596
696
|
</div>
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
[row]="row"
|
|
624
|
-
[editMode]="false">
|
|
625
|
-
</co-simple-grid-cell>
|
|
626
|
-
</td>
|
|
627
|
-
</ng-container>
|
|
628
|
-
<ng-container *ngIf="!isSingleColumnRow(row)">
|
|
629
|
-
<ng-container *ngFor="let column of headerColumnsCopy; let columnIndex = index">
|
|
630
|
-
<td class="simple-grid-column-cell" *ngIf="columnIndex !== singleColumnIndex(row)">
|
|
631
|
-
<co-simple-grid-cell
|
|
632
|
-
[column]="column"
|
|
633
|
-
[row]="row"
|
|
634
|
-
[editMode]="inlineEdit && editing && rowIndex === editRowIndex"
|
|
635
|
-
[fieldEditMode]="editCellIndex === columnIndex && rowIndex === editRowIndex"
|
|
636
|
-
(cellClick)="handleCellClick($event, row, rowIndex, columnIndex)">
|
|
637
|
-
</co-simple-grid-cell>
|
|
638
|
-
<div *ngIf="column.resizable" class="simple-grid-column-sizer-placeholder"></div>
|
|
639
|
-
</td>
|
|
640
|
-
</ng-container>
|
|
641
|
-
<ng-container *ngIf="inlineEdit">
|
|
642
|
-
<div class="icons-container" *ngIf="!editing">
|
|
643
|
-
<co-icon class="icon-item icon-edit"
|
|
644
|
-
[iconData]="icons.getIcon(Icons.PenToSquareSolid)" *ngIf="hoveredRowIndex === rowIndex"
|
|
645
|
-
(click)="editRow($event, true, rowIndex); $event.stopPropagation()"></co-icon>
|
|
646
|
-
<co-icon class="icon-item icon-delete"
|
|
647
|
-
[iconData]="icons.getIcon(Icons.TrashBin)" *ngIf="hoveredRowIndex === rowIndex"
|
|
648
|
-
(click)="removeRow()"></co-icon>
|
|
649
|
-
</div>
|
|
650
|
-
<div class="icons-container">
|
|
651
|
-
<co-button class="save-button"
|
|
652
|
-
*ngIf="editing && (selectedRowIndex === rowIndex || (isNewRow && rowIndex === editRowIndex))"
|
|
653
|
-
[iconData]="icons.getIcon(Icons.CheckDuotone)"
|
|
654
|
-
(click)="validateAndSave(); $event.stopPropagation()"></co-button>
|
|
655
|
-
<co-button class="close-button"
|
|
656
|
-
*ngIf="editing && (selectedRowIndex === rowIndex || (isNewRow && rowIndex === editRowIndex))"
|
|
657
|
-
[iconData]="icons.getIcon(Icons.CrossSkinny)"
|
|
658
|
-
(click)="cancelEditRow(); $event.stopPropagation() "></co-button>
|
|
659
|
-
</div>
|
|
660
|
-
</ng-container>
|
|
661
|
-
</ng-container>
|
|
662
|
-
</tr>
|
|
663
|
-
</co-form>
|
|
664
|
-
</tbody>
|
|
665
|
-
</table>
|
|
666
|
-
<co-pagination-bar
|
|
667
|
-
*ngIf="data?.length > rowsPerPage" class="pagination-bar"
|
|
668
|
-
[itemsPerPage]="rowsPerPage"
|
|
669
|
-
[currentPage]="currentPage"
|
|
670
|
-
[totalItems]="data.length"
|
|
671
|
-
[autoHide]="true"
|
|
672
|
-
(previousClick)="goToPreviousPage()"
|
|
673
|
-
(nextClick)="goToNextPage()"
|
|
674
|
-
(pageClick)="setCurrentPage($event)">
|
|
675
|
-
</co-pagination-bar>
|
|
697
|
+
<div class="icons-container">
|
|
698
|
+
<co-button class="save-button"
|
|
699
|
+
*ngIf="editing && (selectedRowIndex === rowIndex || (isNewRow && rowIndex === editRowIndex))"
|
|
700
|
+
[iconData]="icons.getIcon(Icons.CheckDuotone)"
|
|
701
|
+
(click)="validateAndSave(); $event.stopPropagation()"></co-button>
|
|
702
|
+
<co-button class="close-button"
|
|
703
|
+
*ngIf="editing && (selectedRowIndex === rowIndex || (isNewRow && rowIndex === editRowIndex))"
|
|
704
|
+
[iconData]="icons.getIcon(Icons.CrossSkinny)"
|
|
705
|
+
(click)="cancelEditRow(); $event.stopPropagation() "></co-button>
|
|
706
|
+
</div>
|
|
707
|
+
</ng-container>
|
|
708
|
+
</ng-container>
|
|
709
|
+
</tr>
|
|
710
|
+
</co-form>
|
|
711
|
+
</tbody>
|
|
712
|
+
</table>
|
|
713
|
+
<co-pagination-bar
|
|
714
|
+
*ngIf="data?.length > rowsPerPage" class="pagination-bar"
|
|
715
|
+
[itemsPerPage]="rowsPerPage"
|
|
716
|
+
[currentPage]="currentPage"
|
|
717
|
+
[totalItems]="data.length"
|
|
718
|
+
[autoHide]="true"
|
|
719
|
+
(previousClick)="goToPreviousPage()"
|
|
720
|
+
(nextClick)="goToNextPage()"
|
|
721
|
+
(pageClick)="setCurrentPage($event)">
|
|
722
|
+
</co-pagination-bar>
|
|
676
723
|
`,
|
|
677
724
|
providers: [FormMasterService],
|
|
678
725
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
@@ -687,6 +734,7 @@ SimpleGridComponent.ctorParameters = () => [
|
|
|
687
734
|
];
|
|
688
735
|
SimpleGridComponent.propDecorators = {
|
|
689
736
|
headerCells: [{ type: ViewChildren, args: ['headerCell',] }],
|
|
737
|
+
rowElements: [{ type: ViewChildren, args: ['rowElement',] }],
|
|
690
738
|
showAdd: [{ type: Input }],
|
|
691
739
|
showDelete: [{ type: Input }],
|
|
692
740
|
editOnCellClick: [{ type: Input }],
|
|
@@ -695,8 +743,9 @@ SimpleGridComponent.propDecorators = {
|
|
|
695
743
|
rowsPerPage: [{ type: Input }],
|
|
696
744
|
rowDisabledFn: [{ type: Input }],
|
|
697
745
|
showColumnSort: [{ type: Input }],
|
|
746
|
+
showRowButtons: [{ type: Input }],
|
|
698
747
|
canRowBeEdittedFn: [{ type: Input }],
|
|
699
748
|
showClass: [{ type: HostBinding, args: ['class.co-simple-grid',] }],
|
|
700
749
|
handleKeyDown: [{ type: HostListener, args: ['keydown', ['$event'],] }]
|
|
701
750
|
};
|
|
702
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NpbXBsZS1ncmlkL3NpbXBsZS1ncmlkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLFlBQVksRUFDWixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDekUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBQyxrQkFBa0IsRUFBZSxNQUFNLG9DQUFvQyxDQUFDO0FBbUxwRixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsdUJBQXVCO0lBcUY5RCxZQUNTLEtBQXVCLEVBQ3RCLGdCQUFtQyxFQUNuQyxXQUE4QixFQUM5QixrQkFBc0M7UUFFOUMsS0FBSyxFQUFFLENBQUM7UUFMRCxVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUN0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBQ25DLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtRQUM5Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBeEZoQyxxQkFBZ0IsR0FBZ0IsV0FBVyxDQUFDLElBQUksQ0FBQztRQVUxRCxZQUFPLEdBQVksS0FBSyxDQUFDO1FBR3pCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFHNUIsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFHaEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFHOUIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBR2xDLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBTXpCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBc0NoQyxZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUNwQyxpQkFBWSxHQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzFCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDM0IscUJBQWdCLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFFOUIsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFFeEIsa0JBQWEsR0FBbUIsS0FBSyxDQUFDO1FBQ3RDLG9CQUFlLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDcEIsVUFBSyxHQUFHLGtCQUFrQixDQUFDO1FBRW5DLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFxZGQscUJBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDcEMsdUJBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUE3Y3pELElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUE1RkQsSUFBZ0MsV0FBVyxDQUFDLEtBQUs7UUFDL0MsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7SUFpQ00sU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUdNLGFBQWEsQ0FBQyxLQUFvQjtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixPQUFPO1NBQ1I7UUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUM7aUJBQy9ELElBQUksQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFO2dCQUN0QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUMzQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdEI7UUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQzFCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUE2Qk0scUJBQXFCO1FBQzFCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsR0FBVztRQUNqQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFWSxhQUFhLENBQUMsR0FBUSxFQUFFLEtBQWE7O1lBQ2hELElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxVQUFVLENBQUMsRUFBRTtnQkFDcEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzFELE1BQU0sTUFBTSxHQUFXLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLFFBQVEsRUFBRTtvQkFDWixJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQy9CO2lCQUNGO3FCQUFNO29CQUNMLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO3dCQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDckM7aUJBQ0Y7Z0JBQ0QsT0FBTyxRQUFRLENBQUM7YUFDakI7aUJBQU07Z0JBQ0wsT0FBTyxLQUFLLENBQUM7YUFDZDtRQUNILENBQUM7S0FBQTtJQUVZLFNBQVM7O1lBQ3BCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDbkIsTUFBTSxLQUFLLEdBQVksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUM5Qyx5QkFBeUI7Z0JBQ3pCLElBQUksS0FBSyxFQUFFO29CQUNULElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNuQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztvQkFFcEIsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUU7d0JBQzNELDJDQUEyQzt3QkFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDbEUsaUJBQWlCO3dCQUNqQixNQUFNLGFBQWEsR0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7d0JBQ25ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO3dCQUN6SCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNwQjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzt3QkFDekMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzt3QkFDOUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDL0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO3FCQUN2QjtpQkFDRjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDcEI7UUFDSCxDQUFDO0tBQUE7SUFFTSxlQUFlLENBQUMsY0FBdUIsSUFBSTtRQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsTUFBTSxLQUFLLEdBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxhQUFhO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pCLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDM0M7YUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDL0M7UUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxTQUFTO1FBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTSxjQUFjLENBQUMsS0FBaUIsRUFBRSxLQUFhLEVBQUUsR0FBUTtRQUM5RCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUN2QixPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFTSxZQUFZLENBQUMsS0FBYSxFQUFFLE9BQWdCLElBQUk7UUFDckQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7WUFDcEksSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztTQUMvQjtRQUNELElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFWSxpQkFBaUIsQ0FBQyxLQUFpQixFQUFFLEtBQWEsRUFBRSxHQUFROztZQUN2RSxJQUFJLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsT0FBTzthQUNSO1lBQ0QsSUFBSSxPQUFPLEdBQVksSUFBSSxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixLQUFLLFVBQVUsRUFBRTtnQkFDMUUsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDeEQ7WUFDRCxJQUFJLE9BQU8sRUFBRTtnQkFDWCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNyQjthQUNGO1lBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLENBQUM7S0FBQTtJQUVZLE9BQU8sQ0FBQyxLQUFpQixFQUFFLGFBQXNCLElBQUksRUFBRSxRQUFpQjs7WUFDbkYsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO2dCQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNwQztZQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQzFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNoRTtZQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixDQUFDO0tBQUE7SUFFWSxlQUFlLENBQUMsS0FBaUIsRUFBRSxHQUFRLEVBQUUsUUFBZ0IsRUFBRSxTQUFpQjs7WUFDM0YsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUN4QixJQUFJLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUU7b0JBQzNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDM0IsT0FBTztpQkFDUjtnQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7b0JBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO29CQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDNUI7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQzthQUNoQztZQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixDQUFDO0tBQUE7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ3JELENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxHQUFRO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUU7WUFDbEIsR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7U0FDeEI7YUFBTTtZQUNMLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQzFELEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3ZCO0lBQ0gsQ0FBQztJQUVNLFVBQVUsQ0FBQyxHQUFRO1FBQ3hCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDN0QsT0FBTyxHQUFHLEtBQUssR0FBRyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFVBQVUsQ0FBQyxHQUFRLEVBQUUsV0FBbUI7UUFDN0MsR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFFdkIsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLFdBQVcsRUFBRTtZQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNwRTthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUM7WUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7U0FDNUI7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4RCxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTFCLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO2dCQUNoQyxPQUFPLENBQUMsQ0FBQzthQUNWO1lBQ0QsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO2dCQUNoQixPQUFPLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQzthQUN2QjtZQUNELElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtnQkFDaEIsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDO2FBQ3RCO1lBRUQseUJBQXlCO1lBQ3pCLE1BQU0sT0FBTyxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0UsTUFBTSxPQUFPLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU3RSxJQUFJLE9BQU8sSUFBSSxPQUFPLEVBQUU7Z0JBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUM7YUFDcEM7WUFFRCwrQkFBK0I7WUFDL0IsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUN4RCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO2FBQzdDO1lBRUQsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU0sY0FBYztRQUNuQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlDLENBQUM7SUFFTSxhQUFhO1FBQ2xCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFaEMsTUFBTSxVQUFVLEdBQWEsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RSxNQUFNLE9BQU8sR0FBbUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsRSxPQUFPLENBQUM7Z0JBQ04sR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNqQixNQUFNLEVBQUUsTUFBTSxDQUFDLFVBQVU7YUFDMUIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNoQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLElBQUksS0FBSyxZQUFZLElBQUksRUFBRTtnQkFDekIsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEQsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDcEQsT0FBTyxHQUFHLEdBQUcsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7YUFDbEM7aUJBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQ3BDLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25ELE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hFO2lCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDL0IsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3pCO2lCQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7Z0JBQ3RELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM5QjtpQkFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsRUFBRTtnQkFDckMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEtBQUs7b0JBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQzVELE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDckUsT0FBTyxHQUFHLEdBQUcsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7aUJBQ2xDO2dCQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3RCO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLG1EQUFtRDtRQUNuRCwrREFBK0Q7UUFDL0Qsa0JBQWtCO1FBRWxCLE1BQU0sVUFBVSxHQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ3RELEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FDN0UsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFZixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLHlCQUF5QixFQUFDLENBQUMsQ0FBQztRQUN2RSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEMseUNBQXlDO1FBQ3pDLGVBQWU7UUFDZixhQUFhO1FBQ2Isa0JBQWtCO1FBQ2xCLGFBQWE7UUFDYixLQUFLO0lBQ1AsQ0FBQztJQUVPLDBCQUEwQixDQUFDLEtBQVU7UUFDM0MsTUFBTSxlQUFlLEdBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDNUUsT0FBTyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDaEYsQ0FBQztJQUVTLGNBQWMsQ0FBQyxHQUFRLEVBQUUsS0FBYTtRQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8sY0FBYztRQUNwQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDOUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssd0JBQXdCLENBQUMsSUFBYSxFQUFFLFFBQWdCLENBQUMsQ0FBQztRQUNoRSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBaUIsRUFBRSxNQUFnQixFQUFFLEVBQUU7WUFDekQsTUFBTSxrQkFBa0IsR0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUNoRixNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxJQUFJLFdBQVcsSUFBSSxrQkFBa0IsRUFBRTtnQkFDckMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO3FCQUN4QixJQUFJLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtvQkFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7b0JBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekMsQ0FBQyxDQUFDO3FCQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNYLE1BQU0sRUFBRSxDQUFDO2dCQUNYLENBQUMsQ0FBQyxDQUFDO2FBQ047aUJBQU0sSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFO2dCQUMxQixJQUFJLENBQUMsd0JBQXdCLEVBQUU7cUJBQzVCLElBQUksQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFO29CQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFDMUIsT0FBTyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDLENBQUM7cUJBQ0QsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ1gsTUFBTSxFQUFFLENBQUM7Z0JBQ1gsQ0FBQyxDQUFDLENBQUM7YUFDTjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbkc7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxLQUFhO1FBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQVcsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0JBQzdCLE9BQU8sQ0FBQyxDQUFDO2FBQ1Y7U0FDRjtJQUNILENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxLQUFhO1FBQzdDLEtBQUssSUFBSSxDQUFDLEdBQVcsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUM3QixPQUFPLENBQUMsQ0FBQzthQUNWO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFpQixFQUFFLE1BQWdCLEVBQUUsRUFBRTtZQUN6RCxJQUFJLFdBQVcsR0FBVyxDQUFDLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDN0MsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNuQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ2pCLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2lCQUNqQztxQkFBTTtvQkFDTCxXQUFXLEdBQUcsQ0FBQyxDQUFDO2lCQUNqQjthQUNGO2lCQUFNO2dCQUNMLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQzthQUNyQztZQUNELElBQUksV0FBVyxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxpREFBaUQ7Z0JBQ3hGLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUN4QyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ3RCO3FCQUFNO29CQUNMLE1BQU0sRUFBRSxDQUFDO2lCQUNWO2FBQ0Y7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ3RCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFpQixFQUFFLE1BQWdCLEVBQUUsRUFBRTtZQUN6RCxJQUFJLFdBQVcsR0FBVyxDQUFDLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzdCLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDcEM7aUJBQU07Z0JBQ0wsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO2FBQ3JDO1lBQ0QsSUFBSSxXQUFXLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLGlEQUFpRDtnQkFDeEYsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3hDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDdEI7cUJBQU07b0JBQ0wsTUFBTSxFQUFFLENBQUM7aUJBQ1Y7YUFDRjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDdEI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxRQUFRLENBQUMsY0FBdUIsSUFBSTtRQUMxQyxpQkFBaUI7UUFDakIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNuQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO1FBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVNLFlBQVk7UUFDakIsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVNLGNBQWMsQ0FBQyxJQUFZO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7OztZQXZ0QkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwS1Q7Z0JBQ0QsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUM7Z0JBQzlCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN0Qzs7O1lBbkxPLGdCQUFnQjtZQVp0QixpQkFBaUI7WUFRWCxpQkFBaUI7WUFLakIsa0JBQWtCOzs7MEJBc0x2QixZQUFZLFNBQUMsWUFBWTtzQkFPekIsS0FBSzt5QkFHTCxLQUFLOzhCQUdMLEtBQUs7MkJBR0wsS0FBSzsrQkFHTCxLQUFLOzBCQUdMLEtBQUs7NEJBR0wsS0FBSzs2QkFHTCxLQUFLO2dDQU1MLEtBQUs7d0JBR0wsV0FBVyxTQUFDLHNCQUFzQjs0QkFLbEMsWUFBWSxTQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGb3JtTWFzdGVyU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlL2Zvcm0tbWFzdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Jhc2VTaW1wbGVHcmlkQ29tcG9uZW50fSBmcm9tICcuL2Jhc2Utc2ltcGxlLWdyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHtDb2x1bW5BbGlnbn0gZnJvbSAnLi9zaW1wbGUtZ3JpZC1jb2x1bW4uZGlyZWN0aXZlJztcclxuaW1wb3J0IHtDb3JlQ29tcG9uZW50c0ljb259IGZyb20gJy4uLy4uL2NvcmUvZW51bS9jb3JlLWNvbXBvbmVudHMtaWNvbi5lbnVtJztcclxuaW1wb3J0IHtJY29uQ2FjaGVTZXJ2aWNlfSBmcm9tICcuLi9pY29uL2ljb24tY2FjaGUuc2VydmljZSc7XHJcbmltcG9ydCB7RXhjZWxFeHBvcnRTZXJ2aWNlLCBFeHBvcnRDb2x1bW59IGZyb20gJy4uLy4uL3NlcnZpY2UvZXhjZWwtZXhwb3J0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjby1zaW1wbGUtZ3JpZCcsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgICAgPGNvLWdyaWQtdG9vbGJhclxyXG4gICAgICAgICAgICAgICpuZ0lmPVwic2hvd1Rvb2xiYXJcIiBbY2xhc3MucmlnaHRdPVwicmlnaHRUb29sYmFyXCJcclxuICAgICAgICAgICAgICBbc2hvd0VkaXRdPVwic2hvd0VkaXRcIlxyXG4gICAgICAgICAgICAgIFtzaG93QWRkXT1cInNob3dBZGRcIlxyXG4gICAgICAgICAgICAgIFtzaG93RGVsZXRlXT1cInNob3dEZWxldGVcIlxyXG4gICAgICAgICAgICAgIFtkZWxldGVFbmFibGVkXT1cInNlbGVjdGVkUm93SW5kZXggPiAtMVwiXHJcbiAgICAgICAgICAgICAgKGFkZENsaWNrKT1cImFkZE5ld1JvdygpXCJcclxuICAgICAgICAgICAgICAoZWRpdENsaWNrKT1cImVkaXRSb3coJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgKHNhdmVDbGljayk9XCJ2YWxpZGF0ZUFuZFNhdmUoKVwiXHJcbiAgICAgICAgICAgICAgKGNhbmNlbENsaWNrKT1cImNhbmNlbEVkaXRSb3coKVwiXHJcbiAgICAgICAgICAgICAgKGRlbGV0ZUNsaWNrKT1cInJlbW92ZVJvdygpXCI+XHJcbiAgICAgIDwvY28tZ3JpZC10b29sYmFyPlxyXG5cclxuICAgICAgPHRhYmxlXHJcbiAgICAgICAgICAgICAgaWQ9XCJzaW1wbGUtZ3JpZC10YWJsZVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzaW1wbGUtZ3JpZC10YWJsZVwiXHJcbiAgICAgICAgICAgICAgW2NsaWNrT3V0c2lkZV09XCJlZGl0aW5nXCJcclxuICAgICAgICAgICAgICAoY2xpY2tPdXRzaWRlKT1cImhhbmRsZUNsaWNrT3V0c2lkZVJvdygpXCI+XHJcbiAgICAgICAgICA8Y29sZ3JvdXA+XHJcbiAgICAgICAgICAgICAgPGNvbFxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBoZWFkZXJDb2x1bW5zQ29weTsgbGV0IGluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNpbXBsZS1ncmlkLWNvbHVtbi1hdXRvLWZpdF09XCJjb2x1bW4uYXV0b0ZpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiTUlOX0NPTFVNTl9XSURUSFwiPlxyXG4gICAgICAgICAgPC9jb2xncm91cD5cclxuICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICA8dGhcclxuICAgICAgICAgICAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICNoZWFkZXJDZWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNpbXBsZS1ncmlkLWNvbHVtbi1oZWFkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBoZWFkZXJDb2x1bW5zQ29weTsgbGV0IGluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2ltcGxlLWdyaWQtY29sdW1uLWhlYWRlci13cmFwcGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVzaXphYmxlXT1cInJlc2l6YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImNvbHVtbi5pc1NlbGVjdGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4udGV4dEFsaWduID8gY29sdW1uLnRleHRBbGlnbiA6IGRlZmF1bHRUZXh0QWxpZ25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGU7IGVsc2Ugbm9IZWFkZXJUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9IZWFkZXJUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNpbXBsZS1ncmlkLWNvbHVtbi1oZWFkZXItbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLnRleHRBbGlnbiA/IGNvbHVtbi50ZXh0QWxpZ24gOiBkZWZhdWx0VGV4dEFsaWduXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy53aXRoLW1lbnVdPVwic2hvd0dyaWRTZXR0aW5nc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mud2l0aC1zb3J0XT1cInNob3dDb2x1bW5Tb3J0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJjb2x1bW4uaGVhZGVyVGV4dCB8fCAnJm5ic3A7J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0NvbHVtblNvcnQgPyBzb3J0Q29sdW1uKGNvbHVtbiwgY29sdW1uLmZpZWxkKSA6IHRvZ2dsZUNvbHVtbk1lbnUoY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic29ydC1jb2x1bW5cIiAqbmdJZj1cInNob3dDb2x1bW5Tb3J0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic29ydENvbHVtbihjb2x1bW4sIGNvbHVtbj8uZmllbGQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbnMuZ2V0SWNvbihJY29ucy5BcnJvd1VwQXJyb3dEb3duKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1tZW51XCIgKm5nSWY9XCJjb2x1bW4uaXNTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgW3RleHRDb250ZW50XT1cIidDT0xVTU5fT1BUSU9OUycgfCBjb3JlTG9jYWxpemVcIj48L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cImhpZGVDb2x1bW4oY29sdW1uKVwiPkhpZGUgQ29sdW1uPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwic29ydENvbHVtbihjb2x1bW4sIGNvbHVtbi5maWVsZClcIj5Tb3J0IENvbHVtbjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJlc2l6YWJsZSAmJiBjb2x1bW4ucmVzaXphYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaW1wbGUtZ3JpZC1jb2x1bW4tc2l6ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cImhhbmRsZVNpemVyTW91c2VEb3duKCRldmVudCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93R3JpZFNldHRpbmdzXCIgY2xhc3M9XCJncmlkLXNldHRpbmdzXCI+XHJcbiAgICAgICAgICAgICAgPGNvLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzU2V0dGluZ3NNZW51T3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbnMuZ2V0SWNvbihJY29ucy5Db2dXaGVlbHMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZXR0aW5nc01lbnUoKVwiPlxyXG4gICAgICAgICAgICAgIDwvY28tYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2V0dGluZ3MtbWVudVwiICpuZ0lmPVwiaXNTZXR0aW5nc01lbnVPcGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxoMyBbdGV4dENvbnRlbnRdPVwiJ0dSSURfT1BUSU9OUycgfCBjb3JlTG9jYWxpemVcIj48L2gzPlxyXG4gICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cImV4cG9ydFRvRXhjZWwoKVwiPkV4cG9ydCB0byBFeGNlbDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJoZWFkZXJDb2x1bW5zQ29weS5sZW5ndGggIT09IGhlYWRlckNvbHVtbnMubGVuZ3RoXCIgKGNsaWNrKT1cInNob3dBbGxDb2x1bW5zKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBTaG93IEFsbCBDb2x1bW5zXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgPHRib2R5XHJcbiAgICAgICAgICAgICAgICAgICNkcm9wTGlzdCBjZGtEcm9wTGlzdCBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwidmVydGljYWxcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNpbXBsZS1ncmlkLWRyYWctZHJvcC1saXN0XCJcclxuICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiIWRyYWdEcm9wRW5hYmxlZCB8fCBlZGl0aW5nXCJcclxuICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJkYXRhXCJcclxuICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RW50ZXJQcmVkaWNhdGVdPVwiaGFuZGxlQ2FuRHJhZ0Ryb3BcIlxyXG4gICAgICAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImhhbmRsZURyb3AoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPGNvLWZvcm0gY2xhc3M9XCJzaW1wbGUtZ3JpZC1yb3ctZm9ybVwiPlxyXG4gICAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaW1wbGUtZ3JpZC1yb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cInJvd0luZGV4ID09PSBzZWxlY3RlZFJvd0luZGV4ICYmICFlZGl0aW5nXCIgb2JzZXJ2ZVZpc2liaWxpdHlcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJnZXRJc1Jvd0Rpc2FibGVkKHJvd0luZGV4KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZWRpdGluZ109XCJyb3dJbmRleCA9PT0gZWRpdFJvd0luZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2YgKCEhcm93c1BlclBhZ2UgPyAoZGF0YSB8IHBhZ2luYXRlOiB7aXRlbXNQZXJQYWdlOiByb3dzUGVyUGFnZSwgY3VycmVudFBhZ2U6IGN1cnJlbnRQYWdlfSkgOiBkYXRhKTsgbGFzdCBhcyBsYXN0OyBsZXQgcm93SW5kZXggPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjZGtEcmFnXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2tSb3coJGV2ZW50LCByb3dJbmRleCwgcm93KVwiIChkYmxjbGljayk9XCJoYW5kbGVEYmxDbGlja1JvdygkZXZlbnQsIHJvd0luZGV4LCByb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICh2aXNpYmlsaXR5Q2hhbmdlKT1cInJvd1Zpc2libGUubmV4dChyb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImhvdmVyZWRSb3dJbmRleCA9IHJvd0luZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImhvdmVyZWRSb3dJbmRleCA9IC0xXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1NpbmdsZUNvbHVtblJvdyhyb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzaW1wbGUtZ3JpZC1zaW5nbGUtY29sdW1uLWNlbGxcIiBbYXR0ci5jb2xzcGFuXT1cImhlYWRlckNvbHVtbnNDb3B5Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jZWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtbnNbc2luZ2xlQ29sdW1uSW5kZXgocm93KV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRNb2RlXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jby1zaW1wbGUtZ3JpZC1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNTaW5nbGVDb2x1bW5Sb3cocm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGhlYWRlckNvbHVtbnNDb3B5OyBsZXQgY29sdW1uSW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNpbXBsZS1ncmlkLWNvbHVtbi1jZWxsXCIgKm5nSWY9XCJjb2x1bW5JbmRleCAhPT0gc2luZ2xlQ29sdW1uSW5kZXgocm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY2VsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRNb2RlXT1cImlubGluZUVkaXQgJiYgZWRpdGluZyAmJiByb3dJbmRleCA9PT0gZWRpdFJvd0luZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRFZGl0TW9kZV09XCJlZGl0Q2VsbEluZGV4ID09PSBjb2x1bW5JbmRleCAmJiByb3dJbmRleCA9PT0gZWRpdFJvd0luZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2VsbENsaWNrKT1cImhhbmRsZUNlbGxDbGljaygkZXZlbnQsIHJvdywgcm93SW5kZXgsIGNvbHVtbkluZGV4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvLXNpbXBsZS1ncmlkLWNlbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4ucmVzaXphYmxlXCIgY2xhc3M9XCJzaW1wbGUtZ3JpZC1jb2x1bW4tc2l6ZXItcGxhY2Vob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5saW5lRWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29ucy1jb250YWluZXJcIiAqbmdJZj1cIiFlZGl0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjby1pY29uIGNsYXNzPVwiaWNvbi1pdGVtIGljb24tZWRpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29ucy5nZXRJY29uKEljb25zLlBlblRvU3F1YXJlU29saWQpXCIgKm5nSWY9XCJob3ZlcmVkUm93SW5kZXggPT09IHJvd0luZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRSb3coJGV2ZW50LCB0cnVlLCByb3dJbmRleCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPjwvY28taWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWljb24gY2xhc3M9XCJpY29uLWl0ZW0gaWNvbi1kZWxldGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbnMuZ2V0SWNvbihJY29ucy5UcmFzaEJpbilcIiAqbmdJZj1cImhvdmVyZWRSb3dJbmRleCA9PT0gcm93SW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUm93KClcIj48L2NvLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb25zLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y28tYnV0dG9uIGNsYXNzPVwic2F2ZS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZWRpdGluZyAmJiAoc2VsZWN0ZWRSb3dJbmRleCA9PT0gcm93SW5kZXggfHwgKGlzTmV3Um93ICYmIHJvd0luZGV4ID09PSBlZGl0Um93SW5kZXgpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25zLmdldEljb24oSWNvbnMuQ2hlY2tEdW90b25lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZhbGlkYXRlQW5kU2F2ZSgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj48L2NvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWJ1dHRvbiBjbGFzcz1cImNsb3NlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJlZGl0aW5nICYmIChzZWxlY3RlZFJvd0luZGV4ID09PSByb3dJbmRleCB8fCAoaXNOZXdSb3cgJiYgcm93SW5kZXggPT09IGVkaXRSb3dJbmRleCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbnMuZ2V0SWNvbihJY29ucy5Dcm9zc1NraW5ueSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxFZGl0Um93KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKSBcIj48L2NvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC9jby1mb3JtPlxyXG4gICAgICAgICAgPC90Ym9keT5cclxuICAgICAgPC90YWJsZT5cclxuICAgICAgPGNvLXBhZ2luYXRpb24tYmFyXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhPy5sZW5ndGggPiByb3dzUGVyUGFnZVwiIGNsYXNzPVwicGFnaW5hdGlvbi1iYXJcIlxyXG4gICAgICAgICAgICAgIFtpdGVtc1BlclBhZ2VdPVwicm93c1BlclBhZ2VcIlxyXG4gICAgICAgICAgICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiXHJcbiAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwiZGF0YS5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgIFthdXRvSGlkZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAocHJldmlvdXNDbGljayk9XCJnb1RvUHJldmlvdXNQYWdlKClcIlxyXG4gICAgICAgICAgICAgIChuZXh0Q2xpY2spPVwiZ29Ub05leHRQYWdlKClcIlxyXG4gICAgICAgICAgICAgIChwYWdlQ2xpY2spPVwic2V0Q3VycmVudFBhZ2UoJGV2ZW50KVwiPlxyXG4gICAgICA8L2NvLXBhZ2luYXRpb24tYmFyPlxyXG4gIGAsXHJcbiAgcHJvdmlkZXJzOiBbRm9ybU1hc3RlclNlcnZpY2VdLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIFNpbXBsZUdyaWRDb21wb25lbnQgZXh0ZW5kcyBCYXNlU2ltcGxlR3JpZENvbXBvbmVudCB7XHJcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRUZXh0QWxpZ246IENvbHVtbkFsaWduID0gQ29sdW1uQWxpZ24uTGVmdDtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignaGVhZGVyQ2VsbCcpIHNldCBoZWFkZXJDZWxscyhjZWxscykge1xyXG4gICAgY29uc3QgaGVhZGVyRWxlbWVudHMgPSBjZWxscy50b0FycmF5KCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlckVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuY29sdW1uc1tpXS5lbGVtZW50UmVmID0gaGVhZGVyRWxlbWVudHNbaV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzaG93QWRkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNob3dEZWxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZWRpdE9uQ2VsbENsaWNrOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcmlnaHRUb29sYmFyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNob3dHcmlkU2V0dGluZ3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcm93c1BlclBhZ2U6IG51bWJlciA9IDUwO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByb3dEaXNhYmxlZEZuOiBGdW5jdGlvbjtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2hvd0NvbHVtblNvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUHJvbWlzZSBmdW5jdGlvbiwgaWYgcHJvdmlkZWQgc2hvdWxkIHJldHVybiBib29sZWFuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY2FuUm93QmVFZGl0dGVkRm46IEZ1bmN0aW9uO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvLXNpbXBsZS1ncmlkJylcclxuICBwdWJsaWMgc2hvd0NsYXNzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBwdWJsaWMgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlubGluZUVkaXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudC5jb2RlID09PSAnVGFiJykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLl9uZXh0QXZhaWxhYmxlQ2VsbFRvRWRpdCghZXZlbnQuc2hpZnRLZXksIHRoaXMuZWRpdENlbGxJbmRleClcclxuICAgICAgICAudGhlbigoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5lZGl0Q2VsbEluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb24ubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgdGhpcy5jYW5jZWxFZGl0Um93KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09ICdFbnRlcicpIHtcclxuICAgICAgdGhpcy52YWxpZGF0ZUFuZFNhdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzU2V0dGluZ3NNZW51T3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBlZGl0Um93SW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIHB1YmxpYyBlZGl0Q2VsbEluZGV4OiBudW1iZXIgPSAtMTtcclxuICBwdWJsaWMgc2VsZWN0ZWRSb3dJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgcHVibGljIHJvd1RvRWRpdDogYW55O1xyXG4gIHB1YmxpYyBjdXJyZW50UGFnZTogbnVtYmVyID0gMTtcclxuICBwdWJsaWMgc29ydENvbHVtblZhbHVlOiBzdHJpbmc7XHJcbiAgcHVibGljIHNvcnREaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnID0gJ2FzYyc7XHJcbiAgcHVibGljIGhvdmVyZWRSb3dJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgcHVibGljIHJlYWRvbmx5IEljb25zID0gQ29yZUNvbXBvbmVudHNJY29uO1xyXG5cclxuICBwcml2YXRlIF9kb3VibGVDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfbmV3Um93OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGljb25zOiBJY29uQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX2Zvcm1NYXN0ZXI6IEZvcm1NYXN0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBleGNlbEV4cG9ydFNlcnZpY2U6IEV4Y2VsRXhwb3J0U2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuZGF0YUNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVDbGlja091dHNpZGVSb3coKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbGlkYXRlQW5kU2F2ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElzUm93RGlzYWJsZWQoaWR4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRpc2FibGVkUm93cy5pbmRleE9mKGlkeCkgPiAtMTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpc1Jvd0Rpc2FibGVkKHJvdzogYW55LCBpbmRleDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAodGhpcy5yb3dEaXNhYmxlZEZuICYmICh0eXBlb2YgdGhpcy5yb3dEaXNhYmxlZEZuID09PSAnZnVuY3Rpb24nKSkge1xyXG4gICAgICBjb25zdCBkaXNhYmxlZCA9IGF3YWl0IHRoaXMucm93RGlzYWJsZWRGbi5jYWxsKHRoaXMsIHJvdyk7XHJcbiAgICAgIGNvbnN0IGlkeFJvdzogbnVtYmVyID0gdGhpcy5kaXNhYmxlZFJvd3MuaW5kZXhPZihpbmRleCk7XHJcbiAgICAgIGlmIChkaXNhYmxlZCkge1xyXG4gICAgICAgIGlmIChpZHhSb3cgPCAwKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVkUm93cy5wdXNoKGluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGlkeFJvdyA+IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVkUm93cy5zcGxpY2UoaWR4Um93LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGRpc2FibGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFkZE5ld1JvdygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmlubGluZUVkaXQpIHtcclxuICAgICAgY29uc3QgdmFsaWQ6IGJvb2xlYW4gPSB0aGlzLnZhbGlkYXRlQW5kU2F2ZSgpO1xyXG4gICAgICAvLyB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIGlmICh2YWxpZCkge1xyXG4gICAgICAgIHRoaXMuZGF0YS5wdXNoKHt9KTtcclxuICAgICAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy5fbmV3Um93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVkaXRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5yb3dzUGVyUGFnZSAmJiB0aGlzLmRhdGEubGVuZ3RoID4gdGhpcy5yb3dzUGVyUGFnZSkge1xyXG4gICAgICAgICAgLy8gbmF2aWdhdGUgdG8gdGhlIGxhc3QgcGFnZSB0byB0aGUgbmV3IHJvd1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IE1hdGguY2VpbCh0aGlzLmRhdGEubGVuZ3RoIC8gdGhpcy5yb3dzUGVyUGFnZSk7XHJcbiAgICAgICAgICAvLyBzZWxlY3QgbmV3IHJvd1xyXG4gICAgICAgICAgY29uc3QgYWJzb2x1dGVJbmRleDogbnVtYmVyID0gdGhpcy5kYXRhLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnJvd3NQZXJQYWdlID8gKGFic29sdXRlSW5kZXggLSAoKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMucm93c1BlclBhZ2UpKSA6IGFic29sdXRlSW5kZXg7XHJcbiAgICAgICAgICB0aGlzLmVkaXRSb3cobnVsbCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZWRpdFJvd0luZGV4ID0gdGhpcy5kYXRhLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICB0aGlzLnJvd1RvRWRpdCA9IHRoaXMuZGF0YVt0aGlzLmVkaXRSb3dJbmRleF07XHJcbiAgICAgICAgICB0aGlzLmVkaXRDZWxsSW5kZXggPSBhd2FpdCB0aGlzLl9uZXh0QXZhaWxhYmxlQ2VsbFRvRWRpdCh0cnVlKTtcclxuICAgICAgICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWRkUm93Lm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB2YWxpZGF0ZUFuZFNhdmUoc3RvcGVkaXRpbmc6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZWRpdGluZykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbGlkOiBib29sZWFuID0gdGhpcy5fZm9ybU1hc3Rlci5zdWJtaXRTbGF2ZXMoKTtcclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICB0aGlzLl9zYXZlUm93KHN0b3BlZGl0aW5nKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsRWRpdFJvdygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5lZGl0aW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9uZXdSb3cpIHtcclxuICAgICAgdGhpcy5kYXRhLnNwbGljZSh0aGlzLmRhdGEubGVuZ3RoIC0gMSwgMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRhdGFbdGhpcy5lZGl0Um93SW5kZXhdID0gdGhpcy5yb3dUb0VkaXQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yZXNldEVkaXQoKTtcclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVSb3coKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlbGV0ZVJvdy5uZXh0KHRoaXMuZGF0YVt0aGlzLnNlbGVjdGVkUm93SW5kZXhdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVDbGlja1JvdyhldmVudDogTW91c2VFdmVudCwgaW5kZXg6IG51bWJlciwgcm93OiBhbnkpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5fZG91YmxlQ2xpY2tlZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdFRoZVJvdyhpbmRleCk7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFRoZVJvdyhpbmRleDogbnVtYmVyLCBlbWl0OiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9PT0gLTEgfHwgKHRoaXMuc2VsZWN0ZWRSb3dJbmRleCAhPT0gaW5kZXggJiYgKCh0aGlzLmVkaXRpbmcgJiYgdGhpcy52YWxpZGF0ZUFuZFNhdmUoKSkgfHwgIXRoaXMuZWRpdGluZykpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IGluZGV4O1xyXG4gICAgfVxyXG4gICAgaWYgKGVtaXQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RSb3cubmV4dCh0aGlzLmRhdGFbdGhpcy5zZWxlY3RlZFJvd0luZGV4XSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaGFuZGxlRGJsQ2xpY2tSb3coZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIsIHJvdzogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoYXdhaXQgdGhpcy5pc1Jvd0Rpc2FibGVkKHJvdywgaW5kZXgpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IC0xO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgY2FuRWRpdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5jYW5Sb3dCZUVkaXR0ZWRGbiAmJiB0eXBlb2YgdGhpcy5jYW5Sb3dCZUVkaXR0ZWRGbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjYW5FZGl0ID0gYXdhaXQgdGhpcy5jYW5Sb3dCZUVkaXR0ZWRGbi5jYWxsKHRoaXMsIHJvdyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2FuRWRpdCkge1xyXG4gICAgICB0aGlzLl9kb3VibGVDbGlja2VkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5kYmxDbGlja1Jvdy5uZXh0KHRoaXMuZGF0YVtpbmRleF0pO1xyXG4gICAgICB0aGlzLnNlbGVjdFRoZVJvdyhpbmRleCwgZmFsc2UpO1xyXG4gICAgICBpZiAodGhpcy5pbmxpbmVFZGl0KSB7XHJcbiAgICAgICAgdGhpcy5lZGl0Um93KGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fcmVzZXREYmxDbGljaygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGVkaXRSb3coZXZlbnQ6IE1vdXNlRXZlbnQsIHNlbGVjdENlbGw6IGJvb2xlYW4gPSB0cnVlLCByb3dJbmRleD86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RUaGVSb3cocm93SW5kZXgsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVkaXRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleDtcclxuICAgIHRoaXMucm93VG9FZGl0ID0gdGhpcy5kYXRhW3RoaXMuZWRpdFJvd0luZGV4XTtcclxuICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XHJcbiAgICBpZiAoc2VsZWN0Q2VsbCkge1xyXG4gICAgICB0aGlzLmVkaXRDZWxsSW5kZXggPSBhd2FpdCB0aGlzLl9uZXh0QXZhaWxhYmxlQ2VsbFRvRWRpdCh0cnVlKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVDZWxsQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyLCBjZWxsSW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuZWRpdE9uQ2VsbENsaWNrKSB7XHJcbiAgICAgIGlmIChhd2FpdCB0aGlzLmlzUm93RGlzYWJsZWQocm93LCByb3dJbmRleCkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAtMTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWxlY3RUaGVSb3cocm93SW5kZXgsIGZhbHNlKTtcclxuICAgICAgaWYgKHRoaXMuaW5saW5lRWRpdCkge1xyXG4gICAgICAgIHRoaXMuZWRpdFJvd0luZGV4ID0gcm93SW5kZXg7XHJcbiAgICAgICAgdGhpcy5lZGl0Q2VsbEluZGV4ID0gY2VsbEluZGV4O1xyXG4gICAgICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lZGl0Um93KGV2ZW50LCBmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZWRpdENlbGxJbmRleCA9IGNlbGxJbmRleDtcclxuICAgIH1cclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVTZXR0aW5nc01lbnUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmhlYWRlckNvbHVtbnNDb3B5LmZvckVhY2goaSA9PiBpLmlzU2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICB0aGlzLmlzU2V0dGluZ3NNZW51T3BlbiA9ICF0aGlzLmlzU2V0dGluZ3NNZW51T3BlbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVDb2x1bW5NZW51KGNvbDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2hvd0dyaWRTZXR0aW5ncykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc1NldHRpbmdzTWVudU9wZW4gPSBmYWxzZTtcclxuICAgIGlmIChjb2wuaXNTZWxlY3RlZCkge1xyXG4gICAgICBjb2wuaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oZWFkZXJDb2x1bW5zQ29weS5mb3JFYWNoKGkgPT4gaS5pc1NlbGVjdGVkID0gZmFsc2UpO1xyXG4gICAgICBjb2wuaXNTZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlkZUNvbHVtbihjb2w6IGFueSk6IHZvaWQge1xyXG4gICAgY29sLmlzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaGVhZGVyQ29sdW1uc0NvcHkgPSB0aGlzLmhlYWRlckNvbHVtbnNDb3B5LmZpbHRlcigob2JqKSA9PiB7XHJcbiAgICAgIHJldHVybiBvYmogIT09IGNvbDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNvcnRDb2x1bW4oY29sOiBhbnksIGNvbHVtblZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbC5pc1NlbGVjdGVkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuc29ydENvbHVtblZhbHVlID09PSBjb2x1bW5WYWx1ZSkge1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNvcnRDb2x1bW5WYWx1ZSA9IGNvbHVtblZhbHVlO1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAnYXNjJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xO1xyXG5cclxuICAgIGNvbnN0IHNvcnRlZCA9IFsuLi50aGlzLmRhdGFdLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgbGV0IHZhbEEgPSBhW2NvbHVtblZhbHVlXTtcclxuICAgICAgbGV0IHZhbEIgPSBiW2NvbHVtblZhbHVlXTtcclxuXHJcbiAgICAgIGlmICh2YWxBID09IG51bGwgJiYgdmFsQiA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHZhbEEgPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiAtMSAqIGRpcmVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodmFsQiA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIDEgKiBkaXJlY3Rpb247XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEhhbmRsZSBJU08gZGF0ZSBzdHJpbmdcclxuICAgICAgY29uc3QgaXNEYXRlQSA9IHR5cGVvZiB2YWxBID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VC8udGVzdCh2YWxBKTtcclxuICAgICAgY29uc3QgaXNEYXRlQiA9IHR5cGVvZiB2YWxCID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VC8udGVzdCh2YWxCKTtcclxuXHJcbiAgICAgIGlmIChpc0RhdGVBICYmIGlzRGF0ZUIpIHtcclxuICAgICAgICBjb25zdCB0aW1lQSA9IG5ldyBEYXRlKHZhbEEpLmdldFRpbWUoKTtcclxuICAgICAgICBjb25zdCB0aW1lQiA9IG5ldyBEYXRlKHZhbEIpLmdldFRpbWUoKTtcclxuICAgICAgICByZXR1cm4gKHRpbWVBIC0gdGltZUIpICogZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBGYWxsYmFjayBmb3IgbnVtYmVycy9zdHJpbmdzXHJcbiAgICAgIGlmICh0eXBlb2YgdmFsQSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbEIgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbEEubG9jYWxlQ29tcGFyZSh2YWxCKSAqIGRpcmVjdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuICh2YWxBID4gdmFsQiA/IDEgOiB2YWxBIDwgdmFsQiA/IC0xIDogMCkgKiBkaXJlY3Rpb247XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRhdGEgPSBzb3J0ZWQ7XHJcbiAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd0FsbENvbHVtbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzU2V0dGluZ3NNZW51T3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5oZWFkZXJDb2x1bW5zQ29weSA9IHRoaXMuaGVhZGVyQ29sdW1ucztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBvcnRUb0V4Y2VsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1NldHRpbmdzTWVudU9wZW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBleHBvcnREYXRhOiBPYmplY3RbXSA9IHRoaXMuX2ZpbHRlclNlbGVjdGVkT3JSZXR1cm5BbGwodGhpcy5kYXRhKTtcclxuICAgIGNvbnN0IGNvbHVtbnM6IEV4cG9ydENvbHVtbltdID0gdGhpcy5oZWFkZXJDb2x1bW5zQ29weS5tYXAoY29sdW1uID0+IHtcclxuICAgICAgcmV0dXJuICh7XHJcbiAgICAgICAga2V5OiBjb2x1bW4uZmllbGQsXHJcbiAgICAgICAgaGVhZGVyOiBjb2x1bW4uaGVhZGVyVGV4dFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGhlYWRlcnMgPSBjb2x1bW5zLm1hcChjb2wgPT4gY29sLmhlYWRlcik7XHJcbiAgICBjb25zdCByb3dzID0gZXhwb3J0RGF0YS5tYXAocm93ID0+XHJcbiAgICAgIGNvbHVtbnMubWFwKGNvbCA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3dbY29sLmtleV07XHJcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IHZhbHVlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcclxuICAgICAgICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IGZvcm1hdHRlZERhdGUuc3BsaXQoJy0nKTtcclxuICAgICAgICAgIHJldHVybiBgJHtkYXl9LSR7bW9udGh9LSR7eWVhcn1gO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgY29uc3QgaGFzRGVjaW1hbCA9IChudW0pID0+ICFOdW1iZXIuaXNJbnRlZ2VyKG51bSk7XHJcbiAgICAgICAgICByZXR1cm4gaGFzRGVjaW1hbCh2YWx1ZSkgPyB2YWx1ZS50b0ZpeGVkKDIpIDogdmFsdWUudG9GaXhlZCgwKTtcclxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUuam9pbignLCAnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcclxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmluY2x1ZGVzKCdUMDA6MDA6MDAnKSkge1xyXG4gICAgICAgICAgICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSB2YWx1ZS5yZXBsYWNlKCdUMDA6MDA6MDAnLCAnJykuc3BsaXQoJy0nKTtcclxuICAgICAgICAgICAgcmV0dXJuIGAke2RheX0tJHttb250aH0tJHt5ZWFyfWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIC8vIGNvbnN0IGNzdkNvbnRlbnQgPSBbaGVhZGVycywgLi4ucm93c10ubWFwKHJvdyA9PlxyXG4gICAgLy8gICByb3cubWFwKGNlbGwgPT4gYFwiJHtjZWxsLnJlcGxhY2UoL1wiL2csICdcIlwiJyl9XCJgKS5qb2luKCcsJylcclxuICAgIC8vICkuam9pbignXFxyXFxuJyk7XHJcblxyXG4gICAgY29uc3QgY3N2Q29udGVudDogc3RyaW5nID0gW2hlYWRlcnMsIC4uLnJvd3NdLm1hcChyb3cgPT5cclxuICAgICAgcm93Lm1hcCgoY2VsbDogc3RyaW5nKSA9PiBgXCIke1N0cmluZyhjZWxsKS5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYCkuam9pbignLCcpXHJcbiAgICApLmpvaW4oJ1xcclxcbicpO1xyXG5cclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHt0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtODsnfSk7XHJcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuXHJcbiAgICBsaW5rLmhyZWYgPSB1cmw7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCAnRXhjZWxTaGVldCcpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcblxyXG4gICAgLy8gdGhpcy5leGNlbEV4cG9ydFNlcnZpY2UuZXhwb3J0VG9FeGNlbChcclxuICAgIC8vICAgdGhpcy5kYXRhLFxyXG4gICAgLy8gICBjb2x1bW5zLFxyXG4gICAgLy8gICAnRXhjZWxTaGVldCcsXHJcbiAgICAvLyAgICdTaGVldDEnXHJcbiAgICAvLyApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmlsdGVyU2VsZWN0ZWRPclJldHVybkFsbChpdGVtczogYW55KSB7XHJcbiAgICBjb25zdCBoYXNTZWxlY3RlZFRydWU6IGJvb2xlYW4gPSBpdGVtcy5zb21lKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCA9PT0gdHJ1ZSk7XHJcbiAgICByZXR1cm4gaGFzU2VsZWN0ZWRUcnVlID8gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCA9PT0gdHJ1ZSkgOiBpdGVtcztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBwcmVwYXJlRGF0YVJvdyhyb3c6IGFueSwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5pc1Jvd0Rpc2FibGVkKHJvdywgaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVzZXREYmxDbGljaygpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9kb3VibGVDbGlja2VkID0gZmFsc2U7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gbmV4dDsgTW92ZSB0byBuZXh0IG9yIHByZXZpb3VzIGNlbGxcclxuICAgKiBAcGFyYW0gc3RhcnQ7IFN0YXJ0IGZyb20gY2VsbGluZGV4XHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIF9uZXh0QXZhaWxhYmxlQ2VsbFRvRWRpdChuZXh0OiBib29sZWFuLCBzdGFydDogbnVtYmVyID0gLTEpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICBjb25zdCBudW1FZGl0YWJsZUNvbHVtbnM6IG51bWJlciA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5yZWFkb25seSkubGVuZ3RoO1xyXG4gICAgICBjb25zdCB3YW50ZWRJbmRleCA9IHN0YXJ0ICsgKG5leHQgPyAxIDogLTEpO1xyXG4gICAgICBpZiAod2FudGVkSW5kZXggPj0gbnVtRWRpdGFibGVDb2x1bW5zKSB7XHJcbiAgICAgICAgdGhpcy5fZ2V0TmV4dEVkaXRSb3dJbmRleCgpXHJcbiAgICAgICAgICAudGhlbigoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRSb3dJbmRleCA9IGluZGV4O1xyXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMuX2dldE5leHRFZGl0Q2VsbEluZGV4KDApKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmICh3YW50ZWRJbmRleCA8IDApIHtcclxuICAgICAgICB0aGlzLl9nZXRQcmV2aW91c0VkaXRSb3dJbmRleCgpXHJcbiAgICAgICAgICAudGhlbigoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRSb3dJbmRleCA9IGluZGV4O1xyXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMuX2dldFByZXZpb3VzRWRpdENlbGxJbmRleCh0aGlzLmNvbHVtbnMubGVuZ3RoIC0gMSkpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc29sdmUobmV4dCA/IHRoaXMuX2dldE5leHRFZGl0Q2VsbEluZGV4KHN0YXJ0ICsgMSkgOiB0aGlzLl9nZXRQcmV2aW91c0VkaXRDZWxsSW5kZXgoc3RhcnQgLSAxKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0TmV4dEVkaXRDZWxsSW5kZXgoc3RhcnQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSBzdGFydDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoIXRoaXMuY29sdW1uc1tpXS5yZWFkb25seSkge1xyXG4gICAgICAgIHJldHVybiBpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRQcmV2aW91c0VkaXRDZWxsSW5kZXgoc3RhcnQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgaWYgKCF0aGlzLmNvbHVtbnNbaV0ucmVhZG9ubHkpIHtcclxuICAgICAgICByZXR1cm4gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0TmV4dEVkaXRSb3dJbmRleCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICBsZXQgbmV3Um93SW5kZXg6IG51bWJlciA9IDA7XHJcbiAgICAgIGlmICh0aGlzLmVkaXRSb3dJbmRleCArIDEgPj0gdGhpcy5kYXRhLmxlbmd0aCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9BZGRSb3cpIHtcclxuICAgICAgICAgIHRoaXMuYWRkTmV3Um93KCk7XHJcbiAgICAgICAgICBuZXdSb3dJbmRleCA9IHRoaXMuZWRpdFJvd0luZGV4O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuZXdSb3dJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld1Jvd0luZGV4ID0gdGhpcy5lZGl0Um93SW5kZXggKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChuZXdSb3dJbmRleCAhPT0gdGhpcy5lZGl0Um93SW5kZXgpIHsgLy8gZ28gdG8gZGlmZmVyZW50IHJvdyB2YWxpZGF0ZSBjdXJyZW50IG9uZSBmaXJzdFxyXG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRlQW5kU2F2ZShmYWxzZSkpIHtcclxuICAgICAgICAgIHRoaXMucm93VG9FZGl0ID0gdGhpcy5kYXRhW25ld1Jvd0luZGV4XTtcclxuICAgICAgICAgIHJlc29sdmUobmV3Um93SW5kZXgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzb2x2ZShuZXdSb3dJbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0UHJldmlvdXNFZGl0Um93SW5kZXgoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgbGV0IG5ld1Jvd0luZGV4OiBudW1iZXIgPSAwO1xyXG4gICAgICBpZiAodGhpcy5lZGl0Um93SW5kZXggLSAxIDwgMCkge1xyXG4gICAgICAgIG5ld1Jvd0luZGV4ID0gdGhpcy5kYXRhLmxlbmd0aCAtIDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3Um93SW5kZXggPSB0aGlzLmVkaXRSb3dJbmRleCAtIDE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5ld1Jvd0luZGV4ICE9PSB0aGlzLmVkaXRSb3dJbmRleCkgeyAvLyBnbyB0byBkaWZmZXJlbnQgcm93IHZhbGlkYXRlIGN1cnJlbnQgb25lIGZpcnN0XHJcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVBbmRTYXZlKGZhbHNlKSkge1xyXG4gICAgICAgICAgdGhpcy5yb3dUb0VkaXQgPSB0aGlzLmRhdGFbbmV3Um93SW5kZXhdO1xyXG4gICAgICAgICAgcmVzb2x2ZShuZXdSb3dJbmRleCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXNvbHZlKG5ld1Jvd0luZGV4KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zYXZlUm93KHN0b3BlZGl0aW5nOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgLy8gZW1pdCBzYXZlRXZlbnRcclxuICAgIGlmICh0aGlzLnJvd1RvRWRpdCkge1xyXG4gICAgICB0aGlzLnNhdmVSb3cubmV4dCh0aGlzLnJvd1RvRWRpdCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9uZXdSb3cgPSBmYWxzZTtcclxuICAgIGlmIChzdG9wZWRpdGluZykge1xyXG4gICAgICB0aGlzLl9yZXNldEVkaXQoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnb1RvUHJldmlvdXNQYWdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSAtPSAxO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdvVG9OZXh0UGFnZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgKz0gMTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDdXJyZW50UGFnZShwYWdlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NoYW5nZURldGVjdGlvbi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXNldEVkaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9uZXdSb3cgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5lZGl0Um93SW5kZXggPSAtMTtcclxuICAgIHRoaXMuZWRpdENlbGxJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLnJvd1RvRWRpdCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNOZXdSb3coKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmV3Um93O1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IEljb25DYWNoZVNlcnZpY2UgPSBJY29uQ2FjaGVTZXJ2aWNlO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBDb3JlQ29tcG9uZW50c0ljb24gPSBDb3JlQ29tcG9uZW50c0ljb247XHJcbn1cclxuIl19
|
|
751
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NpbXBsZS1ncmlkL3NpbXBsZS1ncmlkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLFlBQVksRUFDWixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDekUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBQyxrQkFBa0IsRUFBZSxNQUFNLG9DQUFvQyxDQUFDO0FBb0xwRixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsdUJBQXVCO0lBMkY5RCxZQUNTLEtBQXVCLEVBQ3RCLGdCQUFtQyxFQUNuQyxXQUE4QixFQUM5QixrQkFBc0M7UUFFOUMsS0FBSyxFQUFFLENBQUM7UUFMRCxVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUN0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBQ25DLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtRQUM5Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBOUZoQyxxQkFBZ0IsR0FBZ0IsV0FBVyxDQUFDLElBQUksQ0FBQztRQVkxRCxZQUFPLEdBQVksS0FBSyxDQUFDO1FBR3pCLGVBQVUsR0FBWSxL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QUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyS1Q7Z0JBQ0QsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUM7Z0JBQzlCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN0Qzs7O1lBcExPLGdCQUFnQjtZQVp0QixpQkFBaUI7WUFRWCxpQkFBaUI7WUFLakIsa0JBQWtCOzs7MEJBdUx2QixZQUFZLFNBQUMsWUFBWTswQkFPekIsWUFBWSxTQUFDLFlBQVk7c0JBRXpCLEtBQUs7eUJBR0wsS0FBSzs4QkFHTCxLQUFLOzJCQUdMLEtBQUs7K0JBR0wsS0FBSzswQkFHTCxLQUFLOzRCQUdMLEtBQUs7NkJBR0wsS0FBSzs2QkFHTCxLQUFLO2dDQU1MLEtBQUs7d0JBR0wsV0FBVyxTQUFDLHNCQUFzQjs0QkFLbEMsWUFBWSxTQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LCBFbGVtZW50UmVmLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCwgUXVlcnlMaXN0LFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0Zvcm1NYXN0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2UvZm9ybS1tYXN0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7QmFzZVNpbXBsZUdyaWRDb21wb25lbnR9IGZyb20gJy4vYmFzZS1zaW1wbGUtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvbHVtbkFsaWdufSBmcm9tICcuL3NpbXBsZS1ncmlkLWNvbHVtbi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQge0NvcmVDb21wb25lbnRzSWNvbn0gZnJvbSAnLi4vLi4vY29yZS9lbnVtL2NvcmUtY29tcG9uZW50cy1pY29uLmVudW0nO1xyXG5pbXBvcnQge0ljb25DYWNoZVNlcnZpY2V9IGZyb20gJy4uL2ljb24vaWNvbi1jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtFeGNlbEV4cG9ydFNlcnZpY2UsIEV4cG9ydENvbHVtbn0gZnJvbSAnLi4vLi4vc2VydmljZS9leGNlbC1leHBvcnQuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvLXNpbXBsZS1ncmlkJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGNvLWdyaWQtdG9vbGJhclxyXG4gICAgICAqbmdJZj1cInNob3dUb29sYmFyXCIgW2NsYXNzLnJpZ2h0XT1cInJpZ2h0VG9vbGJhclwiXHJcbiAgICAgIFtzaG93RWRpdF09XCJzaG93RWRpdFwiXHJcbiAgICAgIFtzaG93QWRkXT1cInNob3dBZGRcIlxyXG4gICAgICBbc2hvd0RlbGV0ZV09XCJzaG93RGVsZXRlXCJcclxuICAgICAgW2RlbGV0ZUVuYWJsZWRdPVwic2VsZWN0ZWRSb3dJbmRleCA+IC0xXCJcclxuICAgICAgKGFkZENsaWNrKT1cImFkZE5ld1JvdygpXCJcclxuICAgICAgKGVkaXRDbGljayk9XCJlZGl0Um93KCRldmVudClcIlxyXG4gICAgICAoc2F2ZUNsaWNrKT1cInZhbGlkYXRlQW5kU2F2ZSgpXCJcclxuICAgICAgKGNhbmNlbENsaWNrKT1cImNhbmNlbEVkaXRSb3coKVwiXHJcbiAgICAgIChkZWxldGVDbGljayk9XCJyZW1vdmVSb3coKVwiPlxyXG4gICAgPC9jby1ncmlkLXRvb2xiYXI+XHJcblxyXG4gICAgPHRhYmxlXHJcbiAgICAgIGlkPVwic2ltcGxlLWdyaWQtdGFibGVcIlxyXG4gICAgICBjbGFzcz1cInNpbXBsZS1ncmlkLXRhYmxlXCJcclxuICAgICAgW2NsaWNrT3V0c2lkZV09XCJlZGl0aW5nXCJcclxuICAgICAgKGNsaWNrT3V0c2lkZSk9XCJoYW5kbGVDbGlja091dHNpZGVSb3coKVwiPlxyXG4gICAgICA8Y29sZ3JvdXA+XHJcbiAgICAgICAgPGNvbFxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBoZWFkZXJDb2x1bW5zQ29weTsgbGV0IGluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgW2NsYXNzLnNpbXBsZS1ncmlkLWNvbHVtbi1hdXRvLWZpdF09XCJjb2x1bW4uYXV0b0ZpdFwiXHJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcclxuICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiTUlOX0NPTFVNTl9XSURUSFwiPlxyXG4gICAgICA8L2NvbGdyb3VwPlxyXG4gICAgICA8dGhlYWQ+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGhcclxuICAgICAgICAgIHNjb3BlPVwiY29sXCJcclxuICAgICAgICAgICNoZWFkZXJDZWxsXHJcbiAgICAgICAgICBjbGFzcz1cInNpbXBsZS1ncmlkLWNvbHVtbi1oZWFkZXJcIlxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBoZWFkZXJDb2x1bW5zQ29weTsgbGV0IGluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJzaW1wbGUtZ3JpZC1jb2x1bW4taGVhZGVyLXdyYXBwZXJcIlxyXG4gICAgICAgICAgICBbY2xhc3MucmVzaXphYmxlXT1cInJlc2l6YWJsZVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJjb2x1bW4uaXNTZWxlY3RlZFwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi50ZXh0QWxpZ24gPyBjb2x1bW4udGV4dEFsaWduIDogZGVmYXVsdFRleHRBbGlnblwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlOyBlbHNlIG5vSGVhZGVyVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0hlYWRlclRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2ltcGxlLWdyaWQtY29sdW1uLWhlYWRlci1sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4udGV4dEFsaWduID8gY29sdW1uLnRleHRBbGlnbiA6IGRlZmF1bHRUZXh0QWxpZ25cIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLndpdGgtbWVudV09XCJzaG93R3JpZFNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy53aXRoLXNvcnRdPVwic2hvd0NvbHVtblNvcnRcIlxyXG4gICAgICAgICAgICAgICAgW3RleHRDb250ZW50XT1cImNvbHVtbi5oZWFkZXJUZXh0IHx8ICcmbmJzcDsnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93Q29sdW1uU29ydCA/IHNvcnRDb2x1bW4oY29sdW1uLCBjb2x1bW4uZmllbGQpIDogdG9nZ2xlQ29sdW1uTWVudShjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LWNvbHVtblwiICpuZ0lmPVwic2hvd0NvbHVtblNvcnRcIj5cclxuICAgICAgICAgICAgICAgIDxjby1idXR0b25cclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNvcnRDb2x1bW4oY29sdW1uLCBjb2x1bW4/LmZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29ucy5nZXRJY29uKEljb25zLkFycm93VXBBcnJvd0Rvd24pXCI+XHJcbiAgICAgICAgICAgICAgICA8L2NvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1tZW51XCIgKm5nSWY9XCJjb2x1bW4uaXNTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgPGgzIFt0ZXh0Q29udGVudF09XCInQ09MVU1OX09QVElPTlMnIHwgY29yZUxvY2FsaXplXCI+PC9oMz5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgPGxpIChjbGljayk9XCJoaWRlQ29sdW1uKGNvbHVtbilcIj5IaWRlIENvbHVtbjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwic29ydENvbHVtbihjb2x1bW4sIGNvbHVtbi5maWVsZClcIj5Tb3J0IENvbHVtbjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJyZXNpemFibGUgJiYgY29sdW1uLnJlc2l6YWJsZVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzaW1wbGUtZ3JpZC1jb2x1bW4tc2l6ZXJcIlxyXG4gICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiaGFuZGxlU2l6ZXJNb3VzZURvd24oJGV2ZW50LCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgPC90cj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93R3JpZFNldHRpbmdzXCIgY2xhc3M9XCJncmlkLXNldHRpbmdzXCI+XHJcbiAgICAgICAgPGNvLWJ1dHRvblxyXG4gICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzU2V0dGluZ3NNZW51T3BlblwiXHJcbiAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbnMuZ2V0SWNvbihJY29ucy5Db2dXaGVlbHMpXCJcclxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZXR0aW5nc01lbnUoKVwiPlxyXG4gICAgICAgIDwvY28tYnV0dG9uPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2V0dGluZ3MtbWVudVwiICpuZ0lmPVwiaXNTZXR0aW5nc01lbnVPcGVuXCI+XHJcbiAgICAgICAgICA8aDMgW3RleHRDb250ZW50XT1cIidHUklEX09QVElPTlMnIHwgY29yZUxvY2FsaXplXCI+PC9oMz5cclxuICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPGxpIChjbGljayk9XCJleHBvcnRUb0V4Y2VsKClcIj5FeHBvcnQgdG8gRXhjZWw8L2xpPlxyXG4gICAgICAgICAgICA8bGkgKm5nSWY9XCJoZWFkZXJDb2x1bW5zQ29weS5sZW5ndGggIT09IGhlYWRlckNvbHVtbnMubGVuZ3RoXCIgKGNsaWNrKT1cInNob3dBbGxDb2x1bW5zKClcIj5cclxuICAgICAgICAgICAgICBTaG93IEFsbCBDb2x1bW5zXHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPC90aGVhZD5cclxuICAgICAgPHRib2R5XHJcbiAgICAgICAgI2Ryb3BMaXN0IGNka0Ryb3BMaXN0IGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiXHJcbiAgICAgICAgY2xhc3M9XCJzaW1wbGUtZ3JpZC1kcmFnLWRyb3AtbGlzdFwiXHJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiIWRyYWdEcm9wRW5hYmxlZCB8fCBlZGl0aW5nXCJcclxuICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cImRhdGFcIlxyXG4gICAgICAgIFtjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlXT1cImhhbmRsZUNhbkRyYWdEcm9wXCJcclxuICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImhhbmRsZURyb3AoJGV2ZW50KVwiPlxyXG4gICAgICA8Y28tZm9ybSBjbGFzcz1cInNpbXBsZS1ncmlkLXJvdy1mb3JtXCI+XHJcbiAgICAgICAgPHRyXHJcbiAgICAgICAgICAjcm93RWxlbWVudFxyXG4gICAgICAgICAgY2xhc3M9XCJzaW1wbGUtZ3JpZC1yb3dcIlxyXG4gICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cInJvd0luZGV4ID09PSBzZWxlY3RlZFJvd0luZGV4ICYmICFlZGl0aW5nXCIgb2JzZXJ2ZVZpc2liaWxpdHlcclxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJnZXRJc1Jvd0Rpc2FibGVkKHJvd0luZGV4KVwiXHJcbiAgICAgICAgICBbY2xhc3MuZWRpdGluZ109XCJyb3dJbmRleCA9PT0gZWRpdFJvd0luZGV4XCJcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2YgKCEhcm93c1BlclBhZ2UgPyAoZGF0YSB8IHBhZ2luYXRlOiB7aXRlbXNQZXJQYWdlOiByb3dzUGVyUGFnZSwgY3VycmVudFBhZ2U6IGN1cnJlbnRQYWdlfSkgOiBkYXRhKTsgbGFzdCBhcyBsYXN0OyBsZXQgcm93SW5kZXggPSBpbmRleFwiXHJcbiAgICAgICAgICBjZGtEcmFnXHJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2tSb3coJGV2ZW50LCByb3dJbmRleClcIiAoZGJsY2xpY2spPVwiaGFuZGxlRGJsQ2xpY2tSb3coJGV2ZW50LCByb3dJbmRleCwgcm93KVwiXHJcbiAgICAgICAgICAodmlzaWJpbGl0eUNoYW5nZSk9XCJyb3dWaXNpYmxlLm5leHQocm93KVwiXHJcbiAgICAgICAgICAobW91c2VlbnRlcik9XCJob3ZlcmVkUm93SW5kZXggPSByb3dJbmRleFwiXHJcbiAgICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkUm93SW5kZXggPSAtMVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2luZ2xlQ29sdW1uUm93KHJvdylcIj5cclxuICAgICAgICAgICAgPHRkIGNsYXNzPVwic2ltcGxlLWdyaWQtc2luZ2xlLWNvbHVtbi1jZWxsXCIgW2F0dHIuY29sc3Bhbl09XCJoZWFkZXJDb2x1bW5zQ29weS5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICA8Y28tc2ltcGxlLWdyaWQtY2VsbFxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5zW3NpbmdsZUNvbHVtbkluZGV4KHJvdyldXCJcclxuICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcclxuICAgICAgICAgICAgICAgIFtlZGl0TW9kZV09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgIDwvY28tc2ltcGxlLWdyaWQtY2VsbD5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1NpbmdsZUNvbHVtblJvdyhyb3cpXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBoZWFkZXJDb2x1bW5zQ29weTsgbGV0IGNvbHVtbkluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzaW1wbGUtZ3JpZC1jb2x1bW4tY2VsbFwiICpuZ0lmPVwiY29sdW1uSW5kZXggIT09IHNpbmdsZUNvbHVtbkluZGV4KHJvdylcIj5cclxuICAgICAgICAgICAgICAgIDxjby1zaW1wbGUtZ3JpZC1jZWxsXHJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICBbZWRpdE1vZGVdPVwiaW5saW5lRWRpdCAmJiBlZGl0aW5nICYmIHJvd0luZGV4ID09PSBlZGl0Um93SW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICBbZmllbGRFZGl0TW9kZV09XCJlZGl0Q2VsbEluZGV4ID09PSBjb2x1bW5JbmRleCAmJiByb3dJbmRleCA9PT0gZWRpdFJvd0luZGV4XCJcclxuICAgICAgICAgICAgICAgICAgKGNlbGxDbGljayk9XCJoYW5kbGVDZWxsQ2xpY2soJGV2ZW50LCByb3csIHJvd0luZGV4LCBjb2x1bW5JbmRleClcIj5cclxuICAgICAgICAgICAgICAgIDwvY28tc2ltcGxlLWdyaWQtY2VsbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4ucmVzaXphYmxlXCIgY2xhc3M9XCJzaW1wbGUtZ3JpZC1jb2x1bW4tc2l6ZXItcGxhY2Vob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlubGluZUVkaXQgJiYgc2hvd1Jvd0J1dHRvbnNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbnMtY29udGFpbmVyXCIgKm5nSWY9XCIhZWRpdGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGNvLWljb24gY2xhc3M9XCJpY29uLWl0ZW0gaWNvbi1lZGl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uRGF0YV09XCJpY29ucy5nZXRJY29uKEljb25zLlBlblRvU3F1YXJlU29saWQpXCIgKm5nSWY9XCJob3ZlcmVkUm93SW5kZXggPT09IHJvd0luZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0Um93KCRldmVudCwgdHJ1ZSwgcm93SW5kZXgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj48L2NvLWljb24+XHJcbiAgICAgICAgICAgICAgICA8Y28taWNvbiBjbGFzcz1cImljb24taXRlbSBpY29uLWRlbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbnMuZ2V0SWNvbihJY29ucy5UcmFzaEJpbilcIiAqbmdJZj1cImhvdmVyZWRSb3dJbmRleCA9PT0gcm93SW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFRoZVJvdyhyb3dJbmRleCk7IHJlbW92ZVJvdygpO1wiPjwvY28taWNvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbnMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8Y28tYnV0dG9uIGNsYXNzPVwic2F2ZS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImVkaXRpbmcgJiYgKHNlbGVjdGVkUm93SW5kZXggPT09IHJvd0luZGV4IHx8IChpc05ld1JvdyAmJiByb3dJbmRleCA9PT0gZWRpdFJvd0luZGV4KSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbnMuZ2V0SWNvbihJY29ucy5DaGVja0R1b3RvbmUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZhbGlkYXRlQW5kU2F2ZSgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj48L2NvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxjby1idXR0b24gY2xhc3M9XCJjbG9zZS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImVkaXRpbmcgJiYgKHNlbGVjdGVkUm93SW5kZXggPT09IHJvd0luZGV4IHx8IChpc05ld1JvdyAmJiByb3dJbmRleCA9PT0gZWRpdFJvd0luZGV4KSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbnMuZ2V0SWNvbihJY29ucy5Dcm9zc1NraW5ueSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsRWRpdFJvdygpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgXCI+PC9jby1idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC9jby1mb3JtPlxyXG4gICAgICA8L3Rib2R5PlxyXG4gICAgPC90YWJsZT5cclxuICAgIDxjby1wYWdpbmF0aW9uLWJhclxyXG4gICAgICAqbmdJZj1cImRhdGE/Lmxlbmd0aCA+IHJvd3NQZXJQYWdlXCIgY2xhc3M9XCJwYWdpbmF0aW9uLWJhclwiXHJcbiAgICAgIFtpdGVtc1BlclBhZ2VdPVwicm93c1BlclBhZ2VcIlxyXG4gICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIlxyXG4gICAgICBbdG90YWxJdGVtc109XCJkYXRhLmxlbmd0aFwiXHJcbiAgICAgIFthdXRvSGlkZV09XCJ0cnVlXCJcclxuICAgICAgKHByZXZpb3VzQ2xpY2spPVwiZ29Ub1ByZXZpb3VzUGFnZSgpXCJcclxuICAgICAgKG5leHRDbGljayk9XCJnb1RvTmV4dFBhZ2UoKVwiXHJcbiAgICAgIChwYWdlQ2xpY2spPVwic2V0Q3VycmVudFBhZ2UoJGV2ZW50KVwiPlxyXG4gICAgPC9jby1wYWdpbmF0aW9uLWJhcj5cclxuICBgLFxyXG4gIHByb3ZpZGVyczogW0Zvcm1NYXN0ZXJTZXJ2aWNlXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2ltcGxlR3JpZENvbXBvbmVudCBleHRlbmRzIEJhc2VTaW1wbGVHcmlkQ29tcG9uZW50IHtcclxuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFRleHRBbGlnbjogQ29sdW1uQWxpZ24gPSBDb2x1bW5BbGlnbi5MZWZ0O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdoZWFkZXJDZWxsJykgc2V0IGhlYWRlckNlbGxzKGNlbGxzKSB7XHJcbiAgICBjb25zdCBoZWFkZXJFbGVtZW50cyA9IGNlbGxzLnRvQXJyYXkoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVyRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5jb2x1bW5zW2ldLmVsZW1lbnRSZWYgPSBoZWFkZXJFbGVtZW50c1tpXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ3Jvd0VsZW1lbnQnKSByb3dFbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzaG93QWRkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNob3dEZWxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZWRpdE9uQ2VsbENsaWNrOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcmlnaHRUb29sYmFyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNob3dHcmlkU2V0dGluZ3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcm93c1BlclBhZ2U6IG51bWJlciA9IDUwO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByb3dEaXNhYmxlZEZuOiBGdW5jdGlvbjtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2hvd0NvbHVtblNvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2hvd1Jvd0J1dHRvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUHJvbWlzZSBmdW5jdGlvbiwgaWYgcHJvdmlkZWQgc2hvdWxkIHJldHVybiBib29sZWFuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY2FuUm93QmVFZGl0dGVkRm46IEZ1bmN0aW9uO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvLXNpbXBsZS1ncmlkJylcclxuICBwdWJsaWMgc2hvd0NsYXNzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBwdWJsaWMgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlubGluZUVkaXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudC5jb2RlID09PSAnVGFiJykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLl9uZXh0QXZhaWxhYmxlQ2VsbFRvRWRpdCghZXZlbnQuc2hpZnRLZXksIHRoaXMuZWRpdENlbGxJbmRleClcclxuICAgICAgICAudGhlbigoaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5lZGl0Q2VsbEluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb24ubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgdGhpcy5jYW5jZWxFZGl0Um93KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09ICdFbnRlcicpIHtcclxuICAgICAgdGhpcy52YWxpZGF0ZUFuZFNhdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzU2V0dGluZ3NNZW51T3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBlZGl0Um93SW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIHB1YmxpYyBlZGl0Q2VsbEluZGV4OiBudW1iZXIgPSAtMTtcclxuICBwdWJsaWMgc2VsZWN0ZWRSb3dJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgcHVibGljIHJvd1RvRWRpdDogYW55O1xyXG4gIHB1YmxpYyBjdXJyZW50UGFnZTogbnVtYmVyID0gMTtcclxuICBwdWJsaWMgc29ydENvbHVtblZhbHVlOiBzdHJpbmc7XHJcbiAgcHVibGljIHNvcnREaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnID0gJ2FzYyc7XHJcbiAgcHVibGljIGhvdmVyZWRSb3dJbmRleDogbnVtYmVyID0gLTE7XHJcbiAgcHVibGljIHJlYWRvbmx5IEljb25zID0gQ29yZUNvbXBvbmVudHNJY29uO1xyXG5cclxuICBwcml2YXRlIF9kb3VibGVDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfbmV3Um93OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfbmV3Um93UmVmZXJlbmNlOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGljb25zOiBJY29uQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX2Zvcm1NYXN0ZXI6IEZvcm1NYXN0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBleGNlbEV4cG9ydFNlcnZpY2U6IEV4Y2VsRXhwb3J0U2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuZGF0YUNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVDbGlja091dHNpZGVSb3coKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbGlkYXRlQW5kU2F2ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElzUm93RGlzYWJsZWQoaWR4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmRpc2FibGVkUm93cy5pbmRleE9mKGlkeCkgPiAtMTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpc1Jvd0Rpc2FibGVkKHJvdzogYW55LCBpbmRleDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAodGhpcy5yb3dEaXNhYmxlZEZuICYmICh0eXBlb2YgdGhpcy5yb3dEaXNhYmxlZEZuID09PSAnZnVuY3Rpb24nKSkge1xyXG4gICAgICBjb25zdCBkaXNhYmxlZCA9IGF3YWl0IHRoaXMucm93RGlzYWJsZWRGbi5jYWxsKHRoaXMsIHJvdyk7XHJcbiAgICAgIGNvbnN0IGlkeFJvdzogbnVtYmVyID0gdGhpcy5kaXNhYmxlZFJvd3MuaW5kZXhPZihpbmRleCk7XHJcbiAgICAgIGlmIChkaXNhYmxlZCkge1xyXG4gICAgICAgIGlmIChpZHhSb3cgPCAwKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVkUm93cy5wdXNoKGluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGlkeFJvdyA+IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVkUm93cy5zcGxpY2UoaWR4Um93LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGRpc2FibGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFkZE5ld1JvdygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmlubGluZUVkaXQpIHtcclxuICAgICAgY29uc3QgdmFsaWQ6IGJvb2xlYW4gPSB0aGlzLnZhbGlkYXRlQW5kU2F2ZSgpO1xyXG4gICAgICBpZiAodmFsaWQpIHtcclxuICAgICAgICB0aGlzLl9uZXdSb3dSZWZlcmVuY2UgPSB7fTtcclxuICAgICAgICB0aGlzLmRhdGEucHVzaCh0aGlzLl9uZXdSb3dSZWZlcmVuY2UpO1xyXG4gICAgICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLl9uZXdSb3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJvd3NQZXJQYWdlICYmIHRoaXMuZGF0YS5sZW5ndGggPiB0aGlzLnJvd3NQZXJQYWdlKSB7XHJcbiAgICAgICAgICAvLyBuYXZpZ2F0ZSB0byBsYXN0IHBhZ2VcclxuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBNYXRoLmNlaWwodGhpcy5kYXRhLmxlbmd0aCAvIHRoaXMucm93c1BlclBhZ2UpO1xyXG4gICAgICAgICAgY29uc3QgcmVsYXRpdmVJbmRleDogbnVtYmVyID0gKHRoaXMuZGF0YS5sZW5ndGggLSAxKSAlIHRoaXMucm93c1BlclBhZ2U7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSByZWxhdGl2ZUluZGV4O1xyXG4gICAgICAgICAgdGhpcy5lZGl0Um93SW5kZXggPSByZWxhdGl2ZUluZGV4O1xyXG5cclxuICAgICAgICAgIC8vIHN0b3JlIHJlZmVyZW5jZVxyXG4gICAgICAgICAgdGhpcy5yb3dUb0VkaXQgPSB0aGlzLl9uZXdSb3dSZWZlcmVuY2U7XHJcbiAgICAgICAgICB0aGlzLmVkaXRDZWxsSW5kZXggPSBhd2FpdCB0aGlzLl9uZXh0QXZhaWxhYmxlQ2VsbFRvRWRpdCh0cnVlKTtcclxuXHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZWwgPSB0aGlzLnJvd0VsZW1lbnRzPy5sYXN0Py5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAoZWwpIHtcclxuICAgICAgICAgICAgICBlbC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcid9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgMjAwKTtcclxuXHJcbiAgICAgICAgICAvLyByZXNldCByZWZlcmVuY2UgdG8gdGhlIG5ldyByb3cgYWZ0ZXIgZWRpdENlbGxJbmRleFxyXG4gICAgICAgICAgdGhpcy5yb3dUb0VkaXQgPSB0aGlzLl9uZXdSb3dSZWZlcmVuY2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZWRpdFJvd0luZGV4ID0gdGhpcy5kYXRhLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICB0aGlzLnJvd1RvRWRpdCA9IHRoaXMuX25ld1Jvd1JlZmVyZW5jZTtcclxuICAgICAgICAgIHRoaXMuZWRpdENlbGxJbmRleCA9IGF3YWl0IHRoaXMuX25leHRBdmFpbGFibGVDZWxsVG9FZGl0KHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWRkUm93Lm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB2YWxpZGF0ZUFuZFNhdmUoc3RvcGVkaXRpbmc6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZWRpdGluZykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbGlkOiBib29sZWFuID0gdGhpcy5fZm9ybU1hc3Rlci5zdWJtaXRTbGF2ZXMoKTtcclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICAgIGlmICh2YWxpZCkge1xyXG4gICAgICB0aGlzLl9zYXZlUm93KHN0b3BlZGl0aW5nKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsRWRpdFJvdygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5lZGl0aW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9uZXdSb3cpIHtcclxuICAgICAgdGhpcy5kYXRhLnNwbGljZSh0aGlzLmRhdGEubGVuZ3RoIC0gMSwgMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRhdGFbdGhpcy5lZGl0Um93SW5kZXhdID0gdGhpcy5yb3dUb0VkaXQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yZXNldEVkaXQoKTtcclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVSb3coKTogdm9pZCB7XHJcbiAgICBsZXQgYWJzb2x1dGVJbmRleDogbnVtYmVyID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4O1xyXG4gICAgaWYgKHRoaXMucm93c1BlclBhZ2UpIHtcclxuICAgICAgYWJzb2x1dGVJbmRleCA9ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnJvd3NQZXJQYWdlICsgdGhpcy5zZWxlY3RlZFJvd0luZGV4O1xyXG4gICAgfVxyXG4gICAgdGhpcy5kZWxldGVSb3cubmV4dCh0aGlzLmRhdGFbYWJzb2x1dGVJbmRleF0pO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgIT09IDEpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IC0xO1xyXG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oe3RvcDogMCwgYmVoYXZpb3I6ICdzbW9vdGgnfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ2xpY2tSb3coZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlubGluZUVkaXQgJiYgdGhpcy5zaG93Um93QnV0dG9ucyAmJiAhdGhpcy5lZGl0aW5nKSB7XHJcbiAgICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RvdWJsZUNsaWNrZWQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RUaGVSb3coaW5kZXgpO1xyXG4gICAgICAgIGlmICh0aGlzLmlubGluZUVkaXQgJiYgIXRoaXMuc2hvd1Jvd0J1dHRvbnMpIHtcclxuICAgICAgICAgIHRoaXMuZWRpdFJvdyhldmVudCwgdHJ1ZSwgaW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMjAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RUaGVSb3coaW5kZXg6IG51bWJlciwgZW1pdDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93SW5kZXggPT09IC0xIHx8ICh0aGlzLnNlbGVjdGVkUm93SW5kZXggIT09IGluZGV4ICYmICgodGhpcy5lZGl0aW5nICYmIHRoaXMudmFsaWRhdGVBbmRTYXZlKCkpIHx8ICF0aGlzLmVkaXRpbmcpKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSBpbmRleDtcclxuICAgICAgY29uc3QgYWJzb2x1dGVJbmRleDogbnVtYmVyID0gdGhpcy5yb3dzUGVyUGFnZSA/ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnJvd3NQZXJQYWdlICsgaW5kZXggOiBpbmRleDtcclxuICAgICAgaWYgKGVtaXQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdFJvdy5uZXh0KHRoaXMuZGF0YVthYnNvbHV0ZUluZGV4XSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVEYmxDbGlja1JvdyhldmVudDogTW91c2VFdmVudCwgaW5kZXg6IG51bWJlciwgcm93OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChhd2FpdCB0aGlzLmlzUm93RGlzYWJsZWQocm93LCBpbmRleCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gLTE7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBjYW5FZGl0OiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmNhblJvd0JlRWRpdHRlZEZuICYmIHR5cGVvZiB0aGlzLmNhblJvd0JlRWRpdHRlZEZuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNhbkVkaXQgPSBhd2FpdCB0aGlzLmNhblJvd0JlRWRpdHRlZEZuLmNhbGwodGhpcywgcm93KTtcclxuICAgIH1cclxuICAgIGlmIChjYW5FZGl0KSB7XHJcbiAgICAgIHRoaXMuX2RvdWJsZUNsaWNrZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmRibENsaWNrUm93Lm5leHQodGhpcy5kYXRhW2luZGV4XSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0VGhlUm93KGluZGV4LCBmYWxzZSk7XHJcbiAgICAgIGlmICh0aGlzLmlubGluZUVkaXQgJiYgIXRoaXMuc2hvd1Jvd0J1dHRvbnMpIHtcclxuICAgICAgICB0aGlzLmVkaXRSb3coZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yZXNldERibENsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZWRpdFJvdyhldmVudDogTW91c2VFdmVudCwgc2VsZWN0Q2VsbDogYm9vbGVhbiA9IHRydWUsIHJvd0luZGV4PzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAocm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdFRoZVJvdyhyb3dJbmRleCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVkaXRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5lZGl0Um93SW5kZXggPSB0aGlzLnNlbGVjdGVkUm93SW5kZXg7XHJcbiAgICB0aGlzLnJvd1RvRWRpdCA9IHRoaXMuZGF0YVt0aGlzLmVkaXRSb3dJbmRleF07XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd1Jvd0J1dHRvbnMgJiYgdGhpcy5pbmxpbmVFZGl0ICYmIHNlbGVjdENlbGwpIHtcclxuICAgICAgdGhpcy5lZGl0Q2VsbEluZGV4ID0gYXdhaXQgdGhpcy5fbmV4dEF2YWlsYWJsZUNlbGxUb0VkaXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaGFuZGxlQ2VsbENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCByb3c6IGFueSwgcm93SW5kZXg6IG51bWJlciwgY2VsbEluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmVkaXRPbkNlbGxDbGljaykge1xyXG4gICAgICBpZiAoYXdhaXQgdGhpcy5pc1Jvd0Rpc2FibGVkKHJvdywgcm93SW5kZXgpKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gLTE7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmlubGluZUVkaXQpIHtcclxuICAgICAgICB0aGlzLmVkaXRSb3dJbmRleCA9IHJvd0luZGV4O1xyXG4gICAgICAgIHRoaXMuZWRpdENlbGxJbmRleCA9IGNlbGxJbmRleDtcclxuICAgICAgICB0aGlzLmVkaXRpbmcgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVkaXRDZWxsSW5kZXggPSBjZWxsSW5kZXg7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlU2V0dGluZ3NNZW51KCk6IHZvaWQge1xyXG4gICAgdGhpcy5oZWFkZXJDb2x1bW5zQ29weS5mb3JFYWNoKGkgPT4gaS5pc1NlbGVjdGVkID0gZmFsc2UpO1xyXG4gICAgdGhpcy5pc1NldHRpbmdzTWVudU9wZW4gPSAhdGhpcy5pc1NldHRpbmdzTWVudU9wZW47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlQ29sdW1uTWVudShjb2w6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnNob3dHcmlkU2V0dGluZ3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNTZXR0aW5nc01lbnVPcGVuID0gZmFsc2U7XHJcbiAgICBpZiAoY29sLmlzU2VsZWN0ZWQpIHtcclxuICAgICAgY29sLmlzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGVhZGVyQ29sdW1uc0NvcHkuZm9yRWFjaChpID0+IGkuaXNTZWxlY3RlZCA9IGZhbHNlKTtcclxuICAgICAgY29sLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVDb2x1bW4oY29sOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbC5pc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmhlYWRlckNvbHVtbnNDb3B5ID0gdGhpcy5oZWFkZXJDb2x1bW5zQ29weS5maWx0ZXIoKG9iaikgPT4ge1xyXG4gICAgICByZXR1cm4gb2JqICE9PSBjb2w7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzb3J0Q29sdW1uKGNvbDogYW55LCBjb2x1bW5WYWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb2wuaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLnNvcnRDb2x1bW5WYWx1ZSA9PT0gY29sdW1uVmFsdWUpIHtcclxuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gdGhpcy5zb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zb3J0Q29sdW1uVmFsdWUgPSBjb2x1bW5WYWx1ZTtcclxuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gJ2FzYyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5zb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IDEgOiAtMTtcclxuXHJcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4udGhpcy5kYXRhXS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGxldCB2YWxBID0gYVtjb2x1bW5WYWx1ZV07XHJcbiAgICAgIGxldCB2YWxCID0gYltjb2x1bW5WYWx1ZV07XHJcblxyXG4gICAgICBpZiAodmFsQSA9PSBudWxsICYmIHZhbEIgPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh2YWxBID09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gLTEgKiBkaXJlY3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHZhbEIgPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiAxICogZGlyZWN0aW9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBIYW5kbGUgSVNPIGRhdGUgc3RyaW5nXHJcbiAgICAgIGNvbnN0IGlzRGF0ZUEgPSB0eXBlb2YgdmFsQSA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVQvLnRlc3QodmFsQSk7XHJcbiAgICAgIGNvbnN0IGlzRGF0ZUIgPSB0eXBlb2YgdmFsQiA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVQvLnRlc3QodmFsQik7XHJcblxyXG4gICAgICBpZiAoaXNEYXRlQSAmJiBpc0RhdGVCKSB7XHJcbiAgICAgICAgY29uc3QgdGltZUEgPSBuZXcgRGF0ZSh2YWxBKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgY29uc3QgdGltZUIgPSBuZXcgRGF0ZSh2YWxCKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgcmV0dXJuICh0aW1lQSAtIHRpbWVCKSAqIGRpcmVjdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRmFsbGJhY2sgZm9yIG51bWJlcnMvc3RyaW5nc1xyXG4gICAgICBpZiAodHlwZW9mIHZhbEEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWxCID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiB2YWxBLmxvY2FsZUNvbXBhcmUodmFsQikgKiBkaXJlY3Rpb247XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAodmFsQSA+IHZhbEIgPyAxIDogdmFsQSA8IHZhbEIgPyAtMSA6IDApICogZGlyZWN0aW9uO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5kYXRhID0gc29ydGVkO1xyXG4gICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dBbGxDb2x1bW5zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1NldHRpbmdzTWVudU9wZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuaGVhZGVyQ29sdW1uc0NvcHkgPSB0aGlzLmhlYWRlckNvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwb3J0VG9FeGNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNTZXR0aW5nc01lbnVPcGVuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgZXhwb3J0RGF0YTogT2JqZWN0W10gPSB0aGlzLl9maWx0ZXJTZWxlY3RlZE9yUmV0dXJuQWxsKHRoaXMuZGF0YSk7XHJcbiAgICBjb25zdCBjb2x1bW5zOiBFeHBvcnRDb2x1bW5bXSA9IHRoaXMuaGVhZGVyQ29sdW1uc0NvcHkubWFwKGNvbHVtbiA9PiB7XHJcbiAgICAgIHJldHVybiAoe1xyXG4gICAgICAgIGtleTogY29sdW1uLmZpZWxkLFxyXG4gICAgICAgIGhlYWRlcjogY29sdW1uLmhlYWRlclRleHRcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJzID0gY29sdW1ucy5tYXAoY29sID0+IGNvbC5oZWFkZXIpO1xyXG4gICAgY29uc3Qgcm93cyA9IGV4cG9ydERhdGEubWFwKHJvdyA9PlxyXG4gICAgICBjb2x1bW5zLm1hcChjb2wgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm93W2NvbC5rZXldO1xyXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSB2YWx1ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XHJcbiAgICAgICAgICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSBmb3JtYXR0ZWREYXRlLnNwbGl0KCctJyk7XHJcbiAgICAgICAgICByZXR1cm4gYCR7ZGF5fS0ke21vbnRofS0ke3llYXJ9YDtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIGNvbnN0IGhhc0RlY2ltYWwgPSAobnVtKSA9PiAhTnVtYmVyLmlzSW50ZWdlcihudW0pO1xyXG4gICAgICAgICAgcmV0dXJuIGhhc0RlY2ltYWwodmFsdWUpID8gdmFsdWUudG9GaXhlZCgyKSA6IHZhbHVlLnRvRml4ZWQoMCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlLmpvaW4oJywgJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5pbmNsdWRlcygnVDAwOjAwOjAwJykpIHtcclxuICAgICAgICAgICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gdmFsdWUucmVwbGFjZSgnVDAwOjAwOjAwJywgJycpLnNwbGl0KCctJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtkYXl9LSR7bW9udGh9LSR7eWVhcn1gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBjb25zdCBjc3ZDb250ZW50ID0gW2hlYWRlcnMsIC4uLnJvd3NdLm1hcChyb3cgPT5cclxuICAgIC8vICAgcm93Lm1hcChjZWxsID0+IGBcIiR7Y2VsbC5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYCkuam9pbignLCcpXHJcbiAgICAvLyApLmpvaW4oJ1xcclxcbicpO1xyXG5cclxuICAgIGNvbnN0IGNzdkNvbnRlbnQ6IHN0cmluZyA9IFtoZWFkZXJzLCAuLi5yb3dzXS5tYXAocm93ID0+XHJcbiAgICAgIHJvdy5tYXAoKGNlbGw6IHN0cmluZykgPT4gYFwiJHtTdHJpbmcoY2VsbCkucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImApLmpvaW4oJywnKVxyXG4gICAgKS5qb2luKCdcXHJcXG4nKTtcclxuXHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2NzdkNvbnRlbnRdLCB7dHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7J30pO1xyXG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcblxyXG4gICAgbGluay5ocmVmID0gdXJsO1xyXG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgJ0V4Y2VsU2hlZXQnKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xyXG5cclxuICAgIC8vIHRoaXMuZXhjZWxFeHBvcnRTZXJ2aWNlLmV4cG9ydFRvRXhjZWwoXHJcbiAgICAvLyAgIHRoaXMuZGF0YSxcclxuICAgIC8vICAgY29sdW1ucyxcclxuICAgIC8vICAgJ0V4Y2VsU2hlZXQnLFxyXG4gICAgLy8gICAnU2hlZXQxJ1xyXG4gICAgLy8gKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbHRlclNlbGVjdGVkT3JSZXR1cm5BbGwoaXRlbXM6IGFueSkge1xyXG4gICAgY29uc3QgaGFzU2VsZWN0ZWRUcnVlOiBib29sZWFuID0gaXRlbXMuc29tZShpdGVtID0+IGl0ZW0uc2VsZWN0ZWQgPT09IHRydWUpO1xyXG4gICAgcmV0dXJuIGhhc1NlbGVjdGVkVHJ1ZSA/IGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VsZWN0ZWQgPT09IHRydWUpIDogaXRlbXM7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcHJlcGFyZURhdGFSb3cocm93OiBhbnksIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNSb3dEaXNhYmxlZChyb3csIGluZGV4KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Jlc2V0RGJsQ2xpY2soKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5fZG91YmxlQ2xpY2tlZCA9IGZhbHNlO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIG5leHQ7IE1vdmUgdG8gbmV4dCBvciBwcmV2aW91cyBjZWxsXHJcbiAgICogQHBhcmFtIHN0YXJ0OyBTdGFydCBmcm9tIGNlbGxpbmRleFxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbmV4dEF2YWlsYWJsZUNlbGxUb0VkaXQobmV4dDogYm9vbGVhbiwgc3RhcnQ6IG51bWJlciA9IC0xKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgY29uc3QgbnVtRWRpdGFibGVDb2x1bW5zOiBudW1iZXIgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGMgPT4gIWMucmVhZG9ubHkpLmxlbmd0aDtcclxuICAgICAgY29uc3Qgd2FudGVkSW5kZXggPSBzdGFydCArIChuZXh0ID8gMSA6IC0xKTtcclxuICAgICAgaWYgKHdhbnRlZEluZGV4ID49IG51bUVkaXRhYmxlQ29sdW1ucykge1xyXG4gICAgICAgIHRoaXMuX2dldE5leHRFZGl0Um93SW5kZXgoKVxyXG4gICAgICAgICAgLnRoZW4oKGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0Um93SW5kZXggPSBpbmRleDtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9nZXROZXh0RWRpdENlbGxJbmRleCgwKSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAod2FudGVkSW5kZXggPCAwKSB7XHJcbiAgICAgICAgdGhpcy5fZ2V0UHJldmlvdXNFZGl0Um93SW5kZXgoKVxyXG4gICAgICAgICAgLnRoZW4oKGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0Um93SW5kZXggPSBpbmRleDtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9nZXRQcmV2aW91c0VkaXRDZWxsSW5kZXgodGhpcy5jb2x1bW5zLmxlbmd0aCAtIDEpKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXNvbHZlKG5leHQgPyB0aGlzLl9nZXROZXh0RWRpdENlbGxJbmRleChzdGFydCArIDEpIDogdGhpcy5fZ2V0UHJldmlvdXNFZGl0Q2VsbEluZGV4KHN0YXJ0IC0gMSkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldE5leHRFZGl0Q2VsbEluZGV4KHN0YXJ0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gc3RhcnQ7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKCF0aGlzLmNvbHVtbnNbaV0ucmVhZG9ubHkpIHtcclxuICAgICAgICByZXR1cm4gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0UHJldmlvdXNFZGl0Q2VsbEluZGV4KHN0YXJ0OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGlmICghdGhpcy5jb2x1bW5zW2ldLnJlYWRvbmx5KSB7XHJcbiAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldE5leHRFZGl0Um93SW5kZXgoKTogUHJvbWlzZTxudW1iZXI+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgbGV0IG5ld1Jvd0luZGV4OiBudW1iZXIgPSAwO1xyXG4gICAgICBpZiAodGhpcy5lZGl0Um93SW5kZXggKyAxID49IHRoaXMuZGF0YS5sZW5ndGgpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvQWRkUm93KSB7XHJcbiAgICAgICAgICB0aGlzLmFkZE5ld1JvdygpO1xyXG4gICAgICAgICAgbmV3Um93SW5kZXggPSB0aGlzLmVkaXRSb3dJbmRleDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbmV3Um93SW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdSb3dJbmRleCA9IHRoaXMuZWRpdFJvd0luZGV4ICsgMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobmV3Um93SW5kZXggIT09IHRoaXMuZWRpdFJvd0luZGV4KSB7IC8vIGdvIHRvIGRpZmZlcmVudCByb3cgdmFsaWRhdGUgY3VycmVudCBvbmUgZmlyc3RcclxuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZUFuZFNhdmUoZmFsc2UpKSB7XHJcbiAgICAgICAgICB0aGlzLnJvd1RvRWRpdCA9IHRoaXMuZGF0YVtuZXdSb3dJbmRleF07XHJcbiAgICAgICAgICByZXNvbHZlKG5ld1Jvd0luZGV4KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc29sdmUobmV3Um93SW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFByZXZpb3VzRWRpdFJvd0luZGV4KCk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIGxldCBuZXdSb3dJbmRleDogbnVtYmVyID0gMDtcclxuICAgICAgaWYgKHRoaXMuZWRpdFJvd0luZGV4IC0gMSA8IDApIHtcclxuICAgICAgICBuZXdSb3dJbmRleCA9IHRoaXMuZGF0YS5sZW5ndGggLSAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld1Jvd0luZGV4ID0gdGhpcy5lZGl0Um93SW5kZXggLSAxO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChuZXdSb3dJbmRleCAhPT0gdGhpcy5lZGl0Um93SW5kZXgpIHsgLy8gZ28gdG8gZGlmZmVyZW50IHJvdyB2YWxpZGF0ZSBjdXJyZW50IG9uZSBmaXJzdFxyXG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRlQW5kU2F2ZShmYWxzZSkpIHtcclxuICAgICAgICAgIHRoaXMucm93VG9FZGl0ID0gdGhpcy5kYXRhW25ld1Jvd0luZGV4XTtcclxuICAgICAgICAgIHJlc29sdmUobmV3Um93SW5kZXgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzb2x2ZShuZXdSb3dJbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2F2ZVJvdyhzdG9wZWRpdGluZzogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9uZXdSb3cpIHtcclxuICAgICAgdGhpcy5zYXZlUm93Lm5leHQodGhpcy5fbmV3Um93UmVmZXJlbmNlKTtcclxuICAgICAgdGhpcy5fbmV3Um93UmVmZXJlbmNlID0gbnVsbDsgLy8gY2xlYXJcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBpbmRleDogbnVtYmVyID0gLTE7IC8vIGV4aXN0aW5nIHJvd1xyXG5cclxuICAgICAgaWYgKHRoaXMucm93c1BlclBhZ2UpIHtcclxuICAgICAgICBpbmRleCA9ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLnJvd3NQZXJQYWdlICsgdGhpcy5lZGl0Um93SW5kZXg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5kZXggPSB0aGlzLmVkaXRSb3dJbmRleDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLmRhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlUm93Lm5leHQodGhpcy5kYXRhW2luZGV4XSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlICE9PSAxKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAtMTtcclxuICAgICAgd2luZG93LnNjcm9sbFRvKHt0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJ30pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fbmV3Um93ID0gZmFsc2U7XHJcbiAgICBpZiAoc3RvcGVkaXRpbmcpIHtcclxuICAgICAgdGhpcy5fcmVzZXRFZGl0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ29Ub1ByZXZpb3VzUGFnZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgLT0gMTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnb1RvTmV4dFBhZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlICs9IDE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q3VycmVudFBhZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RldGVjdENoYW5nZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rpb24uZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVzZXRFZGl0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbmV3Um93ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAtMTtcclxuICAgIHRoaXMuZWRpdFJvd0luZGV4ID0gLTE7XHJcbiAgICB0aGlzLmVkaXRDZWxsSW5kZXggPSAtMTtcclxuICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5yb3dUb0VkaXQgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzTmV3Um93KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX25ld1JvdztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBJY29uQ2FjaGVTZXJ2aWNlID0gSWNvbkNhY2hlU2VydmljZTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgQ29yZUNvbXBvbmVudHNJY29uID0gQ29yZUNvbXBvbmVudHNJY29uO1xyXG59XHJcbiJdfQ==
|