tnx-shared 5.3.406 → 5.3.408
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/tnx-shared.umd.js +219 -112
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/components/access-denied-component/access-denied.component.d.ts.map +1 -1
- package/components/file-explorer/file-manager/file-manager.component.d.ts +4 -1
- package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
- package/components/file-explorer/file-viewer/file-viewer.component.d.ts +4 -0
- package/components/file-explorer/file-viewer/file-viewer.component.d.ts.map +1 -1
- package/esm2015/components/access-denied-component/access-denied.component.js +2 -1
- package/esm2015/components/crud/crud-form/crud-form.component.js +2 -2
- package/esm2015/components/file-explorer/file-manager/file-manager.component.js +34 -2
- package/esm2015/components/file-explorer/file-viewer/file-viewer.component.js +55 -2
- package/esm2015/services/user-chu-ky-so.service.js +28 -0
- package/esm2015/tnx-shared.js +92 -91
- package/fesm2015/tnx-shared.js +110 -4
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/user-chu-ky-so.service.d.ts +11 -0
- package/services/user-chu-ky-so.service.d.ts.map +1 -0
- package/services/user-chu-ky-so.service.ngfactory.d.ts.map +1 -0
- package/tnx-shared.d.ts +91 -90
- package/tnx-shared.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -21,6 +21,7 @@ import { ModuleConfigService } from '../../../services/module-config.service';
|
|
|
21
21
|
import { NotifierService } from '../../../services/notifier.service';
|
|
22
22
|
import { SignalRService } from '../../../services/signalr.service';
|
|
23
23
|
import { TnClientService } from '../../../services/tn-client.service';
|
|
24
|
+
import { UserChuKySoService } from '../../../services/user-chu-ky-so.service';
|
|
24
25
|
import { FileKySoSimComponent } from '../file-ky-so-sim/file-ky-so-sim.component';
|
|
25
26
|
import { FileExplorerItem, FileExplorerItemType } from '../models/file-explorer-item';
|
|
26
27
|
import { FilePickerSetting } from '../models/file-picker-setting';
|
|
@@ -33,7 +34,7 @@ import { FileVersionService } from '../services/file-version.service';
|
|
|
33
34
|
import { FolderService } from '../services/folder.service';
|
|
34
35
|
import { MyDriveService } from '../services/my-drive.service';
|
|
35
36
|
export class FileManagerComponent extends DataListBase {
|
|
36
|
-
constructor(_myDriveService, _injector, _messageService, _authenService, _tnClientService, _fileVersionService, _moduleConfigService, _notifierService, _signalrService, _fileExplorerService, _fileExplorerNewService, _deviceDetectorService, _folderService, _fileObjectService, _downloadLinkService, _fileManagerService) {
|
|
37
|
+
constructor(_myDriveService, _injector, _messageService, _authenService, _tnClientService, _fileVersionService, _moduleConfigService, _notifierService, _signalrService, _fileExplorerService, _fileExplorerNewService, _deviceDetectorService, _folderService, _fileObjectService, _downloadLinkService, _userChuKySoService, _fileManagerService) {
|
|
37
38
|
super(_injector);
|
|
38
39
|
this._myDriveService = _myDriveService;
|
|
39
40
|
this._injector = _injector;
|
|
@@ -50,6 +51,7 @@ export class FileManagerComponent extends DataListBase {
|
|
|
50
51
|
this._folderService = _folderService;
|
|
51
52
|
this._fileObjectService = _fileObjectService;
|
|
52
53
|
this._downloadLinkService = _downloadLinkService;
|
|
54
|
+
this._userChuKySoService = _userChuKySoService;
|
|
53
55
|
this._fileManagerService = _fileManagerService;
|
|
54
56
|
this.control = new FileManagerControlSchema();
|
|
55
57
|
this.layout = EnumFileLayout.LIST;
|
|
@@ -513,6 +515,13 @@ export class FileManagerComponent extends DataListBase {
|
|
|
513
515
|
visible: (this._fileObjectService.isTypeFileKySo(item.name)
|
|
514
516
|
&& this.layout !== EnumFileLayout.SIMPLE_FOR_LIST && !this.parentSetting.hiddenKySoSimCaNhan),
|
|
515
517
|
},
|
|
518
|
+
{
|
|
519
|
+
label: 'Ký số SmartCA',
|
|
520
|
+
icon: 'fas fa-signature',
|
|
521
|
+
command: () => {
|
|
522
|
+
this.signFileSmartCA(item);
|
|
523
|
+
},
|
|
524
|
+
},
|
|
516
525
|
{
|
|
517
526
|
label: 'Ký số cá nhân (USB)', icon: 'fas fa-signature',
|
|
518
527
|
command: () => {
|
|
@@ -1443,6 +1452,28 @@ export class FileManagerComponent extends DataListBase {
|
|
|
1443
1452
|
this.forms.kySoSim.show = true;
|
|
1444
1453
|
this.model.advanceData = file;
|
|
1445
1454
|
}
|
|
1455
|
+
signFileSmartCA(rowData) {
|
|
1456
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1457
|
+
const dataKySo = (yield this._userChuKySoService.getDetailByFilter([
|
|
1458
|
+
this.newFilter('provider', Operator.equal, 'SmartCA'),
|
|
1459
|
+
this.newFilter('userId', Operator.equal, this._userService.getCurrentUser().userId),
|
|
1460
|
+
])).data;
|
|
1461
|
+
if (!dataKySo) {
|
|
1462
|
+
this._notifierService.showWarning('Người dùng chưa cấu hình thông tin ký số');
|
|
1463
|
+
}
|
|
1464
|
+
this.forms.fileViewer.formData.data = {
|
|
1465
|
+
fileId: rowData.id,
|
|
1466
|
+
isFileVersion: false,
|
|
1467
|
+
fileName: rowData.name,
|
|
1468
|
+
service: rowData.serviceCode,
|
|
1469
|
+
entity: rowData.entity,
|
|
1470
|
+
entityKey: rowData.entityKey,
|
|
1471
|
+
fileBase64Content: dataKySo.fileBase64Content,
|
|
1472
|
+
showKySoButton: true,
|
|
1473
|
+
};
|
|
1474
|
+
this.forms.fileViewer.show = true;
|
|
1475
|
+
});
|
|
1476
|
+
}
|
|
1446
1477
|
shareFolder(file) {
|
|
1447
1478
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1448
1479
|
this.forms.shareFolder.data = file;
|
|
@@ -1660,6 +1691,7 @@ FileManagerComponent.ctorParameters = () => [
|
|
|
1660
1691
|
{ type: FolderService },
|
|
1661
1692
|
{ type: FileObjectService },
|
|
1662
1693
|
{ type: DownloadLinkService },
|
|
1694
|
+
{ type: UserChuKySoService },
|
|
1663
1695
|
{ type: FileManagerService }
|
|
1664
1696
|
];
|
|
1665
1697
|
FileManagerComponent.propDecorators = {
|
|
@@ -1707,4 +1739,4 @@ FileManagerComponent.propDecorators = {
|
|
|
1707
1739
|
onDeleted: [{ type: Output }],
|
|
1708
1740
|
uploaded: [{ type: Output }]
|
|
1709
1741
|
};
|
|
1710
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGUtZXhwbG9yZXIvZmlsZS1tYW5hZ2VyL2ZpbGUtbWFuYWdlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixRQUFRLEVBQ1IsS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQVksY0FBYyxFQUFZLE1BQU0sdUJBQXVCLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixlQUFlLEVBQ2YsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsV0FBVyxFQUNYLFFBQVEsRUFDUixTQUFTLEVBQ1osTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxPQUFPLEVBQUUsY0FBYyxFQUFF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d0JBRUwsS0FBSzs2QkFDTCxLQUFLOzZCQUNMLEtBQUs7b0JBRUwsS0FBSzt3Q0FNTCxLQUFLO2dDQUNMLEtBQUs7NEJBQ0wsS0FBSztxQkFFTCxNQUFNO3NCQUNOLE1BQU07OEJBQ04sTUFBTTt5QkFDTixNQUFNOzBCQUNOLE1BQU07d0JBQ04sTUFBTTt5QkFDTixNQUFNO3dCQUNOLE1BQU07dUJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZW51SXRlbSwgTWVzc2FnZVNlcnZpY2UsIFRyZWVOb2RlIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IENvbnRleHRNZW51IH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvY29udGV4dG1lbnUnO1xuaW1wb3J0IHsgRmlsZVVwbG9hZCB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2ZpbGV1cGxvYWQnO1xuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFMaXN0QmFzZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9kYXRhLWxpc3QtYmFzZSc7XG5pbXBvcnQgeyBDb21tb25FcnJvckNvZGUgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2NvbW1vbi1lcnJvci1jb2RlJztcbmltcG9ydCB7IEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gICAgQ29sdW1uU2NoZW1hQmFzZSxcbiAgICBDcnVkRm9ybURhdGEsXG4gICAgQ3J1ZEZvcm1TZXR0aW5nLFxuICAgIEVudW1GaWxlTGF5b3V0LFxuICAgIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSxcbiAgICBIZWlnaHRUeXBlLFxuICAgIE1vZGVsU2NoZW1hLFxuICAgIE9wZXJhdG9yLFxuICAgIFBvcHVwU2l6ZVxufSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3MvbW9kdWxlLWNvbmZpZyc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uQmFzZSB9IGZyb20gJy4uLy4uLy4uL2VudW1zL2NvbW1vbic7XG5pbXBvcnQgeyBFZGl0RmlsZUNvbW1hbmQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZWRpdC1maWxlLWNvbW1hbmQnO1xuaW1wb3J0IHsgR3JpZEluZm8gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XG5pbXBvcnQgeyBDb21tYW5kVHlwZSwgVG5DbGllbnRDb21tYW5kIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3RuLWNsaWVudC1jb21tYW5kJztcbmltcG9ydCB7IEF1dGhlblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoZW4uc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maWxlLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG5DbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdG4tY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZUt5U29TaW1Db21wb25lbnQgfSBmcm9tICcuLi9maWxlLWt5LXNvLXNpbS9maWxlLWt5LXNvLXNpbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsZUV4cGxvcmVySXRlbSwgRmlsZUV4cGxvcmVySXRlbVR5cGUgfSBmcm9tICcuLi9tb2RlbHMvZmlsZS1leHBsb3Jlci1pdGVtJztcbmltcG9ydCB7IEZpbGVQaWNrZXJTZXR0aW5nIH0gZnJvbSAnLi4vbW9kZWxzL2ZpbGUtcGlja2VyLXNldHRpbmcnO1xuaW1wb3J0IHsgRmlsZVZlcnNpb25EVE8gfSBmcm9tICcuLi9tb2RlbHMvZmlsZS12ZXJzaW9uLWR0byc7XG5pbXBvcnQgeyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyB9IGZyb20gJy4uL21vZGVscy9nZW5lcmF0ZS1saW5rLWRvd25sb2FkLWR0byc7XG5pbXBvcnQgeyBJRmlsZU1hbmFnZXJDb21wb25lbnQgfSBmcm9tICcuLi9tb2RlbHMvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTZXJ2aWNlUmVxdWVzdE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3NlcnZpY2UtcmVxdWVzdC1tb2RlbCc7XG5pbXBvcnQgeyBEb3dubG9hZExpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZG93bmxvYWQtbGluay5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVEYXRhU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ZpbGUtZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVFeHBsb3Jlck5ld1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLWV4cGxvcmVyLW5ldy5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVFeHBsb3JlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLWV4cGxvcmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZU9iamVjdFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLW9iamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVWZXJzaW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ZpbGUtdmVyc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZvbGRlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb2xkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNeURyaXZlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL215LWRyaXZlLnNlcnZpY2UnO1xuXG5cbi8vIGltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lbnVJdGVtLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbi8vIGltcG9ydCB7IENvbnRleHRNZW51IH0gZnJvbSAncHJpbWVuZy9jb250ZXh0bWVudSc7XG4vLyBpbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAncHJpbWVuZy9maWxldXBsb2FkJztcbmRlY2xhcmUgbGV0IHZnY2Ffc2lnbl9hcHByb3ZlZDogYW55O1xuZGVjbGFyZSBsZXQgdmdjYV9zaWduX2lzc3VlZDogYW55O1xuZGVjbGFyZSBsZXQgdmdjYV9jb21tZW50OiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdmaWxlLW1hbmFnZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWxlLW1hbmFnZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZpbGUtbWFuYWdlci5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZpbGVNYW5hZ2VyQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBDb21wb25lbnRDb250ZXh0U2VydmljZSxcbiAgICBdLFxufSlcblxuZXhwb3J0IGNsYXNzIEZpbGVNYW5hZ2VyQ29tcG9uZW50IGV4dGVuZHMgRGF0YUxpc3RCYXNlIGltcGxlbWVudHMgSUZpbGVNYW5hZ2VyQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQFZpZXdDaGlsZCgnZmlsZUNvbnRyb2wnKSBmaWxlQ29udHJvbDogRmlsZVVwbG9hZDtcbiAgICBAVmlld0NoaWxkKCdjb250ZXh0TWVudScpIGNvbnRleHRNZW51OiBDb250ZXh0TWVudTtcbiAgICBAVmlld0NoaWxkKCdmaWxlS3lTb1NpbScpIGZpbGVLeVNvU2ltOiBGaWxlS3lTb1NpbUNvbXBvbmVudDtcblxuICAgIEBJbnB1dCgpIGNvbnRyb2w6IEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSA9IG5ldyBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEoKTtcbiAgICBASW5wdXQoKSBzZXQgZmlsZURhdGFTZXJ2aWNlKHZhbHVlOiBGaWxlRGF0YVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fZmlsZURhdGFTZXJ2aWNlID0gdmFsdWU7XG4gICAgfVxuICAgIEBJbnB1dCgpIGxheW91dDogRW51bUZpbGVMYXlvdXQgPSBFbnVtRmlsZUxheW91dC5MSVNUO1xuICAgIEBJbnB1dCgpIGhpZGRlbkNyZWF0ZUZvbGRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIG1heEZpbGVTaXplOiBudW1iZXIgPSAxMDAwMDAwMDA7IC8vIFNpemUgaW4gYnl0ZVxuICAgIEBJbnB1dCgpIGZpbGVMaW1pdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlU2l6ZU1lc3NhZ2VTdW1tYXJ5Pzogc3RyaW5nID0gJ3swfTogUXXDoSBkdW5nIGzGsOG7o25nIGZpbGUgY2hvIHBow6lwLCAnO1xuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlU2l6ZU1lc3NhZ2VEZXRhaWw/OiBzdHJpbmcgPSAnZHVuZyBsxrDhu6NuZyB04buRaSDEkWEgbMOgIHswfS4nO1xuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlVHlwZU1lc3NhZ2VTdW1tYXJ5Pzogc3RyaW5nID0gJ3swfTogS2jDtG5nIMSRw7puZyDEkeG7i25oIGThuqFuZyBmaWxlLCAnO1xuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlVHlwZU1lc3NhZ2VEZXRhaWw/OiBzdHJpbmcgPSAnxJHhu4tuaCBk4bqhbmcgZmlsZSBjaG8gcGjDqXA6IHswfS4nO1xuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlTGltaXRNZXNzYWdlU3VtbWFyeT86IHN0cmluZyA9ICdRdcOhIHPhu5EgbMaw4bujbmcgZmlsZSBjaG8gcGjDqXAsICc7XG4gICAgQElucHV0KCkgaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VEZXRhaWw/OiBzdHJpbmcgPSAndOG7kWkgxJFhIHswfSBmaWxlLic7XG4gICAgQElucHV0KCkgZGF0YVR5cGU6IGFueTtcbiAgICBASW5wdXQoKSByb290Rm9sZGVyTmFtZTogc3RyaW5nOy8vIFTDqm4gdGjGsCBt4bulYyBn4buRYy5cbiAgICBASW5wdXQoKSBzZXJ2aWNlQ29kZTogc3RyaW5nOy8vIELhu5kga2V5IMSR4buDIHThuqFvIHRoxrAgbeG7pWMgZ+G7kWMuXG4gICAgQElucHV0KCkgZW50aXR5OiBzdHJpbmc7XG4gICAgQElucHV0KCkgaGlkZGVuUGFnZVNldHRpbmcgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBub0ZpbGVNZXNzYWdlID0gJ0NoxrBhIGPDsyB0w6BpIGxp4buHdSDEkcaw4bujYyB04bqjaSBsw6puJztcbiAgICBASW5wdXQoKSBzZXQgZW50aXR5S2V5KHZhbDogYW55KSB7XG4gICAgICAgIHRoaXMuX2VudGl0eUtleSA9IHZhbDtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbnRpdHlLZXkgPSB2YWxbdmFsLl9kcm9wZG93bnZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZFNvdXJjZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lbnRpdHlLZXlDaGFuZ2UuZW1pdCh0aGlzLl9lbnRpdHlLZXkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aUVudGl0eUtleSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1c1VybCA9ICdCeUVudGl0eUtleXMnO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RmlsZXNJbkVudGl0eUtleSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVzVXJsID0gJ0J5Rm9sZGVySWQnO1xuICAgICAgICAgICAgICAgIHRoaXMucm9vdEZvbGRlcklkID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQW5kTG9hZFJvb3RGb2xkZXJDb250ZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNldERhdGEoKTtcbiAgICB9O1xuXG4gICAgZ2V0IGVudGl0eUtleSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW50aXR5S2V5O1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCByb290Rm9sZGVySWQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9yb290Rm9sZGVySWQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCA9IHZhbHVlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkYXRhRm9ybSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5lbnRpdHlLZXlQaWNrZXIgJiYgdGhpcy5maWxlUGlja2VyU2V0dGluZyAmJiB0aGlzLmZpbGVQaWNrZXJTZXR0aW5nLmVudGl0eUZpZWxkICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUVudGl0eUZpZWxkID0gdmFsdWVbdGhpcy5maWxlUGlja2VyU2V0dGluZy5lbnRpdHlGaWVsZF07XG4gICAgICAgICAgICBpZiAodmFsdWVFbnRpdHlGaWVsZCAmJiB0eXBlb2YgKHZhbHVlRW50aXR5RmllbGQpID09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpdHlLZXlQaWNrZXIgPSB2YWx1ZUVudGl0eUZpZWxkW3ZhbHVlRW50aXR5RmllbGQuX2Ryb3Bkb3dudmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpdHlLZXlQaWNrZXIgPSB2YWx1ZUVudGl0eUZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGlzUHVibGljOiBib29sZWFuO1xuICAgIC8vIETDuW5nIGNobyBjb21wb25lbnQgdMOgaSBsaeG7h3VcbiAgICBASW5wdXQoKSBpblRhaUxpZXUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBpblRhaUxpZXVDaHVuZyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGNvcHlUb0ZvbGRlcklkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkRW1wdHkoKTtcblxuICAgIEBJbnB1dCgpIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLl92YWx1ZSAhPSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIG11bHRpcGxlQ2hlY2tXaGVuQ2xpY2tSb3c6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGZpbGVQaWNrZXJTZXR0aW5nOiBGaWxlUGlja2VyU2V0dGluZztcbiAgICBASW5wdXQoKSBwYXJlbnRTZXR0aW5nOiBDcnVkRm9ybVNldHRpbmcgPSBuZXcgQ3J1ZEZvcm1TZXR0aW5nKCk7XG5cbiAgICBAT3V0cHV0KCkgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgZW50aXR5S2V5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIGNsb3NlUG9wdXAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25EZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIHVwbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBwcml2YXRlIF91bnN1YmNyaWJsZUFsbCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICBwcml2YXRlIF9tb2R1bGVDb25maWc6IE1vZHVsZUNvbmZpZztcblxuICAgIF9vbGRWYWx1ZTogYW55O1xuICAgIF92YWx1ZTogYW55O1xuICAgIF9kYXRhU291cmNlOiBhbnlbXSA9IFtdO1xuICAgIF9sYXlvdXQgPSBFbnVtRmlsZUxheW91dDtcblxuICAgIGdldCBmaWxlRGF0YVNlcnZpY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWxlRGF0YVNlcnZpY2U7XG4gICAgfVxuXG4gICAgX2ZpbGVEYXRhU2VydmljZTogRmlsZURhdGFTZXJ2aWNlO1xuICAgIF9lbnRpdHlLZXk6IHN0cmluZztcbiAgICBfaGFzTG9hZGVkU291cmNlID0gZmFsc2U7XG5cbiAgICBnZXQgcm9vdEZvbGRlcklkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdEZvbGRlcklkO1xuICAgIH1cblxuICAgIF9yb290Rm9sZGVySWQ6IHN0cmluZyA9IG51bGw7Ly8gSW5zdGFuY2VJZCB0aMawIG3hu6VjIGfhu5FjLlxuICAgIHByb2dyZXNzVmFsdWUgPSAwO1xuICAgIGFwaVVwbG9hZFVybCA9ICcnO1xuICAgIGNob29zZUxhYmVsID0gJ0No4buNbic7XG4gICAgdXNlcklkOiBhbnk7XG4gICAgX2ZvbGRlcklkOiBzdHJpbmc7XG5cbiAgICBmb3JtSWRzID0ge1xuICAgICAgICBjcmVhdGVGb2xkZXI6ICdjcmVhdGVGb2xkZXInLFxuICAgICAgICByZW5hbWVGaWxlOiAncmVuYW1lRmlsZScsXG4gICAgICAgIHNoYXJlRmlsZTogJ3NoYXJlRmlsZScsXG4gICAgICAgIHNoYXJlRm9sZGVyOiAnc2hhcmVGb2xkZXInLFxuICAgICAgICBmaWxlVmlld2VyOiAnZmlsZVZpZXdlcicsXG4gICAgICAgIGZpbGVWZXJzaW9uTGlzdDogJ2ZpbGVWZXJzaW9uTGlzdCcsXG4gICAgICAgIHNpZ25hdHVyZURldGFpbDogJ3NpZ25hdHVyZURldGFpbCcsXG4gICAgICAgIGt5U29TaW06ICdreVNvU2ltJyxcbiAgICAgICAgdmlld0RldGFpbDogJ3ZpZXdEZXRhaWwnXG4gICAgfTtcbiAgICBmb3JtczogYW55ID0ge307XG4gICAgZGF0YTogYW55ID0ge1xuICAgICAgICByb290Rm9sZGVySWQ6IG51bGwsXG4gICAgICAgIGN1cnJlbnRGb2xkZXJJZDogbnVsbCxcblxuICAgICAgICBtb3Zpbmc6IHtcbiAgICAgICAgICAgIGlzU2VsZWN0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM6IG51bGwsXG4gICAgICAgIH0sXG5cbiAgICAgICAgYnJlYWRjcnVtYnM6IDxNZW51SXRlbVtdPltdLFxuICAgIH07XG4gICAgc2hvd0F0dGFjaExpbmtCb3ggPSBmYWxzZTtcbiAgICB0eXBlZExpbms6IHN0cmluZyA9ICcnO1xuICAgIHNob3dUYWlMaWV1RHVuZ0NodW5nOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGF5b3V0U2ltcGxlQWxsID0gZmFsc2U7XG4gICAgYmFzZVBlcm1pc3Npb246IG51bWJlcjtcbiAgICBpbml0ZWQgPSBmYWxzZTtcbiAgICB2aXNpYmxlRm9sZGVyID0gZmFsc2U7XG4gICAgcm9vdFRyZWVOb2RlOiBUcmVlTm9kZVtdID0gW107XG4gICAgc2VsZWN0ZWRUcmVlTm9kZTogVHJlZU5vZGU7XG4gICAgYWNjZXB0OiBzdHJpbmcgPSAnJztcbiAgICBmaWxlSW5Gb3JtID0gJ2ZpbGUnO1xuICAgIHVzZUJyZWFkY3J1bWJzID0gdHJ1ZTtcbiAgICB1c2VTaWduYXR1cmUgPSB0cnVlO1xuICAgIGVudGl0eUtleVBpY2tlcjogc3RyaW5nID0gJyc7XG4gICAgc2hvd0ZpbGVWZXJzaW9uID0gdHJ1ZTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIF9teURyaXZlU2VydmljZTogTXlEcml2ZVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2F1dGhlblNlcnZpY2U6IEF1dGhlblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3RuQ2xpZW50U2VydmljZTogVG5DbGllbnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9maWxlVmVyc2lvblNlcnZpY2U6IEZpbGVWZXJzaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfc2lnbmFsclNlcnZpY2U6IFNpZ25hbFJTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgX2ZpbGVFeHBsb3JlclNlcnZpY2U6IEZpbGVFeHBsb3JlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZpbGVFeHBsb3Jlck5ld1NlcnZpY2U6IEZpbGVFeHBsb3Jlck5ld1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZvbGRlclNlcnZpY2U6IEZvbGRlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZpbGVPYmplY3RTZXJ2aWNlOiBGaWxlT2JqZWN0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZG93bmxvYWRMaW5rU2VydmljZTogRG93bmxvYWRMaW5rU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZmlsZU1hbmFnZXJTZXJ2aWNlOiBGaWxlTWFuYWdlclNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcbiAgICAgICAgdGhpcy5hcGlVcGxvYWRVcmwgPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRVcGxvYWRVcmwoKTtcbiAgICAgICAgdGhpcy51c2VySWQgPSB0aGlzLl91c2VyU2VydmljZS5nZXRVc2VySWRDb21iaW5lKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wgPSBuZXcgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudFsnaGlkZGVuRmlsZVZlcnNpb25Jc05vdFN1cGVyQWRtaW4nXSAmJiAhdGhpcy5fdXNlclNlcnZpY2UuaXNTdXBlclVzZXIoKSkge1xuICAgICAgICAgICAgdGhpcy5zaG93RmlsZVZlcnNpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuQXV0aG9yaXplQnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy51c2VCcmVhZGNydW1icyA9IHRoaXMuY29udHJvbC51c2VCcmVhZGNydW1icztcbiAgICAgICAgdGhpcy51c2VTaWduYXR1cmUgPSB0aGlzLmNvbnRyb2wudXNlU2lnbmF0dXJlO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAvLyBVcGxvYWQgd2l0aCBtdWx0aXBsZSBmaWxlXG4gICAgICAgICAgICB0aGlzLmFwaVVwbG9hZFVybCA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFVwbG9hZE11bHRpcGxlVXJsKCk7XG4gICAgICAgICAgICB0aGlzLmZpbGVJbkZvcm0gPSAnZmlsZXMnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udHJvbC5fY29tcG9uZW50ID0gdGhpcztcbiAgICAgICAgdGhpcy5hY2NlcHQgPSB0aGlzLmNvbnRyb2wuYWNjZXB0ICYmIHRoaXMuY29udHJvbC5hY2NlcHQgIT09ICcnXG4gICAgICAgICAgICA/IHRoaXMuY29udHJvbC5hY2NlcHRcbiAgICAgICAgICAgIDogdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0QWNjZXB0ZWRFeHRlbnNpb25zKHRoaXMuY29udHJvbC5hY2NlcHRGaWxlVHlwZXMpO1xuICAgICAgICB0aGlzLmluaXRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubGF5b3V0U2ltcGxlQWxsID0gKHRoaXMubGF5b3V0ID09PSBFbnVtRmlsZUxheW91dC5TSU1QTEUgfHwgdGhpcy5sYXlvdXQgPT09IEVudW1GaWxlTGF5b3V0LlNJTVBMRV9GT1JfTElTVCk7XG4gICAgICAgIHRoaXMubG9hZERldGFpbEZyb21RdWVyeVBhcmFtID0gZmFsc2U7XG4gICAgICAgIC8vIEzhuq9uZyBraGkga8O9IHNpbSBz4buRIHRow6BuaCBjw7RuZyB0aMOsIGxvYWQgbOG6oWkgZmlsZVxuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LnN1YnNjcmliZSgnS3lTb1NpbVRoYW5oQ29uZycsIHggPT4ge1xuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1zLmt5U29TaW0uc2hvdyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5oYXNDcnVkTGlzdCA9IHRoaXMubGF5b3V0ID09IEVudW1GaWxlTGF5b3V0LkxJU1Q7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlFbnRpdHlLZXkpIHtcbiAgICAgICAgICAgIHRoaXMucGx1c1VybCA9ICdCeUVudGl0eUtleXMnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wbHVzVXJsID0gJ0J5Rm9sZGVySWQnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuaXNQdWJsaWMgIT0gbnVsbCAmJiB0aGlzLmNvbnRyb2wuaXNQdWJsaWMgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmlzUHVibGljID0gdGhpcy5jb250cm9sLmlzUHVibGljO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5pdEdyaWQoKTtcbiAgICAgICAgdGhpcy5pbml0Rm9ybXMoKTtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5tb2RlbC5yZWFkeSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5maWxlRGF0YVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZURhdGFTZXJ2aWNlLnJlZ2lzdGVyKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVsb2FkRGF0YSgpO1xuICAgICAgICB0aGlzLmNoZWNrQW5kTG9hZFJvb3RGb2xkZXJDb250ZW50KCk7XG4gICAgICAgIHRoaXMub25Jbml0LmVtaXQodGhpcyk7XG4gICAgfVxuXG4gICAgY2hhbmdlVmlzaWJsZUZvbGRlcigpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlRm9sZGVyID0gIXRoaXMudmlzaWJsZUZvbGRlcjtcbiAgICB9XG5cbiAgICBjaGVja0FuZExvYWRSb290Rm9sZGVyQ29udGVudCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluaXRlZCB8fCB0aGlzLmZpbGVEYXRhU2VydmljZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdldFJvb3RGb2xkZXJDb250ZW50KCk7XG4gICAgfVxuXG4gICAgZ2V0Um9vdEZvbGRlckNvbnRlbnQoKSB7XG4gICAgICAgIGlmICh0aGlzLnJvb3RGb2xkZXJJZCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5yZWFkeSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNLZXkgPSB0aGlzLnNlcnZpY2VDb2RlXG4gICAgICAgICAgICAmJiB0aGlzLmVudGl0eVxuICAgICAgICAgICAgJiYgdGhpcy5fZW50aXR5S2V5O1xuXG4gICAgICAgIGlmICghaGFzS2V5KSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbWFya0xvYWRpbmcoKTtcbiAgICAgICAgdGhpcy5fZm9sZGVyU2VydmljZS5nZXRTZXJ2aWNlRm9sZGVySWQoe1xuICAgICAgICAgICAgc2VydmljZUNvZGU6IHRoaXMuc2VydmljZUNvZGUsXG4gICAgICAgICAgICBlbnRpdHk6IHRoaXMuZW50aXR5LFxuICAgICAgICAgICAgZW50aXR5S2V5OiB0aGlzLl9lbnRpdHlLZXksXG4gICAgICAgIH0gYXMgU2VydmljZVJlcXVlc3RNb2RlbClcbiAgICAgICAgICAgIC50aGVuKHJzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XG4gICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb290Rm9sZGVySWQgPSBycy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcnVkU2VydmljZS5wcm9jZXNzRXJyb3JSZXNwb25zZShycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBs4bqleSB0aMawIG3hu6VjIGfhu5FjIScpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVzZXREYXRhKCkge1xuICAgICAgICB0aGlzLnJvb3RGb2xkZXJJZCA9IG51bGw7XG4gICAgICAgIHRoaXMuZGF0YS5icmVhZGNydW1icyA9IFtdO1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gW107XG4gICAgfVxuXG4gICAgc2V0Um9vdEZvbGRlcklkKHJvb3RGb2xkZXJJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucm9vdEZvbGRlcklkID0gcm9vdEZvbGRlcklkO1xuICAgIH1cblxuICAgIHNldERhdGFzb3VyY2UoZGF0YVNvdXJjZTogYW55W10gPSBbXSkge1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcbiAgICAgICAgdGhpcy5fb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBbXTtcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgdmFsdWUucHVzaChpdGVtLmlkKTtcbiAgICAgICAgICAgIGlmIChpdGVtLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBpdGVtLm5hbWVXaXRob3V0RXh0ZW5zaW9uID0gaXRlbS5uYW1lO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbS5uYW1lLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5uYW1lV2l0aG91dEV4dGVuc2lvbiA9IGl0ZW0ubmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5leHRlbnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5leHRlbnNpb24gPSBpdGVtLmV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtLnRhaWxGaWxlID0gaXRlbS5uYW1lLnN1YnN0cmluZyhpbmRleCk7XG4gICAgICAgICAgICAgICAgaXRlbS50YWlsRmlsZVVwcGVyID0gaXRlbS50YWlsRmlsZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGl0ZW0uaXNGaWxlID0gaXRlbS5maWxlRXhwbG9yZXJJdGVtVHlwZSA9PSBGaWxlRXhwbG9yZXJJdGVtVHlwZS5GaWxlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxzdE1lbnVCdXR0b25zID0gdGhpcy5fZ2V0TWVudUJ1dHRvbnMoaXRlbSkuZmlsdGVyKHggPT4geC52aXNpYmxlKTtcbiAgICAgICAgICAgICAgICBpdGVtLmhhc0NvbnRleHRNZW51ID0gbHN0TWVudUJ1dHRvbnMubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLl9vbGRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy5fb2xkVmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KHRoaXMuX3ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50Q2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50Q2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlbC5yZWFkeSA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5faGFzTG9hZGVkU291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9oYXNMb2FkZWRTb3VyY2UgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5vblJlYWR5LmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldEZpbGVzSW5FbnRpdHlLZXkoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuYmFzZVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XG4gICAgfVxuICAgIGZpcmVFdmVudENoYW5nZSgpIHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZWQuZW1pdCh0aGlzLl92YWx1ZSk7XG4gICAgfVxuXG4gICAgaW5pdEdyaWQoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZy5tdWx0aXBsZUNoZWNrV2hlbkNsaWNrUm93ID0gdGhpcy5tdWx0aXBsZUNoZWNrV2hlbkNsaWNrUm93O1xuICAgICAgICB0aGlzLnNldHRpbmcubW9kZWxTY2hlbWFzID0gW1xuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ25hbWUnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdUw6puIHTDoGkgbGnhu4d1JyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ1TDqm4gdMOgaSBsaeG7h3UnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVMOqbiB0w6BpIGxp4buHdScsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8vIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAvLyAgICAgZmllbGQ6ICd0aHVtYm5haWwnLFxuICAgICAgICAgICAgLy8gICAgIG5hbWU6ICdUaHVtYm5haWwnLFxuICAgICAgICAgICAgLy8gICAgIGZ1bGxOYW1lOiAnVGh1bWJuYWlsJyxcbiAgICAgICAgICAgIC8vICAgICBkZXNjcmlwdGlvbjogJ1RodW1ibmFpbCcsXG4gICAgICAgICAgICAvLyB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdmaWxlU2l6ZScsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0vDrWNoIHRoxrDhu5tjJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ0vDrWNoIHRoxrDhu5tjJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0vDrWNoIHRoxrDhu5tjJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2NyZWF0ZWQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdOZ8OgeSB04bqhbycsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdOZ8OgeSB04bqhbycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdOZ8OgeSB04bqhbycsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdkYXRldGltZSdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2N1cnJlbnRGaWxlVmVyc2lvbicsXG4gICAgICAgICAgICAgICAgbmFtZTogJ1BoacOqbiBi4bqjbicsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdQaGnDqm4gYuG6o24nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUGhpw6puIGLhuqNuJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ2jhu6ljIG7Eg25nJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ0No4bupYyBuxINuZycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDaOG7qWMgbsSDbmcnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMgPSBbXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2V4cGxvcmVySXRlbScsXG4gICAgICAgICAgICAgICAgc29ydDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzE1ZW0nLFxuICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvLyBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAvLyAgICAgZmllbGQ6ICd0aHVtYm5haWwnLFxuICAgICAgICAgICAgLy8gICAgIGRhdGFUeXBlOiAndGh1bWJuYWlsJyxcbiAgICAgICAgICAgIC8vICAgICB3aWR0aDogJzEwZW0nLFxuICAgICAgICAgICAgLy8gfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdmaWxlU2l6ZScsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdmaWxlU2l6ZScsXG4gICAgICAgICAgICAgICAgc29ydDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzllbScsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAxLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnY3JlYXRlZCcsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdkYXRldGltZScsXG4gICAgICAgICAgICAgICAgc29ydDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwZW0nLFxuICAgICAgICAgICAgICAgIHZpc2libGU6IHRoaXMuc2hvd0ZpbGVWZXJzaW9uXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2N1cnJlbnRGaWxlVmVyc2lvbicsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICc4ZW0nLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogMSxcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogdGhpcy5zaG93RmlsZVZlcnNpb25cbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuaW5pdFNldHRpbmcoKTtcbiAgICB9XG5cbiAgICBpbml0U2V0dGluZygpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhlaWdodFR5cGUgPSBIZWlnaHRUeXBlLmR5bmFtaWM7XG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5GaWx0ZXJSb3cgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UgPSB0aGlzLl9mb2xkZXJTZXJ2aWNlO1xuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nV29ya2Zsb3cgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1Blcm1pc3Npb24gPSB0cnVlO1xuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuQWR2YW5jZVNlYXJjaCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5QYWdlU2V0dGluZyA9IHRoaXMuaGlkZGVuUGFnZVNldHRpbmc7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS51c2VXb3JrZmxvdyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRm9ybXMuXG4gICAgaW5pdEZvcm1zKCkge1xuICAgICAgICB0aGlzLmZvcm1zW3RoaXMuZm9ybUlkcy5jcmVhdGVGb2xkZXJdID0ge1xuICAgICAgICAgICAgaGVhZGVyOiAnVOG6oW8gbeG7m2kgdGjGsCBt4bulYycsXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcbiAgICAgICAgICAgIGZvcm1EYXRhOiBuZXcgQ3J1ZEZvcm1EYXRhKCksXG4gICAgICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoe1xuICAgICAgICAgICAgICAgIHdpZHRoOiA0MDAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyMDAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1zW3RoaXMuZm9ybUlkcy52aWV3RGV0YWlsXSA9IHtcbiAgICAgICAgICAgIGhlYWRlcjogJ1Row7RuZyB0aW4gY2hpIHRp4bq/dCcsXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcbiAgICAgICAgICAgIGZvcm1EYXRhOiBuZXcgQ3J1ZEZvcm1EYXRhKCksXG4gICAgICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoe1xuICAgICAgICAgICAgICAgIHdpZHRoOiA0NTAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA1MDAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1zW3RoaXMuZm9ybUlkcy5yZW5hbWVGaWxlXSA9IHtcbiAgICAgICAgICAgIGhlYWRlcjogJ8SQ4buVaSB0w6puIHThu4dwJyxcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgICAgICAgZm9ybURhdGE6IG5ldyBDcnVkRm9ybURhdGEoKSxcbiAgICAgICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDQwMCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwMCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZm9ybXNbdGhpcy5mb3JtSWRzLmZpbGVWaWV3ZXJdID0ge1xuICAgICAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgICAgICBmb3JtRGF0YToge30sXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5mb3Jtc1t0aGlzLmZvcm1JZHMuZmlsZVZlcnNpb25MaXN0XSA9IHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0Rhbmggc8OhY2ggcGhpw6puIGLhuqNuJyxcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgICAgICAgZmlsZUlkOiBudWxsLFxuICAgICAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHtcbiAgICAgICAgICAgICAgICBtYXhpbWl6ZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZm9ybXNbdGhpcy5mb3JtSWRzLnNpZ25hdHVyZURldGFpbF0gPSB7XG4gICAgICAgICAgICBoZWFkZXI6ICdUaMO0bmcgdGluIGNo4buvIGvDvSBz4buRJyxcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZm9ybXNbdGhpcy5mb3JtSWRzLmt5U29TaW1dID0ge1xuICAgICAgICAgICAgaGVhZGVyOiAnS8O9IHPhu5Egc2ltJyxcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHtcbiAgICAgICAgICAgICAgICBtYXhpbWl6ZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIG9uU2F2ZWRGb3JtKGZvcm1JZCkge1xuICAgICAgICB0aGlzLmZvcm1zW2Zvcm1JZF0uc2hvdyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldEJyZWFkY3J1bWJzKCk7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xuICAgIH1cblxuICAgIG9uQ2FuY2VsRm9ybShmb3JtSWQpIHtcbiAgICAgICAgdGhpcy5mb3Jtc1tmb3JtSWRdLnNob3cgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBzaG93Q29udGV4dE1lbnUoZXZ0LCBpdGVtLCBpc1RyZWU6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRyZWVOb2RlID0gaXRlbTtcbiAgICAgICAgdGhpcy5kYXRhLml0ZW1zTWVudUZpbGUgPSB0aGlzLl9nZXRNZW51QnV0dG9ucyhpdGVtLCBpc1RyZWUpO1xuXG4gICAgICAgIC8vIHNldCB0aW1lIG91dCDEkeG7gyBmaXggYnVnIHJlbmRlciBjb250ZXh0IG1lbnUgcmEgdHLDoG4gcmEgbmdvw6BpIG3DoG4gaMOsbmhcbiAgICAgICAgLy8gQ8OzIGzhur0gdsOsIHRo4budaSDEkWnhu4NtIHByaW1lbmcgdMOtbmggduG7iyB0csOtIGPhu6dhIGNvbnRleHQgbWVudSBsw6AgdHLGsOG7m2Mga2hpIHJlbmRlciBo4bq/dCBjw6FjIHJvdyB0cm9uZyBjb250ZXh0IG1lbnVcbiAgICAgICAgc2V0VGltZW91dChmID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnUuc2hvdyhldnQpO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2dldE1lbnVCdXR0b25zKGl0ZW0sIGlzVHJlZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgaWYgKGl0ZW0uaXNGaWxlKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1hlbSB0cuG7sWMgdHV54bq/bicsIGljb246ICdmYXMgZmEtZXllJywgY29tbWFuZDogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5PYmplY3QoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICh0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKClcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICEodGhpcy5sYXlvdXRTaW1wbGVBbGwgJiYgdGhpcy5yZWFkb25seSkpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0vDvSBz4buRIGPDoSBuaMOibiAoU0lNKScsXG4gICAgICAgICAgICAgICAgICAgIGljb246ICdmYXMgZmEtc2ltLWNhcmQnLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNpZ25LeVNpbUZpbGUoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICh0aGlzLl9maWxlT2JqZWN0U2VydmljZS5pc1R5cGVGaWxlS3lTbyhpdGVtLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmxheW91dCAhPT0gRW51bUZpbGVMYXlvdXQuU0lNUExFX0ZPUl9MSVNUICYmICF0aGlzLnBhcmVudFNldHRpbmcuaGlkZGVuS3lTb1NpbUNhTmhhbiksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnS8O9IHPhu5EgY8OhIG5ow6JuIChVU0IpJywgaWNvbjogJ2ZhcyBmYS1zaWduYXR1cmUnLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNpZ25GaWxlKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAodGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuaXNUeXBlRmlsZUt5U28oaXRlbS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmxheW91dCAhPT0gRW51bUZpbGVMYXlvdXQuU0lNUExFX0ZPUl9MSVNUICYmICF0aGlzLnBhcmVudFNldHRpbmcuaGlkZGVuS3lTb1VzYkNhTmhhbiksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQsO6dCBwaMOqJywgaWNvbjogJ2ZhcyBmYS1jb21tZW50LWRvdHMnLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENvbW1lbnQoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICh0aGlzLl9maWxlT2JqZWN0U2VydmljZS5pc1R5cGVGaWxlS3lTbyhpdGVtLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKClcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMubGF5b3V0ICE9PSBFbnVtRmlsZUxheW91dC5TSU1QTEVfRk9SX0xJU1QgJiYgIXRoaXMucGFyZW50U2V0dGluZy5oaWRkZW5CdXRQaGUpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0LDunQgcGjDqiB2w6Aga8O9JywgaWNvbjogJ2ZhcyBmYS1jb21tZW50LW1lZGljYWwnLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENvbW1lbnRBbmRTaWduKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAodGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuaXNUeXBlRmlsZUt5U28oaXRlbS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmxheW91dCAhPT0gRW51bUZpbGVMYXlvdXQuU0lNUExFX0ZPUl9MSVNUICYmICF0aGlzLnBhcmVudFNldHRpbmcuaGlkZGVuQnV0UGhlKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdLw70gc+G7kSDEkcahbiB24buLIChVU0IpJywgaWNvbjogJ2ZhcyBmYS1zaWduYXR1cmUnLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNpZ25GaWxlRG9uVmkoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICh0aGlzLl9maWxlT2JqZWN0U2VydmljZS5pc1R5cGVGaWxlS3lTbyhpdGVtLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKClcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMubGF5b3V0ICE9PSBFbnVtRmlsZUxheW91dC5TSU1QTEVfRk9SX0xJU1QgJiYgIXRoaXMucGFyZW50U2V0dGluZy5oaWRkZW5LeVNvRG9uVmkpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1ThuqNpIHbhu4EnLCBpY29uOiAnZmFzIGZhLWRvd25sb2FkJywgY29tbWFuZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogISh0aGlzLmxheW91dCA9PT0gRW51bUZpbGVMYXlvdXQuU0lNUExFICYmIHRoaXMucmVhZG9ubHkpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1NhbyBjaMOpcCDEkcaw4budbmcgZOG6q24nLCBpY29uOiAnZmFzIGZhLWxpbmsnLCBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvcHlEb3dubG9hZExpbmsoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICEodGhpcy5sYXlvdXRTaW1wbGVBbGwgJiYgdGhpcy5yZWFkb25seSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnxJDhu5VpIHTDqm4nLCBpY29uOiAnZmFzIGZhLWVyYXNlcicsIGNvbW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuYW1lRmlsZShpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuY2hlY2tJc1JlYWRPbmx5KClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdYZW0gY8OhYyBwaGnDqm4gYuG6o24ga2jDoWMnLCBpY29uOiAnZmFzIGZhLWhpc3RvcnknLCBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5GaWxlVmVyc2lvbnMoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLmNoZWNrSXNSZWFkT25seSgpICYmIHRoaXMuc2hvd0ZpbGVWZXJzaW9uXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnWMOzYSB04buHcCB0aW4nLCBpY29uOiAnZmFyIGZhLXRyYXNoLWFsdCcsIGNvbW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlRmlsZShpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuY2hlY2tJc1JlYWRPbmx5KClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc1RyZWUpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnWGVtIGNoaSB0aeG6v3QnLCBpY29uOiAncGkgcGktc2VhcmNoJywgY29tbWFuZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RldGFpbChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnxJDhu5VpIHTDqm4gdGjGsCBt4bulYycsIGljb246ICdwaSBwaS1wZW5jaWwnLCBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5hbWVGb2xkZXIoaXRlbS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnVOG6o2kgduG7gScsIGljb246ICdmYXMgZmEtZG93bmxvYWQnLCBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBuZXcgRmlsZUV4cGxvcmVySXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbC5pZCA9IGl0ZW0uZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbC5pc0ZpbGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkKG1vZGVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdU4bqjaSB24buBJywgaWNvbjogJ2ZhcyBmYS1kb3dubG9hZCcsIGNvbW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdYw7NhIHRoxrAgbeG7pWMnLCBpY29uOiAnZmFyIGZhLXRyYXNoLWFsdCcsIGNvbW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUZvbGRlcihpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5jaGVja0lzUmVhZE9ubHkoKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjaGVja0lzUmVhZE9ubHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuYmFzZVBlcm1pc3Npb24gPT0gUGVybWlzc2lvbkJhc2UuUkVBRDtcbiAgICB9XG5cbiAgICBoYW5kbGVDbGlja0ZpbGVOYW1lKGl0ZW0pIHtcbiAgICAgICAgaWYgKCFpdGVtLmNhblZpZXdPbmxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMuZG93bmxvYWQoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5PYmplY3QoaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBtb2RpZnlHcmlkSW5mbyhncmlkSW5mbzogR3JpZEluZm8pIHtcbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuUGFnZVNldHRpbmcpIHtcbiAgICAgICAgICAgIGdyaWRJbmZvLnBhZ2VJbmZvLnBhZ2VTaXplID0gOTk5O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlFbnRpdHlLZXkpIHtcbiAgICAgICAgICAgIGdyaWRJbmZvLmZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcignZW50aXR5S2V5cycsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLl9lbnRpdHlLZXkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGdyaWRJbmZvLmZpbHRlcnMuc3BsaWNlKDAsIDAsIHRoaXMubmV3RmlsdGVyKCdwYXJlbnRGb2xkZXJJZCcsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBhZnRlckdldERhdGEoKSB7XG4gICAgICAgIGNvbnN0IHRlbXBEYXRhU291cmNlID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaW5kIGluIHRoaXMubW9kZWwuZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMubW9kZWwuZGF0YVNvdXJjZVtpbmRdO1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlU2lnbmF0dXJlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2Uuc3VwcG9ydERpZ2l0YWxTaWduYXR1cmUoaXRlbS5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmdldFNpZ25hdHVyZUluZm9CeUZpbGVJZChpdGVtLmlkKS50aGVuKHJzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzICYmIHJzLmRhdGE/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2lnbmF0dXJlcyA9IHJzLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5sYXN0U2lnbmF0dXJlID0gcnMuZGF0YVtycy5kYXRhLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpdGVtLmZpbGVFeHBsb3Jlckl0ZW1UeXBlID09PSBGaWxlRXhwbG9yZXJJdGVtVHlwZS5Gb2xkZXIpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmNsYXNzID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5leHRlbnNpb24pIHtcbiAgICAgICAgICAgICAgICBpdGVtLmltYWdlSWNvbiA9IGAvYXNzZXRzL2ltYWdlcy9maWxlLWV4dC9pY29uJHtpdGVtLmV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpfS5wbmdgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpdGVtLmNhblZpZXdPbmxpbmUgPSB0aGlzLl9maWxlRXhwbG9yZXJOZXdTZXJ2aWNlLmlzU3VwcG9ydGVkVmlld09ubGluZShpdGVtLm5hbWUpO1xuICAgICAgICAgICAgaWYgKCFpdGVtLmV4dGVuc2lvbiB8fCBpdGVtLmV4dGVuc2lvbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4RXh0ZW5zaW9uID0gaXRlbS5uYW1lLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4RXh0ZW5zaW9uICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmV4dGVuc2lvbiA9IGl0ZW0ubmFtZS5zdWJzdHJpbmcoaW5kZXhFeHRlbnNpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBEYXRhU291cmNlLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gdGVtcERhdGFTb3VyY2U7XG4gICAgICAgIHRoaXMuc2V0RGF0YXNvdXJjZSh0aGlzLm1vZGVsLmRhdGFTb3VyY2UpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl91bnN1YmNyaWJsZUFsbC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX3Vuc3ViY3JpYmxlQWxsLmNvbXBsZXRlKCk7XG4gICAgICAgIGlmICh0aGlzLmZpbGVEYXRhU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5maWxlRGF0YVNlcnZpY2UudW5yZWdpc3Rlcih0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LnVuU3Vic2NyaWJlKCdLeVNvU2ltVGhhbmhDb25nJyk7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiBGVU5DVElPTiBDT0xVTU4gTUFOVUxBVElPTi5cbiAgICBnZXRCdXR0b25JY29uKGV4cGxvcmVySXRlbSkge1xuICAgICAgICBpZiAoZXhwbG9yZXJJdGVtLmlzRmlsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncGkgcGktcGVuY2lsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAncGkgcGktZXllJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAncGkgcGktcGVuY2lsJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEJ1dHRvblRvb2x0aXAoZXhwbG9yZXJJdGVtKSB7XG4gICAgICAgIGlmIChleHBsb3Jlckl0ZW0uaXNGaWxlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdDaOG7iW5oIHPhu61hJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnWGVtIHRy4buxYyB0dXnhur9uJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnxJDhu5VpIHTDqm4nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25CdXR0b25DbGljayhleHBsb3Jlckl0ZW0pIHtcbiAgICAgICAgaWYgKGV4cGxvcmVySXRlbS5pc0ZpbGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRGaWxlKGV4cGxvcmVySXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5PYmplY3QoZXhwbG9yZXJJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuYW1lRm9sZGVyKGV4cGxvcmVySXRlbS5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRNZW51SXRlbXMoZXhwbG9yZGVySXRlbSkge1xuICAgICAgICByZXR1cm4gZXhwbG9yZGVySXRlbS5pc0ZpbGUgPyB0aGlzLmRhdGEuaXRlbXNNZW51RmlsZSA6IHRoaXMuZGF0YS5pdGVtc01lbnVGb2xkZXI7XG4gICAgfVxuXG4gICAgb25Ecm9wZG93bkNsaWNrKGV4cGxvcmVySXRlbSkge1xuICAgICAgICBpZiAoZXhwbG9yZXJJdGVtLmlzRmlsZSkge1xuICAgICAgICAgICAgY29uc3Qga3lTb0l0ZW0gPSB0aGlzLmRhdGEuaXRlbXNNZW51RmlsZS5maW5kKHggPT4geC5sYWJlbC50b0xvd2VyQ2FzZSgpID09ICdLw70gc+G7kScpO1xuICAgICAgICAgICAgaWYgKGt5U29JdGVtKSB7XG4gICAgICAgICAgICAgICAga3lTb0l0ZW0udmlzaWJsZSA9IHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2Uuc3VwcG9ydERpZ2l0YWxTaWduYXR1cmUoZXhwbG9yZXJJdGVtLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhLnNlbGVjdGVkRXhwbG9yZXJJdGVtID0gZXhwbG9yZXJJdGVtO1xuICAgIH1cblxuXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiBGSUxFIE1BTlVMQVRJT04uXG4gICAgLy8gVOG6o2kgbMOqbiBmaWxlLlxuICAgIG9uU2VsZWN0RmlsZSgpIHtcbiAgICAgICAgdGhpcy5maWxlQ29udHJvbC51cGxvYWQoKTtcbiAgICB9XG5cbiAgICBvbkJlZm9yZVVwbG9hZChldnQpIHtcbiAgICAgICAgdGhpcy5fbWFya0xvYWRpbmcoKTtcbiAgICAgICAgZXZ0LmZvcm1EYXRhLmFwcGVuZCgnc2VydmljZUNvZGUnLCB0aGlzLnNlcnZpY2VDb2RlKTtcbiAgICAgICAgZXZ0LmZvcm1EYXRhLmFwcGVuZCgnZW50aXR5JywgdGhpcy5lbnRpdHkpO1xuICAgICAgICBldnQuZm9ybURhdGEuYXBwZW5kKCdlbnRpdHlLZXknLCB0aGlzLl9lbnRpdHlLZXkpO1xuICAgICAgICBldnQuZm9ybURhdGEuYXBwZW5kKCdpc1B1YmxpYycsIHRoaXMuaXNQdWJsaWMpO1xuICAgICAgICBldnQuZm9ybURhdGEuYXBwZW5kKCdmb2xkZXJJZCcsIHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xuICAgIH1cblxuICAgIG9uVXBsb2FkUHJvZ3Jlc3MoZXZ0KSB7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NWYWx1ZSA9IGV2dC5wcm9ncmVzcztcbiAgICB9XG5cbiAgICBoYW5kbGVTZWxlY3RGaWxlKGV2dCkge1xuICAgICAgICBpZiAoZXZ0LmVycm9yTWVzc2FnZXMgJiYgZXZ0LmVycm9yTWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKFxuICAgICAgICAgICAgICAgIGV2dC5lcnJvck1lc3NhZ2VzLm1hcChpdGVtID0+IGAke2l0ZW0uc3VtbWFyeX0ke2l0ZW0uZGV0YWlsfWApLmpvaW4oJzsgJyksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25VcGxvYWRlZChldnQpIHtcbiAgICAgICAgdGhpcy5fdW5tYXJrTG9hZGluZygpO1xuICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICAgICAgdGhpcy51cGxvYWRlZC5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgaGFuZGxlRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHRoaXMuZ2V0RXJyb3JNc2coZXJyb3IpKTtcbiAgICAgICAgdGhpcy5fdW5tYXJrTG9hZGluZygpO1xuICAgICAgICB0aGlzLmZpbGVDb250cm9sLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFcnJvck1zZyhlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3IuZXJyb3IgJiYgZXJyb3IuZXJyb3IuZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlUmVzdWx0OiBSZXNwb25zZVJlc3VsdCA9IGVycm9yLmVycm9yLmVycm9yO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlUmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VSZXN1bHQubWVzc2FnZSB8fCByZXNwb25zZVJlc3VsdC5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgIHJldHVybiAnQ8OzIGzhu5dpIHRyb25nIGzDumMgdXBsb2FkIGZpbGUnO1xuICAgIH1cblxuICAgIC8vIMSQ4buVaSB0w6puIGZpbGUuXG4gICAgcmVuYW1lRmlsZShpdGVtKSB7XG4gICAgICAgIHRoaXMuZm9ybXMucmVuYW1lRmlsZS5oZWFkZXIgPSAnxJDhu5VpIHTDqm4gdGjGsCBt4bulYyc7XG4gICAgICAgIHRoaXMuZm9ybXMucmVuYW1lRmlsZS5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAgIGZvcm1TdGF0ZTogRm9ybVN0YXRlLkVESVQsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgc2VydmljZUNvZGU6IHRoaXMuc2VydmljZUNvZGUsXG4gICAgICAgICAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcbiAgICAgICAgICAgICAgICBlbnRpdHlLZXk6IHRoaXMuX2VudGl0eUtleSxcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1zLnJlbmFtZUZpbGUuc2hvdyA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gWMOzYSBmaWxlLlxuICAgIGRlbGV0ZUZpbGUoZXhwbG9yZXJJdGVtOiBGaWxlRXhwbG9yZXJJdGVtKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlTXV0aXBsZShbZXhwbG9yZXJJdGVtXSk7XG4gICAgfVxuXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiBGT0xERVIgTUFOVUxBVElPTi5cbiAgICAvLyBU4bqhbyB0aMawIG3hu6VjLlxuICAgIGNyZWF0ZUZvbGRlcigpIHtcbiAgICAgICAgdGhpcy5mb3Jtcy5jcmVhdGVGb2xkZXIuZm9ybURhdGEgPSB7XG4gICAgICAgICAgICBmb3JtU3RhdGU6IEZvcm1TdGF0ZS5BREQsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgc2VydmljZUNvZGU6IHRoaXMuc2VydmljZUNvZGUsXG4gICAgICAgICAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcbiAgICAgICAgICAgICAgICBlbnRpdHlLZXk6IHRoaXMuX2VudGl0eUtleSxcbiAgICAgICAgICAgICAgICBwYXJlbnRGb2xkZXJJZDogdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1zLmNyZWF0ZUZvbGRlci5zaG93ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xuICAgIH1cblxuICAgIC8vIFhlbSBjaGkgdGnhur90XG4gICAgdmlld0RldGFpbChmb2xkZXJJZDogYW55KSB7XG4gICAgICAgIGlmIChmb2xkZXJJZCkge1xuICAgICAgICAgICAgdGhpcy5mb3Jtcy52aWV3RGV0YWlsLmZvcm1EYXRhID0geyAuLi50aGlzLmZvcm1Nb2RlbCB9O1xuICAgICAgICAgICAgdGhpcy5mb3Jtcy52aWV3RGV0YWlsLmZvcm1EYXRhLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5FRElUO1xuICAgICAgICAgICAgdGhpcy5mb3Jtcy52aWV3RGV0YWlsLmZvcm1EYXRhLmRhdGEgPSB7IGlkOiB0aGlzLnNlbGVjdGVkVHJlZU5vZGUuZGF0YSwgX19kaXNhYmxlRWRpdDogdHJ1ZSB9O1xuXG4gICAgICAgICAgICB0aGlzLmZvcm1zLnZpZXdEZXRhaWwuc2hvdyA9IHRydWU7XG4gICAgICAgICAgICAvLyB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuRURJVDtcbiAgICAgICAgICAgIC8vIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB7IGlkOiB0aGlzLnNlbGVjdGVkVHJlZU5vZGUuZGF0YSwgX19kaXNhYmxlRWRpdDogdHJ1ZSB9O1xuICAgICAgICAgICAgLy8gdGhpcy5zZWxlY3RlZFRyZWVOb2RlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE3hu58gdGjGsCBt4bulYy8gY2xpY2sgdGjGsCBt4bulYy5cbiAgICBnZXRGb2xkZXJDb250ZW50KGN1cnJlbnRGb2xkZXJJZD86IHN0cmluZywgZ29JbnNpZGUgPSBmYWxzZSkge1xuICAgICAgICBjdXJyZW50Rm9sZGVySWQgPSBjdXJyZW50Rm9sZGVySWQgfHwgdGhpcy5yb290Rm9sZGVySWQ7XG4gICAgICAgIHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQgPSBjdXJyZW50Rm9sZGVySWQ7XG4gICAgICAgIGlmICh0aGlzLmxheW91dCA9PT0gRW51bUZpbGVMYXlvdXQuU0lNUExFIHx8IHRoaXMubGF5b3V0ID09PSBFbnVtRmlsZUxheW91dC5TSU1QTEVfRk9SX0xJU1QpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuYmFzZVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICAgICAgaWYgKHRoaXMudXNlQnJlYWRjcnVtYnMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QnJlYWRjcnVtYnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFZhbGlkYXRlKCk7XG4gICAgfVxuXG4gICAgc2V0VmFsaWRhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkICE9IHRoaXMucm9vdEZvbGRlcklkKSB7XG4gICAgICAgICAgICAvLyB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XG4gICAgICAgICAgICAvLyB0aGlzLm9uQ2hhbmdlZC5lbWl0KHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xuICAgICAgICAgICAgLy8gdGhpcy5maXJlRXZlbnRDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIMSQ4buVaSB0w6puIHRoxrAgbeG7pWMuXG4gICAgcmVuYW1lRm9sZGVyKGZvbGRlcklkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5mb3Jtcy5jcmVhdGVGb2xkZXIuaGVhZGVyID0gJ8SQ4buVaSB0w6puIHRoxrAgbeG7pWMnO1xuICAgICAgICB0aGlzLmZvcm1zW3RoaXMuZm9ybUlkcy5jcmVhdGVGb2xkZXJdLmZvcm1EYXRhID0ge1xuICAgICAgICAgICAgZm9ybVN0YXRlOiBGb3JtU3RhdGUuRURJVCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlQ29kZTogdGhpcy5zZXJ2aWNlQ29kZSxcbiAgICAgICAgICAgICAgICBlbnRpdHk6IHRoaXMuZW50aXR5LFxuICAgICAgICAgICAgICAgIGVudGl0eUtleTogdGhpcy5fZW50aXR5S2V5LFxuICAgICAgICAgICAgICAgIGlkOiBmb2xkZXJJZCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1zLmNyZWF0ZUZvbGRlci5zaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBYw7NhIHRoxrAgbeG7pWMuXG4gICAgZGVsZXRlRm9sZGVyKGV4cGxvcmVySXRlbTogRmlsZUV4cGxvcmVySXRlbSkge1xuICAgICAgICB0aGlzLmRlbGV0ZU11dGlwbGUoW2V4cGxvcmVySXRlbV0pO1xuICAgIH1cblxuICAgIC8vID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4gQ09NTU9OIEZPTERFUiAmIEZJTEUgTUFOVUxBVElPTi5cbiAgICAvLyBN4bufIHRoxrAgbeG7pWMvIHThu4dwLlxuICAgIGFzeW5jIG9wZW5PYmplY3QoZXhwbG9yZXJJdGVtOiBGaWxlRXhwbG9yZXJJdGVtKSB7XG4gICAgICAgIGlmIChleHBsb3Jlckl0ZW0uaXNGaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5WaWV3T25saW5lID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuaXNTdXBwb3J0ZWRWaWV3T25saW5lKGV4cGxvcmVySXRlbS5uYW1lKTtcbiAgICAgICAgICAgIGlmIChjYW5WaWV3T25saW5lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuRmlsZVZpZXdlcihleHBsb3Jlckl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZChleHBsb3Jlckl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KGV4cGxvcmVySXRlbS5pZCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBYw7NhIG5oaeG7gXUgdGjGsCBt4bulYy8gdOG7h3AuXG4gICAgZGVsZXRlTXV0aXBsZShpdGVtczogRmlsZUV4cGxvcmVySXRlbVtdKSB7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlQ29uZmlybSgpXG4gICAgICAgICAgICAudGhlbihycyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFycykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbGRlclNlcnZpY2UuZGVsZXRlTXVsdGlwbGUoaXRlbXMpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGVsZXRlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmdCeVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBU4bqjaSB0aMawIG3hu6VjLyB04buHcC5cbiAgICBhc3luYyBkb3dubG9hZChleHBsb3Jlckl0ZW06IEZpbGVFeHBsb3Jlckl0ZW0pIHtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKGA8Yj5MxrB1IMO9ITwvYj48YnIvPjxici8+WMOhYyBuaOG6rW4gdOG6o2kgduG7gT9gLCAnVGjDtG5nIGLDoW8nKVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgY29uZmlybSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb25maXJtKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldEdlbmVyYXRlRG93bmxvYWRMaW5rTW9kZWwoZXhwbG9yZXJJdGVtKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmRvd25sb2FkTGluayhtb2RlbCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBjb3B5RG93bmxvYWRMaW5rKGV4cGxvcmVySXRlbTogRmlsZUV4cGxvcmVySXRlbSkge1xuICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0R2VuZXJhdGVEb3dubG9hZExpbmtNb2RlbChleHBsb3Jlckl0ZW0pO1xuICAgICAgICB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdlbmVyYXRlRG93bmxvYWRMaW5rKG1vZGVsKVxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuY29weU1lc3NhZ2UodGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZXRBbm9ueW1vdXNEb3dubG9hZFVybChycy5kYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJDDoyBzYW8gY2jDqXAgdsOgbyBi4buZIG5o4bubIHThuqFtLiDEkMaw4budbmcgZOG6q24gbsOgeSBz4bq9IGjhur90IGjhuqFuIHNhdSA2MCBnacOieSEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHRo4buDIHNhbyBjaMOpcCBsacOqbiBr4bq/dCB04bqjaSB04buHcCB0aW4hJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHRo4buDIHNhbyBjaMOpcCBsacOqbiBr4bq/dCB04bqjaSB04buHcCB0aW4hJyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBU4bqjaSBuaGnhu4F1IHRoxrAgbeG7pWMvIHThu4dwLlxuICAgIGFzeW5jIGRvd25sb2FkTXVsdGlwbGUoKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXM7XG4gICAgICAgIGNvbnN0IGhhc0l0ZW1zID0gc2VsZWN0ZWRJdGVtcyAmJiBzZWxlY3RlZEl0ZW1zLmxlbmd0aDtcbiAgICAgICAgaWYgKGhhc0l0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZG93bmxvYWQoc2VsZWN0ZWRJdGVtc1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJNb2RlbCA9IHNlbGVjdGVkSXRlbXMubWFwKGV4cGxvcmVySXRlbSA9PiB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldEdlbmVyYXRlRG93bmxvYWRMaW5rTW9kZWwoZXhwbG9yZXJJdGVtKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5kb3dubG9hZE11bHRpcGxlKGFyck1vZGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdlbmVyYXRlWmlwTGlua0FuZENvcHkoKSB7XG4gICAgICAgIGNvbnN0IGFyck1vZGVsID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLm1hcCh4ID0+IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0R2VuZXJhdGVEb3dubG9hZExpbmtNb2RlbCh4KSk7XG4gICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2VuZXJhdGVEb3dubG9hZExpbmtNdWx0aXBsZShhcnJNb2RlbCkudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzICYmIHJlcy5kYXRhICYmIHJlcy5kYXRhICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5jb3B5TWVzc2FnZSh0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldEFub255bW91c0Rvd25sb2FkVXJsKHJlcy5kYXRhKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCfEkMOjIHNhbyBjaMOpcCB2w6BvIGLhu5kgbmjhu5sgdOG6oW0uIMSQxrDhu51uZyBk4bqrbiBuw6B5IHPhur0gaOG6v3QgaOG6oW4gc2F1IDYwIGdpw6J5IScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdGjhu4Mgc2FvIGNow6lwIGxpw6puIGvhur90IHThuqNpIHThu4dwIHRpbiEnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goZXggPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZXgpO1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDw7MgduG6pW4gxJHhu4EgdHJvbmcgbMO6YyB04bqhbyBsaW5rIGNobyBmaWxlcycpO1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIGFzeW5jIG9wZW5GaWxlVmlld2VyKGV4cGxvcmVySXRlbTogRmlsZUV4cGxvcmVySXRlbSkge1xuICAgICAgICBjb25zdCBoYXNQaHlzaWNhbEZpbGUgPSBhd2FpdCB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmNoZWNrUGh5c2ljYWxGaWxlKGV4cGxvcmVySXRlbS5pZCk7XG4gICAgICAgIGlmICghaGFzUGh5c2ljYWxGaWxlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHThu5NuIHThuqFpIGZpbGUsIHZ1aSBsw7JuZyBsacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybXMuZmlsZVZpZXdlci5mb3JtRGF0YS5kYXRhID0ge1xuICAgICAgICAgICAgZmlsZUlkOiBleHBsb3Jlckl0ZW0uaWQsXG4gICAgICAgICAgICBpc0ZpbGVWZXJzaW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGZpbGVOYW1lOiBleHBsb3Jlckl0ZW0ubmFtZSxcbiAgICAgICAgICAgIHNlcnZpY2U6IGV4cGxvcmVySXRlbS5zZXJ2aWNlQ29kZSxcbiAgICAgICAgICAgIGVudGl0eTogZXhwbG9yZXJJdGVtLmVudGl0eSxcbiAgICAgICAgICAgIGVudGl0eUtleTogZXhwbG9yZXJJdGVtLmVudGl0eUtleSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmlld2VyLnNob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGNsb3NlRmlsZVZpZXdlcigpIHtcbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmlld2VyLnNob3cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xuICAgIH1cblxuICAgIC8vID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj5NT1ZFIEZJTEVTICYgRk9MREVSUy5cbiAgICBoYXNTZWxlY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXNcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gQ2jhu41uIHRoxrAgbeG7pWMvIGZpbGUgZGkgY2h1eeG7g24uXG4gICAgY2FuU2VsZWN0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuZGF0YS5tb3ZpbmcuaXNTZWxlY3RpbmdcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtc1xuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjYW5TZXRNb3ZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLm1vdmluZy5pc1NlbGVjdGluZ1xuICAgICAgICAgICAgJiYgdGhpcy5kYXRhLm1vdmluZy5zZWxlY3RlZEl0ZW1zXG4gICAgICAgICAgICAmJiB0aGlzLmRhdGEubW92aW5nLnNlbGVjdGVkSXRlbXMubGVuZ3RoO1xuICAgIH1cblxuICAgIG1vdmVFeHBsb3Jlckl0ZW1zKCkge1xuICAgICAgICBjb25zdCBjYW5Nb3ZlID0gIXRoaXMuZGF0YS5tb3ZpbmcuaXNTZWxlY3RpbmdcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtc1xuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aFxuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5kYXRhU291cmNlXG4gICAgICAgICAgICAmJiB0aGlzLm1vZGVsLmRhdGFTb3VyY2UubGVuZ3RoO1xuXG4gICAgICAgIGlmICghY2FuTW92ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhLm1vdmluZyA9IHtcbiAgICAgICAgICAgIGlzU2VsZWN0aW5nOiB0cnVlLFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtczogdGhpcy5fY29tbW9uU2VydmljZS5jbG9uZU9iamVjdCh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpLFxuICAgICAgICAgICAgc291cmNlRm9sZGVySWQ6IHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVGjhuqMgdGjGsCBt4bulYy8gZmlsZS5cbiAgICBzZXRNb3ZlRXhwbG9yZXJJdGVtcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEubW92aW5nLmlzU2VsZWN0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb2RlbCA9IHtcbiAgICAgICAgICAgIHNvdXJjZUZvbGRlcklkOiB0aGlzLmRhdGEubW92aW5nLnNvdXJjZUZvbGRlcklkLFxuICAgICAgICAgICAgdGFyZ2V0Rm9sZGVySWQ6IHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQsXG4gICAgICAgICAgICBsc3RGaWxlRXhwbG9yZXJJdGVtczogdGhpcy5kYXRhLm1vdmluZy5zZWxlY3RlZEl0ZW1zLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2ZvbGRlclNlcnZpY2UubW92ZUV4cGxvcmVySXRlbXMobW9kZWwpXG4gICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdEaSBjaHV54buDbiB0aMOgbmggY8O0bmcnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLm1vdmluZyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQuG7jyBkaSBjaHV54buDbi5cbiAgICBjYW5jZWxNb3ZlKCkge1xuICAgICAgICB0aGlzLmRhdGEubW92aW5nID0ge307XG4gICAgfVxuXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PlZFUlNJT04uXG4gICAgb3BlbkZpbGVWZXJzaW9ucyhmaWxlOiBGaWxlRXhwbG9yZXJJdGVtKSB7XG4gICAgICAgIHRoaXMuZm9ybXMuZmlsZVZlcnNpb25MaXN0LmZpbGVJZCA9IGZpbGUuaWQ7XG5cbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmVyc2lvbkxpc3Quc2hvdyA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PlZJRVcgT05MSU5FLlxuICAgIGVkaXRGaWxlKGZpbGU6IEZpbGVFeHBsb3Jlckl0ZW0pIHtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCfEkGFuZyBr4bq/dCBu4buRaSBt4bufIOG7qW5nIGThu6VuZycpO1xuICAgICAgICB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuY3JlYXRlTmV3TWlub3JWZXJzaW9uKGZpbGUuaWQsICcnLCBmYWxzZSlcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlVmVyc2lvbiA9IDxGaWxlVmVyc2lvbkRUTz5yZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVVcmwgPSB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuZ2V0RmlsZVZlcnNpb25Eb3dubG9hZFVybChmaWxlVmVyc2lvbi5pZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IG5ldyBUbkNsaWVudENvbW1hbmQoKTtcbiAgICAgICAgICAgICAgICBjb21tYW5kLmNvbW1hbmRUeXBlID0gQ29tbWFuZFR5cGUuRWRpdEZpbGU7XG4gICAgICAgICAgICAgICAgY29tbWFuZC5rZXkgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuc2lnbmFsci5jbGllbnRLZXk7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdEZpbGVDb21tYW5kID0gbmV3IEVkaXRGaWxlQ29tbWFuZCgpO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlU2VydmljZUVuZHBvaW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnQ7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLnVwbG9hZEZpbGVBcGkgPSB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuZ2V0VXBsb2FkRmlsZVZlcnNpb25BcGlVcmwoKTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQucmVtb3ZlRmlsZUFwaSA9IHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5nZXRSZW1vdmVGaWxlVmVyc2lvbkFwaVVybCgpO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlVXJsID0gZmlsZVVybDtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuaXNEcmFmdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmdyb3VwRmlsZU5hbWUgPSBmaWxlLm5hbWU7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmZpbGVOYW1lID0gZmlsZS5uYW1lO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC52ZXJzaW9uID0gZmlsZVZlcnNpb24udmVyc2lvbk5hbWU7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmZpbGVWZXJzaW9uSWQgPSBmaWxlVmVyc2lvbi5pZDtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuYWNjZXNzVG9rZW4gPSB0aGlzLl9hdXRoZW5TZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCk7XG4gICAgICAgICAgICAgICAgY29tbWFuZC5kYXRhID0gZWRpdEZpbGVDb21tYW5kO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fdG5DbGllbnRTZXJ2aWNlLnNlbmRDb21tYW5kKGNvbW1hbmQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2UudW5TdWJzY3JpYmVWaWV3Q29kZShudWxsLCAnRklMRS5WRVJTSU9OLlVQREFURUQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaWduYWxyU2VydmljZS5zdGFydChudWxsLCAnRklMRS5WRVJTSU9OLlVQREFURUQnLCBkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvYmoubWVzc2FnZS5jb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvYmouTWVzc2FnZS5Db250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZXRMaXN0RmlsZXModGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChDb21tb25FcnJvckNvZGUuRVJST1JfU0VSVklDRV9OT1RfUlVOID09PSBlcnJvci5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dSZXNwb25zZUVycm9yKDAsIG51bGwsICdGaWxlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0ZJTEVfRVhQTE9SRVIuTUVTU0FHRV9FUlJPUl9IRUFERVInKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGSUxFX0VYUExPUkVSLk1FU1NBR0VfRVJST1JfREVUQUlMJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBsaWZlOiA1MDAwLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IEJSRUFEQ1JVTUJTLlxuICAgIGFzeW5jIHNldEJyZWFkY3J1bWJzKCkge1xuICAgICAgICBjb25zdCBjdXJyZW50Rm9sZGVySWQgPSB0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkO1xuICAgICAgICBpZiAoY3VycmVudEZvbGRlcklkKSB7XG4gICAgICAgICAgICBjb25zdCByc0ZvbGRlciA9IGF3YWl0IHRoaXMuX2ZvbGRlclNlcnZpY2UuZ2V0RGV0YWlsV2l0aFBlcm1pc3Npb24oY3VycmVudEZvbGRlcklkKTtcbiAgICAgICAgICAgIGlmIChyc0ZvbGRlci5kYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlUGVybWlzc2lvbiA9IHJzRm9sZGVyLmRhdGEuYmFzZVBlcm1pc3Npb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBycyA9IGF3YWl0IHRoaXMuX2ZvbGRlclNlcnZpY2UuZ2V0RnVsbEZvbGRlclBhdGgoY3VycmVudEZvbGRlcklkKTtcbiAgICAgICAgICAgIGlmIChycy5zdWNjZXNzICYmIHJzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAocnMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJlYWRjcnVtYnMgPSBycy5kYXRhLm1hcChmb2xkZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogaW5kZXggPT0gMCA/IHRoaXMuZ2V0Um9vdEZvbGRlck5hbWUoZm9sZGVyLm5hbWUpIDogZm9sZGVyLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGZvbGRlci5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUNsYXNzOiBmb2xkZXIuaWQgIT0gY3VycmVudEZvbGRlcklkID8gJ2ZtLWNsaWNrYWJsZScgOiAnZm0tY3VycmVudC1mb2xkZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQoZm9sZGVyLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnJlYWRjcnVtYjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChicmVhZGNydW1icy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFkY3J1bWJzWzBdLmxhYmVsID09ICdUaMawIG3hu6VjIMSRw61uaCBrw6htJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFkY3J1bWJzLnNwbGljZSgwLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYnJlYWRjcnVtYnMgPSBicmVhZGNydW1icztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5icmVhZGNydW1icyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5icmVhZGNydW1icyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5icmVhZGNydW1icyA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Um9vdEZvbGRlck5hbWUoZm9sZGVyTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZvbGRlck5hbWVQcmVmaXggPSAnVGjGsCBt4bulYyAnO1xuICAgICAgICBsZXQgdHlwZU9mRm9sZGVyID0gJyc7XG4gICAgICAgIGlmIChmb2xkZXJOYW1lLmluY2x1ZGVzKCd1c2VyLnVzZXInKSkge1xuICAgICAgICAgICAgdHlwZU9mRm9sZGVyID0gJ2Phu6dhIHTDtGknO1xuICAgICAgICAgICAgdGhpcy5sb2FkVHJlZSh0eXBlT2ZGb2xkZXIsICd1c2VyJywgJ3VzZXInLCB0aGlzLnJvb3RNb2RlbC5jdXJyZW50VXNlci51c2VySWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZvbGRlck5hbWUuaW5jbHVkZXMoJ2Nvbmd2aWVjJykpIHtcbiAgICAgICAgICAgIHR5cGVPZkZvbGRlciA9ICdjw7RuZyB2aeG7h2MnO1xuICAgICAgICAgICAgdGhpcy5sb2FkVHJlZSh0eXBlT2ZGb2xkZXIsIHRoaXMuc2VydmljZUNvZGUsIHRoaXMuZW50aXR5LCB0aGlzLl9lbnRpdHlLZXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZvbGRlck5hbWUuaW5jbHVkZXMoJ3ZhbmJhbicpKSB7XG4gICAgICAgICAgICB0eXBlT2ZGb2xkZXIgPSAndsSDbiBi4bqjbic7XG4gICAgICAgICAgICB0aGlzLmxvYWRUcmVlKHR5cGVPZkZvbGRlciwgdGhpcy5zZXJ2aWNlQ29kZSwgdGhpcy5lbnRpdHksIHRoaXMuX2VudGl0eUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0eXBlT2ZGb2xkZXIgPSAnxJHDrW5oIGvDqG0nO1xuICAgICAgICAgICAgdGhpcy5sb2FkVHJlZSh0eXBlT2ZGb2xkZXIsIHRoaXMuc2VydmljZUNvZGUsIHRoaXMuZW50aXR5LCB0aGlzLl9lbnRpdHlLZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke2ZvbGRlck5hbWVQcmVmaXh9JHt0eXBlT2ZGb2xkZXJ9YDtcbiAgICB9XG5cbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IFNJR04uXG4gICAgLy8gVE9ETzogTMawdSDDvSB44butIGzDvSB0csaw4budbmcgZG91YmxlIGNsaWNrIHbDoG8gbsO6dFxuICAgIHNpZ25GaWxlKGZpbGU6IEZpbGVFeHBsb3Jlckl0ZW0pIHtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKCdC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBtdeG7kW4ga8O9IHPhu5EgdsSDbiBi4bqjbiBuw6B5PycpLnRoZW4oYXN5bmMgcnMgPT4ge1xuICAgICAgICAgICAgaWYgKHJzKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNvdXJjZUZpbGVJZCA9IGZpbGUuaWQ7XG4gICAgICAgICAgICAgICAgbGV0IHNvdXJjZUZpbGUgPSBmaWxlO1xuICAgICAgICAgICAgICAgIC8vIEvDvSBz4buRIGZpbGUgd29yZCAtIGPhuqduIGNvbnZlcnQgc2FuZyBwZGYgdHLGsOG7m2NcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5uZWVkQ29udmVydEJlZm9yZVNpZ24oZmlsZS5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IGZpbGUgYmVmb3JlIHNpZ25cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJzQ29udmVydCA9IGF3YWl0IHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuY29udmVydERvY3VtZW50VG9QZGZBbmRTYXZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUlkOiBzb3VyY2VGaWxlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jaGFuZ2VGaWxlRXh0ZW5zaW9uKGZpbGUubmFtZSwgJ3BkZicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRlckluc3RhbmNlSWQ6IGZpbGUucGFyZW50Rm9sZGVySWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXJUeXBlOiB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnVzZXJJZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJzQ29udmVydCB8fCAhcnNDb252ZXJ0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYEPDsyBs4buXaSB44bqjeSByYSBraGkgY2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIMSR4buDIGvDvS4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcyhgQ2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIHRow6BuaCBjw7RuZ2ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGVJZCA9IHJzQ29udmVydC5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGUgPSB7IGlkOiBzb3VyY2VGaWxlSWQgfSBhcyBGaWxlRXhwbG9yZXJJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYEPDsyBs4buXaSB44bqjeSByYSBraGkgY2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIMSR4buDIGvDvS4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5nZW5lcmF0ZUxpbmtEb3dubG9hZCh7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVJZDogc291cmNlRmlsZUlkLFxuICAgICAgICAgICAgICAgIH0gYXMgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8pLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldERvd25sb2FkRm9yU2lnblVybChycy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJtcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBwcm1zWydGaWxlVXBsb2FkSGFuZGxlciddID0gYCR7dGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnR9LyR7dGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaVZlcnNpb259L0t5U29GaWxlL1NhdmVQaHlzaWNhbFNpZ25lZEZpbGVgO1xuICAgICAgICAgICAgICAgICAgICBwcm1zWydTZXNzaW9uSWQnXSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBwcm1zWydGaWxlTmFtZSddID0gdXJsO1xuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHZhcmlhYmxlLW5hbWVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QganNvbl9wcm1zID0gSlNPTi5zdHJpbmdpZnkocHJtcyk7XG4gICAgICAgICAgICAgICAgICAgIHZnY2Ffc2lnbl9hcHByb3ZlZChqc29uX3BybXMsIChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0T2JqID0gSlNPTi5wYXJzZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE9iai5GaWxlU2VydmVyICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5zYXZlU2lnbmVkRmlsZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGU6IHNvdXJjZUZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBGaWxlSWQ6IHJlc3VsdE9iai5GaWxlU2VydmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4ocnNzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnS8O9IHPhu5EgdGjDoG5oIGPDtG5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGRDb21tZW50KGZpbGU6IEZpbGVFeHBsb3Jlckl0ZW0pIHtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKCdC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBtdeG7kW4gYsO6dCBwaMOqIHbEg24gYuG6o24gbsOgeT8nKS50aGVuKGFzeW5jIHJzID0+IHtcbiAgICAgICAgICAgIGlmIChycykge1xuICAgICAgICAgICAgICAgIGxldCBzb3VyY2VGaWxlSWQgPSBmaWxlLmlkO1xuICAgICAgICAgICAgICAgIGxldCBzb3VyY2VGaWxlID0gZmlsZTtcbiAgICAgICAgICAgICAgICAvLyBLw70gc+G7kSBmaWxlIHdvcmQgLSBj4bqnbiBjb252ZXJ0IHNhbmcgcGRmIHRyxrDhu5tjXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UubmVlZENvbnZlcnRCZWZvcmVTaWduKGZpbGUubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCBmaWxlIGJlZm9yZSBzaWduXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByc0NvbnZlcnQgPSBhd2FpdCB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmNvbnZlcnREb2N1bWVudFRvUGRmQW5kU2F2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VJZDogc291cmNlRmlsZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuY2hhbmdlRmlsZUV4dGVuc2lvbihmaWxlLm5hbWUsICdwZGYnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkZXJJbnN0YW5jZUlkOiBmaWxlLnBhcmVudEZvbGRlcklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyVHlwZTogdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS51c2VySWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyc0NvbnZlcnQgfHwgIXJzQ29udmVydC5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGBDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGNodXnhu4NuIMSR4buVaSB0w6BpIGxp4buHdSAke2ZpbGUubmFtZX0gdGjDoG5oIHBkZiDEkeG7gyBrw70uIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoYENodXnhu4NuIMSR4buVaSB0w6BpIGxp4buHdSAke2ZpbGUubmFtZX0gdGjDoG5oIHBkZiB0aMOgbmggY8O0bmdgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlSWQgPSByc0NvbnZlcnQuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlID0geyBpZDogc291cmNlRmlsZUlkIH0gYXMgRmlsZUV4cGxvcmVySXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGBDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGNodXnhu4NuIMSR4buVaSB0w6BpIGxp4buHdSAke2ZpbGUubmFtZX0gdGjDoG5oIHBkZiDEkeG7gyBrw70uIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuZ2VuZXJhdGVMaW5rRG93bmxvYWQoe1xuICAgICAgICAgICAgICAgICAgICBmaWxlSWQ6IHNvdXJjZUZpbGVJZCxcbiAgICAgICAgICAgICAgICB9IGFzIEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPKS50aGVuKHJzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZXREb3dubG9hZEZvclNpZ25VcmwocnMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBybXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgcHJtc1snRmlsZVVwbG9hZEhhbmRsZXInXSA9IGAke3RoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZUVuZHBvaW50fS8ke3RoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS9LeVNvRmlsZS9TYXZlUGh5c2ljYWxTaWduZWRGaWxlYDtcbiAgICAgICAgICAgICAgICAgICAgcHJtc1snU2Vzc2lvbklkJ10gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgcHJtc1snRmlsZU5hbWUnXSA9IHVybDtcblxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHZhcmlhYmxlLW5hbWVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QganNvbl9wcm1zID0gSlNPTi5zdHJpbmdpZnkocHJtcyk7XG4gICAgICAgICAgICAgICAgICAgIHZnY2FfY29tbWVudChqc29uX3BybXMsIChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0T2JqID0gSlNPTi5wYXJzZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE9iai5GaWxlU2VydmVyICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5zYXZlU2lnbmVkRmlsZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGU6IHNvdXJjZUZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBGaWxlSWQ6IHJlc3VsdE9iai5GaWxlU2VydmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4ocnNzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnVOG6oW8gYsO6dCBwaMOqIHRow6BuaCBjw7RuZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgYWRkQ29tbWVudEFuZFNpZ24oZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xuICAgICAgICBjb25zdCBycyA9IGF3YWl0IHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIHThuqFvIGLDunQgcGjDqiB2w6Aga8O9IHbEg24gYuG6o24gbsOgeT8nKTtcblxuICAgICAgICBpZiAocnMpIHtcbiAgICAgICAgICAgIGxldCBzb3VyY2VGaWxlSWQgPSBmaWxlLmlkO1xuICAgICAgICAgICAgbGV0IHNvdXJjZUZpbGUgPSBmaWxlO1xuXG4gICAgICAgICAgICAvLyBLw70gc+G7kSBmaWxlIHdvcmQgLSBj4bqnbiBjb252ZXJ0IHNhbmcgcGRmIHRyxrDhu5tjXG4gICAgICAgICAgICBpZiAodGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5uZWVkQ29udmVydEJlZm9yZVNpZ24oZmlsZS5uYW1lKSkge1xuICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgZmlsZSBiZWZvcmUgc2lnblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJzQ29udmVydCA9IGF3YWl0IHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuY29udmVydERvY3VtZW50VG9QZGZBbmRTYXZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlSWQ6IHNvdXJjZUZpbGVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuY2hhbmdlRmlsZUV4dGVuc2lvbihmaWxlLm5hbWUsICdwZGYnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRlckluc3RhbmNlSWQ6IGZpbGUucGFyZW50Rm9sZGVySWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvd25lclR5cGU6IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudXNlcklkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghcnNDb252ZXJ0IHx8ICFyc0NvbnZlcnQuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGBDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGNodXnhu4NuIMSR4buVaSB0w6BpIGxp4buHdSAke2ZpbGUubmFtZX0gdGjDoG5oIHBkZiDEkeG7gyBrw70uIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcyhgQ2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIHRow6BuaCBjw7RuZ2ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmlsZUlkID0gcnNDb252ZXJ0LmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlID0geyBpZDogc291cmNlRmlsZUlkIH0gYXMgRmlsZUV4cGxvcmVySXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYEPDsyBs4buXaSB44bqjeSByYSBraGkgY2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIMSR4buDIGvDvS4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdWApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkb3dubG9hZExpbmsgPSBhd2FpdCB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmdlbmVyYXRlTGlua0Rvd25sb2FkKHtcbiAgICAgICAgICAgICAgICBmaWxlSWQ6IHNvdXJjZUZpbGVJZCxcbiAgICAgICAgICAgIH0gYXMgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8pO1xuXG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldERvd25sb2FkRm9yU2lnblVybChkb3dubG9hZExpbmsuZGF0YSk7XG4gICAgICAgICAgICBjb25zdCBwcm1zID0ge1xuICAgICAgICAgICAgICAgIEZpbGVVcGxvYWRIYW5kbGVyOiBgJHt0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpRG9tYWluLmZpbGVFbmRwb2ludH0vJHt0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vS3lTb0ZpbGUvU2F2ZVBoeXNpY2FsU2lnbmVkRmlsZWAsXG4gICAgICAgICAgICAgICAgU2Vzc2lvbklkOiAnJyxcbiAgICAgICAgICAgICAgICBGaWxlTmFtZTogdXJsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBqc29uX3BybXMgPSBKU09OLnN0cmluZ2lmeShwcm1zKTtcblxuICAgICAgICAgICAgLy8gV3JhcCBjYWxsYmFjay1iYXNlZCBmdW5jdGlvbnMgaW4gUHJvbWlzZXNcbiAgICAgICAgICAgIGNvbnN0IGNvbW1lbnRSZXN1bHQgPSBhd2FpdCBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgICAgdmdjYV9jb21tZW50KGpzb25fcHJtcywgKHJlc3VsdDogYW55KSA9PiByZXNvbHZlKHJlc3VsdCkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdE9iaiA9IEpTT04ucGFyc2UoY29tbWVudFJlc3VsdCk7XG4gICAgICAgICAgICBjb25zdCBkb3dubG9hZExpbmsyID0gYXdhaXQgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5nZW5lcmF0ZUxpbmtEb3dubG9hZCh7XG4gICAgICAgICAgICAgICAgZmlsZUlkOiByZXN1bHRPYmouRmlsZVNlcnZlcixcbiAgICAgICAgICAgIH0gYXMgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8pO1xuXG4gICAgICAgICAgICBjb25zdCB1cmwyID0gdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZXREb3dubG9hZEZvclNpZ25VcmwoZG93bmxvYWRMaW5rMi5kYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHBybXMyID0ge1xuICAgICAgICAgICAgICAgIEZpbGVVcGxvYWRIYW5kbGVyOiBgJHt0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpRG9tYWluLmZpbGVFbmRwb2ludH0vJHt0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vS3lTb0ZpbGUvU2F2ZVBoeXNpY2FsU2lnbmVkRmlsZWAsXG4gICAgICAgICAgICAgICAgU2Vzc2lvbklkOiAnJyxcbiAgICAgICAgICAgICAgICBGaWxlTmFtZTogdXJsMlxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QganNvbl9wcm1zMiA9IEpTT04uc3RyaW5naWZ5KHBybXMyKTtcblxuICAgICAgICAgICAgY29uc3Qgc2lnblJlc3VsdCA9IGF3YWl0IG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICB2Z2NhX3NpZ25fYXBwcm92ZWQoanNvbl9wcm1zMiwgKHJlc3VsdDogYW55KSA9PiByZXNvbHZlKHJlc3VsdCkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNpZ25SZXN1bHRPYmogPSBKU09OLnBhcnNlKHNpZ25SZXN1bHQpO1xuXG4gICAgICAgICAgICBpZiAoc2lnblJlc3VsdE9iai5GaWxlU2VydmVyICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5zYXZlU2lnbmVkRmlsZSh7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGU6IHNvdXJjZUZpbGUsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBGaWxlSWQ6IHNpZ25SZXN1bHRPYmouRmlsZVNlcnZlcixcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnVOG6oW8gYsO6dCBwaMOqIHbDoCBrw70gdGjDoG5oIGPDtG5nJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaWduRmlsZURvblZpKGZpbGU6IEZpbGVFeHBsb3Jlckl0ZW0pIHtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlXG4gICAgICAgICAgICAuc2hvd0NvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiBrw70gc+G7kSDEkcahbiB24buLIHbEg24gYuG6o24gbsOgeT8nKVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKHJzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzb3VyY2VGaWxlSWQgPSBmaWxlLmlkO1xuICAgICAgICAgICAgICAgICAgICBsZXQgc291cmNlRmlsZSA9IGZpbGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLm5lZWRDb252ZXJ0QmVmb3JlU2lnbihmaWxlLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IGZpbGUgYmVmb3JlIHNpZ25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcnNDb252ZXJ0ID0gYXdhaXQgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jb252ZXJ0RG9jdW1lbnRUb1BkZkFuZFNhdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUlkOiBzb3VyY2VGaWxlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuY2hhbmdlRmlsZUV4dGVuc2lvbihmaWxlLm5hbWUsICdwZGYnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVySW5zdGFuY2VJZDogZmlsZS5wYXJlbnRGb2xkZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXJUeXBlOiB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnVzZXJJZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcnNDb252ZXJ0IHx8ICFyc0NvbnZlcnQuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYEPDsyBs4buXaSB44bqjeSByYSBraGkgY2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIMSR4buDIGvDvS4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoYENodXnhu4NuIMSR4buVaSB0w6BpIGxp4buHdSAke2ZpbGUubmFtZX0gdGjDoG5oIHBkZiB0aMOgbmggY8O0bmdgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGVJZCA9IHJzQ29udmVydC5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlID0geyBpZDogc291cmNlRmlsZUlkIH0gYXMgRmlsZUV4cGxvcmVySXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBjaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgxJHhu4Mga8O9LiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZW5lcmF0ZUxpbmtEb3dubG9hZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGaWxlVmVyc2lvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUlkOiBzb3VyY2VGaWxlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGFzIEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZXREb3dubG9hZEZvclNpZ25VcmwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBybXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm1zWydGaWxlVXBsb2FkSGFuZGxlciddID0gYCR7dGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnR9LyR7dGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaVZlcnNpb259L0t5U29GaWxlL1NhdmVQaHlzaWNhbFNpZ25lZEZpbGVgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybXNbJ1Nlc3Npb25JZCddID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJtc1snRmlsZU5hbWUnXSA9IHVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnV54buBbiBz4buRLCBuZ8OgeSBrw70gc+G7kSBwaMOybmcgYmFuIG7hur91IGPhuqduXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQuY29udHJvbCAmJiB0aGF0LmNvbnRyb2wuZGF0YUt5U29Eb25WaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhS3lTb0RvblZpID0gKDxGdW5jdGlvbj50aGF0LmNvbnRyb2wuZGF0YUt5U29Eb25WaSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFLeVNvRG9uVmkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGzhuqV5IHPhu5EgRG9jTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YUt5U29Eb25WaS5kb2NOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm1zWydEb2NOdW1iZXInXSA9IGRhdGFLeVNvRG9uVmkuZG9jTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbOG6pXkgbmfDoHkgYmFuIGjDoG5oIHZiIMSRaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFLeVNvRG9uVmkuaXNzdWVkRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybXNbJ0lzc3VlZERhdGUnXSA9IGRhdGFLeVNvRG9uVmkuaXNzdWVkRGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdmFyaWFibGUtbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25fcHJtcyA9IEpTT04uc3RyaW5naWZ5KHBybXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZnY2Ffc2lnbl9pc3N1ZWQoanNvbl9wcm1zLCAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0T2JqID0gSlNPTi5wYXJzZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0T2JqLkZpbGVTZXJ2ZXIgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2F2ZVNpZ25lZEZpbGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlOiBzb3VyY2VGaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRmlsZUlkOiByZXN1bHRPYmouRmlsZVNlcnZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyc3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnS8O9IHPhu5EgdGjDoG5oIGPDtG5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNpZ25LeVNpbUZpbGUoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xuICAgICAgICB0aGlzLmZvcm1zLmt5U29TaW0uc2hvdyA9IHRydWU7XG4gICAgICAgIHRoaXMubW9kZWwuYWR2YW5jZURhdGEgPSBmaWxlO1xuICAgIH1cblxuICAgIGFzeW5jIHNoYXJlRm9sZGVyKGZpbGU6IEZpbGVFeHBsb3Jlckl0ZW0pIHtcbiAgICAgICAgdGhpcy5mb3Jtcy5zaGFyZUZvbGRlci5kYXRhID0gZmlsZTtcbiAgICAgICAgdGhpcy5mb3Jtcy5zaGFyZUZvbGRlci5zaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBzaGFyZUZpbGUoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xuICAgICAgICB0aGlzLmZvcm1zLnNoYXJlRmlsZS5kYXRhID0gZmlsZTtcbiAgICAgICAgdGhpcy5mb3Jtcy5zaGFyZUZpbGUuc2hvdyA9IHRydWU7XG4gICAgfVxuXG4gICAgc2VsZWN0RmlsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZUNvbnRyb2wuYmFzaWNGaWxlSW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZUNvbnRyb2wuYmFzaWNGaWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmlld0xpc3RTaWduKGU6IEV2ZW50LCBzaWduYXR1cmVzOiBhbnkpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5mb3Jtcy5zaWduYXR1cmVEZXRhaWwuc2hvdyA9IHRydWU7XG4gICAgICAgIHRoaXMubW9kZWwuYWR2YW5jZURhdGEgPSBzaWduYXR1cmVzO1xuICAgIH1cblxuICAgIG9uUm93U2VsZWN0KGV2dCkge1xuICAgICAgICB0aGlzLm9uU2VsZWN0ZWQuZW1pdCh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpO1xuICAgIH1cblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICAgIHRoaXMuX2ZpbGVNYW5hZ2VyU2VydmljZS5zdWJzVmFyID0gdGhpcy5fZmlsZU1hbmFnZXJTZXJ2aWNlLmludm9rZVJlbG9hZEZ1bmN0aW9uLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgYWRkQXR0YWNoTGluaygpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZWRMaW5rICYmIHRoaXMudHlwZWRMaW5rLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHRoaXMucGFyc2VBdHRhY2hMaW5rKHRoaXMudHlwZWRMaW5rKTtcbiAgICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgICAgICAvLyBkbyBsb2dpYyBjb3B5IGZpbGUgYnkgaGFzaFxuICAgICAgICAgICAgICAgIHRoaXMudHlwZWRMaW5rID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93QXR0YWNoTGlua0JveCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmNvcHlGaWxlQnlIYXNoKG9iaiwgdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXMuc3VjY2VzcyB8fCAhcmVzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdjw7MgbOG7l2kgdHJvbmcgbMO6YyBs4bqleSBmaWxlIHThu6sgbGluayEnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh7IGZpbGVvYmo6IHJlcyB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdU4bqjaSB0aMOgbmggY8O0bmchJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgaOG7lyB0cuG7oyBsacOqbiBr4bq/dCB04burIGjhu4cgdGjhu5FuZyBraMOhYyBob+G6t2MgbGnDqm4ga+G6v3Qga2jDtG5nIMSRw7puZyEnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUF0dGFjaExpbmsobGluaykge1xuICAgICAgICBpZiAobGluaykge1xuICAgICAgICAgICAgLy8gVG9kbzogc+G7rWEgdOG6oW0gxJHhu4MgY2jhuqF5IHRyw6puIGxvY2FsLCBzYXUga2hpIG9rIHRow6wgcGjhuqNpIHRow6ptICcvZmlsZSdcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gbGluay5zcGxpdCgnZmlsZS92NS9Eb3dubG9hZExpbmsvRG93bmxvYWQvJyk7XG4gICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFydHNbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBjb3B5RmlsZUZyb21TaGFyZWQoc2VsZWN0ZWRGaWxlczogYW55W10sIGlkRGVzRm9sZGVyOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHNlbGVjdGVkRmlsZXM/Lmxlbmd0aCB8fCBpZERlc0ZvbGRlciAhPSBudWxsIHx8IGlkRGVzRm9sZGVyICE9ICcnKSB7XG4gICAgICAgICAgICBjb25zdCBpZHNGaWxlOiBzdHJpbmdbXSA9IHNlbGVjdGVkRmlsZXMubWFwKHggPT4geC5pZCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5jb3B5TXVsdGlwbGVGaWxlKGlkc0ZpbGUsIGlkRGVzRm9sZGVyKTtcbiAgICAgICAgICAgIGlmICghcmVzLnN1Y2Nlc3MgfHwgIXJlcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdM4buXaSBjb3B5IGZpbGUgdOG7qyB0aMawIG3hu6VjIGTDuW5nIGNodW5nJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdDb3B5IGZpbGUgdOG7qyB0aMawIG3hu6VjIGTDuW5nIGNodW5nIHRow6BuaCBjw7RuZycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIGzhu5dpIGNvcHkgdOG7qyB0aHUgbeG7pWMgZMO5bmcgY2h1bmcnKTtcbiAgICB9XG5cbiAgICBmb2N1c0lucHV0KGlucHV0OiBhbnkpIHtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBjaG9uQ2h1S3koKSB7XG4gICAgICAgIHRoaXMuZmlsZUt5U29TaW0uY2hvbkNodUt5KCk7XG4gICAgfVxuXG4gICAga3lTbygpIHtcbiAgICAgICAgdGhpcy5maWxlS3lTb1NpbS5reVNvKCk7XG4gICAgfVxuXG4gICAgc2hvd1BpY2tlclRhaUxpZXUoKSB7XG4gICAgICAgIGlmICghdGhpcy5maWxlUGlja2VyU2V0dGluZy5lbnRpdHlLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZVBpY2tlclNldHRpbmcuZW50aXR5S2V5ID0gdGhpcy5lbnRpdHlLZXlQaWNrZXI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93VGFpTGlldUR1bmdDaHVuZyA9IHRydWU7XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZFRyZWUocm9vdE5hbWU6IHN0cmluZywgc2VydmljZUNvZGU6IHN0cmluZywgZW50aXR5OiBzdHJpbmcsIGVudGl0eUtleTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucm9vdFRyZWVOb2RlID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBgVGjGsCBt4bulYyAke3Jvb3ROYW1lfWAsXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5yb290Rm9sZGVySWQsXG4gICAgICAgICAgICAgICAgY29sbGFwc2VkSWNvbjogJ3BpIHBpLWZvbGRlcicsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWRJY29uOiAncGkgcGktZm9sZGVyLW9wZW4nLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbygpO1xuICAgICAgICBncmlkSW5mby5maWx0ZXJzID0gW3RoaXMubmV3RmlsdGVyKCdlbnRpdHlLZXknLCBPcGVyYXRvci5lcXVhbCwgZW50aXR5S2V5KV07XG4gICAgICAgIGdyaWRJbmZvLnNvcnRzID0gW107XG4gICAgICAgIGdyaWRJbmZvLnBhZ2VJbmZvID0geyBwYWdlOiAxLCBwYWdlU2l6ZTogOTk5OSB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9mb2xkZXJTZXJ2aWNlLmdldEJ5R3JpZFJlcXVlc3QoZ3JpZEluZm8pO1xuICAgICAgICBsZXQgcm9vdEZvbGRlciA9IHJlc3VsdC5kYXRhLmZpbmQoeCA9PiB4Lm5hbWUgPT0gYHNlcnZpY2VDb2RlLmVudGl0eS5lbnRpdHlLZXlgKTtcblxuICAgICAgICBpZiAoIXJvb3RGb2xkZXIpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2ZvbGRlclNlcnZpY2UuR2V0U2VydmljZUZvbGRlcihzZXJ2aWNlQ29kZSwgZW50aXR5LCBlbnRpdHlLZXkpLnRoZW4oeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHguZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICByb290Rm9sZGVyID0geyBpZDogeC5kYXRhIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvb3RGb2xkZXIpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQgPSByb290Rm9sZGVyLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yb290VHJlZU5vZGUgPSBbe1xuICAgICAgICAgICAgICAgIGxhYmVsOiBgVGjGsCBt4bulYyAke3Jvb3ROYW1lfWAsXG4gICAgICAgICAgICAgICAgZGF0YTogcm9vdEZvbGRlci5pZCxcbiAgICAgICAgICAgICAgICBjb2xsYXBzZWRJY29uOiAncGkgcGktZm9sZGVyJyxcbiAgICAgICAgICAgICAgICBleHBhbmRlZEljb246ICdwaSBwaS1mb2xkZXItb3BlbicsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuYnVpbGRUcmVlRGF0YShyZXN1bHQuZGF0YSwgcm9vdEZvbGRlci5pZClcbiAgICAgICAgICAgIH1dO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvb3RUcmVlTm9kZSAmJiB0aGlzLnJvb3RUcmVlTm9kZVswXSkge1xuICAgICAgICAgICAgdGhpcy5yb290VHJlZU5vZGVbMF0ubGFiZWwgPSBgVGjGsCBt4bulYyAke3Jvb3ROYW1lfWA7XG4gICAgICAgICAgICB0aGlzLnJvb3RUcmVlTm9kZVswXS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBidWlsZFRyZWVEYXRhKGRhdGEsIHJvb3RGb2xkZXJJZCk6IFRyZWVOb2RlPGFueT5bXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBjb25zdCByb290RGF0YSA9IGRhdGEuZmlsdGVyKHggPT4geC5wYXJlbnRGb2xkZXJJZCA9PSByb290Rm9sZGVySWQpO1xuICAgICAgICBpZiAocm9vdERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJvb3REYXRhKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWRJY29uOiAncGkgcGktZm9sZGVyJyxcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWRJY29uOiAncGkgcGktZm9sZGVyLW9wZW4nLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5idWlsZFRyZWVEYXRhKGRhdGEsIGl0ZW0uaWQpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBzZXRTZWxlY3RlZEZvbGRlcihub2RlOiBUcmVlTm9kZSwgZm9sZGVySWQ6IHN0cmluZykge1xuICAgICAgICBpZiAobm9kZS5kYXRhID09IGZvbGRlcklkKSB7XG4gICAgICAgICAgICBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUcmVlTm9kZSA9IG5vZGU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBub2RlLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2V0U2VsZWN0ZWRGb2xkZXIobm9kZS5jaGlsZHJlbltpXSwgZm9sZGVySWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBub2RlU2VsZWN0KG5vZGVFdmVudCkge1xuICAgICAgICB0aGlzLl9mb2xkZXJJZCA9IG5vZGVFdmVudC5ub2RlLmRhdGE7XG4gICAgICAgIHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQgPSBub2RlRXZlbnQubm9kZS5kYXRhO1xuICAgICAgICBhd2FpdCB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEobmV3IEdyaWRJbmZvKTtcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRGb2xkZXJDb250ZW50KHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xuICAgIH1cblxuICAgIGdldFBhdGhJbWFnZShmaWxlSWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFVybEltYWdlKGZpbGVJZCk7XG4gICAgfVxufVxuIl19
|
|
1742
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGUtZXhwbG9yZXIvZmlsZS1tYW5hZ2VyL2ZpbGUtbWFuYWdlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixRQUFRLEVBQ1IsS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQVksY0FBYyxFQUFZLE1BQU0sdUJBQXVCLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixlQUFlLEVBQ2YsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsV0FBVyxFQUNYLFFBQVEsRUFDUixTQUFTLEVBQ1osTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxPQUFPLEVBQUUsY0FBYyxFQUFF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Z0NBQ0wsS0FBSzs0QkFDTCxLQUFLO3dCQUNMLEtBQUs7MkJBMEJMLEtBQUs7dUJBS0wsS0FBSzt1QkFZTCxLQUFLO3VCQUNMLEtBQUs7dUJBQ0wsS0FBSzt3QkFFTCxLQUFLOzZCQUNMLEtBQUs7NkJBQ0wsS0FBSztvQkFFTCxLQUFLO3dDQU1MLEtBQUs7Z0NBQ0wsS0FBSzs0QkFDTCxLQUFLO3FCQUVMLE1BQU07c0JBQ04sTUFBTTs4QkFDTixNQUFNO3lCQUNOLE1BQU07MEJBQ04sTUFBTTt3QkFDTixNQUFNO3lCQUNOLE1BQU07d0JBQ04sTUFBTTt1QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lbnVJdGVtLCBNZXNzYWdlU2VydmljZSwgVHJlZU5vZGUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgQ29udGV4dE1lbnUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9jb250ZXh0bWVudSc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZmlsZXVwbG9hZCc7XG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YUxpc3RCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2RhdGEtbGlzdC1iYXNlJztcbmltcG9ydCB7IENvbW1vbkVycm9yQ29kZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29tbW9uLWVycm9yLWNvZGUnO1xuaW1wb3J0IHsgRm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgICBDb2x1bW5TY2hlbWFCYXNlLFxuICAgIENydWRGb3JtRGF0YSxcbiAgICBDcnVkRm9ybVNldHRpbmcsXG4gICAgRW51bUZpbGVMYXlvdXQsXG4gICAgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hLFxuICAgIEhlaWdodFR5cGUsXG4gICAgTW9kZWxTY2hlbWEsXG4gICAgT3BlcmF0b3IsXG4gICAgUG9wdXBTaXplXG59IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vY29uZmlncy9tb2R1bGUtY29uZmlnJztcbmltcG9ydCB7IFBlcm1pc3Npb25CYXNlIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMvY29tbW9uJztcbmltcG9ydCB7IEVkaXRGaWxlQ29tbWFuZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9lZGl0LWZpbGUtY29tbWFuZCc7XG5pbXBvcnQgeyBHcmlkSW5mbyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcbmltcG9ydCB7IENvbW1hbmRUeXBlLCBUbkNsaWVudENvbW1hbmQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdG4tY2xpZW50LWNvbW1hbmQnO1xuaW1wb3J0IHsgQXV0aGVuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpbGUtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTaWduYWxSU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NpZ25hbHIuc2VydmljZSc7XG5pbXBvcnQgeyBUbkNsaWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90bi1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyQ2h1S3lTb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91c2VyLWNodS1reS1zby5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVLeVNvU2ltQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsZS1reS1zby1zaW0vZmlsZS1reS1zby1zaW0uY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVFeHBsb3Jlckl0ZW0sIEZpbGVFeHBsb3Jlckl0ZW1UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpbGUtZXhwbG9yZXItaXRlbSc7XG5pbXBvcnQgeyBGaWxlUGlja2VyU2V0dGluZyB9IGZyb20gJy4uL21vZGVscy9maWxlLXBpY2tlci1zZXR0aW5nJztcbmltcG9ydCB7IEZpbGVWZXJzaW9uRFRPIH0gZnJvbSAnLi4vbW9kZWxzL2ZpbGUtdmVyc2lvbi1kdG8nO1xuaW1wb3J0IHsgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8gfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGUtbGluay1kb3dubG9hZC1kdG8nO1xuaW1wb3J0IHsgSUZpbGVNYW5hZ2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kZWxzL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgU2VydmljZVJlcXVlc3RNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zZXJ2aWNlLXJlcXVlc3QtbW9kZWwnO1xuaW1wb3J0IHsgRG93bmxvYWRMaW5rU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Rvd25sb2FkLWxpbmsuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlRGF0YVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJOZXdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1leHBsb3Jlci1uZXcuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1leHBsb3Jlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVPYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlVmVyc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLXZlcnNpb24uc2VydmljZSc7XG5pbXBvcnQgeyBGb2xkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZm9sZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTXlEcml2ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9teS1kcml2ZS5zZXJ2aWNlJztcblxuXG4vLyBpbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZW51SXRlbSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG4vLyBpbXBvcnQgeyBDb250ZXh0TWVudSB9IGZyb20gJ3ByaW1lbmcvY29udGV4dG1lbnUnO1xuLy8gaW1wb3J0IHsgRmlsZVVwbG9hZCB9IGZyb20gJ3ByaW1lbmcvZmlsZXVwbG9hZCc7XG5kZWNsYXJlIGxldCB2Z2NhX3NpZ25fYXBwcm92ZWQ6IGFueTtcbmRlY2xhcmUgbGV0IHZnY2Ffc2lnbl9pc3N1ZWQ6IGFueTtcbmRlY2xhcmUgbGV0IHZnY2FfY29tbWVudDogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnZmlsZS1tYW5hZ2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9maWxlLW1hbmFnZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGaWxlTWFuYWdlckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UsXG4gICAgXSxcbn0pXG5cbmV4cG9ydCBjbGFzcyBGaWxlTWFuYWdlckNvbXBvbmVudCBleHRlbmRzIERhdGFMaXN0QmFzZSBpbXBsZW1lbnRzIElGaWxlTWFuYWdlckNvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBWaWV3Q2hpbGQoJ2ZpbGVDb250cm9sJykgZmlsZUNvbnRyb2w6IEZpbGVVcGxvYWQ7XG4gICAgQFZpZXdDaGlsZCgnY29udGV4dE1lbnUnKSBjb250ZXh0TWVudTogQ29udGV4dE1lbnU7XG4gICAgQFZpZXdDaGlsZCgnZmlsZUt5U29TaW0nKSBmaWxlS3lTb1NpbTogRmlsZUt5U29TaW1Db21wb25lbnQ7XG5cbiAgICBASW5wdXQoKSBjb250cm9sOiBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEgPSBuZXcgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hKCk7XG4gICAgQElucHV0KCkgc2V0IGZpbGVEYXRhU2VydmljZSh2YWx1ZTogRmlsZURhdGFTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuX2ZpbGVEYXRhU2VydmljZSA9IHZhbHVlO1xuICAgIH1cbiAgICBASW5wdXQoKSBsYXlvdXQ6IEVudW1GaWxlTGF5b3V0ID0gRW51bUZpbGVMYXlvdXQuTElTVDtcbiAgICBASW5wdXQoKSBoaWRkZW5DcmVhdGVGb2xkZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBtYXhGaWxlU2l6ZTogbnVtYmVyID0gMTAwMDAwMDAwOyAvLyBTaXplIGluIGJ5dGVcbiAgICBASW5wdXQoKSBmaWxlTGltaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZVNpemVNZXNzYWdlU3VtbWFyeT86IHN0cmluZyA9ICd7MH06IFF1w6EgZHVuZyBsxrDhu6NuZyBmaWxlIGNobyBwaMOpcCwgJztcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZVNpemVNZXNzYWdlRGV0YWlsPzogc3RyaW5nID0gJ2R1bmcgbMaw4bujbmcgdOG7kWkgxJFhIGzDoCB7MH0uJztcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZVR5cGVNZXNzYWdlU3VtbWFyeT86IHN0cmluZyA9ICd7MH06IEtow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgZmlsZSwgJztcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZVR5cGVNZXNzYWdlRGV0YWlsPzogc3RyaW5nID0gJ8SR4buLbmggZOG6oW5nIGZpbGUgY2hvIHBow6lwOiB7MH0uJztcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZVN1bW1hcnk/OiBzdHJpbmcgPSAnUXXDoSBz4buRIGzGsOG7o25nIGZpbGUgY2hvIHBow6lwLCAnO1xuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlTGltaXRNZXNzYWdlRGV0YWlsPzogc3RyaW5nID0gJ3Thu5FpIMSRYSB7MH0gZmlsZS4nO1xuICAgIEBJbnB1dCgpIGRhdGFUeXBlOiBhbnk7XG4gICAgQElucHV0KCkgcm9vdEZvbGRlck5hbWU6IHN0cmluZzsvLyBUw6puIHRoxrAgbeG7pWMgZ+G7kWMuXG4gICAgQElucHV0KCkgc2VydmljZUNvZGU6IHN0cmluZzsvLyBC4buZIGtleSDEkeG7gyB04bqhbyB0aMawIG3hu6VjIGfhu5FjLlxuICAgIEBJbnB1dCgpIGVudGl0eTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGhpZGRlblBhZ2VTZXR0aW5nID0gZmFsc2U7XG4gICAgQElucHV0KCkgbm9GaWxlTWVzc2FnZSA9ICdDaMawYSBjw7MgdMOgaSBsaeG7h3UgxJHGsOG7o2MgdOG6o2kgbMOqbic7XG4gICAgQElucHV0KCkgc2V0IGVudGl0eUtleSh2YWw6IGFueSkge1xuICAgICAgICB0aGlzLl9lbnRpdHlLZXkgPSB2YWw7XG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW50aXR5S2V5ID0gdmFsW3ZhbC5fZHJvcGRvd252YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9oYXNMb2FkZWRTb3VyY2UgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZW50aXR5S2V5Q2hhbmdlLmVtaXQodGhpcy5fZW50aXR5S2V5KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlFbnRpdHlLZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdXNVcmwgPSAnQnlFbnRpdHlLZXlzJztcbiAgICAgICAgICAgICAgICB0aGlzLmdldEZpbGVzSW5FbnRpdHlLZXkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1c1VybCA9ICdCeUZvbGRlcklkJztcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3RGb2xkZXJJZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0FuZExvYWRSb290Rm9sZGVyQ29udGVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgfTtcblxuICAgIGdldCBlbnRpdHlLZXkoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudGl0eUtleTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgcm9vdEZvbGRlcklkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fcm9vdEZvbGRlcklkID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGF0YUZvcm0odmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMuZW50aXR5S2V5UGlja2VyICYmIHRoaXMuZmlsZVBpY2tlclNldHRpbmcgJiYgdGhpcy5maWxlUGlja2VyU2V0dGluZy5lbnRpdHlGaWVsZCAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVFbnRpdHlGaWVsZCA9IHZhbHVlW3RoaXMuZmlsZVBpY2tlclNldHRpbmcuZW50aXR5RmllbGRdO1xuICAgICAgICAgICAgaWYgKHZhbHVlRW50aXR5RmllbGQgJiYgdHlwZW9mICh2YWx1ZUVudGl0eUZpZWxkKSA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50aXR5S2V5UGlja2VyID0gdmFsdWVFbnRpdHlGaWVsZFt2YWx1ZUVudGl0eUZpZWxkLl9kcm9wZG93bnZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50aXR5S2V5UGlja2VyID0gdmFsdWVFbnRpdHlGaWVsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBpc1B1YmxpYzogYm9vbGVhbjtcbiAgICAvLyBEw7luZyBjaG8gY29tcG9uZW50IHTDoGkgbGnhu4d1XG4gICAgQElucHV0KCkgaW5UYWlMaWV1ID0gZmFsc2U7XG4gICAgQElucHV0KCkgaW5UYWlMaWV1Q2h1bmcgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBjb3B5VG9Gb2xkZXJJZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCk7XG5cbiAgICBASW5wdXQoKSBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5fdmFsdWUgIT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSBtdWx0aXBsZUNoZWNrV2hlbkNsaWNrUm93OiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBmaWxlUGlja2VyU2V0dGluZzogRmlsZVBpY2tlclNldHRpbmc7XG4gICAgQElucHV0KCkgcGFyZW50U2V0dGluZzogQ3J1ZEZvcm1TZXR0aW5nID0gbmV3IENydWRGb3JtU2V0dGluZygpO1xuXG4gICAgQE91dHB1dCgpIG9uSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIGVudGl0eUtleUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBjbG9zZVBvcHVwID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGVsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSB1cGxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgcHJpdmF0ZSBfdW5zdWJjcmlibGVBbGwgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnOiBNb2R1bGVDb25maWc7XG5cbiAgICBfb2xkVmFsdWU6IGFueTtcbiAgICBfdmFsdWU6IGFueTtcbiAgICBfZGF0YVNvdXJjZTogYW55W10gPSBbXTtcbiAgICBfbGF5b3V0ID0gRW51bUZpbGVMYXlvdXQ7XG5cbiAgICBnZXQgZmlsZURhdGFTZXJ2aWNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsZURhdGFTZXJ2aWNlO1xuICAgIH1cblxuICAgIF9maWxlRGF0YVNlcnZpY2U6IEZpbGVEYXRhU2VydmljZTtcbiAgICBfZW50aXR5S2V5OiBzdHJpbmc7XG4gICAgX2hhc0xvYWRlZFNvdXJjZSA9IGZhbHNlO1xuXG4gICAgZ2V0IHJvb3RGb2xkZXJJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3RGb2xkZXJJZDtcbiAgICB9XG5cbiAgICBfcm9vdEZvbGRlcklkOiBzdHJpbmcgPSBudWxsOy8vIEluc3RhbmNlSWQgdGjGsCBt4bulYyBn4buRYy5cbiAgICBwcm9ncmVzc1ZhbHVlID0gMDtcbiAgICBhcGlVcGxvYWRVcmwgPSAnJztcbiAgICBjaG9vc2VMYWJlbCA9ICdDaOG7jW4nO1xuICAgIHVzZXJJZDogYW55O1xuICAgIF9mb2xkZXJJZDogc3RyaW5nO1xuXG4gICAgZm9ybUlkcyA9IHtcbiAgICAgICAgY3JlYXRlRm9sZGVyOiAnY3JlYXRlRm9sZGVyJyxcbiAgICAgICAgcmVuYW1lRmlsZTogJ3JlbmFtZUZpbGUnLFxuICAgICAgICBzaGFyZUZpbGU6ICdzaGFyZUZpbGUnLFxuICAgICAgICBzaGFyZUZvbGRlcjogJ3NoYXJlRm9sZGVyJyxcbiAgICAgICAgZmlsZVZpZXdlcjogJ2ZpbGVWaWV3ZXInLFxuICAgICAgICBmaWxlVmVyc2lvbkxpc3Q6ICdmaWxlVmVyc2lvbkxpc3QnLFxuICAgICAgICBzaWduYXR1cmVEZXRhaWw6ICdzaWduYXR1cmVEZXRhaWwnLFxuICAgICAgICBreVNvU2ltOiAna3lTb1NpbScsXG4gICAgICAgIHZpZXdEZXRhaWw6ICd2aWV3RGV0YWlsJ1xuICAgIH07XG4gICAgZm9ybXM6IGFueSA9IHt9O1xuICAgIGRhdGE6IGFueSA9IHtcbiAgICAgICAgcm9vdEZvbGRlcklkOiBudWxsLFxuICAgICAgICBjdXJyZW50Rm9sZGVySWQ6IG51bGwsXG5cbiAgICAgICAgbW92aW5nOiB7XG4gICAgICAgICAgICBpc1NlbGVjdGluZzogZmFsc2UsXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiBudWxsLFxuICAgICAgICB9LFxuXG4gICAgICAgIGJyZWFkY3J1bWJzOiA8TWVudUl0ZW1bXT5bXSxcbiAgICB9O1xuICAgIHNob3dBdHRhY2hMaW5rQm94ID0gZmFsc2U7XG4gICAgdHlwZWRMaW5rOiBzdHJpbmcgPSAnJztcbiAgICBzaG93VGFpTGlldUR1bmdDaHVuZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGxheW91dFNpbXBsZUFsbCA9IGZhbHNlO1xuICAgIGJhc2VQZXJtaXNzaW9uOiBudW1iZXI7XG4gICAgaW5pdGVkID0gZmFsc2U7XG4gICAgdmlzaWJsZUZvbGRlciA9IGZhbHNlO1xuICAgIHJvb3RUcmVlTm9kZTogVHJlZU5vZGVbXSA9IFtdO1xuICAgIHNlbGVjdGVkVHJlZU5vZGU6IFRyZWVOb2RlO1xuICAgIGFjY2VwdDogc3RyaW5nID0gJyc7XG4gICAgZmlsZUluRm9ybSA9ICdmaWxlJztcbiAgICB1c2VCcmVhZGNydW1icyA9IHRydWU7XG4gICAgdXNlU2lnbmF0dXJlID0gdHJ1ZTtcbiAgICBlbnRpdHlLZXlQaWNrZXI6IHN0cmluZyA9ICcnO1xuICAgIHNob3dGaWxlVmVyc2lvbiA9IHRydWU7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBfbXlEcml2ZVNlcnZpY2U6IE15RHJpdmVTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9hdXRoZW5TZXJ2aWNlOiBBdXRoZW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF90bkNsaWVudFNlcnZpY2U6IFRuQ2xpZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZmlsZVZlcnNpb25TZXJ2aWNlOiBGaWxlVmVyc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3NpZ25hbHJTZXJ2aWNlOiBTaWduYWxSU2VydmljZSxcbiAgICAgICAgcHVibGljIF9maWxlRXhwbG9yZXJTZXJ2aWNlOiBGaWxlRXhwbG9yZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9maWxlRXhwbG9yZXJOZXdTZXJ2aWNlOiBGaWxlRXhwbG9yZXJOZXdTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9mb2xkZXJTZXJ2aWNlOiBGb2xkZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9maWxlT2JqZWN0U2VydmljZTogRmlsZU9iamVjdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2Rvd25sb2FkTGlua1NlcnZpY2U6IERvd25sb2FkTGlua1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3VzZXJDaHVLeVNvU2VydmljZTogVXNlckNodUt5U29TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9maWxlTWFuYWdlclNlcnZpY2U6IEZpbGVNYW5hZ2VyU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihfaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLl9tb2R1bGVDb25maWcgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xuICAgICAgICB0aGlzLmFwaVVwbG9hZFVybCA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFVwbG9hZFVybCgpO1xuICAgICAgICB0aGlzLnVzZXJJZCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldFVzZXJJZENvbWJpbmUoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbCA9IG5ldyBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50WydoaWRkZW5GaWxlVmVyc2lvbklzTm90U3VwZXJBZG1pbiddICYmICF0aGlzLl91c2VyU2VydmljZS5pc1N1cGVyVXNlcigpKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dGaWxlVmVyc2lvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5BdXRob3JpemVCdXR0b24gPSB0cnVlO1xuICAgICAgICB0aGlzLnVzZUJyZWFkY3J1bWJzID0gdGhpcy5jb250cm9sLnVzZUJyZWFkY3J1bWJzO1xuICAgICAgICB0aGlzLnVzZVNpZ25hdHVyZSA9IHRoaXMuY29udHJvbC51c2VTaWduYXR1cmU7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIC8vIFVwbG9hZCB3aXRoIG11bHRpcGxlIGZpbGVcbiAgICAgICAgICAgIHRoaXMuYXBpVXBsb2FkVXJsID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0VXBsb2FkTXVsdGlwbGVVcmwoKTtcbiAgICAgICAgICAgIHRoaXMuZmlsZUluRm9ybSA9ICdmaWxlcyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250cm9sLl9jb21wb25lbnQgPSB0aGlzO1xuICAgICAgICB0aGlzLmFjY2VwdCA9IHRoaXMuY29udHJvbC5hY2NlcHQgJiYgdGhpcy5jb250cm9sLmFjY2VwdCAhPT0gJydcbiAgICAgICAgICAgID8gdGhpcy5jb250cm9sLmFjY2VwdFxuICAgICAgICAgICAgOiB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRBY2NlcHRlZEV4dGVuc2lvbnModGhpcy5jb250cm9sLmFjY2VwdEZpbGVUeXBlcyk7XG4gICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sYXlvdXRTaW1wbGVBbGwgPSAodGhpcy5sYXlvdXQgPT09IEVudW1GaWxlTGF5b3V0LlNJTVBMRSB8fCB0aGlzLmxheW91dCA9PT0gRW51bUZpbGVMYXlvdXQuU0lNUExFX0ZPUl9MSVNUKTtcbiAgICAgICAgdGhpcy5sb2FkRGV0YWlsRnJvbVF1ZXJ5UGFyYW0gPSBmYWxzZTtcbiAgICAgICAgLy8gTOG6r25nIGtoaSBrw70gc2ltIHPhu5EgdGjDoG5oIGPDtG5nIHRow6wgbG9hZCBs4bqhaSBmaWxlXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuc3Vic2NyaWJlKCdLeVNvU2ltVGhhbmhDb25nJywgeCA9PiB7XG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybXMua3lTb1NpbS5zaG93ID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmhhc0NydWRMaXN0ID0gdGhpcy5sYXlvdXQgPT0gRW51bUZpbGVMYXlvdXQuTElTVDtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aUVudGl0eUtleSkge1xuICAgICAgICAgICAgdGhpcy5wbHVzVXJsID0gJ0J5RW50aXR5S2V5cyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBsdXNVcmwgPSAnQnlGb2xkZXJJZCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1B1YmxpYyAhPSBudWxsICYmIHRoaXMuY29udHJvbC5pc1B1YmxpYyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQdWJsaWMgPSB0aGlzLmNvbnRyb2wuaXNQdWJsaWM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0R3JpZCgpO1xuICAgICAgICB0aGlzLmluaXRGb3JtcygpO1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLm1vZGVsLnJlYWR5ID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmZpbGVEYXRhU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5maWxlRGF0YVNlcnZpY2UucmVnaXN0ZXIodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgICAgIHRoaXMuY2hlY2tBbmRMb2FkUm9vdEZvbGRlckNvbnRlbnQoKTtcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VWaXNpYmxlRm9sZGVyKCkge1xuICAgICAgICB0aGlzLnZpc2libGVGb2xkZXIgPSAhdGhpcy52aXNpYmxlRm9sZGVyO1xuICAgIH1cblxuICAgIGNoZWNrQW5kTG9hZFJvb3RGb2xkZXJDb250ZW50KCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5pdGVkIHx8IHRoaXMuZmlsZURhdGFTZXJ2aWNlKSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2V0Um9vdEZvbGRlckNvbnRlbnQoKTtcbiAgICB9XG5cbiAgICBnZXRSb290Rm9sZGVyQ29udGVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMucm9vdEZvbGRlcklkKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9sZGVyQ29udGVudCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc0tleSA9IHRoaXMuc2VydmljZUNvZGVcbiAgICAgICAgICAgICYmIHRoaXMuZW50aXR5XG4gICAgICAgICAgICAmJiB0aGlzLl9lbnRpdHlLZXk7XG5cbiAgICAgICAgaWYgKCFoYXNLZXkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tYXJrTG9hZGluZygpO1xuICAgICAgICB0aGlzLl9mb2xkZXJTZXJ2aWNlLmdldFNlcnZpY2VGb2xkZXJJZCh7XG4gICAgICAgICAgICBzZXJ2aWNlQ29kZTogdGhpcy5zZXJ2aWNlQ29kZSxcbiAgICAgICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHksXG4gICAgICAgICAgICBlbnRpdHlLZXk6IHRoaXMuX2VudGl0eUtleSxcbiAgICAgICAgfSBhcyBTZXJ2aWNlUmVxdWVzdE1vZGVsKVxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VubWFya0xvYWRpbmcoKTtcbiAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvb3RGb2xkZXJJZCA9IHJzLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwucmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGzhuqV5IHRoxrAgbeG7pWMgZ+G7kWMhJyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXNldERhdGEoKSB7XG4gICAgICAgIHRoaXMucm9vdEZvbGRlcklkID0gbnVsbDtcbiAgICAgICAgdGhpcy5kYXRhLmJyZWFkY3J1bWJzID0gW107XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBbXTtcbiAgICB9XG5cbiAgICBzZXRSb290Rm9sZGVySWQocm9vdEZvbGRlcklkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5yb290Rm9sZGVySWQgPSByb290Rm9sZGVySWQ7XG4gICAgfVxuXG4gICAgc2V0RGF0YXNvdXJjZShkYXRhU291cmNlOiBhbnlbXSA9IFtdKSB7XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xuICAgICAgICB0aGlzLl9vbGRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IFtdO1xuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICB2YWx1ZS5wdXNoKGl0ZW0uaWQpO1xuICAgICAgICAgICAgaWYgKGl0ZW0ubmFtZSkge1xuICAgICAgICAgICAgICAgIGl0ZW0ubmFtZVdpdGhvdXRFeHRlbnNpb24gPSBpdGVtLm5hbWU7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtLm5hbWUubGFzdEluZGV4T2YoJy4nKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLm5hbWVXaXRob3V0RXh0ZW5zaW9uID0gaXRlbS5uYW1lLnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmV4dGVuc2lvbikge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmV4dGVuc2lvbiA9IGl0ZW0uZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0udGFpbEZpbGUgPSBpdGVtLm5hbWUuc3Vic3RyaW5nKGluZGV4KTtcbiAgICAgICAgICAgICAgICBpdGVtLnRhaWxGaWxlVXBwZXIgPSBpdGVtLnRhaWxGaWxlLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaXRlbS5pc0ZpbGUgPSBpdGVtLmZpbGVFeHBsb3Jlckl0ZW1UeXBlID09IEZpbGVFeHBsb3Jlckl0ZW1UeXBlLkZpbGU7XG4gICAgICAgICAgICAgICAgY29uc3QgbHN0TWVudUJ1dHRvbnMgPSB0aGlzLl9nZXRNZW51QnV0dG9ucyhpdGVtKS5maWx0ZXIoeCA9PiB4LnZpc2libGUpO1xuICAgICAgICAgICAgICAgIGl0ZW0uaGFzQ29udGV4dE1lbnUgPSBsc3RNZW51QnV0dG9ucy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX29sZFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLl9vbGRWYWx1ZSkgIT0gSlNPTi5zdHJpbmdpZnkodGhpcy5fdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnRDaGFuZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnRDaGFuZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vZGVsLnJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLl9oYXNMb2FkZWRTb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZFNvdXJjZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm9uUmVhZHkuZW1pdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RmlsZXNJbkVudGl0eUtleSgpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5iYXNlUmVhZHkgPSB0cnVlO1xuICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICB9XG4gICAgZmlyZUV2ZW50Q2hhbmdlKCkge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fdmFsdWUpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICB9XG5cbiAgICBpbml0R3JpZCgpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLm11bHRpcGxlQ2hlY2tXaGVuQ2xpY2tSb3cgPSB0aGlzLm11bHRpcGxlQ2hlY2tXaGVuQ2xpY2tSb3c7XG4gICAgICAgIHRoaXMuc2V0dGluZy5tb2RlbFNjaGVtYXMgPSBbXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnbmFtZScsXG4gICAgICAgICAgICAgICAgbmFtZTogJ1TDqm4gdMOgaSBsaeG7h3UnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnVMOqbiB0w6BpIGxp4buHdScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUw6puIHTDoGkgbGnhu4d1JyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgIC8vICAgICBmaWVsZDogJ3RodW1ibmFpbCcsXG4gICAgICAgICAgICAvLyAgICAgbmFtZTogJ1RodW1ibmFpbCcsXG4gICAgICAgICAgICAvLyAgICAgZnVsbE5hbWU6ICdUaHVtYm5haWwnLFxuICAgICAgICAgICAgLy8gICAgIGRlc2NyaXB0aW9uOiAnVGh1bWJuYWlsJyxcbiAgICAgICAgICAgIC8vIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2ZpbGVTaXplJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnS8OtY2ggdGjGsOG7m2MnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnS8OtY2ggdGjGsOG7m2MnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnS8OtY2ggdGjGsOG7m2MnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnY3JlYXRlZCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ05nw6B5IHThuqFvJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ05nw6B5IHThuqFvJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ05nw6B5IHThuqFvJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2RhdGV0aW1lJ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnY3VycmVudEZpbGVWZXJzaW9uJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnUGhpw6puIGLhuqNuJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ1BoacOqbiBi4bqjbicsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdQaGnDqm4gYuG6o24nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdDaOG7qWMgbsSDbmcnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnQ2jhu6ljIG7Eg25nJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0No4bupYyBuxINuZycsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLnNldHRpbmcuY29scyA9IFtcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZXhwbG9yZXJJdGVtJyxcbiAgICAgICAgICAgICAgICBzb3J0OiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTVlbScsXG4gICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8vIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgIC8vICAgICBmaWVsZDogJ3RodW1ibmFpbCcsXG4gICAgICAgICAgICAvLyAgICAgZGF0YVR5cGU6ICd0aHVtYm5haWwnLFxuICAgICAgICAgICAgLy8gICAgIHdpZHRoOiAnMTBlbScsXG4gICAgICAgICAgICAvLyB9KSxcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2ZpbGVTaXplJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2ZpbGVTaXplJyxcbiAgICAgICAgICAgICAgICBzb3J0OiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnOWVtJyxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IDEsXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdjcmVhdGVkJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgICAgICAgICBzb3J0OiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTBlbScsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogdGhpcy5zaG93RmlsZVZlcnNpb25cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnY3VycmVudEZpbGVWZXJzaW9uJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzhlbScsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAxLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiB0aGlzLnNob3dGaWxlVmVyc2lvblxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5pbml0U2V0dGluZygpO1xuICAgIH1cblxuICAgIGluaXRTZXR0aW5nKCkge1xuICAgICAgICB0aGlzLnNldHRpbmcuaGVpZ2h0VHlwZSA9IEhlaWdodFR5cGUuZHluYW1pYztcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlbkZpbHRlclJvdyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSA9IHRoaXMuX2ZvbGRlclNlcnZpY2U7XG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdXb3JrZmxvdyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nUGVybWlzc2lvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5BZHZhbmNlU2VhcmNoID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblBhZ2VTZXR0aW5nID0gdGhpcy5oaWRkZW5QYWdlU2V0dGluZztcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3Jtcy5cbiAgICBpbml0Rm9ybXMoKSB7XG4gICAgICAgIHRoaXMuZm9ybXNbdGhpcy5mb3JtSWRzLmNyZWF0ZUZvbGRlcl0gPSB7XG4gICAgICAgICAgICBoZWFkZXI6ICdU4bqhbyBt4bubaSB0aMawIG3hu6VjJyxcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgICAgICAgZm9ybURhdGE6IG5ldyBDcnVkRm9ybURhdGEoKSxcbiAgICAgICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDQwMCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwMCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZm9ybXNbdGhpcy5mb3JtSWRzLnZpZXdEZXRhaWxdID0ge1xuICAgICAgICAgICAgaGVhZGVyOiAnVGjDtG5nIHRpbiBjaGkgdGnhur90JyxcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgICAgICAgZm9ybURhdGE6IG5ldyBDcnVkRm9ybURhdGEoKSxcbiAgICAgICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDQ1MCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwMCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZm9ybXNbdGhpcy5mb3JtSWRzLnJlbmFtZUZpbGVdID0ge1xuICAgICAgICAgICAgaGVhZGVyOiAnxJDhu5VpIHTDqm4gdOG7h3AnLFxuICAgICAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgICAgICBmb3JtRGF0YTogbmV3IENydWRGb3JtRGF0YSgpLFxuICAgICAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHtcbiAgICAgICAgICAgICAgICB3aWR0aDogNDAwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogMjAwLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5mb3Jtc1t0aGlzLmZvcm1JZHMuZmlsZVZpZXdlcl0gPSB7XG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcbiAgICAgICAgICAgIGZvcm1EYXRhOiB7fSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1zW3RoaXMuZm9ybUlkcy5maWxlVmVyc2lvbkxpc3RdID0ge1xuICAgICAgICAgICAgaGVhZGVyOiAnRGFuaCBzw6FjaCBwaGnDqm4gYuG6o24nLFxuICAgICAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgICAgICBmaWxlSWQ6IG51bGwsXG4gICAgICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoe1xuICAgICAgICAgICAgICAgIG1heGltaXplOiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5mb3Jtc1t0aGlzLmZvcm1JZHMuc2lnbmF0dXJlRGV0YWlsXSA9IHtcbiAgICAgICAgICAgIGhlYWRlcjogJ1Row7RuZyB0aW4gY2jhu68ga8O9IHPhu5EnLFxuICAgICAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5mb3Jtc1t0aGlzLmZvcm1JZHMua3lTb1NpbV0gPSB7XG4gICAgICAgICAgICBoZWFkZXI6ICdLw70gc+G7kSBzaW0nLFxuICAgICAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoe1xuICAgICAgICAgICAgICAgIG1heGltaXplOiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgb25TYXZlZEZvcm0oZm9ybUlkKSB7XG4gICAgICAgIHRoaXMuZm9ybXNbZm9ybUlkXS5zaG93ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2V0QnJlYWRjcnVtYnMoKTtcbiAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XG4gICAgfVxuXG4gICAgb25DYW5jZWxGb3JtKGZvcm1JZCkge1xuICAgICAgICB0aGlzLmZvcm1zW2Zvcm1JZF0uc2hvdyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHNob3dDb250ZXh0TWVudShldnQsIGl0ZW0sIGlzVHJlZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVHJlZU5vZGUgPSBpdGVtO1xuICAgICAgICB0aGlzLmRhdGEuaXRlbXNNZW51RmlsZSA9IHRoaXMuX2dldE1lbnVCdXR0b25zKGl0ZW0sIGlzVHJlZSk7XG5cbiAgICAgICAgLy8gc2V0IHRpbWUgb3V0IMSR4buDIGZpeCBidWcgcmVuZGVyIGNvbnRleHQgbWVudSByYSB0csOgbiByYSBuZ2/DoGkgbcOgbiBow6xuaFxuICAgICAgICAvLyBDw7MgbOG6vSB2w6wgdGjhu51pIMSRaeG7g20gcHJpbWVuZyB0w61uaCB24buLIHRyw60gY+G7p2EgY29udGV4dCBtZW51IGzDoCB0csaw4bubYyBraGkgcmVuZGVyIGjhur90IGPDoWMgcm93IHRyb25nIGNvbnRleHQgbWVudVxuICAgICAgICBzZXRUaW1lb3V0KGYgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudS5zaG93KGV2dCk7XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfZ2V0TWVudUJ1dHRvbnMoaXRlbSwgaXNUcmVlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBpZiAoaXRlbS5pc0ZpbGUpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnWGVtIHRy4buxYyB0dXnhur9uJywgaWNvbjogJ2ZhcyBmYS1leWUnLCBjb21tYW5kOiAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbk9iamVjdChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogKHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgISh0aGlzLmxheW91dFNpbXBsZUFsbCAmJiB0aGlzLnJlYWRvbmx5KSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnS8O9IHPhu5EgY8OhIG5ow6JuIChTSU0pJyxcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2ZhcyBmYS1zaW0tY2FyZCcsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2lnbkt5U2ltRmlsZShpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogKHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmlzVHlwZUZpbGVLeVNvKGl0ZW0ubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMubGF5b3V0ICE9PSBFbnVtRmlsZUxheW91dC5TSU1QTEVfRk9SX0xJU1QgJiYgIXRoaXMucGFyZW50U2V0dGluZy5oaWRkZW5LeVNvU2ltQ2FOaGFuKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdLw70gc+G7kSBTbWFydENBJyxcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2ZhcyBmYS1zaWduYXR1cmUnLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNpZ25GaWxlU21hcnRDQShpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdLw70gc+G7kSBjw6EgbmjDom4gKFVTQiknLCBpY29uOiAnZmFzIGZhLXNpZ25hdHVyZScsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2lnbkZpbGUoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICh0aGlzLl9maWxlT2JqZWN0U2VydmljZS5pc1R5cGVGaWxlS3lTbyhpdGVtLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKClcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMubGF5b3V0ICE9PSBFbnVtRmlsZUxheW91dC5TSU1QTEVfRk9SX0xJU1QgJiYgIXRoaXMucGFyZW50U2V0dGluZy5oaWRkZW5LeVNvVXNiQ2FOaGFuKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdCw7p0IHBow6onLCBpY29uOiAnZmFzIGZhLWNvbW1lbnQtZG90cycsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ29tbWVudChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogKHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmlzVHlwZUZpbGVLeVNvKGl0ZW0ubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5sYXlvdXQgIT09IEVudW1GaWxlTGF5b3V0LlNJTVBMRV9GT1JfTElTVCAmJiAhdGhpcy5wYXJlbnRTZXR0aW5nLmhpZGRlbkJ1dFBoZSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQsO6dCBwaMOqIHbDoCBrw70nLCBpY29uOiAnZmFzIGZhLWNvbW1lbnQtbWVkaWNhbCcsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ29tbWVudEFuZFNpZ24oaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICh0aGlzLl9maWxlT2JqZWN0U2VydmljZS5pc1R5cGVGaWxlS3lTbyhpdGVtLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKClcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMubGF5b3V0ICE9PSBFbnVtRmlsZUxheW91dC5TSU1QTEVfRk9SX0xJU1QgJiYgIXRoaXMucGFyZW50U2V0dGluZy5oaWRkZW5CdXRQaGUpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0vDvSBz4buRIMSRxqFuIHbhu4sgKFVTQiknLCBpY29uOiAnZmFzIGZhLXNpZ25hdHVyZScsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2lnbkZpbGVEb25WaShpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogKHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmlzVHlwZUZpbGVLeVNvKGl0ZW0ubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5sYXlvdXQgIT09IEVudW1GaWxlTGF5b3V0LlNJTVBMRV9GT1JfTElTVCAmJiAhdGhpcy5wYXJlbnRTZXR0aW5nLmhpZGRlbkt5U29Eb25WaSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnVOG6o2kgduG7gScsIGljb246ICdmYXMgZmEtZG93bmxvYWQnLCBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAhKHRoaXMubGF5b3V0ID09PSBFbnVtRmlsZUxheW91dC5TSU1QTEUgJiYgdGhpcy5yZWFkb25seSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnU2FvIGNow6lwIMSRxrDhu51uZyBk4bqrbicsIGljb246ICdmYXMgZmEtbGluaycsIGNvbW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29weURvd25sb2FkTGluayhpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogISh0aGlzLmxheW91dFNpbXBsZUFsbCAmJiB0aGlzLnJlYWRvbmx5KSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICfEkOG7lWkgdMOqbicsIGljb246ICdmYXMgZmEtZXJhc2VyJywgY29tbWFuZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5hbWVGaWxlKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5jaGVja0lzUmVhZE9ubHkoKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1hlbSBjw6FjIHBoacOqbiBi4bqjbiBraMOhYycsIGljb246ICdmYXMgZmEtaGlzdG9yeScsIGNvbW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbkZpbGVWZXJzaW9ucyhpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuY2hlY2tJc1JlYWRPbmx5KCkgJiYgdGhpcy5zaG93RmlsZVZlcnNpb25cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdYw7NhIHThu4dwIHRpbicsIGljb246ICdmYXIgZmEtdHJhc2gtYWx0JywgY29tbWFuZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVGaWxlKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5jaGVja0lzUmVhZE9ubHkoKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzVHJlZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdYZW0gY2hpIHRp4bq/dCcsIGljb246ICdwaSBwaS1zZWFyY2gnLCBjb21tYW5kOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3RGV0YWlsKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICfEkOG7lWkgdMOqbiB0aMawIG3hu6VjJywgaWNvbjogJ3BpIHBpLXBlbmNpbCcsIGNvbW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmFtZUZvbGRlcihpdGVtLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdU4bqjaSB24buBJywgaWNvbjogJ2ZhcyBmYS1kb3dubG9hZCcsIGNvbW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2RlbCA9IG5ldyBGaWxlRXhwbG9yZXJJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLmlkID0gaXRlbS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLmlzRmlsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWQobW9kZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1ThuqNpIHbhu4EnLCBpY29uOiAnZmFzIGZhLWRvd25sb2FkJywgY29tbWFuZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWQoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1jDs2EgdGjGsCBt4bulYycsIGljb246ICdmYXIgZmEtdHJhc2gtYWx0JywgY29tbWFuZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlRm9sZGVyKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLmNoZWNrSXNSZWFkT25seSgpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGNoZWNrSXNSZWFkT25seSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZG9ubHkgfHwgdGhpcy5iYXNlUGVybWlzc2lvbiA9PSBQZXJtaXNzaW9uQmFzZS5SRUFEO1xuICAgIH1cblxuICAgIGhhbmRsZUNsaWNrRmlsZU5hbWUoaXRlbSkge1xuICAgICAgICBpZiAoIWl0ZW0uY2FuVmlld09ubGluZSkge1xuICAgICAgICAgICAgdGhpcy5kb3dubG9hZChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3Blbk9iamVjdChpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIG1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvOiBHcmlkSW5mbykge1xuICAgICAgICBpZiAodGhpcy5oaWRkZW5QYWdlU2V0dGluZykge1xuICAgICAgICAgICAgZ3JpZEluZm8ucGFnZUluZm8ucGFnZVNpemUgPSA5OTk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aUVudGl0eUtleSkge1xuICAgICAgICAgICAgZ3JpZEluZm8uZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKCdlbnRpdHlLZXlzJywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuX2VudGl0eUtleSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ3JpZEluZm8uZmlsdGVycy5zcGxpY2UoMCwgMCwgdGhpcy5uZXdGaWx0ZXIoJ3BhcmVudEZvbGRlcklkJywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGFmdGVyR2V0RGF0YSgpIHtcbiAgICAgICAgY29uc3QgdGVtcERhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpbmQgaW4gdGhpcy5tb2RlbC5kYXRhU291cmNlKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5tb2RlbC5kYXRhU291cmNlW2luZF07XG4gICAgICAgICAgICBpZiAodGhpcy51c2VTaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5zdXBwb3J0RGlnaXRhbFNpZ25hdHVyZShpdGVtLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuZ2V0U2lnbmF0dXJlSW5mb0J5RmlsZUlkKGl0ZW0uaWQpLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MgJiYgcnMuZGF0YT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zaWduYXR1cmVzID0gcnMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxhc3RTaWduYXR1cmUgPSBycy5kYXRhW3JzLmRhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGl0ZW0uZmlsZUV4cGxvcmVySXRlbVR5cGUgPT09IEZpbGVFeHBsb3Jlckl0ZW1UeXBlLkZvbGRlcikge1xuICAgICAgICAgICAgICAgIGl0ZW0uY2xhc3MgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLmV4dGVuc2lvbikge1xuICAgICAgICAgICAgICAgIGl0ZW0uaW1hZ2VJY29uID0gYC9hc3NldHMvaW1hZ2VzL2ZpbGUtZXh0L2ljb24ke2l0ZW0uZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCl9LnBuZ2A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0ZW0uY2FuVmlld09ubGluZSA9IHRoaXMuX2ZpbGVFeHBsb3Jlck5ld1NlcnZpY2UuaXNTdXBwb3J0ZWRWaWV3T25saW5lKGl0ZW0ubmFtZSk7XG4gICAgICAgICAgICBpZiAoIWl0ZW0uZXh0ZW5zaW9uIHx8IGl0ZW0uZXh0ZW5zaW9uLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXhFeHRlbnNpb24gPSBpdGVtLm5hbWUubGFzdEluZGV4T2YoJy4nKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhFeHRlbnNpb24gIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZXh0ZW5zaW9uID0gaXRlbS5uYW1lLnN1YnN0cmluZyhpbmRleEV4dGVuc2lvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcERhdGFTb3VyY2UucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2UgPSB0ZW1wRGF0YVNvdXJjZTtcbiAgICAgICAgdGhpcy5zZXREYXRhc291cmNlKHRoaXMubW9kZWwuZGF0YVNvdXJjZSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX3Vuc3ViY3JpYmxlQWxsLm5leHQoKTtcbiAgICAgICAgdGhpcy5fdW5zdWJjcmlibGVBbGwuY29tcGxldGUoKTtcbiAgICAgICAgaWYgKHRoaXMuZmlsZURhdGFTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVEYXRhU2VydmljZS51bnJlZ2lzdGVyKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm9vdENvbnRleHQudW5TdWJzY3JpYmUoJ0t5U29TaW1UaGFuaENvbmcnKTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IEZVTkNUSU9OIENPTFVNTiBNQU5VTEFUSU9OLlxuICAgIGdldEJ1dHRvbkljb24oZXhwbG9yZXJJdGVtKSB7XG4gICAgICAgIGlmIChleHBsb3Jlckl0ZW0uaXNGaWxlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwaSBwaS1wZW5jaWwnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwaSBwaS1leWUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICdwaSBwaS1wZW5jaWwnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QnV0dG9uVG9vbHRpcChleHBsb3Jlckl0ZW0pIHtcbiAgICAgICAgaWYgKGV4cGxvcmVySXRlbS5pc0ZpbGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0No4buJbmggc+G7rWEnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdYZW0gdHLhu7FjIHR1eeG6v24nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICfEkOG7lWkgdMOqbic7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkJ1dHRvbkNsaWNrKGV4cGxvcmVySXRlbSkge1xuICAgICAgICBpZiAoZXhwbG9yZXJJdGVtLmlzRmlsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdEZpbGUoZXhwbG9yZXJJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbk9iamVjdChleHBsb3Jlckl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5hbWVGb2xkZXIoZXhwbG9yZXJJdGVtLmlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldE1lbnVJdGVtcyhleHBsb3JkZXJJdGVtKSB7XG4gICAgICAgIHJldHVybiBleHBsb3JkZXJJdGVtLmlzRmlsZSA/IHRoaXMuZGF0YS5pdGVtc01lbnVGaWxlIDogdGhpcy5kYXRhLml0ZW1zTWVudUZvbGRlcjtcbiAgICB9XG5cbiAgICBvbkRyb3Bkb3duQ2xpY2soZXhwbG9yZXJJdGVtKSB7XG4gICAgICAgIGlmIChleHBsb3Jlckl0ZW0uaXNGaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBreVNvSXRlbSA9IHRoaXMuZGF0YS5pdGVtc01lbnVGaWxlLmZpbmQoeCA9PiB4LmxhYmVsLnRvTG93ZXJDYXNlKCkgPT0gJ0vDvSBz4buRJyk7XG4gICAgICAgICAgICBpZiAoa3lTb0l0ZW0pIHtcbiAgICAgICAgICAgICAgICBreVNvSXRlbS52aXNpYmxlID0gdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5zdXBwb3J0RGlnaXRhbFNpZ25hdHVyZShleHBsb3Jlckl0ZW0ubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRhdGEuc2VsZWN0ZWRFeHBsb3Jlckl0ZW0gPSBleHBsb3Jlckl0ZW07XG4gICAgfVxuXG5cbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IEZJTEUgTUFOVUxBVElPTi5cbiAgICAvLyBU4bqjaSBsw6puIGZpbGUuXG4gICAgb25TZWxlY3RGaWxlKCkge1xuICAgICAgICB0aGlzLmZpbGVDb250cm9sLnVwbG9hZCgpO1xuICAgIH1cblxuICAgIG9uQmVmb3JlVXBsb2FkKGV2dCkge1xuICAgICAgICB0aGlzLl9tYXJrTG9hZGluZygpO1xuICAgICAgICBldnQuZm9ybURhdGEuYXBwZW5kKCdzZXJ2aWNlQ29kZScsIHRoaXMuc2VydmljZUNvZGUpO1xuICAgICAgICBldnQuZm9ybURhdGEuYXBwZW5kKCdlbnRpdHknLCB0aGlzLmVudGl0eSk7XG4gICAgICAgIGV2dC5mb3JtRGF0YS5hcHBlbmQoJ2VudGl0eUtleScsIHRoaXMuX2VudGl0eUtleSk7XG4gICAgICAgIGV2dC5mb3JtRGF0YS5hcHBlbmQoJ2lzUHVibGljJywgdGhpcy5pc1B1YmxpYyk7XG4gICAgICAgIGV2dC5mb3JtRGF0YS5hcHBlbmQoJ2ZvbGRlcklkJywgdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XG4gICAgfVxuXG4gICAgb25VcGxvYWRQcm9ncmVzcyhldnQpIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzc1ZhbHVlID0gZXZ0LnByb2dyZXNzO1xuICAgIH1cblxuICAgIGhhbmRsZVNlbGVjdEZpbGUoZXZ0KSB7XG4gICAgICAgIGlmIChldnQuZXJyb3JNZXNzYWdlcyAmJiBldnQuZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoXG4gICAgICAgICAgICAgICAgZXZ0LmVycm9yTWVzc2FnZXMubWFwKGl0ZW0gPT4gYCR7aXRlbS5zdW1tYXJ5fSR7aXRlbS5kZXRhaWx9YCkuam9pbignOyAnKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblVwbG9hZGVkKGV2dCkge1xuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xuICAgICAgICB0aGlzLnVwbG9hZGVkLmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICBoYW5kbGVFcnJvcihlcnJvcikge1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcodGhpcy5nZXRFcnJvck1zZyhlcnJvcikpO1xuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XG4gICAgICAgIHRoaXMuZmlsZUNvbnRyb2wuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVycm9yTXNnKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci5lcnJvciAmJiBlcnJvci5lcnJvci5lcnJvcikge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VSZXN1bHQ6IFJlc3BvbnNlUmVzdWx0ID0gZXJyb3IuZXJyb3IuZXJyb3I7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VSZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZVJlc3VsdC5tZXNzYWdlIHx8IHJlc3BvbnNlUmVzdWx0LmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgcmV0dXJuICdDw7MgbOG7l2kgdHJvbmcgbMO6YyB1cGxvYWQgZmlsZSc7XG4gICAgfVxuXG4gICAgLy8gxJDhu5VpIHTDqm4gZmlsZS5cbiAgICByZW5hbWVGaWxlKGl0ZW0pIHtcbiAgICAgICAgdGhpcy5mb3Jtcy5yZW5hbWVGaWxlLmhlYWRlciA9ICfEkOG7lWkgdMOqbiB0aMawIG3hu6VjJztcbiAgICAgICAgdGhpcy5mb3Jtcy5yZW5hbWVGaWxlLmZvcm1EYXRhID0ge1xuICAgICAgICAgICAgZm9ybVN0YXRlOiBGb3JtU3RhdGUuRURJVCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlQ29kZTogdGhpcy5zZXJ2aWNlQ29kZSxcbiAgICAgICAgICAgICAgICBlbnRpdHk6IHRoaXMuZW50aXR5LFxuICAgICAgICAgICAgICAgIGVudGl0eUtleTogdGhpcy5fZW50aXR5S2V5LFxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZm9ybXMucmVuYW1lRmlsZS5zaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBYw7NhIGZpbGUuXG4gICAgZGVsZXRlRmlsZShleHBsb3Jlckl0ZW06IEZpbGVFeHBsb3Jlckl0ZW0pIHtcbiAgICAgICAgdGhpcy5kZWxldGVNdXRpcGxlKFtleHBsb3Jlckl0ZW1dKTtcbiAgICB9XG5cbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IEZPTERFUiBNQU5VTEFUSU9OLlxuICAgIC8vIFThuqFvIHRoxrAgbeG7pWMuXG4gICAgY3JlYXRlRm9sZGVyKCkge1xuICAgICAgICB0aGlzLmZvcm1zLmNyZWF0ZUZvbGRlci5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAgIGZvcm1TdGF0ZTogRm9ybVN0YXRlLkFERCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlQ29kZTogdGhpcy5zZXJ2aWNlQ29kZSxcbiAgICAgICAgICAgICAgICBlbnRpdHk6IHRoaXMuZW50aXR5LFxuICAgICAgICAgICAgICAgIGVudGl0eUtleTogdGhpcy5fZW50aXR5S2V5LFxuICAgICAgICAgICAgICAgIHBhcmVudEZvbGRlcklkOiB0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkLFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZm9ybXMuY3JlYXRlRm9sZGVyLnNob3cgPSB0cnVlO1xuICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XG4gICAgfVxuXG4gICAgLy8gWGVtIGNoaSB0aeG6v3RcbiAgICB2aWV3RGV0YWlsKGZvbGRlcklkOiBhbnkpIHtcbiAgICAgICAgaWYgKGZvbGRlcklkKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1zLnZpZXdEZXRhaWwuZm9ybURhdGEgPSB7IC4uLnRoaXMuZm9ybU1vZGVsIH07XG4gICAgICAgICAgICB0aGlzLmZvcm1zLnZpZXdEZXRhaWwuZm9ybURhdGEuZm9ybVN0YXRlID0gRm9ybVN0YXRlLkVESVQ7XG4gICAgICAgICAgICB0aGlzLmZvcm1zLnZpZXdEZXRhaWwuZm9ybURhdGEuZGF0YSA9IHsgaWQ6IHRoaXMuc2VsZWN0ZWRUcmVlTm9kZS5kYXRhLCBfX2Rpc2FibGVFZGl0OiB0cnVlIH07XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybXMudmlld0RldGFpbC5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIHRoaXMuZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5FRElUO1xuICAgICAgICAgICAgLy8gdGhpcy5mb3JtTW9kZWwuZGF0YSA9IHsgaWQ6IHRoaXMuc2VsZWN0ZWRUcmVlTm9kZS5kYXRhLCBfX2Rpc2FibGVFZGl0OiB0cnVlIH07XG4gICAgICAgICAgICAvLyB0aGlzLnNlbGVjdGVkVHJlZU5vZGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTeG7nyB0aMawIG3hu6VjLyBjbGljayB0aMawIG3hu6VjLlxuICAgIGdldEZvbGRlckNvbnRlbnQoY3VycmVudEZvbGRlcklkPzogc3RyaW5nLCBnb0luc2lkZSA9IGZhbHNlKSB7XG4gICAgICAgIGN1cnJlbnRGb2xkZXJJZCA9IGN1cnJlbnRGb2xkZXJJZCB8fCB0aGlzLnJvb3RGb2xkZXJJZDtcbiAgICAgICAgdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCA9IGN1cnJlbnRGb2xkZXJJZDtcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0ID09PSBFbnVtRmlsZUxheW91dC5TSU1QTEUgfHwgdGhpcy5sYXlvdXQgPT09IEVudW1GaWxlTGF5b3V0LlNJTVBMRV9GT1JfTElTVCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5iYXNlUmVhZHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xuICAgICAgICBpZiAodGhpcy51c2VCcmVhZGNydW1icykge1xuICAgICAgICAgICAgdGhpcy5zZXRCcmVhZGNydW1icygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0VmFsaWRhdGUoKTtcbiAgICB9XG5cbiAgICBzZXRWYWxpZGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQgIT0gdGhpcy5yb290Rm9sZGVySWQpIHtcbiAgICAgICAgICAgIC8vIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcbiAgICAgICAgICAgIC8vIHRoaXMub25DaGFuZ2VkLmVtaXQodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XG4gICAgICAgICAgICAvLyB0aGlzLmZpcmVFdmVudENoYW5nZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gxJDhu5VpIHTDqm4gdGjGsCBt4bulYy5cbiAgICByZW5hbWVGb2xkZXIoZm9sZGVySWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLmZvcm1zLmNyZWF0ZUZvbGRlci5oZWFkZXIgPSAnxJDhu5VpIHTDqm4gdGjGsCBt4bulYyc7XG4gICAgICAgIHRoaXMuZm9ybXNbdGhpcy5mb3JtSWRzLmNyZWF0ZUZvbGRlcl0uZm9ybURhdGEgPSB7XG4gICAgICAgICAgICBmb3JtU3RhdGU6IEZvcm1TdGF0ZS5FRElULFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHNlcnZpY2VDb2RlOiB0aGlzLnNlcnZpY2VDb2RlLFxuICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHksXG4gICAgICAgICAgICAgICAgZW50aXR5S2V5OiB0aGlzLl9lbnRpdHlLZXksXG4gICAgICAgICAgICAgICAgaWQ6IGZvbGRlcklkLFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZm9ybXMuY3JlYXRlRm9sZGVyLnNob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFjDs2EgdGjGsCBt4bulYy5cbiAgICBkZWxldGVGb2xkZXIoZXhwbG9yZXJJdGVtOiBGaWxlRXhwbG9yZXJJdGVtKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlTXV0aXBsZShbZXhwbG9yZXJJdGVtXSk7XG4gICAgfVxuXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiBDT01NT04gRk9MREVSICYgRklMRSBNQU5VTEFUSU9OLlxuICAgIC8vIE3hu58gdGjGsCBt4bulYy8gdOG7h3AuXG4gICAgYXN5bmMgb3Blbk9iamVjdChleHBsb3Jlckl0ZW06IEZpbGVFeHBsb3Jlckl0ZW0pIHtcbiAgICAgICAgaWYgKGV4cGxvcmVySXRlbS5pc0ZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhblZpZXdPbmxpbmUgPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5pc1N1cHBvcnRlZFZpZXdPbmxpbmUoZXhwbG9yZXJJdGVtLm5hbWUpO1xuICAgICAgICAgICAgaWYgKGNhblZpZXdPbmxpbmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5GaWxlVmlld2VyKGV4cGxvcmVySXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkKGV4cGxvcmVySXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQoZXhwbG9yZXJJdGVtLmlkLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFjDs2Egbmhp4buBdSB0aMawIG3hu6VjLyB04buHcC5cbiAgICBkZWxldGVNdXRpcGxlKGl0ZW1zOiBGaWxlRXhwbG9yZXJJdGVtW10pIHtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKClcbiAgICAgICAgICAgIC50aGVuKHJzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9sZGVyU2VydmljZS5kZWxldGVNdWx0aXBsZShpdGVtcylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhU3VjY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGVkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFThuqNpIHRoxrAgbeG7pWMvIHThu4dwLlxuICAgIGFzeW5jIGRvd25sb2FkKGV4cGxvcmVySXRlbTogRmlsZUV4cGxvcmVySXRlbSkge1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0oYDxiPkzGsHUgw70hPC9iPjxici8+PGJyLz5Yw6FjIG5o4bqtbiB04bqjaSB24buBP2AsICdUaMO0bmcgYsOhbycpXG4gICAgICAgICAgICAudGhlbihhc3luYyBjb25maXJtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbmZpcm0pIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0R2VuZXJhdGVEb3dubG9hZExpbmtNb2RlbChleHBsb3Jlckl0ZW0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZG93bmxvYWRMaW5rKG1vZGVsKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGNvcHlEb3dubG9hZExpbmsoZXhwbG9yZXJJdGVtOiBGaWxlRXhwbG9yZXJJdGVtKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZXRHZW5lcmF0ZURvd25sb2FkTGlua01vZGVsKGV4cGxvcmVySXRlbSk7XG4gICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2VuZXJhdGVEb3dubG9hZExpbmsobW9kZWwpXG4gICAgICAgICAgICAudGhlbihycyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5jb3B5TWVzc2FnZSh0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldEFub255bW91c0Rvd25sb2FkVXJsKHJzLmRhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCfEkMOjIHNhbyBjaMOpcCB2w6BvIGLhu5kgbmjhu5sgdOG6oW0uIMSQxrDhu51uZyBk4bqrbiBuw6B5IHPhur0gaOG6v3QgaOG6oW4gc2F1IDYwIGdpw6J5IScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdGjhu4Mgc2FvIGNow6lwIGxpw6puIGvhur90IHThuqNpIHThu4dwIHRpbiEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdGjhu4Mgc2FvIGNow6lwIGxpw6puIGvhur90IHThuqNpIHThu4dwIHRpbiEnKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFThuqNpIG5oaeG7gXUgdGjGsCBt4bulYy8gdOG7h3AuXG4gICAgYXN5bmMgZG93bmxvYWRNdWx0aXBsZSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgY29uc3QgaGFzSXRlbXMgPSBzZWxlY3RlZEl0ZW1zICYmIHNlbGVjdGVkSXRlbXMubGVuZ3RoO1xuICAgICAgICBpZiAoaGFzSXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kb3dubG9hZChzZWxlY3RlZEl0ZW1zWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyck1vZGVsID0gc2VsZWN0ZWRJdGVtcy5tYXAoZXhwbG9yZXJJdGVtID0+IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0R2VuZXJhdGVEb3dubG9hZExpbmtNb2RlbChleHBsb3Jlckl0ZW0pKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmRvd25sb2FkTXVsdGlwbGUoYXJyTW9kZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2VuZXJhdGVaaXBMaW5rQW5kQ29weSgpIHtcbiAgICAgICAgY29uc3QgYXJyTW9kZWwgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubWFwKHggPT4gdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZXRHZW5lcmF0ZURvd25sb2FkTGlua01vZGVsKHgpKTtcbiAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZW5lcmF0ZURvd25sb2FkTGlua011bHRpcGxlKGFyck1vZGVsKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MgJiYgcmVzLmRhdGEgJiYgcmVzLmRhdGEgIT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmNvcHlNZXNzYWdlKHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0QW5vbnltb3VzRG93bmxvYWRVcmwocmVzLmRhdGEpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ8SQw6Mgc2FvIGNow6lwIHbDoG8gYuG7mSBuaOG7myB04bqhbS4gxJDGsOG7nW5nIGThuqtuIG7DoHkgc+G6vSBo4bq/dCBo4bqhbiBzYXUgNjAgZ2nDonkhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0aOG7gyBzYW8gY2jDqXAgbGnDqm4ga+G6v3QgdOG6o2kgdOG7h3AgdGluIScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChleCA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhleCk7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0PDsyB24bqlbiDEkeG7gSB0cm9uZyBsw7pjIHThuqFvIGxpbmsgY2hvIGZpbGVzJyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgYXN5bmMgb3BlbkZpbGVWaWV3ZXIoZXhwbG9yZXJJdGVtOiBGaWxlRXhwbG9yZXJJdGVtKSB7XG4gICAgICAgIGNvbnN0IGhhc1BoeXNpY2FsRmlsZSA9IGF3YWl0IHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuY2hlY2tQaHlzaWNhbEZpbGUoZXhwbG9yZXJJdGVtLmlkKTtcbiAgICAgICAgaWYgKCFoYXNQaHlzaWNhbEZpbGUuc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdOG7k24gdOG6oWkgZmlsZSwgdnVpIGzDsm5nIGxpw6puIGjhu4cgcXXhuqNuIHRy4buLIHZpw6puJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmlld2VyLmZvcm1EYXRhLmRhdGEgPSB7XG4gICAgICAgICAgICBmaWxlSWQ6IGV4cGxvcmVySXRlbS5pZCxcbiAgICAgICAgICAgIGlzRmlsZVZlcnNpb246IGZhbHNlLFxuICAgICAgICAgICAgZmlsZU5hbWU6IGV4cGxvcmVySXRlbS5uYW1lLFxuICAgICAgICAgICAgc2VydmljZTogZXhwbG9yZXJJdGVtLnNlcnZpY2VDb2RlLFxuICAgICAgICAgICAgZW50aXR5OiBleHBsb3Jlckl0ZW0uZW50aXR5LFxuICAgICAgICAgICAgZW50aXR5S2V5OiBleHBsb3Jlckl0ZW0uZW50aXR5S2V5LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZvcm1zLmZpbGVWaWV3ZXIuc2hvdyA9IHRydWU7XG4gICAgfVxuXG4gICAgY2xvc2VGaWxlVmlld2VyKCkge1xuICAgICAgICB0aGlzLmZvcm1zLmZpbGVWaWV3ZXIuc2hvdyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XG4gICAgfVxuXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pk1PVkUgRklMRVMgJiBGT0xERVJTLlxuICAgIGhhc1NlbGVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtc1xuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBDaOG7jW4gdGjGsCBt4bulYy8gZmlsZSBkaSBjaHV54buDbi5cbiAgICBjYW5TZWxlY3QoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5kYXRhLm1vdmluZy5pc1NlbGVjdGluZ1xuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zXG4gICAgICAgICAgICAmJiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoO1xuICAgIH1cblxuICAgIGNhblNldE1vdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubW92aW5nLmlzU2VsZWN0aW5nXG4gICAgICAgICAgICAmJiB0aGlzLmRhdGEubW92aW5nLnNlbGVjdGVkSXRlbXNcbiAgICAgICAgICAgICYmIHRoaXMuZGF0YS5tb3Zpbmcuc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgbW92ZUV4cGxvcmVySXRlbXMoKSB7XG4gICAgICAgIGNvbnN0IGNhbk1vdmUgPSAhdGhpcy5kYXRhLm1vdmluZy5pc1NlbGVjdGluZ1xuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zXG4gICAgICAgICAgICAmJiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoXG4gICAgICAgICAgICAmJiB0aGlzLm1vZGVsLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuZGF0YVNvdXJjZS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKCFjYW5Nb3ZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRhdGEubW92aW5nID0ge1xuICAgICAgICAgICAgaXNTZWxlY3Rpbmc6IHRydWUsXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zOiB0aGlzLl9jb21tb25TZXJ2aWNlLmNsb25lT2JqZWN0KHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyksXG4gICAgICAgICAgICBzb3VyY2VGb2xkZXJJZDogdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBUaOG6oyB0aMawIG3hu6VjLyBmaWxlLlxuICAgIHNldE1vdmVFeHBsb3Jlckl0ZW1zKCkge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YS5tb3ZpbmcuaXNTZWxlY3RpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGVsID0ge1xuICAgICAgICAgICAgc291cmNlRm9sZGVySWQ6IHRoaXMuZGF0YS5tb3Zpbmcuc291cmNlRm9sZGVySWQsXG4gICAgICAgICAgICB0YXJnZXRGb2xkZXJJZDogdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCxcbiAgICAgICAgICAgIGxzdEZpbGVFeHBsb3Jlckl0ZW1zOiB0aGlzLmRhdGEubW92aW5nLnNlbGVjdGVkSXRlbXMsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fZm9sZGVyU2VydmljZS5tb3ZlRXhwbG9yZXJJdGVtcyhtb2RlbClcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ0RpIGNodXnhu4NuIHRow6BuaCBjw7RuZycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEubW92aW5nID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmdCeVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBC4buPIGRpIGNodXnhu4NuLlxuICAgIGNhbmNlbE1vdmUoKSB7XG4gICAgICAgIHRoaXMuZGF0YS5tb3ZpbmcgPSB7fTtcbiAgICB9XG5cbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+VkVSU0lPTi5cbiAgICBvcGVuRmlsZVZlcnNpb25zKGZpbGU6IEZpbGVFeHBsb3Jlckl0ZW0pIHtcbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmVyc2lvbkxpc3QuZmlsZUlkID0gZmlsZS5pZDtcblxuICAgICAgICB0aGlzLmZvcm1zLmZpbGVWZXJzaW9uTGlzdC5zaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+VklFVyBPTkxJTkUuXG4gICAgZWRpdEZpbGUoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ8SQYW5nIGvhur90IG7hu5FpIG3hu58g4bupbmcgZOG7pW5nJyk7XG4gICAgICAgIHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5jcmVhdGVOZXdNaW5vclZlcnNpb24oZmlsZS5pZCwgJycsIGZhbHNlKVxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVWZXJzaW9uID0gPEZpbGVWZXJzaW9uRFRPPnJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVVybCA9IHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5nZXRGaWxlVmVyc2lvbkRvd25sb2FkVXJsKGZpbGVWZXJzaW9uLmlkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kID0gbmV3IFRuQ2xpZW50Q29tbWFuZCgpO1xuICAgICAgICAgICAgICAgIGNvbW1hbmQuY29tbWFuZFR5cGUgPSBDb21tYW5kVHlwZS5FZGl0RmlsZTtcbiAgICAgICAgICAgICAgICBjb21tYW5kLmtleSA9IHRoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5zaWduYWxyLmNsaWVudEtleTtcbiAgICAgICAgICAgICAgICBjb25zdCBlZGl0RmlsZUNvbW1hbmQgPSBuZXcgRWRpdEZpbGVDb21tYW5kKCk7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmZpbGVTZXJ2aWNlRW5kcG9pbnQgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpRG9tYWluLmZpbGVFbmRwb2ludDtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQudXBsb2FkRmlsZUFwaSA9IHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5nZXRVcGxvYWRGaWxlVmVyc2lvbkFwaVVybCgpO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5yZW1vdmVGaWxlQXBpID0gdGhpcy5fZmlsZVZlcnNpb25TZXJ2aWNlLmdldFJlbW92ZUZpbGVWZXJzaW9uQXBpVXJsKCk7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmZpbGVVcmwgPSBmaWxlVXJsO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5pc0RyYWZ0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZ3JvdXBGaWxlTmFtZSA9IGZpbGUubmFtZTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZmlsZU5hbWUgPSBmaWxlLm5hbWU7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLnZlcnNpb24gPSBmaWxlVmVyc2lvbi52ZXJzaW9uTmFtZTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZmlsZVZlcnNpb25JZCA9IGZpbGVWZXJzaW9uLmlkO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5hY2Nlc3NUb2tlbiA9IHRoaXMuX2F1dGhlblNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBjb21tYW5kLmRhdGEgPSBlZGl0RmlsZUNvbW1hbmQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl90bkNsaWVudFNlcnZpY2Uuc2VuZENvbW1hbmQoY29tbWFuZCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9zaWduYWxyU2VydmljZS51blN1YnNjcmliZVZpZXdDb2RlKG51bGwsICdGSUxFLlZFUlNJT04uVVBEQVRFRCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlLnN0YXJ0KG51bGwsICdGSUxFLlZFUlNJT04uVVBEQVRFRCcsIGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iajogYW55O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9iai5tZXNzYWdlLmNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9iai5NZXNzYWdlLkNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldExpc3RGaWxlcyh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKENvbW1vbkVycm9yQ29kZS5FUlJPUl9TRVJWSUNFX05PVF9SVU4gPT09IGVycm9yLnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1Jlc3BvbnNlRXJyb3IoMCwgbnVsbCwgJ0ZpbGUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnRklMRV9FWFBMT1JFUi5NRVNTQUdFX0VSUk9SX0hFQURFUicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0ZJTEVfRVhQTE9SRVIuTUVTU0FHRV9FUlJPUl9ERVRBSUwnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpZmU6IDUwMDAsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4gQlJFQURDUlVNQlMuXG4gICAgYXN5bmMgc2V0QnJlYWRjcnVtYnMoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGb2xkZXJJZCA9IHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQ7XG4gICAgICAgIGlmIChjdXJyZW50Rm9sZGVySWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJzRm9sZGVyID0gYXdhaXQgdGhpcy5fZm9sZGVyU2VydmljZS5nZXREZXRhaWxXaXRoUGVybWlzc2lvbihjdXJyZW50Rm9sZGVySWQpO1xuICAgICAgICAgICAgaWYgKHJzRm9sZGVyLmRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2VQZXJtaXNzaW9uID0gcnNGb2xkZXIuZGF0YS5iYXNlUGVybWlzc2lvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJzID0gYXdhaXQgdGhpcy5fZm9sZGVyU2VydmljZS5nZXRGdWxsRm9sZGVyUGF0aChjdXJyZW50Rm9sZGVySWQpO1xuICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MgJiYgcnMuZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChycy5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBicmVhZGNydW1icyA9IHJzLmRhdGEubWFwKGZvbGRlciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmVhZGNydW1iID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBpbmRleCA9PSAwID8gdGhpcy5nZXRSb290Rm9sZGVyTmFtZShmb2xkZXIubmFtZSkgOiBmb2xkZXIubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZm9sZGVyLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M6IGZvbGRlci5pZCAhPSBjdXJyZW50Rm9sZGVySWQgPyAnZm0tY2xpY2thYmxlJyA6ICdmbS1jdXJyZW50LWZvbGRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9sZGVyQ29udGVudChmb2xkZXIuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBicmVhZGNydW1iO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFkY3J1bWJzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWRjcnVtYnNbMF0ubGFiZWwgPT0gJ1RoxrAgbeG7pWMgxJHDrW5oIGvDqG0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWRjcnVtYnMuc3BsaWNlKDAsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5icmVhZGNydW1icyA9IGJyZWFkY3J1bWJzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmJyZWFkY3J1bWJzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmJyZWFkY3J1bWJzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UucHJvY2Vzc0Vycm9yUmVzcG9uc2UocnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhLmJyZWFkY3J1bWJzID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSb290Rm9sZGVyTmFtZShmb2xkZXJOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZm9sZGVyTmFtZVByZWZpeCA9ICdUaMawIG3hu6VjICc7XG4gICAgICAgIGxldCB0eXBlT2ZGb2xkZXIgPSAnJztcbiAgICAgICAgaWYgKGZvbGRlck5hbWUuaW5jbHVkZXMoJ3VzZXIudXNlcicpKSB7XG4gICAgICAgICAgICB0eXBlT2ZGb2xkZXIgPSAnY+G7p2EgdMO0aSc7XG4gICAgICAgICAgICB0aGlzLmxvYWRUcmVlKHR5cGVPZkZvbGRlciwgJ3VzZXInLCAndXNlcicsIHRoaXMucm9vdE1vZGVsLmN1cnJlbnRVc2VyLnVzZXJJZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZm9sZGVyTmFtZS5pbmNsdWRlcygnY29uZ3ZpZWMnKSkge1xuICAgICAgICAgICAgdHlwZU9mRm9sZGVyID0gJ2PDtG5nIHZp4buHYyc7XG4gICAgICAgICAgICB0aGlzLmxvYWRUcmVlKHR5cGVPZkZvbGRlciwgdGhpcy5zZXJ2aWNlQ29kZSwgdGhpcy5lbnRpdHksIHRoaXMuX2VudGl0eUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZm9sZGVyTmFtZS5pbmNsdWRlcygndmFuYmFuJykpIHtcbiAgICAgICAgICAgIHR5cGVPZkZvbGRlciA9ICd2xINuIGLhuqNuJztcbiAgICAgICAgICAgIHRoaXMubG9hZFRyZWUodHlwZU9mRm9sZGVyLCB0aGlzLnNlcnZpY2VDb2RlLCB0aGlzLmVudGl0eSwgdGhpcy5fZW50aXR5S2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHR5cGVPZkZvbGRlciA9ICfEkcOtbmgga8OobSc7XG4gICAgICAgICAgICB0aGlzLmxvYWRUcmVlKHR5cGVPZkZvbGRlciwgdGhpcy5zZXJ2aWNlQ29kZSwgdGhpcy5lbnRpdHksIHRoaXMuX2VudGl0eUtleSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7Zm9sZGVyTmFtZVByZWZpeH0ke3R5cGVPZkZvbGRlcn1gO1xuICAgIH1cblxuICAgIC8vID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4gU0lHTi5cbiAgICAvLyBUT0RPOiBMxrB1IMO9IHjhu60gbMO9IHRyxrDhu51uZyBkb3VibGUgY2xpY2sgdsOgbyBuw7p0XG4gICAgc2lnbkZpbGUoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiBrw70gc+G7kSB2xINuIGLhuqNuIG7DoHk/JykudGhlbihhc3luYyBycyA9PiB7XG4gICAgICAgICAgICBpZiAocnMpIHtcbiAgICAgICAgICAgICAgICBsZXQgc291cmNlRmlsZUlkID0gZmlsZS5pZDtcbiAgICAgICAgICAgICAgICBsZXQgc291cmNlRmlsZSA9IGZpbGU7XG4gICAgICAgICAgICAgICAgLy8gS8O9IHPhu5EgZmlsZSB3b3JkIC0gY+G6p24gY29udmVydCBzYW5nIHBkZiB0csaw4bubY1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLm5lZWRDb252ZXJ0QmVmb3JlU2lnbihmaWxlLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgZmlsZSBiZWZvcmUgc2lnblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcnNDb252ZXJ0ID0gYXdhaXQgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jb252ZXJ0RG9jdW1lbnRUb1BkZkFuZFNhdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlSWQ6IHNvdXJjZUZpbGVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmNoYW5nZUZpbGVFeHRlbnNpb24oZmlsZS5uYW1lLCAncGRmJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVySW5zdGFuY2VJZDogZmlsZS5wYXJlbnRGb2xkZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lclR5cGU6IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudXNlcklkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcnNDb252ZXJ0IHx8ICFyc0NvbnZlcnQuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBjaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgxJHhu4Mga8O9LiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKGBDaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgdGjDoG5oIGPDtG5nYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmlsZUlkID0gcnNDb252ZXJ0LmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmlsZSA9IHsgaWQ6IHNvdXJjZUZpbGVJZCB9IGFzIEZpbGVFeHBsb3Jlckl0ZW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBjaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgxJHhu4Mga8O9LiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmdlbmVyYXRlTGlua0Rvd25sb2FkKHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZUlkOiBzb3VyY2VGaWxlSWQsXG4gICAgICAgICAgICAgICAgfSBhcyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTykudGhlbihycyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0RG93bmxvYWRGb3JTaWduVXJsKHJzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm1zID0ge307XG4gICAgICAgICAgICAgICAgICAgIHBybXNbJ0ZpbGVVcGxvYWRIYW5kbGVyJ10gPSBgJHt0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpRG9tYWluLmZpbGVFbmRwb2ludH0vJHt0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vS3lTb0ZpbGUvU2F2ZVBoeXNpY2FsU2lnbmVkRmlsZWA7XG4gICAgICAgICAgICAgICAgICAgIHBybXNbJ1Nlc3Npb25JZCddID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHBybXNbJ0ZpbGVOYW1lJ10gPSB1cmw7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdmFyaWFibGUtbmFtZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBqc29uX3BybXMgPSBKU09OLnN0cmluZ2lmeShwcm1zKTtcbiAgICAgICAgICAgICAgICAgICAgdmdjYV9zaWduX2FwcHJvdmVkKGpzb25fcHJtcywgKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRPYmogPSBKU09OLnBhcnNlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0T2JqLkZpbGVTZXJ2ZXIgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLnNhdmVTaWduZWRGaWxlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmlsZTogc291cmNlRmlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEZpbGVJZDogcmVzdWx0T2JqLkZpbGVTZXJ2ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihyc3MgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdLw70gc+G7kSB0aMOgbmggY8O0bmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZENvbW1lbnQoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiBiw7p0IHBow6ogdsSDbiBi4bqjbiBuw6B5PycpLnRoZW4oYXN5bmMgcnMgPT4ge1xuICAgICAgICAgICAgaWYgKHJzKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNvdXJjZUZpbGVJZCA9IGZpbGUuaWQ7XG4gICAgICAgICAgICAgICAgbGV0IHNvdXJjZUZpbGUgPSBmaWxlO1xuICAgICAgICAgICAgICAgIC8vIEvDvSBz4buRIGZpbGUgd29yZCAtIGPhuqduIGNvbnZlcnQgc2FuZyBwZGYgdHLGsOG7m2NcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5uZWVkQ29udmVydEJlZm9yZVNpZ24oZmlsZS5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IGZpbGUgYmVmb3JlIHNpZ25cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJzQ29udmVydCA9IGF3YWl0IHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuY29udmVydERvY3VtZW50VG9QZGZBbmRTYXZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUlkOiBzb3VyY2VGaWxlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jaGFuZ2VGaWxlRXh0ZW5zaW9uKGZpbGUubmFtZSwgJ3BkZicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRlckluc3RhbmNlSWQ6IGZpbGUucGFyZW50Rm9sZGVySWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXJUeXBlOiB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnVzZXJJZC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJzQ29udmVydCB8fCAhcnNDb252ZXJ0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYEPDsyBs4buXaSB44bqjeSByYSBraGkgY2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIMSR4buDIGvDvS4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcyhgQ2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIHRow6BuaCBjw7RuZ2ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGVJZCA9IHJzQ29udmVydC5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGUgPSB7IGlkOiBzb3VyY2VGaWxlSWQgfSBhcyBGaWxlRXhwbG9yZXJJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYEPDsyBs4buXaSB44bqjeSByYSBraGkgY2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIMSR4buDIGvDvS4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5nZW5lcmF0ZUxpbmtEb3dubG9hZCh7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVJZDogc291cmNlRmlsZUlkLFxuICAgICAgICAgICAgICAgIH0gYXMgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8pLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldERvd25sb2FkRm9yU2lnblVybChycy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJtcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBwcm1zWydGaWxlVXBsb2FkSGFuZGxlciddID0gYCR7dGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnR9LyR7dGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaVZlcnNpb259L0t5U29GaWxlL1NhdmVQaHlzaWNhbFNpZ25lZEZpbGVgO1xuICAgICAgICAgICAgICAgICAgICBwcm1zWydTZXNzaW9uSWQnXSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBwcm1zWydGaWxlTmFtZSddID0gdXJsO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdmFyaWFibGUtbmFtZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBqc29uX3BybXMgPSBKU09OLnN0cmluZ2lmeShwcm1zKTtcbiAgICAgICAgICAgICAgICAgICAgdmdjYV9jb21tZW50KGpzb25fcHJtcywgKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRPYmogPSBKU09OLnBhcnNlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0T2JqLkZpbGVTZXJ2ZXIgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLnNhdmVTaWduZWRGaWxlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmlsZTogc291cmNlRmlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcEZpbGVJZDogcmVzdWx0T2JqLkZpbGVTZXJ2ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihyc3MgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdU4bqhbyBiw7p0IHBow6ogdGjDoG5oIGPDtG5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBhZGRDb21tZW50QW5kU2lnbihmaWxlOiBGaWxlRXhwbG9yZXJJdGVtKSB7XG4gICAgICAgIGNvbnN0IHJzID0gYXdhaXQgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKCdC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBtdeG7kW4gdOG6oW8gYsO6dCBwaMOqIHbDoCBrw70gdsSDbiBi4bqjbiBuw6B5PycpO1xuXG4gICAgICAgIGlmIChycykge1xuICAgICAgICAgICAgbGV0IHNvdXJjZUZpbGVJZCA9IGZpbGUuaWQ7XG4gICAgICAgICAgICBsZXQgc291cmNlRmlsZSA9IGZpbGU7XG5cbiAgICAgICAgICAgIC8vIEvDvSBz4buRIGZpbGUgd29yZCAtIGPhuqduIGNvbnZlcnQgc2FuZyBwZGYgdHLGsOG7m2NcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLm5lZWRDb252ZXJ0QmVmb3JlU2lnbihmaWxlLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gY29udmVydCBmaWxlIGJlZm9yZSBzaWduXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcnNDb252ZXJ0ID0gYXdhaXQgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jb252ZXJ0RG9jdW1lbnRUb1BkZkFuZFNhdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VJZDogc291cmNlRmlsZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jaGFuZ2VGaWxlRXh0ZW5zaW9uKGZpbGUubmFtZSwgJ3BkZicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVySW5zdGFuY2VJZDogZmlsZS5wYXJlbnRGb2xkZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyVHlwZTogdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS51c2VySWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyc0NvbnZlcnQgfHwgIXJzQ29udmVydC5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYEPDsyBs4buXaSB44bqjeSByYSBraGkgY2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIMSR4buDIGvDvS4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKGBDaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgdGjDoG5oIGPDtG5nYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlSWQgPSByc0NvbnZlcnQuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGUgPSB7IGlkOiBzb3VyY2VGaWxlSWQgfSBhcyBGaWxlRXhwbG9yZXJJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBjaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgxJHhu4Mga8O9LiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1YCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkTGluayA9IGF3YWl0IHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuZ2VuZXJhdGVMaW5rRG93bmxvYWQoe1xuICAgICAgICAgICAgICAgIGZpbGVJZDogc291cmNlRmlsZUlkLFxuICAgICAgICAgICAgfSBhcyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0RG93bmxvYWRGb3JTaWduVXJsKGRvd25sb2FkTGluay5kYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHBybXMgPSB7XG4gICAgICAgICAgICAgICAgRmlsZVVwbG9hZEhhbmRsZXI6IGAke3RoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZUVuZHBvaW50fS8ke3RoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS9LeVNvRmlsZS9TYXZlUGh5c2ljYWxTaWduZWRGaWxlYCxcbiAgICAgICAgICAgICAgICBTZXNzaW9uSWQ6ICcnLFxuICAgICAgICAgICAgICAgIEZpbGVOYW1lOiB1cmxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGpzb25fcHJtcyA9IEpTT04uc3RyaW5naWZ5KHBybXMpO1xuXG4gICAgICAgICAgICAvLyBXcmFwIGNhbGxiYWNrLWJhc2VkIGZ1bmN0aW9ucyBpbiBQcm9taXNlc1xuICAgICAgICAgICAgY29uc3QgY29tbWVudFJlc3VsdCA9IGF3YWl0IG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgICB2Z2NhX2NvbW1lbnQoanNvbl9wcm1zLCAocmVzdWx0OiBhbnkpID0+IHJlc29sdmUocmVzdWx0KSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0T2JqID0gSlNPTi5wYXJzZShjb21tZW50UmVzdWx0KTtcbiAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkTGluazIgPSBhd2FpdCB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmdlbmVyYXRlTGlua0Rvd25sb2FkKHtcbiAgICAgICAgICAgICAgICBmaWxlSWQ6IHJlc3VsdE9iai5GaWxlU2VydmVyLFxuICAgICAgICAgICAgfSBhcyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHVybDIgPSB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldERvd25sb2FkRm9yU2lnblVybChkb3dubG9hZExpbmsyLmRhdGEpO1xuICAgICAgICAgICAgY29uc3QgcHJtczIgPSB7XG4gICAgICAgICAgICAgICAgRmlsZVVwbG9hZEhhbmRsZXI6IGAke3RoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZUVuZHBvaW50fS8ke3RoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS9LeVNvRmlsZS9TYXZlUGh5c2ljYWxTaWduZWRGaWxlYCxcbiAgICAgICAgICAgICAgICBTZXNzaW9uSWQ6ICcnLFxuICAgICAgICAgICAgICAgIEZpbGVOYW1lOiB1cmwyXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBqc29uX3BybXMyID0gSlNPTi5zdHJpbmdpZnkocHJtczIpO1xuXG4gICAgICAgICAgICBjb25zdCBzaWduUmVzdWx0ID0gYXdhaXQgbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZnY2Ffc2lnbl9hcHByb3ZlZChqc29uX3BybXMyLCAocmVzdWx0OiBhbnkpID0+IHJlc29sdmUocmVzdWx0KSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc2lnblJlc3VsdE9iaiA9IEpTT04ucGFyc2Uoc2lnblJlc3VsdCk7XG5cbiAgICAgICAgICAgIGlmIChzaWduUmVzdWx0T2JqLkZpbGVTZXJ2ZXIgIT0gJycpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLnNhdmVTaWduZWRGaWxlKHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlRmlsZTogc291cmNlRmlsZSxcbiAgICAgICAgICAgICAgICAgICAgdGVtcEZpbGVJZDogc2lnblJlc3VsdE9iai5GaWxlU2VydmVyLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdU4bqhbyBiw7p0IHBow6ogdsOgIGvDvSB0aMOgbmggY8O0bmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNpZ25GaWxlRG9uVmkoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2VcbiAgICAgICAgICAgIC5zaG93Q29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIGvDvSBz4buRIMSRxqFuIHbhu4sgdsSDbiBi4bqjbiBuw6B5PycpXG4gICAgICAgICAgICAudGhlbihhc3luYyAocnMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocnMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNvdXJjZUZpbGVJZCA9IGZpbGUuaWQ7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzb3VyY2VGaWxlID0gZmlsZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UubmVlZENvbnZlcnRCZWZvcmVTaWduKGZpbGUubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgZmlsZSBiZWZvcmUgc2lnblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByc0NvbnZlcnQgPSBhd2FpdCB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmNvbnZlcnREb2N1bWVudFRvUGRmQW5kU2F2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlSWQ6IHNvdXJjZUZpbGVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jaGFuZ2VGaWxlRXh0ZW5zaW9uKGZpbGUubmFtZSwgJ3BkZicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkZXJJbnN0YW5jZUlkOiBmaWxlLnBhcmVudEZvbGRlcklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lclR5cGU6IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudXNlcklkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyc0NvbnZlcnQgfHwgIXJzQ29udmVydC5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBjaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgxJHhu4Mga8O9LiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcyhgQ2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIHRow6BuaCBjw7RuZ2ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmlsZUlkID0gcnNDb252ZXJ0LmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGUgPSB7IGlkOiBzb3VyY2VGaWxlSWQgfSBhcyBGaWxlRXhwbG9yZXJJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGBDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGNodXnhu4NuIMSR4buVaSB0w6BpIGxp4buHdSAke2ZpbGUubmFtZX0gdGjDoG5oIHBkZiDEkeG7gyBrw70uIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgLmdlbmVyYXRlTGlua0Rvd25sb2FkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZpbGVWZXJzaW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlSWQ6IHNvdXJjZUZpbGVJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8pXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldERvd25sb2FkRm9yU2lnblVybChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnMuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJtcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybXNbJ0ZpbGVVcGxvYWRIYW5kbGVyJ10gPSBgJHt0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpRG9tYWluLmZpbGVFbmRwb2ludH0vJHt0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vS3lTb0ZpbGUvU2F2ZVBoeXNpY2FsU2lnbmVkRmlsZWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJtc1snU2Vzc2lvbklkJ10gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm1zWydGaWxlTmFtZSddID0gdXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRydXnhu4FuIHPhu5EsIG5nw6B5IGvDvSBz4buRIHBow7JuZyBiYW4gbuG6v3UgY+G6p25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aGF0ID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5jb250cm9sICYmIHRoYXQuY29udHJvbC5kYXRhS3lTb0RvblZpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFLeVNvRG9uVmkgPSAoPEZ1bmN0aW9uPnRoYXQuY29udHJvbC5kYXRhS3lTb0RvblZpKSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YUt5U29Eb25WaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbOG6pXkgc+G7kSBEb2NOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhS3lTb0RvblZpLmRvY051bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybXNbJ0RvY051bWJlciddID0gZGF0YUt5U29Eb25WaS5kb2NOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBs4bqleSBuZ8OgeSBiYW4gaMOgbmggdmIgxJFpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YUt5U29Eb25WaS5pc3N1ZWREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJtc1snSXNzdWVkRGF0ZSddID0gZGF0YUt5U29Eb25WaS5pc3N1ZWREYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB2YXJpYWJsZS1uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QganNvbl9wcm1zID0gSlNPTi5zdHJpbmdpZnkocHJtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmdjYV9zaWduX2lzc3VlZChqc29uX3BybXMsIChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRPYmogPSBKU09OLnBhcnNlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRPYmouRmlsZVNlcnZlciAhPSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zYXZlU2lnbmVkRmlsZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGU6IHNvdXJjZUZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBGaWxlSWQ6IHJlc3VsdE9iai5GaWxlU2VydmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJzcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdLw70gc+G7kSB0aMOgbmggY8O0bmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2lnbkt5U2ltRmlsZShmaWxlOiBGaWxlRXhwbG9yZXJJdGVtKSB7XG4gICAgICAgIHRoaXMuZm9ybXMua3lTb1NpbS5zaG93ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tb2RlbC5hZHZhbmNlRGF0YSA9IGZpbGU7XG4gICAgfVxuXG4gICAgYXN5bmMgc2lnbkZpbGVTbWFydENBKHJvd0RhdGEpIHtcbiAgICAgICAgY29uc3QgZGF0YUt5U28gPSAoYXdhaXQgdGhpcy5fdXNlckNodUt5U29TZXJ2aWNlLmdldERldGFpbEJ5RmlsdGVyKFtcbiAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdwcm92aWRlcicsIE9wZXJhdG9yLmVxdWFsLCAnU21hcnRDQScpLFxuICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ3VzZXJJZCcsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnVzZXJJZCksXG4gICAgICAgIF0pKS5kYXRhO1xuICAgICAgICBpZiAoIWRhdGFLeVNvKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ05nxrDhu51pIGTDuW5nIGNoxrBhIGPhuqV1IGjDrG5oIHRow7RuZyB0aW4ga8O9IHPhu5EnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm1zLmZpbGVWaWV3ZXIuZm9ybURhdGEuZGF0YSA9IHtcbiAgICAgICAgICAgIGZpbGVJZDogcm93RGF0YS5pZCxcbiAgICAgICAgICAgIGlzRmlsZVZlcnNpb246IGZhbHNlLFxuICAgICAgICAgICAgZmlsZU5hbWU6IHJvd0RhdGEubmFtZSxcbiAgICAgICAgICAgIHNlcnZpY2U6IHJvd0RhdGEuc2VydmljZUNvZGUsXG4gICAgICAgICAgICBlbnRpdHk6IHJvd0RhdGEuZW50aXR5LFxuICAgICAgICAgICAgZW50aXR5S2V5OiByb3dEYXRhLmVudGl0eUtleSxcbiAgICAgICAgICAgIGZpbGVCYXNlNjRDb250ZW50OiBkYXRhS3lTby5maWxlQmFzZTY0Q29udGVudCxcbiAgICAgICAgICAgIHNob3dLeVNvQnV0dG9uOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZvcm1zLmZpbGVWaWV3ZXIuc2hvdyA9IHRydWU7XG4gICAgfVxuXG4gICAgYXN5bmMgc2hhcmVGb2xkZXIoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xuICAgICAgICB0aGlzLmZvcm1zLnNoYXJlRm9sZGVyLmRhdGEgPSBmaWxlO1xuICAgICAgICB0aGlzLmZvcm1zLnNoYXJlRm9sZGVyLnNob3cgPSB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIHNoYXJlRmlsZShmaWxlOiBGaWxlRXhwbG9yZXJJdGVtKSB7XG4gICAgICAgIHRoaXMuZm9ybXMuc2hhcmVGaWxlLmRhdGEgPSBmaWxlO1xuICAgICAgICB0aGlzLmZvcm1zLnNoYXJlRmlsZS5zaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBzZWxlY3RGaWxlKCkge1xuICAgICAgICBpZiAodGhpcy5maWxlQ29udHJvbC5iYXNpY0ZpbGVJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5maWxlQ29udHJvbC5iYXNpY0ZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2aWV3TGlzdFNpZ24oZTogRXZlbnQsIHNpZ25hdHVyZXM6IGFueSkge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmZvcm1zLnNpZ25hdHVyZURldGFpbC5zaG93ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tb2RlbC5hZHZhbmNlRGF0YSA9IHNpZ25hdHVyZXM7XG4gICAgfVxuXG4gICAgb25Sb3dTZWxlY3QoZXZ0KSB7XG4gICAgICAgIHRoaXMub25TZWxlY3RlZC5lbWl0KHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyk7XG4gICAgfVxuXG4gICAgcmVsb2FkRGF0YSgpIHtcbiAgICAgICAgdGhpcy5fZmlsZU1hbmFnZXJTZXJ2aWNlLnN1YnNWYXIgPSB0aGlzLl9maWxlTWFuYWdlclNlcnZpY2UuaW52b2tlUmVsb2FkRnVuY3Rpb24uc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBhZGRBdHRhY2hMaW5rKCkge1xuICAgICAgICBpZiAodGhpcy50eXBlZExpbmsgJiYgdGhpcy50eXBlZExpbmsubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5wYXJzZUF0dGFjaExpbmsodGhpcy50eXBlZExpbmspO1xuICAgICAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgICAgIC8vIGRvIGxvZ2ljIGNvcHkgZmlsZSBieSBoYXNoXG4gICAgICAgICAgICAgICAgdGhpcy50eXBlZExpbmsgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dBdHRhY2hMaW5rQm94ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuY29weUZpbGVCeUhhc2gob2JqLCB0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlcy5zdWNjZXNzIHx8ICFyZXMuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ2PDsyBs4buXaSB0cm9uZyBsw7pjIGzhuqV5IGZpbGUgdOG7qyBsaW5rIScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHsgZmlsZW9iajogcmVzIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9sZGVyQ29udGVudCh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1ThuqNpIHRow6BuaCBjw7RuZyEnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyBo4buXIHRy4bujIGxpw6puIGvhur90IHThu6sgaOG7hyB0aOG7kW5nIGtow6FjIGhv4bq3YyBsacOqbiBr4bq/dCBraMO0bmcgxJHDum5nIScpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlQXR0YWNoTGluayhsaW5rKSB7XG4gICAgICAgIGlmIChsaW5rKSB7XG4gICAgICAgICAgICAvLyBUb2RvOiBz4butYSB04bqhbSDEkeG7gyBjaOG6oXkgdHLDqm4gbG9jYWwsIHNhdSBraGkgb2sgdGjDrCBwaOG6o2kgdGjDqm0gJy9maWxlJ1xuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBsaW5rLnNwbGl0KCdmaWxlL3Y1L0Rvd25sb2FkTGluay9Eb3dubG9hZC8nKTtcbiAgICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT0gMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0c1sxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGNvcHlGaWxlRnJvbVNoYXJlZChzZWxlY3RlZEZpbGVzOiBhbnlbXSwgaWREZXNGb2xkZXI6IHN0cmluZykge1xuICAgICAgICBpZiAoc2VsZWN0ZWRGaWxlcz8ubGVuZ3RoIHx8IGlkRGVzRm9sZGVyICE9IG51bGwgfHwgaWREZXNGb2xkZXIgIT0gJycpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkc0ZpbGU6IHN0cmluZ1tdID0gc2VsZWN0ZWRGaWxlcy5tYXAoeCA9PiB4LmlkKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmNvcHlNdWx0aXBsZUZpbGUoaWRzRmlsZSwgaWREZXNGb2xkZXIpO1xuICAgICAgICAgICAgaWYgKCFyZXMuc3VjY2VzcyB8fCAhcmVzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0zhu5dpIGNvcHkgZmlsZSB04burIHRoxrAgbeG7pWMgZMO5bmcgY2h1bmcnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ0NvcHkgZmlsZSB04burIHRoxrAgbeG7pWMgZMO5bmcgY2h1bmcgdGjDoG5oIGPDtG5nJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgY29weSB04burIHRodSBt4bulYyBkw7luZyBjaHVuZycpO1xuICAgIH1cblxuICAgIGZvY3VzSW5wdXQoaW5wdXQ6IGFueSkge1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgIH1cblxuICAgIGNob25DaHVLeSgpIHtcbiAgICAgICAgdGhpcy5maWxlS3lTb1NpbS5jaG9uQ2h1S3koKTtcbiAgICB9XG5cbiAgICBreVNvKCkge1xuICAgICAgICB0aGlzLmZpbGVLeVNvU2ltLmt5U28oKTtcbiAgICB9XG5cbiAgICBzaG93UGlja2VyVGFpTGlldSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZpbGVQaWNrZXJTZXR0aW5nLmVudGl0eUtleSkge1xuICAgICAgICAgICAgdGhpcy5maWxlUGlja2VyU2V0dGluZy5lbnRpdHlLZXkgPSB0aGlzLmVudGl0eUtleVBpY2tlcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dUYWlMaWV1RHVuZ0NodW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBsb2FkVHJlZShyb290TmFtZTogc3RyaW5nLCBzZXJ2aWNlQ29kZTogc3RyaW5nLCBlbnRpdHk6IHN0cmluZywgZW50aXR5S2V5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5yb290VHJlZU5vZGUgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGBUaMawIG3hu6VjICR7cm9vdE5hbWV9YCxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLnJvb3RGb2xkZXJJZCxcbiAgICAgICAgICAgICAgICBjb2xsYXBzZWRJY29uOiAncGkgcGktZm9sZGVyJyxcbiAgICAgICAgICAgICAgICBleHBhbmRlZEljb246ICdwaSBwaS1mb2xkZXItb3BlbicsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKCk7XG4gICAgICAgIGdyaWRJbmZvLmZpbHRlcnMgPSBbdGhpcy5uZXdGaWx0ZXIoJ2VudGl0eUtleScsIE9wZXJhdG9yLmVxdWFsLCBlbnRpdHlLZXkpXTtcbiAgICAgICAgZ3JpZEluZm8uc29ydHMgPSBbXTtcbiAgICAgICAgZ3JpZEluZm8ucGFnZUluZm8gPSB7IHBhZ2U6IDEsIHBhZ2VTaXplOiA5OTk5IH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2ZvbGRlclNlcnZpY2UuZ2V0QnlHcmlkUmVxdWVzdChncmlkSW5mbyk7XG4gICAgICAgIGxldCByb290Rm9sZGVyID0gcmVzdWx0LmRhdGEuZmluZCh4ID0+IHgubmFtZSA9PSBgc2VydmljZUNvZGUuZW50aXR5LmVudGl0eUtleWApO1xuXG4gICAgICAgIGlmICghcm9vdEZvbGRlcikge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZm9sZGVyU2VydmljZS5HZXRTZXJ2aWNlRm9sZGVyKHNlcnZpY2VDb2RlLCBlbnRpdHksIGVudGl0eUtleSkudGhlbih4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoeC5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvb3RGb2xkZXIgPSB7IGlkOiB4LmRhdGEgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm9vdEZvbGRlcikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCA9IHJvb3RGb2xkZXIuaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJvb3RUcmVlTm9kZSA9IFt7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGBUaMawIG3hu6VjICR7cm9vdE5hbWV9YCxcbiAgICAgICAgICAgICAgICBkYXRhOiByb290Rm9sZGVyLmlkLFxuICAgICAgICAgICAgICAgIGNvbGxhcHNlZEljb246ICdwaSBwaS1mb2xkZXInLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkSWNvbjogJ3BpIHBpLWZvbGRlci1vcGVuJyxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5idWlsZFRyZWVEYXRhKHJlc3VsdC5kYXRhLCByb290Rm9sZGVyLmlkKVxuICAgICAgICAgICAgfV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm9vdFRyZWVOb2RlICYmIHRoaXMucm9vdFRyZWVOb2RlWzBdKSB7XG4gICAgICAgICAgICB0aGlzLnJvb3RUcmVlTm9kZVswXS5sYWJlbCA9IGBUaMawIG3hu6VjICR7cm9vdE5hbWV9YDtcbiAgICAgICAgICAgIHRoaXMucm9vdFRyZWVOb2RlWzBdLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJ1aWxkVHJlZURhdGEoZGF0YSwgcm9vdEZvbGRlcklkKTogVHJlZU5vZGU8YW55PltdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IHJvb3REYXRhID0gZGF0YS5maWx0ZXIoeCA9PiB4LnBhcmVudEZvbGRlcklkID09IHJvb3RGb2xkZXJJZCk7XG4gICAgICAgIGlmIChyb290RGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygcm9vdERhdGEpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZEljb246ICdwaSBwaS1mb2xkZXInLFxuICAgICAgICAgICAgICAgICAgICBleHBhbmRlZEljb246ICdwaSBwaS1mb2xkZXItb3BlbicsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLmJ1aWxkVHJlZURhdGEoZGF0YSwgaXRlbS5pZClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHNldFNlbGVjdGVkRm9sZGVyKG5vZGU6IFRyZWVOb2RlLCBmb2xkZXJJZDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChub2RlLmRhdGEgPT0gZm9sZGVySWQpIHtcbiAgICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRyZWVOb2RlID0gbm9kZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zZXRTZWxlY3RlZEZvbGRlcihub2RlLmNoaWxkcmVuW2ldLCBmb2xkZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIG5vZGVTZWxlY3Qobm9kZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2ZvbGRlcklkID0gbm9kZUV2ZW50Lm5vZGUuZGF0YTtcbiAgICAgICAgdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCA9IG5vZGVFdmVudC5ub2RlLmRhdGE7XG4gICAgICAgIGF3YWl0IHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YShuZXcgR3JpZEluZm8pO1xuICAgICAgICBhd2FpdCB0aGlzLmdldEZvbGRlckNvbnRlbnQodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XG4gICAgfVxuXG4gICAgZ2V0UGF0aEltYWdlKGZpbGVJZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0VXJsSW1hZ2UoZmlsZUlkKTtcbiAgICB9XG59XG4iXX0=
|