@decaf-ts/integrations 0.3.6 → 0.3.8

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 (876) hide show
  1. package/dist/integrations.cjs +1649 -2
  2. package/dist/integrations.js +1885 -2
  3. package/lib/cjs/blob/azure/AzureBlobStoreService.cjs +2 -2
  4. package/lib/cjs/blob/azure/index.cjs +2 -2
  5. package/lib/cjs/blob/core/BlobErrors.cjs +2 -2
  6. package/lib/cjs/blob/core/BlobKey.cjs +2 -2
  7. package/lib/cjs/blob/core/BlobStoreFactory.cjs +2 -2
  8. package/lib/cjs/blob/core/BlobStoreService.cjs +2 -2
  9. package/lib/cjs/blob/core/BlobTypes.cjs +2 -2
  10. package/lib/cjs/blob/core/BlobValue.cjs +2 -2
  11. package/lib/cjs/blob/core/index.cjs +2 -2
  12. package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs +2 -2
  13. package/lib/cjs/blob/gcp/index.cjs +2 -2
  14. package/lib/cjs/blob/index.cjs +2 -2
  15. package/lib/cjs/blob/ipfs/IpfsBlobStoreService.cjs +2 -2
  16. package/lib/cjs/blob/ipfs/IpfsKeyIndex.cjs +2 -2
  17. package/lib/cjs/blob/ipfs/LocalJsonIpfsKeyIndex.cjs +2 -2
  18. package/lib/cjs/blob/ipfs/MemoryIpfsKeyIndex.cjs +2 -2
  19. package/lib/cjs/blob/ipfs/PostgresIpfsKeyIndex.cjs +2 -2
  20. package/lib/cjs/blob/ipfs/index.cjs +2 -2
  21. package/lib/cjs/blob/local/LocalBlobStoreService.cjs +2 -2
  22. package/lib/cjs/blob/local/index.cjs +2 -2
  23. package/lib/cjs/blob/memory/MemoryBlobStoreService.cjs +2 -2
  24. package/lib/cjs/blob/memory/index.cjs +2 -2
  25. package/lib/cjs/blob/s3/MinioBlobStoreService.cjs +2 -2
  26. package/lib/cjs/blob/s3/R2BlobStoreService.cjs +2 -2
  27. package/lib/cjs/blob/s3/S3BlobStoreService.cjs +2 -2
  28. package/lib/cjs/blob/s3/index.cjs +2 -2
  29. package/lib/cjs/docker/DockerComposeService.cjs +2 -2
  30. package/lib/cjs/docker/index.cjs +2 -2
  31. package/lib/cjs/graph/constants.cjs +2 -2
  32. package/lib/cjs/graph/decorators.cjs +2 -2
  33. package/lib/cjs/graph/errors/GraphCycleError.cjs +2 -2
  34. package/lib/cjs/graph/errors/GraphExecutionError.cjs +2 -2
  35. package/lib/cjs/graph/errors/GraphInputError.cjs +2 -2
  36. package/lib/cjs/graph/errors/GraphLoopLimitError.cjs +2 -2
  37. package/lib/cjs/graph/errors/GraphPinningError.cjs +2 -2
  38. package/lib/cjs/graph/errors/GraphPortError.cjs +2 -2
  39. package/lib/cjs/graph/errors/GraphStoreError.cjs +2 -2
  40. package/lib/cjs/graph/errors/GraphTopologyError.cjs +2 -2
  41. package/lib/cjs/graph/errors/index.cjs +2 -2
  42. package/lib/cjs/graph/events/GraphExecutionEvent.cjs +2 -2
  43. package/lib/cjs/graph/events/GraphExecutionEventEmitter.cjs +2 -2
  44. package/lib/cjs/graph/events/GraphExecutionEventFactory.cjs +2 -2
  45. package/lib/cjs/graph/events/GraphExecutionObserver.cjs +2 -2
  46. package/lib/cjs/graph/events/index.cjs +2 -2
  47. package/lib/cjs/graph/execution/CodeSandboxEvaluator.cjs +2 -2
  48. package/lib/cjs/graph/execution/GraphExecutionContext.cjs +2 -2
  49. package/lib/cjs/graph/execution/GraphExecutionEngine.cjs +2 -2
  50. package/lib/cjs/graph/execution/GraphExecutionFrame.cjs +2 -2
  51. package/lib/cjs/graph/execution/GraphExecutionResult.cjs +2 -2
  52. package/lib/cjs/graph/execution/GraphNodeExecutor.cjs +2 -2
  53. package/lib/cjs/graph/execution/SwitchGraphNodeExecutor.cjs +2 -2
  54. package/lib/cjs/graph/execution/index.cjs +2 -2
  55. package/lib/cjs/graph/index.cjs +2 -2
  56. package/lib/cjs/graph/loops/ConditionExpressionEvaluator.cjs +2 -2
  57. package/lib/cjs/graph/loops/ForeachGraphNodeExecutor.cjs +2 -2
  58. package/lib/cjs/graph/loops/GraphConditionEvaluator.cjs +2 -2
  59. package/lib/cjs/graph/loops/GraphLoopExecutionContext.cjs +2 -2
  60. package/lib/cjs/graph/loops/UntilGraphNodeExecutor.cjs +2 -2
  61. package/lib/cjs/graph/loops/WhileGraphNodeExecutor.cjs +2 -2
  62. package/lib/cjs/graph/loops/index.cjs +2 -2
  63. package/lib/cjs/graph/nodes/agent.cjs +2 -2
  64. package/lib/cjs/graph/nodes/base.cjs +35 -0
  65. package/lib/cjs/graph/nodes/category-styles.cjs +2 -2
  66. package/lib/cjs/graph/nodes/flow-control.cjs +31 -3
  67. package/lib/cjs/graph/nodes/index.cjs +3 -2
  68. package/lib/cjs/graph/nodes/triggers.cjs +2 -2
  69. package/lib/cjs/graph/pinning/GraphPinningDependencyResolver.cjs +2 -2
  70. package/lib/cjs/graph/pinning/GraphPinningMetadata.cjs +2 -2
  71. package/lib/cjs/graph/pinning/GraphPinningPolicy.cjs +2 -2
  72. package/lib/cjs/graph/pinning/GraphPinningService.cjs +2 -2
  73. package/lib/cjs/graph/pinning/index.cjs +2 -2
  74. package/lib/cjs/graph/planning/GraphExecutionPlan.cjs +2 -2
  75. package/lib/cjs/graph/planning/GraphExecutionPlanEdge.cjs +2 -2
  76. package/lib/cjs/graph/planning/GraphExecutionPlanLayer.cjs +2 -2
  77. package/lib/cjs/graph/planning/GraphExecutionPlanNode.cjs +2 -2
  78. package/lib/cjs/graph/planning/GraphExecutionPlanner.cjs +2 -2
  79. package/lib/cjs/graph/planning/GraphRelationResolver.cjs +2 -2
  80. package/lib/cjs/graph/planning/GraphTopology.cjs +2 -2
  81. package/lib/cjs/graph/planning/index.cjs +2 -2
  82. package/lib/cjs/graph/registry/GraphNodeExecutorRegistry.cjs +2 -2
  83. package/lib/cjs/graph/registry/GraphNodeExecutorResolver.cjs +2 -2
  84. package/lib/cjs/graph/registry/index.cjs +2 -2
  85. package/lib/cjs/graph/snapshots/GraphExecutionSnapshotMapper.cjs +2 -2
  86. package/lib/cjs/graph/snapshots/index.cjs +2 -2
  87. package/lib/cjs/graph/store/GraphCachedValue.cjs +2 -2
  88. package/lib/cjs/graph/store/GraphValueKey.cjs +2 -2
  89. package/lib/cjs/graph/store/GraphValueStore.cjs +2 -2
  90. package/lib/cjs/graph/store/GraphValueStoreAdapter.cjs +2 -2
  91. package/lib/cjs/graph/store/InMemoryGraphValueStoreAdapter.cjs +2 -2
  92. package/lib/cjs/graph/store/index.cjs +2 -2
  93. package/lib/cjs/graph/types.cjs +2 -2
  94. package/lib/cjs/graph/validation/GraphDefinitionValidator.cjs +2 -2
  95. package/lib/cjs/graph/validation/GraphPortSchemaResolver.cjs +2 -2
  96. package/lib/cjs/graph/validation/GraphValueValidator.cjs +2 -2
  97. package/lib/cjs/graph/validation/index.cjs +2 -2
  98. package/lib/cjs/index.cjs +6 -5
  99. package/lib/cjs/keycloak/index.cjs +2 -2
  100. package/lib/cjs/keycloak/services/KeycloakAuthService.cjs +2 -2
  101. package/lib/cjs/keycloak/services/KeycloakClientService.cjs +2 -2
  102. package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs +2 -2
  103. package/lib/cjs/keycloak/services/KeycloakRealmService.cjs +2 -2
  104. package/lib/cjs/keycloak/services/KeycloakRoleService.cjs +2 -2
  105. package/lib/cjs/keycloak/services/KeycloakService.cjs +2 -2
  106. package/lib/cjs/keycloak/services/KeycloakUserService.cjs +2 -2
  107. package/lib/cjs/keycloak/services/index.cjs +2 -2
  108. package/lib/cjs/keycloak/services/runtime.cjs +2 -2
  109. package/lib/cjs/keycloak/types.cjs +2 -2
  110. package/lib/cjs/kibana/helpers.cjs +2 -2
  111. package/lib/cjs/kibana/index.cjs +2 -2
  112. package/lib/cjs/kibana/services/KibanaAuthService.cjs +2 -2
  113. package/lib/cjs/kibana/services/KibanaDashboardService.cjs +2 -2
  114. package/lib/cjs/kibana/services/KibanaDataViewService.cjs +2 -2
  115. package/lib/cjs/kibana/services/KibanaRoleService.cjs +2 -2
  116. package/lib/cjs/kibana/services/KibanaService.cjs +2 -2
  117. package/lib/cjs/kibana/services/KibanaSpaceService.cjs +2 -2
  118. package/lib/cjs/kibana/services/KibanaUserService.cjs +2 -2
  119. package/lib/cjs/kibana/services/index.cjs +2 -2
  120. package/lib/cjs/kibana/services/runtime.cjs +2 -2
  121. package/lib/cjs/kibana/types.cjs +2 -2
  122. package/lib/cjs/namespaces/index.cjs +26 -0
  123. package/lib/cjs/namespaces/models/authorization-model.cjs +12 -0
  124. package/lib/cjs/namespaces/models/effective-permission.model.cjs +95 -0
  125. package/lib/cjs/namespaces/models/group-membership.model.cjs +66 -0
  126. package/lib/cjs/namespaces/models/group.model.cjs +74 -0
  127. package/lib/cjs/namespaces/models/index.cjs +39 -0
  128. package/lib/cjs/namespaces/models/inheritance-block.model.cjs +76 -0
  129. package/lib/cjs/namespaces/models/org-unit-closure.model.cjs +66 -0
  130. package/lib/cjs/namespaces/models/org-unit-membership.model.cjs +73 -0
  131. package/lib/cjs/namespaces/models/org-unit-profile.model.cjs +64 -0
  132. package/lib/cjs/namespaces/models/org-unit.model.cjs +102 -0
  133. package/lib/cjs/namespaces/models/permission.model.cjs +64 -0
  134. package/lib/cjs/namespaces/models/principal.model.cjs +77 -0
  135. package/lib/cjs/namespaces/models/protected-resource.model.cjs +99 -0
  136. package/lib/cjs/namespaces/models/resource-grant.model.cjs +88 -0
  137. package/lib/cjs/namespaces/models/role-assignment.model.cjs +98 -0
  138. package/lib/cjs/namespaces/models/role-permission.model.cjs +55 -0
  139. package/lib/cjs/namespaces/models/role.model.cjs +84 -0
  140. package/lib/cjs/namespaces/models/storage-binding.model.cjs +85 -0
  141. package/lib/cjs/namespaces/models/tenant-membership.model.cjs +67 -0
  142. package/lib/cjs/namespaces/models/tenant-profile.model.cjs +64 -0
  143. package/lib/cjs/namespaces/models/tenant.model.cjs +88 -0
  144. package/lib/cjs/namespaces/models/user.model.cjs +75 -0
  145. package/lib/cjs/namespaces/org-based-authorization-system.cjs +286 -0
  146. package/lib/cjs/namespaces/org-based-authorization-system.models.cjs +968 -0
  147. package/lib/cjs/namespaces/org-based-authorization-system.services.cjs +1046 -0
  148. package/lib/cjs/namespaces/services/authz.service.cjs +76 -0
  149. package/lib/cjs/namespaces/services/bootstrap.service.cjs +112 -0
  150. package/lib/cjs/namespaces/services/effective-permission.service.cjs +150 -0
  151. package/lib/cjs/namespaces/services/group-membership.service.cjs +42 -0
  152. package/lib/cjs/namespaces/services/group.service.cjs +30 -0
  153. package/lib/cjs/namespaces/services/index.cjs +42 -0
  154. package/lib/cjs/namespaces/services/inheritance-block.service.cjs +32 -0
  155. package/lib/cjs/namespaces/services/org-unit-closure.service.cjs +55 -0
  156. package/lib/cjs/namespaces/services/org-unit-membership.service.cjs +34 -0
  157. package/lib/cjs/namespaces/services/org-unit-profile.service.cjs +23 -0
  158. package/lib/cjs/namespaces/services/org-unit.service.cjs +160 -0
  159. package/lib/cjs/namespaces/services/permission.service.cjs +29 -0
  160. package/lib/cjs/namespaces/services/principal.service.cjs +35 -0
  161. package/lib/cjs/namespaces/services/protected-resource.service.cjs +43 -0
  162. package/lib/cjs/namespaces/services/resource-grant.service.cjs +45 -0
  163. package/lib/cjs/namespaces/services/resource-lifecycle.service.cjs +24 -0
  164. package/lib/cjs/namespaces/services/role-assignment.service.cjs +41 -0
  165. package/lib/cjs/namespaces/services/role-permission.service.cjs +51 -0
  166. package/lib/cjs/namespaces/services/role.service.cjs +45 -0
  167. package/lib/cjs/namespaces/services/storage-binding.service.cjs +39 -0
  168. package/lib/cjs/namespaces/services/system-management.service.cjs +102 -0
  169. package/lib/cjs/namespaces/services/tenant-membership.service.cjs +33 -0
  170. package/lib/cjs/namespaces/services/tenant-profile.service.cjs +28 -0
  171. package/lib/cjs/namespaces/services/tenant.service.cjs +36 -0
  172. package/lib/cjs/namespaces/services/user.service.cjs +32 -0
  173. package/lib/cjs/namespaces/types.cjs +67 -0
  174. package/lib/cjs/namespaces/utils.cjs +161 -0
  175. package/lib/cjs/nest/authService.cjs +2 -2
  176. package/lib/cjs/nest/graph/GraphExecutionController.cjs +153 -0
  177. package/lib/cjs/nest/graph/GraphExecutionModule.cjs +84 -0
  178. package/lib/cjs/nest/graph/GraphExecutionResultModel.cjs +82 -0
  179. package/lib/cjs/nest/graph/GraphExecutionResultRepository.cjs +66 -0
  180. package/lib/cjs/nest/graph/GraphExecutorRegistryFactory.cjs +35 -0
  181. package/lib/cjs/nest/graph/index.cjs +28 -0
  182. package/lib/cjs/nest/index.cjs +2 -2
  183. package/lib/cjs/nest/keycloakAuthHandler.cjs +2 -2
  184. package/lib/cjs/nest/keycloakModule.cjs +2 -2
  185. package/lib/cjs/nest/logging.cjs +2 -2
  186. package/lib/cjs/nest/types.cjs +2 -2
  187. package/lib/cjs/nest/utils.cjs +2 -2
  188. package/lib/cjs/secrets/aws/AwsSecretService.cjs +2 -2
  189. package/lib/cjs/secrets/aws/AwsSecretServiceConfig.cjs +2 -2
  190. package/lib/cjs/secrets/aws/index.cjs +2 -2
  191. package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs +2 -2
  192. package/lib/cjs/secrets/azure/AzureKeyVaultSecretServiceConfig.cjs +2 -2
  193. package/lib/cjs/secrets/azure/index.cjs +2 -2
  194. package/lib/cjs/secrets/core/SecretErrors.cjs +2 -2
  195. package/lib/cjs/secrets/core/SecretName.cjs +2 -2
  196. package/lib/cjs/secrets/core/SecretReference.cjs +2 -2
  197. package/lib/cjs/secrets/core/SecretSerialization.cjs +2 -2
  198. package/lib/cjs/secrets/core/SecretService.cjs +2 -2
  199. package/lib/cjs/secrets/core/SecretTypes.cjs +2 -2
  200. package/lib/cjs/secrets/core/index.cjs +2 -2
  201. package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs +2 -2
  202. package/lib/cjs/secrets/gcp/GcpSecretManagerServiceConfig.cjs +2 -2
  203. package/lib/cjs/secrets/gcp/index.cjs +2 -2
  204. package/lib/cjs/secrets/index.cjs +2 -2
  205. package/lib/cjs/secrets/model/ModelSecretCrypto.cjs +2 -2
  206. package/lib/cjs/secrets/model/ModelSecretService.cjs +2 -2
  207. package/lib/cjs/secrets/model/ModelSecretServiceConfig.cjs +2 -2
  208. package/lib/cjs/secrets/model/Secret.cjs +2 -2
  209. package/lib/cjs/secrets/model/index.cjs +2 -2
  210. package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs +2 -2
  211. package/lib/cjs/secrets/onepassword/OnePasswordSecretServiceConfig.cjs +2 -2
  212. package/lib/cjs/secrets/onepassword/index.cjs +2 -2
  213. package/lib/cjs/secrets/vault/VaultSecretService.cjs +2 -2
  214. package/lib/cjs/secrets/vault/VaultSecretServiceConfig.cjs +2 -2
  215. package/lib/cjs/secrets/vault/index.cjs +2 -2
  216. package/lib/cjs/shared/runtime.cjs +2 -2
  217. package/lib/cjs/utils.cjs +2 -2
  218. package/lib/esm/blob/azure/AzureBlobStoreService.js +1 -1
  219. package/lib/esm/blob/azure/index.js +1 -1
  220. package/lib/esm/blob/core/BlobErrors.js +1 -1
  221. package/lib/esm/blob/core/BlobKey.js +1 -1
  222. package/lib/esm/blob/core/BlobStoreFactory.js +1 -1
  223. package/lib/esm/blob/core/BlobStoreService.js +1 -1
  224. package/lib/esm/blob/core/BlobTypes.js +1 -1
  225. package/lib/esm/blob/core/BlobValue.js +1 -1
  226. package/lib/esm/blob/core/index.js +1 -1
  227. package/lib/esm/blob/gcp/GcsBlobStoreService.js +1 -1
  228. package/lib/esm/blob/gcp/index.js +1 -1
  229. package/lib/esm/blob/index.js +1 -1
  230. package/lib/esm/blob/ipfs/IpfsBlobStoreService.js +1 -1
  231. package/lib/esm/blob/ipfs/IpfsKeyIndex.js +1 -1
  232. package/lib/esm/blob/ipfs/LocalJsonIpfsKeyIndex.js +1 -1
  233. package/lib/esm/blob/ipfs/MemoryIpfsKeyIndex.js +1 -1
  234. package/lib/esm/blob/ipfs/PostgresIpfsKeyIndex.js +1 -1
  235. package/lib/esm/blob/ipfs/index.js +1 -1
  236. package/lib/esm/blob/local/LocalBlobStoreService.js +1 -1
  237. package/lib/esm/blob/local/index.js +1 -1
  238. package/lib/esm/blob/memory/MemoryBlobStoreService.js +1 -1
  239. package/lib/esm/blob/memory/index.js +1 -1
  240. package/lib/esm/blob/s3/MinioBlobStoreService.js +1 -1
  241. package/lib/esm/blob/s3/R2BlobStoreService.js +1 -1
  242. package/lib/esm/blob/s3/S3BlobStoreService.js +1 -1
  243. package/lib/esm/blob/s3/index.js +1 -1
  244. package/lib/esm/docker/DockerComposeService.js +1 -1
  245. package/lib/esm/docker/index.js +1 -1
  246. package/lib/esm/graph/constants.js +1 -1
  247. package/lib/esm/graph/decorators.js +1 -1
  248. package/lib/esm/graph/errors/GraphCycleError.js +1 -1
  249. package/lib/esm/graph/errors/GraphExecutionError.js +1 -1
  250. package/lib/esm/graph/errors/GraphInputError.js +1 -1
  251. package/lib/esm/graph/errors/GraphLoopLimitError.js +1 -1
  252. package/lib/esm/graph/errors/GraphPinningError.js +1 -1
  253. package/lib/esm/graph/errors/GraphPortError.js +1 -1
  254. package/lib/esm/graph/errors/GraphStoreError.js +1 -1
  255. package/lib/esm/graph/errors/GraphTopologyError.js +1 -1
  256. package/lib/esm/graph/errors/index.js +1 -1
  257. package/lib/esm/graph/events/GraphExecutionEvent.js +1 -1
  258. package/lib/esm/graph/events/GraphExecutionEventEmitter.js +1 -1
  259. package/lib/esm/graph/events/GraphExecutionEventFactory.js +1 -1
  260. package/lib/esm/graph/events/GraphExecutionObserver.js +1 -1
  261. package/lib/esm/graph/events/index.js +1 -1
  262. package/lib/esm/graph/execution/CodeSandboxEvaluator.js +1 -1
  263. package/lib/esm/graph/execution/GraphExecutionContext.js +1 -1
  264. package/lib/esm/graph/execution/GraphExecutionEngine.js +1 -1
  265. package/lib/esm/graph/execution/GraphExecutionFrame.js +1 -1
  266. package/lib/esm/graph/execution/GraphExecutionResult.js +1 -1
  267. package/lib/esm/graph/execution/GraphNodeExecutor.js +1 -1
  268. package/lib/esm/graph/execution/SwitchGraphNodeExecutor.js +1 -1
  269. package/lib/esm/graph/execution/index.js +1 -1
  270. package/lib/esm/graph/index.js +1 -1
  271. package/lib/esm/graph/loops/ConditionExpressionEvaluator.js +1 -1
  272. package/lib/esm/graph/loops/ForeachGraphNodeExecutor.js +1 -1
  273. package/lib/esm/graph/loops/GraphConditionEvaluator.js +1 -1
  274. package/lib/esm/graph/loops/GraphLoopExecutionContext.js +1 -1
  275. package/lib/esm/graph/loops/UntilGraphNodeExecutor.js +1 -1
  276. package/lib/esm/graph/loops/WhileGraphNodeExecutor.js +1 -1
  277. package/lib/esm/graph/loops/index.js +1 -1
  278. package/lib/esm/graph/nodes/agent.js +1 -1
  279. package/lib/esm/graph/nodes/base.js +30 -0
  280. package/lib/esm/graph/nodes/category-styles.js +1 -1
  281. package/lib/esm/graph/nodes/flow-control.js +31 -3
  282. package/lib/esm/graph/nodes/index.js +2 -1
  283. package/lib/esm/graph/nodes/triggers.js +1 -1
  284. package/lib/esm/graph/pinning/GraphPinningDependencyResolver.js +1 -1
  285. package/lib/esm/graph/pinning/GraphPinningMetadata.js +1 -1
  286. package/lib/esm/graph/pinning/GraphPinningPolicy.js +1 -1
  287. package/lib/esm/graph/pinning/GraphPinningService.js +1 -1
  288. package/lib/esm/graph/pinning/index.js +1 -1
  289. package/lib/esm/graph/planning/GraphExecutionPlan.js +1 -1
  290. package/lib/esm/graph/planning/GraphExecutionPlanEdge.js +1 -1
  291. package/lib/esm/graph/planning/GraphExecutionPlanLayer.js +1 -1
  292. package/lib/esm/graph/planning/GraphExecutionPlanNode.js +1 -1
  293. package/lib/esm/graph/planning/GraphExecutionPlanner.js +1 -1
  294. package/lib/esm/graph/planning/GraphRelationResolver.js +1 -1
  295. package/lib/esm/graph/planning/GraphTopology.js +1 -1
  296. package/lib/esm/graph/planning/index.js +1 -1
  297. package/lib/esm/graph/registry/GraphNodeExecutorRegistry.js +1 -1
  298. package/lib/esm/graph/registry/GraphNodeExecutorResolver.js +1 -1
  299. package/lib/esm/graph/registry/index.js +1 -1
  300. package/lib/esm/graph/snapshots/GraphExecutionSnapshotMapper.js +1 -1
  301. package/lib/esm/graph/snapshots/index.js +1 -1
  302. package/lib/esm/graph/store/GraphCachedValue.js +1 -1
  303. package/lib/esm/graph/store/GraphValueKey.js +1 -1
  304. package/lib/esm/graph/store/GraphValueStore.js +1 -1
  305. package/lib/esm/graph/store/GraphValueStoreAdapter.js +1 -1
  306. package/lib/esm/graph/store/InMemoryGraphValueStoreAdapter.js +1 -1
  307. package/lib/esm/graph/store/index.js +1 -1
  308. package/lib/esm/graph/types.js +1 -1
  309. package/lib/esm/graph/validation/GraphDefinitionValidator.js +1 -1
  310. package/lib/esm/graph/validation/GraphPortSchemaResolver.js +1 -1
  311. package/lib/esm/graph/validation/GraphValueValidator.js +1 -1
  312. package/lib/esm/graph/validation/index.js +1 -1
  313. package/lib/esm/index.js +5 -4
  314. package/lib/esm/keycloak/index.js +1 -1
  315. package/lib/esm/keycloak/services/KeycloakAuthService.js +1 -1
  316. package/lib/esm/keycloak/services/KeycloakClientService.js +1 -1
  317. package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js +1 -1
  318. package/lib/esm/keycloak/services/KeycloakRealmService.js +1 -1
  319. package/lib/esm/keycloak/services/KeycloakRoleService.js +1 -1
  320. package/lib/esm/keycloak/services/KeycloakService.js +1 -1
  321. package/lib/esm/keycloak/services/KeycloakUserService.js +1 -1
  322. package/lib/esm/keycloak/services/index.js +1 -1
  323. package/lib/esm/keycloak/services/runtime.js +1 -1
  324. package/lib/esm/keycloak/types.js +1 -1
  325. package/lib/esm/kibana/helpers.js +1 -1
  326. package/lib/esm/kibana/index.js +1 -1
  327. package/lib/esm/kibana/services/KibanaAuthService.js +1 -1
  328. package/lib/esm/kibana/services/KibanaDashboardService.js +1 -1
  329. package/lib/esm/kibana/services/KibanaDataViewService.js +1 -1
  330. package/lib/esm/kibana/services/KibanaRoleService.js +1 -1
  331. package/lib/esm/kibana/services/KibanaService.js +1 -1
  332. package/lib/esm/kibana/services/KibanaSpaceService.js +1 -1
  333. package/lib/esm/kibana/services/KibanaUserService.js +1 -1
  334. package/lib/esm/kibana/services/index.js +1 -1
  335. package/lib/esm/kibana/services/runtime.js +1 -1
  336. package/lib/esm/kibana/types.js +1 -1
  337. package/lib/esm/namespaces/index.js +9 -0
  338. package/lib/esm/namespaces/models/authorization-model.js +7 -0
  339. package/lib/esm/namespaces/models/effective-permission.model.js +86 -0
  340. package/lib/esm/namespaces/models/group-membership.model.js +57 -0
  341. package/lib/esm/namespaces/models/group.model.js +65 -0
  342. package/lib/esm/namespaces/models/index.js +22 -0
  343. package/lib/esm/namespaces/models/inheritance-block.model.js +67 -0
  344. package/lib/esm/namespaces/models/org-unit-closure.model.js +57 -0
  345. package/lib/esm/namespaces/models/org-unit-membership.model.js +64 -0
  346. package/lib/esm/namespaces/models/org-unit-profile.model.js +55 -0
  347. package/lib/esm/namespaces/models/org-unit.model.js +93 -0
  348. package/lib/esm/namespaces/models/permission.model.js +55 -0
  349. package/lib/esm/namespaces/models/principal.model.js +68 -0
  350. package/lib/esm/namespaces/models/protected-resource.model.js +90 -0
  351. package/lib/esm/namespaces/models/resource-grant.model.js +79 -0
  352. package/lib/esm/namespaces/models/role-assignment.model.js +89 -0
  353. package/lib/esm/namespaces/models/role-permission.model.js +46 -0
  354. package/lib/esm/namespaces/models/role.model.js +75 -0
  355. package/lib/esm/namespaces/models/storage-binding.model.js +76 -0
  356. package/lib/esm/namespaces/models/tenant-membership.model.js +58 -0
  357. package/lib/esm/namespaces/models/tenant-profile.model.js +55 -0
  358. package/lib/esm/namespaces/models/tenant.model.js +79 -0
  359. package/lib/esm/namespaces/models/user.model.js +66 -0
  360. package/lib/esm/namespaces/org-based-authorization-system.js +283 -0
  361. package/lib/esm/namespaces/org-based-authorization-system.models.js +958 -0
  362. package/lib/esm/namespaces/org-based-authorization-system.services.js +1014 -0
  363. package/lib/esm/namespaces/services/authz.service.js +71 -0
  364. package/lib/esm/namespaces/services/bootstrap.service.js +102 -0
  365. package/lib/esm/namespaces/services/effective-permission.service.js +140 -0
  366. package/lib/esm/namespaces/services/group-membership.service.js +37 -0
  367. package/lib/esm/namespaces/services/group.service.js +25 -0
  368. package/lib/esm/namespaces/services/index.js +25 -0
  369. package/lib/esm/namespaces/services/inheritance-block.service.js +27 -0
  370. package/lib/esm/namespaces/services/org-unit-closure.service.js +50 -0
  371. package/lib/esm/namespaces/services/org-unit-membership.service.js +29 -0
  372. package/lib/esm/namespaces/services/org-unit-profile.service.js +18 -0
  373. package/lib/esm/namespaces/services/org-unit.service.js +150 -0
  374. package/lib/esm/namespaces/services/permission.service.js +24 -0
  375. package/lib/esm/namespaces/services/principal.service.js +30 -0
  376. package/lib/esm/namespaces/services/protected-resource.service.js +38 -0
  377. package/lib/esm/namespaces/services/resource-grant.service.js +40 -0
  378. package/lib/esm/namespaces/services/resource-lifecycle.service.js +19 -0
  379. package/lib/esm/namespaces/services/role-assignment.service.js +36 -0
  380. package/lib/esm/namespaces/services/role-permission.service.js +46 -0
  381. package/lib/esm/namespaces/services/role.service.js +40 -0
  382. package/lib/esm/namespaces/services/storage-binding.service.js +34 -0
  383. package/lib/esm/namespaces/services/system-management.service.js +92 -0
  384. package/lib/esm/namespaces/services/tenant-membership.service.js +28 -0
  385. package/lib/esm/namespaces/services/tenant-profile.service.js +23 -0
  386. package/lib/esm/namespaces/services/tenant.service.js +31 -0
  387. package/lib/esm/namespaces/services/user.service.js +27 -0
  388. package/lib/esm/namespaces/types.js +71 -0
  389. package/lib/esm/namespaces/utils.js +143 -0
  390. package/lib/esm/nest/authService.js +1 -1
  391. package/lib/esm/nest/graph/GraphExecutionController.js +144 -0
  392. package/lib/esm/nest/graph/GraphExecutionModule.js +76 -0
  393. package/lib/esm/nest/graph/GraphExecutionResultModel.js +73 -0
  394. package/lib/esm/nest/graph/GraphExecutionResultRepository.js +60 -0
  395. package/lib/esm/nest/graph/GraphExecutorRegistryFactory.js +31 -0
  396. package/lib/esm/nest/graph/index.js +11 -0
  397. package/lib/esm/nest/index.js +1 -1
  398. package/lib/esm/nest/keycloakAuthHandler.js +1 -1
  399. package/lib/esm/nest/keycloakModule.js +1 -1
  400. package/lib/esm/nest/logging.js +1 -1
  401. package/lib/esm/nest/types.js +1 -1
  402. package/lib/esm/nest/utils.js +1 -1
  403. package/lib/esm/secrets/aws/AwsSecretService.js +1 -1
  404. package/lib/esm/secrets/aws/AwsSecretServiceConfig.js +1 -1
  405. package/lib/esm/secrets/aws/index.js +1 -1
  406. package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js +1 -1
  407. package/lib/esm/secrets/azure/AzureKeyVaultSecretServiceConfig.js +1 -1
  408. package/lib/esm/secrets/azure/index.js +1 -1
  409. package/lib/esm/secrets/core/SecretErrors.js +1 -1
  410. package/lib/esm/secrets/core/SecretName.js +1 -1
  411. package/lib/esm/secrets/core/SecretReference.js +1 -1
  412. package/lib/esm/secrets/core/SecretSerialization.js +1 -1
  413. package/lib/esm/secrets/core/SecretService.js +1 -1
  414. package/lib/esm/secrets/core/SecretTypes.js +1 -1
  415. package/lib/esm/secrets/core/index.js +1 -1
  416. package/lib/esm/secrets/gcp/GcpSecretManagerService.js +1 -1
  417. package/lib/esm/secrets/gcp/GcpSecretManagerServiceConfig.js +1 -1
  418. package/lib/esm/secrets/gcp/index.js +1 -1
  419. package/lib/esm/secrets/index.js +1 -1
  420. package/lib/esm/secrets/model/ModelSecretCrypto.js +1 -1
  421. package/lib/esm/secrets/model/ModelSecretService.js +1 -1
  422. package/lib/esm/secrets/model/ModelSecretServiceConfig.js +1 -1
  423. package/lib/esm/secrets/model/Secret.js +1 -1
  424. package/lib/esm/secrets/model/index.js +1 -1
  425. package/lib/esm/secrets/onepassword/OnePasswordSecretService.js +1 -1
  426. package/lib/esm/secrets/onepassword/OnePasswordSecretServiceConfig.js +1 -1
  427. package/lib/esm/secrets/onepassword/index.js +1 -1
  428. package/lib/esm/secrets/vault/VaultSecretService.js +1 -1
  429. package/lib/esm/secrets/vault/VaultSecretServiceConfig.js +1 -1
  430. package/lib/esm/secrets/vault/index.js +1 -1
  431. package/lib/esm/shared/runtime.js +1 -1
  432. package/lib/esm/utils.js +1 -1
  433. package/lib/types/graph/nodes/base.d.cts +28 -0
  434. package/lib/types/graph/nodes/base.d.mts +28 -0
  435. package/lib/types/graph/nodes/flow-control.d.cts +9 -1
  436. package/lib/types/graph/nodes/flow-control.d.mts +9 -1
  437. package/lib/types/graph/nodes/index.d.cts +1 -0
  438. package/lib/types/graph/nodes/index.d.mts +1 -0
  439. package/lib/types/graph/types.d.cts +15 -1
  440. package/lib/types/graph/types.d.mts +15 -1
  441. package/lib/types/index.d.cts +3 -2
  442. package/lib/types/index.d.mts +3 -2
  443. package/lib/types/namespaces/index.d.cts +8 -0
  444. package/lib/types/namespaces/index.d.mts +8 -0
  445. package/lib/types/namespaces/models/authorization-model.d.cts +4 -0
  446. package/lib/types/namespaces/models/authorization-model.d.mts +4 -0
  447. package/lib/types/namespaces/models/effective-permission.model.d.cts +18 -0
  448. package/lib/types/namespaces/models/effective-permission.model.d.mts +18 -0
  449. package/lib/types/namespaces/models/group-membership.model.d.cts +13 -0
  450. package/lib/types/namespaces/models/group-membership.model.d.mts +13 -0
  451. package/lib/types/namespaces/models/group.model.d.cts +15 -0
  452. package/lib/types/namespaces/models/group.model.d.mts +15 -0
  453. package/lib/types/namespaces/models/index.d.cts +21 -0
  454. package/lib/types/namespaces/models/index.d.mts +21 -0
  455. package/lib/types/namespaces/models/inheritance-block.model.d.cts +15 -0
  456. package/lib/types/namespaces/models/inheritance-block.model.d.mts +15 -0
  457. package/lib/types/namespaces/models/org-unit-closure.model.d.cts +12 -0
  458. package/lib/types/namespaces/models/org-unit-closure.model.d.mts +12 -0
  459. package/lib/types/namespaces/models/org-unit-membership.model.d.cts +15 -0
  460. package/lib/types/namespaces/models/org-unit-membership.model.d.mts +15 -0
  461. package/lib/types/namespaces/models/org-unit-profile.model.d.cts +11 -0
  462. package/lib/types/namespaces/models/org-unit-profile.model.d.mts +11 -0
  463. package/lib/types/namespaces/models/org-unit.model.d.cts +23 -0
  464. package/lib/types/namespaces/models/org-unit.model.d.mts +23 -0
  465. package/lib/types/namespaces/models/permission.model.d.cts +11 -0
  466. package/lib/types/namespaces/models/permission.model.d.mts +11 -0
  467. package/lib/types/namespaces/models/principal.model.d.cts +16 -0
  468. package/lib/types/namespaces/models/principal.model.d.mts +16 -0
  469. package/lib/types/namespaces/models/protected-resource.model.d.cts +21 -0
  470. package/lib/types/namespaces/models/protected-resource.model.d.mts +21 -0
  471. package/lib/types/namespaces/models/resource-grant.model.d.cts +18 -0
  472. package/lib/types/namespaces/models/resource-grant.model.d.mts +18 -0
  473. package/lib/types/namespaces/models/role-assignment.model.d.cts +20 -0
  474. package/lib/types/namespaces/models/role-assignment.model.d.mts +20 -0
  475. package/lib/types/namespaces/models/role-permission.model.d.cts +10 -0
  476. package/lib/types/namespaces/models/role-permission.model.d.mts +10 -0
  477. package/lib/types/namespaces/models/role.model.d.cts +17 -0
  478. package/lib/types/namespaces/models/role.model.d.mts +17 -0
  479. package/lib/types/namespaces/models/storage-binding.model.d.cts +15 -0
  480. package/lib/types/namespaces/models/storage-binding.model.d.mts +15 -0
  481. package/lib/types/namespaces/models/tenant-membership.model.d.cts +13 -0
  482. package/lib/types/namespaces/models/tenant-membership.model.d.mts +13 -0
  483. package/lib/types/namespaces/models/tenant-profile.model.d.cts +11 -0
  484. package/lib/types/namespaces/models/tenant-profile.model.d.mts +11 -0
  485. package/lib/types/namespaces/models/tenant.model.d.cts +19 -0
  486. package/lib/types/namespaces/models/tenant.model.d.mts +19 -0
  487. package/lib/types/namespaces/models/user.model.d.cts +14 -0
  488. package/lib/types/namespaces/models/user.model.d.mts +14 -0
  489. package/lib/types/namespaces/org-based-authorization-system.d.cts +299 -0
  490. package/lib/types/namespaces/org-based-authorization-system.d.mts +299 -0
  491. package/lib/types/namespaces/org-based-authorization-system.models.d.cts +212 -0
  492. package/lib/types/namespaces/org-based-authorization-system.models.d.mts +212 -0
  493. package/lib/types/namespaces/org-based-authorization-system.services.d.cts +217 -0
  494. package/lib/types/namespaces/org-based-authorization-system.services.d.mts +217 -0
  495. package/lib/types/namespaces/services/authz.service.d.cts +10 -0
  496. package/lib/types/namespaces/services/authz.service.d.mts +10 -0
  497. package/lib/types/namespaces/services/bootstrap.service.d.cts +21 -0
  498. package/lib/types/namespaces/services/bootstrap.service.d.mts +21 -0
  499. package/lib/types/namespaces/services/effective-permission.service.d.cts +13 -0
  500. package/lib/types/namespaces/services/effective-permission.service.d.mts +13 -0
  501. package/lib/types/namespaces/services/group-membership.service.d.cts +10 -0
  502. package/lib/types/namespaces/services/group-membership.service.d.mts +10 -0
  503. package/lib/types/namespaces/services/group.service.d.cts +9 -0
  504. package/lib/types/namespaces/services/group.service.d.mts +9 -0
  505. package/lib/types/namespaces/services/index.d.cts +24 -0
  506. package/lib/types/namespaces/services/index.d.mts +24 -0
  507. package/lib/types/namespaces/services/inheritance-block.service.d.cts +10 -0
  508. package/lib/types/namespaces/services/inheritance-block.service.d.mts +10 -0
  509. package/lib/types/namespaces/services/org-unit-closure.service.d.cts +11 -0
  510. package/lib/types/namespaces/services/org-unit-closure.service.d.mts +11 -0
  511. package/lib/types/namespaces/services/org-unit-membership.service.d.cts +11 -0
  512. package/lib/types/namespaces/services/org-unit-membership.service.d.mts +11 -0
  513. package/lib/types/namespaces/services/org-unit-profile.service.d.cts +7 -0
  514. package/lib/types/namespaces/services/org-unit-profile.service.d.mts +7 -0
  515. package/lib/types/namespaces/services/org-unit.service.d.cts +18 -0
  516. package/lib/types/namespaces/services/org-unit.service.d.mts +18 -0
  517. package/lib/types/namespaces/services/permission.service.d.cts +10 -0
  518. package/lib/types/namespaces/services/permission.service.d.mts +10 -0
  519. package/lib/types/namespaces/services/principal.service.d.cts +11 -0
  520. package/lib/types/namespaces/services/principal.service.d.mts +11 -0
  521. package/lib/types/namespaces/services/protected-resource.service.d.cts +13 -0
  522. package/lib/types/namespaces/services/protected-resource.service.d.mts +13 -0
  523. package/lib/types/namespaces/services/resource-grant.service.d.cts +12 -0
  524. package/lib/types/namespaces/services/resource-grant.service.d.mts +12 -0
  525. package/lib/types/namespaces/services/resource-lifecycle.service.d.cts +10 -0
  526. package/lib/types/namespaces/services/resource-lifecycle.service.d.mts +10 -0
  527. package/lib/types/namespaces/services/role-assignment.service.d.cts +12 -0
  528. package/lib/types/namespaces/services/role-assignment.service.d.mts +12 -0
  529. package/lib/types/namespaces/services/role-permission.service.d.cts +12 -0
  530. package/lib/types/namespaces/services/role-permission.service.d.mts +12 -0
  531. package/lib/types/namespaces/services/role.service.d.cts +12 -0
  532. package/lib/types/namespaces/services/role.service.d.mts +12 -0
  533. package/lib/types/namespaces/services/storage-binding.service.d.cts +12 -0
  534. package/lib/types/namespaces/services/storage-binding.service.d.mts +12 -0
  535. package/lib/types/namespaces/services/system-management.service.d.cts +14 -0
  536. package/lib/types/namespaces/services/system-management.service.d.mts +14 -0
  537. package/lib/types/namespaces/services/tenant-membership.service.d.cts +11 -0
  538. package/lib/types/namespaces/services/tenant-membership.service.d.mts +11 -0
  539. package/lib/types/namespaces/services/tenant-profile.service.d.cts +8 -0
  540. package/lib/types/namespaces/services/tenant-profile.service.d.mts +8 -0
  541. package/lib/types/namespaces/services/tenant.service.d.cts +12 -0
  542. package/lib/types/namespaces/services/tenant.service.d.mts +12 -0
  543. package/lib/types/namespaces/services/user.service.d.cts +11 -0
  544. package/lib/types/namespaces/services/user.service.d.mts +11 -0
  545. package/lib/types/namespaces/types.d.cts +230 -0
  546. package/lib/types/namespaces/types.d.mts +230 -0
  547. package/lib/types/namespaces/utils.d.cts +68 -0
  548. package/lib/types/namespaces/utils.d.mts +68 -0
  549. package/lib/types/nest/graph/GraphExecutionController.d.cts +62 -0
  550. package/lib/types/nest/graph/GraphExecutionController.d.mts +62 -0
  551. package/lib/types/nest/graph/GraphExecutionModule.d.cts +39 -0
  552. package/lib/types/nest/graph/GraphExecutionModule.d.mts +39 -0
  553. package/lib/types/nest/graph/GraphExecutionResultModel.d.cts +46 -0
  554. package/lib/types/nest/graph/GraphExecutionResultModel.d.mts +46 -0
  555. package/lib/types/nest/graph/GraphExecutionResultRepository.d.cts +38 -0
  556. package/lib/types/nest/graph/GraphExecutionResultRepository.d.mts +38 -0
  557. package/lib/types/nest/graph/GraphExecutorRegistryFactory.d.cts +17 -0
  558. package/lib/types/nest/graph/GraphExecutorRegistryFactory.d.mts +17 -0
  559. package/lib/types/nest/graph/index.d.cts +10 -0
  560. package/lib/types/nest/graph/index.d.mts +10 -0
  561. package/package.json +27 -5
  562. package/sql/001_constraints.sql +11 -0
  563. package/sql/002_rls.sql +20 -0
  564. package/sql/003_indexes.sql +2 -0
  565. package/dist/integrations.cjs.map +0 -1
  566. package/dist/integrations.js.map +0 -1
  567. package/lib/cjs/blob/azure/AzureBlobStoreService.cjs.map +0 -1
  568. package/lib/cjs/blob/azure/index.cjs.map +0 -1
  569. package/lib/cjs/blob/core/BlobErrors.cjs.map +0 -1
  570. package/lib/cjs/blob/core/BlobKey.cjs.map +0 -1
  571. package/lib/cjs/blob/core/BlobStoreFactory.cjs.map +0 -1
  572. package/lib/cjs/blob/core/BlobStoreService.cjs.map +0 -1
  573. package/lib/cjs/blob/core/BlobTypes.cjs.map +0 -1
  574. package/lib/cjs/blob/core/BlobValue.cjs.map +0 -1
  575. package/lib/cjs/blob/core/index.cjs.map +0 -1
  576. package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs.map +0 -1
  577. package/lib/cjs/blob/gcp/index.cjs.map +0 -1
  578. package/lib/cjs/blob/index.cjs.map +0 -1
  579. package/lib/cjs/blob/ipfs/IpfsBlobStoreService.cjs.map +0 -1
  580. package/lib/cjs/blob/ipfs/IpfsKeyIndex.cjs.map +0 -1
  581. package/lib/cjs/blob/ipfs/LocalJsonIpfsKeyIndex.cjs.map +0 -1
  582. package/lib/cjs/blob/ipfs/MemoryIpfsKeyIndex.cjs.map +0 -1
  583. package/lib/cjs/blob/ipfs/PostgresIpfsKeyIndex.cjs.map +0 -1
  584. package/lib/cjs/blob/ipfs/index.cjs.map +0 -1
  585. package/lib/cjs/blob/local/LocalBlobStoreService.cjs.map +0 -1
  586. package/lib/cjs/blob/local/index.cjs.map +0 -1
  587. package/lib/cjs/blob/memory/MemoryBlobStoreService.cjs.map +0 -1
  588. package/lib/cjs/blob/memory/index.cjs.map +0 -1
  589. package/lib/cjs/blob/s3/MinioBlobStoreService.cjs.map +0 -1
  590. package/lib/cjs/blob/s3/R2BlobStoreService.cjs.map +0 -1
  591. package/lib/cjs/blob/s3/S3BlobStoreService.cjs.map +0 -1
  592. package/lib/cjs/blob/s3/index.cjs.map +0 -1
  593. package/lib/cjs/docker/DockerComposeService.cjs.map +0 -1
  594. package/lib/cjs/docker/index.cjs.map +0 -1
  595. package/lib/cjs/graph/constants.cjs.map +0 -1
  596. package/lib/cjs/graph/decorators.cjs.map +0 -1
  597. package/lib/cjs/graph/errors/GraphCycleError.cjs.map +0 -1
  598. package/lib/cjs/graph/errors/GraphExecutionError.cjs.map +0 -1
  599. package/lib/cjs/graph/errors/GraphInputError.cjs.map +0 -1
  600. package/lib/cjs/graph/errors/GraphLoopLimitError.cjs.map +0 -1
  601. package/lib/cjs/graph/errors/GraphPinningError.cjs.map +0 -1
  602. package/lib/cjs/graph/errors/GraphPortError.cjs.map +0 -1
  603. package/lib/cjs/graph/errors/GraphStoreError.cjs.map +0 -1
  604. package/lib/cjs/graph/errors/GraphTopologyError.cjs.map +0 -1
  605. package/lib/cjs/graph/errors/index.cjs.map +0 -1
  606. package/lib/cjs/graph/events/GraphExecutionEvent.cjs.map +0 -1
  607. package/lib/cjs/graph/events/GraphExecutionEventEmitter.cjs.map +0 -1
  608. package/lib/cjs/graph/events/GraphExecutionEventFactory.cjs.map +0 -1
  609. package/lib/cjs/graph/events/GraphExecutionObserver.cjs.map +0 -1
  610. package/lib/cjs/graph/events/index.cjs.map +0 -1
  611. package/lib/cjs/graph/execution/CodeSandboxEvaluator.cjs.map +0 -1
  612. package/lib/cjs/graph/execution/GraphExecutionContext.cjs.map +0 -1
  613. package/lib/cjs/graph/execution/GraphExecutionEngine.cjs.map +0 -1
  614. package/lib/cjs/graph/execution/GraphExecutionFrame.cjs.map +0 -1
  615. package/lib/cjs/graph/execution/GraphExecutionResult.cjs.map +0 -1
  616. package/lib/cjs/graph/execution/GraphNodeExecutor.cjs.map +0 -1
  617. package/lib/cjs/graph/execution/SwitchGraphNodeExecutor.cjs.map +0 -1
  618. package/lib/cjs/graph/execution/index.cjs.map +0 -1
  619. package/lib/cjs/graph/index.cjs.map +0 -1
  620. package/lib/cjs/graph/loops/ConditionExpressionEvaluator.cjs.map +0 -1
  621. package/lib/cjs/graph/loops/ForeachGraphNodeExecutor.cjs.map +0 -1
  622. package/lib/cjs/graph/loops/GraphConditionEvaluator.cjs.map +0 -1
  623. package/lib/cjs/graph/loops/GraphLoopExecutionContext.cjs.map +0 -1
  624. package/lib/cjs/graph/loops/UntilGraphNodeExecutor.cjs.map +0 -1
  625. package/lib/cjs/graph/loops/WhileGraphNodeExecutor.cjs.map +0 -1
  626. package/lib/cjs/graph/loops/index.cjs.map +0 -1
  627. package/lib/cjs/graph/nodes/agent.cjs.map +0 -1
  628. package/lib/cjs/graph/nodes/category-styles.cjs.map +0 -1
  629. package/lib/cjs/graph/nodes/flow-control.cjs.map +0 -1
  630. package/lib/cjs/graph/nodes/index.cjs.map +0 -1
  631. package/lib/cjs/graph/nodes/triggers.cjs.map +0 -1
  632. package/lib/cjs/graph/pinning/GraphPinningDependencyResolver.cjs.map +0 -1
  633. package/lib/cjs/graph/pinning/GraphPinningMetadata.cjs.map +0 -1
  634. package/lib/cjs/graph/pinning/GraphPinningPolicy.cjs.map +0 -1
  635. package/lib/cjs/graph/pinning/GraphPinningService.cjs.map +0 -1
  636. package/lib/cjs/graph/pinning/index.cjs.map +0 -1
  637. package/lib/cjs/graph/planning/GraphExecutionPlan.cjs.map +0 -1
  638. package/lib/cjs/graph/planning/GraphExecutionPlanEdge.cjs.map +0 -1
  639. package/lib/cjs/graph/planning/GraphExecutionPlanLayer.cjs.map +0 -1
  640. package/lib/cjs/graph/planning/GraphExecutionPlanNode.cjs.map +0 -1
  641. package/lib/cjs/graph/planning/GraphExecutionPlanner.cjs.map +0 -1
  642. package/lib/cjs/graph/planning/GraphRelationResolver.cjs.map +0 -1
  643. package/lib/cjs/graph/planning/GraphTopology.cjs.map +0 -1
  644. package/lib/cjs/graph/planning/index.cjs.map +0 -1
  645. package/lib/cjs/graph/registry/GraphNodeExecutorRegistry.cjs.map +0 -1
  646. package/lib/cjs/graph/registry/GraphNodeExecutorResolver.cjs.map +0 -1
  647. package/lib/cjs/graph/registry/index.cjs.map +0 -1
  648. package/lib/cjs/graph/snapshots/GraphExecutionSnapshotMapper.cjs.map +0 -1
  649. package/lib/cjs/graph/snapshots/index.cjs.map +0 -1
  650. package/lib/cjs/graph/store/GraphCachedValue.cjs.map +0 -1
  651. package/lib/cjs/graph/store/GraphValueKey.cjs.map +0 -1
  652. package/lib/cjs/graph/store/GraphValueStore.cjs.map +0 -1
  653. package/lib/cjs/graph/store/GraphValueStoreAdapter.cjs.map +0 -1
  654. package/lib/cjs/graph/store/InMemoryGraphValueStoreAdapter.cjs.map +0 -1
  655. package/lib/cjs/graph/store/index.cjs.map +0 -1
  656. package/lib/cjs/graph/types.cjs.map +0 -1
  657. package/lib/cjs/graph/validation/GraphDefinitionValidator.cjs.map +0 -1
  658. package/lib/cjs/graph/validation/GraphPortSchemaResolver.cjs.map +0 -1
  659. package/lib/cjs/graph/validation/GraphValueValidator.cjs.map +0 -1
  660. package/lib/cjs/graph/validation/index.cjs.map +0 -1
  661. package/lib/cjs/index.cjs.map +0 -1
  662. package/lib/cjs/keycloak/index.cjs.map +0 -1
  663. package/lib/cjs/keycloak/services/KeycloakAuthService.cjs.map +0 -1
  664. package/lib/cjs/keycloak/services/KeycloakClientService.cjs.map +0 -1
  665. package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs.map +0 -1
  666. package/lib/cjs/keycloak/services/KeycloakRealmService.cjs.map +0 -1
  667. package/lib/cjs/keycloak/services/KeycloakRoleService.cjs.map +0 -1
  668. package/lib/cjs/keycloak/services/KeycloakService.cjs.map +0 -1
  669. package/lib/cjs/keycloak/services/KeycloakUserService.cjs.map +0 -1
  670. package/lib/cjs/keycloak/services/index.cjs.map +0 -1
  671. package/lib/cjs/keycloak/services/runtime.cjs.map +0 -1
  672. package/lib/cjs/keycloak/types.cjs.map +0 -1
  673. package/lib/cjs/kibana/helpers.cjs.map +0 -1
  674. package/lib/cjs/kibana/index.cjs.map +0 -1
  675. package/lib/cjs/kibana/services/KibanaAuthService.cjs.map +0 -1
  676. package/lib/cjs/kibana/services/KibanaDashboardService.cjs.map +0 -1
  677. package/lib/cjs/kibana/services/KibanaDataViewService.cjs.map +0 -1
  678. package/lib/cjs/kibana/services/KibanaRoleService.cjs.map +0 -1
  679. package/lib/cjs/kibana/services/KibanaService.cjs.map +0 -1
  680. package/lib/cjs/kibana/services/KibanaSpaceService.cjs.map +0 -1
  681. package/lib/cjs/kibana/services/KibanaUserService.cjs.map +0 -1
  682. package/lib/cjs/kibana/services/index.cjs.map +0 -1
  683. package/lib/cjs/kibana/services/runtime.cjs.map +0 -1
  684. package/lib/cjs/kibana/types.cjs.map +0 -1
  685. package/lib/cjs/nest/authService.cjs.map +0 -1
  686. package/lib/cjs/nest/index.cjs.map +0 -1
  687. package/lib/cjs/nest/keycloakAuthHandler.cjs.map +0 -1
  688. package/lib/cjs/nest/keycloakModule.cjs.map +0 -1
  689. package/lib/cjs/nest/logging.cjs.map +0 -1
  690. package/lib/cjs/nest/types.cjs.map +0 -1
  691. package/lib/cjs/nest/utils.cjs.map +0 -1
  692. package/lib/cjs/secrets/aws/AwsSecretService.cjs.map +0 -1
  693. package/lib/cjs/secrets/aws/AwsSecretServiceConfig.cjs.map +0 -1
  694. package/lib/cjs/secrets/aws/index.cjs.map +0 -1
  695. package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs.map +0 -1
  696. package/lib/cjs/secrets/azure/AzureKeyVaultSecretServiceConfig.cjs.map +0 -1
  697. package/lib/cjs/secrets/azure/index.cjs.map +0 -1
  698. package/lib/cjs/secrets/core/SecretErrors.cjs.map +0 -1
  699. package/lib/cjs/secrets/core/SecretName.cjs.map +0 -1
  700. package/lib/cjs/secrets/core/SecretReference.cjs.map +0 -1
  701. package/lib/cjs/secrets/core/SecretSerialization.cjs.map +0 -1
  702. package/lib/cjs/secrets/core/SecretService.cjs.map +0 -1
  703. package/lib/cjs/secrets/core/SecretTypes.cjs.map +0 -1
  704. package/lib/cjs/secrets/core/index.cjs.map +0 -1
  705. package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs.map +0 -1
  706. package/lib/cjs/secrets/gcp/GcpSecretManagerServiceConfig.cjs.map +0 -1
  707. package/lib/cjs/secrets/gcp/index.cjs.map +0 -1
  708. package/lib/cjs/secrets/index.cjs.map +0 -1
  709. package/lib/cjs/secrets/model/ModelSecretCrypto.cjs.map +0 -1
  710. package/lib/cjs/secrets/model/ModelSecretService.cjs.map +0 -1
  711. package/lib/cjs/secrets/model/ModelSecretServiceConfig.cjs.map +0 -1
  712. package/lib/cjs/secrets/model/Secret.cjs.map +0 -1
  713. package/lib/cjs/secrets/model/index.cjs.map +0 -1
  714. package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs.map +0 -1
  715. package/lib/cjs/secrets/onepassword/OnePasswordSecretServiceConfig.cjs.map +0 -1
  716. package/lib/cjs/secrets/onepassword/index.cjs.map +0 -1
  717. package/lib/cjs/secrets/vault/VaultSecretService.cjs.map +0 -1
  718. package/lib/cjs/secrets/vault/VaultSecretServiceConfig.cjs.map +0 -1
  719. package/lib/cjs/secrets/vault/index.cjs.map +0 -1
  720. package/lib/cjs/shared/runtime.cjs.map +0 -1
  721. package/lib/cjs/utils.cjs.map +0 -1
  722. package/lib/esm/blob/azure/AzureBlobStoreService.js.map +0 -1
  723. package/lib/esm/blob/azure/index.js.map +0 -1
  724. package/lib/esm/blob/core/BlobErrors.js.map +0 -1
  725. package/lib/esm/blob/core/BlobKey.js.map +0 -1
  726. package/lib/esm/blob/core/BlobStoreFactory.js.map +0 -1
  727. package/lib/esm/blob/core/BlobStoreService.js.map +0 -1
  728. package/lib/esm/blob/core/BlobTypes.js.map +0 -1
  729. package/lib/esm/blob/core/BlobValue.js.map +0 -1
  730. package/lib/esm/blob/core/index.js.map +0 -1
  731. package/lib/esm/blob/gcp/GcsBlobStoreService.js.map +0 -1
  732. package/lib/esm/blob/gcp/index.js.map +0 -1
  733. package/lib/esm/blob/index.js.map +0 -1
  734. package/lib/esm/blob/ipfs/IpfsBlobStoreService.js.map +0 -1
  735. package/lib/esm/blob/ipfs/IpfsKeyIndex.js.map +0 -1
  736. package/lib/esm/blob/ipfs/LocalJsonIpfsKeyIndex.js.map +0 -1
  737. package/lib/esm/blob/ipfs/MemoryIpfsKeyIndex.js.map +0 -1
  738. package/lib/esm/blob/ipfs/PostgresIpfsKeyIndex.js.map +0 -1
  739. package/lib/esm/blob/ipfs/index.js.map +0 -1
  740. package/lib/esm/blob/local/LocalBlobStoreService.js.map +0 -1
  741. package/lib/esm/blob/local/index.js.map +0 -1
  742. package/lib/esm/blob/memory/MemoryBlobStoreService.js.map +0 -1
  743. package/lib/esm/blob/memory/index.js.map +0 -1
  744. package/lib/esm/blob/s3/MinioBlobStoreService.js.map +0 -1
  745. package/lib/esm/blob/s3/R2BlobStoreService.js.map +0 -1
  746. package/lib/esm/blob/s3/S3BlobStoreService.js.map +0 -1
  747. package/lib/esm/blob/s3/index.js.map +0 -1
  748. package/lib/esm/docker/DockerComposeService.js.map +0 -1
  749. package/lib/esm/docker/index.js.map +0 -1
  750. package/lib/esm/graph/constants.js.map +0 -1
  751. package/lib/esm/graph/decorators.js.map +0 -1
  752. package/lib/esm/graph/errors/GraphCycleError.js.map +0 -1
  753. package/lib/esm/graph/errors/GraphExecutionError.js.map +0 -1
  754. package/lib/esm/graph/errors/GraphInputError.js.map +0 -1
  755. package/lib/esm/graph/errors/GraphLoopLimitError.js.map +0 -1
  756. package/lib/esm/graph/errors/GraphPinningError.js.map +0 -1
  757. package/lib/esm/graph/errors/GraphPortError.js.map +0 -1
  758. package/lib/esm/graph/errors/GraphStoreError.js.map +0 -1
  759. package/lib/esm/graph/errors/GraphTopologyError.js.map +0 -1
  760. package/lib/esm/graph/errors/index.js.map +0 -1
  761. package/lib/esm/graph/events/GraphExecutionEvent.js.map +0 -1
  762. package/lib/esm/graph/events/GraphExecutionEventEmitter.js.map +0 -1
  763. package/lib/esm/graph/events/GraphExecutionEventFactory.js.map +0 -1
  764. package/lib/esm/graph/events/GraphExecutionObserver.js.map +0 -1
  765. package/lib/esm/graph/events/index.js.map +0 -1
  766. package/lib/esm/graph/execution/CodeSandboxEvaluator.js.map +0 -1
  767. package/lib/esm/graph/execution/GraphExecutionContext.js.map +0 -1
  768. package/lib/esm/graph/execution/GraphExecutionEngine.js.map +0 -1
  769. package/lib/esm/graph/execution/GraphExecutionFrame.js.map +0 -1
  770. package/lib/esm/graph/execution/GraphExecutionResult.js.map +0 -1
  771. package/lib/esm/graph/execution/GraphNodeExecutor.js.map +0 -1
  772. package/lib/esm/graph/execution/SwitchGraphNodeExecutor.js.map +0 -1
  773. package/lib/esm/graph/execution/index.js.map +0 -1
  774. package/lib/esm/graph/index.js.map +0 -1
  775. package/lib/esm/graph/loops/ConditionExpressionEvaluator.js.map +0 -1
  776. package/lib/esm/graph/loops/ForeachGraphNodeExecutor.js.map +0 -1
  777. package/lib/esm/graph/loops/GraphConditionEvaluator.js.map +0 -1
  778. package/lib/esm/graph/loops/GraphLoopExecutionContext.js.map +0 -1
  779. package/lib/esm/graph/loops/UntilGraphNodeExecutor.js.map +0 -1
  780. package/lib/esm/graph/loops/WhileGraphNodeExecutor.js.map +0 -1
  781. package/lib/esm/graph/loops/index.js.map +0 -1
  782. package/lib/esm/graph/nodes/agent.js.map +0 -1
  783. package/lib/esm/graph/nodes/category-styles.js.map +0 -1
  784. package/lib/esm/graph/nodes/flow-control.js.map +0 -1
  785. package/lib/esm/graph/nodes/index.js.map +0 -1
  786. package/lib/esm/graph/nodes/triggers.js.map +0 -1
  787. package/lib/esm/graph/pinning/GraphPinningDependencyResolver.js.map +0 -1
  788. package/lib/esm/graph/pinning/GraphPinningMetadata.js.map +0 -1
  789. package/lib/esm/graph/pinning/GraphPinningPolicy.js.map +0 -1
  790. package/lib/esm/graph/pinning/GraphPinningService.js.map +0 -1
  791. package/lib/esm/graph/pinning/index.js.map +0 -1
  792. package/lib/esm/graph/planning/GraphExecutionPlan.js.map +0 -1
  793. package/lib/esm/graph/planning/GraphExecutionPlanEdge.js.map +0 -1
  794. package/lib/esm/graph/planning/GraphExecutionPlanLayer.js.map +0 -1
  795. package/lib/esm/graph/planning/GraphExecutionPlanNode.js.map +0 -1
  796. package/lib/esm/graph/planning/GraphExecutionPlanner.js.map +0 -1
  797. package/lib/esm/graph/planning/GraphRelationResolver.js.map +0 -1
  798. package/lib/esm/graph/planning/GraphTopology.js.map +0 -1
  799. package/lib/esm/graph/planning/index.js.map +0 -1
  800. package/lib/esm/graph/registry/GraphNodeExecutorRegistry.js.map +0 -1
  801. package/lib/esm/graph/registry/GraphNodeExecutorResolver.js.map +0 -1
  802. package/lib/esm/graph/registry/index.js.map +0 -1
  803. package/lib/esm/graph/snapshots/GraphExecutionSnapshotMapper.js.map +0 -1
  804. package/lib/esm/graph/snapshots/index.js.map +0 -1
  805. package/lib/esm/graph/store/GraphCachedValue.js.map +0 -1
  806. package/lib/esm/graph/store/GraphValueKey.js.map +0 -1
  807. package/lib/esm/graph/store/GraphValueStore.js.map +0 -1
  808. package/lib/esm/graph/store/GraphValueStoreAdapter.js.map +0 -1
  809. package/lib/esm/graph/store/InMemoryGraphValueStoreAdapter.js.map +0 -1
  810. package/lib/esm/graph/store/index.js.map +0 -1
  811. package/lib/esm/graph/types.js.map +0 -1
  812. package/lib/esm/graph/validation/GraphDefinitionValidator.js.map +0 -1
  813. package/lib/esm/graph/validation/GraphPortSchemaResolver.js.map +0 -1
  814. package/lib/esm/graph/validation/GraphValueValidator.js.map +0 -1
  815. package/lib/esm/graph/validation/index.js.map +0 -1
  816. package/lib/esm/index.js.map +0 -1
  817. package/lib/esm/keycloak/index.js.map +0 -1
  818. package/lib/esm/keycloak/services/KeycloakAuthService.js.map +0 -1
  819. package/lib/esm/keycloak/services/KeycloakClientService.js.map +0 -1
  820. package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js.map +0 -1
  821. package/lib/esm/keycloak/services/KeycloakRealmService.js.map +0 -1
  822. package/lib/esm/keycloak/services/KeycloakRoleService.js.map +0 -1
  823. package/lib/esm/keycloak/services/KeycloakService.js.map +0 -1
  824. package/lib/esm/keycloak/services/KeycloakUserService.js.map +0 -1
  825. package/lib/esm/keycloak/services/index.js.map +0 -1
  826. package/lib/esm/keycloak/services/runtime.js.map +0 -1
  827. package/lib/esm/keycloak/types.js.map +0 -1
  828. package/lib/esm/kibana/helpers.js.map +0 -1
  829. package/lib/esm/kibana/index.js.map +0 -1
  830. package/lib/esm/kibana/services/KibanaAuthService.js.map +0 -1
  831. package/lib/esm/kibana/services/KibanaDashboardService.js.map +0 -1
  832. package/lib/esm/kibana/services/KibanaDataViewService.js.map +0 -1
  833. package/lib/esm/kibana/services/KibanaRoleService.js.map +0 -1
  834. package/lib/esm/kibana/services/KibanaService.js.map +0 -1
  835. package/lib/esm/kibana/services/KibanaSpaceService.js.map +0 -1
  836. package/lib/esm/kibana/services/KibanaUserService.js.map +0 -1
  837. package/lib/esm/kibana/services/index.js.map +0 -1
  838. package/lib/esm/kibana/services/runtime.js.map +0 -1
  839. package/lib/esm/kibana/types.js.map +0 -1
  840. package/lib/esm/nest/authService.js.map +0 -1
  841. package/lib/esm/nest/index.js.map +0 -1
  842. package/lib/esm/nest/keycloakAuthHandler.js.map +0 -1
  843. package/lib/esm/nest/keycloakModule.js.map +0 -1
  844. package/lib/esm/nest/logging.js.map +0 -1
  845. package/lib/esm/nest/types.js.map +0 -1
  846. package/lib/esm/nest/utils.js.map +0 -1
  847. package/lib/esm/secrets/aws/AwsSecretService.js.map +0 -1
  848. package/lib/esm/secrets/aws/AwsSecretServiceConfig.js.map +0 -1
  849. package/lib/esm/secrets/aws/index.js.map +0 -1
  850. package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js.map +0 -1
  851. package/lib/esm/secrets/azure/AzureKeyVaultSecretServiceConfig.js.map +0 -1
  852. package/lib/esm/secrets/azure/index.js.map +0 -1
  853. package/lib/esm/secrets/core/SecretErrors.js.map +0 -1
  854. package/lib/esm/secrets/core/SecretName.js.map +0 -1
  855. package/lib/esm/secrets/core/SecretReference.js.map +0 -1
  856. package/lib/esm/secrets/core/SecretSerialization.js.map +0 -1
  857. package/lib/esm/secrets/core/SecretService.js.map +0 -1
  858. package/lib/esm/secrets/core/SecretTypes.js.map +0 -1
  859. package/lib/esm/secrets/core/index.js.map +0 -1
  860. package/lib/esm/secrets/gcp/GcpSecretManagerService.js.map +0 -1
  861. package/lib/esm/secrets/gcp/GcpSecretManagerServiceConfig.js.map +0 -1
  862. package/lib/esm/secrets/gcp/index.js.map +0 -1
  863. package/lib/esm/secrets/index.js.map +0 -1
  864. package/lib/esm/secrets/model/ModelSecretCrypto.js.map +0 -1
  865. package/lib/esm/secrets/model/ModelSecretService.js.map +0 -1
  866. package/lib/esm/secrets/model/ModelSecretServiceConfig.js.map +0 -1
  867. package/lib/esm/secrets/model/Secret.js.map +0 -1
  868. package/lib/esm/secrets/model/index.js.map +0 -1
  869. package/lib/esm/secrets/onepassword/OnePasswordSecretService.js.map +0 -1
  870. package/lib/esm/secrets/onepassword/OnePasswordSecretServiceConfig.js.map +0 -1
  871. package/lib/esm/secrets/onepassword/index.js.map +0 -1
  872. package/lib/esm/secrets/vault/VaultSecretService.js.map +0 -1
  873. package/lib/esm/secrets/vault/VaultSecretServiceConfig.js.map +0 -1
  874. package/lib/esm/secrets/vault/index.js.map +0 -1
  875. package/lib/esm/shared/runtime.js.map +0 -1
  876. package/lib/esm/utils.js.map +0 -1
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transactional = exports.AuthorizationError = exports.BaseModelService = exports.REL_CASCADE_INSERT_UPDATE = exports.REL_CASCADE_DEPENDENT = exports.REL_NULLIFY = exports.REL_RESTRICT = void 0;
4
+ exports.buildArangoContext = buildArangoContext;
5
+ exports.buildQdrantFilter = buildQdrantFilter;
6
+ exports.nowIso = nowIso;
7
+ exports.asArray = asArray;
8
+ exports.sameTenant = sameTenant;
9
+ exports.relationMatch = relationMatch;
10
+ exports.lowerSlug = lowerSlug;
11
+ exports.isTimeValid = isTimeValid;
12
+ exports.buildAccessContext = buildAccessContext;
13
+ exports.id = id;
14
+ exports.relationId = relationId;
15
+ const core_1 = require("@decaf-ts/core");
16
+ const types_js_1 = require("./types.cjs");
17
+ exports.REL_RESTRICT = {
18
+ update: core_1.Cascade.NONE,
19
+ delete: core_1.Cascade.NONE,
20
+ nullable: false,
21
+ };
22
+ exports.REL_NULLIFY = {
23
+ update: core_1.Cascade.NONE,
24
+ delete: core_1.Cascade.NONE,
25
+ nullable: true,
26
+ };
27
+ exports.REL_CASCADE_DEPENDENT = {
28
+ update: core_1.Cascade.CASCADE,
29
+ delete: core_1.Cascade.CASCADE,
30
+ nullable: false,
31
+ };
32
+ exports.REL_CASCADE_INSERT_UPDATE = {
33
+ update: core_1.Cascade.CASCADE,
34
+ delete: core_1.Cascade.NONE,
35
+ nullable: false,
36
+ };
37
+ function buildArangoContext(options) {
38
+ return {
39
+ tenantId: options.tenantId,
40
+ principalId: options.principalId,
41
+ permissionKey: options.permissionKey,
42
+ allowedOrgUnitIds: [...options.allowedOrgUnitIds],
43
+ allowedResourceIds: [...options.allowedResourceIds],
44
+ };
45
+ }
46
+ function buildQdrantFilter(options) {
47
+ return {
48
+ must: [
49
+ {
50
+ key: "tenant_id",
51
+ match: { value: options.tenantId },
52
+ },
53
+ {
54
+ should: [
55
+ { key: "org_unit_id", match: { any: options.allowedOrgUnitIds } },
56
+ { key: "protected_resource_id", match: { any: options.allowedResourceIds } },
57
+ { key: "owner_principal_id", match: { value: options.principalId } },
58
+ ],
59
+ },
60
+ ],
61
+ };
62
+ }
63
+ function scopeKey(scopeKind, scopeId) {
64
+ return `${scopeKind}:${scopeId}`;
65
+ }
66
+ function nowIso() {
67
+ return new Date();
68
+ }
69
+ function asArray(value) {
70
+ return value ?? [];
71
+ }
72
+ function sameTenant(rowTenant, tenantId) {
73
+ return relationId(rowTenant) === tenantId;
74
+ }
75
+ function relationMatch(value, target) {
76
+ return target ? relationId(value) === target : false;
77
+ }
78
+ function lowerSlug(value) {
79
+ return (value
80
+ .trim()
81
+ .toLowerCase()
82
+ .replace(/[^a-z0-9]+/g, "-")
83
+ .replace(/^-+|-+$/g, "") || "item");
84
+ }
85
+ function isTimeValid(at, startsAt, expiresAt) {
86
+ const instant = at ?? new Date();
87
+ if (startsAt && instant < startsAt)
88
+ return false;
89
+ if (expiresAt && instant > expiresAt)
90
+ return false;
91
+ return true;
92
+ }
93
+ function buildAccessContext(options) {
94
+ const permissionsByScope = {};
95
+ const allowedOrgUnitIdsByPermission = {};
96
+ for (const permission of options.permissions) {
97
+ const key = scopeKey(permission.scopeKind, permission.scopeId);
98
+ permissionsByScope[key] = permissionsByScope[key] ?? [];
99
+ permissionsByScope[key].push(permission.permissionKey);
100
+ if (permission.scopeKind === types_js_1.ScopeKind.OrgUnit) {
101
+ allowedOrgUnitIdsByPermission[permission.permissionKey] =
102
+ allowedOrgUnitIdsByPermission[permission.permissionKey] ?? [];
103
+ allowedOrgUnitIdsByPermission[permission.permissionKey].push(permission.scopeId);
104
+ }
105
+ }
106
+ return {
107
+ tenantId: options.tenantId,
108
+ principalId: options.principalId,
109
+ permissionsByScope,
110
+ allowedOrgUnitIdsByPermission,
111
+ resourceGrants: options.grants.map((grant) => ({
112
+ resourceId: grant.resourceId,
113
+ permissionKey: grant.permissionKey,
114
+ })),
115
+ };
116
+ }
117
+ class BaseModelService extends core_1.ModelService {
118
+ constructor(clazz) {
119
+ super(clazz);
120
+ }
121
+ newModel(clazz, data) {
122
+ return Object.assign(new clazz(), data);
123
+ }
124
+ async create(data, ...args) {
125
+ return this.repo.create(Object.assign({}, data), ...args);
126
+ }
127
+ async createOne(data, ...args) {
128
+ return this.create(data, ...args);
129
+ }
130
+ async getById(id, ...args) {
131
+ return this.repo.read(id, ...args);
132
+ }
133
+ async updateOne(id, patch, ...args) {
134
+ const existing = await this.repo.read(id, ...args);
135
+ return this.repo.update(Object.assign(existing, patch), ...args);
136
+ }
137
+ async deleteById(id, ...args) {
138
+ await this.repo.delete(id, ...args);
139
+ }
140
+ async findOneBy(key, value, ...args) {
141
+ return this.repo.findOneBy(key, value, ...args);
142
+ }
143
+ async findManyBy(key, value, ...args) {
144
+ return this.repo.select().where({ [key]: value }).execute(...args);
145
+ }
146
+ async listAll(...args) {
147
+ return this.repo.select().execute(...args);
148
+ }
149
+ }
150
+ exports.BaseModelService = BaseModelService;
151
+ function id() {
152
+ return crypto.randomUUID();
153
+ }
154
+ function relationId(value) {
155
+ return typeof value === "string" ? value : value.id;
156
+ }
157
+ var core_2 = require("@decaf-ts/core");
158
+ Object.defineProperty(exports, "AuthorizationError", { enumerable: true, get: function () { return core_2.AuthorizationError; } });
159
+ Object.defineProperty(exports, "transactional", { enumerable: true, get: function () { return core_2.transactional; } });
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmFtZXNwYWNlcy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXNCLE9BQU8sRUFBRSxZQUFZLEVBQWMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBT0wsU0FBUyxHQUNWLG1CQUFnQjtBQUVqQixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7SUFDMUIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0lBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSTtJQUNwQixRQUFRLEVBQUUsS0FBSztDQUNQLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUc7SUFDekIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0lBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSTtJQUNwQixRQUFRLEVBQUUsSUFBSTtDQUNOLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRztJQUNuQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU87SUFDdkIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPO0lBQ3ZCLFFBQVEsRUFBRSxLQUFLO0NBQ1AsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHO0lBQ3ZDLE1BQU0sRUFBRSxPQUFPLENBQUMsT0FBTztJQUN2QixNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUk7SUFDcEIsUUFBUSxFQUFFLEtBQUs7Q0FDUCxDQUFDO0FBRVgsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BTWxDO0lBQ0MsT0FBTztRQUNMLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7UUFDaEMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhO1FBQ3BDLGlCQUFpQixFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDakQsa0JBQWtCLEVB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QUksQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBVztRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLEVBQUU7SUFDaEIsT0FBTyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDN0IsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBOEI7SUFDdkQsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUN0RCxDQUFDO0FBRUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aG9yaXphdGlvbkVycm9yLCBDYXNjYWRlLCBNb2RlbFNlcnZpY2UsIFJlcG9zaXRvcnkgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHtcbiAgQWNjZXNzQ29udGV4dCxcbiAgQXJhbmdvQXV0aENvbnRleHQsXG4gIEVmZmVjdGl2ZVBlcm1pc3Npb25TbmFwc2hvdCxcbiAgR3JhbnRTbmFwc2hvdCxcbiAgUWRyYW50QXV0aEZpbHRlcixcbiAgUmVzb3VyY2VWaXNpYmlsaXR5LFxuICBTY29wZUtpbmQsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBjb25zdCBSRUxfUkVTVFJJQ1QgPSB7XG4gIHVwZGF0ZTogQ2FzY2FkZS5OT05FLFxuICBkZWxldGU6IENhc2NhZGUuTk9ORSxcbiAgbnVsbGFibGU6IGZhbHNlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFJFTF9OVUxMSUZZID0ge1xuICB1cGRhdGU6IENhc2NhZGUuTk9ORSxcbiAgZGVsZXRlOiBDYXNjYWRlLk5PTkUsXG4gIG51bGxhYmxlOiB0cnVlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFJFTF9DQVNDQURFX0RFUEVOREVOVCA9IHtcbiAgdXBkYXRlOiBDYXNjYWRlLkNBU0NBREUsXG4gIGRlbGV0ZTogQ2FzY2FkZS5DQVNDQURFLFxuICBudWxsYWJsZTogZmFsc2UsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgUkVMX0NBU0NBREVfSU5TRVJUX1VQREFURSA9IHtcbiAgdXBkYXRlOiBDYXNjYWRlLkNBU0NBREUsXG4gIGRlbGV0ZTogQ2FzY2FkZS5OT05FLFxuICBudWxsYWJsZTogZmFsc2UsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBcmFuZ29Db250ZXh0KG9wdGlvbnM6IHtcbiAgdGVuYW50SWQ6IHN0cmluZztcbiAgcHJpbmNpcGFsSWQ6IHN0cmluZztcbiAgcGVybWlzc2lvbktleTogc3RyaW5nO1xuICBhbGxvd2VkT3JnVW5pdElkczogc3RyaW5nW107XG4gIGFsbG93ZWRSZXNvdXJjZUlkczogc3RyaW5nW107XG59KTogQXJhbmdvQXV0aENvbnRleHQge1xuICByZXR1cm4ge1xuICAgIHRlbmFudElkOiBvcHRpb25zLnRlbmFudElkLFxuICAgIHByaW5jaXBhbElkOiBvcHRpb25zLnByaW5jaXBhbElkLFxuICAgIHBlcm1pc3Npb25LZXk6IG9wdGlvbnMucGVybWlzc2lvbktleSxcbiAgICBhbGxvd2VkT3JnVW5pdElkczogWy4uLm9wdGlvbnMuYWxsb3dlZE9yZ1VuaXRJZHNdLFxuICAgIGFsbG93ZWRSZXNvdXJjZUlkczogWy4uLm9wdGlvbnMuYWxsb3dlZFJlc291cmNlSWRzXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUWRyYW50RmlsdGVyKG9wdGlvbnM6IHtcbiAgdGVuYW50SWQ6IHN0cmluZztcbiAgcHJpbmNpcGFsSWQ6IHN0cmluZztcbiAgcGVybWlzc2lvbktleTogc3RyaW5nO1xuICBhbGxvd2VkT3JnVW5pdElkczogc3RyaW5nW107XG4gIGFsbG93ZWRSZXNvdXJjZUlkczogc3RyaW5nW107XG59KTogUWRyYW50QXV0aEZpbHRlciB7XG4gIHJldHVybiB7XG4gICAgbXVzdDogW1xuICAgICAge1xuICAgICAgICBrZXk6IFwidGVuYW50X2lkXCIsXG4gICAgICAgIG1hdGNoOiB7IHZhbHVlOiBvcHRpb25zLnRlbmFudElkIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzaG91bGQ6IFtcbiAgICAgICAgICB7IGtleTogXCJvcmdfdW5pdF9pZFwiLCBtYXRjaDogeyBhbnk6IG9wdGlvbnMuYWxsb3dlZE9yZ1VuaXRJZHMgfSB9LFxuICAgICAgICAgIHsga2V5OiBcInByb3RlY3RlZF9yZXNvdXJjZV9pZFwiLCBtYXRjaDogeyBhbnk6IG9wdGlvbnMuYWxsb3dlZFJlc291cmNlSWRzIH0gfSxcbiAgICAgICAgICB7IGtleTogXCJvd25lcl9wcmluY2lwYWxfaWRcIiwgbWF0Y2g6IHsgdmFsdWU6IG9wdGlvbnMucHJpbmNpcGFsSWQgfSB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzY29wZUtleShzY29wZUtpbmQ6IFNjb3BlS2luZCwgc2NvcGVJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3Njb3BlS2luZH06JHtzY29wZUlkfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3dJc28oKTogRGF0ZSB7XG4gIHJldHVybiBuZXcgRGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNBcnJheTxUPih2YWx1ZTogVFtdIHwgdW5kZWZpbmVkKTogVFtdIHtcbiAgcmV0dXJuIHZhbHVlID8/IFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FtZVRlbmFudChyb3dUZW5hbnQ6IHVua25vd24sIHRlbmFudElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJlbGF0aW9uSWQocm93VGVuYW50IGFzIHsgaWQ6IHN0cmluZyB9IHwgc3RyaW5nKSA9PT0gdGVuYW50SWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGlvbk1hdGNoKHZhbHVlOiB1bmtub3duLCB0YXJnZXQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGFyZ2V0ID8gcmVsYXRpb25JZCh2YWx1ZSBhcyB7IGlkOiBzdHJpbmcgfSB8IHN0cmluZykgPT09IHRhcmdldCA6IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG93ZXJTbHVnKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gKFxuICAgIHZhbHVlXG4gICAgICAudHJpbSgpXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgXCItXCIpXG4gICAgICAucmVwbGFjZSgvXi0rfC0rJC9nLCBcIlwiKSB8fCBcIml0ZW1cIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUaW1lVmFsaWQoYXQ6IERhdGUgfCB1bmRlZmluZWQsIHN0YXJ0c0F0PzogRGF0ZSwgZXhwaXJlc0F0PzogRGF0ZSk6IGJvb2xlYW4ge1xuICBjb25zdCBpbnN0YW50ID0gYXQgPz8gbmV3IERhdGUoKTtcbiAgaWYgKHN0YXJ0c0F0ICYmIGluc3RhbnQgPCBzdGFydHNBdCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoZXhwaXJlc0F0ICYmIGluc3RhbnQgPiBleHBpcmVzQXQpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFjY2Vzc0NvbnRleHQob3B0aW9uczoge1xuICB0ZW5hbnRJZDogc3RyaW5nO1xuICBwcmluY2lwYWxJZDogc3RyaW5nO1xuICBwZXJtaXNzaW9uczogRWZmZWN0aXZlUGVybWlzc2lvblNuYXBzaG90W107XG4gIGdyYW50czogR3JhbnRTbmFwc2hvdFtdO1xufSk6IEFjY2Vzc0NvbnRleHQge1xuICBjb25zdCBwZXJtaXNzaW9uc0J5U2NvcGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICBjb25zdCBhbGxvd2VkT3JnVW5pdElkc0J5UGVybWlzc2lvbjogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cbiAgZm9yIChjb25zdCBwZXJtaXNzaW9uIG9mIG9wdGlvbnMucGVybWlzc2lvbnMpIHtcbiAgICBjb25zdCBrZXkgPSBzY29wZUtleShwZXJtaXNzaW9uLnNjb3BlS2luZCwgcGVybWlzc2lvbi5zY29wZUlkKTtcbiAgICBwZXJtaXNzaW9uc0J5U2NvcGVba2V5XSA9IHBlcm1pc3Npb25zQnlTY29wZVtrZXldID8/IFtdO1xuICAgIHBlcm1pc3Npb25zQnlTY29wZVtrZXldLnB1c2gocGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5KTtcbiAgICBpZiAocGVybWlzc2lvbi5zY29wZUtpbmQgPT09IFNjb3BlS2luZC5PcmdVbml0KSB7XG4gICAgICBhbGxvd2VkT3JnVW5pdElkc0J5UGVybWlzc2lvbltwZXJtaXNzaW9uLnBlcm1pc3Npb25LZXldID1cbiAgICAgICAgYWxsb3dlZE9yZ1VuaXRJZHNCeVBlcm1pc3Npb25bcGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5XSA/PyBbXTtcbiAgICAgIGFsbG93ZWRPcmdVbml0SWRzQnlQZXJtaXNzaW9uW3Blcm1pc3Npb24ucGVybWlzc2lvbktleV0ucHVzaChwZXJtaXNzaW9uLnNjb3BlSWQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGVuYW50SWQ6IG9wdGlvbnMudGVuYW50SWQsXG4gICAgcHJpbmNpcGFsSWQ6IG9wdGlvbnMucHJpbmNpcGFsSWQsXG4gICAgcGVybWlzc2lvbnNCeVNjb3BlLFxuICAgIGFsbG93ZWRPcmdVbml0SWRzQnlQZXJtaXNzaW9uLFxuICAgICAgcmVzb3VyY2VHcmFudHM6IG9wdGlvbnMuZ3JhbnRzLm1hcCgoZ3JhbnQpID0+ICh7XG4gICAgICAgIHJlc291cmNlSWQ6IGdyYW50LnJlc291cmNlSWQsXG4gICAgICAgIHBlcm1pc3Npb25LZXk6IGdyYW50LnBlcm1pc3Npb25LZXksXG4gICAgICB9KSksXG4gIH07XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlTW9kZWxTZXJ2aWNlPE0gZXh0ZW5kcyBNb2RlbDxib29sZWFuPiAmIHsgaWQ6IHN0cmluZyB9PiBleHRlbmRzIE1vZGVsU2VydmljZTxcbiAgTSxcbiAgUmVwb3NpdG9yeTxNLCBhbnk+XG4+IHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGNsYXp6OiBuZXcgKCkgPT4gTSkge1xuICAgIHN1cGVyKGNsYXp6KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBuZXdNb2RlbDxUPihjbGF6ejogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgY2xhenooKSBhcyBvYmplY3QsIGRhdGEgYXMgb2JqZWN0KSBhcyBUO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKGRhdGE6IFBhcnRpYWw8TT4sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNPiB7XG4gICAgcmV0dXJuIHRoaXMucmVwby5jcmVhdGUoT2JqZWN0LmFzc2lnbih7fSBhcyBNLCBkYXRhIGFzIG9iamVjdCksIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT25lKGRhdGE6IFBhcnRpYWw8TT4sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlKGRhdGEsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgZ2V0QnlJZChpZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TT4ge1xuICAgIHJldHVybiB0aGlzLnJlcG8ucmVhZChpZCwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVPbmUoaWQ6IHN0cmluZywgcGF0Y2g6IFBhcnRpYWw8TT4sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNPiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLnJlcG8ucmVhZChpZCwgLi4uYXJncyk7XG4gICAgcmV0dXJuIHRoaXMucmVwby51cGRhdGUoT2JqZWN0LmFzc2lnbihleGlzdGluZywgcGF0Y2gpLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUJ5SWQoaWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnJlcG8uZGVsZXRlKGlkLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmRPbmVCeTxLIGV4dGVuZHMga2V5b2YgTSAmIHN0cmluZz4oa2V5OiBLLCB2YWx1ZTogTVtLXSwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE0+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLmZpbmRPbmVCeShrZXksIHZhbHVlLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmRNYW55Qnk8SyBleHRlbmRzIGtleW9mIE0gJiBzdHJpbmc+KGtleTogSywgdmFsdWU6IE1bS10sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLnNlbGVjdCgpLndoZXJlKHsgW2tleV06IHZhbHVlIH0gYXMgYW55KS5leGVjdXRlKC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgbGlzdEFsbCguLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TVtdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVwby5zZWxlY3QoKS5leGVjdXRlKC4uLmFyZ3MpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZCgpOiBzdHJpbmcge1xuICByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbGF0aW9uSWQodmFsdWU6IHN0cmluZyB8IHsgaWQ6IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUuaWQ7XG59XG5cbmV4cG9ydCB7IEF1dGhvcml6YXRpb25FcnJvciwgdHJhbnNhY3Rpb25hbCB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuIl19
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzQkEsZ0RBUUM7QUFDRCw4Q0FnQkM7QUFJRCx3QkFFQztBQUNELDBCQUVDO0FBQ0QsZ0NBRUM7QUFDRCxzQ0FFQztBQUNELDhCQU1DO0FBQ0Qsa0NBT0M7QUFDRCxnREF1QkM7QUFrQ0QsZ0JBRUM7QUFDRCxnQ0FFQztBQTVJRCx5Q0FBdUQ7QUFDdkQseUNBQXdDO0FBQzNCLFFBQUEsWUFBWSxHQUFHO0lBQ3hCLE1BQU0sRUFBRSxjQUFPLENBQUMsSUFBSTtJQUNwQixNQUFNLEVBQUUsY0FBTyxDQUFDLElBQUk7SUFDcEIsUUFBUSxFQUFFLEtBQUs7Q0FDbEIsQ0FBQztBQUNXLFFBQUEsV0FBVyxHQUFHO0lBQ3ZCLE1BQU0sRUFBRSxjQUFPLENBQUMsSUFBSTtJQUNwQixNQUFNLEVBQUUsY0FBTyxDQUFDLElBQUk7SUFDcEIsUUFBUSxFQUFFLElBQUk7Q0FDakIsQ0FBQztBQUNXLFFBQUEscUJBQXFCLEdBQUc7SUFDakMsTUFBTSxFQUFFLGNBQU8sQ0FBQyxPQUFPO0lBQ3ZCLE1BQU0sRUFBRSxjQUFPLENBQUMsT0FBTztJQUN2QixRQUFRLEVBQUUsS0FBSztDQUNsQixDQUFDO0FBQ1csUUFBQSx5QkFBeUIsR0FBRztJQUNyQyxNQUFNLEVBQUUsY0FBTyxDQUFDLE9BQU87SUFDdkIsTUFBTSxFQUFFLGNBQU8sQ0FBQyxJQUFJO0lBQ3BCLFFBQVEsRUFBRSxLQUFLO0NBQ2xCLENBQUM7QUFDRixTQUFnQixrQkFBa0IsQ0FBQyxPQUFPO0lBQ3RDLE9BQU87UUFDSCxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYTtRQUNwQyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQ2pELGtCQUFr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QUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUk7UUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSTtRQUN4QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDRCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDRCxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0NBQ0o7QUFoQ0QsNENBZ0NDO0FBQ0QsU0FBZ0IsRUFBRTtJQUNkLE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9CLENBQUM7QUFDRCxTQUFnQixVQUFVLENBQUMsS0FBSztJQUM1QixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3hELENBQUM7QUFDRCx1Q0FBbUU7QUFBMUQsMEdBQUEsa0JBQWtCLE9BQUE7QUFBRSxxR0FBQSxhQUFhLE9BQUE7QUFDMUMsc3NjQUFzc2MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYXNjYWRlLCBNb2RlbFNlcnZpY2UgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IFNjb3BlS2luZCwgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuZXhwb3J0IGNvbnN0IFJFTF9SRVNUUklDVCA9IHtcbiAgICB1cGRhdGU6IENhc2NhZGUuTk9ORSxcbiAgICBkZWxldGU6IENhc2NhZGUuTk9ORSxcbiAgICBudWxsYWJsZTogZmFsc2UsXG59O1xuZXhwb3J0IGNvbnN0IFJFTF9OVUxMSUZZID0ge1xuICAgIHVwZGF0ZTogQ2FzY2FkZS5OT05FLFxuICAgIGRlbGV0ZTogQ2FzY2FkZS5OT05FLFxuICAgIG51bGxhYmxlOiB0cnVlLFxufTtcbmV4cG9ydCBjb25zdCBSRUxfQ0FTQ0FERV9ERVBFTkRFTlQgPSB7XG4gICAgdXBkYXRlOiBDYXNjYWRlLkNBU0NBREUsXG4gICAgZGVsZXRlOiBDYXNjYWRlLkNBU0NBREUsXG4gICAgbnVsbGFibGU6IGZhbHNlLFxufTtcbmV4cG9ydCBjb25zdCBSRUxfQ0FTQ0FERV9JTlNFUlRfVVBEQVRFID0ge1xuICAgIHVwZGF0ZTogQ2FzY2FkZS5DQVNDQURFLFxuICAgIGRlbGV0ZTogQ2FzY2FkZS5OT05FLFxuICAgIG51bGxhYmxlOiBmYWxzZSxcbn07XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBcmFuZ29Db250ZXh0KG9wdGlvbnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0ZW5hbnRJZDogb3B0aW9ucy50ZW5hbnRJZCxcbiAgICAgICAgcHJpbmNpcGFsSWQ6IG9wdGlvbnMucHJpbmNpcGFsSWQsXG4gICAgICAgIHBlcm1pc3Npb25LZXk6IG9wdGlvbnMucGVybWlzc2lvbktleSxcbiAgICAgICAgYWxsb3dlZE9yZ1VuaXRJZHM6IFsuLi5vcHRpb25zLmFsbG93ZWRPcmdVbml0SWRzXSxcbiAgICAgICAgYWxsb3dlZFJlc291cmNlSWRzOiBbLi4ub3B0aW9ucy5hbGxvd2VkUmVzb3VyY2VJZHNdLFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRRZHJhbnRGaWx0ZXIob3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICAgIG11c3Q6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwidGVuYW50X2lkXCIsXG4gICAgICAgICAgICAgICAgbWF0Y2g6IHsgdmFsdWU6IG9wdGlvbnMudGVuYW50SWQgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2hvdWxkOiBbXG4gICAgICAgICAgICAgICAgICAgIHsga2V5OiBcIm9yZ191bml0X2lkXCIsIG1hdGNoOiB7IGFueTogb3B0aW9ucy5hbGxvd2VkT3JnVW5pdElkcyB9IH0sXG4gICAgICAgICAgICAgICAgICAgIHsga2V5OiBcInByb3RlY3RlZF9yZXNvdXJjZV9pZFwiLCBtYXRjaDogeyBhbnk6IG9wdGlvbnMuYWxsb3dlZFJlc291cmNlSWRzIH0gfSxcbiAgICAgICAgICAgICAgICAgICAgeyBrZXk6IFwib3duZXJfcHJpbmNpcGFsX2lkXCIsIG1hdGNoOiB7IHZhbHVlOiBvcHRpb25zLnByaW5jaXBhbElkIH0gfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICB9O1xufVxuZnVuY3Rpb24gc2NvcGVLZXkoc2NvcGVLaW5kLCBzY29wZUlkKSB7XG4gICAgcmV0dXJuIGAke3Njb3BlS2luZH06JHtzY29wZUlkfWA7XG59XG5leHBvcnQgZnVuY3Rpb24gbm93SXNvKCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFzQXJyYXkodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPz8gW107XG59XG5leHBvcnQgZnVuY3Rpb24gc2FtZVRlbmFudChyb3dUZW5hbnQsIHRlbmFudElkKSB7XG4gICAgcmV0dXJuIHJlbGF0aW9uSWQocm93VGVuYW50KSA9PT0gdGVuYW50SWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVsYXRpb25NYXRjaCh2YWx1ZSwgdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRhcmdldCA/IHJlbGF0aW9uSWQodmFsdWUpID09PSB0YXJnZXQgOiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsb3dlclNsdWcodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlXG4gICAgICAgIC50cmltKClcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgXCItXCIpXG4gICAgICAgIC5yZXBsYWNlKC9eLSt8LSskL2csIFwiXCIpIHx8IFwiaXRlbVwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1RpbWVWYWxpZChhdCwgc3RhcnRzQXQsIGV4cGlyZXNBdCkge1xuICAgIGNvbnN0IGluc3RhbnQgPSBhdCA/PyBuZXcgRGF0ZSgpO1xuICAgIGlmIChzdGFydHNBdCAmJiBpbnN0YW50IDwgc3RhcnRzQXQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZXhwaXJlc0F0ICYmIGluc3RhbnQgPiBleHBpcmVzQXQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFjY2Vzc0NvbnRleHQob3B0aW9ucykge1xuICAgIGNvbnN0IHBlcm1pc3Npb25zQnlTY29wZSA9IHt9O1xuICAgIGNvbnN0IGFsbG93ZWRPcmdVbml0SWRzQnlQZXJtaXNzaW9uID0ge307XG4gICAgZm9yIChjb25zdCBwZXJtaXNzaW9uIG9mIG9wdGlvbnMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gc2NvcGVLZXkocGVybWlzc2lvbi5zY29wZUtpbmQsIHBlcm1pc3Npb24uc2NvcGVJZCk7XG4gICAgICAgIHBlcm1pc3Npb25zQnlTY29wZVtrZXldID0gcGVybWlzc2lvbnNCeVNjb3BlW2tleV0gPz8gW107XG4gICAgICAgIHBlcm1pc3Npb25zQnlTY29wZVtrZXldLnB1c2gocGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5KTtcbiAgICAgICAgaWYgKHBlcm1pc3Npb24uc2NvcGVLaW5kID09PSBTY29wZUtpbmQuT3JnVW5pdCkge1xuICAgICAgICAgICAgYWxsb3dlZE9yZ1VuaXRJZHNCeVBlcm1pc3Npb25bcGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5XSA9XG4gICAgICAgICAgICAgICAgYWxsb3dlZE9yZ1VuaXRJZHNCeVBlcm1pc3Npb25bcGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5XSA/PyBbXTtcbiAgICAgICAgICAgIGFsbG93ZWRPcmdVbml0SWRzQnlQZXJtaXNzaW9uW3Blcm1pc3Npb24ucGVybWlzc2lvbktleV0ucHVzaChwZXJtaXNzaW9uLnNjb3BlSWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHRlbmFudElkOiBvcHRpb25zLnRlbmFudElkLFxuICAgICAgICBwcmluY2lwYWxJZDogb3B0aW9ucy5wcmluY2lwYWxJZCxcbiAgICAgICAgcGVybWlzc2lvbnNCeVNjb3BlLFxuICAgICAgICBhbGxvd2VkT3JnVW5pdElkc0J5UGVybWlzc2lvbixcbiAgICAgICAgcmVzb3VyY2VHcmFudHM6IG9wdGlvbnMuZ3JhbnRzLm1hcCgoZ3JhbnQpID0+ICh7XG4gICAgICAgICAgICByZXNvdXJjZUlkOiBncmFudC5yZXNvdXJjZUlkLFxuICAgICAgICAgICAgcGVybWlzc2lvbktleTogZ3JhbnQucGVybWlzc2lvbktleSxcbiAgICAgICAgfSkpLFxuICAgIH07XG59XG5leHBvcnQgY2xhc3MgQmFzZU1vZGVsU2VydmljZSBleHRlbmRzIE1vZGVsU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoY2xhenopIHtcbiAgICAgICAgc3VwZXIoY2xhenopO1xuICAgIH1cbiAgICBuZXdNb2RlbChjbGF6eiwgZGF0YSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgY2xhenooKSwgZGF0YSk7XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZShkYXRhLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG8uY3JlYXRlKE9iamVjdC5hc3NpZ24oe30sIGRhdGEpLCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgY3JlYXRlT25lKGRhdGEsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKGRhdGEsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBnZXRCeUlkKGlkLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG8ucmVhZChpZCwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIHVwZGF0ZU9uZShpZCwgcGF0Y2gsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLnJlcG8ucmVhZChpZCwgLi4uYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG8udXBkYXRlKE9iamVjdC5hc3NpZ24oZXhpc3RpbmcsIHBhdGNoKSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZUJ5SWQoaWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXBvLmRlbGV0ZShpZCwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIGZpbmRPbmVCeShrZXksIHZhbHVlLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG8uZmluZE9uZUJ5KGtleSwgdmFsdWUsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBmaW5kTWFueUJ5KGtleSwgdmFsdWUsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwby5zZWxlY3QoKS53aGVyZSh7IFtrZXldOiB2YWx1ZSB9KS5leGVjdXRlKC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0QWxsKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwby5zZWxlY3QoKS5leGVjdXRlKC4uLmFyZ3MpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpZCgpIHtcbiAgICByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGlvbklkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUuaWQ7XG59XG5leHBvcnQgeyBBdXRob3JpemF0aW9uRXJyb3IsIHRyYW5zYWN0aW9uYWwgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRYUnBiSE11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk4dUxpOXpjbU12Ym1GdFpYTndZV05sY3k5MWRHbHNjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeFBRVUZQTEVWQlFYTkNMRTlCUVU4c1JVRkJSU3haUVVGWkxFVkJRV01zVFVGQlRTeG5Ra0ZCWjBJc1EwRkJRenRCUVVWMlJpeFBRVUZQTEVWQlQwd3NVMEZCVXl4SFFVTldMRzFDUVVGblFqdEJRVVZxUWl4TlFVRk5MRU5CUVVNc1RVRkJUU3haUVVGWkxFZEJRVWM3U1VGRE1VSXNUVUZCVFN4RlFVRkZMRTlCUVU4c1EwRkJReXhKUVVGSk8wbEJRM0JDTEUxQlFVMHNSVUZCUlN4UFFVRlBMRU5CUVVNc1NVRkJTVHRKUVVOd1FpeFJRVUZSTEVWQlFVVXNTMEZCU3p0RFFVTlFMRU5CUVVNN1FVRkZXQ3hOUVVGTkxFTkJRVU1zVFVGQlRTeFhRVUZYTEVkQlFVYzdTVUZEZWtJc1RVRkJUU3hGUVVGRkxFOUJRVThzUTBGQlF5eEpRVUZKTzBsQlEzQkNMRTFCUVUwc1JVRkJSU3hQUVVGUExFTkJRVU1zU1VGQlNUdEpRVU53UWl4UlFVRlJMRVZCUVVVc1NVRkJTVHREUVVOT0xFTkJRVU03UVVGRldDeE5RVUZOTEVOQlFVTXNUVUZCVFN4eFFrRkJjVUlzUjBGQlJ6dEpRVU51UXl4TlFVRk5MRVZCUVVVc1QwRkJUeXhEUVVGRExFOUJRVTg3U1VGRGRrSXNUVUZCVFN4RlFVRkZMRTlCUVU4c1EwRkJReXhQUVVGUE8wbEJRM1pDTEZGQlFWRXNSVUZCUlN4TFFVRkxPME5CUTFBc1EwRkJRenRCUVVWWUxFMUJRVTBzUTBGQlF5eE5RVUZOTEhsQ1FVRjVRaXhIUVVGSE8wbEJRM1pETEUxQlFVMHNSVUZCUlN4UFFVRlBMRU5CUVVNc1QwRkJUenRKUVVOMlFpeE5RVUZOTEVWQlFVVXNUMEZCVHl4RFFVRkRMRWxCUVVrN1NVRkRjRUlzVVVGQlVTeEZRVUZGTEV0QlFVczdRMEZEVUN4RFFVRkRPMEZCUlZnc1RVRkJUU3hWUVVGVkxHdENRVUZyUWl4RFFVRkRMRTlCVFd4RE8wbEJRME1zVDBGQlR6dFJRVU5NTEZGQlFWRXNSVUZCUlN4UFFVRlBMRU5CUVVNc1VVRkJVVHRSUVVNeFFpeFhRVUZYTEVWQlFVVXNUMEZCVHl4RFFVRkRMRmRCUVZjN1VVRkRhRU1zWVVGQllTeEZRVUZGTEU5QlFVOHNRMEZCUXl4aFFVRmhPMUZCUTNCRExHbENRVUZwUWl4RlFVRkZMRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU1zYVVKQlFXbENMRU5CUVVNN1VVRkRha1FzYTBKQlFXdENMRVZCUVVVc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF5eHJRa0ZCYTBJc1EwRkJRenRMUVVOd1JDeERRVUZETzBGQlEwb3NRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hwUWtGQmFVSXNRMEZCUXl4UFFVMXFRenRKUVVORExFOUJRVTg3VVVGRFRDeEpRVUZKTEVWQlFVVTdXVUZEU2p0blFrRkRSU3hIUVVGSExFVkJRVVVzVjBGQlZ6dG5Ra0ZEYUVJc1MwRkJTeXhGUVVGRkxFVkJRVVVzUzBGQlN5eEZRVUZGTEU5QlFVOHNRMEZCUXl4UlFVRlJMRVZCUVVVN1lVRkRia003V1VGRFJEdG5Ra0ZEUlN4TlFVRk5MRVZCUVVVN2IwSkJRMDRzUlVGQlJTeEhRVUZITEVWQlFVVXNZVUZCWVN4RlFVRkZMRXRCUVVzc1JVRkJSU3hGUVVGRkxFZEJRVWNzUlVGQlJTeFBRVUZQTEVOQlFVTXNhVUpCUVdsQ0xFVkJRVVVzUlVGQlJUdHZRa0ZEYWtVc1JVRkJSU3hIUVVGSExFVkJRVVVzZFVKQlFYVkNMRVZCUVVVc1MwRkJTeXhGUVVGRkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEU5QlFVOHNRMEZCUXl4clFrRkJhMElzUlVGQlJTeEZRVUZGTzI5Q1FVTTFSU3hGUVVGRkxFZEJRVWNzUlVGQlJTeHZRa0ZCYjBJc1JVRkJSU3hMUVVGTExFVkJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNUMEZCVHl4RFFVRkRMRmRCUVZjc1JVRkJSU3hGUVVGRk8ybENRVU55UlR0aFFVTkdPMU5CUTBZN1MwRkRSaXhEUVVGRE8wRkJRMG9zUTBGQlF6dEJRVVZFTEZOQlFWTXNVVUZCVVN4RFFVRkRMRk5CUVc5Q0xFVkJRVVVzVDBGQlpUdEpRVU55UkN4UFFVRlBMRWRCUVVjc1UwRkJVeXhKUVVGSkxFOUJRVThzUlVGQlJTeERRVUZETzBGQlEyNURMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzVFVGQlRUdEpRVU53UWl4UFFVRlBMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03UVVGRGNFSXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hQUVVGUExFTkJRVWtzUzBGQmMwSTdTVUZETDBNc1QwRkJUeXhMUVVGTExFbEJRVWtzUlVGQlJTeERRVUZETzBGQlEzSkNMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzVlVGQlZTeERRVUZETEZOQlFXdENMRVZCUVVVc1VVRkJaMEk3U1VGRE4wUXNUMEZCVHl4VlFVRlZMRU5CUVVNc1UwRkJiME1zUTBGQlF5eExRVUZMTEZGQlFWRXNRMEZCUXp0QlFVTjJSU3hEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEdGQlFXRXNRMEZCUXl4TFFVRmpMRVZCUVVVc1RVRkJNRUk3U1VGRGRFVXNUMEZCVHl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExGVkJRVlVzUTBGQlF5eExRVUZuUXl4RFFVRkRMRXRCUVVzc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTTdRVUZEYkVZc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeFRRVUZUTEVOQlFVTXNTMEZCWVR0SlFVTnlReXhQUVVGUExFTkJRMHdzUzBGQlN6dFRRVU5HTEVsQlFVa3NSVUZCUlR0VFFVTk9MRmRCUVZjc1JVRkJSVHRUUVVOaUxFOUJRVThzUTBGQlF5eGhRVUZoTEVWQlFVVXNSMEZCUnl4RFFVRkRPMU5CUXpOQ0xFOUJRVThzUTBGQlF5eFZRVUZWTEVWQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1RVRkJUU3hEUVVOeVF5eERRVUZETzBGQlEwb3NRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hYUVVGWExFTkJRVU1zUlVGQmIwSXNSVUZCUlN4UlFVRmxMRVZCUVVVc1UwRkJaMEk3U1VGRGFrWXNUVUZCVFN4UFFVRlBMRWRCUVVjc1JVRkJSU3hKUVVGSkxFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTTdTVUZEYWtNc1NVRkJTU3hSUVVGUkxFbEJRVWtzVDBGQlR5eEhRVUZITEZGQlFWRTdVVUZCUlN4UFFVRlBMRXRCUVVzc1EwRkJRenRKUVVOcVJDeEpRVUZKTEZOQlFWTXNTVUZCU1N4UFFVRlBMRWRCUVVjc1UwRkJVenRSUVVGRkxFOUJRVThzUzBGQlN5eERRVUZETzBsQlEyNUVMRTlCUVU4c1NVRkJTU3hEUVVGRE8wRkJRMlFzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4clFrRkJhMElzUTBGQlF5eFBRVXRzUXp0SlFVTkRMRTFCUVUwc2EwSkJRV3RDTEVkQlFUWkNMRVZCUVVVc1EwRkJRenRKUVVONFJDeE5RVUZOTERaQ1FVRTJRaXhIUVVFMlFpeEZRVUZGTEVOQlFVTTdTVUZGYmtVc1MwRkJTeXhOUVVGTkxGVkJRVlVzU1VGQlNTeFBRVUZQTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN1VVRkROME1zVFVGQlRTeEhRVUZITEVkQlFVY3NVVUZCVVN4RFFVRkRMRlZCUVZVc1EwRkJReXhUUVVGVExFVkJRVVVzVlVGQlZTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUXk5RUxHdENRVUZyUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExHdENRVUZyUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVU40UkN4clFrRkJhMElzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETzFGQlEzWkVMRWxCUVVrc1ZVRkJWU3hEUVVGRExGTkJRVk1zUzBGQlN5eFRRVUZUTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1dVRkRMME1zTmtKQlFUWkNMRU5CUVVNc1ZVRkJWU3hEUVVGRExHRkJRV0VzUTBGQlF6dG5Ra0ZEY2tRc05rSkJRVFpDTEVOQlFVTXNWVUZCVlN4RFFVRkRMR0ZCUVdFc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFpRVU5vUlN3MlFrRkJOa0lzUTBGQlF5eFZRVUZWTEVOQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTnVSaXhEUVVGRE8wbEJRMGdzUTBGQlF6dEpRVVZFTEU5QlFVODdVVUZEVEN4UlFVRlJMRVZCUVVVc1QwRkJUeXhEUVVGRExGRkJRVkU3VVVGRE1VSXNWMEZCVnl4RlFVRkZMRTlCUVU4c1EwRkJReXhYUVVGWE8xRkJRMmhETEd0Q1FVRnJRanRSUVVOc1FpdzJRa0ZCTmtJN1VVRkRNMElzWTBGQll5eEZRVUZGTEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMWxCUXpkRExGVkJRVlVzUlVGQlJTeExRVUZMTEVOQlFVTXNWVUZCVlR0WlFVTTFRaXhoUVVGaExFVkJRVVVzUzBGQlN5eERRVUZETEdGQlFXRTdVMEZEYmtNc1EwRkJReXhEUVVGRE8wdEJRMDRzUTBGQlF6dEJRVU5LTEVOQlFVTTdRVUZGUkN4TlFVRk5MRTlCUVdkQ0xHZENRVUUwUkN4VFFVRlJMRmxCUjNwR08wbEJRME1zV1VGQmMwSXNTMEZCYTBJN1VVRkRkRU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMGxCUTJZc1EwRkJRenRKUVVWVExGRkJRVkVzUTBGQlNTeExRVUZyUWl4RlFVRkZMRWxCUVdkQ08xRkJRM2hFTEU5QlFVOHNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFdEJRVXNzUlVGQldTeEZRVUZGTEVsQlFXTXNRMEZCVFN4RFFVRkRPMGxCUTI1RkxFTkJRVU03U1VGRlJDeExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVdkQ0xFVkJRVVVzUjBGQlJ5eEpRVUZYTzFGQlF6TkRMRTlCUVU4c1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGUExFVkJRVVVzU1VGQll5eERRVUZETEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNelJTeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGblFpeEZRVUZGTEVkQlFVY3NTVUZCVnp0UlFVTTVReXhQUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGNFTXNRMEZCUXp0SlFVVkVMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGQlZTeEZRVUZGTEVkQlFVY3NTVUZCVnp0UlFVTjBReXhQUVVGUExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlEzSkRMRU5CUVVNN1NVRkZSQ3hMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEVWQlFWVXNSVUZCUlN4TFFVRnBRaXhGUVVGRkxFZEJRVWNzU1VGQlZ6dFJRVU16UkN4TlFVRk5MRkZCUVZFc1IwRkJSeXhOUVVGTkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlEyNUVMRTlCUVU4c1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhSUVVGUkxFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOdVJTeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMRlZCUVZVc1EwRkJReXhGUVVGVkxFVkJRVVVzUjBGQlJ5eEpRVUZYTzFGQlEzcERMRTFCUVUwc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGRFTXNRMEZCUXp0SlFVVkVMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVFpDTEVkQlFVMHNSVUZCUlN4TFFVRlhMRVZCUVVVc1IwRkJSeXhKUVVGWE8xRkJRemRGTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eEZRVUZGTEV0QlFVc3NSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRMnhFTEVOQlFVTTdTVUZGUkN4TFFVRkxMRU5CUVVNc1ZVRkJWU3hEUVVFMlFpeEhRVUZOTEVWQlFVVXNTMEZCVnl4RlFVRkZMRWRCUVVjc1NVRkJWenRSUVVNNVJTeFBRVUZQTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVk1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRelZGTEVOQlFVTTdTVUZGUkN4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzU1VGQlZ6dFJRVU14UWl4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRE4wTXNRMEZCUXp0RFFVTkdPMEZCUlVRc1RVRkJUU3hWUVVGVkxFVkJRVVU3U1VGRGFFSXNUMEZCVHl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hGUVVGRkxFTkJRVU03UVVGRE4wSXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hWUVVGVkxFTkJRVU1zUzBGQk9FSTdTVUZEZGtRc1QwRkJUeXhQUVVGUExFdEJRVXNzUzBGQlN5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXp0QlFVTjBSQ3hEUVVGRE8wRkJSVVFzVDBGQlR5eEZRVUZGTEd0Q1FVRnJRaXhGUVVGRkxHRkJRV0VzUlVGQlJTeE5RVUZOTEdkQ1FVRm5RaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dRWFYwYUc5eWFYcGhkR2x2YmtWeWNtOXlMQ0JEWVhOallXUmxMQ0JOYjJSbGJGTmxjblpwWTJVc0lGSmxjRzl6YVhSdmNua2dmU0JtY205dElGd2lRR1JsWTJGbUxYUnpMMk52Y21WY0lqdGNibWx0Y0c5eWRDQjdJRTF2WkdWc0lIMGdabkp2YlNCY0lrQmtaV05oWmkxMGN5OWtaV052Y21GMGIzSXRkbUZzYVdSaGRHbHZibHdpTzF4dWFXMXdiM0owSUh0Y2JpQWdRV05qWlhOelEyOXVkR1Y0ZEN4Y2JpQWdRWEpoYm1kdlFYVjBhRU52Ym5SbGVIUXNYRzRnSUVWbVptVmpkR2wyWlZCbGNtMXBjM05wYjI1VGJtRndjMmh2ZEN4Y2JpQWdSM0poYm5SVGJtRndjMmh2ZEN4Y2JpQWdVV1J5WVc1MFFYVjBhRVpwYkhSbGNpeGNiaUFnVW1WemIzVnlZMlZXYVhOcFltbHNhWFI1TEZ4dUlDQlRZMjl3WlV0cGJtUXNYRzU5SUdaeWIyMGdYQ0l1TDNSNWNHVnpYQ0k3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JTUlV4ZlVrVlRWRkpKUTFRZ1BTQjdYRzRnSUhWd1pHRjBaVG9nUTJGelkyRmtaUzVPVDA1RkxGeHVJQ0JrWld4bGRHVTZJRU5oYzJOaFpHVXVUazlPUlN4Y2JpQWdiblZzYkdGaWJHVTZJR1poYkhObExGeHVmU0JoY3lCamIyNXpkRHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJRkpGVEY5T1ZVeE1TVVpaSUQwZ2UxeHVJQ0IxY0dSaGRHVTZJRU5oYzJOaFpHVXVUazlPUlN4Y2JpQWdaR1ZzWlhSbE9pQkRZWE5qWVdSbExrNVBUa1VzWEc0Z0lHNTFiR3hoWW14bE9pQjBjblZsTEZ4dWZTQmhjeUJqYjI1emREdGNibHh1Wlhod2IzSjBJR052Ym5OMElGSkZURjlEUVZORFFVUkZYMFJGVUVWT1JFVk9WQ0E5SUh0Y2JpQWdkWEJrWVhSbE9pQkRZWE5qWVdSbExrTkJVME5CUkVVc1hHNGdJR1JsYkdWMFpUb2dRMkZ6WTJGa1pTNURRVk5EUVVSRkxGeHVJQ0J1ZFd4c1lXSnNaVG9nWm1Gc2MyVXNYRzU5SUdGeklHTnZibk4wTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnVWtWTVgwTkJVME5CUkVWZlNVNVRSVkpVWDFWUVJFRlVSU0E5SUh0Y2JpQWdkWEJrWVhSbE9pQkRZWE5qWVdSbExrTkJVME5CUkVVc1hHNGdJR1JsYkdWMFpUb2dRMkZ6WTJGa1pTNU9UMDVGTEZ4dUlDQnVkV3hzWVdKc1pUb2dabUZzYzJVc1hHNTlJR0Z6SUdOdmJuTjBPMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWW5WcGJHUkJjbUZ1WjI5RGIyNTBaWGgwS0c5d2RHbHZibk02SUh0Y2JpQWdkR1Z1WVc1MFNXUTZJSE4wY21sdVp6dGNiaUFnY0hKcGJtTnBjR0ZzU1dRNklITjBjbWx1Wnp0Y2JpQWdjR1Z5YldsemMybHZia3RsZVRvZ2MzUnlhVzVuTzF4dUlDQmhiR3h2ZDJWa1QzSm5WVzVwZEVsa2N6b2djM1J5YVc1blcxMDdYRzRnSUdGc2JHOTNaV1JTWlhOdmRYSmpaVWxrY3pvZ2MzUnlhVzVuVzEwN1hHNTlLVG9nUVhKaGJtZHZRWFYwYUVOdmJuUmxlSFFnZTF4dUlDQnlaWFIxY200Z2UxeHVJQ0FnSUhSbGJtRnVkRWxrT2lCdmNIUnBiMjV6TG5SbGJtRnVkRWxrTEZ4dUlDQWdJSEJ5YVc1amFYQmhiRWxrT2lCdmNIUnBiMjV6TG5CeWFXNWphWEJoYkVsa0xGeHVJQ0FnSUhCbGNtMXBjM05wYjI1TFpYazZJRzl3ZEdsdmJuTXVjR1Z5YldsemMybHZia3RsZVN4Y2JpQWdJQ0JoYkd4dmQyVmtUM0puVlc1cGRFbGtjem9nV3k0dUxtOXdkR2x2Ym5NdVlXeHNiM2RsWkU5eVoxVnVhWFJKWkhOZExGeHVJQ0FnSUdGc2JHOTNaV1JTWlhOdmRYSmpaVWxrY3pvZ1d5NHVMbTl3ZEdsdmJuTXVZV3hzYjNkbFpGSmxjMjkxY21ObFNXUnpYU3hjYmlBZ2ZUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdKMWFXeGtVV1J5WVc1MFJtbHNkR1Z5S0c5d2RHbHZibk02SUh0Y2JpQWdkR1Z1WVc1MFNXUTZJSE4wY21sdVp6dGNiaUFnY0hKcGJtTnBjR0ZzU1dRNklITjBjbWx1Wnp0Y2JpQWdjR1Z5YldsemMybHZia3RsZVRvZ2MzUnlhVzVuTzF4dUlDQmhiR3h2ZDJWa1QzSm5WVzVwZEVsa2N6b2djM1J5YVc1blcxMDdYRzRnSUdGc2JHOTNaV1JTWlhOdmRYSmpaVWxrY3pvZ2MzUnlhVzVuVzEwN1hHNTlLVG9nVVdSeVlXNTBRWFYwYUVacGJIUmxjaUI3WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnYlhWemREb2dXMXh1SUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0JyWlhrNklGd2lkR1Z1WVc1MFgybGtYQ0lzWEc0Z0lDQWdJQ0FnSUcxaGRHTm9PaUI3SUhaaGJIVmxPaUJ2Y0hScGIyNXpMblJsYm1GdWRFbGtJSDBzWEc0Z0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNCemFHOTFiR1E2SUZ0Y2JpQWdJQ0FnSUNBZ0lDQjdJR3RsZVRvZ1hDSnZjbWRmZFc1cGRGOXBaRndpTENCdFlYUmphRG9nZXlCaGJuazZJRzl3ZEdsdmJuTXVZV3hzYjNkbFpFOXlaMVZ1YVhSSlpITWdmU0I5TEZ4dUlDQWdJQ0FnSUNBZ0lIc2dhMlY1T2lCY0luQnliM1JsWTNSbFpGOXlaWE52ZFhKalpWOXBaRndpTENCdFlYUmphRG9nZXlCaGJuazZJRzl3ZEdsdmJuTXVZV3hzYjNkbFpGSmxjMjkxY21ObFNXUnpJSDBnZlN4Y2JpQWdJQ0FnSUNBZ0lDQjdJR3RsZVRvZ1hDSnZkMjVsY2w5d2NtbHVZMmx3WVd4ZmFXUmNJaXdnYldGMFkyZzZJSHNnZG1Gc2RXVTZJRzl3ZEdsdmJuTXVjSEpwYm1OcGNHRnNTV1FnZlNCOUxGeHVJQ0FnSUNBZ0lDQmRMRnh1SUNBZ0lDQWdmU3hjYmlBZ0lDQmRMRnh1SUNCOU8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCelkyOXdaVXRsZVNoelkyOXdaVXRwYm1RNklGTmpiM0JsUzJsdVpDd2djMk52Y0dWSlpEb2djM1J5YVc1bktUb2djM1J5YVc1bklIdGNiaUFnY21WMGRYSnVJR0FrZTNOamIzQmxTMmx1WkgwNkpIdHpZMjl3WlVsa2ZXQTdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCdWIzZEpjMjhvS1RvZ1JHRjBaU0I3WEc0Z0lISmxkSFZ5YmlCdVpYY2dSR0YwWlNncE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWVhOQmNuSmhlVHhVUGloMllXeDFaVG9nVkZ0ZElId2dkVzVrWldacGJtVmtLVG9nVkZ0ZElIdGNiaUFnY21WMGRYSnVJSFpoYkhWbElEOC9JRnRkTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjMkZ0WlZSbGJtRnVkQ2h5YjNkVVpXNWhiblE2SUhWdWEyNXZkMjRzSUhSbGJtRnVkRWxrT2lCemRISnBibWNwT2lCaWIyOXNaV0Z1SUh0Y2JpQWdjbVYwZFhKdUlISmxiR0YwYVc5dVNXUW9jbTkzVkdWdVlXNTBJR0Z6SUhzZ2FXUTZJSE4wY21sdVp5QjlJSHdnYzNSeWFXNW5LU0E5UFQwZ2RHVnVZVzUwU1dRN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ5Wld4aGRHbHZiazFoZEdOb0tIWmhiSFZsT2lCMWJtdHViM2R1TENCMFlYSm5aWFE2SUhOMGNtbHVaeUI4SUhWdVpHVm1hVzVsWkNrNklHSnZiMnhsWVc0Z2UxeHVJQ0J5WlhSMWNtNGdkR0Z5WjJWMElEOGdjbVZzWVhScGIyNUpaQ2gyWVd4MVpTQmhjeUI3SUdsa09pQnpkSEpwYm1jZ2ZTQjhJSE4wY21sdVp5a2dQVDA5SUhSaGNtZGxkQ0E2SUdaaGJITmxPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2JHOTNaWEpUYkhWbktIWmhiSFZsT2lCemRISnBibWNwT2lCemRISnBibWNnZTF4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUhaaGJIVmxYRzRnSUNBZ0lDQXVkSEpwYlNncFhHNGdJQ0FnSUNBdWRHOU1iM2RsY2tOaGMyVW9LVnh1SUNBZ0lDQWdMbkpsY0d4aFkyVW9MMXRlWVMxNk1DMDVYU3N2Wnl3Z1hDSXRYQ0lwWEc0Z0lDQWdJQ0F1Y21Wd2JHRmpaU2d2WGkwcmZDMHJKQzluTENCY0lsd2lLU0I4ZkNCY0ltbDBaVzFjSWx4dUlDQXBPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2FYTlVhVzFsVm1Gc2FXUW9ZWFE2SUVSaGRHVWdmQ0IxYm1SbFptbHVaV1FzSUhOMFlYSjBjMEYwUHpvZ1JHRjBaU3dnWlhod2FYSmxjMEYwUHpvZ1JHRjBaU2s2SUdKdmIyeGxZVzRnZTF4dUlDQmpiMjV6ZENCcGJuTjBZVzUwSUQwZ1lYUWdQejhnYm1WM0lFUmhkR1VvS1R0Y2JpQWdhV1lnS0hOMFlYSjBjMEYwSUNZbUlHbHVjM1JoYm5RZ1BDQnpkR0Z5ZEhOQmRDa2djbVYwZFhKdUlHWmhiSE5sTzF4dUlDQnBaaUFvWlhod2FYSmxjMEYwSUNZbUlHbHVjM1JoYm5RZ1BpQmxlSEJwY21WelFYUXBJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdjbVYwZFhKdUlIUnlkV1U3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmlkV2xzWkVGalkyVnpjME52Ym5SbGVIUW9iM0IwYVc5dWN6b2dlMXh1SUNCMFpXNWhiblJKWkRvZ2MzUnlhVzVuTzF4dUlDQndjbWx1WTJsd1lXeEpaRG9nYzNSeWFXNW5PMXh1SUNCd1pYSnRhWE56YVc5dWN6b2dSV1ptWldOMGFYWmxVR1Z5YldsemMybHZibE51WVhCemFHOTBXMTA3WEc0Z0lHZHlZVzUwY3pvZ1IzSmhiblJUYm1Gd2MyaHZkRnRkTzF4dWZTazZJRUZqWTJWemMwTnZiblJsZUhRZ2UxeHVJQ0JqYjI1emRDQndaWEp0YVhOemFXOXVjMEo1VTJOdmNHVTZJRkpsWTI5eVpEeHpkSEpwYm1jc0lITjBjbWx1WjF0ZFBpQTlJSHQ5TzF4dUlDQmpiMjV6ZENCaGJHeHZkMlZrVDNKblZXNXBkRWxrYzBKNVVHVnliV2x6YzJsdmJqb2dVbVZqYjNKa1BITjBjbWx1Wnl3Z2MzUnlhVzVuVzEwK0lEMGdlMzA3WEc1Y2JpQWdabTl5SUNoamIyNXpkQ0J3WlhKdGFYTnphVzl1SUc5bUlHOXdkR2x2Ym5NdWNHVnliV2x6YzJsdmJuTXBJSHRjYmlBZ0lDQmpiMjV6ZENCclpYa2dQU0J6WTI5d1pVdGxlU2h3WlhKdGFYTnphVzl1TG5OamIzQmxTMmx1WkN3Z2NHVnliV2x6YzJsdmJpNXpZMjl3WlVsa0tUdGNiaUFnSUNCd1pYSnRhWE56YVc5dWMwSjVVMk52Y0dWYmEyVjVYU0E5SUhCbGNtMXBjM05wYjI1elFubFRZMjl3WlZ0clpYbGRJRDgvSUZ0ZE8xeHVJQ0FnSUhCbGNtMXBjM05wYjI1elFubFRZMjl3WlZ0clpYbGRMbkIxYzJnb2NHVnliV2x6YzJsdmJpNXdaWEp0YVhOemFXOXVTMlY1S1R0Y2JpQWdJQ0JwWmlBb2NHVnliV2x6YzJsdmJpNXpZMjl3WlV0cGJtUWdQVDA5SUZOamIzQmxTMmx1WkM1UGNtZFZibWwwS1NCN1hHNGdJQ0FnSUNCaGJHeHZkMlZrVDNKblZXNXBkRWxrYzBKNVVHVnliV2x6YzJsdmJsdHdaWEp0YVhOemFXOXVMbkJsY20xcGMzTnBiMjVMWlhsZElEMWNiaUFnSUNBZ0lDQWdZV3hzYjNkbFpFOXlaMVZ1YVhSSlpITkNlVkJsY20xcGMzTnBiMjViY0dWeWJXbHpjMmx2Ymk1d1pYSnRhWE56YVc5dVMyVjVYU0EvUHlCYlhUdGNiaUFnSUNBZ0lHRnNiRzkzWldSUGNtZFZibWwwU1dSelFubFFaWEp0YVhOemFXOXVXM0JsY20xcGMzTnBiMjR1Y0dWeWJXbHpjMmx2Ymt0bGVWMHVjSFZ6YUNod1pYSnRhWE56YVc5dUxuTmpiM0JsU1dRcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnZEdWdVlXNTBTV1E2SUc5d2RHbHZibk11ZEdWdVlXNTBTV1FzWEc0Z0lDQWdjSEpwYm1OcGNHRnNTV1E2SUc5d2RHbHZibk11Y0hKcGJtTnBjR0ZzU1dRc1hHNGdJQ0FnY0dWeWJXbHpjMmx2Ym5OQ2VWTmpiM0JsTEZ4dUlDQWdJR0ZzYkc5M1pXUlBjbWRWYm1sMFNXUnpRbmxRWlhKdGFYTnphVzl1TEZ4dUlDQWdJQ0FnY21WemIzVnlZMlZIY21GdWRITTZJRzl3ZEdsdmJuTXVaM0poYm5SekxtMWhjQ2dvWjNKaGJuUXBJRDArSUNoN1hHNGdJQ0FnSUNBZ0lISmxjMjkxY21ObFNXUTZJR2R5WVc1MExuSmxjMjkxY21ObFNXUXNYRzRnSUNBZ0lDQWdJSEJsY20xcGMzTnBiMjVMWlhrNklHZHlZVzUwTG5CbGNtMXBjM05wYjI1TFpYa3NYRzRnSUNBZ0lDQjlLU2tzWEc0Z0lIMDdYRzU5WEc1Y2JtVjRjRzl5ZENCaFluTjBjbUZqZENCamJHRnpjeUJDWVhObFRXOWtaV3hUWlhKMmFXTmxQRTBnWlhoMFpXNWtjeUJOYjJSbGJEeGliMjlzWldGdVBpQW1JSHNnYVdRNklITjBjbWx1WnlCOVBpQmxlSFJsYm1SeklFMXZaR1ZzVTJWeWRtbGpaVHhjYmlBZ1RTeGNiaUFnVW1Wd2IzTnBkRzl5ZVR4TkxDQmhibmsrWEc0K0lIdGNiaUFnY0hKdmRHVmpkR1ZrSUdOdmJuTjBjblZqZEc5eUtHTnNZWHA2T2lCdVpYY2dLQ2tnUFQ0Z1RTa2dlMXh1SUNBZ0lITjFjR1Z5S0dOc1lYcDZLVHRjYmlBZ2ZWeHVYRzRnSUhCeWIzUmxZM1JsWkNCdVpYZE5iMlJsYkR4VVBpaGpiR0Y2ZWpvZ2JtVjNJQ2dwSUQwK0lGUXNJR1JoZEdFNklGQmhjblJwWVd3OFZENHBPaUJVSUh0Y2JpQWdJQ0J5WlhSMWNtNGdUMkpxWldOMExtRnpjMmxuYmlodVpYY2dZMnhoZW5vb0tTQmhjeUJ2WW1wbFkzUXNJR1JoZEdFZ1lYTWdiMkpxWldOMEtTQmhjeUJVTzF4dUlDQjlYRzVjYmlBZ1lYTjVibU1nWTNKbFlYUmxLR1JoZEdFNklGQmhjblJwWVd3OFRUNHNJQzR1TG1GeVozTTZJR0Z1ZVZ0ZEtUb2dVSEp2YldselpUeE5QaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11Y21Wd2J5NWpjbVZoZEdVb1QySnFaV04wTG1GemMybG5iaWg3ZlNCaGN5Qk5MQ0JrWVhSaElHRnpJRzlpYW1WamRDa3NJQzR1TG1GeVozTXBPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdZM0psWVhSbFQyNWxLR1JoZEdFNklGQmhjblJwWVd3OFRUNHNJQzR1TG1GeVozTTZJR0Z1ZVZ0ZEtUb2dVSEp2YldselpUeE5QaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WTNKbFlYUmxLR1JoZEdFc0lDNHVMbUZ5WjNNcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ1oyVjBRbmxKWkNocFpEb2djM1J5YVc1bkxDQXVMaTVoY21kek9pQmhibmxiWFNrNklGQnliMjFwYzJVOFRUNGdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbkpsY0c4dWNtVmhaQ2hwWkN3Z0xpNHVZWEpuY3lrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCMWNHUmhkR1ZQYm1Vb2FXUTZJSE4wY21sdVp5d2djR0YwWTJnNklGQmhjblJwWVd3OFRUNHNJQzR1TG1GeVozTTZJR0Z1ZVZ0ZEtUb2dVSEp2YldselpUeE5QaUI3WEc0Z0lDQWdZMjl1YzNRZ1pYaHBjM1JwYm1jZ1BTQmhkMkZwZENCMGFHbHpMbkpsY0c4dWNtVmhaQ2hwWkN3Z0xpNHVZWEpuY3lrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNtVndieTUxY0dSaGRHVW9UMkpxWldOMExtRnpjMmxuYmlobGVHbHpkR2x1Wnl3Z2NHRjBZMmdwTENBdUxpNWhjbWR6S1R0Y2JpQWdmVnh1WEc0Z0lHRnplVzVqSUdSbGJHVjBaVUo1U1dRb2FXUTZJSE4wY21sdVp5d2dMaTR1WVhKbmN6b2dZVzU1VzEwcE9pQlFjbTl0YVhObFBIWnZhV1ErSUh0Y2JpQWdJQ0JoZDJGcGRDQjBhR2x6TG5KbGNHOHVaR1ZzWlhSbEtHbGtMQ0F1TGk1aGNtZHpLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJR1pwYm1SUGJtVkNlVHhMSUdWNGRHVnVaSE1nYTJWNWIyWWdUU0FtSUhOMGNtbHVaejRvYTJWNU9pQkxMQ0IyWVd4MVpUb2dUVnRMWFN3Z0xpNHVZWEpuY3pvZ1lXNTVXMTBwT2lCUWNtOXRhWE5sUEUwK0lIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXlaWEJ2TG1acGJtUlBibVZDZVNoclpYa3NJSFpoYkhWbExDQXVMaTVoY21kektUdGNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklHWnBibVJOWVc1NVFuazhTeUJsZUhSbGJtUnpJR3RsZVc5bUlFMGdKaUJ6ZEhKcGJtYytLR3RsZVRvZ1N5d2dkbUZzZFdVNklFMWJTMTBzSUM0dUxtRnlaM002SUdGdWVWdGRLVG9nVUhKdmJXbHpaVHhOVzEwK0lIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXlaWEJ2TG5ObGJHVmpkQ2dwTG5kb1pYSmxLSHNnVzJ0bGVWMDZJSFpoYkhWbElIMGdZWE1nWVc1NUtTNWxlR1ZqZFhSbEtDNHVMbUZ5WjNNcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ2JHbHpkRUZzYkNndUxpNWhjbWR6T2lCaGJubGJYU2s2SUZCeWIyMXBjMlU4VFZ0ZFBpQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjbVZ3Ynk1elpXeGxZM1FvS1M1bGVHVmpkWFJsS0M0dUxtRnlaM01wTzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcFpDZ3BPaUJ6ZEhKcGJtY2dlMXh1SUNCeVpYUjFjbTRnWTNKNWNIUnZMbkpoYm1SdmJWVlZTVVFvS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEpsYkdGMGFXOXVTV1FvZG1Gc2RXVTZJSE4wY21sdVp5QjhJSHNnYVdRNklITjBjbWx1WnlCOUtUb2djM1J5YVc1bklIdGNiaUFnY21WMGRYSnVJSFI1Y0dWdlppQjJZV3gxWlNBOVBUMGdYQ0p6ZEhKcGJtZGNJaUEvSUhaaGJIVmxJRG9nZG1Gc2RXVXVhV1E3WEc1OVhHNWNibVY0Y0c5eWRDQjdJRUYxZEdodmNtbDZZWFJwYjI1RmNuSnZjaXdnZEhKaGJuTmhZM1JwYjI1aGJDQjlJR1p5YjIwZ1hDSkFaR1ZqWVdZdGRITXZZMjl5WlZ3aU8xeHVJbDE5Il19
@@ -87,5 +87,5 @@ class AuthService {
87
87
  }
88
88
  }
89
89
  exports.AuthService = AuthService;
90
- //# sourceMappingURL=authService.js.map
91
- //# sourceMappingURL=authService.cjs.map
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmVzdC9hdXRoU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBQ0gsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsT0FBTyxFQUNQLGNBQWMsR0FDZixtQkFBZ0I7QUErQmpCLE1BQU0sT0FBTyxXQUFXO0lBT3RCLFlBQVksVUFBOEIsRUFBRTtRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELDBCQUEwQjtRQUN4QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFXO1FBQ3pCLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxRQUFRLENBQUMsR0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFXO1FBQ2pCLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUEwQztRQUM3RCxPQUFPLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FDaEIsT0FBMEM7UUFFMUMsT0FBTyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FBVztRQUM1QixPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQ3BCLEdBQVc7UUFFWCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxLQUFLLENBQUMsaUJBQWlCLENBQzdCLEdBQVc7UUFFWCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNsRCxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUc7YUFDakQsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxPQUFnRCxDQUFDO1FBQzFELENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RSxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9uZXN0L2F1dGhTZXJ2aWNlXG4gKiBAc3VtbWFyeSBOZXN0LWNvbXBhdGlibGUgYXV0aGVudGljYXRpb24gc2VydmljZSBoZWxwZXJzLlxuICogQGRlc2NyaXB0aW9uIFJlcXVlc3QtY29udGV4dC1hd2FyZSBhdXRoIGhlbHBlcnMgZm9yIE5lc3QgYXBwbGljYXRpb25zIHVzaW5nIERlY2FmIGludGVncmF0aW9uIHBhdHRlcm5zLlxuICpcbiAqIFN1cHBvcnRzIHR3byBtb2RlczpcbiAqIC0gKipWZXJpZnkgbW9kZSoqIChkZWZhdWx0IHdoZW4gYHZlcmlmeVVybGAgaXMgc2V0KTogdmFsaWRhdGVzIHRoZSBKV1Qgc2lnbmF0dXJlXG4gKiAgIGFnYWluc3QgdGhlIEtleWNsb2FrIEpXS1MgZW5kcG9pbnQgdXNpbmcgYGpvc2Uuand0VmVyaWZ5YC5cbiAqIC0gKipEZWNvZGUtb25seSBtb2RlKiogKHdoZW4gYHZlcmlmeVRva2VuYCBpcyBmYWxzZSAvIGB2ZXJpZnlVcmxgIGlzIGVtcHR5KTpcbiAqICAgZGVjb2RlcyB0aGUgSldUIHdpdGhvdXQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiAoZGV2L2xvY2FsIG1vZGUpLlxuICovXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IGNyZWF0ZVJlbW90ZUpXS1NldCwgand0VmVyaWZ5IH0gZnJvbSBcImpvc2VcIjtcbmltcG9ydCB7XG4gIGV4dHJhY3RLZXljbG9ha1JvbGVzLFxuICBnZXRSZWFsbUZyb21Jc3N1ZXIsXG4gIGdldFRva2VuUGF5bG9hZCxcbiAgZ2V0VXNlcixcbiAgZ2V0Q2xpZW50Um9sZXMsXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWNsb2FrQWNjZXNzVG9rZW5QYXlsb2FkLCBLZXljbG9ha1VzZXIgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSB7QGxpbmsgQXV0aFNlcnZpY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhTZXJ2aWNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHZlcmlmeSB0aGUgSldUIHNpZ25hdHVyZSBhZ2FpbnN0IHRoZSBLZXljbG9hayBKV0tTIGVuZHBvaW50LlxuICAgKiBXaGVuIGBmYWxzZWAgKG9yIGB2ZXJpZnlVcmxgIGlzIGVtcHR5KSwgdG9rZW5zIGFyZSBkZWNvZGVkIHdpdGhvdXRcbiAgICogc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiAoZGV2L2xvY2FsIG1vZGUgb25seSkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB2ZXJpZnlUb2tlbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgS2V5Y2xvYWsgSldLUyBVUkwgKGUuZy4gYGh0dHBzOi8va2V5Y2xvYWsvcmVhbG1zL215cmVhbG0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvY2VydHNgKS5cbiAgICogUmVxdWlyZWQgd2hlbiBgdmVyaWZ5VG9rZW5gIGlzIGB0cnVlYC5cbiAgICovXG4gIHZlcmlmeVVybD86IHN0cmluZztcbiAgLyoqXG4gICAqIENsb2NrIHRvbGVyYW5jZSBmb3IgSldUIGV4cGlyeSB2ZXJpZmljYXRpb24gKGluIHNlY29uZHMpLlxuICAgKiBAZGVmYXVsdCA1XG4gICAqL1xuICBjbG9ja1RvbGVyYW5jZVNlY29uZHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBLZXljbG9hayBjbGllbnQgSURzIHRvIGV4Y2x1ZGUgd2hlbiBleHRyYWN0aW5nIHJvbGVzIGZyb20gYHJlc291cmNlX2FjY2Vzc2AuXG4gICAqIEBkZWZhdWx0IFtcImFjY291bnRcIl1cbiAgICovXG4gIGV4Y2x1ZGVkQ2xpZW50cz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHZlcmlmeVRva2VuOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHZlcmlmeVVybDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNsb2NrVG9sZXJhbmNlU2Vjb25kczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4Y2x1ZGVkQ2xpZW50czogc3RyaW5nW107XG4gIHByaXZhdGUgandrczogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlUmVtb3RlSldLU2V0PiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBBdXRoU2VydmljZU9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMudmVyaWZ5VG9rZW4gPSAhIW9wdGlvbnMudmVyaWZ5VG9rZW4gJiYgISFvcHRpb25zLnZlcmlmeVVybDtcbiAgICB0aGlzLnZlcmlmeVVybCA9IG9wdGlvbnMudmVyaWZ5VXJsID8/IFwiXCI7XG4gICAgdGhpcy5jbG9ja1RvbGVyYW5jZVNlY29uZHMgPSBvcHRpb25zLmNsb2NrVG9sZXJhbmNlU2Vjb25kcyA/PyA1O1xuICAgIHRoaXMuZXhjbHVkZWRDbGllbnRzID0gb3B0aW9ucy5leGNsdWRlZENsaWVudHMgPz8gW1wiYWNjb3VudFwiXTtcbiAgfVxuXG4gIGlzVG9rZW5WZXJpZmljYXRpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZlcmlmeVRva2VuO1xuICB9XG5cbiAgZ2V0VG9rZW5QYXlsb2FkKGp3dDogc3RyaW5nKTogS2V5Y2xvYWtBY2Nlc3NUb2tlblBheWxvYWQgfCBudWxsIHtcbiAgICByZXR1cm4gZ2V0VG9rZW5QYXlsb2FkKGp3dCk7XG4gIH1cblxuICBnZXRSb2xlcyhqd3Q6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5leHRyYWN0S2V5Y2xvYWtSb2xlcyh0aGlzLmdldFRva2VuUGF5bG9hZChqd3QpKTtcbiAgfVxuXG4gIGdldFVzZXIoand0OiBzdHJpbmcpOiBLZXljbG9ha1VzZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBnZXRVc2VyKGp3dCk7XG4gIH1cblxuICBleHRyYWN0S2V5Y2xvYWtSb2xlcyhwYXlsb2FkOiBLZXljbG9ha0FjY2Vzc1Rva2VuUGF5bG9hZCB8IG51bGwpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGV4dHJhY3RLZXljbG9ha1JvbGVzKHBheWxvYWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGNsaWVudCByb2xlcyBmcm9tIHRoZSBgcmVzb3VyY2VfYWNjZXNzYCBjbGFpbSwgZXhjbHVkaW5nXG4gICAqIHRoZSBjb25maWd1cmVkIGBleGNsdWRlZENsaWVudHNgIChkZWZhdWx0OiBgW1wiYWNjb3VudFwiXWApLlxuICAgKi9cbiAgZXh0cmFjdENsaWVudFJvbGVzKFxuICAgIHBheWxvYWQ6IEtleWNsb2FrQWNjZXNzVG9rZW5QYXlsb2FkIHwgbnVsbFxuICApOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGdldENsaWVudFJvbGVzKHBheWxvYWQsIHRoaXMuZXhjbHVkZWRDbGllbnRzKTtcbiAgfVxuXG4gIGdldFJlYWxtRnJvbUlzc3Vlcihqd3Q6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldFJlYWxtRnJvbUlzc3Vlcihqd3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhIEpXVDpcbiAgICogLSBJbiAqKnZlcmlmeSBtb2RlKio6IHZlcmlmaWVzIHRoZSBzaWduYXR1cmUgYWdhaW5zdCB0aGUgS2V5Y2xvYWsgSldLU1xuICAgKiAgIGVuZHBvaW50IHVzaW5nIGBqb3NlLmp3dFZlcmlmeWAsIHRoZW4gcmV0dXJucyB0aGUgdmVyaWZpZWQgcGF5bG9hZC5cbiAgICogLSBJbiAqKmRlY29kZS1vbmx5IG1vZGUqKjogZGVjb2RlcyB0aGUgSldUIHdpdGhvdXQgdmVyaWZpY2F0aW9uIGFuZFxuICAgKiAgIHJldHVybnMgdGhlIHBheWxvYWQgKG9yIHRocm93cyBpZiB1bnBhcnNlYWJsZSkuXG4gICAqXG4gICAqIEB0aHJvd3Mge0F1dGhvcml6YXRpb25FcnJvcn0gd2hlbiB0aGUgdG9rZW4gaXMgaW52YWxpZCwgZXhwaXJlZCwgb3JcbiAgICogICBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxzLlxuICAgKi9cbiAgYXN5bmMgYXNzZXJ0VmFsaWRUb2tlbihcbiAgICBqd3Q6IHN0cmluZ1xuICApOiBQcm9taXNlPEtleWNsb2FrQWNjZXNzVG9rZW5QYXlsb2FkPiB7XG4gICAgaWYgKHRoaXMudmVyaWZ5VG9rZW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnZlcmlmeUFnYWluc3RKd2tzKGp3dCk7XG4gICAgfVxuICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmdldFRva2VuUGF5bG9hZChqd3QpO1xuICAgIGlmICghcGF5bG9hZCkge1xuICAgICAgdGhyb3cgbmV3IEF1dGhvcml6YXRpb25FcnJvcihcIkludmFsaWQgdG9rZW5cIik7XG4gICAgfVxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoZSBKV1Qgc2lnbmF0dXJlIGFnYWluc3QgdGhlIEtleWNsb2FrIEpXS1MgZW5kcG9pbnQuXG4gICAqIExhemlseSBjcmVhdGVzIHRoZSBKV0tTIGtleXN0b3JlIG9uIGZpcnN0IGNhbGwuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHZlcmlmeUFnYWluc3RKd2tzKFxuICAgIGp3dDogc3RyaW5nXG4gICk6IFByb21pc2U8S2V5Y2xvYWtBY2Nlc3NUb2tlblBheWxvYWQ+IHtcbiAgICBpZiAoIXRoaXMuandrcykge1xuICAgICAgdGhpcy5qd2tzID0gY3JlYXRlUmVtb3RlSldLU2V0KG5ldyBVUkwodGhpcy52ZXJpZnlVcmwpKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgcGF5bG9hZCB9ID0gYXdhaXQgand0VmVyaWZ5KGp3dCwgdGhpcy5qd2tzLCB7XG4gICAgICAgIGNsb2NrVG9sZXJhbmNlOiBgJHt0aGlzLmNsb2NrVG9sZXJhbmNlU2Vjb25kc31zYCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBheWxvYWQgYXMgdW5rbm93biBhcyBLZXljbG9ha0FjY2Vzc1Rva2VuUGF5bG9hZDtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXJyb3IoXCJJbnZhbGlkIHRva2VuOiBcIiArIChlPy5tZXNzYWdlID8/IGUpKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhdXRoU2VydmljZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7OztHQVVHO0FBQ0gseUNBQW9EO0FBQ3BELCtCQUFxRDtBQUNyRCx5Q0FBaUg7QUFDakgsTUFBYSxXQUFXO0lBQ3BCLFlBQVksT0FBTyxHQUFHLEVBQUU7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNoRSxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLElBQUksQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRCwwQkFBMEI7UUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFDRCxlQUFlLENBQUMsR0FBRztRQUNmLE9BQU8sSUFBQSwwQkFBZSxFQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxRQUFRLENBQUMsR0FBRztRQUNSLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQUc7UUFDUCxPQUFPLElBQUEsa0JBQU8sRUFBQyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsT0FBTztRQUN4QixPQUFPLElBQUEsK0JBQW9CLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNEOzs7T0FHRztJQUNILGtCQUFrQixDQUFDLE9BQU87UUFDdEIsT0FBTyxJQUFBLHlCQUFjLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsR0FBRztRQUNsQixPQUFPLElBQUEsNkJBQWtCLEVBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNEOzs7Ozs7Ozs7T0FTRztJQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHO1FBQ3RCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSx5QkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUNEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUEseUJBQWtCLEVBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELElBQUksQ0FBQztZQUNELE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUEsZ0JBQVMsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDaEQsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHO2FBQ25ELENBQUMsQ0FBQztZQUNILE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUM7UUFDRCxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1AsTUFBTSxJQUFJLHlCQUFrQixDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUF0RUQsa0NBc0VDO0FBQ0QsMHNSQUEwc1IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL25lc3QvYXV0aFNlcnZpY2VcbiAqIEBzdW1tYXJ5IE5lc3QtY29tcGF0aWJsZSBhdXRoZW50aWNhdGlvbiBzZXJ2aWNlIGhlbHBlcnMuXG4gKiBAZGVzY3JpcHRpb24gUmVxdWVzdC1jb250ZXh0LWF3YXJlIGF1dGggaGVscGVycyBmb3IgTmVzdCBhcHBsaWNhdGlvbnMgdXNpbmcgRGVjYWYgaW50ZWdyYXRpb24gcGF0dGVybnMuXG4gKlxuICogU3VwcG9ydHMgdHdvIG1vZGVzOlxuICogLSAqKlZlcmlmeSBtb2RlKiogKGRlZmF1bHQgd2hlbiBgdmVyaWZ5VXJsYCBpcyBzZXQpOiB2YWxpZGF0ZXMgdGhlIEpXVCBzaWduYXR1cmVcbiAqICAgYWdhaW5zdCB0aGUgS2V5Y2xvYWsgSldLUyBlbmRwb2ludCB1c2luZyBgam9zZS5qd3RWZXJpZnlgLlxuICogLSAqKkRlY29kZS1vbmx5IG1vZGUqKiAod2hlbiBgdmVyaWZ5VG9rZW5gIGlzIGZhbHNlIC8gYHZlcmlmeVVybGAgaXMgZW1wdHkpOlxuICogICBkZWNvZGVzIHRoZSBKV1Qgd2l0aG91dCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIChkZXYvbG9jYWwgbW9kZSkuXG4gKi9cbmltcG9ydCB7IEF1dGhvcml6YXRpb25FcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgY3JlYXRlUmVtb3RlSldLU2V0LCBqd3RWZXJpZnkgfSBmcm9tIFwiam9zZVwiO1xuaW1wb3J0IHsgZXh0cmFjdEtleWNsb2FrUm9sZXMsIGdldFJlYWxtRnJvbUlzc3VlciwgZ2V0VG9rZW5QYXlsb2FkLCBnZXRVc2VyLCBnZXRDbGllbnRSb2xlcywgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy52ZXJpZnlUb2tlbiA9ICEhb3B0aW9ucy52ZXJpZnlUb2tlbiAmJiAhIW9wdGlvbnMudmVyaWZ5VXJsO1xuICAgICAgICB0aGlzLnZlcmlmeVVybCA9IG9wdGlvbnMudmVyaWZ5VXJsID8/IFwiXCI7XG4gICAgICAgIHRoaXMuY2xvY2tUb2xlcmFuY2VTZWNvbmRzID0gb3B0aW9ucy5jbG9ja1RvbGVyYW5jZVNlY29uZHMgPz8gNTtcbiAgICAgICAgdGhpcy5leGNsdWRlZENsaWVudHMgPSBvcHRpb25zLmV4Y2x1ZGVkQ2xpZW50cyA/PyBbXCJhY2NvdW50XCJdO1xuICAgIH1cbiAgICBpc1Rva2VuVmVyaWZpY2F0aW9uRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5VG9rZW47XG4gICAgfVxuICAgIGdldFRva2VuUGF5bG9hZChqd3QpIHtcbiAgICAgICAgcmV0dXJuIGdldFRva2VuUGF5bG9hZChqd3QpO1xuICAgIH1cbiAgICBnZXRSb2xlcyhqd3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdEtleWNsb2FrUm9sZXModGhpcy5nZXRUb2tlblBheWxvYWQoand0KSk7XG4gICAgfVxuICAgIGdldFVzZXIoand0KSB7XG4gICAgICAgIHJldHVybiBnZXRVc2VyKGp3dCk7XG4gICAgfVxuICAgIGV4dHJhY3RLZXljbG9ha1JvbGVzKHBheWxvYWQpIHtcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RLZXljbG9ha1JvbGVzKHBheWxvYWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0cyBjbGllbnQgcm9sZXMgZnJvbSB0aGUgYHJlc291cmNlX2FjY2Vzc2AgY2xhaW0sIGV4Y2x1ZGluZ1xuICAgICAqIHRoZSBjb25maWd1cmVkIGBleGNsdWRlZENsaWVudHNgIChkZWZhdWx0OiBgW1wiYWNjb3VudFwiXWApLlxuICAgICAqL1xuICAgIGV4dHJhY3RDbGllbnRSb2xlcyhwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBnZXRDbGllbnRSb2xlcyhwYXlsb2FkLCB0aGlzLmV4Y2x1ZGVkQ2xpZW50cyk7XG4gICAgfVxuICAgIGdldFJlYWxtRnJvbUlzc3Vlcihqd3QpIHtcbiAgICAgICAgcmV0dXJuIGdldFJlYWxtRnJvbUlzc3Vlcihqd3QpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgYSBKV1Q6XG4gICAgICogLSBJbiAqKnZlcmlmeSBtb2RlKio6IHZlcmlmaWVzIHRoZSBzaWduYXR1cmUgYWdhaW5zdCB0aGUgS2V5Y2xvYWsgSldLU1xuICAgICAqICAgZW5kcG9pbnQgdXNpbmcgYGpvc2Uuand0VmVyaWZ5YCwgdGhlbiByZXR1cm5zIHRoZSB2ZXJpZmllZCBwYXlsb2FkLlxuICAgICAqIC0gSW4gKipkZWNvZGUtb25seSBtb2RlKio6IGRlY29kZXMgdGhlIEpXVCB3aXRob3V0IHZlcmlmaWNhdGlvbiBhbmRcbiAgICAgKiAgIHJldHVybnMgdGhlIHBheWxvYWQgKG9yIHRocm93cyBpZiB1bnBhcnNlYWJsZSkuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtBdXRob3JpemF0aW9uRXJyb3J9IHdoZW4gdGhlIHRva2VuIGlzIGludmFsaWQsIGV4cGlyZWQsIG9yXG4gICAgICogICBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxzLlxuICAgICAqL1xuICAgIGFzeW5jIGFzc2VydFZhbGlkVG9rZW4oand0KSB7XG4gICAgICAgIGlmICh0aGlzLnZlcmlmeVRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52ZXJpZnlBZ2FpbnN0Sndrcyhqd3QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmdldFRva2VuUGF5bG9hZChqd3QpO1xuICAgICAgICBpZiAoIXBheWxvYWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXJyb3IoXCJJbnZhbGlkIHRva2VuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBWZXJpZmllcyB0aGUgSldUIHNpZ25hdHVyZSBhZ2FpbnN0IHRoZSBLZXljbG9hayBKV0tTIGVuZHBvaW50LlxuICAgICAqIExhemlseSBjcmVhdGVzIHRoZSBKV0tTIGtleXN0b3JlIG9uIGZpcnN0IGNhbGwuXG4gICAgICovXG4gICAgYXN5bmMgdmVyaWZ5QWdhaW5zdEp3a3Moand0KSB7XG4gICAgICAgIGlmICghdGhpcy5qd2tzKSB7XG4gICAgICAgICAgICB0aGlzLmp3a3MgPSBjcmVhdGVSZW1vdGVKV0tTZXQobmV3IFVSTCh0aGlzLnZlcmlmeVVybCkpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IHBheWxvYWQgfSA9IGF3YWl0IGp3dFZlcmlmeShqd3QsIHRoaXMuandrcywge1xuICAgICAgICAgICAgICAgIGNsb2NrVG9sZXJhbmNlOiBgJHt0aGlzLmNsb2NrVG9sZXJhbmNlU2Vjb25kc31zYCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXJyb3IoXCJJbnZhbGlkIHRva2VuOiBcIiArIChlPy5tZXNzYWdlID8/IGUpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVlYVjBhRk5sY25acFkyVXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTh1TGk5emNtTXZibVZ6ZEM5aGRYUm9VMlZ5ZG1salpTNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVRzN096czdPenM3T3p0SFFWVkhPMEZCUTBnc1QwRkJUeXhGUVVGRkxHdENRVUZyUWl4RlFVRkZMRTFCUVUwc1owSkJRV2RDTEVOQlFVTTdRVUZEY0VRc1QwRkJUeXhGUVVGRkxHdENRVUZyUWl4RlFVRkZMRk5CUVZNc1JVRkJSU3hOUVVGTkxFMUJRVTBzUTBGQlF6dEJRVU55UkN4UFFVRlBMRVZCUTB3c2IwSkJRVzlDTEVWQlEzQkNMR3RDUVVGclFpeEZRVU5zUWl4bFFVRmxMRVZCUTJZc1QwRkJUeXhGUVVOUUxHTkJRV01zUjBGRFppeHRRa0ZCWjBJN1FVRXJRbXBDTEUxQlFVMHNUMEZCVHl4WFFVRlhPMGxCVDNSQ0xGbEJRVmtzVlVGQk9FSXNSVUZCUlR0UlFVTXhReXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1YwRkJWeXhKUVVGSkxFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNVMEZCVXl4RFFVRkRPMUZCUTJoRkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVY3NUMEZCVHl4RFFVRkRMRk5CUVZNc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGVrTXNTVUZCU1N4RFFVRkRMSEZDUVVGeFFpeEhRVUZITEU5QlFVOHNRMEZCUXl4eFFrRkJjVUlzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEYUVVc1NVRkJTU3hEUVVGRExHVkJRV1VzUjBGQlJ5eFBRVUZQTEVOQlFVTXNaVUZCWlN4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03U1VGRGFFVXNRMEZCUXp0SlFVVkVMREJDUVVFd1FqdFJRVU40UWl4UFFVRlBMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU03U1VGRE1VSXNRMEZCUXp0SlFVVkVMR1ZCUVdVc1EwRkJReXhIUVVGWE8xRkJRM3BDTEU5QlFVOHNaVUZCWlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRemxDTEVOQlFVTTdTVUZGUkN4UlFVRlJMRU5CUVVNc1IwRkJWenRSUVVOc1FpeFBRVUZQTEVsQlFVa3NRMEZCUXl4dlFrRkJiMElzUTBGQlF5eEpRVUZKTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRE9VUXNRMEZCUXp0SlFVVkVMRTlCUVU4c1EwRkJReXhIUVVGWE8xRkJRMnBDTEU5QlFVOHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRM1JDTEVOQlFVTTdTVUZGUkN4dlFrRkJiMElzUTBGQlF5eFBRVUV3UXp0UlFVTTNSQ3hQUVVGUExHOUNRVUZ2UWl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wbEJRM1pETEVOQlFVTTdTVUZGUkRzN08wOUJSMGM3U1VGRFNDeHJRa0ZCYTBJc1EwRkRhRUlzVDBGQk1FTTdVVUZGTVVNc1QwRkJUeXhqUVVGakxFTkJRVU1zVDBGQlR5eEZRVUZGTEVsQlFVa3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJRenRKUVVOMlJDeERRVUZETzBsQlJVUXNhMEpCUVd0Q0xFTkJRVU1zUjBGQlZ6dFJRVU0xUWl4UFFVRlBMR3RDUVVGclFpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJwRExFTkJRVU03U1VGRlJEczdPenM3T3pzN08wOUJVMGM3U1VGRFNDeExRVUZMTEVOQlFVTXNaMEpCUVdkQ0xFTkJRM0JDTEVkQlFWYzdVVUZGV0N4SlFVRkpMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dFpRVU55UWl4UFFVRlBMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOeVF5eERRVUZETzFGQlEwUXNUVUZCVFN4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExHVkJRV1VzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTXhReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdXVUZEWWl4TlFVRk5MRWxCUVVrc2EwSkJRV3RDTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNN1VVRkRhRVFzUTBGQlF6dFJRVU5FTEU5QlFVOHNUMEZCVHl4RFFVRkRPMGxCUTJwQ0xFTkJRVU03U1VGRlJEczdPMDlCUjBjN1NVRkRTeXhMUVVGTExFTkJRVU1zYVVKQlFXbENMRU5CUXpkQ0xFZEJRVmM3VVVGRldDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8xbEJRMllzU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4clFrRkJhMElzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU14UkN4RFFVRkRPMUZCUTBRc1NVRkJTU3hEUVVGRE8xbEJRMGdzVFVGQlRTeEZRVUZGTEU5QlFVOHNSVUZCUlN4SFFVRkhMRTFCUVUwc1UwRkJVeXhEUVVGRExFZEJRVWNzUlVGQlJTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZPMmRDUVVOc1JDeGpRVUZqTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc2NVSkJRWEZDTEVkQlFVYzdZVUZEYWtRc1EwRkJReXhEUVVGRE8xbEJRMGdzVDBGQlR5eFBRVUZuUkN4RFFVRkRPMUZCUXpGRUxFTkJRVU03VVVGQlF5eFBRVUZQTEVOQlFVMHNSVUZCUlN4RFFVRkRPMWxCUTJoQ0xFMUJRVTBzU1VGQlNTeHJRa0ZCYTBJc1EwRkJReXhwUWtGQmFVSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hQUVVGUExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjBSU3hEUVVGRE8wbEJRMGdzUTBGQlF6dERRVU5HSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCQWJXOWtkV3hsSUdsdWRHVm5jbUYwYVc5dWN5OXVaWE4wTDJGMWRHaFRaWEoyYVdObFhHNGdLaUJBYzNWdGJXRnllU0JPWlhOMExXTnZiWEJoZEdsaWJHVWdZWFYwYUdWdWRHbGpZWFJwYjI0Z2MyVnlkbWxqWlNCb1pXeHdaWEp6TGx4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUZKbGNYVmxjM1F0WTI5dWRHVjRkQzFoZDJGeVpTQmhkWFJvSUdobGJIQmxjbk1nWm05eUlFNWxjM1FnWVhCd2JHbGpZWFJwYjI1eklIVnphVzVuSUVSbFkyRm1JR2x1ZEdWbmNtRjBhVzl1SUhCaGRIUmxjbTV6TGx4dUlDcGNiaUFxSUZOMWNIQnZjblJ6SUhSM2J5QnRiMlJsY3pwY2JpQXFJQzBnS2lwV1pYSnBabmtnYlc5a1pTb3FJQ2hrWldaaGRXeDBJSGRvWlc0Z1lIWmxjbWxtZVZWeWJHQWdhWE1nYzJWMEtUb2dkbUZzYVdSaGRHVnpJSFJvWlNCS1YxUWdjMmxuYm1GMGRYSmxYRzRnS2lBZ0lHRm5ZV2x1YzNRZ2RHaGxJRXRsZVdOc2IyRnJJRXBYUzFNZ1pXNWtjRzlwYm5RZ2RYTnBibWNnWUdwdmMyVXVhbmQwVm1WeWFXWjVZQzVjYmlBcUlDMGdLaXBFWldOdlpHVXRiMjVzZVNCdGIyUmxLaW9nS0hkb1pXNGdZSFpsY21sbWVWUnZhMlZ1WUNCcGN5Qm1ZV3h6WlNBdklHQjJaWEpwWm5sVmNteGdJR2x6SUdWdGNIUjVLVHBjYmlBcUlDQWdaR1ZqYjJSbGN5QjBhR1VnU2xkVUlIZHBkR2h2ZFhRZ2MybG5ibUYwZFhKbElIWmxjbWxtYVdOaGRHbHZiaUFvWkdWMkwyeHZZMkZzSUcxdlpHVXBMbHh1SUNvdlhHNXBiWEJ2Y25RZ2V5QkJkWFJvYjNKcGVtRjBhVzl1UlhKeWIzSWdmU0JtY205dElGd2lRR1JsWTJGbUxYUnpMMk52Y21WY0lqdGNibWx0Y0c5eWRDQjdJR055WldGMFpWSmxiVzkwWlVwWFMxTmxkQ3dnYW5kMFZtVnlhV1o1SUgwZ1puSnZiU0JjSW1wdmMyVmNJanRjYm1sdGNHOXlkQ0I3WEc0Z0lHVjRkSEpoWTNSTFpYbGpiRzloYTFKdmJHVnpMRnh1SUNCblpYUlNaV0ZzYlVaeWIyMUpjM04xWlhJc1hHNGdJR2RsZEZSdmEyVnVVR0Y1Ykc5aFpDeGNiaUFnWjJWMFZYTmxjaXhjYmlBZ1oyVjBRMnhwWlc1MFVtOXNaWE1zWEc1OUlHWnliMjBnWENJdUwzVjBhV3h6WENJN1hHNXBiWEJ2Y25RZ2RIbHdaU0I3SUV0bGVXTnNiMkZyUVdOalpYTnpWRzlyWlc1UVlYbHNiMkZrTENCTFpYbGpiRzloYTFWelpYSWdmU0JtY205dElGd2lMaTkwZVhCbGMxd2lPMXh1WEc0dktpcGNiaUFxSUVOdmJtWnBaM1Z5WVhScGIyNGdabTl5SUhSb1pTQjdRR3hwYm1zZ1FYVjBhRk5sY25acFkyVjlMbHh1SUNvdlhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFRjFkR2hUWlhKMmFXTmxUM0IwYVc5dWN5QjdYRzRnSUM4cUtseHVJQ0FnS2lCWGFHVjBhR1Z5SUhSdklIWmxjbWxtZVNCMGFHVWdTbGRVSUhOcFoyNWhkSFZ5WlNCaFoyRnBibk4wSUhSb1pTQkxaWGxqYkc5aGF5QktWMHRUSUdWdVpIQnZhVzUwTGx4dUlDQWdLaUJYYUdWdUlHQm1ZV3h6WldBZ0tHOXlJR0IyWlhKcFpubFZjbXhnSUdseklHVnRjSFI1S1N3Z2RHOXJaVzV6SUdGeVpTQmtaV052WkdWa0lIZHBkR2h2ZFhSY2JpQWdJQ29nYzJsbmJtRjBkWEpsSUhabGNtbG1hV05oZEdsdmJpQW9aR1YyTDJ4dlkyRnNJRzF2WkdVZ2IyNXNlU2t1WEc0Z0lDQXFJRUJrWldaaGRXeDBJR1poYkhObFhHNGdJQ0FxTDF4dUlDQjJaWEpwWm5sVWIydGxiajg2SUdKdmIyeGxZVzQ3WEc0Z0lDOHFLbHh1SUNBZ0tpQlVhR1VnUzJWNVkyeHZZV3NnU2xkTFV5QlZVa3dnS0dVdVp5NGdZR2gwZEhCek9pOHZhMlY1WTJ4dllXc3ZjbVZoYkcxekwyMTVjbVZoYkcwdmNISnZkRzlqYjJ3dmIzQmxibWxrTFdOdmJtNWxZM1F2WTJWeWRITmdLUzVjYmlBZ0lDb2dVbVZ4ZFdseVpXUWdkMmhsYmlCZ2RtVnlhV1o1Vkc5clpXNWdJR2x6SUdCMGNuVmxZQzVjYmlBZ0lDb3ZYRzRnSUhabGNtbG1lVlZ5YkQ4NklITjBjbWx1Wnp0Y2JpQWdMeW9xWEc0Z0lDQXFJRU5zYjJOcklIUnZiR1Z5WVc1alpTQm1iM0lnU2xkVUlHVjRjR2x5ZVNCMlpYSnBabWxqWVhScGIyNGdLR2x1SUhObFkyOXVaSE1wTGx4dUlDQWdLaUJBWkdWbVlYVnNkQ0ExWEc0Z0lDQXFMMXh1SUNCamJHOWphMVJ2YkdWeVlXNWpaVk5sWTI5dVpITS9PaUJ1ZFcxaVpYSTdYRzRnSUM4cUtseHVJQ0FnS2lCTFpYbGpiRzloYXlCamJHbGxiblFnU1VSeklIUnZJR1Y0WTJ4MVpHVWdkMmhsYmlCbGVIUnlZV04wYVc1bklISnZiR1Z6SUdaeWIyMGdZSEpsYzI5MWNtTmxYMkZqWTJWemMyQXVYRzRnSUNBcUlFQmtaV1poZFd4MElGdGNJbUZqWTI5MWJuUmNJbDFjYmlBZ0lDb3ZYRzRnSUdWNFkyeDFaR1ZrUTJ4cFpXNTBjejg2SUhOMGNtbHVaMXRkTzF4dWZWeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1FYVjBhRk5sY25acFkyVWdlMXh1SUNCd2NtbDJZWFJsSUhKbFlXUnZibXg1SUhabGNtbG1lVlJ2YTJWdU9pQmliMjlzWldGdU8xeHVJQ0J3Y21sMllYUmxJSEpsWVdSdmJteDVJSFpsY21sbWVWVnliRG9nYzNSeWFXNW5PMXh1SUNCd2NtbDJZWFJsSUhKbFlXUnZibXg1SUdOc2IyTnJWRzlzWlhKaGJtTmxVMlZqYjI1a2N6b2diblZ0WW1WeU8xeHVJQ0J3Y21sMllYUmxJSEpsWVdSdmJteDVJR1Y0WTJ4MVpHVmtRMnhwWlc1MGN6b2djM1J5YVc1blcxMDdYRzRnSUhCeWFYWmhkR1VnYW5kcmN6b2dVbVYwZFhKdVZIbHdaVHgwZVhCbGIyWWdZM0psWVhSbFVtVnRiM1JsU2xkTFUyVjBQaUI4SUhWdVpHVm1hVzVsWkR0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2lodmNIUnBiMjV6T2lCQmRYUm9VMlZ5ZG1salpVOXdkR2x2Ym5NZ1BTQjdmU2tnZTF4dUlDQWdJSFJvYVhNdWRtVnlhV1o1Vkc5clpXNGdQU0FoSVc5d2RHbHZibk11ZG1WeWFXWjVWRzlyWlc0Z0ppWWdJU0Z2Y0hScGIyNXpMblpsY21sbWVWVnliRHRjYmlBZ0lDQjBhR2x6TG5abGNtbG1lVlZ5YkNBOUlHOXdkR2x2Ym5NdWRtVnlhV1o1VlhKc0lEOC9JRndpWENJN1hHNGdJQ0FnZEdocGN5NWpiRzlqYTFSdmJHVnlZVzVqWlZObFkyOXVaSE1nUFNCdmNIUnBiMjV6TG1Oc2IyTnJWRzlzWlhKaGJtTmxVMlZqYjI1a2N5QS9QeUExTzF4dUlDQWdJSFJvYVhNdVpYaGpiSFZrWldSRGJHbGxiblJ6SUQwZ2IzQjBhVzl1Y3k1bGVHTnNkV1JsWkVOc2FXVnVkSE1nUHo4Z1cxd2lZV05qYjNWdWRGd2lYVHRjYmlBZ2ZWeHVYRzRnSUdselZHOXJaVzVXWlhKcFptbGpZWFJwYjI1RmJtRmliR1ZrS0NrNklHSnZiMnhsWVc0Z2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuWmxjbWxtZVZSdmEyVnVPMXh1SUNCOVhHNWNiaUFnWjJWMFZHOXJaVzVRWVhsc2IyRmtLR3AzZERvZ2MzUnlhVzVuS1RvZ1MyVjVZMnh2WVd0QlkyTmxjM05VYjJ0bGJsQmhlV3h2WVdRZ2ZDQnVkV3hzSUh0Y2JpQWdJQ0J5WlhSMWNtNGdaMlYwVkc5clpXNVFZWGxzYjJGa0tHcDNkQ2s3WEc0Z0lIMWNibHh1SUNCblpYUlNiMnhsY3locWQzUTZJSE4wY21sdVp5azZJSE4wY21sdVoxdGRJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVsZUhSeVlXTjBTMlY1WTJ4dllXdFNiMnhsY3loMGFHbHpMbWRsZEZSdmEyVnVVR0Y1Ykc5aFpDaHFkM1FwS1R0Y2JpQWdmVnh1WEc0Z0lHZGxkRlZ6WlhJb2FuZDBPaUJ6ZEhKcGJtY3BPaUJMWlhsamJHOWhhMVZ6WlhJZ2ZDQjFibVJsWm1sdVpXUWdlMXh1SUNBZ0lISmxkSFZ5YmlCblpYUlZjMlZ5S0dwM2RDazdYRzRnSUgxY2JseHVJQ0JsZUhSeVlXTjBTMlY1WTJ4dllXdFNiMnhsY3lod1lYbHNiMkZrT2lCTFpYbGpiRzloYTBGalkyVnpjMVJ2YTJWdVVHRjViRzloWkNCOElHNTFiR3dwT2lCemRISnBibWRiWFNCN1hHNGdJQ0FnY21WMGRYSnVJR1Y0ZEhKaFkzUkxaWGxqYkc5aGExSnZiR1Z6S0hCaGVXeHZZV1FwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFVjRkSEpoWTNSeklHTnNhV1Z1ZENCeWIyeGxjeUJtY205dElIUm9aU0JnY21WemIzVnlZMlZmWVdOalpYTnpZQ0JqYkdGcGJTd2daWGhqYkhWa2FXNW5YRzRnSUNBcUlIUm9aU0JqYjI1bWFXZDFjbVZrSUdCbGVHTnNkV1JsWkVOc2FXVnVkSE5nSUNoa1pXWmhkV3gwT2lCZ1cxd2lZV05qYjNWdWRGd2lYV0FwTGx4dUlDQWdLaTljYmlBZ1pYaDBjbUZqZEVOc2FXVnVkRkp2YkdWektGeHVJQ0FnSUhCaGVXeHZZV1E2SUV0bGVXTnNiMkZyUVdOalpYTnpWRzlyWlc1UVlYbHNiMkZrSUh3Z2JuVnNiRnh1SUNBcE9pQnpkSEpwYm1kYlhTQjdYRzRnSUNBZ2NtVjBkWEp1SUdkbGRFTnNhV1Z1ZEZKdmJHVnpLSEJoZVd4dllXUXNJSFJvYVhNdVpYaGpiSFZrWldSRGJHbGxiblJ6S1R0Y2JpQWdmVnh1WEc0Z0lHZGxkRkpsWVd4dFJuSnZiVWx6YzNWbGNpaHFkM1E2SUhOMGNtbHVaeWs2SUhOMGNtbHVaeUI3WEc0Z0lDQWdjbVYwZFhKdUlHZGxkRkpsWVd4dFJuSnZiVWx6YzNWbGNpaHFkM1FwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGWmhiR2xrWVhSbGN5QmhJRXBYVkRwY2JpQWdJQ29nTFNCSmJpQXFLblpsY21sbWVTQnRiMlJsS2lvNklIWmxjbWxtYVdWeklIUm9aU0J6YVdkdVlYUjFjbVVnWVdkaGFXNXpkQ0IwYUdVZ1MyVjVZMnh2WVdzZ1NsZExVMXh1SUNBZ0tpQWdJR1Z1WkhCdmFXNTBJSFZ6YVc1bklHQnFiM05sTG1wM2RGWmxjbWxtZVdBc0lIUm9aVzRnY21WMGRYSnVjeUIwYUdVZ2RtVnlhV1pwWldRZ2NHRjViRzloWkM1Y2JpQWdJQ29nTFNCSmJpQXFLbVJsWTI5a1pTMXZibXg1SUcxdlpHVXFLam9nWkdWamIyUmxjeUIwYUdVZ1NsZFVJSGRwZEdodmRYUWdkbVZ5YVdacFkyRjBhVzl1SUdGdVpGeHVJQ0FnS2lBZ0lISmxkSFZ5Ym5NZ2RHaGxJSEJoZVd4dllXUWdLRzl5SUhSb2NtOTNjeUJwWmlCMWJuQmhjbk5sWVdKc1pTa3VYRzRnSUNBcVhHNGdJQ0FxSUVCMGFISnZkM01nZTBGMWRHaHZjbWw2WVhScGIyNUZjbkp2Y24wZ2QyaGxiaUIwYUdVZ2RHOXJaVzRnYVhNZ2FXNTJZV3hwWkN3Z1pYaHdhWEpsWkN3Z2IzSmNiaUFnSUNvZ0lDQnphV2R1WVhSMWNtVWdkbVZ5YVdacFkyRjBhVzl1SUdaaGFXeHpMbHh1SUNBZ0tpOWNiaUFnWVhONWJtTWdZWE56WlhKMFZtRnNhV1JVYjJ0bGJpaGNiaUFnSUNCcWQzUTZJSE4wY21sdVoxeHVJQ0FwT2lCUWNtOXRhWE5sUEV0bGVXTnNiMkZyUVdOalpYTnpWRzlyWlc1UVlYbHNiMkZrUGlCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11ZG1WeWFXWjVWRzlyWlc0cElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMblpsY21sbWVVRm5ZV2x1YzNSS2QydHpLR3AzZENrN1hHNGdJQ0FnZlZ4dUlDQWdJR052Ym5OMElIQmhlV3h2WVdRZ1BTQjBhR2x6TG1kbGRGUnZhMlZ1VUdGNWJHOWhaQ2hxZDNRcE8xeHVJQ0FnSUdsbUlDZ2hjR0Y1Ykc5aFpDa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRUYxZEdodmNtbDZZWFJwYjI1RmNuSnZjaWhjSWtsdWRtRnNhV1FnZEc5clpXNWNJaWs3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCd1lYbHNiMkZrTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGWmxjbWxtYVdWeklIUm9aU0JLVjFRZ2MybG5ibUYwZFhKbElHRm5ZV2x1YzNRZ2RHaGxJRXRsZVdOc2IyRnJJRXBYUzFNZ1pXNWtjRzlwYm5RdVhHNGdJQ0FxSUV4aGVtbHNlU0JqY21WaGRHVnpJSFJvWlNCS1YwdFRJR3RsZVhOMGIzSmxJRzl1SUdacGNuTjBJR05oYkd3dVhHNGdJQ0FxTDF4dUlDQndjbWwyWVhSbElHRnplVzVqSUhabGNtbG1lVUZuWVdsdWMzUktkMnR6S0Z4dUlDQWdJR3AzZERvZ2MzUnlhVzVuWEc0Z0lDazZJRkJ5YjIxcGMyVThTMlY1WTJ4dllXdEJZMk5sYzNOVWIydGxibEJoZVd4dllXUStJSHRjYmlBZ0lDQnBaaUFvSVhSb2FYTXVhbmRyY3lrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVxZDJ0eklEMGdZM0psWVhSbFVtVnRiM1JsU2xkTFUyVjBLRzVsZHlCVlVrd29kR2hwY3k1MlpYSnBabmxWY213cEtUdGNiaUFnSUNCOVhHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lHTnZibk4wSUhzZ2NHRjViRzloWkNCOUlEMGdZWGRoYVhRZ2FuZDBWbVZ5YVdaNUtHcDNkQ3dnZEdocGN5NXFkMnR6TENCN1hHNGdJQ0FnSUNBZ0lHTnNiMk5yVkc5c1pYSmhibU5sT2lCZ0pIdDBhR2x6TG1Oc2IyTnJWRzlzWlhKaGJtTmxVMlZqYjI1a2MzMXpZQ3hjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnY21WMGRYSnVJSEJoZVd4dllXUWdZWE1nZFc1cmJtOTNiaUJoY3lCTFpYbGpiRzloYTBGalkyVnpjMVJ2YTJWdVVHRjViRzloWkR0Y2JpQWdJQ0I5SUdOaGRHTm9JQ2hsT2lCaGJua3BJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJCZFhSb2IzSnBlbUYwYVc5dVJYSnliM0lvWENKSmJuWmhiR2xrSUhSdmEyVnVPaUJjSWlBcklDaGxQeTV0WlhOellXZGxJRDgvSUdVcEtUdGNiaUFnSUNCOVhHNGdJSDFjYm4xY2JpSmRmUT09Il19
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GraphExecutionController = exports.GRAPH_RESULT_REPOSITORY = void 0;
4
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
7
+ r = Reflect.decorate(decorators, target, key, desc);
8
+ else
9
+ for (var i = decorators.length - 1; i >= 0; i--)
10
+ if (d = decorators[i])
11
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
13
+ };
14
+ var __metadata = (this && this.__metadata) || function (k, v) {
15
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
16
+ return Reflect.metadata(k, v);
17
+ };
18
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
19
+ return function (target, key) { decorator(target, key, paramIndex); };
20
+ };
21
+ /**
22
+ * @module integrations/nest/graph/GraphExecutionController
23
+ * @summary NestJS controller bridging the graph execution engine to REST + SSE.
24
+ * @description Exposes three endpoints:
25
+ * - `POST /graph/execute` — triggers {@link GraphExecutionEngine.execute}, persists the result via a Decaf repository, and returns `{ runId, status, outputs }`.
26
+ * - `GET /graph/events` — SSE endpoint streaming {@link GraphExecutionEvent}s as `[modelName, operation, id, payload]` tuples (compatible with for-http's `ServerEventConnector`).
27
+ * - `GET /graph/results/:runId` — retrieves a persisted {@link GraphExecutionResultModel} from the repository.
28
+ *
29
+ * This is the production pattern: for-nest hosts the engine, for-angular consumes events over the network via SSE and fetches persisted results via REST.
30
+ */
31
+ const common_1 = require("@nestjs/common");
32
+ const rxjs_1 = require("rxjs");
33
+ const operators_1 = require("rxjs/operators");
34
+ const index_js_1 = require("./../../graph/index.cjs");
35
+ const GraphExecutionResultRepository_js_1 = require("./GraphExecutionResultRepository.cjs");
36
+ /**
37
+ * NestJS injection token for the graph execution result repository.
38
+ */
39
+ exports.GRAPH_RESULT_REPOSITORY = "GRAPH_RESULT_REPOSITORY";
40
+ /**
41
+ * NestJS controller that hosts the graph execution engine server-side,
42
+ * streams events via SSE, and persists results for later retrieval.
43
+ */
44
+ let GraphExecutionController = class GraphExecutionController {
45
+ constructor(engine, resultRepository) {
46
+ this.engine = engine;
47
+ this.resultRepository = resultRepository;
48
+ this.eventSubject = new rxjs_1.Subject();
49
+ this.engine.observe({
50
+ refresh: async (event) => {
51
+ this.eventSubject.next(event);
52
+ },
53
+ });
54
+ }
55
+ /**
56
+ * Triggers graph execution server-side, persists the result, and returns
57
+ * a summary containing the `runId`, `status`, and `outputs`.
58
+ */
59
+ async execute(body) {
60
+ const result = await this.engine.execute(body.workflow, body.inputs ?? {});
61
+ try {
62
+ await this.resultRepository.create((0, GraphExecutionResultRepository_js_1.toResultModel)(result));
63
+ }
64
+ catch {
65
+ // persistence failures must not mask a successful execution result
66
+ }
67
+ return {
68
+ runId: result.runId,
69
+ status: result.status,
70
+ outputs: result.outputs,
71
+ };
72
+ }
73
+ /**
74
+ * SSE endpoint that streams graph execution events.
75
+ *
76
+ * Events are serialized as `[modelName, operation, id, payload]` to match
77
+ * the format expected by for-http's `ServerEventConnector`.
78
+ */
79
+ events() {
80
+ return this.eventSubject.asObservable().pipe((0, operators_1.map)((event) => ({
81
+ type: "message",
82
+ data: JSON.stringify([
83
+ "graph",
84
+ event.type,
85
+ event.runId,
86
+ {
87
+ id: event.id,
88
+ sequence: event.sequence,
89
+ type: event.type,
90
+ runId: event.runId,
91
+ parentRunId: event.parentRunId,
92
+ workflowId: event.workflowId,
93
+ nodeId: event.nodeId,
94
+ edgeId: event.edgeId,
95
+ port: event.port,
96
+ iteration: event.iteration,
97
+ path: event.path,
98
+ status: event.status,
99
+ payload: event.payload,
100
+ error: event.error,
101
+ timestamp: event.timestamp.toISOString(),
102
+ },
103
+ ]),
104
+ })));
105
+ }
106
+ /**
107
+ * Retrieves a persisted graph execution result by its `runId`.
108
+ *
109
+ * @throws {NotFoundException} when no result is stored for the given `runId`.
110
+ */
111
+ async getResult(runId) {
112
+ let model;
113
+ try {
114
+ model = (await this.resultRepository.read(runId));
115
+ }
116
+ catch {
117
+ model = null;
118
+ }
119
+ const result = (0, GraphExecutionResultRepository_js_1.fromResultModel)(model);
120
+ if (!result) {
121
+ throw new common_1.NotFoundException(`No graph execution result found for runId '${runId}'`);
122
+ }
123
+ return result;
124
+ }
125
+ };
126
+ exports.GraphExecutionController = GraphExecutionController;
127
+ __decorate([
128
+ (0, common_1.Post)("execute"),
129
+ __param(0, (0, common_1.Body)()),
130
+ __metadata("design:type", Function),
131
+ __metadata("design:paramtypes", [Object]),
132
+ __metadata("design:returntype", Promise)
133
+ ], GraphExecutionController.prototype, "execute", null);
134
+ __decorate([
135
+ (0, common_1.Sse)("events"),
136
+ __metadata("design:type", Function),
137
+ __metadata("design:paramtypes", []),
138
+ __metadata("design:returntype", rxjs_1.Observable)
139
+ ], GraphExecutionController.prototype, "events", null);
140
+ __decorate([
141
+ (0, common_1.Get)("results/:runId"),
142
+ __param(0, (0, common_1.Param)("runId")),
143
+ __metadata("design:type", Function),
144
+ __metadata("design:paramtypes", [String]),
145
+ __metadata("design:returntype", Promise)
146
+ ], GraphExecutionController.prototype, "getResult", null);
147
+ exports.GraphExecutionController = GraphExecutionController = __decorate([
148
+ (0, common_1.Controller)("graph"),
149
+ __param(1, (0, common_1.Inject)(exports.GRAPH_RESULT_REPOSITORY)),
150
+ __metadata("design:paramtypes", [index_js_1.GraphExecutionEngine, Object])
151
+ ], GraphExecutionController);
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25Db250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25lc3QvZ3JhcGgvR3JhcGhFeGVjdXRpb25Db250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7R0FTRztBQUNILE9BQU8sRUFDTCxVQUFVLEVBQ1YsSUFBSSxFQUNKLEdBQUcsRUFDSCxJQUFJLEVBQ0osS0FBSyxFQUNMLEdBQUcsRUFFSCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFDTCxvQkFBb0IsR0FHckIsK0JBQW9CO0FBR3JCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxHQUVkLDRDQUF5QztBQUcxQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLHlCQUF5QixDQUFDO0FBbUJqRTs7O0dBR0c7QUFFSSxJQUFNLHdCQUF3QixHQUE5QixNQUFNLHdCQUF3QjtJQUduQyxZQUNtQixNQUE0QixFQUU3QyxnQkFBeUU7UUFGeEQsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFFNUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF3QztRQUwxRCxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBT2pFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBRUcsQUFBTixLQUFL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QUFVLENBQUMsT0FBTyxDQUFDO0lBTWYsV0FBQSxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtxQ0FEUCxvQkFBb0I7R0FKcEMsd0JBQXdCLENBb0dwQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvbmVzdC9ncmFwaC9HcmFwaEV4ZWN1dGlvbkNvbnRyb2xsZXJcbiAqIEBzdW1tYXJ5IE5lc3RKUyBjb250cm9sbGVyIGJyaWRnaW5nIHRoZSBncmFwaCBleGVjdXRpb24gZW5naW5lIHRvIFJFU1QgKyBTU0UuXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aHJlZSBlbmRwb2ludHM6XG4gKiAtIGBQT1NUIC9ncmFwaC9leGVjdXRlYCDigJQgdHJpZ2dlcnMge0BsaW5rIEdyYXBoRXhlY3V0aW9uRW5naW5lLmV4ZWN1dGV9LCBwZXJzaXN0cyB0aGUgcmVzdWx0IHZpYSBhIERlY2FmIHJlcG9zaXRvcnksIGFuZCByZXR1cm5zIGB7IHJ1bklkLCBzdGF0dXMsIG91dHB1dHMgfWAuXG4gKiAtIGBHRVQgL2dyYXBoL2V2ZW50c2Ag4oCUIFNTRSBlbmRwb2ludCBzdHJlYW1pbmcge0BsaW5rIEdyYXBoRXhlY3V0aW9uRXZlbnR9cyBhcyBgW21vZGVsTmFtZSwgb3BlcmF0aW9uLCBpZCwgcGF5bG9hZF1gIHR1cGxlcyAoY29tcGF0aWJsZSB3aXRoIGZvci1odHRwJ3MgYFNlcnZlckV2ZW50Q29ubmVjdG9yYCkuXG4gKiAtIGBHRVQgL2dyYXBoL3Jlc3VsdHMvOnJ1bklkYCDigJQgcmV0cmlldmVzIGEgcGVyc2lzdGVkIHtAbGluayBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsfSBmcm9tIHRoZSByZXBvc2l0b3J5LlxuICpcbiAqIFRoaXMgaXMgdGhlIHByb2R1Y3Rpb24gcGF0dGVybjogZm9yLW5lc3QgaG9zdHMgdGhlIGVuZ2luZSwgZm9yLWFuZ3VsYXIgY29uc3VtZXMgZXZlbnRzIG92ZXIgdGhlIG5ldHdvcmsgdmlhIFNTRSBhbmQgZmV0Y2hlcyBwZXJzaXN0ZWQgcmVzdWx0cyB2aWEgUkVTVC5cbiAqL1xuaW1wb3J0IHtcbiAgQ29udHJvbGxlcixcbiAgUG9zdCxcbiAgR2V0LFxuICBCb2R5LFxuICBQYXJhbSxcbiAgU3NlLFxuICBNZXNzYWdlRXZlbnQsXG4gIEluamVjdCxcbiAgTm90Rm91bmRFeGNlcHRpb24sXG59IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBtYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuaW1wb3J0IHtcbiAgR3JhcGhFeGVjdXRpb25FbmdpbmUsXG4gIHR5cGUgR3JhcGhFeGVjdXRpb25FdmVudCxcbiAgdHlwZSBHcmFwaEV4ZWN1dGlvblZhbHVlcyxcbn0gZnJvbSBcIi4uLy4uL2dyYXBoXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uIH0gZnJvbSBcIkBkZWNhZi10cy91aS1kZWNvcmF0b3JzL2dyYXBoXCI7XG5cbmltcG9ydCB7XG4gIGZyb21SZXN1bHRNb2RlbCxcbiAgdG9SZXN1bHRNb2RlbCxcbiAgdHlwZSBHcmFwaEV4ZWN1dGlvblJlc3VsdFJlcG9zaXRvcnlJbnN0YW5jZSxcbn0gZnJvbSBcIi4vR3JhcGhFeGVjdXRpb25SZXN1bHRSZXBvc2l0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWwgfSBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsXCI7XG5cbi8qKlxuICogTmVzdEpTIGluamVjdGlvbiB0b2tlbiBmb3IgdGhlIGdyYXBoIGV4ZWN1dGlvbiByZXN1bHQgcmVwb3NpdG9yeS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdSQVBIX1JFU1VMVF9SRVBPU0lUT1JZID0gXCJHUkFQSF9SRVNVTFRfUkVQT1NJVE9SWVwiO1xuXG4vKipcbiAqIFBheWxvYWQgZm9yIHRoZSBgUE9TVCAvZ3JhcGgvZXhlY3V0ZWAgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhFeGVjdXRlUGF5bG9hZCB7XG4gIHdvcmtmbG93OiBHcmFwaFdvcmtmbG93RGVmaW5pdGlvbjtcbiAgaW5wdXRzOiBHcmFwaEV4ZWN1dGlvblZhbHVlcztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBzaGFwZSBmb3IgdGhlIGBQT1NUIC9ncmFwaC9leGVjdXRlYCBlbmRwb2ludC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaEV4ZWN1dGVSZXNwb25zZSB7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICBvdXRwdXRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBOZXN0SlMgY29udHJvbGxlciB0aGF0IGhvc3RzIHRoZSBncmFwaCBleGVjdXRpb24gZW5naW5lIHNlcnZlci1zaWRlLFxuICogc3RyZWFtcyBldmVudHMgdmlhIFNTRSwgYW5kIHBlcnNpc3RzIHJlc3VsdHMgZm9yIGxhdGVyIHJldHJpZXZhbC5cbiAqL1xuQENvbnRyb2xsZXIoXCJncmFwaFwiKVxuZXhwb3J0IGNsYXNzIEdyYXBoRXhlY3V0aW9uQ29udHJvbGxlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8R3JhcGhFeGVjdXRpb25FdmVudD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVuZ2luZTogR3JhcGhFeGVjdXRpb25FbmdpbmUsXG4gICAgQEluamVjdChHUkFQSF9SRVNVTFRfUkVQT1NJVE9SWSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3VsdFJlcG9zaXRvcnk6IEdyYXBoRXhlY3V0aW9uUmVzdWx0UmVwb3NpdG9yeUluc3RhbmNlXG4gICkge1xuICAgIHRoaXMuZW5naW5lLm9ic2VydmUoe1xuICAgICAgcmVmcmVzaDogYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoZXZlbnQpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBncmFwaCBleGVjdXRpb24gc2VydmVyLXNpZGUsIHBlcnNpc3RzIHRoZSByZXN1bHQsIGFuZCByZXR1cm5zXG4gICAqIGEgc3VtbWFyeSBjb250YWluaW5nIHRoZSBgcnVuSWRgLCBgc3RhdHVzYCwgYW5kIGBvdXRwdXRzYC5cbiAgICovXG4gIEBQb3N0KFwiZXhlY3V0ZVwiKVxuICBhc3luYyBleGVjdXRlKFxuICAgIEBCb2R5KCkgYm9keTogR3JhcGhFeGVjdXRlUGF5bG9hZFxuICApOiBQcm9taXNlPEdyYXBoRXhlY3V0ZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5lbmdpbmUuZXhlY3V0ZShib2R5LndvcmtmbG93LCBib2R5LmlucHV0cyA/PyB7fSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5yZXN1bHRSZXBvc2l0b3J5LmNyZWF0ZSh0b1Jlc3VsdE1vZGVsKHJlc3VsdCkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gcGVyc2lzdGVuY2UgZmFpbHVyZXMgbXVzdCBub3QgbWFzayBhIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIHJlc3VsdFxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBydW5JZDogcmVzdWx0LnJ1bklkLFxuICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgb3V0cHV0czogcmVzdWx0Lm91dHB1dHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTU0UgZW5kcG9pbnQgdGhhdCBzdHJlYW1zIGdyYXBoIGV4ZWN1dGlvbiBldmVudHMuXG4gICAqXG4gICAqIEV2ZW50cyBhcmUgc2VyaWFsaXplZCBhcyBgW21vZGVsTmFtZSwgb3BlcmF0aW9uLCBpZCwgcGF5bG9hZF1gIHRvIG1hdGNoXG4gICAqIHRoZSBmb3JtYXQgZXhwZWN0ZWQgYnkgZm9yLWh0dHAncyBgU2VydmVyRXZlbnRDb25uZWN0b3JgLlxuICAgKi9cbiAgQFNzZShcImV2ZW50c1wiKVxuICBldmVudHMoKTogT2JzZXJ2YWJsZTxNZXNzYWdlRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5ldmVudFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKGV2ZW50OiBHcmFwaEV4ZWN1dGlvbkV2ZW50KTogTWVzc2FnZUV2ZW50ID0+ICh7XG4gICAgICAgICAgdHlwZTogXCJtZXNzYWdlXCIsXG4gICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgXCJncmFwaFwiLFxuICAgICAgICAgICAgZXZlbnQudHlwZSxcbiAgICAgICAgICAgIGV2ZW50LnJ1bklkLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogZXZlbnQuaWQsXG4gICAgICAgICAgICAgIHNlcXVlbmNlOiBldmVudC5zZXF1ZW5jZSxcbiAgICAgICAgICAgICAgdHlwZTogZXZlbnQudHlwZSxcbiAgICAgICAgICAgICAgcnVuSWQ6IGV2ZW50LnJ1bklkLFxuICAgICAgICAgICAgICBwYXJlbnRSdW5JZDogZXZlbnQucGFyZW50UnVuSWQsXG4gICAgICAgICAgICAgIHdvcmtmbG93SWQ6IGV2ZW50LndvcmtmbG93SWQsXG4gICAgICAgICAgICAgIG5vZGVJZDogZXZlbnQubm9kZUlkLFxuICAgICAgICAgICAgICBlZGdlSWQ6IGV2ZW50LmVkZ2VJZCxcbiAgICAgICAgICAgICAgcG9ydDogZXZlbnQucG9ydCxcbiAgICAgICAgICAgICAgaXRlcmF0aW9uOiBldmVudC5pdGVyYXRpb24sXG4gICAgICAgICAgICAgIHBhdGg6IGV2ZW50LnBhdGgsXG4gICAgICAgICAgICAgIHN0YXR1czogZXZlbnQuc3RhdHVzLFxuICAgICAgICAgICAgICBwYXlsb2FkOiBldmVudC5wYXlsb2FkLFxuICAgICAgICAgICAgICBlcnJvcjogZXZlbnQuZXJyb3IsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgcGVyc2lzdGVkIGdyYXBoIGV4ZWN1dGlvbiByZXN1bHQgYnkgaXRzIGBydW5JZGAuXG4gICAqXG4gICAqIEB0aHJvd3Mge05vdEZvdW5kRXhjZXB0aW9ufSB3aGVuIG5vIHJlc3VsdCBpcyBzdG9yZWQgZm9yIHRoZSBnaXZlbiBgcnVuSWRgLlxuICAgKi9cbiAgQEdldChcInJlc3VsdHMvOnJ1bklkXCIpXG4gIGFzeW5jIGdldFJlc3VsdChAUGFyYW0oXCJydW5JZFwiKSBydW5JZDogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgbGV0IG1vZGVsOiBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsIHwgbnVsbDtcbiAgICB0cnkge1xuICAgICAgbW9kZWwgPSAoYXdhaXQgdGhpcy5yZXN1bHRSZXBvc2l0b3J5LnJlYWQoXG4gICAgICAgIHJ1bklkXG4gICAgICApKSBhcyBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsIHwgbnVsbDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIG1vZGVsID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gZnJvbVJlc3VsdE1vZGVsKG1vZGVsKTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKFxuICAgICAgICBgTm8gZ3JhcGggZXhlY3V0aW9uIHJlc3VsdCBmb3VuZCBmb3IgcnVuSWQgJyR7cnVuSWR9J2BcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25Db250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiR3JhcGhFeGVjdXRpb25Db250cm9sbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUk7SUFDakYsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3SCxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxRQUFRLEtBQUssVUFBVTtRQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDOztRQUMxSCxLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQUUsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFD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LG1CQUFtQixFQUFFLENBQUMsK0JBQW9CLEVBQUUsTUFBTSxDQUFDLENBQUM7Q0FDbEUsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0FBRTdCLHM3VUFBczdVIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbnZhciBfX3BhcmFtID0gKHRoaXMgJiYgdGhpcy5fX3BhcmFtKSB8fCBmdW5jdGlvbiAocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59O1xuLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9uZXN0L2dyYXBoL0dyYXBoRXhlY3V0aW9uQ29udHJvbGxlclxuICogQHN1bW1hcnkgTmVzdEpTIGNvbnRyb2xsZXIgYnJpZGdpbmcgdGhlIGdyYXBoIGV4ZWN1dGlvbiBlbmdpbmUgdG8gUkVTVCArIFNTRS5cbiAqIEBkZXNjcmlwdGlvbiBFeHBvc2VzIHRocmVlIGVuZHBvaW50czpcbiAqIC0gYFBPU1QgL2dyYXBoL2V4ZWN1dGVgIOKAlCB0cmlnZ2VycyB7QGxpbmsgR3JhcGhFeGVjdXRpb25FbmdpbmUuZXhlY3V0ZX0sIHBlcnNpc3RzIHRoZSByZXN1bHQgdmlhIGEgRGVjYWYgcmVwb3NpdG9yeSwgYW5kIHJldHVybnMgYHsgcnVuSWQsIHN0YXR1cywgb3V0cHV0cyB9YC5cbiAqIC0gYEdFVCAvZ3JhcGgvZXZlbnRzYCDigJQgU1NFIGVuZHBvaW50IHN0cmVhbWluZyB7QGxpbmsgR3JhcGhFeGVjdXRpb25FdmVudH1zIGFzIGBbbW9kZWxOYW1lLCBvcGVyYXRpb24sIGlkLCBwYXlsb2FkXWAgdHVwbGVzIChjb21wYXRpYmxlIHdpdGggZm9yLWh0dHAncyBgU2VydmVyRXZlbnRDb25uZWN0b3JgKS5cbiAqIC0gYEdFVCAvZ3JhcGgvcmVzdWx0cy86cnVuSWRgIOKAlCByZXRyaWV2ZXMgYSBwZXJzaXN0ZWQge0BsaW5rIEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWx9IGZyb20gdGhlIHJlcG9zaXRvcnkuXG4gKlxuICogVGhpcyBpcyB0aGUgcHJvZHVjdGlvbiBwYXR0ZXJuOiBmb3ItbmVzdCBob3N0cyB0aGUgZW5naW5lLCBmb3ItYW5ndWxhciBjb25zdW1lcyBldmVudHMgb3ZlciB0aGUgbmV0d29yayB2aWEgU1NFIGFuZCBmZXRjaGVzIHBlcnNpc3RlZCByZXN1bHRzIHZpYSBSRVNULlxuICovXG5pbXBvcnQgeyBDb250cm9sbGVyLCBQb3N0LCBHZXQsIEJvZHksIFBhcmFtLCBTc2UsIEluamVjdCwgTm90Rm91bmRFeGNlcHRpb24sIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgR3JhcGhFeGVjdXRpb25FbmdpbmUsIH0gZnJvbSBcIi4vLi4vLi4vZ3JhcGgvaW5kZXguanNcIjtcbmltcG9ydCB7IGZyb21SZXN1bHRNb2RlbCwgdG9SZXN1bHRNb2RlbCwgfSBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvblJlc3VsdFJlcG9zaXRvcnkuanNcIjtcbi8qKlxuICogTmVzdEpTIGluamVjdGlvbiB0b2tlbiBmb3IgdGhlIGdyYXBoIGV4ZWN1dGlvbiByZXN1bHQgcmVwb3NpdG9yeS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdSQVBIX1JFU1VMVF9SRVBPU0lUT1JZID0gXCJHUkFQSF9SRVNVTFRfUkVQT1NJVE9SWVwiO1xuLyoqXG4gKiBOZXN0SlMgY29udHJvbGxlciB0aGF0IGhvc3RzIHRoZSBncmFwaCBleGVjdXRpb24gZW5naW5lIHNlcnZlci1zaWRlLFxuICogc3RyZWFtcyBldmVudHMgdmlhIFNTRSwgYW5kIHBlcnNpc3RzIHJlc3VsdHMgZm9yIGxhdGVyIHJldHJpZXZhbC5cbiAqL1xubGV0IEdyYXBoRXhlY3V0aW9uQ29udHJvbGxlciA9IGNsYXNzIEdyYXBoRXhlY3V0aW9uQ29udHJvbGxlciB7XG4gICAgY29uc3RydWN0b3IoZW5naW5lLCByZXN1bHRSZXBvc2l0b3J5KSB7XG4gICAgICAgIHRoaXMuZW5naW5lID0gZW5naW5lO1xuICAgICAgICB0aGlzLnJlc3VsdFJlcG9zaXRvcnkgPSByZXN1bHRSZXBvc2l0b3J5O1xuICAgICAgICB0aGlzLmV2ZW50U3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuZW5naW5lLm9ic2VydmUoe1xuICAgICAgICAgICAgcmVmcmVzaDogYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudFN1YmplY3QubmV4dChldmVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgZ3JhcGggZXhlY3V0aW9uIHNlcnZlci1zaWRlLCBwZXJzaXN0cyB0aGUgcmVzdWx0LCBhbmQgcmV0dXJuc1xuICAgICAqIGEgc3VtbWFyeSBjb250YWluaW5nIHRoZSBgcnVuSWRgLCBgc3RhdHVzYCwgYW5kIGBvdXRwdXRzYC5cbiAgICAgKi9cbiAgICBhc3luYyBleGVjdXRlKGJvZHkpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5lbmdpbmUuZXhlY3V0ZShib2R5LndvcmtmbG93LCBib2R5LmlucHV0cyA/PyB7fSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc3VsdFJlcG9zaXRvcnkuY3JlYXRlKHRvUmVzdWx0TW9kZWwocmVzdWx0KSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgLy8gcGVyc2lzdGVuY2UgZmFpbHVyZXMgbXVzdCBub3QgbWFzayBhIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIHJlc3VsdFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBydW5JZDogcmVzdWx0LnJ1bklkLFxuICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgb3V0cHV0czogcmVzdWx0Lm91dHB1dHMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNTRSBlbmRwb2ludCB0aGF0IHN0cmVhbXMgZ3JhcGggZXhlY3V0aW9uIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEV2ZW50cyBhcmUgc2VyaWFsaXplZCBhcyBgW21vZGVsTmFtZSwgb3BlcmF0aW9uLCBpZCwgcGF5bG9hZF1gIHRvIG1hdGNoXG4gICAgICogdGhlIGZvcm1hdCBleHBlY3RlZCBieSBmb3ItaHR0cCdzIGBTZXJ2ZXJFdmVudENvbm5lY3RvcmAuXG4gICAgICovXG4gICAgZXZlbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ldmVudFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShtYXAoKGV2ZW50KSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJtZXNzYWdlXCIsXG4gICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShbXG4gICAgICAgICAgICAgICAgXCJncmFwaFwiLFxuICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUsXG4gICAgICAgICAgICAgICAgZXZlbnQucnVuSWQsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZDogZXZlbnQuaWQsXG4gICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlOiBldmVudC5zZXF1ZW5jZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZXZlbnQudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgcnVuSWQ6IGV2ZW50LnJ1bklkLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRSdW5JZDogZXZlbnQucGFyZW50UnVuSWQsXG4gICAgICAgICAgICAgICAgICAgIHdvcmtmbG93SWQ6IGV2ZW50LndvcmtmbG93SWQsXG4gICAgICAgICAgICAgICAgICAgIG5vZGVJZDogZXZlbnQubm9kZUlkLFxuICAgICAgICAgICAgICAgICAgICBlZGdlSWQ6IGV2ZW50LmVkZ2VJZCxcbiAgICAgICAgICAgICAgICAgICAgcG9ydDogZXZlbnQucG9ydCxcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBldmVudC5pdGVyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGV2ZW50LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXZlbnQuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBldmVudC5wYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXZlbnQuZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICB9KSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSBwZXJzaXN0ZWQgZ3JhcGggZXhlY3V0aW9uIHJlc3VsdCBieSBpdHMgYHJ1bklkYC5cbiAgICAgKlxuICAgICAqIEB0aHJvd3Mge05vdEZvdW5kRXhjZXB0aW9ufSB3aGVuIG5vIHJlc3VsdCBpcyBzdG9yZWQgZm9yIHRoZSBnaXZlbiBgcnVuSWRgLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFJlc3VsdChydW5JZCkge1xuICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtb2RlbCA9IChhd2FpdCB0aGlzLnJlc3VsdFJlcG9zaXRvcnkucmVhZChydW5JZCkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIG1vZGVsID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBmcm9tUmVzdWx0TW9kZWwobW9kZWwpO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKGBObyBncmFwaCBleGVjdXRpb24gcmVzdWx0IGZvdW5kIGZvciBydW5JZCAnJHtydW5JZH0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59O1xuX19kZWNvcmF0ZShbXG4gICAgUG9zdChcImV4ZWN1dGVcIiksXG4gICAgX19wYXJhbSgwLCBCb2R5KCkpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnJldHVybnR5cGVcIiwgUHJvbWlzZSlcbl0sIEdyYXBoRXhlY3V0aW9uQ29udHJvbGxlci5wcm90b3R5cGUsIFwiZXhlY3V0ZVwiLCBudWxsKTtcbl9fZGVjb3JhdGUoW1xuICAgIFNzZShcImV2ZW50c1wiKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgRnVuY3Rpb24pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpyZXR1cm50eXBlXCIsIE9ic2VydmFibGUpXG5dLCBHcmFwaEV4ZWN1dGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLCBcImV2ZW50c1wiLCBudWxsKTtcbl9fZGVjb3JhdGUoW1xuICAgIEdldChcInJlc3VsdHMvOnJ1bklkXCIpLFxuICAgIF9fcGFyYW0oMCwgUGFyYW0oXCJydW5JZFwiKSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW1N0cmluZ10pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCBQcm9taXNlKVxuXSwgR3JhcGhFeGVjdXRpb25Db250cm9sbGVyLnByb3RvdHlwZSwgXCJnZXRSZXN1bHRcIiwgbnVsbCk7XG5HcmFwaEV4ZWN1dGlvbkNvbnRyb2xsZXIgPSBfX2RlY29yYXRlKFtcbiAgICBDb250cm9sbGVyKFwiZ3JhcGhcIiksXG4gICAgX19wYXJhbSgxLCBJbmplY3QoR1JBUEhfUkVTVUxUX1JFUE9TSVRPUlkpKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW0dyYXBoRXhlY3V0aW9uRW5naW5lLCBPYmplY3RdKVxuXSwgR3JhcGhFeGVjdXRpb25Db250cm9sbGVyKTtcbmV4cG9ydCB7IEdyYXBoRXhlY3V0aW9uQ29udHJvbGxlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUjNKaGNHaEZlR1ZqZFhScGIyNURiMjUwY205c2JHVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2TGk0dkxpNHZjM0pqTDI1bGMzUXZaM0poY0dndlIzSmhjR2hGZUdWamRYUnBiMjVEYjI1MGNtOXNiR1Z5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN096dEJRVUZCT3pzN096czdPenM3UjBGVFJ6dEJRVU5JTEU5QlFVOHNSVUZEVEN4VlFVRlZMRVZCUTFZc1NVRkJTU3hGUVVOS0xFZEJRVWNzUlVGRFNDeEpRVUZKTEVWQlEwb3NTMEZCU3l4RlFVTk1MRWRCUVVjc1JVRkZTQ3hOUVVGTkxFVkJRMDRzYVVKQlFXbENMRWRCUTJ4Q0xFMUJRVTBzWjBKQlFXZENMRU5CUVVNN1FVRkRlRUlzVDBGQlR5eEZRVUZGTEU5QlFVOHNSVUZCUlN4VlFVRlZMRVZCUVVVc1RVRkJUU3hOUVVGTkxFTkJRVU03UVVGRE0wTXNUMEZCVHl4RlFVRkZMRWRCUVVjc1JVRkJSU3hOUVVGTkxHZENRVUZuUWl4RFFVRkRPMEZCUlhKRExFOUJRVThzUlVGRFRDeHZRa0ZCYjBJc1IwRkhja0lzSzBKQlFXOUNPMEZCUjNKQ0xFOUJRVThzUlVGRFRDeGxRVUZsTEVWQlEyWXNZVUZCWVN4SFFVVmtMRFJEUVVGNVF6dEJRVWN4UXpzN1IwRkZSenRCUVVOSUxFMUJRVTBzUTBGQlF5eE5RVUZOTEhWQ1FVRjFRaXhIUVVGSExIbENRVUY1UWl4RFFVRkRPMEZCYlVKcVJUczdPMGRCUjBjN1FVRkZTU3hKUVVGTkxIZENRVUYzUWl4SFFVRTVRaXhOUVVGTkxIZENRVUYzUWp0SlFVZHVReXhaUVVOdFFpeE5RVUUwUWl4RlFVVTNReXhuUWtGQmVVVTdVVUZHZUVRc1YwRkJUU3hIUVVGT0xFMUJRVTBzUTBGQmMwSTdVVUZGTlVJc2NVSkJRV2RDTEVkQlFXaENMR2RDUVVGblFpeERRVUYzUXp0UlFVd3hSQ3hwUWtGQldTeEhRVUZITEVsQlFVa3NUMEZCVHl4RlFVRjFRaXhEUVVGRE8xRkJUMnBGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRE8xbEJRMnhDTEU5QlFVOHNSVUZCUlN4TFFVRkxMRVZCUVVVc1MwRkJTeXhGUVVGRkxFVkJRVVU3WjBKQlEzWkNMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMWxCUTJoRExFTkJRVU03VTBGRFJpeERRVUZETEVOQlFVTTdTVUZEVEN4RFFVRkRPMGxCUlVRN096dFBRVWRITzBsQlJVY3NRVUZCVGl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVOSUxFbEJRWGxDTzFGQlJXcERMRTFCUVUwc1RVRkJUU3hIUVVGSExFMUJRVTBzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJSVE5GTEVsQlFVa3NRMEZCUXp0WlFVTklMRTFCUVUwc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTTFSQ3hEUVVGRE8xRkJRVU1zVFVGQlRTeERRVUZETzFsQlExQXNiVVZCUVcxRk8xRkJRM0pGTEVOQlFVTTdVVUZGUkN4UFFVRlBPMWxCUTB3c1MwRkJTeXhGUVVGRkxFMUJRVTBzUTBGQlF5eExRVUZMTzFsQlEyNUNMRTFCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVU1zVFVGQlRUdFpRVU55UWl4UFFVRlBMRVZCUVVVc1RVRkJUU3hEUVVGRExFOUJRVTg3VTBGRGVFSXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVWSUxFMUJRVTA3VVVGRFNpeFBRVUZQTEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1dVRkJXU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVU14UXl4SFFVRkhMRU5CUTBRc1EwRkJReXhMUVVFd1FpeEZRVUZuUWl4RlFVRkZMRU5CUVVNc1EwRkJRenRaUVVNM1F5eEpRVUZKTEVWQlFVVXNVMEZCVXp0WlFVTm1MRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETzJkQ1FVTnVRaXhQUVVGUE8yZENRVU5RTEV0QlFVc3NRMEZCUXl4SlFVRkpPMmRDUVVOV0xFdEJRVXNzUTBGQlF5eExRVUZMTzJkQ1FVTllPMjlDUVVORkxFVkJRVVVzUlVGQlJTeExRVUZMTEVOQlFVTXNSVUZCUlR0dlFrRkRXaXhSUVVGUkxFVkJRVVVzUzBGQlN5eERRVUZETEZGQlFWRTdiMEpCUTNoQ0xFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTXNTVUZCU1R0dlFrRkRhRUlzUzBGQlN5eEZRVUZGTEV0QlFVc3NRMEZCUXl4TFFVRkxPMjlDUVVOc1FpeFhRVUZYTEVWQlFVVXNTMEZCU3l4RFFVRkRMRmRCUVZjN2IwSkJRemxDTEZWQlFWVXNSVUZCUlN4TFFVRkxMRU5CUVVNc1ZVRkJWVHR2UWtGRE5VSXNUVUZCVFN4RlFVRkZMRXRCUVVzc1EwRkJReXhOUVVGTk8yOUNRVU53UWl4TlFVRk5MRVZCUVVVc1MwRkJTeXhEUVVGRExFMUJRVTA3YjBKQlEzQkNMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU1zU1VGQlNUdHZRa0ZEYUVJc1UwRkJVeXhGUVVGRkxFdEJRVXNzUTBGQlF5eFRRVUZUTzI5Q1FVTXhRaXhKUVVGSkxFVkJRVVVzUzBGQlN5eERRVUZETEVsQlFVazdiMEpCUTJoQ0xFMUJRVTBzUlVGQlJTeExRVUZMTEVOQlFVTXNUVUZCVFR0dlFrRkRjRUlzVDBGQlR5eEZRVUZGTEV0QlFVc3NRMEZCUXl4UFFVRlBPMjlDUVVOMFFpeExRVUZMTEVWQlFVVXNTMEZCU3l4RFFVRkRMRXRCUVVzN2IwSkJRMnhDTEZOQlFWTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVGRExGZEJRVmNzUlVGQlJUdHBRa0ZEZWtNN1lVRkRSaXhEUVVGRE8xTkJRMGdzUTBGQlF5eERRVU5JTEVOQlEwWXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZSRHM3T3p0UFFVbEhPMGxCUlVjc1FVRkJUaXhMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZwUWl4TFFVRmhPMUZCUXpORExFbEJRVWtzUzBGQmRVTXNRMEZCUXp0UlFVTTFReXhKUVVGSkxFTkJRVU03V1VGRFNDeExRVUZMTEVkQlFVY3NRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SlFVRkpMRU5CUTNaRExFdEJRVXNzUTBGRFRpeERRVUZ4UXl4RFFVRkRPMUZCUTNwRExFTkJRVU03VVVGQlF5eE5RVUZOTEVOQlFVTTdXVUZEVUN4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMllzUTBGQlF6dFJRVU5FTEUxQlFVMHNUVUZCVFN4SFFVRkhMR1ZCUVdVc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU4wUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03V1VGRFdpeE5RVUZOTEVsQlFVa3NhVUpCUVdsQ0xFTkJRM3BDTERoRFFVRTRReXhMUVVGTExFZEJRVWNzUTBGRGRrUXNRMEZCUXp0UlFVTktMRU5CUVVNN1VVRkRSQ3hQUVVGUExFMUJRVTBzUTBGQlF6dEpRVU5vUWl4RFFVRkRPME5CUTBZc1EwRkJRVHRCUVdoR1R6dEpRVVJNTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNN1NVRkZZaXhYUVVGQkxFbEJRVWtzUlVGQlJTeERRVUZCT3pzN08zVkVRV1ZTTzBGQlUwUTdTVUZFUXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hEUVVGRE96czdiME5CUTBvc1ZVRkJWVHR6UkVFNFFtNUNPMEZCVVVzN1NVRkVUQ3hIUVVGSExFTkJRVU1zWjBKQlFXZENMRU5CUVVNN1NVRkRUQ3hYUVVGQkxFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUVRzN096dDVSRUZuUWpsQ08wRkJia2RWTEhkQ1FVRjNRanRKUVVSd1F5eFZRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRPMGxCVFdZc1YwRkJRU3hOUVVGTkxFTkJRVU1zZFVKQlFYVkNMRU5CUVVNc1EwRkJRVHR4UTBGRVVDeHZRa0ZCYjBJN1IwRktjRU1zZDBKQlFYZENMRU5CYjBkd1F5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRRzF2WkhWc1pTQnBiblJsWjNKaGRHbHZibk12Ym1WemRDOW5jbUZ3YUM5SGNtRndhRVY0WldOMWRHbHZia052Ym5SeWIyeHNaWEpjYmlBcUlFQnpkVzF0WVhKNUlFNWxjM1JLVXlCamIyNTBjbTlzYkdWeUlHSnlhV1JuYVc1bklIUm9aU0JuY21Gd2FDQmxlR1ZqZFhScGIyNGdaVzVuYVc1bElIUnZJRkpGVTFRZ0t5QlRVMFV1WEc0Z0tpQkFaR1Z6WTNKcGNIUnBiMjRnUlhod2IzTmxjeUIwYUhKbFpTQmxibVJ3YjJsdWRITTZYRzRnS2lBdElHQlFUMU5VSUM5bmNtRndhQzlsZUdWamRYUmxZQ0RpZ0pRZ2RISnBaMmRsY25NZ2UwQnNhVzVySUVkeVlYQm9SWGhsWTNWMGFXOXVSVzVuYVc1bExtVjRaV04xZEdWOUxDQndaWEp6YVhOMGN5QjBhR1VnY21WemRXeDBJSFpwWVNCaElFUmxZMkZtSUhKbGNHOXphWFJ2Y25rc0lHRnVaQ0J5WlhSMWNtNXpJR0I3SUhKMWJrbGtMQ0J6ZEdGMGRYTXNJRzkxZEhCMWRITWdmV0F1WEc0Z0tpQXRJR0JIUlZRZ0wyZHlZWEJvTDJWMlpXNTBjMkFnNG9DVUlGTlRSU0JsYm1Sd2IybHVkQ0J6ZEhKbFlXMXBibWNnZTBCc2FXNXJJRWR5WVhCb1JYaGxZM1YwYVc5dVJYWmxiblI5Y3lCaGN5QmdXMjF2WkdWc1RtRnRaU3dnYjNCbGNtRjBhVzl1TENCcFpDd2djR0Y1Ykc5aFpGMWdJSFIxY0d4bGN5QW9ZMjl0Y0dGMGFXSnNaU0IzYVhSb0lHWnZjaTFvZEhSd0ozTWdZRk5sY25abGNrVjJaVzUwUTI5dWJtVmpkRzl5WUNrdVhHNGdLaUF0SUdCSFJWUWdMMmR5WVhCb0wzSmxjM1ZzZEhNdk9uSjFia2xrWUNEaWdKUWdjbVYwY21sbGRtVnpJR0VnY0dWeWMybHpkR1ZrSUh0QWJHbHVheUJIY21Gd2FFVjRaV04xZEdsdmJsSmxjM1ZzZEUxdlpHVnNmU0JtY205dElIUm9aU0J5WlhCdmMybDBiM0o1TGx4dUlDcGNiaUFxSUZSb2FYTWdhWE1nZEdobElIQnliMlIxWTNScGIyNGdjR0YwZEdWeWJqb2dabTl5TFc1bGMzUWdhRzl6ZEhNZ2RHaGxJR1Z1WjJsdVpTd2dabTl5TFdGdVozVnNZWElnWTI5dWMzVnRaWE1nWlhabGJuUnpJRzkyWlhJZ2RHaGxJRzVsZEhkdmNtc2dkbWxoSUZOVFJTQmhibVFnWm1WMFkyaGxjeUJ3WlhKemFYTjBaV1FnY21WemRXeDBjeUIyYVdFZ1VrVlRWQzVjYmlBcUwxeHVhVzF3YjNKMElIdGNiaUFnUTI5dWRISnZiR3hsY2l4Y2JpQWdVRzl6ZEN4Y2JpQWdSMlYwTEZ4dUlDQkNiMlI1TEZ4dUlDQlFZWEpoYlN4Y2JpQWdVM05sTEZ4dUlDQk5aWE56WVdkbFJYWmxiblFzWEc0Z0lFbHVhbVZqZEN4Y2JpQWdUbTkwUm05MWJtUkZlR05sY0hScGIyNHNYRzU5SUdaeWIyMGdYQ0pBYm1WemRHcHpMMk52YlcxdmJsd2lPMXh1YVcxd2IzSjBJSHNnVTNWaWFtVmpkQ3dnVDJKelpYSjJZV0pzWlNCOUlHWnliMjBnWENKeWVHcHpYQ0k3WEc1cGJYQnZjblFnZXlCdFlYQWdmU0JtY205dElGd2ljbmhxY3k5dmNHVnlZWFJ2Y25OY0lqdGNibHh1YVcxd2IzSjBJSHRjYmlBZ1IzSmhjR2hGZUdWamRYUnBiMjVGYm1kcGJtVXNYRzRnSUhSNWNHVWdSM0poY0doRmVHVmpkWFJwYjI1RmRtVnVkQ3hjYmlBZ2RIbHdaU0JIY21Gd2FFVjRaV04xZEdsdmJsWmhiSFZsY3l4Y2JuMGdabkp2YlNCY0lpNHVMeTR1TDJkeVlYQm9YQ0k3WEc1cGJYQnZjblFnZEhsd1pTQjdJRWR5WVhCb1YyOXlhMlpzYjNkRVpXWnBibWwwYVc5dUlIMGdabkp2YlNCY0lrQmtaV05oWmkxMGN5OTFhUzFrWldOdmNtRjBiM0p6TDJkeVlYQm9YQ0k3WEc1Y2JtbHRjRzl5ZENCN1hHNGdJR1p5YjIxU1pYTjFiSFJOYjJSbGJDeGNiaUFnZEc5U1pYTjFiSFJOYjJSbGJDeGNiaUFnZEhsd1pTQkhjbUZ3YUVWNFpXTjFkR2x2YmxKbGMzVnNkRkpsY0c5emFYUnZjbmxKYm5OMFlXNWpaU3hjYm4wZ1puSnZiU0JjSWk0dlIzSmhjR2hGZUdWamRYUnBiMjVTWlhOMWJIUlNaWEJ2YzJsMGIzSjVYQ0k3WEc1cGJYQnZjblFnZEhsd1pTQjdJRWR5WVhCb1JYaGxZM1YwYVc5dVVtVnpkV3gwVFc5a1pXd2dmU0JtY205dElGd2lMaTlIY21Gd2FFVjRaV04xZEdsdmJsSmxjM1ZzZEUxdlpHVnNYQ0k3WEc1Y2JpOHFLbHh1SUNvZ1RtVnpkRXBUSUdsdWFtVmpkR2x2YmlCMGIydGxiaUJtYjNJZ2RHaGxJR2R5WVhCb0lHVjRaV04xZEdsdmJpQnlaWE4xYkhRZ2NtVndiM05wZEc5eWVTNWNiaUFxTDF4dVpYaHdiM0owSUdOdmJuTjBJRWRTUVZCSVgxSkZVMVZNVkY5U1JWQlBVMGxVVDFKWklEMGdYQ0pIVWtGUVNGOVNSVk5WVEZSZlVrVlFUMU5KVkU5U1dWd2lPMXh1WEc0dktpcGNiaUFxSUZCaGVXeHZZV1FnWm05eUlIUm9aU0JnVUU5VFZDQXZaM0poY0dndlpYaGxZM1YwWldBZ1pXNWtjRzlwYm5RdVhHNGdLaTljYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnUjNKaGNHaEZlR1ZqZFhSbFVHRjViRzloWkNCN1hHNGdJSGR2Y210bWJHOTNPaUJIY21Gd2FGZHZjbXRtYkc5M1JHVm1hVzVwZEdsdmJqdGNiaUFnYVc1d2RYUnpPaUJIY21Gd2FFVjRaV04xZEdsdmJsWmhiSFZsY3p0Y2JuMWNibHh1THlvcVhHNGdLaUJTWlhOd2IyNXpaU0J6YUdGd1pTQm1iM0lnZEdobElHQlFUMU5VSUM5bmNtRndhQzlsZUdWamRYUmxZQ0JsYm1Sd2IybHVkQzVjYmlBcUwxeHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQkhjbUZ3YUVWNFpXTjFkR1ZTWlhOd2IyNXpaU0I3WEc0Z0lISjFia2xrT2lCemRISnBibWM3WEc0Z0lITjBZWFIxY3pvZ2MzUnlhVzVuTzF4dUlDQnZkWFJ3ZFhSek9pQlNaV052Y21ROGMzUnlhVzVuTENCMWJtdHViM2R1UGp0Y2JuMWNibHh1THlvcVhHNGdLaUJPWlhOMFNsTWdZMjl1ZEhKdmJHeGxjaUIwYUdGMElHaHZjM1J6SUhSb1pTQm5jbUZ3YUNCbGVHVmpkWFJwYjI0Z1pXNW5hVzVsSUhObGNuWmxjaTF6YVdSbExGeHVJQ29nYzNSeVpXRnRjeUJsZG1WdWRITWdkbWxoSUZOVFJTd2dZVzVrSUhCbGNuTnBjM1J6SUhKbGMzVnNkSE1nWm05eUlHeGhkR1Z5SUhKbGRISnBaWFpoYkM1Y2JpQXFMMXh1UUVOdmJuUnliMnhzWlhJb1hDSm5jbUZ3YUZ3aUtWeHVaWGh3YjNKMElHTnNZWE56SUVkeVlYQm9SWGhsWTNWMGFXOXVRMjl1ZEhKdmJHeGxjaUI3WEc0Z0lIQnlhWFpoZEdVZ2NtVmhaRzl1YkhrZ1pYWmxiblJUZFdKcVpXTjBJRDBnYm1WM0lGTjFZbXBsWTNROFIzSmhjR2hGZUdWamRYUnBiMjVGZG1WdWRENG9LVHRjYmx4dUlDQmpiMjV6ZEhKMVkzUnZjaWhjYmlBZ0lDQndjbWwyWVhSbElISmxZV1J2Ym14NUlHVnVaMmx1WlRvZ1IzSmhjR2hGZUdWamRYUnBiMjVGYm1kcGJtVXNYRzRnSUNBZ1FFbHVhbVZqZENoSFVrRlFTRjlTUlZOVlRGUmZVa1ZRVDFOSlZFOVNXU2xjYmlBZ0lDQndjbWwyWVhSbElISmxZV1J2Ym14NUlISmxjM1ZzZEZKbGNHOXphWFJ2Y25rNklFZHlZWEJvUlhobFkzVjBhVzl1VW1WemRXeDBVbVZ3YjNOcGRHOXllVWx1YzNSaGJtTmxYRzRnSUNrZ2UxeHVJQ0FnSUhSb2FYTXVaVzVuYVc1bExtOWljMlZ5ZG1Vb2UxeHVJQ0FnSUNBZ2NtVm1jbVZ6YURvZ1lYTjVibU1nS0dWMlpXNTBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WlhabGJuUlRkV0pxWldOMExtNWxlSFFvWlhabGJuUXBPMXh1SUNBZ0lDQWdmU3hjYmlBZ0lDQjlLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCVWNtbG5aMlZ5Y3lCbmNtRndhQ0JsZUdWamRYUnBiMjRnYzJWeWRtVnlMWE5wWkdVc0lIQmxjbk5wYzNSeklIUm9aU0J5WlhOMWJIUXNJR0Z1WkNCeVpYUjFjbTV6WEc0Z0lDQXFJR0VnYzNWdGJXRnllU0JqYjI1MFlXbHVhVzVuSUhSb1pTQmdjblZ1U1dSZ0xDQmdjM1JoZEhWellDd2dZVzVrSUdCdmRYUndkWFJ6WUM1Y2JpQWdJQ292WEc0Z0lFQlFiM04wS0Z3aVpYaGxZM1YwWlZ3aUtWeHVJQ0JoYzNsdVl5QmxlR1ZqZFhSbEtGeHVJQ0FnSUVCQ2IyUjVLQ2tnWW05a2VUb2dSM0poY0doRmVHVmpkWFJsVUdGNWJHOWhaRnh1SUNBcE9pQlFjbTl0YVhObFBFZHlZWEJvUlhobFkzVjBaVkpsYzNCdmJuTmxQaUI3WEc0Z0lDQWdZMjl1YzNRZ2NtVnpkV3gwSUQwZ1lYZGhhWFFnZEdocGN5NWxibWRwYm1VdVpYaGxZM1YwWlNoaWIyUjVMbmR2Y210bWJHOTNMQ0JpYjJSNUxtbHVjSFYwY3lBL1B5QjdmU2s3WEc1Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ1lYZGhhWFFnZEdocGN5NXlaWE4xYkhSU1pYQnZjMmwwYjNKNUxtTnlaV0YwWlNoMGIxSmxjM1ZzZEUxdlpHVnNLSEpsYzNWc2RDa3BPMXh1SUNBZ0lIMGdZMkYwWTJnZ2UxeHVJQ0FnSUNBZ0x5OGdjR1Z5YzJsemRHVnVZMlVnWm1GcGJIVnlaWE1nYlhWemRDQnViM1FnYldGemF5QmhJSE4xWTJObGMzTm1kV3dnWlhobFkzVjBhVzl1SUhKbGMzVnNkRnh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNCeWRXNUpaRG9nY21WemRXeDBMbkoxYmtsa0xGeHVJQ0FnSUNBZ2MzUmhkSFZ6T2lCeVpYTjFiSFF1YzNSaGRIVnpMRnh1SUNBZ0lDQWdiM1YwY0hWMGN6b2djbVZ6ZFd4MExtOTFkSEIxZEhNc1hHNGdJQ0FnZlR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlRVMFVnWlc1a2NHOXBiblFnZEdoaGRDQnpkSEpsWVcxeklHZHlZWEJvSUdWNFpXTjFkR2x2YmlCbGRtVnVkSE11WEc0Z0lDQXFYRzRnSUNBcUlFVjJaVzUwY3lCaGNtVWdjMlZ5YVdGc2FYcGxaQ0JoY3lCZ1cyMXZaR1ZzVG1GdFpTd2diM0JsY21GMGFXOXVMQ0JwWkN3Z2NHRjViRzloWkYxZ0lIUnZJRzFoZEdOb1hHNGdJQ0FxSUhSb1pTQm1iM0p0WVhRZ1pYaHdaV04wWldRZ1lua2dabTl5TFdoMGRIQW5jeUJnVTJWeWRtVnlSWFpsYm5SRGIyNXVaV04wYjNKZ0xseHVJQ0FnS2k5Y2JpQWdRRk56WlNoY0ltVjJaVzUwYzF3aUtWeHVJQ0JsZG1WdWRITW9LVG9nVDJKelpYSjJZV0pzWlR4TlpYTnpZV2RsUlhabGJuUStJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVsZG1WdWRGTjFZbXBsWTNRdVlYTlBZbk5sY25aaFlteGxLQ2t1Y0dsd1pTaGNiaUFnSUNBZ0lHMWhjQ2hjYmlBZ0lDQWdJQ0FnS0dWMlpXNTBPaUJIY21Gd2FFVjRaV04xZEdsdmJrVjJaVzUwS1RvZ1RXVnpjMkZuWlVWMlpXNTBJRDArSUNoN1hHNGdJQ0FnSUNBZ0lDQWdkSGx3WlRvZ1hDSnRaWE56WVdkbFhDSXNYRzRnSUNBZ0lDQWdJQ0FnWkdGMFlUb2dTbE5QVGk1emRISnBibWRwWm5rb1cxeHVJQ0FnSUNBZ0lDQWdJQ0FnWENKbmNtRndhRndpTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaWFpsYm5RdWRIbHdaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHVjJaVzUwTG5KMWJrbGtMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFpEb2daWFpsYm5RdWFXUXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxjWFZsYm1ObE9pQmxkbVZ1ZEM1elpYRjFaVzVqWlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZEhsd1pUb2daWFpsYm5RdWRIbHdaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjblZ1U1dRNklHVjJaVzUwTG5KMWJrbGtMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQndZWEpsYm5SU2RXNUpaRG9nWlhabGJuUXVjR0Z5Wlc1MFVuVnVTV1FzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSGR2Y210bWJHOTNTV1E2SUdWMlpXNTBMbmR2Y210bWJHOTNTV1FzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJRzV2WkdWSlpEb2daWFpsYm5RdWJtOWtaVWxrTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JsWkdkbFNXUTZJR1YyWlc1MExtVmtaMlZKWkN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnY0c5eWREb2daWFpsYm5RdWNHOXlkQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdhWFJsY21GMGFXOXVPaUJsZG1WdWRDNXBkR1Z5WVhScGIyNHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIQmhkR2c2SUdWMlpXNTBMbkJoZEdnc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhOMFlYUjFjem9nWlhabGJuUXVjM1JoZEhWekxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCd1lYbHNiMkZrT2lCbGRtVnVkQzV3WVhsc2IyRmtMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmxjbkp2Y2pvZ1pYWmxiblF1WlhKeWIzSXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnBiV1Z6ZEdGdGNEb2daWFpsYm5RdWRHbHRaWE4wWVcxd0xuUnZTVk5QVTNSeWFXNW5LQ2tzWEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUYwcExGeHVJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lDQWdLVnh1SUNBZ0lDazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1WMGNtbGxkbVZ6SUdFZ2NHVnljMmx6ZEdWa0lHZHlZWEJvSUdWNFpXTjFkR2x2YmlCeVpYTjFiSFFnWW5rZ2FYUnpJR0J5ZFc1SlpHQXVYRzRnSUNBcVhHNGdJQ0FxSUVCMGFISnZkM01nZTA1dmRFWnZkVzVrUlhoalpYQjBhVzl1ZlNCM2FHVnVJRzV2SUhKbGMzVnNkQ0JwY3lCemRHOXlaV1FnWm05eUlIUm9aU0JuYVhabGJpQmdjblZ1U1dSZ0xseHVJQ0FnS2k5Y2JpQWdRRWRsZENoY0luSmxjM1ZzZEhNdk9uSjFia2xrWENJcFhHNGdJR0Z6ZVc1aklHZGxkRkpsYzNWc2RDaEFVR0Z5WVcwb1hDSnlkVzVKWkZ3aUtTQnlkVzVKWkRvZ2MzUnlhVzVuS1RvZ1VISnZiV2x6WlR4MWJtdHViM2R1UGlCN1hHNGdJQ0FnYkdWMElHMXZaR1ZzT2lCSGNtRndhRVY0WldOMWRHbHZibEpsYzNWc2RFMXZaR1ZzSUh3Z2JuVnNiRHRjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnYlc5a1pXd2dQU0FvWVhkaGFYUWdkR2hwY3k1eVpYTjFiSFJTWlhCdmMybDBiM0o1TG5KbFlXUW9YRzRnSUNBZ0lDQWdJSEoxYmtsa1hHNGdJQ0FnSUNBcEtTQmhjeUJIY21Gd2FFVjRaV04xZEdsdmJsSmxjM1ZzZEUxdlpHVnNJSHdnYm5Wc2JEdGNiaUFnSUNCOUlHTmhkR05vSUh0Y2JpQWdJQ0FnSUcxdlpHVnNJRDBnYm5Wc2JEdGNiaUFnSUNCOVhHNGdJQ0FnWTI5dWMzUWdjbVZ6ZFd4MElEMGdabkp2YlZKbGMzVnNkRTF2WkdWc0tHMXZaR1ZzS1R0Y2JpQWdJQ0JwWmlBb0lYSmxjM1ZzZENrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFNXZkRVp2ZFc1a1JYaGpaWEIwYVc5dUtGeHVJQ0FnSUNBZ0lDQmdUbThnWjNKaGNHZ2daWGhsWTNWMGFXOXVJSEpsYzNWc2RDQm1iM1Z1WkNCbWIzSWdjblZ1U1dRZ0p5UjdjblZ1U1dSOUoyQmNiaUFnSUNBZ0lDazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ5WlhOMWJIUTdYRzRnSUgxY2JuMWNiaUpkZlE9PSJdfQ==