terraconstructs 0.2.4 → 0.2.6

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 (412) hide show
  1. package/.jsii +3099 -2917
  2. package/CLAUDE.md +6 -6
  3. package/README.md +1 -1
  4. package/lib/asset-staging.js +3 -3
  5. package/lib/aws/arn.js +5 -5
  6. package/lib/aws/aws-asset-manager.js +9 -9
  7. package/lib/aws/aws-construct.js +1 -1
  8. package/lib/aws/aws-stack.d.ts +19 -4
  9. package/lib/aws/aws-stack.js +43 -18
  10. package/lib/aws/aws-tags.d.ts +1 -1
  11. package/lib/aws/aws-tags.js +5 -5
  12. package/lib/aws/cloudwatch/actions/appscaling.js +1 -1
  13. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  14. package/lib/aws/cloudwatch/actions/lambda.js +2 -2
  15. package/lib/aws/cloudwatch/actions/sns.js +1 -1
  16. package/lib/aws/cloudwatch/actions/ssm.js +2 -2
  17. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  18. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  19. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  20. package/lib/aws/cloudwatch/alarm.d.ts +1 -1
  21. package/lib/aws/cloudwatch/alarm.js +10 -10
  22. package/lib/aws/cloudwatch/composite-alarm.d.ts +1 -1
  23. package/lib/aws/cloudwatch/composite-alarm.js +7 -7
  24. package/lib/aws/cloudwatch/dashboard.d.ts +1 -1
  25. package/lib/aws/cloudwatch/dashboard.js +7 -7
  26. package/lib/aws/cloudwatch/data-protection-policy.d.ts +1 -1
  27. package/lib/aws/cloudwatch/data-protection-policy.js +5 -5
  28. package/lib/aws/cloudwatch/graph.js +8 -8
  29. package/lib/aws/cloudwatch/layout.js +3 -3
  30. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  31. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  32. package/lib/aws/cloudwatch/log-group.d.ts +1 -1
  33. package/lib/aws/cloudwatch/log-group.js +7 -7
  34. package/lib/aws/cloudwatch/log-query.js +1 -1
  35. package/lib/aws/cloudwatch/log-stream.d.ts +1 -1
  36. package/lib/aws/cloudwatch/log-stream.js +3 -3
  37. package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
  38. package/lib/aws/cloudwatch/metric-filter.js +3 -3
  39. package/lib/aws/cloudwatch/metric.js +6 -6
  40. package/lib/aws/cloudwatch/pattern.js +3 -3
  41. package/lib/aws/cloudwatch/policy.d.ts +1 -1
  42. package/lib/aws/cloudwatch/policy.js +3 -3
  43. package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.d.ts +1 -1
  44. package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.js +1 -1
  45. package/lib/aws/cloudwatch/private/env-tokens.js +6 -6
  46. package/lib/aws/cloudwatch/query-definition.d.ts +1 -1
  47. package/lib/aws/cloudwatch/query-definition.js +4 -4
  48. package/lib/aws/cloudwatch/stats.js +1 -1
  49. package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
  50. package/lib/aws/cloudwatch/subscription-filter.js +6 -6
  51. package/lib/aws/cloudwatch/text.js +1 -1
  52. package/lib/aws/cloudwatch/variable.js +3 -3
  53. package/lib/aws/cloudwatch/widget.js +1 -1
  54. package/lib/aws/compute/access-log.d.ts +1 -1
  55. package/lib/aws/compute/access-log.js +5 -5
  56. package/lib/aws/compute/activity.d.ts +1 -1
  57. package/lib/aws/compute/activity.js +5 -5
  58. package/lib/aws/compute/alb/application-listener-action.d.ts +1 -1
  59. package/lib/aws/compute/alb/application-listener-action.js +5 -5
  60. package/lib/aws/compute/alb/application-listener-certificate.js +3 -3
  61. package/lib/aws/compute/alb/application-listener-rule.js +9 -9
  62. package/lib/aws/compute/alb/application-listener.js +5 -5
  63. package/lib/aws/compute/alb/application-load-balancer.js +8 -8
  64. package/lib/aws/compute/alb/application-target-group.js +7 -7
  65. package/lib/aws/compute/alb/conditions.js +3 -3
  66. package/lib/aws/compute/alb/trust-store-revocation.js +3 -3
  67. package/lib/aws/compute/alb/trust-store.js +7 -7
  68. package/lib/aws/compute/api-definition.js +9 -9
  69. package/lib/aws/compute/api-key.js +6 -6
  70. package/lib/aws/compute/architecture.js +1 -1
  71. package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +1 -1
  72. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +6 -6
  73. package/lib/aws/compute/authorizer.js +1 -1
  74. package/lib/aws/compute/authorizers/identity-source.js +1 -1
  75. package/lib/aws/compute/authorizers/lambda.d.ts +1 -1
  76. package/lib/aws/compute/authorizers/lambda.js +6 -6
  77. package/lib/aws/compute/base-path-mapping.js +5 -5
  78. package/lib/aws/compute/base-scalable-attribute.js +1 -1
  79. package/lib/aws/compute/bastion-host.js +4 -4
  80. package/lib/aws/compute/chain.js +1 -1
  81. package/lib/aws/compute/client-vpn-authorization-rule.js +3 -3
  82. package/lib/aws/compute/client-vpn-endpoint.d.ts +1 -1
  83. package/lib/aws/compute/client-vpn-endpoint.js +9 -9
  84. package/lib/aws/compute/client-vpn-route.d.ts +1 -1
  85. package/lib/aws/compute/client-vpn-route.js +4 -4
  86. package/lib/aws/compute/code.d.ts +3 -3
  87. package/lib/aws/compute/code.js +15 -15
  88. package/lib/aws/compute/condition.js +1 -1
  89. package/lib/aws/compute/connections.js +1 -1
  90. package/lib/aws/compute/cors.js +1 -1
  91. package/lib/aws/compute/deployment.js +5 -5
  92. package/lib/aws/compute/domain-name.js +5 -5
  93. package/lib/aws/compute/event-invoke-config.d.ts +1 -1
  94. package/lib/aws/compute/event-invoke-config.js +3 -3
  95. package/lib/aws/compute/event-source-filter.js +2 -2
  96. package/lib/aws/compute/event-source-mapping.js +7 -7
  97. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  98. package/lib/aws/compute/event-sources/s3.js +1 -1
  99. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  100. package/lib/aws/compute/event-sources/sqs.js +5 -5
  101. package/lib/aws/compute/fields.d.ts +1 -1
  102. package/lib/aws/compute/fields.js +12 -12
  103. package/lib/aws/compute/function-alias.d.ts +1 -1
  104. package/lib/aws/compute/function-alias.js +3 -3
  105. package/lib/aws/compute/function-base.d.ts +1 -1
  106. package/lib/aws/compute/function-base.js +10 -9
  107. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  108. package/lib/aws/compute/function-destinations/function.js +1 -1
  109. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  110. package/lib/aws/compute/function-nodejs/bundling.js +6 -6
  111. package/lib/aws/compute/function-nodejs/function.js +4 -4
  112. package/lib/aws/compute/function-url.d.ts +1 -1
  113. package/lib/aws/compute/function-url.js +3 -3
  114. package/lib/aws/compute/function-vpc-config.generated.d.ts +5 -5
  115. package/lib/aws/compute/function-vpc-config.generated.js +1 -1
  116. package/lib/aws/compute/function.d.ts +2 -2
  117. package/lib/aws/compute/function.js +9 -9
  118. package/lib/aws/compute/gateway-response.d.ts +1 -1
  119. package/lib/aws/compute/gateway-response.js +4 -4
  120. package/lib/aws/compute/handler.js +1 -1
  121. package/lib/aws/compute/instance-types.js +1 -1
  122. package/lib/aws/compute/instance.d.ts +1 -1
  123. package/lib/aws/compute/instance.js +9 -9
  124. package/lib/aws/compute/integration.js +4 -4
  125. package/lib/aws/compute/integrations/aws.js +3 -3
  126. package/lib/aws/compute/integrations/http.js +1 -1
  127. package/lib/aws/compute/integrations/lambda.js +5 -5
  128. package/lib/aws/compute/integrations/mock.js +1 -1
  129. package/lib/aws/compute/integrations/stepfunctions.js +4 -4
  130. package/lib/aws/compute/ip-addresses.d.ts +1 -1
  131. package/lib/aws/compute/ip-addresses.js +10 -10
  132. package/lib/aws/compute/ipam.d.ts +1 -1
  133. package/lib/aws/compute/ipam.js +5 -5
  134. package/lib/aws/compute/key-pair.d.ts +1 -1
  135. package/lib/aws/compute/key-pair.js +6 -6
  136. package/lib/aws/compute/lambda-api.js +1 -1
  137. package/lib/aws/compute/launch-template.d.ts +1 -1
  138. package/lib/aws/compute/launch-template.js +12 -12
  139. package/lib/aws/compute/lb-shared/base-listener.js +9 -9
  140. package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +2 -2
  141. package/lib/aws/compute/lb-shared/base-load-balancer.js +12 -12
  142. package/lib/aws/compute/lb-shared/base-target-group.d.ts +1 -1
  143. package/lib/aws/compute/lb-shared/base-target-group.js +15 -15
  144. package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +34 -34
  145. package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +1 -1
  146. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +11 -6
  147. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +1 -1
  148. package/lib/aws/compute/lb-shared/listener-action.d.ts +1 -1
  149. package/lib/aws/compute/lb-shared/listener-action.js +1 -1
  150. package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
  151. package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
  152. package/lib/aws/compute/lb-shared/util.js +5 -5
  153. package/lib/aws/compute/lb-targets/alb-target.js +3 -3
  154. package/lib/aws/compute/lb-targets/instance-target.js +2 -2
  155. package/lib/aws/compute/lb-targets/ip-target.js +1 -1
  156. package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
  157. package/lib/aws/compute/load-balancer.d.ts +1 -1
  158. package/lib/aws/compute/load-balancer.js +8 -8
  159. package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
  160. package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
  161. package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
  162. package/lib/aws/compute/machine-image/common.js +1 -1
  163. package/lib/aws/compute/machine-image/machine-image.js +10 -10
  164. package/lib/aws/compute/method.js +6 -6
  165. package/lib/aws/compute/model.js +5 -5
  166. package/lib/aws/compute/nat.js +10 -10
  167. package/lib/aws/compute/network-acl-types.js +2 -2
  168. package/lib/aws/compute/network-acl.d.ts +1 -1
  169. package/lib/aws/compute/network-acl.js +5 -5
  170. package/lib/aws/compute/nlb/network-listener-action.d.ts +1 -1
  171. package/lib/aws/compute/nlb/network-listener-action.js +2 -2
  172. package/lib/aws/compute/nlb/network-listener-certificate.js +2 -2
  173. package/lib/aws/compute/nlb/network-listener.js +5 -5
  174. package/lib/aws/compute/nlb/network-load-balancer.js +6 -6
  175. package/lib/aws/compute/nlb/network-target-group.js +4 -4
  176. package/lib/aws/compute/peer.js +7 -7
  177. package/lib/aws/compute/placement-group.d.ts +1 -1
  178. package/lib/aws/compute/placement-group.js +3 -3
  179. package/lib/aws/compute/port.js +5 -5
  180. package/lib/aws/compute/prefix-list.d.ts +1 -1
  181. package/lib/aws/compute/prefix-list.js +5 -5
  182. package/lib/aws/compute/private/context-stub.js +7 -7
  183. package/lib/aws/compute/private/ebs-util.d.ts +1 -1
  184. package/lib/aws/compute/private/ebs-util.js +3 -3
  185. package/lib/aws/compute/private/json-path.d.ts +1 -1
  186. package/lib/aws/compute/private/json-path.js +8 -8
  187. package/lib/aws/compute/requestvalidator.js +3 -3
  188. package/lib/aws/compute/resource.js +5 -5
  189. package/lib/aws/compute/restapi.d.ts +1 -1
  190. package/lib/aws/compute/restapi.js +11 -11
  191. package/lib/aws/compute/route.d.ts +1 -1
  192. package/lib/aws/compute/route.js +12 -12
  193. package/lib/aws/compute/runtime.js +3 -3
  194. package/lib/aws/compute/scalable-target.d.ts +1 -1
  195. package/lib/aws/compute/scalable-target.js +3 -3
  196. package/lib/aws/compute/schedule.js +4 -4
  197. package/lib/aws/compute/security-group.js +12 -12
  198. package/lib/aws/compute/stage.d.ts +1 -1
  199. package/lib/aws/compute/stage.js +6 -6
  200. package/lib/aws/compute/state-graph.js +1 -1
  201. package/lib/aws/compute/state-machine-fragment.js +1 -1
  202. package/lib/aws/compute/state-machine.d.ts +2 -2
  203. package/lib/aws/compute/state-machine.js +8 -8
  204. package/lib/aws/compute/states/choice.js +1 -1
  205. package/lib/aws/compute/states/custom-state.js +5 -5
  206. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  207. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  208. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  209. package/lib/aws/compute/states/distributed-map.js +4 -4
  210. package/lib/aws/compute/states/fail.js +4 -4
  211. package/lib/aws/compute/states/map-base.js +4 -4
  212. package/lib/aws/compute/states/map.js +1 -1
  213. package/lib/aws/compute/states/parallel.js +1 -1
  214. package/lib/aws/compute/states/pass.js +2 -2
  215. package/lib/aws/compute/states/state.js +4 -4
  216. package/lib/aws/compute/states/succeed.js +1 -1
  217. package/lib/aws/compute/states/task-base.js +2 -2
  218. package/lib/aws/compute/states/task.js +1 -1
  219. package/lib/aws/compute/states/wait.js +2 -2
  220. package/lib/aws/compute/step-scaling-action.js +5 -5
  221. package/lib/aws/compute/step-scaling-policy.js +7 -7
  222. package/lib/aws/compute/stepfunctions-api.js +2 -2
  223. package/lib/aws/compute/subnet-v2.d.ts +1 -1
  224. package/lib/aws/compute/subnet-v2.js +5 -5
  225. package/lib/aws/compute/subnet.js +4 -4
  226. package/lib/aws/compute/target-tracking-scaling-policy.js +3 -3
  227. package/lib/aws/compute/task-credentials.js +1 -1
  228. package/lib/aws/compute/task-input.js +1 -1
  229. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +5 -5
  230. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  231. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  232. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  233. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  234. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  235. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  236. package/lib/aws/compute/types.js +1 -1
  237. package/lib/aws/compute/usage-plan.js +5 -5
  238. package/lib/aws/compute/user-data.d.ts +2 -2
  239. package/lib/aws/compute/user-data.js +10 -10
  240. package/lib/aws/compute/volume.d.ts +1 -1
  241. package/lib/aws/compute/volume.js +7 -7
  242. package/lib/aws/compute/vpc-endpoint-service.js +3 -3
  243. package/lib/aws/compute/vpc-endpoint.d.ts +1 -1
  244. package/lib/aws/compute/vpc-endpoint.js +13 -13
  245. package/lib/aws/compute/vpc-flow-logs.d.ts +1 -1
  246. package/lib/aws/compute/vpc-flow-logs.js +8 -8
  247. package/lib/aws/compute/vpc-link.js +5 -5
  248. package/lib/aws/compute/vpc-v2-base.js +6 -6
  249. package/lib/aws/compute/vpc-v2.d.ts +2 -2
  250. package/lib/aws/compute/vpc-v2.js +4 -4
  251. package/lib/aws/compute/vpc.d.ts +1 -1
  252. package/lib/aws/compute/vpc.js +24 -22
  253. package/lib/aws/compute/vpn.js +8 -8
  254. package/lib/aws/context-provider.js +4 -4
  255. package/lib/aws/edge/certificate.d.ts +1 -1
  256. package/lib/aws/edge/certificate.js +6 -6
  257. package/lib/aws/edge/distribution.d.ts +1 -1
  258. package/lib/aws/edge/distribution.js +9 -9
  259. package/lib/aws/edge/dns-alias-record-targets.d.ts +1 -1
  260. package/lib/aws/edge/dns-alias-record-targets.js +7 -7
  261. package/lib/aws/edge/dns-record.d.ts +1 -1
  262. package/lib/aws/edge/dns-record.js +19 -19
  263. package/lib/aws/edge/dns-zone.d.ts +2 -2
  264. package/lib/aws/edge/dns-zone.js +5 -5
  265. package/lib/aws/edge/function.d.ts +1 -1
  266. package/lib/aws/edge/function.js +4 -4
  267. package/lib/aws/edge/key-value-store.d.ts +1 -1
  268. package/lib/aws/edge/key-value-store.js +6 -6
  269. package/lib/aws/edge/origin.d.ts +1 -1
  270. package/lib/aws/edge/origin.js +6 -6
  271. package/lib/aws/edge/response-headers-policy.d.ts +1 -1
  272. package/lib/aws/edge/response-headers-policy.js +6 -6
  273. package/lib/aws/encryption/alias.d.ts +1 -1
  274. package/lib/aws/encryption/alias.js +8 -8
  275. package/lib/aws/encryption/key.d.ts +1 -1
  276. package/lib/aws/encryption/key.js +6 -6
  277. package/lib/aws/encryption/via-service-principal.js +1 -1
  278. package/lib/aws/iam/grant.js +3 -3
  279. package/lib/aws/iam/group.js +5 -5
  280. package/lib/aws/iam/instance-profile.d.ts +1 -1
  281. package/lib/aws/iam/instance-profile.js +3 -3
  282. package/lib/aws/iam/managed-policy.d.ts +1 -1
  283. package/lib/aws/iam/managed-policy.js +3 -3
  284. package/lib/aws/iam/oidc-provider.d.ts +1 -1
  285. package/lib/aws/iam/oidc-provider.js +3 -3
  286. package/lib/aws/iam/policy-document-config.generated.d.ts +9 -9
  287. package/lib/aws/iam/policy-document-config.generated.js +1 -1
  288. package/lib/aws/iam/policy-document.d.ts +1 -1
  289. package/lib/aws/iam/policy-document.js +5 -5
  290. package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
  291. package/lib/aws/iam/policy-statement-props.generated.js +1 -1
  292. package/lib/aws/iam/policy-statement.d.ts +1 -1
  293. package/lib/aws/iam/policy-statement.js +8 -8
  294. package/lib/aws/iam/policy.js +3 -3
  295. package/lib/aws/iam/principals.js +25 -25
  296. package/lib/aws/iam/private/imported-role.js +3 -3
  297. package/lib/aws/iam/private/postprocess-policy-document.d.ts +1 -1
  298. package/lib/aws/iam/private/postprocess-policy-document.js +1 -1
  299. package/lib/aws/iam/private/util.d.ts +1 -1
  300. package/lib/aws/iam/private/util.js +5 -5
  301. package/lib/aws/iam/role.d.ts +1 -1
  302. package/lib/aws/iam/role.js +6 -6
  303. package/lib/aws/iam/saml-provider.d.ts +1 -1
  304. package/lib/aws/iam/saml-provider.js +6 -6
  305. package/lib/aws/iam/unknown-principal.js +4 -4
  306. package/lib/aws/iam/user.js +3 -3
  307. package/lib/aws/network/network.d.ts +1 -1
  308. package/lib/aws/network/network.js +1 -1
  309. package/lib/aws/network/simple-ipv4-vpc.js +12 -12
  310. package/lib/aws/network/subnet-group.d.ts +1 -1
  311. package/lib/aws/network/subnet-group.js +5 -5
  312. package/lib/aws/network/subnet.d.ts +1 -1
  313. package/lib/aws/network/subnet.js +6 -6
  314. package/lib/aws/notify/archive.d.ts +1 -1
  315. package/lib/aws/notify/archive.js +3 -3
  316. package/lib/aws/notify/connection.d.ts +1 -1
  317. package/lib/aws/notify/connection.js +5 -5
  318. package/lib/aws/notify/event-bus.d.ts +1 -1
  319. package/lib/aws/notify/event-bus.js +10 -10
  320. package/lib/aws/notify/event-pattern.d.ts +1 -1
  321. package/lib/aws/notify/event-pattern.js +5 -5
  322. package/lib/aws/notify/input.d.ts +1 -1
  323. package/lib/aws/notify/input.js +12 -12
  324. package/lib/aws/notify/kinesis-stream.d.ts +1 -1
  325. package/lib/aws/notify/kinesis-stream.js +7 -7
  326. package/lib/aws/notify/notification-rule.js +8 -8
  327. package/lib/aws/notify/policy.js +3 -3
  328. package/lib/aws/notify/queue-base.js +1 -1
  329. package/lib/aws/notify/queue-policy.js +3 -3
  330. package/lib/aws/notify/queue.d.ts +1 -1
  331. package/lib/aws/notify/queue.js +8 -8
  332. package/lib/aws/notify/resource-policy.js +3 -3
  333. package/lib/aws/notify/rule.d.ts +1 -1
  334. package/lib/aws/notify/rule.js +6 -6
  335. package/lib/aws/notify/schedule.js +4 -4
  336. package/lib/aws/notify/sns-grants.generated.js +1 -1
  337. package/lib/aws/notify/sqs-grants.generated.js +1 -1
  338. package/lib/aws/notify/subscription-filter.js +1 -1
  339. package/lib/aws/notify/subscription.js +6 -6
  340. package/lib/aws/notify/subscriptions/email.js +1 -1
  341. package/lib/aws/notify/subscriptions/lambda.js +4 -4
  342. package/lib/aws/notify/subscriptions/sms.js +1 -1
  343. package/lib/aws/notify/subscriptions/sqs.js +4 -4
  344. package/lib/aws/notify/subscriptions/url.js +4 -4
  345. package/lib/aws/notify/target.d.ts +1 -1
  346. package/lib/aws/notify/target.js +1 -1
  347. package/lib/aws/notify/targets/event-bus.js +1 -1
  348. package/lib/aws/notify/targets/function.js +1 -1
  349. package/lib/aws/notify/targets/log-group.js +2 -2
  350. package/lib/aws/notify/targets/sqs.js +1 -1
  351. package/lib/aws/notify/targets/state-machine.js +1 -1
  352. package/lib/aws/notify/targets/util.js +3 -3
  353. package/lib/aws/notify/topic-base.js +4 -4
  354. package/lib/aws/notify/topic.js +7 -7
  355. package/lib/aws/provider-config.generated.d.ts +42 -36
  356. package/lib/aws/provider-config.generated.js +1 -1
  357. package/lib/aws/region-lookup.js +4 -4
  358. package/lib/aws/storage/assets/image-asset.js +8 -8
  359. package/lib/aws/storage/assets/s3.js +1 -1
  360. package/lib/aws/storage/auth-token.js +2 -2
  361. package/lib/aws/storage/billing.js +1 -1
  362. package/lib/aws/storage/bucket-notifications.d.ts +1 -1
  363. package/lib/aws/storage/bucket-notifications.js +8 -8
  364. package/lib/aws/storage/bucket-policy.d.ts +1 -1
  365. package/lib/aws/storage/bucket-policy.js +3 -3
  366. package/lib/aws/storage/bucket-source.d.ts +1 -1
  367. package/lib/aws/storage/bucket-source.js +7 -7
  368. package/lib/aws/storage/bucket.d.ts +1 -1
  369. package/lib/aws/storage/bucket.js +8 -8
  370. package/lib/aws/storage/capacity.js +1 -1
  371. package/lib/aws/storage/cors-config.generated.d.ts +5 -5
  372. package/lib/aws/storage/cors-config.generated.js +1 -1
  373. package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
  374. package/lib/aws/storage/cors-rule-config.generated.js +1 -1
  375. package/lib/aws/storage/ecr-repository.js +11 -11
  376. package/lib/aws/storage/encryption.d.ts +1 -1
  377. package/lib/aws/storage/encryption.js +5 -5
  378. package/lib/aws/storage/lifecycle-config.generated.d.ts +9 -9
  379. package/lib/aws/storage/lifecycle-config.generated.js +1 -1
  380. package/lib/aws/storage/notification-targets/function.js +2 -2
  381. package/lib/aws/storage/notification-targets/queue.js +4 -4
  382. package/lib/aws/storage/origin-access-identity.d.ts +2 -2
  383. package/lib/aws/storage/origin-access-identity.js +3 -3
  384. package/lib/aws/storage/parameter-util.js +5 -5
  385. package/lib/aws/storage/parameter.d.ts +2 -2
  386. package/lib/aws/storage/parameter.js +16 -16
  387. package/lib/aws/storage/stream-grants.js +1 -1
  388. package/lib/aws/storage/table-grants.js +1 -1
  389. package/lib/aws/storage/table.d.ts +1 -1
  390. package/lib/aws/storage/table.js +10 -10
  391. package/lib/aws/storage/website-config.generated.d.ts +8 -8
  392. package/lib/aws/storage/website-config.generated.js +1 -1
  393. package/lib/bundling.js +5 -5
  394. package/lib/construct-base.d.ts +1 -1
  395. package/lib/construct-base.js +10 -10
  396. package/lib/duration.js +9 -9
  397. package/lib/errors.js +1 -1
  398. package/lib/expiration.js +1 -1
  399. package/lib/fs/ignore.js +4 -4
  400. package/lib/fs/index.js +1 -1
  401. package/lib/private/terraform-dependables-aspect.d.ts +1 -1
  402. package/lib/private/terraform-dependables-aspect.js +6 -6
  403. package/lib/private/unique-resource-name.js +3 -3
  404. package/lib/size.js +6 -6
  405. package/lib/stack-base.d.ts +2 -2
  406. package/lib/stack-base.js +16 -16
  407. package/lib/terra-func.d.ts +1 -1
  408. package/lib/terra-func.js +18 -18
  409. package/lib/time-zone.js +1 -1
  410. package/lib/token.js +5 -5
  411. package/package.json +17 -17
  412. package/setup.js +2 -2
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.RouteTable = exports.Route = exports.RouteTargetType = exports.VPCPeeringConnection = exports.NatGateway = exports.VPNGatewayV2 = exports.InternetGateway = exports.EgressOnlyInternetGateway = exports.NatConnectivityType = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  // https://github.com/aws/aws-cdk/blob/v2.175.1/packages/@aws-cdk/aws-ec2-alpha/lib/route.ts
7
- const provider_aws_1 = require("@cdktf/provider-aws");
8
- const cdktf_1 = require("cdktf");
7
+ const provider_aws_1 = require("@cdktn/provider-aws");
8
+ const cdktn_1 = require("cdktn");
9
9
  const vpc_1 = require("./vpc");
10
10
  const vpc_endpoint_1 = require("./vpc-endpoint");
11
11
  const aws_construct_1 = require("../aws-construct");
@@ -63,7 +63,7 @@ class EgressOnlyInternetGateway extends aws_construct_1.AwsConstructBase {
63
63
  }
64
64
  exports.EgressOnlyInternetGateway = EgressOnlyInternetGateway;
65
65
  _a = JSII_RTTI_SYMBOL_1;
66
- EgressOnlyInternetGateway[_a] = { fqn: "terraconstructs.aws.compute.alpha.EgressOnlyInternetGateway", version: "0.2.4" };
66
+ EgressOnlyInternetGateway[_a] = { fqn: "terraconstructs.aws.compute.alpha.EgressOnlyInternetGateway", version: "0.2.6" };
67
67
  /**
68
68
  * Creates an internet gateway
69
69
  * @resource AWS::EC2::InternetGateway
@@ -96,7 +96,7 @@ class InternetGateway extends aws_construct_1.AwsConstructBase {
96
96
  }
97
97
  exports.InternetGateway = InternetGateway;
98
98
  _b = JSII_RTTI_SYMBOL_1;
99
- InternetGateway[_b] = { fqn: "terraconstructs.aws.compute.alpha.InternetGateway", version: "0.2.4" };
99
+ InternetGateway[_b] = { fqn: "terraconstructs.aws.compute.alpha.InternetGateway", version: "0.2.6" };
100
100
  /**
101
101
  * Creates a virtual private gateway
102
102
  * @resource AWS::EC2::VPNGateway
@@ -145,7 +145,7 @@ class VPNGatewayV2 extends aws_construct_1.AwsConstructBase {
145
145
  const routeTableIds = (0, ec2_util_1.allRouteTableIds)(subnets);
146
146
  if (routeTableIds.length === 0) {
147
147
  // "@aws-cdk:aws-ec2-elpha:enableVpnGatewayV2",
148
- cdktf_1.Annotations.of(scope).addWarning(`No subnets matching selection: '${JSON.stringify(vpnRoutePropagation)}'. Select other subnets to add routes to.`);
148
+ cdktn_1.Annotations.of(scope).addWarning(`No subnets matching selection: '${JSON.stringify(vpnRoutePropagation)}'. Select other subnets to add routes to.`);
149
149
  }
150
150
  for (let i = 0; i < subnets.length; i++) {
151
151
  const routePropagation = new provider_aws_1.vpnGatewayRoutePropagation.VpnGatewayRoutePropagation(this, `RoutePropagation${i}`, {
@@ -162,7 +162,7 @@ class VPNGatewayV2 extends aws_construct_1.AwsConstructBase {
162
162
  }
163
163
  exports.VPNGatewayV2 = VPNGatewayV2;
164
164
  _c = JSII_RTTI_SYMBOL_1;
165
- VPNGatewayV2[_c] = { fqn: "terraconstructs.aws.compute.alpha.VPNGatewayV2", version: "0.2.4" };
165
+ VPNGatewayV2[_c] = { fqn: "terraconstructs.aws.compute.alpha.VPNGatewayV2", version: "0.2.6" };
166
166
  /**
167
167
  * Creates a network address translation (NAT) gateway
168
168
  * @resource AWS::EC2::NatGateway
@@ -231,7 +231,7 @@ class NatGateway extends aws_construct_1.AwsConstructBase {
231
231
  }
232
232
  exports.NatGateway = NatGateway;
233
233
  _d = JSII_RTTI_SYMBOL_1;
234
- NatGateway[_d] = { fqn: "terraconstructs.aws.compute.alpha.NatGateway", version: "0.2.4" };
234
+ NatGateway[_d] = { fqn: "terraconstructs.aws.compute.alpha.NatGateway", version: "0.2.6" };
235
235
  /**
236
236
  * Creates a peering connection between two VPCs
237
237
  * @resource AWS::EC2::VPCPeeringConnection
@@ -319,7 +319,7 @@ class VPCPeeringConnection extends aws_construct_1.AwsConstructBase {
319
319
  }
320
320
  exports.VPCPeeringConnection = VPCPeeringConnection;
321
321
  _e = JSII_RTTI_SYMBOL_1;
322
- VPCPeeringConnection[_e] = { fqn: "terraconstructs.aws.compute.alpha.VPCPeeringConnection", version: "0.2.4" };
322
+ VPCPeeringConnection[_e] = { fqn: "terraconstructs.aws.compute.alpha.VPCPeeringConnection", version: "0.2.6" };
323
323
  /**
324
324
  * The gateway or endpoint targeted by the route.
325
325
  */
@@ -337,7 +337,7 @@ class RouteTargetType {
337
337
  }
338
338
  exports.RouteTargetType = RouteTargetType;
339
339
  _f = JSII_RTTI_SYMBOL_1;
340
- RouteTargetType[_f] = { fqn: "terraconstructs.aws.compute.alpha.RouteTargetType", version: "0.2.4" };
340
+ RouteTargetType[_f] = { fqn: "terraconstructs.aws.compute.alpha.RouteTargetType", version: "0.2.6" };
341
341
  /**
342
342
  * Creates a new route with added functionality.
343
343
  * @resource AWS::EC2::Route
@@ -401,7 +401,7 @@ class Route extends aws_construct_1.AwsConstructBase {
401
401
  }
402
402
  exports.Route = Route;
403
403
  _g = JSII_RTTI_SYMBOL_1;
404
- Route[_g] = { fqn: "terraconstructs.aws.compute.alpha.Route", version: "0.2.4" };
404
+ Route[_g] = { fqn: "terraconstructs.aws.compute.alpha.Route", version: "0.2.6" };
405
405
  /**
406
406
  * Creates a route table for the specified VPC
407
407
  * @resource aws_route_table
@@ -444,7 +444,7 @@ class RouteTable extends aws_construct_1.AwsConstructBase {
444
444
  }
445
445
  exports.RouteTable = RouteTable;
446
446
  _h = JSII_RTTI_SYMBOL_1;
447
- RouteTable[_h] = { fqn: "terraconstructs.aws.compute.alpha.RouteTable", version: "0.2.4" };
447
+ RouteTable[_h] = { fqn: "terraconstructs.aws.compute.alpha.RouteTable", version: "0.2.6" };
448
448
  /**
449
449
  * inverse of
450
450
  * https://github.com/hashicorp/terraform-provider-aws/blob/v5.87.0/internal/service/ec2/vpc_route.go#L219-L239
@@ -467,4 +467,4 @@ function routerTypeToPropName(routerType) {
467
467
  };
468
468
  return lookupMap[routerType];
469
469
  }
470
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0RkFBNEY7QUFFNUYsc0RBWTZCO0FBQzdCLGlDQUFvQztBQUVwQywrQkFBbUU7QUFDbkUsaURBSXdCO0FBRXhCLG9EQUkwQjtBQUMxQiw4Q0FBOEM7QUFDOUMsMENBQW1DO0FBQ25DLHdDQUF3QztBQUN4Qyx5Q0FBOEM7QUFDOUMsK0NBQXdEO0FBSXhEOzs7O0dBSUc7QUFDSCxJQUFZLG1CQVNYO0FBVEQsV0FBWSxtQkFBbUI7SUFDN0I7O09BRUc7SUFDSCx3Q0FBaUIsQ0FBQTtJQUNqQjs7T0FFRztJQUNILDBDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFUVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQVM5QjtBQXNORDs7R0FFRztBQUNILE1BQU0sUUFBUSxHQUFXLE1BQU0sQ0FBQztBQUVoQzs7O0dBR0c7QUFDSCxNQUFhLHlCQUNYLFNBQVEsZ0NBQWdCO0lBR3hCLElBQVcsa0JBQWtCO1FBQzNCLE9BQU87WUFDTCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ3BDLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFnQkQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBcUM7UUFFckMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3hDLGVBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVB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bEQsTUFBTSxTQUFTLEdBQWtEO1FBQy9ELENBQUMsZ0JBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxrQkFBa0I7UUFDaEQsQ0FBQyxnQkFBVSxDQUFDLDRCQUE0QixDQUFDLEVBQUUscUJBQXFCO1FBQ2hFLENBQUMsZ0JBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXO1FBQ2pDLCtEQUErRDtRQUMvRCw4RUFBOEU7UUFDOUUsdUNBQXVDO1FBQ3ZDLENBQUMsZ0JBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxnQkFBZ0I7UUFDNUMsQ0FBQyxnQkFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLGNBQWM7UUFDeEMsQ0FBQyxnQkFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsb0JBQW9CO1FBQ3BELENBQUMsZ0JBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxrQkFBa0I7UUFDaEQsQ0FBQyxnQkFBVSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsd0JBQXdCO1FBQzdELENBQUMsZ0JBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxlQUFlO1FBQzFDLENBQUMsZ0JBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxnQkFBZ0I7S0FDNUMsQ0FBQztJQUNGLE9BQU8sU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9AYXdzLWNkay9hd3MtZWMyLWFscGhhL2xpYi9yb3V0ZS50c1xuXG5pbXBvcnQge1xuICBlaXAgYXMgdGZFaXAsXG4gIGVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkgYXMgdGZFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5LFxuICBpbnRlcm5ldEdhdGV3YXkgYXMgdGZJbnRlcm5ldEdhdGV3YXksXG4gIG5hdEdhdGV3YXkgYXMgdGZOYXRHYXRld2F5LFxuICB2cGNQZWVyaW5nQ29ubmVjdGlvbiBhcyB0ZlZwY1BlZXJpbmdDb25uZWN0aW9uLFxuICByb3V0ZSBhcyB0ZlJvdXRlLFxuICByb3V0ZVRhYmxlIGFzIHRmUm91dGVUYWJsZSxcbiAgdnBuR2F0ZXdheUF0dGFjaG1lbnQgYXMgdGZWcG5HYXRld2F5QXR0YWNobWVudCxcbiAgaW50ZXJuZXRHYXRld2F5QXR0YWNobWVudCBhcyB0ZkludGVybmV0R2F0ZXdheUF0dGFjaG1lbnQsXG4gIHZwbkdhdGV3YXkgYXMgdGZWcG5HYXRld2F5LFxuICB2cG5HYXRld2F5Um91dGVQcm9wYWdhdGlvbiBhcyB0ZlZwbkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uLFxufSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCwgSURlcGVuZGFibGUgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSVJvdXRlVGFibGUsIFJvdXRlclR5cGUsIFJvdXRlVGFibGVPdXRwdXRzIH0gZnJvbSBcIi4vdnBjXCI7XG5pbXBvcnQge1xuICBHYXRld2F5VnBjRW5kcG9pbnQsXG4gIElWcGNFbmRwb2ludCxcbiAgVnBjRW5kcG9pbnRPdXRwdXRzLFxufSBmcm9tIFwiLi92cGMtZW5kcG9pbnRcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCI7XG5pbXBvcnQge1xuICBBd3NDb25zdHJ1Y3RCYXNlLFxuICBBd3NDb25zdHJ1Y3RQcm9wcyxcbiAgSUF3c0NvbnN0cnVjdCxcbn0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbi8vIFRPRE86IFVzZSBUYWdNYW5hZ2VyIGFuZCB0YWctYXNwZWN0IGluc3RlYWRcbmltcG9ydCB7IFRhZ3MgfSBmcm9tIFwiLi4vYXdzLXRhZ3NcIjtcbi8vIGltcG9ydCB7IFRhZ3MgfSBmcm9tIFwiLi4vdGFnLWFzcGVjdFwiO1xuaW1wb3J0IHsgYWxsUm91dGVUYWJsZUlkcyB9IGZyb20gXCIuL2VjMi11dGlsXCI7XG5pbXBvcnQgeyBOZXR3b3JrVXRpbHMsIENpZHJCbG9jayB9IGZyb20gXCIuL2VjMi11dGlsLXYyXCI7XG5pbXBvcnQgeyBJU3VibmV0VjIgfSBmcm9tIFwiLi9zdWJuZXQtdjJcIjtcbmltcG9ydCB7IElWcGNWMiwgVlBOR2F0ZXdheVYyT3B0aW9ucyB9IGZyb20gXCIuL3ZwYy12Mi1iYXNlXCI7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIE5BVCBnYXRld2F5IHN1cHBvcnRzIHB1YmxpYyBvciBwcml2YXRlIGNvbm5lY3Rpdml0eS5cbiAqIFRoZSBkZWZhdWx0IGlzIHB1YmxpYyBjb25uZWN0aXZpdHkuXG4gKiBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItbmF0Z2F0ZXdheS5odG1sI2Nmbi1lYzItbmF0Z2F0ZXdheS1jb25uZWN0aXZpdHl0eXBlXG4gKi9cbmV4cG9ydCBlbnVtIE5hdENvbm5lY3Rpdml0eVR5cGUge1xuICAvKipcbiAgICogU2V0cyBDb25uZWN0aXZpdHkgdHlwZSB0byBQVUJMSUNcbiAgICovXG4gIFBVQkxJQyA9IFwicHVibGljXCIsXG4gIC8qKlxuICAgKiBTZXRzIENvbm5lY3Rpdml0eSB0eXBlIHRvIFBSSVZBVEVcbiAgICovXG4gIFBSSVZBVEUgPSBcInByaXZhdGVcIixcbn1cblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlVGFyZ2V0T3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiByb3V0ZXIgdXNlZCBpbiB0aGUgcm91dGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgdG8gZGVmaW5lIGEgcm91dGluZyB0YXJnZXQsIHN1Y2ggYXMgYW5cbiAqIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkgb3IgVlBDIGVuZHBvaW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSb3V0ZVRhcmdldCBleHRlbmRzIElEZXBlbmRhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSBvdXRwdXRzIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhcmdldE91dHB1dHM6IFJvdXRlVGFyZ2V0T3V0cHV0cztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGFuIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWdyZXNzT25seUludGVybmV0R2F0ZXdheVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJlc291cmNlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGFuIGludGVybmV0IGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJuZXRHYXRld2F5UHJvcHMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgaW50ZXJuZXQgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgaW50ZXJuZXQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm92aXNpb25lZCB3aXRob3V0IGEgcmVzb3VyY2UgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJuZXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIFZQTiBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZQTkdhdGV3YXlWMlByb3BzXG4gIGV4dGVuZHMgVlBOR2F0ZXdheVYyT3B0aW9ucyxcbiAgICBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQyBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBWUE4gZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gZGVmaW5lIGEgTkFUIGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmF0R2F0ZXdheU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHN1Ym5ldCBpbiB3aGljaCB0aGUgTkFUIGdhdGV3YXkgaXMgbG9jYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldDogSVN1Ym5ldFYyO1xuXG4gIC8qKlxuICAgKiBBbGxvY2F0aW9uSUQgb2YgRWxhc3RpYyBJUCBhZGRyZXNzIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIE5BVCBnYXRld2F5LiBUaGlzIHByb3BlcnR5IGlzIHJlcXVpcmVkIGZvciBhIHB1YmxpYyBOQVRcbiAgICogZ2F0ZXdheSBhbmQgY2Fubm90IGJlIHNwZWNpZmllZCB3aXRoIGEgcHJpdmF0ZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdHRyLmFsbG9jYXRpb25JRCBvZiBhIG5ldyBFbGFzdGljIElQIGNyZWF0ZWQgYnkgZGVmYXVsdFxuICAgKiAvL1RPRE86IEFERCBMMiBmb3IgZWxhc3RpYyBpcFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb2NhdGlvbklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgTkFUIGdhdGV3YXkgc3VwcG9ydHMgcHVibGljIG9yIHByaXZhdGUgY29ubmVjdGl2aXR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBOYXRDb25uZWN0aXZpdHlUeXBlLlB1YmxpY1xuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGl2aXR5VHlwZT86IE5hdENvbm5lY3Rpdml0eVR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgYmVmb3JlIGZvcmNpYmx5IHJlbGVhc2luZyB0aGVcbiAgICogSVAgYWRkcmVzc2VzIGlmIGNvbm5lY3Rpb25zIGFyZSBzdGlsbCBpbiBwcm9ncmVzcy5cbiAgICpcbiAgICogQGRlZmF1bHQgMzUwc2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4RHJhaW5EdXJhdGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpdmF0ZSBJUHY0IGFkZHJlc3MgdG8gYXNzaWduIHRvIHRoZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBhbiBhZGRyZXNzLCBhIHByaXZhdGUgSVB2NCBhZGRyZXNzIHdpbGwgYmUgYXV0b21hdGljYWxseSBhc3NpZ25lZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVJcEFkZHJlc3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlY29uZGFyeSBFSVAgYWxsb2NhdGlvbiBJRHMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1uYXQtZ2F0ZXdheS5odG1sI25hdC1nYXRld2F5LWNyZWF0aW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2Vjb25kYXJ5IGFsbG9jYXRpb24gSURzIGF0dGFjaGVkIHRvIE5BVEdXXG4gICAqXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlBbGxvY2F0aW9uSWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kYXJ5IHByaXZhdGUgSVB2NCBhZGRyZXNzZXMgeW91XG4gICAqIHdhbnQgdG8gYXNzaWduIHRvIHRoZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogYFNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3NDb3VudGAgYW5kIGBTZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzZXNgIGNhbm5vdCBiZVxuICAgKiBzZXQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLW5hdC1nYXRld2F5Lmh0bWwjbmF0LWdhdGV3YXktY3JlYXRpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzZWNvbmRhcnkgYWxsb2NhdGlvbiBJRHMgYXNzb2NpYXRlZCB3aXRoIE5BVEdXXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNlY29uZGFyeSBwcml2YXRlIElQdjQgYWRkcmVzc2VzLlxuICAgKlxuICAgKiBgU2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc0NvdW50YCBhbmQgYFNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3Nlc2AgY2Fubm90IGJlXG4gICAqIHNldCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtbmF0LWdhdGV3YXkuaHRtbCNuYXQtZ2F0ZXdheS1jcmVhdGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHNlY29uZGFyeSBwcml2YXRlIElwQWRkcmVzc2VzIGFzc29jaWF0ZWQgd2l0aCBOQVRHV1xuICAgKi9cbiAgcmVhZG9ubHkgc2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOQVRHVyBwcm92aXNpb25lZCB3aXRob3V0IGFueSBuYW1lXG4gICAqL1xuICByZWFkb25seSBuYXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIE5BVCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdEdhdGV3YXlQcm9wcyBleHRlbmRzIE5hdEdhdGV3YXlPcHRpb25zLCBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQyBpbiB3aGljaCB0aGUgTkFUIGdhdGV3YXkgaXMgbG9jYXRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBlbGFzdGljIGlwIGFzc29jaWF0ZWQsIHJlcXVpcmVkIGluIGNhc2Ugb2YgcHVibGljIGNvbm5lY3Rpdml0eSBpZiBgQWxsb2NhdGlvbklkYCBpcyBub3QgZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjPzogSVZwY1YyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gZGVmaW5lIGEgVlBDIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWUENQZWVyaW5nQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIFZQQyB0aGF0IGlzIGFjY2VwdGluZyB0aGUgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXB0b3JWcGM6IElWcGNWMjtcblxuICAvLyBUT0RPOiBoYW5kbGUgY3Jvc3NBY2NvdW50IFRGIFByb3ZpZGVyIGZvciB2cGNfcGVlcmluZ19jb25uZWN0aW9uX2FjY2VwdGVyXG4gIC8vIC8qKlxuICAvLyAgKiBUaGUgcm9sZSBhcm4gY3JlYXRlZCBpbiB0aGUgYWNjZXB0b3IgYWNjb3VudC5cbiAgLy8gICpcbiAgLy8gICogQGRlZmF1bHQgLSBubyBwZWVyUm9sZUFybiBuZWVkZWQgaWYgbm90IGNyb3NzIGFjY291bnQgY29ubmVjdGlvblxuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgcGVlclJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcGVlcmluZyBjb25uZWN0aW9uIHByb3Zpc2lvbmVkIHdpdGhvdXQgYW55IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHZwY1BlZXJpbmdDb25uZWN0aW9uTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBDUGVlcmluZ0Nvbm5lY3Rpb25Qcm9wcyBleHRlbmRzIFZQQ1BlZXJpbmdDb25uZWN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgVlBDIHRoYXQgaXMgcmVxdWVzdGluZyB0aGUgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdG9yVnBjOiBJVnBjVjI7XG59XG5cbi8qKlxuICogTmFtZSB0YWcgY29uc3RhbnRcbiAqL1xuY29uc3QgTkFNRV9UQUc6IHN0cmluZyA9IFwiTmFtZVwiO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheVxuICogQHJlc291cmNlIGF3c19lZ3Jlc3Nfb25seV9pbnRlcm5ldF9nYXRld2F5XG4gKi9cbmV4cG9ydCBjbGFzcyBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5XG4gIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZVxuICBpbXBsZW1lbnRzIElSb3V0ZVRhcmdldFxue1xuICBwdWJsaWMgZ2V0IHJvdXRlVGFyZ2V0T3V0cHV0cygpOiBSb3V0ZVRhcmdldE91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICByb3V0ZXJUeXBlOiB0aGlzLnJvdXRlclR5cGUsXG4gICAgICByb3V0ZXJUYXJnZXRJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZVRhcmdldE91dHB1dHM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiB0ZkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkuRWdyZXNzT25seUludGVybmV0R2F0ZXdheTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmIChwcm9wcy5lZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzLmVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlOYW1lKTtcbiAgICB9XG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5FR1JFU1NfT05MWV9JTlRFUk5FVF9HQVRFV0FZO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyB0ZkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkuRWdyZXNzT25seUludGVybmV0R2F0ZXdheShcbiAgICAgIHRoaXMsXG4gICAgICBcIkVJR1dcIixcbiAgICAgIHtcbiAgICAgICAgdnBjSWQ6IHByb3BzLnZwYy52cGNJZCxcbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5yZXNvdXJjZTtcblxuICAgIHRoaXMucm91dGVyVGFyZ2V0SWQgPSB0aGlzLnJlc291cmNlLmlkO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBpbnRlcm5ldCBnYXRld2F5XG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OkludGVybmV0R2F0ZXdheVxuICovXG5leHBvcnQgY2xhc3MgSW50ZXJuZXRHYXRld2F5IGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSBpbXBsZW1lbnRzIElSb3V0ZVRhcmdldCB7XG4gIHB1YmxpYyBnZXQgcm91dGVUYXJnZXRPdXRwdXRzKCk6IFJvdXRlVGFyZ2V0T3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdXRlclR5cGU6IHRoaXMucm91dGVyVHlwZSxcbiAgICAgIHJvdXRlclRhcmdldElkOiB0aGlzLnJvdXRlclRhcmdldElkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJvdXRlVGFyZ2V0T3V0cHV0cztcbiAgfVxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQyBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcm5ldCBnYXRld2F5IENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogdGZJbnRlcm5ldEdhdGV3YXkuSW50ZXJuZXRHYXRld2F5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbnRlcm5ldEdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLkdBVEVXQVk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHRmSW50ZXJuZXRHYXRld2F5LkludGVybmV0R2F0ZXdheSh0aGlzLCBcIklHV1wiLCB7fSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5pZDtcbiAgICB0aGlzLnZwY0lkID0gcHJvcHMudnBjLnZwY0lkO1xuXG4gICAgaWYgKHByb3BzLmludGVybmV0R2F0ZXdheU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy5pbnRlcm5ldEdhdGV3YXlOYW1lKTtcbiAgICB9XG5cbiAgICBuZXcgdGZJbnRlcm5ldEdhdGV3YXlBdHRhY2htZW50LkludGVybmV0R2F0ZXdheUF0dGFjaG1lbnQoXG4gICAgICB0aGlzLFxuICAgICAgXCJHV0F0dGFjaG1lbnRcIixcbiAgICAgIHtcbiAgICAgICAgdnBjSWQ6IHRoaXMudnBjSWQsXG4gICAgICAgIGludGVybmV0R2F0ZXdheUlkOiB0aGlzLnJvdXRlclRhcmdldElkLFxuICAgICAgfSxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5XG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlZQTkdhdGV3YXlcbiAqL1xuZXhwb3J0IGNsYXNzIFZQTkdhdGV3YXlWMiBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuICBwdWJsaWMgZ2V0IHJvdXRlVGFyZ2V0T3V0cHV0cygpOiBSb3V0ZVRhcmdldE91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICByb3V0ZXJUeXBlOiB0aGlzLnJvdXRlclR5cGUsXG4gICAgICByb3V0ZXJUYXJnZXRJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZVRhcmdldE91dHB1dHM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgVlBOIGdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFZQTiBnYXRld2F5IENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogdGZWcG5HYXRld2F5LlZwbkdhdGV3YXk7XG5cbiAgLyoqXG4gICAqIFRoZSBWUE4gR2F0ZXdheSBBdHRhY2htZW50XG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdHRhY2htZW50OiB0ZlZwbkdhdGV3YXlBdHRhY2htZW50LlZwbkdhdGV3YXlBdHRhY2htZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgVlBOIEdhdGV3YXkgUm91dGUgUHJvcGFnYXRpb25cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlUHJvcGFnYXRpb246IHRmVnBuR2F0ZXdheVJvdXRlUHJvcGFnYXRpb24uVnBuR2F0ZXdheVJvdXRlUHJvcGFnYXRpb25bXSA9XG4gICAgW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFZQTkdhdGV3YXlWMlByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgY29uc3QgdnBuR2F0ZXdheU5hbWUgPVxuICAgICAgcHJvcHMudnBuR2F0ZXdheU5hbWUgfHxcbiAgICAgIHRoaXMuc3RhY2sudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgICAgcHJlZml4OiB0aGlzLmdyaWRVVUlELFxuICAgICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLkdBVEVXQVk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHRmVnBuR2F0ZXdheS5WcG5HYXRld2F5KHRoaXMsIFwiSUdXXCIsIHtcbiAgICAgIGFtYXpvblNpZGVBc246XG4gICAgICAgIHByb3BzLmFtYXpvblNpZGVBc24gIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gcHJvcHMuYW1hem9uU2lkZUFzbi50b1N0cmluZygpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5pZDtcblxuICAgIHRoaXMudnBjSWQgPSBwcm9wcy52cGMudnBjSWQ7XG4gICAgdGhpcy5fYXR0YWNobWVudCA9IG5ldyB0ZlZwbkdhdGV3YXlBdHRhY2htZW50LlZwbkdhdGV3YXlBdHRhY2htZW50KFxuICAgICAgdGhpcyxcbiAgICAgIFwiVlBDVlBOR1dcIixcbiAgICAgIHtcbiAgICAgICAgdnBjSWQ6IHRoaXMudnBjSWQsXG4gICAgICAgIHZwbkdhdGV3YXlJZDogdGhpcy5yZXNvdXJjZS5pZCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGlmIChwcm9wcy52cG5HYXRld2F5TmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHZwbkdhdGV3YXlOYW1lKTtcbiAgICB9XG5cbiAgICAvLyBQcm9wYWdhdGUgcm91dGVzIG9uIHJvdXRlIHRhYmxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJpZ2h0IHN1Ym5ldHNcbiAgICBjb25zdCB2cG5Sb3V0ZVByb3BhZ2F0aW9uID0gcHJvcHMudnBuUm91dGVQcm9wYWdhdGlvbiA/PyBbXTtcbiAgICBjb25zdCBzdWJuZXRzID0gdnBuUm91dGVQcm9wYWdhdGlvblxuICAgICAgLm1hcCgocykgPT4gcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMocykuc3VibmV0cylcbiAgICAgIC5mbGF0KCk7XG4gICAgY29uc3Qgcm91dGVUYWJsZUlkcyA9IGFsbFJvdXRlVGFibGVJZHMoc3VibmV0cyk7XG5cbiAgICBpZiAocm91dGVUYWJsZUlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIFwiQGF3cy1jZGs6YXdzLWVjMi1lbHBoYTplbmFibGVWcG5HYXRld2F5VjJcIixcbiAgICAgIEFubm90YXRpb25zLm9mKHNjb3BlKS5hZGRXYXJuaW5nKFxuICAgICAgICBgTm8gc3VibmV0cyBtYXRjaGluZyBzZWxlY3Rpb246ICcke0pTT04uc3RyaW5naWZ5KHZwblJvdXRlUHJvcGFnYXRpb24pfScuIFNlbGVjdCBvdGhlciBzdWJuZXRzIHRvIGFkZCByb3V0ZXMgdG8uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJuZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByb3V0ZVByb3BhZ2F0aW9uID1cbiAgICAgICAgbmV3IHRmVnBuR2F0ZXdheVJvdXRlUHJvcGFnYXRpb24uVnBuR2F0ZXdheVJvdXRlUHJvcGFnYXRpb24oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgUm91dGVQcm9wYWdhdGlvbiR7aX1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJvdXRlVGFibGVJZDogc3VibmV0c1tpXS5yb3V0ZVRhYmxlLnJvdXRlVGFibGVJZCxcbiAgICAgICAgICAgIHZwbkdhdGV3YXlJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAvLyBUaGUgQVdTOjpFQzI6OlZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uIHJlc291cmNlIGNhbm5vdCB1c2UgdGhlIFZQTiBnYXRld2F5XG4gICAgICAvLyB1bnRpbCBpdCBoYXMgc3VjY2Vzc2Z1bGx5IGF0dGFjaGVkIHRvIHRoZSBWUEMuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12cG4tZ2F0ZXdheXJvdXRlcHJvcC5odG1sXG4gICAgICByb3V0ZVByb3BhZ2F0aW9uLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLl9hdHRhY2htZW50KTtcbiAgICAgIHRoaXMuX3JvdXRlUHJvcGFnYXRpb24ucHVzaChyb3V0ZVByb3BhZ2F0aW9uKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV0d29yayBhZGRyZXNzIHRyYW5zbGF0aW9uIChOQVQpIGdhdGV3YXlcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6TmF0R2F0ZXdheVxuICovXG5leHBvcnQgY2xhc3MgTmF0R2F0ZXdheSBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuICBwdWJsaWMgZ2V0IHJvdXRlVGFyZ2V0T3V0cHV0cygpOiBSb3V0ZVRhcmdldE91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICByb3V0ZXJUeXBlOiB0aGlzLnJvdXRlclR5cGUsXG4gICAgICByb3V0ZXJUYXJnZXRJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZVRhcmdldE91dHB1dHM7XG4gIH1cbiAgLyoqXG4gICAqIElkIG9mIHRoZSBOYXRHYXRld2F5XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYXRHYXRld2F5SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBOQVQgZ2F0ZXdheSBzdXBwb3J0cyBwdWJsaWMgb3IgcHJpdmF0ZSBjb25uZWN0aXZpdHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IHB1YmxpY1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpdml0eVR5cGU/OiBOYXRDb25uZWN0aXZpdHlUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJlZm9yZSBmb3JjaWJseSByZWxlYXNpbmcgdGhlXG4gICAqIElQIGFkZHJlc3NlcyBpZiBjb25uZWN0aW9ucyBhcmUgc3RpbGwgaW4gcHJvZ3Jlc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0ICczMCBtaW51dGVzJ1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1heERyYWluRHVyYXRpb24/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIE5BVCBnYXRld2F5IENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogdGZOYXRHYXRld2F5Lk5hdEdhdGV3YXk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5hdEdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLk5BVF9HQVRFV0FZO1xuXG4gICAgdGhpcy5jb25uZWN0aXZpdHlUeXBlID1cbiAgICAgIHByb3BzLmNvbm5lY3Rpdml0eVR5cGUgfHwgTmF0Q29ubmVjdGl2aXR5VHlwZS5QVUJMSUM7XG4gICAgdGhpcy5tYXhEcmFpbkR1cmF0aW9uID0gcHJvcHMubWF4RHJhaW5EdXJhdGlvbjtcblxuICAgIGlmICh0aGlzLmNvbm5lY3Rpdml0eVR5cGUgPT09IE5hdENvbm5lY3Rpdml0eVR5cGUuUFVCTElDKSB7XG4gICAgICBpZiAoIXByb3BzLnZwYyAmJiAhcHJvcHMuYWxsb2NhdGlvbklkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVpdGhlciBwcm92aWRlIHZwYyBvciBhbGxvY2F0aW9uSWRcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLm5hdEdhdGV3YXlOYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHM/Lm5hdEdhdGV3YXlOYW1lKTtcbiAgICB9XG5cbiAgICAvLyBJZiB1c2VyIGRvZXMgbm90IHByb3ZpZGUgRUlQLCBnZW5lcmF0ZSBvbmUgZm9yIHRoZW1cbiAgICBsZXQgYUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuY29ubmVjdGl2aXR5VHlwZSA9PT0gTmF0Q29ubmVjdGl2aXR5VHlwZS5QVUJMSUMpIHtcbiAgICAgIGlmICghcHJvcHMuYWxsb2NhdGlvbklkKSB7XG4gICAgICAgIGNvbnN0IGVpcCA9IG5ldyB0ZkVpcC5FaXAodGhpcywgXCJFSVBcIiwge1xuICAgICAgICAgIGRvbWFpbjogXCJ2cGNcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGFJZCA9IGVpcC5hbGxvY2F0aW9uSWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhSWQgPSBwcm9wcy5hbGxvY2F0aW9uSWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyB0Zk5hdEdhdGV3YXkuTmF0R2F0ZXdheSh0aGlzLCBcIk5BVEdhdGV3YXlcIiwge1xuICAgICAgc3VibmV0SWQ6IHByb3BzLnN1Ym5ldC5zdWJuZXRJZCxcbiAgICAgIGFsbG9jYXRpb25JZDogYUlkLFxuICAgICAgcHJpdmF0ZUlwOiBwcm9wcy5wcml2YXRlSXBBZGRyZXNzLFxuICAgICAgLy8gLi4ucHJvcHMsXG4gICAgICBjb25uZWN0aXZpdHlUeXBlOiBwcm9wcy5jb25uZWN0aXZpdHlUeXBlLFxuICAgICAgc2Vjb25kYXJ5QWxsb2NhdGlvbklkczogcHJvcHMuc2Vjb25kYXJ5QWxsb2NhdGlvbklkcyxcbiAgICAgIHNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3NDb3VudDogcHJvcHMuc2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc0NvdW50LFxuICAgICAgc2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc2VzOiBwcm9wcy5zZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzZXMsXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLW5hdGdhdGV3YXkuaHRtbCNjZm4tZWMyLW5hdGdhdGV3YXktbWF4ZHJhaW5kdXJhdGlvbnNlY29uZHNcbiAgICAgIC8vIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjguMC9kb2NzL3Jlc291cmNlcy9uYXRfZ2F0ZXdheSN0aW1lb3V0c1xuICAgICAgLi4uKHRoaXMubWF4RHJhaW5EdXJhdGlvblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHRpbWVvdXRzOiB7XG4gICAgICAgICAgICAgIGRlbGV0ZTogdGhpcy5tYXhEcmFpbkR1cmF0aW9uLnRvU2Vjb25kcygpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSk7XG4gICAgdGhpcy5uYXRHYXRld2F5SWQgPSB0aGlzLnJlc291cmNlLmlkO1xuXG4gICAgdGhpcy5yb3V0ZXJUYXJnZXRJZCA9IHRoaXMucmVzb3VyY2UuaWQ7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMuc3VibmV0LmludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQpO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHBlZXJpbmcgY29ubmVjdGlvbiBiZXR3ZWVuIHR3byBWUENzXG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlZQQ1BlZXJpbmdDb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBWUENQZWVyaW5nQ29ubmVjdGlvblxuICBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2VcbiAgaW1wbGVtZW50cyBJUm91dGVUYXJnZXRcbntcbiAgcHVibGljIGdldCByb3V0ZVRhcmdldE91dHB1dHMoKTogUm91dGVUYXJnZXRPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVyVHlwZTogdGhpcy5yb3V0ZXJUeXBlLFxuICAgICAgcm91dGVyVGFyZ2V0SWQ6IHRoaXMucm91dGVyVGFyZ2V0SWQsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVUYXJnZXRPdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiByb3V0ZXIgdXNlZCBpbiB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgcGVlcmluZyBjb25uZWN0aW9uIENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogdGZWcGNQZWVyaW5nQ29ubmVjdGlvbi5WcGNQZWVyaW5nQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVlBDUGVlcmluZ0Nvbm5lY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLlZQQ19QRUVSSU5HX0NPTk5FQ1RJT047XG5cbiAgICAvLyBjb25zdCBpc0Nyb3NzQWNjb3VudCA9XG4gICAgLy8gICBwcm9wcy5yZXF1ZXN0b3JWcGMub3duZXJBY2NvdW50SWQgIT09IHByb3BzLmFjY2VwdG9yVnBjLm93bmVyQWNjb3VudElkO1xuXG4gICAgLy8gaWYgKCFpc0Nyb3NzQWNjb3VudCAmJiBwcm9wcy5wZWVyUm9sZUFybikge1xuICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKFwicGVlclJvbGVBcm4gaXMgbm90IG5lZWRlZCBmb3Igc2FtZSBhY2NvdW50IHBlZXJpbmdcIik7XG4gICAgLy8gfVxuXG4gICAgLy8gaWYgKGlzQ3Jvc3NBY2NvdW50ICYmICFwcm9wcy5wZWVyUm9sZUFybikge1xuICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKFwiQ3Jvc3MgYWNjb3VudCBWUEMgcGVlcmluZyByZXF1aXJlcyBwZWVyUm9sZUFyblwiKTtcbiAgICAvLyB9XG5cbiAgICBjb25zdCBvdmVybGFwID0gdGhpcy52YWxpZGF0ZVZwY0NpZHJPdmVybGFwKFxuICAgICAgcHJvcHMucmVxdWVzdG9yVnBjLFxuICAgICAgcHJvcHMuYWNjZXB0b3JWcGMsXG4gICAgKTtcbiAgICBpZiAob3ZlcmxhcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNJRFIgYmxvY2sgc2hvdWxkIG5vdCBvdmVybGFwIHdpdGggZWFjaCBvdGhlciBmb3IgZXN0YWJsaXNoaW5nIGEgcGVlcmluZyBjb25uZWN0aW9uXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocHJvcHMudnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMudnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHRmVnBjUGVlcmluZ0Nvbm5lY3Rpb24uVnBjUGVlcmluZ0Nvbm5lY3Rpb24oXG4gICAgICB0aGlzLFxuICAgICAgXCJWUENQZWVyaW5nQ29ubmVjdGlvblwiLFxuICAgICAge1xuICAgICAgICB2cGNJZDogcHJvcHMucmVxdWVzdG9yVnBjLnZwY0lkLFxuICAgICAgICBwZWVyVnBjSWQ6IHByb3BzLmFjY2VwdG9yVnBjLnZwY0lkLFxuICAgICAgICBwZWVyT3duZXJJZDogcHJvcHMuYWNjZXB0b3JWcGMub3duZXJBY2NvdW50SWQsXG4gICAgICAgIHBlZXJSZWdpb246IHByb3BzLmFjY2VwdG9yVnBjLnJlZ2lvbiwgLy8gYXV0b0FjY2VwdCBtdXN0IGJlIGZhbHNlXG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSBjcm9zc0FjY291bnQgVEYgUHJvdmlkZXIgZm9yIHZwY19wZWVyaW5nX2Nvbm5lY3Rpb25fYWNjZXB0ZXJcbiAgICAgICAgLy8gcGVlclJvbGVBcm46IGlzQ3Jvc3NBY2NvdW50ID8gcHJvcHMucGVlclJvbGVBcm4gOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICk7XG4gICAgLy8gVE9ETzogQWRkIGF3c192cGNfcGVlcmluZ19jb25uZWN0aW9uX2FjY2VwdGVyIHRvIG1hbmFnZSBBY2NlcHRlciBTaWRlP1xuXG4gICAgdGhpcy5yb3V0ZXJUYXJnZXRJZCA9IHRoaXMucmVzb3VyY2UuaWQ7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGlmIHRoZSBwcm92aWRlZCBJUHY0IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzdWJuZXQgQ0lEUiBibG9ja3Mgd2l0aGluIHRoZSBnaXZlbiBWUEMuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0b3JWcGMgVGhlIFZQQyBvZiB0aGUgcmVxdWVzdG9yLlxuICAgKiBAcGFyYW0gYWNjZXB0b3JWcGMgVGhlIFZQQyBvZiB0aGUgYWNjZXB0b3IuXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIElQdjQgQ0lEUiBibG9jayBvdmVybGFwcyB3aXRoIGVhY2ggb3RoZXIgZm9yIHR3byBWUENzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZwY0NpZHJPdmVybGFwKFxuICAgIHJlcXVlc3RvclZwYzogSVZwY1YyLFxuICAgIGFjY2VwdG9yVnBjOiBJVnBjVjIsXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlcXVlc3RvckNpZHJzID0gW3JlcXVlc3RvclZwYy5pcHY0Q2lkckJsb2NrXTtcbiAgICBjb25zdCBhY2NlcHRvckNpZHJzID0gW2FjY2VwdG9yVnBjLmlwdjRDaWRyQmxvY2tdO1xuXG4gICAgaWYgKHJlcXVlc3RvclZwYy5zZWNvbmRhcnlDaWRyQmxvY2spIHtcbiAgICAgIHJlcXVlc3RvckNpZHJzLnB1c2goXG4gICAgICAgIC4uLnJlcXVlc3RvclZwYy5zZWNvbmRhcnlDaWRyQmxvY2tcbiAgICAgICAgICAubWFwKChibG9jaykgPT4gYmxvY2suY2lkckJsb2NrKVxuICAgICAgICAgIC5maWx0ZXIoKGNpZHIpOiBjaWRyIGlzIHN0cmluZyA9PiBjaWRyICE9PSB1bmRlZmluZWQpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYWNjZXB0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgICBhY2NlcHRvckNpZHJzLnB1c2goXG4gICAgICAgIC4uLmFjY2VwdG9yVnBjLnNlY29uZGFyeUNpZHJCbG9ja1xuICAgICAgICAgIC5tYXAoKGJsb2NrKSA9PiBibG9jay5jaWRyQmxvY2spXG4gICAgICAgICAgLmZpbHRlcigoY2lkcik6IGNpZHIgaXMgc3RyaW5nID0+IGNpZHIgIT09IHVuZGVmaW5lZCksXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVxdWVzdG9yQ2lkciBvZiByZXF1ZXN0b3JDaWRycykge1xuICAgICAgY29uc3QgcmVxdWVzdG9yUmFuZ2UgPSBuZXcgQ2lkckJsb2NrKHJlcXVlc3RvckNpZHIpO1xuICAgICAgY29uc3QgcmVxdWVzdG9ySXBSYW5nZTogW3N0cmluZywgc3RyaW5nXSA9IFtcbiAgICAgICAgcmVxdWVzdG9yUmFuZ2UubWluSXAoKSxcbiAgICAgICAgcmVxdWVzdG9yUmFuZ2UubWF4SXAoKSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgYWNjZXB0b3JDaWRyIG9mIGFjY2VwdG9yQ2lkcnMpIHtcbiAgICAgICAgY29uc3QgYWNjZXB0b3JSYW5nZSA9IG5ldyBDaWRyQmxvY2soYWNjZXB0b3JDaWRyKTtcbiAgICAgICAgY29uc3QgYWNjZXB0b3JJcFJhbmdlOiBbc3RyaW5nLCBzdHJpbmddID0gW1xuICAgICAgICAgIGFjY2VwdG9yUmFuZ2UubWluSXAoKSxcbiAgICAgICAgICBhY2NlcHRvclJhbmdlLm1heElwKCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHJlcXVlc3RvclJhbmdlLnJhbmdlc092ZXJsYXAoYWNjZXB0b3JJcFJhbmdlLCByZXF1ZXN0b3JJcFJhbmdlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgZW5kcG9pbnQgb3IgZ2F0ZXdheSBiZWluZyB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVUYXJnZXRQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSByb3V0ZSB0YXJnZXQuIFRoaXMgaXMgdXNlZCBmb3IgdGFyZ2V0cyBzdWNoIGFzXG4gICAqIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkgb3IgVlBDIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0YXJnZXQgaXMgbm90IHNldCB0byBhIGdhdGV3YXksIGluIHRoaXMgY2FzZSBhbiBlbmRwb2ludCBpcyBuZWVkZWQuXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5PzogSVJvdXRlVGFyZ2V0O1xuXG4gIC8qKlxuICAgKiBUaGUgZW5kcG9pbnQgcm91dGUgdGFyZ2V0LiBUaGlzIGlzIHVzZWQgZm9yIHRhcmdldHMgc3VjaCBhc1xuICAgKiBWUEMgZW5kcG9pbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRhcmdldCBpcyBub3Qgc2V0IHRvIGFuIGVuZHBvaW50LCBpbiB0aGlzIGNhc2UgYSBnYXRld2F5IGlzIG5lZWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVuZHBvaW50PzogSVZwY0VuZHBvaW50O1xufVxuXG4vKipcbiAqIFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlVGFyZ2V0VHlwZSB7XG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSByb3V0ZSB0YXJnZXQuIFRoaXMgaXMgdXNlZCBmb3IgdGFyZ2V0cyBzdWNoIGFzXG4gICAqIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkgb3IgVlBDIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0YXJnZXQgaXMgbm90IHNldCB0byBhIGdhdGV3YXksIGluIHRoaXMgY2FzZSBhbiBlbmRwb2ludCBpcyBuZWVkZWQuXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5PzogSVJvdXRlVGFyZ2V0O1xuXG4gIC8qKlxuICAgKiBUaGUgZW5kcG9pbnQgcm91dGUgdGFyZ2V0LiBUaGlzIGlzIHVzZWQgZm9yIHRhcmdldHMgc3VjaCBhc1xuICAgKiBWUEMgZW5kcG9pbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRhcmdldCBpcyBub3Qgc2V0IHRvIGFuIGVuZHBvaW50LCBpbiB0aGlzIGNhc2UgYSBnYXRld2F5IGlzIG5lZWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVuZHBvaW50PzogSVZwY0VuZHBvaW50O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBSb3V0ZVRhcmdldFByb3BzKSB7XG4gICAgaWYgKFxuICAgICAgKHByb3BzLmdhdGV3YXkgJiYgcHJvcHMuZW5kcG9pbnQpIHx8XG4gICAgICAoIXByb3BzLmdhdGV3YXkgJiYgIXByb3BzLmVuZHBvaW50KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkV4YWN0bHkgb25lIG9mIGBnYXRld2F5YCBvciBgZW5kcG9pbnRgIG11c3QgYmUgc3BlY2lmaWVkLlwiLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nYXRld2F5ID0gcHJvcHMuZ2F0ZXdheTtcbiAgICAgIHRoaXMuZW5kcG9pbnQgPSBwcm9wcy5lbmRwb2ludDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlIGZvciB0aGUgcm91dGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlVGFibGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElQdjQgb3IgSVB2NiBDSURSIGJsb2NrIHVzZWQgZm9yIHRoZSBkZXN0aW5hdGlvbiBtYXRjaC5cbiAgICpcbiAgICogUm91dGluZyBkZWNpc2lvbnMgYXJlIGJhc2VkIG9uIHRoZSBtb3N0IHNwZWNpZmljIG1hdGNoLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRPdXRwdXRzIHwgVnBjRW5kcG9pbnRPdXRwdXRzO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSB0byBkZWZpbmUgYSByb3V0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUm91dGVWMiBleHRlbmRzIElBd3NDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIG91dHB1dHMgb2YgdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVPdXRwdXRzOiBSb3V0ZU91dHB1dHM7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlIGZvciB0aGUgcm91dGUuXG4gICAqIEBhdHRyaWJ1dGUgcm91dGVUYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICogVE9ETzogTG9vayBmb3Igc3Ryb25nIElQIHR5cGUgaW1wbGVtZW50YXRpb24gaGVyZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRUeXBlO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGEgcm91dGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlIGZvciB0aGUgcm91dGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGUgcm91dGVUYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJvdXRlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHJvdXRlIHdpdGggYWRkZWQgZnVuY3Rpb25hbGl0eS5cbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6Um91dGVcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSBpbXBsZW1lbnRzIElSb3V0ZVYyIHtcbiAgcHVibGljIGdldCByb3V0ZU91dHB1dHMoKTogUm91dGVPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVUYWJsZTogdGhpcy5yb3V0ZVRhYmxlLnJvdXRlVGFibGVJZCxcbiAgICAgIGRlc3RpbmF0aW9uOiB0aGlzLmRlc3RpbmF0aW9uLFxuICAgICAgdGFyZ2V0OiB0aGlzLnRhcmdldC5lbmRwb2ludFxuICAgICAgICA/IHRoaXMudGFyZ2V0LmVuZHBvaW50LnZwY0VuZHBvaW50T3V0cHV0c1xuICAgICAgICA6IHRoaXMudGFyZ2V0LmdhdGV3YXkhLnJvdXRlVGFyZ2V0T3V0cHV0cyxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZU91dHB1dHM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0OiBSb3V0ZVRhcmdldFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSByb3V0ZSB0YWJsZSBmb3IgdGhlIHJvdXRlLlxuICAgKiBAYXR0cmlidXRlIHJvdXRlVGFibGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZVRhYmxlOiBJUm91dGVUYWJsZTtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHRoZSByb3V0ZSBpcyB0YXJnZXRpbmdcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXRSb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlPzogdGZSb3V0ZS5Sb3V0ZTtcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gY2lkciBibG9jayBmb3IgaXB2NlxuICAgKi9cbiAgcHJpdmF0ZSBkZXN0aW5hdGlvbklwdjZDaWRyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXN0aW5hdGlvbiBjaWRyIGJsb2NrIGZvciBpcHY0XG4gICAqL1xuICBwcml2YXRlIGRlc3RpbmF0aW9uSXB2NENpZHI/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJvdXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy50YXJnZXQgPSBwcm9wcy50YXJnZXQ7XG4gICAgdGhpcy5yb3V0ZVRhYmxlID0gcHJvcHMucm91dGVUYWJsZTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uID0gcHJvcHMuZGVzdGluYXRpb247XG4gICAgY29uc3QgaXNEZXN0aW5hdGlvbklwdjQgPSBOZXR3b3JrVXRpbHMudmFsaWRJcChwcm9wcy5kZXN0aW5hdGlvbik7XG4gICAgaWYgKCFpc0Rlc3RpbmF0aW9uSXB2NCkge1xuICAgICAgLy9UT0RPIFZhbGlkYXRlIGZvciBJUHY2IENJRFIgcmFuZ2VcbiAgICAgIHRoaXMuZGVzdGluYXRpb25JcHY2Q2lkciA9IHByb3BzLmRlc3RpbmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uSXB2NENpZHIgPSBwcm9wcy5kZXN0aW5hdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnRhcmdldC5nYXRld2F5Py5yb3V0ZXJUeXBlID09PVxuICAgICAgICBSb3V0ZXJUeXBlLkVHUkVTU19PTkxZX0lOVEVSTkVUX0dBVEVXQVkgJiZcbiAgICAgIGlzRGVzdGluYXRpb25JcHY0XG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRWdyZXNzIG9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBkb2VzIG5vdCBzdXBwb3J0IElQdjQgcm91dGluZ1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy50YXJnZXRSb3V0ZXJUeXBlID0gdGhpcy50YXJnZXQuZ2F0ZXdheVxuICAgICAgPyB0aGlzLnRhcmdldC5nYXRld2F5LnJvdXRlclR5cGVcbiAgICAgIDogUm91dGVyVHlwZS5WUENfRU5EUE9JTlQ7XG4gICAgLy8gR2F0ZXdheSBnZW5lcmF0ZXMgcm91dGUgYXV0b21hdGljYWxseSB2aWEgaXRzIFJvdXRlVGFibGUsIHRodXMgd2UgZG9uJ3QgbmVlZCB0byBnZW5lcmF0ZSB0aGUgcmVzb3VyY2UgZm9yIGl0XG4gICAgaWYgKCEodGhpcy50YXJnZXQuZW5kcG9pbnQgaW5zdGFuY2VvZiBHYXRld2F5VnBjRW5kcG9pbnQpKSB7XG4gICAgICB0aGlzLnJlc291cmNlID0gbmV3IHRmUm91dGUuUm91dGUodGhpcywgXCJSb3V0ZVwiLCB7XG4gICAgICAgIHJvdXRlVGFibGVJZDogdGhpcy5yb3V0ZVRhYmxlLnJvdXRlVGFibGVJZCxcbiAgICAgICAgZGVzdGluYXRpb25DaWRyQmxvY2s6IHRoaXMuZGVzdGluYXRpb25JcHY0Q2lkcixcbiAgICAgICAgZGVzdGluYXRpb25JcHY2Q2lkckJsb2NrOiB0aGlzLmRlc3RpbmF0aW9uSXB2NkNpZHIsXG4gICAgICAgIFtyb3V0ZXJUeXBlVG9Qcm9wTmFtZSh0aGlzLnRhcmdldFJvdXRlclR5cGUpXTogdGhpcy50YXJnZXQuZ2F0ZXdheVxuICAgICAgICAgID8gdGhpcy50YXJnZXQuZ2F0ZXdheS5yb3V0ZXJUYXJnZXRJZFxuICAgICAgICAgIDogdGhpcy50YXJnZXQuZW5kcG9pbnRcbiAgICAgICAgICAgID8gdGhpcy50YXJnZXQuZW5kcG9pbnQudnBjRW5kcG9pbnRJZFxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuXG4gICAgLy9DcmVhdGUgYSByb3V0ZSBvbmx5IGFmdGVyIHRhcmdldCBnYXRld2F5IG9yIGVuZHBvaW50IGlzIGNyZWF0ZWRcbiAgICBpZiAodGhpcy50YXJnZXQuZ2F0ZXdheSkge1xuICAgICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy50YXJnZXQuZ2F0ZXdheSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRhcmdldC5lbmRwb2ludCkge1xuICAgICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy50YXJnZXQuZW5kcG9pbnQpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGEgcm91dGUgdGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVUYWJsZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjVjI7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSByb3V0ZSB0YWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm92aXNpb25lZCB3aXRob3V0IGEgcm91dGUgdGFibGUgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJvdXRlIHRhYmxlIGZvciB0aGUgc3BlY2lmaWVkIFZQQ1xuICogQHJlc291cmNlIGF3c19yb3V0ZV90YWJsZVxuICovXG5leHBvcnQgY2xhc3MgUm91dGVUYWJsZSBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJUm91dGVUYWJsZSB7XG4gIHB1YmxpYyBnZXQgcm91dGVUYWJsZU91dHB1dHMoKTogUm91dGVUYWJsZU91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICByb3V0ZVRhYmxlSWQ6IHRoaXMucm91dGVUYWJsZUlkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJvdXRlVGFibGVPdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlVGFibGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgdGFibGUgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiB0ZlJvdXRlVGFibGUuUm91dGVUYWJsZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUm91dGVUYWJsZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgdGZSb3V0ZVRhYmxlLlJvdXRlVGFibGUodGhpcywgXCJSb3V0ZVRhYmxlXCIsIHtcbiAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgfSk7XG4gICAgaWYgKHByb3BzLnJvdXRlVGFibGVOYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMucm91dGVUYWJsZU5hbWUpO1xuICAgIH1cbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5yZXNvdXJjZTtcblxuICAgIHRoaXMucm91dGVUYWJsZUlkID0gdGhpcy5yZXNvdXJjZS5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGN1c3RvbSByb3V0ZSB0byB0aGUgcm91dGUgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBkZXN0aW5hdGlvbiBUaGUgSVB2NCBvciBJUHY2IENJRFIgYmxvY2sgdXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIG1hdGNoLlxuICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICogQHBhcmFtIHJvdXRlTmFtZSBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUuXG4gICAqL1xuICBwdWJsaWMgYWRkUm91dGUoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBkZXN0aW5hdGlvbjogc3RyaW5nLFxuICAgIHRhcmdldDogUm91dGVUYXJnZXRUeXBlLFxuICAgIHJvdXRlTmFtZT86IHN0cmluZyxcbiAgKSB7XG4gICAgbmV3IFJvdXRlKHRoaXMsIGlkLCB7XG4gICAgICByb3V0ZVRhYmxlOiB0aGlzLFxuICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByb3V0ZU5hbWU6IHJvdXRlTmFtZSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIGludmVyc2Ugb2ZcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLXByb3ZpZGVyLWF3cy9ibG9iL3Y1Ljg3LjAvaW50ZXJuYWwvc2VydmljZS9lYzIvdnBjX3JvdXRlLmdvI0wyMTktTDIzOVxuICovXG5mdW5jdGlvbiByb3V0ZXJUeXBlVG9Qcm9wTmFtZShyb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlKSB7XG4gIGNvbnN0IGxvb2t1cE1hcDogUmVjb3JkPFJvdXRlclR5cGUsIGtleW9mIHRmUm91dGUuUm91dGVDb25maWc+ID0ge1xuICAgIFtSb3V0ZXJUeXBlLkNBUlJJRVJfR0FURVdBWV06IFwiY2FycmllckdhdGV3YXlJZFwiLFxuICAgIFtSb3V0ZXJUeXBlLkVHUkVTU19PTkxZX0lOVEVSTkVUX0dBVEVXQVldOiBcImVncmVzc09ubHlHYXRld2F5SWRcIixcbiAgICBbUm91dGVyVHlwZS5HQVRFV0FZXTogXCJnYXRld2F5SWRcIixcbiAgICAvLyB0ZXJyYWZvcm0tcHJvdmlkZXItYXdzIGlzIG1pc3Npbmcgc3dpdGNoIGNhc2UgZm9yIEluc3RhbmNlSWRcbiAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVJvdXRlLmh0bWxcbiAgICAvLyBbUm91dGVyVHlwZS5JTlNUQU5DRV06IFwiaW5zdGFuY2VJZFwiLFxuICAgIFtSb3V0ZXJUeXBlLkxPQ0FMX0dBVEVXQVldOiBcImxvY2FsR2F0ZXdheUlkXCIsXG4gICAgW1JvdXRlclR5cGUuTkFUX0dBVEVXQVldOiBcIm5hdEdhdGV3YXlJZFwiLFxuICAgIFtSb3V0ZXJUeXBlLk5FVFdPUktfSU5URVJGQUNFXTogXCJuZXR3b3JrSW50ZXJmYWNlSWRcIixcbiAgICBbUm91dGVyVHlwZS5UUkFOU0lUX0dBVEVXQVldOiBcInRyYW5zaXRHYXRld2F5SWRcIixcbiAgICBbUm91dGVyVHlwZS5WUENfUEVFUklOR19DT05ORUNUSU9OXTogXCJ2cGNQZWVyaW5nQ29ubmVjdGlvbklkXCIsXG4gICAgW1JvdXRlclR5cGUuVlBDX0VORFBPSU5UXTogXCJ2cGNFbmRwb2ludElkXCIsXG4gICAgW1JvdXRlclR5cGUuQ09SRV9ORVRXT1JLXTogXCJjb3JlTmV0d29ya0FyblwiLFxuICB9O1xuICByZXR1cm4gbG9va3VwTWFwW3JvdXRlclR5cGVdO1xufVxuIl19
470
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0RkFBNEY7QUFFNUYsc0RBWTZCO0FBQzdCLGlDQUFvQztBQUVwQywrQkFBbUU7QUFDbkUsaURBSXdCO0FBRXhCLG9EQUkwQjtBQUMxQiw4Q0FBOEM7QUFDOUMsMENBQW1DO0FBQ25DLHdDQUF3QztBQUN4Qyx5Q0FBOEM7QUFDOUMsK0NBQXdEO0FBSXhEOzs7O0dBSUc7QUFDSCxJQUFZLG1CQVNYO0FBVEQsV0FBWSxtQkFBbUI7SUFDN0I7O09BRUc7SUFDSCx3Q0FBaUIsQ0FBQTtJQUNqQjs7T0FFRztJQUNILDBDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFUVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQVM5QjtBQXNORDs7R0FFRztBQUNILE1BQU0sUUFBUSxHQUFXLE1BQU0sQ0FBQztBQUVoQzs7O0dBR0c7QUFDSCxNQUFhLHlCQUNYLFNBQVEsZ0NBQWdCO0lBR3hCLElBQVcsa0JBQWtCO1FBQzNCLE9BQU87WUFDTCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ3BDLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFnQkQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBcUM7UUFFckMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3hDLGVBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVB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bEQsTUFBTSxTQUFTLEdBQWtEO1FBQy9ELENBQUMsZ0JBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxrQkFBa0I7UUFDaEQsQ0FBQyxnQkFBVSxDQUFDLDRCQUE0QixDQUFDLEVBQUUscUJBQXFCO1FBQ2hFLENBQUMsZ0JBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXO1FBQ2pDLCtEQUErRDtRQUMvRCw4RUFBOEU7UUFDOUUsdUNBQXVDO1FBQ3ZDLENBQUMsZ0JBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxnQkFBZ0I7UUFDNUMsQ0FBQyxnQkFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLGNBQWM7UUFDeEMsQ0FBQyxnQkFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsb0JBQW9CO1FBQ3BELENBQUMsZ0JBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxrQkFBa0I7UUFDaEQsQ0FBQyxnQkFBVSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsd0JBQXdCO1FBQzdELENBQUMsZ0JBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxlQUFlO1FBQzFDLENBQUMsZ0JBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxnQkFBZ0I7S0FDNUMsQ0FBQztJQUNGLE9BQU8sU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9AYXdzLWNkay9hd3MtZWMyLWFscGhhL2xpYi9yb3V0ZS50c1xuXG5pbXBvcnQge1xuICBlaXAgYXMgdGZFaXAsXG4gIGVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkgYXMgdGZFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5LFxuICBpbnRlcm5ldEdhdGV3YXkgYXMgdGZJbnRlcm5ldEdhdGV3YXksXG4gIG5hdEdhdGV3YXkgYXMgdGZOYXRHYXRld2F5LFxuICB2cGNQZWVyaW5nQ29ubmVjdGlvbiBhcyB0ZlZwY1BlZXJpbmdDb25uZWN0aW9uLFxuICByb3V0ZSBhcyB0ZlJvdXRlLFxuICByb3V0ZVRhYmxlIGFzIHRmUm91dGVUYWJsZSxcbiAgdnBuR2F0ZXdheUF0dGFjaG1lbnQgYXMgdGZWcG5HYXRld2F5QXR0YWNobWVudCxcbiAgaW50ZXJuZXRHYXRld2F5QXR0YWNobWVudCBhcyB0ZkludGVybmV0R2F0ZXdheUF0dGFjaG1lbnQsXG4gIHZwbkdhdGV3YXkgYXMgdGZWcG5HYXRld2F5LFxuICB2cG5HYXRld2F5Um91dGVQcm9wYWdhdGlvbiBhcyB0ZlZwbkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uLFxufSBmcm9tIFwiQGNka3RuL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMgfSBmcm9tIFwiY2RrdG5cIjtcbmltcG9ydCB7IENvbnN0cnVjdCwgSURlcGVuZGFibGUgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSVJvdXRlVGFibGUsIFJvdXRlclR5cGUsIFJvdXRlVGFibGVPdXRwdXRzIH0gZnJvbSBcIi4vdnBjXCI7XG5pbXBvcnQge1xuICBHYXRld2F5VnBjRW5kcG9pbnQsXG4gIElWcGNFbmRwb2ludCxcbiAgVnBjRW5kcG9pbnRPdXRwdXRzLFxufSBmcm9tIFwiLi92cGMtZW5kcG9pbnRcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCI7XG5pbXBvcnQge1xuICBBd3NDb25zdHJ1Y3RCYXNlLFxuICBBd3NDb25zdHJ1Y3RQcm9wcyxcbiAgSUF3c0NvbnN0cnVjdCxcbn0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbi8vIFRPRE86IFVzZSBUYWdNYW5hZ2VyIGFuZCB0YWctYXNwZWN0IGluc3RlYWRcbmltcG9ydCB7IFRhZ3MgfSBmcm9tIFwiLi4vYXdzLXRhZ3NcIjtcbi8vIGltcG9ydCB7IFRhZ3MgfSBmcm9tIFwiLi4vdGFnLWFzcGVjdFwiO1xuaW1wb3J0IHsgYWxsUm91dGVUYWJsZUlkcyB9IGZyb20gXCIuL2VjMi11dGlsXCI7XG5pbXBvcnQgeyBOZXR3b3JrVXRpbHMsIENpZHJCbG9jayB9IGZyb20gXCIuL2VjMi11dGlsLXYyXCI7XG5pbXBvcnQgeyBJU3VibmV0VjIgfSBmcm9tIFwiLi9zdWJuZXQtdjJcIjtcbmltcG9ydCB7IElWcGNWMiwgVlBOR2F0ZXdheVYyT3B0aW9ucyB9IGZyb20gXCIuL3ZwYy12Mi1iYXNlXCI7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIE5BVCBnYXRld2F5IHN1cHBvcnRzIHB1YmxpYyBvciBwcml2YXRlIGNvbm5lY3Rpdml0eS5cbiAqIFRoZSBkZWZhdWx0IGlzIHB1YmxpYyBjb25uZWN0aXZpdHkuXG4gKiBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItbmF0Z2F0ZXdheS5odG1sI2Nmbi1lYzItbmF0Z2F0ZXdheS1jb25uZWN0aXZpdHl0eXBlXG4gKi9cbmV4cG9ydCBlbnVtIE5hdENvbm5lY3Rpdml0eVR5cGUge1xuICAvKipcbiAgICogU2V0cyBDb25uZWN0aXZpdHkgdHlwZSB0byBQVUJMSUNcbiAgICovXG4gIFBVQkxJQyA9IFwicHVibGljXCIsXG4gIC8qKlxuICAgKiBTZXRzIENvbm5lY3Rpdml0eSB0eXBlIHRvIFBSSVZBVEVcbiAgICovXG4gIFBSSVZBVEUgPSBcInByaXZhdGVcIixcbn1cblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlVGFyZ2V0T3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiByb3V0ZXIgdXNlZCBpbiB0aGUgcm91dGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgdG8gZGVmaW5lIGEgcm91dGluZyB0YXJnZXQsIHN1Y2ggYXMgYW5cbiAqIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkgb3IgVlBDIGVuZHBvaW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSb3V0ZVRhcmdldCBleHRlbmRzIElEZXBlbmRhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSBvdXRwdXRzIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhcmdldE91dHB1dHM6IFJvdXRlVGFyZ2V0T3V0cHV0cztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGFuIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWdyZXNzT25seUludGVybmV0R2F0ZXdheVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJlc291cmNlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGFuIGludGVybmV0IGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJuZXRHYXRld2F5UHJvcHMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgaW50ZXJuZXQgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgaW50ZXJuZXQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm92aXNpb25lZCB3aXRob3V0IGEgcmVzb3VyY2UgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJuZXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIFZQTiBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZQTkdhdGV3YXlWMlByb3BzXG4gIGV4dGVuZHMgVlBOR2F0ZXdheVYyT3B0aW9ucyxcbiAgICBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQyBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBWUE4gZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gZGVmaW5lIGEgTkFUIGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmF0R2F0ZXdheU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHN1Ym5ldCBpbiB3aGljaCB0aGUgTkFUIGdhdGV3YXkgaXMgbG9jYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldDogSVN1Ym5ldFYyO1xuXG4gIC8qKlxuICAgKiBBbGxvY2F0aW9uSUQgb2YgRWxhc3RpYyBJUCBhZGRyZXNzIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIE5BVCBnYXRld2F5LiBUaGlzIHByb3BlcnR5IGlzIHJlcXVpcmVkIGZvciBhIHB1YmxpYyBOQVRcbiAgICogZ2F0ZXdheSBhbmQgY2Fubm90IGJlIHNwZWNpZmllZCB3aXRoIGEgcHJpdmF0ZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdHRyLmFsbG9jYXRpb25JRCBvZiBhIG5ldyBFbGFzdGljIElQIGNyZWF0ZWQgYnkgZGVmYXVsdFxuICAgKiAvL1RPRE86IEFERCBMMiBmb3IgZWxhc3RpYyBpcFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb2NhdGlvbklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgTkFUIGdhdGV3YXkgc3VwcG9ydHMgcHVibGljIG9yIHByaXZhdGUgY29ubmVjdGl2aXR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBOYXRDb25uZWN0aXZpdHlUeXBlLlB1YmxpY1xuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGl2aXR5VHlwZT86IE5hdENvbm5lY3Rpdml0eVR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgYmVmb3JlIGZvcmNpYmx5IHJlbGVhc2luZyB0aGVcbiAgICogSVAgYWRkcmVzc2VzIGlmIGNvbm5lY3Rpb25zIGFyZSBzdGlsbCBpbiBwcm9ncmVzcy5cbiAgICpcbiAgICogQGRlZmF1bHQgMzUwc2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4RHJhaW5EdXJhdGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpdmF0ZSBJUHY0IGFkZHJlc3MgdG8gYXNzaWduIHRvIHRoZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBhbiBhZGRyZXNzLCBhIHByaXZhdGUgSVB2NCBhZGRyZXNzIHdpbGwgYmUgYXV0b21hdGljYWxseSBhc3NpZ25lZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVJcEFkZHJlc3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlY29uZGFyeSBFSVAgYWxsb2NhdGlvbiBJRHMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1uYXQtZ2F0ZXdheS5odG1sI25hdC1nYXRld2F5LWNyZWF0aW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2Vjb25kYXJ5IGFsbG9jYXRpb24gSURzIGF0dGFjaGVkIHRvIE5BVEdXXG4gICAqXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlBbGxvY2F0aW9uSWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kYXJ5IHByaXZhdGUgSVB2NCBhZGRyZXNzZXMgeW91XG4gICAqIHdhbnQgdG8gYXNzaWduIHRvIHRoZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogYFNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3NDb3VudGAgYW5kIGBTZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzZXNgIGNhbm5vdCBiZVxuICAgKiBzZXQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLW5hdC1nYXRld2F5Lmh0bWwjbmF0LWdhdGV3YXktY3JlYXRpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzZWNvbmRhcnkgYWxsb2NhdGlvbiBJRHMgYXNzb2NpYXRlZCB3aXRoIE5BVEdXXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNlY29uZGFyeSBwcml2YXRlIElQdjQgYWRkcmVzc2VzLlxuICAgKlxuICAgKiBgU2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc0NvdW50YCBhbmQgYFNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3Nlc2AgY2Fubm90IGJlXG4gICAqIHNldCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtbmF0LWdhdGV3YXkuaHRtbCNuYXQtZ2F0ZXdheS1jcmVhdGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHNlY29uZGFyeSBwcml2YXRlIElwQWRkcmVzc2VzIGFzc29jaWF0ZWQgd2l0aCBOQVRHV1xuICAgKi9cbiAgcmVhZG9ubHkgc2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOQVRHVyBwcm92aXNpb25lZCB3aXRob3V0IGFueSBuYW1lXG4gICAqL1xuICByZWFkb25seSBuYXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIE5BVCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdEdhdGV3YXlQcm9wcyBleHRlbmRzIE5hdEdhdGV3YXlPcHRpb25zLCBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQyBpbiB3aGljaCB0aGUgTkFUIGdhdGV3YXkgaXMgbG9jYXRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBlbGFzdGljIGlwIGFzc29jaWF0ZWQsIHJlcXVpcmVkIGluIGNhc2Ugb2YgcHVibGljIGNvbm5lY3Rpdml0eSBpZiBgQWxsb2NhdGlvbklkYCBpcyBub3QgZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjPzogSVZwY1YyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gZGVmaW5lIGEgVlBDIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWUENQZWVyaW5nQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIFZQQyB0aGF0IGlzIGFjY2VwdGluZyB0aGUgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXB0b3JWcGM6IElWcGNWMjtcblxuICAvLyBUT0RPOiBoYW5kbGUgY3Jvc3NBY2NvdW50IFRGIFByb3ZpZGVyIGZvciB2cGNfcGVlcmluZ19jb25uZWN0aW9uX2FjY2VwdGVyXG4gIC8vIC8qKlxuICAvLyAgKiBUaGUgcm9sZSBhcm4gY3JlYXRlZCBpbiB0aGUgYWNjZXB0b3IgYWNjb3VudC5cbiAgLy8gICpcbiAgLy8gICogQGRlZmF1bHQgLSBubyBwZWVyUm9sZUFybiBuZWVkZWQgaWYgbm90IGNyb3NzIGFjY291bnQgY29ubmVjdGlvblxuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgcGVlclJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcGVlcmluZyBjb25uZWN0aW9uIHByb3Zpc2lvbmVkIHdpdGhvdXQgYW55IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHZwY1BlZXJpbmdDb25uZWN0aW9uTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBDUGVlcmluZ0Nvbm5lY3Rpb25Qcm9wcyBleHRlbmRzIFZQQ1BlZXJpbmdDb25uZWN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgVlBDIHRoYXQgaXMgcmVxdWVzdGluZyB0aGUgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdG9yVnBjOiBJVnBjVjI7XG59XG5cbi8qKlxuICogTmFtZSB0YWcgY29uc3RhbnRcbiAqL1xuY29uc3QgTkFNRV9UQUc6IHN0cmluZyA9IFwiTmFtZVwiO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheVxuICogQHJlc291cmNlIGF3c19lZ3Jlc3Nfb25seV9pbnRlcm5ldF9nYXRld2F5XG4gKi9cbmV4cG9ydCBjbGFzcyBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5XG4gIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZVxuICBpbXBsZW1lbnRzIElSb3V0ZVRhcmdldFxue1xuICBwdWJsaWMgZ2V0IHJvdXRlVGFyZ2V0T3V0cHV0cygpOiBSb3V0ZVRhcmdldE91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICByb3V0ZXJUeXBlOiB0aGlzLnJvdXRlclR5cGUsXG4gICAgICByb3V0ZXJUYXJnZXRJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZVRhcmdldE91dHB1dHM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiB0ZkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkuRWdyZXNzT25seUludGVybmV0R2F0ZXdheTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmIChwcm9wcy5lZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzLmVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlOYW1lKTtcbiAgICB9XG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5FR1JFU1NfT05MWV9JTlRFUk5FVF9HQVRFV0FZO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyB0ZkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkuRWdyZXNzT25seUludGVybmV0R2F0ZXdheShcbiAgICAgIHRoaXMsXG4gICAgICBcIkVJR1dcIixcbiAgICAgIHtcbiAgICAgICAgdnBjSWQ6IHByb3BzLnZwYy52cGNJZCxcbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5yZXNvdXJjZTtcblxuICAgIHRoaXMucm91dGVyVGFyZ2V0SWQgPSB0aGlzLnJlc291cmNlLmlkO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBpbnRlcm5ldCBnYXRld2F5XG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OkludGVybmV0R2F0ZXdheVxuICovXG5leHBvcnQgY2xhc3MgSW50ZXJuZXRHYXRld2F5IGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSBpbXBsZW1lbnRzIElSb3V0ZVRhcmdldCB7XG4gIHB1YmxpYyBnZXQgcm91dGVUYXJnZXRPdXRwdXRzKCk6IFJvdXRlVGFyZ2V0T3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdXRlclR5cGU6IHRoaXMucm91dGVyVHlwZSxcbiAgICAgIHJvdXRlclRhcmdldElkOiB0aGlzLnJvdXRlclRhcmdldElkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJvdXRlVGFyZ2V0T3V0cHV0cztcbiAgfVxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQyBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcm5ldCBnYXRld2F5IENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogdGZJbnRlcm5ldEdhdGV3YXkuSW50ZXJuZXRHYXRld2F5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbnRlcm5ldEdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLkdBVEVXQVk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHRmSW50ZXJuZXRHYXRld2F5LkludGVybmV0R2F0ZXdheSh0aGlzLCBcIklHV1wiLCB7fSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5pZDtcbiAgICB0aGlzLnZwY0lkID0gcHJvcHMudnBjLnZwY0lkO1xuXG4gICAgaWYgKHByb3BzLmludGVybmV0R2F0ZXdheU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy5pbnRlcm5ldEdhdGV3YXlOYW1lKTtcbiAgICB9XG5cbiAgICBuZXcgdGZJbnRlcm5ldEdhdGV3YXlBdHRhY2htZW50LkludGVybmV0R2F0ZXdheUF0dGFjaG1lbnQoXG4gICAgICB0aGlzLFxuICAgICAgXCJHV0F0dGFjaG1lbnRcIixcbiAgICAgIHtcbiAgICAgICAgdnBjSWQ6IHRoaXMudnBjSWQsXG4gICAgICAgIGludGVybmV0R2F0ZXdheUlkOiB0aGlzLnJvdXRlclRhcmdldElkLFxuICAgICAgfSxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5XG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlZQTkdhdGV3YXlcbiAqL1xuZXhwb3J0IGNsYXNzIFZQTkdhdGV3YXlWMiBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuICBwdWJsaWMgZ2V0IHJvdXRlVGFyZ2V0T3V0cHV0cygpOiBSb3V0ZVRhcmdldE91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICByb3V0ZXJUeXBlOiB0aGlzLnJvdXRlclR5cGUsXG4gICAgICByb3V0ZXJUYXJnZXRJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZVRhcmdldE91dHB1dHM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgVlBOIGdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFZQTiBnYXRld2F5IENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogdGZWcG5HYXRld2F5LlZwbkdhdGV3YXk7XG5cbiAgLyoqXG4gICAqIFRoZSBWUE4gR2F0ZXdheSBBdHRhY2htZW50XG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdHRhY2htZW50OiB0ZlZwbkdhdGV3YXlBdHRhY2htZW50LlZwbkdhdGV3YXlBdHRhY2htZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgVlBOIEdhdGV3YXkgUm91dGUgUHJvcGFnYXRpb25cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlUHJvcGFnYXRpb246IHRmVnBuR2F0ZXdheVJvdXRlUHJvcGFnYXRpb24uVnBuR2F0ZXdheVJvdXRlUHJvcGFnYXRpb25bXSA9XG4gICAgW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFZQTkdhdGV3YXlWMlByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgY29uc3QgdnBuR2F0ZXdheU5hbWUgPVxuICAgICAgcHJvcHMudnBuR2F0ZXdheU5hbWUgfHxcbiAgICAgIHRoaXMuc3RhY2sudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgICAgcHJlZml4OiB0aGlzLmdyaWRVVUlELFxuICAgICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLkdBVEVXQVk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHRmVnBuR2F0ZXdheS5WcG5HYXRld2F5KHRoaXMsIFwiSUdXXCIsIHtcbiAgICAgIGFtYXpvblNpZGVBc246XG4gICAgICAgIHByb3BzLmFtYXpvblNpZGVBc24gIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gcHJvcHMuYW1hem9uU2lkZUFzbi50b1N0cmluZygpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5pZDtcblxuICAgIHRoaXMudnBjSWQgPSBwcm9wcy52cGMudnBjSWQ7XG4gICAgdGhpcy5fYXR0YWNobWVudCA9IG5ldyB0ZlZwbkdhdGV3YXlBdHRhY2htZW50LlZwbkdhdGV3YXlBdHRhY2htZW50KFxuICAgICAgdGhpcyxcbiAgICAgIFwiVlBDVlBOR1dcIixcbiAgICAgIHtcbiAgICAgICAgdnBjSWQ6IHRoaXMudnBjSWQsXG4gICAgICAgIHZwbkdhdGV3YXlJZDogdGhpcy5yZXNvdXJjZS5pZCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGlmIChwcm9wcy52cG5HYXRld2F5TmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHZwbkdhdGV3YXlOYW1lKTtcbiAgICB9XG5cbiAgICAvLyBQcm9wYWdhdGUgcm91dGVzIG9uIHJvdXRlIHRhYmxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJpZ2h0IHN1Ym5ldHNcbiAgICBjb25zdCB2cG5Sb3V0ZVByb3BhZ2F0aW9uID0gcHJvcHMudnBuUm91dGVQcm9wYWdhdGlvbiA/PyBbXTtcbiAgICBjb25zdCBzdWJuZXRzID0gdnBuUm91dGVQcm9wYWdhdGlvblxuICAgICAgLm1hcCgocykgPT4gcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMocykuc3VibmV0cylcbiAgICAgIC5mbGF0KCk7XG4gICAgY29uc3Qgcm91dGVUYWJsZUlkcyA9IGFsbFJvdXRlVGFibGVJZHMoc3VibmV0cyk7XG5cbiAgICBpZiAocm91dGVUYWJsZUlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIFwiQGF3cy1jZGs6YXdzLWVjMi1lbHBoYTplbmFibGVWcG5HYXRld2F5VjJcIixcbiAgICAgIEFubm90YXRpb25zLm9mKHNjb3BlKS5hZGRXYXJuaW5nKFxuICAgICAgICBgTm8gc3VibmV0cyBtYXRjaGluZyBzZWxlY3Rpb246ICcke0pTT04uc3RyaW5naWZ5KHZwblJvdXRlUHJvcGFnYXRpb24pfScuIFNlbGVjdCBvdGhlciBzdWJuZXRzIHRvIGFkZCByb3V0ZXMgdG8uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJuZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByb3V0ZVByb3BhZ2F0aW9uID1cbiAgICAgICAgbmV3IHRmVnBuR2F0ZXdheVJvdXRlUHJvcGFnYXRpb24uVnBuR2F0ZXdheVJvdXRlUHJvcGFnYXRpb24oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgUm91dGVQcm9wYWdhdGlvbiR7aX1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJvdXRlVGFibGVJZDogc3VibmV0c1tpXS5yb3V0ZVRhYmxlLnJvdXRlVGFibGVJZCxcbiAgICAgICAgICAgIHZwbkdhdGV3YXlJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAvLyBUaGUgQVdTOjpFQzI6OlZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uIHJlc291cmNlIGNhbm5vdCB1c2UgdGhlIFZQTiBnYXRld2F5XG4gICAgICAvLyB1bnRpbCBpdCBoYXMgc3VjY2Vzc2Z1bGx5IGF0dGFjaGVkIHRvIHRoZSBWUEMuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12cG4tZ2F0ZXdheXJvdXRlcHJvcC5odG1sXG4gICAgICByb3V0ZVByb3BhZ2F0aW9uLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLl9hdHRhY2htZW50KTtcbiAgICAgIHRoaXMuX3JvdXRlUHJvcGFnYXRpb24ucHVzaChyb3V0ZVByb3BhZ2F0aW9uKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV0d29yayBhZGRyZXNzIHRyYW5zbGF0aW9uIChOQVQpIGdhdGV3YXlcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6TmF0R2F0ZXdheVxuICovXG5leHBvcnQgY2xhc3MgTmF0R2F0ZXdheSBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuICBwdWJsaWMgZ2V0IHJvdXRlVGFyZ2V0T3V0cHV0cygpOiBSb3V0ZVRhcmdldE91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICByb3V0ZXJUeXBlOiB0aGlzLnJvdXRlclR5cGUsXG4gICAgICByb3V0ZXJUYXJnZXRJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZVRhcmdldE91dHB1dHM7XG4gIH1cbiAgLyoqXG4gICAqIElkIG9mIHRoZSBOYXRHYXRld2F5XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYXRHYXRld2F5SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBOQVQgZ2F0ZXdheSBzdXBwb3J0cyBwdWJsaWMgb3IgcHJpdmF0ZSBjb25uZWN0aXZpdHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IHB1YmxpY1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpdml0eVR5cGU/OiBOYXRDb25uZWN0aXZpdHlUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJlZm9yZSBmb3JjaWJseSByZWxlYXNpbmcgdGhlXG4gICAqIElQIGFkZHJlc3NlcyBpZiBjb25uZWN0aW9ucyBhcmUgc3RpbGwgaW4gcHJvZ3Jlc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0ICczMCBtaW51dGVzJ1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1heERyYWluRHVyYXRpb24/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIE5BVCBnYXRld2F5IENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogdGZOYXRHYXRld2F5Lk5hdEdhdGV3YXk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5hdEdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLk5BVF9HQVRFV0FZO1xuXG4gICAgdGhpcy5jb25uZWN0aXZpdHlUeXBlID1cbiAgICAgIHByb3BzLmNvbm5lY3Rpdml0eVR5cGUgfHwgTmF0Q29ubmVjdGl2aXR5VHlwZS5QVUJMSUM7XG4gICAgdGhpcy5tYXhEcmFpbkR1cmF0aW9uID0gcHJvcHMubWF4RHJhaW5EdXJhdGlvbjtcblxuICAgIGlmICh0aGlzLmNvbm5lY3Rpdml0eVR5cGUgPT09IE5hdENvbm5lY3Rpdml0eVR5cGUuUFVCTElDKSB7XG4gICAgICBpZiAoIXByb3BzLnZwYyAmJiAhcHJvcHMuYWxsb2NhdGlvbklkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVpdGhlciBwcm92aWRlIHZwYyBvciBhbGxvY2F0aW9uSWRcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLm5hdEdhdGV3YXlOYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHM/Lm5hdEdhdGV3YXlOYW1lKTtcbiAgICB9XG5cbiAgICAvLyBJZiB1c2VyIGRvZXMgbm90IHByb3ZpZGUgRUlQLCBnZW5lcmF0ZSBvbmUgZm9yIHRoZW1cbiAgICBsZXQgYUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuY29ubmVjdGl2aXR5VHlwZSA9PT0gTmF0Q29ubmVjdGl2aXR5VHlwZS5QVUJMSUMpIHtcbiAgICAgIGlmICghcHJvcHMuYWxsb2NhdGlvbklkKSB7XG4gICAgICAgIGNvbnN0IGVpcCA9IG5ldyB0ZkVpcC5FaXAodGhpcywgXCJFSVBcIiwge1xuICAgICAgICAgIGRvbWFpbjogXCJ2cGNcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGFJZCA9IGVpcC5hbGxvY2F0aW9uSWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhSWQgPSBwcm9wcy5hbGxvY2F0aW9uSWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyB0Zk5hdEdhdGV3YXkuTmF0R2F0ZXdheSh0aGlzLCBcIk5BVEdhdGV3YXlcIiwge1xuICAgICAgc3VibmV0SWQ6IHByb3BzLnN1Ym5ldC5zdWJuZXRJZCxcbiAgICAgIGFsbG9jYXRpb25JZDogYUlkLFxuICAgICAgcHJpdmF0ZUlwOiBwcm9wcy5wcml2YXRlSXBBZGRyZXNzLFxuICAgICAgLy8gLi4ucHJvcHMsXG4gICAgICBjb25uZWN0aXZpdHlUeXBlOiBwcm9wcy5jb25uZWN0aXZpdHlUeXBlLFxuICAgICAgc2Vjb25kYXJ5QWxsb2NhdGlvbklkczogcHJvcHMuc2Vjb25kYXJ5QWxsb2NhdGlvbklkcyxcbiAgICAgIHNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3NDb3VudDogcHJvcHMuc2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc0NvdW50LFxuICAgICAgc2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc2VzOiBwcm9wcy5zZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzZXMsXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLW5hdGdhdGV3YXkuaHRtbCNjZm4tZWMyLW5hdGdhdGV3YXktbWF4ZHJhaW5kdXJhdGlvbnNlY29uZHNcbiAgICAgIC8vIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjguMC9kb2NzL3Jlc291cmNlcy9uYXRfZ2F0ZXdheSN0aW1lb3V0c1xuICAgICAgLi4uKHRoaXMubWF4RHJhaW5EdXJhdGlvblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHRpbWVvdXRzOiB7XG4gICAgICAgICAgICAgIGRlbGV0ZTogdGhpcy5tYXhEcmFpbkR1cmF0aW9uLnRvU2Vjb25kcygpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSk7XG4gICAgdGhpcy5uYXRHYXRld2F5SWQgPSB0aGlzLnJlc291cmNlLmlkO1xuXG4gICAgdGhpcy5yb3V0ZXJUYXJnZXRJZCA9IHRoaXMucmVzb3VyY2UuaWQ7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kocHJvcHMuc3VibmV0LmludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQpO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHBlZXJpbmcgY29ubmVjdGlvbiBiZXR3ZWVuIHR3byBWUENzXG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlZQQ1BlZXJpbmdDb25uZWN0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBWUENQZWVyaW5nQ29ubmVjdGlvblxuICBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2VcbiAgaW1wbGVtZW50cyBJUm91dGVUYXJnZXRcbntcbiAgcHVibGljIGdldCByb3V0ZVRhcmdldE91dHB1dHMoKTogUm91dGVUYXJnZXRPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVyVHlwZTogdGhpcy5yb3V0ZXJUeXBlLFxuICAgICAgcm91dGVyVGFyZ2V0SWQ6IHRoaXMucm91dGVyVGFyZ2V0SWQsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVUYXJnZXRPdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiByb3V0ZXIgdXNlZCBpbiB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgcGVlcmluZyBjb25uZWN0aW9uIENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogdGZWcGNQZWVyaW5nQ29ubmVjdGlvbi5WcGNQZWVyaW5nQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVlBDUGVlcmluZ0Nvbm5lY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLlZQQ19QRUVSSU5HX0NPTk5FQ1RJT047XG5cbiAgICAvLyBjb25zdCBpc0Nyb3NzQWNjb3VudCA9XG4gICAgLy8gICBwcm9wcy5yZXF1ZXN0b3JWcGMub3duZXJBY2NvdW50SWQgIT09IHByb3BzLmFjY2VwdG9yVnBjLm93bmVyQWNjb3VudElkO1xuXG4gICAgLy8gaWYgKCFpc0Nyb3NzQWNjb3VudCAmJiBwcm9wcy5wZWVyUm9sZUFybikge1xuICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKFwicGVlclJvbGVBcm4gaXMgbm90IG5lZWRlZCBmb3Igc2FtZSBhY2NvdW50IHBlZXJpbmdcIik7XG4gICAgLy8gfVxuXG4gICAgLy8gaWYgKGlzQ3Jvc3NBY2NvdW50ICYmICFwcm9wcy5wZWVyUm9sZUFybikge1xuICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKFwiQ3Jvc3MgYWNjb3VudCBWUEMgcGVlcmluZyByZXF1aXJlcyBwZWVyUm9sZUFyblwiKTtcbiAgICAvLyB9XG5cbiAgICBjb25zdCBvdmVybGFwID0gdGhpcy52YWxpZGF0ZVZwY0NpZHJPdmVybGFwKFxuICAgICAgcHJvcHMucmVxdWVzdG9yVnBjLFxuICAgICAgcHJvcHMuYWNjZXB0b3JWcGMsXG4gICAgKTtcbiAgICBpZiAob3ZlcmxhcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNJRFIgYmxvY2sgc2hvdWxkIG5vdCBvdmVybGFwIHdpdGggZWFjaCBvdGhlciBmb3IgZXN0YWJsaXNoaW5nIGEgcGVlcmluZyBjb25uZWN0aW9uXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocHJvcHMudnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMudnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHRmVnBjUGVlcmluZ0Nvbm5lY3Rpb24uVnBjUGVlcmluZ0Nvbm5lY3Rpb24oXG4gICAgICB0aGlzLFxuICAgICAgXCJWUENQZWVyaW5nQ29ubmVjdGlvblwiLFxuICAgICAge1xuICAgICAgICB2cGNJZDogcHJvcHMucmVxdWVzdG9yVnBjLnZwY0lkLFxuICAgICAgICBwZWVyVnBjSWQ6IHByb3BzLmFjY2VwdG9yVnBjLnZwY0lkLFxuICAgICAgICBwZWVyT3duZXJJZDogcHJvcHMuYWNjZXB0b3JWcGMub3duZXJBY2NvdW50SWQsXG4gICAgICAgIHBlZXJSZWdpb246IHByb3BzLmFjY2VwdG9yVnBjLnJlZ2lvbiwgLy8gYXV0b0FjY2VwdCBtdXN0IGJlIGZhbHNlXG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSBjcm9zc0FjY291bnQgVEYgUHJvdmlkZXIgZm9yIHZwY19wZWVyaW5nX2Nvbm5lY3Rpb25fYWNjZXB0ZXJcbiAgICAgICAgLy8gcGVlclJvbGVBcm46IGlzQ3Jvc3NBY2NvdW50ID8gcHJvcHMucGVlclJvbGVBcm4gOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICk7XG4gICAgLy8gVE9ETzogQWRkIGF3c192cGNfcGVlcmluZ19jb25uZWN0aW9uX2FjY2VwdGVyIHRvIG1hbmFnZSBBY2NlcHRlciBTaWRlP1xuXG4gICAgdGhpcy5yb3V0ZXJUYXJnZXRJZCA9IHRoaXMucmVzb3VyY2UuaWQ7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGlmIHRoZSBwcm92aWRlZCBJUHY0IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzdWJuZXQgQ0lEUiBibG9ja3Mgd2l0aGluIHRoZSBnaXZlbiBWUEMuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0b3JWcGMgVGhlIFZQQyBvZiB0aGUgcmVxdWVzdG9yLlxuICAgKiBAcGFyYW0gYWNjZXB0b3JWcGMgVGhlIFZQQyBvZiB0aGUgYWNjZXB0b3IuXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIElQdjQgQ0lEUiBibG9jayBvdmVybGFwcyB3aXRoIGVhY2ggb3RoZXIgZm9yIHR3byBWUENzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZwY0NpZHJPdmVybGFwKFxuICAgIHJlcXVlc3RvclZwYzogSVZwY1YyLFxuICAgIGFjY2VwdG9yVnBjOiBJVnBjVjIsXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlcXVlc3RvckNpZHJzID0gW3JlcXVlc3RvclZwYy5pcHY0Q2lkckJsb2NrXTtcbiAgICBjb25zdCBhY2NlcHRvckNpZHJzID0gW2FjY2VwdG9yVnBjLmlwdjRDaWRyQmxvY2tdO1xuXG4gICAgaWYgKHJlcXVlc3RvclZwYy5zZWNvbmRhcnlDaWRyQmxvY2spIHtcbiAgICAgIHJlcXVlc3RvckNpZHJzLnB1c2goXG4gICAgICAgIC4uLnJlcXVlc3RvclZwYy5zZWNvbmRhcnlDaWRyQmxvY2tcbiAgICAgICAgICAubWFwKChibG9jaykgPT4gYmxvY2suY2lkckJsb2NrKVxuICAgICAgICAgIC5maWx0ZXIoKGNpZHIpOiBjaWRyIGlzIHN0cmluZyA9PiBjaWRyICE9PSB1bmRlZmluZWQpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYWNjZXB0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgICBhY2NlcHRvckNpZHJzLnB1c2goXG4gICAgICAgIC4uLmFjY2VwdG9yVnBjLnNlY29uZGFyeUNpZHJCbG9ja1xuICAgICAgICAgIC5tYXAoKGJsb2NrKSA9PiBibG9jay5jaWRyQmxvY2spXG4gICAgICAgICAgLmZpbHRlcigoY2lkcik6IGNpZHIgaXMgc3RyaW5nID0+IGNpZHIgIT09IHVuZGVmaW5lZCksXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVxdWVzdG9yQ2lkciBvZiByZXF1ZXN0b3JDaWRycykge1xuICAgICAgY29uc3QgcmVxdWVzdG9yUmFuZ2UgPSBuZXcgQ2lkckJsb2NrKHJlcXVlc3RvckNpZHIpO1xuICAgICAgY29uc3QgcmVxdWVzdG9ySXBSYW5nZTogW3N0cmluZywgc3RyaW5nXSA9IFtcbiAgICAgICAgcmVxdWVzdG9yUmFuZ2UubWluSXAoKSxcbiAgICAgICAgcmVxdWVzdG9yUmFuZ2UubWF4SXAoKSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgYWNjZXB0b3JDaWRyIG9mIGFjY2VwdG9yQ2lkcnMpIHtcbiAgICAgICAgY29uc3QgYWNjZXB0b3JSYW5nZSA9IG5ldyBDaWRyQmxvY2soYWNjZXB0b3JDaWRyKTtcbiAgICAgICAgY29uc3QgYWNjZXB0b3JJcFJhbmdlOiBbc3RyaW5nLCBzdHJpbmddID0gW1xuICAgICAgICAgIGFjY2VwdG9yUmFuZ2UubWluSXAoKSxcbiAgICAgICAgICBhY2NlcHRvclJhbmdlLm1heElwKCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHJlcXVlc3RvclJhbmdlLnJhbmdlc092ZXJsYXAoYWNjZXB0b3JJcFJhbmdlLCByZXF1ZXN0b3JJcFJhbmdlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgZW5kcG9pbnQgb3IgZ2F0ZXdheSBiZWluZyB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVUYXJnZXRQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSByb3V0ZSB0YXJnZXQuIFRoaXMgaXMgdXNlZCBmb3IgdGFyZ2V0cyBzdWNoIGFzXG4gICAqIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkgb3IgVlBDIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0YXJnZXQgaXMgbm90IHNldCB0byBhIGdhdGV3YXksIGluIHRoaXMgY2FzZSBhbiBlbmRwb2ludCBpcyBuZWVkZWQuXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5PzogSVJvdXRlVGFyZ2V0O1xuXG4gIC8qKlxuICAgKiBUaGUgZW5kcG9pbnQgcm91dGUgdGFyZ2V0LiBUaGlzIGlzIHVzZWQgZm9yIHRhcmdldHMgc3VjaCBhc1xuICAgKiBWUEMgZW5kcG9pbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRhcmdldCBpcyBub3Qgc2V0IHRvIGFuIGVuZHBvaW50LCBpbiB0aGlzIGNhc2UgYSBnYXRld2F5IGlzIG5lZWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVuZHBvaW50PzogSVZwY0VuZHBvaW50O1xufVxuXG4vKipcbiAqIFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlVGFyZ2V0VHlwZSB7XG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSByb3V0ZSB0YXJnZXQuIFRoaXMgaXMgdXNlZCBmb3IgdGFyZ2V0cyBzdWNoIGFzXG4gICAqIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkgb3IgVlBDIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0YXJnZXQgaXMgbm90IHNldCB0byBhIGdhdGV3YXksIGluIHRoaXMgY2FzZSBhbiBlbmRwb2ludCBpcyBuZWVkZWQuXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5PzogSVJvdXRlVGFyZ2V0O1xuXG4gIC8qKlxuICAgKiBUaGUgZW5kcG9pbnQgcm91dGUgdGFyZ2V0LiBUaGlzIGlzIHVzZWQgZm9yIHRhcmdldHMgc3VjaCBhc1xuICAgKiBWUEMgZW5kcG9pbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRhcmdldCBpcyBub3Qgc2V0IHRvIGFuIGVuZHBvaW50LCBpbiB0aGlzIGNhc2UgYSBnYXRld2F5IGlzIG5lZWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVuZHBvaW50PzogSVZwY0VuZHBvaW50O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBSb3V0ZVRhcmdldFByb3BzKSB7XG4gICAgaWYgKFxuICAgICAgKHByb3BzLmdhdGV3YXkgJiYgcHJvcHMuZW5kcG9pbnQpIHx8XG4gICAgICAoIXByb3BzLmdhdGV3YXkgJiYgIXByb3BzLmVuZHBvaW50KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkV4YWN0bHkgb25lIG9mIGBnYXRld2F5YCBvciBgZW5kcG9pbnRgIG11c3QgYmUgc3BlY2lmaWVkLlwiLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nYXRld2F5ID0gcHJvcHMuZ2F0ZXdheTtcbiAgICAgIHRoaXMuZW5kcG9pbnQgPSBwcm9wcy5lbmRwb2ludDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlIGZvciB0aGUgcm91dGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlVGFibGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElQdjQgb3IgSVB2NiBDSURSIGJsb2NrIHVzZWQgZm9yIHRoZSBkZXN0aW5hdGlvbiBtYXRjaC5cbiAgICpcbiAgICogUm91dGluZyBkZWNpc2lvbnMgYXJlIGJhc2VkIG9uIHRoZSBtb3N0IHNwZWNpZmljIG1hdGNoLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRPdXRwdXRzIHwgVnBjRW5kcG9pbnRPdXRwdXRzO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSB0byBkZWZpbmUgYSByb3V0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUm91dGVWMiBleHRlbmRzIElBd3NDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIG91dHB1dHMgb2YgdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVPdXRwdXRzOiBSb3V0ZU91dHB1dHM7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlIGZvciB0aGUgcm91dGUuXG4gICAqIEBhdHRyaWJ1dGUgcm91dGVUYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICogVE9ETzogTG9vayBmb3Igc3Ryb25nIElQIHR5cGUgaW1wbGVtZW50YXRpb24gaGVyZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRUeXBlO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGEgcm91dGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlIGZvciB0aGUgcm91dGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGUgcm91dGVUYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJvdXRlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHJvdXRlIHdpdGggYWRkZWQgZnVuY3Rpb25hbGl0eS5cbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6Um91dGVcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSBpbXBsZW1lbnRzIElSb3V0ZVYyIHtcbiAgcHVibGljIGdldCByb3V0ZU91dHB1dHMoKTogUm91dGVPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVUYWJsZTogdGhpcy5yb3V0ZVRhYmxlLnJvdXRlVGFibGVJZCxcbiAgICAgIGRlc3RpbmF0aW9uOiB0aGlzLmRlc3RpbmF0aW9uLFxuICAgICAgdGFyZ2V0OiB0aGlzLnRhcmdldC5lbmRwb2ludFxuICAgICAgICA/IHRoaXMudGFyZ2V0LmVuZHBvaW50LnZwY0VuZHBvaW50T3V0cHV0c1xuICAgICAgICA6IHRoaXMudGFyZ2V0LmdhdGV3YXkhLnJvdXRlVGFyZ2V0T3V0cHV0cyxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZU91dHB1dHM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0OiBSb3V0ZVRhcmdldFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSByb3V0ZSB0YWJsZSBmb3IgdGhlIHJvdXRlLlxuICAgKiBAYXR0cmlidXRlIHJvdXRlVGFibGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZVRhYmxlOiBJUm91dGVUYWJsZTtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHRoZSByb3V0ZSBpcyB0YXJnZXRpbmdcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXRSb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlPzogdGZSb3V0ZS5Sb3V0ZTtcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gY2lkciBibG9jayBmb3IgaXB2NlxuICAgKi9cbiAgcHJpdmF0ZSBkZXN0aW5hdGlvbklwdjZDaWRyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXN0aW5hdGlvbiBjaWRyIGJsb2NrIGZvciBpcHY0XG4gICAqL1xuICBwcml2YXRlIGRlc3RpbmF0aW9uSXB2NENpZHI/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJvdXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy50YXJnZXQgPSBwcm9wcy50YXJnZXQ7XG4gICAgdGhpcy5yb3V0ZVRhYmxlID0gcHJvcHMucm91dGVUYWJsZTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uID0gcHJvcHMuZGVzdGluYXRpb247XG4gICAgY29uc3QgaXNEZXN0aW5hdGlvbklwdjQgPSBOZXR3b3JrVXRpbHMudmFsaWRJcChwcm9wcy5kZXN0aW5hdGlvbik7XG4gICAgaWYgKCFpc0Rlc3RpbmF0aW9uSXB2NCkge1xuICAgICAgLy9UT0RPIFZhbGlkYXRlIGZvciBJUHY2IENJRFIgcmFuZ2VcbiAgICAgIHRoaXMuZGVzdGluYXRpb25JcHY2Q2lkciA9IHByb3BzLmRlc3RpbmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uSXB2NENpZHIgPSBwcm9wcy5kZXN0aW5hdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnRhcmdldC5nYXRld2F5Py5yb3V0ZXJUeXBlID09PVxuICAgICAgICBSb3V0ZXJUeXBlLkVHUkVTU19PTkxZX0lOVEVSTkVUX0dBVEVXQVkgJiZcbiAgICAgIGlzRGVzdGluYXRpb25JcHY0XG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRWdyZXNzIG9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBkb2VzIG5vdCBzdXBwb3J0IElQdjQgcm91dGluZ1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy50YXJnZXRSb3V0ZXJUeXBlID0gdGhpcy50YXJnZXQuZ2F0ZXdheVxuICAgICAgPyB0aGlzLnRhcmdldC5nYXRld2F5LnJvdXRlclR5cGVcbiAgICAgIDogUm91dGVyVHlwZS5WUENfRU5EUE9JTlQ7XG4gICAgLy8gR2F0ZXdheSBnZW5lcmF0ZXMgcm91dGUgYXV0b21hdGljYWxseSB2aWEgaXRzIFJvdXRlVGFibGUsIHRodXMgd2UgZG9uJ3QgbmVlZCB0byBnZW5lcmF0ZSB0aGUgcmVzb3VyY2UgZm9yIGl0XG4gICAgaWYgKCEodGhpcy50YXJnZXQuZW5kcG9pbnQgaW5zdGFuY2VvZiBHYXRld2F5VnBjRW5kcG9pbnQpKSB7XG4gICAgICB0aGlzLnJlc291cmNlID0gbmV3IHRmUm91dGUuUm91dGUodGhpcywgXCJSb3V0ZVwiLCB7XG4gICAgICAgIHJvdXRlVGFibGVJZDogdGhpcy5yb3V0ZVRhYmxlLnJvdXRlVGFibGVJZCxcbiAgICAgICAgZGVzdGluYXRpb25DaWRyQmxvY2s6IHRoaXMuZGVzdGluYXRpb25JcHY0Q2lkcixcbiAgICAgICAgZGVzdGluYXRpb25JcHY2Q2lkckJsb2NrOiB0aGlzLmRlc3RpbmF0aW9uSXB2NkNpZHIsXG4gICAgICAgIFtyb3V0ZXJUeXBlVG9Qcm9wTmFtZSh0aGlzLnRhcmdldFJvdXRlclR5cGUpXTogdGhpcy50YXJnZXQuZ2F0ZXdheVxuICAgICAgICAgID8gdGhpcy50YXJnZXQuZ2F0ZXdheS5yb3V0ZXJUYXJnZXRJZFxuICAgICAgICAgIDogdGhpcy50YXJnZXQuZW5kcG9pbnRcbiAgICAgICAgICAgID8gdGhpcy50YXJnZXQuZW5kcG9pbnQudnBjRW5kcG9pbnRJZFxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuXG4gICAgLy9DcmVhdGUgYSByb3V0ZSBvbmx5IGFmdGVyIHRhcmdldCBnYXRld2F5IG9yIGVuZHBvaW50IGlzIGNyZWF0ZWRcbiAgICBpZiAodGhpcy50YXJnZXQuZ2F0ZXdheSkge1xuICAgICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy50YXJnZXQuZ2F0ZXdheSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRhcmdldC5lbmRwb2ludCkge1xuICAgICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy50YXJnZXQuZW5kcG9pbnQpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGEgcm91dGUgdGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVUYWJsZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjVjI7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSByb3V0ZSB0YWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm92aXNpb25lZCB3aXRob3V0IGEgcm91dGUgdGFibGUgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJvdXRlIHRhYmxlIGZvciB0aGUgc3BlY2lmaWVkIFZQQ1xuICogQHJlc291cmNlIGF3c19yb3V0ZV90YWJsZVxuICovXG5leHBvcnQgY2xhc3MgUm91dGVUYWJsZSBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJUm91dGVUYWJsZSB7XG4gIHB1YmxpYyBnZXQgcm91dGVUYWJsZU91dHB1dHMoKTogUm91dGVUYWJsZU91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICByb3V0ZVRhYmxlSWQ6IHRoaXMucm91dGVUYWJsZUlkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJvdXRlVGFibGVPdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlVGFibGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgdGFibGUgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiB0ZlJvdXRlVGFibGUuUm91dGVUYWJsZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUm91dGVUYWJsZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgdGZSb3V0ZVRhYmxlLlJvdXRlVGFibGUodGhpcywgXCJSb3V0ZVRhYmxlXCIsIHtcbiAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgfSk7XG4gICAgaWYgKHByb3BzLnJvdXRlVGFibGVOYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMucm91dGVUYWJsZU5hbWUpO1xuICAgIH1cbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5yZXNvdXJjZTtcblxuICAgIHRoaXMucm91dGVUYWJsZUlkID0gdGhpcy5yZXNvdXJjZS5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGN1c3RvbSByb3V0ZSB0byB0aGUgcm91dGUgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBkZXN0aW5hdGlvbiBUaGUgSVB2NCBvciBJUHY2IENJRFIgYmxvY2sgdXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIG1hdGNoLlxuICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICogQHBhcmFtIHJvdXRlTmFtZSBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUuXG4gICAqL1xuICBwdWJsaWMgYWRkUm91dGUoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBkZXN0aW5hdGlvbjogc3RyaW5nLFxuICAgIHRhcmdldDogUm91dGVUYXJnZXRUeXBlLFxuICAgIHJvdXRlTmFtZT86IHN0cmluZyxcbiAgKSB7XG4gICAgbmV3IFJvdXRlKHRoaXMsIGlkLCB7XG4gICAgICByb3V0ZVRhYmxlOiB0aGlzLFxuICAgICAgZGVzdGluYXRpb246IGRlc3RpbmF0aW9uLFxuICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICByb3V0ZU5hbWU6IHJvdXRlTmFtZSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIGludmVyc2Ugb2ZcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLXByb3ZpZGVyLWF3cy9ibG9iL3Y1Ljg3LjAvaW50ZXJuYWwvc2VydmljZS9lYzIvdnBjX3JvdXRlLmdvI0wyMTktTDIzOVxuICovXG5mdW5jdGlvbiByb3V0ZXJUeXBlVG9Qcm9wTmFtZShyb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlKSB7XG4gIGNvbnN0IGxvb2t1cE1hcDogUmVjb3JkPFJvdXRlclR5cGUsIGtleW9mIHRmUm91dGUuUm91dGVDb25maWc+ID0ge1xuICAgIFtSb3V0ZXJUeXBlLkNBUlJJRVJfR0FURVdBWV06IFwiY2FycmllckdhdGV3YXlJZFwiLFxuICAgIFtSb3V0ZXJUeXBlLkVHUkVTU19PTkxZX0lOVEVSTkVUX0dBVEVXQVldOiBcImVncmVzc09ubHlHYXRld2F5SWRcIixcbiAgICBbUm91dGVyVHlwZS5HQVRFV0FZXTogXCJnYXRld2F5SWRcIixcbiAgICAvLyB0ZXJyYWZvcm0tcHJvdmlkZXItYXdzIGlzIG1pc3Npbmcgc3dpdGNoIGNhc2UgZm9yIEluc3RhbmNlSWRcbiAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVJvdXRlLmh0bWxcbiAgICAvLyBbUm91dGVyVHlwZS5JTlNUQU5DRV06IFwiaW5zdGFuY2VJZFwiLFxuICAgIFtSb3V0ZXJUeXBlLkxPQ0FMX0dBVEVXQVldOiBcImxvY2FsR2F0ZXdheUlkXCIsXG4gICAgW1JvdXRlclR5cGUuTkFUX0dBVEVXQVldOiBcIm5hdEdhdGV3YXlJZFwiLFxuICAgIFtSb3V0ZXJUeXBlLk5FVFdPUktfSU5URVJGQUNFXTogXCJuZXR3b3JrSW50ZXJmYWNlSWRcIixcbiAgICBbUm91dGVyVHlwZS5UUkFOU0lUX0dBVEVXQVldOiBcInRyYW5zaXRHYXRld2F5SWRcIixcbiAgICBbUm91dGVyVHlwZS5WUENfUEVFUklOR19DT05ORUNUSU9OXTogXCJ2cGNQZWVyaW5nQ29ubmVjdGlvbklkXCIsXG4gICAgW1JvdXRlclR5cGUuVlBDX0VORFBPSU5UXTogXCJ2cGNFbmRwb2ludElkXCIsXG4gICAgW1JvdXRlclR5cGUuQ09SRV9ORVRXT1JLXTogXCJjb3JlTmV0d29ya0FyblwiLFxuICB9O1xuICByZXR1cm4gbG9va3VwTWFwW3JvdXRlclR5cGVdO1xufVxuIl19
@@ -5,7 +5,7 @@ exports.Runtime = exports.RuntimeFamily = void 0;
5
5
  exports.determineLatestNodeRuntime = determineLatestNodeRuntime;
6
6
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
7
7
  const region_info_1 = require("@aws-cdk/region-info");
8
- // TODO: use @cdktf/provider-docker for bundling
8
+ // TODO: use @cdktn/provider-docker for bundling
9
9
  const bundling_1 = require("../../bundling");
10
10
  const aws_stack_1 = require("../aws-stack");
11
11
  var RuntimeFamily;
@@ -47,7 +47,7 @@ class Runtime {
47
47
  }
48
48
  exports.Runtime = Runtime;
49
49
  _a = JSII_RTTI_SYMBOL_1;
50
- Runtime[_a] = { fqn: "terraconstructs.aws.compute.Runtime", version: "0.2.4" };
50
+ Runtime[_a] = { fqn: "terraconstructs.aws.compute.Runtime", version: "0.2.6" };
51
51
  /** A list of all known `Runtime`'s. */
52
52
  Runtime.ALL = new Array();
53
53
  /**
@@ -316,4 +316,4 @@ function determineLatestNodeRuntime(scope) {
316
316
  isVariable: true,
317
317
  });
318
318
  }
319
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUF3aUJBLGdFQVdDOztBQW5qQkQsc0RBQWdEO0FBRWhELGdEQUFnRDtBQUNoRCw2Q0FBNkM7QUFDN0MsNENBQXdDO0FBa0N4QyxJQUFZLGFBUVg7QUFSRCxXQUFZLGFBQWE7SUFDdkIscURBQU0sQ0FBQTtJQUNOLGlEQUFJLENBQUE7SUFDSixxREFBTSxDQUFBO0lBQ04sK0RBQVcsQ0FBQTtJQUNYLDZDQUFFLENBQUE7SUFDRixpREFBSSxDQUFBO0lBQ0osbURBQUssQ0FBQTtBQUNQLENBQUMsRUFSVyxhQUFhLDZCQUFiLGFBQWEsUUFReEI7QUFFRDs7Ozs7R0FLRztBQUNILE1BQWEsT0FBTztJQStjbEIsWUFDRSxJQUFZLEVBQ1osTUFBc0IsRUFDdEIsUUFBNEIsRUFBRTtRQUU5QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNyRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBRXJDLE1BQU0sU0FBUyxHQUNiLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSw0QkFBNEIsSUFBSSxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxzQkFBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDLHlCQUF5QixJQUFJLEtBQUssQ0FBQztRQUMxRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQztRQUUxRCxPQUFPLENBQUMs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Q0FBQyxDQUFDLFlBQVksQ0FDN0Qsc0JBQVEsQ0FBQyxtQkFBbUIsRUFDNUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ3pCLENBQUM7SUFDRixPQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFO1FBQ3BELGtCQUFrQixFQUFFLElBQUk7UUFDeEIsVUFBVSxFQUFFLElBQUk7S0FDakIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZhY3ROYW1lIH0gZnJvbSBcIkBhd3MtY2RrL3JlZ2lvbi1pbmZvXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuLy8gVE9ETzogdXNlIEBjZGt0Zi9wcm92aWRlci1kb2NrZXIgZm9yIGJ1bmRsaW5nXG5pbXBvcnQgeyBEb2NrZXJJbWFnZSB9IGZyb20gXCIuLi8uLi9idW5kbGluZ1wiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhUnVudGltZVByb3BzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGBgWmlwRmlsZWBgIChha2EgaW5saW5lIGNvZGUpIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggdGhpcyBydW50aW1lLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcG9ydHNJbmxpbmVDb2RlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcnVudGltZSBlbnVtIGlzIG1lYW50IHRvIGNoYW5nZSBvdmVyIHRpbWUsIElFIE5PREVKU19MQVRFU1QuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpc1ZhcmlhYmxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIERvY2tlciBpbWFnZSBuYW1lIHRvIGJlIHVzZWQgZm9yIGJ1bmRsaW5nIGluIHRoaXMgcnVudGltZS5cbiAgICogQGRlZmF1bHQgLSB0aGUgbGF0ZXN0IGRvY2tlciBpbWFnZSBcImFtYXpvbi9wdWJsaWMuZWNyLmF3cy9zYW0vYnVpbGQtPHJ1bnRpbWU+XCIgZnJvbSBodHRwczovL2dhbGxlcnkuZWNyLmF3c1xuICAgKi9cbiAgcmVhZG9ubHkgYnVuZGxpbmdEb2NrZXJJbWFnZT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJ1bnRpbWUgaXMgaW50ZWdyYXRlZCB3aXRoIGFuZCBzdXBwb3J0ZWQgZm9yIHByb2ZpbGluZyB1c2luZyBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJ1bnRpbWUgc3VwcG9ydHMgU25hcFN0YXJ0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcG9ydHNTbmFwU3RhcnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZW51bSBSdW50aW1lRmFtaWx5IHtcbiAgTk9ERUpTLFxuICBKQVZBLFxuICBQWVRIT04sXG4gIERPVE5FVF9DT1JFLFxuICBHTyxcbiAgUlVCWSxcbiAgT1RIRVIsXG59XG5cbi8qKlxuICogTGFtYmRhIGZ1bmN0aW9uIHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gKlxuICogSWYgeW91IG5lZWQgdG8gdXNlIGEgcnVudGltZSBuYW1lIHRoYXQgZG9lc24ndCBleGlzdCBhcyBhIHN0YXRpYyBtZW1iZXIsIHlvdVxuICogY2FuIGluc3RhbnRpYXRlIGEgYFJ1bnRpbWVgIG9iamVjdCwgZS5nOiBgbmV3IFJ1bnRpbWUoJ25vZGVqczk5Ljk5JylgLlxuICovXG5leHBvcnQgY2xhc3MgUnVudGltZSB7XG4gIC8qKiBBIGxpc3Qgb2YgYWxsIGtub3duIGBSdW50aW1lYCdzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFMTCA9IG5ldyBBcnJheTxSdW50aW1lPigpO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZUpTIHJ1bnRpbWUgKG5vZGVqcylcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKUyA9IG5ldyBSdW50aW1lKFwibm9kZWpzXCIsIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLCB7XG4gICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICB9KTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyA0LjMgcnVudGltZSAobm9kZWpzNC4zKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBOb2RlSlMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzRfMyA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzNC4zXCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyA2LjEwIHJ1bnRpbWUgKG5vZGVqczYuMTApXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IE5vZGVKUyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfNl8xMCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzNi4xMFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgOC4xMCBydW50aW1lIChub2RlanM4LjEwKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBOb2RlSlMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzhfMTAgPSBuZXcgUnVudGltZShcbiAgICBcIm5vZGVqczguMTBcIixcbiAgICBSdW50aW1lRmFtaWx5Lk5PREVKUyxcbiAgICB7IHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZUpTIDEwLnggcnVudGltZSAobm9kZWpzMTAueClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18xMF9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMxMC54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAxMi54IHJ1bnRpbWUgKG5vZGVqczEyLngpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IE5vZGVKUyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMTJfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMTIueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMTQueCBydW50aW1lIChub2RlanMxNC54KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBOb2RlSlMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzE0X1ggPSBuZXcgUnVudGltZShcbiAgICBcIm5vZGVqczE0LnhcIixcbiAgICBSdW50aW1lRmFtaWx5Lk5PREVKUyxcbiAgICB7IHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZUpTIDE2LnggcnVudGltZSAobm9kZWpzMTYueClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18xNl9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMxNi54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAxOC54IHJ1bnRpbWUgKG5vZGVqczE4LngpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18xOF9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMxOC54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAyMC54IHJ1bnRpbWUgKG5vZGVqczIwLngpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18yMF9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMyMC54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGxhdGVzdCBOb2RlSlMgdmVyc2lvbiBjdXJyZW50bHkgYXZhaWxhYmxlIGluIEFMTCByZWdpb25zIChub3QgbmVjZXNzYXJpbHkgdGhlIGxhdGVzdCBOb2RlSlMgdmVyc2lvblxuICAgKiBhdmFpbGFibGUgaW4gWU9VUiByZWdpb24pLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfTEFURVNUID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMyMi54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsIGlzVmFyaWFibGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAyMi54IHJ1bnRpbWUgKG5vZGVqczIyLngpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18yMl9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMyMi54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAyNC54IHJ1bnRpbWUgKG5vZGVqczI0LngpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18yNF9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMyNC54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAyLjcgcnVudGltZSAocHl0aG9uMi43KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBQeXRob24gcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzJfNyA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMi43XCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjYgcnVudGltZSAocHl0aG9uMy42KSAobm90IHJlY29tbWVuZGVkKVxuICAgKlxuICAgKiBUaGUgUHl0aG9uIDMuNiBydW50aW1lIGlzIGRlcHJlY2F0ZWQgYXMgb2YgSnVseSAyMDIyLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBQeXRob24gcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfNiA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy42XCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgUHl0aG9uIDMuNyBydW50aW1lIChweXRob24zLjcpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IFB5dGhvbiBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM183ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjdcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy44IHJ1bnRpbWUgKHB5dGhvbjMuOClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUHl0aG9uIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8zXzggPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjMuOFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjkgcnVudGltZSAocHl0aG9uMy45KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM185ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjlcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy4xMCBydW50aW1lIChweXRob24zLjEwKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM18xMCA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy4xMFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjExIHJ1bnRpbWUgKHB5dGhvbjMuMTEpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8zXzExID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjExXCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgUHl0aG9uIDMuMTIgcnVudGltZSAocHl0aG9uMy4xMilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfMTIgPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjMuMTJcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgICAgc3VwcG9ydHNTbmFwU3RhcnQ6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjEzIHJ1bnRpbWUgKHB5dGhvbjMuMTMpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8zXzEzID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjEzXCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzU25hcFN0YXJ0OiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy4xNCBydW50aW1lIChweXRob24zLjE0KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM18xNCA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy4xNFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgSmF2YSA4IHJ1bnRpbWUgKGphdmE4KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBKYXZhIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEpBVkFfOCA9IG5ldyBSdW50aW1lKFwiamF2YThcIiwgUnVudGltZUZhbWlseS5KQVZBLCB7XG4gICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoZSBKYXZhIDggQ29ycmV0dG8gcnVudGltZSAoamF2YTguYWwyKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBKQVZBXzhfQ09SUkVUVE8gPSBuZXcgUnVudGltZShcbiAgICBcImphdmE4LmFsMlwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuSkFWQSxcbiAgICB7XG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBKYXZhIDExIHJ1bnRpbWUgKGphdmExMSlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSkFWQV8xMSA9IG5ldyBSdW50aW1lKFwiamF2YTExXCIsIFJ1bnRpbWVGYW1pbHkuSkFWQSwge1xuICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgc3VwcG9ydHNTbmFwU3RhcnQ6IHRydWUsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgSmF2YSAxNyBydW50aW1lIChqYXZhMTcpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEpBVkFfMTcgPSBuZXcgUnVudGltZShcImphdmExN1wiLCBSdW50aW1lRmFtaWx5LkpBVkEsIHtcbiAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIHN1cHBvcnRzU25hcFN0YXJ0OiB0cnVlLFxuICB9KTtcblxuICAvKipcbiAgICogVGhlIEphdmEgMjEgcnVudGltZSAoamF2YTIxKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBKQVZBXzIxID0gbmV3IFJ1bnRpbWUoXCJqYXZhMjFcIiwgUnVudGltZUZhbWlseS5KQVZBLCB7XG4gICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoZSAuTkVUIDYgcnVudGltZSAoZG90bmV0NilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRE9UTkVUXzYgPSBuZXcgUnVudGltZShcbiAgICBcImRvdG5ldDZcIixcbiAgICBSdW50aW1lRmFtaWx5LkRPVE5FVF9DT1JFLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCA4IHJ1bnRpbWUgKGRvdG5ldDgpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPVE5FVF84ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJkb3RuZXQ4XCIsXG4gICAgUnVudGltZUZhbWlseS5ET1RORVRfQ09SRSxcbiAgICB7XG4gICAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCA5IHJ1bnRpbWUgKGRvdG5ldDkpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPVE5FVF85ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJkb3RuZXQ5XCIsXG4gICAgUnVudGltZUZhbWlseS5ET1RORVRfQ09SRSxcbiAgICB7XG4gICAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCBDb3JlIDEuMCBydW50aW1lIChkb3RuZXRjb3JlMS4wKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCAuTkVUIENvcmUgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRE9UTkVUX0NPUkVfMSA9IG5ldyBSdW50aW1lKFxuICAgIFwiZG90bmV0Y29yZTEuMFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuRE9UTkVUX0NPUkUsXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSAuTkVUIENvcmUgMi4wIHJ1bnRpbWUgKGRvdG5ldGNvcmUyLjApXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IC5ORVQgQ29yZSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET1RORVRfQ09SRV8yID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJkb3RuZXRjb3JlMi4wXCIsXG4gICAgUnVudGltZUZhbWlseS5ET1RORVRfQ09SRSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIC5ORVQgQ29yZSAyLjEgcnVudGltZSAoZG90bmV0Y29yZTIuMSlcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgLk5FVCBDb3JlIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPVE5FVF9DT1JFXzJfMSA9IG5ldyBSdW50aW1lKFxuICAgIFwiZG90bmV0Y29yZTIuMVwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuRE9UTkVUX0NPUkUsXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSAuTkVUIENvcmUgMy4xIHJ1bnRpbWUgKGRvdG5ldGNvcmUzLjEpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IC5ORVQgQ29yZSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET1RORVRfQ09SRV8zXzEgPSBuZXcgUnVudGltZShcbiAgICBcImRvdG5ldGNvcmUzLjFcIixcbiAgICBSdW50aW1lRmFtaWx5LkRPVE5FVF9DT1JFLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgR28gMS54IHJ1bnRpbWUgKGdvMS54KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIFBST1ZJREVEX0FMMjAyMyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHT18xX1ggPSBuZXcgUnVudGltZShcImdvMS54XCIsIFJ1bnRpbWVGYW1pbHkuR08pO1xuXG4gIC8qKlxuICAgKiBUaGUgUnVieSAyLjUgcnVudGltZSAocnVieTIuNSlcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUnVieSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVUJZXzJfNSA9IG5ldyBSdW50aW1lKFwicnVieTIuNVwiLCBSdW50aW1lRmFtaWx5LlJVQlkpO1xuXG4gIC8qKlxuICAgKiBUaGUgUnVieSAyLjcgcnVudGltZSAocnVieTIuNylcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUnVieSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVUJZXzJfNyA9IG5ldyBSdW50aW1lKFwicnVieTIuN1wiLCBSdW50aW1lRmFtaWx5LlJVQlkpO1xuXG4gIC8qKlxuICAgKiBUaGUgUnVieSAzLjIgcnVudGltZSAocnVieTMuMilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUlVCWV8zXzIgPSBuZXcgUnVudGltZShcInJ1YnkzLjJcIiwgUnVudGltZUZhbWlseS5SVUJZKTtcblxuICAvKipcbiAgICogVGhlIFJ1YnkgMy4zIHJ1bnRpbWUgKHJ1YnkzLjMpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJVQllfM18zID0gbmV3IFJ1bnRpbWUoXCJydWJ5My4zXCIsIFJ1bnRpbWVGYW1pbHkuUlVCWSk7XG5cbiAgLyoqXG4gICAqIFRoZSBSdWJ5IDMuNCBydW50aW1lIChydWJ5My40KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVUJZXzNfNCA9IG5ldyBSdW50aW1lKFwicnVieTMuNFwiLCBSdW50aW1lRmFtaWx5LlJVQlkpO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHByb3ZpZGVkIHJ1bnRpbWUgKHByb3ZpZGVkKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBwcm92aWRlZC5hbDIwMjMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPVklERUQgPSBuZXcgUnVudGltZShcbiAgICBcInByb3ZpZGVkXCIsXG4gICAgUnVudGltZUZhbWlseS5PVEhFUixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGN1c3RvbSBwcm92aWRlZCBydW50aW1lIHdpdGggQW1hem9uIExpbnV4IDIgKHByb3ZpZGVkLmFsMilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPVklERURfQUwyID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJwcm92aWRlZC5hbDJcIixcbiAgICBSdW50aW1lRmFtaWx5Lk9USEVSLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHByb3ZpZGVkIHJ1bnRpbWUgd2l0aCBBbWF6b24gTGludXggMjAyMyAocHJvdmlkZWQuYWwyMDIzKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9WSURFRF9BTDIwMjMgPSBuZXcgUnVudGltZShcbiAgICBcInByb3ZpZGVkLmFsMjAyM1wiLFxuICAgIFJ1bnRpbWVGYW1pbHkuT1RIRVIsXG4gICk7XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbCBydW50aW1lIGVudHJ5IHRvIGJlIHVzZWQgd2hlbiBmdW5jdGlvbiBpcyB1c2luZyBhIGRvY2tlciBpbWFnZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRlJPTV9JTUFHRSA9IG5ldyBSdW50aW1lKFwiRlJPTV9JTUFHRVwiKTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyBydW50aW1lLCBhcyBleHBlY3RlZCBieSB0aGUgTGFtYmRhIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYGBaaXBGaWxlYGAgKGFrYSBpbmxpbmUgY29kZSkgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCB0aGlzXG4gICAqIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydHNJbmxpbmVDb2RlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcnVudGltZSBpcyBpbnRlZ3JhdGVkIHdpdGggYW5kIHN1cHBvcnRlZCBmb3IgcHJvZmlsaW5nIHVzaW5nIEFtYXpvbiBDb2RlR3VydSBQcm9maWxlci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcnVudGltZSBzdXBwb3J0cyBzbmFwc3RhcnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydHNTbmFwU3RhcnQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBydW50aW1lIGZhbWlseS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmYW1pbHk/OiBSdW50aW1lRmFtaWx5O1xuXG4gIC8qKlxuICAgKiBUaGUgYnVuZGxpbmcgRG9ja2VyIGltYWdlIGZvciB0aGlzIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVuZGxpbmdJbWFnZTogRG9ja2VySW1hZ2U7XG5cbiAgLyoqXG4gICAqIEVuYWJsZWQgZm9yIHJ1bnRpbWUgZW51bXMgdGhhdCBhbHdheXMgdGFyZ2V0IHRoZSBsYXRlc3QgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzVmFyaWFibGU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZhbWlseT86IFJ1bnRpbWVGYW1pbHksXG4gICAgcHJvcHM6IExhbWJkYVJ1bnRpbWVQcm9wcyA9IHt9LFxuICApIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuc3VwcG9ydHNJbmxpbmVDb2RlID0gISFwcm9wcy5zdXBwb3J0c0lubGluZUNvZGU7XG4gICAgdGhpcy5mYW1pbHkgPSBmYW1pbHk7XG4gICAgdGhpcy5pc1ZhcmlhYmxlID0gISFwcm9wcy5pc1ZhcmlhYmxlO1xuXG4gICAgY29uc3QgaW1hZ2VOYW1lID1cbiAgICAgIHByb3BzLmJ1bmRsaW5nRG9ja2VySW1hZ2UgPz8gYHB1YmxpYy5lY3IuYXdzL3NhbS9idWlsZC0ke25hbWV9YDtcbiAgICB0aGlzLmJ1bmRsaW5nSW1hZ2UgPSBEb2NrZXJJbWFnZS5mcm9tUmVnaXN0cnkoaW1hZ2VOYW1lKTtcbiAgICB0aGlzLnN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmcgPSBwcm9wcy5zdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nID8/IGZhbHNlO1xuICAgIHRoaXMuc3VwcG9ydHNTbmFwU3RhcnQgPSBwcm9wcy5zdXBwb3J0c1NuYXBTdGFydCA/PyBmYWxzZTtcblxuICAgIFJ1bnRpbWUuQUxMLnB1c2godGhpcyk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgcHVibGljIHJ1bnRpbWVFcXVhbHMob3RoZXI6IFJ1bnRpbWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgb3RoZXIubmFtZSA9PT0gdGhpcy5uYW1lICYmXG4gICAgICBvdGhlci5mYW1pbHkgPT09IHRoaXMuZmFtaWx5ICYmXG4gICAgICBvdGhlci5zdXBwb3J0c0lubGluZUNvZGUgPT09IHRoaXMuc3VwcG9ydHNJbmxpbmVDb2RlXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBsYXRlc3QgTGFtYmRhIG5vZGUgcnVudGltZSBhdmFpbGFibGUgYnkgQVdTIHJlZ2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluZUxhdGVzdE5vZGVSdW50aW1lKHNjb3BlOiBDb25zdHJ1Y3QpOiBSdW50aW1lIHtcbiAgLy8gUnVudGltZSByZWdpb25hbCBmYWN0IHNob3VsZCBhbHdheXMgcmV0dXJuIGEga25vd24gcnVudGltZSBzdHJpbmcgdGhhdCBSdW50aW1lIGNhbiBpbmRleCBvZmYsIGJ1dCBmb3IgdHlwZVxuICAvLyBzYWZldHkgd2UgYWxzbyBkZWZhdWx0IGl0IGhlcmUuXG4gIGNvbnN0IHJ1bnRpbWVOYW1lID0gQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3Qoc2NvcGUpLnJlZ2lvbmFsRmFjdChcbiAgICBGYWN0TmFtZS5MQVRFU1RfTk9ERV9SVU5USU1FLFxuICAgIFJ1bnRpbWUuTk9ERUpTXzIyX1gubmFtZSxcbiAgKTtcbiAgcmV0dXJuIG5ldyBSdW50aW1lKHJ1bnRpbWVOYW1lLCBSdW50aW1lRmFtaWx5Lk5PREVKUywge1xuICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICBpc1ZhcmlhYmxlOiB0cnVlLFxuICB9KTtcbn1cbiJdfQ==
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUF3aUJBLGdFQVdDOztBQW5qQkQsc0RBQWdEO0FBRWhELGdEQUFnRDtBQUNoRCw2Q0FBNkM7QUFDN0MsNENBQXdDO0FBa0N4QyxJQUFZLGFBUVg7QUFSRCxXQUFZLGFBQWE7SUFDdkIscURBQU0sQ0FBQTtJQUNOLGlEQUFJLENBQUE7SUFDSixxREFBTSxDQUFBO0lBQ04sK0RBQVcsQ0FBQTtJQUNYLDZDQUFFLENBQUE7SUFDRixpREFBSSxDQUFBO0lBQ0osbURBQUssQ0FBQTtBQUNQLENBQUMsRUFSVyxhQUFhLDZCQUFiLGFBQWEsUUFReEI7QUFFRDs7Ozs7R0FLRztBQUNILE1BQWEsT0FBTztJQStjbEIsWUFDRSxJQUFZLEVBQ1osTUFBc0IsRUFDdEIsUUFBNEIsRUFBRTtRQUU5QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNyRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBRXJDLE1BQU0sU0FBUyxHQUNiLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSw0QkFBNEIsSUFBSSxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxzQkFBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDLHlCQUF5QixJQUFJLEtBQUssQ0FBQztRQUMxRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQztRQUUxRCxPQUFPLENBQUMs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Q0FBQyxDQUFDLFlBQVksQ0FDN0Qsc0JBQVEsQ0FBQyxtQkFBbUIsRUFDNUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ3pCLENBQUM7SUFDRixPQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFO1FBQ3BELGtCQUFrQixFQUFFLElBQUk7UUFDeEIsVUFBVSxFQUFFLElBQUk7S0FDakIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZhY3ROYW1lIH0gZnJvbSBcIkBhd3MtY2RrL3JlZ2lvbi1pbmZvXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuLy8gVE9ETzogdXNlIEBjZGt0bi9wcm92aWRlci1kb2NrZXIgZm9yIGJ1bmRsaW5nXG5pbXBvcnQgeyBEb2NrZXJJbWFnZSB9IGZyb20gXCIuLi8uLi9idW5kbGluZ1wiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhUnVudGltZVByb3BzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGBgWmlwRmlsZWBgIChha2EgaW5saW5lIGNvZGUpIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggdGhpcyBydW50aW1lLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcG9ydHNJbmxpbmVDb2RlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcnVudGltZSBlbnVtIGlzIG1lYW50IHRvIGNoYW5nZSBvdmVyIHRpbWUsIElFIE5PREVKU19MQVRFU1QuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpc1ZhcmlhYmxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIERvY2tlciBpbWFnZSBuYW1lIHRvIGJlIHVzZWQgZm9yIGJ1bmRsaW5nIGluIHRoaXMgcnVudGltZS5cbiAgICogQGRlZmF1bHQgLSB0aGUgbGF0ZXN0IGRvY2tlciBpbWFnZSBcImFtYXpvbi9wdWJsaWMuZWNyLmF3cy9zYW0vYnVpbGQtPHJ1bnRpbWU+XCIgZnJvbSBodHRwczovL2dhbGxlcnkuZWNyLmF3c1xuICAgKi9cbiAgcmVhZG9ubHkgYnVuZGxpbmdEb2NrZXJJbWFnZT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJ1bnRpbWUgaXMgaW50ZWdyYXRlZCB3aXRoIGFuZCBzdXBwb3J0ZWQgZm9yIHByb2ZpbGluZyB1c2luZyBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJ1bnRpbWUgc3VwcG9ydHMgU25hcFN0YXJ0LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcG9ydHNTbmFwU3RhcnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZW51bSBSdW50aW1lRmFtaWx5IHtcbiAgTk9ERUpTLFxuICBKQVZBLFxuICBQWVRIT04sXG4gIERPVE5FVF9DT1JFLFxuICBHTyxcbiAgUlVCWSxcbiAgT1RIRVIsXG59XG5cbi8qKlxuICogTGFtYmRhIGZ1bmN0aW9uIHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gKlxuICogSWYgeW91IG5lZWQgdG8gdXNlIGEgcnVudGltZSBuYW1lIHRoYXQgZG9lc24ndCBleGlzdCBhcyBhIHN0YXRpYyBtZW1iZXIsIHlvdVxuICogY2FuIGluc3RhbnRpYXRlIGEgYFJ1bnRpbWVgIG9iamVjdCwgZS5nOiBgbmV3IFJ1bnRpbWUoJ25vZGVqczk5Ljk5JylgLlxuICovXG5leHBvcnQgY2xhc3MgUnVudGltZSB7XG4gIC8qKiBBIGxpc3Qgb2YgYWxsIGtub3duIGBSdW50aW1lYCdzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFMTCA9IG5ldyBBcnJheTxSdW50aW1lPigpO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZUpTIHJ1bnRpbWUgKG5vZGVqcylcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKUyA9IG5ldyBSdW50aW1lKFwibm9kZWpzXCIsIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLCB7XG4gICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICB9KTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyA0LjMgcnVudGltZSAobm9kZWpzNC4zKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBOb2RlSlMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzRfMyA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzNC4zXCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyA2LjEwIHJ1bnRpbWUgKG5vZGVqczYuMTApXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IE5vZGVKUyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfNl8xMCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzNi4xMFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgOC4xMCBydW50aW1lIChub2RlanM4LjEwKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBOb2RlSlMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzhfMTAgPSBuZXcgUnVudGltZShcbiAgICBcIm5vZGVqczguMTBcIixcbiAgICBSdW50aW1lRmFtaWx5Lk5PREVKUyxcbiAgICB7IHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZUpTIDEwLnggcnVudGltZSAobm9kZWpzMTAueClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18xMF9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMxMC54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAxMi54IHJ1bnRpbWUgKG5vZGVqczEyLngpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IE5vZGVKUyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMTJfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMTIueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMTQueCBydW50aW1lIChub2RlanMxNC54KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBOb2RlSlMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzE0X1ggPSBuZXcgUnVudGltZShcbiAgICBcIm5vZGVqczE0LnhcIixcbiAgICBSdW50aW1lRmFtaWx5Lk5PREVKUyxcbiAgICB7IHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZUpTIDE2LnggcnVudGltZSAobm9kZWpzMTYueClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18xNl9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMxNi54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAxOC54IHJ1bnRpbWUgKG5vZGVqczE4LngpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18xOF9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMxOC54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAyMC54IHJ1bnRpbWUgKG5vZGVqczIwLngpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18yMF9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMyMC54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGxhdGVzdCBOb2RlSlMgdmVyc2lvbiBjdXJyZW50bHkgYXZhaWxhYmxlIGluIEFMTCByZWdpb25zIChub3QgbmVjZXNzYXJpbHkgdGhlIGxhdGVzdCBOb2RlSlMgdmVyc2lvblxuICAgKiBhdmFpbGFibGUgaW4gWU9VUiByZWdpb24pLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfTEFURVNUID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMyMi54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsIGlzVmFyaWFibGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAyMi54IHJ1bnRpbWUgKG5vZGVqczIyLngpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18yMl9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMyMi54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAyNC54IHJ1bnRpbWUgKG5vZGVqczI0LngpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18yNF9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMyNC54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAyLjcgcnVudGltZSAocHl0aG9uMi43KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBQeXRob24gcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzJfNyA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMi43XCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjYgcnVudGltZSAocHl0aG9uMy42KSAobm90IHJlY29tbWVuZGVkKVxuICAgKlxuICAgKiBUaGUgUHl0aG9uIDMuNiBydW50aW1lIGlzIGRlcHJlY2F0ZWQgYXMgb2YgSnVseSAyMDIyLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBQeXRob24gcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfNiA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy42XCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgUHl0aG9uIDMuNyBydW50aW1lIChweXRob24zLjcpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IFB5dGhvbiBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM183ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjdcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy44IHJ1bnRpbWUgKHB5dGhvbjMuOClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUHl0aG9uIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8zXzggPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjMuOFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjkgcnVudGltZSAocHl0aG9uMy45KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM185ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjlcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy4xMCBydW50aW1lIChweXRob24zLjEwKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM18xMCA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy4xMFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjExIHJ1bnRpbWUgKHB5dGhvbjMuMTEpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8zXzExID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjExXCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgUHl0aG9uIDMuMTIgcnVudGltZSAocHl0aG9uMy4xMilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfMTIgPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjMuMTJcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgICAgc3VwcG9ydHNTbmFwU3RhcnQ6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjEzIHJ1bnRpbWUgKHB5dGhvbjMuMTMpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8zXzEzID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjEzXCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzU25hcFN0YXJ0OiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy4xNCBydW50aW1lIChweXRob24zLjE0KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM18xNCA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy4xNFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgSmF2YSA4IHJ1bnRpbWUgKGphdmE4KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBKYXZhIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEpBVkFfOCA9IG5ldyBSdW50aW1lKFwiamF2YThcIiwgUnVudGltZUZhbWlseS5KQVZBLCB7XG4gICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoZSBKYXZhIDggQ29ycmV0dG8gcnVudGltZSAoamF2YTguYWwyKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBKQVZBXzhfQ09SUkVUVE8gPSBuZXcgUnVudGltZShcbiAgICBcImphdmE4LmFsMlwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuSkFWQSxcbiAgICB7XG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBKYXZhIDExIHJ1bnRpbWUgKGphdmExMSlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSkFWQV8xMSA9IG5ldyBSdW50aW1lKFwiamF2YTExXCIsIFJ1bnRpbWVGYW1pbHkuSkFWQSwge1xuICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgc3VwcG9ydHNTbmFwU3RhcnQ6IHRydWUsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgSmF2YSAxNyBydW50aW1lIChqYXZhMTcpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEpBVkFfMTcgPSBuZXcgUnVudGltZShcImphdmExN1wiLCBSdW50aW1lRmFtaWx5LkpBVkEsIHtcbiAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIHN1cHBvcnRzU25hcFN0YXJ0OiB0cnVlLFxuICB9KTtcblxuICAvKipcbiAgICogVGhlIEphdmEgMjEgcnVudGltZSAoamF2YTIxKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBKQVZBXzIxID0gbmV3IFJ1bnRpbWUoXCJqYXZhMjFcIiwgUnVudGltZUZhbWlseS5KQVZBLCB7XG4gICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoZSAuTkVUIDYgcnVudGltZSAoZG90bmV0NilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRE9UTkVUXzYgPSBuZXcgUnVudGltZShcbiAgICBcImRvdG5ldDZcIixcbiAgICBSdW50aW1lRmFtaWx5LkRPVE5FVF9DT1JFLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCA4IHJ1bnRpbWUgKGRvdG5ldDgpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPVE5FVF84ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJkb3RuZXQ4XCIsXG4gICAgUnVudGltZUZhbWlseS5ET1RORVRfQ09SRSxcbiAgICB7XG4gICAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCA5IHJ1bnRpbWUgKGRvdG5ldDkpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPVE5FVF85ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJkb3RuZXQ5XCIsXG4gICAgUnVudGltZUZhbWlseS5ET1RORVRfQ09SRSxcbiAgICB7XG4gICAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCBDb3JlIDEuMCBydW50aW1lIChkb3RuZXRjb3JlMS4wKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCAuTkVUIENvcmUgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRE9UTkVUX0NPUkVfMSA9IG5ldyBSdW50aW1lKFxuICAgIFwiZG90bmV0Y29yZTEuMFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuRE9UTkVUX0NPUkUsXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSAuTkVUIENvcmUgMi4wIHJ1bnRpbWUgKGRvdG5ldGNvcmUyLjApXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IC5ORVQgQ29yZSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET1RORVRfQ09SRV8yID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJkb3RuZXRjb3JlMi4wXCIsXG4gICAgUnVudGltZUZhbWlseS5ET1RORVRfQ09SRSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIC5ORVQgQ29yZSAyLjEgcnVudGltZSAoZG90bmV0Y29yZTIuMSlcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgLk5FVCBDb3JlIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPVE5FVF9DT1JFXzJfMSA9IG5ldyBSdW50aW1lKFxuICAgIFwiZG90bmV0Y29yZTIuMVwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuRE9UTkVUX0NPUkUsXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSAuTkVUIENvcmUgMy4xIHJ1bnRpbWUgKGRvdG5ldGNvcmUzLjEpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IC5ORVQgQ29yZSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET1RORVRfQ09SRV8zXzEgPSBuZXcgUnVudGltZShcbiAgICBcImRvdG5ldGNvcmUzLjFcIixcbiAgICBSdW50aW1lRmFtaWx5LkRPVE5FVF9DT1JFLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgR28gMS54IHJ1bnRpbWUgKGdvMS54KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIFBST1ZJREVEX0FMMjAyMyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHT18xX1ggPSBuZXcgUnVudGltZShcImdvMS54XCIsIFJ1bnRpbWVGYW1pbHkuR08pO1xuXG4gIC8qKlxuICAgKiBUaGUgUnVieSAyLjUgcnVudGltZSAocnVieTIuNSlcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUnVieSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVUJZXzJfNSA9IG5ldyBSdW50aW1lKFwicnVieTIuNVwiLCBSdW50aW1lRmFtaWx5LlJVQlkpO1xuXG4gIC8qKlxuICAgKiBUaGUgUnVieSAyLjcgcnVudGltZSAocnVieTIuNylcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUnVieSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVUJZXzJfNyA9IG5ldyBSdW50aW1lKFwicnVieTIuN1wiLCBSdW50aW1lRmFtaWx5LlJVQlkpO1xuXG4gIC8qKlxuICAgKiBUaGUgUnVieSAzLjIgcnVudGltZSAocnVieTMuMilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUlVCWV8zXzIgPSBuZXcgUnVudGltZShcInJ1YnkzLjJcIiwgUnVudGltZUZhbWlseS5SVUJZKTtcblxuICAvKipcbiAgICogVGhlIFJ1YnkgMy4zIHJ1bnRpbWUgKHJ1YnkzLjMpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJVQllfM18zID0gbmV3IFJ1bnRpbWUoXCJydWJ5My4zXCIsIFJ1bnRpbWVGYW1pbHkuUlVCWSk7XG5cbiAgLyoqXG4gICAqIFRoZSBSdWJ5IDMuNCBydW50aW1lIChydWJ5My40KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVUJZXzNfNCA9IG5ldyBSdW50aW1lKFwicnVieTMuNFwiLCBSdW50aW1lRmFtaWx5LlJVQlkpO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHByb3ZpZGVkIHJ1bnRpbWUgKHByb3ZpZGVkKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBwcm92aWRlZC5hbDIwMjMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPVklERUQgPSBuZXcgUnVudGltZShcbiAgICBcInByb3ZpZGVkXCIsXG4gICAgUnVudGltZUZhbWlseS5PVEhFUixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGN1c3RvbSBwcm92aWRlZCBydW50aW1lIHdpdGggQW1hem9uIExpbnV4IDIgKHByb3ZpZGVkLmFsMilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPVklERURfQUwyID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJwcm92aWRlZC5hbDJcIixcbiAgICBSdW50aW1lRmFtaWx5Lk9USEVSLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHByb3ZpZGVkIHJ1bnRpbWUgd2l0aCBBbWF6b24gTGludXggMjAyMyAocHJvdmlkZWQuYWwyMDIzKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9WSURFRF9BTDIwMjMgPSBuZXcgUnVudGltZShcbiAgICBcInByb3ZpZGVkLmFsMjAyM1wiLFxuICAgIFJ1bnRpbWVGYW1pbHkuT1RIRVIsXG4gICk7XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbCBydW50aW1lIGVudHJ5IHRvIGJlIHVzZWQgd2hlbiBmdW5jdGlvbiBpcyB1c2luZyBhIGRvY2tlciBpbWFnZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRlJPTV9JTUFHRSA9IG5ldyBSdW50aW1lKFwiRlJPTV9JTUFHRVwiKTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyBydW50aW1lLCBhcyBleHBlY3RlZCBieSB0aGUgTGFtYmRhIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYGBaaXBGaWxlYGAgKGFrYSBpbmxpbmUgY29kZSkgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCB0aGlzXG4gICAqIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydHNJbmxpbmVDb2RlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcnVudGltZSBpcyBpbnRlZ3JhdGVkIHdpdGggYW5kIHN1cHBvcnRlZCBmb3IgcHJvZmlsaW5nIHVzaW5nIEFtYXpvbiBDb2RlR3VydSBQcm9maWxlci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcnVudGltZSBzdXBwb3J0cyBzbmFwc3RhcnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydHNTbmFwU3RhcnQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBydW50aW1lIGZhbWlseS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmYW1pbHk/OiBSdW50aW1lRmFtaWx5O1xuXG4gIC8qKlxuICAgKiBUaGUgYnVuZGxpbmcgRG9ja2VyIGltYWdlIGZvciB0aGlzIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVuZGxpbmdJbWFnZTogRG9ja2VySW1hZ2U7XG5cbiAgLyoqXG4gICAqIEVuYWJsZWQgZm9yIHJ1bnRpbWUgZW51bXMgdGhhdCBhbHdheXMgdGFyZ2V0IHRoZSBsYXRlc3QgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzVmFyaWFibGU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZhbWlseT86IFJ1bnRpbWVGYW1pbHksXG4gICAgcHJvcHM6IExhbWJkYVJ1bnRpbWVQcm9wcyA9IHt9LFxuICApIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuc3VwcG9ydHNJbmxpbmVDb2RlID0gISFwcm9wcy5zdXBwb3J0c0lubGluZUNvZGU7XG4gICAgdGhpcy5mYW1pbHkgPSBmYW1pbHk7XG4gICAgdGhpcy5pc1ZhcmlhYmxlID0gISFwcm9wcy5pc1ZhcmlhYmxlO1xuXG4gICAgY29uc3QgaW1hZ2VOYW1lID1cbiAgICAgIHByb3BzLmJ1bmRsaW5nRG9ja2VySW1hZ2UgPz8gYHB1YmxpYy5lY3IuYXdzL3NhbS9idWlsZC0ke25hbWV9YDtcbiAgICB0aGlzLmJ1bmRsaW5nSW1hZ2UgPSBEb2NrZXJJbWFnZS5mcm9tUmVnaXN0cnkoaW1hZ2VOYW1lKTtcbiAgICB0aGlzLnN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmcgPSBwcm9wcy5zdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nID8/IGZhbHNlO1xuICAgIHRoaXMuc3VwcG9ydHNTbmFwU3RhcnQgPSBwcm9wcy5zdXBwb3J0c1NuYXBTdGFydCA/PyBmYWxzZTtcblxuICAgIFJ1bnRpbWUuQUxMLnB1c2godGhpcyk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgcHVibGljIHJ1bnRpbWVFcXVhbHMob3RoZXI6IFJ1bnRpbWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgb3RoZXIubmFtZSA9PT0gdGhpcy5uYW1lICYmXG4gICAgICBvdGhlci5mYW1pbHkgPT09IHRoaXMuZmFtaWx5ICYmXG4gICAgICBvdGhlci5zdXBwb3J0c0lubGluZUNvZGUgPT09IHRoaXMuc3VwcG9ydHNJbmxpbmVDb2RlXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBsYXRlc3QgTGFtYmRhIG5vZGUgcnVudGltZSBhdmFpbGFibGUgYnkgQVdTIHJlZ2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluZUxhdGVzdE5vZGVSdW50aW1lKHNjb3BlOiBDb25zdHJ1Y3QpOiBSdW50aW1lIHtcbiAgLy8gUnVudGltZSByZWdpb25hbCBmYWN0IHNob3VsZCBhbHdheXMgcmV0dXJuIGEga25vd24gcnVudGltZSBzdHJpbmcgdGhhdCBSdW50aW1lIGNhbiBpbmRleCBvZmYsIGJ1dCBmb3IgdHlwZVxuICAvLyBzYWZldHkgd2UgYWxzbyBkZWZhdWx0IGl0IGhlcmUuXG4gIGNvbnN0IHJ1bnRpbWVOYW1lID0gQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3Qoc2NvcGUpLnJlZ2lvbmFsRmFjdChcbiAgICBGYWN0TmFtZS5MQVRFU1RfTk9ERV9SVU5USU1FLFxuICAgIFJ1bnRpbWUuTk9ERUpTXzIyX1gubmFtZSxcbiAgKTtcbiAgcmV0dXJuIG5ldyBSdW50aW1lKHJ1bnRpbWVOYW1lLCBSdW50aW1lRmFtaWx5Lk5PREVKUywge1xuICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICBpc1ZhcmlhYmxlOiB0cnVlLFxuICB9KTtcbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { appautoscalingScheduledAction } from "@cdktf/provider-aws";
1
+ import { appautoscalingScheduledAction } from "@cdktn/provider-aws";
2
2
  import { Construct } from "constructs";
3
3
  import { Schedule } from "./schedule";
4
4
  import { BasicStepScalingPolicyProps, StepScalingPolicy } from "./step-scaling-policy";