@energycap/energycapid-sdk-angular 1.2112.159-develop-20230615-1723 → 1.2306.160-develop-20230616-1145

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 (135) hide show
  1. package/api/organization.service.d.ts +28 -0
  2. package/esm2020/api/application.service.mjs +2 -2
  3. package/esm2020/api/applicationInstance.service.mjs +2 -2
  4. package/esm2020/api/auth.service.mjs +2 -2
  5. package/esm2020/api/dataSource.service.mjs +2 -2
  6. package/esm2020/api/domainJoinType.service.mjs +2 -2
  7. package/esm2020/api/environment.service.mjs +2 -2
  8. package/esm2020/api/me.service.mjs +2 -2
  9. package/esm2020/api/notification.service.mjs +2 -2
  10. package/esm2020/api/organization.service.mjs +76 -2
  11. package/esm2020/api/organizationApplication.service.mjs +2 -2
  12. package/esm2020/api/user.service.mjs +2 -2
  13. package/esm2020/model/aPIFilter.mjs +2 -2
  14. package/esm2020/model/aPIOrderBy.mjs +2 -2
  15. package/esm2020/model/applicationInstanceDetailResponse.mjs +2 -2
  16. package/esm2020/model/applicationInstanceRedirectResponse.mjs +2 -2
  17. package/esm2020/model/applicationInstanceResponse.mjs +2 -2
  18. package/esm2020/model/applicationInstanceUserResponse.mjs +2 -2
  19. package/esm2020/model/applicationResponse.mjs +2 -2
  20. package/esm2020/model/changePasswordRequest.mjs +2 -2
  21. package/esm2020/model/dataSourceResponse.mjs +2 -2
  22. package/esm2020/model/dataSourceUpdateRequest.mjs +2 -2
  23. package/esm2020/model/dataType.mjs +2 -2
  24. package/esm2020/model/domainAccessControlResponse.mjs +2 -2
  25. package/esm2020/model/domainJoinTypeResponse.mjs +2 -2
  26. package/esm2020/model/environmentResponse.mjs +2 -2
  27. package/esm2020/model/hierarchicalOrganizations.mjs +2 -2
  28. package/esm2020/model/hierarchicalOrganizations2.mjs +2 -2
  29. package/esm2020/model/inviteUserFailure.mjs +2 -2
  30. package/esm2020/model/inviteUsersRequest.mjs +2 -2
  31. package/esm2020/model/inviteUsersResponse.mjs +2 -2
  32. package/esm2020/model/linkDataSourceRequest.mjs +2 -2
  33. package/esm2020/model/loginResponse.mjs +2 -2
  34. package/esm2020/model/loginSourceResponse.mjs +2 -2
  35. package/esm2020/model/models.mjs +3 -1
  36. package/esm2020/model/notificationBadgeResponse.mjs +2 -2
  37. package/esm2020/model/notificationCategory.mjs +2 -2
  38. package/esm2020/model/notificationResponse.mjs +2 -2
  39. package/esm2020/model/notificationSettingRequest.mjs +2 -2
  40. package/esm2020/model/notificationType.mjs +2 -2
  41. package/esm2020/model/notificationUpdateRequest.mjs +2 -2
  42. package/esm2020/model/organizationAccessControlResponse.mjs +2 -2
  43. package/esm2020/model/organizationAndUserRequest.mjs +17 -0
  44. package/esm2020/model/organizationAndUserResponse.mjs +17 -0
  45. package/esm2020/model/organizationApplicationResponse.mjs +2 -2
  46. package/esm2020/model/organizationAssignedCustomField.mjs +2 -2
  47. package/esm2020/model/organizationCustomFieldRequest.mjs +2 -2
  48. package/esm2020/model/organizationDetailResponse.mjs +2 -2
  49. package/esm2020/model/organizationGatherCustomField.mjs +2 -2
  50. package/esm2020/model/organizationJoinRequest.mjs +2 -2
  51. package/esm2020/model/organizationRequest.mjs +2 -2
  52. package/esm2020/model/organizationResponse.mjs +2 -2
  53. package/esm2020/model/organizationUserResponse.mjs +2 -2
  54. package/esm2020/model/organizationUserStatusEnum.mjs +2 -2
  55. package/esm2020/model/resetPasswordRequest.mjs +2 -2
  56. package/esm2020/model/roleEnum.mjs +2 -2
  57. package/esm2020/model/selfCreateUserRequest.mjs +2 -2
  58. package/esm2020/model/updateMeRequest.mjs +2 -2
  59. package/esm2020/model/updateOrganizationAccessControlRequest.mjs +2 -2
  60. package/esm2020/model/updateOrganizationUserPermissionRequest.mjs +2 -2
  61. package/esm2020/model/updateResult.mjs +2 -2
  62. package/esm2020/model/userApplicationInstanceResponse.mjs +2 -2
  63. package/esm2020/model/userAuthResultEnum.mjs +2 -2
  64. package/esm2020/model/userChild.mjs +2 -2
  65. package/esm2020/model/userLoginRequest.mjs +2 -2
  66. package/esm2020/model/userOrganizationResponse.mjs +2 -2
  67. package/esm2020/model/userOrganizationStateEnum.mjs +2 -2
  68. package/esm2020/model/userResponse.mjs +2 -2
  69. package/esm2020/model/userStatusEnum.mjs +2 -2
  70. package/esm2020/model/validatePasswordRequest.mjs +2 -2
  71. package/esm2020/model/validatePasswordResponse.mjs +2 -2
  72. package/fesm2015/energycap-energycapid-sdk-angular.mjs +176 -68
  73. package/fesm2015/energycap-energycapid-sdk-angular.mjs.map +1 -1
  74. package/fesm2020/energycap-energycapid-sdk-angular.mjs +176 -68
  75. package/fesm2020/energycap-energycapid-sdk-angular.mjs.map +1 -1
  76. package/model/aPIFilter.d.ts +1 -1
  77. package/model/aPIOrderBy.d.ts +1 -1
  78. package/model/applicationInstanceDetailResponse.d.ts +1 -1
  79. package/model/applicationInstanceRedirectResponse.d.ts +1 -1
  80. package/model/applicationInstanceResponse.d.ts +1 -1
  81. package/model/applicationInstanceUserResponse.d.ts +1 -1
  82. package/model/applicationResponse.d.ts +1 -1
  83. package/model/changePasswordRequest.d.ts +1 -1
  84. package/model/dataSourceResponse.d.ts +1 -1
  85. package/model/dataSourceUpdateRequest.d.ts +1 -1
  86. package/model/dataType.d.ts +1 -1
  87. package/model/domainAccessControlResponse.d.ts +1 -1
  88. package/model/domainJoinTypeResponse.d.ts +1 -1
  89. package/model/environmentResponse.d.ts +1 -1
  90. package/model/hierarchicalOrganizations.d.ts +1 -1
  91. package/model/hierarchicalOrganizations2.d.ts +1 -1
  92. package/model/inviteUserFailure.d.ts +1 -1
  93. package/model/inviteUsersRequest.d.ts +1 -1
  94. package/model/inviteUsersResponse.d.ts +1 -1
  95. package/model/linkDataSourceRequest.d.ts +1 -1
  96. package/model/loginResponse.d.ts +1 -1
  97. package/model/loginSourceResponse.d.ts +1 -1
  98. package/model/models.d.ts +2 -0
  99. package/model/notificationBadgeResponse.d.ts +1 -1
  100. package/model/notificationCategory.d.ts +1 -1
  101. package/model/notificationResponse.d.ts +1 -1
  102. package/model/notificationSettingRequest.d.ts +1 -1
  103. package/model/notificationType.d.ts +1 -1
  104. package/model/notificationUpdateRequest.d.ts +1 -1
  105. package/model/organizationAccessControlResponse.d.ts +1 -1
  106. package/model/organizationAndUserRequest.d.ts +28 -0
  107. package/model/organizationAndUserResponse.d.ts +20 -0
  108. package/model/organizationApplicationResponse.d.ts +1 -1
  109. package/model/organizationAssignedCustomField.d.ts +1 -1
  110. package/model/organizationCustomFieldRequest.d.ts +1 -1
  111. package/model/organizationDetailResponse.d.ts +1 -1
  112. package/model/organizationGatherCustomField.d.ts +1 -1
  113. package/model/organizationJoinRequest.d.ts +1 -1
  114. package/model/organizationRequest.d.ts +1 -1
  115. package/model/organizationResponse.d.ts +1 -1
  116. package/model/organizationUserResponse.d.ts +1 -1
  117. package/model/organizationUserStatusEnum.d.ts +1 -1
  118. package/model/resetPasswordRequest.d.ts +1 -1
  119. package/model/roleEnum.d.ts +1 -1
  120. package/model/selfCreateUserRequest.d.ts +1 -1
  121. package/model/updateMeRequest.d.ts +1 -1
  122. package/model/updateOrganizationAccessControlRequest.d.ts +1 -1
  123. package/model/updateOrganizationUserPermissionRequest.d.ts +1 -1
  124. package/model/updateResult.d.ts +1 -1
  125. package/model/userApplicationInstanceResponse.d.ts +1 -1
  126. package/model/userAuthResultEnum.d.ts +1 -1
  127. package/model/userChild.d.ts +1 -1
  128. package/model/userLoginRequest.d.ts +1 -1
  129. package/model/userOrganizationResponse.d.ts +1 -1
  130. package/model/userOrganizationStateEnum.d.ts +1 -1
  131. package/model/userResponse.d.ts +1 -1
  132. package/model/userStatusEnum.d.ts +1 -1
  133. package/model/validatePasswordRequest.d.ts +1 -1
  134. package/model/validatePasswordResponse.d.ts +1 -1
  135. package/package.json +1 -1
@@ -3,6 +3,8 @@ import { HttpResponse } from '@angular/common/http';
3
3
  import { Observable } from 'rxjs';
4
4
  import { HierarchicalOrganizations } from '../model/hierarchicalOrganizations';
5
5
  import { OrganizationAccessControlResponse } from '../model/organizationAccessControlResponse';
6
+ import { OrganizationAndUserRequest } from '../model/organizationAndUserRequest';
7
+ import { OrganizationAndUserResponse } from '../model/organizationAndUserResponse';
6
8
  import { OrganizationDetailResponse } from '../model/organizationDetailResponse';
7
9
  import { OrganizationJoinRequest } from '../model/organizationJoinRequest';
8
10
  import { OrganizationRequest } from '../model/organizationRequest';
@@ -43,6 +45,19 @@ export declare class OrganizationService {
43
45
  }, extraHttpRequestHeaders?: {
44
46
  [header: string]: string | string[];
45
47
  }): Observable<OrganizationResponse>;
48
+ /**
49
+ * Create a new child organization Invites user to this new organization
50
+ *
51
+ * @param parentOrganizationId The parent of the new organization
52
+ * @param body Details about the new organization and user
53
+ */
54
+ createOrganizationAndUser(parentOrganizationId: string, body?: OrganizationAndUserRequest, extraHttpRequestParams?: {
55
+ search: string | {
56
+ [param: string]: string | string[];
57
+ };
58
+ }, extraHttpRequestHeaders?: {
59
+ [header: string]: string | string[];
60
+ }): Observable<OrganizationAndUserResponse>;
46
61
  /**
47
62
  * Gets organization access control data You must be an admin to the organization to get this information
48
63
  *
@@ -200,6 +215,19 @@ export declare class OrganizationService {
200
215
  }, extraHttpRequestHeaders?: {
201
216
  [header: string]: string | string[];
202
217
  }): Observable<HttpResponse<OrganizationResponse>>;
218
+ /**
219
+ * Create a new child organization Invites user to this new organization
220
+ *
221
+ * @param parentOrganizationId The parent of the new organization
222
+ * @param body Details about the new organization and user
223
+ */
224
+ createOrganizationAndUserWithHttpInfo(parentOrganizationId: string, body?: OrganizationAndUserRequest, extraHttpRequestParams?: {
225
+ search: string | {
226
+ [param: string]: string | string[];
227
+ };
228
+ }, extraHttpRequestHeaders?: {
229
+ [header: string]: string | string[];
230
+ }): Observable<HttpResponse<OrganizationAndUserResponse>>;
203
231
  /**
204
232
  * Gets organization access control data You must be an admin to the organization to get this information
205
233
  *
@@ -2,7 +2,7 @@
2
2
  * EnergyCAP ID SDK
3
3
  * Document used to generate the EnergyCAP ID SDK
4
4
  *
5
- * OpenAPI spec version: 1.2112
5
+ * OpenAPI spec version: 1.2306
6
6
  * Contact: support@energycap.com
7
7
  *
8
8
  * NOTE: This class is auto generated by the swagger code generator program.
@@ -142,4 +142,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
142
142
  }] }, { type: i2.Configuration, decorators: [{
143
143
  type: Optional
144
144
  }] }]; } });
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwaS9hcHBsaWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQTJCLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFvQixzQkFBc0IsQ0FBQztBQUl6RixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQW9ELGdCQUFnQixDQUFDO0FBSW5GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBOEMsY0FBYyxDQUFDO0FBR2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBMEMsa0JBQWtCLENBQUM7Ozs7QUFFckYsTUFBTSxhQUFhLEdBQUc7SUFDbEIsR0FBRyxFQUFFLEtBQUs7SUFDVixJQUFJLEVBQUUsTUFBTTtJQUNaLEdBQUcsRUFBRSxLQUFLO0lBQ1YsTUFBTSxFQUFFLFFBQVE7SUFDaEIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsSUFBSSxFQUFFLE1BQU07SUFDWixLQUFLLEVBQUUsT0FBTztDQUNqQixDQUFDO0FBSUYsTUFBTSxPQUFPLGtCQUFrQjtJQU0zQixZQUFzQixJQUFnQixFQUFnQyxRQUFnQixFQUFjLGFBQTRCO1FBQTFHLFNBQUksR0FBSixJQUFJLENBQVk7UUFKNUIsYUFBUSxHQUFHLG1CQUFtQixDQUFDO1FBQ2xDLG1CQUFjLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEQsa0JBQWEsR0FBa0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUd0RCxJQUFJLFFBQVEsRUFBRTtZQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxhQUFhLEVBQUU7WUFDZixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztZ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Q0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztTQUN2RjtRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsRUFBRTtZQUN4RCxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7U0FDN0c7UUFHRCxNQUFNLFFBQVEsR0FBYSxFQUMxQixDQUFDO1FBRUYsSUFBSSxjQUFjLEdBQUc7WUFDakIsT0FBTyxFQUFFLE9BQU87WUFDaEIsTUFBTSxFQUFFLGVBQWU7WUFDdkIsZUFBZSxFQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNsRCxPQUFPLEVBQUUsVUFBd0I7U0FDcEMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQTZCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7OytHQXRIUSxrQkFBa0IsNENBTWdDLFNBQVM7bUhBTjNELGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVOzswQkFPa0MsUUFBUTs7MEJBQUcsTUFBTTsyQkFBQyxTQUFTOzswQkFBcUIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBFbmVyZ3lDQVAgSUQgU0RLXHJcbiAqIERvY3VtZW50IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIEVuZXJneUNBUCBJRCBTREtcclxuICpcclxuICogT3BlbkFQSSBzcGVjIHZlcnNpb246IDEuMjExMlxyXG4gKiBDb250YWN0OiBzdXBwb3J0QGVuZXJneWNhcC5jb21cclxuICpcclxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc3dhZ2dlciBjb2RlIGdlbmVyYXRvciBwcm9ncmFtLlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1jb2RlZ2VuLmdpdFxyXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXHJcbiAqL1xyXG5cclxuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9ICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9ICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQXBwbGljYXRpb25SZXNwb25zZSB9IGZyb20gJy4uL21vZGVsL2FwcGxpY2F0aW9uUmVzcG9uc2UnO1xyXG5cclxuaW1wb3J0IHsgQkFTRV9QQVRIIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XHJcbmltcG9ydCB7IENPTExFQ1RJT05fRk9STUFUUyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi92YXJpYWJsZXMnO1xyXG5cclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xyXG5cclxuY29uc3QgUmVxdWVzdE1ldGhvZCA9IHtcclxuICAgIEdldDogJ2dldCcsXHJcbiAgICBQb3N0OiAncG9zdCcsXHJcbiAgICBQdXQ6ICdwdXQnLFxyXG4gICAgRGVsZXRlOiAnZGVsZXRlJyxcclxuICAgIE9wdGlvbnM6ICdvcHRpb25zJyxcclxuICAgIEhlYWQ6ICdoZWFkJyxcclxuICAgIFBhdGNoOiAncGF0Y2gnXHJcbn07XHJcblxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25TZXJ2aWNlIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYmFzZVBhdGggPSAnaHR0cHM6Ly9sb2NhbGhvc3QnO1xyXG4gICAgcHVibGljIGRlZmF1bHRIZWFkZXJzOiBIdHRwSGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgcHVibGljIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKUBJbmplY3QoQkFTRV9QQVRIKSBiYXNlUGF0aDogc3RyaW5nLCBAT3B0aW9uYWwoKSBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgaWYgKGJhc2VQYXRoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcclxuXHRcdFx0dGhpcy5iYXNlUGF0aCA9IGJhc2VQYXRoIHx8IGNvbmZpZ3VyYXRpb24uYmFzZVBhdGggfHwgdGhpcy5iYXNlUGF0aDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEV4dGVuZHMgb2JqZWN0IGJ5IGNvcGluZyBub24tZXhpc3RpbmcgcHJvcGVydGllcy5cclxuICAgICAqIEBwYXJhbSBvYmpBIG9iamVjdCB0byBiZSBleHRlbmRlZFxyXG4gICAgICogQHBhcmFtIG9iakIgc291cmNlIG9iamVjdFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGV4dGVuZE9iajxUMSxUMj4ob2JqQTogVDEsIG9iakI6IFQyKSB7XHJcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gb2JqQil7XHJcbiAgICAgICAgICAgIGlmKG9iakIuaGFzT3duUHJvcGVydHkoa2V5KSl7XHJcbiAgICAgICAgICAgICAgICAob2JqQSBhcyBhbnkpW2tleV0gPSAob2JqQiBhcyBhbnkpW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDxUMSZUMj5vYmpBO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIGNvbnN1bWVzIHN0cmluZ1tdIG1pbWUtdHlwZXNcclxuICAgICAqIEByZXR1cm4gdHJ1ZTogY29uc3VtZXMgY29udGFpbnMgJ211bHRpcGFydC9mb3JtLWRhdGEnLCBmYWxzZTogb3RoZXJ3aXNlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY2FuQ29uc3VtZUZvcm0oY29uc3VtZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgZm9ybSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJztcclxuICAgICAgICBmb3IgKGxldCBjb25zdW1lIG9mIGNvbnN1bWVzKSB7XHJcbiAgICAgICAgICAgIGlmIChmb3JtID09PSBjb25zdW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGxpc3Qgb2YgYWxsIGFwcGxpY2F0aW9ucyB0byB3aGljaCB0aGUgY3VycmVudCB1c2VyIGhhcyBhY2Nlc3MuXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldE15QXBwbGljYXRpb25zKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8QXJyYXk8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNeUFwcGxpY2F0aW9uc1dpdGhIdHRwSW5mbyhleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8QXJyYXk8QXBwbGljYXRpb25SZXNwb25zZT4+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgbGlzdCBvZiBhbGwgYXBwbGljYXRpb25zIHRvIHdoaWNoIHRoZSBjdXJyZW50IHVzZXIgaGFzIGFjY2Vzcy5cclxuICAgICAqIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0TXlBcHBsaWNhdGlvbnNXaXRoSHR0cEluZm8oZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QXJyYXk8QXBwbGljYXRpb25SZXNwb25zZT4+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92MjAyMTA4L0FwcGxpY2F0aW9uJztcclxuXHJcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyczogSHR0cFBhcmFtcztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJykgeyBcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tU3RyaW5nOiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21PYmplY3Q6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRIZWFkZXJzLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHRoaXMuZGVmYXVsdEhlYWRlcnMuZ2V0QWxsKGtleSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcclxuICAgICAgICBsZXQgcHJvZHVjZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVknLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PEFycmF5PEFwcGxpY2F0aW9uUmVzcG9uc2U+PihSZXF1ZXN0TWV0aG9kLkdldCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwaS9hcHBsaWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQTJCLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFvQixzQkFBc0IsQ0FBQztBQUl6RixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQW9ELGdCQUFnQixDQUFDO0FBSW5GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBOEMsY0FBYyxDQUFDO0FBR2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBMEMsa0JBQWtCLENBQUM7Ozs7QUFFckYsTUFBTSxhQUFhLEdBQUc7SUFDbEIsR0FBRyxFQUFFLEtBQUs7SUFDVixJQUFJLEVBQUUsTUFBTTtJQUNaLEdBQUcsRUFBRSxLQUFLO0lBQ1YsTUFBTSxFQUFFLFFBQVE7SUFDaEIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsSUFBSSxFQUFFLE1BQU07SUFDWixLQUFLLEVBQUUsT0FBTztDQUNqQixDQUFDO0FBSUYsTUFBTSxPQUFPLGtCQUFrQjtJQU0zQixZQUFzQixJQUFnQixFQUFnQyxRQUFnQixFQUFjLGFBQTRCO1FBQTFHLFNBQUksR0FBSixJQUFJLENBQVk7UUFKNUIsYUFBUSxHQUFHLG1CQUFtQixDQUFDO1FBQ2xDLG1CQUFjLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEQsa0JBQWEsR0FBa0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUd0RCxJQUFJLFFBQVEsRUFBRTtZQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxhQUFhLEVBQUU7WUFDZixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztZQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsSUFBSSxhQUFhLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDOUQ7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxTQUFTLENBQVEsSUFBUSxFQUFFLElBQVE7UUFDdkMsS0FBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUM7WUFDaEIsSUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFDO2dCQUN2QixJQUFZLENBQUMsR0FBRyxDQUFDLEdBQUksSUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzNDO1NBQ0o7UUFDRCxPQUFjLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssY0FBYyxDQUFDLFFBQWtCO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLHFCQUFxQixDQUFDO1FBQ25DLEtBQUssSUFBSSxPQUFPLElBQUksUUFBUSxFQUFFO1lBQzFCLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDbEIsT0FBTyxJQUFJLENBQUM7YUFDZjtTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGlCQUFpQixDQUFDLHNCQUFrRixFQUFFLHVCQUErRDtRQUN4SyxPQUFPLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxzQkFBc0IsRUFBRSx1QkFBdUIsQ0FBQzthQUNyRixJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsUUFBa0QsRUFBRSxFQUFFO1lBQ3ZELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7Z0JBQ3pCLE9BQU8sU0FBUyxDQUFDO2FBQ3BCO2lCQUFNO2dCQUNILE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQzthQUN4QjtRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUE7SUFDVCxDQUFDO0lBR0Q7OztPQUdHO0lBQ0ksNkJBQTZCLENBQUMsc0JBQWtGLEVBQUUsdUJBQStEO1FBQ3BMLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsMEJBQTBCLENBQUM7UUFFeEQsSUFBSSxlQUEyQixDQUFDO1FBRWhDLElBQUksc0JBQXNCLEVBQUU7WUFDeEIsSUFBSSxPQUFPLHNCQUFzQixDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUU7Z0JBQ25ELGVBQWUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDO2FBQ2pGO2lCQUFNO2dCQUNILGVBQWUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDO2FBQ2pGO1NBQ0o7YUFBTTtZQUNILGVBQWUsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1NBQ3RDO1FBRUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksdUJBQXVCLEVBQUU7WUFDekIsTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQzdELE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztTQUNOO1FBR0QsaUNBQWlDO1FBQ2pDLElBQUksUUFBUSxHQUFhO1lBQ3JCLGtCQUFrQjtTQUNyQixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUM3QyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztTQUN2RjtRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsRUFBRTtZQUN4RCxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7U0FDN0c7UUFHRCxNQUFNLFFBQVEsR0FBYSxFQUMxQixDQUFDO1FBRUYsSUFBSSxjQUFjLEdBQUc7WUFDakIsT0FBTyxFQUFFLE9BQU87WUFDaEIsTUFBTSxFQUFFLGVBQWU7WUFDdkIsZUFBZSxFQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNsRCxPQUFPLEVBQUUsVUFBd0I7U0FDcEMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQTZCLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7OytHQXRIUSxrQkFBa0IsNENBTWdDLFNBQVM7bUhBTjNELGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVOzswQkFPa0MsUUFBUTs7MEJBQUcsTUFBTTsyQkFBQyxTQUFTOzswQkFBcUIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBFbmVyZ3lDQVAgSUQgU0RLXHJcbiAqIERvY3VtZW50IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIEVuZXJneUNBUCBJRCBTREtcclxuICpcclxuICogT3BlbkFQSSBzcGVjIHZlcnNpb246IDEuMjMwNlxyXG4gKiBDb250YWN0OiBzdXBwb3J0QGVuZXJneWNhcC5jb21cclxuICpcclxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc3dhZ2dlciBjb2RlIGdlbmVyYXRvciBwcm9ncmFtLlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1jb2RlZ2VuLmdpdFxyXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXHJcbiAqL1xyXG5cclxuLyogdHNsaW50OmRpc2FibGU6bm8tdW51c2VkLXZhcmlhYmxlIG1lbWJlci1vcmRlcmluZyAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9ICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9ICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQXBwbGljYXRpb25SZXNwb25zZSB9IGZyb20gJy4uL21vZGVsL2FwcGxpY2F0aW9uUmVzcG9uc2UnO1xyXG5cclxuaW1wb3J0IHsgQkFTRV9QQVRIIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XHJcbmltcG9ydCB7IENPTExFQ1RJT05fRk9STUFUUyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi92YXJpYWJsZXMnO1xyXG5cclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xyXG5cclxuY29uc3QgUmVxdWVzdE1ldGhvZCA9IHtcclxuICAgIEdldDogJ2dldCcsXHJcbiAgICBQb3N0OiAncG9zdCcsXHJcbiAgICBQdXQ6ICdwdXQnLFxyXG4gICAgRGVsZXRlOiAnZGVsZXRlJyxcclxuICAgIE9wdGlvbnM6ICdvcHRpb25zJyxcclxuICAgIEhlYWQ6ICdoZWFkJyxcclxuICAgIFBhdGNoOiAncGF0Y2gnXHJcbn07XHJcblxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25TZXJ2aWNlIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYmFzZVBhdGggPSAnaHR0cHM6Ly9sb2NhbGhvc3QnO1xyXG4gICAgcHVibGljIGRlZmF1bHRIZWFkZXJzOiBIdHRwSGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgcHVibGljIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKUBJbmplY3QoQkFTRV9QQVRIKSBiYXNlUGF0aDogc3RyaW5nLCBAT3B0aW9uYWwoKSBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgaWYgKGJhc2VQYXRoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcclxuXHRcdFx0dGhpcy5iYXNlUGF0aCA9IGJhc2VQYXRoIHx8IGNvbmZpZ3VyYXRpb24uYmFzZVBhdGggfHwgdGhpcy5iYXNlUGF0aDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEV4dGVuZHMgb2JqZWN0IGJ5IGNvcGluZyBub24tZXhpc3RpbmcgcHJvcGVydGllcy5cclxuICAgICAqIEBwYXJhbSBvYmpBIG9iamVjdCB0byBiZSBleHRlbmRlZFxyXG4gICAgICogQHBhcmFtIG9iakIgc291cmNlIG9iamVjdFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGV4dGVuZE9iajxUMSxUMj4ob2JqQTogVDEsIG9iakI6IFQyKSB7XHJcbiAgICAgICAgZm9yKGxldCBrZXkgaW4gb2JqQil7XHJcbiAgICAgICAgICAgIGlmKG9iakIuaGFzT3duUHJvcGVydHkoa2V5KSl7XHJcbiAgICAgICAgICAgICAgICAob2JqQSBhcyBhbnkpW2tleV0gPSAob2JqQiBhcyBhbnkpW2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDxUMSZUMj5vYmpBO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIGNvbnN1bWVzIHN0cmluZ1tdIG1pbWUtdHlwZXNcclxuICAgICAqIEByZXR1cm4gdHJ1ZTogY29uc3VtZXMgY29udGFpbnMgJ211bHRpcGFydC9mb3JtLWRhdGEnLCBmYWxzZTogb3RoZXJ3aXNlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY2FuQ29uc3VtZUZvcm0oY29uc3VtZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgZm9ybSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJztcclxuICAgICAgICBmb3IgKGxldCBjb25zdW1lIG9mIGNvbnN1bWVzKSB7XHJcbiAgICAgICAgICAgIGlmIChmb3JtID09PSBjb25zdW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGxpc3Qgb2YgYWxsIGFwcGxpY2F0aW9ucyB0byB3aGljaCB0aGUgY3VycmVudCB1c2VyIGhhcyBhY2Nlc3MuXHJcbiAgICAgKiBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldE15QXBwbGljYXRpb25zKGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8QXJyYXk8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNeUFwcGxpY2F0aW9uc1dpdGhIdHRwSW5mbyhleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8QXJyYXk8QXBwbGljYXRpb25SZXNwb25zZT4+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgbGlzdCBvZiBhbGwgYXBwbGljYXRpb25zIHRvIHdoaWNoIHRoZSBjdXJyZW50IHVzZXIgaGFzIGFjY2Vzcy5cclxuICAgICAqIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0TXlBcHBsaWNhdGlvbnNXaXRoSHR0cEluZm8oZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QXJyYXk8QXBwbGljYXRpb25SZXNwb25zZT4+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92MjAyMTA4L0FwcGxpY2F0aW9uJztcclxuXHJcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyczogSHR0cFBhcmFtcztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJykgeyBcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tU3RyaW5nOiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21PYmplY3Q6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRIZWFkZXJzLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHRoaXMuZGVmYXVsdEhlYWRlcnMuZ2V0QWxsKGtleSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcclxuICAgICAgICBsZXQgcHJvZHVjZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVknLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PEFycmF5PEFwcGxpY2F0aW9uUmVzcG9uc2U+PihSZXF1ZXN0TWV0aG9kLkdldCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
@@ -2,7 +2,7 @@
2
2
  * EnergyCAP ID SDK
3
3
  * Document used to generate the EnergyCAP ID SDK
4
4
  *
5
- * OpenAPI spec version: 1.2112
5
+ * OpenAPI spec version: 1.2306
6
6
  * Contact: support@energycap.com
7
7
  *
8
8
  * NOTE: This class is auto generated by the swagger code generator program.
@@ -459,4 +459,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
459
459
  }] }, { type: i2.Configuration, decorators: [{
460
460
  type: Optional
461
461
  }] }]; } });
462
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb25JbnN0YW5jZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXBpL2FwcGxpY2F0aW9uSW5zdGFuY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBRUgsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUEyQixlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBb0Isc0JBQXNCLENBQUM7QUFJekYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFvRCxnQkFBZ0IsQ0FBQztBQU9uRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQThDLGNBQWMsQ0FBQztBQUdqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQTBDLGtCQUFrQixDQUFDOzs7O0FBRXJGLE1BQU0sYUFBYSxHQUFHO0lBQ2xCLEdBQUcsRUFBRSxLQUFLO0lBQ1YsSUFBSSxFQUFFLE1BQU07SUFDWixHQUFHLEVBQUUsS0FBSztJQUNWLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLElBQUksRUFBRSxNQUFNO0lBQ1osS0FBSyxFQUFFLE9BQU87Q0FDakIsQ0FBQztBQUlGLE1BQU0sT0FBTywwQkFBMEI7SUFNbkMsWUFBc0IsSUFBZ0IsRUFBZ0MsUUFBZ0IsRUFBYyxhQUE0QjtRQUExRyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBSjVCLGFBQVEsR0FBRyxtQkFBbUIsQ0FBQztRQUNsQyxtQkFBYyxHQUFnQixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hELGtCQUFhLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7UUFHdEQsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztTQUM1QjtRQUNELElBQUksYUFBYSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGFBQWEs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eUNBUCBJRCBTREtcclxuICogRG9jdW1lbnQgdXNlZCB0byBnZW5lcmF0ZSB0aGUgRW5lcmd5Q0FQIElEIFNES1xyXG4gKlxyXG4gKiBPcGVuQVBJIHNwZWMgdmVyc2lvbjogMS4yMTEyXHJcbiAqIENvbnRhY3Q6IHN1cHBvcnRAZW5lcmd5Y2FwLmNvbVxyXG4gKlxyXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzd2FnZ2VyIGNvZGUgZ2VuZXJhdG9yIHByb2dyYW0uXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLWNvZGVnZW4uZ2l0XHJcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cclxuICovXHJcblxyXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby11bnVzZWQtdmFyaWFibGUgbWVtYmVyLW9yZGVyaW5nICovXHJcblxyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gICAgICAgICAgICAgICBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEh0dHBSZXNwb25zZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkluc3RhbmNlRGV0YWlsUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbC9hcHBsaWNhdGlvbkluc3RhbmNlRGV0YWlsUmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkluc3RhbmNlUmVkaXJlY3RSZXNwb25zZSB9IGZyb20gJy4uL21vZGVsL2FwcGxpY2F0aW9uSW5zdGFuY2VSZWRpcmVjdFJlc3BvbnNlJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25JbnN0YW5jZVJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWwvYXBwbGljYXRpb25JbnN0YW5jZVJlc3BvbnNlJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25JbnN0YW5jZVVzZXJSZXNwb25zZSB9IGZyb20gJy4uL21vZGVsL2FwcGxpY2F0aW9uSW5zdGFuY2VVc2VyUmVzcG9uc2UnO1xyXG5cclxuaW1wb3J0IHsgQkFTRV9QQVRIIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XHJcbmltcG9ydCB7IENPTExFQ1RJT05fRk9STUFUUyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi92YXJpYWJsZXMnO1xyXG5cclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xyXG5cclxuY29uc3QgUmVxdWVzdE1ldGhvZCA9IHtcclxuICAgIEdldDogJ2dldCcsXHJcbiAgICBQb3N0OiAncG9zdCcsXHJcbiAgICBQdXQ6ICdwdXQnLFxyXG4gICAgRGVsZXRlOiAnZGVsZXRlJyxcclxuICAgIE9wdGlvbnM6ICdvcHRpb25zJyxcclxuICAgIEhlYWQ6ICdoZWFkJyxcclxuICAgIFBhdGNoOiAncGF0Y2gnXHJcbn07XHJcblxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25JbnN0YW5jZVNlcnZpY2Uge1xyXG5cclxuICAgIHByb3RlY3RlZCBiYXNlUGF0aCA9ICdodHRwczovL2xvY2FsaG9zdCc7XHJcbiAgICBwdWJsaWMgZGVmYXVsdEhlYWRlcnM6IEh0dHBIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICBwdWJsaWMgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpQEluamVjdChCQVNFX1BBVEgpIGJhc2VQYXRoOiBzdHJpbmcsIEBPcHRpb25hbCgpIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICBpZiAoYmFzZVBhdGgpIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlUGF0aCA9IGJhc2VQYXRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xyXG5cdFx0XHR0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGggfHwgY29uZmlndXJhdGlvbi5iYXNlUGF0aCB8fCB0aGlzLmJhc2VQYXRoO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogRXh0ZW5kcyBvYmplY3QgYnkgY29waW5nIG5vbi1leGlzdGluZyBwcm9wZXJ0aWVzLlxyXG4gICAgICogQHBhcmFtIG9iakEgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXHJcbiAgICAgKiBAcGFyYW0gb2JqQiBzb3VyY2Ugb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXh0ZW5kT2JqPFQxLFQyPihvYmpBOiBUMSwgb2JqQjogVDIpIHtcclxuICAgICAgICBmb3IobGV0IGtleSBpbiBvYmpCKXtcclxuICAgICAgICAgICAgaWYob2JqQi5oYXNPd25Qcm9wZXJ0eShrZXkpKXtcclxuICAgICAgICAgICAgICAgIChvYmpBIGFzIGFueSlba2V5XSA9IChvYmpCIGFzIGFueSlba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gPFQxJlQyPm9iakE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gY29uc3VtZXMgc3RyaW5nW10gbWltZS10eXBlc1xyXG4gICAgICogQHJldHVybiB0cnVlOiBjb25zdW1lcyBjb250YWlucyAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIGZhbHNlOiBvdGhlcndpc2VcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjYW5Db25zdW1lRm9ybShjb25zdW1lczogc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBmb3JtID0gJ211bHRpcGFydC9mb3JtLWRhdGEnO1xyXG4gICAgICAgIGZvciAobGV0IGNvbnN1bWUgb2YgY29uc3VtZXMpIHtcclxuICAgICAgICAgICAgaWYgKGZvcm0gPT09IGNvbnN1bWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgYW4gYXBwbGljYXRpb24gaW5zdGFuY2VcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGFwcGxpY2F0aW9uSW5zdGFuY2VJZCBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UgaWRlbnRpZmllclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QXBwbGljYXRpb25JbnN0YW5jZUJ5SWQoYXBwbGljYXRpb25JbnN0YW5jZUlkOiBzdHJpbmcsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8QXBwbGljYXRpb25JbnN0YW5jZVJlc3BvbnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwbGljYXRpb25JbnN0YW5jZUJ5SWRXaXRoSHR0cEluZm8oYXBwbGljYXRpb25JbnN0YW5jZUlkLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8QXBwbGljYXRpb25JbnN0YW5jZVJlc3BvbnNlPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVzIGRldGFpbHMgdG8gYW4gYXBwbGljYXRpb24gaW5zdGFuY2UgIFlvdSBtdXN0IGJlIGFuIGFkbWluIHRvIHRoZSBvcmdhbml6YXRpb24gdG8gZ2V0IHRoaXMgaW5mb3JtYXRpb25cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGFwcGxpY2F0aW9uSW5zdGFuY2VJZCBJZCBvZiB0aGUgYXBwbGljYXRpb24gaW5zdGFuY2UgdG8gcmV0dXJuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBcHBsaWNhdGlvbkluc3RhbmNlRGV0YWlscyhhcHBsaWNhdGlvbkluc3RhbmNlSWQ6IHN0cmluZywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxBcHBsaWNhdGlvbkluc3RhbmNlRGV0YWlsUmVzcG9uc2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcHBsaWNhdGlvbkluc3RhbmNlRGV0YWlsc1dpdGhIdHRwSW5mbyhhcHBsaWNhdGlvbkluc3RhbmNlSWQsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxBcHBsaWNhdGlvbkluc3RhbmNlRGV0YWlsUmVzcG9uc2U+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgdGhlIGRhdGEgbmVlZGVkIHRvIHJlZGlyZWN0IHRoZSB1c2VyIHRvIHRoZSBzcGVjaWZpZWQgYXBwbGljYXRpb24gaW5zdGFuY2VcclxuICAgICAqIElmIHRoZSBBcHBsaWNhdGlvbiBJbnN0YW5jZSBpcyBjb25maWd1cmVkIHdpdGggYW4gQWxpYXMsIHRoZSBleGNoYW5nZSBVUkwgZnJvbSB0aGUgQWxpYXMgd2lsbCBiZSByZXR1cm5lZCBpbnN0ZWFkIG9mIHRoYXQgZnJvbSB0aGUgYXNzb2NpYXRlZCBBcHBsaWNhdGlvbiBFbnZpcm9ubWVudC5cclxuICAgICAqIEBwYXJhbSBhcHBsaWNhdGlvbkluc3RhbmNlSWQgVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlIElEXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBcHBsaWNhdGlvbkluc3RhbmNlRXhjaGFuZ2VJbmZvKGFwcGxpY2F0aW9uSW5zdGFuY2VJZDogc3RyaW5nLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEFwcGxpY2F0aW9uSW5zdGFuY2VSZWRpcmVjdFJlc3BvbnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwbGljYXRpb25JbnN0YW5jZUV4Y2hhbmdlSW5mb1dpdGhIdHRwSW5mbyhhcHBsaWNhdGlvbkluc3RhbmNlSWQsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxBcHBsaWNhdGlvbkluc3RhbmNlUmVkaXJlY3RSZXNwb25zZT4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm92aWRlcyBhIGxpc3Qgb2YgdXNlciYjMzk7cyB3aG8gaGF2ZSBhY2Nlc3MgdG8gYW4gYXBwbGljYXRpb24gaW5zdGFuY2VcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGFwcGxpY2F0aW9uSW5zdGFuY2VJZCBJZCBvZiB0aGUgYXBwbGljYXRpb24gaW5zdGFuY2UgdG8gcmV0dXJuXHJcbiAgICAgKiBAcGFyYW0gb3JkZXJCeSBcclxuICAgICAqIEBwYXJhbSBmaWx0ZXIgXHJcbiAgICAgKiBAcGFyYW0gcGFnZVNpemUgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byByZXR1cm4gaW4gYSBwYWdlIChkZWZhdWx0cyB0byAyNTAgZWxlbWVudHMpXHJcbiAgICAgKiBAcGFyYW0gcGFnZU51bWJlciBUaGUgY3VycmVudCBwYWdlIG51bWJlclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QXBwbGljYXRpb25JbnN0YW5jZVVzZXJzKGFwcGxpY2F0aW9uSW5zdGFuY2VJZDogc3RyaW5nLCBvcmRlckJ5Pzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcsIHBhZ2VTaXplPzogbnVtYmVyLCBwYWdlTnVtYmVyPzogbnVtYmVyLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEFycmF5PEFwcGxpY2F0aW9uSW5zdGFuY2VVc2VyUmVzcG9uc2U+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwbGljYXRpb25JbnN0YW5jZVVzZXJzV2l0aEh0dHBJbmZvKGFwcGxpY2F0aW9uSW5zdGFuY2VJZCwgb3JkZXJCeSwgZmlsdGVyLCBwYWdlU2l6ZSwgcGFnZU51bWJlciwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPEFycmF5PEFwcGxpY2F0aW9uSW5zdGFuY2VVc2VyUmVzcG9uc2U+PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVzIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGFwcGxpY2F0aW9uIGluc3RhbmNlcyB0byB3aGljaCB0aGUgbG9nZ2VkIGluIHVzZXIgaGFzIGFjY2Vzc1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb25seUFkbWluIERlZmF1bHRzIHRvIGZhbHNlLiAgSWYgZmFsc2UsIHJldHVybnMgYWxsIGFwcGxpY2F0aW9uIGluc3RhbmNlcyB0byB3aGljaCB0aGUgY3VycmVudCB1c2VyIGhhcyBhY2Nlc3MuICBJZiBzZXQgdG8gdHJ1ZSB3aWxsIG9ubHkgcmV0dXJuIHJlc3VsdHMgd2hlcmUgdGhlIGxvZ2dlZCBpbiB1c2VyIGhhcyBhZG1pbiBhY2Nlc3NcclxuICAgICAqIEBwYXJhbSBvcmRlckJ5IFxyXG4gICAgICogQHBhcmFtIGZpbHRlciBcclxuICAgICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJldHVybiBpbiBhIHBhZ2UgKGRlZmF1bHRzIHRvIDI1MCBlbGVtZW50cylcclxuICAgICAqIEBwYXJhbSBwYWdlTnVtYmVyIFRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBcHBsaWNhdGlvbkluc3RhbmNlcyhvbmx5QWRtaW4/OiBib29sZWFuLCBvcmRlckJ5Pzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcsIHBhZ2VTaXplPzogbnVtYmVyLCBwYWdlTnVtYmVyPzogbnVtYmVyLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEFycmF5PEFwcGxpY2F0aW9uSW5zdGFuY2VSZXNwb25zZT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcHBsaWNhdGlvbkluc3RhbmNlc1dpdGhIdHRwSW5mbyhvbmx5QWRtaW4sIG9yZGVyQnksIGZpbHRlciwgcGFnZVNpemUsIHBhZ2VOdW1iZXIsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxBcnJheTxBcHBsaWNhdGlvbkluc3RhbmNlUmVzcG9uc2U+PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IGFuIGFwcGxpY2F0aW9uIGluc3RhbmNlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBhcHBsaWNhdGlvbkluc3RhbmNlSWQgVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlIGlkZW50aWZpZXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEFwcGxpY2F0aW9uSW5zdGFuY2VCeUlkV2l0aEh0dHBJbmZvKGFwcGxpY2F0aW9uSW5zdGFuY2VJZDogc3RyaW5nLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcHBsaWNhdGlvbkluc3RhbmNlUmVzcG9uc2U+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92MjAyMTEyL0FwcGxpY2F0aW9uSW5zdGFuY2UvJHthcHBsaWNhdGlvbkluc3RhbmNlSWR9J1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnYXBwbGljYXRpb25JbnN0YW5jZUlkJyArICd9JywgU3RyaW5nKGFwcGxpY2F0aW9uSW5zdGFuY2VJZCkpO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnYXBwbGljYXRpb25JbnN0YW5jZUlkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAoYXBwbGljYXRpb25JbnN0YW5jZUlkID09PSBudWxsIHx8IGFwcGxpY2F0aW9uSW5zdGFuY2VJZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGFwcGxpY2F0aW9uSW5zdGFuY2VJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEFwcGxpY2F0aW9uSW5zdGFuY2VCeUlkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXHJcbiAgICAgICAgbGV0IHByb2R1Y2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxBcHBsaWNhdGlvbkluc3RhbmNlUmVzcG9uc2U+KFJlcXVlc3RNZXRob2QuR2V0LCBwYXRoLCByZXF1ZXN0T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm92aWRlcyBkZXRhaWxzIHRvIGFuIGFwcGxpY2F0aW9uIGluc3RhbmNlICBZb3UgbXVzdCBiZSBhbiBhZG1pbiB0byB0aGUgb3JnYW5pemF0aW9uIHRvIGdldCB0aGlzIGluZm9ybWF0aW9uXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBhcHBsaWNhdGlvbkluc3RhbmNlSWQgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlIHRvIHJldHVyblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QXBwbGljYXRpb25JbnN0YW5jZURldGFpbHNXaXRoSHR0cEluZm8oYXBwbGljYXRpb25JbnN0YW5jZUlkOiBzdHJpbmcsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFwcGxpY2F0aW9uSW5zdGFuY2VEZXRhaWxSZXNwb25zZT4+IHtcclxuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5iYXNlUGF0aCArICcvYXBpL3YyMDIxMTIvQXBwbGljYXRpb25JbnN0YW5jZS8ke2FwcGxpY2F0aW9uSW5zdGFuY2VJZH0vZGV0YWlsJ1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnYXBwbGljYXRpb25JbnN0YW5jZUlkJyArICd9JywgU3RyaW5nKGFwcGxpY2F0aW9uSW5zdGFuY2VJZCkpO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnYXBwbGljYXRpb25JbnN0YW5jZUlkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAoYXBwbGljYXRpb25JbnN0YW5jZUlkID09PSBudWxsIHx8IGFwcGxpY2F0aW9uSW5zdGFuY2VJZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGFwcGxpY2F0aW9uSW5zdGFuY2VJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEFwcGxpY2F0aW9uSW5zdGFuY2VEZXRhaWxzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXHJcbiAgICAgICAgbGV0IHByb2R1Y2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxBcHBsaWNhdGlvbkluc3RhbmNlRGV0YWlsUmVzcG9uc2U+KFJlcXVlc3RNZXRob2QuR2V0LCBwYXRoLCByZXF1ZXN0T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm92aWRlcyB0aGUgZGF0YSBuZWVkZWQgdG8gcmVkaXJlY3QgdGhlIHVzZXIgdG8gdGhlIHNwZWNpZmllZCBhcHBsaWNhdGlvbiBpbnN0YW5jZVxyXG4gICAgICogSWYgdGhlIEFwcGxpY2F0aW9uIEluc3RhbmNlIGlzIGNvbmZpZ3VyZWQgd2l0aCBhbiBBbGlhcywgdGhlIGV4Y2hhbmdlIFVSTCBmcm9tIHRoZSBBbGlhcyB3aWxsIGJlIHJldHVybmVkIGluc3RlYWQgb2YgdGhhdCBmcm9tIHRoZSBhc3NvY2lhdGVkIEFwcGxpY2F0aW9uIEVudmlyb25tZW50LlxyXG4gICAgICogQHBhcmFtIGFwcGxpY2F0aW9uSW5zdGFuY2VJZCBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UgSURcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEFwcGxpY2F0aW9uSW5zdGFuY2VFeGNoYW5nZUluZm9XaXRoSHR0cEluZm8oYXBwbGljYXRpb25JbnN0YW5jZUlkOiBzdHJpbmcsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFwcGxpY2F0aW9uSW5zdGFuY2VSZWRpcmVjdFJlc3BvbnNlPj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjIwMjEwOC9BcHBsaWNhdGlvbkluc3RhbmNlLyR7YXBwbGljYXRpb25JbnN0YW5jZUlkfS9leGNoYW5nZSdcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnJHsnICsgJ2FwcGxpY2F0aW9uSW5zdGFuY2VJZCcgKyAnfScsIFN0cmluZyhhcHBsaWNhdGlvbkluc3RhbmNlSWQpKTtcclxuXHJcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyczogSHR0cFBhcmFtcztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJykgeyBcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tU3RyaW5nOiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21PYmplY3Q6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRIZWFkZXJzLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHRoaXMuZGVmYXVsdEhlYWRlcnMuZ2V0QWxsKGtleSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ2FwcGxpY2F0aW9uSW5zdGFuY2VJZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXHJcbiAgICAgICAgaWYgKGFwcGxpY2F0aW9uSW5zdGFuY2VJZCA9PT0gbnVsbCB8fCBhcHBsaWNhdGlvbkluc3RhbmNlSWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBhcHBsaWNhdGlvbkluc3RhbmNlSWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRBcHBsaWNhdGlvbkluc3RhbmNlRXhjaGFuZ2VJbmZvLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXHJcbiAgICAgICAgbGV0IHByb2R1Y2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxBcHBsaWNhdGlvbkluc3RhbmNlUmVkaXJlY3RSZXNwb25zZT4oUmVxdWVzdE1ldGhvZC5HZXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVzIGEgbGlzdCBvZiB1c2VyJiMzOTtzIHdobyBoYXZlIGFjY2VzcyB0byBhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gYXBwbGljYXRpb25JbnN0YW5jZUlkIElkIG9mIHRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSB0byByZXR1cm5cclxuICAgICAqIEBwYXJhbSBvcmRlckJ5IFxyXG4gICAgICogQHBhcmFtIGZpbHRlciBcclxuICAgICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJldHVybiBpbiBhIHBhZ2UgKGRlZmF1bHRzIHRvIDI1MCBlbGVtZW50cylcclxuICAgICAqIEBwYXJhbSBwYWdlTnVtYmVyIFRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBcHBsaWNhdGlvbkluc3RhbmNlVXNlcnNXaXRoSHR0cEluZm8oYXBwbGljYXRpb25JbnN0YW5jZUlkOiBzdHJpbmcsIG9yZGVyQnk/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZywgcGFnZVNpemU/OiBudW1iZXIsIHBhZ2VOdW1iZXI/OiBudW1iZXIsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5PEFwcGxpY2F0aW9uSW5zdGFuY2VVc2VyUmVzcG9uc2U+Pj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjIwMjExMi9BcHBsaWNhdGlvbkluc3RhbmNlLyR7YXBwbGljYXRpb25JbnN0YW5jZUlkfS91c2VyJ1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnYXBwbGljYXRpb25JbnN0YW5jZUlkJyArICd9JywgU3RyaW5nKGFwcGxpY2F0aW9uSW5zdGFuY2VJZCkpO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnYXBwbGljYXRpb25JbnN0YW5jZUlkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAoYXBwbGljYXRpb25JbnN0YW5jZUlkID09PSBudWxsIHx8IGFwcGxpY2F0aW9uSW5zdGFuY2VJZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGFwcGxpY2F0aW9uSW5zdGFuY2VJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEFwcGxpY2F0aW9uSW5zdGFuY2VVc2Vycy4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9yZGVyQnkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdvcmRlckJ5JywgPGFueT5vcmRlckJ5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaWx0ZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdmaWx0ZXInLCA8YW55PmZpbHRlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFnZVNpemUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdwYWdlU2l6ZScsIDxhbnk+cGFnZVNpemUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBhZ2VOdW1iZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdwYWdlTnVtYmVyJywgPGFueT5wYWdlTnVtYmVyKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcclxuICAgICAgICBsZXQgcHJvZHVjZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVknLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PEFycmF5PEFwcGxpY2F0aW9uSW5zdGFuY2VVc2VyUmVzcG9uc2U+PihSZXF1ZXN0TWV0aG9kLkdldCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgYXBwbGljYXRpb24gaW5zdGFuY2VzIHRvIHdoaWNoIHRoZSBsb2dnZWQgaW4gdXNlciBoYXMgYWNjZXNzXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBvbmx5QWRtaW4gRGVmYXVsdHMgdG8gZmFsc2UuICBJZiBmYWxzZSwgcmV0dXJucyBhbGwgYXBwbGljYXRpb24gaW5zdGFuY2VzIHRvIHdoaWNoIHRoZSBjdXJyZW50IHVzZXIgaGFzIGFjY2Vzcy4gIElmIHNldCB0byB0cnVlIHdpbGwgb25seSByZXR1cm4gcmVzdWx0cyB3aGVyZSB0aGUgbG9nZ2VkIGluIHVzZXIgaGFzIGFkbWluIGFjY2Vzc1xyXG4gICAgICogQHBhcmFtIG9yZGVyQnkgXHJcbiAgICAgKiBAcGFyYW0gZmlsdGVyIFxyXG4gICAgICogQHBhcmFtIHBhZ2VTaXplIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gcmV0dXJuIGluIGEgcGFnZSAoZGVmYXVsdHMgdG8gMjUwIGVsZW1lbnRzKVxyXG4gICAgICogQHBhcmFtIHBhZ2VOdW1iZXIgVGhlIGN1cnJlbnQgcGFnZSBudW1iZXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEFwcGxpY2F0aW9uSW5zdGFuY2VzV2l0aEh0dHBJbmZvKG9ubHlBZG1pbj86IGJvb2xlYW4sIG9yZGVyQnk/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZywgcGFnZVNpemU/OiBudW1iZXIsIHBhZ2VOdW1iZXI/OiBudW1iZXIsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5PEFwcGxpY2F0aW9uSW5zdGFuY2VSZXNwb25zZT4+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92MjAyMTA4L0FwcGxpY2F0aW9uSW5zdGFuY2UnO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9ubHlBZG1pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ29ubHlBZG1pbicsIDxhbnk+b25seUFkbWluKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcmRlckJ5ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgnb3JkZXJCeScsIDxhbnk+b3JkZXJCeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgnZmlsdGVyJywgPGFueT5maWx0ZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBhZ2VTaXplICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgncGFnZVNpemUnLCA8YW55PnBhZ2VTaXplKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwYWdlTnVtYmVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgncGFnZU51bWJlcicsIDxhbnk+cGFnZU51bWJlcik7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXHJcbiAgICAgICAgbGV0IHByb2R1Y2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxBcnJheTxBcHBsaWNhdGlvbkluc3RhbmNlUmVzcG9uc2U+PihSZXF1ZXN0TWV0aG9kLkdldCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb25JbnN0YW5jZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXBpL2FwcGxpY2F0aW9uSW5zdGFuY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBRUgsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUEyQixlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFjLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBb0Isc0JBQXNCLENBQUM7QUFJekYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFvRCxnQkFBZ0IsQ0FBQztBQU9uRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQThDLGNBQWMsQ0FBQztBQUdqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQTBDLGtCQUFrQixDQUFDOzs7O0FBRXJGLE1BQU0sYUFBYSxHQUFHO0lBQ2xCLEdBQUcsRUFBRSxLQUFLO0lBQ1YsSUFBSSxFQUFFLE1BQU07SUFDWixHQUFHLEVBQUUsS0FBSztJQUNWLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLElBQUksRUFBRSxNQUFNO0lBQ1osS0FBSyxFQUFFLE9BQU87Q0FDakIsQ0FBQztBQUlGLE1BQU0sT0FBTywwQkFBMEI7SUFNbkMsWUFBc0IsSUFBZ0IsRUFBZ0MsUUFBZ0IsRUFBYyxhQUE0QjtRQUExRyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBSjVCLGFBQVEsR0FBRyxtQkFBbUIsQ0FBQztRQUNsQyxtQkFBYyxHQUFnQixJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hELGtCQUFhLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7UUFHdEQsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztTQUM1QjtRQUNELElBQUksYUFBYSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGFBQWEs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eUNBUCBJRCBTREtcclxuICogRG9jdW1lbnQgdXNlZCB0byBnZW5lcmF0ZSB0aGUgRW5lcmd5Q0FQIElEIFNES1xyXG4gKlxyXG4gKiBPcGVuQVBJIHNwZWMgdmVyc2lvbjogMS4yMzA2XHJcbiAqIENvbnRhY3Q6IHN1cHBvcnRAZW5lcmd5Y2FwLmNvbVxyXG4gKlxyXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzd2FnZ2VyIGNvZGUgZ2VuZXJhdG9yIHByb2dyYW0uXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLWNvZGVnZW4uZ2l0XHJcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cclxuICovXHJcblxyXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby11bnVzZWQtdmFyaWFibGUgbWVtYmVyLW9yZGVyaW5nICovXHJcblxyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gICAgICAgICAgICAgICAgICAgICAgZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gICAgICAgICAgICAgICBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEh0dHBSZXNwb25zZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkluc3RhbmNlRGV0YWlsUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbC9hcHBsaWNhdGlvbkluc3RhbmNlRGV0YWlsUmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkluc3RhbmNlUmVkaXJlY3RSZXNwb25zZSB9IGZyb20gJy4uL21vZGVsL2FwcGxpY2F0aW9uSW5zdGFuY2VSZWRpcmVjdFJlc3BvbnNlJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25JbnN0YW5jZVJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWwvYXBwbGljYXRpb25JbnN0YW5jZVJlc3BvbnNlJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25JbnN0YW5jZVVzZXJSZXNwb25zZSB9IGZyb20gJy4uL21vZGVsL2FwcGxpY2F0aW9uSW5zdGFuY2VVc2VyUmVzcG9uc2UnO1xyXG5cclxuaW1wb3J0IHsgQkFTRV9QQVRIIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XHJcbmltcG9ydCB7IENPTExFQ1RJT05fRk9STUFUUyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi92YXJpYWJsZXMnO1xyXG5cclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xyXG5cclxuY29uc3QgUmVxdWVzdE1ldGhvZCA9IHtcclxuICAgIEdldDogJ2dldCcsXHJcbiAgICBQb3N0OiAncG9zdCcsXHJcbiAgICBQdXQ6ICdwdXQnLFxyXG4gICAgRGVsZXRlOiAnZGVsZXRlJyxcclxuICAgIE9wdGlvbnM6ICdvcHRpb25zJyxcclxuICAgIEhlYWQ6ICdoZWFkJyxcclxuICAgIFBhdGNoOiAncGF0Y2gnXHJcbn07XHJcblxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25JbnN0YW5jZVNlcnZpY2Uge1xyXG5cclxuICAgIHByb3RlY3RlZCBiYXNlUGF0aCA9ICdodHRwczovL2xvY2FsaG9zdCc7XHJcbiAgICBwdWJsaWMgZGVmYXVsdEhlYWRlcnM6IEh0dHBIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICBwdWJsaWMgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpQEluamVjdChCQVNFX1BBVEgpIGJhc2VQYXRoOiBzdHJpbmcsIEBPcHRpb25hbCgpIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICBpZiAoYmFzZVBhdGgpIHtcclxuICAgICAgICAgICAgdGhpcy5iYXNlUGF0aCA9IGJhc2VQYXRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xyXG5cdFx0XHR0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGggfHwgY29uZmlndXJhdGlvbi5iYXNlUGF0aCB8fCB0aGlzLmJhc2VQYXRoO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFxyXG4gICAgICogRXh0ZW5kcyBvYmplY3QgYnkgY29waW5nIG5vbi1leGlzdGluZyBwcm9wZXJ0aWVzLlxyXG4gICAgICogQHBhcmFtIG9iakEgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXHJcbiAgICAgKiBAcGFyYW0gb2JqQiBzb3VyY2Ugb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXh0ZW5kT2JqPFQxLFQyPihvYmpBOiBUMSwgb2JqQjogVDIpIHtcclxuICAgICAgICBmb3IobGV0IGtleSBpbiBvYmpCKXtcclxuICAgICAgICAgICAgaWYob2JqQi5oYXNPd25Qcm9wZXJ0eShrZXkpKXtcclxuICAgICAgICAgICAgICAgIChvYmpBIGFzIGFueSlba2V5XSA9IChvYmpCIGFzIGFueSlba2V5XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gPFQxJlQyPm9iakE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gY29uc3VtZXMgc3RyaW5nW10gbWltZS10eXBlc1xyXG4gICAgICogQHJldHVybiB0cnVlOiBjb25zdW1lcyBjb250YWlucyAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIGZhbHNlOiBvdGhlcndpc2VcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjYW5Db25zdW1lRm9ybShjb25zdW1lczogc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBmb3JtID0gJ211bHRpcGFydC9mb3JtLWRhdGEnO1xyXG4gICAgICAgIGZvciAobGV0IGNvbnN1bWUgb2YgY29uc3VtZXMpIHtcclxuICAgICAgICAgICAgaWYgKGZvcm0gPT09IGNvbnN1bWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgYW4gYXBwbGljYXRpb24gaW5zdGFuY2VcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGFwcGxpY2F0aW9uSW5zdGFuY2VJZCBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UgaWRlbnRpZmllclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QXBwbGljYXRpb25JbnN0YW5jZUJ5SWQoYXBwbGljYXRpb25JbnN0YW5jZUlkOiBzdHJpbmcsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8QXBwbGljYXRpb25JbnN0YW5jZVJlc3BvbnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwbGljYXRpb25JbnN0YW5jZUJ5SWRXaXRoSHR0cEluZm8oYXBwbGljYXRpb25JbnN0YW5jZUlkLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycylcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8QXBwbGljYXRpb25JbnN0YW5jZVJlc3BvbnNlPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVzIGRldGFpbHMgdG8gYW4gYXBwbGljYXRpb24gaW5zdGFuY2UgIFlvdSBtdXN0IGJlIGFuIGFkbWluIHRvIHRoZSBvcmdhbml6YXRpb24gdG8gZ2V0IHRoaXMgaW5mb3JtYXRpb25cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGFwcGxpY2F0aW9uSW5zdGFuY2VJZCBJZCBvZiB0aGUgYXBwbGljYXRpb24gaW5zdGFuY2UgdG8gcmV0dXJuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBcHBsaWNhdGlvbkluc3RhbmNlRGV0YWlscyhhcHBsaWNhdGlvbkluc3RhbmNlSWQ6IHN0cmluZywgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcz86IHtzZWFyY2g6IHN0cmluZyB8IHtbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gfSwgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnM/OiB7W2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW119KTogT2JzZXJ2YWJsZTxBcHBsaWNhdGlvbkluc3RhbmNlRGV0YWlsUmVzcG9uc2U+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcHBsaWNhdGlvbkluc3RhbmNlRGV0YWlsc1dpdGhIdHRwSW5mbyhhcHBsaWNhdGlvbkluc3RhbmNlSWQsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxBcHBsaWNhdGlvbkluc3RhbmNlRGV0YWlsUmVzcG9uc2U+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgdGhlIGRhdGEgbmVlZGVkIHRvIHJlZGlyZWN0IHRoZSB1c2VyIHRvIHRoZSBzcGVjaWZpZWQgYXBwbGljYXRpb24gaW5zdGFuY2VcclxuICAgICAqIElmIHRoZSBBcHBsaWNhdGlvbiBJbnN0YW5jZSBpcyBjb25maWd1cmVkIHdpdGggYW4gQWxpYXMsIHRoZSBleGNoYW5nZSBVUkwgZnJvbSB0aGUgQWxpYXMgd2lsbCBiZSByZXR1cm5lZCBpbnN0ZWFkIG9mIHRoYXQgZnJvbSB0aGUgYXNzb2NpYXRlZCBBcHBsaWNhdGlvbiBFbnZpcm9ubWVudC5cclxuICAgICAqIEBwYXJhbSBhcHBsaWNhdGlvbkluc3RhbmNlSWQgVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlIElEXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBcHBsaWNhdGlvbkluc3RhbmNlRXhjaGFuZ2VJbmZvKGFwcGxpY2F0aW9uSW5zdGFuY2VJZDogc3RyaW5nLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEFwcGxpY2F0aW9uSW5zdGFuY2VSZWRpcmVjdFJlc3BvbnNlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwbGljYXRpb25JbnN0YW5jZUV4Y2hhbmdlSW5mb1dpdGhIdHRwSW5mbyhhcHBsaWNhdGlvbkluc3RhbmNlSWQsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxBcHBsaWNhdGlvbkluc3RhbmNlUmVkaXJlY3RSZXNwb25zZT4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm92aWRlcyBhIGxpc3Qgb2YgdXNlciYjMzk7cyB3aG8gaGF2ZSBhY2Nlc3MgdG8gYW4gYXBwbGljYXRpb24gaW5zdGFuY2VcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGFwcGxpY2F0aW9uSW5zdGFuY2VJZCBJZCBvZiB0aGUgYXBwbGljYXRpb24gaW5zdGFuY2UgdG8gcmV0dXJuXHJcbiAgICAgKiBAcGFyYW0gb3JkZXJCeSBcclxuICAgICAqIEBwYXJhbSBmaWx0ZXIgXHJcbiAgICAgKiBAcGFyYW0gcGFnZVNpemUgVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byByZXR1cm4gaW4gYSBwYWdlIChkZWZhdWx0cyB0byAyNTAgZWxlbWVudHMpXHJcbiAgICAgKiBAcGFyYW0gcGFnZU51bWJlciBUaGUgY3VycmVudCBwYWdlIG51bWJlclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QXBwbGljYXRpb25JbnN0YW5jZVVzZXJzKGFwcGxpY2F0aW9uSW5zdGFuY2VJZDogc3RyaW5nLCBvcmRlckJ5Pzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcsIHBhZ2VTaXplPzogbnVtYmVyLCBwYWdlTnVtYmVyPzogbnVtYmVyLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEFycmF5PEFwcGxpY2F0aW9uSW5zdGFuY2VVc2VyUmVzcG9uc2U+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwbGljYXRpb25JbnN0YW5jZVVzZXJzV2l0aEh0dHBJbmZvKGFwcGxpY2F0aW9uSW5zdGFuY2VJZCwgb3JkZXJCeSwgZmlsdGVyLCBwYWdlU2l6ZSwgcGFnZU51bWJlciwgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcywgZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPEFycmF5PEFwcGxpY2F0aW9uSW5zdGFuY2VVc2VyUmVzcG9uc2U+PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVzIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGFwcGxpY2F0aW9uIGluc3RhbmNlcyB0byB3aGljaCB0aGUgbG9nZ2VkIGluIHVzZXIgaGFzIGFjY2Vzc1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb25seUFkbWluIERlZmF1bHRzIHRvIGZhbHNlLiAgSWYgZmFsc2UsIHJldHVybnMgYWxsIGFwcGxpY2F0aW9uIGluc3RhbmNlcyB0byB3aGljaCB0aGUgY3VycmVudCB1c2VyIGhhcyBhY2Nlc3MuICBJZiBzZXQgdG8gdHJ1ZSB3aWxsIG9ubHkgcmV0dXJuIHJlc3VsdHMgd2hlcmUgdGhlIGxvZ2dlZCBpbiB1c2VyIGhhcyBhZG1pbiBhY2Nlc3NcclxuICAgICAqIEBwYXJhbSBvcmRlckJ5IFxyXG4gICAgICogQHBhcmFtIGZpbHRlciBcclxuICAgICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJldHVybiBpbiBhIHBhZ2UgKGRlZmF1bHRzIHRvIDI1MCBlbGVtZW50cylcclxuICAgICAqIEBwYXJhbSBwYWdlTnVtYmVyIFRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBcHBsaWNhdGlvbkluc3RhbmNlcyhvbmx5QWRtaW4/OiBib29sZWFuLCBvcmRlckJ5Pzogc3RyaW5nLCBmaWx0ZXI/OiBzdHJpbmcsIHBhZ2VTaXplPzogbnVtYmVyLCBwYWdlTnVtYmVyPzogbnVtYmVyLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEFycmF5PEFwcGxpY2F0aW9uSW5zdGFuY2VSZXNwb25zZT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcHBsaWNhdGlvbkluc3RhbmNlc1dpdGhIdHRwSW5mbyhvbmx5QWRtaW4sIG9yZGVyQnksIGZpbHRlciwgcGFnZVNpemUsIHBhZ2VOdW1iZXIsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMsIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxBcnJheTxBcHBsaWNhdGlvbkluc3RhbmNlUmVzcG9uc2U+PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IGFuIGFwcGxpY2F0aW9uIGluc3RhbmNlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBhcHBsaWNhdGlvbkluc3RhbmNlSWQgVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlIGlkZW50aWZpZXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEFwcGxpY2F0aW9uSW5zdGFuY2VCeUlkV2l0aEh0dHBJbmZvKGFwcGxpY2F0aW9uSW5zdGFuY2VJZDogc3RyaW5nLCBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zPzoge3NlYXJjaDogc3RyaW5nIHwge1twYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSB9LCBleHRyYUh0dHBSZXF1ZXN0SGVhZGVycz86IHtbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXX0pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcHBsaWNhdGlvbkluc3RhbmNlUmVzcG9uc2U+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92MjAyMTEyL0FwcGxpY2F0aW9uSW5zdGFuY2UvJHthcHBsaWNhdGlvbkluc3RhbmNlSWR9J1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnYXBwbGljYXRpb25JbnN0YW5jZUlkJyArICd9JywgU3RyaW5nKGFwcGxpY2F0aW9uSW5zdGFuY2VJZCkpO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnYXBwbGljYXRpb25JbnN0YW5jZUlkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAoYXBwbGljYXRpb25JbnN0YW5jZUlkID09PSBudWxsIHx8IGFwcGxpY2F0aW9uSW5zdGFuY2VJZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGFwcGxpY2F0aW9uSW5zdGFuY2VJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEFwcGxpY2F0aW9uSW5zdGFuY2VCeUlkLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXHJcbiAgICAgICAgbGV0IHByb2R1Y2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxBcHBsaWNhdGlvbkluc3RhbmNlUmVzcG9uc2U+KFJlcXVlc3RNZXRob2QuR2V0LCBwYXRoLCByZXF1ZXN0T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm92aWRlcyBkZXRhaWxzIHRvIGFuIGFwcGxpY2F0aW9uIGluc3RhbmNlICBZb3UgbXVzdCBiZSBhbiBhZG1pbiB0byB0aGUgb3JnYW5pemF0aW9uIHRvIGdldCB0aGlzIGluZm9ybWF0aW9uXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBhcHBsaWNhdGlvbkluc3RhbmNlSWQgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlIHRvIHJldHVyblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0QXBwbGljYXRpb25JbnN0YW5jZURldGFpbHNXaXRoSHR0cEluZm8oYXBwbGljYXRpb25JbnN0YW5jZUlkOiBzdHJpbmcsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFwcGxpY2F0aW9uSW5zdGFuY2VEZXRhaWxSZXNwb25zZT4+IHtcclxuICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5iYXNlUGF0aCArICcvYXBpL3YyMDIxMTIvQXBwbGljYXRpb25JbnN0YW5jZS8ke2FwcGxpY2F0aW9uSW5zdGFuY2VJZH0vZGV0YWlsJ1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnYXBwbGljYXRpb25JbnN0YW5jZUlkJyArICd9JywgU3RyaW5nKGFwcGxpY2F0aW9uSW5zdGFuY2VJZCkpO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnYXBwbGljYXRpb25JbnN0YW5jZUlkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAoYXBwbGljYXRpb25JbnN0YW5jZUlkID09PSBudWxsIHx8IGFwcGxpY2F0aW9uSW5zdGFuY2VJZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGFwcGxpY2F0aW9uSW5zdGFuY2VJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEFwcGxpY2F0aW9uSW5zdGFuY2VEZXRhaWxzLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXHJcbiAgICAgICAgbGV0IHByb2R1Y2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxBcHBsaWNhdGlvbkluc3RhbmNlRGV0YWlsUmVzcG9uc2U+KFJlcXVlc3RNZXRob2QuR2V0LCBwYXRoLCByZXF1ZXN0T3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm92aWRlcyB0aGUgZGF0YSBuZWVkZWQgdG8gcmVkaXJlY3QgdGhlIHVzZXIgdG8gdGhlIHNwZWNpZmllZCBhcHBsaWNhdGlvbiBpbnN0YW5jZVxyXG4gICAgICogSWYgdGhlIEFwcGxpY2F0aW9uIEluc3RhbmNlIGlzIGNvbmZpZ3VyZWQgd2l0aCBhbiBBbGlhcywgdGhlIGV4Y2hhbmdlIFVSTCBmcm9tIHRoZSBBbGlhcyB3aWxsIGJlIHJldHVybmVkIGluc3RlYWQgb2YgdGhhdCBmcm9tIHRoZSBhc3NvY2lhdGVkIEFwcGxpY2F0aW9uIEVudmlyb25tZW50LlxyXG4gICAgICogQHBhcmFtIGFwcGxpY2F0aW9uSW5zdGFuY2VJZCBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2UgSURcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEFwcGxpY2F0aW9uSW5zdGFuY2VFeGNoYW5nZUluZm9XaXRoSHR0cEluZm8oYXBwbGljYXRpb25JbnN0YW5jZUlkOiBzdHJpbmcsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFwcGxpY2F0aW9uSW5zdGFuY2VSZWRpcmVjdFJlc3BvbnNlPj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjIwMjEwOC9BcHBsaWNhdGlvbkluc3RhbmNlLyR7YXBwbGljYXRpb25JbnN0YW5jZUlkfS9leGNoYW5nZSdcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnJHsnICsgJ2FwcGxpY2F0aW9uSW5zdGFuY2VJZCcgKyAnfScsIFN0cmluZyhhcHBsaWNhdGlvbkluc3RhbmNlSWQpKTtcclxuXHJcbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVyczogSHR0cFBhcmFtcztcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNoID09PSAnc3RyaW5nJykgeyBcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tU3RyaW5nOiBleHRyYUh0dHBSZXF1ZXN0UGFyYW1zLnNlYXJjaH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21PYmplY3Q6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRIZWFkZXJzLmtleXMoKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHRoaXMuZGVmYXVsdEhlYWRlcnMuZ2V0QWxsKGtleSkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZXh0cmFIdHRwUmVxdWVzdEhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHZlcmlmeSByZXF1aXJlZCBwYXJhbWV0ZXIgJ2FwcGxpY2F0aW9uSW5zdGFuY2VJZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXHJcbiAgICAgICAgaWYgKGFwcGxpY2F0aW9uSW5zdGFuY2VJZCA9PT0gbnVsbCB8fCBhcHBsaWNhdGlvbkluc3RhbmNlSWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBhcHBsaWNhdGlvbkluc3RhbmNlSWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRBcHBsaWNhdGlvbkluc3RhbmNlRXhjaGFuZ2VJbmZvLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXHJcbiAgICAgICAgbGV0IHByb2R1Y2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxBcHBsaWNhdGlvbkluc3RhbmNlUmVkaXJlY3RSZXNwb25zZT4oUmVxdWVzdE1ldGhvZC5HZXQsIHBhdGgsIHJlcXVlc3RPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVzIGEgbGlzdCBvZiB1c2VyJiMzOTtzIHdobyBoYXZlIGFjY2VzcyB0byBhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gYXBwbGljYXRpb25JbnN0YW5jZUlkIElkIG9mIHRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSB0byByZXR1cm5cclxuICAgICAqIEBwYXJhbSBvcmRlckJ5IFxyXG4gICAgICogQHBhcmFtIGZpbHRlciBcclxuICAgICAqIEBwYXJhbSBwYWdlU2l6ZSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHJldHVybiBpbiBhIHBhZ2UgKGRlZmF1bHRzIHRvIDI1MCBlbGVtZW50cylcclxuICAgICAqIEBwYXJhbSBwYWdlTnVtYmVyIFRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRBcHBsaWNhdGlvbkluc3RhbmNlVXNlcnNXaXRoSHR0cEluZm8oYXBwbGljYXRpb25JbnN0YW5jZUlkOiBzdHJpbmcsIG9yZGVyQnk/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZywgcGFnZVNpemU/OiBudW1iZXIsIHBhZ2VOdW1iZXI/OiBudW1iZXIsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5PEFwcGxpY2F0aW9uSW5zdGFuY2VVc2VyUmVzcG9uc2U+Pj4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmJhc2VQYXRoICsgJy9hcGkvdjIwMjExMi9BcHBsaWNhdGlvbkluc3RhbmNlLyR7YXBwbGljYXRpb25JbnN0YW5jZUlkfS91c2VyJ1xyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCckeycgKyAnYXBwbGljYXRpb25JbnN0YW5jZUlkJyArICd9JywgU3RyaW5nKGFwcGxpY2F0aW9uSW5zdGFuY2VJZCkpO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnYXBwbGljYXRpb25JbnN0YW5jZUlkJyBpcyBub3QgbnVsbCBvciB1bmRlZmluZWRcclxuICAgICAgICBpZiAoYXBwbGljYXRpb25JbnN0YW5jZUlkID09PSBudWxsIHx8IGFwcGxpY2F0aW9uSW5zdGFuY2VJZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGFwcGxpY2F0aW9uSW5zdGFuY2VJZCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldEFwcGxpY2F0aW9uSW5zdGFuY2VVc2Vycy4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9yZGVyQnkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdvcmRlckJ5JywgPGFueT5vcmRlckJ5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaWx0ZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdmaWx0ZXInLCA8YW55PmZpbHRlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFnZVNpemUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdwYWdlU2l6ZScsIDxhbnk+cGFnZVNpemUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBhZ2VOdW1iZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBxdWVyeVBhcmFtZXRlcnMuc2V0KCdwYWdlTnVtYmVyJywgPGFueT5wYWdlTnVtYmVyKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcclxuICAgICAgICBsZXQgcHJvZHVjZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJBdXRob3JpemF0aW9uXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pIHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVknLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkVDSS1QVUJMSUMtREFTSEJPQVJELUtFWVwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcclxuICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOnRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScgYXMgJ3Jlc3BvbnNlJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0PEFycmF5PEFwcGxpY2F0aW9uSW5zdGFuY2VVc2VyUmVzcG9uc2U+PihSZXF1ZXN0TWV0aG9kLkdldCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgYXBwbGljYXRpb24gaW5zdGFuY2VzIHRvIHdoaWNoIHRoZSBsb2dnZWQgaW4gdXNlciBoYXMgYWNjZXNzXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBvbmx5QWRtaW4gRGVmYXVsdHMgdG8gZmFsc2UuICBJZiBmYWxzZSwgcmV0dXJucyBhbGwgYXBwbGljYXRpb24gaW5zdGFuY2VzIHRvIHdoaWNoIHRoZSBjdXJyZW50IHVzZXIgaGFzIGFjY2Vzcy4gIElmIHNldCB0byB0cnVlIHdpbGwgb25seSByZXR1cm4gcmVzdWx0cyB3aGVyZSB0aGUgbG9nZ2VkIGluIHVzZXIgaGFzIGFkbWluIGFjY2Vzc1xyXG4gICAgICogQHBhcmFtIG9yZGVyQnkgXHJcbiAgICAgKiBAcGFyYW0gZmlsdGVyIFxyXG4gICAgICogQHBhcmFtIHBhZ2VTaXplIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gcmV0dXJuIGluIGEgcGFnZSAoZGVmYXVsdHMgdG8gMjUwIGVsZW1lbnRzKVxyXG4gICAgICogQHBhcmFtIHBhZ2VOdW1iZXIgVGhlIGN1cnJlbnQgcGFnZSBudW1iZXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEFwcGxpY2F0aW9uSW5zdGFuY2VzV2l0aEh0dHBJbmZvKG9ubHlBZG1pbj86IGJvb2xlYW4sIG9yZGVyQnk/OiBzdHJpbmcsIGZpbHRlcj86IHN0cmluZywgcGFnZVNpemU/OiBudW1iZXIsIHBhZ2VOdW1iZXI/OiBudW1iZXIsIGV4dHJhSHR0cFJlcXVlc3RQYXJhbXM/OiB7c2VhcmNoOiBzdHJpbmcgfCB7W3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9IH0sIGV4dHJhSHR0cFJlcXVlc3RIZWFkZXJzPzoge1toZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdfSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5PEFwcGxpY2F0aW9uSW5zdGFuY2VSZXNwb25zZT4+PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuYmFzZVBhdGggKyAnL2FwaS92MjAyMTA4L0FwcGxpY2F0aW9uSW5zdGFuY2UnO1xyXG5cclxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzOiBIdHRwUGFyYW1zO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2ggPT09ICdzdHJpbmcnKSB7IFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21TdHJpbmc6IGV4dHJhSHR0cFJlcXVlc3RQYXJhbXMuc2VhcmNofSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7ZnJvbU9iamVjdDogZXh0cmFIdHRwUmVxdWVzdFBhcmFtcy5zZWFyY2h9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdEhlYWRlcnMua2V5cygpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5kZWZhdWx0SGVhZGVycy5nZXRBbGwoa2V5KSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykge1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhleHRyYUh0dHBSZXF1ZXN0SGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9ubHlBZG1pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ29ubHlBZG1pbicsIDxhbnk+b25seUFkbWluKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcmRlckJ5ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgnb3JkZXJCeScsIDxhbnk+b3JkZXJCeSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmlsdGVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgnZmlsdGVyJywgPGFueT5maWx0ZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBhZ2VTaXplICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgncGFnZVNpemUnLCA8YW55PnBhZ2VTaXplKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwYWdlTnVtYmVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgncGFnZU51bWJlcicsIDxhbnk+cGFnZU51bWJlcik7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXHJcbiAgICAgICAgbGV0IHByb2R1Y2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiQXV0aG9yaXphdGlvblwiXSkge1xyXG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5c1tcIkF1dGhvcml6YXRpb25cIl0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5hcGlLZXlzW1wiRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZXCJdKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnRUNJLVBVQkxJQy1EQVNIQk9BUkQtS0VZJywgdGhpcy5jb25maWd1cmF0aW9uLmFwaUtleXNbXCJFQ0ktUFVCTElDLURBU0hCT0FSRC1LRVlcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcclxuICAgICAgICAgICAgcGFyYW1zOiBxdWVyeVBhcmFtZXRlcnMsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczp0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnIGFzICdyZXNwb25zZSdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxBcnJheTxBcHBsaWNhdGlvbkluc3RhbmNlUmVzcG9uc2U+PihSZXF1ZXN0TWV0aG9kLkdldCwgcGF0aCwgcmVxdWVzdE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=