@saritasa/crm-delmar-core-sdk 0.0.189 → 0.0.191

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/README.md +2 -2
  2. package/api/export-job-reports-departments-api.service.d.ts +1 -1
  3. package/api/export-job-reports-departments-api.serviceInterface.d.ts +1 -1
  4. package/api/export-job-reports-users-api.service.d.ts +1 -1
  5. package/api/export-job-reports-users-api.serviceInterface.d.ts +1 -1
  6. package/api/export-jobs-api.service.d.ts +1 -1
  7. package/api/export-jobs-api.serviceInterface.d.ts +1 -1
  8. package/api/export-projects-api.service.d.ts +1 -1
  9. package/api/export-projects-api.serviceInterface.d.ts +1 -1
  10. package/api/export-tasks-api.service.d.ts +1 -1
  11. package/api/export-tasks-api.serviceInterface.d.ts +1 -1
  12. package/api/export-user-periods-api.service.d.ts +1 -1
  13. package/api/export-user-periods-api.serviceInterface.d.ts +1 -1
  14. package/api/export-users-api.service.d.ts +1 -1
  15. package/api/export-users-api.serviceInterface.d.ts +1 -1
  16. package/esm2022/api/export-job-reports-departments-api.service.mjs +1 -1
  17. package/esm2022/api/export-job-reports-departments-api.serviceInterface.mjs +1 -1
  18. package/esm2022/api/export-job-reports-users-api.service.mjs +1 -1
  19. package/esm2022/api/export-job-reports-users-api.serviceInterface.mjs +1 -1
  20. package/esm2022/api/export-jobs-api.service.mjs +1 -1
  21. package/esm2022/api/export-jobs-api.serviceInterface.mjs +1 -1
  22. package/esm2022/api/export-projects-api.service.mjs +1 -1
  23. package/esm2022/api/export-projects-api.serviceInterface.mjs +1 -1
  24. package/esm2022/api/export-tasks-api.service.mjs +1 -1
  25. package/esm2022/api/export-tasks-api.serviceInterface.mjs +1 -1
  26. package/esm2022/api/export-user-periods-api.service.mjs +1 -1
  27. package/esm2022/api/export-user-periods-api.serviceInterface.mjs +1 -1
  28. package/esm2022/api/export-users-api.service.mjs +1 -1
  29. package/esm2022/api/export-users-api.serviceInterface.mjs +1 -1
  30. package/fesm2022/saritasa-crm-delmar-core-sdk.mjs.map +1 -1
  31. package/package.json +1 -1
@@ -418,4 +418,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
418
418
  }] }, { type: i2.Configuration, decorators: [{
419
419
  type: Optional
420
420
  }] }] });
421
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXVzZXItcGVyaW9kcy1hcGkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwaS9leHBvcnQtdXNlci1wZXJpb2RzLWFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBRUwsV0FBVyxFQUNYLFVBQVUsRUFJVixXQUFXLEdBQ1osTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUE4QnRELGFBQWE7QUFDYixPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQVlqRCxNQUFNLE9BQU8sMkJBQTJCO0lBUzFCO0lBTkYsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNqQixjQUFjLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNuQyxhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUNwQyxPQUFPLENBQXFCO0lBRW5DLFlBQ1ksVUFBc0IsRUFDRCxRQUEyQixFQUM5QyxhQUE0QjtRQUY5QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBSWhDLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDckMsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNwRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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LEdBQUcsTUFBTSxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sSUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUMvRCxDQUFDO2dCQUNELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDekIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFlBQVksR0FBRyxvQ0FBb0MsQ0FBQztRQUN4RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUM1QixNQUFNLEVBQ04sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxZQUFZLEVBQUUsRUFDL0M7WUFDRSxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLElBQUksRUFBRSwyQ0FBMkM7WUFDakQsTUFBTSxFQUFFLHVCQUF1QjtZQUMvQixZQUFZLEVBQU8sYUFBYTtZQUNoQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlO1lBQ25ELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGFBQWEsRUFBRSxxQkFBcUI7WUFDcEMsY0FBYyxFQUFFLGNBQWM7U0FDL0IsQ0FDRixDQUFDO0lBQ0osQ0FBQzt3R0F4d0JVLDJCQUEyQiw0Q0FVaEIsU0FBUzs0R0FWcEIsMkJBQTJCLGNBRjFCLE1BQU07OzRGQUVQLDJCQUEyQjtrQkFIdkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVdJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsU0FBUzs7MEJBQzVCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlbG1hciBBcGlcbiAqXG4gKlxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIEh0dHBDbGllbnQsXG4gIEh0dHBIZWFkZXJzLFxuICBIdHRwUGFyYW1zLFxuICBIdHRwUmVzcG9uc2UsXG4gIEh0dHBFdmVudCxcbiAgSHR0cFBhcmFtZXRlckNvZGVjLFxuICBIdHRwQ29udGV4dCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMgfSBmcm9tIFwiLi4vZW5jb2RlclwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MDFEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U0MDEuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDA0RHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNDA0LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQwNUR0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTQwNS5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MDZEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U0MDYuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDE1RHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNDE1LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTUwMER0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTUwMC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEV4cG9ydEpvYkR0byB9IGZyb20gXCIuLi9tb2RlbC9leHBvcnQtam9iLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXhwb3J0VXNlclBlcmlvZHNDYW5jZWxDcmVhdGVFcnJvclJlc3BvbnNlNDAwRHRvIH0gZnJvbSBcIi4uL21vZGVsL2V4cG9ydC11c2VyLXBlcmlvZHMtY2FuY2VsLWNyZWF0ZS1lcnJvci1yZXNwb25zZTQwMC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEV4cG9ydFVzZXJQZXJpb2RzTGlzdEVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXhwb3J0LXVzZXItcGVyaW9kcy1saXN0LWVycm9yLXJlc3BvbnNlNDAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXhwb3J0VXNlclBlcmlvZHNSZXRyaWV2ZUVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXhwb3J0LXVzZXItcGVyaW9kcy1yZXRyaWV2ZS1lcnJvci1yZXNwb25zZTQwMC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEV4cG9ydFVzZXJQZXJpb2RzU3RhcnRDcmVhdGVFcnJvclJlc3BvbnNlNDAwRHRvIH0gZnJvbSBcIi4uL21vZGVsL2V4cG9ydC11c2VyLXBlcmlvZHMtc3RhcnQtY3JlYXRlLWVycm9yLXJlc3BvbnNlNDAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgUGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0byB9IGZyb20gXCIuLi9tb2RlbC9wYWdpbmF0ZWQtZXhwb3J0LWpvYi1saXN0LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVXNlclBlcmlvZFJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0byB9IGZyb20gXCIuLi9tb2RlbC91c2VyLXBlcmlvZC1yZXNvdXJjZS1jcmVhdGUtZXhwb3J0LWpvYi1yZXF1ZXN0LmR0b1wiO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBCQVNFX1BBVEgsIENPTExFQ1RJT05fRk9STUFUUyB9IGZyb20gXCIuLi92YXJpYWJsZXNcIjtcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHtcbiAgRXhwb3J0VXNlclBlcmlvZHNBcGlTZXJ2aWNlSW50ZXJmYWNlLFxuICBFeHBvcnRVc2VyUGVyaW9kc0NhbmNlbENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gIEV4cG9ydFVzZXJQZXJpb2RzTGlzdFJlcXVlc3RQYXJhbXMsXG4gIEV4cG9ydFVzZXJQZXJpb2RzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICBFeHBvcnRVc2VyUGVyaW9kc1N0YXJ0Q3JlYXRlUmVxdWVzdFBhcmFtcyxcbn0gZnJvbSBcIi4vZXhwb3J0LXVzZXItcGVyaW9kcy1hcGkuc2VydmljZUludGVyZmFjZVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBFeHBvcnRVc2VyUGVyaW9kc0FwaVNlcnZpY2VcbiAgaW1wbGVtZW50cyBFeHBvcnRVc2VyUGVyaW9kc0FwaVNlcnZpY2VJbnRlcmZhY2VcbntcbiAgcHJvdGVjdGVkIGJhc2VQYXRoID0gXCJcIjtcbiAgcHVibGljIGRlZmF1bHRIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gIHB1YmxpYyBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcbiAgcHVibGljIGVuY29kZXI6IEh0dHBQYXJhbWV0ZXJDb2RlYztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIEBPcHRpb25hbCgpIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24sXG4gICkge1xuICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgZmlyc3RCYXNlUGF0aCA9IEFycmF5LmlzQXJyYXkoYmFzZVBhdGgpID8gYmFzZVBhdGhbMF0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoZmlyc3RCYXNlUGF0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgYmFzZVBhdGggPSBmaXJzdEJhc2VQYXRoO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGJhc2VQYXRoICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGJhc2VQYXRoID0gdGhpcy5iYXNlUGF0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuICAgIH1cbiAgICB0aGlzLmVuY29kZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlciB8fCBuZXcgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjKCk7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zKFxuICAgIGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsXG4gICAgdmFsdWU6IGFueSxcbiAgICBrZXk/OiBzdHJpbmcsXG4gICk6IEh0dHBQYXJhbXMge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBEYXRlID09PSBmYWxzZSkge1xuICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlLCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKFxuICAgIGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsXG4gICAgdmFsdWU/OiBhbnksXG4gICAga2V5Pzogc3RyaW5nLFxuICApOiBIdHRwUGFyYW1zIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICh2YWx1ZSBhcyBhbnlbXSkuZm9yRWFjaChcbiAgICAgICAgICAoZWxlbSkgPT5cbiAgICAgICAgICAgIChodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgZWxlbSwga2V5KSksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAodmFsdWUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIERhdGVcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKFxuICAgICAgICAgIChrKSA9PlxuICAgICAgICAgICAgKGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShcbiAgICAgICAgICAgICAgaHR0cFBhcmFtcyxcbiAgICAgICAgICAgICAgdmFsdWVba10sXG4gICAgICAgICAgICAgIGtleSAhPSBudWxsID8gYCR7a2V5fS4ke2t9YCA6IGssXG4gICAgICAgICAgICApKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKFwia2V5IG1heSBub3QgYmUgbnVsbCBpZiB2YWx1ZSBpcyBub3Qgb2JqZWN0IG9yIGFycmF5XCIpO1xuICAgIH1cbiAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgZXhwb3J0IGpvYiB0aGF0IGlzIGluIHByb2dyZXNzLlxuICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIGV4cG9ydFVzZXJQZXJpb2RzQ2FuY2VsQ3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBFeHBvcnRVc2VyUGVyaW9kc0NhbmNlbENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxFeHBvcnRKb2JEdG8+O1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNDYW5jZWxDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJQZXJpb2RzQ2FuY2VsQ3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJyZXNwb25zZVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2VyUGVyaW9kc0NhbmNlbENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlclBlcmlvZHNDYW5jZWxDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2VyUGVyaW9kc0NhbmNlbENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlclBlcmlvZHNDYW5jZWxDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU6IGFueSA9IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaWQgPSByZXF1ZXN0UGFyYW1ldGVycz8uaWQ7XG4gICAgaWYgKGlkID09PSBudWxsIHx8IGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgaWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBleHBvcnRVc2VyUGVyaW9kc0NhbmNlbENyZWF0ZS5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLy8gYXV0aGVudGljYXRpb24gKGNvb2tpZUF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJjb29raWVBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICB9XG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoand0QXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImp3dEF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICAgIFwiQmVhcmVyIFwiICsgbG9jYWxWYXJDcmVkZW50aWFsLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICB9XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQWNjZXB0XCIsXG4gICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCByZXNwb25zZVR5cGVfOiBcInRleHRcIiB8IFwianNvblwiIHwgXCJibG9iXCIgPSBcImpzb25cIjtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKFwidGV4dFwiKSkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJ0ZXh0XCI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJqc29uXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJibG9iXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3YxL2V4cG9ydC11c2VyLXBlcmlvZHMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oeyBuYW1lOiBcImlkXCIsIHZhbHVlOiBpZCwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcIm51bWJlclwiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWQgfSl9L2NhbmNlbC9gO1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxFeHBvcnRKb2JEdG8+KFxuICAgICAgXCJwb3N0XCIsXG4gICAgICBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgIHtcbiAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgVmlld1NldCBBUEkgZm9yIFVzZXJQZXJpb2QgbW9kZWwuXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAqL1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNMaXN0KFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogRXhwb3J0VXNlclBlcmlvZHNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPFBhZ2luYXRlZEV4cG9ydEpvYkxpc3REdG8+O1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNMaXN0KFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogRXhwb3J0VXNlclBlcmlvZHNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJyZXNwb25zZVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8UGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0bz4+O1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNMaXN0KFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogRXhwb3J0VXNlclBlcmlvZHNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJldmVudHNcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFBhZ2luYXRlZEV4cG9ydEpvYkxpc3REdG8+PjtcbiAgcHVibGljIGV4cG9ydFVzZXJQZXJpb2RzTGlzdChcbiAgICByZXF1ZXN0UGFyYW1ldGVycz86IEV4cG9ydFVzZXJQZXJpb2RzTGlzdFJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZTogYW55ID0gXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBsaW1pdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5saW1pdDtcbiAgICBjb25zdCBvZmZzZXQgPSByZXF1ZXN0UGFyYW1ldGVycz8ub2Zmc2V0O1xuICAgIGNvbnN0IG9yZGVyaW5nID0gcmVxdWVzdFBhcmFtZXRlcnM/Lm9yZGVyaW5nO1xuICAgIGNvbnN0IHNlYXJjaCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zZWFyY2g7XG5cbiAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7IGVuY29kZXI6IHRoaXMuZW5jb2RlciB9KTtcbiAgICBpZiAobGltaXQgIT09IHVuZGVmaW5lZCAmJiBsaW1pdCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+bGltaXQsXG4gICAgICAgIFwibGltaXRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgIT09IHVuZGVmaW5lZCAmJiBvZmZzZXQgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55Pm9mZnNldCxcbiAgICAgICAgXCJvZmZzZXRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcmRlcmluZyAhPT0gdW5kZWZpbmVkICYmIG9yZGVyaW5nICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5vcmRlcmluZyxcbiAgICAgICAgXCJvcmRlcmluZ1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHNlYXJjaCAhPT0gdW5kZWZpbmVkICYmIHNlYXJjaCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+c2VhcmNoLFxuICAgICAgICBcInNlYXJjaFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoY29va2llQXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImNvb2tpZUF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgIH1cblxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChqd3RBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiand0QXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkF1dGhvcml6YXRpb25cIixcbiAgICAgICAgXCJCZWFyZXIgXCIgKyBsb2NhbFZhckNyZWRlbnRpYWwsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcImFwcGxpY2F0aW9uL2pzb25cIl07XG4gICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgIH1cbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBY2NlcHRcIixcbiAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHJlc3BvbnNlVHlwZV86IFwidGV4dFwiIHwgXCJqc29uXCIgfCBcImJsb2JcIiA9IFwianNvblwiO1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoXCJ0ZXh0XCIpKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcInRleHRcIjtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKVxuICAgICAgKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImpzb25cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImJsb2JcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvdjEvZXhwb3J0LXVzZXItcGVyaW9kcy9gO1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxQYWdpbmF0ZWRFeHBvcnRKb2JMaXN0RHRvPihcbiAgICAgIFwiZ2V0XCIsXG4gICAgICBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgIHtcbiAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgVmlld1NldCBBUEkgZm9yIFVzZXJQZXJpb2QgbW9kZWwuXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAqL1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlclBlcmlvZHNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxFeHBvcnRKb2JEdG8+O1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlclBlcmlvZHNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwicmVzcG9uc2VcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEV4cG9ydEpvYkR0bz4+O1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlclBlcmlvZHNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiZXZlbnRzXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxFeHBvcnRKb2JEdG8+PjtcbiAgcHVibGljIGV4cG9ydFVzZXJQZXJpb2RzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJQZXJpb2RzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU6IGFueSA9IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaWQgPSByZXF1ZXN0UGFyYW1ldGVycz8uaWQ7XG4gICAgaWYgKGlkID09PSBudWxsIHx8IGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgaWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBleHBvcnRVc2VyUGVyaW9kc1JldHJpZXZlLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoY29va2llQXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImNvb2tpZUF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgIH1cblxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChqd3RBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiand0QXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkF1dGhvcml6YXRpb25cIixcbiAgICAgICAgXCJCZWFyZXIgXCIgKyBsb2NhbFZhckNyZWRlbnRpYWwsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcImFwcGxpY2F0aW9uL2pzb25cIl07XG4gICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgIH1cbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBY2NlcHRcIixcbiAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHJlc3BvbnNlVHlwZV86IFwidGV4dFwiIHwgXCJqc29uXCIgfCBcImJsb2JcIiA9IFwianNvblwiO1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoXCJ0ZXh0XCIpKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcInRleHRcIjtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKVxuICAgICAgKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImpzb25cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImJsb2JcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvdjEvZXhwb3J0LXVzZXItcGVyaW9kcy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7IG5hbWU6IFwiaWRcIiwgdmFsdWU6IGlkLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwibnVtYmVyXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZCB9KX0vYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8RXhwb3J0Sm9iRHRvPihcbiAgICAgIFwiZ2V0XCIsXG4gICAgICBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgIHtcbiAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSByZXF1ZXN0IGRhdGEgYW5kIHN0YXJ0IEV4cG9ydEpvYi5cbiAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICovXG4gIHB1YmxpYyBleHBvcnRVc2VyUGVyaW9kc1N0YXJ0Q3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBFeHBvcnRVc2VyUGVyaW9kc1N0YXJ0Q3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEV4cG9ydEpvYkR0bz47XG4gIHB1YmxpYyBleHBvcnRVc2VyUGVyaW9kc1N0YXJ0Q3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBFeHBvcnRVc2VyUGVyaW9kc1N0YXJ0Q3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJyZXNwb25zZVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2VyUGVyaW9kc1N0YXJ0Q3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBFeHBvcnRVc2VyUGVyaW9kc1N0YXJ0Q3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJldmVudHNcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEV4cG9ydEpvYkR0bz4+O1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNTdGFydENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlclBlcmlvZHNTdGFydENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZTogYW55ID0gXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCB1c2VyUGVyaW9kUmVzb3VyY2VDcmVhdGVFeHBvcnRKb2JSZXF1ZXN0RHRvID1cbiAgICAgIHJlcXVlc3RQYXJhbWV0ZXJzPy51c2VyUGVyaW9kUmVzb3VyY2VDcmVhdGVFeHBvcnRKb2JSZXF1ZXN0RHRvO1xuICAgIGlmIChcbiAgICAgIHVzZXJQZXJpb2RSZXNvdXJjZUNyZWF0ZUV4cG9ydEpvYlJlcXVlc3REdG8gPT09IG51bGwgfHxcbiAgICAgIHVzZXJQZXJpb2RSZXNvdXJjZUNyZWF0ZUV4cG9ydEpvYlJlcXVlc3REdG8gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlJlcXVpcmVkIHBhcmFtZXRlciB1c2VyUGVyaW9kUmVzb3VyY2VDcmVhdGVFeHBvcnRKb2JSZXF1ZXN0RHRvIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZXhwb3J0VXNlclBlcmlvZHNTdGFydENyZWF0ZS5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGlkID0gcmVxdWVzdFBhcmFtZXRlcnM/LmlkO1xuICAgIGNvbnN0IGlkSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uaWRJbjtcbiAgICBjb25zdCBvcmRlcmluZyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5vcmRlcmluZztcbiAgICBjb25zdCBwZXJpb2RPdmVybGFwID0gcmVxdWVzdFBhcmFtZXRlcnM/LnBlcmlvZE92ZXJsYXA7XG4gICAgY29uc3Qgc2VhcmNoID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNlYXJjaDtcbiAgICBjb25zdCBzdGF0dXMgPSByZXF1ZXN0UGFyYW1ldGVycz8uc3RhdHVzO1xuICAgIGNvbnN0IHN0YXR1c0luID0gcmVxdWVzdFBhcmFtZXRlcnM/LnN0YXR1c0luO1xuICAgIGNvbnN0IHR5cGUgPSByZXF1ZXN0UGFyYW1ldGVycz8udHlwZTtcbiAgICBjb25zdCB0eXBlSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8udHlwZUluO1xuICAgIGNvbnN0IHVzZXJCcmFuY2hJZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnVzZXJCcmFuY2hJZEluO1xuICAgIGNvbnN0IHVzZXJEZXBhcnRtZW50SWRJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy51c2VyRGVwYXJ0bWVudElkSW47XG4gICAgY29uc3QgdXNlcklkSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8udXNlcklkSW47XG4gICAgY29uc3QgdXNlclN0YXR1cyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy51c2VyU3RhdHVzO1xuICAgIGNvbnN0IHVzZXJTdGF0dXNJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy51c2VyU3RhdHVzSW47XG4gICAgY29uc3QgdXNlclN1cGVydmlzZWVzSWRJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy51c2VyU3VwZXJ2aXNlZXNJZEluO1xuICAgIGNvbnN0IHVzZXJTdXBlcnZpc29yc0lkSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8udXNlclN1cGVydmlzb3JzSWRJbjtcbiAgICBjb25zdCB1c2VyV29ya1R5cGVJZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnVzZXJXb3JrVHlwZUlkSW47XG5cbiAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7IGVuY29kZXI6IHRoaXMuZW5jb2RlciB9KTtcbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCAmJiBpZCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+aWQsXG4gICAgICAgIFwiaWRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmlkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJpZF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcmRlcmluZyAhPT0gdW5kZWZpbmVkICYmIG9yZGVyaW5nICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5vcmRlcmluZyxcbiAgICAgICAgXCJvcmRlcmluZ1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHBlcmlvZE92ZXJsYXAgIT09IHVuZGVmaW5lZCAmJiBwZXJpb2RPdmVybGFwICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5wZXJpb2RPdmVybGFwLFxuICAgICAgICBcInBlcmlvZF9fb3ZlcmxhcFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHNlYXJjaCAhPT0gdW5kZWZpbmVkICYmIHNlYXJjaCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+c2VhcmNoLFxuICAgICAgICBcInNlYXJjaFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+c3RhdHVzLFxuICAgICAgICBcInN0YXR1c1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0YXR1c0luKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnN0YXR1c0luXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwic3RhdHVzX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT50eXBlLFxuICAgICAgICBcInR5cGVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0eXBlSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4udHlwZUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwidHlwZV9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh1c2VyQnJhbmNoSWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi51c2VyQnJhbmNoSWRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInVzZXJfX2JyYW5jaF9faWRfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodXNlckRlcGFydG1lbnRJZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnVzZXJEZXBhcnRtZW50SWRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInVzZXJfX2RlcGFydG1lbnRfX2lkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHVzZXJJZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnVzZXJJZEluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwidXNlcl9faWRfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodXNlclN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHVzZXJTdGF0dXMgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnVzZXJTdGF0dXMsXG4gICAgICAgIFwidXNlcl9fc3RhdHVzXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodXNlclN0YXR1c0luKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnVzZXJTdGF0dXNJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInVzZXJfX3N0YXR1c19faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh1c2VyU3VwZXJ2aXNlZXNJZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnVzZXJTdXBlcnZpc2Vlc0lkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJ1c2VyX19zdXBlcnZpc2Vlc19faWRfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodXNlclN1cGVydmlzb3JzSWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi51c2VyU3VwZXJ2aXNvcnNJZEluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwidXNlcl9fc3VwZXJ2aXNvcnNfX2lkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHVzZXJXb3JrVHlwZUlkSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4udXNlcldvcmtUeXBlSWRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInVzZXJfX3dvcmtfdHlwZV9faWRfX2luXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChjb29raWVBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiY29va2llQXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgfVxuXG4gICAgLy8gYXV0aGVudGljYXRpb24gKGp3dEF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJqd3RBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQXV0aG9yaXphdGlvblwiLFxuICAgICAgICBcIkJlYXJlciBcIiArIGxvY2FsVmFyQ3JlZGVudGlhbCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1wiYXBwbGljYXRpb24vanNvblwiXTtcbiAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID1cbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgfVxuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkFjY2VwdFwiLFxuICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIsXG4gICAgICBcIm11bHRpcGFydC9mb3JtLWRhdGFcIixcbiAgICBdO1xuICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCByZXNwb25zZVR5cGVfOiBcInRleHRcIiB8IFwianNvblwiIHwgXCJibG9iXCIgPSBcImpzb25cIjtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKFwidGV4dFwiKSkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJ0ZXh0XCI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJqc29uXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJibG9iXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3YxL2V4cG9ydC11c2VyLXBlcmlvZHMvc3RhcnQvYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8RXhwb3J0Sm9iRHRvPihcbiAgICAgIFwicG9zdFwiLFxuICAgICAgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICB7XG4gICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgIGJvZHk6IHVzZXJQZXJpb2RSZXNvdXJjZUNyZWF0ZUV4cG9ydEpvYlJlcXVlc3REdG8sXG4gICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
421
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXVzZXItcGVyaW9kcy1hcGkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwaS9leHBvcnQtdXNlci1wZXJpb2RzLWFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBRUwsV0FBVyxFQUNYLFVBQVUsRUFJVixXQUFXLEdBQ1osTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUE4QnRELGFBQWE7QUFDYixPQUFPLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQVlqRCxNQUFNLE9BQU8sMkJBQTJCO0lBUzFCO0lBTkYsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNqQixjQUFjLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNuQyxhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUNwQyxPQUFPLENBQXFCO0lBRW5DLFlBQ1ksVUFBc0IsRUFDRCxRQUEyQixFQUM5QyxhQUE0QjtRQUY5QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBSWhDLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDckMsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNwRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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LEdBQUcsTUFBTSxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sSUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUMvRCxDQUFDO2dCQUNELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDekIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFlBQVksR0FBRyxvQ0FBb0MsQ0FBQztRQUN4RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUM1QixNQUFNLEVBQ04sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxZQUFZLEVBQUUsRUFDL0M7WUFDRSxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLElBQUksRUFBRSwyQ0FBMkM7WUFDakQsTUFBTSxFQUFFLHVCQUF1QjtZQUMvQixZQUFZLEVBQU8sYUFBYTtZQUNoQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlO1lBQ25ELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGFBQWEsRUFBRSxxQkFBcUI7WUFDcEMsY0FBYyxFQUFFLGNBQWM7U0FDL0IsQ0FDRixDQUFDO0lBQ0osQ0FBQzt3R0F4d0JVLDJCQUEyQiw0Q0FVaEIsU0FBUzs0R0FWcEIsMkJBQTJCLGNBRjFCLE1BQU07OzRGQUVQLDJCQUEyQjtrQkFIdkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVdJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsU0FBUzs7MEJBQzVCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlbG1hciBBcGlcbiAqXG4gKlxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIEh0dHBDbGllbnQsXG4gIEh0dHBIZWFkZXJzLFxuICBIdHRwUGFyYW1zLFxuICBIdHRwUmVzcG9uc2UsXG4gIEh0dHBFdmVudCxcbiAgSHR0cFBhcmFtZXRlckNvZGVjLFxuICBIdHRwQ29udGV4dCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMgfSBmcm9tIFwiLi4vZW5jb2RlclwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MDFEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U0MDEuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDA0RHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNDA0LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQwNUR0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTQwNS5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MDZEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U0MDYuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDE1RHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNDE1LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTUwMER0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTUwMC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEV4cG9ydEpvYkR0byB9IGZyb20gXCIuLi9tb2RlbC9leHBvcnQtam9iLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXhwb3J0VXNlclBlcmlvZHNDYW5jZWxDcmVhdGVFcnJvclJlc3BvbnNlNDAwRHRvIH0gZnJvbSBcIi4uL21vZGVsL2V4cG9ydC11c2VyLXBlcmlvZHMtY2FuY2VsLWNyZWF0ZS1lcnJvci1yZXNwb25zZTQwMC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEV4cG9ydFVzZXJQZXJpb2RzTGlzdEVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXhwb3J0LXVzZXItcGVyaW9kcy1saXN0LWVycm9yLXJlc3BvbnNlNDAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXhwb3J0VXNlclBlcmlvZHNSZXRyaWV2ZUVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXhwb3J0LXVzZXItcGVyaW9kcy1yZXRyaWV2ZS1lcnJvci1yZXNwb25zZTQwMC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEV4cG9ydFVzZXJQZXJpb2RzU3RhcnRDcmVhdGVFcnJvclJlc3BvbnNlNDAwRHRvIH0gZnJvbSBcIi4uL21vZGVsL2V4cG9ydC11c2VyLXBlcmlvZHMtc3RhcnQtY3JlYXRlLWVycm9yLXJlc3BvbnNlNDAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgUGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0byB9IGZyb20gXCIuLi9tb2RlbC9wYWdpbmF0ZWQtZXhwb3J0LWpvYi1saXN0LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVXNlclBlcmlvZFJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0byB9IGZyb20gXCIuLi9tb2RlbC91c2VyLXBlcmlvZC1yZXNvdXJjZS1jcmVhdGUtZXhwb3J0LWpvYi1yZXF1ZXN0LmR0b1wiO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBCQVNFX1BBVEgsIENPTExFQ1RJT05fRk9STUFUUyB9IGZyb20gXCIuLi92YXJpYWJsZXNcIjtcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHtcbiAgRXhwb3J0VXNlclBlcmlvZHNBcGlTZXJ2aWNlSW50ZXJmYWNlLFxuICBFeHBvcnRVc2VyUGVyaW9kc0NhbmNlbENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gIEV4cG9ydFVzZXJQZXJpb2RzTGlzdFJlcXVlc3RQYXJhbXMsXG4gIEV4cG9ydFVzZXJQZXJpb2RzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICBFeHBvcnRVc2VyUGVyaW9kc1N0YXJ0Q3JlYXRlUmVxdWVzdFBhcmFtcyxcbn0gZnJvbSBcIi4vZXhwb3J0LXVzZXItcGVyaW9kcy1hcGkuc2VydmljZUludGVyZmFjZVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBFeHBvcnRVc2VyUGVyaW9kc0FwaVNlcnZpY2VcbiAgaW1wbGVtZW50cyBFeHBvcnRVc2VyUGVyaW9kc0FwaVNlcnZpY2VJbnRlcmZhY2VcbntcbiAgcHJvdGVjdGVkIGJhc2VQYXRoID0gXCJcIjtcbiAgcHVibGljIGRlZmF1bHRIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gIHB1YmxpYyBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcbiAgcHVibGljIGVuY29kZXI6IEh0dHBQYXJhbWV0ZXJDb2RlYztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIEBPcHRpb25hbCgpIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24sXG4gICkge1xuICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgZmlyc3RCYXNlUGF0aCA9IEFycmF5LmlzQXJyYXkoYmFzZVBhdGgpID8gYmFzZVBhdGhbMF0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoZmlyc3RCYXNlUGF0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgYmFzZVBhdGggPSBmaXJzdEJhc2VQYXRoO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGJhc2VQYXRoICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGJhc2VQYXRoID0gdGhpcy5iYXNlUGF0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuICAgIH1cbiAgICB0aGlzLmVuY29kZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlciB8fCBuZXcgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjKCk7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zKFxuICAgIGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsXG4gICAgdmFsdWU6IGFueSxcbiAgICBrZXk/OiBzdHJpbmcsXG4gICk6IEh0dHBQYXJhbXMge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBEYXRlID09PSBmYWxzZSkge1xuICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlLCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKFxuICAgIGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsXG4gICAgdmFsdWU/OiBhbnksXG4gICAga2V5Pzogc3RyaW5nLFxuICApOiBIdHRwUGFyYW1zIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICh2YWx1ZSBhcyBhbnlbXSkuZm9yRWFjaChcbiAgICAgICAgICAoZWxlbSkgPT5cbiAgICAgICAgICAgIChodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgZWxlbSwga2V5KSksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAodmFsdWUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIERhdGVcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKFxuICAgICAgICAgIChrKSA9PlxuICAgICAgICAgICAgKGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShcbiAgICAgICAgICAgICAgaHR0cFBhcmFtcyxcbiAgICAgICAgICAgICAgdmFsdWVba10sXG4gICAgICAgICAgICAgIGtleSAhPSBudWxsID8gYCR7a2V5fS4ke2t9YCA6IGssXG4gICAgICAgICAgICApKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKFwia2V5IG1heSBub3QgYmUgbnVsbCBpZiB2YWx1ZSBpcyBub3Qgb2JqZWN0IG9yIGFycmF5XCIpO1xuICAgIH1cbiAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgZXhwb3J0IGpvYiB0aGF0IGlzIGluIHByb2dyZXNzLlxuICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIGV4cG9ydFVzZXJQZXJpb2RzQ2FuY2VsQ3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBFeHBvcnRVc2VyUGVyaW9kc0NhbmNlbENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxFeHBvcnRKb2JEdG8+O1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNDYW5jZWxDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJQZXJpb2RzQ2FuY2VsQ3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJyZXNwb25zZVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2VyUGVyaW9kc0NhbmNlbENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlclBlcmlvZHNDYW5jZWxDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2VyUGVyaW9kc0NhbmNlbENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlclBlcmlvZHNDYW5jZWxDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU6IGFueSA9IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaWQgPSByZXF1ZXN0UGFyYW1ldGVycz8uaWQ7XG4gICAgaWYgKGlkID09PSBudWxsIHx8IGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgaWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBleHBvcnRVc2VyUGVyaW9kc0NhbmNlbENyZWF0ZS5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLy8gYXV0aGVudGljYXRpb24gKGNvb2tpZUF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJjb29raWVBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICB9XG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoand0QXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImp3dEF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICAgIFwiQmVhcmVyIFwiICsgbG9jYWxWYXJDcmVkZW50aWFsLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICB9XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQWNjZXB0XCIsXG4gICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCByZXNwb25zZVR5cGVfOiBcInRleHRcIiB8IFwianNvblwiIHwgXCJibG9iXCIgPSBcImpzb25cIjtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKFwidGV4dFwiKSkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJ0ZXh0XCI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJqc29uXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJibG9iXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3YxL2V4cG9ydC11c2VyLXBlcmlvZHMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oeyBuYW1lOiBcImlkXCIsIHZhbHVlOiBpZCwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcIm51bWJlclwiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWQgfSl9L2NhbmNlbC9gO1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxFeHBvcnRKb2JEdG8+KFxuICAgICAgXCJwb3N0XCIsXG4gICAgICBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgIHtcbiAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgVmlld1NldCBBUEkgZm9yIFVzZXJQZXJpb2QgbW9kZWwuXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAqL1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNMaXN0KFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogRXhwb3J0VXNlclBlcmlvZHNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPFBhZ2luYXRlZEV4cG9ydEpvYkxpc3REdG8+O1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNMaXN0KFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogRXhwb3J0VXNlclBlcmlvZHNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJyZXNwb25zZVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8UGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0bz4+O1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNMaXN0KFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogRXhwb3J0VXNlclBlcmlvZHNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJldmVudHNcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PFBhZ2luYXRlZEV4cG9ydEpvYkxpc3REdG8+PjtcbiAgcHVibGljIGV4cG9ydFVzZXJQZXJpb2RzTGlzdChcbiAgICByZXF1ZXN0UGFyYW1ldGVycz86IEV4cG9ydFVzZXJQZXJpb2RzTGlzdFJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZTogYW55ID0gXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBsaW1pdCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5saW1pdDtcbiAgICBjb25zdCBvZmZzZXQgPSByZXF1ZXN0UGFyYW1ldGVycz8ub2Zmc2V0O1xuICAgIGNvbnN0IG9yZGVyaW5nID0gcmVxdWVzdFBhcmFtZXRlcnM/Lm9yZGVyaW5nO1xuICAgIGNvbnN0IHNlYXJjaCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zZWFyY2g7XG5cbiAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7IGVuY29kZXI6IHRoaXMuZW5jb2RlciB9KTtcbiAgICBpZiAobGltaXQgIT09IHVuZGVmaW5lZCAmJiBsaW1pdCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+bGltaXQsXG4gICAgICAgIFwibGltaXRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvZmZzZXQgIT09IHVuZGVmaW5lZCAmJiBvZmZzZXQgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55Pm9mZnNldCxcbiAgICAgICAgXCJvZmZzZXRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcmRlcmluZyAhPT0gdW5kZWZpbmVkICYmIG9yZGVyaW5nICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5vcmRlcmluZyxcbiAgICAgICAgXCJvcmRlcmluZ1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHNlYXJjaCAhPT0gdW5kZWZpbmVkICYmIHNlYXJjaCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+c2VhcmNoLFxuICAgICAgICBcInNlYXJjaFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoY29va2llQXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImNvb2tpZUF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgIH1cblxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChqd3RBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiand0QXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkF1dGhvcml6YXRpb25cIixcbiAgICAgICAgXCJCZWFyZXIgXCIgKyBsb2NhbFZhckNyZWRlbnRpYWwsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcImFwcGxpY2F0aW9uL2pzb25cIl07XG4gICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgIH1cbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBY2NlcHRcIixcbiAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHJlc3BvbnNlVHlwZV86IFwidGV4dFwiIHwgXCJqc29uXCIgfCBcImJsb2JcIiA9IFwianNvblwiO1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoXCJ0ZXh0XCIpKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcInRleHRcIjtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKVxuICAgICAgKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImpzb25cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImJsb2JcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvdjEvZXhwb3J0LXVzZXItcGVyaW9kcy9gO1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxQYWdpbmF0ZWRFeHBvcnRKb2JMaXN0RHRvPihcbiAgICAgIFwiZ2V0XCIsXG4gICAgICBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgIHtcbiAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgVmlld1NldCBBUEkgZm9yIFVzZXJQZXJpb2QgbW9kZWwuXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAqL1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlclBlcmlvZHNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxFeHBvcnRKb2JEdG8+O1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlclBlcmlvZHNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwicmVzcG9uc2VcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEV4cG9ydEpvYkR0bz4+O1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlclBlcmlvZHNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiZXZlbnRzXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxFeHBvcnRKb2JEdG8+PjtcbiAgcHVibGljIGV4cG9ydFVzZXJQZXJpb2RzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJQZXJpb2RzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU6IGFueSA9IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaWQgPSByZXF1ZXN0UGFyYW1ldGVycz8uaWQ7XG4gICAgaWYgKGlkID09PSBudWxsIHx8IGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgaWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBleHBvcnRVc2VyUGVyaW9kc1JldHJpZXZlLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoY29va2llQXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImNvb2tpZUF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgIH1cblxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChqd3RBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiand0QXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkF1dGhvcml6YXRpb25cIixcbiAgICAgICAgXCJCZWFyZXIgXCIgKyBsb2NhbFZhckNyZWRlbnRpYWwsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcImFwcGxpY2F0aW9uL2pzb25cIl07XG4gICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgIH1cbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBY2NlcHRcIixcbiAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHJlc3BvbnNlVHlwZV86IFwidGV4dFwiIHwgXCJqc29uXCIgfCBcImJsb2JcIiA9IFwianNvblwiO1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoXCJ0ZXh0XCIpKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcInRleHRcIjtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKVxuICAgICAgKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImpzb25cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImJsb2JcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvdjEvZXhwb3J0LXVzZXItcGVyaW9kcy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7IG5hbWU6IFwiaWRcIiwgdmFsdWU6IGlkLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwibnVtYmVyXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZCB9KX0vYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8RXhwb3J0Sm9iRHRvPihcbiAgICAgIFwiZ2V0XCIsXG4gICAgICBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgIHtcbiAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGVuZHBvaW50IGNyZWF0ZXMgZXhwb3J0IGpvYiBhbmQgc3RhcnRzIGl0LiBUbyBtb25pdG9yIHByb2dyZXNzIHVzZSBkZXRhaWwgZW5kcG9pbnQgZm9yIGpvYnMgdG8gZmV0Y2ggc3RhdGUgb2Ygam9iLiBPbmNlIGl0XFwmIzM5O3Mgc3RhdHVzIGlzICYjeDYwO0VYUE9SVEVEJiN4NjA7LCB5b3UgY2FuIGRvd25sb2FkIGZpbGUuXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAqL1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNTdGFydENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlclBlcmlvZHNTdGFydENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxFeHBvcnRKb2JEdG8+O1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNTdGFydENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlclBlcmlvZHNTdGFydENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwicmVzcG9uc2VcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEV4cG9ydEpvYkR0bz4+O1xuICBwdWJsaWMgZXhwb3J0VXNlclBlcmlvZHNTdGFydENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlclBlcmlvZHNTdGFydENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiZXZlbnRzXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxFeHBvcnRKb2JEdG8+PjtcbiAgcHVibGljIGV4cG9ydFVzZXJQZXJpb2RzU3RhcnRDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJQZXJpb2RzU3RhcnRDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU6IGFueSA9IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgdXNlclBlcmlvZFJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0byA9XG4gICAgICByZXF1ZXN0UGFyYW1ldGVycz8udXNlclBlcmlvZFJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0bztcbiAgICBpZiAoXG4gICAgICB1c2VyUGVyaW9kUmVzb3VyY2VDcmVhdGVFeHBvcnRKb2JSZXF1ZXN0RHRvID09PSBudWxsIHx8XG4gICAgICB1c2VyUGVyaW9kUmVzb3VyY2VDcmVhdGVFeHBvcnRKb2JSZXF1ZXN0RHRvID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgdXNlclBlcmlvZFJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0byB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGV4cG9ydFVzZXJQZXJpb2RzU3RhcnRDcmVhdGUuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pZDtcbiAgICBjb25zdCBpZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmlkSW47XG4gICAgY29uc3Qgb3JkZXJpbmcgPSByZXF1ZXN0UGFyYW1ldGVycz8ub3JkZXJpbmc7XG4gICAgY29uc3QgcGVyaW9kT3ZlcmxhcCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5wZXJpb2RPdmVybGFwO1xuICAgIGNvbnN0IHNlYXJjaCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zZWFyY2g7XG4gICAgY29uc3Qgc3RhdHVzID0gcmVxdWVzdFBhcmFtZXRlcnM/LnN0YXR1cztcbiAgICBjb25zdCBzdGF0dXNJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zdGF0dXNJbjtcbiAgICBjb25zdCB0eXBlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnR5cGU7XG4gICAgY29uc3QgdHlwZUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnR5cGVJbjtcbiAgICBjb25zdCB1c2VyQnJhbmNoSWRJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy51c2VyQnJhbmNoSWRJbjtcbiAgICBjb25zdCB1c2VyRGVwYXJ0bWVudElkSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8udXNlckRlcGFydG1lbnRJZEluO1xuICAgIGNvbnN0IHVzZXJJZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnVzZXJJZEluO1xuICAgIGNvbnN0IHVzZXJTdGF0dXMgPSByZXF1ZXN0UGFyYW1ldGVycz8udXNlclN0YXR1cztcbiAgICBjb25zdCB1c2VyU3RhdHVzSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8udXNlclN0YXR1c0luO1xuICAgIGNvbnN0IHVzZXJTdXBlcnZpc2Vlc0lkSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8udXNlclN1cGVydmlzZWVzSWRJbjtcbiAgICBjb25zdCB1c2VyU3VwZXJ2aXNvcnNJZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnVzZXJTdXBlcnZpc29yc0lkSW47XG4gICAgY29uc3QgdXNlcldvcmtUeXBlSWRJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy51c2VyV29ya1R5cGVJZEluO1xuXG4gICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoeyBlbmNvZGVyOiB0aGlzLmVuY29kZXIgfSk7XG4gICAgaWYgKGlkICE9PSB1bmRlZmluZWQgJiYgaWQgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmlkLFxuICAgICAgICBcImlkXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5pZEluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiaWRfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob3JkZXJpbmcgIT09IHVuZGVmaW5lZCAmJiBvcmRlcmluZyAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+b3JkZXJpbmcsXG4gICAgICAgIFwib3JkZXJpbmdcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwZXJpb2RPdmVybGFwICE9PSB1bmRlZmluZWQgJiYgcGVyaW9kT3ZlcmxhcCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+cGVyaW9kT3ZlcmxhcCxcbiAgICAgICAgXCJwZXJpb2RfX292ZXJsYXBcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzZWFyY2ggIT09IHVuZGVmaW5lZCAmJiBzZWFyY2ggIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnNlYXJjaCxcbiAgICAgICAgXCJzZWFyY2hcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgIT09IHVuZGVmaW5lZCAmJiBzdGF0dXMgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnN0YXR1cyxcbiAgICAgICAgXCJzdGF0dXNcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0dXNJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5zdGF0dXNJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInN0YXR1c19faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+dHlwZSxcbiAgICAgICAgXCJ0eXBlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodHlwZUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnR5cGVJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInR5cGVfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodXNlckJyYW5jaElkSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4udXNlckJyYW5jaElkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJ1c2VyX19icmFuY2hfX2lkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHVzZXJEZXBhcnRtZW50SWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi51c2VyRGVwYXJ0bWVudElkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJ1c2VyX19kZXBhcnRtZW50X19pZF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh1c2VySWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi51c2VySWRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInVzZXJfX2lkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHVzZXJTdGF0dXMgIT09IHVuZGVmaW5lZCAmJiB1c2VyU3RhdHVzICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT51c2VyU3RhdHVzLFxuICAgICAgICBcInVzZXJfX3N0YXR1c1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHVzZXJTdGF0dXNJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi51c2VyU3RhdHVzSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJ1c2VyX19zdGF0dXNfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodXNlclN1cGVydmlzZWVzSWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi51c2VyU3VwZXJ2aXNlZXNJZEluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwidXNlcl9fc3VwZXJ2aXNlZXNfX2lkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHVzZXJTdXBlcnZpc29yc0lkSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4udXNlclN1cGVydmlzb3JzSWRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInVzZXJfX3N1cGVydmlzb3JzX19pZF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh1c2VyV29ya1R5cGVJZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnVzZXJXb3JrVHlwZUlkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJ1c2VyX193b3JrX3R5cGVfX2lkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoY29va2llQXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImNvb2tpZUF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgIH1cblxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChqd3RBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiand0QXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkF1dGhvcml6YXRpb25cIixcbiAgICAgICAgXCJCZWFyZXIgXCIgKyBsb2NhbFZhckNyZWRlbnRpYWwsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcImFwcGxpY2F0aW9uL2pzb25cIl07XG4gICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgIH1cbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBY2NlcHRcIixcbiAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLFxuICAgICAgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIsXG4gICAgXTtcbiAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzcG9uc2VUeXBlXzogXCJ0ZXh0XCIgfCBcImpzb25cIiB8IFwiYmxvYlwiID0gXCJqc29uXCI7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aChcInRleHRcIikpIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwidGV4dFwiO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpXG4gICAgICApIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwianNvblwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwiYmxvYlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS92MS9leHBvcnQtdXNlci1wZXJpb2RzL3N0YXJ0L2A7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEV4cG9ydEpvYkR0bz4oXG4gICAgICBcInBvc3RcIixcbiAgICAgIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAge1xuICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICBib2R5OiB1c2VyUGVyaW9kUmVzb3VyY2VDcmVhdGVFeHBvcnRKb2JSZXF1ZXN0RHRvLFxuICAgICAgICBwYXJhbXM6IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzLFxuICAgICAgfSxcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXVzZXItcGVyaW9kcy1hcGkuc2VydmljZUludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwaS9leHBvcnQtdXNlci1wZXJpb2RzLWFwaS5zZXJ2aWNlSW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlbG1hciBBcGlcbiAqXG4gKlxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5cbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MDFEdG8gfSBmcm9tIFwiLi4vbW9kZWwvbW9kZWxzXCI7XG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDA0RHRvIH0gZnJvbSBcIi4uL21vZGVsL21vZGVsc1wiO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQwNUR0byB9IGZyb20gXCIuLi9tb2RlbC9tb2RlbHNcIjtcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MDZEdG8gfSBmcm9tIFwiLi4vbW9kZWwvbW9kZWxzXCI7XG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDE1RHRvIH0gZnJvbSBcIi4uL21vZGVsL21vZGVsc1wiO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTUwMER0byB9IGZyb20gXCIuLi9tb2RlbC9tb2RlbHNcIjtcbmltcG9ydCB7IEV4cG9ydEpvYkR0byB9IGZyb20gXCIuLi9tb2RlbC9tb2RlbHNcIjtcbmltcG9ydCB7IEV4cG9ydFVzZXJQZXJpb2RzQ2FuY2VsQ3JlYXRlRXJyb3JSZXNwb25zZTQwMER0byB9IGZyb20gXCIuLi9tb2RlbC9tb2RlbHNcIjtcbmltcG9ydCB7IEV4cG9ydFVzZXJQZXJpb2RzTGlzdEVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvbW9kZWxzXCI7XG5pbXBvcnQgeyBFeHBvcnRVc2VyUGVyaW9kc1JldHJpZXZlRXJyb3JSZXNwb25zZTQwMER0byB9IGZyb20gXCIuLi9tb2RlbC9tb2RlbHNcIjtcbmltcG9ydCB7IEV4cG9ydFVzZXJQZXJpb2RzU3RhcnRDcmVhdGVFcnJvclJlc3BvbnNlNDAwRHRvIH0gZnJvbSBcIi4uL21vZGVsL21vZGVsc1wiO1xuaW1wb3J0IHsgUGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0byB9IGZyb20gXCIuLi9tb2RlbC9tb2RlbHNcIjtcbmltcG9ydCB7IFVzZXJQZXJpb2RSZXNvdXJjZUNyZWF0ZUV4cG9ydEpvYlJlcXVlc3REdG8gfSBmcm9tIFwiLi4vbW9kZWwvbW9kZWxzXCI7XG5cbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vY29uZmlndXJhdGlvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydFVzZXJQZXJpb2RzQ2FuY2VsQ3JlYXRlUmVxdWVzdFBhcmFtcyB7XG4gIGlkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0VXNlclBlcmlvZHNMaXN0UmVxdWVzdFBhcmFtcyB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBvZmZzZXQ/OiBudW1iZXI7XG4gIG9yZGVyaW5nPzogc3RyaW5nO1xuICBzZWFyY2g/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0VXNlclBlcmlvZHNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMge1xuICBpZDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydFVzZXJQZXJpb2RzU3RhcnRDcmVhdGVSZXF1ZXN0UGFyYW1zIHtcbiAgdXNlclBlcmlvZFJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0bzogVXNlclBlcmlvZFJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0bztcbiAgaWQ/OiBudW1iZXI7XG4gIGlkSW4/OiBBcnJheTxudW1iZXI+O1xuICBvcmRlcmluZz86IHN0cmluZztcbiAgcGVyaW9kT3ZlcmxhcD86IHN0cmluZztcbiAgc2VhcmNoPzogc3RyaW5nO1xuICBzdGF0dXM/OiBcImFwcHJvdmVkXCIgfCBcImRlY2xpbmVkXCIgfCBcInBlbmRpbmdcIjtcbiAgc3RhdHVzSW4/OiBBcnJheTxzdHJpbmc+O1xuICB0eXBlPzpcbiAgICB8IFwiY29tcGVuc2F0aW9uXCJcbiAgICB8IFwicGVyc29uYWxfaG9saWRheVwiXG4gICAgfCBcInBlcnNvbmFsX3dvcmtkYXlcIlxuICAgIHwgXCJzaWNrXCJcbiAgICB8IFwidmFjYXRpb25cIlxuICAgIHwgXCJ6ZXJvaW5nXCI7XG4gIHR5cGVJbj86IEFycmF5PHN0cmluZz47XG4gIHVzZXJCcmFuY2hJZEluPzogQXJyYXk8bnVtYmVyPjtcbiAgdXNlckRlcGFydG1lbnRJZEluPzogQXJyYXk8bnVtYmVyPjtcbiAgdXNlcklkSW4/OiBBcnJheTxudW1iZXI+O1xuICB1c2VyU3RhdHVzPzogXCJhY3RpdmVcIiB8IFwiZmlyZWRcIiB8IFwidmFjYXRpb25cIjtcbiAgdXNlclN0YXR1c0luPzogQXJyYXk8c3RyaW5nPjtcbiAgdXNlclN1cGVydmlzZWVzSWRJbj86IEFycmF5PG51bWJlcj47XG4gIHVzZXJTdXBlcnZpc29yc0lkSW4/OiBBcnJheTxudW1iZXI+O1xuICB1c2VyV29ya1R5cGVJZEluPzogQXJyYXk8bnVtYmVyPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRVc2VyUGVyaW9kc0FwaVNlcnZpY2VJbnRlcmZhY2Uge1xuICBkZWZhdWx0SGVhZGVyczogSHR0cEhlYWRlcnM7XG4gIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqXG4gICAqIENhbmNlbCBleHBvcnQgam9iIHRoYXQgaXMgaW4gcHJvZ3Jlc3MuXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgKi9cbiAgZXhwb3J0VXNlclBlcmlvZHNDYW5jZWxDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJQZXJpb2RzQ2FuY2VsQ3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzogYW55LFxuICApOiBPYnNlcnZhYmxlPEV4cG9ydEpvYkR0bz47XG5cbiAgLyoqXG4gICAqXG4gICAqIEV4cG9ydCBWaWV3U2V0IEFQSSBmb3IgVXNlclBlcmlvZCBtb2RlbC5cbiAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAqL1xuICBleHBvcnRVc2VyUGVyaW9kc0xpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJQZXJpb2RzTGlzdFJlcXVlc3RQYXJhbXMsXG4gICAgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IGFueSxcbiAgKTogT2JzZXJ2YWJsZTxQYWdpbmF0ZWRFeHBvcnRKb2JMaXN0RHRvPjtcblxuICAvKipcbiAgICpcbiAgICogRXhwb3J0IFZpZXdTZXQgQVBJIGZvciBVc2VyUGVyaW9kIG1vZGVsLlxuICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICovXG4gIGV4cG9ydFVzZXJQZXJpb2RzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJQZXJpb2RzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiBhbnksXG4gICk6IE9ic2VydmFibGU8RXhwb3J0Sm9iRHRvPjtcblxuICAvKipcbiAgICpcbiAgICogVmFsaWRhdGUgcmVxdWVzdCBkYXRhIGFuZCBzdGFydCBFeHBvcnRKb2IuXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgKi9cbiAgZXhwb3J0VXNlclBlcmlvZHNTdGFydENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlclBlcmlvZHNTdGFydENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IGFueSxcbiAgKTogT2JzZXJ2YWJsZTxFeHBvcnRKb2JEdG8+O1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXVzZXItcGVyaW9kcy1hcGkuc2VydmljZUludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwaS9leHBvcnQtdXNlci1wZXJpb2RzLWFwaS5zZXJ2aWNlSW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlbG1hciBBcGlcbiAqXG4gKlxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5cbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MDFEdG8gfSBmcm9tIFwiLi4vbW9kZWwvbW9kZWxzXCI7XG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDA0RHRvIH0gZnJvbSBcIi4uL21vZGVsL21vZGVsc1wiO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQwNUR0byB9IGZyb20gXCIuLi9tb2RlbC9tb2RlbHNcIjtcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MDZEdG8gfSBmcm9tIFwiLi4vbW9kZWwvbW9kZWxzXCI7XG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDE1RHRvIH0gZnJvbSBcIi4uL21vZGVsL21vZGVsc1wiO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTUwMER0byB9IGZyb20gXCIuLi9tb2RlbC9tb2RlbHNcIjtcbmltcG9ydCB7IEV4cG9ydEpvYkR0byB9IGZyb20gXCIuLi9tb2RlbC9tb2RlbHNcIjtcbmltcG9ydCB7IEV4cG9ydFVzZXJQZXJpb2RzQ2FuY2VsQ3JlYXRlRXJyb3JSZXNwb25zZTQwMER0byB9IGZyb20gXCIuLi9tb2RlbC9tb2RlbHNcIjtcbmltcG9ydCB7IEV4cG9ydFVzZXJQZXJpb2RzTGlzdEVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvbW9kZWxzXCI7XG5pbXBvcnQgeyBFeHBvcnRVc2VyUGVyaW9kc1JldHJpZXZlRXJyb3JSZXNwb25zZTQwMER0byB9IGZyb20gXCIuLi9tb2RlbC9tb2RlbHNcIjtcbmltcG9ydCB7IEV4cG9ydFVzZXJQZXJpb2RzU3RhcnRDcmVhdGVFcnJvclJlc3BvbnNlNDAwRHRvIH0gZnJvbSBcIi4uL21vZGVsL21vZGVsc1wiO1xuaW1wb3J0IHsgUGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0byB9IGZyb20gXCIuLi9tb2RlbC9tb2RlbHNcIjtcbmltcG9ydCB7IFVzZXJQZXJpb2RSZXNvdXJjZUNyZWF0ZUV4cG9ydEpvYlJlcXVlc3REdG8gfSBmcm9tIFwiLi4vbW9kZWwvbW9kZWxzXCI7XG5cbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vY29uZmlndXJhdGlvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydFVzZXJQZXJpb2RzQ2FuY2VsQ3JlYXRlUmVxdWVzdFBhcmFtcyB7XG4gIGlkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0VXNlclBlcmlvZHNMaXN0UmVxdWVzdFBhcmFtcyB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBvZmZzZXQ/OiBudW1iZXI7XG4gIG9yZGVyaW5nPzogc3RyaW5nO1xuICBzZWFyY2g/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0VXNlclBlcmlvZHNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMge1xuICBpZDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydFVzZXJQZXJpb2RzU3RhcnRDcmVhdGVSZXF1ZXN0UGFyYW1zIHtcbiAgdXNlclBlcmlvZFJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0bzogVXNlclBlcmlvZFJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0bztcbiAgaWQ/OiBudW1iZXI7XG4gIGlkSW4/OiBBcnJheTxudW1iZXI+O1xuICBvcmRlcmluZz86IHN0cmluZztcbiAgcGVyaW9kT3ZlcmxhcD86IHN0cmluZztcbiAgc2VhcmNoPzogc3RyaW5nO1xuICBzdGF0dXM/OiBcImFwcHJvdmVkXCIgfCBcImRlY2xpbmVkXCIgfCBcInBlbmRpbmdcIjtcbiAgc3RhdHVzSW4/OiBBcnJheTxzdHJpbmc+O1xuICB0eXBlPzpcbiAgICB8IFwiY29tcGVuc2F0aW9uXCJcbiAgICB8IFwicGVyc29uYWxfaG9saWRheVwiXG4gICAgfCBcInBlcnNvbmFsX3dvcmtkYXlcIlxuICAgIHwgXCJzaWNrXCJcbiAgICB8IFwidmFjYXRpb25cIlxuICAgIHwgXCJ6ZXJvaW5nXCI7XG4gIHR5cGVJbj86IEFycmF5PHN0cmluZz47XG4gIHVzZXJCcmFuY2hJZEluPzogQXJyYXk8bnVtYmVyPjtcbiAgdXNlckRlcGFydG1lbnRJZEluPzogQXJyYXk8bnVtYmVyPjtcbiAgdXNlcklkSW4/OiBBcnJheTxudW1iZXI+O1xuICB1c2VyU3RhdHVzPzogXCJhY3RpdmVcIiB8IFwiZmlyZWRcIiB8IFwidmFjYXRpb25cIjtcbiAgdXNlclN0YXR1c0luPzogQXJyYXk8c3RyaW5nPjtcbiAgdXNlclN1cGVydmlzZWVzSWRJbj86IEFycmF5PG51bWJlcj47XG4gIHVzZXJTdXBlcnZpc29yc0lkSW4/OiBBcnJheTxudW1iZXI+O1xuICB1c2VyV29ya1R5cGVJZEluPzogQXJyYXk8bnVtYmVyPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRVc2VyUGVyaW9kc0FwaVNlcnZpY2VJbnRlcmZhY2Uge1xuICBkZWZhdWx0SGVhZGVyczogSHR0cEhlYWRlcnM7XG4gIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqXG4gICAqIENhbmNlbCBleHBvcnQgam9iIHRoYXQgaXMgaW4gcHJvZ3Jlc3MuXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgKi9cbiAgZXhwb3J0VXNlclBlcmlvZHNDYW5jZWxDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJQZXJpb2RzQ2FuY2VsQ3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzogYW55LFxuICApOiBPYnNlcnZhYmxlPEV4cG9ydEpvYkR0bz47XG5cbiAgLyoqXG4gICAqXG4gICAqIEV4cG9ydCBWaWV3U2V0IEFQSSBmb3IgVXNlclBlcmlvZCBtb2RlbC5cbiAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAqL1xuICBleHBvcnRVc2VyUGVyaW9kc0xpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJQZXJpb2RzTGlzdFJlcXVlc3RQYXJhbXMsXG4gICAgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IGFueSxcbiAgKTogT2JzZXJ2YWJsZTxQYWdpbmF0ZWRFeHBvcnRKb2JMaXN0RHRvPjtcblxuICAvKipcbiAgICpcbiAgICogRXhwb3J0IFZpZXdTZXQgQVBJIGZvciBVc2VyUGVyaW9kIG1vZGVsLlxuICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICovXG4gIGV4cG9ydFVzZXJQZXJpb2RzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJQZXJpb2RzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiBhbnksXG4gICk6IE9ic2VydmFibGU8RXhwb3J0Sm9iRHRvPjtcblxuICAvKipcbiAgICpcbiAgICogVGhpcyBlbmRwb2ludCBjcmVhdGVzIGV4cG9ydCBqb2IgYW5kIHN0YXJ0cyBpdC4gVG8gbW9uaXRvciBwcm9ncmVzcyB1c2UgZGV0YWlsIGVuZHBvaW50IGZvciBqb2JzIHRvIGZldGNoIHN0YXRlIG9mIGpvYi4gT25jZSBpdFxcJiMzOTtzIHN0YXR1cyBpcyAmI3g2MDtFWFBPUlRFRCYjeDYwOywgeW91IGNhbiBkb3dubG9hZCBmaWxlLlxuICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICovXG4gIGV4cG9ydFVzZXJQZXJpb2RzU3RhcnRDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJQZXJpb2RzU3RhcnRDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiBhbnksXG4gICk6IE9ic2VydmFibGU8RXhwb3J0Sm9iRHRvPjtcbn1cbiJdfQ==
@@ -422,4 +422,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
422
422
  }] }, { type: i2.Configuration, decorators: [{
423
423
  type: Optional
424
424
  }] }] });
425
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXVzZXJzLWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXBpL2V4cG9ydC11c2Vycy1hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUVMLFdBQVcsRUFDWCxVQUFVLEVBSVYsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBOEJ0RCxhQUFhO0FBQ2IsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFZakQsTUFBTSxPQUFPLHFCQUFxQjtJQU9wQjtJQU5GLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDakIsY0FBYyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDcEMsT0FBTyxDQUFxQjtJQUVuQyxZQUNZLFVBQXNCLEVBQ0QsUUFBMkIsRUFDOUMsYUFBNEI7UUFGOUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUloQyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3JDLENBQUM7UUFDRCxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDcEQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENB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QUM7UUFDckQsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ3JDLElBQUksZ0NBQWdDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDekIsQ0FBQztpQkFBTSxJQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLEVBQy9ELENBQUM7Z0JBQ0QsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUN6QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksWUFBWSxHQUFHLDZCQUE2QixDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQzVCLE1BQU0sRUFDTixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksRUFBRSxFQUMvQztZQUNFLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsSUFBSSxFQUFFLHFDQUFxQztZQUMzQyxNQUFNLEVBQUUsdUJBQXVCO1lBQy9CLFlBQVksRUFBTyxhQUFhO1lBQ2hDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbkQsT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsYUFBYSxFQUFFLHFCQUFxQjtZQUNwQyxjQUFjLEVBQUUsY0FBYztTQUMvQixDQUNGLENBQUM7SUFDSixDQUFDO3dHQTl3QlUscUJBQXFCLDRDQVFWLFNBQVM7NEdBUnBCLHFCQUFxQixjQUZwQixNQUFNOzs0RkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFTSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFNBQVM7OzBCQUM1QixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZWxtYXIgQXBpXG4gKlxuICpcbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cbi8qIHRzbGludDpkaXNhYmxlOm5vLXVudXNlZC12YXJpYWJsZSBtZW1iZXItb3JkZXJpbmcgKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBIdHRwQ2xpZW50LFxuICBIdHRwSGVhZGVycyxcbiAgSHR0cFBhcmFtcyxcbiAgSHR0cFJlc3BvbnNlLFxuICBIdHRwRXZlbnQsXG4gIEh0dHBQYXJhbWV0ZXJDb2RlYyxcbiAgSHR0cENvbnRleHQsXG59IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjIH0gZnJvbSBcIi4uL2VuY29kZXJcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDAxRHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNDAxLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQwNER0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTQwNC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MDVEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U0MDUuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDA2RHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNDA2LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQxNUR0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTQxNS5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U1MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U1MDAuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFeHBvcnRKb2JEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXhwb3J0LWpvYi5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEV4cG9ydFVzZXJzQ2FuY2VsQ3JlYXRlRXJyb3JSZXNwb25zZTQwMER0byB9IGZyb20gXCIuLi9tb2RlbC9leHBvcnQtdXNlcnMtY2FuY2VsLWNyZWF0ZS1lcnJvci1yZXNwb25zZTQwMC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEV4cG9ydFVzZXJzTGlzdEVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXhwb3J0LXVzZXJzLWxpc3QtZXJyb3ItcmVzcG9uc2U0MDAuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFeHBvcnRVc2Vyc1JldHJpZXZlRXJyb3JSZXNwb25zZTQwMER0byB9IGZyb20gXCIuLi9tb2RlbC9leHBvcnQtdXNlcnMtcmV0cmlldmUtZXJyb3ItcmVzcG9uc2U0MDAuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFeHBvcnRVc2Vyc1N0YXJ0Q3JlYXRlRXJyb3JSZXNwb25zZTQwMER0byB9IGZyb20gXCIuLi9tb2RlbC9leHBvcnQtdXNlcnMtc3RhcnQtY3JlYXRlLWVycm9yLXJlc3BvbnNlNDAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgUGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0byB9IGZyb20gXCIuLi9tb2RlbC9wYWdpbmF0ZWQtZXhwb3J0LWpvYi1saXN0LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVXNlclJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0byB9IGZyb20gXCIuLi9tb2RlbC91c2VyLXJlc291cmNlLWNyZWF0ZS1leHBvcnQtam9iLXJlcXVlc3QuZHRvXCI7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEJBU0VfUEFUSCwgQ09MTEVDVElPTl9GT1JNQVRTIH0gZnJvbSBcIi4uL3ZhcmlhYmxlc1wiO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9jb25maWd1cmF0aW9uXCI7XG5pbXBvcnQge1xuICBFeHBvcnRVc2Vyc0FwaVNlcnZpY2VJbnRlcmZhY2UsXG4gIEV4cG9ydFVzZXJzQ2FuY2VsQ3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgRXhwb3J0VXNlcnNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgRXhwb3J0VXNlcnNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gIEV4cG9ydFVzZXJzU3RhcnRDcmVhdGVSZXF1ZXN0UGFyYW1zLFxufSBmcm9tIFwiLi9leHBvcnQtdXNlcnMtYXBpLnNlcnZpY2VJbnRlcmZhY2VcIjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgRXhwb3J0VXNlcnNBcGlTZXJ2aWNlIGltcGxlbWVudHMgRXhwb3J0VXNlcnNBcGlTZXJ2aWNlSW50ZXJmYWNlIHtcbiAgcHJvdGVjdGVkIGJhc2VQYXRoID0gXCJcIjtcbiAgcHVibGljIGRlZmF1bHRIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gIHB1YmxpYyBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcbiAgcHVibGljIGVuY29kZXI6IEh0dHBQYXJhbWV0ZXJDb2RlYztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIEBPcHRpb25hbCgpIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24sXG4gICkge1xuICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgZmlyc3RCYXNlUGF0aCA9IEFycmF5LmlzQXJyYXkoYmFzZVBhdGgpID8gYmFzZVBhdGhbMF0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoZmlyc3RCYXNlUGF0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgYmFzZVBhdGggPSBmaXJzdEJhc2VQYXRoO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGJhc2VQYXRoICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGJhc2VQYXRoID0gdGhpcy5iYXNlUGF0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuICAgIH1cbiAgICB0aGlzLmVuY29kZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlciB8fCBuZXcgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjKCk7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zKFxuICAgIGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsXG4gICAgdmFsdWU6IGFueSxcbiAgICBrZXk/OiBzdHJpbmcsXG4gICk6IEh0dHBQYXJhbXMge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBEYXRlID09PSBmYWxzZSkge1xuICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlLCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKFxuICAgIGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsXG4gICAgdmFsdWU/OiBhbnksXG4gICAga2V5Pzogc3RyaW5nLFxuICApOiBIdHRwUGFyYW1zIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICh2YWx1ZSBhcyBhbnlbXSkuZm9yRWFjaChcbiAgICAgICAgICAoZWxlbSkgPT5cbiAgICAgICAgICAgIChodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgZWxlbSwga2V5KSksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAodmFsdWUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIERhdGVcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKFxuICAgICAgICAgIChrKSA9PlxuICAgICAgICAgICAgKGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShcbiAgICAgICAgICAgICAgaHR0cFBhcmFtcyxcbiAgICAgICAgICAgICAgdmFsdWVba10sXG4gICAgICAgICAgICAgIGtleSAhPSBudWxsID8gYCR7a2V5fS4ke2t9YCA6IGssXG4gICAgICAgICAgICApKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKFwia2V5IG1heSBub3QgYmUgbnVsbCBpZiB2YWx1ZSBpcyBub3Qgb2JqZWN0IG9yIGFycmF5XCIpO1xuICAgIH1cbiAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgZXhwb3J0IGpvYiB0aGF0IGlzIGluIHByb2dyZXNzLlxuICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIGV4cG9ydFVzZXJzQ2FuY2VsQ3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBFeHBvcnRVc2Vyc0NhbmNlbENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxFeHBvcnRKb2JEdG8+O1xuICBwdWJsaWMgZXhwb3J0VXNlcnNDYW5jZWxDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzQ2FuY2VsQ3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJyZXNwb25zZVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc0NhbmNlbENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNDYW5jZWxDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc0NhbmNlbENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNDYW5jZWxDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU6IGFueSA9IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaWQgPSByZXF1ZXN0UGFyYW1ldGVycz8uaWQ7XG4gICAgaWYgKGlkID09PSBudWxsIHx8IGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgaWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBleHBvcnRVc2Vyc0NhbmNlbENyZWF0ZS5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLy8gYXV0aGVudGljYXRpb24gKGNvb2tpZUF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJjb29raWVBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICB9XG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoand0QXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImp3dEF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICAgIFwiQmVhcmVyIFwiICsgbG9jYWxWYXJDcmVkZW50aWFsLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICB9XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQWNjZXB0XCIsXG4gICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCByZXNwb25zZVR5cGVfOiBcInRleHRcIiB8IFwianNvblwiIHwgXCJibG9iXCIgPSBcImpzb25cIjtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKFwidGV4dFwiKSkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJ0ZXh0XCI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJqc29uXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJibG9iXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3YxL2V4cG9ydC11c2Vycy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7IG5hbWU6IFwiaWRcIiwgdmFsdWU6IGlkLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwibnVtYmVyXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZCB9KX0vY2FuY2VsL2A7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEV4cG9ydEpvYkR0bz4oXG4gICAgICBcInBvc3RcIixcbiAgICAgIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAge1xuICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpZXdzZXQgZm9yIGV4cG9ydGluZyB1c2Vycy5cbiAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICovXG4gIHB1YmxpYyBleHBvcnRVc2Vyc0xpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBFeHBvcnRVc2Vyc0xpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8UGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0bz47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc0xpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBFeHBvcnRVc2Vyc0xpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcInJlc3BvbnNlXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxQYWdpbmF0ZWRFeHBvcnRKb2JMaXN0RHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc0xpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBFeHBvcnRVc2Vyc0xpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8UGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0bz4+O1xuICBwdWJsaWMgZXhwb3J0VXNlcnNMaXN0KFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogRXhwb3J0VXNlcnNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlOiBhbnkgPSBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGxpbWl0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmxpbWl0O1xuICAgIGNvbnN0IG9mZnNldCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5vZmZzZXQ7XG4gICAgY29uc3Qgb3JkZXJpbmcgPSByZXF1ZXN0UGFyYW1ldGVycz8ub3JkZXJpbmc7XG4gICAgY29uc3Qgc2VhcmNoID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNlYXJjaDtcblxuICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHsgZW5jb2RlcjogdGhpcy5lbmNvZGVyIH0pO1xuICAgIGlmIChsaW1pdCAhPT0gdW5kZWZpbmVkICYmIGxpbWl0ICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5saW1pdCxcbiAgICAgICAgXCJsaW1pdFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9mZnNldCAhPT0gdW5kZWZpbmVkICYmIG9mZnNldCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+b2Zmc2V0LFxuICAgICAgICBcIm9mZnNldFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9yZGVyaW5nICE9PSB1bmRlZmluZWQgJiYgb3JkZXJpbmcgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55Pm9yZGVyaW5nLFxuICAgICAgICBcIm9yZGVyaW5nXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc2VhcmNoICE9PSB1bmRlZmluZWQgJiYgc2VhcmNoICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5zZWFyY2gsXG4gICAgICAgIFwic2VhcmNoXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChjb29raWVBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiY29va2llQXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgfVxuXG4gICAgLy8gYXV0aGVudGljYXRpb24gKGp3dEF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJqd3RBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQXV0aG9yaXphdGlvblwiLFxuICAgICAgICBcIkJlYXJlciBcIiArIGxvY2FsVmFyQ3JlZGVudGlhbCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1wiYXBwbGljYXRpb24vanNvblwiXTtcbiAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID1cbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgfVxuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkFjY2VwdFwiLFxuICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgcmVzcG9uc2VUeXBlXzogXCJ0ZXh0XCIgfCBcImpzb25cIiB8IFwiYmxvYlwiID0gXCJqc29uXCI7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aChcInRleHRcIikpIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwidGV4dFwiO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpXG4gICAgICApIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwianNvblwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwiYmxvYlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS92MS9leHBvcnQtdXNlcnMvYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8UGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0bz4oXG4gICAgICBcImdldFwiLFxuICAgICAgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICB7XG4gICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVmlld3NldCBmb3IgZXhwb3J0aW5nIHVzZXJzLlxuICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIGV4cG9ydFVzZXJzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8RXhwb3J0Sm9iRHRvPjtcbiAgcHVibGljIGV4cG9ydFVzZXJzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcInJlc3BvbnNlXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxFeHBvcnRKb2JEdG8+PjtcbiAgcHVibGljIGV4cG9ydFVzZXJzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc1JldHJpZXZlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBFeHBvcnRVc2Vyc1JldHJpZXZlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlOiBhbnkgPSBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGlkID0gcmVxdWVzdFBhcmFtZXRlcnM/LmlkO1xuICAgIGlmIChpZCA9PT0gbnVsbCB8fCBpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiUmVxdWlyZWQgcGFyYW1ldGVyIGlkIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZXhwb3J0VXNlcnNSZXRyaWV2ZS5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLy8gYXV0aGVudGljYXRpb24gKGNvb2tpZUF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJjb29raWVBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICB9XG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoand0QXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImp3dEF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICAgIFwiQmVhcmVyIFwiICsgbG9jYWxWYXJDcmVkZW50aWFsLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICB9XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQWNjZXB0XCIsXG4gICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCByZXNwb25zZVR5cGVfOiBcInRleHRcIiB8IFwianNvblwiIHwgXCJibG9iXCIgPSBcImpzb25cIjtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKFwidGV4dFwiKSkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJ0ZXh0XCI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJqc29uXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJibG9iXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3YxL2V4cG9ydC11c2Vycy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7IG5hbWU6IFwiaWRcIiwgdmFsdWU6IGlkLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwibnVtYmVyXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZCB9KX0vYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8RXhwb3J0Sm9iRHRvPihcbiAgICAgIFwiZ2V0XCIsXG4gICAgICBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgIHtcbiAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSByZXF1ZXN0IGRhdGEgYW5kIHN0YXJ0IEV4cG9ydEpvYi5cbiAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICovXG4gIHB1YmxpYyBleHBvcnRVc2Vyc1N0YXJ0Q3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBFeHBvcnRVc2Vyc1N0YXJ0Q3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEV4cG9ydEpvYkR0bz47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc1N0YXJ0Q3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBFeHBvcnRVc2Vyc1N0YXJ0Q3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJyZXNwb25zZVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc1N0YXJ0Q3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBFeHBvcnRVc2Vyc1N0YXJ0Q3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJldmVudHNcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PEV4cG9ydEpvYkR0bz4+O1xuICBwdWJsaWMgZXhwb3J0VXNlcnNTdGFydENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNTdGFydENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZTogYW55ID0gXCJib2R5XCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCB1c2VyUmVzb3VyY2VDcmVhdGVFeHBvcnRKb2JSZXF1ZXN0RHRvID1cbiAgICAgIHJlcXVlc3RQYXJhbWV0ZXJzPy51c2VyUmVzb3VyY2VDcmVhdGVFeHBvcnRKb2JSZXF1ZXN0RHRvO1xuICAgIGlmIChcbiAgICAgIHVzZXJSZXNvdXJjZUNyZWF0ZUV4cG9ydEpvYlJlcXVlc3REdG8gPT09IG51bGwgfHxcbiAgICAgIHVzZXJSZXNvdXJjZUNyZWF0ZUV4cG9ydEpvYlJlcXVlc3REdG8gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlJlcXVpcmVkIHBhcmFtZXRlciB1c2VyUmVzb3VyY2VDcmVhdGVFeHBvcnRKb2JSZXF1ZXN0RHRvIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZXhwb3J0VXNlcnNTdGFydENyZWF0ZS5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGJyYW5jaCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5icmFuY2g7XG4gICAgY29uc3QgYnJhbmNoSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uYnJhbmNoSW47XG4gICAgY29uc3QgZGVwYXJ0bWVudCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5kZXBhcnRtZW50O1xuICAgIGNvbnN0IGRlcGFydG1lbnRJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5kZXBhcnRtZW50SW47XG4gICAgY29uc3QgaWQgPSByZXF1ZXN0UGFyYW1ldGVycz8uaWQ7XG4gICAgY29uc3QgaWRJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pZEluO1xuICAgIGNvbnN0IGlzU3RhZmYgPSByZXF1ZXN0UGFyYW1ldGVycz8uaXNTdGFmZjtcbiAgICBjb25zdCBpc1N0YWZmSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uaXNTdGFmZkluO1xuICAgIGNvbnN0IG9yZGVyaW5nID0gcmVxdWVzdFBhcmFtZXRlcnM/Lm9yZGVyaW5nO1xuICAgIGNvbnN0IHJvbGUgPSByZXF1ZXN0UGFyYW1ldGVycz8ucm9sZTtcbiAgICBjb25zdCByb2xlSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8ucm9sZUluO1xuICAgIGNvbnN0IHNlYXJjaCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zZWFyY2g7XG4gICAgY29uc3Qgc3RhdHVzID0gcmVxdWVzdFBhcmFtZXRlcnM/LnN0YXR1cztcbiAgICBjb25zdCBzdGF0dXNJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zdGF0dXNJbjtcbiAgICBjb25zdCBzdXBlcnZpc2Vlc0lkSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uc3VwZXJ2aXNlZXNJZEluO1xuICAgIGNvbnN0IHN1cGVydmlzb3JzSWRJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zdXBlcnZpc29yc0lkSW47XG4gICAgY29uc3Qgd29ya1R5cGUgPSByZXF1ZXN0UGFyYW1ldGVycz8ud29ya1R5cGU7XG4gICAgY29uc3Qgd29ya1R5cGVJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy53b3JrVHlwZUluO1xuXG4gICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoeyBlbmNvZGVyOiB0aGlzLmVuY29kZXIgfSk7XG4gICAgaWYgKGJyYW5jaCAhPT0gdW5kZWZpbmVkICYmIGJyYW5jaCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+YnJhbmNoLFxuICAgICAgICBcImJyYW5jaFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJyYW5jaEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmJyYW5jaEluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiYnJhbmNoX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRlcGFydG1lbnQgIT09IHVuZGVmaW5lZCAmJiBkZXBhcnRtZW50ICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5kZXBhcnRtZW50LFxuICAgICAgICBcImRlcGFydG1lbnRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkZXBhcnRtZW50SW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uZGVwYXJ0bWVudEluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiZGVwYXJ0bWVudF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkICYmIGlkICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5pZCxcbiAgICAgICAgXCJpZFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlkSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uaWRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImlkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlzU3RhZmYgIT09IHVuZGVmaW5lZCAmJiBpc1N0YWZmICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5pc1N0YWZmLFxuICAgICAgICBcImlzX3N0YWZmXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaXNTdGFmZkluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmlzU3RhZmZJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImlzX3N0YWZmX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9yZGVyaW5nICE9PSB1bmRlZmluZWQgJiYgb3JkZXJpbmcgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55Pm9yZGVyaW5nLFxuICAgICAgICBcIm9yZGVyaW5nXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocm9sZSAhPT0gdW5kZWZpbmVkICYmIHJvbGUgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnJvbGUsXG4gICAgICAgIFwicm9sZVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJvbGVJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5yb2xlSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJyb2xlX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHNlYXJjaCAhPT0gdW5kZWZpbmVkICYmIHNlYXJjaCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+c2VhcmNoLFxuICAgICAgICBcInNlYXJjaFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+c3RhdHVzLFxuICAgICAgICBcInN0YXR1c1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN0YXR1c0luKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnN0YXR1c0luXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwic3RhdHVzX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN1cGVydmlzZWVzSWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5zdXBlcnZpc2Vlc0lkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJzdXBlcnZpc2Vlc19faWRfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc3VwZXJ2aXNvcnNJZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnN1cGVydmlzb3JzSWRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInN1cGVydmlzb3JzX19pZF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh3b3JrVHlwZSAhPT0gdW5kZWZpbmVkICYmIHdvcmtUeXBlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT53b3JrVHlwZSxcbiAgICAgICAgXCJ3b3JrX3R5cGVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh3b3JrVHlwZUluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLndvcmtUeXBlSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJ3b3JrX3R5cGVfX2luXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChjb29raWVBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiY29va2llQXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgfVxuXG4gICAgLy8gYXV0aGVudGljYXRpb24gKGp3dEF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJqd3RBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQXV0aG9yaXphdGlvblwiLFxuICAgICAgICBcIkJlYXJlciBcIiArIGxvY2FsVmFyQ3JlZGVudGlhbCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1wiYXBwbGljYXRpb24vanNvblwiXTtcbiAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID1cbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgfVxuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkFjY2VwdFwiLFxuICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIsXG4gICAgICBcIm11bHRpcGFydC9mb3JtLWRhdGFcIixcbiAgICBdO1xuICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIixcbiAgICAgICAgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCByZXNwb25zZVR5cGVfOiBcInRleHRcIiB8IFwianNvblwiIHwgXCJibG9iXCIgPSBcImpzb25cIjtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKFwidGV4dFwiKSkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJ0ZXh0XCI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJqc29uXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJibG9iXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3YxL2V4cG9ydC11c2Vycy9zdGFydC9gO1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxFeHBvcnRKb2JEdG8+KFxuICAgICAgXCJwb3N0XCIsXG4gICAgICBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgIHtcbiAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgYm9keTogdXNlclJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0byxcbiAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuIl19
425
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXVzZXJzLWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXBpL2V4cG9ydC11c2Vycy1hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUVMLFdBQVcsRUFDWCxVQUFVLEVBSVYsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBOEJ0RCxhQUFhO0FBQ2IsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFZakQsTUFBTSxPQUFPLHFCQUFxQjtJQU9wQjtJQU5GLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDakIsY0FBYyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDcEMsT0FBTyxDQUFxQjtJQUVuQyxZQUNZLFVBQXNCLEVBQ0QsUUFBMkIsRUFDOUMsYUFBNEI7UUFGOUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUloQyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3JDLENBQUM7UUFDRCxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDcEQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENB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QUM7UUFDckQsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ3JDLElBQUksZ0NBQWdDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDekIsQ0FBQztpQkFBTSxJQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLEVBQy9ELENBQUM7Z0JBQ0QsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUN6QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksWUFBWSxHQUFHLDZCQUE2QixDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQzVCLE1BQU0sRUFDTixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksRUFBRSxFQUMvQztZQUNFLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsSUFBSSxFQUFFLHFDQUFxQztZQUMzQyxNQUFNLEVBQUUsdUJBQXVCO1lBQy9CLFlBQVksRUFBTyxhQUFhO1lBQ2hDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbkQsT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsYUFBYSxFQUFFLHFCQUFxQjtZQUNwQyxjQUFjLEVBQUUsY0FBYztTQUMvQixDQUNGLENBQUM7SUFDSixDQUFDO3dHQTl3QlUscUJBQXFCLDRDQVFWLFNBQVM7NEdBUnBCLHFCQUFxQixjQUZwQixNQUFNOzs0RkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFTSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFNBQVM7OzBCQUM1QixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZWxtYXIgQXBpXG4gKlxuICpcbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cbi8qIHRzbGludDpkaXNhYmxlOm5vLXVudXNlZC12YXJpYWJsZSBtZW1iZXItb3JkZXJpbmcgKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBIdHRwQ2xpZW50LFxuICBIdHRwSGVhZGVycyxcbiAgSHR0cFBhcmFtcyxcbiAgSHR0cFJlc3BvbnNlLFxuICBIdHRwRXZlbnQsXG4gIEh0dHBQYXJhbWV0ZXJDb2RlYyxcbiAgSHR0cENvbnRleHQsXG59IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjIH0gZnJvbSBcIi4uL2VuY29kZXJcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDAxRHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNDAxLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQwNER0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTQwNC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MDVEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U0MDUuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDA2RHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNDA2LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQxNUR0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTQxNS5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U1MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U1MDAuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFeHBvcnRKb2JEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXhwb3J0LWpvYi5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEV4cG9ydFVzZXJzQ2FuY2VsQ3JlYXRlRXJyb3JSZXNwb25zZTQwMER0byB9IGZyb20gXCIuLi9tb2RlbC9leHBvcnQtdXNlcnMtY2FuY2VsLWNyZWF0ZS1lcnJvci1yZXNwb25zZTQwMC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEV4cG9ydFVzZXJzTGlzdEVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXhwb3J0LXVzZXJzLWxpc3QtZXJyb3ItcmVzcG9uc2U0MDAuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFeHBvcnRVc2Vyc1JldHJpZXZlRXJyb3JSZXNwb25zZTQwMER0byB9IGZyb20gXCIuLi9tb2RlbC9leHBvcnQtdXNlcnMtcmV0cmlldmUtZXJyb3ItcmVzcG9uc2U0MDAuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFeHBvcnRVc2Vyc1N0YXJ0Q3JlYXRlRXJyb3JSZXNwb25zZTQwMER0byB9IGZyb20gXCIuLi9tb2RlbC9leHBvcnQtdXNlcnMtc3RhcnQtY3JlYXRlLWVycm9yLXJlc3BvbnNlNDAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgUGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0byB9IGZyb20gXCIuLi9tb2RlbC9wYWdpbmF0ZWQtZXhwb3J0LWpvYi1saXN0LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVXNlclJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0byB9IGZyb20gXCIuLi9tb2RlbC91c2VyLXJlc291cmNlLWNyZWF0ZS1leHBvcnQtam9iLXJlcXVlc3QuZHRvXCI7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEJBU0VfUEFUSCwgQ09MTEVDVElPTl9GT1JNQVRTIH0gZnJvbSBcIi4uL3ZhcmlhYmxlc1wiO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9jb25maWd1cmF0aW9uXCI7XG5pbXBvcnQge1xuICBFeHBvcnRVc2Vyc0FwaVNlcnZpY2VJbnRlcmZhY2UsXG4gIEV4cG9ydFVzZXJzQ2FuY2VsQ3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgRXhwb3J0VXNlcnNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgRXhwb3J0VXNlcnNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gIEV4cG9ydFVzZXJzU3RhcnRDcmVhdGVSZXF1ZXN0UGFyYW1zLFxufSBmcm9tIFwiLi9leHBvcnQtdXNlcnMtYXBpLnNlcnZpY2VJbnRlcmZhY2VcIjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgRXhwb3J0VXNlcnNBcGlTZXJ2aWNlIGltcGxlbWVudHMgRXhwb3J0VXNlcnNBcGlTZXJ2aWNlSW50ZXJmYWNlIHtcbiAgcHJvdGVjdGVkIGJhc2VQYXRoID0gXCJcIjtcbiAgcHVibGljIGRlZmF1bHRIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gIHB1YmxpYyBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcbiAgcHVibGljIGVuY29kZXI6IEh0dHBQYXJhbWV0ZXJDb2RlYztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIEBPcHRpb25hbCgpIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24sXG4gICkge1xuICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgZmlyc3RCYXNlUGF0aCA9IEFycmF5LmlzQXJyYXkoYmFzZVBhdGgpID8gYmFzZVBhdGhbMF0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoZmlyc3RCYXNlUGF0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgYmFzZVBhdGggPSBmaXJzdEJhc2VQYXRoO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGJhc2VQYXRoICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGJhc2VQYXRoID0gdGhpcy5iYXNlUGF0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuICAgIH1cbiAgICB0aGlzLmVuY29kZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlciB8fCBuZXcgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjKCk7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zKFxuICAgIGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsXG4gICAgdmFsdWU6IGFueSxcbiAgICBrZXk/OiBzdHJpbmcsXG4gICk6IEh0dHBQYXJhbXMge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBEYXRlID09PSBmYWxzZSkge1xuICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlLCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKFxuICAgIGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsXG4gICAgdmFsdWU/OiBhbnksXG4gICAga2V5Pzogc3RyaW5nLFxuICApOiBIdHRwUGFyYW1zIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICh2YWx1ZSBhcyBhbnlbXSkuZm9yRWFjaChcbiAgICAgICAgICAoZWxlbSkgPT5cbiAgICAgICAgICAgIChodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgZWxlbSwga2V5KSksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAodmFsdWUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIERhdGVcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKFxuICAgICAgICAgIChrKSA9PlxuICAgICAgICAgICAgKGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShcbiAgICAgICAgICAgICAgaHR0cFBhcmFtcyxcbiAgICAgICAgICAgICAgdmFsdWVba10sXG4gICAgICAgICAgICAgIGtleSAhPSBudWxsID8gYCR7a2V5fS4ke2t9YCA6IGssXG4gICAgICAgICAgICApKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKFwia2V5IG1heSBub3QgYmUgbnVsbCBpZiB2YWx1ZSBpcyBub3Qgb2JqZWN0IG9yIGFycmF5XCIpO1xuICAgIH1cbiAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgZXhwb3J0IGpvYiB0aGF0IGlzIGluIHByb2dyZXNzLlxuICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIGV4cG9ydFVzZXJzQ2FuY2VsQ3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBFeHBvcnRVc2Vyc0NhbmNlbENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxFeHBvcnRKb2JEdG8+O1xuICBwdWJsaWMgZXhwb3J0VXNlcnNDYW5jZWxDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzQ2FuY2VsQ3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJyZXNwb25zZVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc0NhbmNlbENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNDYW5jZWxDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc0NhbmNlbENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNDYW5jZWxDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU6IGFueSA9IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaWQgPSByZXF1ZXN0UGFyYW1ldGVycz8uaWQ7XG4gICAgaWYgKGlkID09PSBudWxsIHx8IGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgaWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBleHBvcnRVc2Vyc0NhbmNlbENyZWF0ZS5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLy8gYXV0aGVudGljYXRpb24gKGNvb2tpZUF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJjb29raWVBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICB9XG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoand0QXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImp3dEF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICAgIFwiQmVhcmVyIFwiICsgbG9jYWxWYXJDcmVkZW50aWFsLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICB9XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQWNjZXB0XCIsXG4gICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCByZXNwb25zZVR5cGVfOiBcInRleHRcIiB8IFwianNvblwiIHwgXCJibG9iXCIgPSBcImpzb25cIjtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKFwidGV4dFwiKSkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJ0ZXh0XCI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJqc29uXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJibG9iXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3YxL2V4cG9ydC11c2Vycy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7IG5hbWU6IFwiaWRcIiwgdmFsdWU6IGlkLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwibnVtYmVyXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZCB9KX0vY2FuY2VsL2A7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEV4cG9ydEpvYkR0bz4oXG4gICAgICBcInBvc3RcIixcbiAgICAgIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAge1xuICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpZXdzZXQgZm9yIGV4cG9ydGluZyB1c2Vycy5cbiAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICovXG4gIHB1YmxpYyBleHBvcnRVc2Vyc0xpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBFeHBvcnRVc2Vyc0xpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8UGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0bz47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc0xpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBFeHBvcnRVc2Vyc0xpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcInJlc3BvbnNlXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxQYWdpbmF0ZWRFeHBvcnRKb2JMaXN0RHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc0xpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBFeHBvcnRVc2Vyc0xpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8UGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0bz4+O1xuICBwdWJsaWMgZXhwb3J0VXNlcnNMaXN0KFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogRXhwb3J0VXNlcnNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlOiBhbnkgPSBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGxpbWl0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmxpbWl0O1xuICAgIGNvbnN0IG9mZnNldCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5vZmZzZXQ7XG4gICAgY29uc3Qgb3JkZXJpbmcgPSByZXF1ZXN0UGFyYW1ldGVycz8ub3JkZXJpbmc7XG4gICAgY29uc3Qgc2VhcmNoID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNlYXJjaDtcblxuICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHsgZW5jb2RlcjogdGhpcy5lbmNvZGVyIH0pO1xuICAgIGlmIChsaW1pdCAhPT0gdW5kZWZpbmVkICYmIGxpbWl0ICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5saW1pdCxcbiAgICAgICAgXCJsaW1pdFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9mZnNldCAhPT0gdW5kZWZpbmVkICYmIG9mZnNldCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+b2Zmc2V0LFxuICAgICAgICBcIm9mZnNldFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9yZGVyaW5nICE9PSB1bmRlZmluZWQgJiYgb3JkZXJpbmcgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55Pm9yZGVyaW5nLFxuICAgICAgICBcIm9yZGVyaW5nXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc2VhcmNoICE9PSB1bmRlZmluZWQgJiYgc2VhcmNoICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5zZWFyY2gsXG4gICAgICAgIFwic2VhcmNoXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChjb29raWVBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiY29va2llQXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgfVxuXG4gICAgLy8gYXV0aGVudGljYXRpb24gKGp3dEF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJqd3RBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQXV0aG9yaXphdGlvblwiLFxuICAgICAgICBcIkJlYXJlciBcIiArIGxvY2FsVmFyQ3JlZGVudGlhbCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1wiYXBwbGljYXRpb24vanNvblwiXTtcbiAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID1cbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgfVxuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkFjY2VwdFwiLFxuICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgcmVzcG9uc2VUeXBlXzogXCJ0ZXh0XCIgfCBcImpzb25cIiB8IFwiYmxvYlwiID0gXCJqc29uXCI7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aChcInRleHRcIikpIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwidGV4dFwiO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpXG4gICAgICApIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwianNvblwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwiYmxvYlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS92MS9leHBvcnQtdXNlcnMvYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8UGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0bz4oXG4gICAgICBcImdldFwiLFxuICAgICAgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICB7XG4gICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVmlld3NldCBmb3IgZXhwb3J0aW5nIHVzZXJzLlxuICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIGV4cG9ydFVzZXJzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8RXhwb3J0Sm9iRHRvPjtcbiAgcHVibGljIGV4cG9ydFVzZXJzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcInJlc3BvbnNlXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxFeHBvcnRKb2JEdG8+PjtcbiAgcHVibGljIGV4cG9ydFVzZXJzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc1JldHJpZXZlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBFeHBvcnRVc2Vyc1JldHJpZXZlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlOiBhbnkgPSBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGlkID0gcmVxdWVzdFBhcmFtZXRlcnM/LmlkO1xuICAgIGlmIChpZCA9PT0gbnVsbCB8fCBpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiUmVxdWlyZWQgcGFyYW1ldGVyIGlkIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZXhwb3J0VXNlcnNSZXRyaWV2ZS5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLy8gYXV0aGVudGljYXRpb24gKGNvb2tpZUF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJjb29raWVBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICB9XG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoand0QXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImp3dEF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICAgIFwiQmVhcmVyIFwiICsgbG9jYWxWYXJDcmVkZW50aWFsLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICB9XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQWNjZXB0XCIsXG4gICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCByZXNwb25zZVR5cGVfOiBcInRleHRcIiB8IFwianNvblwiIHwgXCJibG9iXCIgPSBcImpzb25cIjtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKFwidGV4dFwiKSkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJ0ZXh0XCI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJqc29uXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJibG9iXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3YxL2V4cG9ydC11c2Vycy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7IG5hbWU6IFwiaWRcIiwgdmFsdWU6IGlkLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwibnVtYmVyXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZCB9KX0vYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8RXhwb3J0Sm9iRHRvPihcbiAgICAgIFwiZ2V0XCIsXG4gICAgICBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgIHtcbiAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGVuZHBvaW50IGNyZWF0ZXMgZXhwb3J0IGpvYiBhbmQgc3RhcnRzIGl0LiBUbyBtb25pdG9yIHByb2dyZXNzIHVzZSBkZXRhaWwgZW5kcG9pbnQgZm9yIGpvYnMgdG8gZmV0Y2ggc3RhdGUgb2Ygam9iLiBPbmNlIGl0XFwmIzM5O3Mgc3RhdHVzIGlzICYjeDYwO0VYUE9SVEVEJiN4NjA7LCB5b3UgY2FuIGRvd25sb2FkIGZpbGUuXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAqL1xuICBwdWJsaWMgZXhwb3J0VXNlcnNTdGFydENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNTdGFydENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxFeHBvcnRKb2JEdG8+O1xuICBwdWJsaWMgZXhwb3J0VXNlcnNTdGFydENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNTdGFydENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwicmVzcG9uc2VcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEV4cG9ydEpvYkR0bz4+O1xuICBwdWJsaWMgZXhwb3J0VXNlcnNTdGFydENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNTdGFydENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiZXZlbnRzXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxFeHBvcnRKb2JEdG8+PjtcbiAgcHVibGljIGV4cG9ydFVzZXJzU3RhcnRDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzU3RhcnRDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU6IGFueSA9IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgdXNlclJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0byA9XG4gICAgICByZXF1ZXN0UGFyYW1ldGVycz8udXNlclJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0bztcbiAgICBpZiAoXG4gICAgICB1c2VyUmVzb3VyY2VDcmVhdGVFeHBvcnRKb2JSZXF1ZXN0RHRvID09PSBudWxsIHx8XG4gICAgICB1c2VyUmVzb3VyY2VDcmVhdGVFeHBvcnRKb2JSZXF1ZXN0RHRvID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgdXNlclJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0byB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGV4cG9ydFVzZXJzU3RhcnRDcmVhdGUuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBicmFuY2ggPSByZXF1ZXN0UGFyYW1ldGVycz8uYnJhbmNoO1xuICAgIGNvbnN0IGJyYW5jaEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJyYW5jaEluO1xuICAgIGNvbnN0IGRlcGFydG1lbnQgPSByZXF1ZXN0UGFyYW1ldGVycz8uZGVwYXJ0bWVudDtcbiAgICBjb25zdCBkZXBhcnRtZW50SW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uZGVwYXJ0bWVudEluO1xuICAgIGNvbnN0IGlkID0gcmVxdWVzdFBhcmFtZXRlcnM/LmlkO1xuICAgIGNvbnN0IGlkSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uaWRJbjtcbiAgICBjb25zdCBpc1N0YWZmID0gcmVxdWVzdFBhcmFtZXRlcnM/LmlzU3RhZmY7XG4gICAgY29uc3QgaXNTdGFmZkluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmlzU3RhZmZJbjtcbiAgICBjb25zdCBvcmRlcmluZyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5vcmRlcmluZztcbiAgICBjb25zdCByb2xlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnJvbGU7XG4gICAgY29uc3Qgcm9sZUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnJvbGVJbjtcbiAgICBjb25zdCBzZWFyY2ggPSByZXF1ZXN0UGFyYW1ldGVycz8uc2VhcmNoO1xuICAgIGNvbnN0IHN0YXR1cyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zdGF0dXM7XG4gICAgY29uc3Qgc3RhdHVzSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uc3RhdHVzSW47XG4gICAgY29uc3Qgc3VwZXJ2aXNlZXNJZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnN1cGVydmlzZWVzSWRJbjtcbiAgICBjb25zdCBzdXBlcnZpc29yc0lkSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uc3VwZXJ2aXNvcnNJZEluO1xuICAgIGNvbnN0IHdvcmtUeXBlID0gcmVxdWVzdFBhcmFtZXRlcnM/LndvcmtUeXBlO1xuICAgIGNvbnN0IHdvcmtUeXBlSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8ud29ya1R5cGVJbjtcblxuICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHsgZW5jb2RlcjogdGhpcy5lbmNvZGVyIH0pO1xuICAgIGlmIChicmFuY2ggIT09IHVuZGVmaW5lZCAmJiBicmFuY2ggIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmJyYW5jaCxcbiAgICAgICAgXCJicmFuY2hcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChicmFuY2hJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5icmFuY2hJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImJyYW5jaF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkZXBhcnRtZW50ICE9PSB1bmRlZmluZWQgJiYgZGVwYXJ0bWVudCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+ZGVwYXJ0bWVudCxcbiAgICAgICAgXCJkZXBhcnRtZW50XCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGVwYXJ0bWVudEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmRlcGFydG1lbnRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImRlcGFydG1lbnRfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCAmJiBpZCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+aWQsXG4gICAgICAgIFwiaWRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmlkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJpZF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpc1N0YWZmICE9PSB1bmRlZmluZWQgJiYgaXNTdGFmZiAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+aXNTdGFmZixcbiAgICAgICAgXCJpc19zdGFmZlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlzU3RhZmZJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5pc1N0YWZmSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJpc19zdGFmZl9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcmRlcmluZyAhPT0gdW5kZWZpbmVkICYmIG9yZGVyaW5nICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5vcmRlcmluZyxcbiAgICAgICAgXCJvcmRlcmluZ1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJvbGUgIT09IHVuZGVmaW5lZCAmJiByb2xlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5yb2xlLFxuICAgICAgICBcInJvbGVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyb2xlSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4ucm9sZUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwicm9sZV9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzZWFyY2ggIT09IHVuZGVmaW5lZCAmJiBzZWFyY2ggIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnNlYXJjaCxcbiAgICAgICAgXCJzZWFyY2hcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgIT09IHVuZGVmaW5lZCAmJiBzdGF0dXMgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnN0YXR1cyxcbiAgICAgICAgXCJzdGF0dXNcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0dXNJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5zdGF0dXNJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInN0YXR1c19faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdXBlcnZpc2Vlc0lkSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uc3VwZXJ2aXNlZXNJZEluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwic3VwZXJ2aXNlZXNfX2lkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN1cGVydmlzb3JzSWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5zdXBlcnZpc29yc0lkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJzdXBlcnZpc29yc19faWRfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAod29ya1R5cGUgIT09IHVuZGVmaW5lZCAmJiB3b3JrVHlwZSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+d29ya1R5cGUsXG4gICAgICAgIFwid29ya190eXBlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAod29ya1R5cGVJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi53b3JrVHlwZUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwid29ya190eXBlX19pblwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoY29va2llQXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImNvb2tpZUF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgIH1cblxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChqd3RBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiand0QXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkF1dGhvcml6YXRpb25cIixcbiAgICAgICAgXCJCZWFyZXIgXCIgKyBsb2NhbFZhckNyZWRlbnRpYWwsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcImFwcGxpY2F0aW9uL2pzb25cIl07XG4gICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgIH1cbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBY2NlcHRcIixcbiAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLFxuICAgICAgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIsXG4gICAgXTtcbiAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzcG9uc2VUeXBlXzogXCJ0ZXh0XCIgfCBcImpzb25cIiB8IFwiYmxvYlwiID0gXCJqc29uXCI7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aChcInRleHRcIikpIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwidGV4dFwiO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpXG4gICAgICApIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwianNvblwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwiYmxvYlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS92MS9leHBvcnQtdXNlcnMvc3RhcnQvYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8RXhwb3J0Sm9iRHRvPihcbiAgICAgIFwicG9zdFwiLFxuICAgICAgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICB7XG4gICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgIGJvZHk6IHVzZXJSZXNvdXJjZUNyZWF0ZUV4cG9ydEpvYlJlcXVlc3REdG8sXG4gICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==