terraconstructs 0.0.10 → 0.0.12

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 (410) hide show
  1. package/.jsii +104486 -34582
  2. package/lib/aws/arn.js +1 -1
  3. package/lib/aws/aws-construct.d.ts +1 -1
  4. package/lib/aws/aws-construct.js +28 -2
  5. package/lib/aws/aws-stack.d.ts +2 -4
  6. package/lib/aws/aws-stack.js +21 -8
  7. package/lib/aws/aws-tags.d.ts +58 -0
  8. package/lib/aws/aws-tags.js +77 -0
  9. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  10. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  11. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  12. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  13. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  14. package/lib/aws/cloudwatch/alarm.js +1 -1
  15. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  16. package/lib/aws/cloudwatch/dashboard.js +1 -1
  17. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  18. package/lib/aws/cloudwatch/graph.js +8 -8
  19. package/lib/aws/cloudwatch/layout.js +3 -3
  20. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  21. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  22. package/lib/aws/cloudwatch/log-group.js +1 -1
  23. package/lib/aws/cloudwatch/log-query.js +1 -1
  24. package/lib/aws/cloudwatch/log-stream.js +1 -1
  25. package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
  26. package/lib/aws/cloudwatch/metric-filter.js +4 -4
  27. package/lib/aws/cloudwatch/metric.js +2 -2
  28. package/lib/aws/cloudwatch/pattern.js +3 -3
  29. package/lib/aws/cloudwatch/policy.js +1 -1
  30. package/lib/aws/cloudwatch/private/env-tokens.js +5 -6
  31. package/lib/aws/cloudwatch/private/metric-util.js +4 -5
  32. package/lib/aws/cloudwatch/private/object.js +2 -3
  33. package/lib/aws/cloudwatch/private/rendering.js +3 -3
  34. package/lib/aws/cloudwatch/private/statistic.js +6 -7
  35. package/lib/aws/cloudwatch/query-definition.js +2 -2
  36. package/lib/aws/cloudwatch/stats.js +1 -1
  37. package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
  38. package/lib/aws/cloudwatch/subscription-filter.js +4 -4
  39. package/lib/aws/cloudwatch/text.js +1 -1
  40. package/lib/aws/cloudwatch/variable.js +3 -3
  41. package/lib/aws/cloudwatch/widget.d.ts +1 -1
  42. package/lib/aws/cloudwatch/widget.js +4 -4
  43. package/lib/aws/compute/activity.js +3 -2
  44. package/lib/aws/compute/alb/application-listener-action.d.ts +334 -0
  45. package/lib/aws/compute/alb/application-listener-action.js +281 -0
  46. package/lib/aws/compute/alb/application-listener-certificate.d.ts +35 -0
  47. package/lib/aws/compute/alb/application-listener-certificate.js +35 -0
  48. package/lib/aws/compute/alb/application-listener-rule.d.ts +233 -0
  49. package/lib/aws/compute/alb/application-listener-rule.js +220 -0
  50. package/lib/aws/compute/alb/application-listener.d.ts +574 -0
  51. package/lib/aws/compute/alb/application-listener.js +538 -0
  52. package/lib/aws/compute/alb/application-load-balancer.d.ts +715 -0
  53. package/lib/aws/compute/alb/application-load-balancer.js +780 -0
  54. package/lib/aws/compute/alb/application-target-group.d.ts +339 -0
  55. package/lib/aws/compute/alb/application-target-group.js +427 -0
  56. package/lib/aws/compute/alb/conditions.d.ts +61 -0
  57. package/lib/aws/compute/alb/conditions.js +164 -0
  58. package/lib/aws/compute/alb/trust-store-revocation.d.ts +59 -0
  59. package/lib/aws/compute/alb/trust-store-revocation.js +46 -0
  60. package/lib/aws/compute/alb/trust-store.d.ts +86 -0
  61. package/lib/aws/compute/alb/trust-store.js +79 -0
  62. package/lib/aws/compute/architecture.js +1 -1
  63. package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +75 -0
  64. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +106 -0
  65. package/lib/aws/compute/bastion-host.d.ts +172 -0
  66. package/lib/aws/compute/bastion-host.js +114 -0
  67. package/lib/aws/compute/chain.js +1 -1
  68. package/lib/aws/compute/cidr-splits.d.ts +49 -0
  69. package/lib/aws/compute/cidr-splits.js +59 -0
  70. package/lib/aws/compute/client-vpn-authorization-rule.d.ts +43 -0
  71. package/lib/aws/compute/client-vpn-authorization-rule.js +30 -0
  72. package/lib/aws/compute/client-vpn-endpoint-types.d.ts +62 -0
  73. package/lib/aws/compute/client-vpn-endpoint-types.js +25 -0
  74. package/lib/aws/compute/client-vpn-endpoint.d.ts +239 -0
  75. package/lib/aws/compute/client-vpn-endpoint.js +259 -0
  76. package/lib/aws/compute/client-vpn-route.d.ts +67 -0
  77. package/lib/aws/compute/client-vpn-route.js +57 -0
  78. package/lib/aws/compute/condition.js +1 -1
  79. package/lib/aws/compute/connections.d.ts +137 -0
  80. package/lib/aws/compute/connections.js +208 -0
  81. package/lib/aws/compute/ec2-augmentations.generated.d.ts +53 -0
  82. package/lib/aws/compute/ec2-augmentations.generated.js +35 -0
  83. package/lib/aws/compute/ec2-canned-metrics.generated.d.ts +555 -0
  84. package/lib/aws/compute/ec2-canned-metrics.generated.js +681 -0
  85. package/lib/aws/compute/ec2-util-v2.d.ts +141 -0
  86. package/lib/aws/compute/ec2-util-v2.js +286 -0
  87. package/lib/aws/compute/ec2-util.d.ts +52 -0
  88. package/lib/aws/compute/ec2-util.js +138 -0
  89. package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.d.ts +176 -0
  90. package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.js +119 -0
  91. package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.d.ts +860 -0
  92. package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.js +597 -0
  93. package/lib/aws/compute/event-invoke-config.js +1 -1
  94. package/lib/aws/compute/event-source-filter.js +2 -2
  95. package/lib/aws/compute/event-source-mapping.js +1 -1
  96. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  97. package/lib/aws/compute/event-sources/s3.js +1 -1
  98. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  99. package/lib/aws/compute/event-sources/sqs.js +1 -1
  100. package/lib/aws/compute/fields.js +4 -4
  101. package/lib/aws/compute/function-alias.js +1 -1
  102. package/lib/aws/compute/function-base.js +2 -2
  103. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  104. package/lib/aws/compute/function-destinations/function.js +1 -1
  105. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  106. package/lib/aws/compute/function-nodejs.js +1 -1
  107. package/lib/aws/compute/function-url.js +1 -1
  108. package/lib/aws/compute/function-vpc-config.generated.d.ts +3 -3
  109. package/lib/aws/compute/function-vpc-config.generated.js +1 -1
  110. package/lib/aws/compute/function.d.ts +1 -1
  111. package/lib/aws/compute/function.js +5 -5
  112. package/lib/aws/compute/index-alpha.d.ts +5 -0
  113. package/lib/aws/compute/index-alpha.js +22 -0
  114. package/lib/aws/compute/index.d.ts +60 -0
  115. package/lib/aws/compute/index.js +70 -2
  116. package/lib/aws/compute/instance-types.d.ts +1354 -0
  117. package/lib/aws/compute/instance-types.js +1683 -0
  118. package/lib/aws/compute/instance.d.ts +436 -0
  119. package/lib/aws/compute/instance.js +262 -0
  120. package/lib/aws/compute/ip-addresses.d.ts +249 -0
  121. package/lib/aws/compute/ip-addresses.js +248 -0
  122. package/lib/aws/compute/ipam.d.ts +309 -0
  123. package/lib/aws/compute/ipam.js +306 -0
  124. package/lib/aws/compute/key-pair.d.ts +178 -0
  125. package/lib/aws/compute/key-pair.js +194 -0
  126. package/lib/aws/compute/lambda-augmentations.generated.d.ts +65 -0
  127. package/lib/aws/compute/lambda-augmentations.generated.js +41 -0
  128. package/lib/aws/compute/lambda-canned-metrics.generated.d.ts +316 -0
  129. package/lib/aws/compute/lambda-canned-metrics.generated.js +119 -0
  130. package/lib/aws/compute/launch-template.d.ts +540 -0
  131. package/lib/aws/compute/launch-template.js +468 -0
  132. package/lib/aws/compute/lb-shared/access-logs-accounts.d.ts +7 -0
  133. package/lib/aws/compute/lb-shared/access-logs-accounts.js +46 -0
  134. package/lib/aws/compute/lb-shared/base-listener.d.ts +113 -0
  135. package/lib/aws/compute/lb-shared/base-listener.js +181 -0
  136. package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +212 -0
  137. package/lib/aws/compute/lb-shared/base-load-balancer.js +290 -0
  138. package/lib/aws/compute/lb-shared/base-target-group.d.ts +382 -0
  139. package/lib/aws/compute/lb-shared/base-target-group.js +364 -0
  140. package/lib/aws/compute/lb-shared/enums.d.ts +282 -0
  141. package/lib/aws/compute/lb-shared/enums.js +301 -0
  142. package/lib/aws/compute/lb-shared/grid-lookup-types.d.ts +42 -0
  143. package/lib/aws/compute/lb-shared/grid-lookup-types.js +53 -0
  144. package/lib/aws/compute/lb-shared/imported.d.ts +24 -0
  145. package/lib/aws/compute/lb-shared/imported.js +27 -0
  146. package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +194 -0
  147. package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +3 -0
  148. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +56 -0
  149. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +3 -0
  150. package/lib/aws/compute/lb-shared/listener-action.d.ts +14 -0
  151. package/lib/aws/compute/lb-shared/listener-action.js +4 -0
  152. package/lib/aws/compute/lb-shared/listener-certificate.d.ts +28 -0
  153. package/lib/aws/compute/lb-shared/listener-certificate.js +29 -0
  154. package/lib/aws/compute/lb-shared/load-balancer-targets.d.ts +93 -0
  155. package/lib/aws/compute/lb-shared/load-balancer-targets.js +127 -0
  156. package/lib/aws/compute/lb-shared/util.d.ts +113 -0
  157. package/lib/aws/compute/lb-shared/util.js +264 -0
  158. package/lib/aws/compute/lb-targets/alb-target.d.ts +67 -0
  159. package/lib/aws/compute/lb-targets/alb-target.js +100 -0
  160. package/lib/aws/compute/lb-targets/index.d.ts +4 -0
  161. package/lib/aws/compute/lb-targets/index.js +22 -0
  162. package/lib/aws/compute/lb-targets/instance-target.d.ts +42 -0
  163. package/lib/aws/compute/lb-targets/instance-target.js +67 -0
  164. package/lib/aws/compute/lb-targets/ip-target.d.ts +55 -0
  165. package/lib/aws/compute/lb-targets/ip-target.js +79 -0
  166. package/lib/aws/compute/lb-targets/lambda-target.d.ts +25 -0
  167. package/lib/aws/compute/lb-targets/lambda-target.js +50 -0
  168. package/lib/aws/compute/load-balancer.d.ts +336 -0
  169. package/lib/aws/compute/load-balancer.js +287 -0
  170. package/lib/aws/compute/machine-image/amazon-linux-2022.d.ts +63 -0
  171. package/lib/aws/compute/machine-image/amazon-linux-2022.js +84 -0
  172. package/lib/aws/compute/machine-image/amazon-linux-2023.d.ts +63 -0
  173. package/lib/aws/compute/machine-image/amazon-linux-2023.js +84 -0
  174. package/lib/aws/compute/machine-image/amazon-linux2.d.ts +76 -0
  175. package/lib/aws/compute/machine-image/amazon-linux2.js +87 -0
  176. package/lib/aws/compute/machine-image/common.d.ts +181 -0
  177. package/lib/aws/compute/machine-image/common.js +122 -0
  178. package/lib/aws/compute/machine-image/index.d.ts +5 -0
  179. package/lib/aws/compute/machine-image/index.js +22 -0
  180. package/lib/aws/compute/machine-image/machine-image.d.ts +463 -0
  181. package/lib/aws/compute/machine-image/machine-image.js +566 -0
  182. package/lib/aws/compute/machine-image/utils.d.ts +2 -0
  183. package/lib/aws/compute/machine-image/utils.js +17 -0
  184. package/lib/aws/compute/nat.d.ts +325 -0
  185. package/lib/aws/compute/nat.js +455 -0
  186. package/lib/aws/compute/network-acl-types.d.ts +152 -0
  187. package/lib/aws/compute/network-acl-types.js +156 -0
  188. package/lib/aws/compute/network-acl.d.ts +285 -0
  189. package/lib/aws/compute/network-acl.js +207 -0
  190. package/lib/aws/compute/network-util.d.ts +116 -0
  191. package/lib/aws/compute/network-util.js +241 -0
  192. package/lib/aws/compute/nlb/network-listener-action.d.ts +92 -0
  193. package/lib/aws/compute/nlb/network-listener-action.js +146 -0
  194. package/lib/aws/compute/nlb/network-listener-certificate.d.ts +24 -0
  195. package/lib/aws/compute/nlb/network-listener-certificate.js +25 -0
  196. package/lib/aws/compute/nlb/network-listener.d.ts +248 -0
  197. package/lib/aws/compute/nlb/network-listener.js +217 -0
  198. package/lib/aws/compute/nlb/network-load-balancer.d.ts +315 -0
  199. package/lib/aws/compute/nlb/network-load-balancer.js +360 -0
  200. package/lib/aws/compute/nlb/network-target-group.d.ts +153 -0
  201. package/lib/aws/compute/nlb/network-target-group.js +223 -0
  202. package/lib/aws/compute/peer.d.ts +64 -0
  203. package/lib/aws/compute/peer.js +235 -0
  204. package/lib/aws/compute/placement-group.d.ts +161 -0
  205. package/lib/aws/compute/placement-group.js +133 -0
  206. package/lib/aws/compute/port.d.ts +287 -0
  207. package/lib/aws/compute/port.js +390 -0
  208. package/lib/aws/compute/prefix-list.d.ts +131 -0
  209. package/lib/aws/compute/prefix-list.js +114 -0
  210. package/lib/aws/compute/private/context-stub.d.ts +7 -0
  211. package/lib/aws/compute/private/context-stub.js +43 -0
  212. package/lib/aws/compute/private/ebs-util.d.ts +14 -0
  213. package/lib/aws/compute/private/ebs-util.js +145 -0
  214. package/lib/aws/compute/private/intrinstics.js +2 -1
  215. package/lib/aws/compute/private/json-path.js +8 -8
  216. package/lib/aws/compute/private/util.js +2 -3
  217. package/lib/aws/compute/route.d.ts +547 -0
  218. package/lib/aws/compute/route.js +469 -0
  219. package/lib/aws/compute/security-group.d.ts +414 -0
  220. package/lib/aws/compute/security-group.js +538 -0
  221. package/lib/aws/compute/state-graph.js +1 -1
  222. package/lib/aws/compute/state-machine-fragment.js +1 -1
  223. package/lib/aws/compute/state-machine.d.ts +2 -2
  224. package/lib/aws/compute/state-machine.js +14 -12
  225. package/lib/aws/compute/states/choice.js +1 -1
  226. package/lib/aws/compute/states/custom-state.js +1 -1
  227. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  228. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  229. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  230. package/lib/aws/compute/states/distributed-map.js +1 -1
  231. package/lib/aws/compute/states/fail.js +1 -1
  232. package/lib/aws/compute/states/map-base.js +1 -1
  233. package/lib/aws/compute/states/map.js +1 -1
  234. package/lib/aws/compute/states/parallel.js +1 -1
  235. package/lib/aws/compute/states/pass.js +2 -2
  236. package/lib/aws/compute/states/state.js +5 -5
  237. package/lib/aws/compute/states/succeed.js +1 -1
  238. package/lib/aws/compute/states/task-base.js +2 -2
  239. package/lib/aws/compute/states/task.js +1 -1
  240. package/lib/aws/compute/states/wait.js +2 -2
  241. package/lib/aws/compute/stepfunctions-canned-metrics.generated.d.ts +83 -0
  242. package/lib/aws/compute/stepfunctions-canned-metrics.generated.js +127 -0
  243. package/lib/aws/compute/subnet-v2.d.ts +213 -0
  244. package/lib/aws/compute/subnet-v2.js +405 -0
  245. package/lib/aws/compute/subnet.d.ts +37 -0
  246. package/lib/aws/compute/subnet.js +181 -0
  247. package/lib/aws/compute/task-credentials.js +1 -1
  248. package/lib/aws/compute/task-input.js +1 -1
  249. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  250. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  251. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  252. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  253. package/lib/aws/compute/tasks/private/task-utils.js +3 -4
  254. package/lib/aws/compute/tasks/resource-arn-suffix.js +2 -3
  255. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  256. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  257. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  258. package/lib/aws/compute/types.js +2 -2
  259. package/lib/aws/compute/user-data.d.ts +270 -0
  260. package/lib/aws/compute/user-data.js +487 -0
  261. package/lib/aws/compute/util.d.ts +1 -1
  262. package/lib/aws/compute/util.js +4 -5
  263. package/lib/aws/compute/volume.d.ts +480 -0
  264. package/lib/aws/compute/volume.js +426 -0
  265. package/lib/aws/compute/vpc-endpoint-service.d.ts +149 -0
  266. package/lib/aws/compute/vpc-endpoint-service.js +90 -0
  267. package/lib/aws/compute/vpc-endpoint.d.ts +742 -0
  268. package/lib/aws/compute/vpc-endpoint.js +811 -0
  269. package/lib/aws/compute/vpc-flow-logs.d.ts +551 -0
  270. package/lib/aws/compute/vpc-flow-logs.js +693 -0
  271. package/lib/aws/compute/vpc-lookup.d.ts +73 -0
  272. package/lib/aws/compute/vpc-lookup.js +3 -0
  273. package/lib/aws/compute/vpc-v2-base.d.ts +353 -0
  274. package/lib/aws/compute/vpc-v2-base.js +493 -0
  275. package/lib/aws/compute/vpc-v2.d.ts +385 -0
  276. package/lib/aws/compute/vpc-v2.js +408 -0
  277. package/lib/aws/compute/vpc.d.ts +1448 -0
  278. package/lib/aws/compute/vpc.js +1495 -0
  279. package/lib/aws/compute/vpn.d.ts +443 -0
  280. package/lib/aws/compute/vpn.js +397 -0
  281. package/lib/aws/compute/windows-versions.d.ts +418 -0
  282. package/lib/aws/compute/windows-versions.js +426 -0
  283. package/lib/aws/edge/certificate-base.d.ts +20 -0
  284. package/lib/aws/edge/certificate-base.js +28 -0
  285. package/lib/aws/edge/certificate.d.ts +23 -2
  286. package/lib/aws/edge/certificate.js +54 -4
  287. package/lib/aws/edge/distribution.js +3 -3
  288. package/lib/aws/edge/dns-alias-record-targets.js +2 -2
  289. package/lib/aws/edge/dns-record.js +16 -16
  290. package/lib/aws/edge/dns-zone.d.ts +20 -2
  291. package/lib/aws/edge/dns-zone.js +25 -10
  292. package/lib/aws/edge/function.js +2 -2
  293. package/lib/aws/edge/index.d.ts +1 -0
  294. package/lib/aws/edge/index.js +2 -1
  295. package/lib/aws/edge/key-value-store.js +4 -4
  296. package/lib/aws/edge/origin.js +8 -6
  297. package/lib/aws/edge/response-headers-policy.js +1 -1
  298. package/lib/aws/encryption/alias.js +1 -1
  299. package/lib/aws/encryption/key.js +1 -1
  300. package/lib/aws/encryption/via-service-principal.js +1 -1
  301. package/lib/aws/iam/grant.js +2 -2
  302. package/lib/aws/iam/index.d.ts +1 -0
  303. package/lib/aws/iam/index.js +2 -1
  304. package/lib/aws/iam/instance-profile.d.ts +155 -0
  305. package/lib/aws/iam/instance-profile.js +124 -0
  306. package/lib/aws/iam/managed-policy.js +1 -1
  307. package/lib/aws/iam/oidc-provider.js +1 -1
  308. package/lib/aws/iam/policy-document-config.generated.d.ts +8 -8
  309. package/lib/aws/iam/policy-document-config.generated.js +1 -1
  310. package/lib/aws/iam/policy-document.js +1 -1
  311. package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
  312. package/lib/aws/iam/policy-statement-props.generated.js +1 -1
  313. package/lib/aws/iam/policy-statement.js +9 -9
  314. package/lib/aws/iam/policy.js +1 -1
  315. package/lib/aws/iam/principals.js +26 -26
  316. package/lib/aws/iam/private/assume-role-policy.js +2 -3
  317. package/lib/aws/iam/private/comparable-principal.js +2 -3
  318. package/lib/aws/iam/private/immutable-role.d.ts +2 -1
  319. package/lib/aws/iam/private/immutable-role.js +3 -3
  320. package/lib/aws/iam/private/imported-role.d.ts +1 -1
  321. package/lib/aws/iam/private/imported-role.js +3 -3
  322. package/lib/aws/iam/private/merge-statements.js +2 -3
  323. package/lib/aws/iam/private/util.js +4 -4
  324. package/lib/aws/iam/role.js +1 -1
  325. package/lib/aws/iam/saml-provider.d.ts +1 -1
  326. package/lib/aws/iam/saml-provider.js +6 -6
  327. package/lib/aws/iam/unknown-principal.js +1 -1
  328. package/lib/aws/iam/utils.js +2 -3
  329. package/lib/aws/index.d.ts +1 -0
  330. package/lib/aws/index.js +4 -1
  331. package/lib/aws/network/simple-ipv4-vpc.js +5 -5
  332. package/lib/aws/network/subnet-group.js +3 -3
  333. package/lib/aws/network/subnet.d.ts +1 -1
  334. package/lib/aws/network/subnet.js +7 -7
  335. package/lib/aws/notify/archive.js +3 -2
  336. package/lib/aws/notify/connection.js +5 -4
  337. package/lib/aws/notify/event-bus.js +5 -4
  338. package/lib/aws/notify/event-pattern.js +3 -3
  339. package/lib/aws/notify/index.js +3 -1
  340. package/lib/aws/notify/input.js +4 -3
  341. package/lib/aws/notify/kinesis-stream.js +3 -2
  342. package/lib/aws/notify/on-event-options.js +2 -1
  343. package/lib/aws/notify/queue-config.generated.d.ts +18 -11
  344. package/lib/aws/notify/queue-config.generated.js +1 -1
  345. package/lib/aws/notify/queue-policy.js +1 -1
  346. package/lib/aws/notify/queue.js +1 -1
  347. package/lib/aws/notify/resource-policy.js +1 -1
  348. package/lib/aws/notify/rule.js +3 -2
  349. package/lib/aws/notify/schedule.js +2 -2
  350. package/lib/aws/notify/sqs-augmentations.generated.d.ts +125 -0
  351. package/lib/aws/notify/sqs-augmentations.generated.js +74 -0
  352. package/lib/aws/notify/target.js +2 -1
  353. package/lib/aws/notify/targets/event-bus.js +1 -1
  354. package/lib/aws/notify/targets/function.js +1 -1
  355. package/lib/aws/notify/targets/log-group.js +2 -2
  356. package/lib/aws/notify/targets/sqs.js +1 -1
  357. package/lib/aws/notify/targets/state-machine.js +1 -1
  358. package/lib/aws/notify/targets/util.d.ts +1 -1
  359. package/lib/aws/notify/targets/util.js +10 -11
  360. package/lib/aws/notify/util.js +4 -4
  361. package/lib/aws/provider-config.generated.d.ts +33 -33
  362. package/lib/aws/provider-config.generated.js +1 -1
  363. package/lib/aws/storage/bucket-notifications.js +1 -1
  364. package/lib/aws/storage/bucket-policy.js +1 -1
  365. package/lib/aws/storage/bucket-source.js +1 -1
  366. package/lib/aws/storage/bucket.d.ts +298 -65
  367. package/lib/aws/storage/bucket.js +548 -225
  368. package/lib/aws/storage/cors-config.generated.d.ts +3 -3
  369. package/lib/aws/storage/cors-config.generated.js +1 -1
  370. package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
  371. package/lib/aws/storage/cors-rule-config.generated.js +1 -1
  372. package/lib/aws/storage/index.d.ts +1 -0
  373. package/lib/aws/storage/index.js +2 -1
  374. package/lib/aws/storage/lifecycle-config.generated.d.ts +11 -11
  375. package/lib/aws/storage/lifecycle-config.generated.js +1 -1
  376. package/lib/aws/storage/notification-targets/function.js +6 -6
  377. package/lib/aws/storage/notification-targets/queue.js +1 -1
  378. package/lib/aws/storage/origin-access-identity.d.ts +1 -1
  379. package/lib/aws/storage/origin-access-identity.js +5 -4
  380. package/lib/aws/storage/parameter-util.d.ts +12 -0
  381. package/lib/aws/storage/parameter-util.js +65 -0
  382. package/lib/aws/storage/parameter.d.ts +526 -0
  383. package/lib/aws/storage/parameter.js +606 -0
  384. package/lib/aws/storage/s3-canned-metrics.generated.d.ts +22 -0
  385. package/lib/aws/storage/s3-canned-metrics.generated.js +23 -0
  386. package/lib/aws/storage/util.d.ts +25 -3
  387. package/lib/aws/storage/util.js +84 -17
  388. package/lib/aws/storage/website-config.generated.d.ts +5 -5
  389. package/lib/aws/storage/website-config.generated.js +1 -1
  390. package/lib/aws/util.js +2 -3
  391. package/lib/construct-base.d.ts +10 -1
  392. package/lib/construct-base.js +9 -6
  393. package/lib/duration.js +1 -1
  394. package/lib/expiration.d.ts +48 -0
  395. package/lib/expiration.js +68 -0
  396. package/lib/helpers-internal/index.d.ts +1 -0
  397. package/lib/helpers-internal/index.js +7 -0
  398. package/lib/index.d.ts +2 -0
  399. package/lib/index.js +3 -1
  400. package/lib/private/md5.d.ts +4 -0
  401. package/lib/private/md5.js +14 -0
  402. package/lib/private/unique-resource-name.js +3 -4
  403. package/lib/size.js +2 -2
  404. package/lib/stack-base.d.ts +4 -23
  405. package/lib/stack-base.js +9 -30
  406. package/lib/terra-func.d.ts +103 -0
  407. package/lib/terra-func.js +170 -0
  408. package/lib/token.js +5 -5
  409. package/package.json +15 -8
  410. package/bun.lockb +0 -0
@@ -0,0 +1,468 @@
1
+ "use strict";
2
+ var _a, _b;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.LaunchTemplate = exports.LaunchTemplateSpecialVersions = exports.LaunchTemplateHttpTokens = exports.SpotRequestType = exports.SpotInstanceInterruption = exports.InstanceInitiatedShutdownBehavior = exports.CpuCredits = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ // https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/launch-template.ts
7
+ const provider_aws_1 = require("@cdktf/provider-aws");
8
+ const cdktf_1 = require("cdktf");
9
+ const connections_1 = require("./connections");
10
+ const ebs_util_1 = require("./private/ebs-util");
11
+ const aws_construct_1 = require("../aws-construct");
12
+ // TODO: Align with AWS CDK Tagging
13
+ const aws_tags_1 = require("../aws-tags");
14
+ /**
15
+ * Name tag constant
16
+ */
17
+ const NAME_TAG = "Name";
18
+ /**
19
+ * Provides the options for specifying the CPU credit type for burstable EC2 instance types (T2, T3, T3a, etc).
20
+ *
21
+ * @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-how-to.html
22
+ */
23
+ // dev-note: This could be used in the Instance L2
24
+ var CpuCredits;
25
+ (function (CpuCredits) {
26
+ /**
27
+ * Standard bursting mode.
28
+ * @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-standard-mode.html
29
+ */
30
+ CpuCredits["STANDARD"] = "standard";
31
+ /**
32
+ * Unlimited bursting mode.
33
+ * @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode.html
34
+ */
35
+ CpuCredits["UNLIMITED"] = "unlimited";
36
+ })(CpuCredits || (exports.CpuCredits = CpuCredits = {}));
37
+ /**
38
+ * Provides the options for specifying the instance initiated shutdown behavior.
39
+ *
40
+ * @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#Using_ChangingInstanceInitiatedShutdownBehavior
41
+ */
42
+ // dev-note: This could be used in the Instance L2
43
+ var InstanceInitiatedShutdownBehavior;
44
+ (function (InstanceInitiatedShutdownBehavior) {
45
+ /**
46
+ * The instance will stop when it initiates a shutdown.
47
+ */
48
+ InstanceInitiatedShutdownBehavior["STOP"] = "stop";
49
+ /**
50
+ * The instance will be terminated when it initiates a shutdown.
51
+ */
52
+ InstanceInitiatedShutdownBehavior["TERMINATE"] = "terminate";
53
+ })(InstanceInitiatedShutdownBehavior || (exports.InstanceInitiatedShutdownBehavior = InstanceInitiatedShutdownBehavior = {}));
54
+ /**
55
+ * Provides the options for the types of interruption for spot instances.
56
+ */
57
+ // dev-note: This could be used in a SpotFleet L2 if one gets developed.
58
+ var SpotInstanceInterruption;
59
+ (function (SpotInstanceInterruption) {
60
+ /**
61
+ * The instance will stop when interrupted.
62
+ */
63
+ SpotInstanceInterruption["STOP"] = "stop";
64
+ /**
65
+ * The instance will be terminated when interrupted.
66
+ */
67
+ SpotInstanceInterruption["TERMINATE"] = "terminate";
68
+ /**
69
+ * The instance will hibernate when interrupted.
70
+ */
71
+ SpotInstanceInterruption["HIBERNATE"] = "hibernate";
72
+ })(SpotInstanceInterruption || (exports.SpotInstanceInterruption = SpotInstanceInterruption = {}));
73
+ /**
74
+ * The Spot Instance request type.
75
+ *
76
+ * @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html
77
+ */
78
+ var SpotRequestType;
79
+ (function (SpotRequestType) {
80
+ /**
81
+ * A one-time Spot Instance request remains active until Amazon EC2 launches the Spot Instance,
82
+ * the request expires, or you cancel the request. If the Spot price exceeds your maximum price
83
+ * or capacity is not available, your Spot Instance is terminated and the Spot Instance request
84
+ * is closed.
85
+ */
86
+ SpotRequestType["ONE_TIME"] = "one-time";
87
+ /**
88
+ * A persistent Spot Instance request remains active until it expires or you cancel it, even if
89
+ * the request is fulfilled. If the Spot price exceeds your maximum price or capacity is not available,
90
+ * your Spot Instance is interrupted. After your instance is interrupted, when your maximum price exceeds
91
+ * the Spot price or capacity becomes available again, the Spot Instance is started if stopped or resumed
92
+ * if hibernated.
93
+ */
94
+ SpotRequestType["PERSISTENT"] = "persistent";
95
+ })(SpotRequestType || (exports.SpotRequestType = SpotRequestType = {}));
96
+ /**
97
+ * The state of token usage for your instance metadata requests.
98
+ *
99
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-metadataoptions.html#cfn-ec2-launchtemplate-launchtemplatedata-metadataoptions-httptokens
100
+ */
101
+ var LaunchTemplateHttpTokens;
102
+ (function (LaunchTemplateHttpTokens) {
103
+ /**
104
+ * If the state is optional, you can choose to retrieve instance metadata with or without a signed token header on your request.
105
+ */
106
+ LaunchTemplateHttpTokens["OPTIONAL"] = "optional";
107
+ /**
108
+ * If the state is required, you must send a signed token header with any instance metadata retrieval requests. In this state,
109
+ * retrieving the IAM role credentials always returns the version 2.0 credentials; the version 1.0 credentials are not available.
110
+ */
111
+ LaunchTemplateHttpTokens["REQUIRED"] = "required";
112
+ })(LaunchTemplateHttpTokens || (exports.LaunchTemplateHttpTokens = LaunchTemplateHttpTokens = {}));
113
+ /**
114
+ * A class that provides convenient access to special version tokens for LaunchTemplate
115
+ * versions.
116
+ */
117
+ class LaunchTemplateSpecialVersions {
118
+ }
119
+ exports.LaunchTemplateSpecialVersions = LaunchTemplateSpecialVersions;
120
+ _a = JSII_RTTI_SYMBOL_1;
121
+ LaunchTemplateSpecialVersions[_a] = { fqn: "terraconstructs.aws.compute.LaunchTemplateSpecialVersions", version: "0.0.12" };
122
+ /**
123
+ * The special value that denotes that users of a Launch Template should
124
+ * reference the LATEST version of the template.
125
+ */
126
+ LaunchTemplateSpecialVersions.LATEST_VERSION = "$Latest";
127
+ /**
128
+ * The special value that denotes that users of a Launch Template should
129
+ * reference the DEFAULT version of the template.
130
+ */
131
+ LaunchTemplateSpecialVersions.DEFAULT_VERSION = "$Default";
132
+ /**
133
+ * This represents an EC2 LaunchTemplate.
134
+ *
135
+ * @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html
136
+ */
137
+ class LaunchTemplate extends aws_construct_1.AwsConstructBase {
138
+ /**
139
+ * Import an existing LaunchTemplate.
140
+ */
141
+ static fromLaunchTemplateAttributes(scope, id, attrs) {
142
+ const haveId = Boolean(attrs.launchTemplateId);
143
+ const haveName = Boolean(attrs.launchTemplateName);
144
+ if (haveId == haveName) {
145
+ throw new Error("LaunchTemplate.fromLaunchTemplateAttributes() requires exactly one of launchTemplateId or launchTemplateName be provided.");
146
+ }
147
+ class Import extends aws_construct_1.AwsConstructBase {
148
+ constructor() {
149
+ super(...arguments);
150
+ this.versionNumber = attrs.versionNumber ?? LaunchTemplateSpecialVersions.DEFAULT_VERSION;
151
+ this.launchTemplateId = attrs.launchTemplateId;
152
+ this.launchTemplateName = attrs.launchTemplateName;
153
+ }
154
+ get launchTemplateOutputs() {
155
+ return {
156
+ versionNumber: this.versionNumber,
157
+ launchTemplateId: this.launchTemplateId,
158
+ launchTemplateName: this.launchTemplateName,
159
+ };
160
+ }
161
+ get outputs() {
162
+ return this.launchTemplateOutputs;
163
+ }
164
+ }
165
+ return new Import(scope, id);
166
+ }
167
+ // ============================================
168
+ // Members for ILaunchTemplate/ITerraConstruct interface
169
+ get launchTemplateOutputs() {
170
+ return {
171
+ versionNumber: this.versionNumber,
172
+ launchTemplateId: this.launchTemplateId,
173
+ launchTemplateName: this.launchTemplateName,
174
+ };
175
+ }
176
+ get outputs() {
177
+ return this.launchTemplateOutputs;
178
+ }
179
+ set tags(value) {
180
+ this._tags = value;
181
+ }
182
+ get tags() {
183
+ return cdktf_1.Token.asStringMap(cdktf_1.Lazy.anyValue({
184
+ produce: () => this._tags ?? undefined,
185
+ }));
186
+ }
187
+ // Temporarily expose input value. Use with caution.
188
+ get tagsInput() {
189
+ return this._tags;
190
+ }
191
+ constructor(scope, id, props = {}) {
192
+ super(scope, id);
193
+ // /**
194
+ // * TagManager for tagging support.
195
+ // */
196
+ // protected readonly tags: TagManager;
197
+ // isTaggableConstruct required properties
198
+ this._tags = undefined;
199
+ // Basic validation of the provided spot block duration
200
+ const spotDuration = props?.spotOptions?.blockDuration?.toHours({
201
+ integral: true,
202
+ });
203
+ if (spotDuration !== undefined && (spotDuration < 1 || spotDuration > 6)) {
204
+ // See: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html#fixed-duration-spot-instances
205
+ cdktf_1.Annotations.of(this).addError("Spot block duration must be exactly 1, 2, 3, 4, 5, or 6 hours.");
206
+ }
207
+ // Basic validation of the provided httpPutResponseHopLimit
208
+ if (props.httpPutResponseHopLimit !== undefined &&
209
+ (props.httpPutResponseHopLimit < 1 || props.httpPutResponseHopLimit > 64)) {
210
+ // See: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-metadataoptions.html#cfn-ec2-launchtemplate-launchtemplatedata-metadataoptions-httpputresponsehoplimit
211
+ cdktf_1.Annotations.of(this).addError("HttpPutResponseHopLimit must between 1 and 64");
212
+ }
213
+ if (props.instanceProfile && props.role) {
214
+ throw new Error("You cannot provide both an instanceProfile and a role");
215
+ }
216
+ if (props.keyName && props.keyPair) {
217
+ throw new Error("Cannot specify both of 'keyName' and 'keyPair'; prefer 'keyPair'");
218
+ }
219
+ // use provided instance profile or create one if a role was provided
220
+ let iamProfileArn = undefined;
221
+ if (props.instanceProfile) {
222
+ this.role = props.instanceProfile.role;
223
+ iamProfileArn = props.instanceProfile.instanceProfileArn;
224
+ }
225
+ else if (props.role) {
226
+ this.role = props.role;
227
+ const iamProfile = new provider_aws_1.iamInstanceProfile.IamInstanceProfile(this, "Profile", {
228
+ role: this.role.roleName,
229
+ });
230
+ iamProfileArn = iamProfile.arn;
231
+ }
232
+ this._grantPrincipal = this.role;
233
+ if (props.securityGroup) {
234
+ this._connections = new connections_1.Connections({
235
+ securityGroups: [props.securityGroup],
236
+ });
237
+ }
238
+ const securityGroupsToken = cdktf_1.Lazy.listValue({
239
+ produce: () => {
240
+ if (this._connections && this._connections.securityGroups.length > 0) {
241
+ return this._connections.securityGroups.map((sg) => sg.securityGroupId);
242
+ }
243
+ return undefined;
244
+ },
245
+ });
246
+ const imageConfig = props.machineImage?.getImage(this);
247
+ if (imageConfig) {
248
+ this.osType = imageConfig.osType;
249
+ this.imageId = imageConfig.imageId;
250
+ }
251
+ if (this.osType &&
252
+ props.keyPair &&
253
+ !props.keyPair._isOsCompatible(this.osType)) {
254
+ throw new Error(`${props.keyPair.type} keys are not compatible with the chosen AMI`);
255
+ }
256
+ // priority: prop.userData -> userData from machineImage -> undefined
257
+ this.userData = props.userData ?? imageConfig?.userData;
258
+ this.instanceType = props.instanceType;
259
+ let marketOptions = undefined;
260
+ if (props?.spotOptions) {
261
+ marketOptions = {
262
+ marketType: "spot",
263
+ spotOptions: {
264
+ blockDurationMinutes: spotDuration !== undefined ? spotDuration * 60 : undefined,
265
+ instanceInterruptionBehavior: props.spotOptions.interruptionBehavior,
266
+ maxPrice: props.spotOptions.maxPrice?.toString(),
267
+ spotInstanceType: props.spotOptions.requestType,
268
+ validUntil: props.spotOptions.validUntil?.date.toUTCString(),
269
+ },
270
+ };
271
+ // Remove SpotOptions if there are none.
272
+ if (Object.keys(marketOptions.spotOptions).filter((k) => marketOptions.spotOptions[k]).length == 0) {
273
+ marketOptions.spotOptions = undefined;
274
+ }
275
+ }
276
+ // this.tags = new TagManager(
277
+ // TagType.KEY_VALUE,
278
+ // tfLaunchTemplate.LaunchTemplate.tfResourceType,
279
+ // );
280
+ const tagsToken = cdktf_1.Lazy.anyValue({
281
+ produce: () => {
282
+ if (this._tags) {
283
+ return [
284
+ {
285
+ resourceType: "instance",
286
+ tags: this._tags,
287
+ },
288
+ {
289
+ resourceType: "volume",
290
+ tags: this._tags,
291
+ },
292
+ {
293
+ resourceType: "launch-template",
294
+ tags: this._tags,
295
+ },
296
+ ].map(provider_aws_1.launchTemplate.launchTemplateTagSpecificationsToTerraform);
297
+ }
298
+ return undefined;
299
+ },
300
+ });
301
+ const networkInterfaces = props.associatePublicIpAddress !== undefined
302
+ ? [
303
+ {
304
+ deviceIndex: 0,
305
+ associatePublicIpAddress: props.associatePublicIpAddress?.toString(),
306
+ securityGroups: securityGroupsToken,
307
+ },
308
+ ]
309
+ : undefined;
310
+ if (props.versionDescription &&
311
+ !cdktf_1.Token.isUnresolved(props.versionDescription) &&
312
+ props.versionDescription.length > 255) {
313
+ throw new Error(`versionDescription must be less than or equal to 255 characters, got ${props.versionDescription.length}`);
314
+ }
315
+ this.resource = new provider_aws_1.launchTemplate.LaunchTemplate(this, "Resource", {
316
+ name: props?.launchTemplateName,
317
+ description: props?.versionDescription,
318
+ blockDeviceMappings: props?.blockDevices !== undefined
319
+ ? (0, ebs_util_1.launchTemplateBlockDeviceMappings)(this, props.blockDevices)
320
+ : undefined,
321
+ creditSpecification: props?.cpuCredits !== undefined
322
+ ? {
323
+ cpuCredits: props.cpuCredits,
324
+ }
325
+ : undefined,
326
+ disableApiTermination: props?.disableApiTermination,
327
+ ebsOptimized: props?.ebsOptimized?.toString(),
328
+ enclaveOptions: props?.nitroEnclaveEnabled !== undefined
329
+ ? {
330
+ enabled: props.nitroEnclaveEnabled,
331
+ }
332
+ : undefined,
333
+ hibernationOptions: props?.hibernationConfigured !== undefined
334
+ ? {
335
+ configured: props.hibernationConfigured,
336
+ }
337
+ : undefined,
338
+ iamInstanceProfile: iamProfileArn !== undefined ? { arn: iamProfileArn } : undefined,
339
+ imageId: imageConfig?.imageId,
340
+ instanceType: props?.instanceType?.toString(),
341
+ instanceInitiatedShutdownBehavior: props?.instanceInitiatedShutdownBehavior,
342
+ instanceMarketOptions: marketOptions,
343
+ keyName: props.keyPair?.keyPairName ?? props?.keyName,
344
+ monitoring: props?.detailedMonitoring !== undefined
345
+ ? {
346
+ enabled: props.detailedMonitoring,
347
+ }
348
+ : undefined,
349
+ vpcSecurityGroupIds: networkInterfaces ? undefined : securityGroupsToken,
350
+ tagSpecifications: tagsToken,
351
+ userData: this.userData?.render(this),
352
+ metadataOptions: this.renderMetadataOptions(props),
353
+ networkInterfaces,
354
+ // Fields not yet implemented:
355
+ // ==========================
356
+ // https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-capacityreservationspecification.html
357
+ // Will require creating an L2 for AWS::EC2::CapacityReservation
358
+ // capacityReservationSpecification: undefined,
359
+ // https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-cpuoptions.html
360
+ // cpuOptions: undefined,
361
+ // https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-elasticgpuspecification.html
362
+ // elasticGpuSpecifications: undefined,
363
+ // https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-elasticinferenceaccelerators
364
+ // elasticInferenceAccelerators: undefined,
365
+ // https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-kernelid
366
+ // kernelId: undefined,
367
+ // ramDiskId: undefined,
368
+ // https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-licensespecifications
369
+ // Also not implemented in Instance L2
370
+ // licenseSpecifications: undefined,
371
+ // https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-tagspecifications
372
+ // Should be implemented via the Tagging aspect in CDK core. Complication will be that this tagging interface is very unique to LaunchTemplates.
373
+ // tagSpecification: undefined
374
+ // TODO: use IPlacementGroup in LuanchTemplate
375
+ // placement: undefined,
376
+ });
377
+ if (this.role) {
378
+ this.resource.node.addDependency(this.role);
379
+ }
380
+ else if (props.instanceProfile?.role) {
381
+ this.resource.node.addDependency(props.instanceProfile.role);
382
+ }
383
+ aws_tags_1.Tags.of(this).add(NAME_TAG, this.node.path);
384
+ this.defaultVersionNumber = this.resource.defaultVersion.toString(); // should be Token.asString()?
385
+ this.latestVersionNumber = this.resource.latestVersion.toString(); // should be Token.asString()?
386
+ this.launchTemplateId = this.resource.id;
387
+ this.versionNumber = this.resource.latestVersion.toString();
388
+ }
389
+ renderMetadataOptions(props) {
390
+ let requireMetadataOptions = false;
391
+ // if requireImdsv2 is true, httpTokens must be required.
392
+ if (props.requireImdsv2 === true &&
393
+ props.httpTokens === LaunchTemplateHttpTokens.OPTIONAL) {
394
+ cdktf_1.Annotations.of(this).addError("httpTokens must be required when requireImdsv2 is true");
395
+ }
396
+ if (props.httpEndpoint !== undefined ||
397
+ props.httpProtocolIpv6 !== undefined ||
398
+ props.httpPutResponseHopLimit !== undefined ||
399
+ props.httpTokens !== undefined ||
400
+ props.instanceMetadataTags !== undefined ||
401
+ props.requireImdsv2 === true) {
402
+ requireMetadataOptions = true;
403
+ }
404
+ if (requireMetadataOptions) {
405
+ return {
406
+ httpEndpoint: props.httpEndpoint === true
407
+ ? "enabled"
408
+ : props.httpEndpoint === false
409
+ ? "disabled"
410
+ : undefined,
411
+ httpProtocolIpv6: props.httpProtocolIpv6 === true
412
+ ? "enabled"
413
+ : props.httpProtocolIpv6 === false
414
+ ? "disabled"
415
+ : undefined,
416
+ httpPutResponseHopLimit: props.httpPutResponseHopLimit,
417
+ httpTokens: props.requireImdsv2 === true
418
+ ? LaunchTemplateHttpTokens.REQUIRED
419
+ : props.httpTokens,
420
+ instanceMetadataTags: props.instanceMetadataTags === true
421
+ ? "enabled"
422
+ : props.instanceMetadataTags === false
423
+ ? "disabled"
424
+ : undefined,
425
+ };
426
+ }
427
+ else {
428
+ return undefined;
429
+ }
430
+ }
431
+ /**
432
+ * Add the security group to the instance.
433
+ *
434
+ * @param securityGroup: The security group to add
435
+ */
436
+ addSecurityGroup(securityGroup) {
437
+ if (!this._connections) {
438
+ throw new Error("LaunchTemplate can only be added a securityGroup if another securityGroup is initialized in the constructor.");
439
+ }
440
+ this._connections.addSecurityGroup(securityGroup);
441
+ }
442
+ /**
443
+ * Allows specifying security group connections for the instance.
444
+ *
445
+ * @note Only available if you provide a securityGroup when constructing the LaunchTemplate.
446
+ */
447
+ get connections() {
448
+ if (!this._connections) {
449
+ throw new Error("LaunchTemplate can only be used as IConnectable if a securityGroup is provided when constructing it.");
450
+ }
451
+ return this._connections;
452
+ }
453
+ /**
454
+ * Principal to grant permissions to.
455
+ *
456
+ * @note Only available if you provide a role when constructing the LaunchTemplate.
457
+ */
458
+ get grantPrincipal() {
459
+ if (!this._grantPrincipal) {
460
+ throw new Error("LaunchTemplate can only be used as IGrantable if a role is provided when constructing it.");
461
+ }
462
+ return this._grantPrincipal;
463
+ }
464
+ }
465
+ exports.LaunchTemplate = LaunchTemplate;
466
+ _b = JSII_RTTI_SYMBOL_1;
467
+ LaunchTemplate[_b] = { fqn: "terraconstructs.aws.compute.LaunchTemplate", version: "0.0.12" };
468
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF1bmNoLXRlbXBsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL2xhdW5jaC10ZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1HQUFtRztBQUVuRyxzREFHNkI7QUFDN0IsaUNBQWlEO0FBRWpELCtDQUEwRDtBQVExRCxpREFBdUU7QUFNdkUsb0RBSTBCO0FBQzFCLG1DQUFtQztBQUNuQywwQ0FBbUM7QUFLbkM7O0dBRUc7QUFDSCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUFFaEM7Ozs7R0FJRztBQUNILGtEQUFrRDtBQUNsRCxJQUFZLFVBWVg7QUFaRCxXQUFZLFVBQVU7SUFDcEI7OztPQUdHO0lBQ0gsbUNBQXFCLENBQUE7SUFFckI7OztPQUdHO0lBQ0gscUNBQXVCLENBQUE7QUFDekIsQ0FBQyxFQVpXLFVBQVUsMEJBQVYsVUFBVSxRQVlyQjtBQUVEOzs7O0dBSUc7QUFDSCxrREFBa0Q7QUFDbEQsSUFBWSxpQ0FVWDtBQVZELFdBQVksaUNBQWlDO0lBQzNDOztPQUVHO0lBQ0gsa0RBQWEsQ0FBQTtJQUViOztPQUVHO0lBQ0gsNERBQXVCLENBQUE7QUFDekIsQ0FBQyxFQVZXLGlDQUFpQyxpREFBakMsaUNBQWlDLFFBVTVDO0FBOEREOztHQUVHO0FBQ0gsd0VBQXdFO0FBQ3hFLElBQVksd0JBZVg7QUFmRCxXQUFZLHdCQUF3QjtJQUNsQzs7T0FFRztJQUNILHlDQUFhLENBQUE7SUFFYjs7T0FFRztJQUNILG1EQUF1QixDQUFBO0lBRXZCOztPQUVHO0lBQ0gsbURBQXVCLENBQUE7QUFDekIsQ0FBQyxFQWZXLHdCQUF3Qix3Q0FBeEIsd0JBQXdCLFFBZW5DO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksZUFpQlg7QUFqQkQsV0FBWSxlQUFlO0lBQ3pCOzs7OztPQUtHO0lBQ0gsd0NBQXFCLENBQUE7SUFFckI7Ozs7OztPQU1HO0lBQ0gsNENBQXlCLENBQUE7QUFD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Q0FBQztZQUNOLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGdCQUFnQixDQUFDLGFBQTZCO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FDYiw4R0FBOEcsQ0FDL0csQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBVyxXQUFXO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FDYixzR0FBc0csQ0FDdkcsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFXLGNBQWM7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUNiLDJGQUEyRixDQUM1RixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDOztBQWxmSCx3Q0FtZkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtZWMyL2xpYi9sYXVuY2gtdGVtcGxhdGUudHNcblxuaW1wb3J0IHtcbiAgbGF1bmNoVGVtcGxhdGUgYXMgdGZMYXVuY2hUZW1wbGF0ZSxcbiAgaWFtSW5zdGFuY2VQcm9maWxlIGFzIHRmSWFtSW5zdGFuY2VQcm9maWxlLFxufSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMsIExhenksIFRva2VuIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbnMsIElDb25uZWN0YWJsZSB9IGZyb20gXCIuL2Nvbm5lY3Rpb25zXCI7XG5pbXBvcnQgeyBJbnN0YW5jZVR5cGUgfSBmcm9tIFwiLi9pbnN0YW5jZS10eXBlc1wiO1xuaW1wb3J0IHsgSUtleVBhaXIgfSBmcm9tIFwiLi9rZXktcGFpclwiO1xuaW1wb3J0IHtcbiAgSU1hY2hpbmVJbWFnZSxcbiAgTWFjaGluZUltYWdlQ29uZmlnLFxuICBPcGVyYXRpbmdTeXN0ZW1UeXBlLFxufSBmcm9tIFwiLi9tYWNoaW5lLWltYWdlXCI7XG5pbXBvcnQgeyBsYXVuY2hUZW1wbGF0ZUJsb2NrRGV2aWNlTWFwcGluZ3MgfSBmcm9tIFwiLi9wcml2YXRlL2Vicy11dGlsXCI7XG5pbXBvcnQgeyBJU2VjdXJpdHlHcm91cCB9IGZyb20gXCIuL3NlY3VyaXR5LWdyb3VwXCI7XG5pbXBvcnQgeyBVc2VyRGF0YSB9IGZyb20gXCIuL3VzZXItZGF0YVwiO1xuaW1wb3J0IHsgQmxvY2tEZXZpY2UgfSBmcm9tIFwiLi92b2x1bWVcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCI7XG5pbXBvcnQgeyBFeHBpcmF0aW9uIH0gZnJvbSBcIi4uLy4uL2V4cGlyYXRpb25cIjtcbmltcG9ydCB7XG4gIElBd3NDb25zdHJ1Y3QsXG4gIEF3c0NvbnN0cnVjdEJhc2UsXG4gIC8vIFRhZ1R5cGVcbn0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbi8vIFRPRE86IEFsaWduIHdpdGggQVdTIENESyBUYWdnaW5nXG5pbXBvcnQgeyBUYWdzIH0gZnJvbSBcIi4uL2F3cy10YWdzXCI7XG4vLyBpbXBvcnQgeyBUYWdzIH0gZnJvbSBcIi4uL3RhZy1hc3BlY3RcIjtcbi8vIGltcG9ydCB7IFRhZ01hbmFnZXIgfSBmcm9tIFwiLi4vdGFnLW1hbmFnZXJcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vaWFtXCI7XG5cbi8qKlxuICogTmFtZSB0YWcgY29uc3RhbnRcbiAqL1xuY29uc3QgTkFNRV9UQUc6IHN0cmluZyA9IFwiTmFtZVwiO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBvcHRpb25zIGZvciBzcGVjaWZ5aW5nIHRoZSBDUFUgY3JlZGl0IHR5cGUgZm9yIGJ1cnN0YWJsZSBFQzIgaW5zdGFuY2UgdHlwZXMgKFQyLCBUMywgVDNhLCBldGMpLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2J1cnN0YWJsZS1wZXJmb3JtYW5jZS1pbnN0YW5jZXMtaG93LXRvLmh0bWxcbiAqL1xuLy8gZGV2LW5vdGU6IFRoaXMgY291bGQgYmUgdXNlZCBpbiB0aGUgSW5zdGFuY2UgTDJcbmV4cG9ydCBlbnVtIENwdUNyZWRpdHMge1xuICAvKipcbiAgICogU3RhbmRhcmQgYnVyc3RpbmcgbW9kZS5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvYnVyc3RhYmxlLXBlcmZvcm1hbmNlLWluc3RhbmNlcy1zdGFuZGFyZC1tb2RlLmh0bWxcbiAgICovXG4gIFNUQU5EQVJEID0gXCJzdGFuZGFyZFwiLFxuXG4gIC8qKlxuICAgKiBVbmxpbWl0ZWQgYnVyc3RpbmcgbW9kZS5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvYnVyc3RhYmxlLXBlcmZvcm1hbmNlLWluc3RhbmNlcy11bmxpbWl0ZWQtbW9kZS5odG1sXG4gICAqL1xuICBVTkxJTUlURUQgPSBcInVubGltaXRlZFwiLFxufVxuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBvcHRpb25zIGZvciBzcGVjaWZ5aW5nIHRoZSBpbnN0YW5jZSBpbml0aWF0ZWQgc2h1dGRvd24gYmVoYXZpb3IuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvdGVybWluYXRpbmctaW5zdGFuY2VzLmh0bWwjVXNpbmdfQ2hhbmdpbmdJbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3JcbiAqL1xuLy8gZGV2LW5vdGU6IFRoaXMgY291bGQgYmUgdXNlZCBpbiB0aGUgSW5zdGFuY2UgTDJcbmV4cG9ydCBlbnVtIEluc3RhbmNlSW5pdGlhdGVkU2h1dGRvd25CZWhhdmlvciB7XG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2Ugd2lsbCBzdG9wIHdoZW4gaXQgaW5pdGlhdGVzIGEgc2h1dGRvd24uXG4gICAqL1xuICBTVE9QID0gXCJzdG9wXCIsXG5cbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZSB3aWxsIGJlIHRlcm1pbmF0ZWQgd2hlbiBpdCBpbml0aWF0ZXMgYSBzaHV0ZG93bi5cbiAgICovXG4gIFRFUk1JTkFURSA9IFwidGVybWluYXRlXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoVGVtcGxhdGVPdXRwdXRzIHtcbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIGxhdW5jaCB0ZW1wbGF0ZSB0byB1c2VcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbk51bWJlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgTGF1bmNoIFRlbXBsYXRlXG4gICAqXG4gICAqIEV4YWN0bHkgb25lIG9mIGBsYXVuY2hUZW1wbGF0ZUlkYCBhbmQgYGxhdW5jaFRlbXBsYXRlTmFtZWAgd2lsbCBiZSBzZXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBMYXVuY2ggVGVtcGxhdGVcbiAgICpcbiAgICogRXhhY3RseSBvbmUgb2YgYGxhdW5jaFRlbXBsYXRlSWRgIGFuZCBgbGF1bmNoVGVtcGxhdGVOYW1lYCB3aWxsIGJlIHNldC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgTGF1bmNoVGVtcGxhdGUtbGlrZSBvYmplY3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElMYXVuY2hUZW1wbGF0ZSBleHRlbmRzIElBd3NDb25zdHJ1Y3Qge1xuICAvKiogc3Ryb25nbHkgdHlwZWQgb3V0cHV0cyAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZU91dHB1dHM6IExhdW5jaFRlbXBsYXRlT3V0cHV0cztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgbGF1bmNoIHRlbXBsYXRlIHRvIHVzZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uTnVtYmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBMYXVuY2ggVGVtcGxhdGVcbiAgICpcbiAgICogRXhhY3RseSBvbmUgb2YgYGxhdW5jaFRlbXBsYXRlSWRgIGFuZCBgbGF1bmNoVGVtcGxhdGVOYW1lYCB3aWxsIGJlIHNldC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGVJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIExhdW5jaCBUZW1wbGF0ZVxuICAgKlxuICAgKiBFeGFjdGx5IG9uZSBvZiBgbGF1bmNoVGVtcGxhdGVJZGAgYW5kIGBsYXVuY2hUZW1wbGF0ZU5hbWVgIHdpbGwgYmUgc2V0LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIG9wdGlvbnMgZm9yIHRoZSB0eXBlcyBvZiBpbnRlcnJ1cHRpb24gZm9yIHNwb3QgaW5zdGFuY2VzLlxuICovXG4vLyBkZXYtbm90ZTogVGhpcyBjb3VsZCBiZSB1c2VkIGluIGEgU3BvdEZsZWV0IEwyIGlmIG9uZSBnZXRzIGRldmVsb3BlZC5cbmV4cG9ydCBlbnVtIFNwb3RJbnN0YW5jZUludGVycnVwdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2Ugd2lsbCBzdG9wIHdoZW4gaW50ZXJydXB0ZWQuXG4gICAqL1xuICBTVE9QID0gXCJzdG9wXCIsXG5cbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZSB3aWxsIGJlIHRlcm1pbmF0ZWQgd2hlbiBpbnRlcnJ1cHRlZC5cbiAgICovXG4gIFRFUk1JTkFURSA9IFwidGVybWluYXRlXCIsXG5cbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZSB3aWxsIGhpYmVybmF0ZSB3aGVuIGludGVycnVwdGVkLlxuICAgKi9cbiAgSElCRVJOQVRFID0gXCJoaWJlcm5hdGVcIixcbn1cblxuLyoqXG4gKiBUaGUgU3BvdCBJbnN0YW5jZSByZXF1ZXN0IHR5cGUuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvc3BvdC1yZXF1ZXN0cy5odG1sXG4gKi9cbmV4cG9ydCBlbnVtIFNwb3RSZXF1ZXN0VHlwZSB7XG4gIC8qKlxuICAgKiBBIG9uZS10aW1lIFNwb3QgSW5zdGFuY2UgcmVxdWVzdCByZW1haW5zIGFjdGl2ZSB1bnRpbCBBbWF6b24gRUMyIGxhdW5jaGVzIHRoZSBTcG90IEluc3RhbmNlLFxuICAgKiB0aGUgcmVxdWVzdCBleHBpcmVzLCBvciB5b3UgY2FuY2VsIHRoZSByZXF1ZXN0LiBJZiB0aGUgU3BvdCBwcmljZSBleGNlZWRzIHlvdXIgbWF4aW11bSBwcmljZVxuICAgKiBvciBjYXBhY2l0eSBpcyBub3QgYXZhaWxhYmxlLCB5b3VyIFNwb3QgSW5zdGFuY2UgaXMgdGVybWluYXRlZCBhbmQgdGhlIFNwb3QgSW5zdGFuY2UgcmVxdWVzdFxuICAgKiBpcyBjbG9zZWQuXG4gICAqL1xuICBPTkVfVElNRSA9IFwib25lLXRpbWVcIixcblxuICAvKipcbiAgICogQSBwZXJzaXN0ZW50IFNwb3QgSW5zdGFuY2UgcmVxdWVzdCByZW1haW5zIGFjdGl2ZSB1bnRpbCBpdCBleHBpcmVzIG9yIHlvdSBjYW5jZWwgaXQsIGV2ZW4gaWZcbiAgICogdGhlIHJlcXVlc3QgaXMgZnVsZmlsbGVkLiBJZiB0aGUgU3BvdCBwcmljZSBleGNlZWRzIHlvdXIgbWF4aW11bSBwcmljZSBvciBjYXBhY2l0eSBpcyBub3QgYXZhaWxhYmxlLFxuICAgKiB5b3VyIFNwb3QgSW5zdGFuY2UgaXMgaW50ZXJydXB0ZWQuIEFmdGVyIHlvdXIgaW5zdGFuY2UgaXMgaW50ZXJydXB0ZWQsIHdoZW4geW91ciBtYXhpbXVtIHByaWNlIGV4Y2VlZHNcbiAgICogdGhlIFNwb3QgcHJpY2Ugb3IgY2FwYWNpdHkgYmVjb21lcyBhdmFpbGFibGUgYWdhaW4sIHRoZSBTcG90IEluc3RhbmNlIGlzIHN0YXJ0ZWQgaWYgc3RvcHBlZCBvciByZXN1bWVkXG4gICAqIGlmIGhpYmVybmF0ZWQuXG4gICAqL1xuICBQRVJTSVNURU5UID0gXCJwZXJzaXN0ZW50XCIsXG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciB0aGUgU3BvdCBtYXJrZXQgaW5zdGFuY2Ugb3B0aW9ucyBwcm92aWRlZCBpbiBhIExhdW5jaFRlbXBsYXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlU3BvdE9wdGlvbnMge1xuICAvKipcbiAgICogU3BvdCBJbnN0YW5jZXMgd2l0aCBhIGRlZmluZWQgZHVyYXRpb24gKGFsc28ga25vd24gYXMgU3BvdCBibG9ja3MpIGFyZSBkZXNpZ25lZCBub3QgdG8gYmUgaW50ZXJydXB0ZWQgYW5kIHdpbGwgcnVuIGNvbnRpbnVvdXNseSBmb3IgdGhlIGR1cmF0aW9uIHlvdSBzZWxlY3QuXG4gICAqIFlvdSBjYW4gdXNlIGEgZHVyYXRpb24gb2YgMSwgMiwgMywgNCwgNSwgb3IgNiBob3Vycy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvc3BvdC1yZXF1ZXN0cy5odG1sI2ZpeGVkLWR1cmF0aW9uLXNwb3QtaW5zdGFuY2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IFJlcXVlc3RlZCBzcG90IGluc3RhbmNlcyBkbyBub3QgaGF2ZSBhIHByZS1kZWZpbmVkIGR1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYmxvY2tEdXJhdGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgYmVoYXZpb3Igd2hlbiBhIFNwb3QgSW5zdGFuY2UgaXMgaW50ZXJydXB0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFNwb3QgaW5zdGFuY2VzIHdpbGwgdGVybWluYXRlIHdoZW4gaW50ZXJydXB0ZWQuXG4gICAqL1xuICByZWFkb25seSBpbnRlcnJ1cHRpb25CZWhhdmlvcj86IFNwb3RJbnN0YW5jZUludGVycnVwdGlvbjtcblxuICAvKipcbiAgICogTWF4aW11bSBob3VybHkgcHJpY2UgeW91J3JlIHdpbGxpbmcgdG8gcGF5IGZvciBlYWNoIFNwb3QgaW5zdGFuY2UuIFRoZSB2YWx1ZSBpcyBnaXZlblxuICAgKiBpbiBkb2xsYXJzLiBleDogMC4wMSBmb3IgMSBjZW50IHBlciBob3VyLCBvciAwLjAwMSBmb3Igb25lLXRlbnRoIG9mIGEgY2VudCBwZXIgaG91ci5cbiAgICpcbiAgICogQGRlZmF1bHQgTWF4aW11bSBob3VybHkgcHJpY2Ugd2lsbCBkZWZhdWx0IHRvIHRoZSBvbi1kZW1hbmQgcHJpY2UgZm9yIHRoZSBpbnN0YW5jZSB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4UHJpY2U/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBTcG90IEluc3RhbmNlIHJlcXVlc3QgdHlwZS5cbiAgICpcbiAgICogSWYgeW91IGFyZSB1c2luZyBTcG90IEluc3RhbmNlcyB3aXRoIGFuIEF1dG8gU2NhbGluZyBncm91cCwgdXNlIG9uZS10aW1lIHJlcXVlc3RzLCBhcyB0aGVcbiAgICogQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgc2VydmljZSBoYW5kbGVzIHJlcXVlc3RpbmcgbmV3IFNwb3QgSW5zdGFuY2VzIHdoZW5ldmVyIHRoZSBncm91cCBpc1xuICAgKiBiZWxvdyBpdHMgZGVzaXJlZCBjYXBhY2l0eS5cbiAgICpcbiAgICogQGRlZmF1bHQgT25lLXRpbWUgc3BvdCByZXF1ZXN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdFR5cGU/OiBTcG90UmVxdWVzdFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBlbmQgZGF0ZSBvZiB0aGUgcmVxdWVzdC4gRm9yIGEgb25lLXRpbWUgcmVxdWVzdCwgdGhlIHJlcXVlc3QgcmVtYWlucyBhY3RpdmUgdW50aWwgYWxsIGluc3RhbmNlc1xuICAgKiBsYXVuY2gsIHRoZSByZXF1ZXN0IGlzIGNhbmNlbGVkLCBvciB0aGlzIGRhdGUgaXMgcmVhY2hlZC4gSWYgdGhlIHJlcXVlc3QgaXMgcGVyc2lzdGVudCwgaXQgcmVtYWluc1xuICAgKiBhY3RpdmUgdW50aWwgaXQgaXMgY2FuY2VsZWQgb3IgdGhpcyBkYXRlIGFuZCB0aW1lIGlzIHJlYWNoZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFRoZSBkZWZhdWx0IGVuZCBkYXRlIGlzIDcgZGF5cyBmcm9tIHRoZSBjdXJyZW50IGRhdGUuXG4gICAqL1xuICByZWFkb25seSB2YWxpZFVudGlsPzogRXhwaXJhdGlvbjtcbn1cblxuLyoqXG4gKiBUaGUgc3RhdGUgb2YgdG9rZW4gdXNhZ2UgZm9yIHlvdXIgaW5zdGFuY2UgbWV0YWRhdGEgcmVxdWVzdHMuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy5odG1sI2Nmbi1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy1odHRwdG9rZW5zXG4gKi9cbmV4cG9ydCBlbnVtIExhdW5jaFRlbXBsYXRlSHR0cFRva2VucyB7XG4gIC8qKlxuICAgKiBJZiB0aGUgc3RhdGUgaXMgb3B0aW9uYWwsIHlvdSBjYW4gY2hvb3NlIHRvIHJldHJpZXZlIGluc3RhbmNlIG1ldGFkYXRhIHdpdGggb3Igd2l0aG91dCBhIHNpZ25lZCB0b2tlbiBoZWFkZXIgb24geW91ciByZXF1ZXN0LlxuICAgKi9cbiAgT1BUSU9OQUwgPSBcIm9wdGlvbmFsXCIsXG4gIC8qKlxuICAgKiBJZiB0aGUgc3RhdGUgaXMgcmVxdWlyZWQsIHlvdSBtdXN0IHNlbmQgYSBzaWduZWQgdG9rZW4gaGVhZGVyIHdpdGggYW55IGluc3RhbmNlIG1ldGFkYXRhIHJldHJpZXZhbCByZXF1ZXN0cy4gSW4gdGhpcyBzdGF0ZSxcbiAgICogcmV0cmlldmluZyB0aGUgSUFNIHJvbGUgY3JlZGVudGlhbHMgYWx3YXlzIHJldHVybnMgdGhlIHZlcnNpb24gMi4wIGNyZWRlbnRpYWxzOyB0aGUgdmVyc2lvbiAxLjAgY3JlZGVudGlhbHMgYXJlIG5vdCBhdmFpbGFibGUuXG4gICAqL1xuICBSRVFVSVJFRCA9IFwicmVxdWlyZWRcIixcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIG9mIGEgTGF1bmNoVGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoVGVtcGxhdGVQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIGZvciB0aGlzIGxhdW5jaCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGRlc2NyaXB0aW9uIGZvciB0aGUgZmlyc3QgdmVyc2lvbiBvZiB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICAgKlxuICAgKiBUaGUgdmVyc2lvbiBkZXNjcmlwdGlvbiBtdXN0IGJlIG1heGltdW0gMjU1IGNoYXJhY3RlcnMgbG9uZy5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItbGF1bmNodGVtcGxhdGUuaHRtbCNjZm4tZWMyLWxhdW5jaHRlbXBsYXRlLXZlcnNpb25kZXNjcmlwdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgaW5zdGFuY2UgdG8gbGF1bmNoLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFRoaXMgTGF1bmNoIFRlbXBsYXRlIGRvZXMgbm90IHNwZWNpZnkgYSBkZWZhdWx0IEluc3RhbmNlIFR5cGUuXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVR5cGU/OiBJbnN0YW5jZVR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBBTUkgdGhhdCB3aWxsIGJlIHVzZWQgYnkgaW5zdGFuY2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFRoaXMgTGF1bmNoIFRlbXBsYXRlIGRvZXMgbm90IHNwZWNpZnkgYSBkZWZhdWx0IEFNSS5cbiAgICovXG4gIHJlYWRvbmx5IG1hY2hpbmVJbWFnZT86IElNYWNoaW5lSW1hZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBBTUkgdGhhdCB3aWxsIGJlIHVzZWQgYnkgaW5zdGFuY2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFRoaXMgTGF1bmNoIFRlbXBsYXRlIGNyZWF0ZXMgYSBVc2VyRGF0YSBiYXNlZCBvbiB0aGUgdHlwZSBvZiBwcm92aWRlZFxuICAgKiBtYWNoaW5lSW1hZ2U7IG5vIFVzZXJEYXRhIGlzIGNyZWF0ZWQgaWYgYSBtYWNoaW5lSW1hZ2UgaXMgbm90IHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSB1c2VyRGF0YT86IFVzZXJEYXRhO1xuXG4gIC8qKlxuICAgKiBBbiBJQU0gcm9sZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgaW5zdGFuY2UgcHJvZmlsZSB0aGF0IGlzIHVzZWQgYnkgaW5zdGFuY2VzLlxuICAgKlxuICAgKiBUaGUgcm9sZSBtdXN0IGJlIGFzc3VtYWJsZSBieSB0aGUgc2VydmljZSBwcmluY2lwYWwgYGVjMi5hbWF6b25hd3MuY29tYC5cbiAgICogTm90ZTogWW91IGNhbiBwcm92aWRlIGFuIGluc3RhbmNlUHJvZmlsZSBvciBhIHJvbGUsIGJ1dCBub3QgYm90aC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnTXlSb2xlJywge1xuICAgKiAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdlYzIuYW1hem9uYXdzLmNvbScpXG4gICAqIH0pO1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIG5ldyByb2xlIGlzIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSByb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IGJsb2NrIGRldmljZXMgYXJlIGV4cG9zZWQgdG8gdGhlIGluc3RhbmNlLiBZb3UgY2FuIHNwZWNpZnkgdmlydHVhbCBkZXZpY2VzIGFuZCBFQlMgdm9sdW1lcy5cbiAgICpcbiAgICogRWFjaCBpbnN0YW5jZSB0aGF0IGlzIGxhdW5jaGVkIGhhcyBhbiBhc3NvY2lhdGVkIHJvb3QgZGV2aWNlIHZvbHVtZSxcbiAgICogZWl0aGVyIGFuIEFtYXpvbiBFQlMgdm9sdW1lIG9yIGFuIGluc3RhbmNlIHN0b3JlIHZvbHVtZS5cbiAgICogWW91IGNhbiB1c2UgYmxvY2sgZGV2aWNlIG1hcHBpbmdzIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBFQlMgdm9sdW1lcyBvclxuICAgKiBpbnN0YW5jZSBzdG9yZSB2b2x1bWVzIHRvIGF0dGFjaCB0byBhbiBpbnN0YW5jZSB3aGVuIGl0IGlzIGxhdW5jaGVkLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9ibG9jay1kZXZpY2UtbWFwcGluZy1jb25jZXB0cy5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVXNlcyB0aGUgYmxvY2sgZGV2aWNlIG1hcHBpbmcgb2YgdGhlIEFNSVxuICAgKi9cbiAgcmVhZG9ubHkgYmxvY2tEZXZpY2VzPzogQmxvY2tEZXZpY2VbXTtcblxuICAvKipcbiAgICogQ1BVIGNyZWRpdCB0eXBlIGZvciBidXJzdGFibGUgRUMyIGluc3RhbmNlIHR5cGVzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9idXJzdGFibGUtcGVyZm9ybWFuY2UtaW5zdGFuY2VzLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBjcmVkaXQgdHlwZSBpcyBzcGVjaWZpZWQgaW4gdGhlIExhdW5jaCBUZW1wbGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGNwdUNyZWRpdHM/OiBDcHVDcmVkaXRzO1xuXG4gIC8qKlxuICAgKiBJZiB5b3Ugc2V0IHRoaXMgcGFyYW1ldGVyIHRvIHRydWUsIHlvdSBjYW5ub3QgdGVybWluYXRlIHRoZSBpbnN0YW5jZXMgbGF1bmNoZWQgd2l0aCB0aGlzIGxhdW5jaCB0ZW1wbGF0ZVxuICAgKiB1c2luZyB0aGUgQW1hem9uIEVDMiBjb25zb2xlLCBDTEksIG9yIEFQSTsgb3RoZXJ3aXNlLCB5b3UgY2FuLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFRoZSBBUEkgdGVybWluYXRpb24gc2V0dGluZyBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBMYXVuY2ggVGVtcGxhdGUuXG4gICAqL1xuICByZWFkb25seSBkaXNhYmxlQXBpVGVybWluYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgaW5zdGFuY2VzIGFyZSBvcHRpbWl6ZWQgZm9yIEFtYXpvbiBFQlMgSS9PLiBUaGlzIG9wdGltaXphdGlvbiBwcm92aWRlcyBkZWRpY2F0ZWQgdGhyb3VnaHB1dFxuICAgKiB0byBBbWF6b24gRUJTIGFuZCBhbiBvcHRpbWl6ZWQgY29uZmlndXJhdGlvbiBzdGFjayB0byBwcm92aWRlIG9wdGltYWwgQW1hem9uIEVCUyBJL08gcGVyZm9ybWFuY2UuIFRoaXMgb3B0aW1pemF0aW9uXG4gICAqIGlzbid0IGF2YWlsYWJsZSB3aXRoIGFsbCBpbnN0YW5jZSB0eXBlcy4gQWRkaXRpb25hbCB1c2FnZSBjaGFyZ2VzIGFwcGx5IHdoZW4gdXNpbmcgYW4gRUJTLW9wdGltaXplZCBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBFQlMgb3B0aW1pemF0aW9uIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGVic09wdGltaXplZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgcGFyYW1ldGVyIGlzIHNldCB0byB0cnVlLCB0aGUgaW5zdGFuY2UgaXMgZW5hYmxlZCBmb3IgQVdTIE5pdHJvIEVuY2xhdmVzOyBvdGhlcndpc2UsIGl0IGlzIG5vdCBlbmFibGVkIGZvciBBV1MgTml0cm8gRW5jbGF2ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRW5hYmxlbWVudCBvZiBOaXRybyBlbmNsYXZlcyBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBsYXVuY2ggdGVtcGxhdGU7IGRlZmF1bHRpbmcgdG8gZmFsc2UuXG4gICAqL1xuICByZWFkb25seSBuaXRyb0VuY2xhdmVFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgeW91IHNldCB0aGlzIHBhcmFtZXRlciB0byB0cnVlLCB0aGUgaW5zdGFuY2UgaXMgZW5hYmxlZCBmb3IgaGliZXJuYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSGliZXJuYXRpb24gY29uZmlndXJhdGlvbiBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBsYXVuY2ggdGVtcGxhdGU7IGRlZmF1bHRpbmcgdG8gZmFsc2UuXG4gICAqL1xuICByZWFkb25seSBoaWJlcm5hdGlvbkNvbmZpZ3VyZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBhbiBpbnN0YW5jZSBzdG9wcyBvciB0ZXJtaW5hdGVzIHdoZW4geW91IGluaXRpYXRlIHNodXRkb3duIGZyb20gdGhlIGluc3RhbmNlICh1c2luZyB0aGUgb3BlcmF0aW5nIHN5c3RlbSBjb21tYW5kIGZvciBzeXN0ZW0gc2h1dGRvd24pLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS90ZXJtaW5hdGluZy1pbnN0YW5jZXMuaHRtbCNVc2luZ19DaGFuZ2luZ0luc3RhbmNlSW5pdGlhdGVkU2h1dGRvd25CZWhhdmlvclxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFNodXRkb3duIGJlaGF2aW9yIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGxhdW5jaCB0ZW1wbGF0ZTsgZGVmYXVsdHMgdG8gU1RPUC5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlSW5pdGlhdGVkU2h1dGRvd25CZWhhdmlvcj86IEluc3RhbmNlSW5pdGlhdGVkU2h1dGRvd25CZWhhdmlvcjtcblxuICAvKipcbiAgICogSWYgdGhpcyBwcm9wZXJ0eSBpcyBkZWZpbmVkLCB0aGVuIHRoZSBMYXVuY2ggVGVtcGxhdGUncyBJbnN0YW5jZU1hcmtldE9wdGlvbnMgd2lsbCBiZVxuICAgKiBzZXQgdG8gdXNlIFNwb3QgaW5zdGFuY2VzLCBhbmQgdGhlIG9wdGlvbnMgZm9yIHRoZSBTcG90IGluc3RhbmNlcyB3aWxsIGJlIGFzIGRlZmluZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSW5zdGFuY2UgbGF1bmNoZWQgd2l0aCB0aGlzIHRlbXBsYXRlIHdpbGwgbm90IGJlIHNwb3QgaW5zdGFuY2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3BvdE9wdGlvbnM/OiBMYXVuY2hUZW1wbGF0ZVNwb3RPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIFNTSCBrZXlwYWlyIHRvIGdyYW50IGFjY2VzcyB0byBpbnN0YW5jZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIFNTSCBhY2Nlc3Mgd2lsbCBiZSBwb3NzaWJsZS5cbiAgICogQGRlcHJlY2F0ZWQgLSBVc2UgYGtleVBhaXJgIGluc3RlYWQgLSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL2FwaS92Mi9kb2NzL2F3cy1jZGstbGliLmF3c19lYzItcmVhZG1lLmh0bWwjdXNpbmctYW4tZXhpc3RpbmctZWMyLWtleS1wYWlyXG4gICAqL1xuICByZWFkb25seSBrZXlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgU1NIIGtleXBhaXIgdG8gZ3JhbnQgYWNjZXNzIHRvIHRoZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBTU0ggYWNjZXNzIHdpbGwgYmUgcG9zc2libGUuXG4gICAqL1xuICByZWFkb25seSBrZXlQYWlyPzogSUtleVBhaXI7XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byB0cnVlLCB0aGVuIGRldGFpbGVkIG1vbml0b3Jpbmcgd2lsbCBiZSBlbmFibGVkIG9uIGluc3RhbmNlcyBjcmVhdGVkIHdpdGggdGhpc1xuICAgKiBsYXVuY2ggdGVtcGxhdGUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL3VzaW5nLWNsb3Vkd2F0Y2gtbmV3Lmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgRmFsc2UgLSBEZXRhaWxlZCBtb25pdG9yaW5nIGlzIGRpc2FibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV0YWlsZWRNb25pdG9yaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2VjdXJpdHkgZ3JvdXAgdG8gYXNzaWduIHRvIGluc3RhbmNlcyBjcmVhdGVkIHdpdGggdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgTm8gc2VjdXJpdHkgZ3JvdXAgaXMgYXNzaWduZWQuXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwPzogSVNlY3VyaXR5R3JvdXA7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgSU1EU3YyIHNob3VsZCBiZSByZXF1aXJlZCBvbiBsYXVuY2hlZCBpbnN0YW5jZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVJbWRzdjI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBIVFRQIG1ldGFkYXRhIGVuZHBvaW50IG9uIHlvdXIgaW5zdGFuY2VzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtbWV0YWRhdGFvcHRpb25zLmh0bWwjY2ZuLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtbWV0YWRhdGFvcHRpb25zLWh0dHBlbmRwb2ludFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBodHRwRW5kcG9pbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBJUHY2IGVuZHBvaW50IGZvciB0aGUgaW5zdGFuY2UgbWV0YWRhdGEgc2VydmljZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy5odG1sI2Nmbi1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLW1ldGFkYXRhb3B0aW9ucy1odHRwcHJvdG9jb2xpcHY2XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGh0dHBQcm90b2NvbElwdjY/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzaXJlZCBIVFRQIFBVVCByZXNwb25zZSBob3AgbGltaXQgZm9yIGluc3RhbmNlIG1ldGFkYXRhIHJlcXVlc3RzLiBUaGUgbGFyZ2VyIHRoZSBudW1iZXIsIHRoZSBmdXJ0aGVyIGluc3RhbmNlIG1ldGFkYXRhIHJlcXVlc3RzIGNhbiB0cmF2ZWwuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS1tZXRhZGF0YW9wdGlvbnMuaHRtbCNjZm4tZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS1tZXRhZGF0YW9wdGlvbnMtaHR0cHB1dHJlc3BvbnNlaG9wbGltaXRcbiAgICpcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cFB1dFJlc3BvbnNlSG9wTGltaXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0ZSBvZiB0b2tlbiB1c2FnZSBmb3IgeW91ciBpbnN0YW5jZSBtZXRhZGF0YSByZXF1ZXN0cy4gIFRoZSBkZWZhdWx0IHN0YXRlIGlzIGBvcHRpb25hbGAgaWYgbm90IHNwZWNpZmllZC4gSG93ZXZlcixcbiAgICogaWYgcmVxdWlyZUltZHN2MiBpcyB0cnVlLCB0aGUgc3RhdGUgbXVzdCBiZSBgcmVxdWlyZWRgLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtbWV0YWRhdGFvcHRpb25zLmh0bWwjY2ZuLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtbWV0YWRhdGFvcHRpb25zLWh0dHB0b2tlbnNcbiAgICpcbiAgICogQGRlZmF1bHQgTGF1bmNoVGVtcGxhdGVIdHRwVG9rZW5zLk9QVElPTkFMXG4gICAqL1xuICByZWFkb25seSBodHRwVG9rZW5zPzogTGF1bmNoVGVtcGxhdGVIdHRwVG9rZW5zO1xuXG4gIC8qKlxuICAgKiBTZXQgdG8gZW5hYmxlZCB0byBhbGxvdyBhY2Nlc3MgdG8gaW5zdGFuY2UgdGFncyBmcm9tIHRoZSBpbnN0YW5jZSBtZXRhZGF0YS4gU2V0IHRvIGRpc2FibGVkIHRvIHR1cm4gb2ZmIGFjY2VzcyB0byBpbnN0YW5jZSB0YWdzIGZyb20gdGhlIGluc3RhbmNlIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtbWV0YWRhdGFvcHRpb25zLmh0bWwjY2ZuLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtbWV0YWRhdGFvcHRpb25zLWluc3RhbmNlbWV0YWRhdGF0YWdzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZU1ldGFkYXRhVGFncz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgaW5zdGFuY2VzIHNob3VsZCBoYXZlIGEgcHVibGljIElQIGFkZHJlc3NlcyBhc3NvY2lhdGVkIHdpdGggdGhlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBVc2Ugc3VibmV0IHNldHRpbmdzXG4gICAqL1xuICByZWFkb25seSBhc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2UgcHJvZmlsZSB1c2VkIHRvIHBhc3Mgcm9sZSBpbmZvcm1hdGlvbiB0byBFQzIgaW5zdGFuY2VzLlxuICAgKlxuICAgKiBOb3RlOiBZb3UgY2FuIHByb3ZpZGUgYW4gaW5zdGFuY2VQcm9maWxlIG9yIGEgcm9sZSwgYnV0IG5vdCBib3RoLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGluc3RhbmNlIHByb2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlUHJvZmlsZT86IGlhbS5JSW5zdGFuY2VQcm9maWxlO1xufVxuXG4vKipcbiAqIEEgY2xhc3MgdGhhdCBwcm92aWRlcyBjb252ZW5pZW50IGFjY2VzcyB0byBzcGVjaWFsIHZlcnNpb24gdG9rZW5zIGZvciBMYXVuY2hUZW1wbGF0ZVxuICogdmVyc2lvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYXVuY2hUZW1wbGF0ZVNwZWNpYWxWZXJzaW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgc3BlY2lhbCB2YWx1ZSB0aGF0IGRlbm90ZXMgdGhhdCB1c2VycyBvZiBhIExhdW5jaCBUZW1wbGF0ZSBzaG91bGRcbiAgICogcmVmZXJlbmNlIHRoZSBMQVRFU1QgdmVyc2lvbiBvZiB0aGUgdGVtcGxhdGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExBVEVTVF9WRVJTSU9OOiBzdHJpbmcgPSBcIiRMYXRlc3RcIjtcblxuICAvKipcbiAgICogVGhlIHNwZWNpYWwgdmFsdWUgdGhhdCBkZW5vdGVzIHRoYXQgdXNlcnMgb2YgYSBMYXVuY2ggVGVtcGxhdGUgc2hvdWxkXG4gICAqIHJlZmVyZW5jZSB0aGUgREVGQVVMVCB2ZXJzaW9uIG9mIHRoZSB0ZW1wbGF0ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9WRVJTSU9OOiBzdHJpbmcgPSBcIiREZWZhdWx0XCI7XG59XG5cbi8qKlxuICogQXR0cmlidXRlcyBmb3IgYW4gaW1wb3J0ZWQgTGF1bmNoVGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoVGVtcGxhdGVBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIGxhdW5jaCB0ZW1wbGF0ZSB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgVmVyc2lvbjogXCIkRGVmYXVsdFwiXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uTnVtYmVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgTGF1bmNoIFRlbXBsYXRlXG4gICAqXG4gICAqIEV4YWN0bHkgb25lIG9mIGBsYXVuY2hUZW1wbGF0ZUlkYCBhbmQgYGxhdW5jaFRlbXBsYXRlTmFtZWAgbWF5IGJlIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGVJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIExhdW5jaCBUZW1wbGF0ZVxuICAgKlxuICAgKiBFeGFjdGx5IG9uZSBvZiBgbGF1bmNoVGVtcGxhdGVJZGAgYW5kIGBsYXVuY2hUZW1wbGF0ZU5hbWVgIG1heSBiZSBzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGlzIHJlcHJlc2VudHMgYW4gRUMyIExhdW5jaFRlbXBsYXRlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2VjMi1sYXVuY2gtdGVtcGxhdGVzLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIExhdW5jaFRlbXBsYXRlXG4gIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZVxuICBpbXBsZW1lbnRzIElMYXVuY2hUZW1wbGF0ZSwgaWFtLklHcmFudGFibGUsIElDb25uZWN0YWJsZVxue1xuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIExhdW5jaFRlbXBsYXRlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tTGF1bmNoVGVtcGxhdGVBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogTGF1bmNoVGVtcGxhdGVBdHRyaWJ1dGVzLFxuICApOiBJTGF1bmNoVGVtcGxhdGUge1xuICAgIGNvbnN0IGhhdmVJZCA9IEJvb2xlYW4oYXR0cnMubGF1bmNoVGVtcGxhdGVJZCk7XG4gICAgY29uc3QgaGF2ZU5hbWUgPSBCb29sZWFuKGF0dHJzLmxhdW5jaFRlbXBsYXRlTmFtZSk7XG4gICAgaWYgKGhhdmVJZCA9PSBoYXZlTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkxhdW5jaFRlbXBsYXRlLmZyb21MYXVuY2hUZW1wbGF0ZUF0dHJpYnV0ZXMoKSByZXF1aXJlcyBleGFjdGx5IG9uZSBvZiBsYXVuY2hUZW1wbGF0ZUlkIG9yIGxhdW5jaFRlbXBsYXRlTmFtZSBiZSBwcm92aWRlZC5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSBpbXBsZW1lbnRzIElMYXVuY2hUZW1wbGF0ZSB7XG4gICAgICBwdWJsaWMgZ2V0IGxhdW5jaFRlbXBsYXRlT3V0cHV0cygpOiBMYXVuY2hUZW1wbGF0ZU91dHB1dHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZlcnNpb25OdW1iZXI6IHRoaXMudmVyc2lvbk51bWJlcixcbiAgICAgICAgICBsYXVuY2hUZW1wbGF0ZUlkOiB0aGlzLmxhdW5jaFRlbXBsYXRlSWQsXG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGVOYW1lOiB0aGlzLmxhdW5jaFRlbXBsYXRlTmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF1bmNoVGVtcGxhdGVPdXRwdXRzO1xuICAgICAgfVxuICAgICAgcHVibGljIHJlYWRvbmx5IHZlcnNpb25OdW1iZXIgPVxuICAgICAgICBhdHRycy52ZXJzaW9uTnVtYmVyID8/IExhdW5jaFRlbXBsYXRlU3BlY2lhbFZlcnNpb25zLkRFRkFVTFRfVkVSU0lPTjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBsYXVuY2hUZW1wbGF0ZUlkPyA9IGF0dHJzLmxhdW5jaFRlbXBsYXRlSWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGVOYW1lPyA9IGF0dHJzLmxhdW5jaFRlbXBsYXRlTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vICAgTWVtYmVycyBmb3IgSUxhdW5jaFRlbXBsYXRlL0lUZXJyYUNvbnN0cnVjdCBpbnRlcmZhY2VcblxuICBwdWJsaWMgZ2V0IGxhdW5jaFRlbXBsYXRlT3V0cHV0cygpOiBMYXVuY2hUZW1wbGF0ZU91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uTnVtYmVyOiB0aGlzLnZlcnNpb25OdW1iZXIsXG4gICAgICBsYXVuY2hUZW1wbGF0ZUlkOiB0aGlzLmxhdW5jaFRlbXBsYXRlSWQsXG4gICAgICBsYXVuY2hUZW1wbGF0ZU5hbWU6IHRoaXMubGF1bmNoVGVtcGxhdGVOYW1lLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLmxhdW5jaFRlbXBsYXRlT3V0cHV0cztcbiAgfVxuICBwdWJsaWMgcmVhZG9ubHkgdmVyc2lvbk51bWJlcjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgbGF1bmNoVGVtcGxhdGVJZD86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlTmFtZT86IHN0cmluZztcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gICBEYXRhIG1lbWJlcnNcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmVyc2lvbiBmb3IgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRWZXJzaW9uTnVtYmVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbGF0ZXN0VmVyc2lvbk51bWJlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBPUyB0aGUgaW5zdGFuY2UgaXMgcnVubmluZy5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9zVHlwZT86IE9wZXJhdGluZ1N5c3RlbVR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBBTUkgSUQgb2YgdGhlIGltYWdlIHRvIHVzZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogSUFNIFJvbGUgYXNzdW1lZCBieSBpbnN0YW5jZXMgdGhhdCBhcmUgbGF1bmNoZWQgZnJvbSB0aGlzIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVXNlckRhdGEgZXhlY3V0ZWQgYnkgaW5zdGFuY2VzIHRoYXQgYXJlIGxhdW5jaGVkIGZyb20gdGhpcyB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZXJEYXRhPzogVXNlckRhdGE7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgaW5zdGFuY2UgdG8gbGF1bmNoLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2VUeXBlPzogSW5zdGFuY2VUeXBlO1xuXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogdGZMYXVuY2hUZW1wbGF0ZS5MYXVuY2hUZW1wbGF0ZTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gICBQcml2YXRlL3Byb3RlY3RlZCBkYXRhIG1lbWJlcnNcblxuICAvKipcbiAgICogUHJpbmNpcGFsIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBfZ3JhbnRQcmluY2lwYWw/OiBpYW0uSVByaW5jaXBhbDtcblxuICAvKipcbiAgICogQWxsb3dzIHNwZWNpZnlpbmcgc2VjdXJpdHkgZ3JvdXAgY29ubmVjdGlvbnMgZm9yIHRoZSBpbnN0YW5jZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2Nvbm5lY3Rpb25zPzogQ29ubmVjdGlvbnM7XG5cbiAgLy8gLyoqXG4gIC8vICAqIFRhZ01hbmFnZXIgZm9yIHRhZ2dpbmcgc3VwcG9ydC5cbiAgLy8gICovXG4gIC8vIHByb3RlY3RlZCByZWFkb25seSB0YWdzOiBUYWdNYW5hZ2VyO1xuXG4gIC8vIGlzVGFnZ2FibGVDb25zdHJ1Y3QgcmVxdWlyZWQgcHJvcGVydGllc1xuICBwcml2YXRlIF90YWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBwdWJsaWMgc2V0IHRhZ3ModmFsdWU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgICB0aGlzLl90YWdzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCB0YWdzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiBUb2tlbi5hc1N0cmluZ01hcChcbiAgICAgIExhenkuYW55VmFsdWUoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLl90YWdzID8/IHVuZGVmaW5lZCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHRhZ3NJbnB1dCgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdGFncztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBMYXVuY2hUZW1wbGF0ZVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gQmFzaWMgdmFsaWRhdGlvbiBvZiB0aGUgcHJvdmlkZWQgc3BvdCBibG9jayBkdXJhdGlvblxuICAgIGNvbnN0IHNwb3REdXJhdGlvbiA9IHByb3BzPy5zcG90T3B0aW9ucz8uYmxvY2tEdXJhdGlvbj8udG9Ib3Vycyh7XG4gICAgICBpbnRlZ3JhbDogdHJ1ZSxcbiAgICB9KTtcbiAgICBpZiAoc3BvdER1cmF0aW9uICE9PSB1bmRlZmluZWQgJiYgKHNwb3REdXJhdGlvbiA8IDEgfHwgc3BvdER1cmF0aW9uID4gNikpIHtcbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL3Nwb3QtcmVxdWVzdHMuaHRtbCNmaXhlZC1kdXJhdGlvbi1zcG90LWluc3RhbmNlc1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkRXJyb3IoXG4gICAgICAgIFwiU3BvdCBibG9jayBkdXJhdGlvbiBtdXN0IGJlIGV4YWN0bHkgMSwgMiwgMywgNCwgNSwgb3IgNiBob3Vycy5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQmFzaWMgdmFsaWRhdGlvbiBvZiB0aGUgcHJvdmlkZWQgaHR0cFB1dFJlc3BvbnNlSG9wTGltaXRcbiAgICBpZiAoXG4gICAgICBwcm9wcy5odHRwUHV0UmVzcG9uc2VIb3BMaW1pdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAocHJvcHMuaHR0cFB1dFJlc3BvbnNlSG9wTGltaXQgPCAxIHx8IHByb3BzLmh0dHBQdXRSZXNwb25zZUhvcExpbWl0ID4gNjQpXG4gICAgKSB7XG4gICAgICAvLyBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtbWV0YWRhdGFvcHRpb25zLmh0bWwjY2ZuLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtbWV0YWRhdGFvcHRpb25zLWh0dHBwdXRyZXNwb25zZWhvcGxpbWl0XG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRFcnJvcihcbiAgICAgICAgXCJIdHRwUHV0UmVzcG9uc2VIb3BMaW1pdCBtdXN0IGJldHdlZW4gMSBhbmQgNjRcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmluc3RhbmNlUHJvZmlsZSAmJiBwcm9wcy5yb2xlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgY2Fubm90IHByb3ZpZGUgYm90aCBhbiBpbnN0YW5jZVByb2ZpbGUgYW5kIGEgcm9sZVwiKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMua2V5TmFtZSAmJiBwcm9wcy5rZXlQYWlyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHNwZWNpZnkgYm90aCBvZiAna2V5TmFtZScgYW5kICdrZXlQYWlyJzsgcHJlZmVyICdrZXlQYWlyJ1wiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB1c2UgcHJvdmlkZWQgaW5zdGFuY2UgcHJvZmlsZSBvciBjcmVhdGUgb25lIGlmIGEgcm9sZSB3YXMgcHJvdmlkZWRcbiAgICBsZXQgaWFtUHJvZmlsZUFybjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5pbnN0YW5jZVByb2ZpbGUpIHtcbiAgICAgIHRoaXMucm9sZSA9IHByb3BzLmluc3RhbmNlUHJvZmlsZS5yb2xlO1xuICAgICAgaWFtUHJvZmlsZUFybiA9IHByb3BzLmluc3RhbmNlUHJvZmlsZS5pbnN0YW5jZVByb2ZpbGVBcm47XG4gICAgfSBlbHNlIGlmIChwcm9wcy5yb2xlKSB7XG4gICAgICB0aGlzLnJvbGUgPSBwcm9wcy5yb2xlO1xuICAgICAgY29uc3QgaWFtUHJvZmlsZSA9IG5ldyB0ZklhbUluc3RhbmNlUHJvZmlsZS5JYW1JbnN0YW5jZVByb2ZpbGUoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiUHJvZmlsZVwiLFxuICAgICAgICB7XG4gICAgICAgICAgcm9sZTogdGhpcy5yb2xlLnJvbGVOYW1lLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGlhbVByb2ZpbGVBcm4gPSBpYW1Qcm9maWxlLmFybjtcbiAgICB9XG5cbiAgICB0aGlzLl9ncmFudFByaW5jaXBhbCA9IHRoaXMucm9sZTtcblxuICAgIGlmIChwcm9wcy5zZWN1cml0eUdyb3VwKSB7XG4gICAgICB0aGlzLl9jb25uZWN0aW9ucyA9IG5ldyBDb25uZWN0aW9ucyh7XG4gICAgICAgIHNlY3VyaXR5R3JvdXBzOiBbcHJvcHMuc2VjdXJpdHlHcm91cF0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3Qgc2VjdXJpdHlHcm91cHNUb2tlbiA9IExhenkubGlzdFZhbHVlKHtcbiAgICAgIHByb2R1Y2U6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2Nvbm5lY3Rpb25zICYmIHRoaXMuX2Nvbm5lY3Rpb25zLnNlY3VyaXR5R3JvdXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHMubWFwKFxuICAgICAgICAgICAgKHNnKSA9PiBzZy5zZWN1cml0eUdyb3VwSWQsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGltYWdlQ29uZmlnOiBNYWNoaW5lSW1hZ2VDb25maWcgfCB1bmRlZmluZWQgPVxuICAgICAgcHJvcHMubWFjaGluZUltYWdlPy5nZXRJbWFnZSh0aGlzKTtcbiAgICBpZiAoaW1hZ2VDb25maWcpIHtcbiAgICAgIHRoaXMub3NUeXBlID0gaW1hZ2VDb25maWcub3NUeXBlO1xuICAgICAgdGhpcy5pbWFnZUlkID0gaW1hZ2VDb25maWcuaW1hZ2VJZDtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLm9zVHlwZSAmJlxuICAgICAgcHJvcHMua2V5UGFpciAmJlxuICAgICAgIXByb3BzLmtleVBhaXIuX2lzT3NDb21wYXRpYmxlKHRoaXMub3NUeXBlKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHtwcm9wcy5rZXlQYWlyLnR5cGV9IGtleXMgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIGNob3NlbiBBTUlgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBwcmlvcml0eTogcHJvcC51c2VyRGF0YSAtPiB1c2VyRGF0YSBmcm9tIG1hY2hpbmVJbWFnZSAtPiB1bmRlZmluZWRcbiAgICB0aGlzLnVzZXJEYXRhID0gcHJvcHMudXNlckRhdGEgPz8gaW1hZ2VDb25maWc/LnVzZXJEYXRhO1xuICAgIHRoaXMuaW5zdGFuY2VUeXBlID0gcHJvcHMuaW5zdGFuY2VUeXBlO1xuXG4gICAgbGV0IG1hcmtldE9wdGlvbnM6IGFueSA9IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHM/LnNwb3RPcHRpb25zKSB7XG4gICAgICBtYXJrZXRPcHRpb25zID0ge1xuICAgICAgICBtYXJrZXRUeXBlOiBcInNwb3RcIixcbiAgICAgICAgc3BvdE9wdGlvbnM6IHtcbiAgICAgICAgICBibG9ja0R1cmF0aW9uTWludXRlczpcbiAgICAgICAgICAgIHNwb3REdXJhdGlvbiAhPT0gdW5kZWZpbmVkID8gc3BvdER1cmF0aW9uICogNjAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgaW5zdGFuY2VJbnRlcnJ1cHRpb25CZWhhdmlvcjogcHJvcHMuc3BvdE9wdGlvbnMuaW50ZXJydXB0aW9uQmVoYXZpb3IsXG4gICAgICAgICAgbWF4UHJpY2U6IHByb3BzLnNwb3RPcHRpb25zLm1heFByaWNlPy50b1N0cmluZygpLFxuICAgICAgICAgIHNwb3RJbnN0YW5jZVR5cGU6IHByb3BzLnNwb3RPcHRpb25zLnJlcXVlc3RUeXBlLFxuICAgICAgICAgIHZhbGlkVW50aWw6IHByb3BzLnNwb3RPcHRpb25zLnZhbGlkVW50aWw/LmRhdGUudG9VVENTdHJpbmcoKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICAvLyBSZW1vdmUgU3BvdE9wdGlvbnMgaWYgdGhlcmUgYXJlIG5vbmUuXG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKG1hcmtldE9wdGlvbnMuc3BvdE9wdGlvbnMpLmZpbHRlcihcbiAgICAgICAgICAoaykgPT4gbWFya2V0T3B0aW9ucy5zcG90T3B0aW9uc1trXSxcbiAgICAgICAgKS5sZW5ndGggPT0gMFxuICAgICAgKSB7XG4gICAgICAgIG1hcmtldE9wdGlvbnMuc3BvdE9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhpcy50YWdzID0gbmV3IFRhZ01hbmFnZXIoXG4gICAgLy8gICBUYWdUeXBlLktFWV9WQUxVRSxcbiAgICAvLyAgIHRmTGF1bmNoVGVtcGxhdGUuTGF1bmNoVGVtcGxhdGUudGZSZXNvdXJjZVR5cGUsXG4gICAgLy8gKTtcblxuICAgIGNvbnN0IHRhZ3NUb2tlbiA9IExhenkuYW55VmFsdWUoe1xuICAgICAgcHJvZHVjZTogKCk6XG4gICAgICAgIHwgdGZMYXVuY2hUZW1wbGF0ZS5MYXVuY2hUZW1wbGF0ZVRhZ1NwZWNpZmljYXRpb25zW11cbiAgICAgICAgfCB1bmRlZmluZWQgPT4ge1xuICAgICAgICBpZiAodGhpcy5fdGFncykge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJlc291cmNlVHlwZTogXCJpbnN0YW5jZVwiLFxuICAgICAgICAgICAgICB0YWdzOiB0aGlzLl90YWdzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiBcInZvbHVtZVwiLFxuICAgICAgICAgICAgICB0YWdzOiB0aGlzLl90YWdzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiBcImxhdW5jaC10ZW1wbGF0ZVwiLFxuICAgICAgICAgICAgICB0YWdzOiB0aGlzLl90YWdzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLm1hcCh0ZkxhdW5jaFRlbXBsYXRlLmxhdW5jaFRlbXBsYXRlVGFnU3BlY2lmaWNhdGlvbnNUb1RlcnJhZm9ybSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBuZXR3b3JrSW50ZXJmYWNlczpcbiAgICAgIHwgdGZMYXVuY2hUZW1wbGF0ZS5MYXVuY2hUZW1wbGF0ZU5ldHdvcmtJbnRlcmZhY2VzW11cbiAgICAgIHwgdW5kZWZpbmVkID1cbiAgICAgIHByb3BzLmFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzcyAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkZXZpY2VJbmRleDogMCxcbiAgICAgICAgICAgICAgYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzOlxuICAgICAgICAgICAgICAgIHByb3BzLmFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzcz8udG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgc2VjdXJpdHlHcm91cHM6IHNlY3VyaXR5R3JvdXBzVG9rZW4sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy52ZXJzaW9uRGVzY3JpcHRpb24gJiZcbiAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMudmVyc2lvbkRlc2NyaXB0aW9uKSAmJlxuICAgICAgcHJvcHMudmVyc2lvbkRlc2NyaXB0aW9uLmxlbmd0aCA+IDI1NVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgdmVyc2lvbkRlc2NyaXB0aW9uIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDI1NSBjaGFyYWN0ZXJzLCBnb3QgJHtwcm9wcy52ZXJzaW9uRGVzY3JpcHRpb24ubGVuZ3RofWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgdGZMYXVuY2hUZW1wbGF0ZS5MYXVuY2hUZW1wbGF0ZSh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIG5hbWU6IHByb3BzPy5sYXVuY2hUZW1wbGF0ZU5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHM/LnZlcnNpb25EZXNjcmlwdGlvbixcbiAgICAgIGJsb2NrRGV2aWNlTWFwcGluZ3M6XG4gICAgICAgIHByb3BzPy5ibG9ja0RldmljZXMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gbGF1bmNoVGVtcGxhdGVCbG9ja0RldmljZU1hcHBpbmdzKHRoaXMsIHByb3BzLmJsb2NrRGV2aWNlcylcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGNyZWRpdFNwZWNpZmljYXRpb246XG4gICAgICAgIHByb3BzPy5jcHVDcmVkaXRzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY3B1Q3JlZGl0czogcHJvcHMuY3B1Q3JlZGl0cyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGRpc2FibGVBcGlUZXJtaW5hdGlvbjogcHJvcHM/LmRpc2FibGVBcGlUZXJtaW5hdGlvbixcbiAgICAgIGVic09wdGltaXplZDogcHJvcHM/LmVic09wdGltaXplZD8udG9TdHJpbmcoKSxcbiAgICAgIGVuY2xhdmVPcHRpb25zOlxuICAgICAgICBwcm9wcz8ubml0cm9FbmNsYXZlRW5hYmxlZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGVuYWJsZWQ6IHByb3BzLm5pdHJvRW5jbGF2ZUVuYWJsZWQsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBoaWJlcm5hdGlvbk9wdGlvbnM6XG4gICAgICAgIHByb3BzPy5oaWJlcm5hdGlvbkNvbmZpZ3VyZWQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjb25maWd1cmVkOiBwcm9wcy5oaWJlcm5hdGlvbkNvbmZpZ3VyZWQsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBpYW1JbnN0YW5jZVByb2ZpbGU6XG4gICAgICAgIGlhbVByb2ZpbGVBcm4gIT09IHVuZGVmaW5lZCA/IHsgYXJuOiBpYW1Qcm9maWxlQXJuIH0gOiB1bmRlZmluZWQsXG4gICAgICBpbWFnZUlkOiBpbWFnZUNvbmZpZz8uaW1hZ2VJZCxcbiAgICAgIGluc3RhbmNlVHlwZTogcHJvcHM/Lmluc3RhbmNlVHlwZT8udG9TdHJpbmcoKSxcbiAgICAgIGluc3RhbmNlSW5pdGlhdGVkU2h1dGRvd25CZWhhdmlvcjpcbiAgICAgICAgcHJvcHM/Lmluc3RhbmNlSW5pdGlhdGVkU2h1dGRvd25CZWhhdmlvcixcbiAgICAgIGluc3RhbmNlTWFya2V0T3B0aW9uczogbWFya2V0T3B0aW9ucyxcbiAgICAgIGtleU5hbWU6IHByb3BzLmtleVBhaXI/LmtleVBhaXJOYW1lID8/IHByb3BzPy5rZXlOYW1lLFxuICAgICAgbW9uaXRvcmluZzpcbiAgICAgICAgcHJvcHM/LmRldGFpbGVkTW9uaXRvcmluZyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGVuYWJsZWQ6IHByb3BzLmRldGFpbGVkTW9uaXRvcmluZyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHZwY1NlY3VyaXR5R3JvdXBJZHM6IG5ldHdvcmtJbnRlcmZhY2VzID8gdW5kZWZpbmVkIDogc2VjdXJpdHlHcm91cHNUb2tlbixcbiAgICAgIHRhZ1NwZWNpZmljYXRpb25zOiB0YWdzVG9rZW4sXG4gICAgICB1c2VyRGF0YTogdGhpcy51c2VyRGF0YT8ucmVuZGVyKHRoaXMpLFxuICAgICAgbWV0YWRhdGFPcHRpb25zOiB0aGlzLnJlbmRlck1ldGFkYXRhT3B0aW9ucyhwcm9wcyksXG4gICAgICBuZXR3b3JrSW50ZXJmYWNlcyxcblxuICAgICAgLy8gRmllbGRzIG5vdCB5ZXQgaW1wbGVtZW50ZWQ6XG4gICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS1jYXBhY2l0eXJlc2VydmF0aW9uc3BlY2lmaWNhdGlvbi5odG1sXG4gICAgICAvLyBXaWxsIHJlcXVpcmUgY3JlYXRpbmcgYW4gTDIgZm9yIEFXUzo6RUMyOjpDYXBhY2l0eVJlc2VydmF0aW9uXG4gICAgICAvLyBjYXBhY2l0eVJlc2VydmF0aW9uU3BlY2lmaWNhdGlvbjogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLWNwdW9wdGlvbnMuaHRtbFxuICAgICAgLy8gY3B1T3B0aW9uczogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtZWxhc3RpY2dwdXNwZWNpZmljYXRpb24uaHRtbFxuICAgICAgLy8gZWxhc3RpY0dwdVNwZWNpZmljYXRpb25zOiB1bmRlZmluZWQsXG5cbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEuaHRtbCNjZm4tZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS1lbGFzdGljaW5mZXJlbmNlYWNjZWxlcmF0b3JzXG4gICAgICAvLyBlbGFzdGljSW5mZXJlbmNlQWNjZWxlcmF0b3JzOiB1bmRlZmluZWQsXG5cbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEuaHRtbCNjZm4tZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS1rZXJuZWxpZFxuICAgICAgLy8ga2VybmVsSWQ6IHVuZGVmaW5lZCxcbiAgICAgIC8vIHJhbURpc2tJZDogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lYzItbGF1bmNodGVtcGxhdGUtbGF1bmNodGVtcGxhdGVkYXRhLmh0bWwjY2ZuLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEtbGljZW5zZXNwZWNpZmljYXRpb25zXG4gICAgICAvLyBBbHNvIG5vdCBpbXBsZW1lbnRlZCBpbiBJbnN0YW5jZSBMMlxuICAgICAgLy8gbGljZW5zZVNwZWNpZmljYXRpb25zOiB1bmRlZmluZWQsXG5cbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVjMi1sYXVuY2h0ZW1wbGF0ZS1sYXVuY2h0ZW1wbGF0ZWRhdGEuaHRtbCNjZm4tZWMyLWxhdW5jaHRlbXBsYXRlLWxhdW5jaHRlbXBsYXRlZGF0YS10YWdzcGVjaWZpY2F0aW9uc1xuICAgICAgLy8gU2hvdWxkIGJlIGltcGxlbWVudGVkIHZpYSB0aGUgVGFnZ2luZyBhc3BlY3QgaW4gQ0RLIGNvcmUuIENvbXBsaWNhdGlvbiB3aWxsIGJlIHRoYXQgdGhpcyB0YWdnaW5nIGludGVyZmFjZSBpcyB2ZXJ5IHVuaXF1ZSB0byBMYXVuY2hUZW1wbGF0ZXMuXG4gICAgICAvLyB0YWdTcGVjaWZpY2F0aW9uOiB1bmRlZmluZWRcblxuICAgICAgLy8gVE9ETzogdXNlIElQbGFjZW1lbnRHcm91cCBpbiBMdWFuY2hUZW1wbGF0ZVxuICAgICAgLy8gcGxhY2VtZW50OiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5yb2xlKSB7XG4gICAgICB0aGlzLnJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLnJvbGUpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuaW5zdGFuY2VQcm9maWxlPy5yb2xlKSB7XG4gICAgICB0aGlzLnJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeShwcm9wcy5pbnN0YW5jZVByb2ZpbGUucm9sZSk7XG4gICAgfVxuXG4gICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHRoaXMubm9kZS5wYXRoKTtcblxuICAgIHRoaXMuZGVmYXVsdFZlcnNpb25OdW1iZXIgPSB0aGlzLnJlc291cmNlLmRlZmF1bHRWZXJzaW9uLnRvU3RyaW5nKCk7IC8vIHNob3VsZCBiZSBUb2tlbi5hc1N0cmluZygpP1xuICAgIHRoaXMubGF0ZXN0VmVyc2lvbk51bWJlciA9IHRoaXMucmVzb3VyY2UubGF0ZXN0VmVyc2lvbi50b1N0cmluZygpOyAvLyBzaG91bGQgYmUgVG9rZW4uYXNTdHJpbmcoKT9cbiAgICB0aGlzLmxhdW5jaFRlbXBsYXRlSWQgPSB0aGlzLnJlc291cmNlLmlkO1xuICAgIHRoaXMudmVyc2lvbk51bWJlciA9IHRoaXMucmVzb3VyY2UubGF0ZXN0VmVyc2lvbi50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJNZXRhZGF0YU9wdGlvbnMocHJvcHM6IExhdW5jaFRlbXBsYXRlUHJvcHMpIHtcbiAgICBsZXQgcmVxdWlyZU1ldGFkYXRhT3B0aW9ucyA9IGZhbHNlO1xuICAgIC8vIGlmIHJlcXVpcmVJbWRzdjIgaXMgdHJ1ZSwgaHR0cFRva2VucyBtdXN0IGJlIHJlcXVpcmVkLlxuICAgIGlmIChcbiAgICAgIHByb3BzLnJlcXVpcmVJbWRzdjIgPT09IHRydWUgJiZcbiAgICAgIHByb3BzLmh0dHBUb2tlbnMgPT09IExhdW5jaFRlbXBsYXRlSHR0cFRva2Vucy5PUFRJT05BTFxuICAgICkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkRXJyb3IoXG4gICAgICAgIFwiaHR0cFRva2VucyBtdXN0IGJlIHJlcXVpcmVkIHdoZW4gcmVxdWlyZUltZHN2MiBpcyB0cnVlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBwcm9wcy5odHRwRW5kcG9pbnQgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgcHJvcHMuaHR0cFByb3RvY29sSXB2NiAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICBwcm9wcy5odHRwUHV0UmVzcG9uc2VIb3BMaW1pdCAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICBwcm9wcy5odHRwVG9rZW5zICE9PSB1bmRlZmluZWQgfHxcbiAgICAgIHByb3BzLmluc3RhbmNlTWV0YWRhdGFUYWdzICE9PSB1bmRlZmluZWQgfHxcbiAgICAgIHByb3BzLnJlcXVpcmVJbWRzdjIgPT09IHRydWVcbiAgICApIHtcbiAgICAgIHJlcXVpcmVNZXRhZGF0YU9wdGlvbnMgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAocmVxdWlyZU1ldGFkYXRhT3B0aW9ucykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHR0cEVuZHBvaW50OlxuICAgICAgICAgIHByb3BzLmh0dHBFbmRwb2ludCA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBcImVuYWJsZWRcIlxuICAgICAgICAgICAgOiBwcm9wcy5odHRwRW5kcG9pbnQgPT09IGZhbHNlXG4gICAgICAgICAgICAgID8gXCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBodHRwUHJvdG9jb2xJcHY2OlxuICAgICAgICAgIHByb3BzLmh0dHBQcm90b2NvbElwdjYgPT09IHRydWVcbiAgICAgICAgICAgID8gXCJlbmFibGVkXCJcbiAgICAgICAgICAgIDogcHJvcHMuaHR0cFByb3RvY29sSXB2NiA9PT0gZmFsc2VcbiAgICAgICAgICAgICAgPyBcImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGh0dHBQdXRSZXNwb25zZUhvcExpbWl0OiBwcm9wcy5odHRwUHV0UmVzcG9uc2VIb3BMaW1pdCxcbiAgICAgICAgaHR0cFRva2VuczpcbiAgICAgICAgICBwcm9wcy5yZXF1aXJlSW1kc3YyID09PSB0cnVlXG4gICAgICAgICAgICA/IExhdW5jaFRlbXBsYXRlSHR0cFRva2Vucy5SRVFVSVJFRFxuICAgICAgICAgICAgOiBwcm9wcy5odHRwVG9rZW5zLFxuICAgICAgICBpbnN0YW5jZU1ldGFkYXRhVGFnczpcbiAgICAgICAgICBwcm9wcy5pbnN0YW5jZU1ldGFkYXRhVGFncyA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBcImVuYWJsZWRcIlxuICAgICAgICAgICAgOiBwcm9wcy5pbnN0YW5jZU1ldGFkYXRhVGFncyA9PT0gZmFsc2VcbiAgICAgICAgICAgICAgPyBcImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIHNlY3VyaXR5IGdyb3VwIHRvIHRoZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHNlY3VyaXR5R3JvdXA6IFRoZSBzZWN1cml0eSBncm91cCB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBhZGRTZWN1cml0eUdyb3VwKHNlY3VyaXR5R3JvdXA6IElTZWN1cml0eUdyb3VwKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9jb25uZWN0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkxhdW5jaFRlbXBsYXRlIGNhbiBvbmx5IGJlIGFkZGVkIGEgc2VjdXJpdHlHcm91cCBpZiBhbm90aGVyIHNlY3VyaXR5R3JvdXAgaXMgaW5pdGlhbGl6ZWQgaW4gdGhlIGNvbnN0cnVjdG9yLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fY29ubmVjdGlvbnMuYWRkU2VjdXJpdHlHcm91cChzZWN1cml0eUdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3Mgc3BlY2lmeWluZyBzZWN1cml0eSBncm91cCBjb25uZWN0aW9ucyBmb3IgdGhlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAbm90ZSBPbmx5IGF2YWlsYWJsZSBpZiB5b3UgcHJvdmlkZSBhIHNlY3VyaXR5R3JvdXAgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIExhdW5jaFRlbXBsYXRlLlxuICAgKi9cbiAgcHVibGljIGdldCBjb25uZWN0aW9ucygpOiBDb25uZWN0aW9ucyB7XG4gICAgaWYgKCF0aGlzLl9jb25uZWN0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkxhdW5jaFRlbXBsYXRlIGNhbiBvbmx5IGJlIHVzZWQgYXMgSUNvbm5lY3RhYmxlIGlmIGEgc2VjdXJpdHlHcm91cCBpcyBwcm92aWRlZCB3aGVuIGNvbnN0cnVjdGluZyBpdC5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG8uXG4gICAqXG4gICAqIEBub3RlIE9ubHkgYXZhaWxhYmxlIGlmIHlvdSBwcm92aWRlIGEgcm9sZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgTGF1bmNoVGVtcGxhdGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGdyYW50UHJpbmNpcGFsKCk6IGlhbS5JUHJpbmNpcGFsIHtcbiAgICBpZiAoIXRoaXMuX2dyYW50UHJpbmNpcGFsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTGF1bmNoVGVtcGxhdGUgY2FuIG9ubHkgYmUgdXNlZCBhcyBJR3JhbnRhYmxlIGlmIGEgcm9sZSBpcyBwcm92aWRlZCB3aGVuIGNvbnN0cnVjdGluZyBpdC5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9ncmFudFByaW5jaXBhbDtcbiAgfVxufVxuIl19
@@ -0,0 +1,7 @@
1
+ export declare const ELBV2_ACCOUNTS: {
2
+ [region: string]: string;
3
+ };
4
+ /**
5
+ * The account ID for ELBv2 in this region
6
+ */
7
+ export declare function getElbv2Account(region: string): string | undefined;