qms-angular 1.1.40 → 1.1.41

Sign up to get free protection for your applications and to get access to all the features.
Files changed (23) hide show
  1. package/bundles/qms-angular.umd.js +162 -58
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/common/models/qms-flat-node.model.js +1 -1
  4. package/esm2015/lib/common/models/qms-tree-node.model.js +1 -1
  5. package/esm2015/lib/components/select-access-dialog/model/select-access-config.model.js +5 -1
  6. package/esm2015/lib/components/select-access-dialog/select-access-dialog.component.js +56 -11
  7. package/esm2015/lib/components/select-department/model/select-department-popup-data.model.js +2 -1
  8. package/esm2015/lib/components/select-department/select-department.component.js +3 -3
  9. package/esm2015/lib/components/select-department-tree/select-department-tree.component.js +82 -41
  10. package/esm2015/lib/components/select-department-tree/service/select-department-tree-global.service.js +7 -1
  11. package/esm2015/lib/components/treeNew/tree.component.js +1 -3
  12. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +2 -2
  13. package/fesm2015/qms-angular.js +149 -54
  14. package/fesm2015/qms-angular.js.map +1 -1
  15. package/lib/common/models/qms-flat-node.model.d.ts +4 -0
  16. package/lib/common/models/qms-tree-node.model.d.ts +8 -0
  17. package/lib/components/select-access-dialog/model/select-access-config.model.d.ts +4 -0
  18. package/lib/components/select-access-dialog/select-access-dialog.component.d.ts +2 -0
  19. package/lib/components/select-department/model/select-department-popup-data.model.d.ts +1 -0
  20. package/lib/components/select-department-tree/select-department-tree.component.d.ts +4 -0
  21. package/package.json +1 -1
  22. package/src/lib/components/select-department/select-department.component.scss +1 -0
  23. package/src/lib/components/select-department-tree/select-department-tree.component.scss +23 -0
@@ -97,7 +97,7 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
97
97
  });
98
98
  let toolbarItems = this.qmsckPlugin.itemToolbar;
99
99
  if (this.isEnabledToggleToolbar() && this.qmsckData.toggledToolbarItems) {
100
- let strToolbars = this.qmsckData.toggledToolbarItems; //.replace(/qmsFlowchart,/g, "");
100
+ let strToolbars = this.qmsckData.toggledToolbarItems.replace(/qmsFlowchart,/g, "");
101
101
  if (!this.qmsckData.enableTemplate) {
102
102
  strToolbars = strToolbars.replace(/qmsTemplate,/g, ""); // disable qmsTemplate if user don't have handbookAdmin Role
103
103
  }
@@ -813,4 +813,4 @@ QMSCKEditorComponent.propDecorators = {
813
813
  qmsckContentOutput: [{ type: Output }],
814
814
  onMessage: [{ type: HostListener, args: ["window:message", ["$event"],] }]
815
815
  };
816
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvcW1zLWNrZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBYSxTQUFTLEVBQTJCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9OLE9BQU8sRUFBZSxhQUFhLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQTBCLE1BQU0sbUNBQW1DLENBQUM7QUFDN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyx1QkFBdUIsTUFBTSxvQ0FBb0MsQ0FBQztBQUd6RSxPQUFPLGVBQWUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUN4SCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNsSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw4RUFBOEUsQ0FB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WUFaMkcsU0FBUztZQUEvRixVQUFVOzs7d0JBeURqRSxLQUFLOzBCQUNMLEtBQUs7Z0NBQ0wsS0FBSztpQ0FDTCxLQUFLOzBDQUNMLEtBQUs7eUJBQ0wsS0FBSyxTQUFDLFVBQVU7dUJBQ2hCLEtBQUssU0FBQyxVQUFVO3VCQUNoQixLQUFLO2lDQUNMLE1BQU07d0JBY04sWUFBWSxTQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFFtc1VwbG9hZEFkYXB0ZXIsIFFtc1VwbG9hZEFkYXB0ZXJDb25maWcgfSBmcm9tICcuL2NvbW1vbi9jbGFzc2VzL3Ftc1VwbG9hZEFkYXB0ZXInO1xyXG5pbXBvcnQgeyBDS0VkaXRvckV2ZW50Q29uc3QgfSBmcm9tICcuL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JFdmVudC5jb25zdGFudCc7XHJcbmltcG9ydCBDS0VkaXRvckNvbW1vbkZ1bmN0aW9ucyBmcm9tICcuL2NvbW1vbi9mdW5jdGlvbnMvY29tbW9uLmZ1bmN0aW9uJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JEYXRhIH0gZnJvbSAnLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JQbHVnaW4gfSBmcm9tICcuL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXBsdWdpbi5tb2RlbCc7XHJcbmltcG9ydCBRTVNDS0VkaXRvckxpbmsgZnJvbSAnLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci11cmwubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW5Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWJwbW4vcW1zLWNrZWRpdG9yLWJwbW4uY29tcG9uZW50JztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JGdWxsc2NyZWVuQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1mdWxsc2NyZWVuL3Ftcy1ja2VkaXRvci1mdWxsc2NyZWVuLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9ySW1hZ2VNYXBDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWltYWdlbWFwL3Ftcy1ja2VkaXRvci1pbWFnZW1hcC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckxpbmtDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWxpbmsvcW1zLWNrZWRpdG9yLWxpbmsuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMb2FkVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWxvYWQtdGVtcGxhdGUvcW1zLWNrZWRpdG9yLWxvYWQtdGVtcGxhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItdGVtcGxhdGUvcW1zLWNrZWRpdG9yLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yVG9vbHRpcENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItdG9vbHRpcC9xbXMtY2tlZGl0b3ItdG9vbHRpcC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckltYWdlTWFwIH0gZnJvbSAnLi9tb2RlbHMvcW1zLWNrZWRpdG9yLWltYWdlbWFwLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUZW1wbGF0ZSB9IGZyb20gJy4vbW9kZWxzL3Ftcy1ja2VkaXRvci10ZW1wbGF0ZS5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yVG9vbHRpcCB9IGZyb20gJy4vbW9kZWxzL3Ftcy1ja2VkaXRvci10b29sdGlwLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9xbXMtY2tlZGl0b3ItYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckdsb2JhbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQWJvdXRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWFib3V0L3Ftcy1ja2VkaXRvci1hYm91dC5jb21wb25lbnQnO1xyXG4vLyBpbXBvcnQgeyBDS0VkaXRvcjUgfSBmcm9tICdAY2tlZGl0b3IvY2tlZGl0b3I1LWFuZ3VsYXIvY2tlZGl0b3InO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckJwbW5EYXRhIH0gZnJvbSBcIi4vbW9kZWxzL3Ftcy1ja2VkaXRvci1icG1uLWRhdGEubW9kZWxcIjtcclxuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9yZWxhdGVkL2NvbW1vbi9kYXRhLXR5cGUuZW51bVwiO1xyXG5pbXBvcnQgeyBQb3B1cERhdGEgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9yZWxhdGVkL21vZGVsL3BvcHVwLWRhdGEubW9kZWxcIjtcclxuaW1wb3J0IHsgUmVsYXRlZFBvcHVwQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcmVsYXRlZC9wb3B1cC9yZWxhdGVkLXBvcHVwLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclRyZWVTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLXRyZWUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckZsb3djaGFydENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWZsb3djaGFydC9xbXMtY2tlZGl0b3ItZmxvd2NoYXJ0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBRbXNDa2VkaXRvckxpbmtTaW1wbGVDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1saW5rLXNpbXBsZS9xbXMtY2tlZGl0b3ItbGluay1zaW1wbGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENLRWRpdG9ySW1hZ2VVcGxvYWRUeXBlQ29uc3QgfSBmcm9tICcuL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JJbWFnZVVwbG9hZFR5cGUuY29uc3QnO1xyXG5pbXBvcnQgeyBWaWRlb1VwbG9hZE1vZGUgfSBmcm9tICcuL2NvbW1vbi9lbnVtcy92aWRlby11cGxvYWQtbW9kZS5lbnVtJztcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJxbXMtY2tlZGl0b3JcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vcW1zLWNrZWRpdG9yLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICBzdHlsZVVybHM6IFtcIi4vcW1zLWNrZWRpdG9yLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgUU1TQ0tFZGl0b3JGdWxsc2NyZWVuQ29tcG9uZW50LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFFNU0NLRWRpdG9yQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFFNU0NLRWRpdG9yQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgIF0sXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRTVNDS0VkaXRvckNvbXBvbmVudFxyXG4gICAgZXh0ZW5kcyBRTVNDS0VkaXRvckJhc2VDb21wb25lbnRcclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBWYWxpZGF0b3Ige1xyXG4gICAgQElucHV0KCkgcW1zY2tEYXRhOiBRTVNDS0VkaXRvckRhdGE7XHJcbiAgICBASW5wdXQoKSBxbXNja1BsdWdpbjogUU1TQ0tFZGl0b3JQbHVnaW47XHJcbiAgICBASW5wdXQoKSBxbXNja0NvbnRlbnRJbnB1dDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcW1zY2tDb250ZW50RmllbGRzPzogW107XHJcbiAgICBASW5wdXQoKSBxbXNja0lzR2V0QW5jaG9yTW9yZUNvbnRlbnQ/OiBib29sZWFuO1xyXG4gICAgQElucHV0KCdkaXNhYmxlZCcpIGlzRGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoJ3JlcXVpcmVkJykgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGVkaXRvcklkID0gJ3Ftc2NrZWRpdG9yJztcclxuICAgIEBPdXRwdXQoKSBxbXNja0NvbnRlbnRPdXRwdXQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIExBTkc6IGFueTtcclxuICAgIGNrRWRpdG9yOiBhbnk7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBja2VkaXRvckNvbmZpZzogYW55O1xyXG4gICAgY2tFZGl0b3JFdmVudENvbnN0ID0gQ0tFZGl0b3JFdmVudENvbnN0O1xyXG4gICAgY291bnRXb3JkOiBudW1iZXI7XHJcbiAgICBjb3VudENoYXI6IG51bWJlcjtcclxuICAgIGVkaXRvckluc3RhbmNlOiBhbnk7XHJcbiAgICBja1RhZ25hbWU6IHN0cmluZztcclxuICAgIHRvb2xiYXJJdGVtUHJlZml4SWQ6IHN0cmluZztcclxuICAgIGlzVG9vbGJhckl0ZW1zSWRTZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASG9zdExpc3RlbmVyKFwid2luZG93Om1lc3NhZ2VcIiwgW1wiJGV2ZW50XCJdKVxyXG4gICAgb25NZXNzYWdlKGV2ZW50KSB7XHJcbiAgICAgICAgc3dpdGNoIChldmVudC5kYXRhLmV2ZW50TmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX1RFTVBMQVRFX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZUV2ZW50SGFuZGxpbmcoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0xPQURfVEVNUExBVEVfUExVR0lOX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRUZW1wbGF0ZUV2ZW50SGFuZGxpbmcoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0xJTktfUExVR0lOX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtFdmVudEhhbmRsaW5nKFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xbXNja0NvbnRlbnRGaWVsZHMsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xbXNja0lzR2V0QW5jaG9yTW9yZUNvbnRlbnRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19UT09MVElQX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0lNQUdFTUFQX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZU1hcEV2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19CUE1OX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5icG1uRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0FCT1VUX0NLRURJVE9SX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hYm91dENLRWRpdG9yRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0ZMT1dDSEFSVF9QTFVHSU5fTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvd2NoYXJ0RXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX1RPR0dMRV9UT09MQkFSX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVRvb2xiYXJFdmVudEhhbmRsaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19CUk9XU0VfVklERU9fTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3NlVmlkZW9FdmVudEhhbmRsaW5nKGV2ZW50LmRhdGEudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICovXHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBnbG9iYWxTZXJ2aWNlOiBRTVNDS0VkaXRvckdsb2JhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB0cmVlU2VydmljZTogUU1TQ0tFZGl0b3JUcmVlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHFtc0NLRWRpdG9yRnVsbHNjcmVlbkNvbXBvbmVudDogUU1TQ0tFZGl0b3JGdWxsc2NyZWVuQ29tcG9uZW50LFxyXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuY2tUYWduYW1lID0gXCJkaXZcIjtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJJdGVtUHJlZml4SWQgPSBgJHt0aGlzLmVkaXRvcklkfV90b29sYmFyX2l0ZW1fYDtcclxuICAgICAgICB0aGlzLm5hbWUgPSAnQ0tFZGl0b3IgY3VzdG9tIGJ1aWxkJztcclxuICAgICAgICB0aGlzLmNrRWRpdG9yID0gdGhpcy5xbXNja1BsdWdpbi5wbHVnaW5PYmplY3Q7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0TGFuZ3VhZ2VTdWJqZWN0JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcocmVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCB0b29sYmFySXRlbXMgPSB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZFRvZ2dsZVRvb2xiYXIoKSAmJiB0aGlzLnFtc2NrRGF0YS50b2dnbGVkVG9vbGJhckl0ZW1zKSB7XHJcbiAgICAgICAgICAgIGxldCBzdHJUb29sYmFycyA9IHRoaXMucW1zY2tEYXRhLnRvZ2dsZWRUb29sYmFySXRlbXM7Ly8ucmVwbGFjZSgvcW1zRmxvd2NoYXJ0LC9nLCBcIlwiKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnFtc2NrRGF0YS5lbmFibGVUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgc3RyVG9vbGJhcnMgPSBzdHJUb29sYmFycy5yZXBsYWNlKC9xbXNUZW1wbGF0ZSwvZywgXCJcIik7IC8vIGRpc2FibGUgcW1zVGVtcGxhdGUgaWYgdXNlciBkb24ndCBoYXZlIGhhbmRib29rQWRtaW4gUm9sZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5xbXNja0RhdGEudmlkZW9VcGxvYWRNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBzdHJUb29sYmFycyA9IHN0clRvb2xiYXJzLnJlcGxhY2UoL3ZpZGVvVXBsb2FkLC9nLCBcIlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0b29sYmFySXRlbXMgKz0gJywnICsgc3RyVG9vbGJhcnM7IC8vIGRpc2FibGUgcW1zRmxvd2NoYXJ0IHVudGlsIE5LLTQ0MCBkb25lXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2tlZGl0b3JDb25maWcgPSBDS0VkaXRvckNvbW1vbkZ1bmN0aW9ucy5nZXRDS0VkaXRvckNvbmZpZ3VyYXRpb24odG9vbGJhckl0ZW1zLCB0aGlzLkxBTkcpO1xyXG4gICAgICAgIGlmICh0aGlzLmNrZWRpdG9yQ29uZmlnKVxyXG4gICAgICAgICAgICB0aGlzLmNrZWRpdG9yQ29uZmlnLmNvbnRhaW5lcklkID0gdGhpcy5lZGl0b3JJZDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucW1zY2tEYXRhLmhpZGVJbWdPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2tlZGl0b3JDb25maWcgPSB0aGlzLmhpZGVJbWFnZU9wdGlvbnModGhpcy5ja2VkaXRvckNvbmZpZywgdGhpcy5xbXNja0RhdGEuaGlkZUltZ09wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdsb2JhbFNlcnZpY2Uuc2V0QXBpVXJsKHRoaXMucW1zY2tEYXRhLmFwaVVybCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkTWF0aHR5cGVDb25maWcoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZE1hdGhUeXBlQ29uZmlnKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWRUaW1lc3RhbXBDb25maWcoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZFRpbWVzdGFtcENvbmZpZygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkV1Byb29mcmVhZGVyKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRXUHJvb2ZyZWFkZXJDb25maWcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkVE9DVG9vbGJhcigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkVG9nZ2xlVE9DQ29uZmlnKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZEZ1bGxTY3JlZW5Db25maWcoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZEZ1bGxTY3JlZW5Db25maWcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9ySW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0b3JJbnN0YW5jZS5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoZG9jdW1lbnQpLm9mZigpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlOiAoY29udGVudDogYW55KSA9PiB2b2lkO1xyXG4gICAgb25Ub3VjaGVkOiAoKSA9PiB2b2lkO1xyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBcImNrLWRpc2FibGVkXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc0VuYWJsZWRXUHJvb2ZyZWFkZXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC8od3Byb29mcmVhZGVyKS9naW07XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgISF0aGlzLnFtc2NrRGF0YS53cHJvb2ZyZWFkZXIgJiZcclxuICAgICAgICAgICAgISF0aGlzLnFtc2NrRGF0YS53cHJvb2ZyZWFkZXIuc3JjVXJsICYmXHJcbiAgICAgICAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxyXG4gICAgICAgICAgICB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyLnNlYXJjaChwYXR0ZXJuKSA+IC0xXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRXUHJvb2ZyZWFkZXJDb25maWcoKSB7XHJcbiAgICAgICAgY29uc3Qgd3Byb29mcmVhZGVyQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB3cHJvb2ZyZWFkZXI6IHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlcixcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlci5zZXJ2aWNlSWQgfHxcclxuICAgICAgICAgICAgdGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyLnNlcnZpY2VJZC5sZW5ndGggPT0gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICAvL0ZhbGxiYWNrIHZhbHVlIG9mIHNlcnZpY2VJZCBwcm9wZXJ0eSB0byBkZW1vIHNlcnZpY2VJZFxyXG4gICAgICAgICAgICB0aGlzLnFtc2NrRGF0YS53cHJvb2ZyZWFkZXIuc2VydmljZUlkID1cclxuICAgICAgICAgICAgICAgIFwiMTpLcGt2UTItNktOVWotTDFXM3UyLUM5ajBLMS1adjJ0WTEtQ2ZET3gtV2ZHUmcyLXFYdGNpLVl5eUUzNC1qMDlINDItYjBhQ3QzLWQ5YVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXHJcbiAgICAgICAgICAgIHdwcm9vZnJlYWRlckNvbmZpZ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNFbmFibGVkVG9nZ2xlVG9vbGJhcigpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gLyh0b2dnbGVUb29sYmFyKS9nbWk7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5xbXNja0RhdGEudG9nZ2xlZFRvb2xiYXJJdGVtc1xyXG4gICAgICAgICAgICAmJiAhIXRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXJcclxuICAgICAgICAgICAgJiYgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUb2dnbGVUb29sYmFyQ29uZmlnKCkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5xbXNja0RhdGEudG9nZ2xlZFRvb2xiYXJJdGVtcy5zcGxpdCgnLCcpO1xyXG5cclxuICAgICAgICBjb25zdCB0b2dnbGVUb29sYmFyQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0b2dnbGVUb29sYmFyQ29uZmlnOiB7XHJcbiAgICAgICAgICAgICAgICB0b29sYmFyOiBpdGVtcyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyB8fCB7fSxcclxuICAgICAgICAgICAgdG9nZ2xlVG9vbGJhckNvbmZpZ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNFbmFibGVkRnVsbFNjcmVlbkNvbmZpZygpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gLyhxbXNGdWxsc2NyZWVuKS9naW07XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyICYmXHJcbiAgICAgICAgICAgICEhdGhpcy5xbXNja0RhdGEuZnVsbFNjcmVlbkNsYXNzICYmXHJcbiAgICAgICAgICAgIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTFcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEZ1bGxTY3JlZW5Db25maWcoKSB7XHJcbiAgICAgICAgY29uc3QgZnVsbFNjcmVlbkNvbmZpZyA9IHtcclxuICAgICAgICAgICAgZnVsbFNjcmVlbkNvbmZpZzoge1xyXG4gICAgICAgICAgICAgICAgY2xhc3M6IHRoaXMucW1zY2tEYXRhLmZ1bGxTY3JlZW5DbGFzcyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyB8fCB7fSxcclxuICAgICAgICAgICAgZnVsbFNjcmVlbkNvbmZpZ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNFbmFibGVkVE9DVG9vbGJhcigpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gLyh0YWJsZU9mQ29udGVudHMpL2dpbTtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tEYXRhLnRhYmxlT2ZDb250ZW50SGVhZGluZ3MgJiZcclxuICAgICAgICAgICAgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyICYmXHJcbiAgICAgICAgICAgIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTFcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFRvZ2dsZVRPQ0NvbmZpZygpIHtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMucW1zY2tEYXRhLnRhYmxlT2ZDb250ZW50SGVhZGluZ3Muc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIGNvbnN0IHRhYmxlT2ZDb250ZW50cyA9IHtcclxuICAgICAgICAgICAgdGFibGVPZkNvbnRlbnRzOiB7XHJcbiAgICAgICAgICAgICAgICBzdXBwb3J0ZWRIZWFkaW5nczogaXRlbXMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXHJcbiAgICAgICAgICAgIHRhYmxlT2ZDb250ZW50c1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNFbmFibGVkVGltZXN0YW1wQ29uZmlnKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKHRpbWVzdGFtcCkvZ2ltO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICEhdGhpcy5xbXNja0RhdGEudGltZXN0YW1wRm9ybWF0ICYmXHJcbiAgICAgICAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxyXG4gICAgICAgICAgICB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyLnNlYXJjaChwYXR0ZXJuKSA+IC0xXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUaW1lc3RhbXBDb25maWcoKSB7XHJcbiAgICAgICAgY29uc3QgdGltZXN0YW1wQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB0aW1lc3RhbXBDb25maWc6IHtcclxuICAgICAgICAgICAgICAgIGRhdGV0aW1lRm9ybWF0OiB0aGlzLnFtc2NrRGF0YS50aW1lc3RhbXBGb3JtYXQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXHJcbiAgICAgICAgICAgIHRpbWVzdGFtcENvbmZpZ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNFbmFibGVkTWF0aHR5cGVDb25maWcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC8oTWF0aFR5cGUpfChDaGVtVHlwZSkvZ2ltO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICEhdGhpcy5xbXNja0RhdGEubWF0aHR5cGVTZXJ2aWNlVXJsICYmXHJcbiAgICAgICAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxyXG4gICAgICAgICAgICB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyLnNlYXJjaChwYXR0ZXJuKSA+IC0xXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRNYXRoVHlwZUNvbmZpZygpIHtcclxuICAgICAgICBjb25zdCBtYXRoVHlwZUNvbmZpZyA9IHtcclxuICAgICAgICAgICAgbWF0aFR5cGVQYXJhbWV0ZXJzOiB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlUHJvdmlkZXJQcm9wZXJ0aWVzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgVVJJOiB0aGlzLnFtc2NrRGF0YS5tYXRodHlwZVNlcnZpY2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyOiBcImFzcHhcIixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXHJcbiAgICAgICAgICAgIG1hdGhUeXBlQ29uZmlnXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DaGFuZ2VkKHsgZWRpdG9yIH0pIHtcclxuICAgICAgICAvL3RoaXMucW1zY2tDb250ZW50SW5wdXQgPSBlZGl0b3IuZ2V0RGF0YSgpO1xyXG4gICAgICAgIHRoaXMucW1zY2tDb250ZW50T3V0cHV0LmVtaXQodGhpcy5xbXNja0NvbnRlbnRJbnB1dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQmx1cih7IGVkaXRvciB9KSB7XHJcbiAgICAgICAgdGhpcy5xbXNja0NvbnRlbnRJbnB1dCA9IGVkaXRvci5nZXREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5xbXNja0NvbnRlbnRPdXRwdXQuZW1pdCh0aGlzLnFtc2NrQ29udGVudElucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZShjOiBGb3JtQ29udHJvbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5yZXF1aXJlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucW1zY2tDb250ZW50SW5wdXQgJiYgIXRoaXMucmVxdWlyZWRcclxuICAgICAgICAgICAgPyBudWxsXHJcbiAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgdHlwZToge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGMudmFsdWUsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVJbWFnZU9wdGlvbnMoY29uZmlnLCBvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbUFycmF5ID0gb3B0aW9ucy5zcGxpdCgnLCcpO1xyXG4gICAgICAgIGl0ZW1BcnJheS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICBjb25maWcuaW1hZ2UudG9vbGJhciA9IGNvbmZpZy5pbWFnZS50b29sYmFyLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0gIT09IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZztcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogb25SZWFkeVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25SZWFkeShlZGl0b3IpIHtcclxuICAgICAgICB0aGlzLmVkaXRvckluc3RhbmNlID0gZWRpdG9yO1xyXG4gICAgICAgIGlmICh0aGlzLnFtc2NrQ29udGVudElucHV0KSB7XHJcbiAgICAgICAgICAgIGVkaXRvci5zZXREYXRhKHRoaXMucW1zY2tDb250ZW50SW5wdXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRFZGl0b3IoZWRpdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRFZGl0b3IoZWRpdG9yKSB7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VVcGxvYWRUeXBlcyA9IENLRWRpdG9ySW1hZ2VVcGxvYWRUeXBlQ29uc3QuUU1TQ0tfSU1BR0VfVFlQRVNfU1VQUE9SVF9ERUZBVUxUO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZzogUW1zVXBsb2FkQWRhcHRlckNvbmZpZyA9IHtcclxuICAgICAgICAgICAgYXBpVXJsOiB0aGlzLnFtc2NrRGF0YS5hcGlVcmwsXHJcbiAgICAgICAgICAgIExBTkc6IHRoaXMuTEFORyxcclxuICAgICAgICAgICAgaW1hZ2VVcGxvYWRUeXBlc1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgZWRpdG9yLnBsdWdpbnMuZ2V0KFwiRmlsZVJlcG9zaXRvcnlcIikuY3JlYXRlVXBsb2FkQWRhcHRlciA9IChsb2FkZXIpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBRbXNVcGxvYWRBZGFwdGVyKGxvYWRlciwgY29uZmlnKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBlZGl0b3IudWlcclxuICAgICAgICAgICAgLmdldEVkaXRhYmxlRWxlbWVudCgpXHJcbiAgICAgICAgICAgIC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShcclxuICAgICAgICAgICAgICAgIGVkaXRvci51aS52aWV3LnRvb2xiYXIuZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGVkaXRvci51aS5nZXRFZGl0YWJsZUVsZW1lbnQoKVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBBcHBlZCBXb3JkY291bnQgdG8gQ0tlZGl0b3JcclxuICAgICAgICBlZGl0b3IucGx1Z2lucy5nZXQoXCJXb3JkQ291bnRcIikub24oXCJ1cGRhdGVcIiwgKGV2dCwgc3RhdHMpID0+IHtcclxuICAgICAgICAgICAgLy8gUHJpbnRzIHRoZSBjdXJyZW50IGNvbnRlbnQgc3RhdGlzdGljcy5cclxuICAgICAgICAgICAgY29uc3Qgd29yZHNCb3ggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI1wiICsgdGhpcy5lZGl0b3JJZCArIFwiIC53b3JkY291bnQtY29udGVudFwiKTtcclxuICAgICAgICAgICAgaWYgKCEhd29yZHNCb3gpIHtcclxuICAgICAgICAgICAgICAgIHdvcmRzQm94LnRleHRDb250ZW50ID0gYCR7dGhpcy5MQU5HLlFNU0NLRURJVE9SLldPUkRTfTogJHtzdGF0cy53b3Jkc30gLyAke3RoaXMuTEFORy5RTVNDS0VESVRPUi5DSEFSQUNURVJTfTogJHtzdGF0cy5jaGFyYWN0ZXJzfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2V0RWRpdG9ySW5zdGFuY2VPYnNlcnZlcih0aGlzLmVkaXRvcklkKTtcclxuICAgICAgICB0aGlzLnNldExhYmVsVHJhbnNsYXRlRm9yTm9uRHJvcGRvd25Ub29sYmFySXRlbXMoZWRpdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCB0ZW1wbGF0ZSAtIExvYWQgdGVtcGxhdGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHRlbXBsYXRlRXZlbnRIYW5kbGluZygpIHtcclxuICAgICAgICBjb25zdCBkYXRhOiBRTVNDS0VkaXRvclRlbXBsYXRlID0gbmV3IFFNU0NLRWRpdG9yVGVtcGxhdGUoKTtcclxuICAgICAgICBkYXRhLmlkID0gMDtcclxuICAgICAgICBkYXRhLmh0bWwgPSB0aGlzLnFtc2NrQ29udGVudElucHV0O1xyXG4gICAgICAgIGRhdGEuZWRpdCA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvclRlbXBsYXRlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBcIjY1MHB4XCIsXHJcbiAgICAgICAgICAgIGhlaWdodDogXCI1NDBweFwiLFxyXG4gICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZS5jb21wb25lbnRJbnN0YW5jZS5ja0VkaXRvciA9IHRoaXMuZWRpdG9ySW5zdGFuY2U7XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVERPXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIHRlbXBsYXRlIC0gTG9hZCB0ZW1wbGF0ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbG9hZFRlbXBsYXRlRXZlbnRIYW5kbGluZygpIHtcclxuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JMb2FkVGVtcGxhdGVDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgd2lkdGg6IFwiNjUwcHhcIixcclxuICAgICAgICAgICAgaGVpZ2h0OiBcIjcwMHB4XCIsXHJcbiAgICAgICAgICAgIGRhdGE6IHsgZW5hYmxlRWRpdFRlbXBsYXRlOiB0aGlzLnFtc2NrRGF0YS5lbmFibGVUZW1wbGF0ZSB9LFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGUuY29tcG9uZW50SW5zdGFuY2UuY2tFZGl0b3IgPSB0aGlzLmVkaXRvckluc3RhbmNlO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBDdXN0b21FdmVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfTE9BRF9URU1QTEFURV9QTFVHSU5fUkVTUCxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiByZXN1bHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW5jaG9yIC0gTGluayAtIEltYWdlIG1hcHBpbmdcclxuICAgICAqL1xyXG4gICAgcHVibGljIGxpbmtFdmVudEhhbmRsaW5nKFxyXG4gICAgICAgIGxpbmssXHJcbiAgICAgICAgcW1zY2tDb250ZW50RmllbGRzPyxcclxuICAgICAgICBxbXNja0lzR2V0QW5jaG9yTW9yZUNvbnRlbnQ/XHJcbiAgICApIHtcclxuICAgICAgICBpZiAobGluay5ja2VkaXRvcklkICE9IHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JMaW5rKCk7XHJcbiAgICAgICAgZGF0YSA9IGxpbms7XHJcbiAgICAgICAgZGF0YS5lZGl0b3JDb250ZW50ID0gdGhpcy5xbXNja0NvbnRlbnRJbnB1dDtcclxuICAgICAgICBkYXRhLm1vZHVsZSA9IHRoaXMucW1zY2tEYXRhLm1vZHVsZTtcclxuICAgICAgICBkYXRhLmVudGl0eUlkID0gdGhpcy5xbXNja0RhdGEuZW50aXR5SWQ7XHJcbiAgICAgICAgaWYgKHFtc2NrQ29udGVudEZpZWxkcyAmJiBxbXNja0lzR2V0QW5jaG9yTW9yZUNvbnRlbnQpIHtcclxuICAgICAgICAgICAgZGF0YS5xbXNja0NvbnRlbnRGaWVsZHMgPSBxbXNja0NvbnRlbnRGaWVsZHM7XHJcbiAgICAgICAgICAgIGRhdGEucW1zY2tJc0dldEFuY2hvck1vcmVDb250ZW50ID0gcW1zY2tJc0dldEFuY2hvck1vcmVDb250ZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGRpYWxvZ1RlbXBsYXRlO1xyXG4gICAgICAgIGlmICghdGhpcy5xbXNja1BsdWdpbi5zaW1wbGVNb2RlKSB7XHJcbiAgICAgICAgICAgIGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckxpbmtDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBcIjY1MHB4XCIsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiNjYwcHhcIixcclxuICAgICAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRbXNDa2VkaXRvckxpbmtTaW1wbGVDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBcIjY1MHB4XCIsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMjAwcHhcIixcclxuICAgICAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGUuY29tcG9uZW50SW5zdGFuY2UuY2tFZGl0b3IgPSB0aGlzLmVkaXRvckluc3RhbmNlO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0xJTktfUExVR0lOX1JFU1AsIHtcclxuICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRvb2x0aXAgbWFwcGluZ1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdG9vbHRpcEV2ZW50SGFuZGxpbmcodmFsdWUpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IG5ldyBRTVNDS0VkaXRvclRvb2x0aXAoKTtcclxuICAgICAgICBkYXRhLnRleHQgPSB2YWx1ZS50ZXh0O1xyXG4gICAgICAgIGRhdGEuY29udGVudCA9IHZhbHVlLmNvbnRlbnQ7XHJcbiAgICAgICAgZGF0YS5ja0VkaXRvciA9IHRoaXMucW1zY2tQbHVnaW4ucGx1Z2luT2JqZWN0O1xyXG5cclxuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JUb29sdGlwQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBcIjY1MHB4XCIsXHJcbiAgICAgICAgICAgIGhlaWdodDogXCI1NTVweFwiLFxyXG4gICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGUuY29tcG9uZW50SW5zdGFuY2UuY2tFZGl0b3IgPSB0aGlzLmVkaXRvckluc3RhbmNlO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBDdXN0b21FdmVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfVE9PTFRJUF9QTFVHSU5fUkVTUCxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiByZXN1bHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1hZ2VNYXAgbWFwcGluZ1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW1hZ2VNYXBFdmVudEhhbmRsaW5nKHZhbHVlKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JJbWFnZU1hcCgpO1xyXG4gICAgICAgIGRhdGEubmFtZSA9IHZhbHVlLm5hbWU7XHJcbiAgICAgICAgZGF0YS5hcmVhcyA9IHZhbHVlLmFyZWFzO1xyXG4gICAgICAgIGRhdGEuaW1hZ2VVcmwgPSB2YWx1ZS5pbWFnZVVybDtcclxuICAgICAgICBkYXRhLmltYWdlV2lkdGggPSB2YWx1ZS5pbWFnZVdpZHRoO1xyXG4gICAgICAgIGRhdGEuaW1hZ2VIZWlnaHQgPSB2YWx1ZS5pbWFnZUhlaWdodDtcclxuICAgICAgICBkYXRhLm1vZHVsZSA9IHRoaXMucW1zY2tEYXRhLm1vZHVsZTtcclxuICAgICAgICBkYXRhLmVudGl0eUlkID0gdGhpcy5xbXNja0RhdGEuZW50aXR5SWQ7XHJcbiAgICAgICAgZGF0YS5lZGl0b3JDb250ZW50ID0gdGhpcy5xbXNja0NvbnRlbnRJbnB1dDtcclxuICAgICAgICBkYXRhLmxpbmtKYXZhU2NyaXB0TGlua3NBbGxvd2VkID0gdGhpcy5xbXNja0RhdGEubGlua0phdmFTY3JpcHRMaW5rc0FsbG93ZWQ7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9ySW1hZ2VNYXBDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0lNQUdFTUFQX1BMVUdJTl9SRVNQLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHJlc3VsdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAgQnVzaW5lc3MgUHJvY2VzcyBNb2RlbCBhbmQgTm90YXRpb25cclxuICAgICovXHJcbiAgICBwdWJsaWMgYnBtbkV2ZW50SGFuZGxpbmcoaWQ6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yQnBtbkRhdGEoKTtcclxuICAgICAgICBkYXRhLmlkID0gaWQ7XHJcbiAgICAgICAgZGF0YS5tb2R1bGUgPSB0aGlzLnFtc2NrRGF0YS5tb2R1bGU7XHJcbiAgICAgICAgZGF0YS5lbnRpdHlJZCA9IHRoaXMucW1zY2tEYXRhLmVudGl0eUlkO1xyXG4gICAgICAgIGRhdGEuZWRpdG9yQ29udGVudCA9IHRoaXMucW1zY2tDb250ZW50SW5wdXQ7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yQnBtbkNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXHJcbiAgICAgICAgICAgIG1heFdpZHRoOiBcIjEwMHZ3XCIsXHJcbiAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCIsXHJcbiAgICAgICAgICAgIG1heEhlaWdodDogXCIxMDB2d1wiLFxyXG4gICAgICAgICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGUuY29tcG9uZW50SW5zdGFuY2UuY2tFZGl0b3IgPSB0aGlzLmVkaXRvckluc3RhbmNlO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBDdXN0b21FdmVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTl9QTFVHSU5fUkVTUCxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiByZXN1bHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLypcclxuICAgICBBYm91dCBDS0VkaXRvclxyXG4gICAqL1xyXG4gICAgcHVibGljIGFib3V0Q0tFZGl0b3JFdmVudEhhbmRsaW5nKHZlcnNpb246IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckFib3V0Q29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBcIjUwMHB4XCIsXHJcbiAgICAgICAgICAgIGRhdGE6IHZlcnNpb24sXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZS5jb21wb25lbnRJbnN0YW5jZS5ja0VkaXRvciA9IHRoaXMuZWRpdG9ySW5zdGFuY2U7XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgIFRvb2xiYXIgdG9nZ2xlXHJcbiAgXHJcbiAgICAgIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZC5cclxuICAgICAgVHJhY2tpbmcgc3RhdHVzIGFuZCBwcm9ncmVzcyBvZiB0aGUgaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL2NrZWRpdG9yL2NrZWRpdG9yNS9pc3N1ZXMvNzM4M1xyXG4gIFxyXG4gICAgICAtIFJlbmRlciBib3RoIGRlZmF1bHQgdG9vbGJhciBhbmQgdG9nZ2xlIHRvb2xiYXIgYXQgaW5pdCB0aW1lXHJcbiAgICAgIC0gU2V0IElEIGZvciB0b29sYmFyIGl0ZW1zIHVzaW5nIGluZGV4OlxyXG4gICAgICAgICsgRnJvbSBpbmRleCAwIHRvIHRvb2xiYXJMZW5ndGggLSAxIGlzIHRoZSBkZWZhdWx0IHRvb2xiYXJcclxuICAgICAgICArIEZyb20gaW5kZXggdG9vbGJhckxlbmd0aCBvbiBpcyB0aGUgdG9nZ2xlIHRvb2xiYXJcclxuICAgICAgLSBTaG93L2hpZGUgZGVmYXVsdCBhbmQgdG9nZ2xlIHRvb2xiYXIgYnkgc2V0IGRpc3BsYXkgbm9uZSB0byBjb3JyZXNwb25kaW5nIHRvb2xiYXIgaXRlbXMgYmFzZWQgb24gSURcclxuICAgICovXHJcbiAgICBwdWJsaWMgdG9nZ2xlVG9vbGJhckV2ZW50SGFuZGxpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgcW1zY2tlZGl0b3IgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5lZGl0b3JJZCk7XHJcbiAgICAgICAgY29uc3QgdG9nZ2xlQXR0cmlidXRlID0gJ2lzVG9nZ2xlVG9vbGJhcic7XHJcbiAgICAgICAgY29uc3QgY2tlZGl0b3JUYWcgPSAnY2tlZGl0b3InO1xyXG5cclxuICAgICAgICBpZiAocW1zY2tlZGl0b3IpIHtcclxuICAgICAgICAgICAgY29uc3QgaXNUb2dnbGVUb29sYmFyID1cclxuICAgICAgICAgICAgICAgIHFtc2NrZWRpdG9yLmdldEF0dHJpYnV0ZSh0b2dnbGVBdHRyaWJ1dGUpID09IFwidHJ1ZVwiO1xyXG4gICAgICAgICAgICBpZiAoaXNUb2dnbGVUb29sYmFyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRUb29sYmFyVmlld01vZGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBxbXNja2VkaXRvci5zZXRBdHRyaWJ1dGUodG9nZ2xlQXR0cmlidXRlLCAnZmFsc2UnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldFRvb2xiYXJWaWV3TW9kZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBxbXNja2VkaXRvci5zZXRBdHRyaWJ1dGUodG9nZ2xlQXR0cmlidXRlLCAndHJ1ZScpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0VG9vbGJhclZpZXdNb2RlKHNob3dUb2dnbGVUb29sYmFyOiBib29sZWFuKSB7XHJcbiAgICAgICAgY29uc3QgdG9vbGJhckxlbmd0aCA9IHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXI/LnNwbGl0KCcsJykubGVuZ3RoIHx8IDA7XHJcbiAgICAgICAgLypcclxuICAgICAgICAgIEl0ZW1zIGluIHRvb2xiYXIgYXJlIGluZGV4ZWQ6XHJcbiAgICAgICAgICAtIEZyb20gaW5kZXggMCB0byB0b29sYmFyTGVuZ3RoIC0gMSBpcyB0aGUgZGVmYXVsdCB0b29sYmFyXHJcbiAgICAgICAgICAtIEZyb20gaW5kZXggdG9vbGJhckxlbmd0aCBvbiBpcyB0aGUgdG9nZ2xlIHRvb2xiYXJcclxuICAgICAgICAqL1xyXG4gICAgICAgICQoYCMke3RoaXMudG9vbGJhckl0ZW1QcmVmaXhJZH0ke3Rvb2xiYXJMZW5ndGggLSAxfWApPy5wcmV2QWxsKCkuZWFjaCgoaW5kZXgsIGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gc2hvd1RvZ2dsZVRvb2xiYXIgPyAnbm9uZScgOiAnJztcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICAkKGAjJHt0aGlzLnRvb2xiYXJJdGVtUHJlZml4SWR9JHt0b29sYmFyTGVuZ3RoIC0gMX1gKT8uY3NzKCdkaXNwbGF5Jywgc2hvd1RvZ2dsZVRvb2xiYXIgPyAnbm9uZScgOiAnJyk7XHJcblxyXG4gICAgICAgICQoYCMke3RoaXMudG9vbGJhckl0ZW1QcmVmaXhJZH0ke3Rvb2xiYXJMZW5ndGggLSAxfWApPy5uZXh0QWxsKCkuZWFjaCgoaW5kZXgsIGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gc2hvd1RvZ2dsZVRvb2xiYXIgPyAnJyA6ICdub25lJztcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmxvd2NoYXJ0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmbG93Y2hhcnRFdmVudEhhbmRsaW5nKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JGbG93Y2hhcnRDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgd2lkdGg6IFwiODl2d1wiLFxyXG4gICAgICAgICAgICBtYXhXaWR0aDogXCIxMDB2d1wiLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IFwiNzI1cHhcIixcclxuICAgICAgICAgICAgbWF4SGVpZ2h0OiBcIjEwMHZ3XCIsXHJcbiAgICAgICAgICAgIGRhdGE6IGlkLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGUuY29tcG9uZW50SW5zdGFuY2UuY2tFZGl0b3IgPSB0aGlzLmVkaXRvckluc3RhbmNlO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfRkxPV0NIQVJUX1BMVUdJTl9SRVNQLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogcmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCcm93c2UgVmlkZW9cclxuICAgICAqL1xyXG4gICAgcHVibGljIGJyb3dzZVZpZGVvRXZlbnRIYW5kbGluZyh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudHJlZVNlcnZpY2VcclxuICAgICAgICAgICAgLmdldFVwbG9hZFZpZGVvTGlzdCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2aWRlb3MgPSByZXNwb25zZSB8fCBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd1NlbGVjdEZvbGRlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYXJlYU9mQ3VycmVudFByb2Nlc3M6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0NoZWNrQm94OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93TXVsdGlwbGVDaGVjazogdGhpcy5xbXNja0RhdGEudXBsb2FkVmlkZW9BbGxvd011bHRpcGxlQ2hlY2ssXHJcbiAgICAgICAgICAgICAgICAgICAgb25seUNoZWNrQm94Rm9yQ2hpbGQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlSWQ6IERhdGFUeXBlLmRvY3VtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZW5JY29uOiBcImZvbGRlcl9vcGVuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3Blbkljb25Db2xvcjogXCIjMTk1NEE5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VJY29uOiBcImZvbGRlcl9maWxsZWRcIixcclxuICAgICAgICAgICAgICAgICAgICBjbG9zZUljb25Db2xvcjogXCIjNGFjYWZmXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbUljb246IFwiaW5zZXJ0X2RyaXZlX2ZpbGVcIixcclxuICAgICAgICAgICAgICAgICAgICBpdGVtSWNvblBhdGg6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbUljb25CYXNlNjQ6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0ZWROb2RlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZEFsbDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhOiBQb3B1cERhdGEgPSBuZXcgUG9wdXBEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICBkYXRhLm1vZHVsZUlkID0gMjtcclxuICAgICAgICAgICAgICAgIGRhdGEubW9kdWxlTmFtZSA9IHRoaXMuTEFORy5RTVNDS0VESVRPUi5TRUxFQ1RfVklERU9fRlJPTV9BUkNISVZFO1xyXG4gICAgICAgICAgICAgICAgZGF0YS5tb2R1bGVVcGxvYWRJbWFnZU5hbWUgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU0VMRUNUX1ZJREVPX0lNQUdFO1xyXG4gICAgICAgICAgICAgICAgZGF0YS5tb2R1bGVVcGxvYWRGaWxlTmFtZSA9IHRoaXMuTEFORy5RTVNDS0VESVRPUi5BRERfQV9GSUxFO1xyXG5cclxuICAgICAgICAgICAgICAgIGRhdGEudHJlZURhdGExID0gdmlkZW9zLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RJZDogaXRlbS5yb290SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290TmFtZTogaXRlbS5yb290TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViTmFtZTogaXRlbS5zdWJOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZElkOiBpdGVtLmNoaWxkSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTmFtZTogaXRlbS5jaGlsZE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0lkOiBpdGVtLnN0YXR1c0lkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SWQ6IGl0ZW0uZGlzcGxheUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogaXRlbS5jb250ZW50VHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdGVtLnVybCxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBkYXRhLnRyZWVEYXRhMiA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZGF0YS50cmVlQ29uZmlnMSA9IGNvbmZpZztcclxuICAgICAgICAgICAgICAgIGRhdGEuY2FuVXBsb2FkSW1hZ2UgPSB2aWRlb3MubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZGF0YS5jYW5VcGxvYWRWaWRlbyA9IHRoaXMucW1zY2tEYXRhLnZpZGVvVXBsb2FkTW9kZSA9PT0gVmlkZW9VcGxvYWRNb2RlLkFsbG93VXBsb2FkO1xyXG4gICAgICAgICAgICAgICAgZGF0YS5tYXhWaWRlb1RodW1ibmFpbFNpemVLQiA9IHRoaXMucW1zY2tEYXRhLm1heFZpZGVvVGh1bWJuYWlsU2l6ZUtCO1xyXG4gICAgICAgICAgICAgICAgZGF0YS5lbnRpdHlJZCA9IHRoaXMucW1zY2tEYXRhLmVudGl0eUlkO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihSZWxhdGVkUG9wdXBDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogXCI0NTBweFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBcIjgwMHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBcIjYyMHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBcInFtc2NrZWRpdG9yLWJyb3dzZS12aWRlby1wb3B1cFwiLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoQm94ID0gd2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLnFtc2NrZWRpdG9yLWJyb3dzZS12aWRlby1wb3B1cCAjcW1zbGliX3JlbGF0ZWRfcG9wdXBfc2VhcmNoXCJcclxuICAgICAgICAgICAgICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2hCb3gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoQm94LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG5cclxuICAgICAgICAgICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJscyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlcXVlc3RVcGxvYWRWaWRlb1VybCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJscy5wdXNoKHJlc3VsdC5yZXF1ZXN0VXBsb2FkVmlkZW9VcmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaWRzID0gcmVzdWx0LmNoZWNrZWROb2RlTGlzdC5yZWR1Y2UoKHJlc3VsdCwgaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpdGVtLmlkLnRvU3RyaW5nKCldID0gaXRlbS5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJscyA9IHZpZGVvc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGkpID0+IGkuY2hpbGRJZCAmJiAhIWlkc1tpLmNoaWxkSWQudG9TdHJpbmcoKV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoaSkgPT4gaS51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19CUk9XU0VfVklERU9fUkVTUCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZGV0YWlsOiB7IHVybHM6IHVybHMsIHRodW1ibmFpbFVybDogcmVzdWx0LmltYWdlUmVsYXRpdmVVcmwgfSB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NldEVkaXRvckluc3RhbmNlT2JzZXJ2ZXIoZWRpdG9ySWQ6IHN0cmluZykge1xyXG4gICAgICAgICQoZG9jdW1lbnQpLm9mZignRE9NTm9kZUluc2VydGVkJykub24oJ0RPTU5vZGVJbnNlcnRlZCcsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Rvb2xiYXJJdGVtc0lkU2V0ICYmICQoZS50YXJnZXQpLmhhcygnIycgKyBlZGl0b3JJZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldElkRm9yVG9vbGJhckl0ZW1zKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zZXRJZEZvclRvb2xiYXJJdGVtcygpIHtcclxuICAgICAgICBjb25zdCB0b29sYmFySXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAke3RoaXMuZWRpdG9ySWQgPyAnIycgKyB0aGlzLmVkaXRvcklkIDogJyd9IC5jay10b29sYmFyX19pdGVtc2ApPy5jaGlsZHJlbiB8fCBbXTtcclxuICAgICAgICBpZiAoIXRvb2xiYXJJdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzVG9vbGJhckl0ZW1zSWRTZXQgPSB0cnVlO1xyXG4gICAgICAgIChBcnJheS5mcm9tKHRvb2xiYXJJdGVtcykgYXMgSFRNTEVsZW1lbnRbXSkuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaXRlbS5pZCA9IGAke3RoaXMudG9vbGJhckl0ZW1QcmVmaXhJZH0ke2luZGV4fWA7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudG9nZ2xlVG9vbGJhckV2ZW50SGFuZGxpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldExhYmVsVHJhbnNsYXRlRm9yTm9uRHJvcGRvd25Ub29sYmFySXRlbXMoZWRpdG9yKSB7XHJcbiAgICAgICAgbGV0IGFsbEl0ZW1PblRvb2xiYXIgPSBlZGl0b3IudWkudmlldy50b29sYmFyPy5pdGVtcz8uX2l0ZW1zO1xyXG4gICAgICAgIGFsbEl0ZW1PblRvb2xiYXIuZm9yRWFjaCgoZWwpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVsLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICBlbC5sYWJlbCA9IHRoaXMudHJhbnNsYXRlQ0tFZGl0b3IoZWwubGFiZWwpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbC5idXR0b25WaWV3ICYmIGVsLmJ1dHRvblZpZXcubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIGVsLmJ1dHRvblZpZXcubGFiZWwgPSB0aGlzLnRyYW5zbGF0ZUNLRWRpdG9yKGVsLmJ1dHRvblZpZXcubGFiZWwpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVDS0VkaXRvcihsYWJlbDogc3RyaW5nKSB7XHJcbiAgICAgICAgc3dpdGNoIChsYWJlbC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKCdmb250IHNpemUnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuRk9OVF9TSVpFO1xyXG4gICAgICAgICAgICBjYXNlICgnZm9udCBmYW1pbHknKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuRk9OVF9GQU1JTFk7XHJcbiAgICAgICAgICAgIGNhc2UgKCdmb250IGNvbG9yJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkZPTlRfQ09MT1I7XHJcbiAgICAgICAgICAgIGNhc2UgKCdmb250IGJhY2tncm91bmQgY29sb3InKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuRk9OVF9CQUNLR1JPVU5EX0NPTE9SO1xyXG4gICAgICAgICAgICBjYXNlICgnYm9sZCcpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5CT0xEO1xyXG4gICAgICAgICAgICBjYXNlICgnaXRhbGljJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLklUQUxJQztcclxuICAgICAgICAgICAgY2FzZSAoJ3VuZGVybGluZScpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5VTkRFUkxJTkU7XHJcbiAgICAgICAgICAgIGNhc2UgKCdzdHJpa2V0aHJvdWdoJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLlNUUklLRVRIUk9VR0g7XHJcbiAgICAgICAgICAgIGNhc2UgKCdob3Jpem9udGFsIGxpbmUnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuSE9SSVpPTlRBTF9MSU5FO1xyXG4gICAgICAgICAgICBjYXNlICgncGFnZSBicmVhaycpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5QQUdFX0JSRUFLO1xyXG4gICAgICAgICAgICBjYXNlICgndGV4dCBhbGlnbm1lbnQnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuVEVYVF9BTElHTk1FTlQ7XHJcbiAgICAgICAgICAgIGNhc2UgKCdidWxsZXRlZCBsaXN0Jyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkJVTExFVEVEX0xJU1Q7XHJcbiAgICAgICAgICAgIGNhc2UgKCdudW1iZXJlZCBsaXN0Jyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLk5VTUJFUkVEX0xJU1Q7XHJcbiAgICAgICAgICAgIGNhc2UgKCdkZWNyZWFzZSBpbmRlbnQnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuREVDUkVBU0VfSU5ERU5UO1xyXG4gICAgICAgICAgICBjYXNlICgnaW5jcmVhc2UgaW5kZW50Jyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLklOQ1JFQVNFX0lOREVOVDtcclxuICAgICAgICAgICAgY2FzZSAoJ3N1YnNjcmlwdCcpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5TVUJTQ1JJUFQ7XHJcbiAgICAgICAgICAgIGNhc2UgKCdzdXBlcnNjcmlwdCcpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5TVVBFUlNDUklQVDtcclxuICAgICAgICAgICAgY2FzZSAoJ3VuZG8nKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuVU5ETztcclxuICAgICAgICAgICAgY2FzZSAoJ3JlZG8nKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuUkVETztcclxuICAgICAgICAgICAgY2FzZSAoJ3NwZWNpYWwgY2hhcmFjdGVycycpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5TUEVDSUFMX0NIQVJBQ1RFUlM7XHJcbiAgICAgICAgICAgIGNhc2UgKCdibG9jayBxdW90ZScpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5CTE9DS1FVT1RFO1xyXG4gICAgICAgICAgICBjYXNlICgnaW5zZXJ0IGltYWdlJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLklOU0VSVF9JTUFHRTtcclxuICAgICAgICAgICAgY2FzZSAoJ2luc2VydCBtZWRpYScpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5JTlNFUlRfTUVESUE7XHJcbiAgICAgICAgICAgIGNhc2UgKCdicm93c2UgdmlkZW8nKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQlJPV1NFX1ZJREVPO1xyXG4gICAgICAgICAgICBjYXNlICgnaW5zZXJ0IHRhYmxlJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLklOU0VSVF9UQUJMRTtcclxuICAgICAgICAgICAgY2FzZSAoJ2FuY2hvcicpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5BTkNIT1I7XHJcbiAgICAgICAgICAgIGNhc2UgKCd0b29sdGlwJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLlRPT0xUSVA7XHJcbiAgICAgICAgICAgIGNhc2UgKCd0aW1lc3RhbXAnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuVElNRVNUQU1QO1xyXG4gICAgICAgICAgICBjYXNlICgnYWRkIHRlbXBsYXRlJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFERF9URU1QTEFURTtcclxuICAgICAgICAgICAgY2FzZSAoJ3RlbXBsYXRlcycpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5URU1QTEFURVM7XHJcbiAgICAgICAgICAgIGNhc2UgKCdyZW1vdmUgZm9ybWF0Jyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLlJFTU9WRV9GT1JNQVQ7XHJcbiAgICAgICAgICAgIGNhc2UgKCdsaW5rJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkxJTks7XHJcbiAgICAgICAgICAgIGNhc2UgKCdmbG93Y2hhcnQnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuRkxPV0NIQVJUO1xyXG4gICAgICAgICAgICBjYXNlICgnYnVzaW5lc3MgcHJvY2VzcyBtb2RlbCBhbmQgbm90YXRpb24nKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQlBNTjtcclxuICAgICAgICAgICAgY2FzZSAoJ2Fib3V0IGNrZWRpdG9yJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFCT1VUX0NLRURJVE9SO1xyXG4gICAgICAgICAgICBjYXNlICgnY3JlYXRlIHRhYmxlIG9mIGNvbnRlbnRzJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkNSRUFURV9UQUJMRV9PRl9DT05URU5UUztcclxuICAgICAgICAgICAgY2FzZSAoJ3NvdXJjZScpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5TT1VSQ0U7XHJcbiAgICAgICAgICAgIGNhc2UgKCd0b2dnbGUgdG9vbGJhcicpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5UT0dHTEVfVE9PTEJBUjtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
816
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvcW1zLWNrZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBYSxTQUFTLEVBQTJCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9OLE9BQU8sRUFBZSxhQUFhLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQTBCLE1BQU0sbUNBQW1DLENBQUM7QUFDN0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0UsT0FBTyx1QkFBdUIsTUFBTSxvQ0FBb0MsQ0FBQztBQUd6RSxPQUFPLGVBQWUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx3RUFBd0UsQ0FBQztBQUN4SCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNsSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw4RUFBOEUsQ0FB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T3hCLHNCQUFzQjtZQWpCdEIsOEJBQThCO1lBWjJHLFNBQVM7WUFBL0YsVUFBVTs7O3dCQXlEakUsS0FBSzswQkFDTCxLQUFLO2dDQUNMLEtBQUs7aUNBQ0wsS0FBSzswQ0FDTCxLQUFLO3lCQUNMLEtBQUssU0FBQyxVQUFVO3VCQUNoQixLQUFLLFNBQUMsVUFBVTt1QkFDaEIsS0FBSztpQ0FDTCxNQUFNO3dCQWNOLFlBQVksU0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBRbXNVcGxvYWRBZGFwdGVyLCBRbXNVcGxvYWRBZGFwdGVyQ29uZmlnIH0gZnJvbSAnLi9jb21tb24vY2xhc3Nlcy9xbXNVcGxvYWRBZGFwdGVyJztcclxuaW1wb3J0IHsgQ0tFZGl0b3JFdmVudENvbnN0IH0gZnJvbSAnLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yRXZlbnQuY29uc3RhbnQnO1xyXG5pbXBvcnQgQ0tFZGl0b3JDb21tb25GdW5jdGlvbnMgZnJvbSAnLi9jb21tb24vZnVuY3Rpb25zL2NvbW1vbi5mdW5jdGlvbic7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yRGF0YSB9IGZyb20gJy4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItZGF0YS5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yUGx1Z2luIH0gZnJvbSAnLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1wbHVnaW4ubW9kZWwnO1xyXG5pbXBvcnQgUU1TQ0tFZGl0b3JMaW5rIGZyb20gJy4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItdXJsLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1icG1uL3Ftcy1ja2VkaXRvci1icG1uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yRnVsbHNjcmVlbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItZnVsbHNjcmVlbi9xbXMtY2tlZGl0b3ItZnVsbHNjcmVlbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckltYWdlTWFwQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1pbWFnZW1hcC9xbXMtY2tlZGl0b3ItaW1hZ2VtYXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMaW5rQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1saW5rL3Ftcy1ja2VkaXRvci1saW5rLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yTG9hZFRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1sb2FkLXRlbXBsYXRlL3Ftcy1ja2VkaXRvci1sb2FkLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLXRlbXBsYXRlL3Ftcy1ja2VkaXRvci10ZW1wbGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclRvb2x0aXBDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLXRvb2x0aXAvcW1zLWNrZWRpdG9yLXRvb2x0aXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JJbWFnZU1hcCB9IGZyb20gJy4vbW9kZWxzL3Ftcy1ja2VkaXRvci1pbWFnZW1hcC5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yVGVtcGxhdGUgfSBmcm9tICcuL21vZGVscy9xbXMtY2tlZGl0b3ItdGVtcGxhdGUubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclRvb2x0aXAgfSBmcm9tICcuL21vZGVscy9xbXMtY2tlZGl0b3ItdG9vbHRpcC5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcW1zLWNrZWRpdG9yLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckFib3V0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1hYm91dC9xbXMtY2tlZGl0b3ItYWJvdXQuY29tcG9uZW50JztcclxuLy8gaW1wb3J0IHsgQ0tFZGl0b3I1IH0gZnJvbSAnQGNrZWRpdG9yL2NrZWRpdG9yNS1hbmd1bGFyL2NrZWRpdG9yJztcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uRGF0YSB9IGZyb20gXCIuL21vZGVscy9xbXMtY2tlZGl0b3ItYnBtbi1kYXRhLm1vZGVsXCI7XHJcbmltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcmVsYXRlZC9jb21tb24vZGF0YS10eXBlLmVudW1cIjtcclxuaW1wb3J0IHsgUG9wdXBEYXRhIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvcmVsYXRlZC9tb2RlbC9wb3B1cC1kYXRhLm1vZGVsXCI7XHJcbmltcG9ydCB7IFJlbGF0ZWRQb3B1cENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRzL3JlbGF0ZWQvcG9wdXAvcmVsYXRlZC1wb3B1cC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUcmVlU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci10cmVlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JGbG93Y2hhcnRDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1mbG93Y2hhcnQvcW1zLWNrZWRpdG9yLWZsb3djaGFydC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUW1zQ2tlZGl0b3JMaW5rU2ltcGxlQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItbGluay1zaW1wbGUvcW1zLWNrZWRpdG9yLWxpbmstc2ltcGxlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDS0VkaXRvckltYWdlVXBsb2FkVHlwZUNvbnN0IH0gZnJvbSAnLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9ySW1hZ2VVcGxvYWRUeXBlLmNvbnN0JztcclxuaW1wb3J0IHsgVmlkZW9VcGxvYWRNb2RlIH0gZnJvbSAnLi9jb21tb24vZW51bXMvdmlkZW8tdXBsb2FkLW1vZGUuZW51bSc7XHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwicW1zLWNrZWRpdG9yXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3Ftcy1ja2VkaXRvci5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgc3R5bGVVcmxzOiBbXCIuL3Ftcy1ja2VkaXRvci5jb21wb25lbnQuc2Nzc1wiXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIFFNU0NLRWRpdG9yRnVsbHNjcmVlbkNvbXBvbmVudCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBRTVNDS0VkaXRvckNvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBRTVNDS0VkaXRvckNvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICBdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUU1TQ0tFZGl0b3JDb21wb25lbnRcclxuICAgIGV4dGVuZHMgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgVmFsaWRhdG9yIHtcclxuICAgIEBJbnB1dCgpIHFtc2NrRGF0YTogUU1TQ0tFZGl0b3JEYXRhO1xyXG4gICAgQElucHV0KCkgcW1zY2tQbHVnaW46IFFNU0NLRWRpdG9yUGx1Z2luO1xyXG4gICAgQElucHV0KCkgcW1zY2tDb250ZW50SW5wdXQ6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHFtc2NrQ29udGVudEZpZWxkcz86IFtdO1xyXG4gICAgQElucHV0KCkgcW1zY2tJc0dldEFuY2hvck1vcmVDb250ZW50PzogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgnZGlzYWJsZWQnKSBpc0Rpc2FibGVkOiBib29sZWFuO1xyXG4gICAgQElucHV0KCdyZXF1aXJlZCcpIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBlZGl0b3JJZCA9ICdxbXNja2VkaXRvcic7XHJcbiAgICBAT3V0cHV0KCkgcW1zY2tDb250ZW50T3V0cHV0OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICBMQU5HOiBhbnk7XHJcbiAgICBja0VkaXRvcjogYW55O1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgY2tlZGl0b3JDb25maWc6IGFueTtcclxuICAgIGNrRWRpdG9yRXZlbnRDb25zdCA9IENLRWRpdG9yRXZlbnRDb25zdDtcclxuICAgIGNvdW50V29yZDogbnVtYmVyO1xyXG4gICAgY291bnRDaGFyOiBudW1iZXI7XHJcbiAgICBlZGl0b3JJbnN0YW5jZTogYW55O1xyXG4gICAgY2tUYWduYW1lOiBzdHJpbmc7XHJcbiAgICB0b29sYmFySXRlbVByZWZpeElkOiBzdHJpbmc7XHJcbiAgICBpc1Rvb2xiYXJJdGVtc0lkU2V0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzptZXNzYWdlXCIsIFtcIiRldmVudFwiXSlcclxuICAgIG9uTWVzc2FnZShldmVudCkge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQuZGF0YS5ldmVudE5hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19URU1QTEFURV9QTFVHSU5fTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcGxhdGVFdmVudEhhbmRsaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MT0FEX1RFTVBMQVRFX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkVGVtcGxhdGVFdmVudEhhbmRsaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MSU5LX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5saW5rRXZlbnRIYW5kbGluZyhcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5kYXRhLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucW1zY2tDb250ZW50RmllbGRzLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucW1zY2tJc0dldEFuY2hvck1vcmVDb250ZW50XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfVE9PTFRJUF9QTFVHSU5fTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcEV2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19JTUFHRU1BUF9QTFVHSU5fTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VNYXBFdmVudEhhbmRsaW5nKGV2ZW50LmRhdGEudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTl9QTFVHSU5fTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuYnBtbkV2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19BQk9VVF9DS0VESVRPUl9QTFVHSU5fTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWJvdXRDS0VkaXRvckV2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19GTE9XQ0hBUlRfUExVR0lOX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb3djaGFydEV2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19UT0dHTEVfVE9PTEJBUl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVUb29sYmFyRXZlbnRIYW5kbGluZygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlJPV1NFX1ZJREVPX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyb3dzZVZpZGVvRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RydWN0b3JcclxuICAgICAqL1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZ2xvYmFsU2VydmljZTogUU1TQ0tFZGl0b3JHbG9iYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdHJlZVNlcnZpY2U6IFFNU0NLRWRpdG9yVHJlZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBxbXNDS0VkaXRvckZ1bGxzY3JlZW5Db21wb25lbnQ6IFFNU0NLRWRpdG9yRnVsbHNjcmVlbkNvbXBvbmVudCxcclxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZlxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmNrVGFnbmFtZSA9IFwiZGl2XCI7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50b29sYmFySXRlbVByZWZpeElkID0gYCR7dGhpcy5lZGl0b3JJZH1fdG9vbGJhcl9pdGVtX2A7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gJ0NLRWRpdG9yIGN1c3RvbSBidWlsZCc7XHJcbiAgICAgICAgdGhpcy5ja0VkaXRvciA9IHRoaXMucW1zY2tQbHVnaW4ucGx1Z2luT2JqZWN0O1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKHJlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgdG9vbGJhckl0ZW1zID0gdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhcjtcclxuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWRUb2dnbGVUb29sYmFyKCkgJiYgdGhpcy5xbXNja0RhdGEudG9nZ2xlZFRvb2xiYXJJdGVtcykge1xyXG4gICAgICAgICAgICBsZXQgc3RyVG9vbGJhcnMgPSB0aGlzLnFtc2NrRGF0YS50b2dnbGVkVG9vbGJhckl0ZW1zLnJlcGxhY2UoL3Ftc0Zsb3djaGFydCwvZywgXCJcIik7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5xbXNja0RhdGEuZW5hYmxlVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgIHN0clRvb2xiYXJzID0gc3RyVG9vbGJhcnMucmVwbGFjZSgvcW1zVGVtcGxhdGUsL2csIFwiXCIpOyAvLyBkaXNhYmxlIHFtc1RlbXBsYXRlIGlmIHVzZXIgZG9uJ3QgaGF2ZSBoYW5kYm9va0FkbWluIFJvbGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMucW1zY2tEYXRhLnZpZGVvVXBsb2FkTW9kZSkge1xyXG4gICAgICAgICAgICAgICAgc3RyVG9vbGJhcnMgPSBzdHJUb29sYmFycy5yZXBsYWNlKC92aWRlb1VwbG9hZCwvZywgXCJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdG9vbGJhckl0ZW1zICs9ICcsJyArIHN0clRvb2xiYXJzOyAvLyBkaXNhYmxlIHFtc0Zsb3djaGFydCB1bnRpbCBOSy00NDAgZG9uZVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNrZWRpdG9yQ29uZmlnID0gQ0tFZGl0b3JDb21tb25GdW5jdGlvbnMuZ2V0Q0tFZGl0b3JDb25maWd1cmF0aW9uKHRvb2xiYXJJdGVtcywgdGhpcy5MQU5HKTtcclxuICAgICAgICBpZiAodGhpcy5ja2VkaXRvckNvbmZpZylcclxuICAgICAgICAgICAgdGhpcy5ja2VkaXRvckNvbmZpZy5jb250YWluZXJJZCA9IHRoaXMuZWRpdG9ySWQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnFtc2NrRGF0YS5oaWRlSW1nT3B0aW9ucykge1xyXG4gICAgICAgICAgICB0aGlzLmNrZWRpdG9yQ29uZmlnID0gdGhpcy5oaWRlSW1hZ2VPcHRpb25zKHRoaXMuY2tlZGl0b3JDb25maWcsIHRoaXMucW1zY2tEYXRhLmhpZGVJbWdPcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNldEFwaVVybCh0aGlzLnFtc2NrRGF0YS5hcGlVcmwpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZE1hdGh0eXBlQ29uZmlnKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRNYXRoVHlwZUNvbmZpZygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkVGltZXN0YW1wQ29uZmlnKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRUaW1lc3RhbXBDb25maWcoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZFdQcm9vZnJlYWRlcigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkV1Byb29mcmVhZGVyQ29uZmlnKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZFRPQ1Rvb2xiYXIoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZFRvZ2dsZVRPQ0NvbmZpZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWRGdWxsU2NyZWVuQ29uZmlnKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRGdWxsU2NyZWVuQ29uZmlnKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmVkaXRvckluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdG9ySW5zdGFuY2UuZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAkKGRvY3VtZW50KS5vZmYoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZTogKGNvbnRlbnQ6IGFueSkgPT4gdm9pZDtcclxuICAgIG9uVG91Y2hlZDogKCkgPT4gdm9pZDtcclxuXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgXCJjay1kaXNhYmxlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNFbmFibGVkV1Byb29mcmVhZGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKHdwcm9vZnJlYWRlcikvZ2ltO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICEhdGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyICYmXHJcbiAgICAgICAgICAgICEhdGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyLnNyY1VybCAmJlxyXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIgJiZcclxuICAgICAgICAgICAgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkV1Byb29mcmVhZGVyQ29uZmlnKCkge1xyXG4gICAgICAgIGNvbnN0IHdwcm9vZnJlYWRlckNvbmZpZyA9IHtcclxuICAgICAgICAgICAgd3Byb29mcmVhZGVyOiB7XHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLnFtc2NrRGF0YS53cHJvb2ZyZWFkZXIsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0aGlzLnFtc2NrRGF0YS53cHJvb2ZyZWFkZXIuc2VydmljZUlkIHx8XHJcbiAgICAgICAgICAgIHRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlci5zZXJ2aWNlSWQubGVuZ3RoID09IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgLy9GYWxsYmFjayB2YWx1ZSBvZiBzZXJ2aWNlSWQgcHJvcGVydHkgdG8gZGVtbyBzZXJ2aWNlSWRcclxuICAgICAgICAgICAgdGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyLnNlcnZpY2VJZCA9XHJcbiAgICAgICAgICAgICAgICBcIjE6S3BrdlEyLTZLTlVqLUwxVzN1Mi1DOWowSzEtWnYydFkxLUNmRE94LVdmR1JnMi1xWHRjaS1ZeXlFMzQtajA5SDQyLWIwYUN0My1kOWFcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LFxyXG4gICAgICAgICAgICB3cHJvb2ZyZWFkZXJDb25maWdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRW5hYmxlZFRvZ2dsZVRvb2xiYXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC8odG9nZ2xlVG9vbGJhcikvZ21pO1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMucW1zY2tEYXRhLnRvZ2dsZWRUb29sYmFySXRlbXNcclxuICAgICAgICAgICAgJiYgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyXHJcbiAgICAgICAgICAgICYmIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVG9nZ2xlVG9vbGJhckNvbmZpZygpIHtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMucW1zY2tEYXRhLnRvZ2dsZWRUb29sYmFySXRlbXMuc3BsaXQoJywnKTtcclxuXHJcbiAgICAgICAgY29uc3QgdG9nZ2xlVG9vbGJhckNvbmZpZyA9IHtcclxuICAgICAgICAgICAgdG9nZ2xlVG9vbGJhckNvbmZpZzoge1xyXG4gICAgICAgICAgICAgICAgdG9vbGJhcjogaXRlbXMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXHJcbiAgICAgICAgICAgIHRvZ2dsZVRvb2xiYXJDb25maWdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRW5hYmxlZEZ1bGxTY3JlZW5Db25maWcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC8ocW1zRnVsbHNjcmVlbikvZ2ltO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxyXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tEYXRhLmZ1bGxTY3JlZW5DbGFzcyAmJlxyXG4gICAgICAgICAgICB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyLnNlYXJjaChwYXR0ZXJuKSA+IC0xXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRGdWxsU2NyZWVuQ29uZmlnKCkge1xyXG4gICAgICAgIGNvbnN0IGZ1bGxTY3JlZW5Db25maWcgPSB7XHJcbiAgICAgICAgICAgIGZ1bGxTY3JlZW5Db25maWc6IHtcclxuICAgICAgICAgICAgICAgIGNsYXNzOiB0aGlzLnFtc2NrRGF0YS5mdWxsU2NyZWVuQ2xhc3MsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXHJcbiAgICAgICAgICAgIGZ1bGxTY3JlZW5Db25maWdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRW5hYmxlZFRPQ1Rvb2xiYXIoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC8odGFibGVPZkNvbnRlbnRzKS9naW07XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgISF0aGlzLnFtc2NrRGF0YS50YWJsZU9mQ29udGVudEhlYWRpbmdzICYmXHJcbiAgICAgICAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxyXG4gICAgICAgICAgICB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyLnNlYXJjaChwYXR0ZXJuKSA+IC0xXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUb2dnbGVUT0NDb25maWcoKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLnFtc2NrRGF0YS50YWJsZU9mQ29udGVudEhlYWRpbmdzLnNwbGl0KFwiLFwiKTtcclxuICAgICAgICBjb25zdCB0YWJsZU9mQ29udGVudHMgPSB7XHJcbiAgICAgICAgICAgIHRhYmxlT2ZDb250ZW50czoge1xyXG4gICAgICAgICAgICAgICAgc3VwcG9ydGVkSGVhZGluZ3M6IGl0ZW1zLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LFxyXG4gICAgICAgICAgICB0YWJsZU9mQ29udGVudHNcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRW5hYmxlZFRpbWVzdGFtcENvbmZpZygpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gLyh0aW1lc3RhbXApL2dpbTtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tEYXRhLnRpbWVzdGFtcEZvcm1hdCAmJlxyXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIgJiZcclxuICAgICAgICAgICAgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVGltZXN0YW1wQ29uZmlnKCkge1xyXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcENvbmZpZyA9IHtcclxuICAgICAgICAgICAgdGltZXN0YW1wQ29uZmlnOiB7XHJcbiAgICAgICAgICAgICAgICBkYXRldGltZUZvcm1hdDogdGhpcy5xbXNja0RhdGEudGltZXN0YW1wRm9ybWF0LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LFxyXG4gICAgICAgICAgICB0aW1lc3RhbXBDb25maWdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRW5hYmxlZE1hdGh0eXBlQ29uZmlnKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKE1hdGhUeXBlKXwoQ2hlbVR5cGUpL2dpbTtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tEYXRhLm1hdGh0eXBlU2VydmljZVVybCAmJlxyXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIgJiZcclxuICAgICAgICAgICAgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkTWF0aFR5cGVDb25maWcoKSB7XHJcbiAgICAgICAgY29uc3QgbWF0aFR5cGVDb25maWcgPSB7XHJcbiAgICAgICAgICAgIG1hdGhUeXBlUGFyYW1ldGVyczoge1xyXG4gICAgICAgICAgICAgICAgc2VydmljZVByb3ZpZGVyUHJvcGVydGllczoge1xyXG4gICAgICAgICAgICAgICAgICAgIFVSSTogdGhpcy5xbXNja0RhdGEubWF0aHR5cGVTZXJ2aWNlVXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlcjogXCJhc3B4XCIsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LFxyXG4gICAgICAgICAgICBtYXRoVHlwZUNvbmZpZ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2hhbmdlZCh7IGVkaXRvciB9KSB7XHJcbiAgICAgICAgLy90aGlzLnFtc2NrQ29udGVudElucHV0ID0gZWRpdG9yLmdldERhdGEoKTtcclxuICAgICAgICB0aGlzLnFtc2NrQ29udGVudE91dHB1dC5lbWl0KHRoaXMucW1zY2tDb250ZW50SW5wdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkJsdXIoeyBlZGl0b3IgfSkge1xyXG4gICAgICAgIHRoaXMucW1zY2tDb250ZW50SW5wdXQgPSBlZGl0b3IuZ2V0RGF0YSgpO1xyXG4gICAgICAgIHRoaXMucW1zY2tDb250ZW50T3V0cHV0LmVtaXQodGhpcy5xbXNja0NvbnRlbnRJbnB1dCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBpZiAoIXRoaXMucmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnFtc2NrQ29udGVudElucHV0ICYmICF0aGlzLnJlcXVpcmVkXHJcbiAgICAgICAgICAgID8gbnVsbFxyXG4gICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBjLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlSW1hZ2VPcHRpb25zKGNvbmZpZywgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1BcnJheSA9IG9wdGlvbnMuc3BsaXQoJywnKTtcclxuICAgICAgICBpdGVtQXJyYXkuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgY29uZmlnLmltYWdlLnRvb2xiYXIgPSBjb25maWcuaW1hZ2UudG9vbGJhci5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtICE9PSBlbGVtZW50O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIG9uUmVhZHlcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uUmVhZHkoZWRpdG9yKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JJbnN0YW5jZSA9IGVkaXRvcjtcclxuICAgICAgICBpZiAodGhpcy5xbXNja0NvbnRlbnRJbnB1dCkge1xyXG4gICAgICAgICAgICBlZGl0b3Iuc2V0RGF0YSh0aGlzLnFtc2NrQ29udGVudElucHV0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbml0RWRpdG9yKGVkaXRvcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0RWRpdG9yKGVkaXRvcikge1xyXG4gICAgICAgIGNvbnN0IGltYWdlVXBsb2FkVHlwZXMgPSBDS0VkaXRvckltYWdlVXBsb2FkVHlwZUNvbnN0LlFNU0NLX0lNQUdFX1RZUEVTX1NVUFBPUlRfREVGQVVMVDtcclxuICAgICAgICBjb25zdCBjb25maWc6IFFtc1VwbG9hZEFkYXB0ZXJDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGFwaVVybDogdGhpcy5xbXNja0RhdGEuYXBpVXJsLFxyXG4gICAgICAgICAgICBMQU5HOiB0aGlzLkxBTkcsXHJcbiAgICAgICAgICAgIGltYWdlVXBsb2FkVHlwZXNcclxuICAgICAgICB9O1xyXG4gICAgICAgIGVkaXRvci5wbHVnaW5zLmdldChcIkZpbGVSZXBvc2l0b3J5XCIpLmNyZWF0ZVVwbG9hZEFkYXB0ZXIgPSAobG9hZGVyKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUW1zVXBsb2FkQWRhcHRlcihsb2FkZXIsIGNvbmZpZyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZWRpdG9yLnVpXHJcbiAgICAgICAgICAgIC5nZXRFZGl0YWJsZUVsZW1lbnQoKVxyXG4gICAgICAgICAgICAucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoXHJcbiAgICAgICAgICAgICAgICBlZGl0b3IudWkudmlldy50b29sYmFyLmVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICBlZGl0b3IudWkuZ2V0RWRpdGFibGVFbGVtZW50KClcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gQXBwZWQgV29yZGNvdW50IHRvIENLZWRpdG9yXHJcbiAgICAgICAgZWRpdG9yLnBsdWdpbnMuZ2V0KFwiV29yZENvdW50XCIpLm9uKFwidXBkYXRlXCIsIChldnQsIHN0YXRzKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIFByaW50cyB0aGUgY3VycmVudCBjb250ZW50IHN0YXRpc3RpY3MuXHJcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzQm94ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNcIiArIHRoaXMuZWRpdG9ySWQgKyBcIiAud29yZGNvdW50LWNvbnRlbnRcIik7XHJcbiAgICAgICAgICAgIGlmICghIXdvcmRzQm94KSB7XHJcbiAgICAgICAgICAgICAgICB3b3Jkc0JveC50ZXh0Q29udGVudCA9IGAke3RoaXMuTEFORy5RTVNDS0VESVRPUi5XT1JEU306ICR7c3RhdHMud29yZHN9IC8gJHt0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQ0hBUkFDVEVSU306ICR7c3RhdHMuY2hhcmFjdGVyc31gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3NldEVkaXRvckluc3RhbmNlT2JzZXJ2ZXIodGhpcy5lZGl0b3JJZCk7XHJcbiAgICAgICAgdGhpcy5zZXRMYWJlbFRyYW5zbGF0ZUZvck5vbkRyb3Bkb3duVG9vbGJhckl0ZW1zKGVkaXRvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgdGVtcGxhdGUgLSBMb2FkIHRlbXBsYXRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0ZW1wbGF0ZUV2ZW50SGFuZGxpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogUU1TQ0tFZGl0b3JUZW1wbGF0ZSA9IG5ldyBRTVNDS0VkaXRvclRlbXBsYXRlKCk7XHJcbiAgICAgICAgZGF0YS5pZCA9IDA7XHJcbiAgICAgICAgZGF0YS5odG1sID0gdGhpcy5xbXNja0NvbnRlbnRJbnB1dDtcclxuICAgICAgICBkYXRhLmVkaXQgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JUZW1wbGF0ZUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogXCI2NTBweFwiLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IFwiNTQwcHhcIixcclxuICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGUuY29tcG9uZW50SW5zdGFuY2UuY2tFZGl0b3IgPSB0aGlzLmVkaXRvckluc3RhbmNlO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRET1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCB0ZW1wbGF0ZSAtIExvYWQgdGVtcGxhdGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGxvYWRUZW1wbGF0ZUV2ZW50SGFuZGxpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yTG9hZFRlbXBsYXRlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBcIjY1MHB4XCIsXHJcbiAgICAgICAgICAgIGhlaWdodDogXCI3MDBweFwiLFxyXG4gICAgICAgICAgICBkYXRhOiB7IGVuYWJsZUVkaXRUZW1wbGF0ZTogdGhpcy5xbXNja0RhdGEuZW5hYmxlVGVtcGxhdGUgfSxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0xPQURfVEVNUExBVEVfUExVR0lOX1JFU1AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogcmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuY2hvciAtIExpbmsgLSBJbWFnZSBtYXBwaW5nXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBsaW5rRXZlbnRIYW5kbGluZyhcclxuICAgICAgICBsaW5rLFxyXG4gICAgICAgIHFtc2NrQ29udGVudEZpZWxkcz8sXHJcbiAgICAgICAgcW1zY2tJc0dldEFuY2hvck1vcmVDb250ZW50P1xyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKGxpbmsuY2tlZGl0b3JJZCAhPSB0aGlzLmVkaXRvckluc3RhbmNlLmlkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yTGluaygpO1xyXG4gICAgICAgIGRhdGEgPSBsaW5rO1xyXG4gICAgICAgIGRhdGEuZWRpdG9yQ29udGVudCA9IHRoaXMucW1zY2tDb250ZW50SW5wdXQ7XHJcbiAgICAgICAgZGF0YS5tb2R1bGUgPSB0aGlzLnFtc2NrRGF0YS5tb2R1bGU7XHJcbiAgICAgICAgZGF0YS5lbnRpdHlJZCA9IHRoaXMucW1zY2tEYXRhLmVudGl0eUlkO1xyXG4gICAgICAgIGlmIChxbXNja0NvbnRlbnRGaWVsZHMgJiYgcW1zY2tJc0dldEFuY2hvck1vcmVDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGRhdGEucW1zY2tDb250ZW50RmllbGRzID0gcW1zY2tDb250ZW50RmllbGRzO1xyXG4gICAgICAgICAgICBkYXRhLnFtc2NrSXNHZXRBbmNob3JNb3JlQ29udGVudCA9IHFtc2NrSXNHZXRBbmNob3JNb3JlQ29udGVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkaWFsb2dUZW1wbGF0ZTtcclxuICAgICAgICBpZiAoIXRoaXMucW1zY2tQbHVnaW4uc2ltcGxlTW9kZSkge1xyXG4gICAgICAgICAgICBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JMaW5rQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogXCI2NTBweFwiLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjY2MHB4XCIsXHJcbiAgICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUW1zQ2tlZGl0b3JMaW5rU2ltcGxlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogXCI2NTBweFwiLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjIwMHB4XCIsXHJcbiAgICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBDdXN0b21FdmVudCh0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MSU5LX1BMVUdJTl9SRVNQLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiByZXN1bHRcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUb29sdGlwIG1hcHBpbmdcclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvb2x0aXBFdmVudEhhbmRsaW5nKHZhbHVlKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JUb29sdGlwKCk7XHJcbiAgICAgICAgZGF0YS50ZXh0ID0gdmFsdWUudGV4dDtcclxuICAgICAgICBkYXRhLmNvbnRlbnQgPSB2YWx1ZS5jb250ZW50O1xyXG4gICAgICAgIGRhdGEuY2tFZGl0b3IgPSB0aGlzLnFtc2NrUGx1Z2luLnBsdWdpbk9iamVjdDtcclxuXHJcbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yVG9vbHRpcENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogXCI2NTBweFwiLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IFwiNTU1cHhcIixcclxuICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX1RPT0xUSVBfUExVR0lOX1JFU1AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogcmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltYWdlTWFwIG1hcHBpbmdcclxuICAgICAqL1xyXG4gICAgcHVibGljIGltYWdlTWFwRXZlbnRIYW5kbGluZyh2YWx1ZSkge1xyXG4gICAgICAgIGxldCBkYXRhID0gbmV3IFFNU0NLRWRpdG9ySW1hZ2VNYXAoKTtcclxuICAgICAgICBkYXRhLm5hbWUgPSB2YWx1ZS5uYW1lO1xyXG4gICAgICAgIGRhdGEuYXJlYXMgPSB2YWx1ZS5hcmVhcztcclxuICAgICAgICBkYXRhLmltYWdlVXJsID0gdmFsdWUuaW1hZ2VVcmw7XHJcbiAgICAgICAgZGF0YS5pbWFnZVdpZHRoID0gdmFsdWUuaW1hZ2VXaWR0aDtcclxuICAgICAgICBkYXRhLmltYWdlSGVpZ2h0ID0gdmFsdWUuaW1hZ2VIZWlnaHQ7XHJcbiAgICAgICAgZGF0YS5tb2R1bGUgPSB0aGlzLnFtc2NrRGF0YS5tb2R1bGU7XHJcbiAgICAgICAgZGF0YS5lbnRpdHlJZCA9IHRoaXMucW1zY2tEYXRhLmVudGl0eUlkO1xyXG4gICAgICAgIGRhdGEuZWRpdG9yQ29udGVudCA9IHRoaXMucW1zY2tDb250ZW50SW5wdXQ7XHJcbiAgICAgICAgZGF0YS5saW5rSmF2YVNjcmlwdExpbmtzQWxsb3dlZCA9IHRoaXMucW1zY2tEYXRhLmxpbmtKYXZhU2NyaXB0TGlua3NBbGxvd2VkO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckltYWdlTWFwQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZS5jb21wb25lbnRJbnN0YW5jZS5ja0VkaXRvciA9IHRoaXMuZWRpdG9ySW5zdGFuY2U7XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19JTUFHRU1BUF9QTFVHSU5fUkVTUCxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiByZXN1bHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgIEJ1c2luZXNzIFByb2Nlc3MgTW9kZWwgYW5kIE5vdGF0aW9uXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGJwbW5FdmVudEhhbmRsaW5nKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IG5ldyBRTVNDS0VkaXRvckJwbW5EYXRhKCk7XHJcbiAgICAgICAgZGF0YS5pZCA9IGlkO1xyXG4gICAgICAgIGRhdGEubW9kdWxlID0gdGhpcy5xbXNja0RhdGEubW9kdWxlO1xyXG4gICAgICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLnFtc2NrRGF0YS5lbnRpdHlJZDtcclxuICAgICAgICBkYXRhLmVkaXRvckNvbnRlbnQgPSB0aGlzLnFtc2NrQ29udGVudElucHV0O1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckJwbW5Db21wb25lbnQsIHtcclxuICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxyXG4gICAgICAgICAgICBtYXhXaWR0aDogXCIxMDB2d1wiLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxyXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IFwiMTAwdndcIixcclxuICAgICAgICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JQTU5fUExVR0lOX1JFU1AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogcmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qXHJcbiAgICAgQWJvdXQgQ0tFZGl0b3JcclxuICAgKi9cclxuICAgIHB1YmxpYyBhYm91dENLRWRpdG9yRXZlbnRIYW5kbGluZyh2ZXJzaW9uOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JBYm91dENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogXCI1MDBweFwiLFxyXG4gICAgICAgICAgICBkYXRhOiB2ZXJzaW9uLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGUuY29tcG9uZW50SW5zdGFuY2UuY2tFZGl0b3IgPSB0aGlzLmVkaXRvckluc3RhbmNlO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4geyB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICBUb29sYmFyIHRvZ2dsZVxyXG4gIFxyXG4gICAgICBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQuXHJcbiAgICAgIFRyYWNraW5nIHN0YXR1cyBhbmQgcHJvZ3Jlc3Mgb2YgdGhlIGlzc3VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ja2VkaXRvci9ja2VkaXRvcjUvaXNzdWVzLzczODNcclxuICBcclxuICAgICAgLSBSZW5kZXIgYm90aCBkZWZhdWx0IHRvb2xiYXIgYW5kIHRvZ2dsZSB0b29sYmFyIGF0IGluaXQgdGltZVxyXG4gICAgICAtIFNldCBJRCBmb3IgdG9vbGJhciBpdGVtcyB1c2luZyBpbmRleDpcclxuICAgICAgICArIEZyb20gaW5kZXggMCB0byB0b29sYmFyTGVuZ3RoIC0gMSBpcyB0aGUgZGVmYXVsdCB0b29sYmFyXHJcbiAgICAgICAgKyBGcm9tIGluZGV4IHRvb2xiYXJMZW5ndGggb24gaXMgdGhlIHRvZ2dsZSB0b29sYmFyXHJcbiAgICAgIC0gU2hvdy9oaWRlIGRlZmF1bHQgYW5kIHRvZ2dsZSB0b29sYmFyIGJ5IHNldCBkaXNwbGF5IG5vbmUgdG8gY29ycmVzcG9uZGluZyB0b29sYmFyIGl0ZW1zIGJhc2VkIG9uIElEXHJcbiAgICAqL1xyXG4gICAgcHVibGljIHRvZ2dsZVRvb2xiYXJFdmVudEhhbmRsaW5nKCkge1xyXG4gICAgICAgIGNvbnN0IHFtc2NrZWRpdG9yID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xyXG4gICAgICAgIGNvbnN0IHRvZ2dsZUF0dHJpYnV0ZSA9ICdpc1RvZ2dsZVRvb2xiYXInO1xyXG4gICAgICAgIGNvbnN0IGNrZWRpdG9yVGFnID0gJ2NrZWRpdG9yJztcclxuXHJcbiAgICAgICAgaWYgKHFtc2NrZWRpdG9yKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVG9nZ2xlVG9vbGJhciA9XHJcbiAgICAgICAgICAgICAgICBxbXNja2VkaXRvci5nZXRBdHRyaWJ1dGUodG9nZ2xlQXR0cmlidXRlKSA9PSBcInRydWVcIjtcclxuICAgICAgICAgICAgaWYgKGlzVG9nZ2xlVG9vbGJhcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0VG9vbGJhclZpZXdNb2RlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgcW1zY2tlZGl0b3Iuc2V0QXR0cmlidXRlKHRvZ2dsZUF0dHJpYnV0ZSwgJ2ZhbHNlJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRUb29sYmFyVmlld01vZGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgcW1zY2tlZGl0b3Iuc2V0QXR0cmlidXRlKHRvZ2dsZUF0dHJpYnV0ZSwgJ3RydWUnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NldFRvb2xiYXJWaWV3TW9kZShzaG93VG9nZ2xlVG9vbGJhcjogYm9vbGVhbikge1xyXG4gICAgICAgIGNvbnN0IHRvb2xiYXJMZW5ndGggPSB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyPy5zcGxpdCgnLCcpLmxlbmd0aCB8fCAwO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICBJdGVtcyBpbiB0b29sYmFyIGFyZSBpbmRleGVkOlxyXG4gICAgICAgICAgLSBGcm9tIGluZGV4IDAgdG8gdG9vbGJhckxlbmd0aCAtIDEgaXMgdGhlIGRlZmF1bHQgdG9vbGJhclxyXG4gICAgICAgICAgLSBGcm9tIGluZGV4IHRvb2xiYXJMZW5ndGggb24gaXMgdGhlIHRvZ2dsZSB0b29sYmFyXHJcbiAgICAgICAgKi9cclxuICAgICAgICAkKGAjJHt0aGlzLnRvb2xiYXJJdGVtUHJlZml4SWR9JHt0b29sYmFyTGVuZ3RoIC0gMX1gKT8ucHJldkFsbCgpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IHNob3dUb2dnbGVUb29sYmFyID8gJ25vbmUnIDogJyc7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgJChgIyR7dGhpcy50b29sYmFySXRlbVByZWZpeElkfSR7dG9vbGJhckxlbmd0aCAtIDF9YCk/LmNzcygnZGlzcGxheScsIHNob3dUb2dnbGVUb29sYmFyID8gJ25vbmUnIDogJycpO1xyXG5cclxuICAgICAgICAkKGAjJHt0aGlzLnRvb2xiYXJJdGVtUHJlZml4SWR9JHt0b29sYmFyTGVuZ3RoIC0gMX1gKT8ubmV4dEFsbCgpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IHNob3dUb2dnbGVUb29sYmFyID8gJycgOiAnbm9uZSc7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZsb3djaGFydFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmxvd2NoYXJ0RXZlbnRIYW5kbGluZyhpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yRmxvd2NoYXJ0Q29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBcIjg5dndcIixcclxuICAgICAgICAgICAgbWF4V2lkdGg6IFwiMTAwdndcIixcclxuICAgICAgICAgICAgaGVpZ2h0OiBcIjcyNXB4XCIsXHJcbiAgICAgICAgICAgIG1heEhlaWdodDogXCIxMDB2d1wiLFxyXG4gICAgICAgICAgICBkYXRhOiBpZCxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBDdXN0b21FdmVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0ZMT1dDSEFSVF9QTFVHSU5fUkVTUCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHJlc3VsdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQnJvd3NlIFZpZGVvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBicm93c2VWaWRlb0V2ZW50SGFuZGxpbmcodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRVcGxvYWRWaWRlb0xpc3QoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmlkZW9zID0gcmVzcG9uc2UgfHwgW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dTZWxlY3RGb2xkZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyZWFPZkN1cnJlbnRQcm9jZXNzOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dDaGVja0JveDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd011bHRpcGxlQ2hlY2s6IHRoaXMucW1zY2tEYXRhLnVwbG9hZFZpZGVvQWxsb3dNdWx0aXBsZUNoZWNrLFxyXG4gICAgICAgICAgICAgICAgICAgIG9ubHlDaGVja0JveEZvckNoaWxkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZUlkOiBEYXRhVHlwZS5kb2N1bWVudCxcclxuICAgICAgICAgICAgICAgICAgICBvcGVuSWNvbjogXCJmb2xkZXJfb3BlblwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZW5JY29uQ29sb3I6IFwiIzE5NTRBOVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlSWNvbjogXCJmb2xkZXJfZmlsbGVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VJY29uQ29sb3I6IFwiIzRhY2FmZlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1JY29uOiBcImluc2VydF9kcml2ZV9maWxlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbUljb25QYXRoOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1JY29uQmFzZTY0OiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlbGVjdGVkTm9kZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBleHBhbmRBbGw6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YTogUG9wdXBEYXRhID0gbmV3IFBvcHVwRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgZGF0YS5tb2R1bGVJZCA9IDI7XHJcbiAgICAgICAgICAgICAgICBkYXRhLm1vZHVsZU5hbWUgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU0VMRUNUX1ZJREVPX0ZST01fQVJDSElWRTtcclxuICAgICAgICAgICAgICAgIGRhdGEubW9kdWxlVXBsb2FkSW1hZ2VOYW1lID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SLlNFTEVDVF9WSURFT19JTUFHRTtcclxuICAgICAgICAgICAgICAgIGRhdGEubW9kdWxlVXBsb2FkRmlsZU5hbWUgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQUREX0FfRklMRTtcclxuXHJcbiAgICAgICAgICAgICAgICBkYXRhLnRyZWVEYXRhMSA9IHZpZGVvcy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290SWQ6IGl0ZW0ucm9vdElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdE5hbWU6IGl0ZW0ucm9vdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yk5hbWU6IGl0ZW0uc3ViTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJZDogaXRlbS5jaGlsZElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE5hbWU6IGl0ZW0uY2hpbGROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNJZDogaXRlbS5zdGF0dXNJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUlkOiBpdGVtLmRpc3BsYXlJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGU6IGl0ZW0uY29udGVudFR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXRlbS51cmwsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgZGF0YS50cmVlRGF0YTIgPSBbXTtcclxuICAgICAgICAgICAgICAgIGRhdGEudHJlZUNvbmZpZzEgPSBjb25maWc7XHJcbiAgICAgICAgICAgICAgICBkYXRhLmNhblVwbG9hZEltYWdlID0gdmlkZW9zLmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGRhdGEuY2FuVXBsb2FkVmlkZW8gPSB0aGlzLnFtc2NrRGF0YS52aWRlb1VwbG9hZE1vZGUgPT09IFZpZGVvVXBsb2FkTW9kZS5BbGxvd1VwbG9hZDtcclxuICAgICAgICAgICAgICAgIGRhdGEubWF4VmlkZW9UaHVtYm5haWxTaXplS0IgPSB0aGlzLnFtc2NrRGF0YS5tYXhWaWRlb1RodW1ibmFpbFNpemVLQjtcclxuICAgICAgICAgICAgICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLnFtc2NrRGF0YS5lbnRpdHlJZDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUmVsYXRlZFBvcHVwQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IFwiNDUwcHhcIixcclxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogXCI4MDBweFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogXCI2MjBweFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogXCJxbXNja2VkaXRvci1icm93c2UtdmlkZW8tcG9wdXBcIixcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaEJveCA9IHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIi5xbXNja2VkaXRvci1icm93c2UtdmlkZW8tcG9wdXAgI3Ftc2xpYl9yZWxhdGVkX3BvcHVwX3NlYXJjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoQm94KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEJveC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXF1ZXN0VXBsb2FkVmlkZW9VcmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHMucHVzaChyZXN1bHQucmVxdWVzdFVwbG9hZFZpZGVvVXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkcyA9IHJlc3VsdC5jaGVja2VkTm9kZUxpc3QucmVkdWNlKChyZXN1bHQsIGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbaXRlbS5pZC50b1N0cmluZygpXSA9IGl0ZW0uaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHt9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybHMgPSB2aWRlb3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChpKSA9PiBpLmNoaWxkSWQgJiYgISFpZHNbaS5jaGlsZElkLnRvU3RyaW5nKCldKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGkpID0+IGkudXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlJPV1NFX1ZJREVPX1JFU1AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGRldGFpbDogeyB1cmxzOiB1cmxzLCB0aHVtYm5haWxVcmw6IHJlc3VsdC5pbWFnZVJlbGF0aXZlVXJsIH0gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zZXRFZGl0b3JJbnN0YW5jZU9ic2VydmVyKGVkaXRvcklkOiBzdHJpbmcpIHtcclxuICAgICAgICAkKGRvY3VtZW50KS5vZmYoJ0RPTU5vZGVJbnNlcnRlZCcpLm9uKCdET01Ob2RlSW5zZXJ0ZWQnLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNUb29sYmFySXRlbXNJZFNldCAmJiAkKGUudGFyZ2V0KS5oYXMoJyMnICsgZWRpdG9ySWQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRJZEZvclRvb2xiYXJJdGVtcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0SWRGb3JUb29sYmFySXRlbXMoKSB7XHJcbiAgICAgICAgY29uc3QgdG9vbGJhckl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgJHt0aGlzLmVkaXRvcklkID8gJyMnICsgdGhpcy5lZGl0b3JJZCA6ICcnfSAuY2stdG9vbGJhcl9faXRlbXNgKT8uY2hpbGRyZW4gfHwgW107XHJcbiAgICAgICAgaWYgKCF0b29sYmFySXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1Rvb2xiYXJJdGVtc0lkU2V0ID0gdHJ1ZTtcclxuICAgICAgICAoQXJyYXkuZnJvbSh0b29sYmFySXRlbXMpIGFzIEhUTUxFbGVtZW50W10pLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0uaWQgPSBgJHt0aGlzLnRvb2xiYXJJdGVtUHJlZml4SWR9JHtpbmRleH1gO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnRvZ2dsZVRvb2xiYXJFdmVudEhhbmRsaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRMYWJlbFRyYW5zbGF0ZUZvck5vbkRyb3Bkb3duVG9vbGJhckl0ZW1zKGVkaXRvcikge1xyXG4gICAgICAgIGxldCBhbGxJdGVtT25Ub29sYmFyID0gZWRpdG9yLnVpLnZpZXcudG9vbGJhcj8uaXRlbXM/Ll9pdGVtcztcclxuICAgICAgICBhbGxJdGVtT25Ub29sYmFyLmZvckVhY2goKGVsKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlbC5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgZWwubGFiZWwgPSB0aGlzLnRyYW5zbGF0ZUNLRWRpdG9yKGVsLmxhYmVsKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWwuYnV0dG9uVmlldyAmJiBlbC5idXR0b25WaWV3LmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICBlbC5idXR0b25WaWV3LmxhYmVsID0gdGhpcy50cmFuc2xhdGVDS0VkaXRvcihlbC5idXR0b25WaWV3LmxhYmVsKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICAgIHByaXZhdGUgdHJhbnNsYXRlQ0tFZGl0b3IobGFiZWw6IHN0cmluZykge1xyXG4gICAgICAgIHN3aXRjaCAobGFiZWwudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjYXNlICgnZm9udCBzaXplJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkZPTlRfU0laRTtcclxuICAgICAgICAgICAgY2FzZSAoJ2ZvbnQgZmFtaWx5Jyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkZPTlRfRkFNSUxZO1xyXG4gICAgICAgICAgICBjYXNlICgnZm9udCBjb2xvcicpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5GT05UX0NPTE9SO1xyXG4gICAgICAgICAgICBjYXNlICgnZm9udCBiYWNrZ3JvdW5kIGNvbG9yJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkZPTlRfQkFDS0dST1VORF9DT0xPUjtcclxuICAgICAgICAgICAgY2FzZSAoJ2JvbGQnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQk9MRDtcclxuICAgICAgICAgICAgY2FzZSAoJ2l0YWxpYycpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5JVEFMSUM7XHJcbiAgICAgICAgICAgIGNhc2UgKCd1bmRlcmxpbmUnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuVU5ERVJMSU5FO1xyXG4gICAgICAgICAgICBjYXNlICgnc3RyaWtldGhyb3VnaCcpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5TVFJJS0VUSFJPVUdIO1xyXG4gICAgICAgICAgICBjYXNlICgnaG9yaXpvbnRhbCBsaW5lJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkhPUklaT05UQUxfTElORTtcclxuICAgICAgICAgICAgY2FzZSAoJ3BhZ2UgYnJlYWsnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuUEFHRV9CUkVBSztcclxuICAgICAgICAgICAgY2FzZSAoJ3RleHQgYWxpZ25tZW50Jyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLlRFWFRfQUxJR05NRU5UO1xyXG4gICAgICAgICAgICBjYXNlICgnYnVsbGV0ZWQgbGlzdCcpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5CVUxMRVRFRF9MSVNUO1xyXG4gICAgICAgICAgICBjYXNlICgnbnVtYmVyZWQgbGlzdCcpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5OVU1CRVJFRF9MSVNUO1xyXG4gICAgICAgICAgICBjYXNlICgnZGVjcmVhc2UgaW5kZW50Jyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkRFQ1JFQVNFX0lOREVOVDtcclxuICAgICAgICAgICAgY2FzZSAoJ2luY3JlYXNlIGluZGVudCcpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5JTkNSRUFTRV9JTkRFTlQ7XHJcbiAgICAgICAgICAgIGNhc2UgKCdzdWJzY3JpcHQnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU1VCU0NSSVBUO1xyXG4gICAgICAgICAgICBjYXNlICgnc3VwZXJzY3JpcHQnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU1VQRVJTQ1JJUFQ7XHJcbiAgICAgICAgICAgIGNhc2UgKCd1bmRvJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLlVORE87XHJcbiAgICAgICAgICAgIGNhc2UgKCdyZWRvJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLlJFRE87XHJcbiAgICAgICAgICAgIGNhc2UgKCdzcGVjaWFsIGNoYXJhY3RlcnMnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU1BFQ0lBTF9DSEFSQUNURVJTO1xyXG4gICAgICAgICAgICBjYXNlICgnYmxvY2sgcXVvdGUnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQkxPQ0tRVU9URTtcclxuICAgICAgICAgICAgY2FzZSAoJ2luc2VydCBpbWFnZScpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5JTlNFUlRfSU1BR0U7XHJcbiAgICAgICAgICAgIGNhc2UgKCdpbnNlcnQgbWVkaWEnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuSU5TRVJUX01FRElBO1xyXG4gICAgICAgICAgICBjYXNlICgnYnJvd3NlIHZpZGVvJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkJST1dTRV9WSURFTztcclxuICAgICAgICAgICAgY2FzZSAoJ2luc2VydCB0YWJsZScpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5JTlNFUlRfVEFCTEU7XHJcbiAgICAgICAgICAgIGNhc2UgKCdhbmNob3InKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQU5DSE9SO1xyXG4gICAgICAgICAgICBjYXNlICgndG9vbHRpcCcpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5UT09MVElQO1xyXG4gICAgICAgICAgICBjYXNlICgndGltZXN0YW1wJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLlRJTUVTVEFNUDtcclxuICAgICAgICAgICAgY2FzZSAoJ2FkZCB0ZW1wbGF0ZScpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5BRERfVEVNUExBVEU7XHJcbiAgICAgICAgICAgIGNhc2UgKCd0ZW1wbGF0ZXMnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuVEVNUExBVEVTO1xyXG4gICAgICAgICAgICBjYXNlICgncmVtb3ZlIGZvcm1hdCcpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5SRU1PVkVfRk9STUFUO1xyXG4gICAgICAgICAgICBjYXNlICgnbGluaycpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5MSU5LO1xyXG4gICAgICAgICAgICBjYXNlICgnZmxvd2NoYXJ0Jyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkZMT1dDSEFSVDtcclxuICAgICAgICAgICAgY2FzZSAoJ2J1c2luZXNzIHByb2Nlc3MgbW9kZWwgYW5kIG5vdGF0aW9uJyk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlFNU0NLRURJVE9SLkJQTU47XHJcbiAgICAgICAgICAgIGNhc2UgKCdhYm91dCBja2VkaXRvcicpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5BQk9VVF9DS0VESVRPUjtcclxuICAgICAgICAgICAgY2FzZSAoJ2NyZWF0ZSB0YWJsZSBvZiBjb250ZW50cycpOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5RTVNDS0VESVRPUi5DUkVBVEVfVEFCTEVfT0ZfQ09OVEVOVFM7XHJcbiAgICAgICAgICAgIGNhc2UgKCdzb3VyY2UnKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU09VUkNFO1xyXG4gICAgICAgICAgICBjYXNlICgndG9nZ2xlIHRvb2xiYXInKTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuVE9HR0xFX1RPT0xCQVI7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==