ng-select2-component 15.0.0 → 15.0.1
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/CHANGELOG.md +7 -0
- package/README.md +6 -6
- package/esm2022/lib/select2.component.mjs +78 -15
- package/fesm2022/ng-select2-component.mjs +77 -14
- package/fesm2022/ng-select2-component.mjs.map +1 -1
- package/lib/select2.component.d.ts +5 -2
- package/lib/select2.component.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -52,8 +52,10 @@ export class Select2 {
|
|
|
52
52
|
set value(value) {
|
|
53
53
|
if (this.testValueChange(this._value, value)) {
|
|
54
54
|
setTimeout(() => {
|
|
55
|
-
this._value
|
|
56
|
-
|
|
55
|
+
if (this._value === undefined) {
|
|
56
|
+
this._value = value ?? null;
|
|
57
|
+
}
|
|
58
|
+
this.writeValue(value ?? null);
|
|
57
59
|
}, 10);
|
|
58
60
|
}
|
|
59
61
|
}
|
|
@@ -155,6 +157,7 @@ export class Select2 {
|
|
|
155
157
|
this._disabled = false;
|
|
156
158
|
this._multiple = false;
|
|
157
159
|
this._uid = `select2-${nextUniqueId++}`;
|
|
160
|
+
this._value = null;
|
|
158
161
|
/** View -> model callback called when select has been touched */
|
|
159
162
|
this._onTouched = () => {
|
|
160
163
|
// do nothing
|
|
@@ -177,7 +180,7 @@ export class Select2 {
|
|
|
177
180
|
if (!this.ifParentContainsClass(target, 'select2-dropdown')) {
|
|
178
181
|
this.toggleOpenAndClose();
|
|
179
182
|
}
|
|
180
|
-
if (!this.ifParentContainsId(target, this._id)) {
|
|
183
|
+
if (!this.overlay && !this.ifParentContainsId(target, this._id)) {
|
|
181
184
|
this.clickExit();
|
|
182
185
|
}
|
|
183
186
|
}
|
|
@@ -186,6 +189,10 @@ export class Select2 {
|
|
|
186
189
|
this.clickExit();
|
|
187
190
|
}
|
|
188
191
|
}
|
|
192
|
+
else if (this.focused) {
|
|
193
|
+
const target = e.target;
|
|
194
|
+
this._focus(this.clickOnSelect2Element(target));
|
|
195
|
+
}
|
|
189
196
|
}
|
|
190
197
|
ngOnInit() {
|
|
191
198
|
this._viewportRuler.change(100).subscribe(() => {
|
|
@@ -261,7 +268,9 @@ export class Select2 {
|
|
|
261
268
|
this.select(this.resetSelectedValue !== undefined
|
|
262
269
|
? Select2Utils.getOptionByValue(this._data, this.resetSelectedValue) ?? null
|
|
263
270
|
: null);
|
|
264
|
-
|
|
271
|
+
if (event) {
|
|
272
|
+
this.stopEvent(event);
|
|
273
|
+
}
|
|
265
274
|
}
|
|
266
275
|
prevChange(event) {
|
|
267
276
|
event.stopPropagation();
|
|
@@ -415,6 +424,26 @@ export class Select2 {
|
|
|
415
424
|
}
|
|
416
425
|
return true;
|
|
417
426
|
}
|
|
427
|
+
containAlmostOneClasses(element, cssClasses) {
|
|
428
|
+
if (!element.classList) {
|
|
429
|
+
return false;
|
|
430
|
+
}
|
|
431
|
+
let containAlmostOne = false;
|
|
432
|
+
for (const cssClass of cssClasses) {
|
|
433
|
+
if (element.classList.contains(cssClass)) {
|
|
434
|
+
containAlmostOne = true;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
return containAlmostOne;
|
|
438
|
+
}
|
|
439
|
+
clickOnSelect2Element(element) {
|
|
440
|
+
return this.containAlmostOneClasses(element, [
|
|
441
|
+
'select2-overlay-backdrop',
|
|
442
|
+
'select2-label-content',
|
|
443
|
+
'select2-selection__rendered',
|
|
444
|
+
'select2-results__option',
|
|
445
|
+
]);
|
|
446
|
+
}
|
|
418
447
|
focusin() {
|
|
419
448
|
if (!this.disabled) {
|
|
420
449
|
this._focus(true);
|
|
@@ -426,7 +455,7 @@ export class Select2 {
|
|
|
426
455
|
this._onTouched();
|
|
427
456
|
}
|
|
428
457
|
}
|
|
429
|
-
select(option) {
|
|
458
|
+
select(option, emit = true) {
|
|
430
459
|
let value;
|
|
431
460
|
if (option !== null && option !== undefined) {
|
|
432
461
|
if (this.multiple) {
|
|
@@ -448,25 +477,36 @@ export class Select2 {
|
|
|
448
477
|
this.selectionElement?.focus();
|
|
449
478
|
}
|
|
450
479
|
value = this.option.value;
|
|
480
|
+
if (!option && this._value === null) {
|
|
481
|
+
this._value = value ?? null;
|
|
482
|
+
}
|
|
451
483
|
}
|
|
452
484
|
}
|
|
453
485
|
else {
|
|
486
|
+
// when remove value
|
|
487
|
+
if (Array.isArray(this.option) ? this.option?.length : this.option) {
|
|
488
|
+
value = '';
|
|
489
|
+
}
|
|
454
490
|
this.option = null;
|
|
455
491
|
}
|
|
456
492
|
if (this.multiple && this.hideSelectedItems) {
|
|
457
493
|
this.updateFilteredData();
|
|
458
494
|
}
|
|
495
|
+
emit &&= value !== undefined && this.testDiffValue(this._value, value);
|
|
459
496
|
if (this._control) {
|
|
460
497
|
this._onChange(value);
|
|
461
498
|
}
|
|
462
|
-
|
|
463
|
-
this._value = value;
|
|
499
|
+
if (emit) {
|
|
500
|
+
this._value = value ?? null;
|
|
501
|
+
this.update.emit({
|
|
502
|
+
component: this,
|
|
503
|
+
value: this._value,
|
|
504
|
+
options: Array.isArray(this.option) ? this.option : this.option ? [this.option] : null,
|
|
505
|
+
});
|
|
464
506
|
}
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
options: Array.isArray(this.option) ? this.option : this.option ? [this.option] : null,
|
|
469
|
-
});
|
|
507
|
+
}
|
|
508
|
+
testDiffValue(val1, val2) {
|
|
509
|
+
return Array.isArray(val1) ? val1?.length !== val2?.length : val1 !== val2;
|
|
470
510
|
}
|
|
471
511
|
keyDown(event, create = false) {
|
|
472
512
|
if (create && this._testKey(event, ['Enter', 13])) {
|
|
@@ -545,7 +585,7 @@ export class Select2 {
|
|
|
545
585
|
this._onChange(value);
|
|
546
586
|
}
|
|
547
587
|
else {
|
|
548
|
-
this._value = value;
|
|
588
|
+
this._value = value ?? null;
|
|
549
589
|
}
|
|
550
590
|
this.update.emit({
|
|
551
591
|
component: this,
|
|
@@ -699,10 +739,33 @@ export class Select2 {
|
|
|
699
739
|
if (isArray) {
|
|
700
740
|
// value is not null. Preselect value
|
|
701
741
|
const selectedValues = Select2Utils.getOptionsByValue(this._data, value, this.multiple);
|
|
702
|
-
selectedValues.map(item => this.select(item));
|
|
742
|
+
selectedValues.map(item => this.select(item, false));
|
|
743
|
+
this._value ??= value;
|
|
744
|
+
if (this.testDiffValue(this._value, value)) {
|
|
745
|
+
this.update.emit({
|
|
746
|
+
component: this,
|
|
747
|
+
value: this._value,
|
|
748
|
+
options: Array.isArray(this.option) ? this.option : this.option ? [this.option] : null,
|
|
749
|
+
});
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
else if (value === null) {
|
|
753
|
+
// fix if value is null
|
|
754
|
+
this.value = [];
|
|
755
|
+
this.reset();
|
|
756
|
+
this.select(null, false);
|
|
757
|
+
if (this.testDiffValue(this._value, value)) {
|
|
758
|
+
this._value = [];
|
|
759
|
+
this.update.emit({
|
|
760
|
+
component: this,
|
|
761
|
+
value: this._value,
|
|
762
|
+
options: Array.isArray(this.option) ? this.option : this.option ? [this.option] : null,
|
|
763
|
+
});
|
|
764
|
+
}
|
|
703
765
|
}
|
|
704
766
|
}
|
|
705
767
|
else {
|
|
768
|
+
this._value ??= value;
|
|
706
769
|
this.select(Select2Utils.getOptionByValue(this._data, value));
|
|
707
770
|
}
|
|
708
771
|
}
|
|
@@ -903,4 +966,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImpor
|
|
|
903
966
|
type: HostListener,
|
|
904
967
|
args: ['document:click', ['$event']]
|
|
905
968
|
}] } });
|
|
906
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Mi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1zZWxlY3QyLWNvbXBvbmVudC9zcmMvbGliL3NlbGVjdDIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctc2VsZWN0Mi1jb21wb25lbnQvc3JjL2xpYi9zZWxlY3QyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxtQkFBbUIsR0FJdEIsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixPQUFPLEVBRUgsU0FBUyxFQUVULFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0osV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGVBQWUsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQWMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7QUFFL0MsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBRXJCLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBT2hFLE1BQU0sT0FBTyxPQUFPO0lBR2hCLG1DQUFtQztJQUNuQyxJQUErQixJQUFJLENBQUMsSUFBaUI7UUFDakQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFRRCxJQUNJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEtBQWM7UUFDdkIsSUFBSSxDQUFDLFNBQVMs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QWYsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQTRCSCxXQUFXO3NCQURkLFdBQVc7dUJBQUMsbUJBQW1CO2dCQU01QixhQUFhO3NCQURoQixXQUFXO3VCQUFDLGdCQUFnQjtnQkFNekIsWUFBWTtzQkFEZixXQUFXO3VCQUFDLGVBQWU7Z0JBTXhCLGVBQWU7c0JBRGxCLFdBQVc7dUJBQUMsa0JBQWtCO2dCQU0zQixZQUFZO3NCQURmLFdBQVc7dUJBQUMscUJBQXFCO2dCQWtCTSxtQkFBbUI7c0JBQTFELFNBQVM7dUJBQUMsbUJBQW1CO2dCQUNvQixTQUFTO3NCQUExRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1YsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxTQUFTO2dCQUNZLE9BQU87c0JBQXRDLFlBQVk7dUJBQUMsUUFBUTtnQkFDWSxXQUFXO3NCQUE1QyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ08sUUFBUTtzQkFBdEMsU0FBUzt1QkFBQyxVQUFVO2dCQTJDckIsY0FBYztzQkFEYixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDZGtDb25uZWN0ZWRPdmVybGF5LFxuICAgIENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSxcbiAgICBDb25uZWN0ZWRQb3NpdGlvbixcbiAgICBWZXJ0aWNhbENvbm5lY3Rpb25Qb3MsXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFZpZXdwb3J0UnVsZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB0eXBlIHsgRWxlbWVudFJlZiwgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEb0NoZWNrLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTZWxmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTmdDb250cm9sLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICBTZWxlY3QyQXV0b0NyZWF0ZUV2ZW50LFxuICAgIFNlbGVjdDJEYXRhLFxuICAgIFNlbGVjdDJHcm91cCxcbiAgICBTZWxlY3QyT3B0aW9uLFxuICAgIFNlbGVjdDJSZW1vdmVFdmVudCxcbiAgICBTZWxlY3QyU2Nyb2xsRXZlbnQsXG4gICAgU2VsZWN0MlNlYXJjaEV2ZW50LFxuICAgIFNlbGVjdDJVcGRhdGVFdmVudCxcbiAgICBTZWxlY3QyVXBkYXRlVmFsdWUsXG4gICAgU2VsZWN0MlZhbHVlLFxufSBmcm9tICcuL3NlbGVjdDItaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTZWxlY3QyVXRpbHMgfSBmcm9tICcuL3NlbGVjdDItdXRpbHMnO1xuXG5sZXQgbmV4dFVuaXF1ZUlkID0gMDtcblxuY29uc3QgZGlzcGxheVNlYXJjaFN0YXR1c0xpc3QgPSBbJ2RlZmF1bHQnLCAnaGlkZGVuJywgJ2Fsd2F5cyddO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NlbGVjdDInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zZWxlY3QyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdDIgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBEb0NoZWNrLCBBZnRlclZpZXdJbml0IHtcbiAgICBfZGF0YTogU2VsZWN0MkRhdGE7XG5cbiAgICAvKiogZGF0YSBvZiBvcHRpb25zICYgb3B0aW9uZ3JwcyAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNldCBkYXRhKGRhdGE6IFNlbGVjdDJEYXRhKSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkRGF0YSh0cnVlKTtcbiAgICB9XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgbWluQ2hhckZvclNlYXJjaCA9IDA7XG4gICAgQElucHV0KCkgZGlzcGxheVNlYXJjaFN0YXR1czogJ2RlZmF1bHQnIHwgJ2hpZGRlbicgfCAnYWx3YXlzJztcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgbGltaXRTZWxlY3Rpb24gPSAwO1xuICAgIEBJbnB1dCgpIGxpc3RQb3NpdGlvbjogJ2Fib3ZlJyB8ICdiZWxvdycgfCAnYXV0bycgPSAnYmVsb3cnO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgZ2V0IG11bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbXVsdGlwbGU7XG4gICAgfVxuICAgIHNldCBtdWx0aXBsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9tdWx0aXBsZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgLyoqIHVzZSB0aGUgbWF0ZXJpYWwgc3R5bGUgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBvdmVybGF5ID0gZmFsc2U7XG5cbiAgICAvKiogdXNlIHRoZSBtYXRlcmlhbCBzdHlsZSAqL1xuICAgIEBJbnB1dCgpIHN0eWxlTW9kZTogJ21hdGVyaWFsJyB8ICdub1N0eWxlJyB8ICdib3JkZXJsZXNzJyB8ICdkZWZhdWx0JyA9ICdkZWZhdWx0JztcblxuICAgIC8qKiBtZXNzYWdlIHdoZW4gbm8gcmVzdWx0ICovXG4gICAgQElucHV0KCkgbm9SZXN1bHRNZXNzYWdlOiBzdHJpbmc7XG5cbiAgICAvKiogbWF4aW11bSByZXN1bHRzIGxpbWl0ICgwID0gbm8gbGltaXQpICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgbWF4UmVzdWx0cyA9IDA7XG5cbiAgICAvKiogbWVzc2FnZSB3aGVuIG1heGltdW0gcmVzdWx0cyAqL1xuICAgIEBJbnB1dCgpIG1heFJlc3VsdHNNZXNzYWdlID0gJ1RvbyBtYW55IHJlc3VsdHPigKYnO1xuXG4gICAgLyoqIGluZmluaXRlIHNjcm9sbCBkaXN0YW5jZSAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIGluZmluaXRlU2Nyb2xsRGlzdGFuY2UgPSAxLjU7XG5cbiAgICAvKiogaW5maW5pdGUgc2Nyb2xsIGRpc3RhbmNlICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgaW5maW5pdGVTY3JvbGxUaHJvdHRsZSA9IDE1MDtcblxuICAgIC8qKiBpbmZpbml0ZSBzY3JvbGwgYWN0aXZhdGVkICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGluZmluaXRlU2Nyb2xsID0gZmFsc2U7XG5cbiAgICAvKiogYXV0byBjcmVhdGUgaWYgbm90IGV4aXN0ICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGF1dG9DcmVhdGUgPSBmYWxzZTtcblxuICAgIC8qKiBubyB0ZW1wbGF0ZSBmb3IgbGFiZWwgc2VsZWN0aW9uICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIG5vTGFiZWxUZW1wbGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqIHVzZSBpdCBmb3IgY2hhbmdlIHRoZSBwYXR0ZXJuIG9mIHRoZSBmaWx0ZXIgc2VhcmNoICovXG4gICAgQElucHV0KCkgZWRpdFBhdHRlcm46IChzdHI6IHN0cmluZykgPT4gc3RyaW5nO1xuXG4gICAgLyoqIHRlbXBsYXRlIGZvciBmb3JtYXR0aW5nICovXG4gICAgQElucHV0KCkgdGVtcGxhdGVzOiBUZW1wbGF0ZVJlZjxhbnk+IHwgeyBba2V5OiBzdHJpbmddOiBUZW1wbGF0ZVJlZjxhbnk+IH07XG5cbiAgICAvKiogdGhlIG1heCBoZWlnaHQgb2YgdGhlIHJlc3VsdHMgY29udGFpbmVyIHdoZW4gb3BlbmluZyB0aGUgc2VsZWN0ICovXG4gICAgQElucHV0KCkgcmVzdWx0TWF4SGVpZ2h0ID0gJzIwMHB4JztcblxuICAgIC8qKiBBY3RpdmUgU2VhcmNoIGV2ZW50ICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGN1c3RvbVNlYXJjaEVuYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBtaW5pbWFsIGRhdGEgb2Ygc2hvdyB0aGUgc2VhcmNoIGZpZWxkICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgICBnZXQgbWluQ291bnRGb3JTZWFyY2goKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkNvdW50Rm9yU2VhcmNoO1xuICAgIH1cbiAgICBzZXQgbWluQ291bnRGb3JTZWFyY2godmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9taW5Db3VudEZvclNlYXJjaCA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaEJveCgpO1xuICAgIH1cblxuICAgIC8qKiBVbmlxdWUgaWQgb2YgdGhlIGVsZW1lbnQuICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2lkJylcbiAgICBnZXQgaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcbiAgICB9XG4gICAgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5faWQgPSB2YWx1ZSB8fCB0aGlzLl91aWQ7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgcmVxdWlyZWQuICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBzZWxlY3RlZCBpdGVtcyBzaG91bGQgYmUgaGlkZGVuLiAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRyb2wgPyB0aGlzLl9jb250cm9sLmRpc2FibGVkIDogdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIGl0ZW1zIGFyZSBoaWRkZW4gd2hlbiBoYXMuICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhpZGVTZWxlY3RlZEl0ZW1zID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGUgZWxlbWVudCBpcyByZWFkb25seS4gKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcmVhZG9ubHkgPSBmYWxzZTtcblxuICAgIC8qKiBUaGUgaW5wdXQgZWxlbWVudCdzIHZhbHVlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogU2VsZWN0MlVwZGF0ZVZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnRlc3RWYWx1ZUNoYW5nZSh0aGlzLl92YWx1ZSwgdmFsdWUpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9LCAxMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogVGFiIGluZGV4IGZvciB0aGUgc2VsZWN0MiBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pXG4gICAgZ2V0IHRhYkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkID8gLTEgOiB0aGlzLl90YWJJbmRleDtcbiAgICB9XG4gICAgc2V0IHRhYkluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fdGFiSW5kZXggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogcmVzZXQgd2l0aCBubyBzZWxlY3RlZCB2YWx1ZSAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHJlc2V0dGFibGUgPSBmYWxzZTtcblxuICAgIC8qKiBzZWxlY3RlZCB2YWx1ZSB3aGVuIMOXIGlzIGNsaWNrZWQgKi9cbiAgICBASW5wdXQoKSByZXNldFNlbGVjdGVkVmFsdWU6IGFueTtcblxuICAgIEBPdXRwdXQoKSB1cGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdDJVcGRhdGVFdmVudDxTZWxlY3QyVXBkYXRlVmFsdWU+PigpO1xuICAgIEBPdXRwdXQoKSBhdXRvQ3JlYXRlSXRlbSA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0MkF1dG9DcmVhdGVFdmVudDxTZWxlY3QyVXBkYXRlVmFsdWU+PigpO1xuICAgIEBPdXRwdXQoKSBvcGVuID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3QyPigpO1xuICAgIEBPdXRwdXQoKSBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0Mj4oKTtcbiAgICBAT3V0cHV0KCkgZm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdDI+KCk7XG4gICAgQE91dHB1dCgpIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdDI+KCk7XG4gICAgQE91dHB1dCgpIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0MlNlYXJjaEV2ZW50PFNlbGVjdDJVcGRhdGVWYWx1ZT4+KCk7XG4gICAgQE91dHB1dCgpIHNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0MlNjcm9sbEV2ZW50PigpO1xuICAgIEBPdXRwdXQoKSByZW1vdmVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdDJSZW1vdmVFdmVudDxTZWxlY3QyVXBkYXRlVmFsdWU+PigpO1xuXG4gICAgb3B0aW9uOiBTZWxlY3QyT3B0aW9uIHwgU2VsZWN0Mk9wdGlvbltdIHwgbnVsbCA9IG51bGw7XG4gICAgaXNPcGVuID0gZmFsc2U7XG4gICAgc2VhcmNoU3R5bGU6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBlbGVtZW50IGlzIGZvY3VzZWQgb3Igbm90LiAqL1xuICAgIGZvY3VzZWQgPSBmYWxzZTtcblxuICAgIGZpbHRlcmVkRGF0YTogU2VsZWN0MkRhdGE7XG5cbiAgICBnZXQgc2VsZWN0Mk9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gKHRoaXMub3B0aW9uIGFzIFNlbGVjdDJPcHRpb25bXSkgOiBudWxsO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3QyT3B0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IG51bGwgOiAodGhpcy5vcHRpb24gYXMgU2VsZWN0Mk9wdGlvbik7XG4gICAgfVxuXG4gICAgZ2V0IHNlYXJjaFRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlubmVyU2VhcmNoVGV4dDtcbiAgICB9XG5cbiAgICBzZXQgc2VhcmNoVGV4dCh0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5pbm5lclNlYXJjaFRleHQgPSB0ZXh0O1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWludmFsaWQnKVxuICAgIGdldCBhcmlhSW52YWxpZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRXJyb3JTdGF0ZSgpO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubWF0ZXJpYWwnKVxuICAgIGdldCBjbGFzc01hdGVyaWFsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZU1vZGUgPT09ICdtYXRlcmlhbCc7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5ub3N0eWxlJylcbiAgICBnZXQgY2xhc3NOb3N0eWxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZU1vZGUgPT09ICdub1N0eWxlJztcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJvcmRlcmxlc3MnKVxuICAgIGdldCBjbGFzc0JvcmRlcmxlc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlTW9kZSA9PT0gJ2JvcmRlcmxlc3MnO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3Muc2VsZWN0Mi1hYm92ZScpXG4gICAgZ2V0IHNlbGVjdDJhYm92ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm92ZXJsYXkgPyB0aGlzLmxpc3RQb3NpdGlvbiA9PT0gJ2Fib3ZlJyA6IHRoaXMuX2lzQWJvYmVPdmVybGF5KCk7XG4gICAgfVxuXG4gICAgb3ZlcmxheVdpZHRoOiBudW1iZXI7XG4gICAgb3ZlcmxheUhlaWdodDogbnVtYmVyO1xuICAgIF90cmlnZ2VyUmVjdDogRE9NUmVjdDtcbiAgICBfZHJvcGRvd25SZWN0OiBET01SZWN0O1xuXG4gICAgZ2V0IF9wb3NpdGlvbnMoKTogQ29ubmVjdGVkUG9zaXRpb25bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpc3RQb3NpdGlvbiA9PT0gJ2F1dG8nID8gdW5kZWZpbmVkIDogbnVsbDtcbiAgICB9XG5cbiAgICBtYXhSZXN1bHRzRXhjZWVkZWQ6IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIF9taW5Db3VudEZvclNlYXJjaD86IG51bWJlcjtcblxuICAgIEBWaWV3Q2hpbGQoQ2RrQ29ubmVjdGVkT3ZlcmxheSkgcHJpdmF0ZSBjZGtDb25uZWN0ZWRPdmVybGF5OiBDZGtDb25uZWN0ZWRPdmVybGF5O1xuICAgIEBWaWV3Q2hpbGQoJ3NlbGVjdGlvbicsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgc2VsZWN0aW9uOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgICBAVmlld0NoaWxkKCdyZXN1bHRzJykgcHJpdmF0ZSByZXN1bHRDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICAgIEBWaWV3Q2hpbGRyZW4oJ3Jlc3VsdCcpIHByaXZhdGUgcmVzdWx0czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICAgIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0JykgcHJpdmF0ZSBzZWFyY2hJbnB1dDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgnZHJvcGRvd24nKSBwcml2YXRlIGRyb3Bkb3duOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIHByaXZhdGUgaG92ZXJpbmdWYWx1ZTogU2VsZWN0MlZhbHVlIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGw7XG4gICAgcHJpdmF0ZSBpbm5lclNlYXJjaFRleHQgPSAnJztcbiAgICBwcml2YXRlIGlzU2VhcmNoYm94SGlkZGVuOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25FbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICAgIHByaXZhdGUgZ2V0IHJlc3VsdHNFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0Q29udGFpbmVyPy5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3N0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogVGFiIGluZGV4IGZvciB0aGUgZWxlbWVudC4gKi9cbiAgICBwcml2YXRlIF90YWJJbmRleDogbnVtYmVyO1xuXG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9tdWx0aXBsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2lkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfdWlkID0gYHNlbGVjdDItJHtuZXh0VW5pcXVlSWQrK31gO1xuICAgIHByaXZhdGUgX3ZhbHVlOiBTZWxlY3QyVXBkYXRlVmFsdWU7XG4gICAgcHJpdmF0ZSBfcHJldmlvdXNOYXRpdmVWYWx1ZTogU2VsZWN0MlVwZGF0ZVZhbHVlO1xuICAgIHByaXZhdGUgX292ZXJsYXlQb3NpdGlvbjogVmVydGljYWxDb25uZWN0aW9uUG9zO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBfdmlld3BvcnRSdWxlcjogVmlld3BvcnRSdWxlcixcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9wYXJlbnRGb3JtOiBOZ0Zvcm0sXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX3BhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgICAgICBAU2VsZigpIEBPcHRpb25hbCgpIHB1YmxpYyBfY29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBAQXR0cmlidXRlKCd0YWJpbmRleCcpIHRhYkluZGV4OiBzdHJpbmcsXG4gICAgKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnblxuICAgICAgICB0aGlzLmlkID0gdGhpcy5pZDtcbiAgICAgICAgdGhpcy5fdGFiSW5kZXggPSBwYXJzZUludCh0YWJJbmRleCwgMTApIHx8IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gICAgY2xpY2tEZXRlY3Rpb24oZTogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4gJiYgZm9jdXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlmUGFyZW50Q29udGFpbnNDbGFzcyh0YXJnZXQsICdzZWxlY3Rpb24nKSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pZlBhcmVudENvbnRhaW5zQ2xhc3ModGFyZ2V0LCAnc2VsZWN0Mi1kcm9wZG93bicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlT3BlbkFuZENsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pZlBhcmVudENvbnRhaW5zSWQodGFyZ2V0LCB0aGlzLl9pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGlja0V4aXQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlmUGFyZW50Q29udGFpbnNJZCh0YXJnZXQsIHRoaXMuX2lkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlT3BlbkFuZENsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGlja0V4aXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBWaWV3IC0+IG1vZGVsIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHNlbGVjdCBoYXMgYmVlbiB0b3VjaGVkICovXG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkID0gKCkgPT4ge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgfTtcblxuICAgIC8qKiBWaWV3IC0+IG1vZGVsIGNhbGxiYWNrIGNhbGxlZCB3aGVuIHZhbHVlIGNoYW5nZXMgKi9cbiAgICBwcml2YXRlIF9vbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9O1xuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKDEwMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9uID0gU2VsZWN0MlV0aWxzLmdldE9wdGlvbnNCeVZhbHVlKFxuICAgICAgICAgICAgdGhpcy5fZGF0YSxcbiAgICAgICAgICAgIHRoaXMuX2NvbnRyb2wgPyB0aGlzLl9jb250cm9sLnZhbHVlIDogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgIHRoaXMubXVsdGlwbGUsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvcHRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uID0gb3B0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRpb24pKSB7XG4gICAgICAgICAgICB0aGlzLmhvdmVyaW5nVmFsdWUgPSB0aGlzLnZhbHVlIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaEJveCgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5LnBvc2l0aW9uQ2hhbmdlLnN1YnNjcmliZSgocG9zQ2hhbmdlOiBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RQb3NpdGlvbiA9PT0gJ2F1dG8nICYmXG4gICAgICAgICAgICAgICAgcG9zQ2hhbmdlLmNvbm5lY3Rpb25QYWlyPy5vcmlnaW5ZICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVBvc2l0aW9uICE9PSBwb3NDaGFuZ2UuY29ubmVjdGlvblBhaXIub3JpZ2luWVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJsYXlQb3NpdGlvbiA9IHBvc0NoYW5nZS5jb25uZWN0aW9uUGFpci5vcmlnaW5ZO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25FbGVtZW50ID0gdGhpcy5zZWxlY3Rpb24ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy50cmlnZ2VyUmVjdCgpO1xuICAgIH1cblxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZWFyY2hCb3goKTtcbiAgICAgICAgdGhpcy5fZGlydHlDaGVja05hdGl2ZVZhbHVlKCk7XG4gICAgICAgIGlmICh0aGlzLl90cmlnZ2VyUmVjdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheVdpZHRoICE9PSB0aGlzLl90cmlnZ2VyUmVjdC53aWR0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVdpZHRoID0gdGhpcy5fdHJpZ2dlclJlY3Qud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fZHJvcGRvd25SZWN0Py5oZWlnaHQgPiAwICYmIHRoaXMub3ZlcmxheUhlaWdodCAhPT0gdGhpcy5fZHJvcGRvd25SZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheUhlaWdodCA9IHRoaXMubGlzdFBvc2l0aW9uID09PSAnYXV0bycgPyB0aGlzLl9kcm9wZG93blJlY3QuaGVpZ2h0IDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVNlYXJjaEJveCgpIHtcbiAgICAgICAgY29uc3QgaGlkZGVuID0gdGhpcy5jdXN0b21TZWFyY2hFbmFibGVkXG4gICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICA6IFNlbGVjdDJVdGlscy5pc1NlYXJjaGJveEhpZGRleCh0aGlzLl9kYXRhLCB0aGlzLl9taW5Db3VudEZvclNlYXJjaCk7XG4gICAgICAgIGlmICh0aGlzLmlzU2VhcmNoYm94SGlkZGVuICE9PSBoaWRkZW4pIHtcbiAgICAgICAgICAgIHRoaXMuaXNTZWFyY2hib3hIaWRkZW4gPSBoaWRkZW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoaWRlU2VhcmNoKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkaXNwbGF5U2VhcmNoU3RhdHVzID1cbiAgICAgICAgICAgIGRpc3BsYXlTZWFyY2hTdGF0dXNMaXN0LmluZGV4T2YodGhpcy5kaXNwbGF5U2VhcmNoU3RhdHVzKSA+IC0xID8gdGhpcy5kaXNwbGF5U2VhcmNoU3RhdHVzIDogJ2RlZmF1bHQnO1xuICAgICAgICByZXR1cm4gKGRpc3BsYXlTZWFyY2hTdGF0dXMgPT09ICdkZWZhdWx0JyAmJiB0aGlzLmlzU2VhcmNoYm94SGlkZGVuKSB8fCBkaXNwbGF5U2VhcmNoU3RhdHVzID09PSAnaGlkZGVuJztcbiAgICB9XG5cbiAgICBnZXRPcHRpb25TdHlsZShvcHRpb246IFNlbGVjdDJPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICdzZWxlY3QyLXJlc3VsdHNfX29wdGlvbiAnICtcbiAgICAgICAgICAgIChvcHRpb24uaGlkZSA/ICdzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlkZSAnIDogJycpICtcbiAgICAgICAgICAgIChvcHRpb24udmFsdWUgPT09IHRoaXMuaG92ZXJpbmdWYWx1ZSA/ICdzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlnaGxpZ2h0ZWQgJyA6ICcnKSArXG4gICAgICAgICAgICAob3B0aW9uLmNsYXNzZXMgfHwgJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgbW91c2VlbnRlcihvcHRpb246IFNlbGVjdDJPcHRpb24pIHtcbiAgICAgICAgaWYgKCFvcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaG92ZXJpbmdWYWx1ZSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsaWNrKG9wdGlvbjogU2VsZWN0Mk9wdGlvbikge1xuICAgICAgICBpZiAodGhpcy50ZXN0U2VsZWN0aW9uKG9wdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0KG9wdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldChldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICAvLyBjb25zdCB0ZXN0ID0gU2VsZWN0MlV0aWxzLmdldE9wdGlvbkJ5VmFsdWUodGhpcy5fZGF0YSwgdGhpcy5yZXNldFNlbGVjdGVkVmFsdWUpO1xuICAgICAgICAvLyBkZWJ1Z2dlcjtcbiAgICAgICAgdGhpcy5zZWxlY3QoXG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBTZWxlY3QyVXRpbHMuZ2V0T3B0aW9uQnlWYWx1ZSh0aGlzLl9kYXRhLCB0aGlzLnJlc2V0U2VsZWN0ZWRWYWx1ZSkgPz8gbnVsbFxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnN0b3BFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgcHJldkNoYW5nZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgc3RvcEV2ZW50KGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICB0b2dnbGVPcGVuQW5kQ2xvc2UoZm9jdXMgPSB0cnVlLCBvcGVuPzogYm9vbGVhbiwgZXZlbnQ/OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZm9jdXMoZm9jdXMpO1xuXG4gICAgICAgIGNvbnN0IGNoYW5nZUVtaXQgPSB0aGlzLmlzT3BlbiAhPT0gKG9wZW4gPz8gIXRoaXMuaXNPcGVuKTtcbiAgICAgICAgdGhpcy5pc09wZW4gPSBvcGVuID8/ICF0aGlzLmlzT3BlbjtcblxuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1NlYXJjaGJveEhpZGRlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5uZXJTZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZERhdGEoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c1NlYXJjaGJveE9yUmVzdWx0c0VsZW1lbnQoZm9jdXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pc1NlYXJjaGJveEhpZGRlbiAmJiAhY2hhbmdlRW1pdCAmJiBldmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMua2V5RG93bihldmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb24pID8gdGhpcy5vcHRpb25bMF0gOiB0aGlzLm9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsRnJvbU9wdGlvbihvcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzdWx0c0VsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0c0VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheT8ub3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGFuZ2VFbWl0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuLmVtaXQodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlRW1pdCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZS5lbWl0KHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgaGFzVGVtcGxhdGUob3B0aW9uOiBTZWxlY3QyT3B0aW9uIHwgU2VsZWN0Mkdyb3VwLCBkZWZhdXQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXMgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZiB8fFxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXM/LltvcHRpb24udGVtcGxhdGVJZF0gaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZiB8fFxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXM/LltkZWZhdXRdIGluc3RhbmNlb2YgVGVtcGxhdGVSZWZcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRUZW1wbGF0ZShvcHRpb246IFNlbGVjdDJPcHRpb24gfCBTZWxlY3QyR3JvdXAsIGRlZmF1dDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc1RlbXBsYXRlKG9wdGlvbiwgZGVmYXV0KVxuICAgICAgICAgICAgPyB0aGlzLnRlbXBsYXRlc1tvcHRpb24udGVtcGxhdGVJZF0gfHwgdGhpcy50ZW1wbGF0ZXNbZGVmYXV0XSB8fCB0aGlzLnRlbXBsYXRlc1xuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdHJpZ2dlclJlY3QoKSB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJSZWN0ID0gdGhpcy5zZWxlY3Rpb25FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB0aGlzLl9kcm9wZG93blJlY3QgPSB0aGlzLmRyb3Bkb3duPy5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICA/IHRoaXMuZHJvcGRvd24ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0ZXN0U2VsZWN0aW9uKG9wdGlvbjogU2VsZWN0Mk9wdGlvbikge1xuICAgICAgICBpZiAob3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgIXRoaXMubXVsdGlwbGUgfHxcbiAgICAgICAgICAgICF0aGlzLmxpbWl0U2VsZWN0aW9uIHx8XG4gICAgICAgICAgICAoQXJyYXkuaXNBcnJheSh0aGlzLl92YWx1ZSkgJiYgdGhpcy5fdmFsdWUubGVuZ3RoIDwgdGhpcy5saW1pdFNlbGVjdGlvbilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRlc3RWYWx1ZUNoYW5nZSh2YWx1ZTE6IFNlbGVjdDJVcGRhdGVWYWx1ZSwgdmFsdWUyOiBTZWxlY3QyVXBkYXRlVmFsdWUpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKCh2YWx1ZTEgPT09IG51bGwgfHwgdmFsdWUxID09PSB1bmRlZmluZWQpICYmICh2YWx1ZTIgPT09IG51bGwgfHwgdmFsdWUyID09PSB1bmRlZmluZWQpKSB8fFxuICAgICAgICAgICAgdmFsdWUxID09PSB2YWx1ZTJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5tdWx0aXBsZSAmJlxuICAgICAgICAgICAgKHZhbHVlMSBhcyBTZWxlY3QyVmFsdWVbXSk/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgKHZhbHVlMiBhcyBTZWxlY3QyVmFsdWVbXSk/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgKHZhbHVlMSBhcyBTZWxlY3QyVmFsdWVbXSkubGVuZ3RoID09PSAodmFsdWUyIGFzIFNlbGVjdDJWYWx1ZVtdKS5sZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGUxIG9mIHZhbHVlMSBhcyBTZWxlY3QyVmFsdWVbXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlc3QgPSAodmFsdWUyIGFzIFNlbGVjdDJWYWx1ZVtdKS5pbmRleE9mKGUxKSA+IC0xO1xuICAgICAgICAgICAgICAgIGlmICghdGVzdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVGaWx0ZXJlZERhdGEod3JpdGVWYWx1ZSA9IGZhbHNlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuX2RhdGE7XG4gICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLmhpZGVTZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gU2VsZWN0MlV0aWxzLmdldEZpbHRlcmVkU2VsZWN0ZWREYXRhKHJlc3VsdCwgdGhpcy5vcHRpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuY3VzdG9tU2VhcmNoRW5hYmxlZCAmJiB0aGlzLnNlYXJjaFRleHQgJiYgdGhpcy5zZWFyY2hUZXh0Lmxlbmd0aCA+PSArdGhpcy5taW5DaGFyRm9yU2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gU2VsZWN0MlV0aWxzLmdldEZpbHRlcmVkRGF0YShyZXN1bHQsIHRoaXMuc2VhcmNoVGV4dCwgdGhpcy5lZGl0UGF0dGVybik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1heFJlc3VsdHMgPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IFNlbGVjdDJVdGlscy5nZXRSZWR1Y2VEYXRhKHJlc3VsdCwgK3RoaXMubWF4UmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZGF0YS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzRXhjZWVkZWQgPSBkYXRhLnJlZHVjZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzRXhjZWVkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFNlbGVjdDJVdGlscy52YWx1ZUlzTm90SW5GaWx0ZXJlZERhdGEocmVzdWx0LCB0aGlzLmhvdmVyaW5nVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3ZlcmluZ1ZhbHVlID0gU2VsZWN0MlV0aWxzLmdldEZpcnN0QXZhaWxhYmxlT3B0aW9uKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh3cml0ZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVmcmVzaCBjdXJyZW50IHNlbGVjdGVkIHZhbHVlXG4gICAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuX2NvbnRyb2wgPyB0aGlzLl9jb250cm9sLnZhbHVlIDogdGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gcmVzdWx0O1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xpY2tFeGl0KCkge1xuICAgICAgICB0aGlzLl9mb2N1cyhmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpZlBhcmVudENvbnRhaW5zQ2xhc3MoZWxlbWVudDogSFRNTEVsZW1lbnQsIGNzc0NsYXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50RWxlbWVudEJ5Q2xhc3MoZWxlbWVudCwgY3NzQ2xhc3MpICE9PSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgaWZQYXJlbnRDb250YWluc0lkKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudEVsZW1lbnRCeUlkKGVsZW1lbnQsIGlkKSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhcmVudEVsZW1lbnRCeUNsYXNzKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjc3NDbGFzczogc3RyaW5nKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbkNsYXNzZXMoZWxlbWVudCwgY3NzQ2xhc3MudHJpbSgpLnNwbGl0KC9cXHMrLykpXG4gICAgICAgICAgICA/IGVsZW1lbnRcbiAgICAgICAgICAgIDogZWxlbWVudC5wYXJlbnRFbGVtZW50XG4gICAgICAgICAgICAgID8gdGhpcy5nZXRQYXJlbnRFbGVtZW50QnlDbGFzcyhlbGVtZW50LnBhcmVudEVsZW1lbnQsIGNzc0NsYXNzKVxuICAgICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQYXJlbnRFbGVtZW50QnlJZChlbGVtZW50OiBIVE1MRWxlbWVudCwgaWQ6IHN0cmluZyk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmlkID09PSBpZFxuICAgICAgICAgICAgPyBlbGVtZW50XG4gICAgICAgICAgICA6IGVsZW1lbnQucGFyZW50RWxlbWVudFxuICAgICAgICAgICAgICA/IHRoaXMuZ2V0UGFyZW50RWxlbWVudEJ5SWQoZWxlbWVudC5wYXJlbnRFbGVtZW50LCBpZClcbiAgICAgICAgICAgICAgOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udGFpbkNsYXNzZXMoZWxlbWVudDogSFRNTEVsZW1lbnQsIGNzc0NsYXNzZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghZWxlbWVudC5jbGFzc0xpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGNzc0NsYXNzIG9mIGNzc0NsYXNzZXMpIHtcbiAgICAgICAgICAgIGlmICghZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY3NzQ2xhc3MpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvY3VzaW4oKSB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXModHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb2N1c291dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uRWxlbWVudCAmJiAhdGhpcy5zZWxlY3Rpb25FbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnc2VsZWN0Mi1mb2N1c2VkJykpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0KG9wdGlvbjogU2VsZWN0Mk9wdGlvbiB8IG51bGwpIHtcbiAgICAgICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgICAgIGlmIChvcHRpb24gIT09IG51bGwgJiYgb3B0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uIGFzIFNlbGVjdDJPcHRpb25bXTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IG9wdGlvbnMuZmluZEluZGV4KG9wID0+IG9wLnZhbHVlID09PSBvcHRpb24udmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YWx1ZSA9ICh0aGlzLm9wdGlvbiBhcyBTZWxlY3QyT3B0aW9uW10pLm1hcChvcCA9PiBvcC52YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uID0gb3B0aW9uO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlLmVtaXQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uRWxlbWVudD8uZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLm9wdGlvbi52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlICYmIHRoaXMuaGlkZVNlbGVjdGVkSXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWREYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlLmVtaXQoe1xuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgb3B0aW9uczogQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbikgPyB0aGlzLm9wdGlvbiA6IHRoaXMub3B0aW9uID8gW3RoaXMub3B0aW9uXSA6IG51bGwsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGNyZWF0ZSA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChjcmVhdGUgJiYgdGhpcy5fdGVzdEtleShldmVudCwgWydFbnRlcicsIDEzXSkpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQW5kQWRkKGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90ZXN0S2V5KGV2ZW50LCBbJ0Fycm93RG93bicsIDQwXSkpIHtcbiAgICAgICAgICAgIHRoaXMubW92ZURvd24oKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGVzdEtleShldmVudCwgWydBcnJvd1VwJywgMzhdKSkge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVXAoKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGVzdEtleShldmVudCwgWydFbnRlcicsIDEzXSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QnlFbnRlcigpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90ZXN0S2V5KGV2ZW50LCBbJ0VzY2FwZScsICdUYWInLCA5LCAyN10pICYmIHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZU9wZW5BbmRDbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5fZm9jdXMoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3BlbktleShldmVudDogS2V5Ym9hcmRFdmVudCwgY3JlYXRlID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGNyZWF0ZSAmJiB0aGlzLl90ZXN0S2V5KGV2ZW50LCBbJ0VudGVyJywgMTNdKSkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVBbmRBZGQoZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3Rlc3RLZXkoZXZlbnQsIFsnQXJyb3dEb3duJywgJ0Fycm93VXAnLCAnRW50ZXInLCA0MCwgMzgsIDEzXSkpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlT3BlbkFuZENsb3NlKHRydWUsIHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGVzdEtleShldmVudCwgWydFc2NhcGUnLCAnVGFiJywgOSwgMjddKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVPcGVuQW5kQ2xvc2UoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlYXJjaFVwZGF0ZShlOiBFdmVudCkge1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSAoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5jdXN0b21TZWFyY2hFbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkRGF0YSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2guZW1pdCh7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl92YWx1ZSxcbiAgICAgICAgICAgICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLl9kYXRhLFxuICAgICAgICAgICAgICAgIGZpbHRlcmVkRGF0YTogKGRhdGE6IFNlbGVjdDJEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJhY2tCeShfaW5kZXg6IG51bWJlciwgaXRlbTogU2VsZWN0Mk9wdGlvbik6IGFueSB7XG4gICAgICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICAgIH1cblxuICAgIGlzU2VsZWN0ZWQob3B0aW9uOiBTZWxlY3QyT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBTZWxlY3QyVXRpbHMuaXNTZWxlY3RlZCh0aGlzLm9wdGlvbiwgb3B0aW9uLCB0aGlzLm11bHRpcGxlKTtcbiAgICB9XG5cbiAgICBpc0Rpc2FibGVkKG9wdGlvbjogU2VsZWN0Mk9wdGlvbikge1xuICAgICAgICByZXR1cm4gb3B0aW9uLmRpc2FibGVkID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG5cbiAgICByZW1vdmVTZWxlY3Rpb24oZTogTW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnQsIG9wdGlvbjogU2VsZWN0Mk9wdGlvbikge1xuICAgICAgICBTZWxlY3QyVXRpbHMucmVtb3ZlU2VsZWN0aW9uKHRoaXMub3B0aW9uLCBvcHRpb24pO1xuXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlICYmIHRoaXMuaGlkZVNlbGVjdGVkSXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWREYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9ICh0aGlzLm9wdGlvbiBhcyBTZWxlY3QyT3B0aW9uW10pLm1hcChvcCA9PiBvcC52YWx1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZS5lbWl0KHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb24pID8gdGhpcy5vcHRpb24gOiB0aGlzLm9wdGlvbiA/IFt0aGlzLm9wdGlvbl0gOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZW1vdmVPcHRpb24uZW1pdCh7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICByZW1vdmVkT3B0aW9uOiBvcHRpb24sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzU2VhcmNoYm94T3JSZXN1bHRzRWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbW9kZWwgdmFsdWUuIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAgICogQHBhcmFtIHZhbHVlXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCB3aGVuIHRoZSBzZWxlY3QncyB2YWx1ZVxuICAgICAqIGNoYW5nZXMgZnJvbSB1c2VyIGlucHV0LiBQYXJ0IG9mIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgICAgKiByZXF1aXJlZCB0byBpbnRlZ3JhdGUgd2l0aCBBbmd1bGFyJ3MgY29yZSBmb3JtcyBBUEkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZm4gQ2FsbGJhY2sgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIHZhbHVlIGNoYW5nZXMuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTYXZlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgc2VsZWN0IGlzIGJsdXJyZWRcbiAgICAgKiBieSB0aGUgdXNlci4gUGFydCBvZiB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlIHJlcXVpcmVkXG4gICAgICogdG8gaW50ZWdyYXRlIHdpdGggQW5ndWxhcidzIGNvcmUgZm9ybXMgQVBJLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZuIENhbGxiYWNrIHRvIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gdG91Y2hlZC5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBzaG91bGQgYmUgZGlzYWJsZWQuXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICAgKiBAcGFyYW0gaXNEaXNhYmxlZFxuICAgICAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBvblNjcm9sbCh3YXk6ICd1cCcgfCAnZG93bicpIHtcbiAgICAgICAgdGhpcy5zY3JvbGwuZW1pdCh7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICB3YXksXG4gICAgICAgICAgICBzZWFyY2g6IHRoaXMuaW5uZXJTZWFyY2hUZXh0LFxuICAgICAgICAgICAgZGF0YTogdGhpcy5fZGF0YSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2lzRXJyb3JTdGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaXNJbnZhbGlkID0gdGhpcy5fY29udHJvbD8uaW52YWxpZDtcbiAgICAgICAgY29uc3QgaXNUb3VjaGVkID0gdGhpcy5fY29udHJvbD8udG91Y2hlZDtcbiAgICAgICAgY29uc3QgaXNTdWJtaXR0ZWQgPSB0aGlzLl9wYXJlbnRGb3JtR3JvdXA/LnN1Ym1pdHRlZCB8fCB0aGlzLl9wYXJlbnRGb3JtPy5zdWJtaXR0ZWQ7XG4gICAgICAgIHJldHVybiAhIShpc0ludmFsaWQgJiYgKGlzVG91Y2hlZCB8fCBpc1N1Ym1pdHRlZCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkSXRlbSh2YWx1ZTogc3RyaW5nKTogU2VsZWN0Mk9wdGlvbiB7XG4gICAgICAgIGxldCBpdGVtID0gU2VsZWN0MlV0aWxzLmdldE9wdGlvbkJ5VmFsdWUodGhpcy5fZGF0YSwgdmFsdWUpO1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUFuZEFkZChlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUudHJpbSgpKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5hZGRJdGVtKHZhbHVlLnRyaW0oKSk7XG4gICAgICAgICAgICB0aGlzLmNsaWNrKGl0ZW0pO1xuICAgICAgICAgICAgKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9DcmVhdGVJdGVtLmVtaXQoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBBcnJheS5pc0FycmF5KHRoaXMub3B0aW9uKSA/IHRoaXMub3B0aW9uIDogdGhpcy5vcHRpb24gPyBbdGhpcy5vcHRpb25dIDogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RvcEV2ZW50KGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW92ZVVwKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbEZyb21PcHRpb24oU2VsZWN0MlV0aWxzLmdldFByZXZpb3VzT3B0aW9uKHRoaXMuZmlsdGVyZWREYXRhLCB0aGlzLmhvdmVyaW5nVmFsdWUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVEb3duKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbEZyb21PcHRpb24oU2VsZWN0MlV0aWxzLmdldE5leHRPcHRpb24odGhpcy5maWx0ZXJlZERhdGEsIHRoaXMuaG92ZXJpbmdWYWx1ZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2Nyb2xsRnJvbU9wdGlvbihvcHRpb246IFNlbGVjdDJPcHRpb24pIHtcbiAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgdGhpcy5ob3ZlcmluZ1ZhbHVlID0gb3B0aW9uLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMucmVzdWx0cy5maW5kKHIgPT4gci5uYXRpdmVFbGVtZW50LmlubmVyVGV4dC50cmltKCkgPT09IG9wdGlvbi5sYWJlbCk7XG4gICAgICAgICAgICBpZiAoZG9tRWxlbWVudCAmJiB0aGlzLnJlc3VsdHNFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RDbGllbnRSZWN0ID0gdGhpcy5yZXN1bHRzRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25DbGllbnRSZWN0ID0gZG9tRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0c0VsZW1lbnQuc2Nyb2xsVG9wID0gb3B0aW9uQ2xpZW50UmVjdC50b3AgLSBsaXN0Q2xpZW50UmVjdC50b3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdEJ5RW50ZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmhvdmVyaW5nVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IFNlbGVjdDJVdGlscy5nZXRPcHRpb25CeVZhbHVlKHRoaXMuX2RhdGEsIHRoaXMuaG92ZXJpbmdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdChvcHRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdGVzdEtleShldmVudDogS2V5Ym9hcmRFdmVudCwgcmVmczogKG51bWJlciB8IHN0cmluZylbXSA9IFtdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0tleSh0aGlzLl9nZXRLZXkoZXZlbnQpLCByZWZzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBudW1iZXIgfCBzdHJpbmcge1xuICAgICAgICBsZXQgY29kZTogbnVtYmVyIHwgc3RyaW5nO1xuXG4gICAgICAgIGlmIChldmVudC5rZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29kZSA9IGV2ZW50LmtleTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudFsna2V5SWRlbnRpZmllciddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvZGUgPSBldmVudFsna2V5SWRlbnRpZmllciddO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50WydrZXlDb2RlJ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29kZSA9IGV2ZW50WydrZXlDb2RlJ107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaXNLZXkoY29kZTogbnVtYmVyIHwgc3RyaW5nLCByZWZzOiAobnVtYmVyIHwgc3RyaW5nKVtdID0gW10pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHJlZnMgJiYgcmVmcy5sZW5ndGggPiAwID8gcmVmcy5pbmRleE9mKGNvZGUpICE9PSAtMSA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHNlbGVjdGVkIG9wdGlvbiBiYXNlZCBvbiBhIHZhbHVlLiBJZiBubyBvcHRpb24gY2FuIGJlXG4gICAgICogZm91bmQgd2l0aCB0aGUgZGVzaWduYXRlZCB2YWx1ZSwgdGhlIHNlbGVjdCB0cmlnZ2VyIGlzIGNsZWFyZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0U2VsZWN0aW9uQnlWYWx1ZSh2YWx1ZTogYW55IHwgYW55W10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uIHx8ICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSkge1xuICAgICAgICAgICAgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgdmFsdWUgJiYgIWlzQXJyYXkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbiBhcnJheSB2YWx1ZS4nKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uID0gW107IC8vIGlmIHZhbHVlIGlzIG51bGwsIHRoZW4gZW1wdHkgb3B0aW9uIGFuZCByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIGlzIG5vdCBudWxsLiBQcmVzZWxlY3QgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzOiBhbnkgPSBTZWxlY3QyVXRpbHMuZ2V0T3B0aW9uc0J5VmFsdWUodGhpcy5fZGF0YSwgdmFsdWUsIHRoaXMubXVsdGlwbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZXMubWFwKGl0ZW0gPT4gdGhpcy5zZWxlY3QoaXRlbSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoU2VsZWN0MlV0aWxzLmdldE9wdGlvbkJ5VmFsdWUodGhpcy5fZGF0YSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250cm9sLnZpZXdUb01vZGVsVXBkYXRlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRG9lcyBzb21lIG1hbnVhbCBkaXJ0eSBjaGVja2luZyBvbiB0aGUgbmF0aXZlIGlucHV0IGB2YWx1ZWAgcHJvcGVydHkuICovXG4gICAgcHJpdmF0ZSBfZGlydHlDaGVja05hdGl2ZVZhbHVlKCkge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMudmFsdWU7XG5cbiAgICAgICAgaWYgKHRoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZm9jdXNTZWFyY2hib3hPclJlc3VsdHNFbGVtZW50KGZvY3VzID0gdHJ1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNTZWFyY2hib3hIaWRkZW4pIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0ICYmIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudCAmJiBmb2N1cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3VsdHNFbGVtZW50ICYmIGZvY3VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZm9jdXMoc3RhdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCFzdGF0ZSAmJiB0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IHN0YXRlO1xuICAgICAgICAgICAgdGhpcy5ibHVyLmVtaXQodGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgJiYgIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gc3RhdGU7XG4gICAgICAgICAgICB0aGlzLmZvY3VzLmVtaXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0Fib2JlT3ZlcmxheSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheSAmJiB0aGlzLl9vdmVybGF5UG9zaXRpb24gJiYgdGhpcy5saXN0UG9zaXRpb24gPT09ICdhdXRvJ1xuICAgICAgICAgICAgPyB0aGlzLl9vdmVybGF5UG9zaXRpb24gPT09ICd0b3AnXG4gICAgICAgICAgICA6IHRoaXMubGlzdFBvc2l0aW9uID09PSAnYWJvdmUnO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZWxlY3QyLWxhYmVsXCIgKGNsaWNrKT1cInRvZ2dsZU9wZW5BbmRDbG9zZSgpXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2VsZWN0Mi1sYWJlbFwiPjwvbmctY29udGVudD5cbiAgICBAaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0Mi1yZXF1aXJlZFwiPjwvc3Bhbj5cbiAgICB9XG48L2Rpdj5cblxuPGRpdlxuICAgIGNsYXNzPVwic2VsZWN0MiBzZWxlY3QyLWNvbnRhaW5lciBzZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdFwiXG4gICAgW2NsYXNzLnNlbGVjdDItY29udGFpbmVyLS1mb2N1c109XCJmb2N1c2VkXCJcbiAgICBbY2xhc3Muc2VsZWN0Mi1jb250YWluZXItLWJlbG93XT1cIiFzZWxlY3QyYWJvdmVcIlxuICAgIFtjbGFzcy5zZWxlY3QyLWNvbnRhaW5lci0tYWJvdmVdPVwic2VsZWN0MmFib3ZlXCJcbiAgICBbY2xhc3Muc2VsZWN0Mi1jb250YWluZXItLW9wZW5dPVwiaXNPcGVuXCJcbiAgICBbY2xhc3Muc2VsZWN0Mi1jb250YWluZXItLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbj5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwic2VsZWN0aW9uXCJcbiAgICAgICAgI3NlbGVjdGlvblxuICAgICAgICAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIlxuICAgICAgICBbdGFiaW5kZXhdPVwiIXRoaXMuaXNPcGVuID8gdGFiSW5kZXggOiAnLTEnXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wZW5BbmRDbG9zZSgpXCJcbiAgICAgICAgKGZvY3VzKT1cImZvY3VzaW4oKVwiXG4gICAgICAgIChibHVyKT1cImZvY3Vzb3V0KClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvcGVuS2V5KCRldmVudClcIlxuICAgICAgICBjZGtPdmVybGF5T3JpZ2luXG4gICAgICAgIFtjbGFzcy5zZWxlY3QyLWZvY3VzZWRdPVwiZm9jdXNlZFwiXG4gICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uXCJcbiAgICAgICAgICAgIFtjbGFzcy5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgW2NsYXNzLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGVdPVwiIW11bHRpcGxlXCJcbiAgICAgICAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoIW11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIiBbdGl0bGVdPVwic2VsZWN0Mk9wdGlvbj8ubGFiZWwgfHwgJydcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghc2VsZWN0Mk9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0Mk9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghaGFzVGVtcGxhdGUoc2VsZWN0Mk9wdGlvbiwgJ29wdGlvbicpIHx8IG5vTGFiZWxUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwic2VsZWN0Mk9wdGlvbi5sYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRUZW1wbGF0ZShzZWxlY3QyT3B0aW9uLCAnb3B0aW9uJyk7IGNvbnRleHQ6IHNlbGVjdDJPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdDItc2VsZWN0aW9uX19wbGFjZWhvbGRlcl9fb3B0aW9uXT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uX19wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+e3sgcGxhY2Vob2xkZXIgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoIW11bHRpcGxlICYmIHJlc2V0dGFibGUgJiYgcmVzZXRTZWxlY3RlZFZhbHVlICE9PSB2YWx1ZSAmJiBzZWxlY3QyT3B0aW9uICYmICEoZGlzYWJsZWQgfHwgcmVhZG9ubHkpKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cInJlc2V0KCRldmVudClcIiBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uX19yZXNldFwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj7Dlzwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoIW11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3dcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+IDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghYXV0b0NyZWF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyX19vcHRpb25dPVwic2VsZWN0Mk9wdGlvbnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgcGxhY2Vob2xkZXIgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAZm9yIChvcCBvZiBvcHRpb24gfHwgW107IHRyYWNrIHRyYWNrQnkoJGluZGV4LCBvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIm9wLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInJlbW92ZVNlbGVjdGlvbigkZXZlbnQsIG9wKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghKGRpc2FibGVkIHx8IHJlYWRvbmx5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVNlbGVjdGlvbigkZXZlbnQsIG9wKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2VfX3JlbW92ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID7Dlzwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWhhc1RlbXBsYXRlKG9wLCAnb3B0aW9uJykgfHwgbm9MYWJlbFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwib3AubGFiZWxcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRUZW1wbGF0ZShvcCwgJ29wdGlvbicpOyBjb250ZXh0OiBvcFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChhdXRvQ3JlYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uX19hdXRvLWNyZWF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cInN0b3BFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJzdG9wRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJpZCArICctY3JlYXRlLWZpZWxkJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVPcGVuQW5kQ2xvc2UoZmFsc2UsIHRydWUpOyBzdG9wRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImtleURvd24oJGV2ZW50LCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJzZWFyY2hVcGRhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwicHJldkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3QyLWNyZWF0ZV9fZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInRleHRib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29ycmVjdD1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jYXBpdGFsaXplPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIEBpZiAoIW92ZXJsYXkpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRhaW5lclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuXG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdDItc3Vic2NyaXB0LXdyYXBwZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2VsZWN0Mi1oaW50XCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZVxuICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlcbiAgICBjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3BcbiAgICBjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcz1cInNlbGVjdDItb3ZlcmxheS1iYWNrZHJvcFwiXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwidHJpZ2dlclwiXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cInRoaXMuaXNPcGVuICYmIG92ZXJsYXlcIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGhdPVwib3ZlcmxheVdpZHRoXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheUhlaWdodF09XCJvdmVybGF5SGVpZ2h0XCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJfcG9zaXRpb25zXCJcbiAgICAoYmFja2Ryb3BDbGljayk9XCJ0b2dnbGVPcGVuQW5kQ2xvc2UoKVwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRhaW5lclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbnRhaW5lclRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJzZWxlY3QyLWNvbnRhaW5lciBzZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCBzZWxlY3QyLWNvbnRhaW5lci1kcm9wZG93blwiXG4gICAgICAgIFtjbGFzcy5zZWxlY3QyLWNvbnRhaW5lci0tb3Blbl09XCJpc09wZW5cIlxuICAgICAgICBbY2xhc3Muc2VsZWN0Mi1vdmVybGF5XT1cIm92ZXJsYXlcIlxuICAgICAgICBbY2xhc3Muc2VsZWN0Mi1wb3NpdGlvbi1hdXRvXT1cImxpc3RQb3NpdGlvbiA9PT0gJ2F1dG8nXCJcbiAgICAgICAgW2NsYXNzLnNlbGVjdDItc3R5bGUtYm9yZGVybGVzc109XCJzdHlsZU1vZGUgPT09ICdib3JkZXJsZXNzJ1wiXG4gICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZHJvcGRvd25cbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Mi1kcm9wZG93blwiXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0Mi1kcm9wZG93bi0tYmVsb3ddPVwiIXNlbGVjdDJhYm92ZVwiXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0Mi1kcm9wZG93bi0tYWJvdmVdPVwic2VsZWN0MmFib3ZlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdDItc2VhcmNoIHNlbGVjdDItc2VhcmNoLS1kcm9wZG93blwiIFtjbGFzcy5zZWxlY3QyLXNlYXJjaC0taGlkZV09XCJoaWRlU2VhcmNoKClcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgI3NlYXJjaElucHV0XG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJpZCArICctc2VhcmNoLWZpZWxkJ1wiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwia2V5RG93bigkZXZlbnQsIGF1dG9DcmVhdGUpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInNlYXJjaFVwZGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJwcmV2Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdDItc2VhcmNoX19maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwidGV4dGJveFwiXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb3JyZWN0PVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NhcGl0YWxpemU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJ0aGlzLmlzT3BlbiA/IHRhYkluZGV4IDogJy0xJ1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdDItcmVzdWx0c1wiPlxuICAgICAgICAgICAgICAgIDx1bFxuICAgICAgICAgICAgICAgICAgICAjcmVzdWx0c1xuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdDItcmVzdWx0c19fb3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cInJlc3VsdE1heEhlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJ0cmVlXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgIGluZmluaXRlU2Nyb2xsXG4gICAgICAgICAgICAgICAgICAgIFtpbmZpbml0ZVNjcm9sbERpc2FibGVkXT1cIiFpbmZpbml0ZVNjcm9sbCAmJiAhaXNPcGVuXCJcbiAgICAgICAgICAgICAgICAgICAgW2luZmluaXRlU2Nyb2xsRGlzdGFuY2VdPVwiaW5maW5pdGVTY3JvbGxEaXN0YW5jZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbmZpbml0ZVNjcm9sbFRocm90dGxlXT1cImluZmluaXRlU2Nyb2xsVGhyb3R0bGVcIlxuICAgICAgICAgICAgICAgICAgICBbaW5maW5pdGVTY3JvbGxDb250YWluZXJdPVwicmVzdWx0c1wiXG4gICAgICAgICAgICAgICAgICAgIChzY3JvbGxlZCk9XCJvblNjcm9sbCgnZG93bicpXCJcbiAgICAgICAgICAgICAgICAgICAgKHNjcm9sbGVkVXApPVwib25TY3JvbGwoJ3VwJylcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJrZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoZ3JvdXBPck9wdGlvbiBvZiBmaWx0ZXJlZERhdGE7IHRyYWNrIHRyYWNrQnkoaSwgZ3JvdXBPck9wdGlvbik7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGdyb3VwT3JPcHRpb24ub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb25cIiByb2xlPVwiZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghaGFzVGVtcGxhdGUoZ3JvdXBPck9wdGlvbiwgJ2dyb3VwJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbGVjdDItcmVzdWx0c19fZ3JvdXAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdyb3VwT3JPcHRpb24uY2xhc3NlcyA/ICcgJyArIGdyb3VwT3JPcHRpb24uY2xhc3NlcyA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJncm91cE9yT3B0aW9uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRUZW1wbGF0ZShncm91cE9yT3B0aW9uLCAnZ3JvdXAnKTsgY29udGV4dDogZ3JvdXBPck9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbnMgc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25zLS1uZXN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBncm91cE9yT3B0aW9uLm9wdGlvbnM7IHRyYWNrIHRyYWNrQnkoaiwgb3B0aW9uKTsgbGV0IGogPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Jlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwib3B0aW9uLmlkIHx8IGlkICsgJy1vcHRpb24tJyArIGkgKyAnLScgKyBqXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImdldE9wdGlvblN0eWxlKG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwidHJlZWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImlzU2VsZWN0ZWQob3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlZChvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwibW91c2VlbnRlcihvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrKG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghaGFzVGVtcGxhdGUob3B0aW9uLCAnb3B0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QyLWxhYmVsLWNvbnRlbnRcIiBbaW5uZXJIVE1MXT1cIm9wdGlvbi5sYWJlbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImdldFRlbXBsYXRlKG9wdGlvbiwgJ29wdGlvbicpOyBjb250ZXh0OiBvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Jlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ3JvdXBPck9wdGlvbi5pZCB8fCBpZCArICctb3B0aW9uLScgKyBpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImdldE9wdGlvblN0eWxlKGdyb3VwT3JPcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInRyZWVpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc1NlbGVjdGVkKGdyb3VwT3JPcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVkKGdyb3VwT3JPcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwibW91c2VlbnRlcihncm91cE9yT3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGljayhncm91cE9yT3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFoYXNUZW1wbGF0ZShncm91cE9yT3B0aW9uLCAnb3B0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJncm91cE9yT3B0aW9uLmxhYmVsXCIgY2xhc3M9XCJzZWxlY3QyLWxhYmVsLWNvbnRlbnRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRUZW1wbGF0ZShncm91cE9yT3B0aW9uLCAnb3B0aW9uJyk7IGNvbnRleHQ6IGdyb3VwT3JPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImdldFRlbXBsYXRlKGdyb3VwT3JPcHRpb24sICdvcHRpb24nKTsgY29udGV4dDogZ3JvdXBPck9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIWZpbHRlcmVkRGF0YT8ubGVuZ3RoICYmIG5vUmVzdWx0TWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwic2VsZWN0Mi1uby1yZXN1bHQgc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25cIiBbaW5uZXJIVE1MXT1cIm5vUmVzdWx0TWVzc2FnZVwiPjwvbGk+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChtYXhSZXN1bHRzRXhjZWVkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Mi10b28tbXVjaC1yZXN1bHQgc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwibWF4UmVzdWx0c01lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbGk+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
969
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Mi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1zZWxlY3QyLWNvbXBvbmVudC9zcmMvbGliL3NlbGVjdDIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctc2VsZWN0Mi1jb21wb25lbnQvc3JjL2xpYi9zZWxlY3QyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxtQkFBbUIsR0FJdEIsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixPQUFPLEVBRUgsU0FBUyxFQUVULFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0osV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGVBQWUsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQWMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7QUFFL0MsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBRXJCLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBT2hFLE1BQU0sT0FBTyxPQUFPO0lBR2hCLG1DQUFtQztJQUNuQyxJQUErQixJQUFJLENBQUMsSUFBaUI7UUFDakQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFRRCxJQUNJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEtBQWM7UUFDdkIsSUFBSSxDQUFDLFNBQVMs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Q29CLFNBQVM7c0JBQTFELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDVixlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLFNBQVM7Z0JBQ1ksT0FBTztzQkFBdEMsWUFBWTt1QkFBQyxRQUFRO2dCQUNZLFdBQVc7c0JBQTVDLFNBQVM7dUJBQUMsYUFBYTtnQkFDTyxRQUFRO3NCQUF0QyxTQUFTO3VCQUFDLFVBQVU7Z0JBMkNyQixjQUFjO3NCQURiLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENka0Nvbm5lY3RlZE92ZXJsYXksXG4gICAgQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlLFxuICAgIENvbm5lY3RlZFBvc2l0aW9uLFxuICAgIFZlcnRpY2FsQ29ubmVjdGlvblBvcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgVmlld3BvcnRSdWxlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHR5cGUgeyBFbGVtZW50UmVmLCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERvQ2hlY2ssXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFNlbGYsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUdyb3VwRGlyZWN0aXZlLCBOZ0NvbnRyb2wsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgIFNlbGVjdDJBdXRvQ3JlYXRlRXZlbnQsXG4gICAgU2VsZWN0MkRhdGEsXG4gICAgU2VsZWN0Mkdyb3VwLFxuICAgIFNlbGVjdDJPcHRpb24sXG4gICAgU2VsZWN0MlJlbW92ZUV2ZW50LFxuICAgIFNlbGVjdDJTY3JvbGxFdmVudCxcbiAgICBTZWxlY3QyU2VhcmNoRXZlbnQsXG4gICAgU2VsZWN0MlVwZGF0ZUV2ZW50LFxuICAgIFNlbGVjdDJVcGRhdGVWYWx1ZSxcbiAgICBTZWxlY3QyVmFsdWUsXG59IGZyb20gJy4vc2VsZWN0Mi1pbnRlcmZhY2VzJztcbmltcG9ydCB7IFNlbGVjdDJVdGlscyB9IGZyb20gJy4vc2VsZWN0Mi11dGlscyc7XG5cbmxldCBuZXh0VW5pcXVlSWQgPSAwO1xuXG5jb25zdCBkaXNwbGF5U2VhcmNoU3RhdHVzTGlzdCA9IFsnZGVmYXVsdCcsICdoaWRkZW4nLCAnYWx3YXlzJ107XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2VsZWN0MicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdDIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NlbGVjdDIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0MiBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIERvQ2hlY2ssIEFmdGVyVmlld0luaXQge1xuICAgIF9kYXRhOiBTZWxlY3QyRGF0YTtcblxuICAgIC8qKiBkYXRhIG9mIG9wdGlvbnMgJiBvcHRpb25ncnBzICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgc2V0IGRhdGEoZGF0YTogU2VsZWN0MkRhdGEpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWREYXRhKHRydWUpO1xuICAgIH1cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBtaW5DaGFyRm9yU2VhcmNoID0gMDtcbiAgICBASW5wdXQoKSBkaXNwbGF5U2VhcmNoU3RhdHVzOiAnZGVmYXVsdCcgfCAnaGlkZGVuJyB8ICdhbHdheXMnO1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBsaW1pdFNlbGVjdGlvbiA9IDA7XG4gICAgQElucHV0KCkgbGlzdFBvc2l0aW9uOiAnYWJvdmUnIHwgJ2JlbG93JyB8ICdhdXRvJyA9ICdiZWxvdyc7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBnZXQgbXVsdGlwbGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZTtcbiAgICB9XG4gICAgc2V0IG11bHRpcGxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX211bHRpcGxlID0gdmFsdWU7XG4gICAgICAgIHRoaXMubmdPbkluaXQoKTtcbiAgICB9XG5cbiAgICAvKiogdXNlIHRoZSBtYXRlcmlhbCBzdHlsZSAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIG92ZXJsYXkgPSBmYWxzZTtcblxuICAgIC8qKiB1c2UgdGhlIG1hdGVyaWFsIHN0eWxlICovXG4gICAgQElucHV0KCkgc3R5bGVNb2RlOiAnbWF0ZXJpYWwnIHwgJ25vU3R5bGUnIHwgJ2JvcmRlcmxlc3MnIHwgJ2RlZmF1bHQnID0gJ2RlZmF1bHQnO1xuXG4gICAgLyoqIG1lc3NhZ2Ugd2hlbiBubyByZXN1bHQgKi9cbiAgICBASW5wdXQoKSBub1Jlc3VsdE1lc3NhZ2U6IHN0cmluZztcblxuICAgIC8qKiBtYXhpbXVtIHJlc3VsdHMgbGltaXQgKDAgPSBubyBsaW1pdCkgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBtYXhSZXN1bHRzID0gMDtcblxuICAgIC8qKiBtZXNzYWdlIHdoZW4gbWF4aW11bSByZXN1bHRzICovXG4gICAgQElucHV0KCkgbWF4UmVzdWx0c01lc3NhZ2UgPSAnVG9vIG1hbnkgcmVzdWx0c+KApic7XG5cbiAgICAvKiogaW5maW5pdGUgc2Nyb2xsIGRpc3RhbmNlICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgaW5maW5pdGVTY3JvbGxEaXN0YW5jZSA9IDEuNTtcblxuICAgIC8qKiBpbmZpbml0ZSBzY3JvbGwgZGlzdGFuY2UgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBpbmZpbml0ZVNjcm9sbFRocm90dGxlID0gMTUwO1xuXG4gICAgLyoqIGluZmluaXRlIHNjcm9sbCBhY3RpdmF0ZWQgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaW5maW5pdGVTY3JvbGwgPSBmYWxzZTtcblxuICAgIC8qKiBhdXRvIGNyZWF0ZSBpZiBub3QgZXhpc3QgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYXV0b0NyZWF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqIG5vIHRlbXBsYXRlIGZvciBsYWJlbCBzZWxlY3Rpb24gKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbm9MYWJlbFRlbXBsYXRlID0gZmFsc2U7XG5cbiAgICAvKiogdXNlIGl0IGZvciBjaGFuZ2UgdGhlIHBhdHRlcm4gb2YgdGhlIGZpbHRlciBzZWFyY2ggKi9cbiAgICBASW5wdXQoKSBlZGl0UGF0dGVybjogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmc7XG5cbiAgICAvKiogdGVtcGxhdGUgZm9yIGZvcm1hdHRpbmcgKi9cbiAgICBASW5wdXQoKSB0ZW1wbGF0ZXM6IFRlbXBsYXRlUmVmPGFueT4gfCB7IFtrZXk6IHN0cmluZ106IFRlbXBsYXRlUmVmPGFueT4gfTtcblxuICAgIC8qKiB0aGUgbWF4IGhlaWdodCBvZiB0aGUgcmVzdWx0cyBjb250YWluZXIgd2hlbiBvcGVuaW5nIHRoZSBzZWxlY3QgKi9cbiAgICBASW5wdXQoKSByZXN1bHRNYXhIZWlnaHQgPSAnMjAwcHgnO1xuXG4gICAgLyoqIEFjdGl2ZSBTZWFyY2ggZXZlbnQgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY3VzdG9tU2VhcmNoRW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqIG1pbmltYWwgZGF0YSBvZiBzaG93IHRoZSBzZWFyY2ggZmllbGQgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICAgIGdldCBtaW5Db3VudEZvclNlYXJjaCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluQ291bnRGb3JTZWFyY2g7XG4gICAgfVxuICAgIHNldCBtaW5Db3VudEZvclNlYXJjaCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX21pbkNvdW50Rm9yU2VhcmNoID0gdmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlU2VhcmNoQm94KCk7XG4gICAgfVxuXG4gICAgLyoqIFVuaXF1ZSBpZCBvZiB0aGUgZWxlbWVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnaWQnKVxuICAgIGdldCBpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xuICAgIH1cbiAgICBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pZCA9IHZhbHVlIHx8IHRoaXMuX3VpZDtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgZWxlbWVudCBpcyByZXF1aXJlZC4gKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHNlbGVjdGVkIGl0ZW1zIHNob3VsZCBiZSBoaWRkZW4uICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udHJvbCA/IHRoaXMuX2NvbnRyb2wuZGlzYWJsZWQgOiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG4gICAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgaXRlbXMgYXJlIGhpZGRlbiB3aGVuIGhhcy4gKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGlkZVNlbGVjdGVkSXRlbXMgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBlbGVtZW50IGlzIHJlYWRvbmx5LiAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZWFkb25seSA9IGZhbHNlO1xuXG4gICAgLyoqIFRoZSBpbnB1dCBlbGVtZW50J3MgdmFsdWUuICovXG4gICAgQElucHV0KClcbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgc2V0IHZhbHVlKHZhbHVlOiBTZWxlY3QyVXBkYXRlVmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMudGVzdFZhbHVlQ2hhbmdlKHRoaXMuX3ZhbHVlLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUgPz8gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlID8/IG51bGwpO1xuICAgICAgICAgICAgfSwgMTApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFRhYiBpbmRleCBmb3IgdGhlIHNlbGVjdDIgZWxlbWVudC4gKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICAgIGdldCB0YWJJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/IC0xIDogdGhpcy5fdGFiSW5kZXg7XG4gICAgfVxuICAgIHNldCB0YWJJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIHJlc2V0IHdpdGggbm8gc2VsZWN0ZWQgdmFsdWUgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICByZXNldHRhYmxlID0gZmFsc2U7XG5cbiAgICAvKiogc2VsZWN0ZWQgdmFsdWUgd2hlbiDDlyBpcyBjbGlja2VkICovXG4gICAgQElucHV0KCkgcmVzZXRTZWxlY3RlZFZhbHVlOiBhbnk7XG5cbiAgICBAT3V0cHV0KCkgdXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3QyVXBkYXRlRXZlbnQ8U2VsZWN0MlVwZGF0ZVZhbHVlPj4oKTtcbiAgICBAT3V0cHV0KCkgYXV0b0NyZWF0ZUl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdDJBdXRvQ3JlYXRlRXZlbnQ8U2VsZWN0MlVwZGF0ZVZhbHVlPj4oKTtcbiAgICBAT3V0cHV0KCkgb3BlbiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0Mj4oKTtcbiAgICBAT3V0cHV0KCkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdDI+KCk7XG4gICAgQE91dHB1dCgpIGZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3QyPigpO1xuICAgIEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3QyPigpO1xuICAgIEBPdXRwdXQoKSBzZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdDJTZWFyY2hFdmVudDxTZWxlY3QyVXBkYXRlVmFsdWU+PigpO1xuICAgIEBPdXRwdXQoKSBzY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdDJTY3JvbGxFdmVudD4oKTtcbiAgICBAT3V0cHV0KCkgcmVtb3ZlT3B0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3QyUmVtb3ZlRXZlbnQ8U2VsZWN0MlVwZGF0ZVZhbHVlPj4oKTtcblxuICAgIG9wdGlvbjogU2VsZWN0Mk9wdGlvbiB8IFNlbGVjdDJPcHRpb25bXSB8IG51bGwgPSBudWxsO1xuICAgIGlzT3BlbiA9IGZhbHNlO1xuICAgIHNlYXJjaFN0eWxlOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgZWxlbWVudCBpcyBmb2N1c2VkIG9yIG5vdC4gKi9cbiAgICBmb2N1c2VkID0gZmFsc2U7XG5cbiAgICBmaWx0ZXJlZERhdGE6IFNlbGVjdDJEYXRhO1xuXG4gICAgZ2V0IHNlbGVjdDJPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/ICh0aGlzLm9wdGlvbiBhcyBTZWxlY3QyT3B0aW9uW10pIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0Mk9wdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgPyBudWxsIDogKHRoaXMub3B0aW9uIGFzIFNlbGVjdDJPcHRpb24pO1xuICAgIH1cblxuICAgIGdldCBzZWFyY2hUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbm5lclNlYXJjaFRleHQ7XG4gICAgfVxuXG4gICAgc2V0IHNlYXJjaFRleHQodGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaW5uZXJTZWFyY2hUZXh0ID0gdGV4dDtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1pbnZhbGlkJylcbiAgICBnZXQgYXJpYUludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0Vycm9yU3RhdGUoKTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm1hdGVyaWFsJylcbiAgICBnZXQgY2xhc3NNYXRlcmlhbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGVNb2RlID09PSAnbWF0ZXJpYWwnO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3Mubm9zdHlsZScpXG4gICAgZ2V0IGNsYXNzTm9zdHlsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGVNb2RlID09PSAnbm9TdHlsZSc7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5ib3JkZXJsZXNzJylcbiAgICBnZXQgY2xhc3NCb3JkZXJsZXNzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZU1vZGUgPT09ICdib3JkZXJsZXNzJztcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNlbGVjdDItYWJvdmUnKVxuICAgIGdldCBzZWxlY3QyYWJvdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5vdmVybGF5ID8gdGhpcy5saXN0UG9zaXRpb24gPT09ICdhYm92ZScgOiB0aGlzLl9pc0Fib2JlT3ZlcmxheSgpO1xuICAgIH1cblxuICAgIG92ZXJsYXlXaWR0aDogbnVtYmVyO1xuICAgIG92ZXJsYXlIZWlnaHQ6IG51bWJlcjtcbiAgICBfdHJpZ2dlclJlY3Q6IERPTVJlY3Q7XG4gICAgX2Ryb3Bkb3duUmVjdDogRE9NUmVjdDtcblxuICAgIGdldCBfcG9zaXRpb25zKCk6IENvbm5lY3RlZFBvc2l0aW9uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5saXN0UG9zaXRpb24gPT09ICdhdXRvJyA/IHVuZGVmaW5lZCA6IG51bGw7XG4gICAgfVxuXG4gICAgbWF4UmVzdWx0c0V4Y2VlZGVkOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBfbWluQ291bnRGb3JTZWFyY2g/OiBudW1iZXI7XG5cbiAgICBAVmlld0NoaWxkKENka0Nvbm5lY3RlZE92ZXJsYXkpIHByaXZhdGUgY2RrQ29ubmVjdGVkT3ZlcmxheTogQ2RrQ29ubmVjdGVkT3ZlcmxheTtcbiAgICBAVmlld0NoaWxkKCdzZWxlY3Rpb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIHNlbGVjdGlvbjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgncmVzdWx0cycpIHByaXZhdGUgcmVzdWx0Q29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgICBAVmlld0NoaWxkcmVuKCdyZXN1bHQnKSBwcml2YXRlIHJlc3VsdHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcpIHByaXZhdGUgc2VhcmNoSW5wdXQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICAgIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJykgcHJpdmF0ZSBkcm9wZG93bjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBwcml2YXRlIGhvdmVyaW5nVmFsdWU6IFNlbGVjdDJWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsO1xuICAgIHByaXZhdGUgaW5uZXJTZWFyY2hUZXh0ID0gJyc7XG4gICAgcHJpdmF0ZSBpc1NlYXJjaGJveEhpZGRlbjogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgc2VsZWN0aW9uRWxlbWVudDogSFRNTEVsZW1lbnQ7XG5cbiAgICBwcml2YXRlIGdldCByZXN1bHRzRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIFRhYiBpbmRleCBmb3IgdGhlIGVsZW1lbnQuICovXG4gICAgcHJpdmF0ZSBfdGFiSW5kZXg6IG51bWJlcjtcblxuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbXVsdGlwbGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pZDogc3RyaW5nO1xuICAgIHByaXZhdGUgX3VpZCA9IGBzZWxlY3QyLSR7bmV4dFVuaXF1ZUlkKyt9YDtcbiAgICBwcml2YXRlIF92YWx1ZTogU2VsZWN0MlVwZGF0ZVZhbHVlID0gbnVsbDtcbiAgICBwcml2YXRlIF9wcmV2aW91c05hdGl2ZVZhbHVlOiBTZWxlY3QyVXBkYXRlVmFsdWU7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheVBvc2l0aW9uOiBWZXJ0aWNhbENvbm5lY3Rpb25Qb3M7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIF92aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX3BhcmVudEZvcm06IE5nRm9ybSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHVibGljIF9jb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3RhYmluZGV4JykgdGFiSW5kZXg6IHN0cmluZyxcbiAgICApIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtYXNzaWduXG4gICAgICAgIHRoaXMuaWQgPSB0aGlzLmlkO1xuICAgICAgICB0aGlzLl90YWJJbmRleCA9IHBhcnNlSW50KHRhYkluZGV4LCAxMCkgfHwgMDtcblxuICAgICAgICBpZiAodGhpcy5fY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5fY29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgICBjbGlja0RldGVjdGlvbihlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzT3BlbiAmJiBmb2N1cykge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaWZQYXJlbnRDb250YWluc0NsYXNzKHRhcmdldCwgJ3NlbGVjdGlvbicpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlmUGFyZW50Q29udGFpbnNDbGFzcyh0YXJnZXQsICdzZWxlY3QyLWRyb3Bkb3duJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVPcGVuQW5kQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm92ZXJsYXkgJiYgIXRoaXMuaWZQYXJlbnRDb250YWluc0lkKHRhcmdldCwgdGhpcy5faWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tFeGl0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pZlBhcmVudENvbnRhaW5zSWQodGFyZ2V0LCB0aGlzLl9pZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZU9wZW5BbmRDbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tFeGl0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzKHRoaXMuY2xpY2tPblNlbGVjdDJFbGVtZW50KHRhcmdldCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFZpZXcgLT4gbW9kZWwgY2FsbGJhY2sgY2FsbGVkIHdoZW4gc2VsZWN0IGhhcyBiZWVuIHRvdWNoZWQgKi9cbiAgICBwcml2YXRlIF9vblRvdWNoZWQgPSAoKSA9PiB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9O1xuXG4gICAgLyoqIFZpZXcgLT4gbW9kZWwgY2FsbGJhY2sgY2FsbGVkIHdoZW4gdmFsdWUgY2hhbmdlcyAqL1xuICAgIHByaXZhdGUgX29uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH07XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoMTAwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVjdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBvcHRpb24gPSBTZWxlY3QyVXRpbHMuZ2V0T3B0aW9uc0J5VmFsdWUoXG4gICAgICAgICAgICB0aGlzLl9kYXRhLFxuICAgICAgICAgICAgdGhpcy5fY29udHJvbCA/IHRoaXMuX2NvbnRyb2wudmFsdWUgOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgdGhpcy5tdWx0aXBsZSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG9wdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb24gPSBvcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMuaG92ZXJpbmdWYWx1ZSA9IHRoaXMudmFsdWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlU2VhcmNoQm94KCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkucG9zaXRpb25DaGFuZ2Uuc3Vic2NyaWJlKChwb3NDaGFuZ2U6IENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSkgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMubGlzdFBvc2l0aW9uID09PSAnYXV0bycgJiZcbiAgICAgICAgICAgICAgICBwb3NDaGFuZ2UuY29ubmVjdGlvblBhaXI/Lm9yaWdpblkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5UG9zaXRpb24gIT09IHBvc0NoYW5nZS5jb25uZWN0aW9uUGFpci5vcmlnaW5ZXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVBvc2l0aW9uID0gcG9zQ2hhbmdlLmNvbm5lY3Rpb25QYWlyLm9yaWdpblk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvbkVsZW1lbnQgPSB0aGlzLnNlbGVjdGlvbi5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLnRyaWdnZXJSZWN0KCk7XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaEJveCgpO1xuICAgICAgICB0aGlzLl9kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKTtcbiAgICAgICAgaWYgKHRoaXMuX3RyaWdnZXJSZWN0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5V2lkdGggIT09IHRoaXMuX3RyaWdnZXJSZWN0LndpZHRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5V2lkdGggPSB0aGlzLl90cmlnZ2VyUmVjdC53aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9kcm9wZG93blJlY3Q/LmhlaWdodCA+IDAgJiYgdGhpcy5vdmVybGF5SGVpZ2h0ICE9PSB0aGlzLl9kcm9wZG93blJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5SGVpZ2h0ID0gdGhpcy5saXN0UG9zaXRpb24gPT09ICdhdXRvJyA/IHRoaXMuX2Ryb3Bkb3duUmVjdC5oZWlnaHQgOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlU2VhcmNoQm94KCkge1xuICAgICAgICBjb25zdCBoaWRkZW4gPSB0aGlzLmN1c3RvbVNlYXJjaEVuYWJsZWRcbiAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgIDogU2VsZWN0MlV0aWxzLmlzU2VhcmNoYm94SGlkZGV4KHRoaXMuX2RhdGEsIHRoaXMuX21pbkNvdW50Rm9yU2VhcmNoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNTZWFyY2hib3hIaWRkZW4gIT09IGhpZGRlbikge1xuICAgICAgICAgICAgdGhpcy5pc1NlYXJjaGJveEhpZGRlbiA9IGhpZGRlbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhpZGVTZWFyY2goKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlTZWFyY2hTdGF0dXMgPVxuICAgICAgICAgICAgZGlzcGxheVNlYXJjaFN0YXR1c0xpc3QuaW5kZXhPZih0aGlzLmRpc3BsYXlTZWFyY2hTdGF0dXMpID4gLTEgPyB0aGlzLmRpc3BsYXlTZWFyY2hTdGF0dXMgOiAnZGVmYXVsdCc7XG4gICAgICAgIHJldHVybiAoZGlzcGxheVNlYXJjaFN0YXR1cyA9PT0gJ2RlZmF1bHQnICYmIHRoaXMuaXNTZWFyY2hib3hIaWRkZW4pIHx8IGRpc3BsYXlTZWFyY2hTdGF0dXMgPT09ICdoaWRkZW4nO1xuICAgIH1cblxuICAgIGdldE9wdGlvblN0eWxlKG9wdGlvbjogU2VsZWN0Mk9wdGlvbikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9uICcgK1xuICAgICAgICAgICAgKG9wdGlvbi5oaWRlID8gJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1oaWRlICcgOiAnJykgK1xuICAgICAgICAgICAgKG9wdGlvbi52YWx1ZSA9PT0gdGhpcy5ob3ZlcmluZ1ZhbHVlID8gJ3NlbGVjdDItcmVzdWx0c19fb3B0aW9uLS1oaWdobGlnaHRlZCAnIDogJycpICtcbiAgICAgICAgICAgIChvcHRpb24uY2xhc3NlcyB8fCAnJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBtb3VzZWVudGVyKG9wdGlvbjogU2VsZWN0Mk9wdGlvbikge1xuICAgICAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5ob3ZlcmluZ1ZhbHVlID0gb3B0aW9uLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xpY2sob3B0aW9uOiBTZWxlY3QyT3B0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLnRlc3RTZWxlY3Rpb24ob3B0aW9uKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Qob3B0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0KGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgICAgICAvLyBjb25zdCB0ZXN0ID0gU2VsZWN0MlV0aWxzLmdldE9wdGlvbkJ5VmFsdWUodGhpcy5fZGF0YSwgdGhpcy5yZXNldFNlbGVjdGVkVmFsdWUpO1xuICAgICAgICAvLyBkZWJ1Z2dlcjtcbiAgICAgICAgdGhpcy5zZWxlY3QoXG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBTZWxlY3QyVXRpbHMuZ2V0T3B0aW9uQnlWYWx1ZSh0aGlzLl9kYXRhLCB0aGlzLnJlc2V0U2VsZWN0ZWRWYWx1ZSkgPz8gbnVsbFxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcEV2ZW50KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByZXZDaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHN0b3BFdmVudChldmVudDogRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlT3BlbkFuZENsb3NlKGZvY3VzID0gdHJ1ZSwgb3Blbj86IGJvb2xlYW4sIGV2ZW50PzogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZvY3VzKGZvY3VzKTtcblxuICAgICAgICBjb25zdCBjaGFuZ2VFbWl0ID0gdGhpcy5pc09wZW4gIT09IChvcGVuID8/ICF0aGlzLmlzT3Blbik7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gb3BlbiA/PyAhdGhpcy5pc09wZW47XG5cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNTZWFyY2hib3hIaWRkZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlubmVyU2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWREYXRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNTZWFyY2hib3hPclJlc3VsdHNFbGVtZW50KGZvY3VzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWFyY2hib3hIaWRkZW4gJiYgIWNoYW5nZUVtaXQgJiYgZXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmtleURvd24oZXZlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBBcnJheS5pc0FycmF5KHRoaXMub3B0aW9uKSA/IHRoaXMub3B0aW9uWzBdIDogdGhpcy5vcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbEZyb21PcHRpb24ob3B0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc3VsdHNFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHNFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJSZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXk/Lm92ZXJsYXlSZWY/LnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhbmdlRW1pdCkge1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbi5lbWl0KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZUVtaXQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UuZW1pdCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGhhc1RlbXBsYXRlKG9wdGlvbjogU2VsZWN0Mk9wdGlvbiB8IFNlbGVjdDJHcm91cCwgZGVmYXV0OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVzIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYgfHxcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVzPy5bb3B0aW9uLnRlbXBsYXRlSWRdIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYgfHxcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVzPy5bZGVmYXV0XSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0VGVtcGxhdGUob3B0aW9uOiBTZWxlY3QyT3B0aW9uIHwgU2VsZWN0Mkdyb3VwLCBkZWZhdXQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNUZW1wbGF0ZShvcHRpb24sIGRlZmF1dClcbiAgICAgICAgICAgID8gdGhpcy50ZW1wbGF0ZXNbb3B0aW9uLnRlbXBsYXRlSWRdIHx8IHRoaXMudGVtcGxhdGVzW2RlZmF1dF0gfHwgdGhpcy50ZW1wbGF0ZXNcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRyaWdnZXJSZWN0KCkge1xuICAgICAgICB0aGlzLl90cmlnZ2VyUmVjdCA9IHRoaXMuc2VsZWN0aW9uRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdGhpcy5fZHJvcGRvd25SZWN0ID0gdGhpcy5kcm9wZG93bj8ubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgPyB0aGlzLmRyb3Bkb3duLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgdGVzdFNlbGVjdGlvbihvcHRpb246IFNlbGVjdDJPcHRpb24pIHtcbiAgICAgICAgaWYgKG9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICF0aGlzLm11bHRpcGxlIHx8XG4gICAgICAgICAgICAhdGhpcy5saW1pdFNlbGVjdGlvbiB8fFxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkodGhpcy5fdmFsdWUpICYmIHRoaXMuX3ZhbHVlLmxlbmd0aCA8IHRoaXMubGltaXRTZWxlY3Rpb24pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0ZXN0VmFsdWVDaGFuZ2UodmFsdWUxOiBTZWxlY3QyVXBkYXRlVmFsdWUsIHZhbHVlMjogU2VsZWN0MlVwZGF0ZVZhbHVlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICgodmFsdWUxID09PSBudWxsIHx8IHZhbHVlMSA9PT0gdW5kZWZpbmVkKSAmJiAodmFsdWUyID09PSBudWxsIHx8IHZhbHVlMiA9PT0gdW5kZWZpbmVkKSkgfHxcbiAgICAgICAgICAgIHZhbHVlMSA9PT0gdmFsdWUyXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMubXVsdGlwbGUgJiZcbiAgICAgICAgICAgICh2YWx1ZTEgYXMgU2VsZWN0MlZhbHVlW10pPy5sZW5ndGggJiZcbiAgICAgICAgICAgICh2YWx1ZTIgYXMgU2VsZWN0MlZhbHVlW10pPy5sZW5ndGggJiZcbiAgICAgICAgICAgICh2YWx1ZTEgYXMgU2VsZWN0MlZhbHVlW10pLmxlbmd0aCA9PT0gKHZhbHVlMiBhcyBTZWxlY3QyVmFsdWVbXSkubGVuZ3RoXG4gICAgICAgICkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlMSBvZiB2YWx1ZTEgYXMgU2VsZWN0MlZhbHVlW10pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXN0ID0gKHZhbHVlMiBhcyBTZWxlY3QyVmFsdWVbXSkuaW5kZXhPZihlMSkgPiAtMTtcbiAgICAgICAgICAgICAgICBpZiAoIXRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRmlsdGVyZWREYXRhKHdyaXRlVmFsdWUgPSBmYWxzZSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB0aGlzLl9kYXRhO1xuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy5oaWRlU2VsZWN0ZWRJdGVtcykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFNlbGVjdDJVdGlscy5nZXRGaWx0ZXJlZFNlbGVjdGVkRGF0YShyZXN1bHQsIHRoaXMub3B0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmN1c3RvbVNlYXJjaEVuYWJsZWQgJiYgdGhpcy5zZWFyY2hUZXh0ICYmIHRoaXMuc2VhcmNoVGV4dC5sZW5ndGggPj0gK3RoaXMubWluQ2hhckZvclNlYXJjaCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFNlbGVjdDJVdGlscy5nZXRGaWx0ZXJlZERhdGEocmVzdWx0LCB0aGlzLnNlYXJjaFRleHQsIHRoaXMuZWRpdFBhdHRlcm4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5tYXhSZXN1bHRzID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBTZWxlY3QyVXRpbHMuZ2V0UmVkdWNlRGF0YShyZXN1bHQsICt0aGlzLm1heFJlc3VsdHMpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRhdGEucmVzdWx0O1xuICAgICAgICAgICAgICAgIHRoaXMubWF4UmVzdWx0c0V4Y2VlZGVkID0gZGF0YS5yZWR1Y2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubWF4UmVzdWx0c0V4Y2VlZGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChTZWxlY3QyVXRpbHMudmFsdWVJc05vdEluRmlsdGVyZWREYXRhKHJlc3VsdCwgdGhpcy5ob3ZlcmluZ1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJpbmdWYWx1ZSA9IFNlbGVjdDJVdGlscy5nZXRGaXJzdEF2YWlsYWJsZU9wdGlvbihyZXN1bHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAod3JpdGVWYWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIHJlZnJlc2ggY3VycmVudCBzZWxlY3RlZCB2YWx1ZVxuICAgICAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLl9jb250cm9sID8gdGhpcy5fY29udHJvbC52YWx1ZSA6IHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IHJlc3VsdDtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsaWNrRXhpdCgpIHtcbiAgICAgICAgdGhpcy5fZm9jdXMoZmFsc2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaWZQYXJlbnRDb250YWluc0NsYXNzKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjc3NDbGFzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudEVsZW1lbnRCeUNsYXNzKGVsZW1lbnQsIGNzc0NsYXNzKSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlmUGFyZW50Q29udGFpbnNJZChlbGVtZW50OiBIVE1MRWxlbWVudCwgaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnRFbGVtZW50QnlJZChlbGVtZW50LCBpZCkgIT09IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQYXJlbnRFbGVtZW50QnlDbGFzcyhlbGVtZW50OiBIVE1MRWxlbWVudCwgY3NzQ2xhc3M6IHN0cmluZyk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5DbGFzc2VzKGVsZW1lbnQsIGNzc0NsYXNzLnRyaW0oKS5zcGxpdCgvXFxzKy8pKVxuICAgICAgICAgICAgPyBlbGVtZW50XG4gICAgICAgICAgICA6IGVsZW1lbnQucGFyZW50RWxlbWVudFxuICAgICAgICAgICAgICA/IHRoaXMuZ2V0UGFyZW50RWxlbWVudEJ5Q2xhc3MoZWxlbWVudC5wYXJlbnRFbGVtZW50LCBjc3NDbGFzcylcbiAgICAgICAgICAgICAgOiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFyZW50RWxlbWVudEJ5SWQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGlkOiBzdHJpbmcpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5pZCA9PT0gaWRcbiAgICAgICAgICAgID8gZWxlbWVudFxuICAgICAgICAgICAgOiBlbGVtZW50LnBhcmVudEVsZW1lbnRcbiAgICAgICAgICAgICAgPyB0aGlzLmdldFBhcmVudEVsZW1lbnRCeUlkKGVsZW1lbnQucGFyZW50RWxlbWVudCwgaWQpXG4gICAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnRhaW5DbGFzc2VzKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjc3NDbGFzc2VzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWVsZW1lbnQuY2xhc3NMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGNzc0NsYXNzIG9mIGNzc0NsYXNzZXMpIHtcbiAgICAgICAgICAgIGlmICghZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY3NzQ2xhc3MpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb250YWluQWxtb3N0T25lQ2xhc3NlcyhlbGVtZW50OiBIVE1MRWxlbWVudCwgY3NzQ2xhc3Nlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFlbGVtZW50LmNsYXNzTGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbnRhaW5BbG1vc3RPbmUgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBjc3NDbGFzcyBvZiBjc3NDbGFzc2VzKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY3NzQ2xhc3MpKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbkFsbW9zdE9uZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGFpbkFsbW9zdE9uZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsaWNrT25TZWxlY3QyRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YWluQWxtb3N0T25lQ2xhc3NlcyhlbGVtZW50LCBbXG4gICAgICAgICAgICAnc2VsZWN0Mi1vdmVybGF5LWJhY2tkcm9wJyxcbiAgICAgICAgICAgICdzZWxlY3QyLWxhYmVsLWNvbnRlbnQnLFxuICAgICAgICAgICAgJ3NlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZCcsXG4gICAgICAgICAgICAnc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24nLFxuICAgICAgICBdKTtcbiAgICB9XG5cbiAgICBmb2N1c2luKCkge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9jdXNvdXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkVsZW1lbnQgJiYgIXRoaXMuc2VsZWN0aW9uRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3NlbGVjdDItZm9jdXNlZCcpKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1cyhmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdChvcHRpb246IFNlbGVjdDJPcHRpb24gfCBudWxsLCBlbWl0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICBsZXQgdmFsdWU6IGFueTtcbiAgICAgICAgaWYgKG9wdGlvbiAhPT0gbnVsbCAmJiBvcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb24gYXMgU2VsZWN0Mk9wdGlvbltdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gb3B0aW9ucy5maW5kSW5kZXgob3AgPT4gb3AudmFsdWUgPT09IG9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSAodGhpcy5vcHRpb24gYXMgU2VsZWN0Mk9wdGlvbltdKS5tYXAob3AgPT4gb3AudmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbiA9IG9wdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZS5lbWl0KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5vcHRpb24udmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb24gJiYgdGhpcy5fdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZSA/PyBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHdoZW4gcmVtb3ZlIHZhbHVlXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbikgPyB0aGlzLm9wdGlvbj8ubGVuZ3RoIDogdGhpcy5vcHRpb24pIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vcHRpb24gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy5oaWRlU2VsZWN0ZWRJdGVtcykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZERhdGEoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVtaXQgJiY9IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy50ZXN0RGlmZlZhbHVlKHRoaXMuX3ZhbHVlLCB2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbWl0KSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlID8/IG51bGw7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZS5lbWl0KHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX3ZhbHVlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb24pID8gdGhpcy5vcHRpb24gOiB0aGlzLm9wdGlvbiA/IFt0aGlzLm9wdGlvbl0gOiBudWxsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRlc3REaWZmVmFsdWUodmFsMTogU2VsZWN0MlVwZGF0ZVZhbHVlLCB2YWwyOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsMSkgPyAodmFsMSBhcyBbXSk/Lmxlbmd0aCAhPT0gdmFsMj8ubGVuZ3RoIDogdmFsMSAhPT0gdmFsMjtcbiAgICB9XG5cbiAgICBrZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjcmVhdGUgPSBmYWxzZSkge1xuICAgICAgICBpZiAoY3JlYXRlICYmIHRoaXMuX3Rlc3RLZXkoZXZlbnQsIFsnRW50ZXInLCAxM10pKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUFuZEFkZChldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGVzdEtleShldmVudCwgWydBcnJvd0Rvd24nLCA0MF0pKSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVEb3duKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3Rlc3RLZXkoZXZlbnQsIFsnQXJyb3dVcCcsIDM4XSkpIHtcbiAgICAgICAgICAgIHRoaXMubW92ZVVwKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3Rlc3RLZXkoZXZlbnQsIFsnRW50ZXInLCAxM10pKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEJ5RW50ZXIoKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGVzdEtleShldmVudCwgWydFc2NhcGUnLCAnVGFiJywgOSwgMjddKSAmJiB0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVPcGVuQW5kQ2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9wZW5LZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGNyZWF0ZSA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChjcmVhdGUgJiYgdGhpcy5fdGVzdEtleShldmVudCwgWydFbnRlcicsIDEzXSkpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQW5kQWRkKGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90ZXN0S2V5KGV2ZW50LCBbJ0Fycm93RG93bicsICdBcnJvd1VwJywgJ0VudGVyJywgNDAsIDM4LCAxM10pKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZU9wZW5BbmRDbG9zZSh0cnVlLCB0cnVlLCBldmVudCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3Rlc3RLZXkoZXZlbnQsIFsnRXNjYXBlJywgJ1RhYicsIDksIDI3XSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlT3BlbkFuZENsb3NlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb2N1cyhmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWFyY2hVcGRhdGUoZTogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMuY3VzdG9tU2VhcmNoRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZERhdGEoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLmVtaXQoe1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5fdmFsdWUsXG4gICAgICAgICAgICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5fZGF0YSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGE6IChkYXRhOiBTZWxlY3QyRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRyYWNrQnkoX2luZGV4OiBudW1iZXIsIGl0ZW06IFNlbGVjdDJPcHRpb24pOiBhbnkge1xuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKG9wdGlvbjogU2VsZWN0Mk9wdGlvbikge1xuICAgICAgICByZXR1cm4gU2VsZWN0MlV0aWxzLmlzU2VsZWN0ZWQodGhpcy5vcHRpb24sIG9wdGlvbiwgdGhpcy5tdWx0aXBsZSk7XG4gICAgfVxuXG4gICAgaXNEaXNhYmxlZChvcHRpb246IFNlbGVjdDJPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbi5kaXNhYmxlZCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgcmVtb3ZlU2VsZWN0aW9uKGU6IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50LCBvcHRpb246IFNlbGVjdDJPcHRpb24pIHtcbiAgICAgICAgU2VsZWN0MlV0aWxzLnJlbW92ZVNlbGVjdGlvbih0aGlzLm9wdGlvbiwgb3B0aW9uKTtcblxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLmhpZGVTZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkRGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSAodGhpcy5vcHRpb24gYXMgU2VsZWN0Mk9wdGlvbltdKS5tYXAob3AgPT4gb3AudmFsdWUpO1xuXG4gICAgICAgIGlmICh0aGlzLl9jb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlID8/IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZS5lbWl0KHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb24pID8gdGhpcy5vcHRpb24gOiB0aGlzLm9wdGlvbiA/IFt0aGlzLm9wdGlvbl0gOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZW1vdmVPcHRpb24uZW1pdCh7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICByZW1vdmVkT3B0aW9uOiBvcHRpb24sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzU2VhcmNoYm94T3JSZXN1bHRzRWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbW9kZWwgdmFsdWUuIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAgICogQHBhcmFtIHZhbHVlXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCB3aGVuIHRoZSBzZWxlY3QncyB2YWx1ZVxuICAgICAqIGNoYW5nZXMgZnJvbSB1c2VyIGlucHV0LiBQYXJ0IG9mIHRoZSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgICAgKiByZXF1aXJlZCB0byBpbnRlZ3JhdGUgd2l0aCBBbmd1bGFyJ3MgY29yZSBmb3JtcyBBUEkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZm4gQ2FsbGJhY2sgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIHZhbHVlIGNoYW5nZXMuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTYXZlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgc2VsZWN0IGlzIGJsdXJyZWRcbiAgICAgKiBieSB0aGUgdXNlci4gUGFydCBvZiB0aGUgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlIHJlcXVpcmVkXG4gICAgICogdG8gaW50ZWdyYXRlIHdpdGggQW5ndWxhcidzIGNvcmUgZm9ybXMgQVBJLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZuIENhbGxiYWNrIHRvIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gdG91Y2hlZC5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBzaG91bGQgYmUgZGlzYWJsZWQuXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICAgKiBAcGFyYW0gaXNEaXNhYmxlZFxuICAgICAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBvblNjcm9sbCh3YXk6ICd1cCcgfCAnZG93bicpIHtcbiAgICAgICAgdGhpcy5zY3JvbGwuZW1pdCh7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICB3YXksXG4gICAgICAgICAgICBzZWFyY2g6IHRoaXMuaW5uZXJTZWFyY2hUZXh0LFxuICAgICAgICAgICAgZGF0YTogdGhpcy5fZGF0YSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2lzRXJyb3JTdGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaXNJbnZhbGlkID0gdGhpcy5fY29udHJvbD8uaW52YWxpZDtcbiAgICAgICAgY29uc3QgaXNUb3VjaGVkID0gdGhpcy5fY29udHJvbD8udG91Y2hlZDtcbiAgICAgICAgY29uc3QgaXNTdWJtaXR0ZWQgPSB0aGlzLl9wYXJlbnRGb3JtR3JvdXA/LnN1Ym1pdHRlZCB8fCB0aGlzLl9wYXJlbnRGb3JtPy5zdWJtaXR0ZWQ7XG4gICAgICAgIHJldHVybiAhIShpc0ludmFsaWQgJiYgKGlzVG91Y2hlZCB8fCBpc1N1Ym1pdHRlZCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkSXRlbSh2YWx1ZTogc3RyaW5nKTogU2VsZWN0Mk9wdGlvbiB7XG4gICAgICAgIGxldCBpdGVtID0gU2VsZWN0MlV0aWxzLmdldE9wdGlvbkJ5VmFsdWUodGhpcy5fZGF0YSwgdmFsdWUpO1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIGl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUFuZEFkZChlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUudHJpbSgpKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5hZGRJdGVtKHZhbHVlLnRyaW0oKSk7XG4gICAgICAgICAgICB0aGlzLmNsaWNrKGl0ZW0pO1xuICAgICAgICAgICAgKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9DcmVhdGVJdGVtLmVtaXQoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBBcnJheS5pc0FycmF5KHRoaXMub3B0aW9uKSA/IHRoaXMub3B0aW9uIDogdGhpcy5vcHRpb24gPyBbdGhpcy5vcHRpb25dIDogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RvcEV2ZW50KGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW92ZVVwKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbEZyb21PcHRpb24oU2VsZWN0MlV0aWxzLmdldFByZXZpb3VzT3B0aW9uKHRoaXMuZmlsdGVyZWREYXRhLCB0aGlzLmhvdmVyaW5nVmFsdWUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVEb3duKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNjcm9sbEZyb21PcHRpb24oU2VsZWN0MlV0aWxzLmdldE5leHRPcHRpb24odGhpcy5maWx0ZXJlZERhdGEsIHRoaXMuaG92ZXJpbmdWYWx1ZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlU2Nyb2xsRnJvbU9wdGlvbihvcHRpb246IFNlbGVjdDJPcHRpb24pIHtcbiAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgdGhpcy5ob3ZlcmluZ1ZhbHVlID0gb3B0aW9uLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMucmVzdWx0cy5maW5kKHIgPT4gci5uYXRpdmVFbGVtZW50LmlubmVyVGV4dC50cmltKCkgPT09IG9wdGlvbi5sYWJlbCk7XG4gICAgICAgICAgICBpZiAoZG9tRWxlbWVudCAmJiB0aGlzLnJlc3VsdHNFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RDbGllbnRSZWN0ID0gdGhpcy5yZXN1bHRzRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25DbGllbnRSZWN0ID0gZG9tRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0c0VsZW1lbnQuc2Nyb2xsVG9wID0gb3B0aW9uQ2xpZW50UmVjdC50b3AgLSBsaXN0Q2xpZW50UmVjdC50b3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdEJ5RW50ZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmhvdmVyaW5nVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IFNlbGVjdDJVdGlscy5nZXRPcHRpb25CeVZhbHVlKHRoaXMuX2RhdGEsIHRoaXMuaG92ZXJpbmdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdChvcHRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdGVzdEtleShldmVudDogS2V5Ym9hcmRFdmVudCwgcmVmczogKG51bWJlciB8IHN0cmluZylbXSA9IFtdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0tleSh0aGlzLl9nZXRLZXkoZXZlbnQpLCByZWZzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBudW1iZXIgfCBzdHJpbmcge1xuICAgICAgICBsZXQgY29kZTogbnVtYmVyIHwgc3RyaW5nO1xuXG4gICAgICAgIGlmIChldmVudC5rZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29kZSA9IGV2ZW50LmtleTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudFsna2V5SWRlbnRpZmllciddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvZGUgPSBldmVudFsna2V5SWRlbnRpZmllciddO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50WydrZXlDb2RlJ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29kZSA9IGV2ZW50WydrZXlDb2RlJ107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaXNLZXkoY29kZTogbnVtYmVyIHwgc3RyaW5nLCByZWZzOiAobnVtYmVyIHwgc3RyaW5nKVtdID0gW10pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHJlZnMgJiYgcmVmcy5sZW5ndGggPiAwID8gcmVmcy5pbmRleE9mKGNvZGUpICE9PSAtMSA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHNlbGVjdGVkIG9wdGlvbiBiYXNlZCBvbiBhIHZhbHVlLiBJZiBubyBvcHRpb24gY2FuIGJlXG4gICAgICogZm91bmQgd2l0aCB0aGUgZGVzaWduYXRlZCB2YWx1ZSwgdGhlIHNlbGVjdCB0cmlnZ2VyIGlzIGNsZWFyZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0U2VsZWN0aW9uQnlWYWx1ZSh2YWx1ZTogYW55IHwgYW55W10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uIHx8ICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSkge1xuICAgICAgICAgICAgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgdmFsdWUgJiYgIWlzQXJyYXkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbiBhcnJheSB2YWx1ZS4nKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uID0gW107IC8vIGlmIHZhbHVlIGlzIG51bGwsIHRoZW4gZW1wdHkgb3B0aW9uIGFuZCByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIGlzIG5vdCBudWxsLiBQcmVzZWxlY3QgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzOiBhbnkgPSBTZWxlY3QyVXRpbHMuZ2V0T3B0aW9uc0J5VmFsdWUodGhpcy5fZGF0YSwgdmFsdWUsIHRoaXMubXVsdGlwbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZXMubWFwKGl0ZW0gPT4gdGhpcy5zZWxlY3QoaXRlbSwgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID8/PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRlc3REaWZmVmFsdWUodGhpcy5fdmFsdWUsIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl92YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbikgPyB0aGlzLm9wdGlvbiA6IHRoaXMub3B0aW9uID8gW3RoaXMub3B0aW9uXSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpeCBpZiB2YWx1ZSBpcyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdChudWxsLCBmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRlc3REaWZmVmFsdWUodGhpcy5fdmFsdWUsIHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGUuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX3ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBBcnJheS5pc0FycmF5KHRoaXMub3B0aW9uKSA/IHRoaXMub3B0aW9uIDogdGhpcy5vcHRpb24gPyBbdGhpcy5vcHRpb25dIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID8/PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoU2VsZWN0MlV0aWxzLmdldE9wdGlvbkJ5VmFsdWUodGhpcy5fZGF0YSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250cm9sLnZpZXdUb01vZGVsVXBkYXRlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRG9lcyBzb21lIG1hbnVhbCBkaXJ0eSBjaGVja2luZyBvbiB0aGUgbmF0aXZlIGlucHV0IGB2YWx1ZWAgcHJvcGVydHkuICovXG4gICAgcHJpdmF0ZSBfZGlydHlDaGVja05hdGl2ZVZhbHVlKCkge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMudmFsdWU7XG5cbiAgICAgICAgaWYgKHRoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZm9jdXNTZWFyY2hib3hPclJlc3VsdHNFbGVtZW50KGZvY3VzID0gdHJ1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNTZWFyY2hib3hIaWRkZW4pIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0ICYmIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudCAmJiBmb2N1cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3VsdHNFbGVtZW50ICYmIGZvY3VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZm9jdXMoc3RhdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCFzdGF0ZSAmJiB0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IHN0YXRlO1xuICAgICAgICAgICAgdGhpcy5ibHVyLmVtaXQodGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgJiYgIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gc3RhdGU7XG4gICAgICAgICAgICB0aGlzLmZvY3VzLmVtaXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0Fib2JlT3ZlcmxheSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheSAmJiB0aGlzLl9vdmVybGF5UG9zaXRpb24gJiYgdGhpcy5saXN0UG9zaXRpb24gPT09ICdhdXRvJ1xuICAgICAgICAgICAgPyB0aGlzLl9vdmVybGF5UG9zaXRpb24gPT09ICd0b3AnXG4gICAgICAgICAgICA6IHRoaXMubGlzdFBvc2l0aW9uID09PSAnYWJvdmUnO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZWxlY3QyLWxhYmVsXCIgKGNsaWNrKT1cInRvZ2dsZU9wZW5BbmRDbG9zZSgpXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2VsZWN0Mi1sYWJlbFwiPjwvbmctY29udGVudD5cbiAgICBAaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0Mi1yZXF1aXJlZFwiPjwvc3Bhbj5cbiAgICB9XG48L2Rpdj5cblxuPGRpdlxuICAgIGNsYXNzPVwic2VsZWN0MiBzZWxlY3QyLWNvbnRhaW5lciBzZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdFwiXG4gICAgW2NsYXNzLnNlbGVjdDItY29udGFpbmVyLS1mb2N1c109XCJmb2N1c2VkXCJcbiAgICBbY2xhc3Muc2VsZWN0Mi1jb250YWluZXItLWJlbG93XT1cIiFzZWxlY3QyYWJvdmVcIlxuICAgIFtjbGFzcy5zZWxlY3QyLWNvbnRhaW5lci0tYWJvdmVdPVwic2VsZWN0MmFib3ZlXCJcbiAgICBbY2xhc3Muc2VsZWN0Mi1jb250YWluZXItLW9wZW5dPVwiaXNPcGVuXCJcbiAgICBbY2xhc3Muc2VsZWN0Mi1jb250YWluZXItLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbj5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwic2VsZWN0aW9uXCJcbiAgICAgICAgI3NlbGVjdGlvblxuICAgICAgICAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIlxuICAgICAgICBbdGFiaW5kZXhdPVwiIXRoaXMuaXNPcGVuID8gdGFiSW5kZXggOiAnLTEnXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU9wZW5BbmRDbG9zZSgpXCJcbiAgICAgICAgKGZvY3VzKT1cImZvY3VzaW4oKVwiXG4gICAgICAgIChibHVyKT1cImZvY3Vzb3V0KClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvcGVuS2V5KCRldmVudClcIlxuICAgICAgICBjZGtPdmVybGF5T3JpZ2luXG4gICAgICAgIFtjbGFzcy5zZWxlY3QyLWZvY3VzZWRdPVwiZm9jdXNlZFwiXG4gICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uXCJcbiAgICAgICAgICAgIFtjbGFzcy5zZWxlY3QyLXNlbGVjdGlvbi0tbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgW2NsYXNzLnNlbGVjdDItc2VsZWN0aW9uLS1zaW5nbGVdPVwiIW11bHRpcGxlXCJcbiAgICAgICAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoIW11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIiBbdGl0bGVdPVwic2VsZWN0Mk9wdGlvbj8ubGFiZWwgfHwgJydcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghc2VsZWN0Mk9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0Mk9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghaGFzVGVtcGxhdGUoc2VsZWN0Mk9wdGlvbiwgJ29wdGlvbicpIHx8IG5vTGFiZWxUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwic2VsZWN0Mk9wdGlvbi5sYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRUZW1wbGF0ZShzZWxlY3QyT3B0aW9uLCAnb3B0aW9uJyk7IGNvbnRleHQ6IHNlbGVjdDJPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdDItc2VsZWN0aW9uX19wbGFjZWhvbGRlcl9fb3B0aW9uXT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uX19wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+e3sgcGxhY2Vob2xkZXIgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoIW11bHRpcGxlICYmIHJlc2V0dGFibGUgJiYgcmVzZXRTZWxlY3RlZFZhbHVlICE9PSB2YWx1ZSAmJiBzZWxlY3QyT3B0aW9uICYmICEoZGlzYWJsZWQgfHwgcmVhZG9ubHkpKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cInJlc2V0KCRldmVudClcIiBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uX19yZXNldFwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj7Dlzwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoIW11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3dcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+IDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghYXV0b0NyZWF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyX19vcHRpb25dPVwic2VsZWN0Mk9wdGlvbnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgcGxhY2Vob2xkZXIgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAZm9yIChvcCBvZiBvcHRpb24gfHwgW107IHRyYWNrIHRyYWNrQnkoJGluZGV4LCBvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIm9wLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInJlbW92ZVNlbGVjdGlvbigkZXZlbnQsIG9wKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghKGRpc2FibGVkIHx8IHJlYWRvbmx5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVNlbGVjdGlvbigkZXZlbnQsIG9wKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2VfX3JlbW92ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID7Dlzwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWhhc1RlbXBsYXRlKG9wLCAnb3B0aW9uJykgfHwgbm9MYWJlbFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwib3AubGFiZWxcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRUZW1wbGF0ZShvcCwgJ29wdGlvbicpOyBjb250ZXh0OiBvcFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChhdXRvQ3JlYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uX19hdXRvLWNyZWF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cInN0b3BFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJzdG9wRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJpZCArICctY3JlYXRlLWZpZWxkJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVPcGVuQW5kQ2xvc2UoZmFsc2UsIHRydWUpOyBzdG9wRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImtleURvd24oJGV2ZW50LCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJzZWFyY2hVcGRhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwicHJldkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3QyLWNyZWF0ZV9fZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInRleHRib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29ycmVjdD1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jYXBpdGFsaXplPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIEBpZiAoIW92ZXJsYXkpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRhaW5lclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuXG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdDItc3Vic2NyaXB0LXdyYXBwZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2VsZWN0Mi1oaW50XCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZVxuICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlcbiAgICBjZGtDb25uZWN0ZWRPdmVybGF5SGFzQmFja2Ryb3BcbiAgICBjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcz1cInNlbGVjdDItb3ZlcmxheS1iYWNrZHJvcFwiXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwidHJpZ2dlclwiXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cInRoaXMuaXNPcGVuICYmIG92ZXJsYXlcIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5TWluV2lkdGhdPVwib3ZlcmxheVdpZHRoXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheUhlaWdodF09XCJvdmVybGF5SGVpZ2h0XCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJfcG9zaXRpb25zXCJcbiAgICAoYmFja2Ryb3BDbGljayk9XCJ0b2dnbGVPcGVuQW5kQ2xvc2UoKVwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRhaW5lclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbnRhaW5lclRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJzZWxlY3QyLWNvbnRhaW5lciBzZWxlY3QyLWNvbnRhaW5lci0tZGVmYXVsdCBzZWxlY3QyLWNvbnRhaW5lci1kcm9wZG93blwiXG4gICAgICAgIFtjbGFzcy5zZWxlY3QyLWNvbnRhaW5lci0tb3Blbl09XCJpc09wZW5cIlxuICAgICAgICBbY2xhc3Muc2VsZWN0Mi1vdmVybGF5XT1cIm92ZXJsYXlcIlxuICAgICAgICBbY2xhc3Muc2VsZWN0Mi1wb3NpdGlvbi1hdXRvXT1cImxpc3RQb3NpdGlvbiA9PT0gJ2F1dG8nXCJcbiAgICAgICAgW2NsYXNzLnNlbGVjdDItc3R5bGUtYm9yZGVybGVzc109XCJzdHlsZU1vZGUgPT09ICdib3JkZXJsZXNzJ1wiXG4gICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjZHJvcGRvd25cbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Mi1kcm9wZG93blwiXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0Mi1kcm9wZG93bi0tYmVsb3ddPVwiIXNlbGVjdDJhYm92ZVwiXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0Mi1kcm9wZG93bi0tYWJvdmVdPVwic2VsZWN0MmFib3ZlXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdDItc2VhcmNoIHNlbGVjdDItc2VhcmNoLS1kcm9wZG93blwiIFtjbGFzcy5zZWxlY3QyLXNlYXJjaC0taGlkZV09XCJoaWRlU2VhcmNoKClcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgI3NlYXJjaElucHV0XG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJpZCArICctc2VhcmNoLWZpZWxkJ1wiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwia2V5RG93bigkZXZlbnQsIGF1dG9DcmVhdGUpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInNlYXJjaFVwZGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJwcmV2Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdDItc2VhcmNoX19maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwidGV4dGJveFwiXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb3JyZWN0PVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NhcGl0YWxpemU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJ0aGlzLmlzT3BlbiA/IHRhYkluZGV4IDogJy0xJ1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdDItcmVzdWx0c1wiPlxuICAgICAgICAgICAgICAgIDx1bFxuICAgICAgICAgICAgICAgICAgICAjcmVzdWx0c1xuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdDItcmVzdWx0c19fb3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cInJlc3VsdE1heEhlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJ0cmVlXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgIGluZmluaXRlU2Nyb2xsXG4gICAgICAgICAgICAgICAgICAgIFtpbmZpbml0ZVNjcm9sbERpc2FibGVkXT1cIiFpbmZpbml0ZVNjcm9sbCAmJiAhaXNPcGVuXCJcbiAgICAgICAgICAgICAgICAgICAgW2luZmluaXRlU2Nyb2xsRGlzdGFuY2VdPVwiaW5maW5pdGVTY3JvbGxEaXN0YW5jZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbmZpbml0ZVNjcm9sbFRocm90dGxlXT1cImluZmluaXRlU2Nyb2xsVGhyb3R0bGVcIlxuICAgICAgICAgICAgICAgICAgICBbaW5maW5pdGVTY3JvbGxDb250YWluZXJdPVwicmVzdWx0c1wiXG4gICAgICAgICAgICAgICAgICAgIChzY3JvbGxlZCk9XCJvblNjcm9sbCgnZG93bicpXCJcbiAgICAgICAgICAgICAgICAgICAgKHNjcm9sbGVkVXApPVwib25TY3JvbGwoJ3VwJylcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJrZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoZ3JvdXBPck9wdGlvbiBvZiBmaWx0ZXJlZERhdGE7IHRyYWNrIHRyYWNrQnkoaSwgZ3JvdXBPck9wdGlvbik7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGdyb3VwT3JPcHRpb24ub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb25cIiByb2xlPVwiZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghaGFzVGVtcGxhdGUoZ3JvdXBPck9wdGlvbiwgJ2dyb3VwJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbGVjdDItcmVzdWx0c19fZ3JvdXAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdyb3VwT3JPcHRpb24uY2xhc3NlcyA/ICcgJyArIGdyb3VwT3JPcHRpb24uY2xhc3NlcyA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJncm91cE9yT3B0aW9uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRUZW1wbGF0ZShncm91cE9yT3B0aW9uLCAnZ3JvdXAnKTsgY29udGV4dDogZ3JvdXBPck9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbnMgc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25zLS1uZXN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBncm91cE9yT3B0aW9uLm9wdGlvbnM7IHRyYWNrIHRyYWNrQnkoaiwgb3B0aW9uKTsgbGV0IGogPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Jlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwib3B0aW9uLmlkIHx8IGlkICsgJy1vcHRpb24tJyArIGkgKyAnLScgKyBqXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImdldE9wdGlvblN0eWxlKG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwidHJlZWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImlzU2VsZWN0ZWQob3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlZChvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwibW91c2VlbnRlcihvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrKG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghaGFzVGVtcGxhdGUob3B0aW9uLCAnb3B0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QyLWxhYmVsLWNvbnRlbnRcIiBbaW5uZXJIVE1MXT1cIm9wdGlvbi5sYWJlbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImdldFRlbXBsYXRlKG9wdGlvbiwgJ29wdGlvbicpOyBjb250ZXh0OiBvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Jlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ3JvdXBPck9wdGlvbi5pZCB8fCBpZCArICctb3B0aW9uLScgKyBpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImdldE9wdGlvblN0eWxlKGdyb3VwT3JPcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInRyZWVpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc1NlbGVjdGVkKGdyb3VwT3JPcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVkKGdyb3VwT3JPcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwibW91c2VlbnRlcihncm91cE9yT3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGljayhncm91cE9yT3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFoYXNUZW1wbGF0ZShncm91cE9yT3B0aW9uLCAnb3B0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJncm91cE9yT3B0aW9uLmxhYmVsXCIgY2xhc3M9XCJzZWxlY3QyLWxhYmVsLWNvbnRlbnRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRUZW1wbGF0ZShncm91cE9yT3B0aW9uLCAnb3B0aW9uJyk7IGNvbnRleHQ6IGdyb3VwT3JPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImdldFRlbXBsYXRlKGdyb3VwT3JPcHRpb24sICdvcHRpb24nKTsgY29udGV4dDogZ3JvdXBPck9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIWZpbHRlcmVkRGF0YT8ubGVuZ3RoICYmIG5vUmVzdWx0TWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwic2VsZWN0Mi1uby1yZXN1bHQgc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25cIiBbaW5uZXJIVE1MXT1cIm5vUmVzdWx0TWVzc2FnZVwiPjwvbGk+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChtYXhSZXN1bHRzRXhjZWVkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Mi10b28tbXVjaC1yZXN1bHQgc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwibWF4UmVzdWx0c01lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbGk+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|