terraconstructs 0.0.11 → 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 +7 -5
  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,681 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VPNMetrics = exports.TransitGatewayMetrics = exports.NATGatewayMetrics = exports.CWAgentMetrics = exports.EC2Metrics = exports.EBSMetrics = exports.EC2CapacityReservationsMetrics = void 0;
4
+ class EC2CapacityReservationsMetrics {
5
+ static instanceUtilizationAverage(dimensions) {
6
+ return {
7
+ "namespace": "AWS/EC2CapacityReservations",
8
+ "metricName": "InstanceUtilization",
9
+ "dimensionsMap": dimensions,
10
+ "statistic": "Average"
11
+ };
12
+ }
13
+ static usedInstanceCountAverage(dimensions) {
14
+ return {
15
+ "namespace": "AWS/EC2CapacityReservations",
16
+ "metricName": "UsedInstanceCount",
17
+ "dimensionsMap": dimensions,
18
+ "statistic": "Average"
19
+ };
20
+ }
21
+ static availableInstanceCountAverage(dimensions) {
22
+ return {
23
+ "namespace": "AWS/EC2CapacityReservations",
24
+ "metricName": "AvailableInstanceCount",
25
+ "dimensionsMap": dimensions,
26
+ "statistic": "Average"
27
+ };
28
+ }
29
+ static totalInstanceCountAverage(dimensions) {
30
+ return {
31
+ "namespace": "AWS/EC2CapacityReservations",
32
+ "metricName": "TotalInstanceCount",
33
+ "dimensionsMap": dimensions,
34
+ "statistic": "Average"
35
+ };
36
+ }
37
+ }
38
+ exports.EC2CapacityReservationsMetrics = EC2CapacityReservationsMetrics;
39
+ class EBSMetrics {
40
+ static volumeReadBytesSum(dimensions) {
41
+ return {
42
+ "namespace": "AWS/EBS",
43
+ "metricName": "VolumeReadBytes",
44
+ "dimensionsMap": dimensions,
45
+ "statistic": "Sum"
46
+ };
47
+ }
48
+ static volumeWriteBytesSum(dimensions) {
49
+ return {
50
+ "namespace": "AWS/EBS",
51
+ "metricName": "VolumeWriteBytes",
52
+ "dimensionsMap": dimensions,
53
+ "statistic": "Sum"
54
+ };
55
+ }
56
+ static volumeReadOpsSum(dimensions) {
57
+ return {
58
+ "namespace": "AWS/EBS",
59
+ "metricName": "VolumeReadOps",
60
+ "dimensionsMap": dimensions,
61
+ "statistic": "Sum"
62
+ };
63
+ }
64
+ static volumeTotalReadTimeAverage(dimensions) {
65
+ return {
66
+ "namespace": "AWS/EBS",
67
+ "metricName": "VolumeTotalReadTime",
68
+ "dimensionsMap": dimensions,
69
+ "statistic": "Average"
70
+ };
71
+ }
72
+ static volumeWriteOpsSum(dimensions) {
73
+ return {
74
+ "namespace": "AWS/EBS",
75
+ "metricName": "VolumeWriteOps",
76
+ "dimensionsMap": dimensions,
77
+ "statistic": "Sum"
78
+ };
79
+ }
80
+ static volumeTotalWriteTimeAverage(dimensions) {
81
+ return {
82
+ "namespace": "AWS/EBS",
83
+ "metricName": "VolumeTotalWriteTime",
84
+ "dimensionsMap": dimensions,
85
+ "statistic": "Average"
86
+ };
87
+ }
88
+ static volumeIdleTimeAverage(dimensions) {
89
+ return {
90
+ "namespace": "AWS/EBS",
91
+ "metricName": "VolumeIdleTime",
92
+ "dimensionsMap": dimensions,
93
+ "statistic": "Average"
94
+ };
95
+ }
96
+ static volumeQueueLengthAverage(dimensions) {
97
+ return {
98
+ "namespace": "AWS/EBS",
99
+ "metricName": "VolumeQueueLength",
100
+ "dimensionsMap": dimensions,
101
+ "statistic": "Average"
102
+ };
103
+ }
104
+ static burstBalanceAverage(dimensions) {
105
+ return {
106
+ "namespace": "AWS/EBS",
107
+ "metricName": "BurstBalance",
108
+ "dimensionsMap": dimensions,
109
+ "statistic": "Average"
110
+ };
111
+ }
112
+ }
113
+ exports.EBSMetrics = EBSMetrics;
114
+ class EC2Metrics {
115
+ static cpuCreditUsageAverage(dimensions) {
116
+ return {
117
+ "namespace": "AWS/EC2",
118
+ "metricName": "CPUCreditUsage",
119
+ "dimensionsMap": dimensions,
120
+ "statistic": "Average"
121
+ };
122
+ }
123
+ static cpuCreditBalanceAverage(dimensions) {
124
+ return {
125
+ "namespace": "AWS/EC2",
126
+ "metricName": "CPUCreditBalance",
127
+ "dimensionsMap": dimensions,
128
+ "statistic": "Average"
129
+ };
130
+ }
131
+ static cpuSurplusCreditBalanceAverage(dimensions) {
132
+ return {
133
+ "namespace": "AWS/EC2",
134
+ "metricName": "CPUSurplusCreditBalance",
135
+ "dimensionsMap": dimensions,
136
+ "statistic": "Average"
137
+ };
138
+ }
139
+ static cpuSurplusCreditsChargedAverage(dimensions) {
140
+ return {
141
+ "namespace": "AWS/EC2",
142
+ "metricName": "CPUSurplusCreditsCharged",
143
+ "dimensionsMap": dimensions,
144
+ "statistic": "Average"
145
+ };
146
+ }
147
+ static cpuUtilizationAverage(dimensions) {
148
+ return {
149
+ "namespace": "AWS/EC2",
150
+ "metricName": "CPUUtilization",
151
+ "dimensionsMap": dimensions,
152
+ "statistic": "Average"
153
+ };
154
+ }
155
+ static diskReadBytesAverage(dimensions) {
156
+ return {
157
+ "namespace": "AWS/EC2",
158
+ "metricName": "DiskReadBytes",
159
+ "dimensionsMap": dimensions,
160
+ "statistic": "Average"
161
+ };
162
+ }
163
+ static diskReadOpsAverage(dimensions) {
164
+ return {
165
+ "namespace": "AWS/EC2",
166
+ "metricName": "DiskReadOps",
167
+ "dimensionsMap": dimensions,
168
+ "statistic": "Average"
169
+ };
170
+ }
171
+ static diskWriteBytesAverage(dimensions) {
172
+ return {
173
+ "namespace": "AWS/EC2",
174
+ "metricName": "DiskWriteBytes",
175
+ "dimensionsMap": dimensions,
176
+ "statistic": "Average"
177
+ };
178
+ }
179
+ static diskWriteOpsAverage(dimensions) {
180
+ return {
181
+ "namespace": "AWS/EC2",
182
+ "metricName": "DiskWriteOps",
183
+ "dimensionsMap": dimensions,
184
+ "statistic": "Average"
185
+ };
186
+ }
187
+ static metadataNoTokenSum(dimensions) {
188
+ return {
189
+ "namespace": "AWS/EC2",
190
+ "metricName": "MetadataNoToken",
191
+ "dimensionsMap": dimensions,
192
+ "statistic": "Sum"
193
+ };
194
+ }
195
+ static networkInAverage(dimensions) {
196
+ return {
197
+ "namespace": "AWS/EC2",
198
+ "metricName": "NetworkIn",
199
+ "dimensionsMap": dimensions,
200
+ "statistic": "Average"
201
+ };
202
+ }
203
+ static networkOutAverage(dimensions) {
204
+ return {
205
+ "namespace": "AWS/EC2",
206
+ "metricName": "NetworkOut",
207
+ "dimensionsMap": dimensions,
208
+ "statistic": "Average"
209
+ };
210
+ }
211
+ static networkPacketsInAverage(dimensions) {
212
+ return {
213
+ "namespace": "AWS/EC2",
214
+ "metricName": "NetworkPacketsIn",
215
+ "dimensionsMap": dimensions,
216
+ "statistic": "Average"
217
+ };
218
+ }
219
+ static networkPacketsOutAverage(dimensions) {
220
+ return {
221
+ "namespace": "AWS/EC2",
222
+ "metricName": "NetworkPacketsOut",
223
+ "dimensionsMap": dimensions,
224
+ "statistic": "Average"
225
+ };
226
+ }
227
+ static statusCheckFailedSum(dimensions) {
228
+ return {
229
+ "namespace": "AWS/EC2",
230
+ "metricName": "StatusCheckFailed",
231
+ "dimensionsMap": dimensions,
232
+ "statistic": "Sum"
233
+ };
234
+ }
235
+ static statusCheckFailedInstanceSum(dimensions) {
236
+ return {
237
+ "namespace": "AWS/EC2",
238
+ "metricName": "StatusCheckFailed_Instance",
239
+ "dimensionsMap": dimensions,
240
+ "statistic": "Sum"
241
+ };
242
+ }
243
+ static statusCheckFailedSystemSum(dimensions) {
244
+ return {
245
+ "namespace": "AWS/EC2",
246
+ "metricName": "StatusCheckFailed_System",
247
+ "dimensionsMap": dimensions,
248
+ "statistic": "Sum"
249
+ };
250
+ }
251
+ }
252
+ exports.EC2Metrics = EC2Metrics;
253
+ class CWAgentMetrics {
254
+ static cpuUsageIdleAverage(dimensions) {
255
+ return {
256
+ "namespace": "CWAgent",
257
+ "metricName": "cpu_usage_idle",
258
+ "dimensionsMap": dimensions,
259
+ "statistic": "Average"
260
+ };
261
+ }
262
+ static cpuUsageIowaitAverage(dimensions) {
263
+ return {
264
+ "namespace": "CWAgent",
265
+ "metricName": "cpu_usage_iowait",
266
+ "dimensionsMap": dimensions,
267
+ "statistic": "Average"
268
+ };
269
+ }
270
+ static cpuUsageStealAverage(dimensions) {
271
+ return {
272
+ "namespace": "CWAgent",
273
+ "metricName": "cpu_usage_steal",
274
+ "dimensionsMap": dimensions,
275
+ "statistic": "Average"
276
+ };
277
+ }
278
+ static cpuUsageSystemAverage(dimensions) {
279
+ return {
280
+ "namespace": "CWAgent",
281
+ "metricName": "cpu_usage_system",
282
+ "dimensionsMap": dimensions,
283
+ "statistic": "Average"
284
+ };
285
+ }
286
+ static cpuUsageUserAverage(dimensions) {
287
+ return {
288
+ "namespace": "CWAgent",
289
+ "metricName": "cpu_usage_user",
290
+ "dimensionsMap": dimensions,
291
+ "statistic": "Average"
292
+ };
293
+ }
294
+ static diskInodesFreeSum(dimensions) {
295
+ return {
296
+ "namespace": "CWAgent",
297
+ "metricName": "disk_inodes_free",
298
+ "dimensionsMap": dimensions,
299
+ "statistic": "Sum"
300
+ };
301
+ }
302
+ static diskInodesTotalSum(dimensions) {
303
+ return {
304
+ "namespace": "CWAgent",
305
+ "metricName": "disk_inodes_total",
306
+ "dimensionsMap": dimensions,
307
+ "statistic": "Sum"
308
+ };
309
+ }
310
+ static diskInodesUsedSum(dimensions) {
311
+ return {
312
+ "namespace": "CWAgent",
313
+ "metricName": "disk_inodes_used",
314
+ "dimensionsMap": dimensions,
315
+ "statistic": "Sum"
316
+ };
317
+ }
318
+ static diskUsedPercentAverage(dimensions) {
319
+ return {
320
+ "namespace": "CWAgent",
321
+ "metricName": "disk_used_percent",
322
+ "dimensionsMap": dimensions,
323
+ "statistic": "Average"
324
+ };
325
+ }
326
+ static diskioIoTimeAverage(dimensions) {
327
+ return {
328
+ "namespace": "CWAgent",
329
+ "metricName": "diskio_io_time",
330
+ "dimensionsMap": dimensions,
331
+ "statistic": "Average"
332
+ };
333
+ }
334
+ static diskioReadBytesAverage(dimensions) {
335
+ return {
336
+ "namespace": "CWAgent",
337
+ "metricName": "diskio_read_bytes",
338
+ "dimensionsMap": dimensions,
339
+ "statistic": "Average"
340
+ };
341
+ }
342
+ static diskioReadsAverage(dimensions) {
343
+ return {
344
+ "namespace": "CWAgent",
345
+ "metricName": "diskio_reads",
346
+ "dimensionsMap": dimensions,
347
+ "statistic": "Average"
348
+ };
349
+ }
350
+ static diskioWriteBytesAverage(dimensions) {
351
+ return {
352
+ "namespace": "CWAgent",
353
+ "metricName": "diskio_write_bytes",
354
+ "dimensionsMap": dimensions,
355
+ "statistic": "Average"
356
+ };
357
+ }
358
+ static diskioWritesAverage(dimensions) {
359
+ return {
360
+ "namespace": "CWAgent",
361
+ "metricName": "diskio_writes",
362
+ "dimensionsMap": dimensions,
363
+ "statistic": "Average"
364
+ };
365
+ }
366
+ static memCachedAverage(dimensions) {
367
+ return {
368
+ "namespace": "CWAgent",
369
+ "metricName": "mem_cached",
370
+ "dimensionsMap": dimensions,
371
+ "statistic": "Average"
372
+ };
373
+ }
374
+ static memTotalAverage(dimensions) {
375
+ return {
376
+ "namespace": "CWAgent",
377
+ "metricName": "mem_total",
378
+ "dimensionsMap": dimensions,
379
+ "statistic": "Average"
380
+ };
381
+ }
382
+ static memUsedAverage(dimensions) {
383
+ return {
384
+ "namespace": "CWAgent",
385
+ "metricName": "mem_used",
386
+ "dimensionsMap": dimensions,
387
+ "statistic": "Average"
388
+ };
389
+ }
390
+ static memUsedPercentAverage(dimensions) {
391
+ return {
392
+ "namespace": "CWAgent",
393
+ "metricName": "mem_used_percent",
394
+ "dimensionsMap": dimensions,
395
+ "statistic": "Average"
396
+ };
397
+ }
398
+ static netstatTcpEstablishedSum(dimensions) {
399
+ return {
400
+ "namespace": "CWAgent",
401
+ "metricName": "netstat_tcp_established",
402
+ "dimensionsMap": dimensions,
403
+ "statistic": "Sum"
404
+ };
405
+ }
406
+ static netstatTcpTimeWaitSum(dimensions) {
407
+ return {
408
+ "namespace": "CWAgent",
409
+ "metricName": "netstat_tcp_time_wait",
410
+ "dimensionsMap": dimensions,
411
+ "statistic": "Sum"
412
+ };
413
+ }
414
+ static swapUsedPercentAverage(dimensions) {
415
+ return {
416
+ "namespace": "CWAgent",
417
+ "metricName": "swap_used_percent",
418
+ "dimensionsMap": dimensions,
419
+ "statistic": "Average"
420
+ };
421
+ }
422
+ static tcPv4ConnectionsEstablishedSum(dimensions) {
423
+ return {
424
+ "namespace": "CWAgent",
425
+ "metricName": "TCPv4 Connections Established",
426
+ "dimensionsMap": dimensions,
427
+ "statistic": "Sum"
428
+ };
429
+ }
430
+ static tcPv6ConnectionsEstablishedSum(dimensions) {
431
+ return {
432
+ "namespace": "CWAgent",
433
+ "metricName": "TCPv6 Connections Established",
434
+ "dimensionsMap": dimensions,
435
+ "statistic": "Sum"
436
+ };
437
+ }
438
+ static memoryCommittedBytesInUseAverage(dimensions) {
439
+ return {
440
+ "namespace": "CWAgent",
441
+ "metricName": "Memory % Committed Bytes In Use",
442
+ "dimensionsMap": dimensions,
443
+ "statistic": "Average"
444
+ };
445
+ }
446
+ static processorIdleTimeAverage(dimensions) {
447
+ return {
448
+ "namespace": "CWAgent",
449
+ "metricName": "Processor % Idle Time",
450
+ "dimensionsMap": dimensions,
451
+ "statistic": "Average"
452
+ };
453
+ }
454
+ static processorInterruptTimeAverage(dimensions) {
455
+ return {
456
+ "namespace": "CWAgent",
457
+ "metricName": "Processor % Interrupt Time",
458
+ "dimensionsMap": dimensions,
459
+ "statistic": "Average"
460
+ };
461
+ }
462
+ static processorUserTimeAverage(dimensions) {
463
+ return {
464
+ "namespace": "CWAgent",
465
+ "metricName": "Processor % User Time",
466
+ "dimensionsMap": dimensions,
467
+ "statistic": "Average"
468
+ };
469
+ }
470
+ static logicalDiskFreeSpaceAverage(dimensions) {
471
+ return {
472
+ "namespace": "CWAgent",
473
+ "metricName": "LogicalDisk % Free Space",
474
+ "dimensionsMap": dimensions,
475
+ "statistic": "Average"
476
+ };
477
+ }
478
+ static pagingFileUsageAverage(dimensions) {
479
+ return {
480
+ "namespace": "CWAgent",
481
+ "metricName": "Paging File % Usage",
482
+ "dimensionsMap": dimensions,
483
+ "statistic": "Average"
484
+ };
485
+ }
486
+ }
487
+ exports.CWAgentMetrics = CWAgentMetrics;
488
+ class NATGatewayMetrics {
489
+ static activeConnectionCountMaximum(dimensions) {
490
+ return {
491
+ "namespace": "AWS/NATGateway",
492
+ "metricName": "ActiveConnectionCount",
493
+ "dimensionsMap": dimensions,
494
+ "statistic": "Maximum"
495
+ };
496
+ }
497
+ static packetsDropCountSum(dimensions) {
498
+ return {
499
+ "namespace": "AWS/NATGateway",
500
+ "metricName": "PacketsDropCount",
501
+ "dimensionsMap": dimensions,
502
+ "statistic": "Sum"
503
+ };
504
+ }
505
+ static bytesInFromDestinationSum(dimensions) {
506
+ return {
507
+ "namespace": "AWS/NATGateway",
508
+ "metricName": "BytesInFromDestination",
509
+ "dimensionsMap": dimensions,
510
+ "statistic": "Sum"
511
+ };
512
+ }
513
+ static bytesInFromSourceSum(dimensions) {
514
+ return {
515
+ "namespace": "AWS/NATGateway",
516
+ "metricName": "BytesInFromSource",
517
+ "dimensionsMap": dimensions,
518
+ "statistic": "Sum"
519
+ };
520
+ }
521
+ static bytesOutToDestinationSum(dimensions) {
522
+ return {
523
+ "namespace": "AWS/NATGateway",
524
+ "metricName": "BytesOutToDestination",
525
+ "dimensionsMap": dimensions,
526
+ "statistic": "Sum"
527
+ };
528
+ }
529
+ static bytesOutToSourceSum(dimensions) {
530
+ return {
531
+ "namespace": "AWS/NATGateway",
532
+ "metricName": "BytesOutToSource",
533
+ "dimensionsMap": dimensions,
534
+ "statistic": "Sum"
535
+ };
536
+ }
537
+ static connectionAttemptCountSum(dimensions) {
538
+ return {
539
+ "namespace": "AWS/NATGateway",
540
+ "metricName": "ConnectionAttemptCount",
541
+ "dimensionsMap": dimensions,
542
+ "statistic": "Sum"
543
+ };
544
+ }
545
+ static connectionEstablishedCountSum(dimensions) {
546
+ return {
547
+ "namespace": "AWS/NATGateway",
548
+ "metricName": "ConnectionEstablishedCount",
549
+ "dimensionsMap": dimensions,
550
+ "statistic": "Sum"
551
+ };
552
+ }
553
+ static errorPortAllocationSum(dimensions) {
554
+ return {
555
+ "namespace": "AWS/NATGateway",
556
+ "metricName": "ErrorPortAllocation",
557
+ "dimensionsMap": dimensions,
558
+ "statistic": "Sum"
559
+ };
560
+ }
561
+ static idleTimeoutCountSum(dimensions) {
562
+ return {
563
+ "namespace": "AWS/NATGateway",
564
+ "metricName": "IdleTimeoutCount",
565
+ "dimensionsMap": dimensions,
566
+ "statistic": "Sum"
567
+ };
568
+ }
569
+ static packetsInFromDestinationSum(dimensions) {
570
+ return {
571
+ "namespace": "AWS/NATGateway",
572
+ "metricName": "PacketsInFromDestination",
573
+ "dimensionsMap": dimensions,
574
+ "statistic": "Sum"
575
+ };
576
+ }
577
+ static packetsInFromSourceSum(dimensions) {
578
+ return {
579
+ "namespace": "AWS/NATGateway",
580
+ "metricName": "PacketsInFromSource",
581
+ "dimensionsMap": dimensions,
582
+ "statistic": "Sum"
583
+ };
584
+ }
585
+ static packetsOutToDestinationSum(dimensions) {
586
+ return {
587
+ "namespace": "AWS/NATGateway",
588
+ "metricName": "PacketsOutToDestination",
589
+ "dimensionsMap": dimensions,
590
+ "statistic": "Sum"
591
+ };
592
+ }
593
+ static packetsOutToSourceSum(dimensions) {
594
+ return {
595
+ "namespace": "AWS/NATGateway",
596
+ "metricName": "PacketsOutToSource",
597
+ "dimensionsMap": dimensions,
598
+ "statistic": "Sum"
599
+ };
600
+ }
601
+ }
602
+ exports.NATGatewayMetrics = NATGatewayMetrics;
603
+ class TransitGatewayMetrics {
604
+ static bytesInSum(dimensions) {
605
+ return {
606
+ "namespace": "AWS/TransitGateway",
607
+ "metricName": "BytesIn",
608
+ "dimensionsMap": dimensions,
609
+ "statistic": "Sum"
610
+ };
611
+ }
612
+ static bytesOutSum(dimensions) {
613
+ return {
614
+ "namespace": "AWS/TransitGateway",
615
+ "metricName": "BytesOut",
616
+ "dimensionsMap": dimensions,
617
+ "statistic": "Sum"
618
+ };
619
+ }
620
+ static packetDropCountBlackholeSum(dimensions) {
621
+ return {
622
+ "namespace": "AWS/TransitGateway",
623
+ "metricName": "PacketDropCountBlackhole",
624
+ "dimensionsMap": dimensions,
625
+ "statistic": "Sum"
626
+ };
627
+ }
628
+ static packetDropCountNoRouteSum(dimensions) {
629
+ return {
630
+ "namespace": "AWS/TransitGateway",
631
+ "metricName": "PacketDropCountNoRoute",
632
+ "dimensionsMap": dimensions,
633
+ "statistic": "Sum"
634
+ };
635
+ }
636
+ static packetsInSum(dimensions) {
637
+ return {
638
+ "namespace": "AWS/TransitGateway",
639
+ "metricName": "PacketsIn",
640
+ "dimensionsMap": dimensions,
641
+ "statistic": "Sum"
642
+ };
643
+ }
644
+ static packetsOutSum(dimensions) {
645
+ return {
646
+ "namespace": "AWS/TransitGateway",
647
+ "metricName": "PacketsOut",
648
+ "dimensionsMap": dimensions,
649
+ "statistic": "Sum"
650
+ };
651
+ }
652
+ }
653
+ exports.TransitGatewayMetrics = TransitGatewayMetrics;
654
+ class VPNMetrics {
655
+ static tunnelDataInSum(dimensions) {
656
+ return {
657
+ "namespace": "AWS/VPN",
658
+ "metricName": "TunnelDataIn",
659
+ "dimensionsMap": dimensions,
660
+ "statistic": "Sum"
661
+ };
662
+ }
663
+ static tunnelStateAverage(dimensions) {
664
+ return {
665
+ "namespace": "AWS/VPN",
666
+ "metricName": "TunnelState",
667
+ "dimensionsMap": dimensions,
668
+ "statistic": "Average"
669
+ };
670
+ }
671
+ static tunnelDataOutSum(dimensions) {
672
+ return {
673
+ "namespace": "AWS/VPN",
674
+ "metricName": "TunnelDataOut",
675
+ "dimensionsMap": dimensions,
676
+ "statistic": "Sum"
677
+ };
678
+ }
679
+ }
680
+ exports.VPNMetrics = VPNMetrics;
681
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLWNhbm5lZC1tZXRyaWNzLmdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9lYzItY2FubmVkLW1ldHJpY3MuZ2VuZXJhdGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVdBLE1BQWEsOEJBQThCO0lBQ2xDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxVQUE4QztRQUNyRixPQUFPO1lBQ0wsV0FBVyxFQUFFLDZCQUE2QjtZQUMxQyxZQUFZLEVBQUUscUJBQXFCO1lBQ25DLGVBQWUsRUFBRSxVQUFVO1lBQzNCLFdBQVcsRUFBRSxTQUFTO1NBQ3ZCLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxDQUFDLHdCQUF3QixDQUFDLFVBQThDO1FBQ25GLE9BQU87WUFDTCxXQUFXLEVBQUUsNkJBQTZCO1lBQzFDLFlBQVksRUFBRSxtQkFBbUI7WUFDakMsZUFBZSxFQUFFLFVBQVU7WUFDM0IsV0FBVyxFQUFFLFNBQVM7U0FDdkIsQ0FBQztJQUNKLENBQUM7SUFFTSxNQUFNLENBQUMsNkJBQTZCLENBQUMsVUFBOEM7UUFDeEYsT0FBTztZQUNMLFdBQVcsRUFBRSw2QkFBNkI7WUFDMUMsWUFBWSxFQUFFLHdCQUF3QjtZQUN0QyxlQUFlLEVBQUUsVUFBVTtZQUMzQixXQUFXLEVBQUUsU0FBUztTQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVNLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxVQUE4QztRQUNwRixPQUFPO1lBQ0wsV0FBVyxFQUFFLDZCQUE2QjtZQUMxQyxZQUFZLEVBQUUsb0JBQW9CO1lBQ2xDLGVBQWUsRUFBRSxVQUFVO1lBQzNCLFdBQVcsRUFBRSxTQUFTO1NBQ3ZCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFwQ0Qsd0VBb0NDO0FBRUQsTUFBYSxVQUFVO0lBQ2QsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQWlDO1FBQ2hFLE9BQU87WUFDTCxXQUFXLEVBQUUsU0FBUztZQUN0QixZQUFZ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QVksRUFBRSxlQUFlO1lBQzdCLGVBQWUsRUFBRSxVQUFVO1lBQzNCLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUEzQkQsZ0NBMkJDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcHJldHRpZXIvcHJldHRpZXIsbWF4LWxlbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRyaWNXaXRoRGltczxEPiB7XG4gIHJlYWRvbmx5IG5hbWVzcGFjZTogc3RyaW5nO1xuXG4gIHJlYWRvbmx5IG1ldHJpY05hbWU6IHN0cmluZztcblxuICByZWFkb25seSBzdGF0aXN0aWM6IHN0cmluZztcblxuICByZWFkb25seSBkaW1lbnNpb25zTWFwOiBEO1xufVxuXG5leHBvcnQgY2xhc3MgRUMyQ2FwYWNpdHlSZXNlcnZhdGlvbnNNZXRyaWNzIHtcbiAgcHVibGljIHN0YXRpYyBpbnN0YW5jZVV0aWxpemF0aW9uQXZlcmFnZShkaW1lbnNpb25zOiB7IENhcGFjaXR5UmVzZXJ2YXRpb25JZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBDYXBhY2l0eVJlc2VydmF0aW9uSWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9FQzJDYXBhY2l0eVJlc2VydmF0aW9uc1wiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiSW5zdGFuY2VVdGlsaXphdGlvblwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHVzZWRJbnN0YW5jZUNvdW50QXZlcmFnZShkaW1lbnNpb25zOiB7IENhcGFjaXR5UmVzZXJ2YXRpb25JZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBDYXBhY2l0eVJlc2VydmF0aW9uSWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9FQzJDYXBhY2l0eVJlc2VydmF0aW9uc1wiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiVXNlZEluc3RhbmNlQ291bnRcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJBdmVyYWdlXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhdmFpbGFibGVJbnN0YW5jZUNvdW50QXZlcmFnZShkaW1lbnNpb25zOiB7IENhcGFjaXR5UmVzZXJ2YXRpb25JZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBDYXBhY2l0eVJlc2VydmF0aW9uSWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9FQzJDYXBhY2l0eVJlc2VydmF0aW9uc1wiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiQXZhaWxhYmxlSW5zdGFuY2VDb3VudFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRvdGFsSW5zdGFuY2VDb3VudEF2ZXJhZ2UoZGltZW5zaW9uczogeyBDYXBhY2l0eVJlc2VydmF0aW9uSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgQ2FwYWNpdHlSZXNlcnZhdGlvbklkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvRUMyQ2FwYWNpdHlSZXNlcnZhdGlvbnNcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIlRvdGFsSW5zdGFuY2VDb3VudFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVCU01ldHJpY3Mge1xuICBwdWJsaWMgc3RhdGljIHZvbHVtZVJlYWRCeXRlc1N1bShkaW1lbnNpb25zOiB7IFZvbHVtZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IFZvbHVtZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvRUJTXCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJWb2x1bWVSZWFkQnl0ZXNcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJTdW1cIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHZvbHVtZVdyaXRlQnl0ZXNTdW0oZGltZW5zaW9uczogeyBWb2x1bWVJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBWb2x1bWVJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL0VCU1wiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiVm9sdW1lV3JpdGVCeXRlc1wiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdm9sdW1lUmVhZE9wc1N1bShkaW1lbnNpb25zOiB7IFZvbHVtZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IFZvbHVtZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvRUJTXCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJWb2x1bWVSZWFkT3BzXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiU3VtXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB2b2x1bWVUb3RhbFJlYWRUaW1lQXZlcmFnZShkaW1lbnNpb25zOiB7IFZvbHVtZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IFZvbHVtZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvRUJTXCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJWb2x1bWVUb3RhbFJlYWRUaW1lXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiQXZlcmFnZVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdm9sdW1lV3JpdGVPcHNTdW0oZGltZW5zaW9uczogeyBWb2x1bWVJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBWb2x1bWVJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL0VCU1wiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiVm9sdW1lV3JpdGVPcHNcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJTdW1cIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHZvbHVtZVRvdGFsV3JpdGVUaW1lQXZlcmFnZShkaW1lbnNpb25zOiB7IFZvbHVtZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IFZvbHVtZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvRUJTXCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJWb2x1bWVUb3RhbFdyaXRlVGltZVwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHZvbHVtZUlkbGVUaW1lQXZlcmFnZShkaW1lbnNpb25zOiB7IFZvbHVtZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IFZvbHVtZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvRUJTXCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJWb2x1bWVJZGxlVGltZVwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHZvbHVtZVF1ZXVlTGVuZ3RoQXZlcmFnZShkaW1lbnNpb25zOiB7IFZvbHVtZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IFZvbHVtZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvRUJTXCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJWb2x1bWVRdWV1ZUxlbmd0aFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGJ1cnN0QmFsYW5jZUF2ZXJhZ2UoZGltZW5zaW9uczogeyBWb2x1bWVJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBWb2x1bWVJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL0VCU1wiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiQnVyc3RCYWxhbmNlXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiQXZlcmFnZVwiXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRUMyTWV0cmljcyB7XG4gIHB1YmxpYyBzdGF0aWMgY3B1Q3JlZGl0VXNhZ2VBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvRUMyXCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJDUFVDcmVkaXRVc2FnZVwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNwdUNyZWRpdEJhbGFuY2VBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvRUMyXCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJDUFVDcmVkaXRCYWxhbmNlXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiQXZlcmFnZVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3B1U3VycGx1c0NyZWRpdEJhbGFuY2VBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvRUMyXCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJDUFVTdXJwbHVzQ3JlZGl0QmFsYW5jZVwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNwdVN1cnBsdXNDcmVkaXRzQ2hhcmdlZEF2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlSWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9FQzJcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIkNQVVN1cnBsdXNDcmVkaXRzQ2hhcmdlZFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNwdVV0aWxpemF0aW9uQXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIGNwdVV0aWxpemF0aW9uQXZlcmFnZShkaW1lbnNpb25zOiB7ICB9KTogTWV0cmljV2l0aERpbXM8eyAgfT47XG5cbiAgcHVibGljIHN0YXRpYyBjcHVVdGlsaXphdGlvbkF2ZXJhZ2UoZGltZW5zaW9uczogeyBBdXRvU2NhbGluZ0dyb3VwTmFtZTogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBBdXRvU2NhbGluZ0dyb3VwTmFtZTogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIGNwdVV0aWxpemF0aW9uQXZlcmFnZShkaW1lbnNpb25zOiB7IEltYWdlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW1hZ2VJZDogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIGNwdVV0aWxpemF0aW9uQXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlVHlwZTogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZVR5cGU6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBjcHVVdGlsaXphdGlvbkF2ZXJhZ2UoZGltZW5zaW9uczogYW55KTogTWV0cmljV2l0aERpbXM8YW55PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL0VDMlwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiQ1BVVXRpbGl6YXRpb25cIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJBdmVyYWdlXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBkaXNrUmVhZEJ5dGVzQXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIGRpc2tSZWFkQnl0ZXNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgIH0pOiBNZXRyaWNXaXRoRGltczx7ICB9PjtcblxuICBwdWJsaWMgc3RhdGljIGRpc2tSZWFkQnl0ZXNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgQXV0b1NjYWxpbmdHcm91cE5hbWU6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgQXV0b1NjYWxpbmdHcm91cE5hbWU6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBkaXNrUmVhZEJ5dGVzQXZlcmFnZShkaW1lbnNpb25zOiB7IEltYWdlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW1hZ2VJZDogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIGRpc2tSZWFkQnl0ZXNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VUeXBlOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlVHlwZTogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIGRpc2tSZWFkQnl0ZXNBdmVyYWdlKGRpbWVuc2lvbnM6IGFueSk6IE1ldHJpY1dpdGhEaW1zPGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9FQzJcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIkRpc2tSZWFkQnl0ZXNcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJBdmVyYWdlXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBkaXNrUmVhZE9wc0F2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlSWQ6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBkaXNrUmVhZE9wc0F2ZXJhZ2UoZGltZW5zaW9uczogeyAgfSk6IE1ldHJpY1dpdGhEaW1zPHsgIH0+O1xuXG4gIHB1YmxpYyBzdGF0aWMgZGlza1JlYWRPcHNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgQXV0b1NjYWxpbmdHcm91cE5hbWU6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgQXV0b1NjYWxpbmdHcm91cE5hbWU6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBkaXNrUmVhZE9wc0F2ZXJhZ2UoZGltZW5zaW9uczogeyBJbWFnZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEltYWdlSWQ6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBkaXNrUmVhZE9wc0F2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZVR5cGU6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VUeXBlOiBzdHJpbmc7IH0+O1xuXG4gIHB1YmxpYyBzdGF0aWMgZGlza1JlYWRPcHNBdmVyYWdlKGRpbWVuc2lvbnM6IGFueSk6IE1ldHJpY1dpdGhEaW1zPGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9FQzJcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIkRpc2tSZWFkT3BzXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiQXZlcmFnZVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZGlza1dyaXRlQnl0ZXNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+O1xuXG4gIHB1YmxpYyBzdGF0aWMgZGlza1dyaXRlQnl0ZXNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgIH0pOiBNZXRyaWNXaXRoRGltczx7ICB9PjtcblxuICBwdWJsaWMgc3RhdGljIGRpc2tXcml0ZUJ5dGVzQXZlcmFnZShkaW1lbnNpb25zOiB7IEF1dG9TY2FsaW5nR3JvdXBOYW1lOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEF1dG9TY2FsaW5nR3JvdXBOYW1lOiBzdHJpbmc7IH0+O1xuXG4gIHB1YmxpYyBzdGF0aWMgZGlza1dyaXRlQnl0ZXNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW1hZ2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbWFnZUlkOiBzdHJpbmc7IH0+O1xuXG4gIHB1YmxpYyBzdGF0aWMgZGlza1dyaXRlQnl0ZXNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VUeXBlOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlVHlwZTogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIGRpc2tXcml0ZUJ5dGVzQXZlcmFnZShkaW1lbnNpb25zOiBhbnkpOiBNZXRyaWNXaXRoRGltczxhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvRUMyXCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJEaXNrV3JpdGVCeXRlc1wiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGRpc2tXcml0ZU9wc0F2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlSWQ6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBkaXNrV3JpdGVPcHNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgIH0pOiBNZXRyaWNXaXRoRGltczx7ICB9PjtcblxuICBwdWJsaWMgc3RhdGljIGRpc2tXcml0ZU9wc0F2ZXJhZ2UoZGltZW5zaW9uczogeyBBdXRvU2NhbGluZ0dyb3VwTmFtZTogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBBdXRvU2NhbGluZ0dyb3VwTmFtZTogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIGRpc2tXcml0ZU9wc0F2ZXJhZ2UoZGltZW5zaW9uczogeyBJbWFnZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEltYWdlSWQ6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBkaXNrV3JpdGVPcHNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VUeXBlOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlVHlwZTogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIGRpc2tXcml0ZU9wc0F2ZXJhZ2UoZGltZW5zaW9uczogYW55KTogTWV0cmljV2l0aERpbXM8YW55PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL0VDMlwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiRGlza1dyaXRlT3BzXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiQXZlcmFnZVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgbWV0YWRhdGFOb1Rva2VuU3VtKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+O1xuXG4gIHB1YmxpYyBzdGF0aWMgbWV0YWRhdGFOb1Rva2VuU3VtKGRpbWVuc2lvbnM6IHsgIH0pOiBNZXRyaWNXaXRoRGltczx7ICB9PjtcblxuICBwdWJsaWMgc3RhdGljIG1ldGFkYXRhTm9Ub2tlblN1bShkaW1lbnNpb25zOiBhbnkpOiBNZXRyaWNXaXRoRGltczxhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvRUMyXCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJNZXRhZGF0YU5vVG9rZW5cIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJTdW1cIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG5ldHdvcmtJbkF2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlSWQ6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBuZXR3b3JrSW5BdmVyYWdlKGRpbWVuc2lvbnM6IHsgIH0pOiBNZXRyaWNXaXRoRGltczx7ICB9PjtcblxuICBwdWJsaWMgc3RhdGljIG5ldHdvcmtJbkF2ZXJhZ2UoZGltZW5zaW9uczogeyBBdXRvU2NhbGluZ0dyb3VwTmFtZTogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBBdXRvU2NhbGluZ0dyb3VwTmFtZTogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIG5ldHdvcmtJbkF2ZXJhZ2UoZGltZW5zaW9uczogeyBJbWFnZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEltYWdlSWQ6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBuZXR3b3JrSW5BdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VUeXBlOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlVHlwZTogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIG5ldHdvcmtJbkF2ZXJhZ2UoZGltZW5zaW9uczogYW55KTogTWV0cmljV2l0aERpbXM8YW55PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL0VDMlwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiTmV0d29ya0luXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiQXZlcmFnZVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgbmV0d29ya091dEF2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlSWQ6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBuZXR3b3JrT3V0QXZlcmFnZShkaW1lbnNpb25zOiB7ICB9KTogTWV0cmljV2l0aERpbXM8eyAgfT47XG5cbiAgcHVibGljIHN0YXRpYyBuZXR3b3JrT3V0QXZlcmFnZShkaW1lbnNpb25zOiB7IEF1dG9TY2FsaW5nR3JvdXBOYW1lOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEF1dG9TY2FsaW5nR3JvdXBOYW1lOiBzdHJpbmc7IH0+O1xuXG4gIHB1YmxpYyBzdGF0aWMgbmV0d29ya091dEF2ZXJhZ2UoZGltZW5zaW9uczogeyBJbWFnZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEltYWdlSWQ6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBuZXR3b3JrT3V0QXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlVHlwZTogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZVR5cGU6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBuZXR3b3JrT3V0QXZlcmFnZShkaW1lbnNpb25zOiBhbnkpOiBNZXRyaWNXaXRoRGltczxhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvRUMyXCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJOZXR3b3JrT3V0XCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiQXZlcmFnZVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgbmV0d29ya1BhY2tldHNJbkF2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlSWQ6IHN0cmluZzsgfT47XG5cbiAgcHVibGljIHN0YXRpYyBuZXR3b3JrUGFja2V0c0luQXZlcmFnZShkaW1lbnNpb25zOiB7ICB9KTogTWV0cmljV2l0aERpbXM8eyAgfT47XG5cbiAgcHVibGljIHN0YXRpYyBuZXR3b3JrUGFja2V0c0luQXZlcmFnZShkaW1lbnNpb25zOiB7IEF1dG9TY2FsaW5nR3JvdXBOYW1lOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEF1dG9TY2FsaW5nR3JvdXBOYW1lOiBzdHJpbmc7IH0+O1xuXG4gIHB1YmxpYyBzdGF0aWMgbmV0d29ya1BhY2tldHNJbkF2ZXJhZ2UoZGltZW5zaW9uczogYW55KTogTWV0cmljV2l0aERpbXM8YW55PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL0VDMlwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiTmV0d29ya1BhY2tldHNJblwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG5ldHdvcmtQYWNrZXRzT3V0QXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIG5ldHdvcmtQYWNrZXRzT3V0QXZlcmFnZShkaW1lbnNpb25zOiB7ICB9KTogTWV0cmljV2l0aERpbXM8eyAgfT47XG5cbiAgcHVibGljIHN0YXRpYyBuZXR3b3JrUGFja2V0c091dEF2ZXJhZ2UoZGltZW5zaW9uczogeyBBdXRvU2NhbGluZ0dyb3VwTmFtZTogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBBdXRvU2NhbGluZ0dyb3VwTmFtZTogc3RyaW5nOyB9PjtcblxuICBwdWJsaWMgc3RhdGljIG5ldHdvcmtQYWNrZXRzT3V0QXZlcmFnZShkaW1lbnNpb25zOiBhbnkpOiBNZXRyaWNXaXRoRGltczxhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvRUMyXCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJOZXR3b3JrUGFja2V0c091dFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHN0YXR1c0NoZWNrRmFpbGVkU3VtKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvRUMyXCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJTdGF0dXNDaGVja0ZhaWxlZFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc3RhdHVzQ2hlY2tGYWlsZWRJbnN0YW5jZVN1bShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL0VDMlwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiU3RhdHVzQ2hlY2tGYWlsZWRfSW5zdGFuY2VcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJTdW1cIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHN0YXR1c0NoZWNrRmFpbGVkU3lzdGVtU3VtKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvRUMyXCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJTdGF0dXNDaGVja0ZhaWxlZF9TeXN0ZW1cIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJTdW1cIlxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENXQWdlbnRNZXRyaWNzIHtcbiAgcHVibGljIHN0YXRpYyBjcHVVc2FnZUlkbGVBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJDV0FnZW50XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJjcHVfdXNhZ2VfaWRsZVwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNwdVVzYWdlSW93YWl0QXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQ1dBZ2VudFwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiY3B1X3VzYWdlX2lvd2FpdFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNwdVVzYWdlU3RlYWxBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJDV0FnZW50XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJjcHVfdXNhZ2Vfc3RlYWxcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJBdmVyYWdlXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcHVVc2FnZVN5c3RlbUF2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlSWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkNXQWdlbnRcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcImNwdV91c2FnZV9zeXN0ZW1cIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJBdmVyYWdlXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcHVVc2FnZVVzZXJBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJDV0FnZW50XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJjcHVfdXNhZ2VfdXNlclwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGRpc2tJbm9kZXNGcmVlU3VtKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJDV0FnZW50XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJkaXNrX2lub2Rlc19mcmVlXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiU3VtXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBkaXNrSW5vZGVzVG90YWxTdW0oZGltZW5zaW9uczogeyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlSWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkNXQWdlbnRcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcImRpc2tfaW5vZGVzX3RvdGFsXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiU3VtXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBkaXNrSW5vZGVzVXNlZFN1bShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQ1dBZ2VudFwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiZGlza19pbm9kZXNfdXNlZFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZGlza1VzZWRQZXJjZW50QXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQ1dBZ2VudFwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiZGlza191c2VkX3BlcmNlbnRcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJBdmVyYWdlXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBkaXNraW9Jb1RpbWVBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJDV0FnZW50XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJkaXNraW9faW9fdGltZVwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGRpc2tpb1JlYWRCeXRlc0F2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlSWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkNXQWdlbnRcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcImRpc2tpb19yZWFkX2J5dGVzXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiQXZlcmFnZVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZGlza2lvUmVhZHNBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJDV0FnZW50XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJkaXNraW9fcmVhZHNcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJBdmVyYWdlXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBkaXNraW9Xcml0ZUJ5dGVzQXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQ1dBZ2VudFwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiZGlza2lvX3dyaXRlX2J5dGVzXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiQXZlcmFnZVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZGlza2lvV3JpdGVzQXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQ1dBZ2VudFwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiZGlza2lvX3dyaXRlc1wiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG1lbUNhY2hlZEF2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlSWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkNXQWdlbnRcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIm1lbV9jYWNoZWRcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJBdmVyYWdlXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBtZW1Ub3RhbEF2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlSWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkNXQWdlbnRcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIm1lbV90b3RhbFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG1lbVVzZWRBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJDV0FnZW50XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJtZW1fdXNlZFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG1lbVVzZWRQZXJjZW50QXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQ1dBZ2VudFwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwibWVtX3VzZWRfcGVyY2VudFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG5ldHN0YXRUY3BFc3RhYmxpc2hlZFN1bShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQ1dBZ2VudFwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwibmV0c3RhdF90Y3BfZXN0YWJsaXNoZWRcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJTdW1cIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG5ldHN0YXRUY3BUaW1lV2FpdFN1bShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQ1dBZ2VudFwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwibmV0c3RhdF90Y3BfdGltZV93YWl0XCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiU3VtXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBzd2FwVXNlZFBlcmNlbnRBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJDV0FnZW50XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJzd2FwX3VzZWRfcGVyY2VudFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRjUHY0Q29ubmVjdGlvbnNFc3RhYmxpc2hlZFN1bShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQ1dBZ2VudFwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiVENQdjQgQ29ubmVjdGlvbnMgRXN0YWJsaXNoZWRcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJTdW1cIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRjUHY2Q29ubmVjdGlvbnNFc3RhYmxpc2hlZFN1bShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQ1dBZ2VudFwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiVENQdjYgQ29ubmVjdGlvbnMgRXN0YWJsaXNoZWRcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJTdW1cIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIG1lbW9yeUNvbW1pdHRlZEJ5dGVzSW5Vc2VBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJDV0FnZW50XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJNZW1vcnkgJSBDb21taXR0ZWQgQnl0ZXMgSW4gVXNlXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiQXZlcmFnZVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcHJvY2Vzc29ySWRsZVRpbWVBdmVyYWdlKGRpbWVuc2lvbnM6IHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJDV0FnZW50XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJQcm9jZXNzb3IgJSBJZGxlIFRpbWVcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJBdmVyYWdlXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBwcm9jZXNzb3JJbnRlcnJ1cHRUaW1lQXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQ1dBZ2VudFwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiUHJvY2Vzc29yICUgSW50ZXJydXB0IFRpbWVcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJBdmVyYWdlXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBwcm9jZXNzb3JVc2VyVGltZUF2ZXJhZ2UoZGltZW5zaW9uczogeyBJbnN0YW5jZUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IEluc3RhbmNlSWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkNXQWdlbnRcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIlByb2Nlc3NvciAlIFVzZXIgVGltZVwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGxvZ2ljYWxEaXNrRnJlZVNwYWNlQXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQ1dBZ2VudFwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiTG9naWNhbERpc2sgJSBGcmVlIFNwYWNlXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiQXZlcmFnZVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcGFnaW5nRmlsZVVzYWdlQXZlcmFnZShkaW1lbnNpb25zOiB7IEluc3RhbmNlSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgSW5zdGFuY2VJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQ1dBZ2VudFwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiUGFnaW5nIEZpbGUgJSBVc2FnZVwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIkF2ZXJhZ2VcIlxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5BVEdhdGV3YXlNZXRyaWNzIHtcbiAgcHVibGljIHN0YXRpYyBhY3RpdmVDb25uZWN0aW9uQ291bnRNYXhpbXVtKGRpbWVuc2lvbnM6IHsgTmF0R2F0ZXdheUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IE5hdEdhdGV3YXlJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL05BVEdhdGV3YXlcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIkFjdGl2ZUNvbm5lY3Rpb25Db3VudFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIk1heGltdW1cIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHBhY2tldHNEcm9wQ291bnRTdW0oZGltZW5zaW9uczogeyBOYXRHYXRld2F5SWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgTmF0R2F0ZXdheUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvTkFUR2F0ZXdheVwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiUGFja2V0c0Ryb3BDb3VudFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYnl0ZXNJbkZyb21EZXN0aW5hdGlvblN1bShkaW1lbnNpb25zOiB7IE5hdEdhdGV3YXlJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBOYXRHYXRld2F5SWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9OQVRHYXRld2F5XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJCeXRlc0luRnJvbURlc3RpbmF0aW9uXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiU3VtXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBieXRlc0luRnJvbVNvdXJjZVN1bShkaW1lbnNpb25zOiB7IE5hdEdhdGV3YXlJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBOYXRHYXRld2F5SWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9OQVRHYXRld2F5XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJCeXRlc0luRnJvbVNvdXJjZVwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYnl0ZXNPdXRUb0Rlc3RpbmF0aW9uU3VtKGRpbWVuc2lvbnM6IHsgTmF0R2F0ZXdheUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IE5hdEdhdGV3YXlJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL05BVEdhdGV3YXlcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIkJ5dGVzT3V0VG9EZXN0aW5hdGlvblwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYnl0ZXNPdXRUb1NvdXJjZVN1bShkaW1lbnNpb25zOiB7IE5hdEdhdGV3YXlJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBOYXRHYXRld2F5SWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9OQVRHYXRld2F5XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJCeXRlc091dFRvU291cmNlXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiU3VtXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjb25uZWN0aW9uQXR0ZW1wdENvdW50U3VtKGRpbWVuc2lvbnM6IHsgTmF0R2F0ZXdheUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IE5hdEdhdGV3YXlJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL05BVEdhdGV3YXlcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIkNvbm5lY3Rpb25BdHRlbXB0Q291bnRcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJTdW1cIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNvbm5lY3Rpb25Fc3RhYmxpc2hlZENvdW50U3VtKGRpbWVuc2lvbnM6IHsgTmF0R2F0ZXdheUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IE5hdEdhdGV3YXlJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL05BVEdhdGV3YXlcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIkNvbm5lY3Rpb25Fc3RhYmxpc2hlZENvdW50XCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiU3VtXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBlcnJvclBvcnRBbGxvY2F0aW9uU3VtKGRpbWVuc2lvbnM6IHsgTmF0R2F0ZXdheUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IE5hdEdhdGV3YXlJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL05BVEdhdGV3YXlcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIkVycm9yUG9ydEFsbG9jYXRpb25cIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJTdW1cIlxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlkbGVUaW1lb3V0Q291bnRTdW0oZGltZW5zaW9uczogeyBOYXRHYXRld2F5SWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgTmF0R2F0ZXdheUlkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvTkFUR2F0ZXdheVwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiSWRsZVRpbWVvdXRDb3VudFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcGFja2V0c0luRnJvbURlc3RpbmF0aW9uU3VtKGRpbWVuc2lvbnM6IHsgTmF0R2F0ZXdheUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IE5hdEdhdGV3YXlJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL05BVEdhdGV3YXlcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIlBhY2tldHNJbkZyb21EZXN0aW5hdGlvblwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcGFja2V0c0luRnJvbVNvdXJjZVN1bShkaW1lbnNpb25zOiB7IE5hdEdhdGV3YXlJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBOYXRHYXRld2F5SWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9OQVRHYXRld2F5XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJQYWNrZXRzSW5Gcm9tU291cmNlXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiU3VtXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBwYWNrZXRzT3V0VG9EZXN0aW5hdGlvblN1bShkaW1lbnNpb25zOiB7IE5hdEdhdGV3YXlJZDogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBOYXRHYXRld2F5SWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9OQVRHYXRld2F5XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJQYWNrZXRzT3V0VG9EZXN0aW5hdGlvblwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcGFja2V0c091dFRvU291cmNlU3VtKGRpbWVuc2lvbnM6IHsgTmF0R2F0ZXdheUlkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IE5hdEdhdGV3YXlJZDogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL05BVEdhdGV3YXlcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIlBhY2tldHNPdXRUb1NvdXJjZVwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNpdEdhdGV3YXlNZXRyaWNzIHtcbiAgcHVibGljIHN0YXRpYyBieXRlc0luU3VtKGRpbWVuc2lvbnM6IHsgVHJhbnNpdEdhdGV3YXk6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgVHJhbnNpdEdhdGV3YXk6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9UcmFuc2l0R2F0ZXdheVwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiQnl0ZXNJblwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYnl0ZXNPdXRTdW0oZGltZW5zaW9uczogeyBUcmFuc2l0R2F0ZXdheTogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBUcmFuc2l0R2F0ZXdheTogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL1RyYW5zaXRHYXRld2F5XCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJCeXRlc091dFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcGFja2V0RHJvcENvdW50QmxhY2tob2xlU3VtKGRpbWVuc2lvbnM6IHsgVHJhbnNpdEdhdGV3YXk6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgVHJhbnNpdEdhdGV3YXk6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9UcmFuc2l0R2F0ZXdheVwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiUGFja2V0RHJvcENvdW50QmxhY2tob2xlXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiU3VtXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBwYWNrZXREcm9wQ291bnROb1JvdXRlU3VtKGRpbWVuc2lvbnM6IHsgVHJhbnNpdEdhdGV3YXk6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgVHJhbnNpdEdhdGV3YXk6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9UcmFuc2l0R2F0ZXdheVwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiUGFja2V0RHJvcENvdW50Tm9Sb3V0ZVwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcGFja2V0c0luU3VtKGRpbWVuc2lvbnM6IHsgVHJhbnNpdEdhdGV3YXk6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgVHJhbnNpdEdhdGV3YXk6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9UcmFuc2l0R2F0ZXdheVwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiUGFja2V0c0luXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiU3VtXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBwYWNrZXRzT3V0U3VtKGRpbWVuc2lvbnM6IHsgVHJhbnNpdEdhdGV3YXk6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgVHJhbnNpdEdhdGV3YXk6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9UcmFuc2l0R2F0ZXdheVwiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiUGFja2V0c091dFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVlBOTWV0cmljcyB7XG4gIHB1YmxpYyBzdGF0aWMgdHVubmVsRGF0YUluU3VtKGRpbWVuc2lvbnM6IHsgVnBuSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgVnBuSWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9WUE5cIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIlR1bm5lbERhdGFJblwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdHVubmVsU3RhdGVBdmVyYWdlKGRpbWVuc2lvbnM6IHsgVnBuSWQ6IHN0cmluZzsgfSk6IE1ldHJpY1dpdGhEaW1zPHsgVnBuSWQ6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9WUE5cIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIlR1bm5lbFN0YXRlXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiQXZlcmFnZVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdHVubmVsRGF0YU91dFN1bShkaW1lbnNpb25zOiB7IFZwbklkOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IFZwbklkOiBzdHJpbmc7IH0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgXCJuYW1lc3BhY2VcIjogXCJBV1MvVlBOXCIsXG4gICAgICBcIm1ldHJpY05hbWVcIjogXCJUdW5uZWxEYXRhT3V0XCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiU3VtXCJcbiAgICB9O1xuICB9XG59Il19