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,262 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Instance = 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/instance.ts
7
+ const provider_aws_1 = require("@cdktf/provider-aws");
8
+ const cdktf_1 = require("cdktf");
9
+ const aws_construct_1 = require("../aws-construct");
10
+ // TODO: Use TagManager and tag-aspect instead
11
+ const aws_tags_1 = require("../aws-tags");
12
+ // import { Tags } from "../tag-aspect";
13
+ const require_imdsv2_aspect_1 = require("./aspects/require-imdsv2-aspect");
14
+ // import { CloudFormationInit } from "./cfn-init";
15
+ const connections_1 = require("./connections");
16
+ const ebs_util_1 = require("./private/ebs-util");
17
+ const security_group_1 = require("./security-group");
18
+ const vpc_1 = require("./vpc");
19
+ // import { md5hash } from "../../helpers-internal";
20
+ const iam = require("../iam");
21
+ /**
22
+ * Name tag constant
23
+ */
24
+ const NAME_TAG = "Name";
25
+ /**
26
+ * This represents a single EC2 instance
27
+ */
28
+ class Instance extends aws_construct_1.AwsConstructBase {
29
+ get instanceOutputs() {
30
+ return {
31
+ instanceId: this.instanceId,
32
+ };
33
+ }
34
+ get outputs() {
35
+ return this.instanceOutputs;
36
+ }
37
+ constructor(scope, id, props) {
38
+ super(scope, id);
39
+ this.securityGroups = [];
40
+ // if (props.initOptions && !props.init) {
41
+ // throw new Error("Setting 'initOptions' requires that 'init' is also set");
42
+ // }
43
+ if (props.keyName && props.keyPair) {
44
+ throw new Error("Cannot specify both of 'keyName' and 'keyPair'; prefer 'keyPair'");
45
+ }
46
+ // if credit specification is set, then the instance type must be burstable
47
+ if (props.creditSpecification && !props.instanceType.isBurstable()) {
48
+ throw new Error(`creditSpecification is supported only for T4g, T3a, T3, T2 instance type, got: ${props.instanceType.toString()}`);
49
+ }
50
+ if (props.securityGroup) {
51
+ this.securityGroup = props.securityGroup;
52
+ }
53
+ else {
54
+ this.securityGroup = new security_group_1.SecurityGroup(this, "InstanceSecurityGroup", {
55
+ vpc: props.vpc,
56
+ allowAllOutbound: props.allowAllOutbound !== false,
57
+ allowAllIpv6Outbound: props.allowAllIpv6Outbound,
58
+ });
59
+ }
60
+ this.connections = new connections_1.Connections({
61
+ securityGroups: [this.securityGroup],
62
+ });
63
+ this.securityGroups.push(this.securityGroup);
64
+ aws_tags_1.Tags.of(this).add(NAME_TAG, props.instanceName || this.node.path);
65
+ if (props.instanceProfile && props.role) {
66
+ throw new Error("You cannot provide both instanceProfile and role");
67
+ }
68
+ let iamInstanceProfile = undefined;
69
+ if (props.instanceProfile?.role) {
70
+ this.role = props.instanceProfile.role;
71
+ iamInstanceProfile = props.instanceProfile.instanceProfileName;
72
+ }
73
+ else {
74
+ this.role =
75
+ props.role ||
76
+ new iam.Role(this, "InstanceRole", {
77
+ assumedBy: new iam.ServicePrincipal("ec2.amazonaws.com"),
78
+ });
79
+ const iamProfile = new provider_aws_1.iamInstanceProfile.IamInstanceProfile(this, "InstanceProfile", {
80
+ role: this.role.roleName,
81
+ });
82
+ iamInstanceProfile = iamProfile.id;
83
+ }
84
+ this.grantPrincipal = this.role;
85
+ if (props.ssmSessionPermissions) {
86
+ this.role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName(this, "AmazonSSMManagedInstanceCore", "AmazonSSMManagedInstanceCore"));
87
+ }
88
+ // use delayed evaluation
89
+ const imageConfig = props.machineImage.getImage(this);
90
+ this.userData = props.userData ?? imageConfig.userData;
91
+ const securityGroupsToken = cdktf_1.Lazy.listValue({
92
+ produce: () => this.securityGroups.map((sg) => sg.securityGroupId),
93
+ });
94
+ const { subnets, hasPublic } = props.vpc.selectSubnets(props.vpcSubnets);
95
+ let subnet;
96
+ if (props.availabilityZone) {
97
+ const selected = subnets.filter((sn) => sn.availabilityZone === props.availabilityZone);
98
+ if (selected.length === 1) {
99
+ subnet = selected[0];
100
+ }
101
+ else {
102
+ cdktf_1.Annotations.of(this).addError(`Need exactly 1 subnet to match AZ '${props.availabilityZone}', found ${selected.length}. Use a different availabilityZone.`);
103
+ }
104
+ }
105
+ else {
106
+ if (subnets.length > 0) {
107
+ subnet = subnets[0];
108
+ }
109
+ else {
110
+ cdktf_1.Annotations.of(this).addError(`Did not find any subnets matching '${JSON.stringify(props.vpcSubnets)}', please use a different selection.`);
111
+ }
112
+ }
113
+ if (!subnet) {
114
+ // We got here and we don't have a subnet because of validation errors.
115
+ // Invent one on the spot so the code below doesn't fail.
116
+ subnet = vpc_1.Subnet.fromSubnetAttributes(this, "DummySubnet", {
117
+ subnetId: "s-notfound",
118
+ availabilityZone: "az-notfound",
119
+ });
120
+ }
121
+ // network interfaces array is set to configure the primary network interface if associatePublicIpAddress is true or false
122
+ let networkInterfaces = undefined;
123
+ if (props.associatePublicIpAddress !== undefined) {
124
+ this.primaryNetworkInterface = new provider_aws_1.networkInterface.NetworkInterface(this, "NetworkInterface", {
125
+ subnetId: subnet.subnetId,
126
+ securityGroups: securityGroupsToken,
127
+ privateIps: props.privateIpAddress
128
+ ? [props.privateIpAddress]
129
+ : undefined,
130
+ });
131
+ // TODO: Use networkInterfaceAttachment instead?
132
+ // ref: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance#network-interfaces
133
+ networkInterfaces = [
134
+ {
135
+ deviceIndex: 0,
136
+ networkInterfaceId: this.primaryNetworkInterface.id,
137
+ },
138
+ ];
139
+ }
140
+ if (props.keyPair && !props.keyPair._isOsCompatible(imageConfig.osType)) {
141
+ throw new Error(`${props.keyPair.type} keys are not compatible with the chosen AMI`);
142
+ }
143
+ if (props.enclaveEnabled && props.hibernationEnabled) {
144
+ throw new Error("You can't set both `enclaveEnabled` and `hibernationEnabled` to true on the same instance");
145
+ }
146
+ if (props.ipv6AddressCount !== undefined &&
147
+ !cdktf_1.Token.isUnresolved(props.ipv6AddressCount) &&
148
+ (props.ipv6AddressCount < 0 || !Number.isInteger(props.ipv6AddressCount))) {
149
+ throw new Error(`\'ipv6AddressCount\' must be a non-negative integer, got: ${props.ipv6AddressCount}`);
150
+ }
151
+ if (props.ipv6AddressCount !== undefined &&
152
+ props.associatePublicIpAddress !== undefined) {
153
+ throw new Error("You can't set both 'ipv6AddressCount' and 'associatePublicIpAddress'");
154
+ }
155
+ // https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance#tag-guide
156
+ const volumeTags = props.propagateTagsToVolumeOnCreation
157
+ ? { [NAME_TAG]: props.instanceName || this.node.path }
158
+ : undefined;
159
+ // if network interfaces array is configured then subnetId, securityGroupIds,
160
+ // and privateIpAddress are configured on the network interface level and
161
+ // there is no need to configure them on the instance level
162
+ this.instance = new provider_aws_1.instance.Instance(this, "Resource", {
163
+ ami: imageConfig.imageId,
164
+ keyName: props.keyPair?.keyPairName ?? props?.keyName,
165
+ instanceType: props.instanceType.toString(),
166
+ subnetId: networkInterfaces ? undefined : subnet.subnetId,
167
+ securityGroups: networkInterfaces ? undefined : securityGroupsToken,
168
+ associatePublicIpAddress: props.associatePublicIpAddress,
169
+ networkInterface: networkInterfaces,
170
+ iamInstanceProfile,
171
+ userDataBase64: this.userData.render(this),
172
+ // unlike https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/instance.ts#L652
173
+ userDataReplaceOnChange: props.userDataCausesReplacement ?? true,
174
+ availabilityZone: subnet.availabilityZone,
175
+ sourceDestCheck: props.sourceDestCheck,
176
+ ebsBlockDevice: props.blockDevices !== undefined
177
+ ? (0, ebs_util_1.instanceEbsBlockDeviceMappings)(this, props.blockDevices)
178
+ : undefined,
179
+ rootBlockDevice: props.blockDevices !== undefined
180
+ ? (0, ebs_util_1.instanceRootBlockDeviceMapping)(this, props.blockDevices)
181
+ : undefined,
182
+ ephemeralBlockDevice: props.blockDevices !== undefined
183
+ ? (0, ebs_util_1.instanceEphemeralBlockDeviceMappings)(props.blockDevices)
184
+ : undefined,
185
+ privateIp: networkInterfaces ? undefined : props.privateIpAddress,
186
+ volumeTags,
187
+ monitoring: props.detailedMonitoring,
188
+ creditSpecification: props.creditSpecification
189
+ ? { cpuCredits: props.creditSpecification }
190
+ : undefined,
191
+ ebsOptimized: props.ebsOptimized,
192
+ disableApiTermination: props.disableApiTermination,
193
+ instanceInitiatedShutdownBehavior: props.instanceInitiatedShutdownBehavior,
194
+ placementGroup: props.placementGroup?.placementGroupName,
195
+ enclaveOptions: props.enclaveEnabled !== undefined
196
+ ? { enabled: props.enclaveEnabled }
197
+ : undefined,
198
+ hibernation: props.hibernationEnabled,
199
+ ipv6AddressCount: props.ipv6AddressCount,
200
+ });
201
+ this.instance.node.addDependency(this.role);
202
+ // if associatePublicIpAddress is true, then there must be a dependency on internet connectivity
203
+ if (props.associatePublicIpAddress !== undefined &&
204
+ props.associatePublicIpAddress) {
205
+ const internetConnected = props.vpc.selectSubnets(props.vpcSubnets).internetConnectivityEstablished;
206
+ this.instance.node.addDependency(internetConnected);
207
+ }
208
+ if (!hasPublic && props.associatePublicIpAddress) {
209
+ throw new Error("To set 'associatePublicIpAddress: true' you must select Public subnets (vpcSubnets: { subnetType: SubnetType.PUBLIC })");
210
+ }
211
+ this.osType = imageConfig.osType;
212
+ this.node.defaultChild = this.instance;
213
+ this.instanceId = this.instance.id;
214
+ this.instanceAvailabilityZone = this.instance.availabilityZone;
215
+ this.instancePrivateDnsName = this.instance.privateDns;
216
+ this.instancePrivateIp = this.instance.privateIp;
217
+ this.instancePublicDnsName = this.instance.publicDns;
218
+ this.instancePublicIp = this.instance.publicIp;
219
+ this.primaryNetworkInterfaceId = this.primaryNetworkInterface
220
+ ? this.primaryNetworkInterface.id
221
+ : this.instance.primaryNetworkInterfaceId;
222
+ // TODO: Add support for Cfn Signals
223
+ // // if both the resourceSignalTimeout and initOptions.timeout are set,
224
+ // // the timeout is summed together. This logic is done in applyCloudFormationInit.
225
+ // // This is because applyUpdatePolicies overwrites the timeout when both timeout fields are specified.
226
+ // this.applyUpdatePolicies(props);
227
+ // if (props.init) {
228
+ // this.applyCloudFormationInit(props.init, props.initOptions);
229
+ // }
230
+ if (props.requireImdsv2) {
231
+ cdktf_1.Aspects.of(this).add(new require_imdsv2_aspect_1.InstanceRequireImdsv2Aspect());
232
+ // , {
233
+ // priority: AspectPriority.MUTATING,
234
+ // });
235
+ }
236
+ }
237
+ /**
238
+ * Add the security group to the instance.
239
+ *
240
+ * @param securityGroup: The security group to add
241
+ */
242
+ addSecurityGroup(securityGroup) {
243
+ this.securityGroups.push(securityGroup);
244
+ }
245
+ /**
246
+ * Add command to the startup script of the instance.
247
+ * The command must be in the scripting language supported by the instance's OS (i.e. Linux/Windows).
248
+ */
249
+ addUserData(...commands) {
250
+ this.userData.addCommands(...commands);
251
+ }
252
+ /**
253
+ * Adds a statement to the IAM role assumed by the instance.
254
+ */
255
+ addToRolePolicy(statement) {
256
+ this.role.addToPrincipalPolicy(statement);
257
+ }
258
+ }
259
+ exports.Instance = Instance;
260
+ _a = JSII_RTTI_SYMBOL_1;
261
+ Instance[_a] = { fqn: "terraconstructs.aws.compute.Instance", version: "0.0.12" };
262
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvaW5zdGFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0RkFBNEY7QUFFNUYsc0RBSTZCO0FBQzdCLGlDQU1lO0FBR2Ysb0RBQW1FO0FBQ25FLDhDQUE4QztBQUM5QywwQ0FBbUM7QUFDbkMsd0NBQXdDO0FBQ3hDLDJFQUE4RTtBQUM5RSxtREFBbUQ7QUFDbkQsK0NBQTBEO0FBUzFELGlEQUk0QjtBQUM1QixxREFBaUU7QUFHakUsK0JBQXNEO0FBQ3RELG9EQUFvRDtBQUNwRCw4QkFBOEI7QUFFOUI7O0dBRUc7QUFDSCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUFnWmhDOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsZ0NBQWdCO0lBQzVDLElBQVcsZUFBZTtRQUN4QixPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzVCLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBc0VELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUhGLG1CQUFjLEdBQXFCLEVBQUUsQ0FBQztRQUtyRCwwQ0FBMEM7UUFDMUMsK0VBQStFO1FBQy9FLElBQUk7UUFFSixJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0VBQWtFLENBQ25FLENBQUM7UUFDSixDQUFDO1FBRUQsMkVBQTJFO1FBQzNFLElBQUksS0FBSyxDQUFDLG1CQUFtQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ25FLE1BQU0sSUFBSSxLQUFL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O09BRUc7SUFDSSxlQUFlLENBQUMsU0FBOEI7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxDQUFDOztBQWhYSCw0QkFzYkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtZWMyL2xpYi9pbnN0YW5jZS50c1xuXG5pbXBvcnQge1xuICBpbnN0YW5jZSxcbiAgaWFtSW5zdGFuY2VQcm9maWxlIGFzIHRmSW5zdGFuY2VQcm9maWxlLFxuICBuZXR3b3JrSW50ZXJmYWNlIGFzIHRmTmV0d29ya0ludGVyZmFjZSxcbn0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7XG4gIEFubm90YXRpb25zLFxuICBBc3BlY3RzLFxuICAvLyBBc3BlY3RQcmlvcml0eSxcbiAgTGF6eSxcbiAgVG9rZW4sXG59IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCI7XG5pbXBvcnQgeyBJQXdzQ29uc3RydWN0LCBBd3NDb25zdHJ1Y3RCYXNlIH0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbi8vIFRPRE86IFVzZSBUYWdNYW5hZ2VyIGFuZCB0YWctYXNwZWN0IGluc3RlYWRcbmltcG9ydCB7IFRhZ3MgfSBmcm9tIFwiLi4vYXdzLXRhZ3NcIjtcbi8vIGltcG9ydCB7IFRhZ3MgfSBmcm9tIFwiLi4vdGFnLWFzcGVjdFwiO1xuaW1wb3J0IHsgSW5zdGFuY2VSZXF1aXJlSW1kc3YyQXNwZWN0IH0gZnJvbSBcIi4vYXNwZWN0cy9yZXF1aXJlLWltZHN2Mi1hc3BlY3RcIjtcbi8vIGltcG9ydCB7IENsb3VkRm9ybWF0aW9uSW5pdCB9IGZyb20gXCIuL2Nmbi1pbml0XCI7XG5pbXBvcnQgeyBDb25uZWN0aW9ucywgSUNvbm5lY3RhYmxlIH0gZnJvbSBcIi4vY29ubmVjdGlvbnNcIjtcbmltcG9ydCB7IEluc3RhbmNlVHlwZSB9IGZyb20gXCIuL2luc3RhbmNlLXR5cGVzXCI7XG5pbXBvcnQgeyBJS2V5UGFpciB9IGZyb20gXCIuL2tleS1wYWlyXCI7XG5pbXBvcnQge1xuICBDcHVDcmVkaXRzLFxuICBJbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3IsXG59IGZyb20gXCIuL2xhdW5jaC10ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgSU1hY2hpbmVJbWFnZSwgT3BlcmF0aW5nU3lzdGVtVHlwZSB9IGZyb20gXCIuL21hY2hpbmUtaW1hZ2VcIjtcbmltcG9ydCB7IElQbGFjZW1lbnRHcm91cCB9IGZyb20gXCIuL3BsYWNlbWVudC1ncm91cFwiO1xuaW1wb3J0IHtcbiAgaW5zdGFuY2VFYnNCbG9ja0RldmljZU1hcHBpbmdzLFxuICBpbnN0YW5jZUVwaGVtZXJhbEJsb2NrRGV2aWNlTWFwcGluZ3MsXG4gIGluc3RhbmNlUm9vdEJsb2NrRGV2aWNlTWFwcGluZyxcbn0gZnJvbSBcIi4vcHJpdmF0ZS9lYnMtdXRpbFwiO1xuaW1wb3J0IHsgSVNlY3VyaXR5R3JvdXAsIFNlY3VyaXR5R3JvdXAgfSBmcm9tIFwiLi9zZWN1cml0eS1ncm91cFwiO1xuaW1wb3J0IHsgVXNlckRhdGEgfSBmcm9tIFwiLi91c2VyLWRhdGFcIjtcbmltcG9ydCB7IEJsb2NrRGV2aWNlIH0gZnJvbSBcIi4vdm9sdW1lXCI7XG5pbXBvcnQgeyBJVnBjLCBTdWJuZXQsIFN1Ym5ldFNlbGVjdGlvbiB9IGZyb20gXCIuL3ZwY1wiO1xuLy8gaW1wb3J0IHsgbWQ1aGFzaCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzLWludGVybmFsXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcIi4uL2lhbVwiO1xuXG4vKipcbiAqIE5hbWUgdGFnIGNvbnN0YW50XG4gKi9cbmNvbnN0IE5BTUVfVEFHOiBzdHJpbmcgPSBcIk5hbWVcIjtcblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2UncyBJRFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUluc3RhbmNlIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCwgSUNvbm5lY3RhYmxlLCBpYW0uSUdyYW50YWJsZSB7XG4gIC8qKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzICovXG4gIHJlYWRvbmx5IGluc3RhbmNlT3V0cHV0czogSW5zdGFuY2VPdXRwdXRzO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2UncyBJRFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhdmFpbGFiaWxpdHkgem9uZSB0aGUgaW5zdGFuY2Ugd2FzIGxhdW5jaGVkIGluXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlQXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcml2YXRlIEROUyBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlUHJpdmF0ZURuc05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUHJpdmF0ZSBJUCBmb3IgdGhpcyBpbnN0YW5jZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVByaXZhdGVJcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQdWJsaWNseS1yb3V0YWJsZSBETlMgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICpcbiAgICogKE1heSBiZSBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGluc3RhbmNlIGRvZXMgbm90IGhhdmUgYSBwdWJsaWMgbmFtZSkuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlUHVibGljRG5zTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQdWJsaWNseS1yb3V0YWJsZSBJUCAgYWRkcmVzcyBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICpcbiAgICogKE1heSBiZSBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGluc3RhbmNlIGRvZXMgbm90IGhhdmUgYSBwdWJsaWMgSVApLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVB1YmxpY0lwOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhbiBFQzIgSW5zdGFuY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZVByb3BzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgU1NIIGtleXBhaXIgdG8gZ3JhbnQgYWNjZXNzIHRvIGluc3RhbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gU1NIIGFjY2VzcyB3aWxsIGJlIHBvc3NpYmxlLlxuICAgKiBAZGVwcmVjYXRlZCAtIFVzZSBga2V5UGFpcmAgaW5zdGVhZCAtIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YyL2RvY3MvYXdzLWNkay1saWIuYXdzX2VjMi1yZWFkbWUuaHRtbCN1c2luZy1hbi1leGlzdGluZy1lYzIta2V5LXBhaXJcbiAgICovXG4gIHJlYWRvbmx5IGtleU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBTU0gga2V5cGFpciB0byBncmFudCBhY2Nlc3MgdG8gdGhlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIFNTSCBhY2Nlc3Mgd2lsbCBiZSBwb3NzaWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGtleVBhaXI/OiBJS2V5UGFpcjtcblxuICAvKipcbiAgICogV2hlcmUgdG8gcGxhY2UgdGhlIGluc3RhbmNlIHdpdGhpbiB0aGUgVlBDXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUHJpdmF0ZSBzdWJuZXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvbjtcblxuICAvKipcbiAgICogSW4gd2hpY2ggQVogdG8gcGxhY2UgdGhlIGluc3RhbmNlIHdpdGhpbiB0aGUgVlBDXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUmFuZG9tIHpvbmUuXG4gICAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBpbnN0YW5jZSBjb3VsZCBpbml0aWF0ZSBjb25uZWN0aW9ucyB0byBhbnl3aGVyZSBieSBkZWZhdWx0LlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgdXNlZCB3aGVuIHlvdSBkbyBub3QgcHJvdmlkZSBhIHNlY3VyaXR5IGdyb3VwLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBhbGxvd0FsbE91dGJvdW5kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgaW5zdGFuY2UgY291bGQgaW5pdGlhdGUgSVB2NiBjb25uZWN0aW9ucyB0byBhbnl3aGVyZSBieSBkZWZhdWx0LlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgdXNlZCB3aGVuIHlvdSBkbyBub3QgcHJvdmlkZSBhIHNlY3VyaXR5IGdyb3VwLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dBbGxJcHY2T3V0Ym91bmQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbGVuZ3RoIG9mIHRpbWUgdG8gd2FpdCBmb3IgdGhlIHJlc291cmNlU2lnbmFsQ291bnRcbiAgICpcbiAgICogVGhlIG1heGltdW0gdmFsdWUgaXMgNDMyMDAgKDEyIGhvdXJzKS5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24ubWludXRlcyg1KVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VTaWduYWxUaW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFZQQyB0byBsYXVuY2ggdGhlIGluc3RhbmNlIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjO1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBHcm91cCB0byBhc3NpZ24gdG8gdGhpcyBpbnN0YW5jZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGNyZWF0ZSBuZXcgc2VjdXJpdHkgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA/OiBJU2VjdXJpdHlHcm91cDtcblxuICAvKipcbiAgICogVHlwZSBvZiBpbnN0YW5jZSB0byBsYXVuY2hcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlO1xuXG4gIC8qKlxuICAgKiBBTUkgdG8gbGF1bmNoXG4gICAqL1xuICByZWFkb25seSBtYWNoaW5lSW1hZ2U6IElNYWNoaW5lSW1hZ2U7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIFVzZXJEYXRhIHRvIHVzZVxuICAgKlxuICAgKiBUaGUgVXNlckRhdGEgbWF5IHN0aWxsIGJlIG11dGF0ZWQgYWZ0ZXIgY3JlYXRpb24uXG4gICAqXG4gICAqIFVwZGF0ZXMgdG8gdGhpcyBmaWVsZCB3aWxsIHRyaWdnZXIgYSBzdG9wL3N0YXJ0IG9mIHRoZSBFQzIgaW5zdGFuY2UgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogSWYgdXNlckRhdGFDYXVzZXNSZXBsYWNlbWVudCBpcyBzZXQgdGhlbiB1cGRhdGVzIHRvIHRoaXMgZmllbGQgd2lsbCB0cmlnZ2VyXG4gICAqIGEgZGVzdHJveSBhbmQgcmVjcmVhdGUgb2YgdGhlIEVDMiBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBIFVzZXJEYXRhIG9iamVjdCBhcHByb3ByaWF0ZSBmb3IgdGhlIE1hY2hpbmVJbWFnZSdzXG4gICAqIE9wZXJhdGluZyBTeXN0ZW0gaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHVzZXJEYXRhPzogVXNlckRhdGE7XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdG8gdGhlIFVzZXJEYXRhIGZvcmNlIHJlcGxhY2VtZW50XG4gICAqXG4gICAqIERlcGVuZGluZyB0aGUgRUMyIGluc3RhbmNlIHR5cGUsIGNoYW5naW5nIFVzZXJEYXRhIGVpdGhlclxuICAgKiByZXN0YXJ0cyB0aGUgaW5zdGFuY2Ugb3IgcmVwbGFjZXMgdGhlIGluc3RhbmNlLlxuICAgKlxuICAgKiAtIEluc3RhbmNlIHN0b3JlLWJhY2tlZCBpbnN0YW5jZXMgYXJlIHJlcGxhY2VkLlxuICAgKiAtIEVCUy1iYWNrZWQgaW5zdGFuY2VzIGFyZSByZXN0YXJ0ZWQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHJlc3RhcnRpbmcgZG9lcyBub3QgZXhlY3V0ZSB0aGUgbmV3IFVzZXJEYXRhIHNvIHlvdVxuICAgKiB3aWxsIG5lZWQgYSBkaWZmZXJlbnQgbWVjaGFuaXNtIHRvIGVuc3VyZSB0aGUgaW5zdGFuY2UgaXMgcmVzdGFydGVkLlxuICAgKlxuICAgKiBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckRhdGFDYXVzZXNSZXBsYWNlbWVudD86IGJvb2xlYW47XG4gIC8vIEBkZWZhdWx0IC0gdHJ1ZSBpZiBgaW5pdE9wdGlvbnNgIGlzIHNwZWNpZmllZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gIC8qKlxuICAgKiBBbiBJQU0gcm9sZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgaW5zdGFuY2UgcHJvZmlsZSBhc3NpZ25lZCB0byB0aGlzIEF1dG8gU2NhbGluZyBHcm91cC5cbiAgICpcbiAgICogVGhlIHJvbGUgbXVzdCBiZSBhc3N1bWFibGUgYnkgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIGBlYzIuYW1hem9uYXdzLmNvbWA6XG4gICAqIE5vdGU6IFlvdSBjYW4gcHJvdmlkZSBhbiBpbnN0YW5jZVByb2ZpbGUgb3IgYSByb2xlLCBidXQgbm90IGJvdGguXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ015Um9sZScsIHtcbiAgICogICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZWMyLmFtYXpvbmF3cy5jb20nKVxuICAgKiB9KTtcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBIHJvbGUgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNyZWF0ZWQsIGl0IGNhbiBiZSBhY2Nlc3NlZCB2aWEgdGhlIGByb2xlYCBwcm9wZXJ0eVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIGluc3RhbmNlIHByb2ZpbGUgdXNlZCB0byBwYXNzIHJvbGUgaW5mb3JtYXRpb24gdG8gRUMyIGluc3RhbmNlcy5cbiAgICpcbiAgICogTm90ZTogWW91IGNhbiBwcm92aWRlIGFuIGluc3RhbmNlUHJvZmlsZSBvciBhIHJvbGUsIGJ1dCBub3QgYm90aC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBpbnN0YW5jZSBwcm9maWxlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVByb2ZpbGU/OiBpYW0uSUluc3RhbmNlUHJvZmlsZTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ0RLIGdlbmVyYXRlZCBuYW1lXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGVuYWJsZSBhbiBpbnN0YW5jZSBsYXVuY2hlZCBpbiBhIFZQQyB0byBwZXJmb3JtIE5BVC5cbiAgICogVGhpcyBjb250cm9scyB3aGV0aGVyIHNvdXJjZS9kZXN0aW5hdGlvbiBjaGVja2luZyBpcyBlbmFibGVkIG9uIHRoZSBpbnN0YW5jZS5cbiAgICogQSB2YWx1ZSBvZiB0cnVlIG1lYW5zIHRoYXQgY2hlY2tpbmcgaXMgZW5hYmxlZCwgYW5kIGZhbHNlIG1lYW5zIHRoYXQgY2hlY2tpbmcgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSB2YWx1ZSBtdXN0IGJlIGZhbHNlIGZvciB0aGUgaW5zdGFuY2UgdG8gcGVyZm9ybSBOQVQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZURlc3RDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBob3cgYmxvY2sgZGV2aWNlcyBhcmUgZXhwb3NlZCB0byB0aGUgaW5zdGFuY2UuIFlvdSBjYW4gc3BlY2lmeSB2aXJ0dWFsIGRldmljZXMgYW5kIEVCUyB2b2x1bWVzLlxuICAgKlxuICAgKiBFYWNoIGluc3RhbmNlIHRoYXQgaXMgbGF1bmNoZWQgaGFzIGFuIGFzc29jaWF0ZWQgcm9vdCBkZXZpY2Ugdm9sdW1lLFxuICAgKiBlaXRoZXIgYW4gQW1hem9uIEVCUyB2b2x1bWUgb3IgYW4gaW5zdGFuY2Ugc3RvcmUgdm9sdW1lLlxuICAgKiBZb3UgY2FuIHVzZSBibG9jayBkZXZpY2UgbWFwcGluZ3MgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIEVCUyB2b2x1bWVzIG9yXG4gICAqIGluc3RhbmNlIHN0b3JlIHZvbHVtZXMgdG8gYXR0YWNoIHRvIGFuIGluc3RhbmNlIHdoZW4gaXQgaXMgbGF1bmNoZWQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2Jsb2NrLWRldmljZS1tYXBwaW5nLWNvbmNlcHRzLmh0bWxcbiAgICogQHNlZSBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjY4LjAvZG9jcy9yZXNvdXJjZXMvaW5zdGFuY2UjZWJzLWVwaGVtZXJhbC1hbmQtcm9vdC1ibG9jay1kZXZpY2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVXNlcyB0aGUgYmxvY2sgZGV2aWNlIG1hcHBpbmcgb2YgdGhlIEFNSVxuICAgKi9cbiAgcmVhZG9ubHkgYmxvY2tEZXZpY2VzPzogQmxvY2tEZXZpY2VbXTtcblxuICAvKipcbiAgICogRGVmaW5lcyBhIHByaXZhdGUgSVAgYWRkcmVzcyB0byBhc3NvY2lhdGUgd2l0aCBhbiBpbnN0YW5jZS5cbiAgICpcbiAgICogUHJpdmF0ZSBJUCBzaG91bGQgYmUgYXZhaWxhYmxlIHdpdGhpbiB0aGUgVlBDIHRoYXQgdGhlIGluc3RhbmNlIGlzIGJ1aWxkIHdpdGhpbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhc3NvY2lhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUlwQWRkcmVzcz86IHN0cmluZztcblxuICAvKipcbiAgICogUHJvcGFnYXRlIHRoZSBFQzIgaW5zdGFuY2UgdGFncyB0byB0aGUgRUJTIHZvbHVtZXMuXG4gICAqXG4gICAqIERvIG5vdCBwcm9wYWdhdGUgdGFncyBpZiB5b3UgcGxhbiB0byBtYW5hZ2UgYmxvY2sgZGV2aWNlIHRhZ3Mgb3V0c2lkZVxuICAgKiB0aGUgYGF3c19pbnN0YW5jZWAgY29uZmlndXJhdGlvbiwgc3VjaCBhcyB1c2luZyBgdGFnc2AgaW4gYW4gYGF3c19lYnNfdm9sdW1lYFxuICAgKiByZXNvdXJjZSBhdHRhY2hlZCB2aWEgYGF3c192b2x1bWVfYXR0YWNobWVudGAuXG4gICAqXG4gICAqIERvaW5nIHNvIHdpbGwgcmVzdWx0IGluIHJlc291cmNlIGN5Y2xpbmcgYW5kIGluY29uc2lzdGVudCBiZWhhdmlvci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGFnYXRlVGFnc1RvVm9sdW1lT25DcmVhdGlvbj86IGJvb2xlYW47XG5cbiAgLy8gVE9ETzogSW1wbGVtZW50IEdyaWQgSW5pdFxuICAvLyAvKipcbiAgLy8gICogQXBwbHkgdGhlIGdpdmVuIENsb3VkRm9ybWF0aW9uIEluaXQgY29uZmlndXJhdGlvbiB0byB0aGUgaW5zdGFuY2UgYXQgc3RhcnR1cFxuICAvLyAgKlxuICAvLyAgKiBAZGVmYXVsdCAtIG5vIENsb3VkRm9ybWF0aW9uIGluaXRcbiAgLy8gICovXG4gIC8vIHJlYWRvbmx5IGluaXQ/OiBDbG91ZEZvcm1hdGlvbkluaXQ7XG4gIC8vXG4gIC8vIC8qKlxuICAvLyAgKiBVc2UgdGhlIGdpdmVuIG9wdGlvbnMgZm9yIGFwcGx5aW5nIENsb3VkRm9ybWF0aW9uIEluaXRcbiAgLy8gICpcbiAgLy8gICogRGVzY3JpYmVzIHRoZSBjb25maWdzZXRzIHRvIHVzZSBhbmQgdGhlIHRpbWVvdXQgdG8gd2FpdFxuICAvLyAgKlxuICAvLyAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgb3B0aW9uc1xuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgaW5pdE9wdGlvbnM/OiBBcHBseUNsb3VkRm9ybWF0aW9uSW5pdE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgSU1EU3YyIHNob3VsZCBiZSByZXF1aXJlZCBvbiB0aGlzIGluc3RhbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlSW1kc3YyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBcIkRldGFpbGVkIE1vbml0b3JpbmdcIiBpcyBlbmFibGVkIGZvciB0aGlzIGluc3RhbmNlXG4gICAqIEtlZXAgaW4gbWluZCB0aGF0IERldGFpbGVkIE1vbml0b3JpbmcgcmVzdWx0cyBpbiBleHRyYSBjaGFyZ2VzXG4gICAqXG4gICAqIEBzZWUgaHR0cDovL2F3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvcHJpY2luZy9cbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGV0YWlsZWRNb25pdG9yaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWRkIFNTTSBzZXNzaW9uIHBlcm1pc3Npb25zIHRvIHRoZSBpbnN0YW5jZSByb2xlXG4gICAqXG4gICAqIFNldHRpbmcgdGhpcyB0byBgdHJ1ZWAgYWRkcyB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIGNvbm5lY3RcbiAgICogdG8gdGhlIGluc3RhbmNlIHVzaW5nIFNTTSBTZXNzaW9uIE1hbmFnZXIuIFlvdSBjYW4gZG8gdGhpc1xuICAgKiBmcm9tIHRoZSBBV1MgQ29uc29sZS5cbiAgICpcbiAgICogTk9URTogU2V0dGluZyB0aGlzIGZsYWcgdG8gYHRydWVgIG1heSBub3QgYmUgZW5vdWdoIGJ5IGl0c2VsZi5cbiAgICogWW91IG11c3QgYWxzbyB1c2UgYW4gQU1JIHRoYXQgY29tZXMgd2l0aCB0aGUgU1NNIEFnZW50LCBvciBpbnN0YWxsXG4gICAqIHRoZSBTU00gQWdlbnQgeW91cnNlbGYuIFNlZVxuICAgKiBbV29ya2luZyB3aXRoIFNTTSBBZ2VudF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N5c3RlbXMtbWFuYWdlci9sYXRlc3QvdXNlcmd1aWRlL3NzbS1hZ2VudC5odG1sKVxuICAgKiBpbiB0aGUgU1NNIERldmVsb3BlciBHdWlkZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNzbVNlc3Npb25QZXJtaXNzaW9ucz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXNzb2NpYXRlIGEgcHVibGljIElQIGFkZHJlc3MgdG8gdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UgYXR0YWNoZWQgdG8gdGhpcyBpbnN0YW5jZS5cbiAgICpcbiAgICogWW91IGNhbm5vdCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkgYW5kIGBpcHY2QWRkcmVzc0NvdW50YCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHB1YmxpYyBJUCBhZGRyZXNzIGlzIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgYmFzZWQgb24gZGVmYXVsdCBiZWhhdmlvclxuICAgKi9cbiAgcmVhZG9ubHkgYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmeWluZyB0aGUgQ1BVIGNyZWRpdCB0eXBlIGZvciBidXJzdGFibGUgRUMyIGluc3RhbmNlIHR5cGVzIChUMiwgVDMsIFQzYSwgZXRjKS5cbiAgICogVGhlIHVubGltaXRlZCBDUFUgY3JlZGl0IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBUMyBpbnN0YW5jZXMgd2l0aCBhIGRlZGljYXRlZCBob3N0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFQyIGluc3RhbmNlcyBhcmUgc3RhbmRhcmQsIHdoaWxlIFQzLCBUNGcsIGFuZCBUM2EgaW5zdGFuY2VzIGFyZSB1bmxpbWl0ZWQuXG4gICAqL1xuICByZWFkb25seSBjcmVkaXRTcGVjaWZpY2F0aW9uPzogQ3B1Q3JlZGl0cztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGluc3RhbmNlIGlzIG9wdGltaXplZCBmb3IgQW1hem9uIEVCUyBJL08uXG4gICAqXG4gICAqIFRoaXMgb3B0aW1pemF0aW9uIHByb3ZpZGVzIGRlZGljYXRlZCB0aHJvdWdocHV0IHRvIEFtYXpvbiBFQlMgYW5kIGFuIG9wdGltaXplZCBjb25maWd1cmF0aW9uIHN0YWNrIHRvIHByb3ZpZGUgb3B0aW1hbCBBbWF6b24gRUJTIEkvTyBwZXJmb3JtYW5jZS5cbiAgICogVGhpcyBvcHRpbWl6YXRpb24gaXNuJ3QgYXZhaWxhYmxlIHdpdGggYWxsIGluc3RhbmNlIHR5cGVzLlxuICAgKiBBZGRpdGlvbmFsIHVzYWdlIGNoYXJnZXMgYXBwbHkgd2hlbiB1c2luZyBhbiBFQlMtb3B0aW1pemVkIGluc3RhbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZWJzT3B0aW1pemVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgdGhlIGluc3RhbmNlIHdpbGwgbm90IGJlIGFibGUgdG8gYmUgdGVybWluYXRlZCB1c2luZyB0aGUgQW1hem9uIEVDMiBjb25zb2xlLCBDTEksIG9yIEFQSS5cbiAgICpcbiAgICogVG8gY2hhbmdlIHRoaXMgYXR0cmlidXRlIGFmdGVyIGxhdW5jaCwgdXNlIFtNb2RpZnlJbnN0YW5jZUF0dHJpYnV0ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9Nb2RpZnlJbnN0YW5jZUF0dHJpYnV0ZS5odG1sKS5cbiAgICogQWx0ZXJuYXRpdmVseSwgaWYgeW91IHNldCBJbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3IgdG8gdGVybWluYXRlLCB5b3UgY2FuIHRlcm1pbmF0ZSB0aGUgaW5zdGFuY2VcbiAgICogYnkgcnVubmluZyB0aGUgc2h1dGRvd24gY29tbWFuZCBmcm9tIHRoZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaW5zdGFuY2UuaHRtbCNjZm4tZWMyLWluc3RhbmNlLWRpc2FibGVhcGl0ZXJtaW5hdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZUFwaVRlcm1pbmF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYW4gaW5zdGFuY2Ugc3RvcHMgb3IgdGVybWluYXRlcyB3aGVuIHlvdSBpbml0aWF0ZSBzaHV0ZG93biBmcm9tIHRoZSBpbnN0YW5jZVxuICAgKiAodXNpbmcgdGhlIG9wZXJhdGluZyBzeXN0ZW0gY29tbWFuZCBmb3Igc3lzdGVtIHNodXRkb3duKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvdGVybWluYXRpbmctaW5zdGFuY2VzLmh0bWwjVXNpbmdfQ2hhbmdpbmdJbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3JcbiAgICpcbiAgICogQGRlZmF1bHQgSW5zdGFuY2VJbml0aWF0ZWRTaHV0ZG93bkJlaGF2aW9yLlNUT1BcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlSW5pdGlhdGVkU2h1dGRvd25CZWhhdmlvcj86IEluc3RhbmNlSW5pdGlhdGVkU2h1dGRvd25CZWhhdmlvcjtcblxuICAvKipcbiAgICogVGhlIHBsYWNlbWVudCBncm91cCB0aGF0IHlvdSB3YW50IHRvIGxhdW5jaCB0aGUgaW5zdGFuY2UgaW50by5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwbGFjZW1lbnQgZ3JvdXAgd2lsbCBiZSB1c2VkIGZvciB0aGlzIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGxhY2VtZW50R3JvdXA/OiBJUGxhY2VtZW50R3JvdXA7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGluc3RhbmNlIGlzIGVuYWJsZWQgZm9yIEFXUyBOaXRybyBFbmNsYXZlcy5cbiAgICpcbiAgICogTml0cm8gRW5jbGF2ZXMgcmVxdWlyZXMgYSBOaXRyby1iYXNlZCB2aXJ0dWFsaXplZCBwYXJlbnQgaW5zdGFuY2Ugd2l0aCBzcGVjaWZpYyBJbnRlbC9BTUQgd2l0aCBhdCBsZWFzdCA0IHZDUFVzXG4gICAqIG9yIEdyYXZpdG9uIHdpdGggYXQgbGVhc3QgMiB2Q1BVcyBpbnN0YW5jZSB0eXBlcyBhbmQgTGludXgvV2luZG93cyBob3N0IE9TLFxuICAgKiB3aGlsZSB0aGUgZW5jbGF2ZSBpdHNlbGYgc3VwcG9ydHMgb25seSBMaW51eCBPUy5cbiAgICpcbiAgICogWW91IGNhbid0IHNldCBib3RoIGBlbmNsYXZlRW5hYmxlZGAgYW5kIGBoaWJlcm5hdGlvbkVuYWJsZWRgIHRvIHRydWUgb24gdGhlIHNhbWUgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VuY2xhdmVzL2xhdGVzdC91c2VyL25pdHJvLWVuY2xhdmUuaHRtbCNuaXRyby1lbmNsYXZlLXJlcXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5jbGF2ZUVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBpbnN0YW5jZSBpcyBlbmFibGVkIGZvciBoaWJlcm5hdGlvbi5cbiAgICpcbiAgICogWW91IGNhbid0IHNldCBib3RoIGBlbmNsYXZlRW5hYmxlZGAgYW5kIGBoaWJlcm5hdGlvbkVuYWJsZWRgIHRvIHRydWUgb24gdGhlIHNhbWUgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZWMyLWluc3RhbmNlLWhpYmVybmF0aW9ub3B0aW9ucy5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGhpYmVybmF0aW9uRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgSVB2NiBhZGRyZXNzZXMgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UuXG4gICAqXG4gICAqIEFtYXpvbiBFQzIgY2hvb3NlcyB0aGUgSVB2NiBhZGRyZXNzZXMgZnJvbSB0aGUgcmFuZ2Ugb2YgeW91ciBzdWJuZXQuXG4gICAqXG4gICAqIFlvdSBjYW5ub3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5IGFuZCBgYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzYCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEZvciBpbnN0YW5jZXMgYXNzb2NpYXRlZCB3aXRoIGFuIElQdjYgc3VibmV0LCB1c2UgMTsgb3RoZXJ3aXNlLCB1c2UgMC5cbiAgICovXG4gIHJlYWRvbmx5IGlwdjZBZGRyZXNzQ291bnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhpcyByZXByZXNlbnRzIGEgc2luZ2xlIEVDMiBpbnN0YW5jZVxuICovXG5leHBvcnQgY2xhc3MgSW5zdGFuY2UgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSUluc3RhbmNlIHtcbiAgcHVibGljIGdldCBpbnN0YW5jZU91dHB1dHMoKTogSW5zdGFuY2VPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFuY2VJZDogdGhpcy5pbnN0YW5jZUlkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLmluc3RhbmNlT3V0cHV0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBPUyB0aGUgaW5zdGFuY2UgaXMgcnVubmluZy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvc1R5cGU6IE9wZXJhdGluZ1N5c3RlbVR5cGU7XG5cbiAgLyoqXG4gICAqIEFsbG93cyBzcGVjaWZ5IHNlY3VyaXR5IGdyb3VwIGNvbm5lY3Rpb25zIGZvciB0aGUgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgYXNzdW1lZCBieSB0aGUgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZTogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuXG4gIC8qKlxuICAgKiBVc2VyRGF0YSBmb3IgdGhlIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlckRhdGE6IFVzZXJEYXRhO1xuXG4gIC8qKlxuICAgKiB0aGUgdW5kZXJseWluZyBpbnN0YW5jZSByZXNvdXJjZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlOiBpbnN0YW5jZS5JbnN0YW5jZTtcblxuICAvKipcbiAgICogdGhlIHByaW1hcnkgbmV0d29yayBpbnRlZmFjZSAoaWYgYXBwbGljYWJsZSlcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJpbWFyeU5ldHdvcmtJbnRlcmZhY2U/OiB0Zk5ldHdvcmtJbnRlcmZhY2UuTmV0d29ya0ludGVyZmFjZTtcblxuICAvKipcbiAgICogdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UgaWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJpbWFyeU5ldHdvcmtJbnRlcmZhY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2VJZDogc3RyaW5nO1xuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlQXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlUHJpdmF0ZURuc05hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbnN0YW5jZVByaXZhdGVJcDogc3RyaW5nO1xuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlUHVibGljRG5zTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlUHVibGljSXA6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA6IElTZWN1cml0eUdyb3VwO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzOiBJU2VjdXJpdHlHcm91cFtdID0gW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEluc3RhbmNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gaWYgKHByb3BzLmluaXRPcHRpb25zICYmICFwcm9wcy5pbml0KSB7XG4gICAgLy8gICB0aHJvdyBuZXcgRXJyb3IoXCJTZXR0aW5nICdpbml0T3B0aW9ucycgcmVxdWlyZXMgdGhhdCAnaW5pdCcgaXMgYWxzbyBzZXRcIik7XG4gICAgLy8gfVxuXG4gICAgaWYgKHByb3BzLmtleU5hbWUgJiYgcHJvcHMua2V5UGFpcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBzcGVjaWZ5IGJvdGggb2YgJ2tleU5hbWUnIGFuZCAna2V5UGFpcic7IHByZWZlciAna2V5UGFpcidcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gaWYgY3JlZGl0IHNwZWNpZmljYXRpb24gaXMgc2V0LCB0aGVuIHRoZSBpbnN0YW5jZSB0eXBlIG11c3QgYmUgYnVyc3RhYmxlXG4gICAgaWYgKHByb3BzLmNyZWRpdFNwZWNpZmljYXRpb24gJiYgIXByb3BzLmluc3RhbmNlVHlwZS5pc0J1cnN0YWJsZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBjcmVkaXRTcGVjaWZpY2F0aW9uIGlzIHN1cHBvcnRlZCBvbmx5IGZvciBUNGcsIFQzYSwgVDMsIFQyIGluc3RhbmNlIHR5cGUsIGdvdDogJHtwcm9wcy5pbnN0YW5jZVR5cGUudG9TdHJpbmcoKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc2VjdXJpdHlHcm91cCkge1xuICAgICAgdGhpcy5zZWN1cml0eUdyb3VwID0gcHJvcHMuc2VjdXJpdHlHcm91cDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWN1cml0eUdyb3VwID0gbmV3IFNlY3VyaXR5R3JvdXAodGhpcywgXCJJbnN0YW5jZVNlY3VyaXR5R3JvdXBcIiwge1xuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogcHJvcHMuYWxsb3dBbGxPdXRib3VuZCAhPT0gZmFsc2UsXG4gICAgICAgIGFsbG93QWxsSXB2Nk91dGJvdW5kOiBwcm9wcy5hbGxvd0FsbElwdjZPdXRib3VuZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gbmV3IENvbm5lY3Rpb25zKHtcbiAgICAgIHNlY3VyaXR5R3JvdXBzOiBbdGhpcy5zZWN1cml0eUdyb3VwXSxcbiAgICB9KTtcbiAgICB0aGlzLnNlY3VyaXR5R3JvdXBzLnB1c2godGhpcy5zZWN1cml0eUdyb3VwKTtcbiAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMuaW5zdGFuY2VOYW1lIHx8IHRoaXMubm9kZS5wYXRoKTtcblxuICAgIGlmIChwcm9wcy5pbnN0YW5jZVByb2ZpbGUgJiYgcHJvcHMucm9sZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IGNhbm5vdCBwcm92aWRlIGJvdGggaW5zdGFuY2VQcm9maWxlIGFuZCByb2xlXCIpO1xuICAgIH1cblxuICAgIGxldCBpYW1JbnN0YW5jZVByb2ZpbGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMuaW5zdGFuY2VQcm9maWxlPy5yb2xlKSB7XG4gICAgICB0aGlzLnJvbGUgPSBwcm9wcy5pbnN0YW5jZVByb2ZpbGUucm9sZTtcbiAgICAgIGlhbUluc3RhbmNlUHJvZmlsZSA9IHByb3BzLmluc3RhbmNlUHJvZmlsZS5pbnN0YW5jZVByb2ZpbGVOYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvbGUgPVxuICAgICAgICBwcm9wcy5yb2xlIHx8XG4gICAgICAgIG5ldyBpYW0uUm9sZSh0aGlzLCBcIkluc3RhbmNlUm9sZVwiLCB7XG4gICAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJlYzIuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGlhbVByb2ZpbGUgPSBuZXcgdGZJbnN0YW5jZVByb2ZpbGUuSWFtSW5zdGFuY2VQcm9maWxlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIkluc3RhbmNlUHJvZmlsZVwiLFxuICAgICAgICB7XG4gICAgICAgICAgcm9sZTogdGhpcy5yb2xlLnJvbGVOYW1lLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGlhbUluc3RhbmNlUHJvZmlsZSA9IGlhbVByb2ZpbGUuaWQ7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMucm9sZTtcblxuICAgIGlmIChwcm9wcy5zc21TZXNzaW9uUGVybWlzc2lvbnMpIHtcbiAgICAgIHRoaXMucm9sZS5hZGRNYW5hZ2VkUG9saWN5KFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBcIkFtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmVcIixcbiAgICAgICAgICBcIkFtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmVcIixcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gdXNlIGRlbGF5ZWQgZXZhbHVhdGlvblxuICAgIGNvbnN0IGltYWdlQ29uZmlnID0gcHJvcHMubWFjaGluZUltYWdlLmdldEltYWdlKHRoaXMpO1xuICAgIHRoaXMudXNlckRhdGEgPSBwcm9wcy51c2VyRGF0YSA/PyBpbWFnZUNvbmZpZy51c2VyRGF0YTtcbiAgICBjb25zdCBzZWN1cml0eUdyb3Vwc1Rva2VuID0gTGF6eS5saXN0VmFsdWUoe1xuICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5zZWN1cml0eUdyb3Vwcy5tYXAoKHNnKSA9PiBzZy5zZWN1cml0eUdyb3VwSWQpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBzdWJuZXRzLCBoYXNQdWJsaWMgfSA9IHByb3BzLnZwYy5zZWxlY3RTdWJuZXRzKHByb3BzLnZwY1N1Ym5ldHMpO1xuICAgIGxldCBzdWJuZXQ7XG4gICAgaWYgKHByb3BzLmF2YWlsYWJpbGl0eVpvbmUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gc3VibmV0cy5maWx0ZXIoXG4gICAgICAgIChzbikgPT4gc24uYXZhaWxhYmlsaXR5Wm9uZSA9PT0gcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICk7XG4gICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHN1Ym5ldCA9IHNlbGVjdGVkWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkRXJyb3IoXG4gICAgICAgICAgYE5lZWQgZXhhY3RseSAxIHN1Ym5ldCB0byBtYXRjaCBBWiAnJHtwcm9wcy5hdmFpbGFiaWxpdHlab25lfScsIGZvdW5kICR7c2VsZWN0ZWQubGVuZ3RofS4gVXNlIGEgZGlmZmVyZW50IGF2YWlsYWJpbGl0eVpvbmUuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN1Ym5ldHMubGVuZ3RoID4gMCkge1xuICAgICAgICBzdWJuZXQgPSBzdWJuZXRzWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkRXJyb3IoXG4gICAgICAgICAgYERpZCBub3QgZmluZCBhbnkgc3VibmV0cyBtYXRjaGluZyAnJHtKU09OLnN0cmluZ2lmeShwcm9wcy52cGNTdWJuZXRzKX0nLCBwbGVhc2UgdXNlIGEgZGlmZmVyZW50IHNlbGVjdGlvbi5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXN1Ym5ldCkge1xuICAgICAgLy8gV2UgZ290IGhlcmUgYW5kIHdlIGRvbid0IGhhdmUgYSBzdWJuZXQgYmVjYXVzZSBvZiB2YWxpZGF0aW9uIGVycm9ycy5cbiAgICAgIC8vIEludmVudCBvbmUgb24gdGhlIHNwb3Qgc28gdGhlIGNvZGUgYmVsb3cgZG9lc24ndCBmYWlsLlxuICAgICAgc3VibmV0ID0gU3VibmV0LmZyb21TdWJuZXRBdHRyaWJ1dGVzKHRoaXMsIFwiRHVtbXlTdWJuZXRcIiwge1xuICAgICAgICBzdWJuZXRJZDogXCJzLW5vdGZvdW5kXCIsXG4gICAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IFwiYXotbm90Zm91bmRcIixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIG5ldHdvcmsgaW50ZXJmYWNlcyBhcnJheSBpcyBzZXQgdG8gY29uZmlndXJlIHRoZSBwcmltYXJ5IG5ldHdvcmsgaW50ZXJmYWNlIGlmIGFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzcyBpcyB0cnVlIG9yIGZhbHNlXG4gICAgbGV0IG5ldHdvcmtJbnRlcmZhY2VzOiBpbnN0YW5jZS5JbnN0YW5jZU5ldHdvcmtJbnRlcmZhY2VbXSB8IHVuZGVmaW5lZCA9XG4gICAgICB1bmRlZmluZWQ7XG4gICAgaWYgKHByb3BzLmFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnByaW1hcnlOZXR3b3JrSW50ZXJmYWNlID0gbmV3IHRmTmV0d29ya0ludGVyZmFjZS5OZXR3b3JrSW50ZXJmYWNlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIk5ldHdvcmtJbnRlcmZhY2VcIixcbiAgICAgICAge1xuICAgICAgICAgIHN1Ym5ldElkOiBzdWJuZXQuc3VibmV0SWQsXG4gICAgICAgICAgc2VjdXJpdHlHcm91cHM6IHNlY3VyaXR5R3JvdXBzVG9rZW4sXG4gICAgICAgICAgcHJpdmF0ZUlwczogcHJvcHMucHJpdmF0ZUlwQWRkcmVzc1xuICAgICAgICAgICAgPyBbcHJvcHMucHJpdmF0ZUlwQWRkcmVzc11cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIC8vIFRPRE86IFVzZSBuZXR3b3JrSW50ZXJmYWNlQXR0YWNobWVudCBpbnN0ZWFkP1xuICAgICAgLy8gcmVmOiBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy9sYXRlc3QvZG9jcy9yZXNvdXJjZXMvaW5zdGFuY2UjbmV0d29yay1pbnRlcmZhY2VzXG4gICAgICBuZXR3b3JrSW50ZXJmYWNlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGRldmljZUluZGV4OiAwLFxuICAgICAgICAgIG5ldHdvcmtJbnRlcmZhY2VJZDogdGhpcy5wcmltYXJ5TmV0d29ya0ludGVyZmFjZS5pZCxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmtleVBhaXIgJiYgIXByb3BzLmtleVBhaXIuX2lzT3NDb21wYXRpYmxlKGltYWdlQ29uZmlnLm9zVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7cHJvcHMua2V5UGFpci50eXBlfSBrZXlzIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBjaG9zZW4gQU1JYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmVuY2xhdmVFbmFibGVkICYmIHByb3BzLmhpYmVybmF0aW9uRW5hYmxlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIllvdSBjYW4ndCBzZXQgYm90aCBgZW5jbGF2ZUVuYWJsZWRgIGFuZCBgaGliZXJuYXRpb25FbmFibGVkYCB0byB0cnVlIG9uIHRoZSBzYW1lIGluc3RhbmNlXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb3BzLmlwdjZBZGRyZXNzQ291bnQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5pcHY2QWRkcmVzc0NvdW50KSAmJlxuICAgICAgKHByb3BzLmlwdjZBZGRyZXNzQ291bnQgPCAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHByb3BzLmlwdjZBZGRyZXNzQ291bnQpKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgXFwnaXB2NkFkZHJlc3NDb3VudFxcJyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIGdvdDogJHtwcm9wcy5pcHY2QWRkcmVzc0NvdW50fWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb3BzLmlwdjZBZGRyZXNzQ291bnQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcHJvcHMuYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJZb3UgY2FuJ3Qgc2V0IGJvdGggJ2lwdjZBZGRyZXNzQ291bnQnIGFuZCAnYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzJ1wiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy9sYXRlc3QvZG9jcy9yZXNvdXJjZXMvaW5zdGFuY2UjdGFnLWd1aWRlXG4gICAgY29uc3Qgdm9sdW1lVGFncyA9IHByb3BzLnByb3BhZ2F0ZVRhZ3NUb1ZvbHVtZU9uQ3JlYXRpb25cbiAgICAgID8geyBbTkFNRV9UQUddOiBwcm9wcy5pbnN0YW5jZU5hbWUgfHwgdGhpcy5ub2RlLnBhdGggfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBpZiBuZXR3b3JrIGludGVyZmFjZXMgYXJyYXkgaXMgY29uZmlndXJlZCB0aGVuIHN1Ym5ldElkLCBzZWN1cml0eUdyb3VwSWRzLFxuICAgIC8vIGFuZCBwcml2YXRlSXBBZGRyZXNzIGFyZSBjb25maWd1cmVkIG9uIHRoZSBuZXR3b3JrIGludGVyZmFjZSBsZXZlbCBhbmRcbiAgICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbmZpZ3VyZSB0aGVtIG9uIHRoZSBpbnN0YW5jZSBsZXZlbFxuICAgIHRoaXMuaW5zdGFuY2UgPSBuZXcgaW5zdGFuY2UuSW5zdGFuY2UodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBhbWk6IGltYWdlQ29uZmlnLmltYWdlSWQsXG4gICAgICBrZXlOYW1lOiBwcm9wcy5rZXlQYWlyPy5rZXlQYWlyTmFtZSA/PyBwcm9wcz8ua2V5TmFtZSxcbiAgICAgIGluc3RhbmNlVHlwZTogcHJvcHMuaW5zdGFuY2VUeXBlLnRvU3RyaW5nKCksXG4gICAgICBzdWJuZXRJZDogbmV0d29ya0ludGVyZmFjZXMgPyB1bmRlZmluZWQgOiBzdWJuZXQuc3VibmV0SWQsXG4gICAgICBzZWN1cml0eUdyb3VwczogbmV0d29ya0ludGVyZmFjZXMgPyB1bmRlZmluZWQgOiBzZWN1cml0eUdyb3Vwc1Rva2VuLFxuICAgICAgYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzOiBwcm9wcy5hc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3MsXG4gICAgICBuZXR3b3JrSW50ZXJmYWNlOiBuZXR3b3JrSW50ZXJmYWNlcyxcbiAgICAgIGlhbUluc3RhbmNlUHJvZmlsZSxcbiAgICAgIHVzZXJEYXRhQmFzZTY0OiB0aGlzLnVzZXJEYXRhLnJlbmRlcih0aGlzKSxcbiAgICAgIC8vIHVubGlrZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtZWMyL2xpYi9pbnN0YW5jZS50cyNMNjUyXG4gICAgICB1c2VyRGF0YVJlcGxhY2VPbkNoYW5nZTogcHJvcHMudXNlckRhdGFDYXVzZXNSZXBsYWNlbWVudCA/PyB0cnVlLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogc3VibmV0LmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICBzb3VyY2VEZXN0Q2hlY2s6IHByb3BzLnNvdXJjZURlc3RDaGVjayxcbiAgICAgIGVic0Jsb2NrRGV2aWNlOlxuICAgICAgICBwcm9wcy5ibG9ja0RldmljZXMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gaW5zdGFuY2VFYnNCbG9ja0RldmljZU1hcHBpbmdzKHRoaXMsIHByb3BzLmJsb2NrRGV2aWNlcylcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHJvb3RCbG9ja0RldmljZTpcbiAgICAgICAgcHJvcHMuYmxvY2tEZXZpY2VzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IGluc3RhbmNlUm9vdEJsb2NrRGV2aWNlTWFwcGluZyh0aGlzLCBwcm9wcy5ibG9ja0RldmljZXMpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBlcGhlbWVyYWxCbG9ja0RldmljZTpcbiAgICAgICAgcHJvcHMuYmxvY2tEZXZpY2VzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IGluc3RhbmNlRXBoZW1lcmFsQmxvY2tEZXZpY2VNYXBwaW5ncyhwcm9wcy5ibG9ja0RldmljZXMpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBwcml2YXRlSXA6IG5ldHdvcmtJbnRlcmZhY2VzID8gdW5kZWZpbmVkIDogcHJvcHMucHJpdmF0ZUlwQWRkcmVzcyxcbiAgICAgIHZvbHVtZVRhZ3MsXG4gICAgICBtb25pdG9yaW5nOiBwcm9wcy5kZXRhaWxlZE1vbml0b3JpbmcsXG4gICAgICBjcmVkaXRTcGVjaWZpY2F0aW9uOiBwcm9wcy5jcmVkaXRTcGVjaWZpY2F0aW9uXG4gICAgICAgID8geyBjcHVDcmVkaXRzOiBwcm9wcy5jcmVkaXRTcGVjaWZpY2F0aW9uIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBlYnNPcHRpbWl6ZWQ6IHByb3BzLmVic09wdGltaXplZCxcbiAgICAgIGRpc2FibGVBcGlUZXJtaW5hdGlvbjogcHJvcHMuZGlzYWJsZUFwaVRlcm1pbmF0aW9uLFxuICAgICAgaW5zdGFuY2VJbml0aWF0ZWRTaHV0ZG93bkJlaGF2aW9yOlxuICAgICAgICBwcm9wcy5pbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3IsXG4gICAgICBwbGFjZW1lbnRHcm91cDogcHJvcHMucGxhY2VtZW50R3JvdXA/LnBsYWNlbWVudEdyb3VwTmFtZSxcbiAgICAgIGVuY2xhdmVPcHRpb25zOlxuICAgICAgICBwcm9wcy5lbmNsYXZlRW5hYmxlZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7IGVuYWJsZWQ6IHByb3BzLmVuY2xhdmVFbmFibGVkIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGhpYmVybmF0aW9uOiBwcm9wcy5oaWJlcm5hdGlvbkVuYWJsZWQsXG4gICAgICBpcHY2QWRkcmVzc0NvdW50OiBwcm9wcy5pcHY2QWRkcmVzc0NvdW50LFxuICAgIH0pO1xuICAgIHRoaXMuaW5zdGFuY2Uubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMucm9sZSk7XG5cbiAgICAvLyBpZiBhc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3MgaXMgdHJ1ZSwgdGhlbiB0aGVyZSBtdXN0IGJlIGEgZGVwZW5kZW5jeSBvbiBpbnRlcm5ldCBjb25uZWN0aXZpdHlcbiAgICBpZiAoXG4gICAgICBwcm9wcy5hc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcHJvcHMuYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzXG4gICAgKSB7XG4gICAgICBjb25zdCBpbnRlcm5ldENvbm5lY3RlZCA9IHByb3BzLnZwYy5zZWxlY3RTdWJuZXRzKFxuICAgICAgICBwcm9wcy52cGNTdWJuZXRzLFxuICAgICAgKS5pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkO1xuICAgICAgdGhpcy5pbnN0YW5jZS5ub2RlLmFkZERlcGVuZGVuY3koaW50ZXJuZXRDb25uZWN0ZWQpO1xuICAgIH1cblxuICAgIGlmICghaGFzUHVibGljICYmIHByb3BzLmFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRvIHNldCAnYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzOiB0cnVlJyB5b3UgbXVzdCBzZWxlY3QgUHVibGljIHN1Ym5ldHMgKHZwY1N1Ym5ldHM6IHsgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QVUJMSUMgfSlcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5vc1R5cGUgPSBpbWFnZUNvbmZpZy5vc1R5cGU7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMuaW5zdGFuY2U7XG5cbiAgICB0aGlzLmluc3RhbmNlSWQgPSB0aGlzLmluc3RhbmNlLmlkO1xuICAgIHRoaXMuaW5zdGFuY2VBdmFpbGFiaWxpdHlab25lID0gdGhpcy5pbnN0YW5jZS5hdmFpbGFiaWxpdHlab25lO1xuICAgIHRoaXMuaW5zdGFuY2VQcml2YXRlRG5zTmFtZSA9IHRoaXMuaW5zdGFuY2UucHJpdmF0ZURucztcbiAgICB0aGlzLmluc3RhbmNlUHJpdmF0ZUlwID0gdGhpcy5pbnN0YW5jZS5wcml2YXRlSXA7XG4gICAgdGhpcy5pbnN0YW5jZVB1YmxpY0Ruc05hbWUgPSB0aGlzLmluc3RhbmNlLnB1YmxpY0RucztcbiAgICB0aGlzLmluc3RhbmNlUHVibGljSXAgPSB0aGlzLmluc3RhbmNlLnB1YmxpY0lwO1xuICAgIHRoaXMucHJpbWFyeU5ldHdvcmtJbnRlcmZhY2VJZCA9IHRoaXMucHJpbWFyeU5ldHdvcmtJbnRlcmZhY2VcbiAgICAgID8gdGhpcy5wcmltYXJ5TmV0d29ya0ludGVyZmFjZS5pZFxuICAgICAgOiB0aGlzLmluc3RhbmNlLnByaW1hcnlOZXR3b3JrSW50ZXJmYWNlSWQ7XG5cbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgQ2ZuIFNpZ25hbHNcbiAgICAvLyAvLyBpZiBib3RoIHRoZSByZXNvdXJjZVNpZ25hbFRpbWVvdXQgYW5kIGluaXRPcHRpb25zLnRpbWVvdXQgYXJlIHNldCxcbiAgICAvLyAvLyB0aGUgdGltZW91dCBpcyBzdW1tZWQgdG9nZXRoZXIuIFRoaXMgbG9naWMgaXMgZG9uZSBpbiBhcHBseUNsb3VkRm9ybWF0aW9uSW5pdC5cbiAgICAvLyAvLyBUaGlzIGlzIGJlY2F1c2UgYXBwbHlVcGRhdGVQb2xpY2llcyBvdmVyd3JpdGVzIHRoZSB0aW1lb3V0IHdoZW4gYm90aCB0aW1lb3V0IGZpZWxkcyBhcmUgc3BlY2lmaWVkLlxuICAgIC8vIHRoaXMuYXBwbHlVcGRhdGVQb2xpY2llcyhwcm9wcyk7XG5cbiAgICAvLyBpZiAocHJvcHMuaW5pdCkge1xuICAgIC8vICAgdGhpcy5hcHBseUNsb3VkRm9ybWF0aW9uSW5pdChwcm9wcy5pbml0LCBwcm9wcy5pbml0T3B0aW9ucyk7XG4gICAgLy8gfVxuXG4gICAgaWYgKHByb3BzLnJlcXVpcmVJbWRzdjIpIHtcbiAgICAgIEFzcGVjdHMub2YodGhpcykuYWRkKG5ldyBJbnN0YW5jZVJlcXVpcmVJbWRzdjJBc3BlY3QoKSk7XG4gICAgICAvLyAsIHtcbiAgICAgIC8vICAgcHJpb3JpdHk6IEFzcGVjdFByaW9yaXR5Lk1VVEFUSU5HLFxuICAgICAgLy8gfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgc2VjdXJpdHkgZ3JvdXAgdG8gdGhlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2VjdXJpdHlHcm91cDogVGhlIHNlY3VyaXR5IGdyb3VwIHRvIGFkZFxuICAgKi9cbiAgcHVibGljIGFkZFNlY3VyaXR5R3JvdXAoc2VjdXJpdHlHcm91cDogSVNlY3VyaXR5R3JvdXApOiB2b2lkIHtcbiAgICB0aGlzLnNlY3VyaXR5R3JvdXBzLnB1c2goc2VjdXJpdHlHcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGNvbW1hbmQgdG8gdGhlIHN0YXJ0dXAgc2NyaXB0IG9mIHRoZSBpbnN0YW5jZS5cbiAgICogVGhlIGNvbW1hbmQgbXVzdCBiZSBpbiB0aGUgc2NyaXB0aW5nIGxhbmd1YWdlIHN1cHBvcnRlZCBieSB0aGUgaW5zdGFuY2UncyBPUyAoaS5lLiBMaW51eC9XaW5kb3dzKS5cbiAgICovXG4gIHB1YmxpYyBhZGRVc2VyRGF0YSguLi5jb21tYW5kczogc3RyaW5nW10pIHtcbiAgICB0aGlzLnVzZXJEYXRhLmFkZENvbW1hbmRzKC4uLmNvbW1hbmRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc3RhdGVtZW50IHRvIHRoZSBJQU0gcm9sZSBhc3N1bWVkIGJ5IHRoZSBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRUb1JvbGVQb2xpY3koc3RhdGVtZW50OiBpYW0uUG9saWN5U3RhdGVtZW50KSB7XG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KHN0YXRlbWVudCk7XG4gIH1cblxuICAvLyAvKipcbiAgLy8gICogVXNlIGEgQ2xvdWRGb3JtYXRpb24gSW5pdCBjb25maWd1cmF0aW9uIGF0IGluc3RhbmNlIHN0YXJ0dXBcbiAgLy8gICpcbiAgLy8gICogVGhpcyBkb2VzIHRoZSBmb2xsb3dpbmc6XG4gIC8vICAqXG4gIC8vICAqIC0gQXR0YWNoZXMgdGhlIENsb3VkRm9ybWF0aW9uIEluaXQgbWV0YWRhdGEgdG8gdGhlIEluc3RhbmNlIHJlc291cmNlLlxuICAvLyAgKiAtIEFkZCBjb21tYW5kcyB0byB0aGUgaW5zdGFuY2UgVXNlckRhdGEgdG8gcnVuIGBjZm4taW5pdGAgYW5kIGBjZm4tc2lnbmFsYC5cbiAgLy8gICogLSBVcGRhdGUgdGhlIGluc3RhbmNlJ3MgQ3JlYXRpb25Qb2xpY3kgdG8gd2FpdCBmb3IgdGhlIGBjZm4tc2lnbmFsYCBjb21tYW5kcy5cbiAgLy8gICovXG4gIC8vIHB1YmxpYyBhcHBseUNsb3VkRm9ybWF0aW9uSW5pdChcbiAgLy8gICBpbml0OiBDbG91ZEZvcm1hdGlvbkluaXQsXG4gIC8vICAgb3B0aW9uczogQXBwbHlDbG91ZEZvcm1hdGlvbkluaXRPcHRpb25zID0ge30sXG4gIC8vICkge1xuICAvLyAgIGluaXQuYXR0YWNoKHRoaXMuaW5zdGFuY2UsIHtcbiAgLy8gICAgIHBsYXRmb3JtOiB0aGlzLm9zVHlwZSxcbiAgLy8gICAgIGluc3RhbmNlUm9sZTogdGhpcy5yb2xlLFxuICAvLyAgICAgdXNlckRhdGE6IHRoaXMudXNlckRhdGEsXG4gIC8vICAgICBjb25maWdTZXRzOiBvcHRpb25zLmNvbmZpZ1NldHMsXG4gIC8vICAgICBlbWJlZEZpbmdlcnByaW50OiBvcHRpb25zLmVtYmVkRmluZ2VycHJpbnQsXG4gIC8vICAgICBwcmludExvZzogb3B0aW9ucy5wcmludExvZyxcbiAgLy8gICAgIGlnbm9yZUZhaWx1cmVzOiBvcHRpb25zLmlnbm9yZUZhaWx1cmVzLFxuICAvLyAgICAgaW5jbHVkZVJvbGU6IG9wdGlvbnMuaW5jbHVkZVJvbGUsXG4gIC8vICAgICBpbmNsdWRlVXJsOiBvcHRpb25zLmluY2x1ZGVVcmwsXG4gIC8vICAgfSk7XG4gIC8vICAgdGhpcy53YWl0Rm9yUmVzb3VyY2VTaWduYWwob3B0aW9ucy50aW1lb3V0ID8/IER1cmF0aW9uLm1pbnV0ZXMoNSkpO1xuICAvLyB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIFdhaXQgZm9yIGEgc2luZ2xlIGFkZGl0aW9uYWwgcmVzb3VyY2Ugc2lnbmFsXG4gIC8vICAqXG4gIC8vICAqIEFkZCAxIHRvIHRoZSBjdXJyZW50IFJlc291cmNlU2lnbmFsIENvdW50IGFuZCBhZGQgdGhlIGdpdmVuIHRpbWVvdXQgdG8gdGhlIGN1cnJlbnQgdGltZW91dC5cbiAgLy8gICpcbiAgLy8gICogVXNlIHRoaXMgdG8gcGF1c2UgdGhlIENsb3VkRm9ybWF0aW9uIGRlcGxveW1lbnQgdG8gd2FpdCBmb3IgdGhlIGluc3RhbmNlc1xuICAvLyAgKiBpbiB0aGUgQXV0b1NjYWxpbmdHcm91cCB0byByZXBvcnQgc3VjY2Vzc2Z1bCBzdGFydHVwIGR1cmluZ1xuICAvLyAgKiBjcmVhdGlvbiBhbmQgdXBkYXRlcy4gVGhlIFVzZXJEYXRhIHNjcmlwdCBuZWVkcyB0byBpbnZva2UgYGNmbi1zaWduYWxgXG4gIC8vICAqIHdpdGggYSBzdWNjZXNzIG9yIGZhaWx1cmUgY29kZSBhZnRlciBpdCBpcyBkb25lIHNldHRpbmcgdXAgdGhlIGluc3RhbmNlLlxuICAvLyAgKi9cbiAgLy8gcHJpdmF0ZSB3YWl0Rm9yUmVzb3VyY2VTaWduYWwodGltZW91dDogRHVyYXRpb24pIHtcbiAgLy8gICBjb25zdCBvbGRSZXNvdXJjZVNpZ25hbCA9XG4gIC8vICAgICB0aGlzLmluc3RhbmNlLmNmbk9wdGlvbnMuY3JlYXRpb25Qb2xpY3k/LnJlc291cmNlU2lnbmFsO1xuICAvLyAgIHRoaXMuaW5zdGFuY2UuY2ZuT3B0aW9ucy5jcmVhdGlvblBvbGljeSA9IHtcbiAgLy8gICAgIC4uLnRoaXMuaW5zdGFuY2UuY2ZuT3B0aW9ucy5jcmVhdGlvblBvbGljeSxcbiAgLy8gICAgIHJlc291cmNlU2lnbmFsOiB7XG4gIC8vICAgICAgIGNvdW50OiAob2xkUmVzb3VyY2VTaWduYWw/LmNvdW50ID8/IDApICsgMSxcbiAgLy8gICAgICAgdGltZW91dDogKG9sZFJlc291cmNlU2lnbmFsPy50aW1lb3V0XG4gIC8vICAgICAgICAgPyBEdXJhdGlvbi5wYXJzZShvbGRSZXNvdXJjZVNpZ25hbD8udGltZW91dCkucGx1cyh0aW1lb3V0KVxuICAvLyAgICAgICAgIDogdGltZW91dFxuICAvLyAgICAgICApLnRvSXNvU3RyaW5nKCksXG4gIC8vICAgICB9LFxuICAvLyAgIH07XG4gIC8vIH1cblxuICAvLyAvKipcbiAgLy8gICogQXBwbHkgQ2xvdWRGb3JtYXRpb24gdXBkYXRlIHBvbGljaWVzIGZvciB0aGUgaW5zdGFuY2VcbiAgLy8gICovXG4gIC8vIHByaXZhdGUgYXBwbHlVcGRhdGVQb2xpY2llcyhwcm9wczogSW5zdGFuY2VQcm9wcykge1xuICAvLyAgIGlmIChwcm9wcy5yZXNvdXJjZVNpZ25hbFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAvLyAgICAgdGhpcy5pbnN0YW5jZS5jZm5PcHRpb25zLmNyZWF0aW9uUG9saWN5ID0ge1xuICAvLyAgICAgICAuLi50aGlzLmluc3RhbmNlLmNmbk9wdGlvbnMuY3JlYXRpb25Qb2xpY3ksXG4gIC8vICAgICAgIHJlc291cmNlU2lnbmFsOiB7XG4gIC8vICAgICAgICAgLi4udGhpcy5pbnN0YW5jZS5jZm5PcHRpb25zLmNyZWF0aW9uUG9saWN5Py5yZXNvdXJjZVNpZ25hbCxcbiAgLy8gICAgICAgICB0aW1lb3V0OlxuICAvLyAgICAgICAgICAgcHJvcHMucmVzb3VyY2VTaWduYWxUaW1lb3V0ICYmXG4gIC8vICAgICAgICAgICBwcm9wcy5yZXNvdXJjZVNpZ25hbFRpbWVvdXQudG9Jc29TdHJpbmcoKSxcbiAgLy8gICAgICAgfSxcbiAgLy8gICAgIH07XG4gIC8vICAgfVxuICAvLyB9XG59XG5cbi8vIC8qKlxuLy8gICogT3B0aW9ucyBmb3IgYXBwbHlpbmcgQ2xvdWRGb3JtYXRpb24gaW5pdCB0byBhbiBpbnN0YW5jZSBvciBpbnN0YW5jZSBncm91cFxuLy8gICovXG4vLyBleHBvcnQgaW50ZXJmYWNlIEFwcGx5Q2xvdWRGb3JtYXRpb25Jbml0T3B0aW9ucyB7XG4vLyAgIC8qKlxuLy8gICAgKiBDb25maWdTZXQgdG8gYWN0aXZhdGVcbi8vICAgICpcbi8vICAgICogQGRlZmF1bHQgWydkZWZhdWx0J11cbi8vICAgICovXG4vLyAgIHJlYWRvbmx5IGNvbmZpZ1NldHM/OiBzdHJpbmdbXTtcblxuLy8gICAvKipcbi8vICAgICogVGltZW91dCB3YWl0aW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiB0byBiZSBhcHBsaWVkXG4vLyAgICAqXG4vLyAgICAqIEBkZWZhdWx0IER1cmF0aW9uLm1pbnV0ZXMoNSlcbi8vICAgICovXG4vLyAgIHJlYWRvbmx5IHRpbWVvdXQ/OiBEdXJhdGlvbjtcblxuLy8gICAvKipcbi8vICAgICogRm9yY2UgaW5zdGFuY2UgcmVwbGFjZW1lbnQgYnkgZW1iZWRkaW5nIGEgY29uZmlnIGZpbmdlcnByaW50XG4vLyAgICAqXG4vLyAgICAqIElmIGB0cnVlYCAodGhlIGRlZmF1bHQpLCBhIGhhc2ggb2YgdGhlIGNvbmZpZyB3aWxsIGJlIGVtYmVkZGVkIGludG8gdGhlXG4vLyAgICAqIFVzZXJEYXRhLCBzbyB0aGF0IGlmIHRoZSBjb25maWcgY2hhbmdlcywgdGhlIFVzZXJEYXRhIGNoYW5nZXMuXG4vLyAgICAqXG4vLyAgICAqIC0gSWYgdGhlIEVDMiBpbnN0YW5jZSBpcyBpbnN0YW5jZS1zdG9yZSBiYWNrZWQgb3Jcbi8vICAgICogICBgdXNlckRhdGFDYXVzZXNSZXBsYWNlbWVudGAgaXMgc2V0LCB0aGlzIHdpbGwgY2F1c2UgdGhlIGluc3RhbmNlIHRvIGJlXG4vLyAgICAqICAgcmVwbGFjZWQgYW5kIHRoZSBuZXcgY29uZmlndXJhdGlvbiB0byBiZSBhcHBsaWVkLlxuLy8gICAgKiAtIElmIHRoZSBpbnN0YW5jZSBpcyBFQlMtYmFja2VkIGFuZCBgdXNlckRhdGFDYXVzZXNSZXBsYWNlbWVudGAgaXMgbm90XG4vLyAgICAqICAgc2V0LCB0aGUgY2hhbmdlIG9mIFVzZXJEYXRhIHdpbGwgbWFrZSB0aGUgaW5zdGFuY2UgcmVzdGFydCBidXQgbm90IGJlXG4vLyAgICAqICAgcmVwbGFjZWQsIGFuZCB0aGUgY29uZmlndXJhdGlvbiB3aWxsIG5vdCBiZSBhcHBsaWVkIGF1dG9tYXRpY2FsbHkuXG4vLyAgICAqXG4vLyAgICAqIElmIGBmYWxzZWAsIG5vIGhhc2ggd2lsbCBiZSBlbWJlZGRlZCwgYW5kIGlmIHRoZSBDbG91ZEZvcm1hdGlvbiBJbml0XG4vLyAgICAqIGNvbmZpZyBjaGFuZ2VzIG5vdGhpbmcgd2lsbCBoYXBwZW4gdG8gdGhlIHJ1bm5pbmcgaW5zdGFuY2UuIElmIGFcbi8vICAgICogY29uZmlnIHVwZGF0ZSBpbnRyb2R1Y2VzIGVycm9ycywgeW91IHdpbGwgbm90IG5vdGljZSB1bnRpbCBhZnRlciB0aGVcbi8vICAgICogQ2xvdWRGb3JtYXRpb24gZGVwbG95bWVudCBzdWNjZXNzZnVsbHkgZmluaXNoZXMgYW5kIHRoZSBuZXh0IGluc3RhbmNlXG4vLyAgICAqIGZhaWxzIHRvIGxhdW5jaC5cbi8vICAgICpcbi8vICAgICogQGRlZmF1bHQgdHJ1ZVxuLy8gICAgKi9cbi8vICAgcmVhZG9ubHkgZW1iZWRGaW5nZXJwcmludD86IGJvb2xlYW47XG5cbi8vICAgLyoqXG4vLyAgICAqIFByaW50IHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgY2ZuLWluaXQgdG8gdGhlIEluc3RhbmNlIFN5c3RlbSBMb2dcbi8vICAgICpcbi8vICAgICogQnkgZGVmYXVsdCwgdGhlIG91dHB1dCBvZiBydW5uaW5nIGNmbi1pbml0IGlzIHdyaXR0ZW4gdG8gYSBsb2cgZmlsZVxuLy8gICAgKiBvbiB0aGUgaW5zdGFuY2UuIFNldCB0aGlzIHRvIGB0cnVlYCB0byBwcmludCBpdCB0byB0aGUgU3lzdGVtIExvZ1xuLy8gICAgKiAodmlzaWJsZSBmcm9tIHRoZSBFQzIgQ29uc29sZSksIGBmYWxzZWAgdG8gbm90IHByaW50IGl0LlxuLy8gICAgKlxuLy8gICAgKiAoQmUgYXdhcmUgdGhhdCB0aGUgc3lzdGVtIGxvZyBpcyByZWZyZXNoZWQgYXQgY2VydGFpbiBwb2ludHMgaW5cbi8vICAgICogdGltZSBvZiB0aGUgaW5zdGFuY2UgbGlmZSBjeWNsZSwgYW5kIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG1heVxuLy8gICAgKiBub3QgYWx3YXlzIHNob3cgdXApLlxuLy8gICAgKlxuLy8gICAgKiBAZGVmYXVsdCB0cnVlXG4vLyAgICAqL1xuLy8gICByZWFkb25seSBwcmludExvZz86IGJvb2xlYW47XG5cbi8vICAgLyoqXG4vLyAgICAqIERvbid0IGZhaWwgdGhlIGluc3RhbmNlIGNyZWF0aW9uIHdoZW4gY2ZuLWluaXQgZmFpbHNcbi8vICAgICpcbi8vICAgICogWW91IGNhbiB1c2UgdGhpcyB0byBwcmV2ZW50IENsb3VkRm9ybWF0aW9uIGZyb20gcm9sbGluZyBiYWNrIHdoZW5cbi8vICAgICogaW5zdGFuY2VzIGZhaWwgdG8gc3RhcnQgdXAsIHRvIGhlbHAgaW4gZGVidWdnaW5nLlxuLy8gICAgKlxuLy8gICAgKiBAZGVmYXVsdCBmYWxzZVxuLy8gICAgKi9cbi8vICAgcmVhZG9ubHkgaWdub3JlRmFpbHVyZXM/OiBib29sZWFuO1xuXG4vLyAgIC8qKlxuLy8gICAgKiBJbmNsdWRlIC0tdXJsIGFyZ3VtZW50IHdoZW4gcnVubmluZyBjZm4taW5pdCBhbmQgY2ZuLXNpZ25hbCBjb21tYW5kc1xuLy8gICAgKlxuLy8gICAgKiBUaGlzIHdpbGwgYmUgdGhlIGNsb3VkZm9ybWF0aW9uIGVuZHBvaW50IGluIHRoZSBkZXBsb3llZCByZWdpb25cbi8vICAgICogZS5nLiBodHRwczovL2Nsb3VkZm9ybWF0aW9uLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tXG4vLyAgICAqXG4vLyAgICAqIEBkZWZhdWx0IGZhbHNlXG4vLyAgICAqL1xuLy8gICByZWFkb25seSBpbmNsdWRlVXJsPzogYm9vbGVhbjtcblxuLy8gICAvKipcbi8vICAgICogSW5jbHVkZSAtLXJvbGUgYXJndW1lbnQgd2hlbiBydW5uaW5nIGNmbi1pbml0IGFuZCBjZm4tc2lnbmFsIGNvbW1hbmRzXG4vLyAgICAqXG4vLyAgICAqIFRoaXMgd2lsbCBiZSB0aGUgSUFNIGluc3RhbmNlIHByb2ZpbGUgYXR0YWNoZWQgdG8gdGhlIEVDMiBpbnN0YW5jZVxuLy8gICAgKlxuLy8gICAgKiBAZGVmYXVsdCBmYWxzZVxuLy8gICAgKi9cbi8vICAgcmVhZG9ubHkgaW5jbHVkZVJvbGU/OiBib29sZWFuO1xuLy8gfVxuIl19
@@ -0,0 +1,249 @@
1
+ import { vpcIpv6CidrBlockAssociation } from "@cdktf/provider-aws";
2
+ import { Construct } from "constructs";
3
+ import { SubnetConfiguration } from "./vpc";
4
+ /**
5
+ * An abstract Provider of IpAddresses
6
+ *
7
+ * Note this is specific to the IPv4 CIDR.
8
+ */
9
+ export declare class IpAddresses {
10
+ /**
11
+ * Used to provide local Ip Address Management services for your VPC
12
+ *
13
+ * VPC CIDR is supplied at creation and subnets are calculated locally
14
+ *
15
+ * Note this is specific to the IPv4 CIDR.
16
+ *
17
+ */
18
+ static cidr(cidrBlock: string): IIpAddresses;
19
+ /**
20
+ * Used to provide centralized Ip Address Management services for your VPC
21
+ *
22
+ * Uses VPC CIDR allocations from AWS IPAM
23
+ *
24
+ * Note this is specific to the IPv4 CIDR.
25
+ *
26
+ * @see https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html
27
+ */
28
+ static awsIpamAllocation(props: AwsIpamProps): IIpAddresses;
29
+ private constructor();
30
+ }
31
+ /**
32
+ * Implementations for ip address management.
33
+ *
34
+ * Note this is specific to the IPv4 CIDR.
35
+ */
36
+ export interface IIpAddresses {
37
+ /**
38
+ * Called by the VPC to retrieve VPC options from the Ipam
39
+ *
40
+ * Don't call this directly, the VPC will call it automatically.
41
+ */
42
+ allocateVpcCidr(): VpcIpamOptions;
43
+ /**
44
+ * Called by the VPC to retrieve Subnet options from the Ipam
45
+ *
46
+ * Don't call this directly, the VPC will call it automatically.
47
+ */
48
+ allocateSubnetsCidr(input: AllocateCidrRequest): SubnetIpamOptions;
49
+ }
50
+ /**
51
+ * CIDR Allocated Vpc
52
+ */
53
+ export interface VpcIpamOptions {
54
+ /**
55
+ * CIDR Block for Vpc
56
+ *
57
+ * @default - Only required when Ipam has concrete allocation available for static Vpc
58
+ */
59
+ readonly cidrBlock?: string;
60
+ /**
61
+ * CIDR Mask for Vpc
62
+ *
63
+ * @default - Only required when using AWS Ipam
64
+ */
65
+ readonly ipv4NetmaskLength?: number;
66
+ /**
67
+ * ipv4 IPAM Pool Id
68
+ *
69
+ * @default - Only required when using AWS Ipam
70
+ */
71
+ readonly ipv4IpamPoolId?: string;
72
+ }
73
+ /**
74
+ * Subnet requested for allocation
75
+ */
76
+ export interface RequestedSubnet {
77
+ /**
78
+ * The availability zone for the subnet
79
+ */
80
+ readonly availabilityZone: string;
81
+ /**
82
+ * Specify configuration parameters for a single subnet group in a VPC
83
+ */
84
+ readonly configuration: SubnetConfiguration;
85
+ /**
86
+ * Id for the Subnet construct
87
+ */
88
+ readonly subnetConstructId: string;
89
+ }
90
+ /**
91
+ * Request for subnets CIDR to be allocated for a Vpc
92
+ */
93
+ export interface AllocateCidrRequest {
94
+ /**
95
+ * The IPv4 CIDR block for this Vpc
96
+ */
97
+ readonly vpcCidr: string;
98
+ /**
99
+ * The Subnets to be allocated
100
+ */
101
+ readonly requestedSubnets: RequestedSubnet[];
102
+ }
103
+ /**
104
+ * Request for allocation of the VPC IPv6 CIDR.
105
+ */
106
+ export interface AllocateVpcIpv6CidrRequest {
107
+ /**
108
+ * The VPC construct to attach to.
109
+ */
110
+ readonly scope: Construct;
111
+ /**
112
+ * The id of the VPC.
113
+ */
114
+ readonly vpcId: string;
115
+ }
116
+ /**
117
+ * Request for IPv6 CIDR block to be split up.
118
+ */
119
+ export interface CreateIpv6CidrBlocksRequest {
120
+ /**
121
+ * The IPv6 CIDR block string representation.
122
+ */
123
+ readonly ipv6SelectedCidr: string;
124
+ /**
125
+ * The number of subnets to assign CIDRs to.
126
+ */
127
+ readonly subnetCount: number;
128
+ /**
129
+ * Size of the covered bits in the CIDR.
130
+ * @default - 128 - 64 = /64 CIDR.
131
+ */
132
+ readonly sizeMask?: string;
133
+ /**
134
+ * The parent mask of the CIDR.
135
+ *
136
+ * Valid values are from 44 to 60 in increments of 4.
137
+ *
138
+ * @default - 56
139
+ */
140
+ readonly parentMask?: number;
141
+ }
142
+ /**
143
+ * Request for subnet IPv6 CIDRs to be allocated for a VPC.
144
+ */
145
+ export interface AllocateIpv6CidrRequest {
146
+ /**
147
+ * List of subnets allocated with IPv4 CIDRs
148
+ */
149
+ readonly allocatedSubnets: AllocatedSubnet[];
150
+ /**
151
+ * The IPv6 CIDRs to be allocated to the subnets
152
+ */
153
+ readonly ipv6Cidrs: string[];
154
+ }
155
+ /**
156
+ * CIDR Allocated Subnets
157
+ */
158
+ export interface SubnetIpamOptions {
159
+ /**
160
+ * CIDR Allocations for Subnets
161
+ */
162
+ readonly allocatedSubnets: AllocatedSubnet[];
163
+ }
164
+ /**
165
+ * CIDR Allocated Subnet
166
+ */
167
+ export interface AllocatedSubnet {
168
+ /**
169
+ * IPv4 CIDR Allocations for a Subnet.
170
+ *
171
+ * Note this is specific to the IPv4 CIDR.
172
+ */
173
+ readonly cidr: string;
174
+ /**
175
+ * IPv6 CIDR Allocations for a Subnet.
176
+ *
177
+ * Note this is specific to the IPv6 CIDR.
178
+ *
179
+ * @default - no IPV6 CIDR
180
+ */
181
+ readonly ipv6Cidr?: string;
182
+ }
183
+ /**
184
+ * Configuration for AwsIpam
185
+ */
186
+ export interface AwsIpamProps {
187
+ /**
188
+ * Netmask length for Vpc
189
+ */
190
+ readonly ipv4NetmaskLength: number;
191
+ /**
192
+ * Ipam Pool Id for ipv4 allocation
193
+ */
194
+ readonly ipv4IpamPoolId: string;
195
+ /**
196
+ * Default length for Subnet ipv4 Network mask
197
+ *
198
+ * Specify this option only if you do not specify all Subnets using SubnetConfiguration with a cidrMask
199
+ *
200
+ * @default - Default ipv4 Subnet Mask for subnets in Vpc
201
+ *
202
+ */
203
+ readonly defaultSubnetIpv4NetmaskLength?: number;
204
+ }
205
+ /**
206
+ * An abstract Provider of Ipv6Addresses.
207
+ *
208
+ * Note this is specific to the IPv6 CIDR.
209
+ */
210
+ export declare class Ipv6Addresses {
211
+ /**
212
+ * Used for IPv6 address management with Amazon provided CIDRs.
213
+ *
214
+ * Note this is specific to the IPv6 CIDR.
215
+ */
216
+ static amazonProvided(): IIpv6Addresses;
217
+ private constructor();
218
+ }
219
+ /**
220
+ * Implementations for IPv6 address management.
221
+ *
222
+ * Note this is specific to the IPv6 CIDR.
223
+ */
224
+ export interface IIpv6Addresses {
225
+ /**
226
+ * Whether the IPv6 CIDR is Amazon provided or not.
227
+ *
228
+ * Note this is specific to the IPv6 CIDR.
229
+ */
230
+ amazonProvided: boolean;
231
+ /**
232
+ * Called by VPC to allocate IPv6 CIDR.
233
+ *
234
+ * Note this is specific to the IPv6 CIDR.
235
+ */
236
+ allocateVpcIpv6Cidr(input: AllocateVpcIpv6CidrRequest): vpcIpv6CidrBlockAssociation.VpcIpv6CidrBlockAssociation;
237
+ /**
238
+ * Split IPv6 CIDR block up for subnets.
239
+ *
240
+ * Note this is specific to the IPv6 CIDR.
241
+ */
242
+ createIpv6CidrBlocks(input: CreateIpv6CidrBlocksRequest): string[];
243
+ /**
244
+ * Allocates Subnets IPv6 CIDRs. Called by VPC when creating subnets with IPv6 enabled.
245
+ *
246
+ * Note this is specific to the IPv6 CIDR.
247
+ */
248
+ allocateSubnetsIpv6Cidr(input: AllocateIpv6CidrRequest): SubnetIpamOptions;
249
+ }