tnx-shared 5.1.367 → 5.1.370
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/assets/package.json.tmp +13 -0
- package/bundles/tnx-shared.umd.js +399 -123
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +2 -2
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/form-schema.d.ts +5 -0
- package/classes/form-schema.d.ts.map +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
- package/components/crud/crud-list/crud-list.component.d.ts.map +1 -1
- package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
- package/components/file-explorer/services/file-data.service.d.ts.map +1 -1
- package/components/form-builder/form-builder.component.d.ts +11 -0
- package/components/form-builder/form-builder.component.d.ts.map +1 -0
- package/components/form-builder/form-builder.component.ngfactory.d.ts.map +1 -0
- package/components/form-builder/form-builder.component.scss.shim.ngstyle.d.ts.map +1 -0
- package/components/image-uploader/image-uploader.component.d.ts +47 -0
- package/components/image-uploader/image-uploader.component.d.ts.map +1 -0
- package/components/image-uploader/image-uploader.component.ngfactory.d.ts.map +1 -0
- package/components/image-uploader/image-uploader.component.scss.shim.ngstyle.d.ts.map +1 -0
- package/components/tn-tabview/tn-tabview.component.d.ts +1 -0
- package/components/tn-tabview/tn-tabview.component.d.ts.map +1 -1
- package/components/workflow/services/workflow-permission-detail.service.d.ts.map +1 -1
- package/esm2015/classes/form-schema.js +10 -1
- package/esm2015/components/chat/chat-box/chat-box.component.js +1 -1
- package/esm2015/components/chat/chat-send-message-box/chat-send-message-box.component.js +1 -1
- package/esm2015/components/crud/crud-form/crud-form.component.js +5 -3
- package/esm2015/components/crud/crud-list/crud-list.component.js +3 -3
- package/esm2015/components/file-explorer/file-manager/file-manager.component.js +2 -3
- package/esm2015/components/file-explorer/services/file-data.service.js +19 -7
- package/esm2015/components/form-builder/form-builder.component.js +31 -0
- package/esm2015/components/image-uploader/image-uploader.component.js +206 -0
- package/esm2015/components/tn-tabview/tn-tabview.component.js +5 -2
- package/esm2015/components/workflow/services/workflow-permission-detail.service.js +4 -3
- package/esm2015/models/grid-info.js +2 -2
- package/esm2015/services/customize-ui.service.js +1 -1
- package/esm2015/tnx-shared.js +106 -104
- package/esm2015/tnx-shared.module.js +8 -2
- package/fesm2015/tnx-shared.js +270 -17
- package/fesm2015/tnx-shared.js.map +1 -1
- package/models/grid-info.d.ts +1 -1
- package/models/grid-info.d.ts.map +1 -1
- package/package.json +4 -3
- package/tnx-shared.d.ts +105 -103
- package/tnx-shared.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
- package/tnx-shared.module.d.ts +3 -1
- package/tnx-shared.module.d.ts.map +1 -1
- package/tnx-shared.module.ngfactory.d.ts.map +1 -1
|
@@ -30,7 +30,7 @@ import { FileObjectService } from '../services/file-object.service';
|
|
|
30
30
|
import { FileVersionService } from '../services/file-version.service';
|
|
31
31
|
import { FolderService } from '../services/folder.service';
|
|
32
32
|
import { MyDriveService } from '../services/my-drive.service';
|
|
33
|
-
import { ColumnSchemaBase, CrudFormData, EnumFileLayout, FileManagerControlSchema, HeightType, ModelSchema, Operator, PopupSize
|
|
33
|
+
import { ColumnSchemaBase, CrudFormData, EnumFileLayout, FileManagerControlSchema, HeightType, ModelSchema, Operator, PopupSize } from './../../../classes/form-schema';
|
|
34
34
|
import { FileExplorerService } from './../services/file-explorer.service';
|
|
35
35
|
export class FileManagerComponent extends DataListBase {
|
|
36
36
|
constructor(_myDriveService, _injector, _messageService, _translateService, _authenService, _tnClientService, _fileVersionService, _moduleConfigService, _notifierService, _signalrService, _fileExplorerService, _fileExplorerNewService, _deviceDetectorService, _folderService, _fileObjectService, _downloadLinkService, _fileManagerService) {
|
|
@@ -216,7 +216,6 @@ export class FileManagerComponent extends DataListBase {
|
|
|
216
216
|
this.rootFolderId = rootFolderId;
|
|
217
217
|
}
|
|
218
218
|
setDatasource(dataSource = []) {
|
|
219
|
-
debugger;
|
|
220
219
|
this._dataSource = dataSource;
|
|
221
220
|
this._oldValue = this._value;
|
|
222
221
|
const value = [];
|
|
@@ -1296,4 +1295,4 @@ FileManagerComponent.propDecorators = {
|
|
|
1296
1295
|
onChanged: [{ type: Output }],
|
|
1297
1296
|
onSelected: [{ type: Output }]
|
|
1298
1297
|
};
|
|
1299
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2ZpbGUtZXhwbG9yZXIvZmlsZS1tYW5hZ2VyL2ZpbGUtbWFuYWdlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFZLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1B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UUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLDR3dUJBQTRDO2dCQUU1QyxTQUFTLEVBQUU7b0JBQ1A7d0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzt3QkFDbkQsS0FBSyxFQUFFLElBQUk7cUJBQ2Q7b0JBQ0QsdUJBQXVCO2lCQUMxQjs7YUFDSjs7O1lBbENRLGNBQWM7WUFuQ3VCLFFBQVE7WUFLbkMsY0FBYztZQUh4QixnQkFBZ0I7WUFnQmhCLGFBQWE7WUFLYixlQUFlO1lBVWYsa0JBQWtCO1lBYmxCLG1CQUFtQjtZQUNuQixlQUFlO1lBQ2YsY0FBYztZQXlCZCxtQkFBbUI7WUFoQm5CLHNCQUFzQjtZQTVCdEIscUJBQXFCO1lBK0JyQixhQUFhO1lBRmIsaUJBQWlCO1lBSGpCLG1CQUFtQjtZQVZuQixrQkFBa0I7OzswQkFzRHRCLFNBQVMsU0FBQyxhQUFhOzBCQUN2QixTQUFTLFNBQUMsYUFBYTswQkFDdkIsU0FBUyxTQUFDLGFBQWE7c0JBRXZCLEtBQUs7OEJBQ0wsS0FBSztxQkFHTCxLQUFLO2lDQUNMLEtBQUs7MEJBQ0wsS0FBSzs0Q0FDTCxLQUFLOzJDQUNMLEtBQUs7NENBQ0wsS0FBSzsyQ0FDTCxLQUFLOzZDQUNMLEtBQUs7NENBQ0wsS0FBSzt1QkFDTCxLQUFLOzZCQUNMLEtBQUs7MEJBQ0wsS0FBSztxQkFDTCxLQUFLO3dCQUNMLEtBQUs7MkJBYUwsS0FBSzt1QkFJTCxLQUFLO3dCQUNMLEtBQUs7NkJBQ0wsS0FBSzs2QkFDTCxLQUFLO29CQUNMLEtBQUs7d0NBS0wsS0FBSztxQkFFTCxNQUFNO3NCQUNOLE1BQU07OEJBQ04sTUFBTTt5QkFDTixNQUFNOzBCQUNOLE1BQU07d0JBQ04sTUFBTTt5QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1lbnVJdGVtLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IENvbnRleHRNZW51IH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvY29udGV4dG1lbnUnO1xyXG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZmlsZXVwbG9hZCc7XHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhTGlzdEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvZGF0YS1saXN0LWJhc2UnO1xyXG5pbXBvcnQgeyBDb21tb25FcnJvckNvZGUgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2NvbW1vbi1lcnJvci1jb2RlJztcclxuaW1wb3J0IHsgRm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWcgfSBmcm9tICcuLi8uLi8uLi9jb25maWdzL21vZHVsZS1jb25maWcnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uQmFzZSB9IGZyb20gJy4uLy4uLy4uL2VudW1zL2NvbW1vbic7XHJcbmltcG9ydCB7IEVkaXRGaWxlQ29tbWFuZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9lZGl0LWZpbGUtY29tbWFuZCc7XHJcbmltcG9ydCB7IEZpbGVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpbGUtdHlwZSc7XHJcbmltcG9ydCB7IENvbW1hbmRUeXBlLCBUbkNsaWVudENvbW1hbmQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdG4tY2xpZW50LWNvbW1hbmQnO1xyXG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maWxlLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUbkNsaWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90bi1jbGllbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVLeVNvU2ltQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsZS1reS1zby1zaW0vZmlsZS1reS1zby1zaW0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRmlsZUV4cGxvcmVySXRlbSwgRmlsZUV4cGxvcmVySXRlbVR5cGUgfSBmcm9tICcuLi9tb2RlbHMvZmlsZS1leHBsb3Jlci1pdGVtJztcclxuaW1wb3J0IHsgRmlsZVZlcnNpb25EVE8gfSBmcm9tICcuLi9tb2RlbHMvZmlsZS12ZXJzaW9uLWR0byc7XHJcbmltcG9ydCB7IEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPIH0gZnJvbSAnLi4vbW9kZWxzL2dlbmVyYXRlLWxpbmstZG93bmxvYWQtZHRvJztcclxuaW1wb3J0IHsgU2VydmljZVJlcXVlc3RNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zZXJ2aWNlLXJlcXVlc3QtbW9kZWwnO1xyXG5pbXBvcnQgeyBEb3dubG9hZExpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZG93bmxvYWQtbGluay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZURhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJOZXdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1leHBsb3Jlci1uZXcuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVPYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVWZXJzaW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ZpbGUtdmVyc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9sZGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ZvbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTXlEcml2ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9teS1kcml2ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICAgIENvbHVtblNjaGVtYUJhc2UsXHJcbiAgICBDcnVkRm9ybURhdGEsXHJcbiAgICBFbnVtRmlsZUxheW91dCxcclxuICAgIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSxcclxuICAgIEhlaWdodFR5cGUsXHJcbiAgICBNb2RlbFNjaGVtYSxcclxuICAgIE9wZXJhdG9yLFxyXG4gICAgUG9wdXBTaXplLFxyXG59IGZyb20gJy4vLi4vLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IEdyaWRJbmZvIH0gZnJvbSAnLi8uLi8uLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgRmlsZUV4cGxvcmVyU2VydmljZSB9IGZyb20gJy4vLi4vc2VydmljZXMvZmlsZS1leHBsb3Jlci5zZXJ2aWNlJztcclxuXHJcblxyXG4vLyBpbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZW51SXRlbSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbi8vIGltcG9ydCB7IENvbnRleHRNZW51IH0gZnJvbSAncHJpbWVuZy9jb250ZXh0bWVudSc7XHJcbi8vIGltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICdwcmltZW5nL2ZpbGV1cGxvYWQnO1xyXG5kZWNsYXJlIGxldCB2Z2NhX3NpZ25fYXBwcm92ZWQ6IGFueTtcclxuZGVjbGFyZSBsZXQgdmdjYV9zaWduX2lzc3VlZDogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxyXG4gICAgc2VsZWN0b3I6ICdmaWxlLW1hbmFnZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtbWFuYWdlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9maWxlLW1hbmFnZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZpbGVNYW5hZ2VyQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBDb21wb25lbnRDb250ZXh0U2VydmljZSxcclxuICAgIF0sXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZU1hbmFnZXJDb21wb25lbnQgZXh0ZW5kcyBEYXRhTGlzdEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZmlsZUNvbnRyb2wnKSBmaWxlQ29udHJvbDogRmlsZVVwbG9hZDtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51JykgY29udGV4dE1lbnU6IENvbnRleHRNZW51O1xyXG4gICAgQFZpZXdDaGlsZCgnZmlsZUt5U29TaW0nKSBmaWxlS3lTb1NpbTogRmlsZUt5U29TaW1Db21wb25lbnQ7XHJcblxyXG4gICAgQElucHV0KCkgY29udHJvbDogRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hO1xyXG4gICAgQElucHV0KCkgc2V0IGZpbGVEYXRhU2VydmljZSh2YWx1ZTogRmlsZURhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5fZmlsZURhdGFTZXJ2aWNlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBASW5wdXQoKSBsYXlvdXQ6IEVudW1GaWxlTGF5b3V0ID0gRW51bUZpbGVMYXlvdXQuTElTVDtcclxuICAgIEBJbnB1dCgpIGhpZGRlbkNyZWF0ZUZvbGRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgbWF4RmlsZVNpemU6IG51bWJlciA9IDEwMDAwMDAwMDsgLy8gU2l6ZSBpbiBieXRlXHJcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZVNpemVNZXNzYWdlU3VtbWFyeT86IHN0cmluZyA9ICd7MH06IFF1w6EgZHVuZyBsxrDhu6NuZyBmaWxlIGNobyBwaMOpcCwgJztcclxuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlU2l6ZU1lc3NhZ2VEZXRhaWw/OiBzdHJpbmcgPSAnZHVuZyBsxrDhu6NuZyB04buRaSDEkWEgbMOgIHswfS4nO1xyXG4gICAgQElucHV0KCkgaW52YWxpZEZpbGVUeXBlTWVzc2FnZVN1bW1hcnk/OiBzdHJpbmcgPSAnezB9OiBLaMO0bmcgxJHDum5nIMSR4buLbmggZOG6oW5nIGZpbGUsICc7XHJcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZVR5cGVNZXNzYWdlRGV0YWlsPzogc3RyaW5nID0gJ8SR4buLbmggZOG6oW5nIGZpbGUgY2hvIHBow6lwOiB7MH0uJztcclxuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlTGltaXRNZXNzYWdlU3VtbWFyeT86IHN0cmluZyA9ICdRdcOhIHPhu5EgbMaw4bujbmcgZmlsZSBjaG8gcGjDqXAsICc7XHJcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZURldGFpbD86IHN0cmluZyA9ICd04buRaSDEkWEgezB9IGZpbGUuJztcclxuICAgIEBJbnB1dCgpIGRhdGFUeXBlOiBhbnk7XHJcbiAgICBASW5wdXQoKSByb290Rm9sZGVyTmFtZTogc3RyaW5nOy8vIFTDqm4gdGjGsCBt4bulYyBn4buRYy5cclxuICAgIEBJbnB1dCgpIHNlcnZpY2VDb2RlOiBzdHJpbmc7Ly8gQuG7mSBrZXkgxJHhu4MgdOG6oW8gdGjGsCBt4bulYyBn4buRYy5cclxuICAgIEBJbnB1dCgpIGVudGl0eTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgc2V0IGVudGl0eUtleSh2YWw6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX2VudGl0eUtleSA9IHZhbDtcclxuXHJcbiAgICAgICAgaWYgKHZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9oYXNMb2FkZWRTb3VyY2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5yb290Rm9sZGVySWQgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmVudGl0eUtleUNoYW5nZS5lbWl0KHRoaXMuX2VudGl0eUtleSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRMb2FkUm9vdEZvbGRlckNvbnRlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXREYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIEBJbnB1dCgpIHNldCByb290Rm9sZGVySWQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3Jvb3RGb2xkZXJJZCA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBpblRhaUxpZXUgPSBmYWxzZTsvLyBEw7luZyBjaG8gY29tcG9uZW50IHTDoGkgbGnhu4d1XHJcbiAgICBASW5wdXQoKSBpblRhaUxpZXVDaHVuZyA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgY29weVRvRm9sZGVySWQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWRFbXB0eSgpO1xyXG4gICAgQElucHV0KCkgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5fdmFsdWUgIT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBASW5wdXQoKSBtdWx0aXBsZUNoZWNrV2hlbkNsaWNrUm93OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25SZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIGVudGl0eUtleUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIGNsb3NlUG9wdXAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBwcml2YXRlIF91bnN1YmNyaWJsZUFsbCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZzogTW9kdWxlQ29uZmlnO1xyXG5cclxuICAgIF9vbGRWYWx1ZTogYW55O1xyXG4gICAgX3ZhbHVlOiBhbnk7XHJcbiAgICBfZGF0YVNvdXJjZTogYW55W10gPSBbXTtcclxuICAgIF9sYXlvdXQgPSBFbnVtRmlsZUxheW91dDtcclxuICAgIGdldCBmaWxlRGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVEYXRhU2VydmljZTtcclxuICAgIH1cclxuICAgIF9maWxlRGF0YVNlcnZpY2U6IEZpbGVEYXRhU2VydmljZTtcclxuICAgIF9lbnRpdHlLZXk6IHN0cmluZztcclxuICAgIF9oYXNMb2FkZWRTb3VyY2UgPSBmYWxzZTtcclxuICAgIGdldCByb290Rm9sZGVySWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3RGb2xkZXJJZDtcclxuICAgIH1cclxuICAgIF9yb290Rm9sZGVySWQ6IHN0cmluZyA9IG51bGw7Ly8gSW5zdGFuY2VJZCB0aMawIG3hu6VjIGfhu5FjLlxyXG4gICAgcHJvZ3Jlc3NWYWx1ZSA9IDA7XHJcbiAgICBhcGlVcGxvYWRVcmwgPSAnJztcclxuICAgIGNob29zZUxhYmVsID0gJ0No4buNbic7XHJcbiAgICB1c2VySWQ6IGFueTtcclxuXHJcbiAgICBmb3JtSWRzID0ge1xyXG4gICAgICAgIGNyZWF0ZUZvbGRlcjogJ2NyZWF0ZUZvbGRlcicsXHJcbiAgICAgICAgcmVuYW1lRmlsZTogJ3JlbmFtZUZpbGUnLFxyXG4gICAgICAgIHNoYXJlRmlsZTogJ3NoYXJlRmlsZScsXHJcbiAgICAgICAgc2hhcmVGb2xkZXI6ICdzaGFyZUZvbGRlcicsXHJcbiAgICAgICAgZmlsZVZpZXdlcjogJ2ZpbGVWaWV3ZXInLFxyXG4gICAgICAgIGZpbGVWZXJzaW9uTGlzdDogJ2ZpbGVWZXJzaW9uTGlzdCcsXHJcbiAgICAgICAgc2lnbmF0dXJlRGV0YWlsOiAnc2lnbmF0dXJlRGV0YWlsJyxcclxuICAgICAgICBreVNvU2ltOiAna3lTb1NpbScsXHJcbiAgICB9O1xyXG4gICAgZm9ybXM6IGFueSA9IHt9O1xyXG4gICAgZGF0YTogYW55ID0ge1xyXG4gICAgICAgIHJvb3RGb2xkZXJJZDogbnVsbCxcclxuICAgICAgICBjdXJyZW50Rm9sZGVySWQ6IG51bGwsXHJcblxyXG4gICAgICAgIG1vdmluZzoge1xyXG4gICAgICAgICAgICBpc1NlbGVjdGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM6IG51bGwsXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgYnJlYWRjcnVtYnM6IDxNZW51SXRlbVtdPltdLFxyXG4gICAgfTtcclxuICAgIHNob3dBdHRhY2hMaW5rQm94ID0gZmFsc2U7XHJcbiAgICB0eXBlZExpbms6IHN0cmluZyA9ICcnO1xyXG4gICAgc2hvd1RhaUxpZXVEdW5nQ2h1bmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxheW91dFNpbXBsZUFsbCA9IGZhbHNlO1xyXG4gICAgYmFzZVBlcm1pc3Npb246IG51bWJlcjtcclxuICAgIGluaXRlZCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCBfbXlEcml2ZVNlcnZpY2U6IE15RHJpdmVTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXV0aGVuU2VydmljZTogQXV0aGVuU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF90bkNsaWVudFNlcnZpY2U6IFRuQ2xpZW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9maWxlVmVyc2lvblNlcnZpY2U6IEZpbGVWZXJzaW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfc2lnbmFsclNlcnZpY2U6IFNpZ25hbFJTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBfZmlsZUV4cGxvcmVyU2VydmljZTogRmlsZUV4cGxvcmVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9maWxlRXhwbG9yZXJOZXdTZXJ2aWNlOiBGaWxlRXhwbG9yZXJOZXdTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZm9sZGVyU2VydmljZTogRm9sZGVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9maWxlT2JqZWN0U2VydmljZTogRmlsZU9iamVjdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZG93bmxvYWRMaW5rU2VydmljZTogRG93bmxvYWRMaW5rU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9maWxlTWFuYWdlclNlcnZpY2U6IEZpbGVNYW5hZ2VyU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcclxuICAgICAgICB0aGlzLl9tb2R1bGVDb25maWcgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xyXG4gICAgICAgIHRoaXMuYXBpVXBsb2FkVXJsID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0VXBsb2FkVXJsKCk7XHJcbiAgICAgICAgdGhpcy51c2VySWQgPSB0aGlzLl91c2VyU2VydmljZS5nZXRVc2VySWRDb21iaW5lKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuX2NvbXBvbmVudCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxheW91dFNpbXBsZUFsbCA9ICh0aGlzLmxheW91dCA9PT0gRW51bUZpbGVMYXlvdXQuU0lNUExFIHx8IHRoaXMubGF5b3V0ID09PSBFbnVtRmlsZUxheW91dC5TSU1QTEVfRk9SX0xJU1QpO1xyXG4gICAgICAgIHRoaXMubG9hZERldGFpbEZyb21RdWVyeVBhcmFtID0gZmFsc2U7XHJcbiAgICAgICAgLy8gTOG6r25nIGtoaSBrw70gc2ltIHPhu5EgdGjDoG5oIGPDtG5nIHRow6wgbG9hZCBs4bqhaSBmaWxlXHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5zdWJzY3JpYmUoJ0t5U29TaW1UaGFuaENvbmcnLCB4ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybXMua3lTb1NpbS5zaG93ID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5oYXNDcnVkTGlzdCA9IHRoaXMubGF5b3V0ID09IEVudW1GaWxlTGF5b3V0LkxJU1Q7XHJcbiAgICAgICAgdGhpcy5wbHVzVXJsID0gJ0J5Rm9sZGVySWQnO1xyXG4gICAgICAgIHRoaXMuaW5pdEdyaWQoKTtcclxuICAgICAgICB0aGlzLmluaXRGb3JtcygpO1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5yZWFkeSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmZpbGVEYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVEYXRhU2VydmljZS5yZWdpc3Rlcih0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5jaGVja0FuZExvYWRSb290Rm9sZGVyQ29udGVudCgpO1xyXG4gICAgICAgIHRoaXMub25Jbml0LmVtaXQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tBbmRMb2FkUm9vdEZvbGRlckNvbnRlbnQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmluaXRlZCB8fCB0aGlzLmZpbGVEYXRhU2VydmljZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZ2V0Um9vdEZvbGRlckNvbnRlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSb290Rm9sZGVyQ29udGVudCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMucm9vdEZvbGRlcklkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc0tleSA9IHRoaXMuc2VydmljZUNvZGVcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuZW50aXR5XHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLl9lbnRpdHlLZXk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWhhc0tleSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldERhdGEoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fbWFya0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgdGhpcy5fZm9sZGVyU2VydmljZS5nZXRTZXJ2aWNlRm9sZGVySWQoe1xyXG4gICAgICAgICAgICAgICAgc2VydmljZUNvZGU6IHRoaXMuc2VydmljZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBlbnRpdHk6IHRoaXMuZW50aXR5LFxyXG4gICAgICAgICAgICAgICAgZW50aXR5S2V5OiB0aGlzLl9lbnRpdHlLZXksXHJcbiAgICAgICAgICAgIH0gYXMgU2VydmljZVJlcXVlc3RNb2RlbClcclxuICAgICAgICAgICAgICAgIC50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb290Rm9sZGVySWQgPSBycy5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnJlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0RGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcnVkU2VydmljZS5wcm9jZXNzRXJyb3JSZXNwb25zZShycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBs4bqleSB0aMawIG3hu6VjIGfhu5FjIScpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnJlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0RGF0YSgpIHtcclxuICAgICAgICB0aGlzLnJvb3RGb2xkZXJJZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kYXRhLmJyZWFkY3J1bWJzID0gW107XHJcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFJvb3RGb2xkZXJJZChyb290Rm9sZGVySWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMucm9vdEZvbGRlcklkID0gcm9vdEZvbGRlcklkO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERhdGFzb3VyY2UoZGF0YVNvdXJjZTogYW55W10gPSBbXSkge1xyXG4gICAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xyXG4gICAgICAgIHRoaXMuX29sZFZhbHVlID0gdGhpcy5fdmFsdWU7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBbXTtcclxuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIHZhbHVlLnB1c2goaXRlbS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0ubmFtZVdpdGhvdXRFeHRlbnNpb24gPSBpdGVtLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW0ubmFtZS5sYXN0SW5kZXhPZignLicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLm5hbWVXaXRob3V0RXh0ZW5zaW9uID0gaXRlbS5uYW1lLnN1YnN0cmluZygwLCBpbmRleCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5leHRlbnNpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmV4dGVuc2lvbiA9IGl0ZW0uZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpdGVtLmlzRmlsZSA9IGl0ZW0uZmlsZUV4cGxvcmVySXRlbVR5cGUgPT0gRmlsZUV4cGxvcmVySXRlbVR5cGUuRmlsZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuX29sZFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuX29sZFZhbHVlKSAhPSBKU09OLnN0cmluZ2lmeSh0aGlzLl92YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50Q2hhbmdlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudENoYW5nZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubW9kZWwucmVhZHkgPSB0cnVlO1xyXG4gICAgICAgIGlmICghdGhpcy5faGFzTG9hZGVkU291cmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZFNvdXJjZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMub25SZWFkeS5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZpcmVFdmVudENoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fdmFsdWUpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VkLmVtaXQodGhpcy5fdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRHcmlkKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5tdWx0aXBsZUNoZWNrV2hlbkNsaWNrUm93ID0gdGhpcy5tdWx0aXBsZUNoZWNrV2hlbkNsaWNrUm93O1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5tb2RlbFNjaGVtYXMgPSBbXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ25hbWUnLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ1TDqm4gdMOgaSBsaeG7h3UnLFxyXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdUw6puIHTDoGkgbGnhu4d1JyxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVMOqbiB0w6BpIGxp4buHdScsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdmaWxlU2l6ZScsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnS8OtY2ggdGjGsOG7m2MnLFxyXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdLw61jaCB0aMaw4bubYycsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0vDrWNoIHRoxrDhu5tjJyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2NyZWF0ZWQnLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ05nw6B5IHThuqFvJyxcclxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnTmfDoHkgdOG6oW8nLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdOZ8OgeSB04bqhbycsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2RhdGV0aW1lJyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2N1cnJlbnRGaWxlVmVyc2lvbicsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnUGhpw6puIGLhuqNuJyxcclxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnUGhpw6puIGLhuqNuJyxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUGhpw6puIGLhuqNuJyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2Z1bmN0aW9uJyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdDaOG7qWMgbsSDbmcnLFxyXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdDaOG7qWMgbsSDbmcnLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDaOG7qWMgbsSDbmcnLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmcuY29scyA9IFtcclxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICduYW1lJyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZXhwbG9yZXJJdGVtJyxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJ2F1dG8nLFxyXG4gICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2ZpbGVTaXplJyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZmlsZVNpemUnLFxyXG4gICAgICAgICAgICAgICAgc29ydDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnOWVtJyxcclxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogMSxcclxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnY3JlYXRlZCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2RhdGV0aW1lJyxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwZW0nXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2N1cnJlbnRGaWxlVmVyc2lvbicsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzhlbScsXHJcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IDEsXHJcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2VcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0U2V0dGluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRTZXR0aW5nKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oZWlnaHRUeXBlID0gSGVpZ2h0VHlwZS5keW5hbWljO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5GaWx0ZXJSb3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSA9IHRoaXMuX2ZvbGRlclNlcnZpY2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nV29ya2Zsb3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nUGVybWlzc2lvbiA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UudXNlV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRm9ybXMuXHJcbiAgICBpbml0Rm9ybXMoKSB7XHJcbiAgICAgICAgdGhpcy5mb3Jtc1t0aGlzLmZvcm1JZHMuY3JlYXRlRm9sZGVyXSA9IHtcclxuICAgICAgICAgICAgaGVhZGVyOiAnVOG6oW8gbeG7m2kgdGjGsCBt4bulYycsXHJcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxyXG4gICAgICAgICAgICBmb3JtRGF0YTogbmV3IENydWRGb3JtRGF0YSgpLFxyXG4gICAgICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoe1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDQwMCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogMjAwLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1zW3RoaXMuZm9ybUlkcy5yZW5hbWVGaWxlXSA9IHtcclxuICAgICAgICAgICAgaGVhZGVyOiAnxJDhu5VpIHTDqm4gdOG7h3AnLFxyXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgICAgICAgZm9ybURhdGE6IG5ldyBDcnVkRm9ybURhdGEoKSxcclxuICAgICAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiA0MDAsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwMCxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3Jtc1t0aGlzLmZvcm1JZHMuZmlsZVZpZXdlcl0gPSB7XHJcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxyXG4gICAgICAgICAgICBmb3JtRGF0YToge30sXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3Jtc1t0aGlzLmZvcm1JZHMuZmlsZVZlcnNpb25MaXN0XSA9IHtcclxuICAgICAgICAgICAgaGVhZGVyOiAnRGFuaCBzw6FjaCBwaGnDqm4gYuG6o24nLFxyXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgICAgICAgZmlsZUlkOiBudWxsLFxyXG4gICAgICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoe1xyXG4gICAgICAgICAgICAgICAgbWF4aW1pemU6IHRydWUsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybXNbdGhpcy5mb3JtSWRzLnNpZ25hdHVyZURldGFpbF0gPSB7XHJcbiAgICAgICAgICAgIGhlYWRlcjogJ1Row7RuZyB0aW4gY2jhu68ga8O9IHPhu5EnLFxyXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1zW3RoaXMuZm9ybUlkcy5reVNvU2ltXSA9IHtcclxuICAgICAgICAgICAgaGVhZGVyOiAnS8O9IHPhu5Egc2ltJyxcclxuICAgICAgICAgICAgc2hvdzogZmFsc2UsXHJcbiAgICAgICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7XHJcbiAgICAgICAgICAgICAgICBtYXhpbWl6ZTogdHJ1ZSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBvblNhdmVkRm9ybShmb3JtSWQpIHtcclxuICAgICAgICB0aGlzLmZvcm1zW2Zvcm1JZF0uc2hvdyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FuY2VsRm9ybShmb3JtSWQpIHtcclxuICAgICAgICB0aGlzLmZvcm1zW2Zvcm1JZF0uc2hvdyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dDb250ZXh0TWVudShldnQsIGl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbS5pc0ZpbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLml0ZW1zTWVudUZpbGUgPSBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdYZW0gdHLhu7FjIHR1eeG6v24nLCBpY29uOiAnZmFzIGZhLWV5ZScsIGNvbW1hbmQ6IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5PYmplY3QoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICEodGhpcy5sYXlvdXRTaW1wbGVBbGwgJiYgdGhpcy5yZWFkb25seSkpLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0vDvSBz4buRIGPDoSBuaMOibiAoU0lNKScsXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2ZhcyBmYS1zaW0tY2FyZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNpZ25LeVNpbUZpbGUoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAodGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuaXNUeXBlRmlsZUt5U28oaXRlbS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmxheW91dCAhPT0gRW51bUZpbGVMYXlvdXQuU0lNUExFX0ZPUl9MSVNUKSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdLw70gc+G7kSBjw6EgbmjDom4gKFVTQiknLCBpY29uOiAnZmFzIGZhLXNpZ25hdHVyZScsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNpZ25GaWxlKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogKHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmlzVHlwZUZpbGVLeVNvKGl0ZW0ubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMubGF5b3V0ICE9PSBFbnVtRmlsZUxheW91dC5TSU1QTEVfRk9SX0xJU1QpLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0vDvSBz4buRIMSRxqFuIHbhu4sgKFVTQiknLCBpY29uOiAnZmFzIGZhLXNpZ25hdHVyZScsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNpZ25GaWxlRG9uVmkoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAodGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuaXNUeXBlRmlsZUt5U28oaXRlbS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5sYXlvdXQgIT09IEVudW1GaWxlTGF5b3V0LlNJTVBMRV9GT1JfTElTVCksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnVOG6o2kgduG7gScsIGljb246ICdmYXMgZmEtZG93bmxvYWQnLCBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWQoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAhKHRoaXMubGF5b3V0ID09PSBFbnVtRmlsZUxheW91dC5TSU1QTEUgJiYgdGhpcy5yZWFkb25seSksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnU2FvIGNow6lwIMSRxrDhu51uZyBk4bqrbicsIGljb246ICdmYXMgZmEtbGluaycsIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3B5RG93bmxvYWRMaW5rKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogISh0aGlzLmxheW91dFNpbXBsZUFsbCAmJiB0aGlzLnJlYWRvbmx5KSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICfEkOG7lWkgdMOqbicsIGljb246ICdmYXMgZmEtZXJhc2VyJywgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmFtZUZpbGUoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5jaGVja0lzUmVhZE9ubHkoKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1hlbSBjw6FjIHBoacOqbiBi4bqjbiBraMOhYycsIGljb246ICdmYXMgZmEtaGlzdG9yeScsIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRmlsZVZlcnNpb25zKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuY2hlY2tJc1JlYWRPbmx5KClcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdYw7NhIHThu4dwIHRpbicsIGljb246ICdmYXIgZmEtdHJhc2gtYWx0JywgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUZpbGUoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5jaGVja0lzUmVhZE9ubHkoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLml0ZW1zTWVudUZpbGUgPSBbe1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdU4bqjaSB24buBJywgaWNvbjogJ2ZhcyBmYS1kb3dubG9hZCcsIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdYw7NhIHRoxrAgbeG7pWMnLCBpY29uOiAnZmFyIGZhLXRyYXNoLWFsdCcsIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUZvbGRlcihpdGVtKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5jaGVja0lzUmVhZE9ubHkoKVxyXG4gICAgICAgICAgICB9XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IHRpbWUgb3V0IMSR4buDIGZpeCBidWcgcmVuZGVyIGNvbnRleHQgbWVudSByYSB0csOgbiByYSBuZ2/DoGkgbcOgbiBow6xuaFxyXG4gICAgICAgIC8vIEPDsyBs4bq9IHbDrCB0aOG7nWkgxJFp4buDbSBwcmltZW5nIHTDrW5oIHbhu4sgdHLDrSBj4bunYSBjb250ZXh0IG1lbnUgbMOgIHRyxrDhu5tjIGtoaSByZW5kZXIgaOG6v3QgY8OhYyByb3cgdHJvbmcgY29udGV4dCBtZW51XHJcbiAgICAgICAgc2V0VGltZW91dChmID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudS5zaG93KGV2dCk7XHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tJc1JlYWRPbmx5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuYmFzZVBlcm1pc3Npb24gPT0gUGVybWlzc2lvbkJhc2UuUkVBRDtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVDbGlja0ZpbGVOYW1lKGl0ZW0pIHtcclxuICAgICAgICBpZiAoIWl0ZW0uY2FuVmlld09ubGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRvd25sb2FkKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuT2JqZWN0KGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb2RpZnlHcmlkSW5mbyhncmlkSW5mbzogR3JpZEluZm8pIHtcclxuICAgICAgICBncmlkSW5mby5maWx0ZXJzLnNwbGljZSgwLCAwLCB0aGlzLm5ld0ZpbHRlcigncGFyZW50Rm9sZGVySWQnLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFmdGVyR2V0RGF0YSgpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGluZCBpbiB0aGlzLm1vZGVsLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMubW9kZWwuZGF0YVNvdXJjZVtpbmRdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5zdXBwb3J0RGlnaXRhbFNpZ25hdHVyZShpdGVtLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmdldFNpZ25hdHVyZUluZm9CeUZpbGVJZChpdGVtLmlkKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2VzcyAmJiBycy5kYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zaWduYXR1cmVzID0gcnMuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5sYXN0U2lnbmF0dXJlID0gcnMuZGF0YVtycy5kYXRhLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRlbS5maWxlRXhwbG9yZXJJdGVtVHlwZSA9PT0gRmlsZUV4cGxvcmVySXRlbVR5cGUuRm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmNsYXNzID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGl0ZW0uZXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmltYWdlSWNvbiA9IGAvYXNzZXRzL2ltYWdlcy9maWxlLWV4dC9pY29uJHtpdGVtLmV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpfS5wbmdgO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpdGVtLmNhblZpZXdPbmxpbmUgPSB0aGlzLl9maWxlRXhwbG9yZXJOZXdTZXJ2aWNlLmlzU3VwcG9ydGVkVmlld09ubGluZShpdGVtLm5hbWUpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtLmV4dGVuc2lvbiB8fCBpdGVtLmV4dGVuc2lvbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLm5hbWUubGFzdEluZGV4T2YoJy4nKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5leHRlbnNpb24gPSBpdGVtLm5hbWUuc3Vic3RyaW5nKGl0ZW0ubmFtZS5sYXN0SW5kZXhPZignLicpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbCA9IG5ldyBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLm1vZGVsLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC5leHRlbnNpb24gfHwgZWxlbWVudC5leHRlbnNpb24ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5uYW1lLmxhc3RJbmRleE9mKCcuJykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZXh0ZW5zaW9uID0gZWxlbWVudC5uYW1lLnN1YnN0cmluZyhlbGVtZW50Lm5hbWUubGFzdEluZGV4T2YoJy4nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzd2l0Y2ggKHRoaXMuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBGaWxlVHlwZS5WSURFTzoge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmFjY2VwdCA9ICcuTVA0LC5NT1YsLkFWSSwuRkxWLC5XTVYnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gdGhpcy5tb2RlbC5kYXRhU291cmNlLmZpbHRlcih4ID0+ICh4LmV4dGVuc2lvbiA9PSBudWxsIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5NUDQnIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5NT1YnIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5BVkknIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5GTFYnIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5XTVYnKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEZpbGVUeXBlLklNQUdFOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWNjZXB0ID0gJy5KUEcsLkpQRUcsLlBORyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2UgPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2UuZmlsdGVyKHggPT4gKHguZXh0ZW5zaW9uID09IG51bGwgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLkpQRycgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLkpQRUcnIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5QTkcnKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEZpbGVUeXBlLkRPQzoge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmFjY2VwdCA9ICcuRE9DLC5ET0NYLC5QREYsLlhMUywuWExTWCc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2UgPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2UuZmlsdGVyKHggPT4gKHguZXh0ZW5zaW9uID09IG51bGwgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLkRPQycgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLkRPQ1gnIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5QREYnIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5YTFMnIHx8IHguZXh0ZW5zaW9uLnRvVXBwZXJDYXNlKCkgPT0gJy5YTFNYJykpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBGaWxlVHlwZS5BVURJTzoge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmFjY2VwdCA9ICcuTVAzLC5XQVYsLk00QSc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2UgPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2UuZmlsdGVyKHggPT4gKHguZXh0ZW5zaW9uID09IG51bGwgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLk1QMycgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLldBVicgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLk00QScpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldERhdGFzb3VyY2UodGhpcy5tb2RlbC5kYXRhU291cmNlKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLl91bnN1YmNyaWJsZUFsbC5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5fdW5zdWJjcmlibGVBbGwuY29tcGxldGUoKTtcclxuICAgICAgICBpZiAodGhpcy5maWxlRGF0YVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlRGF0YVNlcnZpY2UudW5yZWdpc3Rlcih0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC51blN1YnNjcmliZSgnS3lTb1NpbVRoYW5oQ29uZycpO1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiBGVU5DVElPTiBDT0xVTU4gTUFOVUxBVElPTi5cclxuICAgIGdldEJ1dHRvbkljb24oZXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgaWYgKGV4cGxvcmVySXRlbS5pc0ZpbGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdwaSBwaS1wZW5jaWwnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdwaSBwaS1leWUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJ3BpIHBpLXBlbmNpbCc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldEJ1dHRvblRvb2x0aXAoZXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgaWYgKGV4cGxvcmVySXRlbS5pc0ZpbGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdDaOG7iW5oIHPhu61hJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnWGVtIHRy4buxYyB0dXnhur9uJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICfEkOG7lWkgdMOqbic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQnV0dG9uQ2xpY2soZXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgaWYgKGV4cGxvcmVySXRlbS5pc0ZpbGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0RmlsZShleHBsb3Jlckl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuT2JqZWN0KGV4cGxvcmVySXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuYW1lRm9sZGVyKGV4cGxvcmVySXRlbS5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldE1lbnVJdGVtcyhleHBsb3JkZXJJdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGV4cGxvcmRlckl0ZW0uaXNGaWxlID8gdGhpcy5kYXRhLml0ZW1zTWVudUZpbGUgOiB0aGlzLmRhdGEuaXRlbXNNZW51Rm9sZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRHJvcGRvd25DbGljayhleHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICBpZiAoZXhwbG9yZXJJdGVtLmlzRmlsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBreVNvSXRlbSA9IHRoaXMuZGF0YS5pdGVtc01lbnVGaWxlLmZpbmQoeCA9PiB4LmxhYmVsLnRvTG93ZXJDYXNlKCkgPT0gJ0vDvSBz4buRJyk7XHJcbiAgICAgICAgICAgIGlmIChreVNvSXRlbSkge1xyXG4gICAgICAgICAgICAgICAga3lTb0l0ZW0udmlzaWJsZSA9IHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2Uuc3VwcG9ydERpZ2l0YWxTaWduYXR1cmUoZXhwbG9yZXJJdGVtLm5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGEuc2VsZWN0ZWRFeHBsb3Jlckl0ZW0gPSBleHBsb3Jlckl0ZW07XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4gRklMRSBNQU5VTEFUSU9OLlxyXG4gICAgLy8gVOG6o2kgbMOqbiBmaWxlLlxyXG4gICAgb25TZWxlY3RGaWxlKCkge1xyXG4gICAgICAgIHRoaXMuZmlsZUNvbnRyb2wudXBsb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25CZWZvcmVVcGxvYWQoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5fbWFya0xvYWRpbmcoKTtcclxuICAgICAgICBldnQuZm9ybURhdGEuYXBwZW5kKCdzZXJ2aWNlQ29kZScsIHRoaXMuc2VydmljZUNvZGUpO1xyXG4gICAgICAgIGV2dC5mb3JtRGF0YS5hcHBlbmQoJ2VudGl0eScsIHRoaXMuZW50aXR5KTtcclxuICAgICAgICBldnQuZm9ybURhdGEuYXBwZW5kKCdlbnRpdHlLZXknLCB0aGlzLl9lbnRpdHlLZXkpO1xyXG4gICAgICAgIGV2dC5mb3JtRGF0YS5hcHBlbmQoJ2ZvbGRlcklkJywgdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25VcGxvYWRQcm9ncmVzcyhldnQpIHtcclxuICAgICAgICB0aGlzLnByb2dyZXNzVmFsdWUgPSBldnQucHJvZ3Jlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlU2VsZWN0RmlsZShldnQpIHtcclxuICAgICAgICBpZiAoZXZ0LmVycm9yTWVzc2FnZXMgJiYgZXZ0LmVycm9yTWVzc2FnZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoXHJcbiAgICAgICAgICAgICAgICBldnQuZXJyb3JNZXNzYWdlcy5tYXAoaXRlbSA9PiBgJHtpdGVtLnN1bW1hcnl9JHtpdGVtLmRldGFpbH1gKS5qb2luKCc7ICcpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblVwbG9hZGVkKGV2dCkge1xyXG4gICAgICAgIHRoaXMuX3VubWFya0xvYWRpbmcoKTtcclxuICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDEkOG7lWkgdMOqbiBmaWxlLlxyXG4gICAgcmVuYW1lRmlsZShpdGVtKSB7XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5yZW5hbWVGaWxlLmhlYWRlciA9ICfEkOG7lWkgdMOqbiB0aMawIG3hu6VjJztcclxuICAgICAgICB0aGlzLmZvcm1zLnJlbmFtZUZpbGUuZm9ybURhdGEgPSB7XHJcbiAgICAgICAgICAgIGZvcm1TdGF0ZTogRm9ybVN0YXRlLkVESVQsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2VDb2RlOiB0aGlzLnNlcnZpY2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcclxuICAgICAgICAgICAgICAgIGVudGl0eUtleTogdGhpcy5fZW50aXR5S2V5LFxyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1zLnJlbmFtZUZpbGUuc2hvdyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gWMOzYSBmaWxlLlxyXG4gICAgZGVsZXRlRmlsZShleHBsb3Jlckl0ZW06IEZpbGVFeHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICB0aGlzLmRlbGV0ZU11dGlwbGUoW2V4cGxvcmVySXRlbV0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IEZPTERFUiBNQU5VTEFUSU9OLlxyXG4gICAgLy8gVOG6oW8gdGjGsCBt4bulYy5cclxuICAgIGNyZWF0ZUZvbGRlcigpIHtcclxuICAgICAgICB0aGlzLmZvcm1zLmNyZWF0ZUZvbGRlci5mb3JtRGF0YSA9IHtcclxuICAgICAgICAgICAgZm9ybVN0YXRlOiBGb3JtU3RhdGUuQURELFxyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlQ29kZTogdGhpcy5zZXJ2aWNlQ29kZSxcclxuICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHksXHJcbiAgICAgICAgICAgICAgICBlbnRpdHlLZXk6IHRoaXMuX2VudGl0eUtleSxcclxuICAgICAgICAgICAgICAgIHBhcmVudEZvbGRlcklkOiB0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3Jtcy5jcmVhdGVGb2xkZXIuc2hvdyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTeG7nyB0aMawIG3hu6VjLyBjbGljayB0aMawIG3hu6VjLlxyXG4gICAgZ2V0Rm9sZGVyQ29udGVudChjdXJyZW50Rm9sZGVySWQ/OiBzdHJpbmcsIGdvSW5zaWRlID0gZmFsc2UpIHtcclxuICAgICAgICBjdXJyZW50Rm9sZGVySWQgPSBjdXJyZW50Rm9sZGVySWQgfHwgdGhpcy5yb290Rm9sZGVySWQ7XHJcbiAgICAgICAgdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCA9IGN1cnJlbnRGb2xkZXJJZDtcclxuICAgICAgICBpZiAodGhpcy5sYXlvdXQgPT09IEVudW1GaWxlTGF5b3V0LlNJTVBMRSB8fCB0aGlzLmxheW91dCA9PT0gRW51bUZpbGVMYXlvdXQuU0lNUExFX0ZPUl9MSVNUKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuYmFzZVJlYWR5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgdGhpcy5zZXRCcmVhZGNydW1icygpO1xyXG4gICAgICAgIHRoaXMuc2V0VmFsaWRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWxpZGF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCAhPSB0aGlzLnJvb3RGb2xkZXJJZCkge1xyXG4gICAgICAgICAgICAvLyB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMub25DaGFuZ2VkLmVtaXQodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuZmlyZUV2ZW50Q2hhbmdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIMSQ4buVaSB0w6puIHRoxrAgbeG7pWMuXHJcbiAgICByZW5hbWVGb2xkZXIoZm9sZGVySWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuZm9ybXMuY3JlYXRlRm9sZGVyLmhlYWRlciA9ICfEkOG7lWkgdMOqbiB0aMawIG3hu6VjJztcclxuICAgICAgICB0aGlzLmZvcm1zW3RoaXMuZm9ybUlkcy5jcmVhdGVGb2xkZXJdLmZvcm1EYXRhID0ge1xyXG4gICAgICAgICAgICBmb3JtU3RhdGU6IEZvcm1TdGF0ZS5FRElULFxyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlQ29kZTogdGhpcy5zZXJ2aWNlQ29kZSxcclxuICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHksXHJcbiAgICAgICAgICAgICAgICBlbnRpdHlLZXk6IHRoaXMuX2VudGl0eUtleSxcclxuICAgICAgICAgICAgICAgIGlkOiBmb2xkZXJJZCxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybXMuY3JlYXRlRm9sZGVyLnNob3cgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFjDs2EgdGjGsCBt4bulYy5cclxuICAgIGRlbGV0ZUZvbGRlcihleHBsb3Jlckl0ZW06IEZpbGVFeHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICB0aGlzLmRlbGV0ZU11dGlwbGUoW2V4cGxvcmVySXRlbV0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IENPTU1PTiBGT0xERVIgJiBGSUxFIE1BTlVMQVRJT04uXHJcbiAgICAvLyBN4bufIHRoxrAgbeG7pWMvIHThu4dwLlxyXG4gICAgYXN5bmMgb3Blbk9iamVjdChleHBsb3Jlckl0ZW06IEZpbGVFeHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICBpZiAoZXhwbG9yZXJJdGVtLmlzRmlsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjYW5WaWV3T25saW5lID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuaXNTdXBwb3J0ZWRWaWV3T25saW5lKGV4cGxvcmVySXRlbS5uYW1lKTtcclxuICAgICAgICAgICAgaWYgKGNhblZpZXdPbmxpbmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkZpbGVWaWV3ZXIoZXhwbG9yZXJJdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWQoZXhwbG9yZXJJdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KGV4cGxvcmVySXRlbS5pZCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFjDs2Egbmhp4buBdSB0aMawIG3hu6VjLyB04buHcC5cclxuICAgIGRlbGV0ZU11dGlwbGUoaXRlbXM6IEZpbGVFeHBsb3Jlckl0ZW1bXSkge1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlQ29uZmlybSgpXHJcbiAgICAgICAgICAgIC50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mb2xkZXJTZXJ2aWNlLmRlbGV0ZU11bHRpcGxlKGl0ZW1zKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9sZGVyQ29udGVudCh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFThuqNpIHRoxrAgbeG7pWMvIHThu4dwLlxyXG4gICAgYXN5bmMgZG93bmxvYWQoZXhwbG9yZXJJdGVtOiBGaWxlRXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldEdlbmVyYXRlRG93bmxvYWRMaW5rTW9kZWwoZXhwbG9yZXJJdGVtKTtcclxuICAgICAgICB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmRvd25sb2FkTGluayhtb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY29weURvd25sb2FkTGluayhleHBsb3Jlckl0ZW06IEZpbGVFeHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0R2VuZXJhdGVEb3dubG9hZExpbmtNb2RlbChleHBsb3Jlckl0ZW0pO1xyXG4gICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2VuZXJhdGVEb3dubG9hZExpbmsobW9kZWwpXHJcbiAgICAgICAgICAgIC50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5jb3B5TWVzc2FnZSh0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldEFub255bW91c0Rvd25sb2FkVXJsKHJzLmRhdGEpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ8SQw6Mgc2FvIGNow6lwIHbDoG8gYuG7mSBuaOG7myB04bqhbS4gxJDGsOG7nW5nIGThuqtuIG7DoHkgc+G6vSBo4bq/dCBo4bqhbiBzYXUgNjAgZ2nDonkhJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0aOG7gyBzYW8gY2jDqXAgbGnDqm4ga+G6v3QgdOG6o2kgdOG7h3AgdGluIScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHRo4buDIHNhbyBjaMOpcCBsacOqbiBr4bq/dCB04bqjaSB04buHcCB0aW4hJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFThuqNpIG5oaeG7gXUgdGjGsCBt4bulYy8gdOG7h3AuXHJcbiAgICBhc3luYyBkb3dubG9hZE11bHRpcGxlKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXM7XHJcbiAgICAgICAgY29uc3QgaGFzSXRlbXMgPSBzZWxlY3RlZEl0ZW1zICYmIHNlbGVjdGVkSXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGlmIChoYXNJdGVtcykge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kb3dubG9hZChzZWxlY3RlZEl0ZW1zWzBdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyck1vZGVsID0gc2VsZWN0ZWRJdGVtcy5tYXAoZXhwbG9yZXJJdGVtID0+IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0R2VuZXJhdGVEb3dubG9hZExpbmtNb2RlbChleHBsb3Jlckl0ZW0pKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZG93bmxvYWRNdWx0aXBsZShhcnJNb2RlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2VuZXJhdGVaaXBMaW5rQW5kQ29weSgpIHtcclxuICAgICAgICBjb25zdCBhcnJNb2RlbCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5tYXAoeCA9PiB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldEdlbmVyYXRlRG93bmxvYWRMaW5rTW9kZWwoeCkpO1xyXG4gICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2VuZXJhdGVEb3dubG9hZExpbmtNdWx0aXBsZShhcnJNb2RlbCkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MgJiYgcmVzLmRhdGEgJiYgcmVzLmRhdGEgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuY29weU1lc3NhZ2UodGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZXRBbm9ueW1vdXNEb3dubG9hZFVybChyZXMuZGF0YSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCfEkMOjIHNhbyBjaMOpcCB2w6BvIGLhu5kgbmjhu5sgdOG6oW0uIMSQxrDhu51uZyBk4bqrbiBuw6B5IHPhur0gaOG6v3QgaOG6oW4gc2F1IDYwIGdpw6J5IScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdGjhu4Mgc2FvIGNow6lwIGxpw6puIGvhur90IHThuqNpIHThu4dwIHRpbiEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKGV4ID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXgpO1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0PDsyB24bqlbiDEkeG7gSB0cm9uZyBsw7pjIHThuqFvIGxpbmsgY2hvIGZpbGVzJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIG9wZW5GaWxlVmlld2VyKGV4cGxvcmVySXRlbTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuZm9ybXMuZmlsZVZpZXdlci5mb3JtRGF0YS5kYXRhID0ge1xyXG4gICAgICAgICAgICBmaWxlSWQ6IGV4cGxvcmVySXRlbS5pZCxcclxuICAgICAgICAgICAgaXNGaWxlVmVyc2lvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIGZpbGVOYW1lOiBleHBsb3Jlckl0ZW0ubmFtZSxcclxuICAgICAgICAgICAgc2VydmljZTogZXhwbG9yZXJJdGVtLnNlcnZpY2VDb2RlLFxyXG4gICAgICAgICAgICBlbnRpdHk6IGV4cGxvcmVySXRlbS5lbnRpdHksXHJcbiAgICAgICAgICAgIGVudGl0eUtleTogZXhwbG9yZXJJdGVtLmVudGl0eUtleSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZm9ybXMuZmlsZVZpZXdlci5zaG93ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZUZpbGVWaWV3ZXIoKSB7XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmlld2VyLnNob3cgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj5NT1ZFIEZJTEVTICYgRk9MREVSUy5cclxuICAgIGhhc1NlbGVjdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zXHJcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2jhu41uIHRoxrAgbeG7pWMvIGZpbGUgZGkgY2h1eeG7g24uXHJcbiAgICBjYW5TZWxlY3QoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmRhdGEubW92aW5nLmlzU2VsZWN0aW5nXHJcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtc1xyXG4gICAgICAgICAgICAmJiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGNhblNldE1vdmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5tb3ZpbmcuaXNTZWxlY3RpbmdcclxuICAgICAgICAgICAgJiYgdGhpcy5kYXRhLm1vdmluZy5zZWxlY3RlZEl0ZW1zXHJcbiAgICAgICAgICAgICYmIHRoaXMuZGF0YS5tb3Zpbmcuc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgbW92ZUV4cGxvcmVySXRlbXMoKSB7XHJcbiAgICAgICAgY29uc3QgY2FuTW92ZSA9ICF0aGlzLmRhdGEubW92aW5nLmlzU2VsZWN0aW5nXHJcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtc1xyXG4gICAgICAgICAgICAmJiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoXHJcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuZGF0YVNvdXJjZVxyXG4gICAgICAgICAgICAmJiB0aGlzLm1vZGVsLmRhdGFTb3VyY2UubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoIWNhbk1vdmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kYXRhLm1vdmluZyA9IHtcclxuICAgICAgICAgICAgaXNTZWxlY3Rpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM6IHRoaXMuX2NvbW1vblNlcnZpY2UuY2xvbmVPYmplY3QodGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zKSxcclxuICAgICAgICAgICAgc291cmNlRm9sZGVySWQ6IHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUaOG6oyB0aMawIG3hu6VjLyBmaWxlLlxyXG4gICAgc2V0TW92ZUV4cGxvcmVySXRlbXMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEubW92aW5nLmlzU2VsZWN0aW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZGVsID0ge1xyXG4gICAgICAgICAgICBzb3VyY2VGb2xkZXJJZDogdGhpcy5kYXRhLm1vdmluZy5zb3VyY2VGb2xkZXJJZCxcclxuICAgICAgICAgICAgdGFyZ2V0Rm9sZGVySWQ6IHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQsXHJcbiAgICAgICAgICAgIGxzdEZpbGVFeHBsb3Jlckl0ZW1zOiB0aGlzLmRhdGEubW92aW5nLnNlbGVjdGVkSXRlbXMsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5fZm9sZGVyU2VydmljZS5tb3ZlRXhwbG9yZXJJdGVtcyhtb2RlbClcclxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdEaSBjaHV54buDbiB0aMOgbmggY8O0bmcnKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEubW92aW5nID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmdCeVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQuG7jyBkaSBjaHV54buDbi5cclxuICAgIGNhbmNlbE1vdmUoKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhLm1vdmluZyA9IHt9O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+VkVSU0lPTi5cclxuICAgIG9wZW5GaWxlVmVyc2lvbnMoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuZm9ybXMuZmlsZVZlcnNpb25MaXN0LmZpbGVJZCA9IGZpbGUuaWQ7XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybXMuZmlsZVZlcnNpb25MaXN0LnNob3cgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj5WSUVXIE9OTElORS5cclxuICAgIGVkaXRGaWxlKGZpbGU6IEZpbGVFeHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ8SQYW5nIGvhur90IG7hu5FpIG3hu58g4bupbmcgZOG7pW5nJyk7XHJcbiAgICAgICAgdGhpcy5fZmlsZVZlcnNpb25TZXJ2aWNlLmNyZWF0ZU5ld01pbm9yVmVyc2lvbihmaWxlLmlkLCAnJywgZmFsc2UpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVWZXJzaW9uID0gPEZpbGVWZXJzaW9uRFRPPnJlc3BvbnNlLmRhdGE7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlVXJsID0gdGhpcy5fZmlsZVZlcnNpb25TZXJ2aWNlLmdldEZpbGVWZXJzaW9uRG93bmxvYWRVcmwoZmlsZVZlcnNpb24uaWQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IG5ldyBUbkNsaWVudENvbW1hbmQoKTtcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQuY29tbWFuZFR5cGUgPSBDb21tYW5kVHlwZS5FZGl0RmlsZTtcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQua2V5ID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LnNpZ25hbHIuY2xpZW50S2V5O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdEZpbGVDb21tYW5kID0gbmV3IEVkaXRGaWxlQ29tbWFuZCgpO1xyXG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmZpbGVTZXJ2aWNlRW5kcG9pbnQgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpRG9tYWluLmZpbGVFbmRwb2ludDtcclxuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC51cGxvYWRGaWxlQXBpID0gdGhpcy5fZmlsZVZlcnNpb25TZXJ2aWNlLmdldFVwbG9hZEZpbGVWZXJzaW9uQXBpVXJsKCk7XHJcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQucmVtb3ZlRmlsZUFwaSA9IHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5nZXRSZW1vdmVGaWxlVmVyc2lvbkFwaVVybCgpO1xyXG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmZpbGVVcmwgPSBmaWxlVXJsO1xyXG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmlzRHJhZnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmdyb3VwRmlsZU5hbWUgPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZmlsZU5hbWUgPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQudmVyc2lvbiA9IGZpbGVWZXJzaW9uLnZlcnNpb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmZpbGVWZXJzaW9uSWQgPSBmaWxlVmVyc2lvbi5pZDtcclxuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5hY2Nlc3NUb2tlbiA9IHRoaXMuX2F1dGhlblNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQuZGF0YSA9IGVkaXRGaWxlQ29tbWFuZDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90bkNsaWVudFNlcnZpY2Uuc2VuZENvbW1hbmQoY29tbWFuZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2UudW5TdWJzY3JpYmVWaWV3Q29kZShudWxsLCAnRklMRS5WRVJTSU9OLlVQREFURUQnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlLnN0YXJ0KG51bGwsICdGSUxFLlZFUlNJT04uVVBEQVRFRCcsIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvYmoubWVzc2FnZS5jb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9iai5NZXNzYWdlLkNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmopIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0TGlzdEZpbGVzKHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoQ29tbW9uRXJyb3JDb2RlLkVSUk9SX1NFUlZJQ0VfTk9UX1JVTiA9PT0gZXJyb3Iuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dSZXNwb25zZUVycm9yKDAsIG51bGwsICdGaWxlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeTogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGSUxFX0VYUExPUkVSLk1FU1NBR0VfRVJST1JfSEVBREVSJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGSUxFX0VYUExPUkVSLk1FU1NBR0VfRVJST1JfREVUQUlMJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpZmU6IDUwMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4gQlJFQURDUlVNQlMuXHJcbiAgICBhc3luYyBzZXRCcmVhZGNydW1icygpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCkge1xyXG4gICAgICAgICAgICBjb25zdCByc0ZvbGRlciA9IGF3YWl0IHRoaXMuX2ZvbGRlclNlcnZpY2UuZ2V0RGV0YWlsV2l0aFBlcm1pc3Npb24odGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XHJcbiAgICAgICAgICAgIGlmIChyc0ZvbGRlci5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2VQZXJtaXNzaW9uID0gcnNGb2xkZXIuZGF0YS5iYXNlUGVybWlzc2lvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBycyA9IGF3YWl0IHRoaXMuX2ZvbGRlclNlcnZpY2UuZ2V0RnVsbEZvbGRlclBhdGgodGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XHJcbiAgICAgICAgICAgIGlmIChycy5zdWNjZXNzICYmIHJzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChycy5kYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJlYWRjcnVtYnMgPSBycy5kYXRhLm1hcChmb2xkZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBicmVhZGNydW1iID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGluZGV4ID09IDAgPyB0aGlzLmdldFJvb3RGb2xkZXJOYW1lKGZvbGRlci5uYW1lKSA6IGZvbGRlci5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGZvbGRlci5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M6IGZvbGRlci5pZCAhPSB0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkID8gJ2ZtLWNsaWNrYWJsZScgOiAnZm0tY3VycmVudC1mb2xkZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KGZvbGRlci5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnJlYWRjcnVtYjtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWRjcnVtYnMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFkY3J1bWJzWzBdLmxhYmVsID09ICdUaMawIG3hu6VjIMSRw61uaCBrw6htJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWRjcnVtYnMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5icmVhZGNydW1icyA9IGJyZWFkY3J1bWJzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmJyZWFkY3J1bWJzID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYnJlYWRjcnVtYnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLmJyZWFkY3J1bWJzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFJvb3RGb2xkZXJOYW1lKGZvbGRlck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGZvbGRlck5hbWVQcmVmaXggPSAnVGjGsCBt4bulYyAnO1xyXG4gICAgICAgIGxldCB0eXBlT2ZGb2xkZXIgPSAnJztcclxuICAgICAgICBpZiAoZm9sZGVyTmFtZS5pbmNsdWRlcygndXNlci5NeV9Eb2N1bWVudC4nKSkge1xyXG4gICAgICAgICAgICB0eXBlT2ZGb2xkZXIgPSAnY+G7p2EgdMO0aSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGZvbGRlck5hbWUuaW5jbHVkZXMoJ2Nvbmd2aWVjJykpIHtcclxuICAgICAgICAgICAgdHlwZU9mRm9sZGVyID0gJ2PDtG5nIHZp4buHYyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGZvbGRlck5hbWUuaW5jbHVkZXMoJ3ZhbmJhbicpKSB7XHJcbiAgICAgICAgICAgIHR5cGVPZkZvbGRlciA9ICd2xINuIGLhuqNuJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHR5cGVPZkZvbGRlciA9ICfEkcOtbmgga8OobSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHtmb2xkZXJOYW1lUHJlZml4fSR7dHlwZU9mRm9sZGVyfWA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiBTSUdOLlxyXG4gICAgLy8gVE9ETzogTMawdSDDvSB44butIGzDvSB0csaw4budbmcgZG91YmxlIGNsaWNrIHbDoG8gbsO6dFxyXG4gICAgc2lnbkZpbGUoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIGvDvSBz4buRIHbEg24gYuG6o24gbsOgeT8nKS50aGVuKGFzeW5jIHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKHJzKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc291cmNlRmlsZUlkID0gZmlsZS5pZDtcclxuICAgICAgICAgICAgICAgIGxldCBzb3VyY2VGaWxlID0gZmlsZTtcclxuICAgICAgICAgICAgICAgIC8vIEvDvSBz4buRIGZpbGUgd29yZCAtIGPhuqduIGNvbnZlcnQgc2FuZyBwZGYgdHLGsOG7m2NcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLm5lZWRDb252ZXJ0QmVmb3JlU2lnbihmaWxlLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCBmaWxlIGJlZm9yZSBzaWduXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcnNDb252ZXJ0ID0gYXdhaXQgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jb252ZXJ0RG9jdW1lbnRUb1BkZkFuZFNhdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VJZDogc291cmNlRmlsZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jaGFuZ2VGaWxlRXh0ZW5zaW9uKGZpbGUubmFtZSwgJ3BkZicpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVySW5zdGFuY2VJZDogZmlsZS5wYXJlbnRGb2xkZXJJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyVHlwZTogdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS51c2VySWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcnNDb252ZXJ0IHx8ICFyc0NvbnZlcnQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGBDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGNodXnhu4NuIMSR4buVaSB0w6BpIGxp4buHdSAke2ZpbGUubmFtZX0gdGjDoG5oIHBkZiDEkeG7gyBrw70uIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXVgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcyhgQ2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIHRow6BuaCBjw7RuZ2ApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmlsZUlkID0gcnNDb252ZXJ0LmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlID0geyBpZDogc291cmNlRmlsZUlkIH0gYXMgRmlsZUV4cGxvcmVySXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBjaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgxJHhu4Mga8O9LiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5nZW5lcmF0ZUxpbmtEb3dubG9hZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZUlkOiBzb3VyY2VGaWxlSWQsXHJcbiAgICAgICAgICAgICAgICB9IGFzIEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldERvd25sb2FkRm9yU2lnblVybChycy5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm1zID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgcHJtc1snRmlsZVVwbG9hZEhhbmRsZXInXSA9IGAke3RoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZUVuZHBvaW50fS8ke3RoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS9LeVNvRmlsZS9TYXZlUGh5c2ljYWxTaWduZWRGaWxlYDtcclxuICAgICAgICAgICAgICAgICAgICBwcm1zWydTZXNzaW9uSWQnXSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHBybXNbJ0ZpbGVOYW1lJ10gPSB1cmw7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdmFyaWFibGUtbmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25fcHJtcyA9IEpTT04uc3RyaW5naWZ5KHBybXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZnY2Ffc2lnbl9hcHByb3ZlZChqc29uX3BybXMsIChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRPYmogPSBKU09OLnBhcnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRPYmouRmlsZVNlcnZlciAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5zYXZlU2lnbmVkRmlsZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmlsZTogc291cmNlRmlsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRmlsZUlkOiByZXN1bHRPYmouRmlsZVNlcnZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4ocnNzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ0vDvSBz4buRIHRow6BuaCBjw7RuZycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbkZpbGVEb25WaShmaWxlOiBGaWxlRXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5zaG93Q29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIGvDvSBz4buRIMSRxqFuIHbhu4sgdsSDbiBi4bqjbiBuw6B5PycpXHJcbiAgICAgICAgICAgIC50aGVuKGFzeW5jIChycykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNvdXJjZUZpbGVJZCA9IGZpbGUuaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNvdXJjZUZpbGUgPSBmaWxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLm5lZWRDb252ZXJ0QmVmb3JlU2lnbihmaWxlLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgZmlsZSBiZWZvcmUgc2lnblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcnNDb252ZXJ0ID0gYXdhaXQgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jb252ZXJ0RG9jdW1lbnRUb1BkZkFuZFNhdmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlSWQ6IHNvdXJjZUZpbGVJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmNoYW5nZUZpbGVFeHRlbnNpb24oZmlsZS5uYW1lLCAncGRmJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVySW5zdGFuY2VJZDogZmlsZS5wYXJlbnRGb2xkZXJJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lclR5cGU6IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudXNlcklkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcnNDb252ZXJ0IHx8ICFyc0NvbnZlcnQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBjaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgxJHhu4Mga8O9LiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKGBDaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgdGjDoG5oIGPDtG5nYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmlsZUlkID0gcnNDb252ZXJ0LmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmlsZSA9IHsgaWQ6IHNvdXJjZUZpbGVJZCB9IGFzIEZpbGVFeHBsb3Jlckl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBjaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgxJHhu4Mga8O9LiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2VuZXJhdGVMaW5rRG93bmxvYWQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGaWxlVmVyc2lvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlSWQ6IHNvdXJjZUZpbGVJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldERvd25sb2FkRm9yU2lnblVybChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycy5kYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm1zID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm1zWydGaWxlVXBsb2FkSGFuZGxlciddID0gYCR7dGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnR9LyR7dGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaVZlcnNpb259L0t5U29GaWxlL1NhdmVQaHlzaWNhbFNpZ25lZEZpbGVgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJtc1snU2Vzc2lvbklkJ10gPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybXNbJ0ZpbGVOYW1lJ10gPSB1cmw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnV54buBbiBz4buRLCBuZ8OgeSBrw70gc+G7kSBwaMOybmcgYmFuIG7hur91IGPhuqduXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aGF0ID0gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGF0LmNvbnRyb2wgJiYgdGhhdC5jb250cm9sLmRhdGFLeVNvRG9uVmkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhS3lTb0RvblZpID0gKDxGdW5jdGlvbj50aGF0LmNvbnRyb2wuZGF0YUt5U29Eb25WaSkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YUt5U29Eb25WaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBs4bqleSBz4buRIERvY051bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YUt5U29Eb25WaS5kb2NOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybXNbJ0RvY051bWJlciddID0gZGF0YUt5U29Eb25WaS5kb2NOdW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbOG6pXkgbmfDoHkgYmFuIGjDoG5oIHZiIMSRaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YUt5U29Eb25WaS5pc3N1ZWREYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm1zWydJc3N1ZWREYXRlJ10gPSBkYXRhS3lTb0RvblZpLmlzc3VlZERhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB2YXJpYWJsZS1uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBqc29uX3BybXMgPSBKU09OLnN0cmluZ2lmeShwcm1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZnY2Ffc2lnbl9pc3N1ZWQoanNvbl9wcm1zLCAocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRPYmogPSBKU09OLnBhcnNlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE9iai5GaWxlU2VydmVyICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zYXZlU2lnbmVkRmlsZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmlsZTogc291cmNlRmlsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRmlsZUlkOiByZXN1bHRPYmouRmlsZVNlcnZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocnNzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdLw70gc+G7kSB0aMOgbmggY8O0bmcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbkt5U2ltRmlsZShmaWxlOiBGaWxlRXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5reVNvU2ltLnNob3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubW9kZWwuYWR2YW5jZURhdGEgPSBmaWxlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNoYXJlRm9sZGVyKGZpbGU6IEZpbGVFeHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICB0aGlzLmZvcm1zLnNoYXJlRm9sZGVyLmRhdGEgPSBmaWxlO1xyXG4gICAgICAgIHRoaXMuZm9ybXMuc2hhcmVGb2xkZXIuc2hvdyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hhcmVGaWxlKGZpbGU6IEZpbGVFeHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICB0aGlzLmZvcm1zLnNoYXJlRmlsZS5kYXRhID0gZmlsZTtcclxuICAgICAgICB0aGlzLmZvcm1zLnNoYXJlRmlsZS5zaG93ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RGaWxlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpbGVDb250cm9sLmJhc2ljRmlsZUlucHV0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZUNvbnRyb2wuYmFzaWNGaWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2aWV3TGlzdFNpZ24oZTogRXZlbnQsIHNpZ25hdHVyZXM6IGFueSkge1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5zaWduYXR1cmVEZXRhaWwuc2hvdyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5hZHZhbmNlRGF0YSA9IHNpZ25hdHVyZXM7XHJcbiAgICB9XHJcblxyXG4gICAgb25Sb3dTZWxlY3QoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdGVkLmVtaXQodGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWREYXRhKCkge1xyXG4gICAgICAgIHRoaXMuX2ZpbGVNYW5hZ2VyU2VydmljZS5zdWJzVmFyID0gdGhpcy5fZmlsZU1hbmFnZXJTZXJ2aWNlLmludm9rZVJlbG9hZEZ1bmN0aW9uLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgYWRkQXR0YWNoTGluaygpIHtcclxuICAgICAgICBpZiAodGhpcy50eXBlZExpbmsgJiYgdGhpcy50eXBlZExpbmsubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBvYmogPSB0aGlzLnBhcnNlQXR0YWNoTGluayh0aGlzLnR5cGVkTGluayk7XHJcbiAgICAgICAgICAgIGlmIChvYmopIHtcclxuICAgICAgICAgICAgICAgIC8vIGRvIGxvZ2ljIGNvcHkgZmlsZSBieSBoYXNoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnR5cGVkTGluayA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93QXR0YWNoTGlua0JveCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuY29weUZpbGVCeUhhc2gob2JqLCB0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgICAgICAgICAgICAgIGlmICghcmVzLnN1Y2Nlc3MgfHwgIXJlcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdjw7MgbOG7l2kgdHJvbmcgbMO6YyBs4bqleSBmaWxlIHThu6sgbGluayEnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh7IGZpbGVvYmo6IHJlcyB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9sZGVyQ29udGVudCh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnVOG6o2kgdGjDoG5oIGPDtG5nIScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgaOG7lyB0cuG7oyBsacOqbiBr4bq/dCB04burIGjhu4cgdGjhu5FuZyBraMOhYyBob+G6t2MgbGnDqm4ga+G6v3Qga2jDtG5nIMSRw7puZyEnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwYXJzZUF0dGFjaExpbmsobGluaykge1xyXG4gICAgICAgIGlmIChsaW5rKSB7XHJcbiAgICAgICAgICAgIC8vIFRvZG86IHPhu61hIHThuqFtIMSR4buDIGNo4bqheSB0csOqbiBsb2NhbCwgc2F1IGtoaSBvayB0aMOsIHBo4bqjaSB0aMOqbSAnL2ZpbGUnXHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gbGluay5zcGxpdCgnZmlsZS92NS9Eb3dubG9hZExpbmsvRG93bmxvYWQvJyk7XHJcbiAgICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnRzWzFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjb3B5RmlsZUZyb21TaGFyZWQoc2VsZWN0ZWRGaWxlczogYW55W10sIGlkRGVzRm9sZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRGaWxlcz8ubGVuZ3RoIHx8IGlkRGVzRm9sZGVyICE9IG51bGwgfHwgaWREZXNGb2xkZXIgIT0gJycpIHtcclxuICAgICAgICAgICAgY29uc3QgaWRzRmlsZTogc3RyaW5nW10gPSBzZWxlY3RlZEZpbGVzLm1hcCh4ID0+IHguaWQpO1xyXG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5jb3B5TXVsdGlwbGVGaWxlKGlkc0ZpbGUsIGlkRGVzRm9sZGVyKTtcclxuICAgICAgICAgICAgaWYgKCFyZXMuc3VjY2VzcyB8fCAhcmVzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnTOG7l2kgY29weSBmaWxlIHThu6sgdGjGsCBt4bulYyBkw7luZyBjaHVuZycpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnQ29weSBmaWxlIHThu6sgdGjGsCBt4bulYyBkw7luZyBjaHVuZyB0aMOgbmggY8O0bmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSBjb3B5IHThu6sgdGh1IG3hu6VjIGTDuW5nIGNodW5nJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9jdXNJbnB1dChpbnB1dDogYW55KSB7XHJcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBjaG9uQ2h1S3koKSB7XHJcbiAgICAgICAgdGhpcy5maWxlS3lTb1NpbS5jaG9uQ2h1S3koKTtcclxuICAgIH1cclxuXHJcbiAgICBreVNvKCkge1xyXG4gICAgICAgIHRoaXMuZmlsZUt5U29TaW0ua3lTbygpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
1298
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2ZpbGUtZXhwbG9yZXIvZmlsZS1tYW5hZ2VyL2ZpbGUtbWFuYWdlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFZLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1B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Z0JBQ3hCLDR3dUJBQTRDO2dCQUU1QyxTQUFTLEVBQUU7b0JBQ1A7d0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzt3QkFDbkQsS0FBSyxFQUFFLElBQUk7cUJBQ2Q7b0JBQ0QsdUJBQXVCO2lCQUMxQjs7YUFDSjs7O1lBbENRLGNBQWM7WUFuQ3VCLFFBQVE7WUFLbkMsY0FBYztZQUh4QixnQkFBZ0I7WUFnQmhCLGFBQWE7WUFLYixlQUFlO1lBVWYsa0JBQWtCO1lBYmxCLG1CQUFtQjtZQUNuQixlQUFlO1lBQ2YsY0FBYztZQXlCZCxtQkFBbUI7WUFoQm5CLHNCQUFzQjtZQTVCdEIscUJBQXFCO1lBK0JyQixhQUFhO1lBRmIsaUJBQWlCO1lBSGpCLG1CQUFtQjtZQVZuQixrQkFBa0I7OzswQkFzRHRCLFNBQVMsU0FBQyxhQUFhOzBCQUN2QixTQUFTLFNBQUMsYUFBYTswQkFDdkIsU0FBUyxTQUFDLGFBQWE7c0JBRXZCLEtBQUs7OEJBQ0wsS0FBSztxQkFHTCxLQUFLO2lDQUNMLEtBQUs7MEJBQ0wsS0FBSzs0Q0FDTCxLQUFLOzJDQUNMLEtBQUs7NENBQ0wsS0FBSzsyQ0FDTCxLQUFLOzZDQUNMLEtBQUs7NENBQ0wsS0FBSzt1QkFDTCxLQUFLOzZCQUNMLEtBQUs7MEJBQ0wsS0FBSztxQkFDTCxLQUFLO3dCQUNMLEtBQUs7MkJBYUwsS0FBSzt1QkFJTCxLQUFLO3dCQUNMLEtBQUs7NkJBQ0wsS0FBSzs2QkFDTCxLQUFLO29CQUNMLEtBQUs7d0NBS0wsS0FBSztxQkFFTCxNQUFNO3NCQUNOLE1BQU07OEJBQ04sTUFBTTt5QkFDTixNQUFNOzBCQUNOLE1BQU07d0JBQ04sTUFBTTt5QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1lbnVJdGVtLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IENvbnRleHRNZW51IH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvY29udGV4dG1lbnUnO1xyXG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZmlsZXVwbG9hZCc7XHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhTGlzdEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvZGF0YS1saXN0LWJhc2UnO1xyXG5pbXBvcnQgeyBDb21tb25FcnJvckNvZGUgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2NvbW1vbi1lcnJvci1jb2RlJztcclxuaW1wb3J0IHsgRm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWcgfSBmcm9tICcuLi8uLi8uLi9jb25maWdzL21vZHVsZS1jb25maWcnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uQmFzZSB9IGZyb20gJy4uLy4uLy4uL2VudW1zL2NvbW1vbic7XHJcbmltcG9ydCB7IEVkaXRGaWxlQ29tbWFuZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9lZGl0LWZpbGUtY29tbWFuZCc7XHJcbmltcG9ydCB7IEZpbGVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpbGUtdHlwZSc7XHJcbmltcG9ydCB7IENvbW1hbmRUeXBlLCBUbkNsaWVudENvbW1hbmQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdG4tY2xpZW50LWNvbW1hbmQnO1xyXG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maWxlLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUbkNsaWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90bi1jbGllbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVLeVNvU2ltQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsZS1reS1zby1zaW0vZmlsZS1reS1zby1zaW0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRmlsZUV4cGxvcmVySXRlbSwgRmlsZUV4cGxvcmVySXRlbVR5cGUgfSBmcm9tICcuLi9tb2RlbHMvZmlsZS1leHBsb3Jlci1pdGVtJztcclxuaW1wb3J0IHsgRmlsZVZlcnNpb25EVE8gfSBmcm9tICcuLi9tb2RlbHMvZmlsZS12ZXJzaW9uLWR0byc7XHJcbmltcG9ydCB7IEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPIH0gZnJvbSAnLi4vbW9kZWxzL2dlbmVyYXRlLWxpbmstZG93bmxvYWQtZHRvJztcclxuaW1wb3J0IHsgU2VydmljZVJlcXVlc3RNb2RlbCB9IGZyb20gJy4uL21vZGVscy9zZXJ2aWNlLXJlcXVlc3QtbW9kZWwnO1xyXG5pbXBvcnQgeyBEb3dubG9hZExpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZG93bmxvYWQtbGluay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZURhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJOZXdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1leHBsb3Jlci1uZXcuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVPYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVWZXJzaW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ZpbGUtdmVyc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9sZGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ZvbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTXlEcml2ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9teS1kcml2ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICAgIENvbHVtblNjaGVtYUJhc2UsXHJcbiAgICBDcnVkRm9ybURhdGEsXHJcbiAgICBFbnVtRmlsZUxheW91dCxcclxuICAgIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSxcclxuICAgIEhlaWdodFR5cGUsXHJcbiAgICBNb2RlbFNjaGVtYSxcclxuICAgIE9wZXJhdG9yLFxyXG4gICAgUG9wdXBTaXplXHJcbn0gZnJvbSAnLi8uLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgR3JpZEluZm8gfSBmcm9tICcuLy4uLy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJTZXJ2aWNlIH0gZnJvbSAnLi8uLi9zZXJ2aWNlcy9maWxlLWV4cGxvcmVyLnNlcnZpY2UnO1xyXG5cclxuXHJcbi8vIGltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lbnVJdGVtLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuLy8gaW1wb3J0IHsgQ29udGV4dE1lbnUgfSBmcm9tICdwcmltZW5nL2NvbnRleHRtZW51JztcclxuLy8gaW1wb3J0IHsgRmlsZVVwbG9hZCB9IGZyb20gJ3ByaW1lbmcvZmlsZXVwbG9hZCc7XHJcbmRlY2xhcmUgbGV0IHZnY2Ffc2lnbl9hcHByb3ZlZDogYW55O1xyXG5kZWNsYXJlIGxldCB2Z2NhX3NpZ25faXNzdWVkOiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgICBzZWxlY3RvcjogJ2ZpbGUtbWFuYWdlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1tYW5hZ2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2ZpbGUtbWFuYWdlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRmlsZU1hbmFnZXJDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIENvbXBvbmVudENvbnRleHRTZXJ2aWNlLFxyXG4gICAgXSxcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlTWFuYWdlckNvbXBvbmVudCBleHRlbmRzIERhdGFMaXN0QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdmaWxlQ29udHJvbCcpIGZpbGVDb250cm9sOiBGaWxlVXBsb2FkO1xyXG4gICAgQFZpZXdDaGlsZCgnY29udGV4dE1lbnUnKSBjb250ZXh0TWVudTogQ29udGV4dE1lbnU7XHJcbiAgICBAVmlld0NoaWxkKCdmaWxlS3lTb1NpbScpIGZpbGVLeVNvU2ltOiBGaWxlS3lTb1NpbUNvbXBvbmVudDtcclxuXHJcbiAgICBASW5wdXQoKSBjb250cm9sOiBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWE7XHJcbiAgICBASW5wdXQoKSBzZXQgZmlsZURhdGFTZXJ2aWNlKHZhbHVlOiBGaWxlRGF0YVNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLl9maWxlRGF0YVNlcnZpY2UgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIEBJbnB1dCgpIGxheW91dDogRW51bUZpbGVMYXlvdXQgPSBFbnVtRmlsZUxheW91dC5MSVNUO1xyXG4gICAgQElucHV0KCkgaGlkZGVuQ3JlYXRlRm9sZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBtYXhGaWxlU2l6ZTogbnVtYmVyID0gMTAwMDAwMDAwOyAvLyBTaXplIGluIGJ5dGVcclxuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlU2l6ZU1lc3NhZ2VTdW1tYXJ5Pzogc3RyaW5nID0gJ3swfTogUXXDoSBkdW5nIGzGsOG7o25nIGZpbGUgY2hvIHBow6lwLCAnO1xyXG4gICAgQElucHV0KCkgaW52YWxpZEZpbGVTaXplTWVzc2FnZURldGFpbD86IHN0cmluZyA9ICdkdW5nIGzGsOG7o25nIHThu5FpIMSRYSBsw6AgezB9Lic7XHJcbiAgICBASW5wdXQoKSBpbnZhbGlkRmlsZVR5cGVNZXNzYWdlU3VtbWFyeT86IHN0cmluZyA9ICd7MH06IEtow7RuZyDEkcO6bmcgxJHhu4tuaCBk4bqhbmcgZmlsZSwgJztcclxuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlVHlwZU1lc3NhZ2VEZXRhaWw/OiBzdHJpbmcgPSAnxJHhu4tuaCBk4bqhbmcgZmlsZSBjaG8gcGjDqXA6IHswfS4nO1xyXG4gICAgQElucHV0KCkgaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VTdW1tYXJ5Pzogc3RyaW5nID0gJ1F1w6Egc+G7kSBsxrDhu6NuZyBmaWxlIGNobyBwaMOpcCwgJztcclxuICAgIEBJbnB1dCgpIGludmFsaWRGaWxlTGltaXRNZXNzYWdlRGV0YWlsPzogc3RyaW5nID0gJ3Thu5FpIMSRYSB7MH0gZmlsZS4nO1xyXG4gICAgQElucHV0KCkgZGF0YVR5cGU6IGFueTtcclxuICAgIEBJbnB1dCgpIHJvb3RGb2xkZXJOYW1lOiBzdHJpbmc7Ly8gVMOqbiB0aMawIG3hu6VjIGfhu5FjLlxyXG4gICAgQElucHV0KCkgc2VydmljZUNvZGU6IHN0cmluZzsvLyBC4buZIGtleSDEkeG7gyB04bqhbyB0aMawIG3hu6VjIGfhu5FjLlxyXG4gICAgQElucHV0KCkgZW50aXR5OiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBzZXQgZW50aXR5S2V5KHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fZW50aXR5S2V5ID0gdmFsO1xyXG5cclxuICAgICAgICBpZiAodmFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZFNvdXJjZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnJvb3RGb2xkZXJJZCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZW50aXR5S2V5Q2hhbmdlLmVtaXQodGhpcy5fZW50aXR5S2V5KTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja0FuZExvYWRSb290Rm9sZGVyQ29udGVudCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldERhdGEoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgQElucHV0KCkgc2V0IHJvb3RGb2xkZXJJZCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fcm9vdEZvbGRlcklkID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGluVGFpTGlldSA9IGZhbHNlOy8vIETDuW5nIGNobyBjb21wb25lbnQgdMOgaSBsaeG7h3VcclxuICAgIEBJbnB1dCgpIGluVGFpTGlldUNodW5nID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBjb3B5VG9Gb2xkZXJJZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCk7XHJcbiAgICBASW5wdXQoKSBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLl92YWx1ZSAhPSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEBJbnB1dCgpIG11bHRpcGxlQ2hlY2tXaGVuQ2xpY2tSb3c6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIEBPdXRwdXQoKSBvbkluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgZW50aXR5S2V5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgY2xvc2VQb3B1cCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIHByaXZhdGUgX3Vuc3ViY3JpYmxlQWxsID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnOiBNb2R1bGVDb25maWc7XHJcblxyXG4gICAgX29sZFZhbHVlOiBhbnk7XHJcbiAgICBfdmFsdWU6IGFueTtcclxuICAgIF9kYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG4gICAgX2xheW91dCA9IEVudW1GaWxlTGF5b3V0O1xyXG4gICAgZ2V0IGZpbGVEYXRhU2VydmljZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZmlsZURhdGFTZXJ2aWNlO1xyXG4gICAgfVxyXG4gICAgX2ZpbGVEYXRhU2VydmljZTogRmlsZURhdGFTZXJ2aWNlO1xyXG4gICAgX2VudGl0eUtleTogc3RyaW5nO1xyXG4gICAgX2hhc0xvYWRlZFNvdXJjZSA9IGZhbHNlO1xyXG4gICAgZ2V0IHJvb3RGb2xkZXJJZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdEZvbGRlcklkO1xyXG4gICAgfVxyXG4gICAgX3Jvb3RGb2xkZXJJZDogc3RyaW5nID0gbnVsbDsvLyBJbnN0YW5jZUlkIHRoxrAgbeG7pWMgZ+G7kWMuXHJcbiAgICBwcm9ncmVzc1ZhbHVlID0gMDtcclxuICAgIGFwaVVwbG9hZFVybCA9ICcnO1xyXG4gICAgY2hvb3NlTGFiZWwgPSAnQ2jhu41uJztcclxuICAgIHVzZXJJZDogYW55O1xyXG5cclxuICAgIGZvcm1JZHMgPSB7XHJcbiAgICAgICAgY3JlYXRlRm9sZGVyOiAnY3JlYXRlRm9sZGVyJyxcclxuICAgICAgICByZW5hbWVGaWxlOiAncmVuYW1lRmlsZScsXHJcbiAgICAgICAgc2hhcmVGaWxlOiAnc2hhcmVGaWxlJyxcclxuICAgICAgICBzaGFyZUZvbGRlcjogJ3NoYXJlRm9sZGVyJyxcclxuICAgICAgICBmaWxlVmlld2VyOiAnZmlsZVZpZXdlcicsXHJcbiAgICAgICAgZmlsZVZlcnNpb25MaXN0OiAnZmlsZVZlcnNpb25MaXN0JyxcclxuICAgICAgICBzaWduYXR1cmVEZXRhaWw6ICdzaWduYXR1cmVEZXRhaWwnLFxyXG4gICAgICAgIGt5U29TaW06ICdreVNvU2ltJyxcclxuICAgIH07XHJcbiAgICBmb3JtczogYW55ID0ge307XHJcbiAgICBkYXRhOiBhbnkgPSB7XHJcbiAgICAgICAgcm9vdEZvbGRlcklkOiBudWxsLFxyXG4gICAgICAgIGN1cnJlbnRGb2xkZXJJZDogbnVsbCxcclxuXHJcbiAgICAgICAgbW92aW5nOiB7XHJcbiAgICAgICAgICAgIGlzU2VsZWN0aW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtczogbnVsbCxcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBicmVhZGNydW1iczogPE1lbnVJdGVtW10+W10sXHJcbiAgICB9O1xyXG4gICAgc2hvd0F0dGFjaExpbmtCb3ggPSBmYWxzZTtcclxuICAgIHR5cGVkTGluazogc3RyaW5nID0gJyc7XHJcbiAgICBzaG93VGFpTGlldUR1bmdDaHVuZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGF5b3V0U2ltcGxlQWxsID0gZmFsc2U7XHJcbiAgICBiYXNlUGVybWlzc2lvbjogbnVtYmVyO1xyXG4gICAgaW5pdGVkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIF9teURyaXZlU2VydmljZTogTXlEcml2ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9hdXRoZW5TZXJ2aWNlOiBBdXRoZW5TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3RuQ2xpZW50U2VydmljZTogVG5DbGllbnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2ZpbGVWZXJzaW9uU2VydmljZTogRmlsZVZlcnNpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9zaWduYWxyU2VydmljZTogU2lnbmFsUlNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIF9maWxlRXhwbG9yZXJTZXJ2aWNlOiBGaWxlRXhwbG9yZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2ZpbGVFeHBsb3Jlck5ld1NlcnZpY2U6IEZpbGVFeHBsb3Jlck5ld1NlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIF9kZXZpY2VEZXRlY3RvclNlcnZpY2U6IERldmljZURldGVjdG9yU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9mb2xkZXJTZXJ2aWNlOiBGb2xkZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2ZpbGVPYmplY3RTZXJ2aWNlOiBGaWxlT2JqZWN0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9kb3dubG9hZExpbmtTZXJ2aWNlOiBEb3dubG9hZExpbmtTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2ZpbGVNYW5hZ2VyU2VydmljZTogRmlsZU1hbmFnZXJTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihfaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMuX21vZHVsZUNvbmZpZyA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XHJcbiAgICAgICAgdGhpcy5hcGlVcGxvYWRVcmwgPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRVcGxvYWRVcmwoKTtcclxuICAgICAgICB0aGlzLnVzZXJJZCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldFVzZXJJZENvbWJpbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5fY29tcG9uZW50ID0gdGhpcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubGF5b3V0U2ltcGxlQWxsID0gKHRoaXMubGF5b3V0ID09PSBFbnVtRmlsZUxheW91dC5TSU1QTEUgfHwgdGhpcy5sYXlvdXQgPT09IEVudW1GaWxlTGF5b3V0LlNJTVBMRV9GT1JfTElTVCk7XHJcbiAgICAgICAgdGhpcy5sb2FkRGV0YWlsRnJvbVF1ZXJ5UGFyYW0gPSBmYWxzZTtcclxuICAgICAgICAvLyBM4bqvbmcga2hpIGvDvSBzaW0gc+G7kSB0aMOgbmggY8O0bmcgdGjDrCBsb2FkIGzhuqFpIGZpbGVcclxuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LnN1YnNjcmliZSgnS3lTb1NpbVRoYW5oQ29uZycsIHggPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgdGhpcy5mb3Jtcy5reVNvU2ltLnNob3cgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmhhc0NydWRMaXN0ID0gdGhpcy5sYXlvdXQgPT0gRW51bUZpbGVMYXlvdXQuTElTVDtcclxuICAgICAgICB0aGlzLnBsdXNVcmwgPSAnQnlGb2xkZXJJZCc7XHJcbiAgICAgICAgdGhpcy5pbml0R3JpZCgpO1xyXG4gICAgICAgIHRoaXMuaW5pdEZvcm1zKCk7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLm1vZGVsLnJlYWR5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZURhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZURhdGFTZXJ2aWNlLnJlZ2lzdGVyKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlbG9hZERhdGEoKTtcclxuICAgICAgICB0aGlzLmNoZWNrQW5kTG9hZFJvb3RGb2xkZXJDb250ZW50KCk7XHJcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0FuZExvYWRSb290Rm9sZGVyQ29udGVudCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5pdGVkIHx8IHRoaXMuZmlsZURhdGFTZXJ2aWNlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5nZXRSb290Rm9sZGVyQ29udGVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJvb3RGb2xkZXJDb250ZW50KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5yb290Rm9sZGVySWQpIHtcclxuICAgICAgICAgICAgY29uc3QgaGFzS2V5ID0gdGhpcy5zZXJ2aWNlQ29kZVxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5lbnRpdHlcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuX2VudGl0eUtleTtcclxuXHJcbiAgICAgICAgICAgIGlmICghaGFzS2V5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0RGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9tYXJrTG9hZGluZygpO1xyXG4gICAgICAgICAgICB0aGlzLl9mb2xkZXJTZXJ2aWNlLmdldFNlcnZpY2VGb2xkZXJJZCh7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlQ29kZTogdGhpcy5zZXJ2aWNlQ29kZSxcclxuICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHksXHJcbiAgICAgICAgICAgICAgICBlbnRpdHlLZXk6IHRoaXMuX2VudGl0eUtleSxcclxuICAgICAgICAgICAgfSBhcyBTZXJ2aWNlUmVxdWVzdE1vZGVsKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VubWFya0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvb3RGb2xkZXJJZCA9IHJzLmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwucmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXREYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGzhuqV5IHRoxrAgbeG7pWMgZ+G7kWMhJyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwucmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXREYXRhKCkge1xyXG4gICAgICAgIHRoaXMucm9vdEZvbGRlcklkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRhdGEuYnJlYWRjcnVtYnMgPSBbXTtcclxuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Um9vdEZvbGRlcklkKHJvb3RGb2xkZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5yb290Rm9sZGVySWQgPSByb290Rm9sZGVySWQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGF0YXNvdXJjZShkYXRhU291cmNlOiBhbnlbXSA9IFtdKSB7XHJcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgICAgICAgdGhpcy5fb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IFtdO1xyXG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgdmFsdWUucHVzaChpdGVtLmlkKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0ubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5uYW1lV2l0aG91dEV4dGVuc2lvbiA9IGl0ZW0ubmFtZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbS5uYW1lLmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ubmFtZVdpdGhvdXRFeHRlbnNpb24gPSBpdGVtLm5hbWUuc3Vic3RyaW5nKDAsIGluZGV4KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZXh0ZW5zaW9uID0gaXRlbS5leHRlbnNpb24udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGl0ZW0uaXNGaWxlID0gaXRlbS5maWxlRXhwbG9yZXJJdGVtVHlwZSA9PSBGaWxlRXhwbG9yZXJJdGVtVHlwZS5GaWxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5fb2xkVmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy5fb2xkVmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KHRoaXMuX3ZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnRDaGFuZ2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50Q2hhbmdlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tb2RlbC5yZWFkeSA9IHRydWU7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9oYXNMb2FkZWRTb3VyY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5faGFzTG9hZGVkU291cmNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5vblJlYWR5LmVtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZmlyZUV2ZW50Q2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZWQuZW1pdCh0aGlzLl92YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdEdyaWQoKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm11bHRpcGxlQ2hlY2tXaGVuQ2xpY2tSb3cgPSB0aGlzLm11bHRpcGxlQ2hlY2tXaGVuQ2xpY2tSb3c7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1vZGVsU2NoZW1hcyA9IFtcclxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnbmFtZScsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnVMOqbiB0w6BpIGxp4buHdScsXHJcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ1TDqm4gdMOgaSBsaeG7h3UnLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUw6puIHTDoGkgbGnhu4d1JyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2ZpbGVTaXplJyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdLw61jaCB0aMaw4bubYycsXHJcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ0vDrWNoIHRoxrDhu5tjJyxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnS8OtY2ggdGjGsOG7m2MnLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnY3JlYXRlZCcsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnTmfDoHkgdOG6oW8nLFxyXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdOZ8OgeSB04bqhbycsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ05nw6B5IHThuqFvJyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZGF0ZXRpbWUnLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnY3VycmVudEZpbGVWZXJzaW9uJyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdQaGnDqm4gYuG6o24nLFxyXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdQaGnDqm4gYuG6o24nLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdQaGnDqm4gYuG6o24nLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnZnVuY3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJ0No4bupYyBuxINuZycsXHJcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ0No4bupYyBuxINuZycsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0No4bupYyBuxINuZycsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzID0gW1xyXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ25hbWUnLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdleHBsb3Jlckl0ZW0nLFxyXG4gICAgICAgICAgICAgICAgc29ydDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnZmlsZVNpemUnLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdmaWxlU2l6ZScsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICc5ZW0nLFxyXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAxLFxyXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdjcmVhdGVkJyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZGF0ZXRpbWUnLFxyXG4gICAgICAgICAgICAgICAgc29ydDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTBlbSdcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnY3VycmVudEZpbGVWZXJzaW9uJyxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnOGVtJyxcclxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogMSxcclxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRTZXR0aW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdFNldHRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhlaWdodFR5cGUgPSBIZWlnaHRUeXBlLmR5bmFtaWM7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlbkZpbHRlclJvdyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlID0gdGhpcy5fZm9sZGVyU2VydmljZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdXb3JrZmxvdyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdQZXJtaXNzaW9uID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS51c2VXb3JrZmxvdyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBGb3Jtcy5cclxuICAgIGluaXRGb3JtcygpIHtcclxuICAgICAgICB0aGlzLmZvcm1zW3RoaXMuZm9ybUlkcy5jcmVhdGVGb2xkZXJdID0ge1xyXG4gICAgICAgICAgICBoZWFkZXI6ICdU4bqhbyBt4bubaSB0aMawIG3hu6VjJyxcclxuICAgICAgICAgICAgc2hvdzogZmFsc2UsXHJcbiAgICAgICAgICAgIGZvcm1EYXRhOiBuZXcgQ3J1ZEZvcm1EYXRhKCksXHJcbiAgICAgICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogNDAwLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyMDAsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybXNbdGhpcy5mb3JtSWRzLnJlbmFtZUZpbGVdID0ge1xyXG4gICAgICAgICAgICBoZWFkZXI6ICfEkOG7lWkgdMOqbiB04buHcCcsXHJcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxyXG4gICAgICAgICAgICBmb3JtRGF0YTogbmV3IENydWRGb3JtRGF0YSgpLFxyXG4gICAgICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoe1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDQwMCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogMjAwLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1zW3RoaXMuZm9ybUlkcy5maWxlVmlld2VyXSA9IHtcclxuICAgICAgICAgICAgc2hvdzogZmFsc2UsXHJcbiAgICAgICAgICAgIGZvcm1EYXRhOiB7fSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1zW3RoaXMuZm9ybUlkcy5maWxlVmVyc2lvbkxpc3RdID0ge1xyXG4gICAgICAgICAgICBoZWFkZXI6ICdEYW5oIHPDoWNoIHBoacOqbiBi4bqjbicsXHJcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxyXG4gICAgICAgICAgICBmaWxlSWQ6IG51bGwsXHJcbiAgICAgICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7XHJcbiAgICAgICAgICAgICAgICBtYXhpbWl6ZTogdHJ1ZSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3Jtc1t0aGlzLmZvcm1JZHMuc2lnbmF0dXJlRGV0YWlsXSA9IHtcclxuICAgICAgICAgICAgaGVhZGVyOiAnVGjDtG5nIHRpbiBjaOG7ryBrw70gc+G7kScsXHJcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybXNbdGhpcy5mb3JtSWRzLmt5U29TaW1dID0ge1xyXG4gICAgICAgICAgICBoZWFkZXI6ICdLw70gc+G7kSBzaW0nLFxyXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHtcclxuICAgICAgICAgICAgICAgIG1heGltaXplOiB0cnVlLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2F2ZWRGb3JtKGZvcm1JZCkge1xyXG4gICAgICAgIHRoaXMuZm9ybXNbZm9ybUlkXS5zaG93ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DYW5jZWxGb3JtKGZvcm1JZCkge1xyXG4gICAgICAgIHRoaXMuZm9ybXNbZm9ybUlkXS5zaG93ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0NvbnRleHRNZW51KGV2dCwgaXRlbSkge1xyXG4gICAgICAgIGlmIChpdGVtLmlzRmlsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEuaXRlbXNNZW51RmlsZSA9IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1hlbSB0cuG7sWMgdHV54bq/bicsIGljb246ICdmYXMgZmEtZXllJywgY29tbWFuZDogKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbk9iamVjdChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICh0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgISh0aGlzLmxheW91dFNpbXBsZUFsbCAmJiB0aGlzLnJlYWRvbmx5KSksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnS8O9IHPhu5EgY8OhIG5ow6JuIChTSU0pJyxcclxuICAgICAgICAgICAgICAgICAgICBpY29uOiAnZmFzIGZhLXNpbS1jYXJkJyxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2lnbkt5U2ltRmlsZShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICh0aGlzLl9maWxlT2JqZWN0U2VydmljZS5pc1R5cGVGaWxlS3lTbyhpdGVtLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMubGF5b3V0ICE9PSBFbnVtRmlsZUxheW91dC5TSU1QTEVfRk9SX0xJU1QpLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0vDvSBz4buRIGPDoSBuaMOibiAoVVNCKScsIGljb246ICdmYXMgZmEtc2lnbmF0dXJlJyxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2lnbkZpbGUoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAodGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuaXNUeXBlRmlsZUt5U28oaXRlbS5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5sYXlvdXQgIT09IEVudW1GaWxlTGF5b3V0LlNJTVBMRV9GT1JfTElTVCksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnS8O9IHPhu5EgxJHGoW4gduG7iyAoVVNCKScsIGljb246ICdmYXMgZmEtc2lnbmF0dXJlJyxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2lnbkZpbGVEb25WaShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICh0aGlzLl9maWxlT2JqZWN0U2VydmljZS5pc1R5cGVGaWxlS3lTbyhpdGVtLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmxheW91dCAhPT0gRW51bUZpbGVMYXlvdXQuU0lNUExFX0ZPUl9MSVNUKSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdU4bqjaSB24buBJywgaWNvbjogJ2ZhcyBmYS1kb3dubG9hZCcsIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZChpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICEodGhpcy5sYXlvdXQgPT09IEVudW1GaWxlTGF5b3V0LlNJTVBMRSAmJiB0aGlzLnJlYWRvbmx5KSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdTYW8gY2jDqXAgxJHGsOG7nW5nIGThuqtuJywgaWNvbjogJ2ZhcyBmYS1saW5rJywgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvcHlEb3dubG9hZExpbmsoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAhKHRoaXMubGF5b3V0U2ltcGxlQWxsICYmIHRoaXMucmVhZG9ubHkpLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ8SQ4buVaSB0w6puJywgaWNvbjogJ2ZhcyBmYS1lcmFzZXInLCBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuYW1lRmlsZShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLmNoZWNrSXNSZWFkT25seSgpXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnWGVtIGPDoWMgcGhpw6puIGLhuqNuIGtow6FjJywgaWNvbjogJ2ZhcyBmYS1oaXN0b3J5JywgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5GaWxlVmVyc2lvbnMoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5jaGVja0lzUmVhZE9ubHkoKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1jDs2EgdOG7h3AgdGluJywgaWNvbjogJ2ZhciBmYS10cmFzaC1hbHQnLCBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlRmlsZShpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLmNoZWNrSXNSZWFkT25seSgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEuaXRlbXNNZW51RmlsZSA9IFt7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1ThuqNpIHbhu4EnLCBpY29uOiAnZmFzIGZhLWRvd25sb2FkJywgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWQoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1jDs2EgdGjGsCBt4bulYycsIGljb246ICdmYXIgZmEtdHJhc2gtYWx0JywgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlRm9sZGVyKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLmNoZWNrSXNSZWFkT25seSgpXHJcbiAgICAgICAgICAgIH1dO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzZXQgdGltZSBvdXQgxJHhu4MgZml4IGJ1ZyByZW5kZXIgY29udGV4dCBtZW51IHJhIHRyw6BuIHJhIG5nb8OgaSBtw6BuIGjDrG5oXHJcbiAgICAgICAgLy8gQ8OzIGzhur0gdsOsIHRo4budaSDEkWnhu4NtIHByaW1lbmcgdMOtbmggduG7iyB0csOtIGPhu6dhIGNvbnRleHQgbWVudSBsw6AgdHLGsOG7m2Mga2hpIHJlbmRlciBo4bq/dCBjw6FjIHJvdyB0cm9uZyBjb250ZXh0IG1lbnVcclxuICAgICAgICBzZXRUaW1lb3V0KGYgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51LnNob3coZXZ0KTtcclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lzUmVhZE9ubHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZG9ubHkgfHwgdGhpcy5iYXNlUGVybWlzc2lvbiA9PSBQZXJtaXNzaW9uQmFzZS5SRUFEO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUNsaWNrRmlsZU5hbWUoaXRlbSkge1xyXG4gICAgICAgIGlmICghaXRlbS5jYW5WaWV3T25saW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG93bmxvYWQoaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5PYmplY3QoaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvOiBHcmlkSW5mbykge1xyXG4gICAgICAgIGdyaWRJbmZvLmZpbHRlcnMuc3BsaWNlKDAsIDAsIHRoaXMubmV3RmlsdGVyKCdwYXJlbnRGb2xkZXJJZCcsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWZ0ZXJHZXREYXRhKCkge1xyXG4gICAgICAgIGZvciAoY29uc3QgaW5kIGluIHRoaXMubW9kZWwuZGF0YVNvdXJjZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5tb2RlbC5kYXRhU291cmNlW2luZF07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLnN1cHBvcnREaWdpdGFsU2lnbmF0dXJlKGl0ZW0ubmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuZ2V0U2lnbmF0dXJlSW5mb0J5RmlsZUlkKGl0ZW0uaWQpLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzICYmIHJzLmRhdGE/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNpZ25hdHVyZXMgPSBycy5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmxhc3RTaWduYXR1cmUgPSBycy5kYXRhW3JzLmRhdGEubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpdGVtLmZpbGVFeHBsb3Jlckl0ZW1UeXBlID09PSBGaWxlRXhwbG9yZXJJdGVtVHlwZS5Gb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uY2xhc3MgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXRlbS5leHRlbnNpb24pIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uaW1hZ2VJY29uID0gYC9hc3NldHMvaW1hZ2VzL2ZpbGUtZXh0L2ljb24ke2l0ZW0uZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCl9LnBuZ2A7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGl0ZW0uY2FuVmlld09ubGluZSA9IHRoaXMuX2ZpbGVFeHBsb3Jlck5ld1NlcnZpY2UuaXNTdXBwb3J0ZWRWaWV3T25saW5lKGl0ZW0ubmFtZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uZXh0ZW5zaW9uIHx8IGl0ZW0uZXh0ZW5zaW9uLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ubmFtZS5sYXN0SW5kZXhPZignLicpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmV4dGVuc2lvbiA9IGl0ZW0ubmFtZS5zdWJzdHJpbmcoaXRlbS5uYW1lLmxhc3RJbmRleE9mKCcuJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sID0gbmV3IEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMubW9kZWwuZGF0YVNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50LmV4dGVuc2lvbiB8fCBlbGVtZW50LmV4dGVuc2lvbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lm5hbWUubGFzdEluZGV4T2YoJy4nKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5leHRlbnNpb24gPSBlbGVtZW50Lm5hbWUuc3Vic3RyaW5nKGVsZW1lbnQubmFtZS5sYXN0SW5kZXhPZignLicpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCAodGhpcy5kYXRhVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIEZpbGVUeXBlLlZJREVPOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWNjZXB0ID0gJy5NUDQsLk1PViwuQVZJLC5GTFYsLldNVic7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2UgPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2UuZmlsdGVyKHggPT4gKHguZXh0ZW5zaW9uID09IG51bGwgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLk1QNCcgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLk1PVicgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLkFWSScgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLkZMVicgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLldNVicpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgRmlsZVR5cGUuSU1BR0U6IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5hY2NlcHQgPSAnLkpQRywuSlBFRywuUE5HJztcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IHRoaXMubW9kZWwuZGF0YVNvdXJjZS5maWx0ZXIoeCA9PiAoeC5leHRlbnNpb24gPT0gbnVsbCB8fCB4LmV4dGVuc2lvbi50b1VwcGVyQ2FzZSgpID09ICcuSlBHJyB8fCB4LmV4dGVuc2lvbi50b1VwcGVyQ2FzZSgpID09ICcuSlBFRycgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLlBORycpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgRmlsZVR5cGUuRE9DOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWNjZXB0ID0gJy5ET0MsLkRPQ1gsLlBERiwuWExTLC5YTFNYJztcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IHRoaXMubW9kZWwuZGF0YVNvdXJjZS5maWx0ZXIoeCA9PiAoeC5leHRlbnNpb24gPT0gbnVsbCB8fCB4LmV4dGVuc2lvbi50b1VwcGVyQ2FzZSgpID09ICcuRE9DJyB8fCB4LmV4dGVuc2lvbi50b1VwcGVyQ2FzZSgpID09ICcuRE9DWCcgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLlBERicgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLlhMUycgfHwgeC5leHRlbnNpb24udG9VcHBlckNhc2UoKSA9PSAnLlhMU1gnKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEZpbGVUeXBlLkFVRElPOiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuYWNjZXB0ID0gJy5NUDMsLldBViwuTTRBJztcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IHRoaXMubW9kZWwuZGF0YVNvdXJjZS5maWx0ZXIoeCA9PiAoeC5leHRlbnNpb24gPT0gbnVsbCB8fCB4LmV4dGVuc2lvbi50b1VwcGVyQ2FzZSgpID09ICcuTVAzJyB8fCB4LmV4dGVuc2lvbi50b1VwcGVyQ2FzZSgpID09ICcuV0FWJyB8fCB4LmV4dGVuc2lvbi50b1VwcGVyQ2FzZSgpID09ICcuTTRBJykpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0RGF0YXNvdXJjZSh0aGlzLm1vZGVsLmRhdGFTb3VyY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuX3Vuc3ViY3JpYmxlQWxsLm5leHQoKTtcclxuICAgICAgICB0aGlzLl91bnN1YmNyaWJsZUFsbC5jb21wbGV0ZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmZpbGVEYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVEYXRhU2VydmljZS51bnJlZ2lzdGVyKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LnVuU3Vic2NyaWJlKCdLeVNvU2ltVGhhbmhDb25nJyk7XHJcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IEZVTkNUSU9OIENPTFVNTiBNQU5VTEFUSU9OLlxyXG4gICAgZ2V0QnV0dG9uSWNvbihleHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICBpZiAoZXhwbG9yZXJJdGVtLmlzRmlsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BpIHBpLXBlbmNpbCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BpIHBpLWV5ZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncGkgcGktcGVuY2lsJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QnV0dG9uVG9vbHRpcChleHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICBpZiAoZXhwbG9yZXJJdGVtLmlzRmlsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0No4buJbmggc+G7rWEnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdYZW0gdHLhu7FjIHR1eeG6v24nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJ8SQ4buVaSB0w6puJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25CdXR0b25DbGljayhleHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICBpZiAoZXhwbG9yZXJJdGVtLmlzRmlsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRGaWxlKGV4cGxvcmVySXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5PYmplY3QoZXhwbG9yZXJJdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5hbWVGb2xkZXIoZXhwbG9yZXJJdGVtLmlkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWVudUl0ZW1zKGV4cGxvcmRlckl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gZXhwbG9yZGVySXRlbS5pc0ZpbGUgPyB0aGlzLmRhdGEuaXRlbXNNZW51RmlsZSA6IHRoaXMuZGF0YS5pdGVtc01lbnVGb2xkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ecm9wZG93bkNsaWNrKGV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIGlmIChleHBsb3Jlckl0ZW0uaXNGaWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGt5U29JdGVtID0gdGhpcy5kYXRhLml0ZW1zTWVudUZpbGUuZmluZCh4ID0+IHgubGFiZWwudG9Mb3dlckNhc2UoKSA9PSAnS8O9IHPhu5EnKTtcclxuICAgICAgICAgICAgaWYgKGt5U29JdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBreVNvSXRlbS52aXNpYmxlID0gdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5zdXBwb3J0RGlnaXRhbFNpZ25hdHVyZShleHBsb3Jlckl0ZW0ubmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YS5zZWxlY3RlZEV4cGxvcmVySXRlbSA9IGV4cGxvcmVySXRlbTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiBGSUxFIE1BTlVMQVRJT04uXHJcbiAgICAvLyBU4bqjaSBsw6puIGZpbGUuXHJcbiAgICBvblNlbGVjdEZpbGUoKSB7XHJcbiAgICAgICAgdGhpcy5maWxlQ29udHJvbC51cGxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkJlZm9yZVVwbG9hZChldnQpIHtcclxuICAgICAgICB0aGlzLl9tYXJrTG9hZGluZygpO1xyXG4gICAgICAgIGV2dC5mb3JtRGF0YS5hcHBlbmQoJ3NlcnZpY2VDb2RlJywgdGhpcy5zZXJ2aWNlQ29kZSk7XHJcbiAgICAgICAgZXZ0LmZvcm1EYXRhLmFwcGVuZCgnZW50aXR5JywgdGhpcy5lbnRpdHkpO1xyXG4gICAgICAgIGV2dC5mb3JtRGF0YS5hcHBlbmQoJ2VudGl0eUtleScsIHRoaXMuX2VudGl0eUtleSk7XHJcbiAgICAgICAgZXZ0LmZvcm1EYXRhLmFwcGVuZCgnZm9sZGVySWQnLCB0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgIH1cclxuXHJcbiAgICBvblVwbG9hZFByb2dyZXNzKGV2dCkge1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NWYWx1ZSA9IGV2dC5wcm9ncmVzcztcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVTZWxlY3RGaWxlKGV2dCkge1xyXG4gICAgICAgIGlmIChldnQuZXJyb3JNZXNzYWdlcyAmJiBldnQuZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhcclxuICAgICAgICAgICAgICAgIGV2dC5lcnJvck1lc3NhZ2VzLm1hcChpdGVtID0+IGAke2l0ZW0uc3VtbWFyeX0ke2l0ZW0uZGV0YWlsfWApLmpvaW4oJzsgJyksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uVXBsb2FkZWQoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5fdW5tYXJrTG9hZGluZygpO1xyXG4gICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIMSQ4buVaSB0w6puIGZpbGUuXHJcbiAgICByZW5hbWVGaWxlKGl0ZW0pIHtcclxuICAgICAgICB0aGlzLmZvcm1zLnJlbmFtZUZpbGUuaGVhZGVyID0gJ8SQ4buVaSB0w6puIHRoxrAgbeG7pWMnO1xyXG4gICAgICAgIHRoaXMuZm9ybXMucmVuYW1lRmlsZS5mb3JtRGF0YSA9IHtcclxuICAgICAgICAgICAgZm9ybVN0YXRlOiBGb3JtU3RhdGUuRURJVCxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgc2VydmljZUNvZGU6IHRoaXMuc2VydmljZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBlbnRpdHk6IHRoaXMuZW50aXR5LFxyXG4gICAgICAgICAgICAgICAgZW50aXR5S2V5OiB0aGlzLl9lbnRpdHlLZXksXHJcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybXMucmVuYW1lRmlsZS5zaG93ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBYw7NhIGZpbGUuXHJcbiAgICBkZWxldGVGaWxlKGV4cGxvcmVySXRlbTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuZGVsZXRlTXV0aXBsZShbZXhwbG9yZXJJdGVtXSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4gRk9MREVSIE1BTlVMQVRJT04uXHJcbiAgICAvLyBU4bqhbyB0aMawIG3hu6VjLlxyXG4gICAgY3JlYXRlRm9sZGVyKCkge1xyXG4gICAgICAgIHRoaXMuZm9ybXMuY3JlYXRlRm9sZGVyLmZvcm1EYXRhID0ge1xyXG4gICAgICAgICAgICBmb3JtU3RhdGU6IEZvcm1TdGF0ZS5BREQsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2VDb2RlOiB0aGlzLnNlcnZpY2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcclxuICAgICAgICAgICAgICAgIGVudGl0eUtleTogdGhpcy5fZW50aXR5S2V5LFxyXG4gICAgICAgICAgICAgICAgcGFyZW50Rm9sZGVySWQ6IHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1zLmNyZWF0ZUZvbGRlci5zaG93ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBN4bufIHRoxrAgbeG7pWMvIGNsaWNrIHRoxrAgbeG7pWMuXHJcbiAgICBnZXRGb2xkZXJDb250ZW50KGN1cnJlbnRGb2xkZXJJZD86IHN0cmluZywgZ29JbnNpZGUgPSBmYWxzZSkge1xyXG4gICAgICAgIGN1cnJlbnRGb2xkZXJJZCA9IGN1cnJlbnRGb2xkZXJJZCB8fCB0aGlzLnJvb3RGb2xkZXJJZDtcclxuICAgICAgICB0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkID0gY3VycmVudEZvbGRlcklkO1xyXG4gICAgICAgIGlmICh0aGlzLmxheW91dCA9PT0gRW51bUZpbGVMYXlvdXQuU0lNUExFIHx8IHRoaXMubGF5b3V0ID09PSBFbnVtRmlsZUxheW91dC5TSU1QTEVfRk9SX0xJU1QpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5iYXNlUmVhZHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICB0aGlzLnNldEJyZWFkY3J1bWJzKCk7XHJcbiAgICAgICAgdGhpcy5zZXRWYWxpZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbGlkYXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkICE9IHRoaXMucm9vdEZvbGRlcklkKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5vbkNoYW5nZWQuZW1pdCh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5maXJlRXZlbnRDaGFuZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gxJDhu5VpIHTDqm4gdGjGsCBt4bulYy5cclxuICAgIHJlbmFtZUZvbGRlcihmb2xkZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5jcmVhdGVGb2xkZXIuaGVhZGVyID0gJ8SQ4buVaSB0w6puIHRoxrAgbeG7pWMnO1xyXG4gICAgICAgIHRoaXMuZm9ybXNbdGhpcy5mb3JtSWRzLmNyZWF0ZUZvbGRlcl0uZm9ybURhdGEgPSB7XHJcbiAgICAgICAgICAgIGZvcm1TdGF0ZTogRm9ybVN0YXRlLkVESVQsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIHNlcnZpY2VDb2RlOiB0aGlzLnNlcnZpY2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcclxuICAgICAgICAgICAgICAgIGVudGl0eUtleTogdGhpcy5fZW50aXR5S2V5LFxyXG4gICAgICAgICAgICAgICAgaWQ6IGZvbGRlcklkLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3Jtcy5jcmVhdGVGb2xkZXIuc2hvdyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gWMOzYSB0aMawIG3hu6VjLlxyXG4gICAgZGVsZXRlRm9sZGVyKGV4cGxvcmVySXRlbTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuZGVsZXRlTXV0aXBsZShbZXhwbG9yZXJJdGVtXSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4gQ09NTU9OIEZPTERFUiAmIEZJTEUgTUFOVUxBVElPTi5cclxuICAgIC8vIE3hu58gdGjGsCBt4bulYy8gdOG7h3AuXHJcbiAgICBhc3luYyBvcGVuT2JqZWN0KGV4cGxvcmVySXRlbTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIGlmIChleHBsb3Jlckl0ZW0uaXNGaWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhblZpZXdPbmxpbmUgPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5pc1N1cHBvcnRlZFZpZXdPbmxpbmUoZXhwbG9yZXJJdGVtLm5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoY2FuVmlld09ubGluZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuRmlsZVZpZXdlcihleHBsb3Jlckl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZChleHBsb3Jlckl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQoZXhwbG9yZXJJdGVtLmlkLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gWMOzYSBuaGnhu4F1IHRoxrAgbeG7pWMvIHThu4dwLlxyXG4gICAgZGVsZXRlTXV0aXBsZShpdGVtczogRmlsZUV4cGxvcmVySXRlbVtdKSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKClcclxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFycykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZvbGRlclNlcnZpY2UuZGVsZXRlTXVsdGlwbGUoaXRlbXMpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhU3VjY2VzcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXNwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVOG6o2kgdGjGsCBt4bulYy8gdOG7h3AuXHJcbiAgICBhc3luYyBkb3dubG9hZChleHBsb3Jlckl0ZW06IEZpbGVFeHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0R2VuZXJhdGVEb3dubG9hZExpbmtNb2RlbChleHBsb3Jlckl0ZW0pO1xyXG4gICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZG93bmxvYWRMaW5rKG1vZGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjb3B5RG93bmxvYWRMaW5rKGV4cGxvcmVySXRlbTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZXRHZW5lcmF0ZURvd25sb2FkTGlua01vZGVsKGV4cGxvcmVySXRlbSk7XHJcbiAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZW5lcmF0ZURvd25sb2FkTGluayhtb2RlbClcclxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmNvcHlNZXNzYWdlKHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0QW5vbnltb3VzRG93bmxvYWRVcmwocnMuZGF0YSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJDDoyBzYW8gY2jDqXAgdsOgbyBi4buZIG5o4bubIHThuqFtLiDEkMaw4budbmcgZOG6q24gbsOgeSBz4bq9IGjhur90IGjhuqFuIHNhdSA2MCBnacOieSEnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHRo4buDIHNhbyBjaMOpcCBsacOqbiBr4bq/dCB04bqjaSB04buHcCB0aW4hJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdGjhu4Mgc2FvIGNow6lwIGxpw6puIGvhur90IHThuqNpIHThu4dwIHRpbiEnKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVOG6o2kgbmhp4buBdSB0aMawIG3hu6VjLyB04buHcC5cclxuICAgIGFzeW5jIGRvd25sb2FkTXVsdGlwbGUoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcztcclxuICAgICAgICBjb25zdCBoYXNJdGVtcyA9IHNlbGVjdGVkSXRlbXMgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGhhc0l0ZW1zKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRvd25sb2FkKHNlbGVjdGVkSXRlbXNbMF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXJyTW9kZWwgPSBzZWxlY3RlZEl0ZW1zLm1hcChleHBsb3Jlckl0ZW0gPT4gdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZXRHZW5lcmF0ZURvd25sb2FkTGlua01vZGVsKGV4cGxvcmVySXRlbSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5kb3dubG9hZE11bHRpcGxlKGFyck1vZGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZW5lcmF0ZVppcExpbmtBbmRDb3B5KCkge1xyXG4gICAgICAgIGNvbnN0IGFyck1vZGVsID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLm1hcCh4ID0+IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0R2VuZXJhdGVEb3dubG9hZExpbmtNb2RlbCh4KSk7XHJcbiAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5nZW5lcmF0ZURvd25sb2FkTGlua011bHRpcGxlKGFyck1vZGVsKS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcyAmJiByZXMuZGF0YSAmJiByZXMuZGF0YSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5jb3B5TWVzc2FnZSh0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldEFub255bW91c0Rvd25sb2FkVXJsKHJlcy5kYXRhKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ8SQw6Mgc2FvIGNow6lwIHbDoG8gYuG7mSBuaOG7myB04bqhbS4gxJDGsOG7nW5nIGThuqtuIG7DoHkgc+G6vSBo4bq/dCBo4bqhbiBzYXUgNjAgZ2nDonkhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0aOG7gyBzYW8gY2jDqXAgbGnDqm4ga+G6v3QgdOG6o2kgdOG7h3AgdGluIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY2F0Y2goZXggPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhleCk7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIHbhuqVuIMSR4buBIHRyb25nIGzDumMgdOG6oW8gbGluayBjaG8gZmlsZXMnKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgb3BlbkZpbGVWaWV3ZXIoZXhwbG9yZXJJdGVtOiBGaWxlRXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmlld2VyLmZvcm1EYXRhLmRhdGEgPSB7XHJcbiAgICAgICAgICAgIGZpbGVJZDogZXhwbG9yZXJJdGVtLmlkLFxyXG4gICAgICAgICAgICBpc0ZpbGVWZXJzaW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgZmlsZU5hbWU6IGV4cGxvcmVySXRlbS5uYW1lLFxyXG4gICAgICAgICAgICBzZXJ2aWNlOiBleHBsb3Jlckl0ZW0uc2VydmljZUNvZGUsXHJcbiAgICAgICAgICAgIGVudGl0eTogZXhwbG9yZXJJdGVtLmVudGl0eSxcclxuICAgICAgICAgICAgZW50aXR5S2V5OiBleHBsb3Jlckl0ZW0uZW50aXR5S2V5LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmlld2VyLnNob3cgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlRmlsZVZpZXdlcigpIHtcclxuICAgICAgICB0aGlzLmZvcm1zLmZpbGVWaWV3ZXIuc2hvdyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2V0Rm9sZGVyQ29udGVudCh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pk1PVkUgRklMRVMgJiBGT0xERVJTLlxyXG4gICAgaGFzU2VsZWN0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXNcclxuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaOG7jW4gdGjGsCBt4bulYy8gZmlsZSBkaSBjaHV54buDbi5cclxuICAgIGNhblNlbGVjdCgpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGF0YS5tb3ZpbmcuaXNTZWxlY3RpbmdcclxuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zXHJcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuU2V0TW92ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLm1vdmluZy5pc1NlbGVjdGluZ1xyXG4gICAgICAgICAgICAmJiB0aGlzLmRhdGEubW92aW5nLnNlbGVjdGVkSXRlbXNcclxuICAgICAgICAgICAgJiYgdGhpcy5kYXRhLm1vdmluZy5zZWxlY3RlZEl0ZW1zLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBtb3ZlRXhwbG9yZXJJdGVtcygpIHtcclxuICAgICAgICBjb25zdCBjYW5Nb3ZlID0gIXRoaXMuZGF0YS5tb3ZpbmcuaXNTZWxlY3RpbmdcclxuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zXHJcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGhcclxuICAgICAgICAgICAgJiYgdGhpcy5tb2RlbC5kYXRhU291cmNlXHJcbiAgICAgICAgICAgICYmIHRoaXMubW9kZWwuZGF0YVNvdXJjZS5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmICghY2FuTW92ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGEubW92aW5nID0ge1xyXG4gICAgICAgICAgICBpc1NlbGVjdGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtczogdGhpcy5fY29tbW9uU2VydmljZS5jbG9uZU9iamVjdCh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpLFxyXG4gICAgICAgICAgICBzb3VyY2VGb2xkZXJJZDogdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRo4bqjIHRoxrAgbeG7pWMvIGZpbGUuXHJcbiAgICBzZXRNb3ZlRXhwbG9yZXJJdGVtcygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YS5tb3ZpbmcuaXNTZWxlY3RpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kZWwgPSB7XHJcbiAgICAgICAgICAgIHNvdXJjZUZvbGRlcklkOiB0aGlzLmRhdGEubW92aW5nLnNvdXJjZUZvbGRlcklkLFxyXG4gICAgICAgICAgICB0YXJnZXRGb2xkZXJJZDogdGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCxcclxuICAgICAgICAgICAgbHN0RmlsZUV4cGxvcmVySXRlbXM6IHRoaXMuZGF0YS5tb3Zpbmcuc2VsZWN0ZWRJdGVtcyxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLl9mb2xkZXJTZXJ2aWNlLm1vdmVFeHBsb3Jlckl0ZW1zKG1vZGVsKVxyXG4gICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9sZGVyQ29udGVudCh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ0RpIGNodXnhu4NuIHRow6BuaCBjw7RuZycpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5tb3ZpbmcgPSB7fTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBC4buPIGRpIGNodXnhu4NuLlxyXG4gICAgY2FuY2VsTW92ZSgpIHtcclxuICAgICAgICB0aGlzLmRhdGEubW92aW5nID0ge307XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj5WRVJTSU9OLlxyXG4gICAgb3BlbkZpbGVWZXJzaW9ucyhmaWxlOiBGaWxlRXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmVyc2lvbkxpc3QuZmlsZUlkID0gZmlsZS5pZDtcclxuXHJcbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmVyc2lvbkxpc3Quc2hvdyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PlZJRVcgT05MSU5FLlxyXG4gICAgZWRpdEZpbGUoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJBhbmcga+G6v3QgbuG7kWkgbeG7nyDhu6luZyBk4bulbmcnKTtcclxuICAgICAgICB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuY3JlYXRlTmV3TWlub3JWZXJzaW9uKGZpbGUuaWQsICcnLCBmYWxzZSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVZlcnNpb24gPSA8RmlsZVZlcnNpb25EVE8+cmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVVcmwgPSB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuZ2V0RmlsZVZlcnNpb25Eb3dubG9hZFVybChmaWxlVmVyc2lvbi5pZCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kID0gbmV3IFRuQ2xpZW50Q29tbWFuZCgpO1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZC5jb21tYW5kVHlwZSA9IENvbW1hbmRUeXBlLkVkaXRGaWxlO1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZC5rZXkgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuc2lnbmFsci5jbGllbnRLZXk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlZGl0RmlsZUNvbW1hbmQgPSBuZXcgRWRpdEZpbGVDb21tYW5kKCk7XHJcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZmlsZVNlcnZpY2VFbmRwb2ludCA9IHRoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZUVuZHBvaW50O1xyXG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLnVwbG9hZEZpbGVBcGkgPSB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuZ2V0VXBsb2FkRmlsZVZlcnNpb25BcGlVcmwoKTtcclxuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5yZW1vdmVGaWxlQXBpID0gdGhpcy5fZmlsZVZlcnNpb25TZXJ2aWNlLmdldFJlbW92ZUZpbGVWZXJzaW9uQXBpVXJsKCk7XHJcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZmlsZVVybCA9IGZpbGVVcmw7XHJcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuaXNEcmFmdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZ3JvdXBGaWxlTmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlTmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC52ZXJzaW9uID0gZmlsZVZlcnNpb24udmVyc2lvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZmlsZVZlcnNpb25JZCA9IGZpbGVWZXJzaW9uLmlkO1xyXG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmFjY2Vzc1Rva2VuID0gdGhpcy5fYXV0aGVuU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgY29tbWFuZC5kYXRhID0gZWRpdEZpbGVDb21tYW5kO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX3RuQ2xpZW50U2VydmljZS5zZW5kQ29tbWFuZChjb21tYW5kKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaWduYWxyU2VydmljZS51blN1YnNjcmliZVZpZXdDb2RlKG51bGwsICdGSUxFLlZFUlNJT04uVVBEQVRFRCcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2Uuc3RhcnQobnVsbCwgJ0ZJTEUuVkVSU0lPTi5VUERBVEVEJywgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iajogYW55O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9iai5tZXNzYWdlLmNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2JqLk1lc3NhZ2UuQ29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iaikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZXRMaXN0RmlsZXModGhpcy5kYXRhLmN1cnJlbnRGb2xkZXJJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChDb21tb25FcnJvckNvZGUuRVJST1JfU0VSVklDRV9OT1RfUlVOID09PSBlcnJvci5zdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1Jlc3BvbnNlRXJyb3IoMCwgbnVsbCwgJ0ZpbGUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0ZJTEVfRVhQTE9SRVIuTUVTU0FHRV9FUlJPUl9IRUFERVInKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0ZJTEVfRVhQTE9SRVIuTUVTU0FHRV9FUlJPUl9ERVRBSUwnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlmZTogNTAwMCxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PiBCUkVBRENSVU1CUy5cclxuICAgIGFzeW5jIHNldEJyZWFkY3J1bWJzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJzRm9sZGVyID0gYXdhaXQgdGhpcy5fZm9sZGVyU2VydmljZS5nZXREZXRhaWxXaXRoUGVybWlzc2lvbih0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgICAgICAgICAgaWYgKHJzRm9sZGVyLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZVBlcm1pc3Npb24gPSByc0ZvbGRlci5kYXRhLmJhc2VQZXJtaXNzaW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJzID0gYXdhaXQgdGhpcy5fZm9sZGVyU2VydmljZS5nZXRGdWxsRm9sZGVyUGF0aCh0aGlzLmRhdGEuY3VycmVudEZvbGRlcklkKTtcclxuICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MgJiYgcnMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJzLmRhdGEubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBicmVhZGNydW1icyA9IHJzLmRhdGEubWFwKGZvbGRlciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyZWFkY3J1bWIgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogaW5kZXggPT0gMCA/IHRoaXMuZ2V0Um9vdEZvbGRlck5hbWUoZm9sZGVyLm5hbWUpIDogZm9sZGVyLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZm9sZGVyLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzczogZm9sZGVyLmlkICE9IHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQgPyAnZm0tY2xpY2thYmxlJyA6ICdmbS1jdXJyZW50LWZvbGRlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZvbGRlckNvbnRlbnQoZm9sZGVyLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBicmVhZGNydW1iO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChicmVhZGNydW1icy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnJlYWRjcnVtYnNbMF0ubGFiZWwgPT0gJ1RoxrAgbeG7pWMgxJHDrW5oIGvDqG0nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhZGNydW1icy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmJyZWFkY3J1bWJzID0gYnJlYWRjcnVtYnM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEuYnJlYWRjcnVtYnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5icmVhZGNydW1icyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UucHJvY2Vzc0Vycm9yUmVzcG9uc2UocnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEuYnJlYWRjcnVtYnMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Um9vdEZvbGRlck5hbWUoZm9sZGVyTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZm9sZGVyTmFtZVByZWZpeCA9ICdUaMawIG3hu6VjICc7XHJcbiAgICAgICAgbGV0IHR5cGVPZkZvbGRlciA9ICcnO1xyXG4gICAgICAgIGlmIChmb2xkZXJOYW1lLmluY2x1ZGVzKCd1c2VyLk15X0RvY3VtZW50LicpKSB7XHJcbiAgICAgICAgICAgIHR5cGVPZkZvbGRlciA9ICdj4bunYSB0w7RpJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZm9sZGVyTmFtZS5pbmNsdWRlcygnY29uZ3ZpZWMnKSkge1xyXG4gICAgICAgICAgICB0eXBlT2ZGb2xkZXIgPSAnY8O0bmcgdmnhu4djJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZm9sZGVyTmFtZS5pbmNsdWRlcygndmFuYmFuJykpIHtcclxuICAgICAgICAgICAgdHlwZU9mRm9sZGVyID0gJ3bEg24gYuG6o24nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdHlwZU9mRm9sZGVyID0gJ8SRw61uaCBrw6htJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke2ZvbGRlck5hbWVQcmVmaXh9JHt0eXBlT2ZGb2xkZXJ9YDtcclxuICAgIH1cclxuXHJcbiAgICAvLyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IFNJR04uXHJcbiAgICAvLyBUT0RPOiBMxrB1IMO9IHjhu60gbMO9IHRyxrDhu51uZyBkb3VibGUgY2xpY2sgdsOgbyBuw7p0XHJcbiAgICBzaWduRmlsZShmaWxlOiBGaWxlRXhwbG9yZXJJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKCdC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBtdeG7kW4ga8O9IHPhu5EgdsSDbiBi4bqjbiBuw6B5PycpLnRoZW4oYXN5bmMgcnMgPT4ge1xyXG4gICAgICAgICAgICBpZiAocnMpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzb3VyY2VGaWxlSWQgPSBmaWxlLmlkO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNvdXJjZUZpbGUgPSBmaWxlO1xyXG4gICAgICAgICAgICAgICAgLy8gS8O9IHPhu5EgZmlsZSB3b3JkIC0gY+G6p24gY29udmVydCBzYW5nIHBkZiB0csaw4bubY1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UubmVlZENvbnZlcnRCZWZvcmVTaWduKGZpbGUubmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IGZpbGUgYmVmb3JlIHNpZ25cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByc0NvbnZlcnQgPSBhd2FpdCB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmNvbnZlcnREb2N1bWVudFRvUGRmQW5kU2F2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUlkOiBzb3VyY2VGaWxlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmNoYW5nZUZpbGVFeHRlbnNpb24oZmlsZS5uYW1lLCAncGRmJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkZXJJbnN0YW5jZUlkOiBmaWxlLnBhcmVudEZvbGRlcklkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXJUeXBlOiB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnVzZXJJZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyc0NvbnZlcnQgfHwgIXJzQ29udmVydC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYEPDsyBs4buXaSB44bqjeSByYSBraGkgY2h1eeG7g24gxJHhu5VpIHTDoGkgbGnhu4d1ICR7ZmlsZS5uYW1lfSB0aMOgbmggcGRmIMSR4buDIGvDvS4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKGBDaHV54buDbiDEkeG7lWkgdMOgaSBsaeG7h3UgJHtmaWxlLm5hbWV9IHRow6BuaCBwZGYgdGjDoG5oIGPDtG5nYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlSWQgPSByc0NvbnZlcnQuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGUgPSB7IGlkOiBzb3VyY2VGaWxlSWQgfSBhcyBGaWxlRXhwbG9yZXJJdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGBDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGNodXnhu4NuIMSR4buVaSB0w6BpIGxp4buHdSAke2ZpbGUubmFtZX0gdGjDoG5oIHBkZiDEkeG7gyBrw70uIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXVgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmdlbmVyYXRlTGlua0Rvd25sb2FkKHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxlSWQ6IHNvdXJjZUZpbGVJZCxcclxuICAgICAgICAgICAgICAgIH0gYXMgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8pLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0RG93bmxvYWRGb3JTaWduVXJsKHJzLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBybXMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICBwcm1zWydGaWxlVXBsb2FkSGFuZGxlciddID0gYCR7dGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnR9LyR7dGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaVZlcnNpb259L0t5U29GaWxlL1NhdmVQaHlzaWNhbFNpZ25lZEZpbGVgO1xyXG4gICAgICAgICAgICAgICAgICAgIHBybXNbJ1Nlc3Npb25JZCddID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJtc1snRmlsZU5hbWUnXSA9IHVybDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB2YXJpYWJsZS1uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QganNvbl9wcm1zID0gSlNPTi5zdHJpbmdpZnkocHJtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmdjYV9zaWduX2FwcHJvdmVkKGpzb25fcHJtcywgKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdE9iaiA9IEpTT04ucGFyc2UocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdE9iai5GaWxlU2VydmVyICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLnNhdmVTaWduZWRGaWxlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlOiBzb3VyY2VGaWxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBGaWxlSWQ6IHJlc3VsdE9iai5GaWxlU2VydmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihyc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnS8O9IHPhu5EgdGjDoG5oIGPDtG5nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWduRmlsZURvblZpKGZpbGU6IEZpbGVFeHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2VcclxuICAgICAgICAgICAgLnNob3dDb25maXJtKCdC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBtdeG7kW4ga8O9IHPhu5EgxJHGoW4gduG7iyB2xINuIGLhuqNuIG7DoHk/JylcclxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKHJzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc291cmNlRmlsZUlkID0gZmlsZS5pZDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc291cmNlRmlsZSA9IGZpbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UubmVlZENvbnZlcnRCZWZvcmVTaWduKGZpbGUubmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCBmaWxlIGJlZm9yZSBzaWduXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByc0NvbnZlcnQgPSBhd2FpdCB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmNvbnZlcnREb2N1bWVudFRvUGRmQW5kU2F2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VJZDogc291cmNlRmlsZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuY2hhbmdlRmlsZUV4dGVuc2lvbihmaWxlLm5hbWUsICdwZGYnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xkZXJJbnN0YW5jZUlkOiBmaWxlLnBhcmVudEZvbGRlcklkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyVHlwZTogdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS51c2VySWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyc0NvbnZlcnQgfHwgIXJzQ29udmVydC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGBDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGNodXnhu4NuIMSR4buVaSB0w6BpIGxp4buHdSAke2ZpbGUubmFtZX0gdGjDoG5oIHBkZiDEkeG7gyBrw70uIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXVgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoYENodXnhu4NuIMSR4buVaSB0w6BpIGxp4buHdSAke2ZpbGUubmFtZX0gdGjDoG5oIHBkZiB0aMOgbmggY8O0bmdgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlSWQgPSByc0NvbnZlcnQuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlID0geyBpZDogc291cmNlRmlsZUlkIH0gYXMgRmlsZUV4cGxvcmVySXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGBDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGNodXnhu4NuIMSR4buVaSB0w6BpIGxp4buHdSAke2ZpbGUubmFtZX0gdGjDoG5oIHBkZiDEkeG7gyBrw70uIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXVgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZW5lcmF0ZUxpbmtEb3dubG9hZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZpbGVWZXJzaW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVJZDogc291cmNlRmlsZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGFzIEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocnMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0RG93bmxvYWRGb3JTaWduVXJsKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzLmRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBybXMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybXNbJ0ZpbGVVcGxvYWRIYW5kbGVyJ10gPSBgJHt0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpRG9tYWluLmZpbGVFbmRwb2ludH0vJHt0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vS3lTb0ZpbGUvU2F2ZVBoeXNpY2FsU2lnbmVkRmlsZWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm1zWydTZXNzaW9uSWQnXSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJtc1snRmlsZU5hbWUnXSA9IHVybDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRydXnhu4FuIHPhu5EsIG5nw6B5IGvDvSBz4buRIHBow7JuZyBiYW4gbuG6v3UgY+G6p25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQuY29udHJvbCAmJiB0aGF0LmNvbnRyb2wuZGF0YUt5U29Eb25WaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFLeVNvRG9uVmkgPSAoPEZ1bmN0aW9uPnRoYXQuY29udHJvbC5kYXRhS3lTb0RvblZpKSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhS3lTb0RvblZpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGzhuqV5IHPhu5EgRG9jTnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhS3lTb0RvblZpLmRvY051bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJtc1snRG9jTnVtYmVyJ10gPSBkYXRhS3lTb0RvblZpLmRvY051bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBs4bqleSBuZ8OgeSBiYW4gaMOgbmggdmIgxJFpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhS3lTb0RvblZpLmlzc3VlZERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybXNbJ0lzc3VlZERhdGUnXSA9IGRhdGFLeVNvRG9uVmkuaXNzdWVkRGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHZhcmlhYmxlLW5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25fcHJtcyA9IEpTT04uc3RyaW5naWZ5KHBybXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmdjYV9zaWduX2lzc3VlZChqc29uX3BybXMsIChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdE9iaiA9IEpTT04ucGFyc2UocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0T2JqLkZpbGVTZXJ2ZXIgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNhdmVTaWduZWRGaWxlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlOiBzb3VyY2VGaWxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBGaWxlSWQ6IHJlc3VsdE9iai5GaWxlU2VydmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyc3MpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ0vDvSBz4buRIHRow6BuaCBjw7RuZycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWduS3lTaW1GaWxlKGZpbGU6IEZpbGVFeHBsb3Jlckl0ZW0pIHtcclxuICAgICAgICB0aGlzLmZvcm1zLmt5U29TaW0uc2hvdyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5hZHZhbmNlRGF0YSA9IGZpbGU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hhcmVGb2xkZXIoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuZm9ybXMuc2hhcmVGb2xkZXIuZGF0YSA9IGZpbGU7XHJcbiAgICAgICAgdGhpcy5mb3Jtcy5zaGFyZUZvbGRlci5zaG93ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzaGFyZUZpbGUoZmlsZTogRmlsZUV4cGxvcmVySXRlbSkge1xyXG4gICAgICAgIHRoaXMuZm9ybXMuc2hhcmVGaWxlLmRhdGEgPSBmaWxlO1xyXG4gICAgICAgIHRoaXMuZm9ybXMuc2hhcmVGaWxlLnNob3cgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdEZpbGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZUNvbnRyb2wuYmFzaWNGaWxlSW5wdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlQ29udHJvbC5iYXNpY0ZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZpZXdMaXN0U2lnbihlOiBFdmVudCwgc2lnbmF0dXJlczogYW55KSB7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB0aGlzLmZvcm1zLnNpZ25hdHVyZURldGFpbC5zaG93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1vZGVsLmFkdmFuY2VEYXRhID0gc2lnbmF0dXJlcztcclxuICAgIH1cclxuXHJcbiAgICBvblJvd1NlbGVjdChldnQpIHtcclxuICAgICAgICB0aGlzLm9uU2VsZWN0ZWQuZW1pdCh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZERhdGEoKSB7XHJcbiAgICAgICAgdGhpcy5fZmlsZU1hbmFnZXJTZXJ2aWNlLnN1YnNWYXIgPSB0aGlzLl9maWxlTWFuYWdlclNlcnZpY2UuaW52b2tlUmVsb2FkRnVuY3Rpb24uc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBhc3luYyBhZGRBdHRhY2hMaW5rKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGVkTGluayAmJiB0aGlzLnR5cGVkTGluay5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHRoaXMucGFyc2VBdHRhY2hMaW5rKHRoaXMudHlwZWRMaW5rKTtcclxuICAgICAgICAgICAgaWYgKG9iaikge1xyXG4gICAgICAgICAgICAgICAgLy8gZG8gbG9naWMgY29weSBmaWxlIGJ5IGhhc2hcclxuICAgICAgICAgICAgICAgIHRoaXMudHlwZWRMaW5rID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dBdHRhY2hMaW5rQm94ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5jb3B5RmlsZUJ5SGFzaChvYmosIHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXMuc3VjY2VzcyB8fCAhcmVzLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ2PDsyBs4buXaSB0cm9uZyBsw7pjIGzhuqV5IGZpbGUgdOG7qyBsaW5rIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHsgZmlsZW9iajogcmVzIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRGb2xkZXJDb250ZW50KHRoaXMuZGF0YS5jdXJyZW50Rm9sZGVySWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdU4bqjaSB0aMOgbmggY8O0bmchJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyBo4buXIHRy4bujIGxpw6puIGvhur90IHThu6sgaOG7hyB0aOG7kW5nIGtow6FjIGhv4bq3YyBsacOqbiBr4bq/dCBraMO0bmcgxJHDum5nIScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlQXR0YWNoTGluayhsaW5rKSB7XHJcbiAgICAgICAgaWYgKGxpbmspIHtcclxuICAgICAgICAgICAgLy8gVG9kbzogc+G7rWEgdOG6oW0gxJHhu4MgY2jhuqF5IHRyw6puIGxvY2FsLCBzYXUga2hpIG9rIHRow6wgcGjhuqNpIHRow6ptICcvZmlsZSdcclxuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBsaW5rLnNwbGl0KCdmaWxlL3Y1L0Rvd25sb2FkTGluay9Eb3dubG9hZC8nKTtcclxuICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFydHNbMV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNvcHlGaWxlRnJvbVNoYXJlZChzZWxlY3RlZEZpbGVzOiBhbnlbXSwgaWREZXNGb2xkZXI6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZEZpbGVzPy5sZW5ndGggfHwgaWREZXNGb2xkZXIgIT0gbnVsbCB8fCBpZERlc0ZvbGRlciAhPSAnJykge1xyXG4gICAgICAgICAgICBjb25zdCBpZHNGaWxlOiBzdHJpbmdbXSA9IHNlbGVjdGVkRmlsZXMubWFwKHggPT4geC5pZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmNvcHlNdWx0aXBsZUZpbGUoaWRzRmlsZSwgaWREZXNGb2xkZXIpO1xyXG4gICAgICAgICAgICBpZiAoIXJlcy5zdWNjZXNzIHx8ICFyZXMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdM4buXaSBjb3B5IGZpbGUgdOG7qyB0aMawIG3hu6VjIGTDuW5nIGNodW5nJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdDb3B5IGZpbGUgdOG7qyB0aMawIG3hu6VjIGTDuW5nIGNodW5nIHRow6BuaCBjw7RuZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIGzhu5dpIGNvcHkgdOG7qyB0aHUgbeG7pWMgZMO5bmcgY2h1bmcnKTtcclxuICAgIH1cclxuXHJcbiAgICBmb2N1c0lucHV0KGlucHV0OiBhbnkpIHtcclxuICAgICAgICBpbnB1dC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGNob25DaHVLeSgpIHtcclxuICAgICAgICB0aGlzLmZpbGVLeVNvU2ltLmNob25DaHVLeSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGt5U28oKSB7XHJcbiAgICAgICAgdGhpcy5maWxlS3lTb1NpbS5reVNvKCk7XHJcbiAgICB9XHJcbn1cclxuIl19
|