@decaf-ts/integrations 0.14.2 → 0.14.3

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 (1166) hide show
  1. package/README.md +11 -1
  2. package/dist/integrations.cjs +3317 -2
  3. package/dist/integrations.js +3665 -2
  4. package/lib/cjs/blob/azure/AzureBlobEnvironment.cjs +2 -2
  5. package/lib/cjs/blob/azure/AzureBlobStoreService.cjs +2 -2
  6. package/lib/cjs/blob/azure/index.cjs +2 -2
  7. package/lib/cjs/blob/core/BlobEnvironment.cjs +2 -2
  8. package/lib/cjs/blob/core/BlobErrors.cjs +2 -2
  9. package/lib/cjs/blob/core/BlobKey.cjs +2 -2
  10. package/lib/cjs/blob/core/BlobStoreFactory.cjs +2 -2
  11. package/lib/cjs/blob/core/BlobStoreService.cjs +2 -2
  12. package/lib/cjs/blob/core/BlobTypes.cjs +2 -2
  13. package/lib/cjs/blob/core/BlobValue.cjs +2 -2
  14. package/lib/cjs/blob/core/index.cjs +2 -2
  15. package/lib/cjs/blob/gcp/GcsBlobEnvironment.cjs +2 -2
  16. package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs +2 -2
  17. package/lib/cjs/blob/gcp/index.cjs +2 -2
  18. package/lib/cjs/blob/index.cjs +2 -2
  19. package/lib/cjs/blob/local/LocalBlobEnvironment.cjs +2 -2
  20. package/lib/cjs/blob/local/LocalBlobStoreService.cjs +2 -2
  21. package/lib/cjs/blob/local/index.cjs +2 -2
  22. package/lib/cjs/blob/memory/MemoryBlobEnvironment.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/MinioBlobEnvironment.cjs +2 -2
  26. package/lib/cjs/blob/s3/MinioBlobStoreService.cjs +2 -2
  27. package/lib/cjs/blob/s3/R2BlobEnvironment.cjs +2 -2
  28. package/lib/cjs/blob/s3/R2BlobStoreService.cjs +2 -2
  29. package/lib/cjs/blob/s3/S3BlobEnvironment.cjs +2 -2
  30. package/lib/cjs/blob/s3/S3BlobStoreService.cjs +2 -2
  31. package/lib/cjs/blob/s3/S3CompatibleBlobStoreService.cjs +2 -2
  32. package/lib/cjs/blob/s3/index.cjs +2 -2
  33. package/lib/cjs/calendar/CalendarService.cjs +2 -2
  34. package/lib/cjs/calendar/environment.cjs +2 -2
  35. package/lib/cjs/calendar/google-calendar/GoogleCalendarService.cjs +2 -2
  36. package/lib/cjs/calendar/google-calendar/index.cjs +2 -2
  37. package/lib/cjs/calendar/index.cjs +2 -2
  38. package/lib/cjs/calendar/types.cjs +2 -2
  39. package/lib/cjs/calendar/validators/cron.cjs +2 -2
  40. package/lib/cjs/calendar/writers/CalendarFsWriter.cjs +2 -2
  41. package/lib/cjs/calendar/writers/CalenderDownloader.cjs +2 -2
  42. package/lib/cjs/calendar/writers/ICalendarWriter.cjs +2 -2
  43. package/lib/cjs/comms/discord/DiscordService.cjs +2 -2
  44. package/lib/cjs/comms/discord/index.cjs +2 -2
  45. package/lib/cjs/comms/email/EmailService.cjs +2 -2
  46. package/lib/cjs/comms/email/index.cjs +2 -2
  47. package/lib/cjs/comms/email/mime.cjs +2 -2
  48. package/lib/cjs/comms/email/smtp.cjs +2 -2
  49. package/lib/cjs/comms/environment.cjs +2 -2
  50. package/lib/cjs/comms/gmail/GmailService.cjs +2 -2
  51. package/lib/cjs/comms/gmail/index.cjs +2 -2
  52. package/lib/cjs/comms/index.cjs +2 -2
  53. package/lib/cjs/comms/outlook/MicrosoftOutlookService.cjs +2 -2
  54. package/lib/cjs/comms/outlook/index.cjs +2 -2
  55. package/lib/cjs/comms/slack/SlackService.cjs +2 -2
  56. package/lib/cjs/comms/slack/index.cjs +2 -2
  57. package/lib/cjs/comms/teams/TeamsService.cjs +2 -2
  58. package/lib/cjs/comms/teams/index.cjs +2 -2
  59. package/lib/cjs/comms/telegram/TelegramService.cjs +2 -2
  60. package/lib/cjs/comms/telegram/index.cjs +2 -2
  61. package/lib/cjs/comms/whatsapp/WhatsAppService.cjs +2 -2
  62. package/lib/cjs/comms/whatsapp/index.cjs +2 -2
  63. package/lib/cjs/devops/environment.cjs +2 -2
  64. package/lib/cjs/devops/github/GithubService.cjs +2 -2
  65. package/lib/cjs/devops/github/index.cjs +2 -2
  66. package/lib/cjs/devops/gitlab/GitlabService.cjs +2 -2
  67. package/lib/cjs/devops/gitlab/index.cjs +2 -2
  68. package/lib/cjs/devops/index.cjs +2 -2
  69. package/lib/cjs/docker/DockerComposeService.cjs +2 -2
  70. package/lib/cjs/docker/index.cjs +2 -2
  71. package/lib/cjs/feature-flags/EngineCapabilityFeatureFlag.service.cjs +2 -2
  72. package/lib/cjs/feature-flags/constants.cjs +2 -2
  73. package/lib/cjs/feature-flags/decorators.cjs +2 -2
  74. package/lib/cjs/feature-flags/environment.cjs +2 -2
  75. package/lib/cjs/feature-flags/index.cjs +2 -2
  76. package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs +2 -2
  77. package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs +2 -2
  78. package/lib/cjs/feature-flags/readers/FeatureFlagReader.cjs +2 -2
  79. package/lib/cjs/feature-flags/readers/index.cjs +2 -2
  80. package/lib/cjs/feature-flags/services/FeatureFlag.service.cjs +2 -2
  81. package/lib/cjs/feature-flags/types.cjs +2 -2
  82. package/lib/cjs/feature-flags/utils.cjs +2 -2
  83. package/lib/cjs/index.cjs +5 -5
  84. package/lib/cjs/io/airtable/AirtableService.cjs +2 -2
  85. package/lib/cjs/io/airtable/index.cjs +2 -2
  86. package/lib/cjs/io/confluence/ConfluenceService.cjs +2 -2
  87. package/lib/cjs/io/confluence/index.cjs +2 -2
  88. package/lib/cjs/io/environment.cjs +2 -2
  89. package/lib/cjs/io/google-docs/GoogleDocsService.cjs +2 -2
  90. package/lib/cjs/io/google-docs/index.cjs +2 -2
  91. package/lib/cjs/io/google-sheets/GoogleSheetsService.cjs +2 -2
  92. package/lib/cjs/io/google-sheets/index.cjs +2 -2
  93. package/lib/cjs/io/graphql/GraphqlService.cjs +2 -2
  94. package/lib/cjs/io/graphql/index.cjs +2 -2
  95. package/lib/cjs/io/index.cjs +2 -2
  96. package/lib/cjs/io/jira/JiraService.cjs +2 -2
  97. package/lib/cjs/io/jira/index.cjs +2 -2
  98. package/lib/cjs/io/microsoft-excel/MicrosoftExcelService.cjs +2 -2
  99. package/lib/cjs/io/microsoft-excel/index.cjs +2 -2
  100. package/lib/cjs/io/microsoft-sharepoint/MicrosoftSharePointService.cjs +2 -2
  101. package/lib/cjs/io/microsoft-sharepoint/index.cjs +2 -2
  102. package/lib/cjs/io/spreadsheet/SpreadsheetService.cjs +2 -2
  103. package/lib/cjs/io/spreadsheet/index.cjs +2 -2
  104. package/lib/cjs/keycloak/broker.cjs +2 -2
  105. package/lib/cjs/keycloak/index.cjs +2 -2
  106. package/lib/cjs/keycloak/services/KeycloakAuthService.cjs +2 -2
  107. package/lib/cjs/keycloak/services/KeycloakClientService.cjs +2 -2
  108. package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs +2 -2
  109. package/lib/cjs/keycloak/services/KeycloakRealmService.cjs +2 -2
  110. package/lib/cjs/keycloak/services/KeycloakRoleService.cjs +2 -2
  111. package/lib/cjs/keycloak/services/KeycloakService.cjs +2 -2
  112. package/lib/cjs/keycloak/services/KeycloakUserService.cjs +2 -2
  113. package/lib/cjs/keycloak/services/index.cjs +2 -2
  114. package/lib/cjs/keycloak/services/runtime.cjs +2 -2
  115. package/lib/cjs/keycloak/types.cjs +2 -2
  116. package/lib/cjs/kibana/builders/KibanaIndexBuilder.cjs +2 -2
  117. package/lib/cjs/kibana/builders/KibanaIndexBuilderCollection.cjs +2 -2
  118. package/lib/cjs/kibana/builders/index.cjs +2 -2
  119. package/lib/cjs/kibana/helpers.cjs +2 -2
  120. package/lib/cjs/kibana/index.cjs +2 -2
  121. package/lib/cjs/kibana/services/KibanaAuthService.cjs +2 -2
  122. package/lib/cjs/kibana/services/KibanaDashboardService.cjs +2 -2
  123. package/lib/cjs/kibana/services/KibanaDataViewService.cjs +2 -2
  124. package/lib/cjs/kibana/services/KibanaRoleService.cjs +2 -2
  125. package/lib/cjs/kibana/services/KibanaService.cjs +2 -2
  126. package/lib/cjs/kibana/services/KibanaSpaceService.cjs +2 -2
  127. package/lib/cjs/kibana/services/KibanaUserService.cjs +2 -2
  128. package/lib/cjs/kibana/services/index.cjs +2 -2
  129. package/lib/cjs/kibana/services/runtime.cjs +2 -2
  130. package/lib/cjs/kibana/types.cjs +2 -2
  131. package/lib/cjs/loader/ObjectLoader.cjs +2 -2
  132. package/lib/cjs/loader/assets.cjs +2 -2
  133. package/lib/cjs/loader/config.cjs +2 -2
  134. package/lib/cjs/loader/families.cjs +2 -2
  135. package/lib/cjs/loader/index.cjs +2 -2
  136. package/lib/cjs/loader/nest.cjs +2 -2
  137. package/lib/cjs/loader/types.cjs +2 -2
  138. package/lib/cjs/namespaces/index.cjs +2 -2
  139. package/lib/cjs/namespaces/models/authorization-model.cjs +2 -2
  140. package/lib/cjs/namespaces/models/credential.model.cjs +2 -2
  141. package/lib/cjs/namespaces/models/effective-permission.model.cjs +2 -2
  142. package/lib/cjs/namespaces/models/group-membership.model.cjs +2 -2
  143. package/lib/cjs/namespaces/models/group.model.cjs +2 -2
  144. package/lib/cjs/namespaces/models/index.cjs +2 -2
  145. package/lib/cjs/namespaces/models/inheritance-block.model.cjs +2 -2
  146. package/lib/cjs/namespaces/models/org-unit-closure.model.cjs +2 -2
  147. package/lib/cjs/namespaces/models/org-unit-membership.model.cjs +2 -2
  148. package/lib/cjs/namespaces/models/org-unit-profile.model.cjs +2 -2
  149. package/lib/cjs/namespaces/models/org-unit.model.cjs +2 -2
  150. package/lib/cjs/namespaces/models/permission.model.cjs +2 -2
  151. package/lib/cjs/namespaces/models/principal.model.cjs +2 -2
  152. package/lib/cjs/namespaces/models/protected-resource.model.cjs +2 -2
  153. package/lib/cjs/namespaces/models/resource-grant.model.cjs +2 -2
  154. package/lib/cjs/namespaces/models/role-assignment.model.cjs +2 -2
  155. package/lib/cjs/namespaces/models/role-permission.model.cjs +2 -2
  156. package/lib/cjs/namespaces/models/role.model.cjs +2 -2
  157. package/lib/cjs/namespaces/models/storage-binding.model.cjs +2 -2
  158. package/lib/cjs/namespaces/models/tenant-membership.model.cjs +2 -2
  159. package/lib/cjs/namespaces/models/tenant-profile.model.cjs +2 -2
  160. package/lib/cjs/namespaces/models/tenant.model.cjs +2 -2
  161. package/lib/cjs/namespaces/models/user.model.cjs +2 -2
  162. package/lib/cjs/namespaces/org-based-authorization-system.cjs +2 -2
  163. package/lib/cjs/namespaces/org-based-authorization-system.models.cjs +2 -2
  164. package/lib/cjs/namespaces/org-based-authorization-system.services.cjs +2 -2
  165. package/lib/cjs/namespaces/rls/index.cjs +2 -2
  166. package/lib/cjs/namespaces/rls/principal-resolver.cjs +2 -2
  167. package/lib/cjs/namespaces/rls/rls-bootstrap.service.cjs +2 -2
  168. package/lib/cjs/namespaces/rls/rls.constants.cjs +2 -2
  169. package/lib/cjs/namespaces/rls/rls.template.cjs +2 -2
  170. package/lib/cjs/namespaces/rls/rls.types.cjs +2 -2
  171. package/lib/cjs/namespaces/rls/session-binding.cjs +2 -2
  172. package/lib/cjs/namespaces/services/authz.service.cjs +2 -2
  173. package/lib/cjs/namespaces/services/bootstrap.service.cjs +2 -2
  174. package/lib/cjs/namespaces/services/credential.service.cjs +2 -2
  175. package/lib/cjs/namespaces/services/effective-permission.service.cjs +2 -2
  176. package/lib/cjs/namespaces/services/group-membership.service.cjs +2 -2
  177. package/lib/cjs/namespaces/services/group.service.cjs +2 -2
  178. package/lib/cjs/namespaces/services/index.cjs +2 -2
  179. package/lib/cjs/namespaces/services/inheritance-block.service.cjs +2 -2
  180. package/lib/cjs/namespaces/services/org-unit-closure.service.cjs +2 -2
  181. package/lib/cjs/namespaces/services/org-unit-membership.service.cjs +2 -2
  182. package/lib/cjs/namespaces/services/org-unit-profile.service.cjs +2 -2
  183. package/lib/cjs/namespaces/services/org-unit.service.cjs +2 -2
  184. package/lib/cjs/namespaces/services/permission.service.cjs +2 -2
  185. package/lib/cjs/namespaces/services/principal.service.cjs +2 -2
  186. package/lib/cjs/namespaces/services/protected-resource.service.cjs +2 -2
  187. package/lib/cjs/namespaces/services/resource-grant.service.cjs +2 -2
  188. package/lib/cjs/namespaces/services/resource-lifecycle.service.cjs +2 -2
  189. package/lib/cjs/namespaces/services/role-assignment.service.cjs +2 -2
  190. package/lib/cjs/namespaces/services/role-permission.service.cjs +2 -2
  191. package/lib/cjs/namespaces/services/role.service.cjs +2 -2
  192. package/lib/cjs/namespaces/services/storage-binding.service.cjs +2 -2
  193. package/lib/cjs/namespaces/services/system-management.service.cjs +2 -2
  194. package/lib/cjs/namespaces/services/tenant-membership.service.cjs +2 -2
  195. package/lib/cjs/namespaces/services/tenant-profile.service.cjs +2 -2
  196. package/lib/cjs/namespaces/services/tenant.service.cjs +2 -2
  197. package/lib/cjs/namespaces/services/user.service.cjs +2 -2
  198. package/lib/cjs/namespaces/types.cjs +2 -2
  199. package/lib/cjs/namespaces/utils.cjs +2 -2
  200. package/lib/cjs/nest/decorators.cjs +2 -2
  201. package/lib/cjs/nest/index.cjs +2 -2
  202. package/lib/cjs/nest/keycloakAuthHandler.cjs +2 -2
  203. package/lib/cjs/nest/keycloakModule.cjs +2 -2
  204. package/lib/cjs/nest/logging.cjs +2 -2
  205. package/lib/cjs/nest/types.cjs +2 -2
  206. package/lib/cjs/nest/utils.cjs +2 -2
  207. package/lib/cjs/plugins/contract.cjs +2 -2
  208. package/lib/cjs/plugins/index.cjs +2 -2
  209. package/lib/cjs/plugins/kibana/host.cjs +2 -2
  210. package/lib/cjs/plugins/kibana/index.cjs +2 -2
  211. package/lib/cjs/plugins/kibana/installer.cjs +2 -2
  212. package/lib/cjs/plugins/kibana/manifest.cjs +2 -2
  213. package/lib/cjs/plugins/kibana/templates.cjs +2 -2
  214. package/lib/cjs/plugins/kibana/types.cjs +2 -2
  215. package/lib/cjs/plugins/superset/host.cjs +2 -2
  216. package/lib/cjs/plugins/superset/index.cjs +2 -2
  217. package/lib/cjs/plugins/superset/installer.cjs +2 -2
  218. package/lib/cjs/plugins/superset/manifest.cjs +2 -2
  219. package/lib/cjs/plugins/superset/templates.cjs +2 -2
  220. package/lib/cjs/plugins/superset/types.cjs +2 -2
  221. package/lib/cjs/redis/RedisContextLock.cjs +2 -2
  222. package/lib/cjs/redis/RedisDispatch.cjs +2 -2
  223. package/lib/cjs/redis/RedisPaginator.cjs +2 -2
  224. package/lib/cjs/redis/RedisStatement.cjs +2 -2
  225. package/lib/cjs/redis/adapter.cjs +2 -2
  226. package/lib/cjs/redis/constants.cjs +2 -2
  227. package/lib/cjs/redis/handlers.cjs +2 -2
  228. package/lib/cjs/redis/index.cjs +2 -2
  229. package/lib/cjs/redis/serialization.cjs +2 -2
  230. package/lib/cjs/redis/types.cjs +2 -2
  231. package/lib/cjs/secrets/InfraCredentialBootstrap.cjs +2 -2
  232. package/lib/cjs/secrets/aws/AwsSecretEnvironment.cjs +2 -2
  233. package/lib/cjs/secrets/aws/AwsSecretService.cjs +2 -2
  234. package/lib/cjs/secrets/aws/AwsSecretServiceConfig.cjs +2 -2
  235. package/lib/cjs/secrets/aws/index.cjs +2 -2
  236. package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs +2 -2
  237. package/lib/cjs/secrets/azure/AzureKeyVaultSecretServiceConfig.cjs +2 -2
  238. package/lib/cjs/secrets/azure/AzureSecretEnvironment.cjs +2 -2
  239. package/lib/cjs/secrets/azure/index.cjs +2 -2
  240. package/lib/cjs/secrets/core/ClientBasedSecretService.cjs +2 -2
  241. package/lib/cjs/secrets/core/SecretEnvironment.cjs +2 -2
  242. package/lib/cjs/secrets/core/SecretErrors.cjs +2 -2
  243. package/lib/cjs/secrets/core/SecretName.cjs +2 -2
  244. package/lib/cjs/secrets/core/SecretReference.cjs +3 -2
  245. package/lib/cjs/secrets/core/SecretSerialization.cjs +2 -2
  246. package/lib/cjs/secrets/core/SecretService.cjs +2 -2
  247. package/lib/cjs/secrets/core/SecretTypes.cjs +2 -2
  248. package/lib/cjs/secrets/core/index.cjs +2 -2
  249. package/lib/cjs/secrets/fs/FsSecretEnvironment.cjs +2 -2
  250. package/lib/cjs/secrets/fs/FsSecretService.cjs +2 -2
  251. package/lib/cjs/secrets/fs/FsSecretServiceConfig.cjs +2 -2
  252. package/lib/cjs/secrets/fs/index.cjs +2 -2
  253. package/lib/cjs/secrets/gcp/GcpSecretEnvironment.cjs +2 -2
  254. package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs +2 -2
  255. package/lib/cjs/secrets/gcp/GcpSecretManagerServiceConfig.cjs +2 -2
  256. package/lib/cjs/secrets/gcp/index.cjs +2 -2
  257. package/lib/cjs/secrets/index.cjs +2 -2
  258. package/lib/cjs/secrets/kubernetes/KubernetesSecretEnvironment.cjs +34 -0
  259. package/lib/cjs/secrets/kubernetes/KubernetesSecretService.cjs +479 -0
  260. package/lib/cjs/secrets/kubernetes/KubernetesSecretServiceConfig.cjs +4 -0
  261. package/lib/cjs/secrets/kubernetes/index.cjs +27 -0
  262. package/lib/cjs/secrets/model/ModelSecretCrypto.cjs +2 -2
  263. package/lib/cjs/secrets/model/ModelSecretEnvironment.cjs +2 -2
  264. package/lib/cjs/secrets/model/ModelSecretService.cjs +2 -2
  265. package/lib/cjs/secrets/model/ModelSecretServiceConfig.cjs +2 -2
  266. package/lib/cjs/secrets/model/Secret.cjs +2 -2
  267. package/lib/cjs/secrets/model/index.cjs +2 -2
  268. package/lib/cjs/secrets/onepassword/OnePasswordSecretEnvironment.cjs +2 -2
  269. package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs +2 -2
  270. package/lib/cjs/secrets/onepassword/OnePasswordSecretServiceConfig.cjs +2 -2
  271. package/lib/cjs/secrets/onepassword/index.cjs +2 -2
  272. package/lib/cjs/secrets/vault/VaultSecretEnvironment.cjs +2 -2
  273. package/lib/cjs/secrets/vault/VaultSecretService.cjs +2 -2
  274. package/lib/cjs/secrets/vault/VaultSecretServiceConfig.cjs +2 -2
  275. package/lib/cjs/secrets/vault/index.cjs +2 -2
  276. package/lib/cjs/sftp/aws/AwsSftpEnvironment.cjs +2 -2
  277. package/lib/cjs/sftp/aws/AwsSftpService.cjs +2 -2
  278. package/lib/cjs/sftp/aws/index.cjs +2 -2
  279. package/lib/cjs/sftp/core/SftpEnvironment.cjs +2 -2
  280. package/lib/cjs/sftp/core/SftpSource.cjs +2 -2
  281. package/lib/cjs/sftp/core/index.cjs +2 -2
  282. package/lib/cjs/sftp/index.cjs +2 -2
  283. package/lib/cjs/sftp/ssh2/Ssh2SftpEnvironment.cjs +2 -2
  284. package/lib/cjs/sftp/ssh2/Ssh2SftpService.cjs +2 -2
  285. package/lib/cjs/sftp/ssh2/index.cjs +2 -2
  286. package/lib/cjs/shared/environmentValue.cjs +2 -2
  287. package/lib/cjs/shared/http/HttpApiService.cjs +2 -2
  288. package/lib/cjs/shared/http/hermeticBoot.cjs +2 -2
  289. package/lib/cjs/shared/http/index.cjs +2 -2
  290. package/lib/cjs/shared/runtime.cjs +2 -2
  291. package/lib/cjs/user-requests/index.cjs +2 -2
  292. package/lib/cjs/utils.cjs +2 -2
  293. package/lib/esm/blob/azure/AzureBlobEnvironment.js +1 -1
  294. package/lib/esm/blob/azure/AzureBlobStoreService.js +1 -1
  295. package/lib/esm/blob/azure/index.js +1 -1
  296. package/lib/esm/blob/core/BlobEnvironment.js +1 -1
  297. package/lib/esm/blob/core/BlobErrors.js +1 -1
  298. package/lib/esm/blob/core/BlobKey.js +1 -1
  299. package/lib/esm/blob/core/BlobStoreFactory.js +1 -1
  300. package/lib/esm/blob/core/BlobStoreService.js +1 -1
  301. package/lib/esm/blob/core/BlobTypes.js +1 -1
  302. package/lib/esm/blob/core/BlobValue.js +1 -1
  303. package/lib/esm/blob/core/index.js +1 -1
  304. package/lib/esm/blob/gcp/GcsBlobEnvironment.js +1 -1
  305. package/lib/esm/blob/gcp/GcsBlobStoreService.js +1 -1
  306. package/lib/esm/blob/gcp/index.js +1 -1
  307. package/lib/esm/blob/index.js +1 -1
  308. package/lib/esm/blob/local/LocalBlobEnvironment.js +1 -1
  309. package/lib/esm/blob/local/LocalBlobStoreService.js +1 -1
  310. package/lib/esm/blob/local/index.js +1 -1
  311. package/lib/esm/blob/memory/MemoryBlobEnvironment.js +1 -1
  312. package/lib/esm/blob/memory/MemoryBlobStoreService.js +1 -1
  313. package/lib/esm/blob/memory/index.js +1 -1
  314. package/lib/esm/blob/s3/MinioBlobEnvironment.js +1 -1
  315. package/lib/esm/blob/s3/MinioBlobStoreService.js +1 -1
  316. package/lib/esm/blob/s3/R2BlobEnvironment.js +1 -1
  317. package/lib/esm/blob/s3/R2BlobStoreService.js +1 -1
  318. package/lib/esm/blob/s3/S3BlobEnvironment.js +1 -1
  319. package/lib/esm/blob/s3/S3BlobStoreService.js +1 -1
  320. package/lib/esm/blob/s3/S3CompatibleBlobStoreService.js +1 -1
  321. package/lib/esm/blob/s3/index.js +1 -1
  322. package/lib/esm/calendar/CalendarService.js +1 -1
  323. package/lib/esm/calendar/environment.js +1 -1
  324. package/lib/esm/calendar/google-calendar/GoogleCalendarService.js +1 -1
  325. package/lib/esm/calendar/google-calendar/index.js +1 -1
  326. package/lib/esm/calendar/index.js +1 -1
  327. package/lib/esm/calendar/types.js +1 -1
  328. package/lib/esm/calendar/validators/cron.js +1 -1
  329. package/lib/esm/calendar/writers/CalendarFsWriter.js +1 -1
  330. package/lib/esm/calendar/writers/CalenderDownloader.js +1 -1
  331. package/lib/esm/calendar/writers/ICalendarWriter.js +1 -1
  332. package/lib/esm/comms/discord/DiscordService.js +1 -1
  333. package/lib/esm/comms/discord/index.js +1 -1
  334. package/lib/esm/comms/email/EmailService.js +1 -1
  335. package/lib/esm/comms/email/index.js +1 -1
  336. package/lib/esm/comms/email/mime.js +1 -1
  337. package/lib/esm/comms/email/smtp.js +1 -1
  338. package/lib/esm/comms/environment.js +1 -1
  339. package/lib/esm/comms/gmail/GmailService.js +1 -1
  340. package/lib/esm/comms/gmail/index.js +1 -1
  341. package/lib/esm/comms/index.js +1 -1
  342. package/lib/esm/comms/outlook/MicrosoftOutlookService.js +1 -1
  343. package/lib/esm/comms/outlook/index.js +1 -1
  344. package/lib/esm/comms/slack/SlackService.js +1 -1
  345. package/lib/esm/comms/slack/index.js +1 -1
  346. package/lib/esm/comms/teams/TeamsService.js +1 -1
  347. package/lib/esm/comms/teams/index.js +1 -1
  348. package/lib/esm/comms/telegram/TelegramService.js +1 -1
  349. package/lib/esm/comms/telegram/index.js +1 -1
  350. package/lib/esm/comms/whatsapp/WhatsAppService.js +1 -1
  351. package/lib/esm/comms/whatsapp/index.js +1 -1
  352. package/lib/esm/devops/environment.js +1 -1
  353. package/lib/esm/devops/github/GithubService.js +1 -1
  354. package/lib/esm/devops/github/index.js +1 -1
  355. package/lib/esm/devops/gitlab/GitlabService.js +1 -1
  356. package/lib/esm/devops/gitlab/index.js +1 -1
  357. package/lib/esm/devops/index.js +1 -1
  358. package/lib/esm/docker/DockerComposeService.js +1 -1
  359. package/lib/esm/docker/index.js +1 -1
  360. package/lib/esm/feature-flags/EngineCapabilityFeatureFlag.service.js +1 -1
  361. package/lib/esm/feature-flags/constants.js +1 -1
  362. package/lib/esm/feature-flags/decorators.js +1 -1
  363. package/lib/esm/feature-flags/environment.js +1 -1
  364. package/lib/esm/feature-flags/index.js +1 -1
  365. package/lib/esm/feature-flags/models/FeatureFlag.model.js +1 -1
  366. package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js +1 -1
  367. package/lib/esm/feature-flags/readers/FeatureFlagReader.js +1 -1
  368. package/lib/esm/feature-flags/readers/index.js +1 -1
  369. package/lib/esm/feature-flags/services/FeatureFlag.service.js +1 -1
  370. package/lib/esm/feature-flags/types.js +1 -1
  371. package/lib/esm/feature-flags/utils.js +1 -1
  372. package/lib/esm/index.js +4 -4
  373. package/lib/esm/io/airtable/AirtableService.js +1 -1
  374. package/lib/esm/io/airtable/index.js +1 -1
  375. package/lib/esm/io/confluence/ConfluenceService.js +1 -1
  376. package/lib/esm/io/confluence/index.js +1 -1
  377. package/lib/esm/io/environment.js +1 -1
  378. package/lib/esm/io/google-docs/GoogleDocsService.js +1 -1
  379. package/lib/esm/io/google-docs/index.js +1 -1
  380. package/lib/esm/io/google-sheets/GoogleSheetsService.js +1 -1
  381. package/lib/esm/io/google-sheets/index.js +1 -1
  382. package/lib/esm/io/graphql/GraphqlService.js +1 -1
  383. package/lib/esm/io/graphql/index.js +1 -1
  384. package/lib/esm/io/index.js +1 -1
  385. package/lib/esm/io/jira/JiraService.js +1 -1
  386. package/lib/esm/io/jira/index.js +1 -1
  387. package/lib/esm/io/microsoft-excel/MicrosoftExcelService.js +1 -1
  388. package/lib/esm/io/microsoft-excel/index.js +1 -1
  389. package/lib/esm/io/microsoft-sharepoint/MicrosoftSharePointService.js +1 -1
  390. package/lib/esm/io/microsoft-sharepoint/index.js +1 -1
  391. package/lib/esm/io/spreadsheet/SpreadsheetService.js +1 -1
  392. package/lib/esm/io/spreadsheet/index.js +1 -1
  393. package/lib/esm/keycloak/broker.js +1 -1
  394. package/lib/esm/keycloak/index.js +1 -1
  395. package/lib/esm/keycloak/services/KeycloakAuthService.js +1 -1
  396. package/lib/esm/keycloak/services/KeycloakClientService.js +1 -1
  397. package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js +1 -1
  398. package/lib/esm/keycloak/services/KeycloakRealmService.js +1 -1
  399. package/lib/esm/keycloak/services/KeycloakRoleService.js +1 -1
  400. package/lib/esm/keycloak/services/KeycloakService.js +1 -1
  401. package/lib/esm/keycloak/services/KeycloakUserService.js +1 -1
  402. package/lib/esm/keycloak/services/index.js +1 -1
  403. package/lib/esm/keycloak/services/runtime.js +1 -1
  404. package/lib/esm/keycloak/types.js +1 -1
  405. package/lib/esm/kibana/builders/KibanaIndexBuilder.js +1 -1
  406. package/lib/esm/kibana/builders/KibanaIndexBuilderCollection.js +1 -1
  407. package/lib/esm/kibana/builders/index.js +1 -1
  408. package/lib/esm/kibana/helpers.js +1 -1
  409. package/lib/esm/kibana/index.js +1 -1
  410. package/lib/esm/kibana/services/KibanaAuthService.js +1 -1
  411. package/lib/esm/kibana/services/KibanaDashboardService.js +1 -1
  412. package/lib/esm/kibana/services/KibanaDataViewService.js +1 -1
  413. package/lib/esm/kibana/services/KibanaRoleService.js +1 -1
  414. package/lib/esm/kibana/services/KibanaService.js +1 -1
  415. package/lib/esm/kibana/services/KibanaSpaceService.js +1 -1
  416. package/lib/esm/kibana/services/KibanaUserService.js +1 -1
  417. package/lib/esm/kibana/services/index.js +1 -1
  418. package/lib/esm/kibana/services/runtime.js +1 -1
  419. package/lib/esm/kibana/types.js +1 -1
  420. package/lib/esm/loader/ObjectLoader.js +1 -1
  421. package/lib/esm/loader/assets.js +1 -1
  422. package/lib/esm/loader/config.js +1 -1
  423. package/lib/esm/loader/families.js +1 -1
  424. package/lib/esm/loader/index.js +1 -1
  425. package/lib/esm/loader/nest.js +1 -1
  426. package/lib/esm/loader/types.js +1 -1
  427. package/lib/esm/namespaces/index.js +1 -1
  428. package/lib/esm/namespaces/models/authorization-model.js +1 -1
  429. package/lib/esm/namespaces/models/credential.model.js +1 -1
  430. package/lib/esm/namespaces/models/effective-permission.model.js +1 -1
  431. package/lib/esm/namespaces/models/group-membership.model.js +1 -1
  432. package/lib/esm/namespaces/models/group.model.js +1 -1
  433. package/lib/esm/namespaces/models/index.js +1 -1
  434. package/lib/esm/namespaces/models/inheritance-block.model.js +1 -1
  435. package/lib/esm/namespaces/models/org-unit-closure.model.js +1 -1
  436. package/lib/esm/namespaces/models/org-unit-membership.model.js +1 -1
  437. package/lib/esm/namespaces/models/org-unit-profile.model.js +1 -1
  438. package/lib/esm/namespaces/models/org-unit.model.js +1 -1
  439. package/lib/esm/namespaces/models/permission.model.js +1 -1
  440. package/lib/esm/namespaces/models/principal.model.js +1 -1
  441. package/lib/esm/namespaces/models/protected-resource.model.js +1 -1
  442. package/lib/esm/namespaces/models/resource-grant.model.js +1 -1
  443. package/lib/esm/namespaces/models/role-assignment.model.js +1 -1
  444. package/lib/esm/namespaces/models/role-permission.model.js +1 -1
  445. package/lib/esm/namespaces/models/role.model.js +1 -1
  446. package/lib/esm/namespaces/models/storage-binding.model.js +1 -1
  447. package/lib/esm/namespaces/models/tenant-membership.model.js +1 -1
  448. package/lib/esm/namespaces/models/tenant-profile.model.js +1 -1
  449. package/lib/esm/namespaces/models/tenant.model.js +1 -1
  450. package/lib/esm/namespaces/models/user.model.js +1 -1
  451. package/lib/esm/namespaces/org-based-authorization-system.js +1 -1
  452. package/lib/esm/namespaces/org-based-authorization-system.models.js +1 -1
  453. package/lib/esm/namespaces/org-based-authorization-system.services.js +1 -1
  454. package/lib/esm/namespaces/rls/index.js +1 -1
  455. package/lib/esm/namespaces/rls/principal-resolver.js +1 -1
  456. package/lib/esm/namespaces/rls/rls-bootstrap.service.js +1 -1
  457. package/lib/esm/namespaces/rls/rls.constants.js +1 -1
  458. package/lib/esm/namespaces/rls/rls.template.js +1 -1
  459. package/lib/esm/namespaces/rls/rls.types.js +1 -1
  460. package/lib/esm/namespaces/rls/session-binding.js +1 -1
  461. package/lib/esm/namespaces/services/authz.service.js +1 -1
  462. package/lib/esm/namespaces/services/bootstrap.service.js +1 -1
  463. package/lib/esm/namespaces/services/credential.service.js +1 -1
  464. package/lib/esm/namespaces/services/effective-permission.service.js +1 -1
  465. package/lib/esm/namespaces/services/group-membership.service.js +1 -1
  466. package/lib/esm/namespaces/services/group.service.js +1 -1
  467. package/lib/esm/namespaces/services/index.js +1 -1
  468. package/lib/esm/namespaces/services/inheritance-block.service.js +1 -1
  469. package/lib/esm/namespaces/services/org-unit-closure.service.js +1 -1
  470. package/lib/esm/namespaces/services/org-unit-membership.service.js +1 -1
  471. package/lib/esm/namespaces/services/org-unit-profile.service.js +1 -1
  472. package/lib/esm/namespaces/services/org-unit.service.js +1 -1
  473. package/lib/esm/namespaces/services/permission.service.js +1 -1
  474. package/lib/esm/namespaces/services/principal.service.js +1 -1
  475. package/lib/esm/namespaces/services/protected-resource.service.js +1 -1
  476. package/lib/esm/namespaces/services/resource-grant.service.js +1 -1
  477. package/lib/esm/namespaces/services/resource-lifecycle.service.js +1 -1
  478. package/lib/esm/namespaces/services/role-assignment.service.js +1 -1
  479. package/lib/esm/namespaces/services/role-permission.service.js +1 -1
  480. package/lib/esm/namespaces/services/role.service.js +1 -1
  481. package/lib/esm/namespaces/services/storage-binding.service.js +1 -1
  482. package/lib/esm/namespaces/services/system-management.service.js +1 -1
  483. package/lib/esm/namespaces/services/tenant-membership.service.js +1 -1
  484. package/lib/esm/namespaces/services/tenant-profile.service.js +1 -1
  485. package/lib/esm/namespaces/services/tenant.service.js +1 -1
  486. package/lib/esm/namespaces/services/user.service.js +1 -1
  487. package/lib/esm/namespaces/types.js +1 -1
  488. package/lib/esm/namespaces/utils.js +1 -1
  489. package/lib/esm/nest/decorators.js +1 -1
  490. package/lib/esm/nest/index.js +1 -1
  491. package/lib/esm/nest/keycloakAuthHandler.js +1 -1
  492. package/lib/esm/nest/keycloakModule.js +1 -1
  493. package/lib/esm/nest/logging.js +1 -1
  494. package/lib/esm/nest/types.js +1 -1
  495. package/lib/esm/nest/utils.js +1 -1
  496. package/lib/esm/plugins/contract.js +1 -1
  497. package/lib/esm/plugins/index.js +1 -1
  498. package/lib/esm/plugins/kibana/host.js +1 -1
  499. package/lib/esm/plugins/kibana/index.js +1 -1
  500. package/lib/esm/plugins/kibana/installer.js +1 -1
  501. package/lib/esm/plugins/kibana/manifest.js +1 -1
  502. package/lib/esm/plugins/kibana/templates.js +1 -1
  503. package/lib/esm/plugins/kibana/types.js +1 -1
  504. package/lib/esm/plugins/superset/host.js +1 -1
  505. package/lib/esm/plugins/superset/index.js +1 -1
  506. package/lib/esm/plugins/superset/installer.js +1 -1
  507. package/lib/esm/plugins/superset/manifest.js +1 -1
  508. package/lib/esm/plugins/superset/templates.js +1 -1
  509. package/lib/esm/plugins/superset/types.js +1 -1
  510. package/lib/esm/redis/RedisContextLock.js +1 -1
  511. package/lib/esm/redis/RedisDispatch.js +1 -1
  512. package/lib/esm/redis/RedisPaginator.js +1 -1
  513. package/lib/esm/redis/RedisStatement.js +1 -1
  514. package/lib/esm/redis/adapter.js +1 -1
  515. package/lib/esm/redis/constants.js +1 -1
  516. package/lib/esm/redis/handlers.js +1 -1
  517. package/lib/esm/redis/index.js +1 -1
  518. package/lib/esm/redis/serialization.js +1 -1
  519. package/lib/esm/redis/types.js +1 -1
  520. package/lib/esm/secrets/InfraCredentialBootstrap.js +1 -1
  521. package/lib/esm/secrets/aws/AwsSecretEnvironment.js +1 -1
  522. package/lib/esm/secrets/aws/AwsSecretService.js +1 -1
  523. package/lib/esm/secrets/aws/AwsSecretServiceConfig.js +1 -1
  524. package/lib/esm/secrets/aws/index.js +1 -1
  525. package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js +1 -1
  526. package/lib/esm/secrets/azure/AzureKeyVaultSecretServiceConfig.js +1 -1
  527. package/lib/esm/secrets/azure/AzureSecretEnvironment.js +1 -1
  528. package/lib/esm/secrets/azure/index.js +1 -1
  529. package/lib/esm/secrets/core/ClientBasedSecretService.js +1 -1
  530. package/lib/esm/secrets/core/SecretEnvironment.js +1 -1
  531. package/lib/esm/secrets/core/SecretErrors.js +1 -1
  532. package/lib/esm/secrets/core/SecretName.js +1 -1
  533. package/lib/esm/secrets/core/SecretReference.js +2 -1
  534. package/lib/esm/secrets/core/SecretSerialization.js +1 -1
  535. package/lib/esm/secrets/core/SecretService.js +1 -1
  536. package/lib/esm/secrets/core/SecretTypes.js +1 -1
  537. package/lib/esm/secrets/core/index.js +1 -1
  538. package/lib/esm/secrets/fs/FsSecretEnvironment.js +1 -1
  539. package/lib/esm/secrets/fs/FsSecretService.js +1 -1
  540. package/lib/esm/secrets/fs/FsSecretServiceConfig.js +1 -1
  541. package/lib/esm/secrets/fs/index.js +1 -1
  542. package/lib/esm/secrets/gcp/GcpSecretEnvironment.js +1 -1
  543. package/lib/esm/secrets/gcp/GcpSecretManagerService.js +1 -1
  544. package/lib/esm/secrets/gcp/GcpSecretManagerServiceConfig.js +1 -1
  545. package/lib/esm/secrets/gcp/index.js +1 -1
  546. package/lib/esm/secrets/index.js +1 -1
  547. package/lib/esm/secrets/kubernetes/KubernetesSecretEnvironment.js +30 -0
  548. package/lib/esm/secrets/kubernetes/KubernetesSecretService.js +474 -0
  549. package/lib/esm/secrets/kubernetes/KubernetesSecretServiceConfig.js +9 -0
  550. package/lib/esm/secrets/kubernetes/index.js +10 -0
  551. package/lib/esm/secrets/model/ModelSecretCrypto.js +1 -1
  552. package/lib/esm/secrets/model/ModelSecretEnvironment.js +1 -1
  553. package/lib/esm/secrets/model/ModelSecretService.js +1 -1
  554. package/lib/esm/secrets/model/ModelSecretServiceConfig.js +1 -1
  555. package/lib/esm/secrets/model/Secret.js +1 -1
  556. package/lib/esm/secrets/model/index.js +1 -1
  557. package/lib/esm/secrets/onepassword/OnePasswordSecretEnvironment.js +1 -1
  558. package/lib/esm/secrets/onepassword/OnePasswordSecretService.js +1 -1
  559. package/lib/esm/secrets/onepassword/OnePasswordSecretServiceConfig.js +1 -1
  560. package/lib/esm/secrets/onepassword/index.js +1 -1
  561. package/lib/esm/secrets/vault/VaultSecretEnvironment.js +1 -1
  562. package/lib/esm/secrets/vault/VaultSecretService.js +1 -1
  563. package/lib/esm/secrets/vault/VaultSecretServiceConfig.js +1 -1
  564. package/lib/esm/secrets/vault/index.js +1 -1
  565. package/lib/esm/sftp/aws/AwsSftpEnvironment.js +1 -1
  566. package/lib/esm/sftp/aws/AwsSftpService.js +1 -1
  567. package/lib/esm/sftp/aws/index.js +1 -1
  568. package/lib/esm/sftp/core/SftpEnvironment.js +1 -1
  569. package/lib/esm/sftp/core/SftpSource.js +1 -1
  570. package/lib/esm/sftp/core/index.js +1 -1
  571. package/lib/esm/sftp/index.js +1 -1
  572. package/lib/esm/sftp/ssh2/Ssh2SftpEnvironment.js +1 -1
  573. package/lib/esm/sftp/ssh2/Ssh2SftpService.js +1 -1
  574. package/lib/esm/sftp/ssh2/index.js +1 -1
  575. package/lib/esm/shared/environmentValue.js +1 -1
  576. package/lib/esm/shared/http/HttpApiService.js +1 -1
  577. package/lib/esm/shared/http/hermeticBoot.js +1 -1
  578. package/lib/esm/shared/http/index.js +1 -1
  579. package/lib/esm/shared/runtime.js +1 -1
  580. package/lib/esm/user-requests/index.js +1 -1
  581. package/lib/esm/utils.js +1 -1
  582. package/lib/types/index.d.cts +2 -2
  583. package/lib/types/index.d.mts +2 -2
  584. package/lib/types/secrets/core/SecretTypes.d.cts +13 -1
  585. package/lib/types/secrets/core/SecretTypes.d.mts +13 -1
  586. package/lib/types/secrets/kubernetes/KubernetesSecretEnvironment.d.cts +34 -0
  587. package/lib/types/secrets/kubernetes/KubernetesSecretEnvironment.d.mts +34 -0
  588. package/lib/types/secrets/kubernetes/KubernetesSecretService.d.cts +45 -0
  589. package/lib/types/secrets/kubernetes/KubernetesSecretService.d.mts +45 -0
  590. package/lib/types/secrets/kubernetes/KubernetesSecretServiceConfig.d.cts +49 -0
  591. package/lib/types/secrets/kubernetes/KubernetesSecretServiceConfig.d.mts +49 -0
  592. package/lib/types/secrets/kubernetes/index.d.cts +9 -0
  593. package/lib/types/secrets/kubernetes/index.d.mts +9 -0
  594. package/package.json +18 -1
  595. package/dist/integrations.cjs.map +0 -1
  596. package/dist/integrations.js.map +0 -1
  597. package/lib/cjs/blob/azure/AzureBlobEnvironment.cjs.map +0 -1
  598. package/lib/cjs/blob/azure/AzureBlobStoreService.cjs.map +0 -1
  599. package/lib/cjs/blob/azure/index.cjs.map +0 -1
  600. package/lib/cjs/blob/core/BlobEnvironment.cjs.map +0 -1
  601. package/lib/cjs/blob/core/BlobErrors.cjs.map +0 -1
  602. package/lib/cjs/blob/core/BlobKey.cjs.map +0 -1
  603. package/lib/cjs/blob/core/BlobStoreFactory.cjs.map +0 -1
  604. package/lib/cjs/blob/core/BlobStoreService.cjs.map +0 -1
  605. package/lib/cjs/blob/core/BlobTypes.cjs.map +0 -1
  606. package/lib/cjs/blob/core/BlobValue.cjs.map +0 -1
  607. package/lib/cjs/blob/core/index.cjs.map +0 -1
  608. package/lib/cjs/blob/gcp/GcsBlobEnvironment.cjs.map +0 -1
  609. package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs.map +0 -1
  610. package/lib/cjs/blob/gcp/index.cjs.map +0 -1
  611. package/lib/cjs/blob/index.cjs.map +0 -1
  612. package/lib/cjs/blob/local/LocalBlobEnvironment.cjs.map +0 -1
  613. package/lib/cjs/blob/local/LocalBlobStoreService.cjs.map +0 -1
  614. package/lib/cjs/blob/local/index.cjs.map +0 -1
  615. package/lib/cjs/blob/memory/MemoryBlobEnvironment.cjs.map +0 -1
  616. package/lib/cjs/blob/memory/MemoryBlobStoreService.cjs.map +0 -1
  617. package/lib/cjs/blob/memory/index.cjs.map +0 -1
  618. package/lib/cjs/blob/s3/MinioBlobEnvironment.cjs.map +0 -1
  619. package/lib/cjs/blob/s3/MinioBlobStoreService.cjs.map +0 -1
  620. package/lib/cjs/blob/s3/R2BlobEnvironment.cjs.map +0 -1
  621. package/lib/cjs/blob/s3/R2BlobStoreService.cjs.map +0 -1
  622. package/lib/cjs/blob/s3/S3BlobEnvironment.cjs.map +0 -1
  623. package/lib/cjs/blob/s3/S3BlobStoreService.cjs.map +0 -1
  624. package/lib/cjs/blob/s3/S3CompatibleBlobStoreService.cjs.map +0 -1
  625. package/lib/cjs/blob/s3/index.cjs.map +0 -1
  626. package/lib/cjs/calendar/CalendarService.cjs.map +0 -1
  627. package/lib/cjs/calendar/environment.cjs.map +0 -1
  628. package/lib/cjs/calendar/google-calendar/GoogleCalendarService.cjs.map +0 -1
  629. package/lib/cjs/calendar/google-calendar/index.cjs.map +0 -1
  630. package/lib/cjs/calendar/index.cjs.map +0 -1
  631. package/lib/cjs/calendar/types.cjs.map +0 -1
  632. package/lib/cjs/calendar/validators/cron.cjs.map +0 -1
  633. package/lib/cjs/calendar/writers/CalendarFsWriter.cjs.map +0 -1
  634. package/lib/cjs/calendar/writers/CalenderDownloader.cjs.map +0 -1
  635. package/lib/cjs/calendar/writers/ICalendarWriter.cjs.map +0 -1
  636. package/lib/cjs/comms/discord/DiscordService.cjs.map +0 -1
  637. package/lib/cjs/comms/discord/index.cjs.map +0 -1
  638. package/lib/cjs/comms/email/EmailService.cjs.map +0 -1
  639. package/lib/cjs/comms/email/index.cjs.map +0 -1
  640. package/lib/cjs/comms/email/mime.cjs.map +0 -1
  641. package/lib/cjs/comms/email/smtp.cjs.map +0 -1
  642. package/lib/cjs/comms/environment.cjs.map +0 -1
  643. package/lib/cjs/comms/gmail/GmailService.cjs.map +0 -1
  644. package/lib/cjs/comms/gmail/index.cjs.map +0 -1
  645. package/lib/cjs/comms/index.cjs.map +0 -1
  646. package/lib/cjs/comms/outlook/MicrosoftOutlookService.cjs.map +0 -1
  647. package/lib/cjs/comms/outlook/index.cjs.map +0 -1
  648. package/lib/cjs/comms/slack/SlackService.cjs.map +0 -1
  649. package/lib/cjs/comms/slack/index.cjs.map +0 -1
  650. package/lib/cjs/comms/teams/TeamsService.cjs.map +0 -1
  651. package/lib/cjs/comms/teams/index.cjs.map +0 -1
  652. package/lib/cjs/comms/telegram/TelegramService.cjs.map +0 -1
  653. package/lib/cjs/comms/telegram/index.cjs.map +0 -1
  654. package/lib/cjs/comms/whatsapp/WhatsAppService.cjs.map +0 -1
  655. package/lib/cjs/comms/whatsapp/index.cjs.map +0 -1
  656. package/lib/cjs/devops/environment.cjs.map +0 -1
  657. package/lib/cjs/devops/github/GithubService.cjs.map +0 -1
  658. package/lib/cjs/devops/github/index.cjs.map +0 -1
  659. package/lib/cjs/devops/gitlab/GitlabService.cjs.map +0 -1
  660. package/lib/cjs/devops/gitlab/index.cjs.map +0 -1
  661. package/lib/cjs/devops/index.cjs.map +0 -1
  662. package/lib/cjs/docker/DockerComposeService.cjs.map +0 -1
  663. package/lib/cjs/docker/index.cjs.map +0 -1
  664. package/lib/cjs/feature-flags/EngineCapabilityFeatureFlag.service.cjs.map +0 -1
  665. package/lib/cjs/feature-flags/constants.cjs.map +0 -1
  666. package/lib/cjs/feature-flags/decorators.cjs.map +0 -1
  667. package/lib/cjs/feature-flags/environment.cjs.map +0 -1
  668. package/lib/cjs/feature-flags/index.cjs.map +0 -1
  669. package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs.map +0 -1
  670. package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs.map +0 -1
  671. package/lib/cjs/feature-flags/readers/FeatureFlagReader.cjs.map +0 -1
  672. package/lib/cjs/feature-flags/readers/index.cjs.map +0 -1
  673. package/lib/cjs/feature-flags/services/FeatureFlag.service.cjs.map +0 -1
  674. package/lib/cjs/feature-flags/types.cjs.map +0 -1
  675. package/lib/cjs/feature-flags/utils.cjs.map +0 -1
  676. package/lib/cjs/index.cjs.map +0 -1
  677. package/lib/cjs/io/airtable/AirtableService.cjs.map +0 -1
  678. package/lib/cjs/io/airtable/index.cjs.map +0 -1
  679. package/lib/cjs/io/confluence/ConfluenceService.cjs.map +0 -1
  680. package/lib/cjs/io/confluence/index.cjs.map +0 -1
  681. package/lib/cjs/io/environment.cjs.map +0 -1
  682. package/lib/cjs/io/google-docs/GoogleDocsService.cjs.map +0 -1
  683. package/lib/cjs/io/google-docs/index.cjs.map +0 -1
  684. package/lib/cjs/io/google-sheets/GoogleSheetsService.cjs.map +0 -1
  685. package/lib/cjs/io/google-sheets/index.cjs.map +0 -1
  686. package/lib/cjs/io/graphql/GraphqlService.cjs.map +0 -1
  687. package/lib/cjs/io/graphql/index.cjs.map +0 -1
  688. package/lib/cjs/io/index.cjs.map +0 -1
  689. package/lib/cjs/io/jira/JiraService.cjs.map +0 -1
  690. package/lib/cjs/io/jira/index.cjs.map +0 -1
  691. package/lib/cjs/io/microsoft-excel/MicrosoftExcelService.cjs.map +0 -1
  692. package/lib/cjs/io/microsoft-excel/index.cjs.map +0 -1
  693. package/lib/cjs/io/microsoft-sharepoint/MicrosoftSharePointService.cjs.map +0 -1
  694. package/lib/cjs/io/microsoft-sharepoint/index.cjs.map +0 -1
  695. package/lib/cjs/io/spreadsheet/SpreadsheetService.cjs.map +0 -1
  696. package/lib/cjs/io/spreadsheet/index.cjs.map +0 -1
  697. package/lib/cjs/keycloak/broker.cjs.map +0 -1
  698. package/lib/cjs/keycloak/index.cjs.map +0 -1
  699. package/lib/cjs/keycloak/services/KeycloakAuthService.cjs.map +0 -1
  700. package/lib/cjs/keycloak/services/KeycloakClientService.cjs.map +0 -1
  701. package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs.map +0 -1
  702. package/lib/cjs/keycloak/services/KeycloakRealmService.cjs.map +0 -1
  703. package/lib/cjs/keycloak/services/KeycloakRoleService.cjs.map +0 -1
  704. package/lib/cjs/keycloak/services/KeycloakService.cjs.map +0 -1
  705. package/lib/cjs/keycloak/services/KeycloakUserService.cjs.map +0 -1
  706. package/lib/cjs/keycloak/services/index.cjs.map +0 -1
  707. package/lib/cjs/keycloak/services/runtime.cjs.map +0 -1
  708. package/lib/cjs/keycloak/types.cjs.map +0 -1
  709. package/lib/cjs/kibana/builders/KibanaIndexBuilder.cjs.map +0 -1
  710. package/lib/cjs/kibana/builders/KibanaIndexBuilderCollection.cjs.map +0 -1
  711. package/lib/cjs/kibana/builders/index.cjs.map +0 -1
  712. package/lib/cjs/kibana/helpers.cjs.map +0 -1
  713. package/lib/cjs/kibana/index.cjs.map +0 -1
  714. package/lib/cjs/kibana/services/KibanaAuthService.cjs.map +0 -1
  715. package/lib/cjs/kibana/services/KibanaDashboardService.cjs.map +0 -1
  716. package/lib/cjs/kibana/services/KibanaDataViewService.cjs.map +0 -1
  717. package/lib/cjs/kibana/services/KibanaRoleService.cjs.map +0 -1
  718. package/lib/cjs/kibana/services/KibanaService.cjs.map +0 -1
  719. package/lib/cjs/kibana/services/KibanaSpaceService.cjs.map +0 -1
  720. package/lib/cjs/kibana/services/KibanaUserService.cjs.map +0 -1
  721. package/lib/cjs/kibana/services/index.cjs.map +0 -1
  722. package/lib/cjs/kibana/services/runtime.cjs.map +0 -1
  723. package/lib/cjs/kibana/types.cjs.map +0 -1
  724. package/lib/cjs/loader/ObjectLoader.cjs.map +0 -1
  725. package/lib/cjs/loader/assets.cjs.map +0 -1
  726. package/lib/cjs/loader/config.cjs.map +0 -1
  727. package/lib/cjs/loader/families.cjs.map +0 -1
  728. package/lib/cjs/loader/index.cjs.map +0 -1
  729. package/lib/cjs/loader/nest.cjs.map +0 -1
  730. package/lib/cjs/loader/types.cjs.map +0 -1
  731. package/lib/cjs/namespaces/index.cjs.map +0 -1
  732. package/lib/cjs/namespaces/models/authorization-model.cjs.map +0 -1
  733. package/lib/cjs/namespaces/models/credential.model.cjs.map +0 -1
  734. package/lib/cjs/namespaces/models/effective-permission.model.cjs.map +0 -1
  735. package/lib/cjs/namespaces/models/group-membership.model.cjs.map +0 -1
  736. package/lib/cjs/namespaces/models/group.model.cjs.map +0 -1
  737. package/lib/cjs/namespaces/models/index.cjs.map +0 -1
  738. package/lib/cjs/namespaces/models/inheritance-block.model.cjs.map +0 -1
  739. package/lib/cjs/namespaces/models/org-unit-closure.model.cjs.map +0 -1
  740. package/lib/cjs/namespaces/models/org-unit-membership.model.cjs.map +0 -1
  741. package/lib/cjs/namespaces/models/org-unit-profile.model.cjs.map +0 -1
  742. package/lib/cjs/namespaces/models/org-unit.model.cjs.map +0 -1
  743. package/lib/cjs/namespaces/models/permission.model.cjs.map +0 -1
  744. package/lib/cjs/namespaces/models/principal.model.cjs.map +0 -1
  745. package/lib/cjs/namespaces/models/protected-resource.model.cjs.map +0 -1
  746. package/lib/cjs/namespaces/models/resource-grant.model.cjs.map +0 -1
  747. package/lib/cjs/namespaces/models/role-assignment.model.cjs.map +0 -1
  748. package/lib/cjs/namespaces/models/role-permission.model.cjs.map +0 -1
  749. package/lib/cjs/namespaces/models/role.model.cjs.map +0 -1
  750. package/lib/cjs/namespaces/models/storage-binding.model.cjs.map +0 -1
  751. package/lib/cjs/namespaces/models/tenant-membership.model.cjs.map +0 -1
  752. package/lib/cjs/namespaces/models/tenant-profile.model.cjs.map +0 -1
  753. package/lib/cjs/namespaces/models/tenant.model.cjs.map +0 -1
  754. package/lib/cjs/namespaces/models/user.model.cjs.map +0 -1
  755. package/lib/cjs/namespaces/org-based-authorization-system.cjs.map +0 -1
  756. package/lib/cjs/namespaces/org-based-authorization-system.models.cjs.map +0 -1
  757. package/lib/cjs/namespaces/org-based-authorization-system.services.cjs.map +0 -1
  758. package/lib/cjs/namespaces/rls/index.cjs.map +0 -1
  759. package/lib/cjs/namespaces/rls/principal-resolver.cjs.map +0 -1
  760. package/lib/cjs/namespaces/rls/rls-bootstrap.service.cjs.map +0 -1
  761. package/lib/cjs/namespaces/rls/rls.constants.cjs.map +0 -1
  762. package/lib/cjs/namespaces/rls/rls.template.cjs.map +0 -1
  763. package/lib/cjs/namespaces/rls/rls.types.cjs.map +0 -1
  764. package/lib/cjs/namespaces/rls/session-binding.cjs.map +0 -1
  765. package/lib/cjs/namespaces/services/authz.service.cjs.map +0 -1
  766. package/lib/cjs/namespaces/services/bootstrap.service.cjs.map +0 -1
  767. package/lib/cjs/namespaces/services/credential.service.cjs.map +0 -1
  768. package/lib/cjs/namespaces/services/effective-permission.service.cjs.map +0 -1
  769. package/lib/cjs/namespaces/services/group-membership.service.cjs.map +0 -1
  770. package/lib/cjs/namespaces/services/group.service.cjs.map +0 -1
  771. package/lib/cjs/namespaces/services/index.cjs.map +0 -1
  772. package/lib/cjs/namespaces/services/inheritance-block.service.cjs.map +0 -1
  773. package/lib/cjs/namespaces/services/org-unit-closure.service.cjs.map +0 -1
  774. package/lib/cjs/namespaces/services/org-unit-membership.service.cjs.map +0 -1
  775. package/lib/cjs/namespaces/services/org-unit-profile.service.cjs.map +0 -1
  776. package/lib/cjs/namespaces/services/org-unit.service.cjs.map +0 -1
  777. package/lib/cjs/namespaces/services/permission.service.cjs.map +0 -1
  778. package/lib/cjs/namespaces/services/principal.service.cjs.map +0 -1
  779. package/lib/cjs/namespaces/services/protected-resource.service.cjs.map +0 -1
  780. package/lib/cjs/namespaces/services/resource-grant.service.cjs.map +0 -1
  781. package/lib/cjs/namespaces/services/resource-lifecycle.service.cjs.map +0 -1
  782. package/lib/cjs/namespaces/services/role-assignment.service.cjs.map +0 -1
  783. package/lib/cjs/namespaces/services/role-permission.service.cjs.map +0 -1
  784. package/lib/cjs/namespaces/services/role.service.cjs.map +0 -1
  785. package/lib/cjs/namespaces/services/storage-binding.service.cjs.map +0 -1
  786. package/lib/cjs/namespaces/services/system-management.service.cjs.map +0 -1
  787. package/lib/cjs/namespaces/services/tenant-membership.service.cjs.map +0 -1
  788. package/lib/cjs/namespaces/services/tenant-profile.service.cjs.map +0 -1
  789. package/lib/cjs/namespaces/services/tenant.service.cjs.map +0 -1
  790. package/lib/cjs/namespaces/services/user.service.cjs.map +0 -1
  791. package/lib/cjs/namespaces/types.cjs.map +0 -1
  792. package/lib/cjs/namespaces/utils.cjs.map +0 -1
  793. package/lib/cjs/nest/decorators.cjs.map +0 -1
  794. package/lib/cjs/nest/index.cjs.map +0 -1
  795. package/lib/cjs/nest/keycloakAuthHandler.cjs.map +0 -1
  796. package/lib/cjs/nest/keycloakModule.cjs.map +0 -1
  797. package/lib/cjs/nest/logging.cjs.map +0 -1
  798. package/lib/cjs/nest/types.cjs.map +0 -1
  799. package/lib/cjs/nest/utils.cjs.map +0 -1
  800. package/lib/cjs/plugins/contract.cjs.map +0 -1
  801. package/lib/cjs/plugins/index.cjs.map +0 -1
  802. package/lib/cjs/plugins/kibana/host.cjs.map +0 -1
  803. package/lib/cjs/plugins/kibana/index.cjs.map +0 -1
  804. package/lib/cjs/plugins/kibana/installer.cjs.map +0 -1
  805. package/lib/cjs/plugins/kibana/manifest.cjs.map +0 -1
  806. package/lib/cjs/plugins/kibana/templates.cjs.map +0 -1
  807. package/lib/cjs/plugins/kibana/types.cjs.map +0 -1
  808. package/lib/cjs/plugins/superset/host.cjs.map +0 -1
  809. package/lib/cjs/plugins/superset/index.cjs.map +0 -1
  810. package/lib/cjs/plugins/superset/installer.cjs.map +0 -1
  811. package/lib/cjs/plugins/superset/manifest.cjs.map +0 -1
  812. package/lib/cjs/plugins/superset/templates.cjs.map +0 -1
  813. package/lib/cjs/plugins/superset/types.cjs.map +0 -1
  814. package/lib/cjs/redis/RedisContextLock.cjs.map +0 -1
  815. package/lib/cjs/redis/RedisDispatch.cjs.map +0 -1
  816. package/lib/cjs/redis/RedisPaginator.cjs.map +0 -1
  817. package/lib/cjs/redis/RedisStatement.cjs.map +0 -1
  818. package/lib/cjs/redis/adapter.cjs.map +0 -1
  819. package/lib/cjs/redis/constants.cjs.map +0 -1
  820. package/lib/cjs/redis/handlers.cjs.map +0 -1
  821. package/lib/cjs/redis/index.cjs.map +0 -1
  822. package/lib/cjs/redis/serialization.cjs.map +0 -1
  823. package/lib/cjs/redis/types.cjs.map +0 -1
  824. package/lib/cjs/secrets/InfraCredentialBootstrap.cjs.map +0 -1
  825. package/lib/cjs/secrets/aws/AwsSecretEnvironment.cjs.map +0 -1
  826. package/lib/cjs/secrets/aws/AwsSecretService.cjs.map +0 -1
  827. package/lib/cjs/secrets/aws/AwsSecretServiceConfig.cjs.map +0 -1
  828. package/lib/cjs/secrets/aws/index.cjs.map +0 -1
  829. package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs.map +0 -1
  830. package/lib/cjs/secrets/azure/AzureKeyVaultSecretServiceConfig.cjs.map +0 -1
  831. package/lib/cjs/secrets/azure/AzureSecretEnvironment.cjs.map +0 -1
  832. package/lib/cjs/secrets/azure/index.cjs.map +0 -1
  833. package/lib/cjs/secrets/core/ClientBasedSecretService.cjs.map +0 -1
  834. package/lib/cjs/secrets/core/SecretEnvironment.cjs.map +0 -1
  835. package/lib/cjs/secrets/core/SecretErrors.cjs.map +0 -1
  836. package/lib/cjs/secrets/core/SecretName.cjs.map +0 -1
  837. package/lib/cjs/secrets/core/SecretReference.cjs.map +0 -1
  838. package/lib/cjs/secrets/core/SecretSerialization.cjs.map +0 -1
  839. package/lib/cjs/secrets/core/SecretService.cjs.map +0 -1
  840. package/lib/cjs/secrets/core/SecretTypes.cjs.map +0 -1
  841. package/lib/cjs/secrets/core/index.cjs.map +0 -1
  842. package/lib/cjs/secrets/fs/FsSecretEnvironment.cjs.map +0 -1
  843. package/lib/cjs/secrets/fs/FsSecretService.cjs.map +0 -1
  844. package/lib/cjs/secrets/fs/FsSecretServiceConfig.cjs.map +0 -1
  845. package/lib/cjs/secrets/fs/index.cjs.map +0 -1
  846. package/lib/cjs/secrets/gcp/GcpSecretEnvironment.cjs.map +0 -1
  847. package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs.map +0 -1
  848. package/lib/cjs/secrets/gcp/GcpSecretManagerServiceConfig.cjs.map +0 -1
  849. package/lib/cjs/secrets/gcp/index.cjs.map +0 -1
  850. package/lib/cjs/secrets/index.cjs.map +0 -1
  851. package/lib/cjs/secrets/model/ModelSecretCrypto.cjs.map +0 -1
  852. package/lib/cjs/secrets/model/ModelSecretEnvironment.cjs.map +0 -1
  853. package/lib/cjs/secrets/model/ModelSecretService.cjs.map +0 -1
  854. package/lib/cjs/secrets/model/ModelSecretServiceConfig.cjs.map +0 -1
  855. package/lib/cjs/secrets/model/Secret.cjs.map +0 -1
  856. package/lib/cjs/secrets/model/index.cjs.map +0 -1
  857. package/lib/cjs/secrets/onepassword/OnePasswordSecretEnvironment.cjs.map +0 -1
  858. package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs.map +0 -1
  859. package/lib/cjs/secrets/onepassword/OnePasswordSecretServiceConfig.cjs.map +0 -1
  860. package/lib/cjs/secrets/onepassword/index.cjs.map +0 -1
  861. package/lib/cjs/secrets/vault/VaultSecretEnvironment.cjs.map +0 -1
  862. package/lib/cjs/secrets/vault/VaultSecretService.cjs.map +0 -1
  863. package/lib/cjs/secrets/vault/VaultSecretServiceConfig.cjs.map +0 -1
  864. package/lib/cjs/secrets/vault/index.cjs.map +0 -1
  865. package/lib/cjs/sftp/aws/AwsSftpEnvironment.cjs.map +0 -1
  866. package/lib/cjs/sftp/aws/AwsSftpService.cjs.map +0 -1
  867. package/lib/cjs/sftp/aws/index.cjs.map +0 -1
  868. package/lib/cjs/sftp/core/SftpEnvironment.cjs.map +0 -1
  869. package/lib/cjs/sftp/core/SftpSource.cjs.map +0 -1
  870. package/lib/cjs/sftp/core/index.cjs.map +0 -1
  871. package/lib/cjs/sftp/index.cjs.map +0 -1
  872. package/lib/cjs/sftp/ssh2/Ssh2SftpEnvironment.cjs.map +0 -1
  873. package/lib/cjs/sftp/ssh2/Ssh2SftpService.cjs.map +0 -1
  874. package/lib/cjs/sftp/ssh2/index.cjs.map +0 -1
  875. package/lib/cjs/shared/environmentValue.cjs.map +0 -1
  876. package/lib/cjs/shared/http/HttpApiService.cjs.map +0 -1
  877. package/lib/cjs/shared/http/hermeticBoot.cjs.map +0 -1
  878. package/lib/cjs/shared/http/index.cjs.map +0 -1
  879. package/lib/cjs/shared/runtime.cjs.map +0 -1
  880. package/lib/cjs/user-requests/index.cjs.map +0 -1
  881. package/lib/cjs/utils.cjs.map +0 -1
  882. package/lib/esm/blob/azure/AzureBlobEnvironment.js.map +0 -1
  883. package/lib/esm/blob/azure/AzureBlobStoreService.js.map +0 -1
  884. package/lib/esm/blob/azure/index.js.map +0 -1
  885. package/lib/esm/blob/core/BlobEnvironment.js.map +0 -1
  886. package/lib/esm/blob/core/BlobErrors.js.map +0 -1
  887. package/lib/esm/blob/core/BlobKey.js.map +0 -1
  888. package/lib/esm/blob/core/BlobStoreFactory.js.map +0 -1
  889. package/lib/esm/blob/core/BlobStoreService.js.map +0 -1
  890. package/lib/esm/blob/core/BlobTypes.js.map +0 -1
  891. package/lib/esm/blob/core/BlobValue.js.map +0 -1
  892. package/lib/esm/blob/core/index.js.map +0 -1
  893. package/lib/esm/blob/gcp/GcsBlobEnvironment.js.map +0 -1
  894. package/lib/esm/blob/gcp/GcsBlobStoreService.js.map +0 -1
  895. package/lib/esm/blob/gcp/index.js.map +0 -1
  896. package/lib/esm/blob/index.js.map +0 -1
  897. package/lib/esm/blob/local/LocalBlobEnvironment.js.map +0 -1
  898. package/lib/esm/blob/local/LocalBlobStoreService.js.map +0 -1
  899. package/lib/esm/blob/local/index.js.map +0 -1
  900. package/lib/esm/blob/memory/MemoryBlobEnvironment.js.map +0 -1
  901. package/lib/esm/blob/memory/MemoryBlobStoreService.js.map +0 -1
  902. package/lib/esm/blob/memory/index.js.map +0 -1
  903. package/lib/esm/blob/s3/MinioBlobEnvironment.js.map +0 -1
  904. package/lib/esm/blob/s3/MinioBlobStoreService.js.map +0 -1
  905. package/lib/esm/blob/s3/R2BlobEnvironment.js.map +0 -1
  906. package/lib/esm/blob/s3/R2BlobStoreService.js.map +0 -1
  907. package/lib/esm/blob/s3/S3BlobEnvironment.js.map +0 -1
  908. package/lib/esm/blob/s3/S3BlobStoreService.js.map +0 -1
  909. package/lib/esm/blob/s3/S3CompatibleBlobStoreService.js.map +0 -1
  910. package/lib/esm/blob/s3/index.js.map +0 -1
  911. package/lib/esm/calendar/CalendarService.js.map +0 -1
  912. package/lib/esm/calendar/environment.js.map +0 -1
  913. package/lib/esm/calendar/google-calendar/GoogleCalendarService.js.map +0 -1
  914. package/lib/esm/calendar/google-calendar/index.js.map +0 -1
  915. package/lib/esm/calendar/index.js.map +0 -1
  916. package/lib/esm/calendar/types.js.map +0 -1
  917. package/lib/esm/calendar/validators/cron.js.map +0 -1
  918. package/lib/esm/calendar/writers/CalendarFsWriter.js.map +0 -1
  919. package/lib/esm/calendar/writers/CalenderDownloader.js.map +0 -1
  920. package/lib/esm/calendar/writers/ICalendarWriter.js.map +0 -1
  921. package/lib/esm/comms/discord/DiscordService.js.map +0 -1
  922. package/lib/esm/comms/discord/index.js.map +0 -1
  923. package/lib/esm/comms/email/EmailService.js.map +0 -1
  924. package/lib/esm/comms/email/index.js.map +0 -1
  925. package/lib/esm/comms/email/mime.js.map +0 -1
  926. package/lib/esm/comms/email/smtp.js.map +0 -1
  927. package/lib/esm/comms/environment.js.map +0 -1
  928. package/lib/esm/comms/gmail/GmailService.js.map +0 -1
  929. package/lib/esm/comms/gmail/index.js.map +0 -1
  930. package/lib/esm/comms/index.js.map +0 -1
  931. package/lib/esm/comms/outlook/MicrosoftOutlookService.js.map +0 -1
  932. package/lib/esm/comms/outlook/index.js.map +0 -1
  933. package/lib/esm/comms/slack/SlackService.js.map +0 -1
  934. package/lib/esm/comms/slack/index.js.map +0 -1
  935. package/lib/esm/comms/teams/TeamsService.js.map +0 -1
  936. package/lib/esm/comms/teams/index.js.map +0 -1
  937. package/lib/esm/comms/telegram/TelegramService.js.map +0 -1
  938. package/lib/esm/comms/telegram/index.js.map +0 -1
  939. package/lib/esm/comms/whatsapp/WhatsAppService.js.map +0 -1
  940. package/lib/esm/comms/whatsapp/index.js.map +0 -1
  941. package/lib/esm/devops/environment.js.map +0 -1
  942. package/lib/esm/devops/github/GithubService.js.map +0 -1
  943. package/lib/esm/devops/github/index.js.map +0 -1
  944. package/lib/esm/devops/gitlab/GitlabService.js.map +0 -1
  945. package/lib/esm/devops/gitlab/index.js.map +0 -1
  946. package/lib/esm/devops/index.js.map +0 -1
  947. package/lib/esm/docker/DockerComposeService.js.map +0 -1
  948. package/lib/esm/docker/index.js.map +0 -1
  949. package/lib/esm/feature-flags/EngineCapabilityFeatureFlag.service.js.map +0 -1
  950. package/lib/esm/feature-flags/constants.js.map +0 -1
  951. package/lib/esm/feature-flags/decorators.js.map +0 -1
  952. package/lib/esm/feature-flags/environment.js.map +0 -1
  953. package/lib/esm/feature-flags/index.js.map +0 -1
  954. package/lib/esm/feature-flags/models/FeatureFlag.model.js.map +0 -1
  955. package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js.map +0 -1
  956. package/lib/esm/feature-flags/readers/FeatureFlagReader.js.map +0 -1
  957. package/lib/esm/feature-flags/readers/index.js.map +0 -1
  958. package/lib/esm/feature-flags/services/FeatureFlag.service.js.map +0 -1
  959. package/lib/esm/feature-flags/types.js.map +0 -1
  960. package/lib/esm/feature-flags/utils.js.map +0 -1
  961. package/lib/esm/index.js.map +0 -1
  962. package/lib/esm/io/airtable/AirtableService.js.map +0 -1
  963. package/lib/esm/io/airtable/index.js.map +0 -1
  964. package/lib/esm/io/confluence/ConfluenceService.js.map +0 -1
  965. package/lib/esm/io/confluence/index.js.map +0 -1
  966. package/lib/esm/io/environment.js.map +0 -1
  967. package/lib/esm/io/google-docs/GoogleDocsService.js.map +0 -1
  968. package/lib/esm/io/google-docs/index.js.map +0 -1
  969. package/lib/esm/io/google-sheets/GoogleSheetsService.js.map +0 -1
  970. package/lib/esm/io/google-sheets/index.js.map +0 -1
  971. package/lib/esm/io/graphql/GraphqlService.js.map +0 -1
  972. package/lib/esm/io/graphql/index.js.map +0 -1
  973. package/lib/esm/io/index.js.map +0 -1
  974. package/lib/esm/io/jira/JiraService.js.map +0 -1
  975. package/lib/esm/io/jira/index.js.map +0 -1
  976. package/lib/esm/io/microsoft-excel/MicrosoftExcelService.js.map +0 -1
  977. package/lib/esm/io/microsoft-excel/index.js.map +0 -1
  978. package/lib/esm/io/microsoft-sharepoint/MicrosoftSharePointService.js.map +0 -1
  979. package/lib/esm/io/microsoft-sharepoint/index.js.map +0 -1
  980. package/lib/esm/io/spreadsheet/SpreadsheetService.js.map +0 -1
  981. package/lib/esm/io/spreadsheet/index.js.map +0 -1
  982. package/lib/esm/keycloak/broker.js.map +0 -1
  983. package/lib/esm/keycloak/index.js.map +0 -1
  984. package/lib/esm/keycloak/services/KeycloakAuthService.js.map +0 -1
  985. package/lib/esm/keycloak/services/KeycloakClientService.js.map +0 -1
  986. package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js.map +0 -1
  987. package/lib/esm/keycloak/services/KeycloakRealmService.js.map +0 -1
  988. package/lib/esm/keycloak/services/KeycloakRoleService.js.map +0 -1
  989. package/lib/esm/keycloak/services/KeycloakService.js.map +0 -1
  990. package/lib/esm/keycloak/services/KeycloakUserService.js.map +0 -1
  991. package/lib/esm/keycloak/services/index.js.map +0 -1
  992. package/lib/esm/keycloak/services/runtime.js.map +0 -1
  993. package/lib/esm/keycloak/types.js.map +0 -1
  994. package/lib/esm/kibana/builders/KibanaIndexBuilder.js.map +0 -1
  995. package/lib/esm/kibana/builders/KibanaIndexBuilderCollection.js.map +0 -1
  996. package/lib/esm/kibana/builders/index.js.map +0 -1
  997. package/lib/esm/kibana/helpers.js.map +0 -1
  998. package/lib/esm/kibana/index.js.map +0 -1
  999. package/lib/esm/kibana/services/KibanaAuthService.js.map +0 -1
  1000. package/lib/esm/kibana/services/KibanaDashboardService.js.map +0 -1
  1001. package/lib/esm/kibana/services/KibanaDataViewService.js.map +0 -1
  1002. package/lib/esm/kibana/services/KibanaRoleService.js.map +0 -1
  1003. package/lib/esm/kibana/services/KibanaService.js.map +0 -1
  1004. package/lib/esm/kibana/services/KibanaSpaceService.js.map +0 -1
  1005. package/lib/esm/kibana/services/KibanaUserService.js.map +0 -1
  1006. package/lib/esm/kibana/services/index.js.map +0 -1
  1007. package/lib/esm/kibana/services/runtime.js.map +0 -1
  1008. package/lib/esm/kibana/types.js.map +0 -1
  1009. package/lib/esm/loader/ObjectLoader.js.map +0 -1
  1010. package/lib/esm/loader/assets.js.map +0 -1
  1011. package/lib/esm/loader/config.js.map +0 -1
  1012. package/lib/esm/loader/families.js.map +0 -1
  1013. package/lib/esm/loader/index.js.map +0 -1
  1014. package/lib/esm/loader/nest.js.map +0 -1
  1015. package/lib/esm/loader/types.js.map +0 -1
  1016. package/lib/esm/namespaces/index.js.map +0 -1
  1017. package/lib/esm/namespaces/models/authorization-model.js.map +0 -1
  1018. package/lib/esm/namespaces/models/credential.model.js.map +0 -1
  1019. package/lib/esm/namespaces/models/effective-permission.model.js.map +0 -1
  1020. package/lib/esm/namespaces/models/group-membership.model.js.map +0 -1
  1021. package/lib/esm/namespaces/models/group.model.js.map +0 -1
  1022. package/lib/esm/namespaces/models/index.js.map +0 -1
  1023. package/lib/esm/namespaces/models/inheritance-block.model.js.map +0 -1
  1024. package/lib/esm/namespaces/models/org-unit-closure.model.js.map +0 -1
  1025. package/lib/esm/namespaces/models/org-unit-membership.model.js.map +0 -1
  1026. package/lib/esm/namespaces/models/org-unit-profile.model.js.map +0 -1
  1027. package/lib/esm/namespaces/models/org-unit.model.js.map +0 -1
  1028. package/lib/esm/namespaces/models/permission.model.js.map +0 -1
  1029. package/lib/esm/namespaces/models/principal.model.js.map +0 -1
  1030. package/lib/esm/namespaces/models/protected-resource.model.js.map +0 -1
  1031. package/lib/esm/namespaces/models/resource-grant.model.js.map +0 -1
  1032. package/lib/esm/namespaces/models/role-assignment.model.js.map +0 -1
  1033. package/lib/esm/namespaces/models/role-permission.model.js.map +0 -1
  1034. package/lib/esm/namespaces/models/role.model.js.map +0 -1
  1035. package/lib/esm/namespaces/models/storage-binding.model.js.map +0 -1
  1036. package/lib/esm/namespaces/models/tenant-membership.model.js.map +0 -1
  1037. package/lib/esm/namespaces/models/tenant-profile.model.js.map +0 -1
  1038. package/lib/esm/namespaces/models/tenant.model.js.map +0 -1
  1039. package/lib/esm/namespaces/models/user.model.js.map +0 -1
  1040. package/lib/esm/namespaces/org-based-authorization-system.js.map +0 -1
  1041. package/lib/esm/namespaces/org-based-authorization-system.models.js.map +0 -1
  1042. package/lib/esm/namespaces/org-based-authorization-system.services.js.map +0 -1
  1043. package/lib/esm/namespaces/rls/index.js.map +0 -1
  1044. package/lib/esm/namespaces/rls/principal-resolver.js.map +0 -1
  1045. package/lib/esm/namespaces/rls/rls-bootstrap.service.js.map +0 -1
  1046. package/lib/esm/namespaces/rls/rls.constants.js.map +0 -1
  1047. package/lib/esm/namespaces/rls/rls.template.js.map +0 -1
  1048. package/lib/esm/namespaces/rls/rls.types.js.map +0 -1
  1049. package/lib/esm/namespaces/rls/session-binding.js.map +0 -1
  1050. package/lib/esm/namespaces/services/authz.service.js.map +0 -1
  1051. package/lib/esm/namespaces/services/bootstrap.service.js.map +0 -1
  1052. package/lib/esm/namespaces/services/credential.service.js.map +0 -1
  1053. package/lib/esm/namespaces/services/effective-permission.service.js.map +0 -1
  1054. package/lib/esm/namespaces/services/group-membership.service.js.map +0 -1
  1055. package/lib/esm/namespaces/services/group.service.js.map +0 -1
  1056. package/lib/esm/namespaces/services/index.js.map +0 -1
  1057. package/lib/esm/namespaces/services/inheritance-block.service.js.map +0 -1
  1058. package/lib/esm/namespaces/services/org-unit-closure.service.js.map +0 -1
  1059. package/lib/esm/namespaces/services/org-unit-membership.service.js.map +0 -1
  1060. package/lib/esm/namespaces/services/org-unit-profile.service.js.map +0 -1
  1061. package/lib/esm/namespaces/services/org-unit.service.js.map +0 -1
  1062. package/lib/esm/namespaces/services/permission.service.js.map +0 -1
  1063. package/lib/esm/namespaces/services/principal.service.js.map +0 -1
  1064. package/lib/esm/namespaces/services/protected-resource.service.js.map +0 -1
  1065. package/lib/esm/namespaces/services/resource-grant.service.js.map +0 -1
  1066. package/lib/esm/namespaces/services/resource-lifecycle.service.js.map +0 -1
  1067. package/lib/esm/namespaces/services/role-assignment.service.js.map +0 -1
  1068. package/lib/esm/namespaces/services/role-permission.service.js.map +0 -1
  1069. package/lib/esm/namespaces/services/role.service.js.map +0 -1
  1070. package/lib/esm/namespaces/services/storage-binding.service.js.map +0 -1
  1071. package/lib/esm/namespaces/services/system-management.service.js.map +0 -1
  1072. package/lib/esm/namespaces/services/tenant-membership.service.js.map +0 -1
  1073. package/lib/esm/namespaces/services/tenant-profile.service.js.map +0 -1
  1074. package/lib/esm/namespaces/services/tenant.service.js.map +0 -1
  1075. package/lib/esm/namespaces/services/user.service.js.map +0 -1
  1076. package/lib/esm/namespaces/types.js.map +0 -1
  1077. package/lib/esm/namespaces/utils.js.map +0 -1
  1078. package/lib/esm/nest/decorators.js.map +0 -1
  1079. package/lib/esm/nest/index.js.map +0 -1
  1080. package/lib/esm/nest/keycloakAuthHandler.js.map +0 -1
  1081. package/lib/esm/nest/keycloakModule.js.map +0 -1
  1082. package/lib/esm/nest/logging.js.map +0 -1
  1083. package/lib/esm/nest/types.js.map +0 -1
  1084. package/lib/esm/nest/utils.js.map +0 -1
  1085. package/lib/esm/plugins/contract.js.map +0 -1
  1086. package/lib/esm/plugins/index.js.map +0 -1
  1087. package/lib/esm/plugins/kibana/host.js.map +0 -1
  1088. package/lib/esm/plugins/kibana/index.js.map +0 -1
  1089. package/lib/esm/plugins/kibana/installer.js.map +0 -1
  1090. package/lib/esm/plugins/kibana/manifest.js.map +0 -1
  1091. package/lib/esm/plugins/kibana/templates.js.map +0 -1
  1092. package/lib/esm/plugins/kibana/types.js.map +0 -1
  1093. package/lib/esm/plugins/superset/host.js.map +0 -1
  1094. package/lib/esm/plugins/superset/index.js.map +0 -1
  1095. package/lib/esm/plugins/superset/installer.js.map +0 -1
  1096. package/lib/esm/plugins/superset/manifest.js.map +0 -1
  1097. package/lib/esm/plugins/superset/templates.js.map +0 -1
  1098. package/lib/esm/plugins/superset/types.js.map +0 -1
  1099. package/lib/esm/redis/RedisContextLock.js.map +0 -1
  1100. package/lib/esm/redis/RedisDispatch.js.map +0 -1
  1101. package/lib/esm/redis/RedisPaginator.js.map +0 -1
  1102. package/lib/esm/redis/RedisStatement.js.map +0 -1
  1103. package/lib/esm/redis/adapter.js.map +0 -1
  1104. package/lib/esm/redis/constants.js.map +0 -1
  1105. package/lib/esm/redis/handlers.js.map +0 -1
  1106. package/lib/esm/redis/index.js.map +0 -1
  1107. package/lib/esm/redis/serialization.js.map +0 -1
  1108. package/lib/esm/redis/types.js.map +0 -1
  1109. package/lib/esm/secrets/InfraCredentialBootstrap.js.map +0 -1
  1110. package/lib/esm/secrets/aws/AwsSecretEnvironment.js.map +0 -1
  1111. package/lib/esm/secrets/aws/AwsSecretService.js.map +0 -1
  1112. package/lib/esm/secrets/aws/AwsSecretServiceConfig.js.map +0 -1
  1113. package/lib/esm/secrets/aws/index.js.map +0 -1
  1114. package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js.map +0 -1
  1115. package/lib/esm/secrets/azure/AzureKeyVaultSecretServiceConfig.js.map +0 -1
  1116. package/lib/esm/secrets/azure/AzureSecretEnvironment.js.map +0 -1
  1117. package/lib/esm/secrets/azure/index.js.map +0 -1
  1118. package/lib/esm/secrets/core/ClientBasedSecretService.js.map +0 -1
  1119. package/lib/esm/secrets/core/SecretEnvironment.js.map +0 -1
  1120. package/lib/esm/secrets/core/SecretErrors.js.map +0 -1
  1121. package/lib/esm/secrets/core/SecretName.js.map +0 -1
  1122. package/lib/esm/secrets/core/SecretReference.js.map +0 -1
  1123. package/lib/esm/secrets/core/SecretSerialization.js.map +0 -1
  1124. package/lib/esm/secrets/core/SecretService.js.map +0 -1
  1125. package/lib/esm/secrets/core/SecretTypes.js.map +0 -1
  1126. package/lib/esm/secrets/core/index.js.map +0 -1
  1127. package/lib/esm/secrets/fs/FsSecretEnvironment.js.map +0 -1
  1128. package/lib/esm/secrets/fs/FsSecretService.js.map +0 -1
  1129. package/lib/esm/secrets/fs/FsSecretServiceConfig.js.map +0 -1
  1130. package/lib/esm/secrets/fs/index.js.map +0 -1
  1131. package/lib/esm/secrets/gcp/GcpSecretEnvironment.js.map +0 -1
  1132. package/lib/esm/secrets/gcp/GcpSecretManagerService.js.map +0 -1
  1133. package/lib/esm/secrets/gcp/GcpSecretManagerServiceConfig.js.map +0 -1
  1134. package/lib/esm/secrets/gcp/index.js.map +0 -1
  1135. package/lib/esm/secrets/index.js.map +0 -1
  1136. package/lib/esm/secrets/model/ModelSecretCrypto.js.map +0 -1
  1137. package/lib/esm/secrets/model/ModelSecretEnvironment.js.map +0 -1
  1138. package/lib/esm/secrets/model/ModelSecretService.js.map +0 -1
  1139. package/lib/esm/secrets/model/ModelSecretServiceConfig.js.map +0 -1
  1140. package/lib/esm/secrets/model/Secret.js.map +0 -1
  1141. package/lib/esm/secrets/model/index.js.map +0 -1
  1142. package/lib/esm/secrets/onepassword/OnePasswordSecretEnvironment.js.map +0 -1
  1143. package/lib/esm/secrets/onepassword/OnePasswordSecretService.js.map +0 -1
  1144. package/lib/esm/secrets/onepassword/OnePasswordSecretServiceConfig.js.map +0 -1
  1145. package/lib/esm/secrets/onepassword/index.js.map +0 -1
  1146. package/lib/esm/secrets/vault/VaultSecretEnvironment.js.map +0 -1
  1147. package/lib/esm/secrets/vault/VaultSecretService.js.map +0 -1
  1148. package/lib/esm/secrets/vault/VaultSecretServiceConfig.js.map +0 -1
  1149. package/lib/esm/secrets/vault/index.js.map +0 -1
  1150. package/lib/esm/sftp/aws/AwsSftpEnvironment.js.map +0 -1
  1151. package/lib/esm/sftp/aws/AwsSftpService.js.map +0 -1
  1152. package/lib/esm/sftp/aws/index.js.map +0 -1
  1153. package/lib/esm/sftp/core/SftpEnvironment.js.map +0 -1
  1154. package/lib/esm/sftp/core/SftpSource.js.map +0 -1
  1155. package/lib/esm/sftp/core/index.js.map +0 -1
  1156. package/lib/esm/sftp/index.js.map +0 -1
  1157. package/lib/esm/sftp/ssh2/Ssh2SftpEnvironment.js.map +0 -1
  1158. package/lib/esm/sftp/ssh2/Ssh2SftpService.js.map +0 -1
  1159. package/lib/esm/sftp/ssh2/index.js.map +0 -1
  1160. package/lib/esm/shared/environmentValue.js.map +0 -1
  1161. package/lib/esm/shared/http/HttpApiService.js.map +0 -1
  1162. package/lib/esm/shared/http/hermeticBoot.js.map +0 -1
  1163. package/lib/esm/shared/http/index.js.map +0 -1
  1164. package/lib/esm/shared/runtime.js.map +0 -1
  1165. package/lib/esm/user-requests/index.js.map +0 -1
  1166. package/lib/esm/utils.js.map +0 -1
@@ -0,0 +1,479 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KubernetesSecretService = void 0;
4
+ const client_node_1 = require("@kubernetes/client-node");
5
+ const core_1 = require("@decaf-ts/core");
6
+ const index_js_1 = require("./../core/index.cjs");
7
+ const index_js_2 = require("./../core/index.cjs");
8
+ const index_js_3 = require("./../core/index.cjs");
9
+ const KubernetesSecretEnvironment_js_1 = require("./KubernetesSecretEnvironment.cjs");
10
+ const environmentValue_js_1 = require("./../../shared/environmentValue.cjs");
11
+ const db_decorators_1 = require("@decaf-ts/db-decorators");
12
+ const PAYLOAD_DATA_KEY = "payload";
13
+ const MANAGED_LABEL = "decaf-ts.io/managed";
14
+ const ANNOTATION_PREFIX = "decaf-ts.io/";
15
+ const ENCODING_ANNOTATION = `${ANNOTATION_PREFIX}encoding`;
16
+ const CONTENT_TYPE_ANNOTATION = `${ANNOTATION_PREFIX}content-type`;
17
+ const TAGS_ANNOTATION = `${ANNOTATION_PREFIX}tags`;
18
+ const VERSION_ANNOTATION = `${ANNOTATION_PREFIX}version`;
19
+ const UPDATED_AT_ANNOTATION = `${ANNOTATION_PREFIX}updated-at`;
20
+ const TENANT_ANNOTATION = `${ANNOTATION_PREFIX}tenant-id`;
21
+ const ORG_UNIT_ANNOTATION = `${ANNOTATION_PREFIX}org-unit-id`;
22
+ const OWNER_ANNOTATION = `${ANNOTATION_PREFIX}owner-principal-id`;
23
+ const DNS_SUBDOMAIN_PATTERN = /^[a-z0-9]([-a-z0-9.]*[a-z0-9])?$/;
24
+ const DNS_LABEL_PATTERN = /^[a-z0-9]([-a-z0-9]*[a-z0-9])?$/;
25
+ function assertKubernetesName(name) {
26
+ if (name.length > 253 || !DNS_SUBDOMAIN_PATTERN.test(name)) {
27
+ throw new index_js_1.SecretError("SECRET_INVALID_NAME", `Invalid Kubernetes secret name: "${name}". Names must be lowercase DNS-1123 subdomains (letters, digits, '-', and '.').`);
28
+ }
29
+ }
30
+ function assertKubernetesNamespace(namespace) {
31
+ if (namespace.length > 63 || !DNS_LABEL_PATTERN.test(namespace)) {
32
+ throw new index_js_1.SecretError("SECRET_INVALID_NAME", `Invalid Kubernetes namespace: "${namespace}". Namespaces must be lowercase DNS-1123 labels.`);
33
+ }
34
+ }
35
+ function toDate(value) {
36
+ if (!value)
37
+ return undefined;
38
+ const date = value instanceof Date ? value : new Date(value);
39
+ return Number.isNaN(date.getTime()) ? undefined : date;
40
+ }
41
+ function parseTags(raw) {
42
+ if (!raw)
43
+ return undefined;
44
+ try {
45
+ const parsed = JSON.parse(raw);
46
+ return parsed && typeof parsed === "object"
47
+ ? parsed
48
+ : undefined;
49
+ }
50
+ catch {
51
+ return undefined;
52
+ }
53
+ }
54
+ /**
55
+ * @class KubernetesSecretService
56
+ * @summary Native Kubernetes Secrets backend.
57
+ * @description Implements the {@link SecretService} contract on top of
58
+ * namespaced Kubernetes `Secret` objects. Each DECAF secret is stored as an
59
+ * `Opaque` Secret whose `payload` data key holds the serialized
60
+ * {@link SerializedSecretPayload} envelope, while encoding, content type, tags,
61
+ * logical version, and ownership hints live in `decaf-ts.io/*` annotations.
62
+ *
63
+ * Authentication uses the standard Kubernetes client resolution order:
64
+ * explicit `server` credentials, an explicit `kubeconfig` path, `KUBECONFIG`,
65
+ * `~/.kube/config`, and finally the in-cluster service account.
66
+ */
67
+ class KubernetesSecretService extends index_js_1.ClientBasedSecretService {
68
+ constructor() {
69
+ super(...arguments);
70
+ this.provider = "kubernetes";
71
+ }
72
+ configFromEnvironment() {
73
+ const env = KubernetesSecretEnvironment_js_1.KubernetesSecretEnvironment.secrets.kubernetes;
74
+ const namespace = (0, environmentValue_js_1.envString)(env?.namespace);
75
+ const kubeconfig = (0, environmentValue_js_1.envString)(env?.kubeconfig);
76
+ const context = (0, environmentValue_js_1.envString)(env?.context);
77
+ const server = (0, environmentValue_js_1.envString)(env?.server);
78
+ if (!namespace && !kubeconfig && !context && !server)
79
+ return undefined;
80
+ return {
81
+ provider: "kubernetes",
82
+ namespace,
83
+ kubeconfig,
84
+ context,
85
+ server,
86
+ token: (0, environmentValue_js_1.envString)(env.token),
87
+ tokenFile: (0, environmentValue_js_1.envString)(env.tokenFile),
88
+ caFile: (0, environmentValue_js_1.envString)(env.caFile),
89
+ caData: (0, environmentValue_js_1.envString)(env.caData),
90
+ certFile: (0, environmentValue_js_1.envString)(env.certFile),
91
+ keyFile: (0, environmentValue_js_1.envString)(env.keyFile),
92
+ certData: (0, environmentValue_js_1.envString)(env.certData),
93
+ keyData: (0, environmentValue_js_1.envString)(env.keyData),
94
+ skipTLSVerify: (0, environmentValue_js_1.envBoolean)(env.skipTLSVerify),
95
+ serviceAccount: (0, environmentValue_js_1.envBoolean)(env.serviceAccount),
96
+ };
97
+ }
98
+ async initialize(...args) {
99
+ const { log } = (await this.logCtx(args, "initialize", true)).for(this.initialize);
100
+ const config = this.getConfigFromArgs(...args);
101
+ const kubeConfig = this.buildKubeConfig(config);
102
+ const namespace = this.resolveNamespace(config, kubeConfig);
103
+ const resolved = { ...config, namespace };
104
+ const client = kubeConfig.makeApiClient(client_node_1.CoreV1Api);
105
+ this._config = resolved;
106
+ this._client = client;
107
+ log.verbose(`Initialized Kubernetes secret service for namespace "${namespace}"`);
108
+ return { config: resolved, client };
109
+ }
110
+ async store(name, value, options = {}, ...args) {
111
+ const { log } = (await this.logCtx(args, "store", true)).for(this.store);
112
+ const normalizedName = this.normalizeName(name);
113
+ const namespace = this.resolveNamespaceOption(options.namespace);
114
+ log.verbose(`Storing secret ${normalizedName} in namespace ${namespace}`);
115
+ const serialized = (0, index_js_3.serializeSecretPayload)(value);
116
+ const body = this.buildSecret(normalizedName, namespace, serialized, options);
117
+ try {
118
+ await this.client.createNamespacedSecret({ namespace, body });
119
+ }
120
+ catch (error) {
121
+ if (this.statusOf(error) === 409) {
122
+ try {
123
+ const existing = await this.client.readNamespacedSecret({
124
+ name: normalizedName,
125
+ namespace,
126
+ });
127
+ body.metadata = {
128
+ ...(body.metadata || {}),
129
+ resourceVersion: existing.metadata?.resourceVersion,
130
+ };
131
+ await this.client.replaceNamespacedSecret({
132
+ name: normalizedName,
133
+ namespace,
134
+ body,
135
+ });
136
+ }
137
+ catch (replaceError) {
138
+ throw this.parseError(replaceError);
139
+ }
140
+ }
141
+ else {
142
+ throw this.parseError(error);
143
+ }
144
+ }
145
+ return {
146
+ provider: this.provider,
147
+ name: normalizedName,
148
+ namespace,
149
+ version: options.version,
150
+ uri: `kubernetes://${namespace}/${normalizedName}`,
151
+ };
152
+ }
153
+ async retrieve(nameOrRef, options = {}, ...args) {
154
+ const { log } = (await this.logCtx(args, "retrieve", true)).for(this.retrieve);
155
+ const { name, namespace, version } = this.resolveReference(nameOrRef, options);
156
+ log.verbose(`Retrieving secret ${name} from namespace ${namespace}`);
157
+ const secret = await this.readSecret(name, namespace);
158
+ this.assertVersion(secret, version);
159
+ const raw = secret.data?.[PAYLOAD_DATA_KEY];
160
+ if (!raw) {
161
+ throw new db_decorators_1.NotFoundError(`No secret value found for "${name}" in namespace "${namespace}"`);
162
+ }
163
+ let payload;
164
+ try {
165
+ payload = JSON.parse(Buffer.from(raw, "base64").toString("utf8"));
166
+ }
167
+ catch (error) {
168
+ throw new index_js_1.SecretError("SECRET_DESERIALIZATION_FAILED", `Failed to parse secret payload for "${name}": ${error.message}`, error);
169
+ }
170
+ return (0, index_js_3.deserializeSecretPayload)(payload);
171
+ }
172
+ async delete(nameOrRef, options = {}, ...args) {
173
+ const { log } = (await this.logCtx(args, "delete", true)).for(this.delete);
174
+ const { name, namespace, version } = this.resolveReference(nameOrRef, options);
175
+ log.verbose(`Deleting secret ${name} from namespace ${namespace}`);
176
+ if (version) {
177
+ const secret = await this.readSecret(name, namespace);
178
+ this.assertVersion(secret, version);
179
+ }
180
+ try {
181
+ await this.client.deleteNamespacedSecret({ name, namespace });
182
+ }
183
+ catch (error) {
184
+ throw this.parseError(error);
185
+ }
186
+ }
187
+ async exists(nameOrRef, options = {}, ...args) {
188
+ const { log } = (await this.logCtx(args, "exists", true)).for(this.exists);
189
+ const { name, namespace, version } = this.resolveReference(nameOrRef, options);
190
+ log.verbose(`Checking if secret ${name} exists in namespace ${namespace}`);
191
+ try {
192
+ const secret = await this.readSecret(name, namespace);
193
+ this.assertVersion(secret, version);
194
+ return true;
195
+ }
196
+ catch (error) {
197
+ if (error instanceof db_decorators_1.NotFoundError)
198
+ return false;
199
+ throw error;
200
+ }
201
+ }
202
+ async list(options = {}, ...args) {
203
+ const { log } = (await this.logCtx(args, "list", true)).for(this.list);
204
+ const namespace = this.resolveNamespaceOption(options.namespace);
205
+ log.verbose(`Listing secrets in namespace ${namespace}`);
206
+ const result = [];
207
+ let continueToken;
208
+ try {
209
+ do {
210
+ const response = await this.client.listNamespacedSecret({
211
+ namespace,
212
+ labelSelector: `${MANAGED_LABEL}=true`,
213
+ limit: 100,
214
+ _continue: continueToken,
215
+ });
216
+ for (const secret of response.items || []) {
217
+ result.push(this.toMetadata(secret, namespace));
218
+ }
219
+ continueToken = response.metadata?._continue;
220
+ } while (continueToken);
221
+ }
222
+ catch (error) {
223
+ throw this.parseError(error);
224
+ }
225
+ const filtered = result.filter((meta) => {
226
+ if (options.enabled === false)
227
+ return false;
228
+ if (!options.tags)
229
+ return true;
230
+ return Object.entries(options.tags).every(([key, value]) => meta.tags?.[key] === value);
231
+ });
232
+ const offset = options.offset ?? 0;
233
+ const end = typeof options.limit === "number" ? offset + options.limit : undefined;
234
+ return filtered.slice(offset, end);
235
+ }
236
+ async metadata(nameOrRef, options = {}, ...args) {
237
+ const { log } = (await this.logCtx(args, "metadata", true)).for(this.metadata);
238
+ const { name, namespace, version } = this.resolveReference(nameOrRef, options);
239
+ log.verbose(`Getting metadata for secret ${name} in namespace ${namespace}`);
240
+ try {
241
+ const secret = await this.readSecret(name, namespace);
242
+ this.assertVersion(secret, version);
243
+ return this.toMetadata(secret, namespace);
244
+ }
245
+ catch (error) {
246
+ if (error instanceof db_decorators_1.NotFoundError)
247
+ return undefined;
248
+ throw error;
249
+ }
250
+ }
251
+ async rotate(nameOrRef, value, options = {}, ...args) {
252
+ const { name, namespace } = this.resolveReference(nameOrRef, options);
253
+ return this.store(name, value, { version: options.newVersion, namespace }, ...args);
254
+ }
255
+ buildKubeConfig(config) {
256
+ const kubeConfig = new client_node_1.KubeConfig();
257
+ try {
258
+ if (config.serviceAccount) {
259
+ kubeConfig.loadFromCluster();
260
+ }
261
+ else if (config.server) {
262
+ const clusterName = "decaf-cluster";
263
+ const userName = "decaf-user";
264
+ const contextName = "decaf-context";
265
+ kubeConfig.loadFromOptions({
266
+ clusters: [
267
+ {
268
+ name: clusterName,
269
+ server: config.server,
270
+ caData: config.caData,
271
+ caFile: config.caFile,
272
+ skipTLSVerify: config.skipTLSVerify,
273
+ },
274
+ ],
275
+ users: [
276
+ {
277
+ name: userName,
278
+ token: config.token,
279
+ tokenFile: config.tokenFile,
280
+ certData: config.certData,
281
+ certFile: config.certFile,
282
+ keyData: config.keyData,
283
+ keyFile: config.keyFile,
284
+ },
285
+ ],
286
+ contexts: [
287
+ {
288
+ name: contextName,
289
+ cluster: clusterName,
290
+ user: userName,
291
+ namespace: config.namespace,
292
+ },
293
+ ],
294
+ currentContext: contextName,
295
+ });
296
+ }
297
+ else if (config.kubeconfig) {
298
+ kubeConfig.loadFromFile(config.kubeconfig);
299
+ }
300
+ else {
301
+ kubeConfig.loadFromDefault();
302
+ }
303
+ if (config.context) {
304
+ kubeConfig.setCurrentContext(config.context);
305
+ }
306
+ }
307
+ catch (error) {
308
+ throw this.parseError(error);
309
+ }
310
+ return kubeConfig;
311
+ }
312
+ resolveNamespace(config, kubeConfig) {
313
+ const namespace = config.namespace ||
314
+ kubeConfig.getContextObject(kubeConfig.getCurrentContext())?.namespace ||
315
+ "default";
316
+ assertKubernetesNamespace(namespace);
317
+ return namespace;
318
+ }
319
+ resolveNamespaceOption(namespace) {
320
+ const resolved = namespace || this.config.namespace || "default";
321
+ assertKubernetesNamespace(resolved);
322
+ return resolved;
323
+ }
324
+ resolveReference(nameOrRef, options) {
325
+ const name = typeof nameOrRef === "string" ? nameOrRef : nameOrRef.name;
326
+ const namespace = options.namespace ||
327
+ (typeof nameOrRef === "string" ? undefined : nameOrRef.namespace) ||
328
+ this.config.namespace ||
329
+ "default";
330
+ assertKubernetesNamespace(namespace);
331
+ const version = options.version ||
332
+ (typeof nameOrRef === "string" ? undefined : nameOrRef.version);
333
+ return { name: this.normalizeName(name), namespace, version };
334
+ }
335
+ normalizeName(name) {
336
+ try {
337
+ (0, index_js_2.validateSecretName)(name);
338
+ }
339
+ catch (error) {
340
+ throw this.parseError(error);
341
+ }
342
+ const normalizedName = (0, index_js_2.normalizeSecretName)(name);
343
+ assertKubernetesName(normalizedName);
344
+ return normalizedName;
345
+ }
346
+ buildSecret(name, namespace, serialized, options) {
347
+ const annotations = {
348
+ [ENCODING_ANNOTATION]: serialized.encoding,
349
+ [UPDATED_AT_ANNOTATION]: new Date().toISOString(),
350
+ };
351
+ if (options.contentType) {
352
+ annotations[CONTENT_TYPE_ANNOTATION] = options.contentType;
353
+ }
354
+ if (options.tags) {
355
+ annotations[TAGS_ANNOTATION] = JSON.stringify(options.tags);
356
+ }
357
+ if (options.version) {
358
+ annotations[VERSION_ANNOTATION] = options.version;
359
+ }
360
+ if (options.tenantId) {
361
+ annotations[TENANT_ANNOTATION] = options.tenantId;
362
+ }
363
+ if (options.orgUnitId) {
364
+ annotations[ORG_UNIT_ANNOTATION] = options.orgUnitId;
365
+ }
366
+ if (options.ownerPrincipalId) {
367
+ annotations[OWNER_ANNOTATION] = options.ownerPrincipalId;
368
+ }
369
+ return {
370
+ apiVersion: "v1",
371
+ kind: "Secret",
372
+ type: "Opaque",
373
+ metadata: {
374
+ name,
375
+ namespace,
376
+ labels: {
377
+ [MANAGED_LABEL]: "true",
378
+ },
379
+ annotations,
380
+ },
381
+ stringData: {
382
+ [PAYLOAD_DATA_KEY]: JSON.stringify(serialized),
383
+ },
384
+ };
385
+ }
386
+ async readSecret(name, namespace) {
387
+ try {
388
+ return await this.client.readNamespacedSecret({ name, namespace });
389
+ }
390
+ catch (error) {
391
+ throw this.parseError(error);
392
+ }
393
+ }
394
+ assertVersion(secret, version) {
395
+ if (!version)
396
+ return;
397
+ const stored = secret.metadata?.annotations?.[VERSION_ANNOTATION];
398
+ if (stored !== version) {
399
+ throw new db_decorators_1.NotFoundError(`Secret "${secret.metadata?.name}" version "${version}" not found`);
400
+ }
401
+ }
402
+ toMetadata(secret, namespace) {
403
+ const annotations = secret.metadata?.annotations || {};
404
+ const updatedAt = annotations[UPDATED_AT_ANNOTATION];
405
+ const name = secret.metadata?.name || "";
406
+ return {
407
+ provider: this.provider,
408
+ name,
409
+ version: annotations[VERSION_ANNOTATION],
410
+ createdAt: toDate(secret.metadata?.creationTimestamp),
411
+ updatedAt: updatedAt
412
+ ? new Date(updatedAt)
413
+ : toDate(secret.metadata?.creationTimestamp),
414
+ enabled: true,
415
+ contentType: annotations[CONTENT_TYPE_ANNOTATION],
416
+ tags: parseTags(annotations[TAGS_ANNOTATION]),
417
+ externalId: secret.metadata?.uid,
418
+ uri: `kubernetes://${namespace}/${name}`,
419
+ };
420
+ }
421
+ statusOf(error) {
422
+ if (error instanceof client_node_1.ApiException)
423
+ return error.code;
424
+ const candidate = error;
425
+ if (typeof candidate?.code === "number")
426
+ return candidate.code;
427
+ if (typeof candidate?.statusCode === "number") {
428
+ return candidate.statusCode;
429
+ }
430
+ return undefined;
431
+ }
432
+ messageOf(error) {
433
+ const err = error;
434
+ return err?.body?.message || err?.body?.reason || err?.message || err?.name || "Unknown error";
435
+ }
436
+ parseError(error) {
437
+ if (error instanceof db_decorators_1.BaseError)
438
+ return error;
439
+ const status = this.statusOf(error);
440
+ const message = this.messageOf(error);
441
+ const lowerMessage = message.toLowerCase();
442
+ if (status === 404 ||
443
+ lowerMessage.includes("not found") ||
444
+ lowerMessage.includes("404")) {
445
+ return new db_decorators_1.NotFoundError(message);
446
+ }
447
+ if (status === 409 ||
448
+ lowerMessage.includes("already exists") ||
449
+ lowerMessage.includes("conflict") ||
450
+ lowerMessage.includes("409")) {
451
+ return new db_decorators_1.ConflictError(message);
452
+ }
453
+ if (status === 401 || lowerMessage.includes("unauthorized")) {
454
+ return new core_1.AuthorizationError(`Authentication failed: ${message}`);
455
+ }
456
+ if (status === 403 || lowerMessage.includes("forbidden")) {
457
+ return new core_1.AuthorizationError(`Permission denied: ${message}`);
458
+ }
459
+ if (status === 400 ||
460
+ status === 422 ||
461
+ lowerMessage.includes("bad request")) {
462
+ return new db_decorators_1.BadRequestError(message);
463
+ }
464
+ if (status === 429 || lowerMessage.includes("rate limit")) {
465
+ return new index_js_1.SecretError("SECRET_PROVIDER_RATE_LIMITED", `Rate limited: ${message}`, error);
466
+ }
467
+ if (status === undefined ||
468
+ (status !== undefined && status >= 500) ||
469
+ lowerMessage.includes("connection") ||
470
+ lowerMessage.includes("timeout") ||
471
+ lowerMessage.includes("unavailable")) {
472
+ return new index_js_1.SecretError("SECRET_PROVIDER_UNAVAILABLE", `Provider unavailable: ${message}`, error);
473
+ }
474
+ return new db_decorators_1.InternalError(message);
475
+ }
476
+ }
477
+ exports.KubernetesSecretService = KubernetesSecretService;
478
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS3ViZXJuZXRlc1NlY3JldFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VjcmV0cy9rdWJlcm5ldGVzL0t1YmVybmV0ZXNTZWNyZXRTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsR0FFWCxNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBMkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLFdBQVcsR0FNWiwyQkFBMkI7QUFVNUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLDJCQUEyQjtBQUM3RSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHdCQUF3QixHQUV6QiwyQkFBMkI7QUFFNUIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLHlDQUFzQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSwyQ0FBc0M7QUFDdEUsT0FBTyxFQUNMLGVBQWUsRUFDZixTQUFTLEVBQ1QsYUFBYSxFQUNiLGFBQWEsRUFDYixhQUFhLEdBQ2QsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztBQUNuQyxNQUFNLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQztBQUM1QyxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FBQztBQUN6QyxNQUFNLG1CQUFtQixHQUFHLEdBQUcsaUJBQWlCLFVBQVUsQ0FBQztBQUMzRCxNQUFNLHVCQUF1QixHQUFHLEdBQUcsaUJBQWlCLGNBQWMsQ0FBQztBQUNuRSxNQUFNLGVBQWUsR0FBRyxHQUFHLGlCQUFpQixNQUFNLENBQUM7QUFDbkQsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLGlCQUFpQixTQUFTLENBQUM7QUFDekQsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLGlCQUFpQixZQUFZLENBQUM7QUFD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QWEsQ0FBQyxFQUNwQyxDQUFDO1lBQ0QsT0FBTyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUMxRCxPQUFPLElBQUksV0FBVyxDQUNwQiw4QkFBOEIsRUFDOUIsaUJBQWlCLE9BQU8sRUFBRSxFQUMxQixLQUFjLENBQ2YsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUNFLE1BQU0sS0FBSyxTQUFTO1lBQ3BCLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDO1lBQ3ZDLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQ25DLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQ2hDLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQ3BDLENBQUM7WUFDRCxPQUFPLElBQUksV0FBVyxDQUNwQiw2QkFBNkIsRUFDN0IseUJBQXlCLE9BQU8sRUFBRSxFQUNsQyxLQUFjLENBQ2YsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFwaUV4Y2VwdGlvbixcbiAgQ29yZVYxQXBpLFxuICBLdWJlQ29uZmlnLFxuICB0eXBlIFYxU2VjcmV0LFxufSBmcm9tIFwiQGt1YmVybmV0ZXMvY2xpZW50LW5vZGVcIjtcbmltcG9ydCB7IEF1dGhvcml6YXRpb25FcnJvciwgdHlwZSBNYXliZUNvbnRleHR1YWxBcmcgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7XG4gIENsaWVudEJhc2VkU2VjcmV0U2VydmljZSxcbiAgU2VjcmV0RXJyb3IsXG4gIFNlY3JldFByb3ZpZGVyLFxuICBTZWNyZXROYW1lLFxuICBTZWNyZXRQYXlsb2FkLFxuICBTZWNyZXRSZWZlcmVuY2UsXG4gIFNlY3JldE1ldGFkYXRhLFxufSBmcm9tIFwiLi4vLi4vc2VjcmV0cy9jb3JlXCI7XG5pbXBvcnQge1xuICBTdG9yZVNlY3JldE9wdGlvbnMsXG4gIFJldHJpZXZlU2VjcmV0T3B0aW9ucyxcbiAgRGVsZXRlU2VjcmV0T3B0aW9ucyxcbiAgRXhpc3RzU2VjcmV0T3B0aW9ucyxcbiAgTGlzdFNlY3JldHNPcHRpb25zLFxuICBTZWNyZXRNZXRhZGF0YU9wdGlvbnMsXG4gIFJvdGF0ZVNlY3JldE9wdGlvbnMsXG59IGZyb20gXCIuLi8uLi9zZWNyZXRzL2NvcmVcIjtcbmltcG9ydCB7IHZhbGlkYXRlU2VjcmV0TmFtZSwgbm9ybWFsaXplU2VjcmV0TmFtZSB9IGZyb20gXCIuLi8uLi9zZWNyZXRzL2NvcmVcIjtcbmltcG9ydCB7XG4gIHNlcmlhbGl6ZVNlY3JldFBheWxvYWQsXG4gIGRlc2VyaWFsaXplU2VjcmV0UGF5bG9hZCxcbiAgdHlwZSBTZXJpYWxpemVkU2VjcmV0UGF5bG9hZCxcbn0gZnJvbSBcIi4uLy4uL3NlY3JldHMvY29yZVwiO1xuaW1wb3J0IHsgS3ViZXJuZXRlc1NlY3JldFNlcnZpY2VDb25maWcgfSBmcm9tIFwiLi9LdWJlcm5ldGVzU2VjcmV0U2VydmljZUNvbmZpZ1wiO1xuaW1wb3J0IHsgS3ViZXJuZXRlc1NlY3JldEVudmlyb25tZW50IH0gZnJvbSBcIi4vS3ViZXJuZXRlc1NlY3JldEVudmlyb25tZW50XCI7XG5pbXBvcnQgeyBlbnZCb29sZWFuLCBlbnZTdHJpbmcgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2Vudmlyb25tZW50VmFsdWVcIjtcbmltcG9ydCB7XG4gIEJhZFJlcXVlc3RFcnJvcixcbiAgQmFzZUVycm9yLFxuICBDb25mbGljdEVycm9yLFxuICBJbnRlcm5hbEVycm9yLFxuICBOb3RGb3VuZEVycm9yLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuY29uc3QgUEFZTE9BRF9EQVRBX0tFWSA9IFwicGF5bG9hZFwiO1xuY29uc3QgTUFOQUdFRF9MQUJFTCA9IFwiZGVjYWYtdHMuaW8vbWFuYWdlZFwiO1xuY29uc3QgQU5OT1RBVElPTl9QUkVGSVggPSBcImRlY2FmLXRzLmlvL1wiO1xuY29uc3QgRU5DT0RJTkdfQU5OT1RBVElPTiA9IGAke0FOTk9UQVRJT05fUFJFRklYfWVuY29kaW5nYDtcbmNvbnN0IENPTlRFTlRfVFlQRV9BTk5PVEFUSU9OID0gYCR7QU5OT1RBVElPTl9QUkVGSVh9Y29udGVudC10eXBlYDtcbmNvbnN0IFRBR1NfQU5OT1RBVElPTiA9IGAke0FOTk9UQVRJT05fUFJFRklYfXRhZ3NgO1xuY29uc3QgVkVSU0lPTl9BTk5PVEFUSU9OID0gYCR7QU5OT1RBVElPTl9QUkVGSVh9dmVyc2lvbmA7XG5jb25zdCBVUERBVEVEX0FUX0FOTk9UQVRJT04gPSBgJHtBTk5PVEFUSU9OX1BSRUZJWH11cGRhdGVkLWF0YDtcbmNvbnN0IFRFTkFOVF9BTk5PVEFUSU9OID0gYCR7QU5OT1RBVElPTl9QUkVGSVh9dGVuYW50LWlkYDtcbmNvbnN0IE9SR19VTklUX0FOTk9UQVRJT04gPSBgJHtBTk5PVEFUSU9OX1BSRUZJWH1vcmctdW5pdC1pZGA7XG5jb25zdCBPV05FUl9BTk5PVEFUSU9OID0gYCR7QU5OT1RBVElPTl9QUkVGSVh9b3duZXItcHJpbmNpcGFsLWlkYDtcblxuY29uc3QgRE5TX1NVQkRPTUFJTl9QQVRURVJOID1cbiAgL15bYS16MC05XShbLWEtejAtOS5dKlthLXowLTldKT8kLztcbmNvbnN0IEROU19MQUJFTF9QQVRURVJOID0gL15bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyQvO1xuXG5mdW5jdGlvbiBhc3NlcnRLdWJlcm5ldGVzTmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKG5hbWUubGVuZ3RoID4gMjUzIHx8ICFETlNfU1VCRE9NQUlOX1BBVFRFUk4udGVzdChuYW1lKSkge1xuICAgIHRocm93IG5ldyBTZWNyZXRFcnJvcihcbiAgICAgIFwiU0VDUkVUX0lOVkFMSURfTkFNRVwiLFxuICAgICAgYEludmFsaWQgS3ViZXJuZXRlcyBzZWNyZXQgbmFtZTogXCIke25hbWV9XCIuIE5hbWVzIG11c3QgYmUgbG93ZXJjYXNlIEROUy0xMTIzIHN1YmRvbWFpbnMgKGxldHRlcnMsIGRpZ2l0cywgJy0nLCBhbmQgJy4nKS5gXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRLdWJlcm5ldGVzTmFtZXNwYWNlKG5hbWVzcGFjZTogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChuYW1lc3BhY2UubGVuZ3RoID4gNjMgfHwgIUROU19MQUJFTF9QQVRURVJOLnRlc3QobmFtZXNwYWNlKSkge1xuICAgIHRocm93IG5ldyBTZWNyZXRFcnJvcihcbiAgICAgIFwiU0VDUkVUX0lOVkFMSURfTkFNRVwiLFxuICAgICAgYEludmFsaWQgS3ViZXJuZXRlcyBuYW1lc3BhY2U6IFwiJHtuYW1lc3BhY2V9XCIuIE5hbWVzcGFjZXMgbXVzdCBiZSBsb3dlcmNhc2UgRE5TLTExMjMgbGFiZWxzLmBcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvRGF0ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IERhdGUgfCB1bmRlZmluZWQge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBkYXRlID0gdmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gdmFsdWUgOiBuZXcgRGF0ZSh2YWx1ZSk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpID8gdW5kZWZpbmVkIDogZGF0ZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUYWdzKHJhdzogc3RyaW5nIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghcmF3KSByZXR1cm4gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgICByZXR1cm4gcGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09IFwib2JqZWN0XCJcbiAgICAgID8gKHBhcnNlZCBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBAY2xhc3MgS3ViZXJuZXRlc1NlY3JldFNlcnZpY2VcbiAqIEBzdW1tYXJ5IE5hdGl2ZSBLdWJlcm5ldGVzIFNlY3JldHMgYmFja2VuZC5cbiAqIEBkZXNjcmlwdGlvbiBJbXBsZW1lbnRzIHRoZSB7QGxpbmsgU2VjcmV0U2VydmljZX0gY29udHJhY3Qgb24gdG9wIG9mXG4gKiBuYW1lc3BhY2VkIEt1YmVybmV0ZXMgYFNlY3JldGAgb2JqZWN0cy4gRWFjaCBERUNBRiBzZWNyZXQgaXMgc3RvcmVkIGFzIGFuXG4gKiBgT3BhcXVlYCBTZWNyZXQgd2hvc2UgYHBheWxvYWRgIGRhdGEga2V5IGhvbGRzIHRoZSBzZXJpYWxpemVkXG4gKiB7QGxpbmsgU2VyaWFsaXplZFNlY3JldFBheWxvYWR9IGVudmVsb3BlLCB3aGlsZSBlbmNvZGluZywgY29udGVudCB0eXBlLCB0YWdzLFxuICogbG9naWNhbCB2ZXJzaW9uLCBhbmQgb3duZXJzaGlwIGhpbnRzIGxpdmUgaW4gYGRlY2FmLXRzLmlvLypgIGFubm90YXRpb25zLlxuICpcbiAqIEF1dGhlbnRpY2F0aW9uIHVzZXMgdGhlIHN0YW5kYXJkIEt1YmVybmV0ZXMgY2xpZW50IHJlc29sdXRpb24gb3JkZXI6XG4gKiBleHBsaWNpdCBgc2VydmVyYCBjcmVkZW50aWFscywgYW4gZXhwbGljaXQgYGt1YmVjb25maWdgIHBhdGgsIGBLVUJFQ09ORklHYCxcbiAqIGB+Ly5rdWJlL2NvbmZpZ2AsIGFuZCBmaW5hbGx5IHRoZSBpbi1jbHVzdGVyIHNlcnZpY2UgYWNjb3VudC5cbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVybmV0ZXNTZWNyZXRTZXJ2aWNlIGV4dGVuZHMgQ2xpZW50QmFzZWRTZWNyZXRTZXJ2aWNlPFxuICBDb3JlVjFBcGksXG4gIEt1YmVybmV0ZXNTZWNyZXRTZXJ2aWNlQ29uZmlnXG4+IHtcbiAgcmVhZG9ubHkgcHJvdmlkZXI6IFNlY3JldFByb3ZpZGVyID0gXCJrdWJlcm5ldGVzXCI7XG5cbiAgcHJvdGVjdGVkIGNvbmZpZ0Zyb21FbnZpcm9ubWVudCgpOlxuICAgIHwgS3ViZXJuZXRlc1NlY3JldFNlcnZpY2VDb25maWdcbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZW52ID0gS3ViZXJuZXRlc1NlY3JldEVudmlyb25tZW50LnNlY3JldHMua3ViZXJuZXRlcztcbiAgICBjb25zdCBuYW1lc3BhY2UgPSBlbnZTdHJpbmcoZW52Py5uYW1lc3BhY2UpO1xuICAgIGNvbnN0IGt1YmVjb25maWcgPSBlbnZTdHJpbmcoZW52Py5rdWJlY29uZmlnKTtcbiAgICBjb25zdCBjb250ZXh0ID0gZW52U3RyaW5nKGVudj8uY29udGV4dCk7XG4gICAgY29uc3Qgc2VydmVyID0gZW52U3RyaW5nKGVudj8uc2VydmVyKTtcbiAgICBpZiAoIW5hbWVzcGFjZSAmJiAha3ViZWNvbmZpZyAmJiAhY29udGV4dCAmJiAhc2VydmVyKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICBwcm92aWRlcjogXCJrdWJlcm5ldGVzXCIsXG4gICAgICBuYW1lc3BhY2UsXG4gICAgICBrdWJlY29uZmlnLFxuICAgICAgY29udGV4dCxcbiAgICAgIHNlcnZlcixcbiAgICAgIHRva2VuOiBlbnZTdHJpbmcoZW52LnRva2VuKSxcbiAgICAgIHRva2VuRmlsZTogZW52U3RyaW5nKGVudi50b2tlbkZpbGUpLFxuICAgICAgY2FGaWxlOiBlbnZTdHJpbmcoZW52LmNhRmlsZSksXG4gICAgICBjYURhdGE6IGVudlN0cmluZyhlbnYuY2FEYXRhKSxcbiAgICAgIGNlcnRGaWxlOiBlbnZTdHJpbmcoZW52LmNlcnRGaWxlKSxcbiAgICAgIGtleUZpbGU6IGVudlN0cmluZyhlbnYua2V5RmlsZSksXG4gICAgICBjZXJ0RGF0YTogZW52U3RyaW5nKGVudi5jZXJ0RGF0YSksXG4gICAgICBrZXlEYXRhOiBlbnZTdHJpbmcoZW52LmtleURhdGEpLFxuICAgICAgc2tpcFRMU1ZlcmlmeTogZW52Qm9vbGVhbihlbnYuc2tpcFRMU1ZlcmlmeSksXG4gICAgICBzZXJ2aWNlQWNjb3VudDogZW52Qm9vbGVhbihlbnYuc2VydmljZUFjY291bnQpLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplKFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxhbnk+XG4gICk6IFByb21pc2U8eyBjb25maWc6IEt1YmVybmV0ZXNTZWNyZXRTZXJ2aWNlQ29uZmlnOyBjbGllbnQ6IENvcmVWMUFwaSB9PiB7XG4gICAgY29uc3QgeyBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBcImluaXRpYWxpemVcIiwgdHJ1ZSkpLmZvcihcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVxuICAgICk7XG4gICAgY29uc3QgY29uZmlnID1cbiAgICAgIHRoaXMuZ2V0Q29uZmlnRnJvbUFyZ3M8S3ViZXJuZXRlc1NlY3JldFNlcnZpY2VDb25maWc+KC4uLmFyZ3MpO1xuICAgIGNvbnN0IGt1YmVDb25maWcgPSB0aGlzLmJ1aWxkS3ViZUNvbmZpZyhjb25maWcpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMucmVzb2x2ZU5hbWVzcGFjZShjb25maWcsIGt1YmVDb25maWcpO1xuICAgIGNvbnN0IHJlc29sdmVkOiBLdWJlcm5ldGVzU2VjcmV0U2VydmljZUNvbmZpZyA9IHsgLi4uY29uZmlnLCBuYW1lc3BhY2UgfTtcbiAgICBjb25zdCBjbGllbnQgPSBrdWJlQ29uZmlnLm1ha2VBcGlDbGllbnQoQ29yZVYxQXBpKTtcbiAgICB0aGlzLl9jb25maWcgPSByZXNvbHZlZDtcbiAgICB0aGlzLl9jbGllbnQgPSBjbGllbnQ7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgSW5pdGlhbGl6ZWQgS3ViZXJuZXRlcyBzZWNyZXQgc2VydmljZSBmb3IgbmFtZXNwYWNlIFwiJHtuYW1lc3BhY2V9XCJgXG4gICAgKTtcbiAgICByZXR1cm4geyBjb25maWc6IHJlc29sdmVkLCBjbGllbnQgfTtcbiAgfVxuXG4gIGFzeW5jIHN0b3JlPFQgZXh0ZW5kcyBTZWNyZXRQYXlsb2FkID0gU2VjcmV0UGF5bG9hZD4oXG4gICAgbmFtZTogU2VjcmV0TmFtZSxcbiAgICB2YWx1ZTogVCxcbiAgICBvcHRpb25zOiBTdG9yZVNlY3JldE9wdGlvbnMgPSB7fSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8YW55PlxuICApOiBQcm9taXNlPFNlY3JldFJlZmVyZW5jZT4ge1xuICAgIGNvbnN0IHsgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgXCJzdG9yZVwiLCB0cnVlKSkuZm9yKHRoaXMuc3RvcmUpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gdGhpcy5ub3JtYWxpemVOYW1lKG5hbWUpO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMucmVzb2x2ZU5hbWVzcGFjZU9wdGlvbihvcHRpb25zLm5hbWVzcGFjZSk7XG4gICAgbG9nLnZlcmJvc2UoYFN0b3Jpbmcgc2VjcmV0ICR7bm9ybWFsaXplZE5hbWV9IGluIG5hbWVzcGFjZSAke25hbWVzcGFjZX1gKTtcblxuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTZWNyZXRQYXlsb2FkKHZhbHVlKTtcbiAgICBjb25zdCBib2R5ID0gdGhpcy5idWlsZFNlY3JldChub3JtYWxpemVkTmFtZSwgbmFtZXNwYWNlLCBzZXJpYWxpemVkLCBvcHRpb25zKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5jcmVhdGVOYW1lc3BhY2VkU2VjcmV0KHsgbmFtZXNwYWNlLCBib2R5IH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodGhpcy5zdGF0dXNPZihlcnJvcikgPT09IDQwOSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5jbGllbnQucmVhZE5hbWVzcGFjZWRTZWNyZXQoe1xuICAgICAgICAgICAgbmFtZTogbm9ybWFsaXplZE5hbWUsXG4gICAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYm9keS5tZXRhZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLihib2R5Lm1ldGFkYXRhIHx8IHt9KSxcbiAgICAgICAgICAgIHJlc291cmNlVmVyc2lvbjogZXhpc3RpbmcubWV0YWRhdGE/LnJlc291cmNlVmVyc2lvbixcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50LnJlcGxhY2VOYW1lc3BhY2VkU2VjcmV0KHtcbiAgICAgICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lLFxuICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAocmVwbGFjZUVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKHJlcGxhY2VFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3ZpZGVyOiB0aGlzLnByb3ZpZGVyLFxuICAgICAgbmFtZTogbm9ybWFsaXplZE5hbWUsXG4gICAgICBuYW1lc3BhY2UsXG4gICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24sXG4gICAgICB1cmk6IGBrdWJlcm5ldGVzOi8vJHtuYW1lc3BhY2V9LyR7bm9ybWFsaXplZE5hbWV9YCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmV0cmlldmU8VCBleHRlbmRzIFNlY3JldFBheWxvYWQgPSBTZWNyZXRQYXlsb2FkPihcbiAgICBuYW1lT3JSZWY6IFNlY3JldE5hbWUgfCBTZWNyZXRSZWZlcmVuY2UsXG4gICAgb3B0aW9uczogUmV0cmlldmVTZWNyZXRPcHRpb25zID0ge30sXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT5cbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgeyBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBcInJldHJpZXZlXCIsIHRydWUpKS5mb3IoXG4gICAgICB0aGlzLnJldHJpZXZlXG4gICAgKTtcbiAgICBjb25zdCB7IG5hbWUsIG5hbWVzcGFjZSwgdmVyc2lvbiB9ID0gdGhpcy5yZXNvbHZlUmVmZXJlbmNlKFxuICAgICAgbmFtZU9yUmVmLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgbG9nLnZlcmJvc2UoYFJldHJpZXZpbmcgc2VjcmV0ICR7bmFtZX0gZnJvbSBuYW1lc3BhY2UgJHtuYW1lc3BhY2V9YCk7XG5cbiAgICBjb25zdCBzZWNyZXQgPSBhd2FpdCB0aGlzLnJlYWRTZWNyZXQobmFtZSwgbmFtZXNwYWNlKTtcbiAgICB0aGlzLmFzc2VydFZlcnNpb24oc2VjcmV0LCB2ZXJzaW9uKTtcblxuICAgIGNvbnN0IHJhdyA9IHNlY3JldC5kYXRhPy5bUEFZTE9BRF9EQVRBX0tFWV07XG4gICAgaWYgKCFyYXcpIHtcbiAgICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKFxuICAgICAgICBgTm8gc2VjcmV0IHZhbHVlIGZvdW5kIGZvciBcIiR7bmFtZX1cIiBpbiBuYW1lc3BhY2UgXCIke25hbWVzcGFjZX1cImBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHBheWxvYWQ6IFNlcmlhbGl6ZWRTZWNyZXRQYXlsb2FkO1xuICAgIHRyeSB7XG4gICAgICBwYXlsb2FkID0gSlNPTi5wYXJzZShcbiAgICAgICAgQnVmZmVyLmZyb20ocmF3LCBcImJhc2U2NFwiKS50b1N0cmluZyhcInV0ZjhcIilcbiAgICAgICkgYXMgU2VyaWFsaXplZFNlY3JldFBheWxvYWQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBTZWNyZXRFcnJvcihcbiAgICAgICAgXCJTRUNSRVRfREVTRVJJQUxJWkFUSU9OX0ZBSUxFRFwiLFxuICAgICAgICBgRmFpbGVkIHRvIHBhcnNlIHNlY3JldCBwYXlsb2FkIGZvciBcIiR7bmFtZX1cIjogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCxcbiAgICAgICAgZXJyb3IgYXMgRXJyb3JcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc2VyaWFsaXplU2VjcmV0UGF5bG9hZChwYXlsb2FkKSBhcyBUO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKFxuICAgIG5hbWVPclJlZjogU2VjcmV0TmFtZSB8IFNlY3JldFJlZmVyZW5jZSxcbiAgICBvcHRpb25zOiBEZWxldGVTZWNyZXRPcHRpb25zID0ge30sXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBcImRlbGV0ZVwiLCB0cnVlKSkuZm9yKHRoaXMuZGVsZXRlKTtcbiAgICBjb25zdCB7IG5hbWUsIG5hbWVzcGFjZSwgdmVyc2lvbiB9ID0gdGhpcy5yZXNvbHZlUmVmZXJlbmNlKFxuICAgICAgbmFtZU9yUmVmLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgbG9nLnZlcmJvc2UoYERlbGV0aW5nIHNlY3JldCAke25hbWV9IGZyb20gbmFtZXNwYWNlICR7bmFtZXNwYWNlfWApO1xuXG4gICAgaWYgKHZlcnNpb24pIHtcbiAgICAgIGNvbnN0IHNlY3JldCA9IGF3YWl0IHRoaXMucmVhZFNlY3JldChuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgdGhpcy5hc3NlcnRWZXJzaW9uKHNlY3JldCwgdmVyc2lvbik7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LmRlbGV0ZU5hbWVzcGFjZWRTZWNyZXQoeyBuYW1lLCBuYW1lc3BhY2UgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZXhpc3RzKFxuICAgIG5hbWVPclJlZjogU2VjcmV0TmFtZSB8IFNlY3JldFJlZmVyZW5jZSxcbiAgICBvcHRpb25zOiBFeGlzdHNTZWNyZXRPcHRpb25zID0ge30sXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT5cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBcImV4aXN0c1wiLCB0cnVlKSkuZm9yKHRoaXMuZXhpc3RzKTtcbiAgICBjb25zdCB7IG5hbWUsIG5hbWVzcGFjZSwgdmVyc2lvbiB9ID0gdGhpcy5yZXNvbHZlUmVmZXJlbmNlKFxuICAgICAgbmFtZU9yUmVmLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gICAgbG9nLnZlcmJvc2UoYENoZWNraW5nIGlmIHNlY3JldCAke25hbWV9IGV4aXN0cyBpbiBuYW1lc3BhY2UgJHtuYW1lc3BhY2V9YCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2VjcmV0ID0gYXdhaXQgdGhpcy5yZWFkU2VjcmV0KG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICB0aGlzLmFzc2VydFZlcnNpb24oc2VjcmV0LCB2ZXJzaW9uKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb3RGb3VuZEVycm9yKSByZXR1cm4gZmFsc2U7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsaXN0KFxuICAgIG9wdGlvbnM6IExpc3RTZWNyZXRzT3B0aW9ucyA9IHt9LFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxhbnk+XG4gICk6IFByb21pc2U8U2VjcmV0TWV0YWRhdGFbXT4ge1xuICAgIGNvbnN0IHsgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgXCJsaXN0XCIsIHRydWUpKS5mb3IodGhpcy5saXN0KTtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSB0aGlzLnJlc29sdmVOYW1lc3BhY2VPcHRpb24ob3B0aW9ucy5uYW1lc3BhY2UpO1xuICAgIGxvZy52ZXJib3NlKGBMaXN0aW5nIHNlY3JldHMgaW4gbmFtZXNwYWNlICR7bmFtZXNwYWNlfWApO1xuXG4gICAgY29uc3QgcmVzdWx0OiBTZWNyZXRNZXRhZGF0YVtdID0gW107XG4gICAgbGV0IGNvbnRpbnVlVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQubGlzdE5hbWVzcGFjZWRTZWNyZXQoe1xuICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICBsYWJlbFNlbGVjdG9yOiBgJHtNQU5BR0VEX0xBQkVMfT10cnVlYCxcbiAgICAgICAgICBsaW1pdDogMTAwLFxuICAgICAgICAgIF9jb250aW51ZTogY29udGludWVUb2tlbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBzZWNyZXQgb2YgcmVzcG9uc2UuaXRlbXMgfHwgW10pIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnRvTWV0YWRhdGEoc2VjcmV0LCBuYW1lc3BhY2UpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlVG9rZW4gPSByZXNwb25zZS5tZXRhZGF0YT8uX2NvbnRpbnVlO1xuICAgICAgfSB3aGlsZSAoY29udGludWVUb2tlbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlcnJvcik7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWQgPSByZXN1bHQuZmlsdGVyKChtZXRhKSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCFvcHRpb25zLnRhZ3MpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMudGFncykuZXZlcnkoXG4gICAgICAgIChba2V5LCB2YWx1ZV0pID0+IG1ldGEudGFncz8uW2tleV0gPT09IHZhbHVlXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQgPz8gMDtcbiAgICBjb25zdCBlbmQgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMubGltaXQgPT09IFwibnVtYmVyXCIgPyBvZmZzZXQgKyBvcHRpb25zLmxpbWl0IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBmaWx0ZXJlZC5zbGljZShvZmZzZXQsIGVuZCk7XG4gIH1cblxuICBhc3luYyBtZXRhZGF0YShcbiAgICBuYW1lT3JSZWY6IFNlY3JldE5hbWUgfCBTZWNyZXRSZWZlcmVuY2UsXG4gICAgb3B0aW9uczogU2VjcmV0TWV0YWRhdGFPcHRpb25zID0ge30sXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT5cbiAgKTogUHJvbWlzZTxTZWNyZXRNZXRhZGF0YSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHsgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgXCJtZXRhZGF0YVwiLCB0cnVlKSkuZm9yKFxuICAgICAgdGhpcy5tZXRhZGF0YVxuICAgICk7XG4gICAgY29uc3QgeyBuYW1lLCBuYW1lc3BhY2UsIHZlcnNpb24gfSA9IHRoaXMucmVzb2x2ZVJlZmVyZW5jZShcbiAgICAgIG5hbWVPclJlZixcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICAgIGxvZy52ZXJib3NlKGBHZXR0aW5nIG1ldGFkYXRhIGZvciBzZWNyZXQgJHtuYW1lfSBpbiBuYW1lc3BhY2UgJHtuYW1lc3BhY2V9YCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2VjcmV0ID0gYXdhaXQgdGhpcy5yZWFkU2VjcmV0KG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICB0aGlzLmFzc2VydFZlcnNpb24oc2VjcmV0LCB2ZXJzaW9uKTtcbiAgICAgIHJldHVybiB0aGlzLnRvTWV0YWRhdGEoc2VjcmV0LCBuYW1lc3BhY2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb3RGb3VuZEVycm9yKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcm90YXRlPFQgZXh0ZW5kcyBTZWNyZXRQYXlsb2FkID0gU2VjcmV0UGF5bG9hZD4oXG4gICAgbmFtZU9yUmVmOiBTZWNyZXROYW1lIHwgU2VjcmV0UmVmZXJlbmNlLFxuICAgIHZhbHVlOiBULFxuICAgIG9wdGlvbnM6IFJvdGF0ZVNlY3JldE9wdGlvbnMgPSB7fSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8YW55PlxuICApOiBQcm9taXNlPFNlY3JldFJlZmVyZW5jZT4ge1xuICAgIGNvbnN0IHsgbmFtZSwgbmFtZXNwYWNlIH0gPSB0aGlzLnJlc29sdmVSZWZlcmVuY2UobmFtZU9yUmVmLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5zdG9yZShcbiAgICAgIG5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIHsgdmVyc2lvbjogb3B0aW9ucy5uZXdWZXJzaW9uLCBuYW1lc3BhY2UgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEt1YmVDb25maWcoY29uZmlnOiBLdWJlcm5ldGVzU2VjcmV0U2VydmljZUNvbmZpZyk6IEt1YmVDb25maWcge1xuICAgIGNvbnN0IGt1YmVDb25maWcgPSBuZXcgS3ViZUNvbmZpZygpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoY29uZmlnLnNlcnZpY2VBY2NvdW50KSB7XG4gICAgICAgIGt1YmVDb25maWcubG9hZEZyb21DbHVzdGVyKCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5zZXJ2ZXIpIHtcbiAgICAgICAgY29uc3QgY2x1c3Rlck5hbWUgPSBcImRlY2FmLWNsdXN0ZXJcIjtcbiAgICAgICAgY29uc3QgdXNlck5hbWUgPSBcImRlY2FmLXVzZXJcIjtcbiAgICAgICAgY29uc3QgY29udGV4dE5hbWUgPSBcImRlY2FmLWNvbnRleHRcIjtcbiAgICAgICAga3ViZUNvbmZpZy5sb2FkRnJvbU9wdGlvbnMoe1xuICAgICAgICAgIGNsdXN0ZXJzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IGNsdXN0ZXJOYW1lLFxuICAgICAgICAgICAgICBzZXJ2ZXI6IGNvbmZpZy5zZXJ2ZXIsXG4gICAgICAgICAgICAgIGNhRGF0YTogY29uZmlnLmNhRGF0YSxcbiAgICAgICAgICAgICAgY2FGaWxlOiBjb25maWcuY2FGaWxlLFxuICAgICAgICAgICAgICBza2lwVExTVmVyaWZ5OiBjb25maWcuc2tpcFRMU1ZlcmlmeSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICB1c2VyczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiB1c2VyTmFtZSxcbiAgICAgICAgICAgICAgdG9rZW46IGNvbmZpZy50b2tlbixcbiAgICAgICAgICAgICAgdG9rZW5GaWxlOiBjb25maWcudG9rZW5GaWxlLFxuICAgICAgICAgICAgICBjZXJ0RGF0YTogY29uZmlnLmNlcnREYXRhLFxuICAgICAgICAgICAgICBjZXJ0RmlsZTogY29uZmlnLmNlcnRGaWxlLFxuICAgICAgICAgICAgICBrZXlEYXRhOiBjb25maWcua2V5RGF0YSxcbiAgICAgICAgICAgICAga2V5RmlsZTogY29uZmlnLmtleUZpbGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY29udGV4dHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogY29udGV4dE5hbWUsXG4gICAgICAgICAgICAgIGNsdXN0ZXI6IGNsdXN0ZXJOYW1lLFxuICAgICAgICAgICAgICB1c2VyOiB1c2VyTmFtZSxcbiAgICAgICAgICAgICAgbmFtZXNwYWNlOiBjb25maWcubmFtZXNwYWNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGN1cnJlbnRDb250ZXh0OiBjb250ZXh0TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5rdWJlY29uZmlnKSB7XG4gICAgICAgIGt1YmVDb25maWcubG9hZEZyb21GaWxlKGNvbmZpZy5rdWJlY29uZmlnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGt1YmVDb25maWcubG9hZEZyb21EZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuY29udGV4dCkge1xuICAgICAgICBrdWJlQ29uZmlnLnNldEN1cnJlbnRDb250ZXh0KGNvbmZpZy5jb250ZXh0KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIGt1YmVDb25maWc7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVOYW1lc3BhY2UoXG4gICAgY29uZmlnOiBLdWJlcm5ldGVzU2VjcmV0U2VydmljZUNvbmZpZyxcbiAgICBrdWJlQ29uZmlnOiBLdWJlQ29uZmlnXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgbmFtZXNwYWNlID1cbiAgICAgIGNvbmZpZy5uYW1lc3BhY2UgfHxcbiAgICAgIGt1YmVDb25maWcuZ2V0Q29udGV4dE9iamVjdChrdWJlQ29uZmlnLmdldEN1cnJlbnRDb250ZXh0KCkpPy5uYW1lc3BhY2UgfHxcbiAgICAgIFwiZGVmYXVsdFwiO1xuICAgIGFzc2VydEt1YmVybmV0ZXNOYW1lc3BhY2UobmFtZXNwYWNlKTtcbiAgICByZXR1cm4gbmFtZXNwYWNlO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlTmFtZXNwYWNlT3B0aW9uKG5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBuYW1lc3BhY2UgfHwgdGhpcy5jb25maWcubmFtZXNwYWNlIHx8IFwiZGVmYXVsdFwiO1xuICAgIGFzc2VydEt1YmVybmV0ZXNOYW1lc3BhY2UocmVzb2x2ZWQpO1xuICAgIHJldHVybiByZXNvbHZlZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVJlZmVyZW5jZShcbiAgICBuYW1lT3JSZWY6IFNlY3JldE5hbWUgfCBTZWNyZXRSZWZlcmVuY2UsXG4gICAgb3B0aW9uczoge1xuICAgICAgbmFtZXNwYWNlPzogc3RyaW5nO1xuICAgICAgdmVyc2lvbj86IHN0cmluZztcbiAgICB9XG4gICk6IHsgbmFtZTogc3RyaW5nOyBuYW1lc3BhY2U6IHN0cmluZzsgdmVyc2lvbj86IHN0cmluZyB9IHtcbiAgICBjb25zdCBuYW1lID1cbiAgICAgIHR5cGVvZiBuYW1lT3JSZWYgPT09IFwic3RyaW5nXCIgPyBuYW1lT3JSZWYgOiBuYW1lT3JSZWYubmFtZTtcbiAgICBjb25zdCBuYW1lc3BhY2UgPVxuICAgICAgb3B0aW9ucy5uYW1lc3BhY2UgfHxcbiAgICAgICh0eXBlb2YgbmFtZU9yUmVmID09PSBcInN0cmluZ1wiID8gdW5kZWZpbmVkIDogbmFtZU9yUmVmLm5hbWVzcGFjZSkgfHxcbiAgICAgIHRoaXMuY29uZmlnLm5hbWVzcGFjZSB8fFxuICAgICAgXCJkZWZhdWx0XCI7XG4gICAgYXNzZXJ0S3ViZXJuZXRlc05hbWVzcGFjZShuYW1lc3BhY2UpO1xuICAgIGNvbnN0IHZlcnNpb24gPVxuICAgICAgb3B0aW9ucy52ZXJzaW9uIHx8XG4gICAgICAodHlwZW9mIG5hbWVPclJlZiA9PT0gXCJzdHJpbmdcIiA/IHVuZGVmaW5lZCA6IG5hbWVPclJlZi52ZXJzaW9uKTtcbiAgICByZXR1cm4geyBuYW1lOiB0aGlzLm5vcm1hbGl6ZU5hbWUobmFtZSksIG5hbWVzcGFjZSwgdmVyc2lvbiB9O1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHZhbGlkYXRlU2VjcmV0TmFtZShuYW1lKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemVTZWNyZXROYW1lKG5hbWUpO1xuICAgIGFzc2VydEt1YmVybmV0ZXNOYW1lKG5vcm1hbGl6ZWROYW1lKTtcbiAgICByZXR1cm4gbm9ybWFsaXplZE5hbWU7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VjcmV0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuYW1lc3BhY2U6IHN0cmluZyxcbiAgICBzZXJpYWxpemVkOiBTZXJpYWxpemVkU2VjcmV0UGF5bG9hZCxcbiAgICBvcHRpb25zOiBTdG9yZVNlY3JldE9wdGlvbnNcbiAgKTogVjFTZWNyZXQge1xuICAgIGNvbnN0IGFubm90YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgW0VOQ09ESU5HX0FOTk9UQVRJT05dOiBzZXJpYWxpemVkLmVuY29kaW5nLFxuICAgICAgW1VQREFURURfQVRfQU5OT1RBVElPTl06IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMuY29udGVudFR5cGUpIHtcbiAgICAgIGFubm90YXRpb25zW0NPTlRFTlRfVFlQRV9BTk5PVEFUSU9OXSA9IG9wdGlvbnMuY29udGVudFR5cGU7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRhZ3MpIHtcbiAgICAgIGFubm90YXRpb25zW1RBR1NfQU5OT1RBVElPTl0gPSBKU09OLnN0cmluZ2lmeShvcHRpb25zLnRhZ3MpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgICBhbm5vdGF0aW9uc1tWRVJTSU9OX0FOTk9UQVRJT05dID0gb3B0aW9ucy52ZXJzaW9uO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50ZW5hbnRJZCkge1xuICAgICAgYW5ub3RhdGlvbnNbVEVOQU5UX0FOTk9UQVRJT05dID0gb3B0aW9ucy50ZW5hbnRJZDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMub3JnVW5pdElkKSB7XG4gICAgICBhbm5vdGF0aW9uc1tPUkdfVU5JVF9BTk5PVEFUSU9OXSA9IG9wdGlvbnMub3JnVW5pdElkO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5vd25lclByaW5jaXBhbElkKSB7XG4gICAgICBhbm5vdGF0aW9uc1tPV05FUl9BTk5PVEFUSU9OXSA9IG9wdGlvbnMub3duZXJQcmluY2lwYWxJZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXBpVmVyc2lvbjogXCJ2MVwiLFxuICAgICAga2luZDogXCJTZWNyZXRcIixcbiAgICAgIHR5cGU6IFwiT3BhcXVlXCIsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBuYW1lLFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIGxhYmVsczoge1xuICAgICAgICAgIFtNQU5BR0VEX0xBQkVMXTogXCJ0cnVlXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGFubm90YXRpb25zLFxuICAgICAgfSxcbiAgICAgIHN0cmluZ0RhdGE6IHtcbiAgICAgICAgW1BBWUxPQURfREFUQV9LRVldOiBKU09OLnN0cmluZ2lmeShzZXJpYWxpemVkKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVhZFNlY3JldChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmFtZXNwYWNlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxWMVNlY3JldD4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5jbGllbnQucmVhZE5hbWVzcGFjZWRTZWNyZXQoeyBuYW1lLCBuYW1lc3BhY2UgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3NlcnRWZXJzaW9uKHNlY3JldDogVjFTZWNyZXQsIHZlcnNpb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXZlcnNpb24pIHJldHVybjtcbiAgICBjb25zdCBzdG9yZWQgPSBzZWNyZXQubWV0YWRhdGE/LmFubm90YXRpb25zPy5bVkVSU0lPTl9BTk5PVEFUSU9OXTtcbiAgICBpZiAoc3RvcmVkICE9PSB2ZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihcbiAgICAgICAgYFNlY3JldCBcIiR7c2VjcmV0Lm1ldGFkYXRhPy5uYW1lfVwiIHZlcnNpb24gXCIke3ZlcnNpb259XCIgbm90IGZvdW5kYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvTWV0YWRhdGEoc2VjcmV0OiBWMVNlY3JldCwgbmFtZXNwYWNlOiBzdHJpbmcpOiBTZWNyZXRNZXRhZGF0YSB7XG4gICAgY29uc3QgYW5ub3RhdGlvbnMgPSBzZWNyZXQubWV0YWRhdGE/LmFubm90YXRpb25zIHx8IHt9O1xuICAgIGNvbnN0IHVwZGF0ZWRBdCA9IGFubm90YXRpb25zW1VQREFURURfQVRfQU5OT1RBVElPTl07XG4gICAgY29uc3QgbmFtZSA9IHNlY3JldC5tZXRhZGF0YT8ubmFtZSB8fCBcIlwiO1xuICAgIHJldHVybiB7XG4gICAgICBwcm92aWRlcjogdGhpcy5wcm92aWRlcixcbiAgICAgIG5hbWUsXG4gICAgICB2ZXJzaW9uOiBhbm5vdGF0aW9uc1tWRVJTSU9OX0FOTk9UQVRJT05dLFxuICAgICAgY3JlYXRlZEF0OiB0b0RhdGUoc2VjcmV0Lm1ldGFkYXRhPy5jcmVhdGlvblRpbWVzdGFtcCksXG4gICAgICB1cGRhdGVkQXQ6IHVwZGF0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHVwZGF0ZWRBdClcbiAgICAgICAgOiB0b0RhdGUoc2VjcmV0Lm1ldGFkYXRhPy5jcmVhdGlvblRpbWVzdGFtcCksXG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgY29udGVudFR5cGU6IGFubm90YXRpb25zW0NPTlRFTlRfVFlQRV9BTk5PVEFUSU9OXSxcbiAgICAgIHRhZ3M6IHBhcnNlVGFncyhhbm5vdGF0aW9uc1tUQUdTX0FOTk9UQVRJT05dKSxcbiAgICAgIGV4dGVybmFsSWQ6IHNlY3JldC5tZXRhZGF0YT8udWlkLFxuICAgICAgdXJpOiBga3ViZXJuZXRlczovLyR7bmFtZXNwYWNlfS8ke25hbWV9YCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0dXNPZihlcnJvcjogdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXBpRXhjZXB0aW9uKSByZXR1cm4gZXJyb3IuY29kZTtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBlcnJvciBhcyB7IGNvZGU/OiB1bmtub3duOyBzdGF0dXNDb2RlPzogdW5rbm93biB9O1xuICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlPy5jb2RlID09PSBcIm51bWJlclwiKSByZXR1cm4gY2FuZGlkYXRlLmNvZGU7XG4gICAgaWYgKHR5cGVvZiBjYW5kaWRhdGU/LnN0YXR1c0NvZGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiBjYW5kaWRhdGUuc3RhdHVzQ29kZTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgbWVzc2FnZU9mKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBjb25zdCBlcnIgPSBlcnJvciBhcyB7XG4gICAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgICAgbmFtZT86IHN0cmluZztcbiAgICAgIGJvZHk/OiB7IG1lc3NhZ2U/OiBzdHJpbmc7IHJlYXNvbj86IHN0cmluZyB9O1xuICAgIH07XG4gICAgcmV0dXJuIGVycj8uYm9keT8ubWVzc2FnZSB8fCBlcnI/LmJvZHk/LnJlYXNvbiB8fCBlcnI/Lm1lc3NhZ2UgfHwgZXJyPy5uYW1lIHx8IFwiVW5rbm93biBlcnJvclwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlRXJyb3IoZXJyb3I6IHVua25vd24pOiBFcnJvciB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQmFzZUVycm9yKSByZXR1cm4gZXJyb3I7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5zdGF0dXNPZihlcnJvcik7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMubWVzc2FnZU9mKGVycm9yKTtcbiAgICBjb25zdCBsb3dlck1lc3NhZ2UgPSBtZXNzYWdlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoXG4gICAgICBzdGF0dXMgPT09IDQwNCB8fFxuICAgICAgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwibm90IGZvdW5kXCIpIHx8XG4gICAgICBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCI0MDRcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBuZXcgTm90Rm91bmRFcnJvcihtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBzdGF0dXMgPT09IDQwOSB8fFxuICAgICAgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwiYWxyZWFkeSBleGlzdHNcIikgfHxcbiAgICAgIGxvd2VyTWVzc2FnZS5pbmNsdWRlcyhcImNvbmZsaWN0XCIpIHx8XG4gICAgICBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCI0MDlcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBuZXcgQ29uZmxpY3RFcnJvcihtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzID09PSA0MDEgfHwgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwidW5hdXRob3JpemVkXCIpKSB7XG4gICAgICByZXR1cm4gbmV3IEF1dGhvcml6YXRpb25FcnJvcihgQXV0aGVudGljYXRpb24gZmFpbGVkOiAke21lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gNDAzIHx8IGxvd2VyTWVzc2FnZS5pbmNsdWRlcyhcImZvcmJpZGRlblwiKSkge1xuICAgICAgcmV0dXJuIG5ldyBBdXRob3JpemF0aW9uRXJyb3IoYFBlcm1pc3Npb24gZGVuaWVkOiAke21lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgc3RhdHVzID09PSA0MDAgfHxcbiAgICAgIHN0YXR1cyA9PT0gNDIyIHx8XG4gICAgICBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCJiYWQgcmVxdWVzdFwiKVxuICAgICkge1xuICAgICAgcmV0dXJuIG5ldyBCYWRSZXF1ZXN0RXJyb3IobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cyA9PT0gNDI5IHx8IGxvd2VyTWVzc2FnZS5pbmNsdWRlcyhcInJhdGUgbGltaXRcIikpIHtcbiAgICAgIHJldHVybiBuZXcgU2VjcmV0RXJyb3IoXG4gICAgICAgIFwiU0VDUkVUX1BST1ZJREVSX1JBVEVfTElNSVRFRFwiLFxuICAgICAgICBgUmF0ZSBsaW1pdGVkOiAke21lc3NhZ2V9YCxcbiAgICAgICAgZXJyb3IgYXMgRXJyb3JcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgc3RhdHVzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIChzdGF0dXMgIT09IHVuZGVmaW5lZCAmJiBzdGF0dXMgPj0gNTAwKSB8fFxuICAgICAgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwiY29ubmVjdGlvblwiKSB8fFxuICAgICAgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwidGltZW91dFwiKSB8fFxuICAgICAgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwidW5hdmFpbGFibGVcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBuZXcgU2VjcmV0RXJyb3IoXG4gICAgICAgIFwiU0VDUkVUX1BST1ZJREVSX1VOQVZBSUxBQkxFXCIsXG4gICAgICAgIGBQcm92aWRlciB1bmF2YWlsYWJsZTogJHttZXNzYWdlfWAsXG4gICAgICAgIGVycm9yIGFzIEVycm9yXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW50ZXJuYWxFcnJvcihtZXNzYWdlKTtcbiAgfVxufVxuIl19
479
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS3ViZXJuZXRlc1NlY3JldFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJLdWJlcm5ldGVzU2VjcmV0U2VydmljZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5REFBK0U7QUFDL0UseUNBQW9EO0FBQ3BELGlEQUE0RTtBQUM1RSxpREFBNkU7QUFDN0UsaURBQXVGO0FBQ3ZGLHFGQUErRTtBQUMvRSw0RUFBMkU7QUFDM0UsMkRBQW1IO0FBQ25ILE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO0FBQ25DLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDO0FBQzVDLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDO0FBQ3pDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxpQkFBaUIsVUFBVSxDQUFDO0FBQzNELE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxpQkFBaUIsY0FBYyxDQUFDO0FBQ25FLE1BQU0sZUFBZSxHQUFHLEdBQUcsaUJBQWlCLE1BQU0sQ0FBQztBQUNuRCxNQUFNLGtCQUFrQixHQUFHLEdBQUcsaUJBQWlCLFNBQVMsQ0FBQztBQUN6RCxNQUFNLHFCQUFxQixHQUFHLEdBQUcsaUJBQWlCLFlBQVksQ0FBQztBQUMvRCxNQUFNLGlCQUFpQixHQUFHLEdBQUcsaUJBQWlCLFdBQVcsQ0FBQztBQUMxRCxNQUFNLG1CQUFtQixHQUFHLEdBQUcsaUJBQWlCLGFBQWEsQ0FBQztBQUM5RCxNQUFNLGdCQUFnQixHQUFHLEdBQUcsaUJBQWlCLG9CQUFvQixDQUFDO0FBQ2xFLE1BQU0scUJBQXFCLEdBQUcsa0NBQWtDLENBQUM7QUFDakUsTUFBTSxpQkFBaUIsR0FBRyxpQ0FBaUMsQ0FBQztBQUM1RCxTQUFTLG9CQUFvQixDQUFDLElBQUk7SUFDOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3pELE1BQU0sSUFBSSxzQkFBVyxDQUFDLHFCQUFxQixFQUFFLG9DQUFvQyxJQUFJLGlGQUFpRixDQUFDLENBQUM7SUFDNUssQ0FBQztBQUNMLENBQUM7QUFDRCxTQUFTLHlCQUF5QixDQUFDLFNBQVM7SUFDeEMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzlELE1BQU0sSUFBSSxzQkFBVyxDQUFDLHFCQUFxQixFQUFFLGtDQUFrQyxTQUFTLGtEQUFrRCxDQUFDLENBQUM7SUFDaEosQ0FBQztBQUNMLENBQUM7QUFDRCxTQUFTLE1BQU0sQ0FBQyxLQUFLO0lBQ2pCLElBQUksQ0FBQyxLQUFLO1FBQ04sT0FBTyxTQUFTLENBQUM7SUFDckIsTUFBTSxJQUFJLEdBQUcsS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNELENBQUM7QUFDRCxTQUFTLFNBQVMsQ0FBQyxHQUFHO0lBQ2xCLElBQUksQ0FBQyxHQUFHO1FBQ0osT0FBTyxTQUFTLENBQUM7SUFDckIsSUFBSSxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixPQUFPLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRO1lBQ3ZDLENBQUMsQ0FBQyxNQUFNO1lBQ1IsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNwQixDQUFDO0lBQ0QsTUFBTSxDQUFDO1FBQ0gsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztBQUNMLENBQUM7QUFDRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFhLHVCQUF3QixTQUFRLG1DQUF3QjtJQUNqRTtRQUNJLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDO0lBQ2pDLENBQUM7SUFDRCxxQkFBcUI7UUFDakIsTUFBTSxHQUFHLEdBQUcsNERBQTJCLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUMzRCxNQUFNLFNBQVMsR0FBRyxJQUFBLCtCQUFTLEVBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sVUFBVSxHQUFHLElBQUEsK0JBQVMsRUFBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBQSwrQkFBUyxFQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFBLCtCQUFTLEVBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNO1lBQ2hELE9BQU8sU0FBUyxDQUFDO1FBQ3JCLE9BQU87WUFDSCxRQUFRLEVBQUUsWUFBWTtZQUN0QixTQUFTO1lBQ1QsVUFBVTtZQUNWLE9BQU87WUFDUCxNQUFNO1lBQ04sS0FBSyxFQUFFLElBQUEsK0JBQVMsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQzNCLFNBQVMsRUFBRSxJQUFBLCtCQUFTLEVBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztZQUNuQyxNQUFNLEVBQUUsSUFBQSwrQkFBUyxFQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDN0IsTUFBTSxFQUFFLElBQUEsK0JBQVMsRUFBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQzdCLFFBQVEsRUFBRSxJQUFBLCtCQUFTLEVBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUNqQyxPQUFPLEVBQUUsSUFBQSwrQkFBUyxFQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDL0IsUUFBUSxFQUFFLElBQUEsK0JBQVMsRUFBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxJQUFBLCtCQUFTLEVBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztZQUMvQixhQUFhLEVBQUUsSUFBQSxnQ0FBVSxFQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7WUFDNUMsY0FBYyxFQUFFLElBQUEsZ0NBQVUsRUFBQyxHQUFHLENBQUMsY0FBYyxDQUFDO1NBQ2pELENBQUM7SUFDTixDQUFDO0lBQ0QsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUk7UUFDcEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25GLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQy9DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1RCxNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsdUJBQVMsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLEdBQUcsQ0FBQyxPQUFPLENBQUMsd0RBQXdELFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUNELEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSTtRQUMxQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pFLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLGNBQWMsaUJBQWlCLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDMUUsTUFBTSxVQUFVLEdBQUcsSUFBQSxpQ0FBc0IsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFDRCxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ1gsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUM7b0JBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDO3dCQUNwRCxJQUFJLEVBQUUsY0FBYzt3QkFDcEIsU0FBUztxQkFDWixDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRzt3QkFDWixHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7d0JBQ3hCLGVBQWUsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLGVBQWU7cUJBQ3RELENBQUM7b0JBQ0YsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDO3dCQUN0QyxJQUFJLEVBQUUsY0FBYzt3QkFDcEIsU0FBUzt3QkFDVCxJQUFJO3FCQUNQLENBQUMsQ0FBQztnQkFDUCxDQUFDO2dCQUNELE9BQU8sWUFBWSxFQUFFLENBQUM7b0JBQ2xCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDeEMsQ0FBQztZQUNMLENBQUM7aUJBQ0ksQ0FBQztnQkFDRixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPO1lBQ0gsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLElBQUksRUFBRSxjQUFjO1lBQ3BCLFNBQVM7WUFDVCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsR0FBRyxFQUFFLGdCQUFnQixTQUFTLElBQUksY0FBYyxFQUFFO1NBQ3JELENBQUM7SUFDTixDQUFDO0lBQ0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUk7UUFDM0MsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0UsR0FBRyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsSUFBSSxtQkFBbUIsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNyRSxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNQLE1BQU0sSUFBSSw2QkFBYSxDQUFDLDhCQUE4QixJQUFJLG1CQUFtQixTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQztRQUNaLElBQUksQ0FBQztZQUNELE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFDRCxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLHNCQUFXLENBQUMsK0JBQStCLEVBQUUsdUNBQXVDLElBQUksTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEksQ0FBQztRQUNELE9BQU8sSUFBQSxtQ0FBd0IsRUFBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUk7UUFDekMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0UsR0FBRyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxtQkFBbUIsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNuRSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1YsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0QsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUNELE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNMLENBQUM7SUFDRCxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSTtRQUN6QyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0UsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvRSxHQUFHLENBQUMsT0FBTyxDQUFDLHNCQUFzQixJQUFJLHdCQUF3QixTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDWCxJQUFJLEtBQUssWUFBWSw2QkFBYTtnQkFDOUIsT0FBTyxLQUFLLENBQUM7WUFDakIsTUFBTSxLQUFLLENBQUM7UUFDaEIsQ0FBQztJQUNMLENBQUM7SUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJO1FBQzVCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pFLEdBQUcsQ0FBQyxPQUFPLENBQUMsZ0NBQWdDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDekQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksYUFBYSxDQUFDO1FBQ2xCLElBQUksQ0FBQztZQUNELEdBQUcsQ0FBQztnQkFDQSxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUM7b0JBQ3BELFNBQVM7b0JBQ1QsYUFBYSxFQUFFLEdBQUcsYUFBYSxPQUFPO29CQUN0QyxLQUFLLEVBQUUsR0FBRztvQkFDVixTQUFTLEVBQUUsYUFBYTtpQkFDM0IsQ0FBQyxDQUFDO2dCQUNILEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDeEMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNwRCxDQUFDO2dCQUNELGFBQWEsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQztZQUNqRCxDQUFDLFFBQVEsYUFBYSxFQUFFO1FBQzVCLENBQUM7UUFDRCxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDcEMsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUs7Z0JBQ3pCLE9BQU8sS0FBSyxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtnQkFDYixPQUFPLElBQUksQ0FBQztZQUNoQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDNUYsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNuQyxNQUFNLEdBQUcsR0FBRyxPQUFPLE9BQU8sQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ25GLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJO1FBQzNDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQy9FLEdBQUcsQ0FBQyxPQUFPLENBQUMsK0JBQStCLElBQUksaUJBQWlCLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDO1lBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ1gsSUFBSSxLQUFLLFlBQVksNkJBQWE7Z0JBQzlCLE9BQU8sU0FBUyxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxDQUFDO1FBQ2hCLENBQUM7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJO1FBQ2hELE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0RSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUNELGVBQWUsQ0FBQyxNQUFNO1FBQ2xCLE1BQU0sVUFBVSxHQUFHLElBQUksd0JBQVUsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQztZQUNELElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN4QixVQUFVLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDakMsQ0FBQztpQkFDSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDO2dCQUNwQyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUM7Z0JBQzlCLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQztnQkFDcEMsVUFBVSxDQUFDLGVBQWUsQ0FBQztvQkFDdkIsUUFBUSxFQUFFO3dCQUNOOzRCQUNJLElBQUksRUFBRSxXQUFXOzRCQUNqQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07NEJBQ3JCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTs0QkFDckIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNOzRCQUNyQixhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7eUJBQ3RDO3FCQUNKO29CQUNELEtBQUssRUFBRTt3QkFDSDs0QkFDSSxJQUFJLEVBQUUsUUFBUTs0QkFDZCxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7NEJBQ25CLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUzs0QkFDM0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFROzRCQUN6QixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7NEJBQ3pCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTzs0QkFDdkIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO3lCQUMxQjtxQkFDSjtvQkFDRCxRQUFRLEVBQUU7d0JBQ047NEJBQ0ksSUFBSSxFQUFFLFdBQVc7NEJBQ2pCLE9BQU8sRUFBRSxXQUFXOzRCQUNwQixJQUFJLEVBQUUsUUFBUTs0QkFDZCxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7eUJBQzlCO3FCQUNKO29CQUNELGNBQWMsRUFBRSxXQUFXO2lCQUM5QixDQUFDLENBQUM7WUFDUCxDQUFDO2lCQUNJLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN6QixVQUFVLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQyxDQUFDO2lCQUNJLENBQUM7Z0JBQ0YsVUFBVSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ2pDLENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDakIsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqRCxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsVUFBVTtRQUMvQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUztZQUM5QixVQUFVLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUMsRUFBRSxTQUFTO1lBQ3RFLFNBQVMsQ0FBQztRQUNkLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxTQUFTO1FBQzVCLE1BQU0sUUFBUSxHQUFHLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUM7UUFDakUseUJBQXlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUNELGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPO1FBQy9CLE1BQU0sSUFBSSxHQUFHLE9BQU8sU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3hFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTO1lBQy9CLENBQUMsT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7WUFDakUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTO1lBQ3JCLFNBQVMsQ0FBQztRQUNkLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1lBQzNCLENBQUMsT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2xFLENBQUM7SUFDRCxhQUFhLENBQUMsSUFBSTtRQUNkLElBQUksQ0FBQztZQUNELElBQUEsNkJBQWtCLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUNELE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELE1BQU0sY0FBYyxHQUFHLElBQUEsOEJBQW1CLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckMsT0FBTyxjQUFjLENBQUM7SUFDMUIsQ0FBQztJQUNELFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxPQUFPO1FBQzVDLE1BQU0sV0FBVyxHQUFHO1lBQ2hCLENBQUMsbUJBQW1CLENBQUMsRUFBRSxVQUFVLENBQUMsUUFBUTtZQUMxQyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7U0FDcEQsQ0FBQztRQUNGLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RCLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDL0QsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsV0FBVyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixXQUFXLENBQUMsa0JBQWtCLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ3RELENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixXQUFXLENBQUMsaUJBQWlCLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ3RELENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixXQUFXLENBQUMsbUJBQW1CLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3pELENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzNCLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsT0FBTztZQUNILFVBQVUsRUFBRSxJQUFJO1lBQ2hCLElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRLEVBQUU7Z0JBQ04sSUFBSTtnQkFDSixTQUFTO2dCQUNULE1BQU0sRUFBRTtvQkFDSixDQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU07aUJBQzFCO2dCQUNELFdBQVc7YUFDZDtZQUNELFVBQVUsRUFBRTtnQkFDUixDQUFDLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7YUFDakQ7U0FDSixDQUFDO0lBQ04sQ0FBQztJQUNELEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVM7UUFDNUIsSUFBSSxDQUFDO1lBQ0QsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0wsQ0FBQztJQUNELGFBQWEsQ0FBQyxNQUFNLEVBQUUsT0FBTztRQUN6QixJQUFJLENBQUMsT0FBTztZQUNSLE9BQU87UUFDWCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbEUsSUFBSSxNQUFNLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLDZCQUFhLENBQUMsV0FBVyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksY0FBYyxPQUFPLGFBQWEsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7SUFDTCxDQUFDO0lBQ0QsVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTO1FBQ3hCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUN2RCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNyRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekMsT0FBTztZQUNILFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixJQUFJO1lBQ0osT0FBTyxFQUFFLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztZQUN4QyxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUM7WUFDckQsU0FBUyxFQUFFLFNBQVM7Z0JBQ2hCLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ3JCLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQztZQUNoRCxPQUFPLEVBQUUsSUFBSTtZQUNiLFdBQVcsRUFBRSxXQUFXLENBQUMsdUJBQXVCLENBQUM7WUFDakQsSUFBSSxFQUFFLFNBQVMsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDN0MsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRztZQUNoQyxHQUFHLEVBQUUsZ0JBQWdCLFNBQVMsSUFBSSxJQUFJLEVBQUU7U0FDM0MsQ0FBQztJQUNOLENBQUM7SUFDRCxRQUFRLENBQUMsS0FBSztRQUNWLElBQUksS0FBSyxZQUFZLDBCQUFZO1lBQzdCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQztRQUN0QixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxPQUFPLFNBQVMsRUFBRSxJQUFJLEtBQUssUUFBUTtZQUNuQyxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDMUIsSUFBSSxPQUFPLFNBQVMsRUFBRSxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDNUMsT0FBTyxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsU0FBUyxDQUFDLEtBQUs7UUFDWCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDbEIsT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxHQUFHLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksZUFBZSxDQUFDO0lBQ25HLENBQUM7SUFDRCxVQUFVLENBQUMsS0FBSztRQUNaLElBQUksS0FBSyxZQUFZLHlCQUFTO1lBQzFCLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0MsSUFBSSxNQUFNLEtBQUssR0FBRztZQUNkLFlBQVksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQ2xDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksNkJBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsSUFBSSxNQUFNLEtBQUssR0FBRztZQUNkLFlBQVksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7WUFDdkMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFDakMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sSUFBSSw2QkFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzFELE9BQU8sSUFBSSx5QkFBa0IsQ0FBQywwQkFBMEIsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxPQUFPLElBQUkseUJBQWtCLENBQUMsc0JBQXNCLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUNELElBQUksTUFBTSxLQUFLLEdBQUc7WUFDZCxNQUFNLEtBQUssR0FBRztZQUNkLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxPQUFPLElBQUksK0JBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUN4RCxPQUFPLElBQUksc0JBQVcsQ0FBQyw4QkFBOEIsRUFBRSxpQkFBaUIsT0FBTyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUYsQ0FBQztRQUNELElBQUksTUFBTSxLQUFLLFNBQVM7WUFDcEIsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUM7WUFDdkMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7WUFDbkMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFDaEMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxzQkFBVyxDQUFDLDZCQUE2QixFQUFFLHlCQUF5QixPQUFPLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRyxDQUFDO1FBQ0QsT0FBTyxJQUFJLDZCQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUNKO0FBelpELDBEQXlaQztBQUNELDB1aURBQTB1aUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlFeGNlcHRpb24sIENvcmVWMUFwaSwgS3ViZUNvbmZpZywgfSBmcm9tIFwiQGt1YmVybmV0ZXMvY2xpZW50LW5vZGVcIjtcbmltcG9ydCB7IEF1dGhvcml6YXRpb25FcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgQ2xpZW50QmFzZWRTZWNyZXRTZXJ2aWNlLCBTZWNyZXRFcnJvciwgfSBmcm9tIFwiLi8uLi9jb3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVNlY3JldE5hbWUsIG5vcm1hbGl6ZVNlY3JldE5hbWUgfSBmcm9tIFwiLi8uLi9jb3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBzZXJpYWxpemVTZWNyZXRQYXlsb2FkLCBkZXNlcmlhbGl6ZVNlY3JldFBheWxvYWQsIH0gZnJvbSBcIi4vLi4vY29yZS9pbmRleC5qc1wiO1xuaW1wb3J0IHsgS3ViZXJuZXRlc1NlY3JldEVudmlyb25tZW50IH0gZnJvbSBcIi4vS3ViZXJuZXRlc1NlY3JldEVudmlyb25tZW50LmpzXCI7XG5pbXBvcnQgeyBlbnZCb29sZWFuLCBlbnZTdHJpbmcgfSBmcm9tIFwiLi8uLi8uLi9zaGFyZWQvZW52aXJvbm1lbnRWYWx1ZS5qc1wiO1xuaW1wb3J0IHsgQmFkUmVxdWVzdEVycm9yLCBCYXNlRXJyb3IsIENvbmZsaWN0RXJyb3IsIEludGVybmFsRXJyb3IsIE5vdEZvdW5kRXJyb3IsIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5jb25zdCBQQVlMT0FEX0RBVEFfS0VZID0gXCJwYXlsb2FkXCI7XG5jb25zdCBNQU5BR0VEX0xBQkVMID0gXCJkZWNhZi10cy5pby9tYW5hZ2VkXCI7XG5jb25zdCBBTk5PVEFUSU9OX1BSRUZJWCA9IFwiZGVjYWYtdHMuaW8vXCI7XG5jb25zdCBFTkNPRElOR19BTk5PVEFUSU9OID0gYCR7QU5OT1RBVElPTl9QUkVGSVh9ZW5jb2RpbmdgO1xuY29uc3QgQ09OVEVOVF9UWVBFX0FOTk9UQVRJT04gPSBgJHtBTk5PVEFUSU9OX1BSRUZJWH1jb250ZW50LXR5cGVgO1xuY29uc3QgVEFHU19BTk5PVEFUSU9OID0gYCR7QU5OT1RBVElPTl9QUkVGSVh9dGFnc2A7XG5jb25zdCBWRVJTSU9OX0FOTk9UQVRJT04gPSBgJHtBTk5PVEFUSU9OX1BSRUZJWH12ZXJzaW9uYDtcbmNvbnN0IFVQREFURURfQVRfQU5OT1RBVElPTiA9IGAke0FOTk9UQVRJT05fUFJFRklYfXVwZGF0ZWQtYXRgO1xuY29uc3QgVEVOQU5UX0FOTk9UQVRJT04gPSBgJHtBTk5PVEFUSU9OX1BSRUZJWH10ZW5hbnQtaWRgO1xuY29uc3QgT1JHX1VOSVRfQU5OT1RBVElPTiA9IGAke0FOTk9UQVRJT05fUFJFRklYfW9yZy11bml0LWlkYDtcbmNvbnN0IE9XTkVSX0FOTk9UQVRJT04gPSBgJHtBTk5PVEFUSU9OX1BSRUZJWH1vd25lci1wcmluY2lwYWwtaWRgO1xuY29uc3QgRE5TX1NVQkRPTUFJTl9QQVRURVJOID0gL15bYS16MC05XShbLWEtejAtOS5dKlthLXowLTldKT8kLztcbmNvbnN0IEROU19MQUJFTF9QQVRURVJOID0gL15bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyQvO1xuZnVuY3Rpb24gYXNzZXJ0S3ViZXJuZXRlc05hbWUobmFtZSkge1xuICAgIGlmIChuYW1lLmxlbmd0aCA+IDI1MyB8fCAhRE5TX1NVQkRPTUFJTl9QQVRURVJOLnRlc3QobmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3JldEVycm9yKFwiU0VDUkVUX0lOVkFMSURfTkFNRVwiLCBgSW52YWxpZCBLdWJlcm5ldGVzIHNlY3JldCBuYW1lOiBcIiR7bmFtZX1cIi4gTmFtZXMgbXVzdCBiZSBsb3dlcmNhc2UgRE5TLTExMjMgc3ViZG9tYWlucyAobGV0dGVycywgZGlnaXRzLCAnLScsIGFuZCAnLicpLmApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2VydEt1YmVybmV0ZXNOYW1lc3BhY2UobmFtZXNwYWNlKSB7XG4gICAgaWYgKG5hbWVzcGFjZS5sZW5ndGggPiA2MyB8fCAhRE5TX0xBQkVMX1BBVFRFUk4udGVzdChuYW1lc3BhY2UpKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWNyZXRFcnJvcihcIlNFQ1JFVF9JTlZBTElEX05BTUVcIiwgYEludmFsaWQgS3ViZXJuZXRlcyBuYW1lc3BhY2U6IFwiJHtuYW1lc3BhY2V9XCIuIE5hbWVzcGFjZXMgbXVzdCBiZSBsb3dlcmNhc2UgRE5TLTExMjMgbGFiZWxzLmApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRvRGF0ZSh2YWx1ZSkge1xuICAgIGlmICghdmFsdWUpXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGF0ZSA9IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IHZhbHVlIDogbmV3IERhdGUodmFsdWUpO1xuICAgIHJldHVybiBOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpID8gdW5kZWZpbmVkIDogZGF0ZTtcbn1cbmZ1bmN0aW9uIHBhcnNlVGFncyhyYXcpIHtcbiAgICBpZiAoIXJhdylcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgICAgIHJldHVybiBwYXJzZWQgJiYgdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgPyBwYXJzZWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuLyoqXG4gKiBAY2xhc3MgS3ViZXJuZXRlc1NlY3JldFNlcnZpY2VcbiAqIEBzdW1tYXJ5IE5hdGl2ZSBLdWJlcm5ldGVzIFNlY3JldHMgYmFja2VuZC5cbiAqIEBkZXNjcmlwdGlvbiBJbXBsZW1lbnRzIHRoZSB7QGxpbmsgU2VjcmV0U2VydmljZX0gY29udHJhY3Qgb24gdG9wIG9mXG4gKiBuYW1lc3BhY2VkIEt1YmVybmV0ZXMgYFNlY3JldGAgb2JqZWN0cy4gRWFjaCBERUNBRiBzZWNyZXQgaXMgc3RvcmVkIGFzIGFuXG4gKiBgT3BhcXVlYCBTZWNyZXQgd2hvc2UgYHBheWxvYWRgIGRhdGEga2V5IGhvbGRzIHRoZSBzZXJpYWxpemVkXG4gKiB7QGxpbmsgU2VyaWFsaXplZFNlY3JldFBheWxvYWR9IGVudmVsb3BlLCB3aGlsZSBlbmNvZGluZywgY29udGVudCB0eXBlLCB0YWdzLFxuICogbG9naWNhbCB2ZXJzaW9uLCBhbmQgb3duZXJzaGlwIGhpbnRzIGxpdmUgaW4gYGRlY2FmLXRzLmlvLypgIGFubm90YXRpb25zLlxuICpcbiAqIEF1dGhlbnRpY2F0aW9uIHVzZXMgdGhlIHN0YW5kYXJkIEt1YmVybmV0ZXMgY2xpZW50IHJlc29sdXRpb24gb3JkZXI6XG4gKiBleHBsaWNpdCBgc2VydmVyYCBjcmVkZW50aWFscywgYW4gZXhwbGljaXQgYGt1YmVjb25maWdgIHBhdGgsIGBLVUJFQ09ORklHYCxcbiAqIGB+Ly5rdWJlL2NvbmZpZ2AsIGFuZCBmaW5hbGx5IHRoZSBpbi1jbHVzdGVyIHNlcnZpY2UgYWNjb3VudC5cbiAqL1xuZXhwb3J0IGNsYXNzIEt1YmVybmV0ZXNTZWNyZXRTZXJ2aWNlIGV4dGVuZHMgQ2xpZW50QmFzZWRTZWNyZXRTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5wcm92aWRlciA9IFwia3ViZXJuZXRlc1wiO1xuICAgIH1cbiAgICBjb25maWdGcm9tRW52aXJvbm1lbnQoKSB7XG4gICAgICAgIGNvbnN0IGVudiA9IEt1YmVybmV0ZXNTZWNyZXRFbnZpcm9ubWVudC5zZWNyZXRzLmt1YmVybmV0ZXM7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZSA9IGVudlN0cmluZyhlbnY/Lm5hbWVzcGFjZSk7XG4gICAgICAgIGNvbnN0IGt1YmVjb25maWcgPSBlbnZTdHJpbmcoZW52Py5rdWJlY29uZmlnKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGVudlN0cmluZyhlbnY/LmNvbnRleHQpO1xuICAgICAgICBjb25zdCBzZXJ2ZXIgPSBlbnZTdHJpbmcoZW52Py5zZXJ2ZXIpO1xuICAgICAgICBpZiAoIW5hbWVzcGFjZSAmJiAha3ViZWNvbmZpZyAmJiAhY29udGV4dCAmJiAhc2VydmVyKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByb3ZpZGVyOiBcImt1YmVybmV0ZXNcIixcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIGt1YmVjb25maWcsXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgc2VydmVyLFxuICAgICAgICAgICAgdG9rZW46IGVudlN0cmluZyhlbnYudG9rZW4pLFxuICAgICAgICAgICAgdG9rZW5GaWxlOiBlbnZTdHJpbmcoZW52LnRva2VuRmlsZSksXG4gICAgICAgICAgICBjYUZpbGU6IGVudlN0cmluZyhlbnYuY2FGaWxlKSxcbiAgICAgICAgICAgIGNhRGF0YTogZW52U3RyaW5nKGVudi5jYURhdGEpLFxuICAgICAgICAgICAgY2VydEZpbGU6IGVudlN0cmluZyhlbnYuY2VydEZpbGUpLFxuICAgICAgICAgICAga2V5RmlsZTogZW52U3RyaW5nKGVudi5rZXlGaWxlKSxcbiAgICAgICAgICAgIGNlcnREYXRhOiBlbnZTdHJpbmcoZW52LmNlcnREYXRhKSxcbiAgICAgICAgICAgIGtleURhdGE6IGVudlN0cmluZyhlbnYua2V5RGF0YSksXG4gICAgICAgICAgICBza2lwVExTVmVyaWZ5OiBlbnZCb29sZWFuKGVudi5za2lwVExTVmVyaWZ5KSxcbiAgICAgICAgICAgIHNlcnZpY2VBY2NvdW50OiBlbnZCb29sZWFuKGVudi5zZXJ2aWNlQWNjb3VudCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIGluaXRpYWxpemUoLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFwiaW5pdGlhbGl6ZVwiLCB0cnVlKSkuZm9yKHRoaXMuaW5pdGlhbGl6ZSk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlnRnJvbUFyZ3MoLi4uYXJncyk7XG4gICAgICAgIGNvbnN0IGt1YmVDb25maWcgPSB0aGlzLmJ1aWxkS3ViZUNvbmZpZyhjb25maWcpO1xuICAgICAgICBjb25zdCBuYW1lc3BhY2UgPSB0aGlzLnJlc29sdmVOYW1lc3BhY2UoY29uZmlnLCBrdWJlQ29uZmlnKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSB7IC4uLmNvbmZpZywgbmFtZXNwYWNlIH07XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGt1YmVDb25maWcubWFrZUFwaUNsaWVudChDb3JlVjFBcGkpO1xuICAgICAgICB0aGlzLl9jb25maWcgPSByZXNvbHZlZDtcbiAgICAgICAgdGhpcy5fY2xpZW50ID0gY2xpZW50O1xuICAgICAgICBsb2cudmVyYm9zZShgSW5pdGlhbGl6ZWQgS3ViZXJuZXRlcyBzZWNyZXQgc2VydmljZSBmb3IgbmFtZXNwYWNlIFwiJHtuYW1lc3BhY2V9XCJgKTtcbiAgICAgICAgcmV0dXJuIHsgY29uZmlnOiByZXNvbHZlZCwgY2xpZW50IH07XG4gICAgfVxuICAgIGFzeW5jIHN0b3JlKG5hbWUsIHZhbHVlLCBvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBcInN0b3JlXCIsIHRydWUpKS5mb3IodGhpcy5zdG9yZSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gdGhpcy5ub3JtYWxpemVOYW1lKG5hbWUpO1xuICAgICAgICBjb25zdCBuYW1lc3BhY2UgPSB0aGlzLnJlc29sdmVOYW1lc3BhY2VPcHRpb24ob3B0aW9ucy5uYW1lc3BhY2UpO1xuICAgICAgICBsb2cudmVyYm9zZShgU3RvcmluZyBzZWNyZXQgJHtub3JtYWxpemVkTmFtZX0gaW4gbmFtZXNwYWNlICR7bmFtZXNwYWNlfWApO1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplU2VjcmV0UGF5bG9hZCh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmJ1aWxkU2VjcmV0KG5vcm1hbGl6ZWROYW1lLCBuYW1lc3BhY2UsIHNlcmlhbGl6ZWQsIG9wdGlvbnMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGllbnQuY3JlYXRlTmFtZXNwYWNlZFNlY3JldCh7IG5hbWVzcGFjZSwgYm9keSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1c09mKGVycm9yKSA9PT0gNDA5KSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLmNsaWVudC5yZWFkTmFtZXNwYWNlZFNlY3JldCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJvZHkubWV0YWRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4oYm9keS5tZXRhZGF0YSB8fCB7fSksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVZlcnNpb246IGV4aXN0aW5nLm1ldGFkYXRhPy5yZXNvdXJjZVZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50LnJlcGxhY2VOYW1lc3BhY2VkU2VjcmV0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChyZXBsYWNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKHJlcGxhY2VFcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvdmlkZXI6IHRoaXMucHJvdmlkZXIsXG4gICAgICAgICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSxcbiAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgICAgIHVyaTogYGt1YmVybmV0ZXM6Ly8ke25hbWVzcGFjZX0vJHtub3JtYWxpemVkTmFtZX1gLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyByZXRyaWV2ZShuYW1lT3JSZWYsIG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFwicmV0cmlldmVcIiwgdHJ1ZSkpLmZvcih0aGlzLnJldHJpZXZlKTtcbiAgICAgICAgY29uc3QgeyBuYW1lLCBuYW1lc3BhY2UsIHZlcnNpb24gfSA9IHRoaXMucmVzb2x2ZVJlZmVyZW5jZShuYW1lT3JSZWYsIG9wdGlvbnMpO1xuICAgICAgICBsb2cudmVyYm9zZShgUmV0cmlldmluZyBzZWNyZXQgJHtuYW1lfSBmcm9tIG5hbWVzcGFjZSAke25hbWVzcGFjZX1gKTtcbiAgICAgICAgY29uc3Qgc2VjcmV0ID0gYXdhaXQgdGhpcy5yZWFkU2VjcmV0KG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICAgIHRoaXMuYXNzZXJ0VmVyc2lvbihzZWNyZXQsIHZlcnNpb24pO1xuICAgICAgICBjb25zdCByYXcgPSBzZWNyZXQuZGF0YT8uW1BBWUxPQURfREFUQV9LRVldO1xuICAgICAgICBpZiAoIXJhdykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYE5vIHNlY3JldCB2YWx1ZSBmb3VuZCBmb3IgXCIke25hbWV9XCIgaW4gbmFtZXNwYWNlIFwiJHtuYW1lc3BhY2V9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGF5bG9hZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBheWxvYWQgPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKHJhdywgXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTZWNyZXRFcnJvcihcIlNFQ1JFVF9ERVNFUklBTElaQVRJT05fRkFJTEVEXCIsIGBGYWlsZWQgdG8gcGFyc2Ugc2VjcmV0IHBheWxvYWQgZm9yIFwiJHtuYW1lfVwiOiAke2Vycm9yLm1lc3NhZ2V9YCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXNlcmlhbGl6ZVNlY3JldFBheWxvYWQocGF5bG9hZCk7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZShuYW1lT3JSZWYsIG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFwiZGVsZXRlXCIsIHRydWUpKS5mb3IodGhpcy5kZWxldGUpO1xuICAgICAgICBjb25zdCB7IG5hbWUsIG5hbWVzcGFjZSwgdmVyc2lvbiB9ID0gdGhpcy5yZXNvbHZlUmVmZXJlbmNlKG5hbWVPclJlZiwgb3B0aW9ucyk7XG4gICAgICAgIGxvZy52ZXJib3NlKGBEZWxldGluZyBzZWNyZXQgJHtuYW1lfSBmcm9tIG5hbWVzcGFjZSAke25hbWVzcGFjZX1gKTtcbiAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3JldCA9IGF3YWl0IHRoaXMucmVhZFNlY3JldChuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgdGhpcy5hc3NlcnRWZXJzaW9uKHNlY3JldCwgdmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50LmRlbGV0ZU5hbWVzcGFjZWRTZWNyZXQoeyBuYW1lLCBuYW1lc3BhY2UgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGV4aXN0cyhuYW1lT3JSZWYsIG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFwiZXhpc3RzXCIsIHRydWUpKS5mb3IodGhpcy5leGlzdHMpO1xuICAgICAgICBjb25zdCB7IG5hbWUsIG5hbWVzcGFjZSwgdmVyc2lvbiB9ID0gdGhpcy5yZXNvbHZlUmVmZXJlbmNlKG5hbWVPclJlZiwgb3B0aW9ucyk7XG4gICAgICAgIGxvZy52ZXJib3NlKGBDaGVja2luZyBpZiBzZWNyZXQgJHtuYW1lfSBleGlzdHMgaW4gbmFtZXNwYWNlICR7bmFtZXNwYWNlfWApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc2VjcmV0ID0gYXdhaXQgdGhpcy5yZWFkU2VjcmV0KG5hbWUsIG5hbWVzcGFjZSk7XG4gICAgICAgICAgICB0aGlzLmFzc2VydFZlcnNpb24oc2VjcmV0LCB2ZXJzaW9uKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm90Rm91bmRFcnJvcilcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBsaXN0KG9wdGlvbnMgPSB7fSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCB7IGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFwibGlzdFwiLCB0cnVlKSkuZm9yKHRoaXMubGlzdCk7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZSA9IHRoaXMucmVzb2x2ZU5hbWVzcGFjZU9wdGlvbihvcHRpb25zLm5hbWVzcGFjZSk7XG4gICAgICAgIGxvZy52ZXJib3NlKGBMaXN0aW5nIHNlY3JldHMgaW4gbmFtZXNwYWNlICR7bmFtZXNwYWNlfWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgbGV0IGNvbnRpbnVlVG9rZW47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5saXN0TmFtZXNwYWNlZFNlY3JldCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxTZWxlY3RvcjogYCR7TUFOQUdFRF9MQUJFTH09dHJ1ZWAsXG4gICAgICAgICAgICAgICAgICAgIGxpbWl0OiAxMDAsXG4gICAgICAgICAgICAgICAgICAgIF9jb250aW51ZTogY29udGludWVUb2tlbixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNlY3JldCBvZiByZXNwb25zZS5pdGVtcyB8fCBbXSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnRvTWV0YWRhdGEoc2VjcmV0LCBuYW1lc3BhY2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWVUb2tlbiA9IHJlc3BvbnNlLm1ldGFkYXRhPy5fY29udGludWU7XG4gICAgICAgICAgICB9IHdoaWxlIChjb250aW51ZVRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSByZXN1bHQuZmlsdGVyKChtZXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVkID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMudGFncylcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhvcHRpb25zLnRhZ3MpLmV2ZXJ5KChba2V5LCB2YWx1ZV0pID0+IG1ldGEudGFncz8uW2tleV0gPT09IHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IG9wdGlvbnMub2Zmc2V0ID8/IDA7XG4gICAgICAgIGNvbnN0IGVuZCA9IHR5cGVvZiBvcHRpb25zLmxpbWl0ID09PSBcIm51bWJlclwiID8gb2Zmc2V0ICsgb3B0aW9ucy5saW1pdCA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkLnNsaWNlKG9mZnNldCwgZW5kKTtcbiAgICB9XG4gICAgYXN5bmMgbWV0YWRhdGEobmFtZU9yUmVmLCBvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBcIm1ldGFkYXRhXCIsIHRydWUpKS5mb3IodGhpcy5tZXRhZGF0YSk7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgbmFtZXNwYWNlLCB2ZXJzaW9uIH0gPSB0aGlzLnJlc29sdmVSZWZlcmVuY2UobmFtZU9yUmVmLCBvcHRpb25zKTtcbiAgICAgICAgbG9nLnZlcmJvc2UoYEdldHRpbmcgbWV0YWRhdGEgZm9yIHNlY3JldCAke25hbWV9IGluIG5hbWVzcGFjZSAke25hbWVzcGFjZX1gKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3JldCA9IGF3YWl0IHRoaXMucmVhZFNlY3JldChuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgICAgICAgdGhpcy5hc3NlcnRWZXJzaW9uKHNlY3JldCwgdmVyc2lvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b01ldGFkYXRhKHNlY3JldCwgbmFtZXNwYWNlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIHJvdGF0ZShuYW1lT3JSZWYsIHZhbHVlLCBvcHRpb25zID0ge30sIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyBuYW1lLCBuYW1lc3BhY2UgfSA9IHRoaXMucmVzb2x2ZVJlZmVyZW5jZShuYW1lT3JSZWYsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZShuYW1lLCB2YWx1ZSwgeyB2ZXJzaW9uOiBvcHRpb25zLm5ld1ZlcnNpb24sIG5hbWVzcGFjZSB9LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYnVpbGRLdWJlQ29uZmlnKGNvbmZpZykge1xuICAgICAgICBjb25zdCBrdWJlQ29uZmlnID0gbmV3IEt1YmVDb25maWcoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChjb25maWcuc2VydmljZUFjY291bnQpIHtcbiAgICAgICAgICAgICAgICBrdWJlQ29uZmlnLmxvYWRGcm9tQ2x1c3RlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnLnNlcnZlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsdXN0ZXJOYW1lID0gXCJkZWNhZi1jbHVzdGVyXCI7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlck5hbWUgPSBcImRlY2FmLXVzZXJcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0TmFtZSA9IFwiZGVjYWYtY29udGV4dFwiO1xuICAgICAgICAgICAgICAgIGt1YmVDb25maWcubG9hZEZyb21PcHRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjbHVzdGVyTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXI6IGNvbmZpZy5zZXJ2ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FEYXRhOiBjb25maWcuY2FEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhRmlsZTogY29uZmlnLmNhRmlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwVExTVmVyaWZ5OiBjb25maWcuc2tpcFRMU1ZlcmlmeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHVzZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdXNlck5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IGNvbmZpZy50b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbkZpbGU6IGNvbmZpZy50b2tlbkZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydERhdGE6IGNvbmZpZy5jZXJ0RGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0RmlsZTogY29uZmlnLmNlcnRGaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleURhdGE6IGNvbmZpZy5rZXlEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUZpbGU6IGNvbmZpZy5rZXlGaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjb250ZXh0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyOiBjbHVzdGVyTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyOiB1c2VyTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IGNvbmZpZy5uYW1lc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29udGV4dDogY29udGV4dE5hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWcua3ViZWNvbmZpZykge1xuICAgICAgICAgICAgICAgIGt1YmVDb25maWcubG9hZEZyb21GaWxlKGNvbmZpZy5rdWJlY29uZmlnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGt1YmVDb25maWcubG9hZEZyb21EZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29uZmlnLmNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBrdWJlQ29uZmlnLnNldEN1cnJlbnRDb250ZXh0KGNvbmZpZy5jb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGt1YmVDb25maWc7XG4gICAgfVxuICAgIHJlc29sdmVOYW1lc3BhY2UoY29uZmlnLCBrdWJlQ29uZmlnKSB7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZSA9IGNvbmZpZy5uYW1lc3BhY2UgfHxcbiAgICAgICAgICAgIGt1YmVDb25maWcuZ2V0Q29udGV4dE9iamVjdChrdWJlQ29uZmlnLmdldEN1cnJlbnRDb250ZXh0KCkpPy5uYW1lc3BhY2UgfHxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiO1xuICAgICAgICBhc3NlcnRLdWJlcm5ldGVzTmFtZXNwYWNlKG5hbWVzcGFjZSk7XG4gICAgICAgIHJldHVybiBuYW1lc3BhY2U7XG4gICAgfVxuICAgIHJlc29sdmVOYW1lc3BhY2VPcHRpb24obmFtZXNwYWNlKSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gbmFtZXNwYWNlIHx8IHRoaXMuY29uZmlnLm5hbWVzcGFjZSB8fCBcImRlZmF1bHRcIjtcbiAgICAgICAgYXNzZXJ0S3ViZXJuZXRlc05hbWVzcGFjZShyZXNvbHZlZCk7XG4gICAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICB9XG4gICAgcmVzb2x2ZVJlZmVyZW5jZShuYW1lT3JSZWYsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHR5cGVvZiBuYW1lT3JSZWYgPT09IFwic3RyaW5nXCIgPyBuYW1lT3JSZWYgOiBuYW1lT3JSZWYubmFtZTtcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlID0gb3B0aW9ucy5uYW1lc3BhY2UgfHxcbiAgICAgICAgICAgICh0eXBlb2YgbmFtZU9yUmVmID09PSBcInN0cmluZ1wiID8gdW5kZWZpbmVkIDogbmFtZU9yUmVmLm5hbWVzcGFjZSkgfHxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLm5hbWVzcGFjZSB8fFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI7XG4gICAgICAgIGFzc2VydEt1YmVybmV0ZXNOYW1lc3BhY2UobmFtZXNwYWNlKTtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IG9wdGlvbnMudmVyc2lvbiB8fFxuICAgICAgICAgICAgKHR5cGVvZiBuYW1lT3JSZWYgPT09IFwic3RyaW5nXCIgPyB1bmRlZmluZWQgOiBuYW1lT3JSZWYudmVyc2lvbik7XG4gICAgICAgIHJldHVybiB7IG5hbWU6IHRoaXMubm9ybWFsaXplTmFtZShuYW1lKSwgbmFtZXNwYWNlLCB2ZXJzaW9uIH07XG4gICAgfVxuICAgIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsaWRhdGVTZWNyZXROYW1lKG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZVNlY3JldE5hbWUobmFtZSk7XG4gICAgICAgIGFzc2VydEt1YmVybmV0ZXNOYW1lKG5vcm1hbGl6ZWROYW1lKTtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWROYW1lO1xuICAgIH1cbiAgICBidWlsZFNlY3JldChuYW1lLCBuYW1lc3BhY2UsIHNlcmlhbGl6ZWQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgYW5ub3RhdGlvbnMgPSB7XG4gICAgICAgICAgICBbRU5DT0RJTkdfQU5OT1RBVElPTl06IHNlcmlhbGl6ZWQuZW5jb2RpbmcsXG4gICAgICAgICAgICBbVVBEQVRFRF9BVF9BTk5PVEFUSU9OXTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgICBpZiAob3B0aW9ucy5jb250ZW50VHlwZSkge1xuICAgICAgICAgICAgYW5ub3RhdGlvbnNbQ09OVEVOVF9UWVBFX0FOTk9UQVRJT05dID0gb3B0aW9ucy5jb250ZW50VHlwZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy50YWdzKSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uc1tUQUdTX0FOTk9UQVRJT05dID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy50YWdzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uc1tWRVJTSU9OX0FOTk9UQVRJT05dID0gb3B0aW9ucy52ZXJzaW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnRlbmFudElkKSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uc1tURU5BTlRfQU5OT1RBVElPTl0gPSBvcHRpb25zLnRlbmFudElkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLm9yZ1VuaXRJZCkge1xuICAgICAgICAgICAgYW5ub3RhdGlvbnNbT1JHX1VOSVRfQU5OT1RBVElPTl0gPSBvcHRpb25zLm9yZ1VuaXRJZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5vd25lclByaW5jaXBhbElkKSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uc1tPV05FUl9BTk5PVEFUSU9OXSA9IG9wdGlvbnMub3duZXJQcmluY2lwYWxJZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXBpVmVyc2lvbjogXCJ2MVwiLFxuICAgICAgICAgICAga2luZDogXCJTZWNyZXRcIixcbiAgICAgICAgICAgIHR5cGU6IFwiT3BhcXVlXCIsXG4gICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgICAgICAgICAgIGxhYmVsczoge1xuICAgICAgICAgICAgICAgICAgICBbTUFOQUdFRF9MQUJFTF06IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbnMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RyaW5nRGF0YToge1xuICAgICAgICAgICAgICAgIFtQQVlMT0FEX0RBVEFfS0VZXTogSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZCksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyByZWFkU2VjcmV0KG5hbWUsIG5hbWVzcGFjZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2xpZW50LnJlYWROYW1lc3BhY2VkU2VjcmV0KHsgbmFtZSwgbmFtZXNwYWNlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3NlcnRWZXJzaW9uKHNlY3JldCwgdmVyc2lvbikge1xuICAgICAgICBpZiAoIXZlcnNpb24pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHN0b3JlZCA9IHNlY3JldC5tZXRhZGF0YT8uYW5ub3RhdGlvbnM/LltWRVJTSU9OX0FOTk9UQVRJT05dO1xuICAgICAgICBpZiAoc3RvcmVkICE9PSB2ZXJzaW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihgU2VjcmV0IFwiJHtzZWNyZXQubWV0YWRhdGE/Lm5hbWV9XCIgdmVyc2lvbiBcIiR7dmVyc2lvbn1cIiBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b01ldGFkYXRhKHNlY3JldCwgbmFtZXNwYWNlKSB7XG4gICAgICAgIGNvbnN0IGFubm90YXRpb25zID0gc2VjcmV0Lm1ldGFkYXRhPy5hbm5vdGF0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgdXBkYXRlZEF0ID0gYW5ub3RhdGlvbnNbVVBEQVRFRF9BVF9BTk5PVEFUSU9OXTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHNlY3JldC5tZXRhZGF0YT8ubmFtZSB8fCBcIlwiO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvdmlkZXI6IHRoaXMucHJvdmlkZXIsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmVyc2lvbjogYW5ub3RhdGlvbnNbVkVSU0lPTl9BTk5PVEFUSU9OXSxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogdG9EYXRlKHNlY3JldC5tZXRhZGF0YT8uY3JlYXRpb25UaW1lc3RhbXApLFxuICAgICAgICAgICAgdXBkYXRlZEF0OiB1cGRhdGVkQXRcbiAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKHVwZGF0ZWRBdClcbiAgICAgICAgICAgICAgICA6IHRvRGF0ZShzZWNyZXQubWV0YWRhdGE/LmNyZWF0aW9uVGltZXN0YW1wKSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBjb250ZW50VHlwZTogYW5ub3RhdGlvbnNbQ09OVEVOVF9UWVBFX0FOTk9UQVRJT05dLFxuICAgICAgICAgICAgdGFnczogcGFyc2VUYWdzKGFubm90YXRpb25zW1RBR1NfQU5OT1RBVElPTl0pLFxuICAgICAgICAgICAgZXh0ZXJuYWxJZDogc2VjcmV0Lm1ldGFkYXRhPy51aWQsXG4gICAgICAgICAgICB1cmk6IGBrdWJlcm5ldGVzOi8vJHtuYW1lc3BhY2V9LyR7bmFtZX1gLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0dXNPZihlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBcGlFeGNlcHRpb24pXG4gICAgICAgICAgICByZXR1cm4gZXJyb3IuY29kZTtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gZXJyb3I7XG4gICAgICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlPy5jb2RlID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS5jb2RlO1xuICAgICAgICBpZiAodHlwZW9mIGNhbmRpZGF0ZT8uc3RhdHVzQ29kZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS5zdGF0dXNDb2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIG1lc3NhZ2VPZihlcnJvcikge1xuICAgICAgICBjb25zdCBlcnIgPSBlcnJvcjtcbiAgICAgICAgcmV0dXJuIGVycj8uYm9keT8ubWVzc2FnZSB8fCBlcnI/LmJvZHk/LnJlYXNvbiB8fCBlcnI/Lm1lc3NhZ2UgfHwgZXJyPy5uYW1lIHx8IFwiVW5rbm93biBlcnJvclwiO1xuICAgIH1cbiAgICBwYXJzZUVycm9yKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEJhc2VFcnJvcilcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5zdGF0dXNPZihlcnJvcik7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VPZihlcnJvcik7XG4gICAgICAgIGNvbnN0IGxvd2VyTWVzc2FnZSA9IG1lc3NhZ2UudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0IHx8XG4gICAgICAgICAgICBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCJub3QgZm91bmRcIikgfHxcbiAgICAgICAgICAgIGxvd2VyTWVzc2FnZS5pbmNsdWRlcyhcIjQwNFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb3RGb3VuZEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQwOSB8fFxuICAgICAgICAgICAgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwiYWxyZWFkeSBleGlzdHNcIikgfHxcbiAgICAgICAgICAgIGxvd2VyTWVzc2FnZS5pbmNsdWRlcyhcImNvbmZsaWN0XCIpIHx8XG4gICAgICAgICAgICBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCI0MDlcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29uZmxpY3RFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzID09PSA0MDEgfHwgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwidW5hdXRob3JpemVkXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEF1dGhvcml6YXRpb25FcnJvcihgQXV0aGVudGljYXRpb24gZmFpbGVkOiAke21lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDAzIHx8IGxvd2VyTWVzc2FnZS5pbmNsdWRlcyhcImZvcmJpZGRlblwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRob3JpemF0aW9uRXJyb3IoYFBlcm1pc3Npb24gZGVuaWVkOiAke21lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDAwIHx8XG4gICAgICAgICAgICBzdGF0dXMgPT09IDQyMiB8fFxuICAgICAgICAgICAgbG93ZXJNZXNzYWdlLmluY2x1ZGVzKFwiYmFkIHJlcXVlc3RcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQmFkUmVxdWVzdEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQyOSB8fCBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCJyYXRlIGxpbWl0XCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNlY3JldEVycm9yKFwiU0VDUkVUX1BST1ZJREVSX1JBVEVfTElNSVRFRFwiLCBgUmF0ZSBsaW1pdGVkOiAke21lc3NhZ2V9YCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgKHN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHN0YXR1cyA+PSA1MDApIHx8XG4gICAgICAgICAgICBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCJjb25uZWN0aW9uXCIpIHx8XG4gICAgICAgICAgICBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCJ0aW1lb3V0XCIpIHx8XG4gICAgICAgICAgICBsb3dlck1lc3NhZ2UuaW5jbHVkZXMoXCJ1bmF2YWlsYWJsZVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZWNyZXRFcnJvcihcIlNFQ1JFVF9QUk9WSURFUl9VTkFWQUlMQUJMRVwiLCBgUHJvdmlkZXIgdW5hdmFpbGFibGU6ICR7bWVzc2FnZX1gLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcm5hbEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVMzVmlaWEp1WlhSbGMxTmxZM0psZEZObGNuWnBZMlV1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk4dUxpOHVMaTl6Y21NdmMyVmpjbVYwY3k5cmRXSmxjbTVsZEdWekwwdDFZbVZ5Ym1WMFpYTlRaV055WlhSVFpYSjJhV05sTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJMRTlCUVU4c1JVRkRUQ3haUVVGWkxFVkJRMW9zVTBGQlV5eEZRVU5VTEZWQlFWVXNSMEZGV0N4TlFVRk5MSGxDUVVGNVFpeERRVUZETzBGQlEycERMRTlCUVU4c1JVRkJSU3hyUWtGQmEwSXNSVUZCTWtJc1RVRkJUU3huUWtGQlowSXNRMEZCUXp0QlFVTTNSU3hQUVVGUExFVkJRMHdzZDBKQlFYZENMRVZCUTNoQ0xGZEJRVmNzUjBGTldpd3lRa0ZCTWtJN1FVRlZOVUlzVDBGQlR5eEZRVUZGTEd0Q1FVRnJRaXhGUVVGRkxHMUNRVUZ0UWl4RlFVRkZMREpDUVVFeVFqdEJRVU0zUlN4UFFVRlBMRVZCUTB3c2MwSkJRWE5DTEVWQlEzUkNMSGRDUVVGM1FpeEhRVVY2UWl3eVFrRkJNa0k3UVVGRk5VSXNUMEZCVHl4RlFVRkZMREpDUVVFeVFpeEZRVUZGTEhsRFFVRnpRenRCUVVNMVJTeFBRVUZQTEVWQlFVVXNWVUZCVlN4RlFVRkZMRk5CUVZNc1JVRkJSU3d5UTBGQmMwTTdRVUZEZEVVc1QwRkJUeXhGUVVOTUxHVkJRV1VzUlVGRFppeFRRVUZUTEVWQlExUXNZVUZCWVN4RlFVTmlMR0ZCUVdFc1JVRkRZaXhoUVVGaExFZEJRMlFzVFVGQlRTeDVRa0ZCZVVJc1EwRkJRenRCUVVWcVF5eE5RVUZOTEdkQ1FVRm5RaXhIUVVGSExGTkJRVk1zUTBGQlF6dEJRVU51UXl4TlFVRk5MR0ZCUVdFc1IwRkJSeXh4UWtGQmNVSXNRMEZCUXp0QlFVTTFReXhOUVVGTkxHbENRVUZwUWl4SFFVRkhMR05CUVdNc1EwRkJRenRCUVVONlF5eE5RVUZOTEcxQ1FVRnRRaXhIUVVGSExFZEJRVWNzYVVKQlFXbENMRlZCUVZVc1EwRkJRenRCUVVNelJDeE5RVUZOTEhWQ1FVRjFRaXhIUVVGSExFZEJRVWNzYVVKQlFXbENMR05CUVdNc1EwRkJRenRCUVVOdVJTeE5RVUZOTEdWQlFXVXNSMEZCUnl4SFFVRkhMR2xDUVVGcFFpeE5RVUZOTEVOQlFVTTdRVUZEYmtRc1RVRkJUU3hyUWtGQmEwSXNSMEZCUnl4SFFVRkhMR2xDUVVGcFFpeFRRVUZUTEVOQlFVTTdRVUZEZWtRc1RVRkJUU3h4UWtGQmNVSXNSMEZCUnl4SFFVRkhMR2xDUVVGcFFpeFpRVUZaTEVOQlFVTTdRVUZETDBRc1RVRkJUU3hwUWtGQmFVSXNSMEZCUnl4SFFVRkhMR2xDUVVGcFFpeFhRVUZYTEVOQlFVTTdRVUZETVVRc1RVRkJUU3h0UWtGQmJVSXNSMEZCUnl4SFFVRkhMR2xDUVVGcFFpeGhRVUZoTEVOQlFVTTdRVUZET1VRc1RVRkJUU3huUWtGQlowSXNSMEZCUnl4SFFVRkhMR2xDUVVGcFFpeHZRa0ZCYjBJc1EwRkJRenRCUVVWc1JTeE5RVUZOTEhGQ1FVRnhRaXhIUVVONlFpeHJRMEZCYTBNc1EwRkJRenRCUVVOeVF5eE5RVUZOTEdsQ1FVRnBRaXhIUVVGSExHbERRVUZwUXl4RFFVRkRPMEZCUlRWRUxGTkJRVk1zYjBKQlFXOUNMRU5CUVVNc1NVRkJXVHRKUVVONFF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zY1VKQlFYRkNMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTTdVVUZETTBRc1RVRkJUU3hKUVVGSkxGZEJRVmNzUTBGRGJrSXNjVUpCUVhGQ0xFVkJRM0pDTEc5RFFVRnZReXhKUVVGSkxHbEdRVUZwUml4RFFVTXhTQ3hEUVVGRE8wbEJRMG9zUTBGQlF6dEJRVU5JTEVOQlFVTTdRVUZGUkN4VFFVRlRMSGxDUVVGNVFpeERRVUZETEZOQlFXbENPMGxCUTJ4RUxFbEJRVWtzVTBGQlV5eERRVUZETEUxQlFVMHNSMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFVkJRVVVzUTBGQlF6dFJRVU5vUlN4TlFVRk5MRWxCUVVrc1YwRkJWeXhEUVVOdVFpeHhRa0ZCY1VJc1JVRkRja0lzYTBOQlFXdERMRk5CUVZNc2EwUkJRV3RFTEVOQlF6bEdMRU5CUVVNN1NVRkRTaXhEUVVGRE8wRkJRMGdzUTBGQlF6dEJRVVZFTEZOQlFWTXNUVUZCVFN4RFFVRkRMRXRCUVdkRE8wbEJRemxETEVsQlFVa3NRMEZCUXl4TFFVRkxPMUZCUVVVc1QwRkJUeXhUUVVGVExFTkJRVU03U1VGRE4wSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1MwRkJTeXhaUVVGWkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0SlFVTTNSQ3hQUVVGUExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRE8wRkJRM3BFTEVOQlFVTTdRVUZGUkN4VFFVRlRMRk5CUVZNc1EwRkJReXhIUVVGMVFqdEpRVU40UXl4SlFVRkpMRU5CUVVNc1IwRkJSenRSUVVGRkxFOUJRVThzVTBGQlV5eERRVUZETzBsQlF6TkNMRWxCUVVrc1EwRkJRenRSUVVOSUxFMUJRVTBzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGREwwSXNUMEZCVHl4TlFVRk5MRWxCUVVrc1QwRkJUeXhOUVVGTkxFdEJRVXNzVVVGQlVUdFpRVU42UXl4RFFVRkRMRU5CUVVVc1RVRkJhVU03V1VGRGNFTXNRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJRenRKUVVOb1FpeERRVUZETzBsQlFVTXNUVUZCVFN4RFFVRkRPMUZCUTFBc1QwRkJUeXhUUVVGVExFTkJRVU03U1VGRGJrSXNRMEZCUXp0QlFVTklMRU5CUVVNN1FVRkZSRHM3T3pzN096czdPenM3TzBkQldVYzdRVUZEU0N4TlFVRk5MRTlCUVU4c2RVSkJRWGRDTEZOQlFWRXNkMEpCUnpWRE8wbEJTRVE3TzFGQlNWY3NZVUZCVVN4SFFVRnRRaXhaUVVGWkxFTkJRVU03U1VGbmFVSnVSQ3hEUVVGRE8wbEJPV2hDVnl4eFFrRkJjVUk3VVVGSE4wSXNUVUZCVFN4SFFVRkhMRWRCUVVjc01rSkJRVEpDTEVOQlFVTXNUMEZCVHl4RFFVRkRMRlZCUVZVc1EwRkJRenRSUVVNelJDeE5RVUZOTEZOQlFWTXNSMEZCUnl4VFFVRlRMRU5CUVVNc1IwRkJSeXhGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETzFGQlF6VkRMRTFCUVUwc1ZVRkJWU3hIUVVGSExGTkJRVk1zUTBGQlF5eEhRVUZITEVWQlFVVXNWVUZCVlN4RFFVRkRMRU5CUVVNN1VVRkRPVU1zVFVGQlRTeFBRVUZQTEVkQlFVY3NVMEZCVXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dFJRVU40UXl4TlFVRk5MRTFCUVUwc1IwRkJSeXhUUVVGVExFTkJRVU1zUjBGQlJ5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUTNSRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWxCUVVrc1EwRkJReXhQUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTzFsQlFVVXNUMEZCVHl4VFFVRlRMRU5CUVVNN1VVRkRka1VzVDBGQlR6dFpRVU5NTEZGQlFWRXNSVUZCUlN4WlFVRlpPMWxCUTNSQ0xGTkJRVk03V1VGRFZDeFZRVUZWTzFsQlExWXNUMEZCVHp0WlFVTlFMRTFCUVUwN1dVRkRUaXhMUVVGTExFVkJRVVVzVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNN1dVRkRNMElzVTBGQlV5eEZRVUZGTEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1UwRkJVeXhEUVVGRE8xbEJRMjVETEUxQlFVMHNSVUZCUlN4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF6dFpRVU0zUWl4TlFVRk5MRVZCUVVVc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTTdXVUZETjBJc1VVRkJVU3hGUVVGRkxGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRkRPMWxCUTJwRExFOUJRVThzUlVGQlJTeFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJRenRaUVVNdlFpeFJRVUZSTEVWQlFVVXNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhSUVVGUkxFTkJRVU03V1VGRGFrTXNUMEZCVHl4RlFVRkZMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETzFsQlF5OUNMR0ZCUVdFc1JVRkJSU3hWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEdGQlFXRXNRMEZCUXp0WlFVTTFReXhqUVVGakxFVkJRVVVzVlVGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4alFVRmpMRU5CUVVNN1UwRkRMME1zUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGUkN4TFFVRkxMRU5CUVVNc1ZVRkJWU3hEUVVOa0xFZEJRVWNzU1VGQk5rSTdVVUZGYUVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUlVGQlJTeFpRVUZaTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJReTlFTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUTJoQ0xFTkJRVU03VVVGRFJpeE5RVUZOTEUxQlFVMHNSMEZEVml4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVOQlFXZERMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRGFrVXNUVUZCVFN4VlFVRlZMRWRCUVVjc1NVRkJTU3hEUVVGRExHVkJRV1VzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTm9SQ3hOUVVGTkxGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeEZRVUZGTEZWQlFWVXNRMEZCUXl4RFFVRkRPMUZCUXpWRUxFMUJRVTBzVVVGQlVTeEhRVUZyUXl4RlFVRkZMRWRCUVVjc1RVRkJUU3hGUVVGRkxGTkJRVk1zUlVGQlJTeERRVUZETzFGQlEzcEZMRTFCUVUwc1RVRkJUU3hIUVVGSExGVkJRVlVzUTBGQlF5eGhRVUZoTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN1VVRkRia1FzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4UlFVRlJMRU5CUVVNN1VVRkRlRUlzU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4TlFVRk5MRU5CUVVNN1VVRkRkRUlzUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZEVkN4M1JFRkJkMFFzVTBGQlV5eEhRVUZITEVOQlEzSkZMRU5CUVVNN1VVRkRSaXhQUVVGUExFVkJRVVVzVFVGQlRTeEZRVUZGTEZGQlFWRXNSVUZCUlN4TlFVRk5MRVZCUVVVc1EwRkJRenRKUVVOMFF5eERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkRWQ3hKUVVGblFpeEZRVU5vUWl4TFFVRlJMRVZCUTFJc1ZVRkJPRUlzUlVGQlJTeEZRVU5vUXl4SFFVRkhMRWxCUVRaQ08xRkJSV2hETEUxQlFVMHNSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRVZCUVVVc1QwRkJUeXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU42UlN4TlFVRk5MR05CUVdNc1IwRkJSeXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUTJoRUxFMUJRVTBzVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4elFrRkJjMElzUTBGQlF5eFBRVUZQTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN1VVRkRha1VzUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4clFrRkJhMElzWTBGQll5eHBRa0ZCYVVJc1UwRkJVeXhGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVVV4UlN4TlFVRk5MRlZCUVZVc1IwRkJSeXh6UWtGQmMwSXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVOcVJDeE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExHTkJRV01zUlVGQlJTeFRRVUZUTEVWQlFVVXNWVUZCVlN4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJSVGxGTEVsQlFVa3NRMEZCUXp0WlFVTklMRTFCUVUwc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhGUVVGRkxGTkJRVk1zUlVGQlJTeEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTJoRkxFTkJRVU03VVVGQlF5eFBRVUZQTEV0QlFVc3NSVUZCUlN4RFFVRkRPMWxCUTJZc1NVRkJTU3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRE8yZENRVU5xUXl4SlFVRkpMRU5CUVVNN2IwSkJRMGdzVFVGQlRTeFJRVUZSTEVkQlFVY3NUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHOUNRVUZ2UWl4RFFVRkRPM2RDUVVOMFJDeEpRVUZKTEVWQlFVVXNZMEZCWXp0M1FrRkRjRUlzVTBGQlV6dHhRa0ZEVml4RFFVRkRMRU5CUVVNN2IwSkJRMGdzU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUnp0M1FrRkRaQ3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNTVUZCU1N4RlFVRkZMRU5CUVVNN2QwSkJRM2hDTEdWQlFXVXNSVUZCUlN4UlFVRlJMRU5CUVVNc1VVRkJVU3hGUVVGRkxHVkJRV1U3Y1VKQlEzQkVMRU5CUVVNN2IwSkJRMFlzVFVGQlRTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMSFZDUVVGMVFpeERRVUZETzNkQ1FVTjRReXhKUVVGSkxFVkJRVVVzWTBGQll6dDNRa0ZEY0VJc1UwRkJVenQzUWtGRFZDeEpRVUZKTzNGQ1FVTk1MRU5CUVVNc1EwRkJRenRuUWtGRFRDeERRVUZETzJkQ1FVRkRMRTlCUVU4c1dVRkJXU3hGUVVGRkxFTkJRVU03YjBKQlEzUkNMRTFCUVUwc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0blFrRkRkRU1zUTBGQlF6dFpRVU5JTEVOQlFVTTdhVUpCUVUwc1EwRkJRenRuUWtGRFRpeE5RVUZOTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03V1VGREwwSXNRMEZCUXp0UlFVTklMRU5CUVVNN1VVRkZSQ3hQUVVGUE8xbEJRMHdzVVVGQlVTeEZRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJPMWxCUTNaQ0xFbEJRVWtzUlVGQlJTeGpRVUZqTzFsQlEzQkNMRk5CUVZNN1dVRkRWQ3hQUVVGUExFVkJRVVVzVDBGQlR5eERRVUZETEU5QlFVODdXVUZEZUVJc1IwRkJSeXhGUVVGRkxHZENRVUZuUWl4VFFVRlRMRWxCUVVrc1kwRkJZeXhGUVVGRk8xTkJRMjVFTEVOQlFVTTdTVUZEU2l4RFFVRkRPMGxCUlVRc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGRFdpeFRRVUYxUXl4RlFVTjJReXhWUVVGcFF5eEZRVUZGTEVWQlEyNURMRWRCUVVjc1NVRkJOa0k3VVVGRmFFTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1JVRkJSU3hWUVVGVkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUXpkRUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlEyUXNRMEZCUXp0UlFVTkdMRTFCUVUwc1JVRkJSU3hKUVVGSkxFVkJRVVVzVTBGQlV5eEZRVUZGTEU5QlFVOHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZEZUVRc1UwRkJVeXhGUVVOVUxFOUJRVThzUTBGRFVpeERRVUZETzFGQlEwWXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXh4UWtGQmNVSXNTVUZCU1N4dFFrRkJiVUlzVTBGQlV5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVVnlSU3hOUVVGTkxFMUJRVTBzUjBGQlJ5eE5RVUZOTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1NVRkJTU3hGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETzFGQlEzUkVMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQlRTeEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUlhCRExFMUJRVTBzUjBGQlJ5eEhRVUZITEUxQlFVMHNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRPMUZCUXpWRExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0WlFVTlVMRTFCUVUwc1NVRkJTU3hoUVVGaExFTkJRM0pDTERoQ1FVRTRRaXhKUVVGSkxHMUNRVUZ0UWl4VFFVRlRMRWRCUVVjc1EwRkRiRVVzUTBGQlF6dFJRVU5LTEVOQlFVTTdVVUZGUkN4SlFVRkpMRTlCUVdkRExFTkJRVU03VVVGRGNrTXNTVUZCU1N4RFFVRkRPMWxCUTBnc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlEyeENMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEZGQlFWRXNRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGRGFrSXNRMEZCUXp0UlFVTXZRaXhEUVVGRE8xRkJRVU1zVDBGQlR5eExRVUZMTEVWQlFVVXNRMEZCUXp0WlFVTm1MRTFCUVUwc1NVRkJTU3hYUVVGWExFTkJRMjVDTEN0Q1FVRXJRaXhGUVVNdlFpeDFRMEZCZFVNc1NVRkJTU3hOUVVGUExFdEJRV1VzUTBGQlF5eFBRVUZQTEVWQlFVVXNSVUZETTBVc1MwRkJZeXhEUVVObUxFTkJRVU03VVVGRFNpeERRVUZETzFGQlJVUXNUMEZCVHl4M1FrRkJkMElzUTBGQlF5eFBRVUZQTEVOQlFVMHNRMEZCUXp0SlFVTm9SQ3hEUVVGRE8wbEJSVVFzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZEVml4VFFVRjFReXhGUVVOMlF5eFZRVUVyUWl4RlFVRkZMRVZCUTJwRExFZEJRVWNzU1VGQk5rSTdVVUZGYUVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUlVGQlJTeFJRVUZSTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUXpORkxFMUJRVTBzUlVGQlJTeEpRVUZKTEVWQlFVVXNVMEZCVXl4RlFVRkZMRTlCUVU4c1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkRlRVFzVTBGQlV5eEZRVU5VTEU5QlFVOHNRMEZEVWl4RFFVRkRPMUZCUTBZc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eHRRa0ZCYlVJc1NVRkJTU3h0UWtGQmJVSXNVMEZCVXl4RlFVRkZMRU5CUVVNc1EwRkJRenRSUVVWdVJTeEpRVUZKTEU5QlFVOHNSVUZCUlN4RFFVRkRPMWxCUTFvc1RVRkJUU3hOUVVGTkxFZEJRVWNzVFVGQlRTeEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWxCUVVrc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF6dFpRVU4wUkN4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExFMUJRVTBzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTjBReXhEUVVGRE8xRkJSVVFzU1VGQlNTeERRVUZETzFsQlEwZ3NUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExITkNRVUZ6UWl4RFFVRkRMRVZCUVVVc1NVRkJTU3hGUVVGRkxGTkJRVk1zUlVGQlJTeERRVUZETEVOQlFVTTdVVUZEYUVVc1EwRkJRenRSUVVGRExFOUJRVThzUzBGQlN5eEZRVUZGTEVOQlFVTTdXVUZEWml4TlFVRk5MRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZETDBJc1EwRkJRenRKUVVOSUxFTkJRVU03U1VGRlJDeExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVTldMRk5CUVhWRExFVkJRM1pETEZWQlFTdENMRVZCUVVVc1JVRkRha01zUjBGQlJ5eEpRVUUyUWp0UlFVVm9ReXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeEZRVUZGTEZGQlFWRXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRNMFVzVFVGQlRTeEZRVUZGTEVsQlFVa3NSVUZCUlN4VFFVRlRMRVZCUVVVc1QwRkJUeXhGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVONFJDeFRRVUZUTEVWQlExUXNUMEZCVHl4RFFVTlNMRU5CUVVNN1VVRkRSaXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEhOQ1FVRnpRaXhKUVVGSkxIZENRVUYzUWl4VFFVRlRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJSVE5GTEVsQlFVa3NRMEZCUXp0WlFVTklMRTFCUVUwc1RVRkJUU3hIUVVGSExFMUJRVTBzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU03V1VGRGRFUXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhOUVVGTkxFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTTdXVUZEY0VNc1QwRkJUeXhKUVVGSkxFTkJRVU03VVVGRFpDeERRVUZETzFGQlFVTXNUMEZCVHl4TFFVRkxMRVZCUVVVc1EwRkJRenRaUVVObUxFbEJRVWtzUzBGQlN5eFpRVUZaTEdGQlFXRTdaMEpCUVVVc1QwRkJUeXhMUVVGTExFTkJRVU03V1VGRGFrUXNUVUZCVFN4TFFVRkxMRU5CUVVNN1VVRkRaQ3hEUVVGRE8wbEJRMGdzUTBGQlF6dEpRVVZFTEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUTFJc1ZVRkJPRUlzUlVGQlJTeEZRVU5vUXl4SFFVRkhMRWxCUVRaQ08xRkJSV2hETEUxQlFVMHNSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRVZCUVVVc1RVRkJUU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU4yUlN4TlFVRk5MRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1QwRkJUeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzFGQlEycEZMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zWjBOQlFXZERMRk5CUVZNc1JVRkJSU3hEUVVGRExFTkJRVU03VVVGRmVrUXNUVUZCVFN4TlFVRk5MRWRCUVhGQ0xFVkJRVVVzUTBGQlF6dFJRVU53UXl4SlFVRkpMR0ZCUVdsRExFTkJRVU03VVVGRmRFTXNTVUZCU1N4RFFVRkRPMWxCUTBnc1IwRkJSeXhEUVVGRE8yZENRVU5HTEUxQlFVMHNVVUZCVVN4SFFVRkhMRTFCUVUwc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eHZRa0ZCYjBJc1EwRkJRenR2UWtGRGRFUXNVMEZCVXp0dlFrRkRWQ3hoUVVGaExFVkJRVVVzUjBGQlJ5eGhRVUZoTEU5QlFVODdiMEpCUTNSRExFdEJRVXNzUlVGQlJTeEhRVUZITzI5Q1FVTldMRk5CUVZNc1JVRkJSU3hoUVVGaE8ybENRVU42UWl4RFFVRkRMRU5CUVVNN1owSkJSVWdzUzBGQlN5eE5RVUZOTEUxQlFVMHNTVUZCU1N4UlFVRlJMRU5CUVVNc1MwRkJTeXhKUVVGSkxFVkJRVVVzUlVGQlJTeERRVUZETzI5Q1FVTXhReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1RVRkJUU3hGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTJ4RUxFTkJRVU03WjBKQlJVUXNZVUZCWVN4SFFVRkhMRkZCUVZFc1EwRkJReXhSUVVGUkxFVkJRVVVzVTBGQlV5eERRVUZETzFsQlF5OURMRU5CUVVNc1VVRkJVU3hoUVVGaExFVkJRVVU3VVVGRE1VSXNRMEZCUXp0UlFVRkRMRTlCUVU4c1MwRkJTeXhGUVVGRkxFTkJRVU03V1VGRFppeE5RVUZOTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGREwwSXNRMEZCUXp0UlFVVkVMRTFCUVUwc1VVRkJVU3hIUVVGSExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1JVRkJSVHRaUVVOMFF5eEpRVUZKTEU5QlFVOHNRMEZCUXl4UFFVRlBMRXRCUVVzc1MwRkJTenRuUWtGQlJTeFBRVUZQTEV0QlFVc3NRMEZCUXp0WlFVTTFReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVazdaMEpCUVVVc1QwRkJUeXhKUVVGSkxFTkJRVU03V1VGREwwSXNUMEZCVHl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUTNaRExFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNTMEZCU3l4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhMUVVGTExFTkJRemRETEVOQlFVTTdVVUZEU2l4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVWSUxFMUJRVTBzVFVGQlRTeEhRVUZITEU5QlFVOHNRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRMjVETEUxQlFVMHNSMEZCUnl4SFFVTlFMRTlCUVU4c1QwRkJUeXhEUVVGRExFdEJRVXNzUzBGQlN5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNN1VVRkRla1VzVDBGQlR5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU55UXl4RFFVRkRPMGxCUlVRc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGRFdpeFRRVUYxUXl4RlFVTjJReXhWUVVGcFF5eEZRVUZGTEVWQlEyNURMRWRCUVVjc1NVRkJOa0k3VVVGRmFFTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1JVRkJSU3hWUVVGVkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUXpkRUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlEyUXNRMEZCUXp0UlFVTkdMRTFCUVUwc1JVRkJSU3hKUVVGSkxFVkJRVVVzVTBGQlV5eEZRVUZGTEU5QlFVOHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZEZUVRc1UwRkJVeXhGUVVOVUxFOUJRVThzUTBGRFVpeERRVUZETzFGQlEwWXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXdyUWtGQkswSXNTVUZCU1N4cFFrRkJhVUlzVTBGQlV5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVVTNSU3hKUVVGSkxFTkJRVU03V1VGRFNDeE5RVUZOTEUxQlFVMHNSMEZCUnl4TlFVRk5MRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkRPMWxCUTNSRUxFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8xbEJRM0JETEU5QlFVOHNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFVkJRVVVzVTBGQlV5eERRVUZETEVOQlFVTTdVVUZETlVNc1EwRkJRenRSUVVGRExFOUJRVThzUzBGQlN5eEZRVUZGTEVOQlFVTTdXVUZEWml4SlFVRkpMRXRCUVVzc1dVRkJXU3hoUVVGaE8yZENRVUZGTEU5QlFVOHNVMEZCVXl4RFFVRkRPMWxCUTNKRUxFMUJRVTBzUzBGQlN5eERRVUZETzFGQlEyUXNRMEZCUXp0SlFVTklMRU5CUVVNN1NVRkZSQ3hMUVVGTExFTkJRVU1zVFVGQlRTeERRVU5XTEZOQlFYVkRMRVZCUTNaRExFdEJRVkVzUlVGRFVpeFZRVUVyUWl4RlFVRkZMRVZCUTJwRExFZEJRVWNzU1VGQk5rSTdVVUZGYUVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlJTeFRRVUZUTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNVMEZCVXl4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRM1JGTEU5QlFVOHNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkRaaXhKUVVGSkxFVkJRMG9zUzBGQlN5eEZRVU5NTEVWQlFVVXNUMEZCVHl4RlFVRkZMRTlCUVU4c1EwRkJReXhWUVVGVkxFVkJRVVVzVTBGQlV5eEZRVUZGTEVWQlF6RkRMRWRCUVVjc1NVRkJTU3hEUVVOU0xFTkJRVU03U1VGRFNpeERRVUZETzBsQlJVOHNaVUZCWlN4RFFVRkRMRTFCUVhGRE8xRkJRek5FTEUxQlFVMHNWVUZCVlN4SFFVRkhMRWxCUVVrc1ZVRkJWU3hGUVVGRkxFTkJRVU03VVVGRGNFTXNTVUZCU1N4RFFVRkRPMWxCUTBnc1NVRkJTU3hOUVVGTkxFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdaMEpCUXpGQ0xGVkJRVlVzUTBGQlF5eGxRVUZsTEVWQlFVVXNRMEZCUXp0WlFVTXZRaXhEUVVGRE8ybENRVUZOTEVsQlFVa3NUVUZCVFN4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8yZENRVU42UWl4TlFVRk5MRmRCUVZjc1IwRkJSeXhsUVVGbExFTkJRVU03WjBKQlEzQkRMRTFCUVUwc1VVRkJVU3hIUVVGSExGbEJRVmtzUTBGQlF6dG5Ra0ZET1VJc1RVRkJUU3hYUVVGWExFZEJRVWNzWlVGQlpTeERRVUZETzJkQ1FVTndReXhWUVVGVkxFTkJRVU1zWlVGQlpTeERRVUZETzI5Q1FVTjZRaXhSUVVGUkxFVkJRVVU3ZDBKQlExSTdORUpCUTBVc1NVRkJTU3hGUVVGRkxGZEJRVmM3TkVKQlEycENMRTFCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVU1zVFVGQlRUczBRa0ZEY2tJc1RVRkJUU3hGUVVGRkxFMUJRVTBzUTBGQlF5eE5RVUZOT3pSQ1FVTnlRaXhOUVVGTkxFVkJRVVVzVFVGQlRTeERRVUZETEUxQlFVMDdORUpCUTNKQ0xHRkJRV0VzUlVGQlJTeE5RVUZOTEVOQlFVTXNZVUZCWVR0NVFrRkRjRU03Y1VKQlEwWTdiMEpCUTBRc1MwRkJTeXhGUVVGRk8zZENRVU5NT3pSQ1FVTkZMRWxCUVVrc1JVRkJSU3hSUVVGUk96UkNRVU5rTEV0QlFVc3NSVUZCUlN4TlFVRk5MRU5CUVVNc1MwRkJTenMwUWtGRGJrSXNVMEZCVXl4RlFVRkZMRTFCUVUwc1EwRkJReXhUUVVGVE96UkNRVU16UWl4UlFVRlJMRVZCUVVVc1RVRkJUU3hEUVVGRExGRkJRVkU3TkVKQlEzcENMRkZCUVZFc1JVRkJSU3hOUVVGTkxFTkJRVU1zVVVGQlVUczBRa0ZEZWtJc1QwRkJUeXhGUVVGRkxFMUJRVTBzUTBGQlF5eFBRVUZQT3pSQ1FVTjJRaXhQUVVGUExFVkJRVVVzVFVGQlRTeERRVUZETEU5QlFVODdlVUpCUTNoQ08zRkNRVU5HTzI5Q1FVTkVMRkZCUVZFc1JVRkJSVHQzUWtGRFVqczBRa0ZEUlN4SlFVRkpMRVZCUVVVc1YwRkJWenMwUWtGRGFrSXNUMEZCVHl4RlFVRkZMRmRCUVZjN05FSkJRM0JDTEVsQlFVa3NSVUZCUlN4UlFVRlJPelJDUVVOa0xGTkJRVk1zUlVGQlJTeE5RVUZOTEVOQlFVTXNVMEZCVXp0NVFrRkROVUk3Y1VKQlEwWTdiMEpCUTBRc1kwRkJZeXhGUVVGRkxGZEJRVmM3YVVKQlF6VkNMRU5CUVVNc1EwRkJRenRaUVVOTUxFTkJRVU03YVVKQlFVMHNTVUZCU1N4TlFVRk5MRU5CUVVNc1ZVRkJWU3hGUVVGRkxFTkJRVU03WjBKQlF6ZENMRlZCUVZVc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRPMWxCUXpkRExFTkJRVU03YVVKQlFVMHNRMEZCUXp0blFrRkRUaXhWUVVGVkxFTkJRVU1zWlVGQlpTeEZRVUZGTEVOQlFVTTdXVUZETDBJc1EwRkJRenRaUVVWRUxFbEJRVWtzVFVGQlRTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMmRDUVVOdVFpeFZRVUZWTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMWxCUXk5RExFTkJRVU03VVVGRFNDeERRVUZETzFGQlFVTXNUMEZCVHl4TFFVRkxMRVZCUVVVc1EwRkJRenRaUVVObUxFMUJRVTBzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVNdlFpeERRVUZETzFGQlEwUXNUMEZCVHl4VlFVRlZMRU5CUVVNN1NVRkRjRUlzUTBGQlF6dEpRVVZQTEdkQ1FVRm5RaXhEUVVOMFFpeE5RVUZ4UXl4RlFVTnlReXhWUVVGelFqdFJRVVYwUWl4TlFVRk5MRk5CUVZNc1IwRkRZaXhOUVVGTkxFTkJRVU1zVTBGQlV6dFpRVU5vUWl4VlFVRlZMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNWVUZCVlN4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTEVOQlFVTXNSVUZCUlN4VFFVRlRPMWxCUTNSRkxGTkJRVk1zUTBGQlF6dFJRVU5hTEhsQ1FVRjVRaXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzFGQlEzSkRMRTlCUVU4c1UwRkJVeXhEUVVGRE8wbEJRMjVDTEVOQlFVTTdTVUZGVHl4elFrRkJjMElzUTBGQlF5eFRRVUZyUWp0UlFVTXZReXhOUVVGTkxGRkJRVkVzUjBGQlJ5eFRRVUZUTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFbEJRVWtzVTBGQlV5eERRVUZETzFGQlEycEZMSGxDUVVGNVFpeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMUZCUTNCRExFOUJRVThzVVVGQlVTeERRVUZETzBsQlEyeENMRU5CUVVNN1NVRkZUeXhuUWtGQlowSXNRMEZEZEVJc1UwRkJkVU1zUlVGRGRrTXNUMEZIUXp0UlFVVkVMRTFCUVUwc1NVRkJTU3hIUVVOU0xFOUJRVThzVTBGQlV5eExRVUZMTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRPMUZCUXpkRUxFMUJRVTBzVTBGQlV5eEhRVU5pTEU5QlFVOHNRMEZCUXl4VFFVRlRPMWxCUTJwQ0xFTkJRVU1zVDBGQlR5eFRRVUZUTEV0QlFVc3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4VFFVRlRMRU5CUVVNN1dVRkRha1VzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4VFFVRlRPMWxCUTNKQ0xGTkJRVk1zUTBGQlF6dFJRVU5hTEhsQ1FVRjVRaXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzFGQlEzSkRMRTFCUVUwc1QwRkJUeXhIUVVOWUxFOUJRVThzUTBGQlF5eFBRVUZQTzFsQlEyWXNRMEZCUXl4UFFVRlBMRk5CUVZNc1MwRkJTeXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzFGQlEyeEZMRTlCUVU4c1JVRkJSU3hKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hUUVVGVExFVkJRVVVzVDBGQlR5eEZRVUZGTEVOQlFVTTdTVUZEYUVVc1EwRkJRenRKUVVWUExHRkJRV0VzUTBGQlF5eEpRVUZaTzFGQlEyaERMRWxCUVVrc1EwRkJRenRaUVVOSUxHdENRVUZyUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRek5DTEVOQlFVTTdVVUZCUXl4UFFVRlBMRXRCUVVzc1JVRkJSU3hEUVVGRE8xbEJRMllzVFVGQlRTeEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRXRCUVdNc1EwRkJReXhEUVVGRE8xRkJRM2hETEVOQlFVTTdVVUZEUkN4TlFVRk5MR05CUVdNc1IwRkJSeXh0UWtGQmJVSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVOcVJDeHZRa0ZCYjBJc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF6dFJRVU55UXl4UFFVRlBMR05CUVdNc1EwRkJRenRKUVVONFFpeERRVUZETzBsQlJVOHNWMEZCVnl4RFFVTnFRaXhKUVVGWkxFVkJRMW9zVTBGQmFVSXNSVUZEYWtJc1ZVRkJiVU1zUlVGRGJrTXNUMEZCTWtJN1VVRkZNMElzVFVGQlRTeFhRVUZYTEVkQlFUSkNPMWxCUXpGRExFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1JVRkJSU3hWUVVGVkxFTkJRVU1zVVVGQlVUdFpRVU14UXl4RFFVRkRMSEZDUVVGeFFpeERRVUZETEVWQlFVVXNTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhYUVVGWExFVkJRVVU3VTBGRGJFUXNRMEZCUXp0UlFVVkdMRWxCUVVrc1QwRkJUeXhEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETzFsQlEzaENMRmRCUVZjc1EwRkJReXgxUWtGQmRVSXNRMEZCUXl4SFFVRkhMRTlCUVU4c1EwRkJReXhYUVVGWExFTkJRVU03VVVGRE4wUXNRMEZCUXp0UlFVTkVMRWxCUVVrc1QwRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzFsQlEycENMRmRCUVZjc1EwRkJReXhsUVVGbExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU01UkN4RFFVRkRPMUZCUTBRc1NVRkJTU3hQUVVGUExFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdXVUZEY0VJc1YwRkJWeXhEUVVGRExHdENRVUZyUWl4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF6dFJRVU53UkN4RFFVRkRPMUZCUTBRc1NVRkJTU3hQUVVGUExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdXVUZEY2tJc1YwRkJWeXhEUVVGRExHbENRVUZwUWl4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExGRkJRVkVzUTBGQlF6dFJRVU53UkN4RFFVRkRPMUZCUTBRc1NVRkJTU3hQUVVGUExFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVTTdXVUZEZEVJc1YwRkJWeXhEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExGTkJRVk1zUTBGQlF6dFJRVU4yUkN4RFFVRkRPMUZCUTBRc1NVRkJTU3hQUVVGUExFTkJRVU1zWjBKQlFXZENMRVZCUVVVc1EwRkJRenRaUVVNM1FpeFhRVUZYTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU03VVVGRE0wUXNRMEZCUXp0UlFVVkVMRTlCUVU4N1dVRkRUQ3hWUVVGVkxFVkJRVVVzU1VGQlNUdFpRVU5vUWl4SlFVRkpMRVZCUVVVc1VVRkJVVHRaUVVOa0xFbEJRVWtzUlVGQlJTeFJRVUZSTzFsQlEyUXNVVUZCVVN4RlFVRkZPMmRDUVVOU0xFbEJRVWs3WjBKQlEwb3NVMEZCVXp0blFrRkRWQ3hOUVVGTkxFVkJRVVU3YjBKQlEwNHNRMEZCUXl4aFFVRmhMRU5CUVVNc1JVRkJSU3hOUVVGTk8ybENRVU40UWp0blFrRkRSQ3hYUVVGWE8yRkJRMW83V1VGRFJDeFZRVUZWTEVWQlFVVTdaMEpCUTFZc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zVlVGQlZTeERRVUZETzJGQlF5OURPMU5CUTBZc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlR5eExRVUZMTEVOQlFVTXNWVUZCVlN4RFFVTjBRaXhKUVVGWkxFVkJRMW9zVTBGQmFVSTdVVUZGYWtJc1NVRkJTU3hEUVVGRE8xbEJRMGdzVDBGQlR5eE5RVUZOTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc2IwSkJRVzlDTEVOQlFVTXNSVUZCUlN4SlFVRkpMRVZCUVVVc1UwRkJVeXhGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVU55UlN4RFFVRkRPMUZCUVVNc1QwRkJUeXhMUVVGTExFVkJRVVVzUTBGQlF6dFpRVU5tTEUxQlFVMHNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU12UWl4RFFVRkRPMGxCUTBnc1EwRkJRenRKUVVWUExHRkJRV0VzUTBGQlF5eE5RVUZuUWl4RlFVRkZMRTlCUVdkQ08xRkJRM1JFTEVsQlFVa3NRMEZCUXl4UFFVRlBPMWxCUVVVc1QwRkJUenRSUVVOeVFpeE5RVUZOTEUxQlFVMHNSMEZCUnl4TlFVRk5MRU5CUVVNc1VVRkJVU3hGUVVGRkxGZEJRVmNzUlVGQlJTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFTkJRVU03VVVGRGJFVXNTVUZCU1N4TlFVRk5MRXRCUVVzc1QwRkJUeXhGUVVGRkxFTkJRVU03V1VGRGRrSXNUVUZCVFN4SlFVRkpMR0ZCUVdFc1EwRkRja0lzVjBGQlZ5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RlFVRkZMRWxCUVVrc1kwRkJZeXhQUVVGUExHRkJRV0VzUTBGRGJrVXNRMEZCUXp0UlFVTktMRU5CUVVNN1NVRkRTQ3hEUVVGRE8wbEJSVThzVlVGQlZTeERRVUZETEUxQlFXZENMRVZCUVVVc1UwRkJhVUk3VVVGRGNFUXNUVUZCVFN4WFFVRlhMRWRCUVVjc1RVRkJUU3hEUVVGRExGRkJRVkVzUlVGQlJTeFhRVUZYTEVsQlFVa3NSVUZCUlN4RFFVRkRPMUZCUTNaRUxFMUJRVTBzVTBGQlV5eEhRVUZITEZkQlFWY3NRMEZCUXl4eFFrRkJjVUlzUTBGQlF5eERRVUZETzFGQlEzSkVMRTFCUVUwc1NVRkJTU3hIUVVGSExFMUJRVTBzUTBGQlF5eFJRVUZSTEVWQlFVVXNTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJRenRSUVVONlF5eFBRVUZQTzFsQlEwd3NVVUZCVVN4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUk8xbEJRM1pDTEVsQlFVazdXVUZEU2l4UFFVRlBMRVZCUVVVc1YwRkJWeXhEUVVGRExHdENRVUZyUWl4RFFVRkRPMWxCUTNoRExGTkJRVk1zUlVGQlJTeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRkZCUVZFc1JVRkJSU3hwUWtGQmFVSXNRMEZCUXp0WlFVTnlSQ3hUUVVGVExFVkJRVVVzVTBGQlV6dG5Ra0ZEYkVJc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXp0blFrRkRja0lzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1VVRkJVU3hGUVVGRkxHbENRVUZwUWl4RFFVRkRPMWxCUXpsRExFOUJRVThzUlVGQlJTeEpRVUZKTzFsQlEySXNWMEZCVnl4RlFVRkZMRmRCUVZjc1EwRkJReXgxUWtGQmRVSXNRMEZCUXp0WlFVTnFSQ3hKUVVGSkxFVkJRVVVzVTBGQlV5eERRVUZETEZkQlFWY3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJRenRaUVVNM1F5eFZRVUZWTEVWQlFVVXNUVUZCVFN4RFFVRkRMRkZCUVZFc1JVRkJSU3hIUVVGSE8xbEJRMmhETEVkQlFVY3NSVUZCUlN4blFrRkJaMElzVTBGQlV5eEpRVUZKTEVsQlFVa3NSVUZCUlR0VFFVTjZReXhEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVVZQTEZGQlFWRXNRMEZCUXl4TFFVRmpPMUZCUXpkQ0xFbEJRVWtzUzBGQlN5eFpRVUZaTEZsQlFWazdXVUZCUlN4UFFVRlBMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU03VVVGRGNrUXNUVUZCVFN4VFFVRlRMRWRCUVVjc1MwRkJhVVFzUTBGQlF6dFJRVU53UlN4SlFVRkpMRTlCUVU4c1UwRkJVeXhGUVVGRkxFbEJRVWtzUzBGQlN5eFJRVUZSTzFsQlFVVXNUMEZCVHl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRE8xRkJReTlFTEVsQlFVa3NUMEZCVHl4VFFVRlRMRVZCUVVVc1ZVRkJWU3hMUVVGTExGRkJRVkVzUlVGQlJTeERRVUZETzFsQlF6bERMRTlCUVU4c1UwRkJVeXhEUVVGRExGVkJRVlVzUTBGQlF6dFJRVU01UWl4RFFVRkRPMUZCUTBRc1QwRkJUeXhUUVVGVExFTkJRVU03U1VGRGJrSXNRMEZCUXp0SlFVVlBMRk5CUVZNc1EwRkJReXhMUVVGak8xRkJRemxDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRXRCU1Znc1EwRkJRenRSUVVOR0xFOUJRVThzUjBGQlJ5eEZRVUZGTEVsQlFVa3NSVUZCUlN4UFFVRlBMRWxCUVVrc1IwRkJSeXhGUVVGRkxFbEJRVWtzUlVGQlJTeE5RVUZOTEVsQlFVa3NSMEZCUnl4RlFVRkZMRTlCUVU4c1NVRkJTU3hIUVVGSExFVkJRVVVzU1VGQlNTeEpRVUZKTEdWQlFXVXNRMEZCUXp0SlFVTnFSeXhEUVVGRE8wbEJSVk1zVlVGQlZTeERRVUZETEV0QlFXTTdVVUZEYWtNc1NVRkJTU3hMUVVGTExGbEJRVmtzVTBGQlV6dFpRVUZGTEU5QlFVOHNTMEZCU3l4RFFVRkRPMUZCUXpkRExFMUJRVTBzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRGNFTXNUVUZCVFN4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVTjBReXhOUVVGTkxGbEJRVmtzUjBGQlJ5eFBRVUZQTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN1VVRkZNME1zU1VGRFJTeE5RVUZOTEV0QlFVc3NSMEZCUnp0WlFVTmtMRmxCUVZrc1EwRkJReXhSUVVGUkxFTkJRVU1zVjBGQlZ5eERRVUZETzFsQlEyeERMRmxCUVZrc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlF6VkNMRU5CUVVNN1dVRkRSQ3hQUVVGUExFbEJRVWtzWVVGQllTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUTNCRExFTkJRVU03VVVGRlJDeEpRVU5GTEUxQlFVMHNTMEZCU3l4SFFVRkhPMWxCUTJRc1dVRkJXU3hEUVVGRExGRkJRVkVzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJRenRaUVVOMlF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RFFVRkRMRlZCUVZVc1EwRkJRenRaUVVOcVF5eFpRVUZaTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVNMVFpeERRVUZETzFsQlEwUXNUMEZCVHl4SlFVRkpMR0ZCUVdFc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFJRVU53UXl4RFFVRkRPMUZCUlVRc1NVRkJTU3hOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEZsQlFWa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1kwRkJZeXhEUVVGRExFVkJRVVVzUTBGQlF6dFpRVU0xUkN4UFFVRlBMRWxCUVVrc2EwSkJRV3RDTEVOQlFVTXNNRUpCUVRCQ0xFOUJRVThzUlVGQlJTeERRVUZETEVOQlFVTTdVVUZEY2tVc1EwRkJRenRSUVVWRUxFbEJRVWtzVFVGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4WlFVRlpMRU5CUVVNc1VVRkJVU3hEUVVGRExGZEJRVmNzUTBGQlF5eEZRVUZGTEVOQlFVTTdXVUZEZWtRc1QwRkJUeXhKUVVGSkxHdENRVUZyUWl4RFFVRkRMSE5DUVVGelFpeFBRVUZQTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTJwRkxFTkJRVU03VVVGRlJDeEpRVU5GTEUxQlFVMHNTMEZCU3l4SFFVRkhPMWxCUTJRc1RVRkJUU3hMUVVGTExFZEJRVWM3V1VGRFpDeFpRVUZaTEVOQlFVTXNVVUZCVVN4RFFVRkRMR0ZCUVdFc1EwRkJReXhGUVVOd1F5eERRVUZETzFsQlEwUXNUMEZCVHl4SlFVRkpMR1ZCUVdVc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dFJRVU4wUXl4RFFVRkRPMUZCUlVRc1NVRkJTU3hOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEZsQlFWa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1dVRkJXU3hEUVVGRExFVkJRVVVzUTBGQlF6dFpRVU14UkN4UFFVRlBMRWxCUVVrc1YwRkJWeXhEUVVOd1FpdzRRa0ZCT0VJc1JVRkRPVUlzYVVKQlFXbENMRTlCUVU4c1JVRkJSU3hGUVVNeFFpeExRVUZqTEVOQlEyWXNRMEZCUXp0UlFVTktMRU5CUVVNN1VVRkZSQ3hKUVVORkxFMUJRVTBzUzBGQlN5eFRRVUZUTzFsQlEzQkNMRU5CUVVNc1RVRkJUU3hMUVVGTExGTkJRVk1zU1VGQlNTeE5RVUZOTEVsQlFVa3NSMEZCUnl4RFFVRkRPMWxCUTNaRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVOQlFVTXNXVUZCV1N4RFFVRkRPMWxCUTI1RExGbEJRVmtzUTBGQlF5eFJRVUZSTEVOQlFVTXNVMEZCVXl4RFFVRkRPMWxCUTJoRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVOQlFVTXNZVUZCWVN4RFFVRkRMRVZCUTNCRExFTkJRVU03V1VGRFJDeFBRVUZQTEVsQlFVa3NWMEZCVnl4RFFVTndRaXcyUWtGQk5rSXNSVUZETjBJc2VVSkJRWGxDTEU5QlFVOHNSVUZCUlN4RlFVTnNReXhMUVVGakxFTkJRMllzUTBGQlF6dFJRVU5LTEVOQlFVTTdVVUZGUkN4UFFVRlBMRWxCUVVrc1lVRkJZU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBsQlEzQkRMRU5CUVVNN1EwRkRSaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3WEc0Z0lFRndhVVY0WTJWd2RHbHZiaXhjYmlBZ1EyOXlaVll4UVhCcExGeHVJQ0JMZFdKbFEyOXVabWxuTEZ4dUlDQjBlWEJsSUZZeFUyVmpjbVYwTEZ4dWZTQm1jbTl0SUZ3aVFHdDFZbVZ5Ym1WMFpYTXZZMnhwWlc1MExXNXZaR1ZjSWp0Y2JtbHRjRzl5ZENCN0lFRjFkR2h2Y21sNllYUnBiMjVGY25KdmNpd2dkSGx3WlNCTllYbGlaVU52Ym5SbGVIUjFZV3hCY21jZ2ZTQm1jbTl0SUZ3aVFHUmxZMkZtTFhSekwyTnZjbVZjSWp0Y2JtbHRjRzl5ZENCN1hHNGdJRU5zYVdWdWRFSmhjMlZrVTJWamNtVjBVMlZ5ZG1salpTeGNiaUFnVTJWamNtVjBSWEp5YjNJc1hHNGdJRk5sWTNKbGRGQnliM1pwWkdWeUxGeHVJQ0JUWldOeVpYUk9ZVzFsTEZ4dUlDQlRaV055WlhSUVlYbHNiMkZrTEZ4dUlDQlRaV055WlhSU1pXWmxjbVZ1WTJVc1hHNGdJRk5sWTNKbGRFMWxkR0ZrWVhSaExGeHVmU0JtY205dElGd2lMaTR2TGk0dmMyVmpjbVYwY3k5amIzSmxYQ0k3WEc1cGJYQnZjblFnZTF4dUlDQlRkRzl5WlZObFkzSmxkRTl3ZEdsdmJuTXNYRzRnSUZKbGRISnBaWFpsVTJWamNtVjBUM0IwYVc5dWN5eGNiaUFnUkdWc1pYUmxVMlZqY21WMFQzQjBhVzl1Y3l4Y2JpQWdSWGhwYzNSelUyVmpjbVYwVDNCMGFXOXVjeXhjYmlBZ1RHbHpkRk5sWTNKbGRITlBjSFJwYjI1ekxGeHVJQ0JUWldOeVpYUk5aWFJoWkdGMFlVOXdkR2x2Ym5Nc1hHNGdJRkp2ZEdGMFpWTmxZM0psZEU5d2RHbHZibk1zWEc1OUlHWnliMjBnWENJdUxpOHVMaTl6WldOeVpYUnpMMk52Y21WY0lqdGNibWx0Y0c5eWRDQjdJSFpoYkdsa1lYUmxVMlZqY21WMFRtRnRaU3dnYm05eWJXRnNhWHBsVTJWamNtVjBUbUZ0WlNCOUlHWnliMjBnWENJdUxpOHVMaTl6WldOeVpYUnpMMk52Y21WY0lqdGNibWx0Y0c5eWRDQjdYRzRnSUhObGNtbGhiR2w2WlZObFkzSmxkRkJoZVd4dllXUXNYRzRnSUdSbGMyVnlhV0ZzYVhwbFUyVmpjbVYwVUdGNWJHOWhaQ3hjYmlBZ2RIbHdaU0JUWlhKcFlXeHBlbVZrVTJWamNtVjBVR0Y1Ykc5aFpDeGNibjBnWm5KdmJTQmNJaTR1THk0dUwzTmxZM0psZEhNdlkyOXlaVndpTzF4dWFXMXdiM0owSUhzZ1MzVmlaWEp1WlhSbGMxTmxZM0psZEZObGNuWnBZMlZEYjI1bWFXY2dmU0JtY205dElGd2lMaTlMZFdKbGNtNWxkR1Z6VTJWamNtVjBVMlZ5ZG1salpVTnZibVpwWjF3aU8xeHVhVzF3YjNKMElIc2dTM1ZpWlhKdVpYUmxjMU5sWTNKbGRFVnVkbWx5YjI1dFpXNTBJSDBnWm5KdmJTQmNJaTR2UzNWaVpYSnVaWFJsYzFObFkzSmxkRVZ1ZG1seWIyNXRaVzUwWENJN1hHNXBiWEJ2Y25RZ2V5QmxiblpDYjI5c1pXRnVMQ0JsYm5aVGRISnBibWNnZlNCbWNtOXRJRndpTGk0dkxpNHZjMmhoY21Wa0wyVnVkbWx5YjI1dFpXNTBWbUZzZFdWY0lqdGNibWx0Y0c5eWRDQjdYRzRnSUVKaFpGSmxjWFZsYzNSRmNuSnZjaXhjYmlBZ1FtRnpaVVZ5Y205eUxGeHVJQ0JEYjI1bWJHbGpkRVZ5Y205eUxGeHVJQ0JKYm5SbGNtNWhiRVZ5Y205eUxGeHVJQ0JPYjNSR2IzVnVaRVZ5Y205eUxGeHVmU0JtY205dElGd2lRR1JsWTJGbUxYUnpMMlJpTFdSbFkyOXlZWFJ2Y25OY0lqdGNibHh1WTI5dWMzUWdVRUZaVEU5QlJGOUVRVlJCWDB0RldTQTlJRndpY0dGNWJHOWhaRndpTzF4dVkyOXVjM1FnVFVGT1FVZEZSRjlNUVVKRlRDQTlJRndpWkdWallXWXRkSE11YVc4dmJXRnVZV2RsWkZ3aU8xeHVZMjl1YzNRZ1FVNU9UMVJCVkVsUFRsOVFVa1ZHU1ZnZ1BTQmNJbVJsWTJGbUxYUnpMbWx2TDF3aU8xeHVZMjl1YzNRZ1JVNURUMFJKVGtkZlFVNU9UMVJCVkVsUFRpQTlJR0FrZTBGT1RrOVVRVlJKVDA1ZlVGSkZSa2xZZldWdVkyOWthVzVuWUR0Y2JtTnZibk4wSUVOUFRsUkZUbFJmVkZsUVJWOUJUazVQVkVGVVNVOU9JRDBnWUNSN1FVNU9UMVJCVkVsUFRsOVFVa1ZHU1ZoOVkyOXVkR1Z1ZEMxMGVYQmxZRHRjYm1OdmJuTjBJRlJCUjFOZlFVNU9UMVJCVkVsUFRpQTlJR0FrZTBGT1RrOVVRVlJKVDA1ZlVGSkZSa2xZZlhSaFozTmdPMXh1WTI5dWMzUWdWa1ZTVTBsUFRsOUJUazVQVkVGVVNVOU9JRDBnWUNSN1FVNU9UMVJCVkVsUFRsOVFVa1ZHU1ZoOWRtVnljMmx2Ym1BN1hHNWpiMjV6ZENCVlVFUkJWRVZFWDBGVVgwRk9UazlVUVZSSlQwNGdQU0JnSkh0QlRrNVBWRUZVU1U5T1gxQlNSVVpKV0gxMWNHUmhkR1ZrTFdGMFlEdGNibU52Ym5OMElGUkZUa0ZPVkY5QlRrNVBWRUZVU1U5T0lEMGdZQ1I3UVU1T1QxUkJWRWxQVGw5UVVrVkdTVmg5ZEdWdVlXNTBMV2xrWUR0Y2JtTnZibk4wSUU5U1IxOVZUa2xVWDBGT1RrOVVRVlJKVDA0Z1BTQmdKSHRCVGs1UFZFRlVTVTlPWDFCU1JVWkpXSDF2Y21jdGRXNXBkQzFwWkdBN1hHNWpiMjV6ZENCUFYwNUZVbDlCVGs1UFZFRlVTVTlPSUQwZ1lDUjdRVTVPVDFSQlZFbFBUbDlRVWtWR1NWaDliM2R1WlhJdGNISnBibU5wY0dGc0xXbGtZRHRjYmx4dVkyOXVjM1FnUkU1VFgxTlZRa1JQVFVGSlRsOVFRVlJVUlZKT0lEMWNiaUFnTDE1YllTMTZNQzA1WFNoYkxXRXRlakF0T1M1ZEtsdGhMWG93TFRsZEtUOGtMenRjYm1OdmJuTjBJRVJPVTE5TVFVSkZURjlRUVZSVVJWSk9JRDBnTDE1YllTMTZNQzA1WFNoYkxXRXRlakF0T1YwcVcyRXRlakF0T1YwcFB5UXZPMXh1WEc1bWRXNWpkR2x2YmlCaGMzTmxjblJMZFdKbGNtNWxkR1Z6VG1GdFpTaHVZVzFsT2lCemRISnBibWNwT2lCMmIybGtJSHRjYmlBZ2FXWWdLRzVoYldVdWJHVnVaM1JvSUQ0Z01qVXpJSHg4SUNGRVRsTmZVMVZDUkU5TlFVbE9YMUJCVkZSRlVrNHVkR1Z6ZENodVlXMWxLU2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJUWldOeVpYUkZjbkp2Y2loY2JpQWdJQ0FnSUZ3aVUwVkRVa1ZVWDBsT1ZrRk1TVVJmVGtGTlJWd2lMRnh1SUNBZ0lDQWdZRWx1ZG1Gc2FXUWdTM1ZpWlhKdVpYUmxjeUJ6WldOeVpYUWdibUZ0WlRvZ1hDSWtlMjVoYldWOVhDSXVJRTVoYldWeklHMTFjM1FnWW1VZ2JHOTNaWEpqWVhObElFUk9VeTB4TVRJeklITjFZbVJ2YldGcGJuTWdLR3hsZEhSbGNuTXNJR1JwWjJsMGN5d2dKeTBuTENCaGJtUWdKeTRuS1M1Z1hHNGdJQ0FnS1R0Y2JpQWdmVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmhjM05sY25STGRXSmxjbTVsZEdWelRtRnRaWE53WVdObEtHNWhiV1Z6Y0dGalpUb2djM1J5YVc1bktUb2dkbTlwWkNCN1hHNGdJR2xtSUNodVlXMWxjM0JoWTJVdWJHVnVaM1JvSUQ0Z05qTWdmSHdnSVVST1UxOU1RVUpGVEY5UVFWUlVSVkpPTG5SbGMzUW9ibUZ0WlhOd1lXTmxLU2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJUWldOeVpYUkZjbkp2Y2loY2JpQWdJQ0FnSUZ3aVUwVkRVa1ZVWDBsT1ZrRk1TVVJmVGtGTlJWd2lMRnh1SUNBZ0lDQWdZRWx1ZG1Gc2FXUWdTM1ZpWlhKdVpYUmxjeUJ1WVcxbGMzQmhZMlU2SUZ3aUpIdHVZVzFsYzNCaFkyVjlYQ0l1SUU1aGJXVnpjR0ZqWlhNZ2JYVnpkQ0JpWlNCc2IzZGxjbU5oYzJVZ1JFNVRMVEV4TWpNZ2JHRmlaV3h6TG1CY2JpQWdJQ0FwTzF4dUlDQjlYRzU5WEc1Y2JtWjFibU4wYVc5dUlIUnZSR0YwWlNoMllXeDFaVG9nUkdGMFpTQjhJSE4wY21sdVp5QjhJSFZ1WkdWbWFXNWxaQ2s2SUVSaGRHVWdmQ0IxYm1SbFptbHVaV1FnZTF4dUlDQnBaaUFvSVhaaGJIVmxLU0J5WlhSMWNtNGdkVzVrWldacGJtVmtPMXh1SUNCamIyNXpkQ0JrWVhSbElEMGdkbUZzZFdVZ2FXNXpkR0Z1WTJWdlppQkVZWFJsSUQ4Z2RtRnNkV1VnT2lCdVpYY2dSR0YwWlNoMllXeDFaU2s3WEc0Z0lISmxkSFZ5YmlCT2RXMWlaWEl1YVhOT1lVNG9aR0YwWlM1blpYUlVhVzFsS0NrcElEOGdkVzVrWldacGJtVmtJRG9nWkdGMFpUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2NHRnljMlZVWVdkektISmhkem9nYzNSeWFXNW5JSHdnZFc1a1pXWnBibVZrS1RvZ1VtVmpiM0prUEhOMGNtbHVaeXdnYzNSeWFXNW5QaUI4SUhWdVpHVm1hVzVsWkNCN1hHNGdJR2xtSUNnaGNtRjNLU0J5WlhSMWNtNGdkVzVrWldacGJtVmtPMXh1SUNCMGNua2dlMXh1SUNBZ0lHTnZibk4wSUhCaGNuTmxaQ0E5SUVwVFQwNHVjR0Z5YzJVb2NtRjNLVHRjYmlBZ0lDQnlaWFIxY200Z2NHRnljMlZrSUNZbUlIUjVjR1Z2WmlCd1lYSnpaV1FnUFQwOUlGd2liMkpxWldOMFhDSmNiaUFnSUNBZ0lEOGdLSEJoY25ObFpDQmhjeUJTWldOdmNtUThjM1J5YVc1bkxDQnpkSEpwYm1jK0tWeHVJQ0FnSUNBZ09pQjFibVJsWm1sdVpXUTdYRzRnSUgwZ1kyRjBZMmdnZTF4dUlDQWdJSEpsZEhWeWJpQjFibVJsWm1sdVpXUTdYRzRnSUgxY2JuMWNibHh1THlvcVhHNGdLaUJBWTJ4aGMzTWdTM1ZpWlhKdVpYUmxjMU5sWTNKbGRGTmxjblpwWTJWY2JpQXFJRUJ6ZFcxdFlYSjVJRTVoZEdsMlpTQkxkV0psY201bGRHVnpJRk5sWTNKbGRITWdZbUZqYTJWdVpDNWNiaUFxSUVCa1pYTmpjbWx3ZEdsdmJpQkpiWEJzWlcxbGJuUnpJSFJvWlNCN1FHeHBibXNnVTJWamNtVjBVMlZ5ZG1salpYMGdZMjl1ZEhKaFkzUWdiMjRnZEc5d0lHOW1YRzRnS2lCdVlXMWxjM0JoWTJWa0lFdDFZbVZ5Ym1WMFpYTWdZRk5sWTNKbGRHQWdiMkpxWldOMGN5NGdSV0ZqYUNCRVJVTkJSaUJ6WldOeVpYUWdhWE1nYzNSdmNtVmtJR0Z6SUdGdVhHNGdLaUJnVDNCaGNYVmxZQ0JUWldOeVpYUWdkMmh2YzJVZ1lIQmhlV3h2WVdSZ0lHUmhkR0VnYTJWNUlHaHZiR1J6SUhSb1pTQnpaWEpwWVd4cGVtVmtYRzRnS2lCN1FHeHBibXNnVTJWeWFXRnNhWHBsWkZObFkzSmxkRkJoZVd4dllXUjlJR1Z1ZG1Wc2IzQmxMQ0IzYUdsc1pTQmxibU52WkdsdVp5d2dZMjl1ZEdWdWRDQjBlWEJsTENCMFlXZHpMRnh1SUNvZ2JHOW5hV05oYkNCMlpYSnphVzl1TENCaGJtUWdiM2R1WlhKemFHbHdJR2hwYm5SeklHeHBkbVVnYVc0Z1lHUmxZMkZtTFhSekxtbHZMeXBnSUdGdWJtOTBZWFJwYjI1ekxseHVJQ3BjYmlBcUlFRjFkR2hsYm5ScFkyRjBhVzl1SUhWelpYTWdkR2hsSUhOMFlXNWtZWEprSUV0MVltVnlibVYwWlhNZ1kyeHBaVzUwSUhKbGMyOXNkWFJwYjI0Z2IzSmtaWEk2WEc0Z0tpQmxlSEJzYVdOcGRDQmdjMlZ5ZG1WeVlDQmpjbVZrWlc1MGFXRnNjeXdnWVc0Z1pYaHdiR2xqYVhRZ1lHdDFZbVZqYjI1bWFXZGdJSEJoZEdnc0lHQkxWVUpGUTA5T1JrbEhZQ3hjYmlBcUlHQitMeTVyZFdKbEwyTnZibVpwWjJBc0lHRnVaQ0JtYVc1aGJHeDVJSFJvWlNCcGJpMWpiSFZ6ZEdWeUlITmxjblpwWTJVZ1lXTmpiM1Z1ZEM1Y2JpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklFdDFZbVZ5Ym1WMFpYTlRaV055WlhSVFpYSjJhV05sSUdWNGRHVnVaSE1nUTJ4cFpXNTBRbUZ6WldSVFpXTnlaWFJUWlhKMmFXTmxQRnh1SUNCRGIzSmxWakZCY0drc1hHNGdJRXQxWW1WeWJtVjBaWE5UWldOeVpYUlRaWEoyYVdObFEyOXVabWxuWEc0K0lIdGNiaUFnY21WaFpHOXViSGtnY0hKdmRtbGtaWEk2SUZObFkzSmxkRkJ5YjNacFpHVnlJRDBnWENKcmRXSmxjbTVsZEdWelhDSTdYRzVjYmlBZ2NISnZkR1ZqZEdWa0lHTnZibVpwWjBaeWIyMUZiblpwY205dWJXVnVkQ2dwT2x4dUlDQWdJSHdnUzNWaVpYSnVaWFJsYzFObFkzSmxkRk5sY25acFkyVkRiMjVtYVdkY2JpQWdJQ0I4SUhWdVpHVm1hVzVsWkNCN1hHNGdJQ0FnWTI5dWMzUWdaVzUySUQwZ1MzVmlaWEp1WlhSbGMxTmxZM0psZEVWdWRtbHliMjV0Wlc1MExuTmxZM0psZEhNdWEzVmlaWEp1WlhSbGN6dGNiaUFnSUNCamIyNXpkQ0J1WVcxbGMzQmhZMlVnUFNCbGJuWlRkSEpwYm1jb1pXNTJQeTV1WVcxbGMzQmhZMlVwTzF4dUlDQWdJR052Ym5OMElHdDFZbVZqYjI1bWFXY2dQU0JsYm5aVGRISnBibWNvWlc1MlB5NXJkV0psWTI5dVptbG5LVHRjYmlBZ0lDQmpiMjV6ZENCamIyNTBaWGgwSUQwZ1pXNTJVM1J5YVc1bktHVnVkajh1WTI5dWRHVjRkQ2s3WEc0Z0lDQWdZMjl1YzNRZ2MyVnlkbVZ5SUQwZ1pXNTJVM1J5YVc1bktHVnVkajh1YzJWeWRtVnlLVHRjYmlBZ0lDQnBaaUFvSVc1aGJXVnpjR0ZqWlNBbUppQWhhM1ZpWldOdmJtWnBaeUFtSmlBaFkyOXVkR1Y0ZENBbUppQWhjMlZ5ZG1WeUtTQnlaWFIxY200Z2RXNWtaV1pwYm1Wa08xeHVJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0J3Y205MmFXUmxjam9nWENKcmRXSmxjbTVsZEdWelhDSXNYRzRnSUNBZ0lDQnVZVzFsYzNCaFkyVXNYRzRnSUNBZ0lDQnJkV0psWTI5dVptbG5MRnh1SUNBZ0lDQWdZMjl1ZEdWNGRDeGNiaUFnSUNBZ0lITmxjblpsY2l4Y2JpQWdJQ0FnSUhSdmEyVnVPaUJsYm5aVGRISnBibWNvWlc1MkxuUnZhMlZ1S1N4Y2JpQWdJQ0FnSUhSdmEyVnVSbWxzWlRvZ1pXNTJVM1J5YVc1bktHVnVkaTUwYjJ0bGJrWnBiR1VwTEZ4dUlDQWdJQ0FnWTJGR2FXeGxPaUJsYm5aVGRISnBibWNvWlc1MkxtTmhSbWxzWlNrc1hHNGdJQ0FnSUNCallVUmhkR0U2SUdWdWRsTjBjbWx1WnlobGJuWXVZMkZFWVhSaEtTeGNiaUFnSUNBZ0lHTmxjblJHYVd4bE9pQmxiblpUZEhKcGJtY29aVzUyTG1ObGNuUkdhV3hsS1N4Y2JpQWdJQ0FnSUd0bGVVWnBiR1U2SUdWdWRsTjBjbWx1WnlobGJuWXVhMlY1Um1sc1pTa3NYRzRnSUNBZ0lDQmpaWEowUkdGMFlUb2daVzUyVTNSeWFXNW5LR1Z1ZGk1alpYSjBSR0YwWVNrc1hHNGdJQ0FnSUNCclpYbEVZWFJoT2lCbGJuWlRkSEpwYm1jb1pXNTJMbXRsZVVSaGRHRXBMRnh1SUNBZ0lDQWdjMnRwY0ZSTVUxWmxjbWxtZVRvZ1pXNTJRbTl2YkdWaGJpaGxibll1YzJ0cGNGUk1VMVpsY21sbWVTa3NYRzRnSUNBZ0lDQnpaWEoyYVdObFFXTmpiM1Z1ZERvZ1pXNTJRbTl2YkdWaGJpaGxibll1YzJWeWRtbGpaVUZqWTI5MWJuUXBMRnh1SUNBZ0lIMDdYRzRnSUgxY2JseHVJQ0JoYzNsdVl5QnBibWwwYVdGc2FYcGxLRnh1SUNBZ0lDNHVMbUZ5WjNNNklFMWhlV0psUTI5dWRHVjRkSFZoYkVGeVp6eGhibmsrWEc0Z0lDazZJRkJ5YjIxcGMyVThleUJqYjI1bWFXYzZJRXQxWW1WeWJtVjBaWE5UWldOeVpYUlRaWEoyYVdObFEyOXVabWxuT3lCamJHbGxiblE2SUVOdmNtVldNVUZ3YVNCOVBpQjdYRzRnSUNBZ1kyOXVjM1FnZXlCc2IyY2dmU0E5SUNoaGQyRnBkQ0IwYUdsekxteHZaME4wZUNoaGNtZHpMQ0JjSW1sdWFYUnBZV3hwZW1WY0lpd2dkSEoxWlNrcExtWnZjaWhjYmlBZ0lDQWdJSFJvYVhNdWFXNXBkR2xoYkdsNlpWeHVJQ0FnSUNrN1hHNGdJQ0FnWTI5dWMzUWdZMjl1Wm1sbklEMWNiaUFnSUNBZ0lIUm9hWE11WjJWMFEyOXVabWxuUm5KdmJVRnlaM004UzNWaVpYSnVaWFJsYzFObFkzSmxkRk5sY25acFkyVkRiMjVtYVdjK0tDNHVMbUZ5WjNNcE8xeHVJQ0FnSUdOdmJuTjBJR3QxWW1WRGIyNW1hV2NnUFNCMGFHbHpMbUoxYVd4a1MzVmlaVU52Ym1acFp5aGpiMjVtYVdjcE8xeHVJQ0FnSUdOdmJuTjBJRzVoYldWemNHRmpaU0E5SUhSb2FYTXVjbVZ6YjJ4MlpVNWhiV1Z6Y0dGalpTaGpiMjVtYVdjc0lHdDFZbVZEYjI1bWFXY3BPMXh1SUNBZ0lHTnZibk4wSUhKbGMyOXNkbVZrT2lCTGRXSmxjbTVsZEdWelUyVmpjbVYwVTJWeWRtbGpaVU52Ym1acFp5QTlJSHNnTGk0dVkyOXVabWxuTENCdVlXMWxjM0JoWTJVZ2ZUdGNiaUFnSUNCamIyNXpkQ0JqYkdsbGJuUWdQU0JyZFdKbFEyOXVabWxuTG0xaGEyVkJjR2xEYkdsbGJuUW9RMjl5WlZZeFFYQnBLVHRjYmlBZ0lDQjBhR2x6TGw5amIyNW1hV2NnUFNCeVpYTnZiSFpsWkR0Y2JpQWdJQ0IwYUdsekxsOWpiR2xsYm5RZ1BTQmpiR2xsYm5RN1hHNGdJQ0FnYkc5bkxuWmxjbUp2YzJVb1hHNGdJQ0FnSUNCZ1NXNXBkR2xoYkdsNlpXUWdTM1ZpWlhKdVpYUmxjeUJ6WldOeVpYUWdjMlZ5ZG1salpTQm1iM0lnYm1GdFpYTndZV05sSUZ3aUpIdHVZVzFsYzNCaFkyVjlYQ0pnWEc0Z0lDQWdLVHRjYmlBZ0lDQnlaWFIxY200Z2V5QmpiMjVtYVdjNklISmxjMjlzZG1Wa0xDQmpiR2xsYm5RZ2ZUdGNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklITjBiM0psUEZRZ1pYaDBaVzVrY3lCVFpXTnlaWFJRWVhsc2IyRmtJRDBnVTJWamNtVjBVR0Y1Ykc5aFpENG9YRzRnSUNBZ2JtRnRaVG9nVTJWamNtVjBUbUZ0WlN4Y2JpQWdJQ0IyWVd4MVpUb2dWQ3hjYmlBZ0lDQnZjSFJwYjI1ek9pQlRkRzl5WlZObFkzSmxkRTl3ZEdsdmJuTWdQU0I3ZlN4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJOWVhsaVpVTnZiblJsZUhSMVlXeEJjbWM4WVc1NVBseHVJQ0FwT2lCUWNtOXRhWE5sUEZObFkzSmxkRkpsWm1WeVpXNWpaVDRnZTF4dUlDQWdJR052Ym5OMElIc2diRzluSUgwZ1BTQW9ZWGRoYVhRZ2RHaHBjeTVzYjJkRGRIZ29ZWEpuY3l3Z1hDSnpkRzl5WlZ3aUxDQjBjblZsS1NrdVptOXlLSFJvYVhNdWMzUnZjbVVwTzF4dUlDQWdJR052Ym5OMElHNXZjbTFoYkdsNlpXUk9ZVzFsSUQwZ2RHaHBjeTV1YjNKdFlXeHBlbVZPWVcxbEtHNWhiV1VwTzF4dUlDQWdJR052Ym5OMElHNWhiV1Z6Y0dGalpTQTlJSFJvYVhNdWNtVnpiMngyWlU1aGJXVnpjR0ZqWlU5d2RHbHZiaWh2Y0hScGIyNXpMbTVoYldWemNHRmpaU2s3WEc0Z0lDQWdiRzluTG5abGNtSnZjMlVvWUZOMGIzSnBibWNnYzJWamNtVjBJQ1I3Ym05eWJXRnNhWHBsWkU1aGJXVjlJR2x1SUc1aGJXVnpjR0ZqWlNBa2UyNWhiV1Z6Y0dGalpYMWdLVHRjYmx4dUlDQWdJR052Ym5OMElITmxjbWxoYkdsNlpXUWdQU0J6WlhKcFlXeHBlbVZUWldOeVpYUlFZWGxzYjJGa0tIWmhiSFZsS1R0Y2JpQWdJQ0JqYjI1emRDQmliMlI1SUQwZ2RHaHBjeTVpZFdsc1pGTmxZM0psZENodWIzSnRZV3hwZW1Wa1RtRnRaU3dnYm1GdFpYTndZV05sTENCelpYSnBZV3hwZW1Wa0xDQnZjSFJwYjI1ektUdGNibHh1SUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0JoZDJGcGRDQjBhR2x6TG1Oc2FXVnVkQzVqY21WaGRHVk9ZVzFsYzNCaFkyVmtVMlZqY21WMEtIc2dibUZ0WlhOd1lXTmxMQ0JpYjJSNUlIMHBPMXh1SUNBZ0lIMGdZMkYwWTJnZ0tHVnljbTl5S1NCN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1emRHRjBkWE5QWmlobGNuSnZjaWtnUFQwOUlEUXdPU2tnZTF4dUlDQWdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR1Y0YVhOMGFXNW5JRDBnWVhkaGFYUWdkR2hwY3k1amJHbGxiblF1Y21WaFpFNWhiV1Z6Y0dGalpXUlRaV055WlhRb2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYm1GdFpUb2dibTl5YldGc2FYcGxaRTVoYldVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J1WVcxbGMzQmhZMlVzWEc0Z0lDQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJQ0FnWW05a2VTNXRaWFJoWkdGMFlTQTlJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDNHVMaWhpYjJSNUxtMWxkR0ZrWVhSaElIeDhJSHQ5S1N4Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsYzI5MWNtTmxWbVZ5YzJsdmJqb2daWGhwYzNScGJtY3ViV1YwWVdSaGRHRS9MbkpsYzI5MWNtTmxWbVZ5YzJsdmJpeGNiaUFnSUNBZ0lDQWdJQ0I5TzF4dUlDQWdJQ0FnSUNBZ0lHRjNZV2wwSUhSb2FYTXVZMnhwWlc1MExuSmxjR3hoWTJWT1lXMWxjM0JoWTJWa1UyVmpjbVYwS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJRzVoYldVNklHNXZjbTFoYkdsNlpXUk9ZVzFsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdibUZ0WlhOd1lXTmxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1ltOWtlU3hjYmlBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdmU0JqWVhSamFDQW9jbVZ3YkdGalpVVnljbTl5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2RHaHBjeTV3WVhKelpVVnljbTl5S0hKbGNHeGhZMlZGY25KdmNpazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJSFJvY205M0lIUm9hWE11Y0dGeWMyVkZjbkp2Y2lobGNuSnZjaWs3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlIdGNiaUFnSUNBZ0lIQnliM1pwWkdWeU9pQjBhR2x6TG5CeWIzWnBaR1Z5TEZ4dUlDQWdJQ0FnYm1GdFpUb2dibTl5YldGc2FYcGxaRTVoYldVc1hHNGdJQ0FnSUNCdVlXMWxjM0JoWTJVc1hHNGdJQ0FnSUNCMlpYSnphVzl1T2lCdmNIUnBiMjV6TG5abGNuTnBiMjRzWEc0Z0lDQWdJQ0IxY21rNklHQnJkV0psY201bGRHVnpPaTh2Skh0dVlXMWxjM0JoWTJWOUx5UjdibTl5YldGc2FYcGxaRTVoYldWOVlDeGNiaUFnSUNCOU8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ2NtVjBjbWxsZG1VOFZDQmxlSFJsYm1SeklGTmxZM0psZEZCaGVXeHZZV1FnUFNCVFpXTnlaWFJRWVhsc2IyRmtQaWhjYmlBZ0lDQnVZVzFsVDNKU1pXWTZJRk5sWTNKbGRFNWhiV1VnZkNCVFpXTnlaWFJTWldabGNtVnVZMlVzWEc0Z0lDQWdiM0IwYVc5dWN6b2dVbVYwY21sbGRtVlRaV055WlhSUGNIUnBiMjV6SUQwZ2UzMHNYRzRnSUNBZ0xpNHVZWEpuY3pvZ1RXRjVZbVZEYjI1MFpYaDBkV0ZzUVhKblBHRnVlVDVjYmlBZ0tUb2dVSEp2YldselpUeFVQaUI3WEc0Z0lDQWdZMjl1YzNRZ2V5QnNiMmNnZlNBOUlDaGhkMkZwZENCMGFHbHpMbXh2WjBOMGVDaGhjbWR6TENCY0luSmxkSEpwWlhabFhDSXNJSFJ5ZFdVcEtTNW1iM0lvWEc0Z0lDQWdJQ0IwYUdsekxuSmxkSEpwWlhabFhHNGdJQ0FnS1R0Y2JpQWdJQ0JqYjI1emRDQjdJRzVoYldVc0lHNWhiV1Z6Y0dGalpTd2dkbVZ5YzJsdmJpQjlJRDBnZEdocGN5NXlaWE52YkhabFVtVm1aWEpsYm1ObEtGeHVJQ0FnSUNBZ2JtRnRaVTl5VW1WbUxGeHVJQ0FnSUNBZ2IzQjBhVzl1YzF4dUlDQWdJQ2s3WEc0Z0lDQWdiRzluTG5abGNtSnZjMlVvWUZKbGRISnBaWFpwYm1jZ2MyVmpjbVYwSUNSN2JtRnRaWDBnWm5KdmJTQnVZVzFsYzNCaFkyVWdKSHR1WVcxbGMzQmhZMlY5WUNrN1hHNWNiaUFnSUNCamIyNXpkQ0J6WldOeVpYUWdQU0JoZDJGcGRDQjBhR2x6TG5KbFlXUlRaV055WlhRb2JtRnRaU3dnYm1GdFpYTndZV05sS1R0Y2JpQWdJQ0IwYUdsekxtRnpjMlZ5ZEZabGNuTnBiMjRvYzJWamNtVjBMQ0IyWlhKemFXOXVLVHRjYmx4dUlDQWdJR052Ym5OMElISmhkeUE5SUhObFkzSmxkQzVrWVhSaFB5NWJVRUZaVEU5QlJGOUVRVlJCWDB0RldWMDdYRzRnSUNBZ2FXWWdLQ0Z5WVhjcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5Qk9iM1JHYjNWdVpFVnljbTl5S0Z4dUlDQWdJQ0FnSUNCZ1RtOGdjMlZqY21WMElIWmhiSFZsSUdadmRXNWtJR1p2Y2lCY0lpUjdibUZ0WlgxY0lpQnBiaUJ1WVcxbGMzQmhZMlVnWENJa2UyNWhiV1Z6Y0dGalpYMWNJbUJjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR1YwSUhCaGVXeHZZV1E2SUZObGNtbGhiR2w2WldSVFpXTnlaWFJRWVhsc2IyRmtPMXh1SUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0J3WVhsc2IyRmtJRDBnU2xOUFRpNXdZWEp6WlNoY2JpQWdJQ0FnSUNBZ1FuVm1abVZ5TG1aeWIyMG9jbUYzTENCY0ltSmhjMlUyTkZ3aUtTNTBiMU4wY21sdVp5aGNJblYwWmpoY0lpbGNiaUFnSUNBZ0lDa2dZWE1nVTJWeWFXRnNhWHBsWkZObFkzSmxkRkJoZVd4dllXUTdYRzRnSUNBZ2ZTQmpZWFJqYUNBb1pYSnliM0lwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCVFpXTnlaWFJGY25KdmNpaGNiaUFnSUNBZ0lDQWdYQ0pUUlVOU1JWUmZSRVZUUlZKSlFVeEpXa0ZVU1U5T1gwWkJTVXhGUkZ3aUxGeHVJQ0FnSUNBZ0lDQmdSbUZwYkdWa0lIUnZJSEJoY25ObElITmxZM0psZENCd1lYbHNiMkZrSUdadmNpQmNJaVI3Ym1GdFpYMWNJam9nSkhzb1pYSnliM0lnWVhNZ1JYSnliM0lwTG0xbGMzTmhaMlY5WUN4Y2JpQWdJQ0FnSUNBZ1pYSnliM0lnWVhNZ1JYSnliM0pjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlHUmxjMlZ5YVdGc2FYcGxVMlZqY21WMFVHRjViRzloWkNod1lYbHNiMkZrS1NCaGN5QlVPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdaR1ZzWlhSbEtGeHVJQ0FnSUc1aGJXVlBjbEpsWmpvZ1UyVmpjbVYwVG1GdFpTQjhJRk5sWTNKbGRGSmxabVZ5Wlc1alpTeGNiaUFnSUNCdmNIUnBiMjV6T2lCRVpXeGxkR1ZUWldOeVpYUlBjSFJwYjI1eklEMGdlMzBzWEc0Z0lDQWdMaTR1WVhKbmN6b2dUV0Y1WW1WRGIyNTBaWGgwZFdGc1FYSm5QR0Z1ZVQ1Y2JpQWdLVG9nVUhKdmJXbHpaVHgyYjJsa1BpQjdYRzRnSUNBZ1kyOXVjM1FnZXlCc2IyY2dmU0E5SUNoaGQyRnBkQ0IwYUdsekxteHZaME4wZUNoaGNtZHpMQ0JjSW1SbGJHVjBaVndpTENCMGNuVmxLU2t1Wm05eUtIUm9hWE11WkdWc1pYUmxLVHRjYmlBZ0lDQmpiMjV6ZENCN0lHNWhiV1VzSUc1aGJXVnpjR0ZqWlN3Z2RtVnljMmx2YmlCOUlEMGdkR2hwY3k1eVpYTnZiSFpsVW1WbVpYSmxibU5sS0Z4dUlDQWdJQ0FnYm1GdFpVOXlVbVZtTEZ4dUlDQWdJQ0FnYjNCMGFXOXVjMXh1SUNBZ0lDazdYRzRnSUNBZ2JHOW5MblpsY21KdmMyVW9ZRVJsYkdWMGFXNW5JSE5sWTNKbGRDQWtlMjVoYldWOUlHWnliMjBnYm1GdFpYTndZV05sSUNSN2JtRnRaWE53WVdObGZXQXBPMXh1WEc0Z0lDQWdhV1lnS0habGNuTnBiMjRwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJSE5sWTNKbGRDQTlJR0YzWVdsMElIUm9hWE11Y21WaFpGTmxZM0psZENodVlXMWxMQ0J1WVcxbGMzQmhZMlVwTzF4dUlDQWdJQ0FnZEdocGN5NWhjM05sY25SV1pYSnphVzl1S0hObFkzSmxkQ3dnZG1WeWMybHZiaWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUdGM1lXbDBJSFJvYVhNdVkyeHBaVzUwTG1SbGJHVjBaVTVoYldWemNHRmpaV1JUWldOeVpYUW9leUJ1WVcxbExDQnVZVzFsYzNCaFkyVWdmU2s3WEc0Z0lDQWdmU0JqWVhSamFDQW9aWEp5YjNJcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUhSb2FYTXVjR0Z5YzJWRmNuSnZjaWhsY25KdmNpazdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ1pYaHBjM1J6S0Z4dUlDQWdJRzVoYldWUGNsSmxaam9nVTJWamNtVjBUbUZ0WlNCOElGTmxZM0psZEZKbFptVnlaVzVqWlN4Y2JpQWdJQ0J2Y0hScGIyNXpPaUJGZUdsemRITlRaV055WlhSUGNIUnBiMjV6SUQwZ2UzMHNYRzRnSUNBZ0xpNHVZWEpuY3pvZ1RXRjVZbVZEYjI1MFpYaDBkV0ZzUVhKblBHRnVlVDVjYmlBZ0tUb2dVSEp2YldselpUeGliMjlzWldGdVBpQjdYRzRnSUNBZ1kyOXVjM1FnZXlCc2IyY2dmU0E5SUNoaGQyRnBkQ0IwYUdsekxteHZaME4wZUNoaGNtZHpMQ0JjSW1WNGFYTjBjMXdpTENCMGNuVmxLU2t1Wm05eUtIUm9hWE11WlhocGMzUnpLVHRjYmlBZ0lDQmpiMjV6ZENCN0lHNWhiV1VzSUc1aGJXVnpjR0ZqWlN3Z2RtVnljMmx2YmlCOUlEMGdkR2hwY3k1eVpYTnZiSFpsVW1WbVpYSmxibU5sS0Z4dUlDQWdJQ0FnYm1GdFpVOXlVbVZtTEZ4dUlDQWdJQ0FnYjNCMGFXOXVjMXh1SUNBZ0lDazdYRzRnSUNBZ2JHOW5MblpsY21KdmMyVW9ZRU5vWldOcmFXNW5JR2xtSUhObFkzSmxkQ0FrZTI1aGJXVjlJR1Y0YVhOMGN5QnBiaUJ1WVcxbGMzQmhZMlVnSkh0dVlXMWxjM0JoWTJWOVlDazdYRzVjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjMlZqY21WMElEMGdZWGRoYVhRZ2RHaHBjeTV5WldGa1UyVmpjbVYwS0c1aGJXVXNJRzVoYldWemNHRmpaU2s3WEc0Z0lDQWdJQ0IwYUdsekxtRnpjMlZ5ZEZabGNuTnBiMjRvYzJWamNtVjBMQ0IyWlhKemFXOXVLVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjBjblZsTzF4dUlDQWdJSDBnWTJGMFkyZ2dLR1Z5Y205eUtTQjdYRzRnSUNBZ0lDQnBaaUFvWlhKeWIzSWdhVzV6ZEdGdVkyVnZaaUJPYjNSR2IzVnVaRVZ5Y205eUtTQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdJQ0IwYUhKdmR5Qmxjbkp2Y2p0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCaGMzbHVZeUJzYVhOMEtGeHVJQ0FnSUc5d2RHbHZibk02SUV4cGMzUlRaV055WlhSelQzQjBhVzl1Y3lBOUlIdDlMRnh1SUNBZ0lDNHVMbUZ5WjNNNklFMWhlV0psUTI5dWRHVjRkSFZoYkVGeVp6eGhibmsrWEc0Z0lDazZJRkJ5YjIxcGMyVThVMlZqY21WMFRXVjBZV1JoZEdGYlhUNGdlMXh1SUNBZ0lHTnZibk4wSUhzZ2JHOW5JSDBnUFNBb1lYZGhhWFFnZEdocGN5NXNiMmREZEhnb1lYSm5jeXdnWENKc2FYTjBYQ0lzSUhSeWRXVXBLUzVtYjNJb2RHaHBjeTVzYVhOMEtUdGNiaUFnSUNCamIyNXpkQ0J1WVcxbGMzQmhZMlVnUFNCMGFHbHpMbkpsYzI5c2RtVk9ZVzFsYzNCaFkyVlBjSFJwYjI0b2IzQjBhVzl1Y3k1dVlXMWxjM0JoWTJVcE8xeHVJQ0FnSUd4dlp5NTJaWEppYjNObEtHQk1hWE4wYVc1bklITmxZM0psZEhNZ2FXNGdibUZ0WlhOd1lXTmxJQ1I3Ym1GdFpYTndZV05sZldBcE8xeHVYRzRnSUNBZ1kyOXVjM1FnY21WemRXeDBPaUJUWldOeVpYUk5aWFJoWkdGMFlWdGRJRDBnVzEwN1hHNGdJQ0FnYkdWMElHTnZiblJwYm5WbFZHOXJaVzQ2SUhOMGNtbHVaeUI4SUhWdVpHVm1hVzVsWkR0Y2JseHVJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQmtieUI3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEpsYzNCdmJuTmxJRDBnWVhkaGFYUWdkR2hwY3k1amJHbGxiblF1YkdsemRFNWhiV1Z6Y0dGalpXUlRaV055WlhRb2UxeHVJQ0FnSUNBZ0lDQWdJRzVoYldWemNHRmpaU3hjYmlBZ0lDQWdJQ0FnSUNCc1lXSmxiRk5sYkdWamRHOXlPaUJnSkh0TlFVNUJSMFZFWDB4QlFrVk1mVDEwY25WbFlDeGNiaUFnSUNBZ0lDQWdJQ0JzYVcxcGREb2dNVEF3TEZ4dUlDQWdJQ0FnSUNBZ0lGOWpiMjUwYVc1MVpUb2dZMjl1ZEdsdWRXVlViMnRsYml4Y2JpQWdJQ0FnSUNBZ2ZTazdYRzVjYmlBZ0lDQWdJQ0FnWm05eUlDaGpiMjV6ZENCelpXTnlaWFFnYjJZZ2NtVnpjRzl1YzJVdWFYUmxiWE1nZkh3Z1cxMHBJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYTjFiSFF1Y0hWemFDaDBhR2x6TG5SdlRXVjBZV1JoZEdFb2MyVmpjbVYwTENCdVlXMWxjM0JoWTJVcEtUdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUdOdmJuUnBiblZsVkc5clpXNGdQU0J5WlhOd2IyNXpaUzV0WlhSaFpHRjBZVDh1WDJOdmJuUnBiblZsTzF4dUlDQWdJQ0FnZlNCM2FHbHNaU0FvWTI5dWRHbHVkV1ZVYjJ0bGJpazdYRzRnSUNBZ2ZTQmpZWFJqYUNBb1pYSnliM0lwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJSFJvYVhNdWNHRnljMlZGY25KdmNpaGxjbkp2Y2lrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWTI5dWMzUWdabWxzZEdWeVpXUWdQU0J5WlhOMWJIUXVabWxzZEdWeUtDaHRaWFJoS1NBOVBpQjdYRzRnSUNBZ0lDQnBaaUFvYjNCMGFXOXVjeTVsYm1GaWJHVmtJRDA5UFNCbVlXeHpaU2tnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUNBZ2FXWWdLQ0Z2Y0hScGIyNXpMblJoWjNNcElISmxkSFZ5YmlCMGNuVmxPMXh1SUNBZ0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1bGJuUnlhV1Z6S0c5d2RHbHZibk11ZEdGbmN5a3VaWFpsY25rb1hHNGdJQ0FnSUNBZ0lDaGJhMlY1TENCMllXeDFaVjBwSUQwK0lHMWxkR0V1ZEdGbmN6OHVXMnRsZVYwZ1BUMDlJSFpoYkhWbFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgwcE8xeHVYRzRnSUNBZ1kyOXVjM1FnYjJabWMyVjBJRDBnYjNCMGFXOXVjeTV2Wm1aelpYUWdQejhnTUR0Y2JpQWdJQ0JqYjI1emRDQmxibVFnUFZ4dUlDQWdJQ0FnZEhsd1pXOW1JRzl3ZEdsdmJuTXViR2x0YVhRZ1BUMDlJRndpYm5WdFltVnlYQ0lnUHlCdlptWnpaWFFnS3lCdmNIUnBiMjV6TG14cGJXbDBJRG9nZFc1a1pXWnBibVZrTzF4dUlDQWdJSEpsZEhWeWJpQm1hV3gwWlhKbFpDNXpiR2xqWlNodlptWnpaWFFzSUdWdVpDazdYRzRnSUgxY2JseHVJQ0JoYzNsdVl5QnRaWFJoWkdGMFlTaGNiaUFnSUNCdVlXMWxUM0pTWldZNklGTmxZM0psZEU1aGJXVWdmQ0JUWldOeVpYUlNaV1psY21WdVkyVXNYRzRnSUNBZ2IzQjBhVzl1Y3pvZ1UyVmpjbVYwVFdWMFlXUmhkR0ZQY0hScGIyNXpJRDBnZTMwc1hHNGdJQ0FnTGk0dVlYSm5jem9nVFdGNVltVkRiMjUwWlhoMGRXRnNRWEpuUEdGdWVUNWNiaUFnS1RvZ1VISnZiV2x6WlR4VFpXTnlaWFJOWlhSaFpHRjBZU0I4SUhWdVpHVm1hVzVsWkQ0Z2UxeHVJQ0FnSUdOdmJuTjBJSHNnYkc5bklIMGdQU0FvWVhkaGFYUWdkR2hwY3k1c2IyZERkSGdvWVhKbmN5d2dYQ0p0WlhSaFpHRjBZVndpTENCMGNuVmxLU2t1Wm05eUtGeHVJQ0FnSUNBZ2RHaHBjeTV0WlhSaFpHRjBZVnh1SUNBZ0lDazdYRzRnSUNBZ1kyOXVjM1FnZXlCdVlXMWxMQ0J1WVcxbGMzQmhZMlVzSUhabGNuTnBiMjRnZlNBOUlIUm9hWE11Y21WemIyeDJaVkpsWm1WeVpXNWpaU2hjYmlBZ0lDQWdJRzVoYldWUGNsSmxaaXhjYmlBZ0lDQWdJRzl3ZEdsdmJuTmNiaUFnSUNBcE8xeHVJQ0FnSUd4dlp5NTJaWEppYjNObEtHQkhaWFIwYVc1bklHMWxkR0ZrWVhSaElHWnZjaUJ6WldOeVpYUWdKSHR1WVcxbGZTQnBiaUJ1WVcxbGMzQmhZMlVnSkh0dVlXMWxjM0JoWTJWOVlDazdYRzVjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjMlZqY21WMElEMGdZWGRoYVhRZ2RHaHBjeTV5WldGa1UyVmpjbVYwS0c1aGJXVXNJRzVoYldWemNHRmpaU2s3WEc0Z0lDQWdJQ0IwYUdsekxtRnpjMlZ5ZEZabGNuTnBiMjRvYzJWamNtVjBMQ0IyWlhKemFXOXVLVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG5SdlRXVjBZV1JoZEdFb2MyVmpjbVYwTENCdVlXMWxjM0JoWTJVcE8xeHVJQ0FnSUgwZ1kyRjBZMmdnS0dWeWNtOXlLU0I3WEc0Z0lDQWdJQ0JwWmlBb1pYSnliM0lnYVc1emRHRnVZMlZ2WmlCT2IzUkdiM1Z1WkVWeWNtOXlLU0J5WlhSMWNtNGdkVzVrWldacGJtVmtPMXh1SUNBZ0lDQWdkR2h5YjNjZ1pYSnliM0k3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnWVhONWJtTWdjbTkwWVhSbFBGUWdaWGgwWlc1a2N5QlRaV055WlhSUVlYbHNiMkZrSUQwZ1UyVmpjbVYwVUdGNWJHOWhaRDRvWEc0Z0lDQWdibUZ0WlU5eVVtVm1PaUJUWldOeVpYUk9ZVzFsSUh3Z1UyVmpjbVYwVW1WbVpYSmxibU5sTEZ4dUlDQWdJSFpoYkhWbE9pQlVMRnh1SUNBZ0lHOXdkR2x2Ym5NNklGSnZkR0YwWlZObFkzSmxkRTl3ZEdsdmJuTWdQU0I3ZlN4Y2JpQWdJQ0F1TGk1aGNtZHpPaUJOWVhsaVpVTnZiblJsZUhSMVlXeEJjbWM4WVc1NVBseHVJQ0FwT2lCUWNtOXRhWE5sUEZObFkzSmxkRkpsWm1WeVpXNWpaVDRnZTF4dUlDQWdJR052Ym5OMElIc2dibUZ0WlN3Z2JtRnRaWE53WVdObElIMGdQU0IwYUdsekxuSmxjMjlzZG1WU1pXWmxjbVZ1WTJVb2JtRnRaVTl5VW1WbUxDQnZjSFJwYjI1ektUdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXpkRzl5WlNoY2JpQWdJQ0FnSUc1aGJXVXNYRzRnSUNBZ0lDQjJZV3gxWlN4Y2JpQWdJQ0FnSUhzZ2RtVnljMmx2YmpvZ2IzQjBhVzl1Y3k1dVpYZFdaWEp6YVc5dUxDQnVZVzFsYzNCaFkyVWdmU3hjYmlBZ0lDQWdJQzR1TG1GeVozTmNiaUFnSUNBcE8xeHVJQ0I5WEc1Y2JpQWdjSEpwZG1GMFpTQmlkV2xzWkV0MVltVkRiMjVtYVdjb1kyOXVabWxuT2lCTGRXSmxjbTVsZEdWelUyVmpjbVYwVTJWeWRtbGpaVU52Ym1acFp5azZJRXQxWW1WRGIyNW1hV2NnZTF4dUlDQWdJR052Ym5OMElHdDFZbVZEYjI1bWFXY2dQU0J1WlhjZ1MzVmlaVU52Ym1acFp5Z3BPMXh1SUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0JwWmlBb1kyOXVabWxuTG5ObGNuWnBZMlZCWTJOdmRXNTBLU0I3WEc0Z0lDQWdJQ0FnSUd0MVltVkRiMjVtYVdjdWJHOWhaRVp5YjIxRGJIVnpkR1Z5S0NrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHTnZibVpwWnk1elpYSjJaWElwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTJ4MWMzUmxjazVoYldVZ1BTQmNJbVJsWTJGbUxXTnNkWE4wWlhKY0lqdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2RYTmxjazVoYldVZ1BTQmNJbVJsWTJGbUxYVnpaWEpjSWp0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTI5dWRHVjRkRTVoYldVZ1BTQmNJbVJsWTJGbUxXTnZiblJsZUhSY0lqdGNiaUFnSUNBZ0lDQWdhM1ZpWlVOdmJtWnBaeTVzYjJGa1JuSnZiVTl3ZEdsdmJuTW9lMXh1SUNBZ0lDQWdJQ0FnSUdOc2RYTjBaWEp6T2lCYlhHNGdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJRzVoYldVNklHTnNkWE4wWlhKT1lXMWxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnpaWEoyWlhJNklHTnZibVpwWnk1elpYSjJaWElzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR05oUkdGMFlUb2dZMjl1Wm1sbkxtTmhSR0YwWVN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJGR2FXeGxPaUJqYjI1bWFXY3VZMkZHYVd4bExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCemEybHdWRXhUVm1WeWFXWjVPaUJqYjI1bWFXY3VjMnRwY0ZSTVUxWmxjbWxtZVN4Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUNBZ1hTeGNiaUFnSUNBZ0lDQWdJQ0IxYzJWeWN6b2dXMXh1SUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCdVlXMWxPaUIxYzJWeVRtRnRaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkRzlyWlc0NklHTnZibVpwWnk1MGIydGxiaXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkRzlyWlc1R2FXeGxPaUJqYjI1bWFXY3VkRzlyWlc1R2FXeGxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmpaWEowUkdGMFlUb2dZMjl1Wm1sbkxtTmxjblJFWVhSaExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCalpYSjBSbWxzWlRvZ1kyOXVabWxuTG1ObGNuUkdhV3hsTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JyWlhsRVlYUmhPaUJqYjI1bWFXY3VhMlY1UkdGMFlTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2EyVjVSbWxzWlRvZ1kyOXVabWxuTG10bGVVWnBiR1VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUYwc1hHNGdJQ0FnSUNBZ0lDQWdZMjl1ZEdWNGRITTZJRnRjYmlBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2JtRnRaVG9nWTI5dWRHVjRkRTVoYldVc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdOc2RYTjBaWEk2SUdOc2RYTjBaWEpPWVcxbExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCMWMyVnlPaUIxYzJWeVRtRnRaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdibUZ0WlhOd1lXTmxPaUJqYjI1bWFXY3VibUZ0WlhOd1lXTmxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0JkTEZ4dUlDQWdJQ0FnSUNBZ0lHTjFjbkpsYm5SRGIyNTBaWGgwT2lCamIyNTBaWGgwVG1GdFpTeGNiaUFnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOdmJtWnBaeTVyZFdKbFkyOXVabWxuS1NCN1hHNGdJQ0FnSUNBZ0lHdDFZbVZEYjI1bWFXY3ViRzloWkVaeWIyMUdhV3hsS0dOdmJtWnBaeTVyZFdKbFkyOXVabWxuS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUd0MVltVkRiMjVtYVdjdWJHOWhaRVp5YjIxRVpXWmhkV3gwS0NrN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHbG1JQ2hqYjI1bWFXY3VZMjl1ZEdWNGRDa2dlMXh1SUNBZ0lDQWdJQ0JyZFdKbFEyOXVabWxuTG5ObGRFTjFjbkpsYm5SRGIyNTBaWGgwS0dOdmJtWnBaeTVqYjI1MFpYaDBLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR05oZEdOb0lDaGxjbkp2Y2lrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnZEdocGN5NXdZWEp6WlVWeWNtOXlLR1Z5Y205eUtUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR3QxWW1WRGIyNW1hV2M3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUhKbGMyOXNkbVZPWVcxbGMzQmhZMlVvWEc0Z0lDQWdZMjl1Wm1sbk9pQkxkV0psY201bGRHVnpVMlZqY21WMFUyVnlkbWxqWlVOdmJtWnBaeXhjYmlBZ0lDQnJkV0psUTI5dVptbG5PaUJMZFdKbFEyOXVabWxuWEc0Z0lDazZJSE4wY21sdVp5QjdYRzRnSUNBZ1kyOXVjM1FnYm1GdFpYTndZV05sSUQxY2JpQWdJQ0FnSUdOdmJtWnBaeTV1WVcxbGMzQmhZMlVnZkh4Y2JpQWdJQ0FnSUd0MVltVkRiMjVtYVdjdVoyVjBRMjl1ZEdWNGRFOWlhbVZqZENocmRXSmxRMjl1Wm1sbkxtZGxkRU4xY25KbGJuUkRiMjUwWlhoMEtDa3BQeTV1WVcxbGMzQmhZMlVnZkh4Y2JpQWdJQ0FnSUZ3aVpHVm1ZWFZzZEZ3aU8xeHVJQ0FnSUdGemMyVnlkRXQxWW1WeWJtVjBaWE5PWVcxbGMzQmhZMlVvYm1GdFpYTndZV05sS1R0Y2JpQWdJQ0J5WlhSMWNtNGdibUZ0WlhOd1lXTmxPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J5WlhOdmJIWmxUbUZ0WlhOd1lXTmxUM0IwYVc5dUtHNWhiV1Z6Y0dGalpUODZJSE4wY21sdVp5azZJSE4wY21sdVp5QjdYRzRnSUNBZ1kyOXVjM1FnY21WemIyeDJaV1FnUFNCdVlXMWxjM0JoWTJVZ2ZId2dkR2hwY3k1amIyNW1hV2N1Ym1GdFpYTndZV05sSUh4OElGd2laR1ZtWVhWc2RGd2lPMXh1SUNBZ0lHRnpjMlZ5ZEV0MVltVnlibVYwWlhOT1lXMWxjM0JoWTJVb2NtVnpiMngyWldRcE8xeHVJQ0FnSUhKbGRIVnliaUJ5WlhOdmJIWmxaRHRjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnY21WemIyeDJaVkpsWm1WeVpXNWpaU2hjYmlBZ0lDQnVZVzFsVDNKU1pXWTZJRk5sWTNKbGRFNWhiV1VnZkNCVFpXTnlaWFJTWldabGNtVnVZMlVzWEc0Z0lDQWdiM0IwYVc5dWN6b2dlMXh1SUNBZ0lDQWdibUZ0WlhOd1lXTmxQem9nYzNSeWFXNW5PMXh1SUNBZ0lDQWdkbVZ5YzJsdmJqODZJSE4wY21sdVp6dGNiaUFnSUNCOVhHNGdJQ2s2SUhzZ2JtRnRaVG9nYzNSeWFXNW5PeUJ1WVcxbGMzQmhZMlU2SUhOMGNtbHVaenNnZG1WeWMybHZiajg2SUhOMGNtbHVaeUI5SUh0Y2JpQWdJQ0JqYjI1emRDQnVZVzFsSUQxY2JpQWdJQ0FnSUhSNWNHVnZaaUJ1WVcxbFQzSlNaV1lnUFQwOUlGd2ljM1J5YVc1blhDSWdQeUJ1WVcxbFQzSlNaV1lnT2lCdVlXMWxUM0pTWldZdWJtRnRaVHRjYmlBZ0lDQmpiMjV6ZENCdVlXMWxjM0JoWTJVZ1BWeHVJQ0FnSUNBZ2IzQjBhVzl1Y3k1dVlXMWxjM0JoWTJVZ2ZIeGNiaUFnSUNBZ0lDaDBlWEJsYjJZZ2JtRnRaVTl5VW1WbUlEMDlQU0JjSW5OMGNtbHVaMXdpSUQ4Z2RXNWtaV1pwYm1Wa0lEb2dibUZ0WlU5eVVtVm1MbTVoYldWemNHRmpaU2tnZkh4Y2JpQWdJQ0FnSUhSb2FYTXVZMjl1Wm1sbkxtNWhiV1Z6Y0dGalpTQjhmRnh1SUNBZ0lDQWdYQ0prWldaaGRXeDBYQ0k3WEc0Z0lDQWdZWE56WlhKMFMzVmlaWEp1WlhSbGMwNWhiV1Z6Y0dGalpTaHVZVzFsYzNCaFkyVXBPMXh1SUNBZ0lHTnZibk4wSUhabGNuTnBiMjRnUFZ4dUlDQWdJQ0FnYjNCMGFXOXVjeTUyWlhKemFXOXVJSHg4WEc0Z0lDQWdJQ0FvZEhsd1pXOW1JRzVoYldWUGNsSmxaaUE5UFQwZ1hDSnpkSEpwYm1kY0lpQS9JSFZ1WkdWbWFXNWxaQ0E2SUc1aGJXVlBjbEpsWmk1MlpYSnphVzl1S1R0Y2JpQWdJQ0J5WlhSMWNtNGdleUJ1WVcxbE9pQjBhR2x6TG01dmNtMWhiR2w2WlU1aGJXVW9ibUZ0WlNrc0lHNWhiV1Z6Y0dGalpTd2dkbVZ5YzJsdmJpQjlPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J1YjNKdFlXeHBlbVZPWVcxbEtHNWhiV1U2SUhOMGNtbHVaeWs2SUhOMGNtbHVaeUI3WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUhaaGJHbGtZWFJsVTJWamNtVjBUbUZ0WlNodVlXMWxLVHRjYmlBZ0lDQjlJR05oZEdOb0lDaGxjbkp2Y2lrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnZEdocGN5NXdZWEp6WlVWeWNtOXlLR1Z5Y205eUlHRnpJRVZ5Y205eUtUdGNiaUFnSUNCOVhHNGdJQ0FnWTI5dWMzUWdibTl5YldGc2FYcGxaRTVoYldVZ1BTQnViM0p0WVd4cGVtVlRaV055WlhST1lXMWxLRzVoYldVcE8xeHVJQ0FnSUdGemMyVnlkRXQxWW1WeWJtVjBaWE5PWVcxbEtHNXZjbTFoYkdsNlpXUk9ZVzFsS1R0Y2JpQWdJQ0J5WlhSMWNtNGdibTl5YldGc2FYcGxaRTVoYldVN1hHNGdJSDFjYmx4dUlDQndjbWwyWVhSbElHSjFhV3hrVTJWamNtVjBLRnh1SUNBZ0lHNWhiV1U2SUhOMGNtbHVaeXhjYmlBZ0lDQnVZVzFsYzNCaFkyVTZJSE4wY21sdVp5eGNiaUFnSUNCelpYSnBZV3hwZW1Wa09pQlRaWEpwWVd4cGVtVmtVMlZqY21WMFVHRjViRzloWkN4Y2JpQWdJQ0J2Y0hScGIyNXpPaUJUZEc5eVpWTmxZM0psZEU5d2RHbHZibk5jYmlBZ0tUb2dWakZUWldOeVpYUWdlMXh1SUNBZ0lHTnZibk4wSUdGdWJtOTBZWFJwYjI1ek9pQlNaV052Y21ROGMzUnlhVzVuTENCemRISnBibWMrSUQwZ2UxeHVJQ0FnSUNBZ1cwVk9RMDlFU1U1SFgwRk9UazlVUVZSSlQwNWRPaUJ6WlhKcFlXeHBlbVZrTG1WdVkyOWthVzVuTEZ4dUlDQWdJQ0FnVzFWUVJFRlVSVVJmUVZSZlFVNU9UMVJCVkVsUFRsMDZJRzVsZHlCRVlYUmxLQ2t1ZEc5SlUwOVRkSEpwYm1jb0tTeGNiaUFnSUNCOU8xeHVYRzRnSUNBZ2FXWWdLRzl3ZEdsdmJuTXVZMjl1ZEdWdWRGUjVjR1VwSUh0Y2JpQWdJQ0FnSUdGdWJtOTBZWFJwYjI1elcwTlBUbFJGVGxSZlZGbFFSVjlCVGs1UFZFRlVTVTlPWFNBOUlHOXdkR2x2Ym5NdVkyOXVkR1Z1ZEZSNWNHVTdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaHZjSFJwYjI1ekxuUmhaM01wSUh0Y2JpQWdJQ0FnSUdGdWJtOTBZWFJwYjI1elcxUkJSMU5mUVU1T1QxUkJWRWxQVGwwZ1BTQktVMDlPTG5OMGNtbHVaMmxtZVNodmNIUnBiMjV6TG5SaFozTXBPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9iM0IwYVc5dWN5NTJaWEp6YVc5dUtTQjdYRzRnSUNBZ0lDQmhibTV2ZEdGMGFXOXVjMXRXUlZKVFNVOU9YMEZPVGs5VVFWUkpUMDVkSUQwZ2IzQjBhVzl1Y3k1MlpYSnphVzl1TzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvYjNCMGFXOXVjeTUwWlc1aGJuUkpaQ2tnZTF4dUlDQWdJQ0FnWVc1dWIzUmhkR2x2Ym5OYlZFVk9RVTVVWDBGT1RrOVVRVlJKVDA1ZElEMGdiM0IwYVc5dWN5NTBaVzVoYm5SSlpEdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tHOXdkR2x2Ym5NdWIzSm5WVzVwZEVsa0tTQjdYRzRnSUNBZ0lDQmhibTV2ZEdGMGFXOXVjMXRQVWtkZlZVNUpWRjlCVGs1UFZFRlVTVTlPWFNBOUlHOXdkR2x2Ym5NdWIzSm5WVzVwZEVsa08xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2IzQjBhVzl1Y3k1dmQyNWxjbEJ5YVc1amFYQmhiRWxrS1NCN1hHNGdJQ0FnSUNCaGJtNXZkR0YwYVc5dWMxdFBWMDVGVWw5QlRrNVBWRUZVU1U5T1hTQTlJRzl3ZEdsdmJuTXViM2R1WlhKUWNtbHVZMmx3WVd4SlpEdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnZTF4dUlDQWdJQ0FnWVhCcFZtVnljMmx2YmpvZ1hDSjJNVndpTEZ4dUlDQWdJQ0FnYTJsdVpEb2dYQ0pUWldOeVpYUmNJaXhjYmlBZ0lDQWdJSFI1Y0dVNklGd2lUM0JoY1hWbFhDSXNYRzRnSUNBZ0lDQnRaWFJoWkdGMFlUb2dlMXh1SUNBZ0lDQWdJQ0J1WVcxbExGeHVJQ0FnSUNBZ0lDQnVZVzFsYzNCaFkyVXNYRzRnSUNBZ0lDQWdJR3hoWW1Wc2N6b2dlMXh1SUNBZ0lDQWdJQ0FnSUZ0TlFVNUJSMFZFWDB4QlFrVk1YVG9nWENKMGNuVmxYQ0lzWEc0Z0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNBZ0lHRnVibTkwWVhScGIyNXpMRnh1SUNBZ0lDQWdmU3hjYmlBZ0lDQWdJSE4wY21sdVowUmhkR0U2SUh0Y2JpQWdJQ0FnSUNBZ1cxQkJXVXhQUVVSZlJFRlVRVjlMUlZsZE9pQktVMDlPTG5OMGNtbHVaMmxtZVNoelpYSnBZV3hwZW1Wa0tTeGNiaUFnSUNBZ0lIMHNYRzRnSUNBZ2ZUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdZWE41Ym1NZ2NtVmhaRk5sWTNKbGRDaGNiaUFnSUNCdVlXMWxPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2JtRnRaWE53WVdObE9pQnpkSEpwYm1kY2JpQWdLVG9nVUhKdmJXbHpaVHhXTVZObFkzSmxkRDRnZTF4dUlDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWVhkaGFYUWdkR2hwY3k1amJHbGxiblF1Y21WaFpFNWhiV1Z6Y0dGalpXUlRaV055WlhRb2V5QnVZVzFsTENCdVlXMWxjM0JoWTJVZ2ZTazdYRzRnSUNBZ2ZTQmpZWFJqYUNBb1pYSnliM0lwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJSFJvYVhNdWNHRnljMlZGY25KdmNpaGxjbkp2Y2lrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCaGMzTmxjblJXWlhKemFXOXVLSE5sWTNKbGREb2dWakZUWldOeVpYUXNJSFpsY25OcGIyNC9PaUJ6ZEhKcGJtY3BPaUIyYjJsa0lIdGNiaUFnSUNCcFppQW9JWFpsY25OcGIyNHBJSEpsZEhWeWJqdGNiaUFnSUNCamIyNXpkQ0J6ZEc5eVpXUWdQU0J6WldOeVpYUXViV1YwWVdSaGRHRS9MbUZ1Ym05MFlYUnBiMjV6UHk1YlZrVlNVMGxQVGw5QlRrNVBWRUZVU1U5T1hUdGNiaUFnSUNCcFppQW9jM1J2Y21Wa0lDRTlQU0IyWlhKemFXOXVLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnVG05MFJtOTFibVJGY25KdmNpaGNiaUFnSUNBZ0lDQWdZRk5sWTNKbGRDQmNJaVI3YzJWamNtVjBMbTFsZEdGa1lYUmhQeTV1WVcxbGZWd2lJSFpsY25OcGIyNGdYQ0lrZTNabGNuTnBiMjU5WENJZ2JtOTBJR1p2ZFc1a1lGeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQndjbWwyWVhSbElIUnZUV1YwWVdSaGRHRW9jMlZqY21WME9pQldNVk5sWTNKbGRDd2dibUZ0WlhOd1lXTmxPaUJ6ZEhKcGJtY3BPaUJUWldOeVpYUk5aWFJoWkdGMFlTQjdYRzRnSUNBZ1kyOXVjM1FnWVc1dWIzUmhkR2x2Ym5NZ1BTQnpaV055WlhRdWJXVjBZV1JoZEdFL0xtRnVibTkwWVhScGIyNXpJSHg4SUh0OU8xeHVJQ0FnSUdOdmJuTjBJSFZ3WkdGMFpXUkJkQ0E5SUdGdWJtOTBZWFJwYjI1elcxVlFSRUZVUlVSZlFWUmZRVTVPVDFSQlZFbFBUbDA3WEc0Z0lDQWdZMjl1YzNRZ2JtRnRaU0E5SUhObFkzSmxkQzV0WlhSaFpHRjBZVDh1Ym1GdFpTQjhmQ0JjSWx3aU8xeHVJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0J3Y205MmFXUmxjam9nZEdocGN5NXdjbTkyYVdSbGNpeGNiaUFnSUNBZ0lHNWhiV1VzWEc0Z0lDQWdJQ0IyWlhKemFXOXVPaUJoYm01dmRHRjBhVzl1YzF0V1JWSlRTVTlPWDBGT1RrOVVRVlJKVDA1ZExGeHVJQ0FnSUNBZ1kzSmxZWFJsWkVGME9pQjBiMFJoZEdVb2MyVmpjbVYwTG0xbGRHRmtZWFJoUHk1amNtVmhkR2x2YmxScGJXVnpkR0Z0Y0Nrc1hHNGdJQ0FnSUNCMWNHUmhkR1ZrUVhRNklIVndaR0YwWldSQmRGeHVJQ0FnSUNBZ0lDQS9JRzVsZHlCRVlYUmxLSFZ3WkdGMFpXUkJkQ2xjYmlBZ0lDQWdJQ0FnT2lCMGIwUmhkR1VvYzJWamNtVjBMbTFsZEdGa1lYUmhQeTVqY21WaGRHbHZibFJwYldWemRHRnRjQ2tzWEc0Z0lDQWdJQ0JsYm1GaWJHVmtPaUIwY25WbExGeHVJQ0FnSUNBZ1kyOXVkR1Z1ZEZSNWNHVTZJR0Z1Ym05MFlYUnBiMjV6VzBOUFRsUkZUbFJmVkZsUVJWOUJUazVQVkVGVVNVOU9YU3hjYmlBZ0lDQWdJSFJoWjNNNklIQmhjbk5sVkdGbmN5aGhibTV2ZEdGMGFXOXVjMXRVUVVkVFgwRk9UazlVUVZSSlQwNWRLU3hjYmlBZ0lDQWdJR1Y0ZEdWeWJtRnNTV1E2SUhObFkzSmxkQzV0WlhSaFpHRjBZVDh1ZFdsa0xGeHVJQ0FnSUNBZ2RYSnBPaUJnYTNWaVpYSnVaWFJsY3pvdkx5UjdibUZ0WlhOd1lXTmxmUzhrZTI1aGJXVjlZQ3hjYmlBZ0lDQjlPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J6ZEdGMGRYTlBaaWhsY25KdmNqb2dkVzVyYm05M2JpazZJRzUxYldKbGNpQjhJSFZ1WkdWbWFXNWxaQ0I3WEc0Z0lDQWdhV1lnS0dWeWNtOXlJR2x1YzNSaGJtTmxiMllnUVhCcFJYaGpaWEIwYVc5dUtTQnlaWFIxY200Z1pYSnliM0l1WTI5a1pUdGNiaUFnSUNCamIyNXpkQ0JqWVc1a2FXUmhkR1VnUFNCbGNuSnZjaUJoY3lCN0lHTnZaR1UvT2lCMWJtdHViM2R1T3lCemRHRjBkWE5EYjJSbFB6b2dkVzVyYm05M2JpQjlPMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdZMkZ1Wkdsa1lYUmxQeTVqYjJSbElEMDlQU0JjSW01MWJXSmxjbHdpS1NCeVpYUjFjbTRnWTJGdVpHbGtZWFJsTG1OdlpHVTdYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQmpZVzVrYVdSaGRHVS9Mbk4wWVhSMWMwTnZaR1VnUFQwOUlGd2liblZ0WW1WeVhDSXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmpZVzVrYVdSaGRHVXVjM1JoZEhWelEyOWtaVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhWdVpHVm1hVzVsWkR0Y2JpQWdmVnh1WEc0Z0lIQnlhWFpoZEdVZ2JXVnpjMkZuWlU5bUtHVnljbTl5T2lCMWJtdHViM2R1S1RvZ2MzUnlhVzVuSUh0Y2JpQWdJQ0JqYjI1emRDQmxjbklnUFNCbGNuSnZjaUJoY3lCN1hHNGdJQ0FnSUNCdFpYTnpZV2RsUHpvZ2MzUnlhVzVuTzF4dUlDQWdJQ0FnYm1GdFpUODZJSE4wY21sdVp6dGNiaUFnSUNBZ0lHSnZaSGsvT2lCN0lHMWxjM05oWjJVL09pQnpkSEpwYm1jN0lISmxZWE52Ymo4NklITjBjbWx1WnlCOU8xeHVJQ0FnSUgwN1hHNGdJQ0FnY21WMGRYSnVJR1Z5Y2o4dVltOWtlVDh1YldWemMyRm5aU0I4ZkNCbGNuSS9MbUp2WkhrL0xuSmxZWE52YmlCOGZDQmxjbkkvTG0xbGMzTmhaMlVnZkh3Z1pYSnlQeTV1WVcxbElIeDhJRndpVlc1cmJtOTNiaUJsY25KdmNsd2lPMXh1SUNCOVhHNWNiaUFnY0hKdmRHVmpkR1ZrSUhCaGNuTmxSWEp5YjNJb1pYSnliM0k2SUhWdWEyNXZkMjRwT2lCRmNuSnZjaUI3WEc0Z0lDQWdhV1lnS0dWeWNtOXlJR2x1YzNSaGJtTmxiMllnUW1GelpVVnljbTl5S1NCeVpYUjFjbTRnWlhKeWIzSTdYRzRnSUNBZ1kyOXVjM1FnYzNSaGRIVnpJRDBnZEdocGN5NXpkR0YwZFhOUFppaGxjbkp2Y2lrN1hHNGdJQ0FnWTI5dWMzUWdiV1Z6YzJGblpTQTlJSFJvYVhNdWJXVnpjMkZuWlU5bUtHVnljbTl5S1R0Y2JpQWdJQ0JqYjI1emRDQnNiM2RsY2sxbGMzTmhaMlVnUFNCdFpYTnpZV2RsTG5SdlRHOTNaWEpEWVhObEtDazdYRzVjYmlBZ0lDQnBaaUFvWEc0Z0lDQWdJQ0J6ZEdGMGRYTWdQVDA5SURRd05DQjhmRnh1SUNBZ0lDQWdiRzkzWlhKTlpYTnpZV2RsTG1sdVkyeDFaR1Z6S0Z3aWJtOTBJR1p2ZFc1a1hDSXBJSHg4WEc0Z0lDQWdJQ0JzYjNkbGNrMWxjM05oWjJVdWFXNWpiSFZrWlhNb1hDSTBNRFJjSWlsY2JpQWdJQ0FwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1RtOTBSbTkxYm1SRmNuSnZjaWh0WlhOellXZGxLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvWEc0Z0lDQWdJQ0J6ZEdGMGRYTWdQVDA5SURRd09TQjhmRnh1SUNBZ0lDQWdiRzkzWlhKTlpYTnpZV2RsTG1sdVkyeDFaR1Z6S0Z3aVlXeHlaV0ZrZVNCbGVHbHpkSE5jSWlrZ2ZIeGNiaUFnSUNBZ0lHeHZkMlZ5VFdWemMyRm5aUzVwYm1Oc2RXUmxjeWhjSW1OdmJtWnNhV04wWENJcElIeDhYRzRnSUNBZ0lDQnNiM2RsY2sxbGMzTmhaMlV1YVc1amJIVmtaWE1vWENJME1EbGNJaWxjYmlBZ0lDQXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnUTI5dVpteHBZM1JGY25KdmNpaHRaWE56WVdkbEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9jM1JoZEhWeklEMDlQU0EwTURFZ2ZId2diRzkzWlhKTlpYTnpZV2RsTG1sdVkyeDFaR1Z6S0Z3aWRXNWhkWFJvYjNKcGVtVmtYQ0lwS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lFRjFkR2h2Y21sNllYUnBiMjVGY25KdmNpaGdRWFYwYUdWdWRHbGpZWFJwYjI0Z1ptRnBiR1ZrT2lBa2UyMWxjM05oWjJWOVlDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLSE4wWVhSMWN5QTlQVDBnTkRBeklIeDhJR3h2ZDJWeVRXVnpjMkZuWlM1cGJtTnNkV1JsY3loY0ltWnZjbUpwWkdSbGJsd2lLU2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJRzVsZHlCQmRYUm9iM0pwZW1GMGFXOXVSWEp5YjNJb1lGQmxjbTFwYzNOcGIyNGdaR1Z1YVdWa09pQWtlMjFsYzNOaFoyVjlZQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0Z4dUlDQWdJQ0FnYzNSaGRIVnpJRDA5UFNBME1EQWdmSHhjYmlBZ0lDQWdJSE4wWVhSMWN5QTlQVDBnTkRJeUlIeDhYRzRnSUNBZ0lDQnNiM2RsY2sxbGMzTmhaMlV1YVc1amJIVmtaWE1vWENKaVlXUWdjbVZ4ZFdWemRGd2lLVnh1SUNBZ0lDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJDWVdSU1pYRjFaWE4wUlhKeWIzSW9iV1Z6YzJGblpTazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLSE4wWVhSMWN5QTlQVDBnTkRJNUlIeDhJR3h2ZDJWeVRXVnpjMkZuWlM1cGJtTnNkV1JsY3loY0luSmhkR1VnYkdsdGFYUmNJaWtwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1UyVmpjbVYwUlhKeWIzSW9YRzRnSUNBZ0lDQWdJRndpVTBWRFVrVlVYMUJTVDFaSlJFVlNYMUpCVkVWZlRFbE5TVlJGUkZ3aUxGeHVJQ0FnSUNBZ0lDQmdVbUYwWlNCc2FXMXBkR1ZrT2lBa2UyMWxjM05oWjJWOVlDeGNiaUFnSUNBZ0lDQWdaWEp5YjNJZ1lYTWdSWEp5YjNKY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tGeHVJQ0FnSUNBZ2MzUmhkSFZ6SUQwOVBTQjFibVJsWm1sdVpXUWdmSHhjYmlBZ0lDQWdJQ2h6ZEdGMGRYTWdJVDA5SUhWdVpHVm1hVzVsWkNBbUppQnpkR0YwZFhNZ1BqMGdOVEF3S1NCOGZGeHVJQ0FnSUNBZ2JHOTNaWEpOWlhOellXZGxMbWx1WTJ4MVpHVnpLRndpWTI5dWJtVmpkR2x2Ymx3aUtTQjhmRnh1SUNBZ0lDQWdiRzkzWlhKTlpYTnpZV2RsTG1sdVkyeDFaR1Z6S0Z3aWRHbHRaVzkxZEZ3aUtTQjhmRnh1SUNBZ0lDQWdiRzkzWlhKTlpYTnpZV2RsTG1sdVkyeDFaR1Z6S0Z3aWRXNWhkbUZwYkdGaWJHVmNJaWxjYmlBZ0lDQXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnVTJWamNtVjBSWEp5YjNJb1hHNGdJQ0FnSUNBZ0lGd2lVMFZEVWtWVVgxQlNUMVpKUkVWU1gxVk9RVlpCU1V4QlFreEZYQ0lzWEc0Z0lDQWdJQ0FnSUdCUWNtOTJhV1JsY2lCMWJtRjJZV2xzWVdKc1pUb2dKSHR0WlhOellXZGxmV0FzWEc0Z0lDQWdJQ0FnSUdWeWNtOXlJR0Z6SUVWeWNtOXlYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dTVzUwWlhKdVlXeEZjbkp2Y2lodFpYTnpZV2RsS1R0Y2JpQWdmVnh1ZlZ4dUlsMTkiXX0=