@vgroup/dialbox 0.1.10 → 0.1.11
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.
|
@@ -80,10 +80,10 @@ export class DialboxComponent {
|
|
|
80
80
|
this.isInitialized = false;
|
|
81
81
|
this.isMinimised = false;
|
|
82
82
|
// Initialize if dialpad is visible by default
|
|
83
|
-
if (!this.isDialpadHidden) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
83
|
+
// if (!this.isDialpadHidden) {
|
|
84
|
+
// console.log('sfsdfdsf')
|
|
85
|
+
// this.initializeTwilio();
|
|
86
|
+
// }
|
|
87
87
|
}
|
|
88
88
|
initializeTwilio() {
|
|
89
89
|
if (!this.isInitialized) {
|
|
@@ -210,6 +210,10 @@ export class DialboxComponent {
|
|
|
210
210
|
ngOnInit() {
|
|
211
211
|
try {
|
|
212
212
|
this.token = localStorage.getItem('ext_token') || '';
|
|
213
|
+
if (!this.isDialpadHidden) {
|
|
214
|
+
console.log('sfsdfdsf');
|
|
215
|
+
this.initializeTwilio();
|
|
216
|
+
}
|
|
213
217
|
//this.isCallInProgress = true;
|
|
214
218
|
this.getContactList();
|
|
215
219
|
this.getUserCallSetting();
|
|
@@ -340,38 +344,37 @@ export class DialboxComponent {
|
|
|
340
344
|
this.registerDragElement();
|
|
341
345
|
}
|
|
342
346
|
ngOnChanges(changes) {
|
|
343
|
-
if (changes['isDialpadHidden'] && !this.isDialpadHidden) {
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
}
|
|
347
|
+
// if (changes['isDialpadHidden'] && !this.isDialpadHidden) {
|
|
348
|
+
// this.getContactList();
|
|
349
|
+
// this.getUserCallSetting();
|
|
350
|
+
// setTimeout(() => {
|
|
351
|
+
// this.dialInputElement.nativeElement.focus();
|
|
352
|
+
// }, 0);
|
|
353
|
+
// if(this.incomingCallData) {
|
|
354
|
+
// if (this.isCallInProgress) {
|
|
355
|
+
// this.newIncomingCalls.push(this.incomingCallData);
|
|
356
|
+
// console.log('404', this.incomingCallData)
|
|
357
|
+
// this.getUserInformation(this.incomingCallData);
|
|
358
|
+
// } else {
|
|
359
|
+
// this.isCallInProgress = true;
|
|
360
|
+
// this.isDialpadHidden = false;
|
|
361
|
+
// this.callData.phone = this.incomingCallData.parameters['From'];
|
|
362
|
+
// console.log('411', this.incomingCallData)
|
|
363
|
+
// this.getUserInformation(this.incomingCallData);
|
|
364
|
+
// this.callData.name = this.incomingCallData.customParameters.get('name');
|
|
365
|
+
// this.callData.img = this.incomingCallData.customParameters.get('image') || 'assets/images/user.jpg';
|
|
366
|
+
// this.callData.isIncomingCall = true;
|
|
367
|
+
// }
|
|
368
|
+
// this.incomingCallData.on('cancel', () => {
|
|
369
|
+
// // this.incomingCallsList = [];
|
|
370
|
+
// this.isCallInProgress = false;
|
|
371
|
+
// });
|
|
372
|
+
// this.incomingCallData.on('disconnect', () => {
|
|
373
|
+
// // this.incomingCallsList = [];
|
|
374
|
+
// this.isCallInProgress = false;
|
|
375
|
+
// });
|
|
376
|
+
// }
|
|
377
|
+
// }
|
|
375
378
|
}
|
|
376
379
|
registerDragElement() {
|
|
377
380
|
try {
|
|
@@ -1149,4 +1152,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
1149
1152
|
}], numberDialed: [{
|
|
1150
1153
|
type: Output
|
|
1151
1154
|
}] } });
|
|
1152
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvZGlhbGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvZGlhbGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBYyxZQUFZLEVBQWdCLEtBQUssRUFBcUIsTUFBTSxFQUFpQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRW5NLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUkvQixPQUFtQyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQTs7Ozs7Ozs7OztBQVduQyxNQUFNLE9BQU8sZ0JBQWdCO0lBSTNCLElBQWEsZUFBZSxDQUFDLEtBQWM7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsNkRBQTZEO1lBQzdELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUdELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBNkRELFlBQ1UsYUFBNEIsRUFDNUIsVUFBNEIsRUFDNUIsTUFBaUIsRUFDakIsU0FBMkIsRUFDM0IsZ0JBQWtDLEVBQ2xDLEdBQXNCLEVBQ3RCLE1BQWM7UUFOZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNC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QjtzQkFBbEMsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ2lCLGdCQUFnQjtzQkFBdkMsU0FBUzt1QkFBQyxXQUFXO2dCQUdaLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFR3aWxpb1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2UvdHdpbGlvLnNlcnZpY2UnO1xuaW1wb3J0IHN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuaW1wb3J0IHsgRXh0ZW5zaW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZS9leHRlbnNpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDYWxsZXJJZERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYWxsZXItaWQtZGlhbG9nL2NhbGxlci1pZC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgcGFyc2VQaG9uZU51bWJlckZyb21TdHJpbmcsIHsgQXNZb3VUeXBlIH0gZnJvbSAnbGlicGhvbmVudW1iZXItanMnO1xuaW1wb3J0IHsga2V5cGFkIH0gZnJvbSAnLi4va2V5cGFkJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBJcEFkZHJlc3NTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL2lwLWFkZHJlc3Muc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ2FsbCB9IGZyb20gJ0B0d2lsaW8vdm9pY2Utc2RrJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGlhbGJveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kaWFsYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGlhbGJveC5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRGlhbGJveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIFxuICBwcml2YXRlIF9pc0RpYWxwYWRIaWRkZW46IGJvb2xlYW4gPSB0cnVlO1xuICBcbiAgQElucHV0KCkgc2V0IGlzRGlhbHBhZEhpZGRlbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzRGlhbHBhZEhpZGRlbiA9IHZhbHVlO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIC8vIFdoZW4gZGlhbHBhZCBiZWNvbWVzIHZpc2libGUsIGVuc3VyZSBUd2lsaW8gaXMgaW5pdGlhbGl6ZWRcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVR3aWxpbygpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBpbmNvbWluZ0NhbGxEYXRhOiBhbnlcbiAgXG4gIGdldCBpc0RpYWxwYWRIaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzRGlhbHBhZEhpZGRlbjtcbiAgfVxuICBAT3V0cHV0KCkgY2xvc2VEaWFscGFkRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGNhbGxJbml0aWF0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBlbmRDYWxsRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG1pbmltaXNlRXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIGluY29taW5nQ2FsbHNOZXdJbmZvRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuICBAT3V0cHV0KCkgaW5jb21pbmdDYWxsSW5pdGlhdGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBWaWV3Q2hpbGQoJ2RpYWxJbnB1dCcpIGRpYWxJbnB1dEVsZW1lbnQhOiBFbGVtZW50UmVmO1xuXG4gIFxuICBAT3V0cHV0KCkgbnVtYmVyRGlhbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cblxuICBpc0NhbGxJblByb2dyZXNzOiBib29sZWFuID0gZmFsc2U7XG4gIGtleXBhZFZhbCA9IGtleXBhZDtcbiAgXG4gIHNob3dJbnB1dENsZWFyQnRuOiBib29sZWFuID0gZmFsc2U7XG4gIGRpYWxlZE51bWJlcjogc3RyaW5nID0gJyc7XG4gIGNvbnRhY3RMaXN0OiBhbnlbXSA9IFtdO1xuICBmaWx0ZXJlZENvbnRhY3RMaXN0OiBhbnlbXSA9IFtdO1xuICBjYWxsZXJJZExpc3Q6IGFueVtdID0gW107XG4gIHNlbGVjdGVkQ2FsbGVySWQ6IGFueTtcbiAgaXNDYWxsZXJJZEhpZGRlbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgaXNUcmlhbFBlcmlvZE92ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNQYXltZW50RHVlOiBib29sZWFuID0gZmFsc2U7XG4gIHRlcm1pbmF0ZUNhbGwgPSBmYWxzZTtcbiAgdG9hc3RUaW1lb3V0ID0gNzAwMDtcbiAgY2FsbE51bWJlclRvYXN0ID0ge1xuICAgIHNob3c6IGZhbHNlLFxuICAgIHR5cGU6ICdhbGVydC1zdWNjZXNzJyxcbiAgICBudW1iZXI6ICcnLFxuICAgIGRpc3BsYXlOdW06ICcnXG4gIH1cbiAgY2FsbERhdGE6IGFueSA9IHtcbiAgICBwaG9uZTogJycsXG4gICAgZGlzcGxheU51bTogJycsXG4gICAgZGlhbDogZmFsc2UsXG4gICAgbmFtZTogJycsXG4gICAgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXG4gICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxuICAgIGV4dE51bTonJ1xuICB9O1xuICBsYXN0RGlhbGVkOiB7IG5hbWU/OiBzdHJpbmc7IGltYWdlPzogc3RyaW5nOyBudW1iZXI6IHN0cmluZyB9IHwgbnVsbCA9IG51bGw7XG4gIHNhbml0aXplZE51bTogYW55O1xuICBkaWFsQWxlcnQgPSB7XG4gICAgbXNnOiAnJyxcbiAgICBzaG93OiBmYWxzZVxuICB9XG4gIHRva2VuPzpzdHJpbmc7XG4gXG4gIHNob3dEZWRpY2F0ZWRQb3B1cDpib29sZWFuID0gZmFsc2U7XG4gIG5ld0luY29taW5nQ2FsbHM6IGFueSA9IFtdO1xuICBpbmNvbWluZ0NhbGxzTGlzdDogYW55ID0gW107XG4gIG5ld0luY29taW5nQ2FsbERhdGE/OkNhbGw7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBjYWxsUHJlZmVyZW5jZTogYW55O1xuICBzaGFrZURlZGljYXRlZEJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1NtYXJ0RGlhbENhbGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoICBcbiAgICBwcml2YXRlIHR3aWxpb1NlcnZpY2U6IFR3aWxpb1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBleHRTZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBpcFNlcnZpY2U6IElwQWRkcmVzc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBleHRlbnNpb25TZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RrOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICApIHsgXG4gICAgLy8gSW5pdGlhbGl6ZSBpZiBkaWFscGFkIGlzIHZpc2libGUgYnkgZGVmYXVsdFxuICAgIGlmICghdGhpcy5pc0RpYWxwYWRIaWRkZW4pIHtcbiAgICAgIGNvbnNvbGUubG9nKCdzZnNkZmRzZicpXG4gICAgICB0aGlzLmluaXRpYWxpemVUd2lsaW8oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVUd2lsaW8oKSB7XG4gICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMudG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfHwgJyc7XG4gICAgICBpZiAoIXRoaXMudG9rZW4pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gYXV0aGVudGljYXRpb24gdG9rZW4gZm91bmQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgXG4gICAgICAvLyBJbml0aWFsaXplIFR3aWxpbyBzZXJ2aWNlXG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaW5pdGlhbGl6ZVR3aWxpb0RldmljZSgpO1xuICAgICAgXG4gICAgICAvLyBTdWJzY3JpYmUgdG8gaW5jb21pbmcgY2FsbHMgdG8gc2hvdyBkaWFscGFkIHdoZW4gY2FsbCBjb21lcyBpblxuICAgICAgY29uc3QgY2FsbFN1YiA9IHRoaXMudHdpbGlvU2VydmljZS5jdXJyZW50Q2FsbC5zdWJzY3JpYmUoY2FsbCA9PiB7XG4gICAgICAgIGlmIChjYWxsKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0luY29taW5nIGNhbGwgcmVjZWl2ZWQ6JywgY2FsbCk7XG4gICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlOyAvLyBTaG93IGRpYWxwYWQgb24gaW5jb21pbmcgY2FsbFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoY2FsbFN1Yik7XG4gICAgfVxuICAgIFxuICB9XG4gIC8vIG5nT25DaGFuZ2UoKSB7XG4gIC8vICAgdGhpcy5pbml0aWFsaXplVHdpbGlvKCk7XG4gIC8vIH1cblxuICAvLyBuZ09uSW5pdCgpIHtcbiAgLy8gICB0cnkge1xuICAvLyAgICAgdGhpcy5nZXRDb250YWN0TGlzdCgpO1xuICAvLyAgICAgdGhpcy5nZXRVc2VyQ2FsbFNldHRpbmcoKTtcbiAgICAgIFxuICAvLyAgICAgLy8gU3Vic2NyaWJlIHRvIGRpYWwgbnVtYmVyIGV2ZW50c1xuICAvLyAgICAgY29uc3Qgc3ViMSA9IHRoaXMudHdpbGlvU2VydmljZS5kaWFsTnVtYmVyRnJvbU90aGVyTW9kdWxlLnN1YnNjcmliZSgoY29udGFjdDogYW55KSA9PiB7XG4gIC8vICAgICAgIGlmIChjb250YWN0Lm51bWJlcikge1xuICAvLyAgICAgICAgIHRoaXMuaXNTbWFydERpYWxDYWxsID0gZmFsc2U7XG4gIC8vICAgICAgICAgaWYgKGNvbnRhY3QuaXNEaWFsRnJvbUhpc3RvcnkpIHtcbiAgLy8gICAgICAgICAgIC8vaGFuZGxlIGRpYWxpbmcgZnJvbSBoaXN0b3J5IHBhZ2VcbiAgLy8gICAgICAgICAgIGlmKGNvbnRhY3QuY2FsbGVySWQgPT0gJ3NtYXJ0RGlhbGluZycpe1xuICAgICAgICAgICAgIFxuICAvLyAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2FsbGVySWQgPSB7IG51bWJlcjogY29udGFjdC5mcm9tIH07XG4gIC8vICAgICAgICAgICAgIHRoaXMuaXNTbWFydERpYWxDYWxsID0gdHJ1ZTtcbiAgLy8gICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgLy8gICAgICAgICAgICAgfSwgMjAwMCk7XG4gIC8vICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBjb250YWN0Lm51bWJlcjtcbiAgLy8gICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gY29udGFjdC5uYW1lO1xuICAvLyAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmltZyA9IGNvbnRhY3QuaW1nO1xuICAvLyAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmZyb20gPSBjb250YWN0LmZyb207XG4gIC8vICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XG4gIC8vICAgICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGNvbnRhY3QpO1xuICAvLyAgICAgICAgICAgLy8gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5wdXNoKGNvbnRhY3QpXG4gIC8vICAgICAgICAgICB0aGlzLmluaXRpYXRlQ2FsbCgpO1xuICAvLyAgICAgICAgIH1lbHNle1xuICAvLyAgICAgICAgICAgdGhpcy5nZXRVc2VyQ2FsbFNldHRpbmcoKTtcbiAgLy8gICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAvLyAgICAgICAgICAgfSwgMTAwMCk7XG4gIC8vICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihjb250YWN0KTtcbiAgLy8gICAgICAgICAgIC8vIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QucHVzaChjb250YWN0KVxuICAvLyAgICAgICAgICAgICB0aGlzLmRpYWxlZE51bWJlciA9IGNvbnRhY3QubnVtYmVyO1xuICAvLyAgICAgICAgICAgICB0aGlzLnNhbml0aXplZE51bSA9IGNvbnRhY3QubnVtYmVyO1xuICAvLyAgICAgICAgICAgfVxuICAvLyAgICAgICAgIH0gZWxzZSB7XG4gIC8vICAgICAgICAgICBpZiAoY29udGFjdC5jYWxsZXJJZCA9PSAnYWx3YXlzQXNrJyB8fCBjb250YWN0LmNhbGxlcklkID09ICdzbWFydERpYWxpbmcnKSB7XG4gIC8vICAgICAgICAgICAgIHRoaXMuZ2V0VXNlckNhbGxTZXR0aW5nKCk7XG4gIC8vICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gIC8vICAgICAgICAgICAgIH0sIDEwMDApO1xuICAvLyAgICAgICAgICAgICB0aGlzLmRpYWxlZE51bWJlciA9IGNvbnRhY3QubnVtYmVyO1xuICAvLyAgICAgICAgICAgICB0aGlzLnNhbml0aXplZE51bSA9IGNvbnRhY3QubnVtYmVyO1xuICAgICAgICAgICAgICBcbiAgLy8gICAgICAgICAgIH0gZWxzZSB7XG4gIC8vICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gIC8vICAgICAgICAgICAgIH0sIDIwMDApO1xuICAvLyAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gY29udGFjdC5udW1iZXI7XG4gIC8vICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGNvbnRhY3QubmFtZTtcbiAgLy8gICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBjb250YWN0LmltZztcbiAgLy8gICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgLy8gICAgICAgICAgICAgdGhpcy5pbml0aWF0ZUNhbGwoKTtcbiAgLy8gICAgICAgICAgIH1cbiAgLy8gICAgICAgICB9XG4gICAgICAgICAgXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0pXG4gIFxuICAvLyAgICAgLy8gaGFuZGxlIGluY29taW5nIGNhbGxcbiAgLy8gICAgIGNvbnN0IHN1YjIgPSB0aGlzLnR3aWxpb1NlcnZpY2UuY3VycmVudENhbGwuc3Vic2NyaWJlKGluY29taW5nQ2FsbERhdGEgPT4ge1xuICAvLyAgICAgICAvLyBpZiAoaW5jb21pbmdDYWxsRGF0YSkge1xuICAvLyAgICAgICAvLyAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gIC8vICAgICAgIC8vICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgLy8gICAgICAgLy8gICB0aGlzLmNhbGxEYXRhLnBob25lID0gaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzLkZyb207XG4gIC8vICAgICAgIC8vICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnbmFtZScpO1xuICAvLyAgICAgICAvLyAgIHRoaXMuY2FsbERhdGEuaW1nID0gaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnaW1hZ2UnKTtcbiAgLy8gICAgICAgLy8gICB0aGlzLmNhbGxEYXRhLmlzSW5jb21pbmdDYWxsID0gdHJ1ZTtcbiAgLy8gICAgICAgLy8gfVxuICAvLyAgICAgICBpZiAoaW5jb21pbmdDYWxsRGF0YSkge1xuICAvLyAgICAgICAgIGlmICh0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MpIHtcbiAgLy8gICAgICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxscy5wdXNoKGluY29taW5nQ2FsbERhdGEpO1xuICAvLyAgICAgICAgICAgdGhpcy5nZXRVc2VySW5mb3JtYXRpb24oaW5jb21pbmdDYWxsRGF0YSk7XG4gIC8vICAgICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gIC8vICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAvLyAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGluY29taW5nQ2FsbERhdGEucGFyYW1ldGVyc1snRnJvbSddO1xuXG4gIC8vICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihpbmNvbWluZ0NhbGxEYXRhKTtcbiAgLy8gICAgICAgICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5nZXQoJ25hbWUnKTtcbiAgLy8gICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnaW1hZ2UnKSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmlzSW5jb21pbmdDYWxsID0gdHJ1ZTtcbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgICAgaW5jb21pbmdDYWxsRGF0YS5vbignY2FuY2VsJywgKCkgPT4ge1xuICAvLyAgICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFyYW1ldGVycy5DYWxsU2lkICE9PSBpbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XG4gIC8vICAgICAgICAgICBpZih0aGlzLmluY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCA9PSAwKXtcbiAgLy8gICAgICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gIC8vICAgICAgICAgICB9XG4gIC8vICAgICAgICAgfSk7XG5cbiAgLy8gICAgICAgICBpbmNvbWluZ0NhbGxEYXRhLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAvLyAgICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5wYXJhbWV0ZXJzLkNhbGxTaWQgIT09IGluY29taW5nQ2FsbERhdGEucGFyYW1ldGVyc1snQ2FsbFNpZCddKTtcbiAgLy8gICAgICAgICAgICAgaWYodGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGggPT0gMCl7XG4gIC8vICAgICAgICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gIC8vICAgICAgICAgICAgIH1cbiAgLy8gICAgICAgICB9KTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSk7XG5cbiAgLy8gICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoc3ViMSk7XG4gIC8vICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHN1YjIpO1xuICAvLyAgIH1jYXRjaChlKXtcbiAgLy8gICAgIGNvbnNvbGUubG9nKGUpXG4gIC8vICAgfVxuICAgIFxuICAvLyB9XG5cblxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRyeXtcbiAgICAgIHRoaXMudG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfHwgJyc7XG4gICAgICAvL3RoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7IFxuICAgICAgdGhpcy5nZXRDb250YWN0TGlzdCgpO1xuICAgICAgXG4gICAgICB0aGlzLmdldFVzZXJDYWxsU2V0dGluZygpO1xuICAgICAgY29uc3Qgc3ViMSA9IHRoaXMudHdpbGlvU2VydmljZS5kaWFsTnVtYmVyRnJvbU90aGVyTW9kdWxlLnN1YnNjcmliZSgoY29udGFjdDphbnkpID0+IHtcbiAgICAgICAgaWYgKGNvbnRhY3QubnVtYmVyKSB7XG4gICAgICAgICAgdGhpcy5pc1NtYXJ0RGlhbENhbGwgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoY29udGFjdC5pc0RpYWxGcm9tSGlzdG9yeSkge1xuICAgICAgICAgICAgLy9oYW5kbGUgZGlhbGluZyBmcm9tIGhpc3RvcnkgcGFnZVxuICAgICAgICAgICAgaWYoY29udGFjdC5jYWxsZXJJZCA9PSAnc21hcnREaWFsaW5nJyl7XG4gICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9IHsgbnVtYmVyOiBjb250YWN0LmZyb20gfTtcbiAgICAgICAgICAgICAgdGhpcy5pc1NtYXJ0RGlhbENhbGwgPSB0cnVlO1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGNvbnRhY3QubnVtYmVyO1xuICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBjb250YWN0Lm5hbWU7XG4gICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdC5pbWc7XG4gICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuZnJvbSA9IGNvbnRhY3QuZnJvbTtcbiAgICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJzI3NCcsIGNvbnRhY3QpXG4gICAgICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGNvbnRhY3QpO1xuICAgICAgICAgICAgLy8gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5wdXNoKGNvbnRhY3QpXG4gICAgICAgICAgICB0aGlzLmluaXRpYXRlQ2FsbCgpO1xuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5nZXRVc2VyQ2FsbFNldHRpbmcoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnMjgyJywgY29udGFjdClcbiAgICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGNvbnRhY3QpO1xuICAgICAgICAgICAgLy8gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5wdXNoKGNvbnRhY3QpXG4gICAgICAgICAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjb250YWN0LmNhbGxlcklkID09ICdhbHdheXNBc2snIHx8IGNvbnRhY3QuY2FsbGVySWQgPT0gJ3NtYXJ0RGlhbGluZycpIHtcbiAgICAgICAgICAgICAgdGhpcy5nZXRVc2VyQ2FsbFNldHRpbmcoKTtcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gY29udGFjdC5uYW1lO1xuICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmltZyA9IGNvbnRhY3QuaW1nO1xuICAgICAgICAgICAgICB0aGlzLnNhbml0aXplZE51bSA9IGNvbnRhY3QubnVtYmVyO1xuICAgICAgICAgICAgICB0aGlzLmluaXRpYXRlQ2FsbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgfSlcbiAgXG4gICAgICAvLyBoYW5kbGUgaW5jb21pbmcgY2FsbFxuICAgICAgY29uc3Qgc3ViMiA9IHRoaXMudHdpbGlvU2VydmljZS5jdXJyZW50Q2FsbC5zdWJzY3JpYmUoaW5jb21pbmdDYWxsRGF0YSA9PiB7XG4gICAgICAgIC8vIGlmIChpbmNvbWluZ0NhbGxEYXRhKSB7XG4gICAgICAgIC8vICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgLy8gICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAvLyAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBpbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnMuRnJvbTtcbiAgICAgICAgLy8gICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCduYW1lJyk7XG4gICAgICAgIC8vICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCdpbWFnZScpO1xuICAgICAgICAvLyAgIHRoaXMuY2FsbERhdGEuaXNJbmNvbWluZ0NhbGwgPSB0cnVlO1xuICAgICAgICAvLyB9XG4gICAgICAgIGlmIChpbmNvbWluZ0NhbGxEYXRhKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNDYWxsSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmdDYWxsRGF0YSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnMzI1JywgaW5jb21pbmdDYWxsRGF0YSlcbiAgICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGluY29taW5nQ2FsbERhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBpbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnNbJ0Zyb20nXTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCczMzInLCBpbmNvbWluZ0NhbGxEYXRhKVxuICAgICAgICAgICAgdGhpcy5nZXRVc2VySW5mb3JtYXRpb24oaW5jb21pbmdDYWxsRGF0YSk7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCduYW1lJyk7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmltZyA9IGluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5nZXQoJ2ltYWdlJykgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5pc0luY29taW5nQ2FsbCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGluY29taW5nQ2FsbERhdGEub24oJ2NhbmNlbCcsICgpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSB0aGlzLmluY29taW5nQ2FsbHNMaXN0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSAhPT0gaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzWydDYWxsU2lkJ10pO1xuICAgICAgICAgICAgaWYodGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaW5jb21pbmdDYWxsRGF0YS5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFyYW1ldGVyc1snQ2FsbFNpZCddICE9PSBpbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XG4gICAgICAgICAgICAgIGlmKHRoaXMuaW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoID09IDApe1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHN1YjEpO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzdWIyKTtcbiAgICB9Y2F0Y2goZSl7XG4gICAgICBjb25zb2xlLmxvZyhlKVxuICAgIH1cbiAgfVxuXG4gIFxuICBnZXRVc2VySW5mb3JtYXRpb24oaW5jb21pbmdDYWxsRGF0YTogYW55KSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2dldFVzZXJJbmZvcm1hdGlvbicsIGluY29taW5nQ2FsbERhdGEpO1xuICAgIGxldCBkYXRhID0gdGhpcy5mcm9tRW50cmllcyhBcnJheS5mcm9tKGluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5lbnRyaWVzKCkpKTtcbiAgICBjb25zb2xlLmxvZygnMzY2LS0tJywgZGF0YSlcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0VXNlckluZm9ybWF0aW9uKGRhdGFbJ3R3aWxpb0F1dGhJZCddKS5zdWJzY3JpYmUoXG4gICAgcmVzcG9uc2UgPT4ge1xuICAgICAgaW5jb21pbmdDYWxsRGF0YVsndXNlckluZm8nXT1yZXNwb25zZVxuICAgICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3Quc29tZSgoY2FsbDogYW55KSA9PiBjYWxsLnBhcmFtZXRlcnM/LkNhbGxTaWQgPT09IGluY29taW5nQ2FsbERhdGEucGFyYW1ldGVycz8uQ2FsbFNpZCk7XG4gICAgICBpZighYWxyZWFkeUV4aXN0cyl7XG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QucHVzaChpbmNvbWluZ0NhbGxEYXRhKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2RrLm1hcmtGb3JDaGVjaygpO1xuICAgIH0sIGVycm9yID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN0YXJ0aW5nIHJlY29yZGluZycsIGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZyb21FbnRyaWVzKGVudHJpZXM6IFtzdHJpbmcsIGFueV1bXSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiBlbnRyaWVzLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIGFueT4pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMucmVnaXN0ZXJEcmFnRWxlbWVudCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydpc0RpYWxwYWRIaWRkZW4nXSAmJiAhdGhpcy5pc0RpYWxwYWRIaWRkZW4pIHtcbiAgICAgIHRoaXMuZ2V0Q29udGFjdExpc3QoKTtcbiAgICAgIHRoaXMuZ2V0VXNlckNhbGxTZXR0aW5nKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5kaWFsSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH0sIDApO1xuICAgICAgaWYodGhpcy5pbmNvbWluZ0NhbGxEYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHMucHVzaCh0aGlzLmluY29taW5nQ2FsbERhdGEpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCc0MDQnLCB0aGlzLmluY29taW5nQ2FsbERhdGEpXG4gICAgICAgICAgdGhpcy5nZXRVc2VySW5mb3JtYXRpb24odGhpcy5pbmNvbWluZ0NhbGxEYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IHRoaXMuaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzWydGcm9tJ107XG4gICAgICAgICAgY29uc29sZS5sb2coJzQxMScsIHRoaXMuaW5jb21pbmdDYWxsRGF0YSlcbiAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbih0aGlzLmluY29taW5nQ2FsbERhdGEpO1xuICAgICAgICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IHRoaXMuaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnbmFtZScpO1xuICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gdGhpcy5pbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCdpbWFnZScpIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJztcbiAgICAgICAgICB0aGlzLmNhbGxEYXRhLmlzSW5jb21pbmdDYWxsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluY29taW5nQ2FsbERhdGEub24oJ2NhbmNlbCcsICgpID0+IHtcbiAgICAgICAgICAvLyB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gW107XG4gICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gIFxuICAgICAgICB0aGlzLmluY29taW5nQ2FsbERhdGEub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICAvLyB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gW107XG4gICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcmVnaXN0ZXJEcmFnRWxlbWVudCgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZWxtbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHJhZ3BhcmVudDEnKTtcbiAgICAgIGlmICghZWxtbnQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRHJhZyBlbGVtZW50IG5vdCBmb3VuZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBwb3MxID0gMCwgcG9zMiA9IDAsIHBvczMgPSAwLCBwb3M0ID0gMDtcblxuICAgICAgY29uc3QgZHJhZ01vdXNlRG93biA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAodGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0Jykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcG9zMyA9IGUuY2xpZW50WDtcbiAgICAgICAgcG9zNCA9IGUuY2xpZW50WTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKG1vdmVFdmVudDogTW91c2VFdmVudCkgPT4gZWxlbWVudERyYWcobW92ZUV2ZW50KTtcbiAgICAgICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgZWxlbWVudERyYWcgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHBvczEgPSBwb3MzIC0gZS5jbGllbnRYO1xuICAgICAgICBwb3MyID0gcG9zNCAtIGUuY2xpZW50WTtcbiAgICAgICAgcG9zMyA9IGUuY2xpZW50WDtcbiAgICAgICAgcG9zNCA9IGUuY2xpZW50WTtcbiAgICAgICAgXG4gICAgICAgIGVsbW50LnN0eWxlLnRvcCA9IChlbG1udC5vZmZzZXRUb3AgLSBwb3MyKSArICdweCc7XG4gICAgICAgIGVsbW50LnN0eWxlLmxlZnQgPSAoZWxtbnQub2Zmc2V0TGVmdCAtIHBvczEpICsgJ3B4JztcbiAgICAgIH07XG5cbiAgICAgIC8vIENoZWNrIGZvciBoZWFkZXIgZWxlbWVudFxuICAgICAgY29uc3QgaGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxtbnQuaWQgKyAnaGVhZGVyJyk7XG4gICAgICBpZiAoaGVhZGVyKSB7XG4gICAgICAgIGhlYWRlci5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbG1udC5vbm1vdXNlZG93biA9IGRyYWdNb3VzZURvd247XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coZSlcbiAgICB9XG4gIH1cblxuICBhZGROdW1iZXIobnVtOiBhbnkpIHtcbiAgICBpZiAoIG51bSA9PSAnIycgfHwgbnVtID09ICcqJyB8fG51bSA9PSAnKycgfHwgTnVtYmVyLmlzSW50ZWdlcihudW0pKSB7XG4gICAgICBpZiAobnVtID09ICcjJykge1xuICAgICAgICBuZXcgQXVkaW8oYC9hc3NldHMvZGlhbC10b25lcy9kdG1mL2R0bWYtaGFzaC0ubXAzYCkucGxheSgpO1xuICAgICAgfSBlbHNlIGlmIChudW0gPT0gJyonKSB7XG4gICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi1zdGFyLS5tcDNgKS5wbGF5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXcgQXVkaW8oYC9hc3NldHMvZGlhbC10b25lcy9kdG1mL2R0bWYtJHtudW19LS5tcDNgKS5wbGF5KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGlhbGVkTnVtYmVyICs9IG51bTtcbiAgICAgIHRoaXMuc2hvd0lucHV0Q2xlYXJCdG4gPSB0cnVlO1xuXG4gICAgICB0aGlzLm51bWJlckRpYWxlZC5lbWl0KHRoaXMuZGlhbGVkTnVtYmVyKTtcblxuICAgICAgdGhpcy5vbkRpYWxJbnB1dENoYW5nZSh0aGlzLmRpYWxlZE51bWJlcilcbiAgICAgIC8vIHRoaXMuZGlhbElucHV0UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9ZWxzZSBpZihudW0gPT09ICd2b2ljZW1haWwnKXtcbiAgICAgIC8vIHRoaXMuc2hvd0RlZGljYXRlZFBvcHVwID0gdHJ1ZTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnZXh0ZW5zaW9uL3ZvaWNlbWFpbC8nK3RoaXMudG9rZW5dKTtcbiAgICB9XG4gIH1cbiAgXG4gIGhpZGVEaWFscGFkKCkge1xuICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLmNsb3NlRGlhbHBhZEV2ZW50LmVtaXQoKTtcbiAgICB0aGlzLmNsZWFyQWxsRGlhbGVkKCk7XG4gICAgdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0ID0gW107XG4gIH1cbiAgXG4gIG9uRGlhbElucHV0Q2hhbmdlKGlucHV0VmFsOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgLy8gVXBkYXRlZCByZWdleCB0byBpbmNsdWRlIHgsIFgsIGV4dC4sIEV4dC4sIGFuZCAsXG4gICAgICBjb25zdCBpc051bWVyaWNJbnB1dCA9IC9eW1xcZFxccytcXC1dKyQvLnRlc3QoaW5wdXRWYWwpO1xuICAgICAgbGV0IG1haW5OdW1iZXIgPSBpbnB1dFZhbDtcblxuICAgICAgLy8gQ2hlY2sgZm9yIGV4dGVuc2lvbiBpbmRpY2F0b3JzIGFuZCBzcGxpdCB0aGUgaW5wdXRcbiAgICAgIGNvbnN0IGV4dE1hdGNoID0gaW5wdXRWYWwubWF0Y2goLyh4fFh8ZXh0XFwufEV4dFxcLnwsKSguKikvKTtcbiAgICAgIGlmIChleHRNYXRjaCkge1xuICAgICAgICBtYWluTnVtYmVyID0gaW5wdXRWYWwuc3Vic3RyaW5nKDAsIGV4dE1hdGNoLmluZGV4KS50cmltKCk7XG4gICAgICAgIHRoaXMuY2FsbERhdGEuZXh0TnVtID0gZXh0TWF0Y2hbMl0udHJpbSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBpc051bWVyaWNJbnB1dCA/IG1haW5OdW1iZXIucmVwbGFjZSgvW1xcc1xcLV0rL2csICcnKSA6IG1haW5OdW1iZXI7XG5cbiAgICAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBpc051bWVyaWNJbnB1dCA/IHRoaXMuc2FuaXRpemVkTnVtIDogJyc7XG4gICAgICB0aGlzLnNob3dJbnB1dENsZWFyQnRuID0gaW5wdXRWYWwubGVuZ3RoID4gMDtcblxuICAgICAgaWYgKGlzTnVtZXJpY0lucHV0KSB7XG4gICAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gbmV3IEFzWW91VHlwZSgpLmlucHV0KHRoaXMuc2FuaXRpemVkTnVtKTtcbiAgICAgIH1cblxuICAgICAgLy8gZW1pdCBjdXJyZW50IG51bWJlciB3aGVuZXZlciBpbnB1dCBjaGFuZ2VzXG4gICAgICB0aGlzLm51bWJlckRpYWxlZC5lbWl0KHRoaXMuZGlhbGVkTnVtYmVyKTtcblxuICAgICAgaWYgKGlucHV0VmFsLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0ID0gdGhpcy5jb250YWN0TGlzdC5maWx0ZXIoY29udGFjdCA9PiB7XG4gICAgICAgICAgY29uc3QgZnVsbE5hbWUgPSBgJHtjb250YWN0LmZpcnN0TmFtZX0gJHtjb250YWN0Lm1pZGRsZU5hbWV9ICR7Y29udGFjdC5sYXN0TmFtZX1gLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgcmV0dXJuIGZ1bGxOYW1lLmluY2x1ZGVzKHRoaXMuc2FuaXRpemVkTnVtLnRvTG93ZXJDYXNlKCkpIHx8IGNvbnRhY3QubnVtYmVyc0xpc3Quc29tZSgobnVtOiBhbnkpID0+IG51bS5udW1iZXIuaW5jbHVkZXModGhpcy5zYW5pdGl6ZWROdW0pKTtcbiAgICAgICAgfSkuc2xpY2UoMCwgMik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpbHRlcmVkQ29udGFjdExpc3QgPSBbXTtcbiAgICAgIH1cblxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgIH1cbiAgfVxuXG4gIGdldEZpcnN0TGV0dGVyKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5hbWUgPyBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpIDogJyc7XG4gIH1cbiAgY2xlYXJJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5kaWFsZWROdW1iZXIubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSB0aGlzLmRpYWxlZE51bWJlci5zbGljZSgwLCAtMSk7XG4gICAgICB0aGlzLnNob3dJbnB1dENsZWFyQnRuID0gdGhpcy5kaWFsZWROdW1iZXIubGVuZ3RoICE9PSAwO1xuXG4gICAgICB0aGlzLm9uRGlhbElucHV0Q2hhbmdlKHRoaXMuZGlhbGVkTnVtYmVyKVxuICAgIH1cbiAgfVxuICBjbGVhckFsbERpYWxlZCgpIHtcbiAgICB0aGlzLmRpYWxlZE51bWJlciA9ICcnO1xuICAgIHRoaXMuc2FuaXRpemVkTnVtID0gJyc7XG4gICAgdGhpcy5zaG93SW5wdXRDbGVhckJ0biA9IGZhbHNlO1xuICB9XG4gIGdldENhbGxlcklkTGlzdCgpIHtcbiAgICB0aGlzLmV4dFNlcnZpY2UuZGlzcGxheUlEKHRoaXMudG9rZW4gfHwgJycpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIC8vdGhpcy5jYWxsZXJJZExpc3QgPSByZXMuY2FsbGVySWRMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gXCJDMkMgU29mdHBob25lIE51bWJlclwiKTtcbiAgICAgIHRoaXMuY2FsbGVySWRMaXN0ID0gcmVzLmNhbGxlcklkTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS52b2ljZUZlYXR1cmUgPT09IHRydWUpO1xuICAgICAgLy8gdGhpcy5jYWxsZXJJZExpc3QgPSByZXMuY2FsbGVySWRMaXN0O1xuICAgICAgaWYgKHRoaXMuY2FsbGVySWRMaXN0Lmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9IHRoaXMuY2FsbGVySWRMaXN0WzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuY2FsbFByZWZlcmVuY2UgPT09ICdhbHdheXNBc2snIHx8IHRoaXMuY2FsbFByZWZlcmVuY2UgPT09ICdzbWFydERpYWxpbmcnKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENhbGxlcklkID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2FsbGVySWQgPSB0aGlzLmNhbGxlcklkTGlzdC5maW5kKGl0ZW0gPT4gKGl0ZW0ubnVtYmVyID09IHRoaXMuY2FsbFByZWZlcmVuY2UpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGdldENvbnRhY3RMaXN0KCkge1xuICAgIHRoaXMudHdpbGlvU2VydmljZS5nZXRDb250YWN0TGlzdCgpLnN1YnNjcmliZSgocmVzcDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzcC5yZXNwb25zZSA9PSAnU3VjY2VzcycpIHtcbiAgICAgICAgdGhpcy5jb250YWN0TGlzdCA9IHJlc3AucGhvbmVCb29rO1xuICAgICAgfVxuICAgIH0sIGVyciA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhlcnIpXG4gICAgfSlcbiAgfVxuICBnZXRGdWxsTmFtZShjb250YWN0OiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCBmdWxsTmFtZSA9IGNvbnRhY3QuZmlyc3ROYW1lIHx8ICcnO1xuICAgIGlmIChjb250YWN0Lm1pZGRsZU5hbWUpIHtcbiAgICAgIGZ1bGxOYW1lICs9IGAgJHtjb250YWN0Lm1pZGRsZU5hbWV9YDtcbiAgICB9XG4gICAgaWYgKGNvbnRhY3QubGFzdE5hbWUpIHtcbiAgICAgIGZ1bGxOYW1lICs9IGAgJHtjb250YWN0Lmxhc3ROYW1lfWA7XG4gICAgfVxuICAgIHJldHVybiBmdWxsTmFtZS50cmltKCk7XG4gIH1cblxuXG4gIHRvZ2dsZUNhbGxlcklkRGl2KCkge1xuICAgIHRoaXMuaXNDYWxsZXJJZEhpZGRlbiA9ICF0aGlzLmlzQ2FsbGVySWRIaWRkZW47XG4gIH1cblxuICBvbkNvbnRhY3RTZWxlY3QoY29udGFjdDogYW55KSB7XG4gICAgdGhpcy5kaWFsZWROdW1iZXIgPSBjb250YWN0Lm51bWJlcnNMaXN0WzBdLm51bWJlcjtcbiAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSB0aGlzLmdldEZ1bGxOYW1lKGNvbnRhY3QpO1xuICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdC5pbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XG4gICAgdGhpcy5vbkRpYWxJbnB1dENoYW5nZSh0aGlzLmRpYWxlZE51bWJlcik7XG4gICAgdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0ID0gW107XG4gIH1cblxuICBlbmRDYWxsKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmxvZygnRW5kaW5nIGNhbGwnKTtcbiAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0ID0gW107XG4gICAgICBcbiAgICAgIC8vIFJlc2V0IGNhbGwgZGF0YVxuICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcbiAgICAgICAgcGhvbmU6ICcnLFxuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXG4gICAgICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcbiAgICAgICAgZGlhbDogZmFsc2UsXG4gICAgICAgIGRpc3BsYXlOdW06ICcnLFxuICAgICAgICBleHROdW06ICcnXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBSZXNldCBkaWFsZWQgbnVtYmVyXG4gICAgICB0aGlzLmRpYWxlZE51bWJlciA9ICcnO1xuICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSAnJztcbiAgICAgIFxuICAgICAgLy8gRW1pdCBlbmQgY2FsbCBldmVudFxuICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xuICAgICAgY29uc29sZS5sb2coJ0NhbGwgZW5kZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gZW5kQ2FsbDonLCBlcnJvcik7XG4gICAgICAvLyBFdmVuIGlmIHRoZXJlJ3MgYW4gZXJyb3IsIHRyeSB0byByZXNldCB0aGUgc3RhdGVcbiAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcbiAgICAgICAgcGhvbmU6ICcnLFxuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXG4gICAgICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcbiAgICAgICAgZGlhbDogZmFsc2UsXG4gICAgICAgIGRpc3BsYXlOdW06ICcnLFxuICAgICAgICBleHROdW06ICcnXG4gICAgICB9O1xuICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFzeW5jIGluaXRpYXRlQ2FsbCgpIHtcbiAgLy8gICB0cnkge1xuICAvLyAgICAgY29uc29sZS5sb2coJ0luaXRpYXRpbmcgY2FsbCB3aXRoIG51bWJlcjonLCB0aGlzLmRpYWxlZE51bWJlcik7XG4gICAgICBcbiAgLy8gICAgIGlmICghdGhpcy5kaWFsZWROdW1iZXIgJiYgdGhpcy5sYXN0RGlhbGVkKSB7XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKCdVc2luZyBsYXN0IGRpYWxlZCBudW1iZXI6JywgdGhpcy5sYXN0RGlhbGVkLm51bWJlcik7XG4gIC8vICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gdGhpcy5sYXN0RGlhbGVkLm51bWJlcjtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgY29uc3QgaXNJbnZhbGlkID0gYXdhaXQgdGhpcy5pc0ludmFsaWROdW1iZXIoKTtcbiAgLy8gICAgIGlmIChpc0ludmFsaWQpIHtcbiAgLy8gICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBudW1iZXIgZm9ybWF0Jyk7XG4gIC8vICAgICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgdGhpcy5zYXZlTGFzdERpYWxlZCgpO1xuICAvLyAgICAgdGhpcy5pc1NhdmVkQ29udGFjdERpYWxsZWQoKTtcbiAgICAgIFxuICAvLyAgICAgLy8gQ2hlY2sgcGF5bWVudCBzdGF0dXNcbiAgLy8gICAgIHRoaXMuaXNQYXltZW50RHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3BheW1lbnREdWUnKSA9PT0gJ3RydWUnO1xuICAvLyAgICAgaWYgKHRoaXMuaXNQYXltZW50RHVlKSB7XG4gIC8vICAgICAgIGNvbnNvbGUud2FybignUGF5bWVudCBpcyBkdWUnKTtcbiAgLy8gICAgICAgc3dhbCgnV2FybmluZycsICdQbGVhc2Ugbm90ZSB0aGF0IHlvdXIgcGF5bWVudCBpcyBkdWUuIFRvIGNvbnRpbnVlIHVzaW5nIG91ciBzZXJ2aWNlcywga2luZGx5IHN1YnNjcmliZSB0byBhdm9pZCBpbnRlcnJ1cHRpb25zLicpO1xuICAvLyAgICAgICByZXR1cm4gZmFsc2U7XG4gIC8vICAgICB9XG5cbiAgLy8gICAgIC8vIENoZWNrIGlmIGRpYWxpbmcgb3duIG51bWJlclxuICAvLyAgICAgaWYgKHRoaXMuc2FuaXRpemVkTnVtID09PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndHdpbGlvTnVtYmVyJykpIHtcbiAgLy8gICAgICAgY29uc29sZS5lcnJvcignQXR0ZW1wdGVkIHRvIGRpYWwgb3duIG51bWJlcicpO1xuICAvLyAgICAgICBzd2FsKCdFcnJvcicsICdZb3UgY2Fubm90IGRpYWwgeW91ciBvd24gbnVtYmVyJyk7XG4gIC8vICAgICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgLy8gQ2hlY2sgbWljcm9waG9uZSBwZXJtaXNzaW9uc1xuICAvLyAgICAgY29uc3QgaGFzUGVybWlzc2lvbiA9IGF3YWl0IHRoaXMuY2hlY2tNaWNyb3Bob25lUGVybWlzc2lvbigpO1xuICAvLyAgICAgaWYgKCFoYXNQZXJtaXNzaW9uKSB7XG4gIC8vICAgICAgIGNvbnNvbGUud2FybignTWljcm9waG9uZSBwZXJtaXNzaW9uIG5vdCBncmFudGVkJyk7XG4gIC8vICAgICAgIGF3YWl0IHRoaXMuYXNrRm9yTWljcm9waG9uZVBlcm1pc3Npb24oKTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDYWxsZXJJZCkge1xuICAvLyAgICAgICBjb25zb2xlLmVycm9yKCdObyBjYWxsZXIgSUQgc2VsZWN0ZWQnKTtcbiAgLy8gICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IHRydWU7XG4gIC8vICAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnUGxlYXNlIHNlbGVjdCBhIEMyQyBudW1iZXIgdG8gY2FsbCBmcm9tJyk7XG4gIC8vICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSBmYWxzZTtcbiAgLy8gICAgICAgfSwgMzAwMCk7XG4gIC8vICAgICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgY29uc29sZS5sb2coJ0dldHRpbmcgbnVtYmVyIHdpdGggY291bnRyeSBjb2RlLi4uJyk7XG4gIC8vICAgICB0aGlzLmNhbGxEYXRhLmRpc3BsYXlOdW0gPSAnJztcbiAgICAgIFxuICAvLyAgICAgdHJ5IHtcbiAgLy8gICAgICAgYXdhaXQgdGhpcy5nZXRUb051bWJlcih0aGlzLnNhbml0aXplZE51bSk7XG4gIC8vICAgICB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBnZXR0aW5nIG51bWJlciB3aXRoIGNvdW50cnkgY29kZTonLCBlcnJvcik7XG4gIC8vICAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnRXJyb3IgcHJvY2Vzc2luZyBudW1iZXIuIFBsZWFzZSB0cnkgYWdhaW4uJyk7XG4gIC8vICAgICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgaWYgKHRoaXMudGVybWluYXRlQ2FsbCkge1xuICAvLyAgICAgICBjb25zb2xlLmxvZygnQ2FsbCB0ZXJtaW5hdGVkIGJ5IHVzZXInKTtcbiAgLy8gICAgICAgdGhpcy50ZXJtaW5hdGVDYWxsID0gZmFsc2U7XG4gIC8vICAgICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgLy8gUHJlcGFyZSBjYWxsIGRhdGFcbiAgLy8gICAgIHRoaXMuY2FsbERhdGEgPSB7XG4gIC8vICAgICAgIC4uLnRoaXMuY2FsbERhdGEsXG4gIC8vICAgICAgIHBob25lOiB0aGlzLnNhbml0aXplZE51bSxcbiAgLy8gICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxuICAvLyAgICAgICBkaWFsOiB0cnVlLFxuICAvLyAgICAgICBmcm9tOiB0aGlzLmlzU21hcnREaWFsQ2FsbCA/IHRoaXMuY2FsbERhdGEuZnJvbSA6IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZC5udW1iZXIsXG4gIC8vICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gIC8vICAgICB9O1xuXG4gIC8vICAgICBjb25zb2xlLmxvZygnSW5pdGlhdGluZyBjYWxsIHdpdGggZGF0YTonLCB0aGlzLmNhbGxEYXRhKTtcbiAgLy8gICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gIC8vICAgICB0aGlzLmNhbGxJbml0aWF0ZWQuZW1pdCh7IC4uLnRoaXMuY2FsbERhdGEgfSk7XG4gICAgICBcbiAgLy8gICAgIHJldHVybiB0cnVlO1xuICAgICAgXG4gIC8vICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGluaXRpYXRlQ2FsbDonLCBlcnJvcik7XG4gIC8vICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ZhaWxlZCB0byBpbml0aWF0ZSBjYWxsLiBQbGVhc2UgdHJ5IGFnYWluLicpO1xuICAvLyAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gIC8vICAgICByZXR1cm4gZmFsc2U7XG4gIC8vICAgfVxuICAvLyAgICAgLy90aGlzLmNsZWFyQWxsRGlhbGVkKCk7XG4gIC8vICAgLy8gfSBlbHNlIHtcbiAgLy8gICAvLyAgIHN3YWwoJ0Vycm9yJywgJ1RyaWFsIHBlcmlvZCBpcyBvdmVyLiBQbGVhc2Ugc2V0dXAgcGF5bWVudCBtZXRob2QgdG8gY29udGludWUgc2VydmljZXMnKVxuICAvLyAgIC8vIH1cbiAgLy8gfVxuXG5cbiAgLy8gIGFzeW5jIGluaXRpYXRlQ2FsbCgpIHtcbiAgLy8gICBpZiAoIXRoaXMuZGlhbGVkTnVtYmVyICYmIHRoaXMubGFzdERpYWxlZCkge1xuICAvLyAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSB0aGlzLmxhc3REaWFsZWQubnVtYmVyO1xuICAvLyAgIH1cbiAgLy8gICBjb25zdCBpc0ludmFsaWQgPSBhd2FpdCB0aGlzLmlzSW52YWxpZE51bWJlcigpO1xuICAvLyAgIGlmIChpc0ludmFsaWQpIHtcbiAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICB9XG4gIC8vICAgdGhpcy5zYXZlTGFzdERpYWxlZCgpO1xuICAvLyAgIHRoaXMuaXNTYXZlZENvbnRhY3REaWFsbGVkKCk7XG4gIC8vICAgLy9sZXQgaXNDYWxsZXJJZFNldCA9IGF3YWl0IHRoaXMuaXNDYWxsZXJJZFNldCgpO1xuICAvLyAgIHRoaXMuaXNQYXltZW50RHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3BheW1lbnREdWUnKSA9PSAnZmFsc2UnID8gZmFsc2UgOiB0cnVlO1xuICAvLyAgIGlmICh0aGlzLmlzUGF5bWVudER1ZSkge1xuICAvLyAgICAgc3dhbCgnV2FybmluZycsICdQbGVhc2Ugbm90ZSB0aGF0IHlvdXIgcGF5bWVudCBpcyBkdWUsIFRvIGNvbnRpbnVlIG9uIHlvdXIgc2VydmljZXMga2luZGx5IHN1YnNjcmliZSB0byB1c2UgdW5pbnRlcnJ1cHRlZCBzZXJ2aWNlcy4nKTtcbiAgLy8gICAgIHJldHVybjtcbiAgLy8gICB9XG4gIC8vICAgdGhpcy5pc1RyaWFsUGVyaW9kT3ZlciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0cmlhbE92ZXInKSA9PSAnZmFsc2UnID8gZmFsc2UgOiB0cnVlO1xuICAvLyAgIC8vIGlmICghdGhpcy5pc1RyaWFsUGVyaW9kT3Zlcikge1xuICAvLyAgICAgaWYgKHRoaXMuc2FuaXRpemVkTnVtID09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0d2lsaW9OdW1iZXInKSkge1xuICAvLyAgICAgICBzd2FsKCdFcnJvcicsICdZb3UgY2FuIG5vdCBkaWFsIHRoaXMgbnVtYmVyJyk7XG4gIC8vICAgICAgIHJldHVybjtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgY29uc3QgaGFzUGVybWlzc2lvbiA9IGF3YWl0IHRoaXMuY2hlY2tNaWNyb3Bob25lUGVybWlzc2lvbigpO1xuICAvLyAgICAgaWYgKGhhc1Blcm1pc3Npb24pIHtcbiAgLy8gICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCkge1xuICAvLyAgICAgICAgIC8vY2xlYXIgZGlzcGxheU51bSBpZiB2YWx1ZSBpcyBiaW5kZWQgZnJvbSBwcmV2aW91cyBjYWxsXG4gIC8vICAgICAgICAgdGhpcy5jYWxsRGF0YS5kaXNwbGF5TnVtID0gJyc7XG4gIC8vICAgICAgICAgLy8gZ2V0IG51bWJlciB0byBiZSBkaWFsbGVkIGZyb20gYmFja2VuZFxuICAvLyAgICAgICAgIGF3YWl0IHRoaXMuZ2V0VG9OdW1iZXIodGhpcy5zYW5pdGl6ZWROdW0pO1xuICAvLyAgICAgICAgIGlmICh0aGlzLnRlcm1pbmF0ZUNhbGwpIHtcbiAgLy8gICAgICAgICAgIHRoaXMudGVybWluYXRlQ2FsbCA9IGZhbHNlO1xuICAvLyAgICAgICAgICAgcmV0dXJuO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gdGhpcy5zYW5pdGl6ZWROdW07XG4gIC8vICAgICAgICAgdGhpcy5jYWxsRGF0YS5pc0luY29taW5nQ2FsbCA9IGZhbHNlO1xuICAvLyAgICAgICAgIHRoaXMuY2FsbERhdGEuZGlhbCA9IHRydWU7XG4gIC8vICAgICAgICAgaWYgKCF0aGlzLmlzU21hcnREaWFsQ2FsbCkge1xuICAvLyAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5mcm9tID0gdGhpcy5zZWxlY3RlZENhbGxlcklkLm51bWJlcjtcbiAgLy8gICAgICAgICB9XG4gICAgICAgICAgXG4gIC8vICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgLy8gICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhID0ge1xuICAvLyAgICAgICAgICAgICAgIC4uLnRoaXMuY2FsbERhdGEsXG4gIC8vICAgICAgICAgICAgICAgcGhvbmU6IHRoaXMuc2FuaXRpemVkTnVtLFxuICAvLyAgICAgICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcbiAgLy8gICAgICAgICAgICAgICBkaWFsOiB0cnVlLFxuICAvLyAgICAgICAgICAgICAgIGZyb206IHRoaXMuaXNTbWFydERpYWxDYWxsID8gdGhpcy5jYWxsRGF0YS5mcm9tIDogdGhpcy5zZWxlY3RlZENhbGxlcklkLm51bWJlcixcbiAgLy8gICAgICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAvLyAgICAgICAgICAgICB9O1xuXG4gIC8vICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdJbml0aWF0aW5nIGNhbGwgd2l0aCBkYXRhOicsIHRoaXMuY2FsbERhdGEpO1xuICAvLyAgICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAvLyAgICAgICAgICAgICB0aGlzLmNhbGxJbml0aWF0ZWQuZW1pdCh7IC4uLnRoaXMuY2FsbERhdGEgfSk7XG4gIC8vICAgICAgICAgcmV0dXJuIHRydWU7XG4gIC8vICAgICAgIH0gZWxzZSB7XG4gIC8vICAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IHRydWU7XG4gIC8vICAgICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdTZWxlY3QgYSBDMkMgbnVtYmVyIHRvIGNhbGwnKTtcbiAgLy8gICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgLy8gICAgICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSBmYWxzZTtcbiAgLy8gICAgICAgICB9LCAzMDAwKTtcbiAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgICAgLy90aGlzLmNhbGxpbmdPcGVuRXZlbnQuZW1pdCh7IHBob25lOiB0aGlzLmRpYWxlZE51bWJlciB9KTtcbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIGF3YWl0IHRoaXMuYXNrRm9yTWljcm9waG9uZVBlcm1pc3Npb24oKTtcbiAgLy8gICAgIH1cbiAgLy8gICAgIC8vdGhpcy5jbGVhckFsbERpYWxlZCgpO1xuICAvLyAgIC8vIH0gZWxzZSB7XG4gIC8vICAgLy8gICBzd2FsKCdFcnJvcicsICdUcmlhbCBwZXJpb2QgaXMgb3Zlci4gUGxlYXNlIHNldHVwIHBheW1lbnQgbWV0aG9kIHRvIGNvbnRpbnVlIHNlcnZpY2VzJylcbiAgLy8gICAvLyB9XG4gIC8vIH1cblxuXG4gIC8vIGFzeW5jIGluaXRpYXRlQ2FsbCgpIHtcbiAgLy8gICB0cnl7XG4gIC8vICAgICBpZiAoIXRoaXMuZGlhbGVkTnVtYmVyICYmIHRoaXMubGFzdERpYWxlZCkge1xuICAvLyAgICAgICB0aGlzLnNhbml0aXplZE51bSA9IHRoaXMubGFzdERpYWxlZC5udW1iZXI7XG4gIC8vICAgICB9XG5cbiAgLy8gICAgIGNvbnN0IGlzSW52YWxpZCA9IGF3YWl0IHRoaXMuaXNJbnZhbGlkTnVtYmVyKCk7XG4gIC8vICAgICBpZiAoaXNJbnZhbGlkKSB7XG4gIC8vICAgICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICAgIH1cbiAgLy8gICAgIHRoaXMuc2F2ZUxhc3REaWFsZWQoKTtcbiAgLy8gICAgIHRoaXMuaXNTYXZlZENvbnRhY3REaWFsbGVkKCk7XG4gIC8vICAgICAvL2xldCBpc0NhbGxlcklkU2V0ID0gYXdhaXQgdGhpcy5pc0NhbGxlcklkU2V0KCk7XG5cbiAgLy8gICAgIHRoaXMuaXNQYXltZW50RHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3BheW1lbnREdWUnKSA9PSAnZmFsc2UnID8gZmFsc2UgOiB0cnVlO1xuICAvLyAgICAgaWYgKHRoaXMuaXNQYXltZW50RHVlKSB7XG4gIC8vICAgICAgIHN3YWwoJ1dhcm5pbmcnLCAnUGxlYXNlIG5vdGUgdGhhdCB5b3VyIHBheW1lbnQgaXMgZHVlLCBUbyBjb250aW51ZSBvbiB5b3VyIHNlcnZpY2VzIGtpbmRseSBzdWJzY3JpYmUgdG8gdXNlIHVuaW50ZXJydXB0ZWQgc2VydmljZXMuJyk7XG4gIC8vICAgICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgdGhpcy5pc1RyaWFsUGVyaW9kT3ZlciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0cmlhbE92ZXInKSA9PSAnZmFsc2UnID8gZmFsc2UgOiB0cnVlO1xuICAvLyAgICAgLy8gaWYgKCF0aGlzLmlzVHJpYWxQZXJpb2RPdmVyKSB7XG4gIC8vICAgICAgIGlmICh0aGlzLnNhbml0aXplZE51bSA9PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndHdpbGlvTnVtYmVyJykpIHtcbiAgLy8gICAgICAgICBzd2FsKCdFcnJvcicsICdZb3UgY2FuIG5vdCBkaWFsIHRoaXMgbnVtYmVyJyk7XG4gIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgICB9XG5cbiAgLy8gICAgICAgY29uc3QgaGFzUGVybWlzc2lvbiA9IGF3YWl0IHRoaXMuY2hlY2tNaWNyb3Bob25lUGVybWlzc2lvbigpO1xuICAvLyAgICAgICBpZiAoaGFzUGVybWlzc2lvbikge1xuICAvLyAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ2FsbGVySWQpIHtcbiAgLy8gICAgICAgICAgIC8vY2xlYXIgZGlzcGxheU51bSBpZiB2YWx1ZSBpcyBiaW5kZWQgZnJvbSBwcmV2aW91cyBjYWxsXG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmRpc3BsYXlOdW0gPSAnJztcbiAgLy8gICAgICAgICAgIC8vIGdldCBudW1iZXIgdG8gYmUgZGlhbGxlZCBmcm9tIGJhY2tlbmRcbiAgLy8gICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0VG9OdW1iZXIodGhpcy5zYW5pdGl6ZWROdW0pO1xuICAvLyAgICAgICAgICAgaWYgKHRoaXMudGVybWluYXRlQ2FsbCkge1xuICAvLyAgICAgICAgICAgICB0aGlzLnRlcm1pbmF0ZUNhbGwgPSBmYWxzZTtcbiAgLy8gICAgICAgICAgICAgcmV0dXJuO1xuICAvLyAgICAgICAgICAgfVxuICAvLyAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IHRoaXMuc2FuaXRpemVkTnVtO1xuICAvLyAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5pc0luY29taW5nQ2FsbCA9IGZhbHNlO1xuICAvLyAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5kaWFsID0gdHJ1ZTtcbiAgLy8gICAgICAgICAgIGlmICghdGhpcy5pc1NtYXJ0RGlhbENhbGwpIHtcbiAgLy8gICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5mcm9tID0gdGhpcy5zZWxlY3RlZENhbGxlcklkLm51bWJlcjtcbiAgLy8gICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAvLyAgICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgLy8gICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEgPSB7XG4gIC8vICAgICAgICAgICAgICAgICAuLi50aGlzLmNhbGxEYXRhLFxuICAvLyAgICAgICAgICAgICAgICAgcGhvbmU6IHRoaXMuc2FuaXRpemVkTnVtLFxuICAvLyAgICAgICAgICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxuICAvLyAgICAgICAgICAgICAgICAgZGlhbDogdHJ1ZSxcbiAgLy8gICAgICAgICAgICAgICAgIGZyb206IHRoaXMuaXNTbWFydERpYWxDYWxsID8gdGhpcy5jYWxsRGF0YS5mcm9tIDogdGhpcy5zZWxlY3RlZENhbGxlcklkLm51bWJlcixcbiAgLy8gICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gIC8vICAgICAgICAgICAgICAgfTtcblxuICAvLyAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdJbml0aWF0aW5nIGNhbGwgd2l0aCBkYXRhOicsIHRoaXMuY2FsbERhdGEpO1xuICAvLyAgICAgICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gIC8vICAgICAgICAgICAgICAgdGhpcy5jYWxsSW5pdGlhdGVkLmVtaXQoeyAuLi50aGlzLmNhbGxEYXRhIH0pO1xuICAvLyAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gIC8vICAgICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSB0cnVlO1xuICAvLyAgICAgICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdTZWxlY3QgYSBDMkMgbnVtYmVyIHRvIGNhbGwnKTtcbiAgLy8gICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICAgICAgICB0aGlzLnNoYWtlRGVkaWNhdGVkQnRuID0gZmFsc2U7XG4gIC8vICAgICAgICAgICB9LCAzMDAwKTtcbiAgLy8gICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgICAgLy90aGlzLmNhbGxpbmdPcGVuRXZlbnQuZW1pdCh7IHBob25lOiB0aGlzLmRpYWxlZE51bWJlciB9KTtcbiAgLy8gICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICBhd2FpdCB0aGlzLmFza0Zvck1pY3JvcGhvbmVQZXJtaXNzaW9uKCk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgICAgLy90aGlzLmNsZWFyQWxsRGlhbGVkKCk7XG4gIC8vICAgICAvLyB9IGVsc2Uge1xuICAvLyAgICAgLy8gICBzd2FsKCdFcnJvcicsICdUcmlhbCBwZXJpb2QgaXMgb3Zlci4gUGxlYXNlIHNldHVwIHBheW1lbnQgbWV0aG9kIHRvIGNvbnRpbnVlIHNlcnZpY2VzJylcbiAgLy8gICAgIC8vIH1cbiAgLy8gICB9Y2F0Y2goZSl7XG4gIC8vICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBpbml0aWF0ZUNhbGw6JywgZSk7XG5cbiAgLy8gICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnRmFpbGVkIHRvIGluaXRpYXRlIGNhbGwuIFBsZWFzZSB0cnkgYWdhaW4uJyk7XG5cbiAgLy8gICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG4gIC8vICAgICByZXR1cm4gZmFsc2U7XG4gIC8vICAgfVxuICAvLyB9XG5cblxuICBhc3luYyBpbml0aWF0ZUNhbGwoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGhpcy5kaWFsZWROdW1iZXIgJiYgdGhpcy5sYXN0RGlhbGVkKSB7XG4gICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gdGhpcy5sYXN0RGlhbGVkLm51bWJlcjtcbiAgICAgIH1cbiAgXG4gICAgICBjb25zdCBpc0ludmFsaWQgPSBhd2FpdCB0aGlzLmlzSW52YWxpZE51bWJlcigpO1xuICAgICAgaWYgKGlzSW52YWxpZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLnNhdmVMYXN0RGlhbGVkKCk7XG4gICAgICB0aGlzLmlzU2F2ZWRDb250YWN0RGlhbGxlZCgpO1xuICBcbiAgICAgIHRoaXMuaXNQYXltZW50RHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3BheW1lbnREdWUnKSA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgIGlmICh0aGlzLmlzUGF5bWVudER1ZSkge1xuICAgICAgICBzd2FsKCdXYXJuaW5nJywgJ1BsZWFzZSBub3RlIHRoYXQgeW91ciBwYXltZW50IGlzIGR1ZSwgVG8gY29udGludWUgb24geW91ciBzZXJ2aWNlcyBraW5kbHkgc3Vic2NyaWJlIHRvIHVzZSB1bmludGVycnVwdGVkIHNlcnZpY2VzLicpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gIFxuICAgICAgdGhpcy5pc1RyaWFsUGVyaW9kT3ZlciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0cmlhbE92ZXInKSA9PT0gJ2ZhbHNlJyA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgIFxuICAgICAgaWYgKHRoaXMuc2FuaXRpemVkTnVtID09PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndHdpbGlvTnVtYmVyJykpIHtcbiAgICAgICAgc3dhbCgnRXJyb3InLCAnWW91IGNhbiBub3QgZGlhbCB0aGlzIG51bWJlcicpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gIFxuICAgICAgY29uc3QgaGFzUGVybWlzc2lvbiA9IGF3YWl0IHRoaXMuY2hlY2tNaWNyb3Bob25lUGVybWlzc2lvbigpO1xuICAgICAgaWYgKCFoYXNQZXJtaXNzaW9uKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXNrRm9yTWljcm9waG9uZVBlcm1pc3Npb24oKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICBcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZENhbGxlcklkKSB7XG4gICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ1NlbGVjdCBhIEMyQyBudW1iZXIgdG8gY2FsbCcpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNoYWtlRGVkaWNhdGVkQnRuID0gZmFsc2U7XG4gICAgICAgIH0sIDMwMDApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gIFxuICAgICAgLy8gQ2xlYXIgZGlzcGxheU51bSBpZiB2YWx1ZSBpcyBib3VuZCBmcm9tIHByZXZpb3VzIGNhbGxcbiAgICAgIHRoaXMuY2FsbERhdGEuZGlzcGxheU51bSA9ICcnO1xuICAgICAgXG4gICAgICAvLyBHZXQgbnVtYmVyIHRvIGJlIGRpYWxlZCBmcm9tIGJhY2tlbmRcbiAgICAgIGF3YWl0IHRoaXMuZ2V0VG9OdW1iZXIodGhpcy5zYW5pdGl6ZWROdW0pO1xuICAgICAgaWYgKHRoaXMudGVybWluYXRlQ2FsbCkge1xuICAgICAgICB0aGlzLnRlcm1pbmF0ZUNhbGwgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICBcbiAgICAgIC8vIFVwZGF0ZSBjYWxsIGRhdGEgaW4gYSBzaW5nbGUgb3BlcmF0aW9uXG4gICAgICB0aGlzLmNhbGxEYXRhID0ge1xuICAgICAgICAuLi50aGlzLmNhbGxEYXRhLFxuICAgICAgICBwaG9uZTogdGhpcy5zYW5pdGl6ZWROdW0sXG4gICAgICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcbiAgICAgICAgZGlhbDogdHJ1ZSxcbiAgICAgICAgZnJvbTogdGhpcy5pc1NtYXJ0RGlhbENhbGwgPyB0aGlzLmNhbGxEYXRhLmZyb20gOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQubnVtYmVyLFxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfTtcbiAgXG4gICAgICAvLyBjb25zb2xlLmxvZygnSW5pdGlhdGluZyBjYWxsIHdpdGggZGF0YTonLCB0aGlzLmNhbGxEYXRhKTtcbiAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICB0aGlzLmNhbGxJbml0aWF0ZWQuZW1pdCh7IC4uLnRoaXMuY2FsbERhdGEgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3IgaW4gaW5pdGlhdGVDYWxsOicsIGUpO1xuICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdGYWlsZWQgdG8gaW5pdGlhdGUgY2FsbC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGlzSW52YWxpZE51bWJlcigpIHtcbiAgICB0cnkge1xuICAgICAgaWYodGhpcy5zYW5pdGl6ZWROdW0gPT0gJycpe1xuICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ludmFsaWQgTnVtYmVyJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsaWROdW1iZXJQYXR0ZXJuID0gL15bK1xcZFxccygpLV0qJC87IC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCB2YWxpZCBjaGFyYWN0ZXJzXG4gICAgICBjb25zdCBwaG9uZU51bWJlciA9IHRoaXMuc2FuaXRpemVkTnVtO1xuICAgICAgaWYgKCF2YWxpZE51bWJlclBhdHRlcm4udGVzdChwaG9uZU51bWJlcikpIHtcbiAgICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdJbnZhbGlkIE51bWJlcicpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdJbnZhbGlkIE51bWJlcicpO1xuICAgICAgcmV0dXJuIHRydWU7IC8vIFJldHVybiB0cnVlIGlmIGFuIGVycm9yIG9jY3VycmVkLCBtZWFuaW5nIHRoZSBudW1iZXIgaXMgaW52YWxpZFxuICAgIH1cbiAgfVxuICBcbiAgc2F2ZUxhc3REaWFsZWQoKSB7XG4gICAgY29uc3QgY29udGFjdCA9IHRoaXMuZmlsdGVyZWRDb250YWN0TGlzdC5maW5kKChjOiBhbnkpID0+IGMubnVtYmVyc0xpc3Quc29tZSgobjogYW55KSA9PiBuLm51bWJlciA9PT0gdGhpcy5kaWFsZWROdW1iZXIpKTtcbiAgICBpZiAoY29udGFjdCkge1xuICAgICAgdGhpcy5sYXN0RGlhbGVkID0ge1xuICAgICAgICBuYW1lOiBjb250YWN0Lm5hbWUsXG4gICAgICAgIGltYWdlOiBjb250YWN0LmltYWdlLFxuICAgICAgICBudW1iZXI6IHRoaXMuZGlhbGVkTnVtYmVyXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZih0aGlzLmRpYWxlZE51bWJlcil7XG4gICAgICAgIHRoaXMubGFzdERpYWxlZCA9IHsgbnVtYmVyOiB0aGlzLmRpYWxlZE51bWJlciB9O1xuICAgICAgfVxuICAgICAgXG4gICAgfVxuICB9XG4gIGlzU2F2ZWRDb250YWN0RGlhbGxlZCgpe1xuICAgIGxldCBwaG9uZU51bSA9IHRoaXMuc2FuaXRpemVkTnVtLnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgIGxldCBjb250YWN0ID0gIHRoaXMuY29udGFjdExpc3QuZmlsdGVyKChjb250YWN0OiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBjb250YWN0Lm51bWJlcnNMaXN0LnNvbWUoKG51bTogYW55KSA9PiBudW0ubnVtYmVyID09PSBwaG9uZU51bSlcbiAgICB9KTtcbiAgICBpZihjb250YWN0Lmxlbmd0aCl7XG4gICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBgJHtjb250YWN0WzBdLmZpcnN0TmFtZX0gJHtjb250YWN0WzBdLm1pZGRsZU5hbWV9ICR7Y29udGFjdFswXS5sYXN0TmFtZX1gLnRvTG93ZXJDYXNlKCk7XG4gICAgICB0aGlzLmNhbGxEYXRhLmltZyA9IGNvbnRhY3RbMF0uaW1hZ2UgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xuICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IHRoaXMuc2FuaXRpemVkTnVtO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHNob3dEaWFsQWxlcnQobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgdGhpcy5kaWFsQWxlcnQgPSB7XG4gICAgICBtc2c6IG1lc3NhZ2UsXG4gICAgICBzaG93OiB0cnVlXG4gICAgfTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZGlhbEFsZXJ0LnNob3cgPSBmYWxzZTtcbiAgICB9LCAzMDAwKTtcbiAgfVxuICBhc3luYyBpc0NhbGxlcklkU2V0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0a24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJyk7XG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IHRoaXMuZXh0U2VydmljZS5mZXRjaENhbGxlcklkKHRrbiB8fCAnJykudG9Qcm9taXNlKCk7XG4gICAgICBpZiAocmVzLnN0YXR1cyA9PSAyMDApIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3RyaWFsT3ZlcicsIHJlcy50cmlhbE92ZXIpO1xuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuaXNUcmlhbE92ZXIubmV4dChyZXMudHJpYWxPdmVyKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3BheW1lbnREdWUnLCByZXMucGF5bWVudER1ZSk7XG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc1BheW1lbnREdWUubmV4dChyZXMucGF5bWVudER1ZSk7XG4gICAgICB9XG4gICAgICBpZiAocmVzLmNhbGxlcmlkKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYWxsZXJJRCcsIHJlcy5jYWxsZXJpZCk7XG5cbiAgICAgICAgdGhpcy5leHRTZXJ2aWNlLmNoYW5nZU1lc3NhZ2UocmVzLmNhbGxlcmlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYWxsZXJJRCcsICdOb3Qgc2V0Jyk7XG4gICAgICAgIHRoaXMuZXh0U2VydmljZS5jaGFuZ2VNZXNzYWdlKCdOb3Qgc2V0Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhbGxlcklEJykgIT09ICdOb3Qgc2V0Jyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGFzeW5jIGNoZWNrTWljcm9waG9uZVBlcm1pc3Npb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUgfSk7XG4gICAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5uYW1lID09PSAnTm90QWxsb3dlZEVycm9yJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGFzeW5jIGFza0Zvck1pY3JvcGhvbmVQZXJtaXNzaW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IGF1ZGlvOiB0cnVlIH0pO1xuICAgICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignVXNlciBkZW5pZWQgbWljcm9waG9uZSBwZXJtaXNzaW9uOicsIGVycm9yKTtcbiAgICB9XG4gIH1cbiAgLy8gYmVsb3cgZnVuY3Rpb24gaXMgdG8gZ2V0IHRoZSBjb3VudHJ5IGNvZGUgd2l0aCBudW1iZXIgZnJvbSBzZXJ2ZXIgXG4gIGFzeW5jIGdldFRvTnVtYmVyKGRpYWxlZE51bWJlcjogc3RyaW5nKSB7XG4gICAgXG4gICAgICBpZiAoZGlhbGVkTnVtYmVyWzBdICE9PSAnKycpIHtcbiAgICAgICAgLy8gdGhpcyBpcyBjYXNlIHdoZW4gdXNlciBnZW9sb2NhdGlvbiBkaWFsIGNvZGUgaXMgb25cbiAgICAgICAgbGV0IGlwQWRkcmVzczogYW55ID0gYXdhaXQgdGhpcy5pcFNlcnZpY2UuZ2V0SXBBZGRyZXNzSW5mbygpLnRvUHJvbWlzZSgpO1xuICAgICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IHRoaXMudHdpbGlvU2VydmljZS5nZXRUb051bWJlcihkaWFsZWROdW1iZXIsaXBBZGRyZXNzLmFkZHJlc3MuY291bnRyeUNvZGUpLnRvUHJvbWlzZSgpO1xuICAgICAgICBpZiAocmVzLnN0YXR1cyA9PSAyMDApIHtcbiAgICAgICAgICB0aGlzLnRvYXN0VGltZW91dCA9IHJlcy50aW1lSW50ZXJ2YWwgKiAxMDAwO1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2hvd051bWJlclRvYXN0KHJlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuICBpc0FsZXJ0RW5hYmxlKCkge1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaXNBbGVydEVuYWJsZScpO1xuICB9XG4gIGFzeW5jIHNob3dOdW1iZXJUb2FzdChkYXRhOiBhbnkpIHtcbiAgICBjb25zdCBpc0FsZXJ0T24gPSAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2lzQ291bnRyeUNvZGVUb2FzdE9uJykpO1xuICAgIGlmIChpc0FsZXJ0T24gPT0gJ3RydWUnKSB7XG4gICAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdC5zaG93ID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2FsbE51bWJlclRvYXN0Lm51bWJlciA9IGRhdGEudG9OdW1iZXI7XG4gICAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdC5kaXNwbGF5TnVtID0gZGF0YS5kaXNwbGF5TnVtYmVyO1xuICAgIH1cbiAgICBcbiAgICBcbiAgICB0aGlzLmNhbGxEYXRhLmRpc3BsYXlOdW0gPSBkYXRhLmRpc3BsYXlOdW1iZXI7XG4gICAgLy90aGlzLmNhbGxEYXRhLnBob25lID0gZGF0YS50b051bWJlcjtcbiAgICBhd2FpdCB0aGlzLmRlbGF5KHRoaXMudG9hc3RUaW1lb3V0KTtcbiAgICB0aGlzLmRpYWxlZE51bWJlciA9IGRhdGEudG9OdW1iZXI7XG4gICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBkYXRhLnRvTnVtYmVyO1xuICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LnNob3cgPSBmYWxzZTtcbiAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdC5udW1iZXIgPSAnJztcbiAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdC5kaXNwbGF5TnVtID0gJyc7XG4gIH1cbiAgZGVsYXkobXM6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgfVxuICBpc01pbmltaXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBvbk1pbmltaXNlKGlzTWluaW1pc2VkOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc01pbmltaXNlZCA9IGlzTWluaW1pc2VkO1xuICAgIHRoaXMubWluaW1pc2VFdmVudC5lbWl0KGlzTWluaW1pc2VkKTtcbiAgfVxuICBoYW5kbGVOdW1iZXJQYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSBldmVudC5jbGlwYm9hcmREYXRhIHx8ICh3aW5kb3cgYXMgYW55KS5jbGlwYm9hcmREYXRhO1xuICAgIGNvbnN0IHBhc3RlZERhdGEgPSBjbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcblxuICAgIC8vIExvZyB0aGUgcGFzdGVkIGNvbnRlbnQgdG8gdGhlIGNvbnNvbGVcbiAgICBpZihwYXN0ZWREYXRhKXtcbiAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gcGFzdGVkRGF0YTtcbiAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gcGFzdGVkRGF0YTtcbiAgICB9XG4gICAgXG4gIH1cbiAgb25FbnRlcihudW06c3RyaW5nKSB7XG4gICAgLy8gY29uc29sZS5sb2cobnVtLCAnbnVtYmVyIGZuJylcbiAgICB0aGlzLmRpYWxlZE51bWJlciA9IHRoaXMuZGlhbGVkTnVtYmVyICtudW07XG4gICAgdGhpcy5zYW5pdGl6ZWROdW0gPSB0aGlzLmRpYWxlZE51bWJlcjtcbiAgICB0aGlzLnNob3dJbnB1dENsZWFyQnRuID0gdHJ1ZTtcbiAgICB0aGlzLm51bWJlckRpYWxlZC5lbWl0KHRoaXMuZGlhbGVkTnVtYmVyKTtcbiAgfVxuICBcbiAgZ2V0VXNlckNhbGxTZXR0aW5nKCkge1xuICAgIGNvbnN0IHRrbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKTtcbiAgICB0aGlzLmV4dFNlcnZpY2UuZmV0Y2hDYWxsZXJJZCh0a24gfHwgJycpLnN1YnNjcmliZSgocmVzcDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzcC5zdGF0dXMgPT0gMjAwKSB7XG4gICAgICAgIC8vdGhpcy5jYWxsUHJlZmVybmNlID0gcmVzcC51c2VyU2V0dGluZztcbiAgICAgICAgdGhpcy5jYWxsUHJlZmVyZW5jZSA9IHJlc3AuY2FsbGVyaWQ7XG4gICAgICAgIHRoaXMuZ2V0Q2FsbGVySWRMaXN0KCk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBvbkRlZGljYXRlZE51bVNlbGVjdChpZDogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZENhbGxlcklkID0gaWQ7XG4gICAgdGhpcy5pc0NhbGxlcklkSGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLmV4dFNlcnZpY2Uuc2V0Q2FsbGVySWQoaWQpO1xuICB9XG4gIGNhbmNlbERpYWxOdW1iZXIoKSB7XG4gICAgdGhpcy50ZXJtaW5hdGVDYWxsID0gdHJ1ZTtcbiAgICB0aGlzLmNhbGxOdW1iZXJUb2FzdC5zaG93ID0gZmFsc2U7XG4gIH1cblxuICBoYW5kbGVEaXZLZXlkb3duKGV2OmFueSl7XG4gICAgaWYodGhpcy5kaWFsZWROdW1iZXIubGVuZ3RoID09IDApe1xuICAgICAgdGhpcy5kaWFsSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgaWYgKGV2LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRpYWxwYWQgaXMgb3BlblxuICAgICAgaWYgKCF0aGlzLmlzRGlhbHBhZEhpZGRlbikge1xuICAgICAgICBpZih0aGlzLmRpYWxlZE51bWJlci5sZW5ndGggPiAyICYmIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCl7XG4gICAgICAgICAgdGhpcy5pbml0aWF0ZUNhbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBpZighdGhpcy5zZWxlY3RlZENhbGxlcklkKXtcbiAgICAgICAgICB0aGlzLnNoYWtlRGVkaWNhdGVkQnRuID0gdHJ1ZTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSBmYWxzZTtcbiAgICAgICAgICB9LCAxMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgb25DYWxsQnRuTW91c2VFbnRlcihldjogYW55KSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2FsbGVySWQgfHwgKHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9PSAnYWx3YXlzQXNrJykgfHwgKHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9PSAnc21hcnREaWFsaW5nJykpIHtcbiAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSB0cnVlO1xuICAgIH1cblxuICB9XG4gIG9uQ2FsbEJ0bk1vdXNlTGVhdmUoZXY6IGFueSkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZENhbGxlcklkIHx8ICh0aGlzLnNlbGVjdGVkQ2FsbGVySWQgPT0gJ2Fsd2F5c0FzaycpIHx8ICh0aGlzLnNlbGVjdGVkQ2FsbGVySWQgPT0gJ3NtYXJ0RGlhbGluZycpKSB7XG4gICAgICB0aGlzLnNoYWtlRGVkaWNhdGVkQnRuID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGFjY2VwdE5ld0luY29taW5nQ2FsbChjYWxsOiBDYWxsKSB7XG4gICAgLy9maXJzdCBjdXQgdGhlIGN1cnJlbnQgY2FsbFxuICAgIC8vdGhpcy5jYWxsRGF0YSA9IGNhbGw7XG4gICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxEYXRhID0gY2FsbDtcbiAgfVxuICByZWplY3ROZXdJbmNvbWluZ0NhbGwoY2FsbDogQ2FsbCkge1xuICAgIGNhbGwucmVqZWN0KCk7XG4gICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzID0gdGhpcy5uZXdJbmNvbWluZ0NhbGxzLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnBhcmFtZXRlcnMuQ2FsbFNpZCAhPT0gY2FsbC5wYXJhbWV0ZXJzWydDYWxsU2lkJ10pO1xuICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSB0aGlzLmluY29taW5nQ2FsbHNMaXN0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnBhcmFtZXRlcnMuQ2FsbFNpZCAhPT0gY2FsbC5wYXJhbWV0ZXJzWydDYWxsU2lkJ10pO1xuICB9XG4gIG5ld0luY29taW5nQ2FsbEluaXRpYXRlZCgpIHtcbiAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIHRoaXMubmV3SW5jb21pbmdDYWxscyA9IFtdO1xuICAgIHRoaXMuaW5jb21pbmdDYWxsSW5pdGlhdGVkLmVtaXQoKTtcbiAgfVxuICBpbmNvbWluZ0NhbGxzTmV3SW5mbyhkYXRhOmFueSl7XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IGRhdGE7XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxzTmV3SW5mb0V2ZW50LmVtaXQoZGF0YSk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUubG9nKCdDbGVhbmluZyB1cCBDMmNEaWFscGFkQ29tcG9uZW50Jyk7XG4gICAgICBcbiAgICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYWxsIHN1YnNjcmlwdGlvbnNcbiAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICAvLyBDbGVhbiB1cCBUd2lsaW8gZGV2aWNlIHdoZW4gY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICAgICAgaWYgKHRoaXMudHdpbGlvU2VydmljZVsnZGV2aWNlJ10pIHtcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlWydkZXZpY2UnXS5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEVuZCBhbnkgYWN0aXZlIGNhbGxcbiAgICAgIGlmICh0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MpIHtcbiAgICAgICAgdGhpcy5lbmRDYWxsKCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENsZWFyIGFueSB0aW1lb3V0cyBvciBpbnRlcnZhbHMgaWYgdGhleSBleGlzdFxuICAgICAgaWYgKHRoaXMudG9hc3RUaW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRvYXN0VGltZW91dCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnNvbGUubG9nKCdDMmNEaWFscGFkQ29tcG9uZW50IGNsZWFudXAgY29tcGxldGUnKTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgY29tcG9uZW50IGNsZWFudXA6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBpZD1cImRyYWdwYXJlbnQxXCIgW25nU3R5bGVdPVwieydkaXNwbGF5Jzppc0RpYWxwYWRIaWRkZW4gPyAnbm9uZSc6ICdibG9jayd9XCI+XHJcbiAgPGxpYi1jYWxsLXByb2dyZXNzICpuZ0lmPVwiaXNDYWxsSW5Qcm9ncmVzc1wiXHJcbiAgIChlbmRDYWxsRXZlbnQpPVwiZW5kQ2FsbCgpXCJcclxuICAgKG1pbmltaXNlRXZlbnQpPVwib25NaW5pbWlzZSgkZXZlbnQpXCJcclxuICAgKGluY29taW5nQ2FsbEluaXRpYXRlZCk9XCJuZXdJbmNvbWluZ0NhbGxJbml0aWF0ZWQoKVwiXHJcbiAgIFtuZXdJbmNvbWluZ0NhbGxEYXRhXT1cIm5ld0luY29taW5nQ2FsbERhdGFcIlxyXG4gICBbbmV3SW5jb21pbmdDYWxsc0xpc3RdPVwiaW5jb21pbmdDYWxsc0xpc3RcIlxyXG4gICAoaW5jb21pbmdDYWxsc05ld0luZm8pPVwiaW5jb21pbmdDYWxsc05ld0luZm8oJGV2ZW50KVwiXHJcbiAgIFtjYWxsRGF0YV09XCJjYWxsRGF0YVwiPlxyXG4gIDwvbGliLWNhbGwtcHJvZ3Jlc3M+XHJcbiAge3tpbmNvbWluZ0NhbGxEYXRhfCBqc29ufX1cclxuICA8ZGl2IGNsYXNzPVwiZGlhbHBhZC1jb250YWluZXJcIiAqbmdJZj1cIiFpc0NhbGxJblByb2dyZXNzXCIgW25nQ2xhc3NdPVwieydtaW5pLWRpYWxwYWQnOiBpc01pbmltaXNlZH1cIiB0YWJpbmRleD1cIjBcIiAoa2V5ZG93bik9XCJoYW5kbGVEaXZLZXlkb3duKCRldmVudClcIj5cclxuICAgIDxkaXYgaWQ9XCJ0b3BQYW5lbFwiIFtuZ1N0eWxlXT1cInsnaGVpZ2h0JzogY2FsbGVySWRMaXN0Lmxlbmd0aCA/ICc0MCUnIDogJzM5JSd9XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkaWFscGFkLWFsZXJ0c1wiICpuZ0lmPVwiZGlhbEFsZXJ0LnNob3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibm8tc2VsZWN0aW9uLWFsZXJ0XCI+XHJcbiAgICAgICAgICA8IS0tIDxwIGNsYXNzPVwibWItMFwiPlNlbGVjdCBDMkMgbnVtYmVyIHRvIGNhbGw8L3A+IC0tPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCI+e3tkaWFsQWxlcnQubXNnfX08L3A+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXRpbWVzXCIgKGNsaWNrKT1cInNoYWtlRGVkaWNhdGVkQnRuID0gZmFsc2VcIj48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbHBhZC1hbGVydHNcIiAqbmdJZj1cImNhbGxOdW1iZXJUb2FzdC5zaG93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRpYWxib3gtcG9wMSBhbGVydCBmYWRlIHNob3dcIiBbbmdDbGFzc109XCJjYWxsTnVtYmVyVG9hc3QudHlwZVwiIHJvbGU9XCJhbGVydFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgbXktYXV0byB0ZXh0LWxlZnRcIj5cclxuICAgICAgICAgICAgICBZb3UnciBjYWxsaW5nIDxzdHJvbmc+e3tjYWxsTnVtYmVyVG9hc3QuZGlzcGxheU51bX19PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1yaWdodFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLWRpc2MgcC0wIHB4LTFcIiAoY2xpY2spPVwiY2FuY2VsRGlhbE51bWJlcigpXCI+Q2FuY2VsIENhbGw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXN1Y2Nlc3MgYnRuLWRpc2MgcC0wIHB4LTJcIj5Db250aW51ZTwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMCAxOHB4XCIgKHBhc3RlKT1cImhhbmRsZU51bWJlclBhc3RlKCRldmVudClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTJcIj5cclxuICAgICAgICAgIDxwPjwvcD5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBkaWFsLWNsb3NlLWJ0blwiIChjbGljayk9XCJoaWRlRGlhbHBhZCgpXCI+XHJcbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjI0cHhcIiBmaWxsPVwiI2ZmZmZmZlwiPjxwYXRoIGQ9XCJtMjU2LTIwMC01Ni01NiAyMjQtMjI0LTIyNC0yMjQgNTYtNTYgMjI0IDIyNCAyMjQtMjI0IDU2IDU2LTIyNCAyMjQgMjI0IDIyNC01NiA1Ni0yMjQtMjI0LTIyNCAyMjRaXCIvPjwvc3ZnPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ib3hcIj5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiICNkaWFsSW5wdXQgcGxhY2Vob2xkZXI9XCJFbnRlciBhIG5hbWUgb3IgbnVtYmVyXCIgdGFiaW5kZXg9XCIxXCIgWyhuZ01vZGVsKV09XCJkaWFsZWROdW1iZXJcIiAobmdNb2RlbENoYW5nZSk9XCJvbkRpYWxJbnB1dENoYW5nZSgkZXZlbnQpXCIvPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJcIiBpZD1cImlucHV0LWNsZWFyLWJ0blwiIChjbGljayk9XCJjbGVhcklucHV0KClcIiAqbmdJZj1cInNob3dJbnB1dENsZWFyQnRuXCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI1MHB4XCIgaGVpZ2h0PVwiMzBweFwiIHZpZXdCb3g9XCIwIDEwIDQwIDYwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHZlcnNpb249XCIxLjFcIiBiYXNlUHJvZmlsZT1cImZ1bGxcIiBlbmFibGUtYmFja2dyb3VuZD1cIm5ldyAwIDAgNzYuMDAgNzYuMDBcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPlxyXG4gICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjNWQ2MDYxXCIgZmlsbC1vcGFjaXR5PVwiMVwiIHN0cm9rZS13aWR0aD1cIjAuMlwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZD1cIk0gNDcuNTI4Miw0Mi45NDk3TCA0Mi41Nzg0LDM4TCA0Ny41MjgyLDMzLjA1MDJMIDQ0Ljk0OTcsMzAuNDcxOEwgNDAsMzUuNDIxNkwgMzUuMDUwMiwzMC40NzE4TCAzMi40NzE4LDMzLjA1MDJMIDM3LjQyMTYsMzhMIDMyLjQ3MTgsNDIuOTQ5N0wgMzUuMDUwMiw0NS41MjgyTCA0MCw0MC41Nzg0TCA0NC45NDk3LDQ1LjUyODJMIDQ3LjUyODIsNDIuOTQ5NyBaIE0gMTguMDE0Nyw0MS41MzU1TCAyNi45NjQ2LDUwLjQ4NTRDIDI4LjA2ODMsNTEuNTg5IDI5LDUyIDMxLDUyTCA1Miw1MkMgNTQuNzYxNCw1MiA1Nyw0OS43NjE0IDU3LDQ3TCA1NywyOUMgNTcsMjYuMjM4NiA1NC43NjE0LDI0IDUyLDI0TCAzMSwyNEMgMjksMjQgMjguMDY4MywyNC40MTEzIDI2Ljk2NDYsMjUuNTE0OUwgMTguMDE0NywzNC40NjQ1QyAxNi4wNjIxLDM2LjQxNzEgMTYuMDYyMSwzOS41ODI5IDE4LjAxNDcsNDEuNTM1NSBaIE0gMzEsNDlDIDMwLDQ5IDI5LjYwNDgsNDguODgyOCAyOS4wODYsNDguMzY0MUwgMjAuMTM2MSwzOS40MTQyQyAxOS4zNTUsMzguNjMzMiAxOS4zNTUsMzcuMzY2OSAyMC4xMzYxLDM2LjU4NThMIDI5LjA4NiwyNy42MzYyQyAyOS42MDQ4LDI3LjExNzUgMzAsMjcgMzEsMjcuMDAwMUwgNTIsMjcuMDAwMUMgNTMuMTA0NiwyNy4wMDAxIDU0LDI3Ljg5NTUgNTQsMjkuMDAwMUwgNTQsNDcuMDAwMUMgNTQsNDguMTA0NiA1My4xMDQ2LDQ5LjAwMDEgNTIsNDkuMDAwMUwgMzEsNDkgWiBcIi8+XHJcbiAgICAgICAgICAgIDwvc3ZnPiAgICAgICAgXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWluZm8taWNvblwiIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHRvb2x0aXBDbGFzcz1cImlucHV0LXRvb2x0aXBcIiBuZ2JUb29sdGlwPVwiRm9yIGV4dGVuc2lvbiBkaWFsaW5nLCB1c2UgZm9ybWF0cyBsaWtlICsxMjM0NTY3ODkxMCB4MTIzLCsxMjM0NTY3ODkxMCBleHQuMTIzLCArMTIzNDU2Nzg5MTAsMTIzXCI+PGkgY2xhc3M9XCJmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImd1aWRlXCIgKm5nSWY9XCJjYWxsZXJJZExpc3QubGVuZ3RoICYmICEoZGlhbGVkTnVtYmVyLmxlbmd0aCA+IDIpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImd1aWRldGV4dFwiPlBsZWFzZSBlbnRlciBhIG51bWJlciBvciBzZWxlY3QgYSBzYXZlZCBjb250YWN0PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImlucHV0LWVycm9yXCIgKm5nSWY9XCJkaWFsQWxlcnQuc2hvd1wiPlxyXG4gICAgICAgICAgPHNwYW4+e3tkaWFsQWxlcnQubXNnfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1jYXJkXCIgKm5nRm9yPVwibGV0IGNvbnRhY3Qgb2YgZmlsdGVyZWRDb250YWN0TGlzdFwiIChjbGljayk9XCJvbkNvbnRhY3RTZWxlY3QoY29udGFjdClcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaW1nXCI+XHJcbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImNvbnRhY3QuaW1hZ2VcIiBhbHQ9XCJ1c2VyIGltYWdlXCIgbG9hZGluZz1cImxhenlcIiAqbmdJZj1cImNvbnRhY3QuaW1hZ2UgZWxzZSBhbHBoYU5hbWVcIi8+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNhbHBoYU5hbWU+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbnRhY3QtYWxwaGEtaW1nXCI+e3tnZXRGaXJzdExldHRlcihjb250YWN0LmZpcnN0TmFtZSl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtZGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogNHB4XCIgY2xhc3M9XCJjb250YWN0LW5hbWVcIj57e2dldEZ1bGxOYW1lKGNvbnRhY3QpIH19PC9wPlxyXG4gICAgICAgICAgICAgIDxwPnt7Y29udGFjdC5udW1iZXJzTGlzdFswXS5udW1iZXJ9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3YXZlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxzdmdcclxuICAgICAgICAgIGNsYXNzPVwid2F2ZXNcIlxyXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxyXG4gICAgICAgICAgdmlld0JveD1cIjAgMjQgMTUwIDI4XCJcclxuICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCJcclxuICAgICAgICAgIHNoYXBlLXJlbmRlcmluZz1cImF1dG9cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgIGlkPVwiZ2VudGxlLXdhdmVcIlxyXG4gICAgICAgICAgICAgIGQ9XCJNLTE2MCA0NGMzMCAwIDU4LTE4IDg4LTE4cyA1OCAxOCA4OCAxOCA1OC0xOCA4OC0xOCA1OCAxOCA4OCAxOCB2NDRoLTM1MnpcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgPGcgY2xhc3M9XCJwYXJhbGxheFwiPlxyXG4gICAgICAgICAgICA8dXNlXHJcbiAgICAgICAgICAgICAgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiXHJcbiAgICAgICAgICAgICAgeD1cIjQ4XCJcclxuICAgICAgICAgICAgICB5PVwiMFwiXHJcbiAgICAgICAgICAgICAgZmlsbD1cInJnYmEoMjU1LDI1NSwyNTUsMC43KVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDx1c2VcclxuICAgICAgICAgICAgICB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCJcclxuICAgICAgICAgICAgICB4PVwiNDhcIlxyXG4gICAgICAgICAgICAgIHk9XCIzXCJcclxuICAgICAgICAgICAgICBmaWxsPVwicmdiYSgyNTUsMjU1LDI1NSwwLjUpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPCEtLSA8dXNlXHJcbiAgICAgICAgICAgICAgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiXHJcbiAgICAgICAgICAgICAgeD1cIjQ4XCJcclxuICAgICAgICAgICAgICB5PVwiNVwiXHJcbiAgICAgICAgICAgICAgZmlsbD1cInJnYmEoMjU1LDI1NSwyNTUsMC4zKVwiXHJcbiAgICAgICAgICAgIC8+IC0tPlxyXG4gICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIiB4PVwiNDhcIiB5PVwiN1wiIGZpbGw9XCIjZmZmXCIgLz5cclxuICAgICAgICAgIDwvZz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJidG4tY29udGFpbmVyXCIgKm5nSWY9XCIhaXNNaW5pbWlzZWRcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImRpYWwtYnRuXCIgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlwYWRWYWw7bGV0IGkgPSBpbmRleFwiXHJcbiAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uRW50ZXIoa2V5Lm51bSlcIiAoY2xpY2spPVwiYWRkTnVtYmVyKGtleS5udW0pXCJcclxuICAgICAgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzoga2V5LnRleHQgPT09ICcrJyA/ICczcHgnIDogJzAnfVwiXHJcbiAgICAgICBbdGFiaW5kZXhdPVwiZGlhbGVkTnVtYmVyLmxlbmd0aCA/ICcwJzogaSsyXCIgbG9uZ1ByZXNzIChsb25nUHJlc3MpPVwiYWRkTnVtYmVyKGtleS50ZXh0KVwiIHNob3J0UHJlc3MgKHNob3J0UHJlc3MpPVwiYWRkTnVtYmVyKGtleS5udW0pXCI+XHJcbiAgICAgICAge3trZXkubnVtfX0gXHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJrZXkubnVtID09IDE7ZWxzZSBvdGhlclRoYW5PbmVcIiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdm9pY2VtYWlsXCI+XHJcbiAgICAgICAgICB2b2ljZW1haWxcclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNvdGhlclRoYW5PbmU+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1hbGJoYWJldHNcIiBbbmdDbGFzc109XCJ7J3BsdXNTaWduJzoga2V5LnRleHQgPT09ICcrJ31cIj57e2tleS50ZXh0ID8ga2V5LnRleHQgOiAnJm5ic3A7J319PC9zcGFuPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FsbC1idG4tY29udGFpbmVyXCIgKm5nSWY9XCIhaXNNaW5pbWlzZWRcIiAobW91c2VlbnRlcik9XCJvbkNhbGxCdG5Nb3VzZUVudGVyKCRldmVudClcIiAobW91c2VsZWF2ZSk9XCJvbkNhbGxCdG5Nb3VzZUxlYXZlKCRldmVudClcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYnRuXCIgKGNsaWNrKT1cImluaXRpYXRlQ2FsbCgpXCIgW3RhYmluZGV4XT1cImRpYWxlZE51bWJlci5sZW5ndGggPyAnMic6ICcxNSdcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsncG9pbnRlci1ldmVudHMnOiBkaWFsZWROdW1iZXIubGVuZ3RoICYmIHNlbGVjdGVkQ2FsbGVySWQgPyAnYXV0bycgOiAnbm9uZScsICdvcGFjaXR5JzogZGlhbGVkTnVtYmVyLmxlbmd0aCAmJiBzZWxlY3RlZENhbGxlcklkID8gJzEnIDogJzAuNSd9XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgc3R5bGU9XCJjb2xvcjogd2hpdGVcIj5cclxuICAgICAgICAgIGNhbGxcclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiY2FsbGVySWRMaXN0Lmxlbmd0aCAmJiAhaXNNaW5pbWlzZWRcIiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzaG93bkNhbGxlcklkXCIgKm5nSWY9XCJzZWxlY3RlZENhbGxlcklkOyBlbHNlIGFza0Jsb2NrXCIgKGNsaWNrKT1cInRvZ2dsZUNhbGxlcklkRGl2KClcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiJ2ZpIGZpLScgKyBzZWxlY3RlZENhbGxlcklkPy5pc29Db2RlPy50b0xvd2VyQ2FzZSgpXCI+PC9zcGFuPlxyXG4gICAgICAgICAge3tzZWxlY3RlZENhbGxlcklkPy5udW1iZXJ9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLXRlbXBsYXRlICNhc2tCbG9jaz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hvd25DYWxsZXJJZFwiICAoY2xpY2spPVwidG9nZ2xlQ2FsbGVySWREaXYoKVwiIFtuZ0NsYXNzXT1cInsgJ3RpbHQtc2hha2luZyc6IHNoYWtlRGVkaWNhdGVkQnRuIH1cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0wXCI+U2VsZWN0IEMyQyBudW1iZXI8L2g1PlxyXG4gICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwibWwtMlwiIHN0eWxlPVwib3BhY2l0eTouODttYXJnaW4tdG9wOjJweFwiPlxyXG4gICAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ltYWdlcy9pY29uX2Rvd25fYXJyb3cuc3ZnXCIgYWx0PVwiZG93blwiIHdpZHRoPVwiMTBweFwiPlxyXG4gICAgICAgICAgICA8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWFuZ2xlLWRvd24gbWwtMiB0ZXh0LWJsdWVcIiBzdHlsZT1cIm1hcmdpbi10b3A6MnB4XCI+PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJndWlkZTJcIiAqbmdJZj1cInNoYWtlRGVkaWNhdGVkQnRuXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJndWlkZXRleHRcIj5QbGVhc2Ugc2VsZWN0IGEgbnVtYmVyIGZyb20gYmVsb3cgZHJvcGRvd248L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cImNhbGxlcklkTGlzdC5sZW5ndGg7IGVsc2Ugbm9DYWxsZXJJZE1lc3NhZ2VcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYWxsZXItaWQtbGlzdC1jb250YWluZXJcIiAqbmdJZj1cImNhbGxlcklkTGlzdC5sZW5ndGggJiYgIWlzTWluaW1pc2VkXCIgaWQ9XCJjYWxsZXJJZENvbnRhaW5lclwiICBbbmdDbGFzc109XCJ7J3Zpc2libGUnOiAhaXNDYWxsZXJJZEhpZGRlbn1cIiA+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cIj5cclxuICAgICAgICA8IS0tIDxoND5TZWxlY3QgQzJDIFNvZnRwaG9uZSBOdW1iZXI8L2g0PiAtLT5cclxuICAgICAgICAgPGg0Pk1ha2Ugb3V0Z29pbmcgY2FsbCB1c2luZzwvaDQ+XHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiXHJcbiAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiaXNDYWxsZXJJZEhpZGRlbiA9IHRydWVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIGNsb3NlXHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHVsPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhbGxlcklkIG9mIGNhbGxlcklkTGlzdFwiPlxyXG4gICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRDYWxsZXJJZENsYXNzJzogY2FsbGVySWQ/Lm51bWJlciA9PSBzZWxlY3RlZENhbGxlcklkPy5udW1iZXJ9XCIgKGNsaWNrKT1cIm9uRGVkaWNhdGVkTnVtU2VsZWN0KGNhbGxlcklkKVwiPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cIidmaSBmaS0nICsgY2FsbGVySWQ/Lmlzb0NvZGU/LnRvTG93ZXJDYXNlKClcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAge3tjYWxsZXJJZD8ubnVtYmVyfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7Y2FsbGVySWQ/LmNvdW50cnlOYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3VsPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbm9DYWxsZXJJZE1lc3NhZ2U+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwibm8tY2FsbGVyLWlkLW1lc3NhZ2VcIj5UbyBtYWtlIGFueSB2b2ljZSBjYWxscywgcGxlYXNlIDxhIHJvdXRlckxpbms9XCIvZXh0ZW5zaW9uL2RlZGljYXRlZG51bWJlci97e3Rva2VufX1cIiBjbGFzcz1cImNsaWNrLWhlcmUtbGlua1wiIHRpdGxlPVwiU2V0dGluZ3MgPiBDMkMgTnVtYmVyXCI+c3Vic2NyaWJlPC9hPiB0byBhIHZvaWNlIGNhcGFibGUgQzJDIE51bWJlci5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJkZWRpY2F0ZWQtb3ZlcmxheVwiICpuZ0lmPVwic2hvd0RlZGljYXRlZFBvcHVwXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGRlZGljYXRlZE51bVBvcHVwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGNob29zZURlZGljYXRlZEhlYWRlclwiPlxyXG4gICAgICAgICAgPGg1PkNob29zZSBDMkMgTnVtYmVyPC9oNT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBkaWFsLWNsb3NlLWJ0blwiIChjbGljayk9XCJzaG93RGVkaWNhdGVkUG9wdXAgPSBmYWxzZVwiPmNsb3NlPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZGVkaWNhdGVkTnVtTGlzdFwiPlxyXG4gICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjYWxsZXJJZCBvZiBjYWxsZXJJZExpc3RcIj5cclxuICAgICAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwieydzZWxlY3RlZENhbGxlcklkQ2xhc3MnOiBjYWxsZXJJZD8ubnVtYmVyID09IHNlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcn1cIiAoY2xpY2spPVwic2hvd0RlZGljYXRlZFBvcHVwID0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cIidmaSBmaS0nICsgY2FsbGVySWQ/Lmlzb0NvZGU/LnRvTG93ZXJDYXNlKClcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7Y2FsbGVySWQ/Lm51bWJlcn19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7Y2FsbGVySWQ/LmNvdW50cnlOYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwiaW5jb21pbmctY2FsbC13aWRnZXRcIiAqbmdGb3I9XCJsZXQgY2FsbCBvZiBuZXdJbmNvbWluZ0NhbGxzO2xldCBpID0gaW5kZXhcIiBbbmdTdHlsZV09XCJ7J3RvcCc6ICgzMCArIGkgKiA3MikgKyAncHgnfVwiPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmMtdXNlci1pbWdcIj5cclxuICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ltYWdlcy91c2VyLmpwZ1wiIGFsdD1cInVzZXIgaW1hZ2VcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgIDxwIGNsYXNzPVwiaW5jLXVzZXItbmFtZVwiPnt7Y2FsbC5jdXN0b21QYXJhbWV0ZXJzLmdldCgnbmFtZScpfX08L3A+XHJcbiAgICAgICAgPHA+e3tjYWxsLnBhcmFtZXRlcnMuRnJvbX19PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJpbmMtY2FsbC1idG4gaW5jLWFjY2VwdC1idG4gbXItMlwiIChjbGljayk9XCJhY2NlcHROZXdJbmNvbWluZ0NhbGwoY2FsbClcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHN0eWxlPVwiY29sb3I6IHdoaXRlXCI+XHJcbiAgICAgICAgICAgIGNhbGxcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaW5jLWNhbGwtYnRuIGluYy1yZWplY3QtYnRuXCIgKGNsaWNrKT1cInJlamVjdE5ld0luY29taW5nQ2FsbChjYWxsKVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgc3R5bGU9XCJjb2xvcjogd2hpdGVcIj5cclxuICAgICAgICAgICAgY2FsbF9lbmRcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgXHJcbiAgICA8L2Rpdj4gLS0+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
1155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvZGlhbGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvZGlhbGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBYyxZQUFZLEVBQWdCLEtBQUssRUFBcUIsTUFBTSxFQUFpQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRW5NLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUkvQixPQUFtQyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQTs7Ozs7Ozs7OztBQVduQyxNQUFNLE9BQU8sZ0JBQWdCO0lBSTNCLElBQWEsZUFBZSxDQUFDLEtBQWM7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsNkRBQTZEO1lBQzdELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUdELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBNkRELFlBQ1UsYUFBNEIsRUFDNUIsVUFBNEIsRUFDNUIsTUFBaUIsRUFDakIsU0FBMkIsRUFDM0IsZ0JBQWtDLEVBQ2xDLEdBQXNCLEVBQ3RCLE1BQWM7UUFOZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNC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dEIsTUFBTTtnQkFDRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNpQixnQkFBZ0I7c0JBQXZDLFNBQVM7dUJBQUMsV0FBVztnQkFHWixZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUd2lsaW9TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL3R3aWxpby5zZXJ2aWNlJztcbmltcG9ydCBzd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcbmltcG9ydCB7IEV4dGVuc2lvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2UvZXh0ZW5zaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsbGVySWREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2FsbGVyLWlkLWRpYWxvZy9jYWxsZXItaWQtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHBhcnNlUGhvbmVOdW1iZXJGcm9tU3RyaW5nLCB7IEFzWW91VHlwZSB9IGZyb20gJ2xpYnBob25lbnVtYmVyLWpzJztcbmltcG9ydCB7IGtleXBhZCB9IGZyb20gJy4uL2tleXBhZCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgSXBBZGRyZXNzU2VydmljZSB9IGZyb20gJy4vc2VydmljZS9pcC1hZGRyZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENhbGwgfSBmcm9tICdAdHdpbGlvL3ZvaWNlLXNkayc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRpYWxib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGlhbGJveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RpYWxib3guY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIERpYWxib3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBcbiAgcHJpdmF0ZSBfaXNEaWFscGFkSGlkZGVuOiBib29sZWFuID0gdHJ1ZTtcbiAgXG4gIEBJbnB1dCgpIHNldCBpc0RpYWxwYWRIaWRkZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc0RpYWxwYWRIaWRkZW4gPSB2YWx1ZTtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAvLyBXaGVuIGRpYWxwYWQgYmVjb21lcyB2aXNpYmxlLCBlbnN1cmUgVHdpbGlvIGlzIGluaXRpYWxpemVkXG4gICAgICB0aGlzLmluaXRpYWxpemVUd2lsaW8oKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgaW5jb21pbmdDYWxsRGF0YTogYW55XG4gIFxuICBnZXQgaXNEaWFscGFkSGlkZGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0RpYWxwYWRIaWRkZW47XG4gIH1cbiAgQE91dHB1dCgpIGNsb3NlRGlhbHBhZEV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBjYWxsSW5pdGlhdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZW5kQ2FsbEV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBtaW5pbWlzZUV2ZW50OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBpbmNvbWluZ0NhbGxzTmV3SW5mb0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcbiAgQE91dHB1dCgpIGluY29taW5nQ2FsbEluaXRpYXRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAVmlld0NoaWxkKCdkaWFsSW5wdXQnKSBkaWFsSW5wdXRFbGVtZW50ITogRWxlbWVudFJlZjtcblxuICBcbiAgQE91dHB1dCgpIG51bWJlckRpYWxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG5cbiAgaXNDYWxsSW5Qcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlO1xuICBrZXlwYWRWYWwgPSBrZXlwYWQ7XG4gIFxuICBzaG93SW5wdXRDbGVhckJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuICBkaWFsZWROdW1iZXI6IHN0cmluZyA9ICcnO1xuICBjb250YWN0TGlzdDogYW55W10gPSBbXTtcbiAgZmlsdGVyZWRDb250YWN0TGlzdDogYW55W10gPSBbXTtcbiAgY2FsbGVySWRMaXN0OiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZENhbGxlcklkOiBhbnk7XG4gIGlzQ2FsbGVySWRIaWRkZW46IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGlzVHJpYWxQZXJpb2RPdmVyOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUGF5bWVudER1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICB0ZXJtaW5hdGVDYWxsID0gZmFsc2U7XG4gIHRvYXN0VGltZW91dCA9IDcwMDA7XG4gIGNhbGxOdW1iZXJUb2FzdCA9IHtcbiAgICBzaG93OiBmYWxzZSxcbiAgICB0eXBlOiAnYWxlcnQtc3VjY2VzcycsXG4gICAgbnVtYmVyOiAnJyxcbiAgICBkaXNwbGF5TnVtOiAnJ1xuICB9XG4gIGNhbGxEYXRhOiBhbnkgPSB7XG4gICAgcGhvbmU6ICcnLFxuICAgIGRpc3BsYXlOdW06ICcnLFxuICAgIGRpYWw6IGZhbHNlLFxuICAgIG5hbWU6ICcnLFxuICAgIGltZzogJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxuICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcbiAgICBleHROdW06JydcbiAgfTtcbiAgbGFzdERpYWxlZDogeyBuYW1lPzogc3RyaW5nOyBpbWFnZT86IHN0cmluZzsgbnVtYmVyOiBzdHJpbmcgfSB8IG51bGwgPSBudWxsO1xuICBzYW5pdGl6ZWROdW06IGFueTtcbiAgZGlhbEFsZXJ0ID0ge1xuICAgIG1zZzogJycsXG4gICAgc2hvdzogZmFsc2VcbiAgfVxuICB0b2tlbj86c3RyaW5nO1xuIFxuICBzaG93RGVkaWNhdGVkUG9wdXA6Ym9vbGVhbiA9IGZhbHNlO1xuICBuZXdJbmNvbWluZ0NhbGxzOiBhbnkgPSBbXTtcbiAgaW5jb21pbmdDYWxsc0xpc3Q6IGFueSA9IFtdO1xuICBuZXdJbmNvbWluZ0NhbGxEYXRhPzpDYWxsO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgY2FsbFByZWZlcmVuY2U6IGFueTtcbiAgc2hha2VEZWRpY2F0ZWRCdG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTbWFydERpYWxDYWxsOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCAgXG4gICAgcHJpdmF0ZSB0d2lsaW9TZXJ2aWNlOiBUd2lsaW9TZXJ2aWNlLFxuICAgIHByaXZhdGUgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgaXBTZXJ2aWNlOiBJcEFkZHJlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXh0ZW5zaW9uU2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNkazogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgKSB7IFxuICAgIC8vIEluaXRpYWxpemUgaWYgZGlhbHBhZCBpcyB2aXNpYmxlIGJ5IGRlZmF1bHRcbiAgICAvLyBpZiAoIXRoaXMuaXNEaWFscGFkSGlkZGVuKSB7XG4gICAgLy8gICBjb25zb2xlLmxvZygnc2ZzZGZkc2YnKVxuICAgIC8vICAgdGhpcy5pbml0aWFsaXplVHdpbGlvKCk7XG4gICAgLy8gfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplVHdpbGlvKCkge1xuICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLnRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIHx8ICcnO1xuICAgICAgaWYgKCF0aGlzLnRva2VuKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZvdW5kJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIFxuICAgICAgLy8gSW5pdGlhbGl6ZSBUd2lsaW8gc2VydmljZVxuICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmluaXRpYWxpemVUd2lsaW9EZXZpY2UoKTtcbiAgICAgIFxuICAgICAgLy8gU3Vic2NyaWJlIHRvIGluY29taW5nIGNhbGxzIHRvIHNob3cgZGlhbHBhZCB3aGVuIGNhbGwgY29tZXMgaW5cbiAgICAgIGNvbnN0IGNhbGxTdWIgPSB0aGlzLnR3aWxpb1NlcnZpY2UuY3VycmVudENhbGwuc3Vic2NyaWJlKGNhbGwgPT4ge1xuICAgICAgICBpZiAoY2FsbCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdJbmNvbWluZyBjYWxsIHJlY2VpdmVkOicsIGNhbGwpO1xuICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTsgLy8gU2hvdyBkaWFscGFkIG9uIGluY29taW5nIGNhbGxcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKGNhbGxTdWIpO1xuICAgIH1cbiAgICBcbiAgfVxuICAvLyBuZ09uQ2hhbmdlKCkge1xuICAvLyAgIHRoaXMuaW5pdGlhbGl6ZVR3aWxpbygpO1xuICAvLyB9XG5cbiAgLy8gbmdPbkluaXQoKSB7XG4gIC8vICAgdHJ5IHtcbiAgLy8gICAgIHRoaXMuZ2V0Q29udGFjdExpc3QoKTtcbiAgLy8gICAgIHRoaXMuZ2V0VXNlckNhbGxTZXR0aW5nKCk7XG4gICAgICBcbiAgLy8gICAgIC8vIFN1YnNjcmliZSB0byBkaWFsIG51bWJlciBldmVudHNcbiAgLy8gICAgIGNvbnN0IHN1YjEgPSB0aGlzLnR3aWxpb1NlcnZpY2UuZGlhbE51bWJlckZyb21PdGhlck1vZHVsZS5zdWJzY3JpYmUoKGNvbnRhY3Q6IGFueSkgPT4ge1xuICAvLyAgICAgICBpZiAoY29udGFjdC5udW1iZXIpIHtcbiAgLy8gICAgICAgICB0aGlzLmlzU21hcnREaWFsQ2FsbCA9IGZhbHNlO1xuICAvLyAgICAgICAgIGlmIChjb250YWN0LmlzRGlhbEZyb21IaXN0b3J5KSB7XG4gIC8vICAgICAgICAgICAvL2hhbmRsZSBkaWFsaW5nIGZyb20gaGlzdG9yeSBwYWdlXG4gIC8vICAgICAgICAgICBpZihjb250YWN0LmNhbGxlcklkID09ICdzbWFydERpYWxpbmcnKXtcbiAgICAgICAgICAgICBcbiAgLy8gICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENhbGxlcklkID0geyBudW1iZXI6IGNvbnRhY3QuZnJvbSB9O1xuICAvLyAgICAgICAgICAgICB0aGlzLmlzU21hcnREaWFsQ2FsbCA9IHRydWU7XG4gIC8vICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gIC8vICAgICAgICAgICAgIH0sIDIwMDApO1xuICAvLyAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gY29udGFjdC5udW1iZXI7XG4gIC8vICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGNvbnRhY3QubmFtZTtcbiAgLy8gICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBjb250YWN0LmltZztcbiAgLy8gICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5mcm9tID0gY29udGFjdC5mcm9tO1xuICAvLyAgICAgICAgICAgICB0aGlzLnNhbml0aXplZE51bSA9IGNvbnRhY3QubnVtYmVyO1xuICAvLyAgICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihjb250YWN0KTtcbiAgLy8gICAgICAgICAgIC8vIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QucHVzaChjb250YWN0KVxuICAvLyAgICAgICAgICAgdGhpcy5pbml0aWF0ZUNhbGwoKTtcbiAgLy8gICAgICAgICB9ZWxzZXtcbiAgLy8gICAgICAgICAgIHRoaXMuZ2V0VXNlckNhbGxTZXR0aW5nKCk7XG4gIC8vICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgLy8gICAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgLy8gICAgICAgICAgIH0sIDEwMDApO1xuICAvLyAgICAgICAgICAgdGhpcy5nZXRVc2VySW5mb3JtYXRpb24oY29udGFjdCk7XG4gIC8vICAgICAgICAgICAvLyB0aGlzLmluY29taW5nQ2FsbHNMaXN0LnB1c2goY29udGFjdClcbiAgLy8gICAgICAgICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBjb250YWN0Lm51bWJlcjtcbiAgLy8gICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgLy8gICAgICAgICAgIH1cbiAgLy8gICAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgICAgaWYgKGNvbnRhY3QuY2FsbGVySWQgPT0gJ2Fsd2F5c0FzaycgfHwgY29udGFjdC5jYWxsZXJJZCA9PSAnc21hcnREaWFsaW5nJykge1xuICAvLyAgICAgICAgICAgICB0aGlzLmdldFVzZXJDYWxsU2V0dGluZygpO1xuICAvLyAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgLy8gICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAvLyAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgLy8gICAgICAgICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBjb250YWN0Lm51bWJlcjtcbiAgLy8gICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICAgICAgXG4gIC8vICAgICAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgLy8gICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAvLyAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgLy8gICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGNvbnRhY3QubnVtYmVyO1xuICAvLyAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBjb250YWN0Lm5hbWU7XG4gIC8vICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdC5pbWc7XG4gIC8vICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XG4gIC8vICAgICAgICAgICAgIHRoaXMuaW5pdGlhdGVDYWxsKCk7XG4gIC8vICAgICAgICAgICB9XG4gIC8vICAgICAgICAgfVxuICAgICAgICAgIFxuICAvLyAgICAgICB9XG4gIC8vICAgICB9KVxuICBcbiAgLy8gICAgIC8vIGhhbmRsZSBpbmNvbWluZyBjYWxsXG4gIC8vICAgICBjb25zdCBzdWIyID0gdGhpcy50d2lsaW9TZXJ2aWNlLmN1cnJlbnRDYWxsLnN1YnNjcmliZShpbmNvbWluZ0NhbGxEYXRhID0+IHtcbiAgLy8gICAgICAgLy8gaWYgKGluY29taW5nQ2FsbERhdGEpIHtcbiAgLy8gICAgICAgLy8gICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAvLyAgICAgICAvLyAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gIC8vICAgICAgIC8vICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGluY29taW5nQ2FsbERhdGEucGFyYW1ldGVycy5Gcm9tO1xuICAvLyAgICAgICAvLyAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5nZXQoJ25hbWUnKTtcbiAgLy8gICAgICAgLy8gICB0aGlzLmNhbGxEYXRhLmltZyA9IGluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5nZXQoJ2ltYWdlJyk7XG4gIC8vICAgICAgIC8vICAgdGhpcy5jYWxsRGF0YS5pc0luY29taW5nQ2FsbCA9IHRydWU7XG4gIC8vICAgICAgIC8vIH1cbiAgLy8gICAgICAgaWYgKGluY29taW5nQ2FsbERhdGEpIHtcbiAgLy8gICAgICAgICBpZiAodGhpcy5pc0NhbGxJblByb2dyZXNzKSB7XG4gIC8vICAgICAgICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHMucHVzaChpbmNvbWluZ0NhbGxEYXRhKTtcbiAgLy8gICAgICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGluY29taW5nQ2FsbERhdGEpO1xuICAvLyAgICAgICAgIH0gZWxzZSB7XG4gIC8vICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAvLyAgICAgICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgLy8gICAgICAgICAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBpbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnNbJ0Zyb20nXTtcblxuICAvLyAgICAgICAgICAgdGhpcy5nZXRVc2VySW5mb3JtYXRpb24oaW5jb21pbmdDYWxsRGF0YSk7XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCduYW1lJyk7XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmltZyA9IGluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5nZXQoJ2ltYWdlJykgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xuICAvLyAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5pc0luY29taW5nQ2FsbCA9IHRydWU7XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICAgIGluY29taW5nQ2FsbERhdGEub24oJ2NhbmNlbCcsICgpID0+IHtcbiAgLy8gICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSB0aGlzLmluY29taW5nQ2FsbHNMaXN0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnBhcmFtZXRlcnMuQ2FsbFNpZCAhPT0gaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzWydDYWxsU2lkJ10pO1xuICAvLyAgICAgICAgICAgaWYodGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGggPT0gMCl7XG4gIC8vICAgICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAvLyAgICAgICAgICAgfVxuICAvLyAgICAgICAgIH0pO1xuXG4gIC8vICAgICAgICAgaW5jb21pbmdDYWxsRGF0YS5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgLy8gICAgICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFyYW1ldGVycy5DYWxsU2lkICE9PSBpbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XG4gIC8vICAgICAgICAgICAgIGlmKHRoaXMuaW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoID09IDApe1xuICAvLyAgICAgICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAvLyAgICAgICAgICAgICB9XG4gIC8vICAgICAgICAgfSk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0pO1xuXG4gIC8vICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHN1YjEpO1xuICAvLyAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChzdWIyKTtcbiAgLy8gICB9Y2F0Y2goZSl7XG4gIC8vICAgICBjb25zb2xlLmxvZyhlKVxuICAvLyAgIH1cbiAgICBcbiAgLy8gfVxuXG5cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0cnl7XG4gICAgICB0aGlzLnRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIHx8ICcnO1xuICAgICAgaWYgKCF0aGlzLmlzRGlhbHBhZEhpZGRlbikge1xuICAgICAgICBjb25zb2xlLmxvZygnc2ZzZGZkc2YnKVxuICAgICAgICB0aGlzLmluaXRpYWxpemVUd2lsaW8oKTtcbiAgICAgIH1cbiAgICAgIC8vdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTsgXG4gICAgICB0aGlzLmdldENvbnRhY3RMaXN0KCk7XG4gICAgICBcbiAgICAgIHRoaXMuZ2V0VXNlckNhbGxTZXR0aW5nKCk7XG4gICAgICBjb25zdCBzdWIxID0gdGhpcy50d2lsaW9TZXJ2aWNlLmRpYWxOdW1iZXJGcm9tT3RoZXJNb2R1bGUuc3Vic2NyaWJlKChjb250YWN0OmFueSkgPT4ge1xuICAgICAgICBpZiAoY29udGFjdC5udW1iZXIpIHtcbiAgICAgICAgICB0aGlzLmlzU21hcnREaWFsQ2FsbCA9IGZhbHNlO1xuICAgICAgICAgIGlmIChjb250YWN0LmlzRGlhbEZyb21IaXN0b3J5KSB7XG4gICAgICAgICAgICAvL2hhbmRsZSBkaWFsaW5nIGZyb20gaGlzdG9yeSBwYWdlXG4gICAgICAgICAgICBpZihjb250YWN0LmNhbGxlcklkID09ICdzbWFydERpYWxpbmcnKXtcbiAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENhbGxlcklkID0geyBudW1iZXI6IGNvbnRhY3QuZnJvbSB9O1xuICAgICAgICAgICAgICB0aGlzLmlzU21hcnREaWFsQ2FsbCA9IHRydWU7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGNvbnRhY3QubmFtZTtcbiAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBjb250YWN0LmltZztcbiAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5mcm9tID0gY29udGFjdC5mcm9tO1xuICAgICAgICAgICAgICB0aGlzLnNhbml0aXplZE51bSA9IGNvbnRhY3QubnVtYmVyO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnMjc0JywgY29udGFjdClcbiAgICAgICAgICAgICAgdGhpcy5nZXRVc2VySW5mb3JtYXRpb24oY29udGFjdCk7XG4gICAgICAgICAgICAvLyB0aGlzLmluY29taW5nQ2FsbHNMaXN0LnB1c2goY29udGFjdClcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhdGVDYWxsKCk7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmdldFVzZXJDYWxsU2V0dGluZygpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcyODInLCBjb250YWN0KVxuICAgICAgICAgICAgdGhpcy5nZXRVc2VySW5mb3JtYXRpb24oY29udGFjdCk7XG4gICAgICAgICAgICAvLyB0aGlzLmluY29taW5nQ2FsbHNMaXN0LnB1c2goY29udGFjdClcbiAgICAgICAgICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNvbnRhY3QuY2FsbGVySWQgPT0gJ2Fsd2F5c0FzaycgfHwgY29udGFjdC5jYWxsZXJJZCA9PSAnc21hcnREaWFsaW5nJykge1xuICAgICAgICAgICAgICB0aGlzLmdldFVzZXJDYWxsU2V0dGluZygpO1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBjb250YWN0Lm51bWJlcjtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGNvbnRhY3QubnVtYmVyO1xuICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBjb250YWN0Lm5hbWU7XG4gICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdC5pbWc7XG4gICAgICAgICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gY29udGFjdC5udW1iZXI7XG4gICAgICAgICAgICAgIHRoaXMuaW5pdGlhdGVDYWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICB9KVxuICBcbiAgICAgIC8vIGhhbmRsZSBpbmNvbWluZyBjYWxsXG4gICAgICBjb25zdCBzdWIyID0gdGhpcy50d2lsaW9TZXJ2aWNlLmN1cnJlbnRDYWxsLnN1YnNjcmliZShpbmNvbWluZ0NhbGxEYXRhID0+IHtcbiAgICAgICAgLy8gaWYgKGluY29taW5nQ2FsbERhdGEpIHtcbiAgICAgICAgLy8gICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAvLyAgIHRoaXMuaXNEaWFscGFkSGlkZGVuID0gZmFsc2U7XG4gICAgICAgIC8vICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGluY29taW5nQ2FsbERhdGEucGFyYW1ldGVycy5Gcm9tO1xuICAgICAgICAvLyAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5nZXQoJ25hbWUnKTtcbiAgICAgICAgLy8gICB0aGlzLmNhbGxEYXRhLmltZyA9IGluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5nZXQoJ2ltYWdlJyk7XG4gICAgICAgIC8vICAgdGhpcy5jYWxsRGF0YS5pc0luY29taW5nQ2FsbCA9IHRydWU7XG4gICAgICAgIC8vIH1cbiAgICAgICAgaWYgKGluY29taW5nQ2FsbERhdGEpIHtcbiAgICAgICAgICBpZiAodGhpcy5pc0NhbGxJblByb2dyZXNzKSB7XG4gICAgICAgICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHMucHVzaChpbmNvbWluZ0NhbGxEYXRhKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCczMjUnLCBpbmNvbWluZ0NhbGxEYXRhKVxuICAgICAgICAgICAgdGhpcy5nZXRVc2VySW5mb3JtYXRpb24oaW5jb21pbmdDYWxsRGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzRGlhbHBhZEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGluY29taW5nQ2FsbERhdGEucGFyYW1ldGVyc1snRnJvbSddO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJzMzMicsIGluY29taW5nQ2FsbERhdGEpXG4gICAgICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihpbmNvbWluZ0NhbGxEYXRhKTtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5nZXQoJ25hbWUnKTtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmdldCgnaW1hZ2UnKSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmlzSW5jb21pbmdDYWxsID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5jb21pbmdDYWxsRGF0YS5vbignY2FuY2VsJywgKCkgPT4ge1xuICAgICAgICAgICAgLy8gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFyYW1ldGVyc1snQ2FsbFNpZCddICE9PSBpbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XG4gICAgICAgICAgICBpZih0aGlzLmluY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCA9PSAwKXtcbiAgICAgICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpbmNvbWluZ0NhbGxEYXRhLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5wYXJhbWV0ZXJzWydDYWxsU2lkJ10gIT09IGluY29taW5nQ2FsbERhdGEucGFyYW1ldGVyc1snQ2FsbFNpZCddKTtcbiAgICAgICAgICAgICAgaWYodGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoc3ViMSk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHN1YjIpO1xuICAgIH1jYXRjaChlKXtcbiAgICAgIGNvbnNvbGUubG9nKGUpXG4gICAgfVxuICB9XG5cbiAgXG4gIGdldFVzZXJJbmZvcm1hdGlvbihpbmNvbWluZ0NhbGxEYXRhOiBhbnkpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnZ2V0VXNlckluZm9ybWF0aW9uJywgaW5jb21pbmdDYWxsRGF0YSk7XG4gICAgbGV0IGRhdGEgPSB0aGlzLmZyb21FbnRyaWVzKEFycmF5LmZyb20oaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmVudHJpZXMoKSkpO1xuICAgIGNvbnNvbGUubG9nKCczNjYtLS0nLCBkYXRhKVxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRVc2VySW5mb3JtYXRpb24oZGF0YVsndHdpbGlvQXV0aElkJ10pLnN1YnNjcmliZShcbiAgICByZXNwb25zZSA9PiB7XG4gICAgICBpbmNvbWluZ0NhbGxEYXRhWyd1c2VySW5mbyddPXJlc3BvbnNlXG4gICAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5zb21lKChjYWxsOiBhbnkpID0+IGNhbGwucGFyYW1ldGVycz8uQ2FsbFNpZCA9PT0gaW5jb21pbmdDYWxsRGF0YS5wYXJhbWV0ZXJzPy5DYWxsU2lkKTtcbiAgICAgIGlmKCFhbHJlYWR5RXhpc3RzKXtcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdC5wdXNoKGluY29taW5nQ2FsbERhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy5jZGsubWFya0ZvckNoZWNrKCk7XG4gICAgfSwgZXJyb3IgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgcmVjb3JkaW5nJywgZXJyb3IpO1xuICAgIH0pO1xuICB9XG5cbiAgZnJvbUVudHJpZXMoZW50cmllczogW3N0cmluZywgYW55XVtdKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIGVudHJpZXMucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgYW55Pik7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5yZWdpc3RlckRyYWdFbGVtZW50KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gaWYgKGNoYW5nZXNbJ2lzRGlhbHBhZEhpZGRlbiddICYmICF0aGlzLmlzRGlhbHBhZEhpZGRlbikge1xuICAgIC8vICAgdGhpcy5nZXRDb250YWN0TGlzdCgpO1xuICAgIC8vICAgdGhpcy5nZXRVc2VyQ2FsbFNldHRpbmcoKTtcbiAgICAvLyAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgICB0aGlzLmRpYWxJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIC8vICAgfSwgMCk7XG4gICAgLy8gICBpZih0aGlzLmluY29taW5nQ2FsbERhdGEpIHtcbiAgICAvLyAgICAgaWYgKHRoaXMuaXNDYWxsSW5Qcm9ncmVzcykge1xuICAgIC8vICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxscy5wdXNoKHRoaXMuaW5jb21pbmdDYWxsRGF0YSk7XG4gICAgLy8gICAgICAgY29uc29sZS5sb2coJzQwNCcsIHRoaXMuaW5jb21pbmdDYWxsRGF0YSlcbiAgICAvLyAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbih0aGlzLmluY29taW5nQ2FsbERhdGEpO1xuICAgIC8vICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgLy8gICAgICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSBmYWxzZTtcbiAgICAvLyAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gdGhpcy5pbmNvbWluZ0NhbGxEYXRhLnBhcmFtZXRlcnNbJ0Zyb20nXTtcbiAgICAvLyAgICAgICBjb25zb2xlLmxvZygnNDExJywgdGhpcy5pbmNvbWluZ0NhbGxEYXRhKVxuICAgIC8vICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKHRoaXMuaW5jb21pbmdDYWxsRGF0YSk7XG4gICAgLy8gICAgICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gdGhpcy5pbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCduYW1lJyk7XG4gICAgLy8gICAgICAgdGhpcy5jYWxsRGF0YS5pbWcgPSB0aGlzLmluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5nZXQoJ2ltYWdlJykgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xuICAgIC8vICAgICAgIHRoaXMuY2FsbERhdGEuaXNJbmNvbWluZ0NhbGwgPSB0cnVlO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIHRoaXMuaW5jb21pbmdDYWxsRGF0YS5vbignY2FuY2VsJywgKCkgPT4ge1xuICAgIC8vICAgICAgIC8vIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSBbXTtcbiAgICAvLyAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIC8vICAgICB9KTtcbiAgXG4gICAgLy8gICAgIHRoaXMuaW5jb21pbmdDYWxsRGF0YS5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAvLyAgICAgICAgIC8vIHRoaXMuaW5jb21pbmdDYWxsc0xpc3QgPSBbXTtcbiAgICAvLyAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIC8vICAgICB9KTtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gIH1cbiAgcHJpdmF0ZSByZWdpc3RlckRyYWdFbGVtZW50KCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbG1udCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkcmFncGFyZW50MScpO1xuICAgICAgaWYgKCFlbG1udCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdEcmFnIGVsZW1lbnQgbm90IGZvdW5kJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHBvczEgPSAwLCBwb3MyID0gMCwgcG9zMyA9IDAsIHBvczQgPSAwO1xuXG4gICAgICBjb25zdCBkcmFnTW91c2VEb3duID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICh0YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBwb3MzID0gZS5jbGllbnRYO1xuICAgICAgICBwb3M0ID0gZS5jbGllbnRZO1xuICAgICAgICBcbiAgICAgICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAobW92ZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiBlbGVtZW50RHJhZyhtb3ZlRXZlbnQpO1xuICAgICAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBlbGVtZW50RHJhZyA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcG9zMSA9IHBvczMgLSBlLmNsaWVudFg7XG4gICAgICAgIHBvczIgPSBwb3M0IC0gZS5jbGllbnRZO1xuICAgICAgICBwb3MzID0gZS5jbGllbnRYO1xuICAgICAgICBwb3M0ID0gZS5jbGllbnRZO1xuICAgICAgICBcbiAgICAgICAgZWxtbnQuc3R5bGUudG9wID0gKGVsbW50Lm9mZnNldFRvcCAtIHBvczIpICsgJ3B4JztcbiAgICAgICAgZWxtbnQuc3R5bGUubGVmdCA9IChlbG1udC5vZmZzZXRMZWZ0IC0gcG9zMSkgKyAncHgnO1xuICAgICAgfTtcblxuICAgICAgLy8gQ2hlY2sgZm9yIGhlYWRlciBlbGVtZW50XG4gICAgICBjb25zdCBoZWFkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbG1udC5pZCArICdoZWFkZXInKTtcbiAgICAgIGlmIChoZWFkZXIpIHtcbiAgICAgICAgaGVhZGVyLm9ubW91c2Vkb3duID0gZHJhZ01vdXNlRG93bjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsbW50Lm9ubW91c2Vkb3duID0gZHJhZ01vdXNlRG93bjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKVxuICAgIH1cbiAgfVxuXG4gIGFkZE51bWJlcihudW06IGFueSkge1xuICAgIGlmICggbnVtID09ICcjJyB8fCBudW0gPT0gJyonIHx8bnVtID09ICcrJyB8fCBOdW1iZXIuaXNJbnRlZ2VyKG51bSkpIHtcbiAgICAgIGlmIChudW0gPT0gJyMnKSB7XG4gICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi1oYXNoLS5tcDNgKS5wbGF5KCk7XG4gICAgICB9IGVsc2UgaWYgKG51bSA9PSAnKicpIHtcbiAgICAgICAgbmV3IEF1ZGlvKGAvYXNzZXRzL2RpYWwtdG9uZXMvZHRtZi9kdG1mLXN0YXItLm1wM2ApLnBsYXkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi0ke251bX0tLm1wM2ApLnBsYXkoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kaWFsZWROdW1iZXIgKz0gbnVtO1xuICAgICAgdGhpcy5zaG93SW5wdXRDbGVhckJ0biA9IHRydWU7XG5cbiAgICAgIHRoaXMubnVtYmVyRGlhbGVkLmVtaXQodGhpcy5kaWFsZWROdW1iZXIpO1xuXG4gICAgICB0aGlzLm9uRGlhbElucHV0Q2hhbmdlKHRoaXMuZGlhbGVkTnVtYmVyKVxuICAgICAgLy8gdGhpcy5kaWFsSW5wdXRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1lbHNlIGlmKG51bSA9PT0gJ3ZvaWNlbWFpbCcpe1xuICAgICAgLy8gdGhpcy5zaG93RGVkaWNhdGVkUG9wdXAgPSB0cnVlO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydleHRlbnNpb24vdm9pY2VtYWlsLycrdGhpcy50b2tlbl0pO1xuICAgIH1cbiAgfVxuICBcbiAgaGlkZURpYWxwYWQoKSB7XG4gICAgdGhpcy5pc0RpYWxwYWRIaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuY2xvc2VEaWFscGFkRXZlbnQuZW1pdCgpO1xuICAgIHRoaXMuY2xlYXJBbGxEaWFsZWQoKTtcbiAgICB0aGlzLmZpbHRlcmVkQ29udGFjdExpc3QgPSBbXTtcbiAgfVxuICBcbiAgb25EaWFsSW5wdXRDaGFuZ2UoaW5wdXRWYWw6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBVcGRhdGVkIHJlZ2V4IHRvIGluY2x1ZGUgeCwgWCwgZXh0LiwgRXh0LiwgYW5kICxcbiAgICAgIGNvbnN0IGlzTnVtZXJpY0lucHV0ID0gL15bXFxkXFxzK1xcLV0rJC8udGVzdChpbnB1dFZhbCk7XG4gICAgICBsZXQgbWFpbk51bWJlciA9IGlucHV0VmFsO1xuXG4gICAgICAvLyBDaGVjayBmb3IgZXh0ZW5zaW9uIGluZGljYXRvcnMgYW5kIHNwbGl0IHRoZSBpbnB1dFxuICAgICAgY29uc3QgZXh0TWF0Y2ggPSBpbnB1dFZhbC5tYXRjaCgvKHh8WHxleHRcXC58RXh0XFwufCwpKC4qKS8pO1xuICAgICAgaWYgKGV4dE1hdGNoKSB7XG4gICAgICAgIG1haW5OdW1iZXIgPSBpbnB1dFZhbC5zdWJzdHJpbmcoMCwgZXh0TWF0Y2guaW5kZXgpLnRyaW0oKTtcbiAgICAgICAgdGhpcy5jYWxsRGF0YS5leHROdW0gPSBleHRNYXRjaFsyXS50cmltKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNhbml0aXplZE51bSA9IGlzTnVtZXJpY0lucHV0ID8gbWFpbk51bWJlci5yZXBsYWNlKC9bXFxzXFwtXSsvZywgJycpIDogbWFpbk51bWJlcjtcblxuICAgICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGlzTnVtZXJpY0lucHV0ID8gdGhpcy5zYW5pdGl6ZWROdW0gOiAnJztcbiAgICAgIHRoaXMuc2hvd0lucHV0Q2xlYXJCdG4gPSBpbnB1dFZhbC5sZW5ndGggPiAwO1xuXG4gICAgICBpZiAoaXNOdW1lcmljSW5wdXQpIHtcbiAgICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBuZXcgQXNZb3VUeXBlKCkuaW5wdXQodGhpcy5zYW5pdGl6ZWROdW0pO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IGN1cnJlbnQgbnVtYmVyIHdoZW5ldmVyIGlucHV0IGNoYW5nZXNcbiAgICAgIHRoaXMubnVtYmVyRGlhbGVkLmVtaXQodGhpcy5kaWFsZWROdW1iZXIpO1xuXG4gICAgICBpZiAoaW5wdXRWYWwubGVuZ3RoID4gMikge1xuICAgICAgICB0aGlzLmZpbHRlcmVkQ29udGFjdExpc3QgPSB0aGlzLmNvbnRhY3RMaXN0LmZpbHRlcihjb250YWN0ID0+IHtcbiAgICAgICAgICBjb25zdCBmdWxsTmFtZSA9IGAke2NvbnRhY3QuZmlyc3ROYW1lfSAke2NvbnRhY3QubWlkZGxlTmFtZX0gJHtjb250YWN0Lmxhc3ROYW1lfWAudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICByZXR1cm4gZnVsbE5hbWUuaW5jbHVkZXModGhpcy5zYW5pdGl6ZWROdW0udG9Mb3dlckNhc2UoKSkgfHwgY29udGFjdC5udW1iZXJzTGlzdC5zb21lKChudW06IGFueSkgPT4gbnVtLm51bWJlci5pbmNsdWRlcyh0aGlzLnNhbml0aXplZE51bSkpO1xuICAgICAgICB9KS5zbGljZSgwLCAyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRDb250YWN0TGlzdCA9IFtdO1xuICAgICAgfVxuXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Rmlyc3RMZXR0ZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmFtZSA/IG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgOiAnJztcbiAgfVxuICBjbGVhcklucHV0KCkge1xuICAgIGlmICh0aGlzLmRpYWxlZE51bWJlci5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmRpYWxlZE51bWJlciA9IHRoaXMuZGlhbGVkTnVtYmVyLnNsaWNlKDAsIC0xKTtcbiAgICAgIHRoaXMuc2hvd0lucHV0Q2xlYXJCdG4gPSB0aGlzLmRpYWxlZE51bWJlci5sZW5ndGggIT09IDA7XG5cbiAgICAgIHRoaXMub25EaWFsSW5wdXRDaGFuZ2UodGhpcy5kaWFsZWROdW1iZXIpXG4gICAgfVxuICB9XG4gIGNsZWFyQWxsRGlhbGVkKCkge1xuICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gJyc7XG4gICAgdGhpcy5zYW5pdGl6ZWROdW0gPSAnJztcbiAgICB0aGlzLnNob3dJbnB1dENsZWFyQnRuID0gZmFsc2U7XG4gIH1cbiAgZ2V0Q2FsbGVySWRMaXN0KCkge1xuICAgIHRoaXMuZXh0U2VydmljZS5kaXNwbGF5SUQodGhpcy50b2tlbiB8fCAnJykuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgLy90aGlzLmNhbGxlcklkTGlzdCA9IHJlcy5jYWxsZXJJZExpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSBcIkMyQyBTb2Z0cGhvbmUgTnVtYmVyXCIpO1xuICAgICAgdGhpcy5jYWxsZXJJZExpc3QgPSByZXMuY2FsbGVySWRMaXN0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnZvaWNlRmVhdHVyZSA9PT0gdHJ1ZSk7XG4gICAgICAvLyB0aGlzLmNhbGxlcklkTGlzdCA9IHJlcy5jYWxsZXJJZExpc3Q7XG4gICAgICBpZiAodGhpcy5jYWxsZXJJZExpc3QubGVuZ3RoID09IDEpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENhbGxlcklkID0gdGhpcy5jYWxsZXJJZExpc3RbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5jYWxsUHJlZmVyZW5jZSA9PT0gJ2Fsd2F5c0FzaycgfHwgdGhpcy5jYWxsUHJlZmVyZW5jZSA9PT0gJ3NtYXJ0RGlhbGluZycpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2FsbGVySWQgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9IHRoaXMuY2FsbGVySWRMaXN0LmZpbmQoaXRlbSA9PiAoaXRlbS5udW1iZXIgPT0gdGhpcy5jYWxsUHJlZmVyZW5jZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZ2V0Q29udGFjdExpc3QoKSB7XG4gICAgdGhpcy50d2lsaW9TZXJ2aWNlLmdldENvbnRhY3RMaXN0KCkuc3Vic2NyaWJlKChyZXNwOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXNwLnJlc3BvbnNlID09ICdTdWNjZXNzJykge1xuICAgICAgICB0aGlzLmNvbnRhY3RMaXN0ID0gcmVzcC5waG9uZUJvb2s7XG4gICAgICB9XG4gICAgfSwgZXJyID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGVycilcbiAgICB9KVxuICB9XG4gIGdldEZ1bGxOYW1lKGNvbnRhY3Q6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IGZ1bGxOYW1lID0gY29udGFjdC5maXJzdE5hbWUgfHwgJyc7XG4gICAgaWYgKGNvbnRhY3QubWlkZGxlTmFtZSkge1xuICAgICAgZnVsbE5hbWUgKz0gYCAke2NvbnRhY3QubWlkZGxlTmFtZX1gO1xuICAgIH1cbiAgICBpZiAoY29udGFjdC5sYXN0TmFtZSkge1xuICAgICAgZnVsbE5hbWUgKz0gYCAke2NvbnRhY3QubGFzdE5hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bGxOYW1lLnRyaW0oKTtcbiAgfVxuXG5cbiAgdG9nZ2xlQ2FsbGVySWREaXYoKSB7XG4gICAgdGhpcy5pc0NhbGxlcklkSGlkZGVuID0gIXRoaXMuaXNDYWxsZXJJZEhpZGRlbjtcbiAgfVxuXG4gIG9uQ29udGFjdFNlbGVjdChjb250YWN0OiBhbnkpIHtcbiAgICB0aGlzLmRpYWxlZE51bWJlciA9IGNvbnRhY3QubnVtYmVyc0xpc3RbMF0ubnVtYmVyO1xuICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IHRoaXMuZ2V0RnVsbE5hbWUoY29udGFjdCk7XG4gICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBjb250YWN0LmltYWdlIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJztcbiAgICB0aGlzLm9uRGlhbElucHV0Q2hhbmdlKHRoaXMuZGlhbGVkTnVtYmVyKTtcbiAgICB0aGlzLmZpbHRlcmVkQ29udGFjdExpc3QgPSBbXTtcbiAgfVxuXG4gIGVuZENhbGwoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUubG9nKCdFbmRpbmcgY2FsbCcpO1xuICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICB0aGlzLmZpbHRlcmVkQ29udGFjdExpc3QgPSBbXTtcbiAgICAgIFxuICAgICAgLy8gUmVzZXQgY2FsbCBkYXRhXG4gICAgICB0aGlzLmNhbGxEYXRhID0ge1xuICAgICAgICBwaG9uZTogJycsXG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxuICAgICAgICBkaWFsOiBmYWxzZSxcbiAgICAgICAgZGlzcGxheU51bTogJycsXG4gICAgICAgIGV4dE51bTogJydcbiAgICAgIH07XG4gICAgICBcbiAgICAgIC8vIFJlc2V0IGRpYWxlZCBudW1iZXJcbiAgICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gJyc7XG4gICAgICB0aGlzLnNhbml0aXplZE51bSA9ICcnO1xuICAgICAgXG4gICAgICAvLyBFbWl0IGVuZCBjYWxsIGV2ZW50XG4gICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KCk7XG4gICAgICBjb25zb2xlLmxvZygnQ2FsbCBlbmRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBlbmRDYWxsOicsIGVycm9yKTtcbiAgICAgIC8vIEV2ZW4gaWYgdGhlcmUncyBhbiBlcnJvciwgdHJ5IHRvIHJlc2V0IHRoZSBzdGF0ZVxuICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICB0aGlzLmNhbGxEYXRhID0ge1xuICAgICAgICBwaG9uZTogJycsXG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxuICAgICAgICBkaWFsOiBmYWxzZSxcbiAgICAgICAgZGlzcGxheU51bTogJycsXG4gICAgICAgIGV4dE51bTogJydcbiAgICAgIH07XG4gICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gYXN5bmMgaW5pdGlhdGVDYWxsKCkge1xuICAvLyAgIHRyeSB7XG4gIC8vICAgICBjb25zb2xlLmxvZygnSW5pdGlhdGluZyBjYWxsIHdpdGggbnVtYmVyOicsIHRoaXMuZGlhbGVkTnVtYmVyKTtcbiAgICAgIFxuICAvLyAgICAgaWYgKCF0aGlzLmRpYWxlZE51bWJlciAmJiB0aGlzLmxhc3REaWFsZWQpIHtcbiAgLy8gICAgICAgY29uc29sZS5sb2coJ1VzaW5nIGxhc3QgZGlhbGVkIG51bWJlcjonLCB0aGlzLmxhc3REaWFsZWQubnVtYmVyKTtcbiAgLy8gICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSB0aGlzLmxhc3REaWFsZWQubnVtYmVyO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBjb25zdCBpc0ludmFsaWQgPSBhd2FpdCB0aGlzLmlzSW52YWxpZE51bWJlcigpO1xuICAvLyAgICAgaWYgKGlzSW52YWxpZCkge1xuICAvLyAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIG51bWJlciBmb3JtYXQnKTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICB0aGlzLnNhdmVMYXN0RGlhbGVkKCk7XG4gIC8vICAgICB0aGlzLmlzU2F2ZWRDb250YWN0RGlhbGxlZCgpO1xuICAgICAgXG4gIC8vICAgICAvLyBDaGVjayBwYXltZW50IHN0YXR1c1xuICAvLyAgICAgdGhpcy5pc1BheW1lbnREdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGF5bWVudER1ZScpID09PSAndHJ1ZSc7XG4gIC8vICAgICBpZiAodGhpcy5pc1BheW1lbnREdWUpIHtcbiAgLy8gICAgICAgY29uc29sZS53YXJuKCdQYXltZW50IGlzIGR1ZScpO1xuICAvLyAgICAgICBzd2FsKCdXYXJuaW5nJywgJ1BsZWFzZSBub3RlIHRoYXQgeW91ciBwYXltZW50IGlzIGR1ZS4gVG8gY29udGludWUgdXNpbmcgb3VyIHNlcnZpY2VzLCBraW5kbHkgc3Vic2NyaWJlIHRvIGF2b2lkIGludGVycnVwdGlvbnMuJyk7XG4gIC8vICAgICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgLy8gQ2hlY2sgaWYgZGlhbGluZyBvd24gbnVtYmVyXG4gIC8vICAgICBpZiAodGhpcy5zYW5pdGl6ZWROdW0gPT09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0d2lsaW9OdW1iZXInKSkge1xuICAvLyAgICAgICBjb25zb2xlLmVycm9yKCdBdHRlbXB0ZWQgdG8gZGlhbCBvd24gbnVtYmVyJyk7XG4gIC8vICAgICAgIHN3YWwoJ0Vycm9yJywgJ1lvdSBjYW5ub3QgZGlhbCB5b3VyIG93biBudW1iZXInKTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICAvLyBDaGVjayBtaWNyb3Bob25lIHBlcm1pc3Npb25zXG4gIC8vICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gYXdhaXQgdGhpcy5jaGVja01pY3JvcGhvbmVQZXJtaXNzaW9uKCk7XG4gIC8vICAgICBpZiAoIWhhc1Blcm1pc3Npb24pIHtcbiAgLy8gICAgICAgY29uc29sZS53YXJuKCdNaWNyb3Bob25lIHBlcm1pc3Npb24gbm90IGdyYW50ZWQnKTtcbiAgLy8gICAgICAgYXdhaXQgdGhpcy5hc2tGb3JNaWNyb3Bob25lUGVybWlzc2lvbigpO1xuICAvLyAgICAgICByZXR1cm4gZmFsc2U7XG4gIC8vICAgICB9XG5cbiAgLy8gICAgIGlmICghdGhpcy5zZWxlY3RlZENhbGxlcklkKSB7XG4gIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGNhbGxlciBJRCBzZWxlY3RlZCcpO1xuICAvLyAgICAgICB0aGlzLnNoYWtlRGVkaWNhdGVkQnRuID0gdHJ1ZTtcbiAgLy8gICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdQbGVhc2Ugc2VsZWN0IGEgQzJDIG51bWJlciB0byBjYWxsIGZyb20nKTtcbiAgLy8gICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IGZhbHNlO1xuICAvLyAgICAgICB9LCAzMDAwKTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBjb25zb2xlLmxvZygnR2V0dGluZyBudW1iZXIgd2l0aCBjb3VudHJ5IGNvZGUuLi4nKTtcbiAgLy8gICAgIHRoaXMuY2FsbERhdGEuZGlzcGxheU51bSA9ICcnO1xuICAgICAgXG4gIC8vICAgICB0cnkge1xuICAvLyAgICAgICBhd2FpdCB0aGlzLmdldFRvTnVtYmVyKHRoaXMuc2FuaXRpemVkTnVtKTtcbiAgLy8gICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdldHRpbmcgbnVtYmVyIHdpdGggY291bnRyeSBjb2RlOicsIGVycm9yKTtcbiAgLy8gICAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdFcnJvciBwcm9jZXNzaW5nIG51bWJlci4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBpZiAodGhpcy50ZXJtaW5hdGVDYWxsKSB7XG4gIC8vICAgICAgIGNvbnNvbGUubG9nKCdDYWxsIHRlcm1pbmF0ZWQgYnkgdXNlcicpO1xuICAvLyAgICAgICB0aGlzLnRlcm1pbmF0ZUNhbGwgPSBmYWxzZTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICAvLyBQcmVwYXJlIGNhbGwgZGF0YVxuICAvLyAgICAgdGhpcy5jYWxsRGF0YSA9IHtcbiAgLy8gICAgICAgLi4udGhpcy5jYWxsRGF0YSxcbiAgLy8gICAgICAgcGhvbmU6IHRoaXMuc2FuaXRpemVkTnVtLFxuICAvLyAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXG4gIC8vICAgICAgIGRpYWw6IHRydWUsXG4gIC8vICAgICAgIGZyb206IHRoaXMuaXNTbWFydERpYWxDYWxsID8gdGhpcy5jYWxsRGF0YS5mcm9tIDogdGhpcy5zZWxlY3RlZENhbGxlcklkLm51bWJlcixcbiAgLy8gICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgLy8gICAgIH07XG5cbiAgLy8gICAgIGNvbnNvbGUubG9nKCdJbml0aWF0aW5nIGNhbGwgd2l0aCBkYXRhOicsIHRoaXMuY2FsbERhdGEpO1xuICAvLyAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgLy8gICAgIHRoaXMuY2FsbEluaXRpYXRlZC5lbWl0KHsgLi4udGhpcy5jYWxsRGF0YSB9KTtcbiAgICAgIFxuICAvLyAgICAgcmV0dXJuIHRydWU7XG4gICAgICBcbiAgLy8gICB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gaW5pdGlhdGVDYWxsOicsIGVycm9yKTtcbiAgLy8gICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnRmFpbGVkIHRvIGluaXRpYXRlIGNhbGwuIFBsZWFzZSB0cnkgYWdhaW4uJyk7XG4gIC8vICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICB9XG4gIC8vICAgICAvL3RoaXMuY2xlYXJBbGxEaWFsZWQoKTtcbiAgLy8gICAvLyB9IGVsc2Uge1xuICAvLyAgIC8vICAgc3dhbCgnRXJyb3InLCAnVHJpYWwgcGVyaW9kIGlzIG92ZXIuIFBsZWFzZSBzZXR1cCBwYXltZW50IG1ldGhvZCB0byBjb250aW51ZSBzZXJ2aWNlcycpXG4gIC8vICAgLy8gfVxuICAvLyB9XG5cblxuICAvLyAgYXN5bmMgaW5pdGlhdGVDYWxsKCkge1xuICAvLyAgIGlmICghdGhpcy5kaWFsZWROdW1iZXIgJiYgdGhpcy5sYXN0RGlhbGVkKSB7XG4gIC8vICAgICB0aGlzLnNhbml0aXplZE51bSA9IHRoaXMubGFzdERpYWxlZC5udW1iZXI7XG4gIC8vICAgfVxuICAvLyAgIGNvbnN0IGlzSW52YWxpZCA9IGF3YWl0IHRoaXMuaXNJbnZhbGlkTnVtYmVyKCk7XG4gIC8vICAgaWYgKGlzSW52YWxpZCkge1xuICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgIH1cbiAgLy8gICB0aGlzLnNhdmVMYXN0RGlhbGVkKCk7XG4gIC8vICAgdGhpcy5pc1NhdmVkQ29udGFjdERpYWxsZWQoKTtcbiAgLy8gICAvL2xldCBpc0NhbGxlcklkU2V0ID0gYXdhaXQgdGhpcy5pc0NhbGxlcklkU2V0KCk7XG4gIC8vICAgdGhpcy5pc1BheW1lbnREdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGF5bWVudER1ZScpID09ICdmYWxzZScgPyBmYWxzZSA6IHRydWU7XG4gIC8vICAgaWYgKHRoaXMuaXNQYXltZW50RHVlKSB7XG4gIC8vICAgICBzd2FsKCdXYXJuaW5nJywgJ1BsZWFzZSBub3RlIHRoYXQgeW91ciBwYXltZW50IGlzIGR1ZSwgVG8gY29udGludWUgb24geW91ciBzZXJ2aWNlcyBraW5kbHkgc3Vic2NyaWJlIHRvIHVzZSB1bmludGVycnVwdGVkIHNlcnZpY2VzLicpO1xuICAvLyAgICAgcmV0dXJuO1xuICAvLyAgIH1cbiAgLy8gICB0aGlzLmlzVHJpYWxQZXJpb2RPdmVyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RyaWFsT3ZlcicpID09ICdmYWxzZScgPyBmYWxzZSA6IHRydWU7XG4gIC8vICAgLy8gaWYgKCF0aGlzLmlzVHJpYWxQZXJpb2RPdmVyKSB7XG4gIC8vICAgICBpZiAodGhpcy5zYW5pdGl6ZWROdW0gPT0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3R3aWxpb051bWJlcicpKSB7XG4gIC8vICAgICAgIHN3YWwoJ0Vycm9yJywgJ1lvdSBjYW4gbm90IGRpYWwgdGhpcyBudW1iZXInKTtcbiAgLy8gICAgICAgcmV0dXJuO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gYXdhaXQgdGhpcy5jaGVja01pY3JvcGhvbmVQZXJtaXNzaW9uKCk7XG4gIC8vICAgICBpZiAoaGFzUGVybWlzc2lvbikge1xuICAvLyAgICAgICBpZiAodGhpcy5zZWxlY3RlZENhbGxlcklkKSB7XG4gIC8vICAgICAgICAgLy9jbGVhciBkaXNwbGF5TnVtIGlmIHZhbHVlIGlzIGJpbmRlZCBmcm9tIHByZXZpb3VzIGNhbGxcbiAgLy8gICAgICAgICB0aGlzLmNhbGxEYXRhLmRpc3BsYXlOdW0gPSAnJztcbiAgLy8gICAgICAgICAvLyBnZXQgbnVtYmVyIHRvIGJlIGRpYWxsZWQgZnJvbSBiYWNrZW5kXG4gIC8vICAgICAgICAgYXdhaXQgdGhpcy5nZXRUb051bWJlcih0aGlzLnNhbml0aXplZE51bSk7XG4gIC8vICAgICAgICAgaWYgKHRoaXMudGVybWluYXRlQ2FsbCkge1xuICAvLyAgICAgICAgICAgdGhpcy50ZXJtaW5hdGVDYWxsID0gZmFsc2U7XG4gIC8vICAgICAgICAgICByZXR1cm47XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSB0aGlzLnNhbml0aXplZE51bTtcbiAgLy8gICAgICAgICB0aGlzLmNhbGxEYXRhLmlzSW5jb21pbmdDYWxsID0gZmFsc2U7XG4gIC8vICAgICAgICAgdGhpcy5jYWxsRGF0YS5kaWFsID0gdHJ1ZTtcbiAgLy8gICAgICAgICBpZiAoIXRoaXMuaXNTbWFydERpYWxDYWxsKSB7XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmZyb20gPSB0aGlzLnNlbGVjdGVkQ2FsbGVySWQubnVtYmVyO1xuICAvLyAgICAgICAgIH1cbiAgICAgICAgICBcbiAgLy8gICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAvLyAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGEgPSB7XG4gIC8vICAgICAgICAgICAgICAgLi4udGhpcy5jYWxsRGF0YSxcbiAgLy8gICAgICAgICAgICAgICBwaG9uZTogdGhpcy5zYW5pdGl6ZWROdW0sXG4gIC8vICAgICAgICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxuICAvLyAgICAgICAgICAgICAgIGRpYWw6IHRydWUsXG4gIC8vICAgICAgICAgICAgICAgZnJvbTogdGhpcy5pc1NtYXJ0RGlhbENhbGwgPyB0aGlzLmNhbGxEYXRhLmZyb20gOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQubnVtYmVyLFxuICAvLyAgICAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gIC8vICAgICAgICAgICAgIH07XG5cbiAgLy8gICAgICAgICAgICAgY29uc29sZS5sb2coJ0luaXRpYXRpbmcgY2FsbCB3aXRoIGRhdGE6JywgdGhpcy5jYWxsRGF0YSk7XG4gIC8vICAgICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gIC8vICAgICAgICAgICAgIHRoaXMuY2FsbEluaXRpYXRlZC5lbWl0KHsgLi4udGhpcy5jYWxsRGF0YSB9KTtcbiAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgLy8gICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICB0aGlzLnNoYWtlRGVkaWNhdGVkQnRuID0gdHJ1ZTtcbiAgLy8gICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ1NlbGVjdCBhIEMyQyBudW1iZXIgdG8gY2FsbCcpO1xuICAvLyAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IGZhbHNlO1xuICAvLyAgICAgICAgIH0sIDMwMDApO1xuICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICAvL3RoaXMuY2FsbGluZ09wZW5FdmVudC5lbWl0KHsgcGhvbmU6IHRoaXMuZGlhbGVkTnVtYmVyIH0pO1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgYXdhaXQgdGhpcy5hc2tGb3JNaWNyb3Bob25lUGVybWlzc2lvbigpO1xuICAvLyAgICAgfVxuICAvLyAgICAgLy90aGlzLmNsZWFyQWxsRGlhbGVkKCk7XG4gIC8vICAgLy8gfSBlbHNlIHtcbiAgLy8gICAvLyAgIHN3YWwoJ0Vycm9yJywgJ1RyaWFsIHBlcmlvZCBpcyBvdmVyLiBQbGVhc2Ugc2V0dXAgcGF5bWVudCBtZXRob2QgdG8gY29udGludWUgc2VydmljZXMnKVxuICAvLyAgIC8vIH1cbiAgLy8gfVxuXG5cbiAgLy8gYXN5bmMgaW5pdGlhdGVDYWxsKCkge1xuICAvLyAgIHRyeXtcbiAgLy8gICAgIGlmICghdGhpcy5kaWFsZWROdW1iZXIgJiYgdGhpcy5sYXN0RGlhbGVkKSB7XG4gIC8vICAgICAgIHRoaXMuc2FuaXRpemVkTnVtID0gdGhpcy5sYXN0RGlhbGVkLm51bWJlcjtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgY29uc3QgaXNJbnZhbGlkID0gYXdhaXQgdGhpcy5pc0ludmFsaWROdW1iZXIoKTtcbiAgLy8gICAgIGlmIChpc0ludmFsaWQpIHtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuICAvLyAgICAgdGhpcy5zYXZlTGFzdERpYWxlZCgpO1xuICAvLyAgICAgdGhpcy5pc1NhdmVkQ29udGFjdERpYWxsZWQoKTtcbiAgLy8gICAgIC8vbGV0IGlzQ2FsbGVySWRTZXQgPSBhd2FpdCB0aGlzLmlzQ2FsbGVySWRTZXQoKTtcblxuICAvLyAgICAgdGhpcy5pc1BheW1lbnREdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGF5bWVudER1ZScpID09ICdmYWxzZScgPyBmYWxzZSA6IHRydWU7XG4gIC8vICAgICBpZiAodGhpcy5pc1BheW1lbnREdWUpIHtcbiAgLy8gICAgICAgc3dhbCgnV2FybmluZycsICdQbGVhc2Ugbm90ZSB0aGF0IHlvdXIgcGF5bWVudCBpcyBkdWUsIFRvIGNvbnRpbnVlIG9uIHlvdXIgc2VydmljZXMga2luZGx5IHN1YnNjcmliZSB0byB1c2UgdW5pbnRlcnJ1cHRlZCBzZXJ2aWNlcy4nKTtcbiAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICB0aGlzLmlzVHJpYWxQZXJpb2RPdmVyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RyaWFsT3ZlcicpID09ICdmYWxzZScgPyBmYWxzZSA6IHRydWU7XG4gIC8vICAgICAvLyBpZiAoIXRoaXMuaXNUcmlhbFBlcmlvZE92ZXIpIHtcbiAgLy8gICAgICAgaWYgKHRoaXMuc2FuaXRpemVkTnVtID09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0d2lsaW9OdW1iZXInKSkge1xuICAvLyAgICAgICAgIHN3YWwoJ0Vycm9yJywgJ1lvdSBjYW4gbm90IGRpYWwgdGhpcyBudW1iZXInKTtcbiAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XG4gIC8vICAgICAgIH1cblxuICAvLyAgICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gYXdhaXQgdGhpcy5jaGVja01pY3JvcGhvbmVQZXJtaXNzaW9uKCk7XG4gIC8vICAgICAgIGlmIChoYXNQZXJtaXNzaW9uKSB7XG4gIC8vICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCkge1xuICAvLyAgICAgICAgICAgLy9jbGVhciBkaXNwbGF5TnVtIGlmIHZhbHVlIGlzIGJpbmRlZCBmcm9tIHByZXZpb3VzIGNhbGxcbiAgLy8gICAgICAgICAgIHRoaXMuY2FsbERhdGEuZGlzcGxheU51bSA9ICcnO1xuICAvLyAgICAgICAgICAgLy8gZ2V0IG51bWJlciB0byBiZSBkaWFsbGVkIGZyb20gYmFja2VuZFxuICAvLyAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRUb051bWJlcih0aGlzLnNhbml0aXplZE51bSk7XG4gIC8vICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hdGVDYWxsKSB7XG4gIC8vICAgICAgICAgICAgIHRoaXMudGVybWluYXRlQ2FsbCA9IGZhbHNlO1xuICAvLyAgICAgICAgICAgICByZXR1cm47XG4gIC8vICAgICAgICAgICB9XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gdGhpcy5zYW5pdGl6ZWROdW07XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmlzSW5jb21pbmdDYWxsID0gZmFsc2U7XG4gIC8vICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmRpYWwgPSB0cnVlO1xuICAvLyAgICAgICAgICAgaWYgKCF0aGlzLmlzU21hcnREaWFsQ2FsbCkge1xuICAvLyAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhLmZyb20gPSB0aGlzLnNlbGVjdGVkQ2FsbGVySWQubnVtYmVyO1xuICAvLyAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gIC8vICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAvLyAgICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcbiAgLy8gICAgICAgICAgICAgICAgIC4uLnRoaXMuY2FsbERhdGEsXG4gIC8vICAgICAgICAgICAgICAgICBwaG9uZTogdGhpcy5zYW5pdGl6ZWROdW0sXG4gIC8vICAgICAgICAgICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXG4gIC8vICAgICAgICAgICAgICAgICBkaWFsOiB0cnVlLFxuICAvLyAgICAgICAgICAgICAgICAgZnJvbTogdGhpcy5pc1NtYXJ0RGlhbENhbGwgPyB0aGlzLmNhbGxEYXRhLmZyb20gOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQubnVtYmVyLFxuICAvLyAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgLy8gICAgICAgICAgICAgICB9O1xuXG4gIC8vICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0luaXRpYXRpbmcgY2FsbCB3aXRoIGRhdGE6JywgdGhpcy5jYWxsRGF0YSk7XG4gIC8vICAgICAgICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgLy8gICAgICAgICAgICAgICB0aGlzLmNhbGxJbml0aWF0ZWQuZW1pdCh7IC4uLnRoaXMuY2FsbERhdGEgfSk7XG4gIC8vICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgLy8gICAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IHRydWU7XG4gIC8vICAgICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ1NlbGVjdCBhIEMyQyBudW1iZXIgdG8gY2FsbCcpO1xuICAvLyAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gIC8vICAgICAgICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSBmYWxzZTtcbiAgLy8gICAgICAgICAgIH0sIDMwMDApO1xuICAvLyAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgICAvL3RoaXMuY2FsbGluZ09wZW5FdmVudC5lbWl0KHsgcGhvbmU6IHRoaXMuZGlhbGVkTnVtYmVyIH0pO1xuICAvLyAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgIGF3YWl0IHRoaXMuYXNrRm9yTWljcm9waG9uZVBlcm1pc3Npb24oKTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICAvL3RoaXMuY2xlYXJBbGxEaWFsZWQoKTtcbiAgLy8gICAgIC8vIH0gZWxzZSB7XG4gIC8vICAgICAvLyAgIHN3YWwoJ0Vycm9yJywgJ1RyaWFsIHBlcmlvZCBpcyBvdmVyLiBQbGVhc2Ugc2V0dXAgcGF5bWVudCBtZXRob2QgdG8gY29udGludWUgc2VydmljZXMnKVxuICAvLyAgICAgLy8gfVxuICAvLyAgIH1jYXRjaChlKXtcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGluaXRpYXRlQ2FsbDonLCBlKTtcblxuICAvLyAgICAgdGhpcy5zaG93RGlhbEFsZXJ0KCdGYWlsZWQgdG8gaW5pdGlhdGUgY2FsbC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcblxuICAvLyAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICB9XG4gIC8vIH1cblxuXG4gIGFzeW5jIGluaXRpYXRlQ2FsbCgpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF0aGlzLmRpYWxlZE51bWJlciAmJiB0aGlzLmxhc3REaWFsZWQpIHtcbiAgICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSB0aGlzLmxhc3REaWFsZWQubnVtYmVyO1xuICAgICAgfVxuICBcbiAgICAgIGNvbnN0IGlzSW52YWxpZCA9IGF3YWl0IHRoaXMuaXNJbnZhbGlkTnVtYmVyKCk7XG4gICAgICBpZiAoaXNJbnZhbGlkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2F2ZUxhc3REaWFsZWQoKTtcbiAgICAgIHRoaXMuaXNTYXZlZENvbnRhY3REaWFsbGVkKCk7XG4gIFxuICAgICAgdGhpcy5pc1BheW1lbnREdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncGF5bWVudER1ZScpID09PSAnZmFsc2UnID8gZmFsc2UgOiB0cnVlO1xuICAgICAgaWYgKHRoaXMuaXNQYXltZW50RHVlKSB7XG4gICAgICAgIHN3YWwoJ1dhcm5pbmcnLCAnUGxlYXNlIG5vdGUgdGhhdCB5b3VyIHBheW1lbnQgaXMgZHVlLCBUbyBjb250aW51ZSBvbiB5b3VyIHNlcnZpY2VzIGtpbmRseSBzdWJzY3JpYmUgdG8gdXNlIHVuaW50ZXJydXB0ZWQgc2VydmljZXMuJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgXG4gICAgICB0aGlzLmlzVHJpYWxQZXJpb2RPdmVyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RyaWFsT3ZlcicpID09PSAnZmFsc2UnID8gZmFsc2UgOiB0cnVlO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5zYW5pdGl6ZWROdW0gPT09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0d2lsaW9OdW1iZXInKSkge1xuICAgICAgICBzd2FsKCdFcnJvcicsICdZb3UgY2FuIG5vdCBkaWFsIHRoaXMgbnVtYmVyJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgXG4gICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gYXdhaXQgdGhpcy5jaGVja01pY3JvcGhvbmVQZXJtaXNzaW9uKCk7XG4gICAgICBpZiAoIWhhc1Blcm1pc3Npb24pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hc2tGb3JNaWNyb3Bob25lUGVybWlzc2lvbigpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gIFxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2FsbGVySWQpIHtcbiAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnU2VsZWN0IGEgQzJDIG51bWJlciB0byBjYWxsJyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSBmYWxzZTtcbiAgICAgICAgfSwgMzAwMCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgXG4gICAgICAvLyBDbGVhciBkaXNwbGF5TnVtIGlmIHZhbHVlIGlzIGJvdW5kIGZyb20gcHJldmlvdXMgY2FsbFxuICAgICAgdGhpcy5jYWxsRGF0YS5kaXNwbGF5TnVtID0gJyc7XG4gICAgICBcbiAgICAgIC8vIEdldCBudW1iZXIgdG8gYmUgZGlhbGVkIGZyb20gYmFja2VuZFxuICAgICAgYXdhaXQgdGhpcy5nZXRUb051bWJlcih0aGlzLnNhbml0aXplZE51bSk7XG4gICAgICBpZiAodGhpcy50ZXJtaW5hdGVDYWxsKSB7XG4gICAgICAgIHRoaXMudGVybWluYXRlQ2FsbCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIFxuICAgICAgLy8gVXBkYXRlIGNhbGwgZGF0YSBpbiBhIHNpbmdsZSBvcGVyYXRpb25cbiAgICAgIHRoaXMuY2FsbERhdGEgPSB7XG4gICAgICAgIC4uLnRoaXMuY2FsbERhdGEsXG4gICAgICAgIHBob25lOiB0aGlzLnNhbml0aXplZE51bSxcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxuICAgICAgICBkaWFsOiB0cnVlLFxuICAgICAgICBmcm9tOiB0aGlzLmlzU21hcnREaWFsQ2FsbCA/IHRoaXMuY2FsbERhdGEuZnJvbSA6IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZC5udW1iZXIsXG4gICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9O1xuICBcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdJbml0aWF0aW5nIGNhbGwgd2l0aCBkYXRhOicsIHRoaXMuY2FsbERhdGEpO1xuICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2FsbEluaXRpYXRlZC5lbWl0KHsgLi4udGhpcy5jYWxsRGF0YSB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICBcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBpbml0aWF0ZUNhbGw6JywgZSk7XG4gICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ZhaWxlZCB0byBpbml0aWF0ZSBjYWxsLiBQbGVhc2UgdHJ5IGFnYWluLicpO1xuICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaXNJbnZhbGlkTnVtYmVyKCkge1xuICAgIHRyeSB7XG4gICAgICBpZih0aGlzLnNhbml0aXplZE51bSA9PSAnJyl7XG4gICAgICAgIHRoaXMuc2hvd0RpYWxBbGVydCgnSW52YWxpZCBOdW1iZXInKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWxpZE51bWJlclBhdHRlcm4gPSAvXlsrXFxkXFxzKCktXSokLzsgLy8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHZhbGlkIGNoYXJhY3RlcnNcbiAgICAgIGNvbnN0IHBob25lTnVtYmVyID0gdGhpcy5zYW5pdGl6ZWROdW07XG4gICAgICBpZiAoIXZhbGlkTnVtYmVyUGF0dGVybi50ZXN0KHBob25lTnVtYmVyKSkge1xuICAgICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ludmFsaWQgTnVtYmVyJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNob3dEaWFsQWxlcnQoJ0ludmFsaWQgTnVtYmVyJyk7XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gUmV0dXJuIHRydWUgaWYgYW4gZXJyb3Igb2NjdXJyZWQsIG1lYW5pbmcgdGhlIG51bWJlciBpcyBpbnZhbGlkXG4gICAgfVxuICB9XG4gIFxuICBzYXZlTGFzdERpYWxlZCgpIHtcbiAgICBjb25zdCBjb250YWN0ID0gdGhpcy5maWx0ZXJlZENvbnRhY3RMaXN0LmZpbmQoKGM6IGFueSkgPT4gYy5udW1iZXJzTGlzdC5zb21lKChuOiBhbnkpID0+IG4ubnVtYmVyID09PSB0aGlzLmRpYWxlZE51bWJlcikpO1xuICAgIGlmIChjb250YWN0KSB7XG4gICAgICB0aGlzLmxhc3REaWFsZWQgPSB7XG4gICAgICAgIG5hbWU6IGNvbnRhY3QubmFtZSxcbiAgICAgICAgaW1hZ2U6IGNvbnRhY3QuaW1hZ2UsXG4gICAgICAgIG51bWJlcjogdGhpcy5kaWFsZWROdW1iZXJcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKHRoaXMuZGlhbGVkTnVtYmVyKXtcbiAgICAgICAgdGhpcy5sYXN0RGlhbGVkID0geyBudW1iZXI6IHRoaXMuZGlhbGVkTnVtYmVyIH07XG4gICAgICB9XG4gICAgICBcbiAgICB9XG4gIH1cbiAgaXNTYXZlZENvbnRhY3REaWFsbGVkKCl7XG4gICAgbGV0IHBob25lTnVtID0gdGhpcy5zYW5pdGl6ZWROdW0ucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gICAgbGV0IGNvbnRhY3QgPSAgdGhpcy5jb250YWN0TGlzdC5maWx0ZXIoKGNvbnRhY3Q6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGNvbnRhY3QubnVtYmVyc0xpc3Quc29tZSgobnVtOiBhbnkpID0+IG51bS5udW1iZXIgPT09IHBob25lTnVtKVxuICAgIH0pO1xuICAgIGlmKGNvbnRhY3QubGVuZ3RoKXtcbiAgICAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGAke2NvbnRhY3RbMF0uZmlyc3ROYW1lfSAke2NvbnRhY3RbMF0ubWlkZGxlTmFtZX0gJHtjb250YWN0WzBdLmxhc3ROYW1lfWAudG9Mb3dlckNhc2UoKTtcbiAgICAgIHRoaXMuY2FsbERhdGEuaW1nID0gY29udGFjdFswXS5pbWFnZSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XG4gICAgICB0aGlzLmNhbGxEYXRhLnBob25lID0gdGhpcy5zYW5pdGl6ZWROdW07XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc2hvd0RpYWxBbGVydChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmRpYWxBbGVydCA9IHtcbiAgICAgIG1zZzogbWVzc2FnZSxcbiAgICAgIHNob3c6IHRydWVcbiAgICB9O1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kaWFsQWxlcnQuc2hvdyA9IGZhbHNlO1xuICAgIH0sIDMwMDApO1xuICB9XG4gIGFzeW5jIGlzQ2FsbGVySWRTZXQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRrbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKTtcbiAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgdGhpcy5leHRTZXJ2aWNlLmZldGNoQ2FsbGVySWQodGtuIHx8ICcnKS50b1Byb21pc2UoKTtcbiAgICAgIGlmIChyZXMuc3RhdHVzID09IDIwMCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndHJpYWxPdmVyJywgcmVzLnRyaWFsT3Zlcik7XG4gICAgICAgIHRoaXMudHdpbGlvU2VydmljZS5pc1RyaWFsT3Zlci5uZXh0KHJlcy50cmlhbE92ZXIpO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncGF5bWVudER1ZScsIHJlcy5wYXltZW50RHVlKTtcbiAgICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzUGF5bWVudER1ZS5uZXh0KHJlcy5wYXltZW50RHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXMuY2FsbGVyaWQpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhbGxlcklEJywgcmVzLmNhbGxlcmlkKTtcblxuICAgICAgICB0aGlzLmV4dFNlcnZpY2UuY2hhbmdlTWVzc2FnZShyZXMuY2FsbGVyaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhbGxlcklEJywgJ05vdCBzZXQnKTtcbiAgICAgICAgdGhpcy5leHRTZXJ2aWNlLmNoYW5nZU1lc3NhZ2UoJ05vdCBzZXQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2FsbGVySUQnKSAhPT0gJ05vdCBzZXQnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgY2hlY2tNaWNyb3Bob25lUGVybWlzc2lvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogdHJ1ZSB9KTtcbiAgICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBhbnkpLm5hbWUgPT09ICdOb3RBbGxvd2VkRXJyb3InKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYXN5bmMgYXNrRm9yTWljcm9waG9uZVBlcm1pc3Npb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUgfSk7XG4gICAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVc2VyIGRlbmllZCBtaWNyb3Bob25lIHBlcm1pc3Npb246JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuICAvLyBiZWxvdyBmdW5jdGlvbiBpcyB0byBnZXQgdGhlIGNvdW50cnkgY29kZSB3aXRoIG51bWJlciBmcm9tIHNlcnZlciBcbiAgYXN5bmMgZ2V0VG9OdW1iZXIoZGlhbGVkTnVtYmVyOiBzdHJpbmcpIHtcbiAgICBcbiAgICAgIGlmIChkaWFsZWROdW1iZXJbMF0gIT09ICcrJykge1xuICAgICAgICAvLyB0aGlzIGlzIGNhc2Ugd2hlbiB1c2VyIGdlb2xvY2F0aW9uIGRpYWwgY29kZSBpcyBvblxuICAgICAgICBsZXQgaXBBZGRyZXNzOiBhbnkgPSBhd2FpdCB0aGlzLmlwU2VydmljZS5nZXRJcEFkZHJlc3NJbmZvKCkudG9Qcm9taXNlKCk7XG4gICAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgdGhpcy50d2lsaW9TZXJ2aWNlLmdldFRvTnVtYmVyKGRpYWxlZE51bWJlcixpcEFkZHJlc3MuYWRkcmVzcy5jb3VudHJ5Q29kZSkudG9Qcm9taXNlKCk7XG4gICAgICAgIGlmIChyZXMuc3RhdHVzID09IDIwMCkge1xuICAgICAgICAgIHRoaXMudG9hc3RUaW1lb3V0ID0gcmVzLnRpbWVJbnRlcnZhbCAqIDEwMDA7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zaG93TnVtYmVyVG9hc3QocmVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG4gIGlzQWxlcnRFbmFibGUoKSB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdpc0FsZXJ0RW5hYmxlJyk7XG4gIH1cbiAgYXN5bmMgc2hvd051bWJlclRvYXN0KGRhdGE6IGFueSkge1xuICAgIGNvbnN0IGlzQWxlcnRPbiA9IChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaXNDb3VudHJ5Q29kZVRvYXN0T24nKSk7XG4gICAgaWYgKGlzQWxlcnRPbiA9PSAndHJ1ZScpIHtcbiAgICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LnNob3cgPSB0cnVlO1xuICAgICAgdGhpcy5jYWxsTnVtYmVyVG9hc3QubnVtYmVyID0gZGF0YS50b051bWJlcjtcbiAgICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LmRpc3BsYXlOdW0gPSBkYXRhLmRpc3BsYXlOdW1iZXI7XG4gICAgfVxuICAgIFxuICAgIFxuICAgIHRoaXMuY2FsbERhdGEuZGlzcGxheU51bSA9IGRhdGEuZGlzcGxheU51bWJlcjtcbiAgICAvL3RoaXMuY2FsbERhdGEucGhvbmUgPSBkYXRhLnRvTnVtYmVyO1xuICAgIGF3YWl0IHRoaXMuZGVsYXkodGhpcy50b2FzdFRpbWVvdXQpO1xuICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gZGF0YS50b051bWJlcjtcbiAgICB0aGlzLnNhbml0aXplZE51bSA9IGRhdGEudG9OdW1iZXI7XG4gICAgdGhpcy5jYWxsTnVtYmVyVG9hc3Quc2hvdyA9IGZhbHNlO1xuICAgIHRoaXMuY2FsbE51bWJlclRvYXN0Lm51bWJlciA9ICcnO1xuICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LmRpc3BsYXlOdW0gPSAnJztcbiAgfVxuICBkZWxheShtczogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICB9XG4gIGlzTWluaW1pc2VkOiBib29sZWFuID0gZmFsc2U7XG4gIG9uTWluaW1pc2UoaXNNaW5pbWlzZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzTWluaW1pc2VkID0gaXNNaW5pbWlzZWQ7XG4gICAgdGhpcy5taW5pbWlzZUV2ZW50LmVtaXQoaXNNaW5pbWlzZWQpO1xuICB9XG4gIGhhbmRsZU51bWJlclBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgY2xpcGJvYXJkRGF0YSA9IGV2ZW50LmNsaXBib2FyZERhdGEgfHwgKHdpbmRvdyBhcyBhbnkpLmNsaXBib2FyZERhdGE7XG4gICAgY29uc3QgcGFzdGVkRGF0YSA9IGNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xuXG4gICAgLy8gTG9nIHRoZSBwYXN0ZWQgY29udGVudCB0byB0aGUgY29uc29sZVxuICAgIGlmKHBhc3RlZERhdGEpe1xuICAgICAgdGhpcy5kaWFsZWROdW1iZXIgPSBwYXN0ZWREYXRhO1xuICAgICAgdGhpcy5zYW5pdGl6ZWROdW0gPSBwYXN0ZWREYXRhO1xuICAgIH1cbiAgICBcbiAgfVxuICBvbkVudGVyKG51bTpzdHJpbmcpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhudW0sICdudW1iZXIgZm4nKVxuICAgIHRoaXMuZGlhbGVkTnVtYmVyID0gdGhpcy5kaWFsZWROdW1iZXIgK251bTtcbiAgICB0aGlzLnNhbml0aXplZE51bSA9IHRoaXMuZGlhbGVkTnVtYmVyO1xuICAgIHRoaXMuc2hvd0lucHV0Q2xlYXJCdG4gPSB0cnVlO1xuICAgIHRoaXMubnVtYmVyRGlhbGVkLmVtaXQodGhpcy5kaWFsZWROdW1iZXIpO1xuICB9XG4gIFxuICBnZXRVc2VyQ2FsbFNldHRpbmcoKSB7XG4gICAgY29uc3QgdGtuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpO1xuICAgIHRoaXMuZXh0U2VydmljZS5mZXRjaENhbGxlcklkKHRrbiB8fCAnJykuc3Vic2NyaWJlKChyZXNwOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXNwLnN0YXR1cyA9PSAyMDApIHtcbiAgICAgICAgLy90aGlzLmNhbGxQcmVmZXJuY2UgPSByZXNwLnVzZXJTZXR0aW5nO1xuICAgICAgICB0aGlzLmNhbGxQcmVmZXJlbmNlID0gcmVzcC5jYWxsZXJpZDtcbiAgICAgICAgdGhpcy5nZXRDYWxsZXJJZExpc3QoKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIG9uRGVkaWNhdGVkTnVtU2VsZWN0KGlkOiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ2FsbGVySWQgPSBpZDtcbiAgICB0aGlzLmlzQ2FsbGVySWRIaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMuZXh0U2VydmljZS5zZXRDYWxsZXJJZChpZCk7XG4gIH1cbiAgY2FuY2VsRGlhbE51bWJlcigpIHtcbiAgICB0aGlzLnRlcm1pbmF0ZUNhbGwgPSB0cnVlO1xuICAgIHRoaXMuY2FsbE51bWJlclRvYXN0LnNob3cgPSBmYWxzZTtcbiAgfVxuXG4gIGhhbmRsZURpdktleWRvd24oZXY6YW55KXtcbiAgICBpZih0aGlzLmRpYWxlZE51bWJlci5sZW5ndGggPT0gMCl7XG4gICAgICB0aGlzLmRpYWxJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICBpZiAoZXYua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgZGlhbHBhZCBpcyBvcGVuXG4gICAgICBpZiAoIXRoaXMuaXNEaWFscGFkSGlkZGVuKSB7XG4gICAgICAgIGlmKHRoaXMuZGlhbGVkTnVtYmVyLmxlbmd0aCA+IDIgJiYgdGhpcy5zZWxlY3RlZENhbGxlcklkKXtcbiAgICAgICAgICB0aGlzLmluaXRpYXRlQ2FsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmKCF0aGlzLnNlbGVjdGVkQ2FsbGVySWQpe1xuICAgICAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSB0cnVlO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IGZhbHNlO1xuICAgICAgICAgIH0sIDEwMDAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBvbkNhbGxCdG5Nb3VzZUVudGVyKGV2OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDYWxsZXJJZCB8fCAodGhpcy5zZWxlY3RlZENhbGxlcklkID09ICdhbHdheXNBc2snKSB8fCAodGhpcy5zZWxlY3RlZENhbGxlcklkID09ICdzbWFydERpYWxpbmcnKSkge1xuICAgICAgdGhpcy5zaGFrZURlZGljYXRlZEJ0biA9IHRydWU7XG4gICAgfVxuXG4gIH1cbiAgb25DYWxsQnRuTW91c2VMZWF2ZShldjogYW55KSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2FsbGVySWQgfHwgKHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9PSAnYWx3YXlzQXNrJykgfHwgKHRoaXMuc2VsZWN0ZWRDYWxsZXJJZCA9PSAnc21hcnREaWFsaW5nJykpIHtcbiAgICAgIHRoaXMuc2hha2VEZWRpY2F0ZWRCdG4gPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgYWNjZXB0TmV3SW5jb21pbmdDYWxsKGNhbGw6IENhbGwpIHtcbiAgICAvL2ZpcnN0IGN1dCB0aGUgY3VycmVudCBjYWxsXG4gICAgLy90aGlzLmNhbGxEYXRhID0gY2FsbDtcbiAgICB0aGlzLm5ld0luY29taW5nQ2FsbERhdGEgPSBjYWxsO1xuICB9XG4gIHJlamVjdE5ld0luY29taW5nQ2FsbChjYWxsOiBDYWxsKSB7XG4gICAgY2FsbC5yZWplY3QoKTtcbiAgICB0aGlzLm5ld0luY29taW5nQ2FsbHMgPSB0aGlzLm5ld0luY29taW5nQ2FsbHMuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFyYW1ldGVycy5DYWxsU2lkICE9PSBjYWxsLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxzTGlzdCA9IHRoaXMuaW5jb21pbmdDYWxsc0xpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFyYW1ldGVycy5DYWxsU2lkICE9PSBjYWxsLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSk7XG4gIH1cbiAgbmV3SW5jb21pbmdDYWxsSW5pdGlhdGVkKCkge1xuICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzID0gW107XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxJbml0aWF0ZWQuZW1pdCgpO1xuICB9XG4gIGluY29taW5nQ2FsbHNOZXdJbmZvKGRhdGE6YW55KXtcbiAgICB0aGlzLmluY29taW5nQ2FsbHNMaXN0ID0gZGF0YTtcbiAgICB0aGlzLmluY29taW5nQ2FsbHNOZXdJbmZvRXZlbnQuZW1pdChkYXRhKTtcbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc29sZS5sb2coJ0NsZWFuaW5nIHVwIEMyY0RpYWxwYWRDb21wb25lbnQnKTtcbiAgICAgIFxuICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xuICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIC8vIENsZWFuIHVwIFR3aWxpbyBkZXZpY2Ugd2hlbiBjb21wb25lbnQgaXMgZGVzdHJveWVkXG4gICAgICBpZiAodGhpcy50d2lsaW9TZXJ2aWNlWydkZXZpY2UnXSkge1xuICAgICAgICB0aGlzLnR3aWxpb1NlcnZpY2VbJ2RldmljZSddLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW5kIGFueSBhY3RpdmUgY2FsbFxuICAgICAgaWYgKHRoaXMuaXNDYWxsSW5Qcm9ncmVzcykge1xuICAgICAgICB0aGlzLmVuZENhbGwoKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2xlYXIgYW55IHRpbWVvdXRzIG9yIGludGVydmFscyBpZiB0aGV5IGV4aXN0XG4gICAgICBpZiAodGhpcy50b2FzdFRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudG9hc3RUaW1lb3V0KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc29sZS5sb2coJ0MyY0RpYWxwYWRDb21wb25lbnQgY2xlYW51cCBjb21wbGV0ZScpO1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBjb21wb25lbnQgY2xlYW51cDonLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGlkPVwiZHJhZ3BhcmVudDFcIiBbbmdTdHlsZV09XCJ7J2Rpc3BsYXknOmlzRGlhbHBhZEhpZGRlbiA/ICdub25lJzogJ2Jsb2NrJ31cIj5cclxuICA8bGliLWNhbGwtcHJvZ3Jlc3MgKm5nSWY9XCJpc0NhbGxJblByb2dyZXNzXCJcclxuICAgKGVuZENhbGxFdmVudCk9XCJlbmRDYWxsKClcIlxyXG4gICAobWluaW1pc2VFdmVudCk9XCJvbk1pbmltaXNlKCRldmVudClcIlxyXG4gICAoaW5jb21pbmdDYWxsSW5pdGlhdGVkKT1cIm5ld0luY29taW5nQ2FsbEluaXRpYXRlZCgpXCJcclxuICAgW25ld0luY29taW5nQ2FsbERhdGFdPVwibmV3SW5jb21pbmdDYWxsRGF0YVwiXHJcbiAgIFtuZXdJbmNvbWluZ0NhbGxzTGlzdF09XCJpbmNvbWluZ0NhbGxzTGlzdFwiXHJcbiAgIChpbmNvbWluZ0NhbGxzTmV3SW5mbyk9XCJpbmNvbWluZ0NhbGxzTmV3SW5mbygkZXZlbnQpXCJcclxuICAgW2NhbGxEYXRhXT1cImNhbGxEYXRhXCI+XHJcbiAgPC9saWItY2FsbC1wcm9ncmVzcz5cclxuICB7e2luY29taW5nQ2FsbERhdGF8IGpzb259fVxyXG4gIDxkaXYgY2xhc3M9XCJkaWFscGFkLWNvbnRhaW5lclwiICpuZ0lmPVwiIWlzQ2FsbEluUHJvZ3Jlc3NcIiBbbmdDbGFzc109XCJ7J21pbmktZGlhbHBhZCc6IGlzTWluaW1pc2VkfVwiIHRhYmluZGV4PVwiMFwiIChrZXlkb3duKT1cImhhbmRsZURpdktleWRvd24oJGV2ZW50KVwiPlxyXG4gICAgPGRpdiBpZD1cInRvcFBhbmVsXCIgW25nU3R5bGVdPVwieydoZWlnaHQnOiBjYWxsZXJJZExpc3QubGVuZ3RoID8gJzQwJScgOiAnMzklJ31cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRpYWxwYWQtYWxlcnRzXCIgKm5nSWY9XCJkaWFsQWxlcnQuc2hvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuby1zZWxlY3Rpb24tYWxlcnRcIj5cclxuICAgICAgICAgIDwhLS0gPHAgY2xhc3M9XCJtYi0wXCI+U2VsZWN0IEMyQyBudW1iZXIgdG8gY2FsbDwvcD4gLS0+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cIm1iLTBcIj57e2RpYWxBbGVydC5tc2d9fTwvcD5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtdGltZXNcIiAoY2xpY2spPVwic2hha2VEZWRpY2F0ZWRCdG4gPSBmYWxzZVwiPjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkaWFscGFkLWFsZXJ0c1wiICpuZ0lmPVwiY2FsbE51bWJlclRvYXN0LnNob3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGlhbGJveC1wb3AxIGFsZXJ0IGZhZGUgc2hvd1wiIFtuZ0NsYXNzXT1cImNhbGxOdW1iZXJUb2FzdC50eXBlXCIgcm9sZT1cImFsZXJ0XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBteS1hdXRvIHRleHQtbGVmdFwiPlxyXG4gICAgICAgICAgICAgIFlvdSdyIGNhbGxpbmcgPHN0cm9uZz57e2NhbGxOdW1iZXJUb2FzdC5kaXNwbGF5TnVtfX08L3N0cm9uZz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tZGlzYyBwLTAgcHgtMVwiIChjbGljayk9XCJjYW5jZWxEaWFsTnVtYmVyKClcIj5DYW5jZWwgQ2FsbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc3VjY2VzcyBidG4tZGlzYyBwLTAgcHgtMlwiPkNvbnRpbnVlPC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAwIDE4cHhcIiAocGFzdGUpPVwiaGFuZGxlTnVtYmVyUGFzdGUoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMlwiPlxyXG4gICAgICAgICAgPHA+PC9wPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGRpYWwtY2xvc2UtYnRuXCIgKGNsaWNrKT1cImhpZGVEaWFscGFkKClcIj5cclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiIGZpbGw9XCIjZmZmZmZmXCI+PHBhdGggZD1cIm0yNTYtMjAwLTU2LTU2IDIyNC0yMjQtMjI0LTIyNCA1Ni01NiAyMjQgMjI0IDIyNC0yMjQgNTYgNTYtMjI0IDIyNCAyMjQgMjI0LTU2IDU2LTIyNC0yMjQtMjI0IDIyNFpcIi8+PC9zdmc+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgI2RpYWxJbnB1dCBwbGFjZWhvbGRlcj1cIkVudGVyIGEgbmFtZSBvciBudW1iZXJcIiB0YWJpbmRleD1cIjFcIiBbKG5nTW9kZWwpXT1cImRpYWxlZE51bWJlclwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRGlhbElucHV0Q2hhbmdlKCRldmVudClcIi8+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIlwiIGlkPVwiaW5wdXQtY2xlYXItYnRuXCIgKGNsaWNrKT1cImNsZWFySW5wdXQoKVwiICpuZ0lmPVwic2hvd0lucHV0Q2xlYXJCdG5cIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjUwcHhcIiBoZWlnaHQ9XCIzMHB4XCIgdmlld0JveD1cIjAgMTAgNDAgNjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgdmVyc2lvbj1cIjEuMVwiIGJhc2VQcm9maWxlPVwiZnVsbFwiIGVuYWJsZS1iYWNrZ3JvdW5kPVwibmV3IDAgMCA3Ni4wMCA3Ni4wMFwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+XHJcbiAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIiM1ZDYwNjFcIiBmaWxsLW9wYWNpdHk9XCIxXCIgc3Ryb2tlLXdpZHRoPVwiMC4yXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBkPVwiTSA0Ny41MjgyLDQyLjk0OTdMIDQyLjU3ODQsMzhMIDQ3LjUyODIsMzMuMDUwMkwgNDQuOTQ5NywzMC40NzE4TCA0MCwzNS40MjE2TCAzNS4wNTAyLDMwLjQ3MThMIDMyLjQ3MTgsMzMuMDUwMkwgMzcuNDIxNiwzOEwgMzIuNDcxOCw0Mi45NDk3TCAzNS4wNTAyLDQ1LjUyODJMIDQwLDQwLjU3ODRMIDQ0Ljk0OTcsNDUuNTI4MkwgNDcuNTI4Miw0Mi45NDk3IFogTSAxOC4wMTQ3LDQxLjUzNTVMIDI2Ljk2NDYsNTAuNDg1NEMgMjguMDY4Myw1MS41ODkgMjksNTIgMzEsNTJMIDUyLDUyQyA1NC43NjE0LDUyIDU3LDQ5Ljc2MTQgNTcsNDdMIDU3LDI5QyA1NywyNi4yMzg2IDU0Ljc2MTQsMjQgNTIsMjRMIDMxLDI0QyAyOSwyNCAyOC4wNjgzLDI0LjQxMTMgMjYuOTY0NiwyNS41MTQ5TCAxOC4wMTQ3LDM0LjQ2NDVDIDE2LjA2MjEsMzYuNDE3MSAxNi4wNjIxLDM5LjU4MjkgMTguMDE0Nyw0MS41MzU1IFogTSAzMSw0OUMgMzAsNDkgMjkuNjA0OCw0OC44ODI4IDI5LjA4Niw0OC4zNjQxTCAyMC4xMzYxLDM5LjQxNDJDIDE5LjM1NSwzOC42MzMyIDE5LjM1NSwzNy4zNjY5IDIwLjEzNjEsMzYuNTg1OEwgMjkuMDg2LDI3LjYzNjJDIDI5LjYwNDgsMjcuMTE3NSAzMCwyNyAzMSwyNy4wMDAxTCA1MiwyNy4wMDAxQyA1My4xMDQ2LDI3LjAwMDEgNTQsMjcuODk1NSA1NCwyOS4wMDAxTCA1NCw0Ny4wMDAxQyA1NCw0OC4xMDQ2IDUzLjEwNDYsNDkuMDAwMSA1Miw0OS4wMDAxTCAzMSw0OSBaIFwiLz5cclxuICAgICAgICAgICAgPC9zdmc+ICAgICAgICBcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtaW5mby1pY29uXCIgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdG9vbHRpcENsYXNzPVwiaW5wdXQtdG9vbHRpcFwiIG5nYlRvb2x0aXA9XCJGb3IgZXh0ZW5zaW9uIGRpYWxpbmcsIHVzZSBmb3JtYXRzIGxpa2UgKzEyMzQ1Njc4OTEwIHgxMjMsKzEyMzQ1Njc4OTEwIGV4dC4xMjMsICsxMjM0NTY3ODkxMCwxMjNcIj48aSBjbGFzcz1cImZhIGZhLWluZm8tY2lyY2xlXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3VpZGVcIiAqbmdJZj1cImNhbGxlcklkTGlzdC5sZW5ndGggJiYgIShkaWFsZWROdW1iZXIubGVuZ3RoID4gMilcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ3VpZGV0ZXh0XCI+UGxlYXNlIGVudGVyIGEgbnVtYmVyIG9yIHNlbGVjdCBhIHNhdmVkIGNvbnRhY3Q8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiaW5wdXQtZXJyb3JcIiAqbmdJZj1cImRpYWxBbGVydC5zaG93XCI+XHJcbiAgICAgICAgICA8c3Bhbj57e2RpYWxBbGVydC5tc2d9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWNhcmRcIiAqbmdGb3I9XCJsZXQgY29udGFjdCBvZiBmaWx0ZXJlZENvbnRhY3RMaXN0XCIgKGNsaWNrKT1cIm9uQ29udGFjdFNlbGVjdChjb250YWN0KVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pbWdcIj5cclxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiY29udGFjdC5pbWFnZVwiIGFsdD1cInVzZXIgaW1hZ2VcIiBsb2FkaW5nPVwibGF6eVwiICpuZ0lmPVwiY29udGFjdC5pbWFnZSBlbHNlIGFscGhhTmFtZVwiLz5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FscGhhTmFtZT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29udGFjdC1hbHBoYS1pbWdcIj57e2dldEZpcnN0TGV0dGVyKGNvbnRhY3QuZmlyc3ROYW1lKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1kZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiA0cHhcIiBjbGFzcz1cImNvbnRhY3QtbmFtZVwiPnt7Z2V0RnVsbE5hbWUoY29udGFjdCkgfX08L3A+XHJcbiAgICAgICAgICAgICAgPHA+e3tjb250YWN0Lm51bWJlcnNMaXN0WzBdLm51bWJlcn19PC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIndhdmUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgY2xhc3M9XCJ3YXZlc1wiXHJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAyNCAxNTAgMjhcIlxyXG4gICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz1cIm5vbmVcIlxyXG4gICAgICAgICAgc2hhcGUtcmVuZGVyaW5nPVwiYXV0b1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgaWQ9XCJnZW50bGUtd2F2ZVwiXHJcbiAgICAgICAgICAgICAgZD1cIk0tMTYwIDQ0YzMwIDAgNTgtMTggODgtMThzIDU4IDE4IDg4IDE4IDU4LTE4IDg4LTE4IDU4IDE4IDg4IDE4IHY0NGgtMzUyelwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICA8ZyBjbGFzcz1cInBhcmFsbGF4XCI+XHJcbiAgICAgICAgICAgIDx1c2VcclxuICAgICAgICAgICAgICB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCJcclxuICAgICAgICAgICAgICB4PVwiNDhcIlxyXG4gICAgICAgICAgICAgIHk9XCIwXCJcclxuICAgICAgICAgICAgICBmaWxsPVwicmdiYSgyNTUsMjU1LDI1NSwwLjcpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPHVzZVxyXG4gICAgICAgICAgICAgIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIlxyXG4gICAgICAgICAgICAgIHg9XCI0OFwiXHJcbiAgICAgICAgICAgICAgeT1cIjNcIlxyXG4gICAgICAgICAgICAgIGZpbGw9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNSlcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8IS0tIDx1c2VcclxuICAgICAgICAgICAgICB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCJcclxuICAgICAgICAgICAgICB4PVwiNDhcIlxyXG4gICAgICAgICAgICAgIHk9XCI1XCJcclxuICAgICAgICAgICAgICBmaWxsPVwicmdiYSgyNTUsMjU1LDI1NSwwLjMpXCJcclxuICAgICAgICAgICAgLz4gLS0+XHJcbiAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiIHg9XCI0OFwiIHk9XCI3XCIgZmlsbD1cIiNmZmZcIiAvPlxyXG4gICAgICAgICAgPC9nPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXJcIiAqbmdJZj1cIiFpc01pbmltaXNlZFwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZGlhbC1idG5cIiAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXBhZFZhbDtsZXQgaSA9IGluZGV4XCJcclxuICAgICAgKGtleWRvd24uZW50ZXIpPVwib25FbnRlcihrZXkubnVtKVwiIChjbGljayk9XCJhZGROdW1iZXIoa2V5Lm51bSlcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBrZXkudGV4dCA9PT0gJysnID8gJzNweCcgOiAnMCd9XCJcclxuICAgICAgIFt0YWJpbmRleF09XCJkaWFsZWROdW1iZXIubGVuZ3RoID8gJzAnOiBpKzJcIiBsb25nUHJlc3MgKGxvbmdQcmVzcyk9XCJhZGROdW1iZXIoa2V5LnRleHQpXCIgc2hvcnRQcmVzcyAoc2hvcnRQcmVzcyk9XCJhZGROdW1iZXIoa2V5Lm51bSlcIj5cclxuICAgICAgICB7e2tleS5udW19fSBcclxuICAgICAgICA8c3BhbiAqbmdJZj1cImtleS5udW0gPT0gMTtlbHNlIG90aGVyVGhhbk9uZVwiIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB2b2ljZW1haWxcIj5cclxuICAgICAgICAgIHZvaWNlbWFpbFxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI290aGVyVGhhbk9uZT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWFsYmhhYmV0c1wiIFtuZ0NsYXNzXT1cInsncGx1c1NpZ24nOiBrZXkudGV4dCA9PT0gJysnfVwiPnt7a2V5LnRleHQgPyBrZXkudGV4dCA6ICcmbmJzcDsnfX08L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYWxsLWJ0bi1jb250YWluZXJcIiAqbmdJZj1cIiFpc01pbmltaXNlZFwiIChtb3VzZWVudGVyKT1cIm9uQ2FsbEJ0bk1vdXNlRW50ZXIoJGV2ZW50KVwiIChtb3VzZWxlYXZlKT1cIm9uQ2FsbEJ0bk1vdXNlTGVhdmUoJGV2ZW50KVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1idG5cIiAoY2xpY2spPVwiaW5pdGlhdGVDYWxsKClcIiBbdGFiaW5kZXhdPVwiZGlhbGVkTnVtYmVyLmxlbmd0aCA/ICcyJzogJzE1J1wiXHJcbiAgICAgICAgW25nU3R5bGVdPVwieydwb2ludGVyLWV2ZW50cyc6IGRpYWxlZE51bWJlci5sZW5ndGggJiYgc2VsZWN0ZWRDYWxsZXJJZCA/ICdhdXRvJyA6ICdub25lJywgJ29wYWNpdHknOiBkaWFsZWROdW1iZXIubGVuZ3RoICYmIHNlbGVjdGVkQ2FsbGVySWQgPyAnMScgOiAnMC41J31cIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZVwiPlxyXG4gICAgICAgICAgY2FsbFxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJjYWxsZXJJZExpc3QubGVuZ3RoICYmICFpc01pbmltaXNlZFwiIGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNob3duQ2FsbGVySWRcIiAqbmdJZj1cInNlbGVjdGVkQ2FsbGVySWQ7IGVsc2UgYXNrQmxvY2tcIiAoY2xpY2spPVwidG9nZ2xlQ2FsbGVySWREaXYoKVwiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCInZmkgZmktJyArIHNlbGVjdGVkQ2FsbGVySWQ/Lmlzb0NvZGU/LnRvTG93ZXJDYXNlKClcIj48L3NwYW4+XHJcbiAgICAgICAgICB7e3NlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcn19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2Fza0Jsb2NrPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaG93bkNhbGxlcklkXCIgIChjbGljayk9XCJ0b2dnbGVDYWxsZXJJZERpdigpXCIgW25nQ2xhc3NdPVwieyAndGlsdC1zaGFraW5nJzogc2hha2VEZWRpY2F0ZWRCdG4gfVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1iLTBcIj5TZWxlY3QgQzJDIG51bWJlcjwvaDU+XHJcbiAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJtbC0yXCIgc3R5bGU9XCJvcGFjaXR5Oi44O21hcmdpbi10b3A6MnB4XCI+XHJcbiAgICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaW1hZ2VzL2ljb25fZG93bl9hcnJvdy5zdmdcIiBhbHQ9XCJkb3duXCIgd2lkdGg9XCIxMHB4XCI+XHJcbiAgICAgICAgICAgIDwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtYW5nbGUtZG93biBtbC0yIHRleHQtYmx1ZVwiIHN0eWxlPVwibWFyZ2luLXRvcDoycHhcIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPGRpdiBjbGFzcz1cImd1aWRlMlwiICpuZ0lmPVwic2hha2VEZWRpY2F0ZWRCdG5cIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImd1aWRldGV4dFwiPlBsZWFzZSBzZWxlY3QgYSBudW1iZXIgZnJvbSBiZWxvdyBkcm9wZG93bjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiY2FsbGVySWRMaXN0Lmxlbmd0aDsgZWxzZSBub0NhbGxlcklkTWVzc2FnZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhbGxlci1pZC1saXN0LWNvbnRhaW5lclwiICpuZ0lmPVwiY2FsbGVySWRMaXN0Lmxlbmd0aCAmJiAhaXNNaW5pbWlzZWRcIiBpZD1cImNhbGxlcklkQ29udGFpbmVyXCIgIFtuZ0NsYXNzXT1cInsndmlzaWJsZSc6ICFpc0NhbGxlcklkSGlkZGVufVwiID5cclxuICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblwiPlxyXG4gICAgICAgIDwhLS0gPGg0PlNlbGVjdCBDMkMgU29mdHBob25lIE51bWJlcjwvaDQ+IC0tPlxyXG4gICAgICAgICA8aDQ+TWFrZSBvdXRnb2luZyBjYWxsIHVzaW5nPC9oND5cclxuICAgICAgICA8c3BhblxyXG4gICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcclxuICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcclxuICAgICAgICAgIChjbGljayk9XCJpc0NhbGxlcklkSGlkZGVuID0gdHJ1ZVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgY2xvc2VcclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8dWw+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2FsbGVySWQgb2YgY2FsbGVySWRMaXN0XCI+XHJcbiAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwieydzZWxlY3RlZENhbGxlcklkQ2xhc3MnOiBjYWxsZXJJZD8ubnVtYmVyID09IHNlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcn1cIiAoY2xpY2spPVwib25EZWRpY2F0ZWROdW1TZWxlY3QoY2FsbGVySWQpXCI+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiJ2ZpIGZpLScgKyBjYWxsZXJJZD8uaXNvQ29kZT8udG9Mb3dlckNhc2UoKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICB7e2NhbGxlcklkPy5udW1iZXJ9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHNwYW4+e3tjYWxsZXJJZD8uY291bnRyeU5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvdWw+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLXRlbXBsYXRlICNub0NhbGxlcklkTWVzc2FnZT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJuby1jYWxsZXItaWQtbWVzc2FnZVwiPlRvIG1ha2UgYW55IHZvaWNlIGNhbGxzLCBwbGVhc2UgPGEgcm91dGVyTGluaz1cIi9leHRlbnNpb24vZGVkaWNhdGVkbnVtYmVyL3t7dG9rZW59fVwiIGNsYXNzPVwiY2xpY2staGVyZS1saW5rXCIgdGl0bGU9XCJTZXR0aW5ncyA+IEMyQyBOdW1iZXJcIj5zdWJzY3JpYmU8L2E+IHRvIGEgdm9pY2UgY2FwYWJsZSBDMkMgTnVtYmVyLlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cImRlZGljYXRlZC1vdmVybGF5XCIgKm5nSWY9XCJzaG93RGVkaWNhdGVkUG9wdXBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZGVkaWNhdGVkTnVtUG9wdXBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgY2hvb3NlRGVkaWNhdGVkSGVhZGVyXCI+XHJcbiAgICAgICAgICA8aDU+Q2hvb3NlIEMyQyBOdW1iZXI8L2g1PlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGRpYWwtY2xvc2UtYnRuXCIgKGNsaWNrKT1cInNob3dEZWRpY2F0ZWRQb3B1cCA9IGZhbHNlXCI+Y2xvc2U8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBkZWRpY2F0ZWROdW1MaXN0XCI+XHJcbiAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhbGxlcklkIG9mIGNhbGxlcklkTGlzdFwiPlxyXG4gICAgICAgICAgICAgIDxsaSBbbmdDbGFzc109XCJ7J3NlbGVjdGVkQ2FsbGVySWRDbGFzcyc6IGNhbGxlcklkPy5udW1iZXIgPT0gc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyfVwiIChjbGljayk9XCJzaG93RGVkaWNhdGVkUG9wdXAgPSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiJ2ZpIGZpLScgKyBjYWxsZXJJZD8uaXNvQ29kZT8udG9Mb3dlckNhc2UoKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3tjYWxsZXJJZD8ubnVtYmVyfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3tjYWxsZXJJZD8uY291bnRyeU5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJpbmNvbWluZy1jYWxsLXdpZGdldFwiICpuZ0Zvcj1cImxldCBjYWxsIG9mIG5ld0luY29taW5nQ2FsbHM7bGV0IGkgPSBpbmRleFwiIFtuZ1N0eWxlXT1cInsndG9wJzogKDMwICsgaSAqIDcyKSArICdweCd9XCI+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluYy11c2VyLWltZ1wiPlxyXG4gICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaW1hZ2VzL3VzZXIuanBnXCIgYWx0PVwidXNlciBpbWFnZVwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJpbmMtdXNlci1uYW1lXCI+e3tjYWxsLmN1c3RvbVBhcmFtZXRlcnMuZ2V0KCduYW1lJyl9fTwvcD5cclxuICAgICAgICA8cD57e2NhbGwucGFyYW1ldGVycy5Gcm9tfX08L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImluYy1jYWxsLWJ0biBpbmMtYWNjZXB0LWJ0biBtci0yXCIgKGNsaWNrKT1cImFjY2VwdE5ld0luY29taW5nQ2FsbChjYWxsKVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgc3R5bGU9XCJjb2xvcjogd2hpdGVcIj5cclxuICAgICAgICAgICAgY2FsbFxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJpbmMtY2FsbC1idG4gaW5jLXJlamVjdC1idG5cIiAoY2xpY2spPVwicmVqZWN0TmV3SW5jb21pbmdDYWxsKGNhbGwpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZVwiPlxyXG4gICAgICAgICAgICBjYWxsX2VuZFxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICBcclxuICAgIDwvZGl2PiAtLT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|