@cdk_utils/iam 1.29.0 → 1.30.0

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 (464) hide show
  1. package/.jsii +2 -2
  2. package/lib/generated/index.d.ts +1 -0
  3. package/lib/generated/index.js +7 -6
  4. package/lib/generated/services/a2c.js +1 -1
  5. package/lib/generated/services/a4b.js +3 -3
  6. package/lib/generated/services/access-analyzer.js +4 -4
  7. package/lib/generated/services/account-access.js +4 -4
  8. package/lib/generated/services/account.js +4 -4
  9. package/lib/generated/services/acm-pca.js +4 -4
  10. package/lib/generated/services/acm.js +4 -4
  11. package/lib/generated/services/aco-automation.js +4 -4
  12. package/lib/generated/services/action-recommendations.js +1 -1
  13. package/lib/generated/services/activate.js +1 -1
  14. package/lib/generated/services/agent-registry.js +4 -4
  15. package/lib/generated/services/agentaccess-mcp.js +2 -2
  16. package/lib/generated/services/aidevops.js +4 -4
  17. package/lib/generated/services/aiops.js +4 -4
  18. package/lib/generated/services/airflow-serverless.js +4 -4
  19. package/lib/generated/services/airflow.js +4 -4
  20. package/lib/generated/services/amplify.js +4 -4
  21. package/lib/generated/services/amplifybackend.js +3 -3
  22. package/lib/generated/services/amplifyuibuilder.js +4 -4
  23. package/lib/generated/services/aoss.js +4 -4
  24. package/lib/generated/services/apigateway.js +4 -4
  25. package/lib/generated/services/app-integrations.js +4 -4
  26. package/lib/generated/services/appconfig.js +4 -4
  27. package/lib/generated/services/appfabric.js +4 -4
  28. package/lib/generated/services/appflow.js +4 -4
  29. package/lib/generated/services/application-autoscaling.js +4 -4
  30. package/lib/generated/services/application-signals-mcp.js +3 -3
  31. package/lib/generated/services/application-signals.js +4 -4
  32. package/lib/generated/services/application-transformation.js +1 -1
  33. package/lib/generated/services/applicationinsights.js +3 -3
  34. package/lib/generated/services/appmesh-preview.js +2 -2
  35. package/lib/generated/services/appmesh.js +4 -4
  36. package/lib/generated/services/apprunner.js +4 -4
  37. package/lib/generated/services/appstream.js +4 -4
  38. package/lib/generated/services/appstudio.js +2 -2
  39. package/lib/generated/services/appsync.js +4 -4
  40. package/lib/generated/services/apptest.js +3 -3
  41. package/lib/generated/services/aps.js +4 -4
  42. package/lib/generated/services/arc-region-switch.js +4 -4
  43. package/lib/generated/services/arc-zonal-shift.js +4 -4
  44. package/lib/generated/services/arsenal.js +1 -1
  45. package/lib/generated/services/artifact.js +4 -4
  46. package/lib/generated/services/athena.js +4 -4
  47. package/lib/generated/services/auditmanager.js +4 -4
  48. package/lib/generated/services/autoscaling-plans.js +2 -2
  49. package/lib/generated/services/autoscaling.js +4 -4
  50. package/lib/generated/services/aws-external-anthropic.js +3 -3
  51. package/lib/generated/services/aws-marketplace-management.js +1 -1
  52. package/lib/generated/services/aws-marketplace.js +4 -4
  53. package/lib/generated/services/aws-portal.js +1 -1
  54. package/lib/generated/services/awsconnector.js +1 -1
  55. package/lib/generated/services/b2bi.js +4 -4
  56. package/lib/generated/services/backup-gateway.js +4 -4
  57. package/lib/generated/services/backup-search.js +4 -4
  58. package/lib/generated/services/backup-storage.js +1 -1
  59. package/lib/generated/services/backup.js +4 -4
  60. package/lib/generated/services/batch.js +4 -4
  61. package/lib/generated/services/bcm-dashboards.js +4 -4
  62. package/lib/generated/services/bcm-data-exports.js +4 -4
  63. package/lib/generated/services/bcm-pricing-calculator.js +4 -4
  64. package/lib/generated/services/bcm-recommended-actions.js +2 -2
  65. package/lib/generated/services/bedrock-agentcore.js +4 -4
  66. package/lib/generated/services/bedrock-mantle.js +3 -3
  67. package/lib/generated/services/bedrock-websearch.js +2 -2
  68. package/lib/generated/services/bedrock.js +4 -4
  69. package/lib/generated/services/billing.d.ts +4 -0
  70. package/lib/generated/services/billing.js +12 -5
  71. package/lib/generated/services/billingconductor.js +4 -4
  72. package/lib/generated/services/braket.js +4 -4
  73. package/lib/generated/services/budgets.js +4 -4
  74. package/lib/generated/services/bugbust.js +3 -3
  75. package/lib/generated/services/cases.js +4 -4
  76. package/lib/generated/services/cassandra.js +4 -4
  77. package/lib/generated/services/ce.js +4 -4
  78. package/lib/generated/services/chatbot.js +4 -4
  79. package/lib/generated/services/chime.js +4 -4
  80. package/lib/generated/services/cleanrooms-ml.js +4 -4
  81. package/lib/generated/services/cleanrooms.js +4 -4
  82. package/lib/generated/services/cloud9.js +4 -4
  83. package/lib/generated/services/clouddirectory.js +3 -3
  84. package/lib/generated/services/cloudformation.js +4 -4
  85. package/lib/generated/services/cloudfront-keyvaluestore.js +3 -3
  86. package/lib/generated/services/cloudfront.js +4 -4
  87. package/lib/generated/services/cloudhsm.js +4 -4
  88. package/lib/generated/services/cloudsearch.js +3 -3
  89. package/lib/generated/services/cloudshell.js +3 -3
  90. package/lib/generated/services/cloudtrail-data.js +4 -4
  91. package/lib/generated/services/cloudtrail.js +4 -4
  92. package/lib/generated/services/cloudwatch.js +8 -5
  93. package/lib/generated/services/codeartifact.js +4 -4
  94. package/lib/generated/services/codebuild.js +4 -4
  95. package/lib/generated/services/codecatalyst.js +4 -4
  96. package/lib/generated/services/codecommit.js +4 -4
  97. package/lib/generated/services/codeconnections.js +4 -4
  98. package/lib/generated/services/codedeploy-commands-secure.js +1 -1
  99. package/lib/generated/services/codedeploy.js +4 -4
  100. package/lib/generated/services/codeguru-profiler.js +4 -4
  101. package/lib/generated/services/codeguru-reviewer.js +4 -4
  102. package/lib/generated/services/codeguru-security.js +4 -4
  103. package/lib/generated/services/codeguru.js +1 -1
  104. package/lib/generated/services/codepipeline.js +4 -4
  105. package/lib/generated/services/codestar-connections.js +4 -4
  106. package/lib/generated/services/codestar-notifications.js +4 -4
  107. package/lib/generated/services/codestar.js +3 -3
  108. package/lib/generated/services/codewhisperer.js +3 -3
  109. package/lib/generated/services/cognito-identity.js +4 -4
  110. package/lib/generated/services/cognito-idp.js +4 -4
  111. package/lib/generated/services/cognito-sync.js +3 -3
  112. package/lib/generated/services/comprehend.js +4 -4
  113. package/lib/generated/services/comprehendmedical.js +3 -3
  114. package/lib/generated/services/compute-optimizer.js +3 -3
  115. package/lib/generated/services/config.js +4 -4
  116. package/lib/generated/services/connect-campaigns.js +4 -4
  117. package/lib/generated/services/connect.js +4 -4
  118. package/lib/generated/services/consoleapp.js +2 -2
  119. package/lib/generated/services/consolidatedbilling.js +1 -1
  120. package/lib/generated/services/controlcatalog.js +3 -3
  121. package/lib/generated/services/controltower.js +4 -4
  122. package/lib/generated/services/cost-optimization-hub.js +2 -2
  123. package/lib/generated/services/cur.js +4 -4
  124. package/lib/generated/services/customer-verification.js +1 -1
  125. package/lib/generated/services/databrew.js +4 -4
  126. package/lib/generated/services/dataexchange.js +4 -4
  127. package/lib/generated/services/datapipeline.js +4 -4
  128. package/lib/generated/services/datasync.js +4 -4
  129. package/lib/generated/services/datazone.js +4 -4
  130. package/lib/generated/services/dax.js +4 -4
  131. package/lib/generated/services/dbqms.js +1 -1
  132. package/lib/generated/services/deadline.js +4 -4
  133. package/lib/generated/services/detective.js +4 -4
  134. package/lib/generated/services/devicefarm.js +4 -4
  135. package/lib/generated/services/devops-guru.js +4 -4
  136. package/lib/generated/services/directconnect.js +4 -4
  137. package/lib/generated/services/discovery.js +3 -3
  138. package/lib/generated/services/dlm.js +4 -4
  139. package/lib/generated/services/dms.js +4 -4
  140. package/lib/generated/services/docdb-elastic.js +4 -4
  141. package/lib/generated/services/drs.js +4 -4
  142. package/lib/generated/services/ds-data.js +4 -4
  143. package/lib/generated/services/ds.js +4 -4
  144. package/lib/generated/services/dsql.js +4 -4
  145. package/lib/generated/services/dynamodb.js +4 -4
  146. package/lib/generated/services/ebs.js +4 -4
  147. package/lib/generated/services/ec2-instance-connect.js +4 -4
  148. package/lib/generated/services/ec2.js +4 -4
  149. package/lib/generated/services/ec2messages.js +2 -2
  150. package/lib/generated/services/ecr-public.js +4 -4
  151. package/lib/generated/services/ecr.js +4 -4
  152. package/lib/generated/services/ecs-mcp.js +1 -1
  153. package/lib/generated/services/ecs.js +4 -4
  154. package/lib/generated/services/eks-auth.js +4 -4
  155. package/lib/generated/services/eks-mcp.js +1 -1
  156. package/lib/generated/services/eks.js +4 -4
  157. package/lib/generated/services/elasticache.js +4 -4
  158. package/lib/generated/services/elasticbeanstalk.js +4 -4
  159. package/lib/generated/services/elasticfilesystem.js +4 -4
  160. package/lib/generated/services/elasticloadbalancing.js +4 -4
  161. package/lib/generated/services/elasticmapreduce.js +4 -4
  162. package/lib/generated/services/elastictranscoder.js +2 -2
  163. package/lib/generated/services/elemental-activations.js +1 -1
  164. package/lib/generated/services/elemental-appliances-software.js +2 -2
  165. package/lib/generated/services/elemental-inference.js +4 -4
  166. package/lib/generated/services/elemental-support-cases.js +3 -3
  167. package/lib/generated/services/elemental-support-content.js +1 -1
  168. package/lib/generated/services/emr-containers.js +4 -4
  169. package/lib/generated/services/emr-serverless.js +4 -4
  170. package/lib/generated/services/entityresolution.js +4 -4
  171. package/lib/generated/services/es.js +4 -4
  172. package/lib/generated/services/events.d.ts +219 -0
  173. package/lib/generated/services/events.js +243 -5
  174. package/lib/generated/services/eventsbilltoaws.js +3 -3
  175. package/lib/generated/services/evidently.js +3 -3
  176. package/lib/generated/services/evs.js +4 -4
  177. package/lib/generated/services/execute-api.js +4 -4
  178. package/lib/generated/services/finops-agent.js +1 -1
  179. package/lib/generated/services/finspace-api.js +3 -3
  180. package/lib/generated/services/finspace.js +4 -4
  181. package/lib/generated/services/firehose.js +4 -4
  182. package/lib/generated/services/fis.js +4 -4
  183. package/lib/generated/services/fms.js +4 -4
  184. package/lib/generated/services/forecast.js +4 -4
  185. package/lib/generated/services/frauddetector.js +4 -4
  186. package/lib/generated/services/freertos.js +3 -3
  187. package/lib/generated/services/freetier.js +2 -2
  188. package/lib/generated/services/fsx.js +4 -4
  189. package/lib/generated/services/gamelift.js +4 -4
  190. package/lib/generated/services/gameliftstreams.js +4 -4
  191. package/lib/generated/services/geo-maps.js +3 -3
  192. package/lib/generated/services/geo-places.js +3 -3
  193. package/lib/generated/services/geo-routes.js +3 -3
  194. package/lib/generated/services/geo.js +4 -4
  195. package/lib/generated/services/glacier.js +4 -4
  196. package/lib/generated/services/globalaccelerator.js +4 -4
  197. package/lib/generated/services/glue.js +4 -4
  198. package/lib/generated/services/grafana.js +4 -4
  199. package/lib/generated/services/greengrass.js +4 -4
  200. package/lib/generated/services/groundstation.js +4 -4
  201. package/lib/generated/services/groundtruthlabeling.js +1 -1
  202. package/lib/generated/services/guardduty.js +4 -4
  203. package/lib/generated/services/health-agent.js +4 -4
  204. package/lib/generated/services/health.js +4 -4
  205. package/lib/generated/services/healthlake.js +4 -4
  206. package/lib/generated/services/honeycode.js +2 -2
  207. package/lib/generated/services/iam.js +4 -4
  208. package/lib/generated/services/identity-sync.js +2 -2
  209. package/lib/generated/services/identitystore-auth.js +1 -1
  210. package/lib/generated/services/identitystore.js +4 -4
  211. package/lib/generated/services/imagebuilder.js +4 -4
  212. package/lib/generated/services/importexport.js +2 -2
  213. package/lib/generated/services/inspector-scan.js +2 -2
  214. package/lib/generated/services/inspector.js +2 -2
  215. package/lib/generated/services/inspector2-telemetry.js +1 -1
  216. package/lib/generated/services/inspector2.js +4 -4
  217. package/lib/generated/services/interconnect.js +4 -4
  218. package/lib/generated/services/internetmonitor.js +4 -4
  219. package/lib/generated/services/invoicing.js +4 -4
  220. package/lib/generated/services/iot-device-tester.js +1 -1
  221. package/lib/generated/services/iot.js +4 -4
  222. package/lib/generated/services/iotanalytics.js +3 -3
  223. package/lib/generated/services/iotdeviceadvisor.js +4 -4
  224. package/lib/generated/services/iotevents.js +3 -3
  225. package/lib/generated/services/iotfleethub.js +3 -3
  226. package/lib/generated/services/iotfleetwise.js +4 -4
  227. package/lib/generated/services/iotjobsdata.js +4 -4
  228. package/lib/generated/services/iotmanagedintegrations.js +4 -4
  229. package/lib/generated/services/iotsitewise.js +4 -4
  230. package/lib/generated/services/iottwinmaker.js +4 -4
  231. package/lib/generated/services/iotwireless.js +4 -4
  232. package/lib/generated/services/iq-permission.js +2 -2
  233. package/lib/generated/services/iq.js +2 -2
  234. package/lib/generated/services/ivs.js +4 -4
  235. package/lib/generated/services/ivschat.js +4 -4
  236. package/lib/generated/services/kafka-cluster.js +3 -3
  237. package/lib/generated/services/kafka.js +4 -4
  238. package/lib/generated/services/kafkaconnect.js +4 -4
  239. package/lib/generated/services/kendra-ranking.js +4 -4
  240. package/lib/generated/services/kendra.js +4 -4
  241. package/lib/generated/services/kinesis.d.ts +4 -0
  242. package/lib/generated/services/kinesis.js +12 -5
  243. package/lib/generated/services/kinesisanalytics.js +4 -4
  244. package/lib/generated/services/kinesisvideo.js +4 -4
  245. package/lib/generated/services/kms.js +4 -4
  246. package/lib/generated/services/lakeformation.js +3 -3
  247. package/lib/generated/services/lambda.js +4 -4
  248. package/lib/generated/services/launchwizard.js +4 -4
  249. package/lib/generated/services/lex.js +4 -4
  250. package/lib/generated/services/license-manager-linux-subscriptions.js +4 -4
  251. package/lib/generated/services/license-manager-user-subscriptions.js +4 -4
  252. package/lib/generated/services/license-manager.js +4 -4
  253. package/lib/generated/services/lightsail.js +4 -4
  254. package/lib/generated/services/logs.js +4 -4
  255. package/lib/generated/services/lookoutequipment.js +4 -4
  256. package/lib/generated/services/lookoutmetrics.js +3 -3
  257. package/lib/generated/services/lookoutvision.js +3 -3
  258. package/lib/generated/services/m2.js +4 -4
  259. package/lib/generated/services/machinelearning.js +3 -3
  260. package/lib/generated/services/macie2.js +4 -4
  261. package/lib/generated/services/managedblockchain-query.js +2 -2
  262. package/lib/generated/services/managedblockchain.js +4 -4
  263. package/lib/generated/services/mapcredits.js +2 -2
  264. package/lib/generated/services/marketplacecommerceanalytics.js +2 -2
  265. package/lib/generated/services/mechanicalturk.js +2 -2
  266. package/lib/generated/services/mediaconnect.js +4 -4
  267. package/lib/generated/services/mediaconvert.js +4 -4
  268. package/lib/generated/services/mediaimport.js +1 -1
  269. package/lib/generated/services/medialive.js +4 -4
  270. package/lib/generated/services/mediapackage-vod.js +4 -4
  271. package/lib/generated/services/mediapackage.js +4 -4
  272. package/lib/generated/services/mediapackagev2.js +4 -4
  273. package/lib/generated/services/mediastore.js +4 -4
  274. package/lib/generated/services/mediatailor.js +4 -4
  275. package/lib/generated/services/medical-imaging.js +4 -4
  276. package/lib/generated/services/memorydb.js +4 -4
  277. package/lib/generated/services/mgh.js +4 -4
  278. package/lib/generated/services/mgn.js +4 -4
  279. package/lib/generated/services/migrationhub-orchestrator.js +4 -4
  280. package/lib/generated/services/migrationhub-strategy.js +2 -2
  281. package/lib/generated/services/mobileanalytics.js +1 -1
  282. package/lib/generated/services/mobiletargeting.js +4 -4
  283. package/lib/generated/services/monitron.js +3 -3
  284. package/lib/generated/services/mpa.js +4 -4
  285. package/lib/generated/services/mq.js +4 -4
  286. package/lib/generated/services/neptune-db.js +4 -4
  287. package/lib/generated/services/neptune-graph.js +4 -4
  288. package/lib/generated/services/network-firewall.js +4 -4
  289. package/lib/generated/services/network-security-director.js +1 -1
  290. package/lib/generated/services/network-security-manager.d.ts +674 -0
  291. package/lib/generated/services/network-security-manager.js +778 -0
  292. package/lib/generated/services/networkflowmonitor.js +4 -4
  293. package/lib/generated/services/networkmanager-chat.js +1 -1
  294. package/lib/generated/services/networkmanager.js +4 -4
  295. package/lib/generated/services/networkmonitor.js +4 -4
  296. package/lib/generated/services/nimble.js +3 -3
  297. package/lib/generated/services/notifications-contacts.js +4 -4
  298. package/lib/generated/services/notifications.js +4 -4
  299. package/lib/generated/services/nova-act.js +3 -3
  300. package/lib/generated/services/oam.js +37 -20
  301. package/lib/generated/services/observabilityadmin.js +5 -8
  302. package/lib/generated/services/odb.js +4 -4
  303. package/lib/generated/services/omics.js +4 -4
  304. package/lib/generated/services/one.js +3 -3
  305. package/lib/generated/services/opensearch.js +3 -3
  306. package/lib/generated/services/opsworks-cm.js +2 -2
  307. package/lib/generated/services/opsworks.js +2 -2
  308. package/lib/generated/services/organizations.js +4 -4
  309. package/lib/generated/services/osis.js +4 -4
  310. package/lib/generated/services/outposts.js +4 -4
  311. package/lib/generated/services/panorama.js +3 -3
  312. package/lib/generated/services/partnercentral-account-management.js +2 -2
  313. package/lib/generated/services/partnercentral.js +4 -4
  314. package/lib/generated/services/payment-cryptography.js +4 -4
  315. package/lib/generated/services/payments.js +3 -3
  316. package/lib/generated/services/pca-connector-ad.js +4 -4
  317. package/lib/generated/services/pca-connector-scep.js +4 -4
  318. package/lib/generated/services/pcs.js +4 -4
  319. package/lib/generated/services/personalize.js +4 -4
  320. package/lib/generated/services/pi.js +4 -4
  321. package/lib/generated/services/pipes.js +4 -4
  322. package/lib/generated/services/polly.js +3 -3
  323. package/lib/generated/services/pricing.js +2 -2
  324. package/lib/generated/services/pricingplanmanager.js +3 -3
  325. package/lib/generated/services/private-networks.js +3 -3
  326. package/lib/generated/services/profile.js +4 -4
  327. package/lib/generated/services/proton.js +4 -4
  328. package/lib/generated/services/purchase-orders.js +3 -3
  329. package/lib/generated/services/q.js +3 -3
  330. package/lib/generated/services/qapps.js +4 -4
  331. package/lib/generated/services/qbusiness.js +4 -4
  332. package/lib/generated/services/qdeveloper.js +3 -3
  333. package/lib/generated/services/qldb.js +3 -3
  334. package/lib/generated/services/quicksight.js +4 -4
  335. package/lib/generated/services/ram.js +4 -4
  336. package/lib/generated/services/rbin.js +4 -4
  337. package/lib/generated/services/rds-data.js +4 -4
  338. package/lib/generated/services/rds-db.js +2 -2
  339. package/lib/generated/services/rds.js +4 -4
  340. package/lib/generated/services/redshift-data.js +4 -4
  341. package/lib/generated/services/redshift-serverless.js +4 -4
  342. package/lib/generated/services/redshift.js +4 -4
  343. package/lib/generated/services/refactor-spaces.js +4 -4
  344. package/lib/generated/services/rekognition.js +4 -4
  345. package/lib/generated/services/repostspace.js +4 -4
  346. package/lib/generated/services/researchstudio.js +1 -1
  347. package/lib/generated/services/resiliencehub.js +4 -4
  348. package/lib/generated/services/resource-explorer-2.js +4 -4
  349. package/lib/generated/services/resource-explorer.js +1 -1
  350. package/lib/generated/services/resource-groups.js +4 -4
  351. package/lib/generated/services/rhelkb.js +1 -1
  352. package/lib/generated/services/robomaker.js +3 -3
  353. package/lib/generated/services/rolesanywhere.js +4 -4
  354. package/lib/generated/services/route53-recovery-cluster.js +4 -4
  355. package/lib/generated/services/route53-recovery-control-config.js +4 -4
  356. package/lib/generated/services/route53-recovery-readiness.js +4 -4
  357. package/lib/generated/services/route53.js +4 -4
  358. package/lib/generated/services/route53domains.js +2 -2
  359. package/lib/generated/services/route53globalresolver.js +4 -4
  360. package/lib/generated/services/route53profiles.js +4 -4
  361. package/lib/generated/services/route53resolver.js +4 -4
  362. package/lib/generated/services/rtbfabric.js +4 -4
  363. package/lib/generated/services/rum.js +4 -4
  364. package/lib/generated/services/s3-object-lambda.js +3 -3
  365. package/lib/generated/services/s3-outposts.js +4 -4
  366. package/lib/generated/services/s3.js +4 -4
  367. package/lib/generated/services/s3express.js +3 -3
  368. package/lib/generated/services/s3files.js +4 -4
  369. package/lib/generated/services/s3tables.js +4 -4
  370. package/lib/generated/services/s3vectors.js +4 -4
  371. package/lib/generated/services/sagemaker-data-science-assistant.js +1 -1
  372. package/lib/generated/services/sagemaker-geospatial.js +4 -4
  373. package/lib/generated/services/sagemaker-mlflow.js +3 -3
  374. package/lib/generated/services/sagemaker-unified-studio-mcp.js +1 -1
  375. package/lib/generated/services/sagemaker.js +4 -4
  376. package/lib/generated/services/savingsplans.js +4 -4
  377. package/lib/generated/services/scheduler.js +4 -4
  378. package/lib/generated/services/schemas.js +4 -4
  379. package/lib/generated/services/scn.js +4 -4
  380. package/lib/generated/services/sdb.js +3 -3
  381. package/lib/generated/services/secretsmanager.js +4 -4
  382. package/lib/generated/services/security-ir.js +4 -4
  383. package/lib/generated/services/securityagent.js +4 -4
  384. package/lib/generated/services/securityhub.js +4 -4
  385. package/lib/generated/services/securitylake.js +4 -4
  386. package/lib/generated/services/serverlessrepo.js +4 -4
  387. package/lib/generated/services/servicecatalog.js +4 -4
  388. package/lib/generated/services/servicediscovery.js +4 -4
  389. package/lib/generated/services/serviceextract.js +1 -1
  390. package/lib/generated/services/servicequotas.js +4 -4
  391. package/lib/generated/services/ses.js +4 -4
  392. package/lib/generated/services/shield.js +4 -4
  393. package/lib/generated/services/signer.js +4 -4
  394. package/lib/generated/services/signin.js +4 -4
  395. package/lib/generated/services/simspaceweaver.js +3 -3
  396. package/lib/generated/services/sms-voice.js +4 -4
  397. package/lib/generated/services/sms.js +1 -1
  398. package/lib/generated/services/snow-device-management.js +4 -4
  399. package/lib/generated/services/snowball.js +2 -2
  400. package/lib/generated/services/sns.js +4 -4
  401. package/lib/generated/services/social-messaging.js +4 -4
  402. package/lib/generated/services/sqlworkbench.js +3 -3
  403. package/lib/generated/services/sqs.js +4 -4
  404. package/lib/generated/services/ssm-contacts.js +4 -4
  405. package/lib/generated/services/ssm-guiconnect.js +2 -2
  406. package/lib/generated/services/ssm-incidents.js +4 -4
  407. package/lib/generated/services/ssm-quicksetup.js +4 -4
  408. package/lib/generated/services/ssm-sap.js +4 -4
  409. package/lib/generated/services/ssm.js +4 -4
  410. package/lib/generated/services/ssmmessages.js +2 -2
  411. package/lib/generated/services/sso-directory.js +1 -1
  412. package/lib/generated/services/sso-oauth.js +3 -3
  413. package/lib/generated/services/sso.js +4 -4
  414. package/lib/generated/services/states.js +4 -4
  415. package/lib/generated/services/storagegateway.js +4 -4
  416. package/lib/generated/services/sts.js +4 -4
  417. package/lib/generated/services/support-console.js +1 -1
  418. package/lib/generated/services/support.js +2 -2
  419. package/lib/generated/services/supportapp.js +2 -2
  420. package/lib/generated/services/supportauthz.js +4 -4
  421. package/lib/generated/services/supportplans.js +1 -1
  422. package/lib/generated/services/sustainability.js +2 -2
  423. package/lib/generated/services/swf.js +4 -4
  424. package/lib/generated/services/synthetics.js +4 -4
  425. package/lib/generated/services/tag.js +2 -2
  426. package/lib/generated/services/tax.js +2 -2
  427. package/lib/generated/services/textract.js +4 -4
  428. package/lib/generated/services/thinclient.js +4 -4
  429. package/lib/generated/services/timestream-influxdb.js +4 -4
  430. package/lib/generated/services/timestream.js +4 -4
  431. package/lib/generated/services/tiros.js +1 -1
  432. package/lib/generated/services/tnb.js +4 -4
  433. package/lib/generated/services/transcribe.js +4 -4
  434. package/lib/generated/services/transfer.js +4 -4
  435. package/lib/generated/services/transform-custom.js +3 -3
  436. package/lib/generated/services/transform.js +3 -3
  437. package/lib/generated/services/translate.js +4 -4
  438. package/lib/generated/services/trustedadvisor.js +3 -3
  439. package/lib/generated/services/ts.js +3 -3
  440. package/lib/generated/services/user-subscriptions.js +2 -2
  441. package/lib/generated/services/uxc.js +2 -2
  442. package/lib/generated/services/vendor-insights.js +3 -3
  443. package/lib/generated/services/verified-access.js +1 -1
  444. package/lib/generated/services/verifiedpermissions.js +4 -4
  445. package/lib/generated/services/voiceid.js +4 -4
  446. package/lib/generated/services/vpc-lattice-svcs.js +3 -3
  447. package/lib/generated/services/vpc-lattice.js +4 -4
  448. package/lib/generated/services/vpce.js +2 -2
  449. package/lib/generated/services/waf-regional.js +4 -4
  450. package/lib/generated/services/waf.js +4 -4
  451. package/lib/generated/services/wafv2.js +4 -4
  452. package/lib/generated/services/wam.js +1 -1
  453. package/lib/generated/services/wellarchitected.js +4 -4
  454. package/lib/generated/services/wickr.js +4 -4
  455. package/lib/generated/services/wisdom.js +4 -4
  456. package/lib/generated/services/workdocs.js +3 -3
  457. package/lib/generated/services/worklink.js +3 -3
  458. package/lib/generated/services/workmail.js +4 -4
  459. package/lib/generated/services/workmailmessageflow.js +3 -3
  460. package/lib/generated/services/workspaces-instances.js +4 -4
  461. package/lib/generated/services/workspaces-web.js +4 -4
  462. package/lib/generated/services/workspaces.js +4 -4
  463. package/lib/generated/services/xray.js +4 -4
  464. package/package.json +1 -1
@@ -0,0 +1,778 @@
1
+ "use strict";
2
+ var _a, _b, _c, _d;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.NetworkSecurityManagerConditions = exports.NetworkSecurityManagerOperations = exports.NetworkSecurityManagerResources = exports.NetworkSecurityManagerActions = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ // =============================================================================
7
+ // AUTO-GENERATED FILE — DO NOT EDIT MANUALLY
8
+ // Generated from AWS Service Authorization Reference data
9
+ // Source: data/service-reference/network-security-manager.json
10
+ // Run `npx projen generate-constants` to regenerate
11
+ // =============================================================================
12
+ /**
13
+ * IAM action constants for the network-security-manager service.
14
+ */
15
+ class NetworkSecurityManagerActions {
16
+ }
17
+ exports.NetworkSecurityManagerActions = NetworkSecurityManagerActions;
18
+ _a = JSII_RTTI_SYMBOL_1;
19
+ NetworkSecurityManagerActions[_a] = { fqn: "@cdk_utils/iam.network_security_manager.NetworkSecurityManagerActions", version: "1.30.0" };
20
+ /** The IAM service prefix. */
21
+ NetworkSecurityManagerActions.SERVICE_PREFIX = "network-security-manager";
22
+ /** [Write] network-security-manager:CreateDeployment */
23
+ NetworkSecurityManagerActions.CreateDeployment = "network-security-manager:CreateDeployment";
24
+ /** [Write] network-security-manager:CreateDeploymentSnapshot */
25
+ NetworkSecurityManagerActions.CreateDeploymentSnapshot = "network-security-manager:CreateDeploymentSnapshot";
26
+ /** [Write] network-security-manager:CreatePolicy */
27
+ NetworkSecurityManagerActions.CreatePolicy = "network-security-manager:CreatePolicy";
28
+ /** [Write] network-security-manager:CreatePolicySnapshot */
29
+ NetworkSecurityManagerActions.CreatePolicySnapshot = "network-security-manager:CreatePolicySnapshot";
30
+ /** [Write] network-security-manager:CreateRule */
31
+ NetworkSecurityManagerActions.CreateRule = "network-security-manager:CreateRule";
32
+ /** [Write] network-security-manager:CreateRuleSnapshot */
33
+ NetworkSecurityManagerActions.CreateRuleSnapshot = "network-security-manager:CreateRuleSnapshot";
34
+ /** [Write] network-security-manager:CreateScope */
35
+ NetworkSecurityManagerActions.CreateScope = "network-security-manager:CreateScope";
36
+ /** [Write] network-security-manager:CreateScopeSnapshot */
37
+ NetworkSecurityManagerActions.CreateScopeSnapshot = "network-security-manager:CreateScopeSnapshot";
38
+ /** [Write] network-security-manager:CreateTemplate */
39
+ NetworkSecurityManagerActions.CreateTemplate = "network-security-manager:CreateTemplate";
40
+ /** [Write] network-security-manager:CreateTemplateSnapshot */
41
+ NetworkSecurityManagerActions.CreateTemplateSnapshot = "network-security-manager:CreateTemplateSnapshot";
42
+ /** [Write] network-security-manager:DeleteAdminAccount */
43
+ NetworkSecurityManagerActions.DeleteAdminAccount = "network-security-manager:DeleteAdminAccount";
44
+ /** [Write] network-security-manager:DeleteDeployment */
45
+ NetworkSecurityManagerActions.DeleteDeployment = "network-security-manager:DeleteDeployment";
46
+ /** [Write] network-security-manager:DeletePolicy */
47
+ NetworkSecurityManagerActions.DeletePolicy = "network-security-manager:DeletePolicy";
48
+ /** [Write] network-security-manager:DeleteRule */
49
+ NetworkSecurityManagerActions.DeleteRule = "network-security-manager:DeleteRule";
50
+ /** [Write] network-security-manager:DeleteScope */
51
+ NetworkSecurityManagerActions.DeleteScope = "network-security-manager:DeleteScope";
52
+ /** [Write] network-security-manager:DeleteTemplate */
53
+ NetworkSecurityManagerActions.DeleteTemplate = "network-security-manager:DeleteTemplate";
54
+ /** [Write] network-security-manager:GenerateRuleConfiguration */
55
+ NetworkSecurityManagerActions.GenerateRuleConfiguration = "network-security-manager:GenerateRuleConfiguration";
56
+ /** [Read] network-security-manager:GetAdminAccount */
57
+ NetworkSecurityManagerActions.actionGetAdminAccount = "network-security-manager:GetAdminAccount";
58
+ /** [Read] network-security-manager:GetDeployment */
59
+ NetworkSecurityManagerActions.actionGetDeployment = "network-security-manager:GetDeployment";
60
+ /** [Read] network-security-manager:GetPolicy */
61
+ NetworkSecurityManagerActions.actionGetPolicy = "network-security-manager:GetPolicy";
62
+ /** [Read] network-security-manager:GetRule */
63
+ NetworkSecurityManagerActions.actionGetRule = "network-security-manager:GetRule";
64
+ /** [Read] network-security-manager:GetScope */
65
+ NetworkSecurityManagerActions.actionGetScope = "network-security-manager:GetScope";
66
+ /** [Read] network-security-manager:GetTemplate */
67
+ NetworkSecurityManagerActions.actionGetTemplate = "network-security-manager:GetTemplate";
68
+ /** [List] network-security-manager:ListAdminAccounts */
69
+ NetworkSecurityManagerActions.ListAdminAccounts = "network-security-manager:ListAdminAccounts";
70
+ /** [Read] network-security-manager:ListAggregateResourceSynchronizationStatuses */
71
+ NetworkSecurityManagerActions.ListAggregateResourceSynchronizationStatuses = "network-security-manager:ListAggregateResourceSynchronizationStatuses";
72
+ /** [Read] network-security-manager:ListDeploymentSnapshots */
73
+ NetworkSecurityManagerActions.ListDeploymentSnapshots = "network-security-manager:ListDeploymentSnapshots";
74
+ /** [List] network-security-manager:ListDeployments */
75
+ NetworkSecurityManagerActions.ListDeployments = "network-security-manager:ListDeployments";
76
+ /** [List] network-security-manager:ListPolicies */
77
+ NetworkSecurityManagerActions.ListPolicies = "network-security-manager:ListPolicies";
78
+ /** [Read] network-security-manager:ListPolicySnapshots */
79
+ NetworkSecurityManagerActions.ListPolicySnapshots = "network-security-manager:ListPolicySnapshots";
80
+ /** [Read] network-security-manager:ListResourceAssociations */
81
+ NetworkSecurityManagerActions.ListResourceAssociations = "network-security-manager:ListResourceAssociations";
82
+ /** [Read] network-security-manager:ListResourceSynchronizationStatuses */
83
+ NetworkSecurityManagerActions.ListResourceSynchronizationStatuses = "network-security-manager:ListResourceSynchronizationStatuses";
84
+ /** [Read] network-security-manager:ListRuleSnapshots */
85
+ NetworkSecurityManagerActions.ListRuleSnapshots = "network-security-manager:ListRuleSnapshots";
86
+ /** [List] network-security-manager:ListRules */
87
+ NetworkSecurityManagerActions.ListRules = "network-security-manager:ListRules";
88
+ /** [Read] network-security-manager:ListScopeSnapshots */
89
+ NetworkSecurityManagerActions.ListScopeSnapshots = "network-security-manager:ListScopeSnapshots";
90
+ /** [List] network-security-manager:ListScopes */
91
+ NetworkSecurityManagerActions.ListScopes = "network-security-manager:ListScopes";
92
+ /** [Read] network-security-manager:ListTagsForResource */
93
+ NetworkSecurityManagerActions.ListTagsForResource = "network-security-manager:ListTagsForResource";
94
+ /** [Read] network-security-manager:ListTemplateSnapshots */
95
+ NetworkSecurityManagerActions.ListTemplateSnapshots = "network-security-manager:ListTemplateSnapshots";
96
+ /** [List] network-security-manager:ListTemplates */
97
+ NetworkSecurityManagerActions.ListTemplates = "network-security-manager:ListTemplates";
98
+ /** [Write] network-security-manager:PutAdminAccount */
99
+ NetworkSecurityManagerActions.PutAdminAccount = "network-security-manager:PutAdminAccount";
100
+ /** [Tagging] network-security-manager:TagResource */
101
+ NetworkSecurityManagerActions.TagResource = "network-security-manager:TagResource";
102
+ /** [Tagging] network-security-manager:UntagResource */
103
+ NetworkSecurityManagerActions.UntagResource = "network-security-manager:UntagResource";
104
+ /** [Write] network-security-manager:UpdateDeployment */
105
+ NetworkSecurityManagerActions.UpdateDeployment = "network-security-manager:UpdateDeployment";
106
+ /** [Write] network-security-manager:UpdatePolicy */
107
+ NetworkSecurityManagerActions.UpdatePolicy = "network-security-manager:UpdatePolicy";
108
+ /** [Write] network-security-manager:UpdateRule */
109
+ NetworkSecurityManagerActions.UpdateRule = "network-security-manager:UpdateRule";
110
+ /** [Write] network-security-manager:UpdateScope */
111
+ NetworkSecurityManagerActions.UpdateScope = "network-security-manager:UpdateScope";
112
+ /** [Write] network-security-manager:UpdateTemplate */
113
+ NetworkSecurityManagerActions.UpdateTemplate = "network-security-manager:UpdateTemplate";
114
+ /** All read-level actions. */
115
+ NetworkSecurityManagerActions.AllReadActions = [
116
+ NetworkSecurityManagerActions.actionGetAdminAccount,
117
+ NetworkSecurityManagerActions.actionGetDeployment,
118
+ NetworkSecurityManagerActions.actionGetPolicy,
119
+ NetworkSecurityManagerActions.actionGetRule,
120
+ NetworkSecurityManagerActions.actionGetScope,
121
+ NetworkSecurityManagerActions.actionGetTemplate,
122
+ NetworkSecurityManagerActions.ListAggregateResourceSynchronizationStatuses,
123
+ NetworkSecurityManagerActions.ListDeploymentSnapshots,
124
+ NetworkSecurityManagerActions.ListPolicySnapshots,
125
+ NetworkSecurityManagerActions.ListResourceAssociations,
126
+ NetworkSecurityManagerActions.ListResourceSynchronizationStatuses,
127
+ NetworkSecurityManagerActions.ListRuleSnapshots,
128
+ NetworkSecurityManagerActions.ListScopeSnapshots,
129
+ NetworkSecurityManagerActions.ListTagsForResource,
130
+ NetworkSecurityManagerActions.ListTemplateSnapshots,
131
+ ];
132
+ /** All write-level actions. */
133
+ NetworkSecurityManagerActions.AllWriteActions = [
134
+ NetworkSecurityManagerActions.CreateDeployment,
135
+ NetworkSecurityManagerActions.CreateDeploymentSnapshot,
136
+ NetworkSecurityManagerActions.CreatePolicy,
137
+ NetworkSecurityManagerActions.CreatePolicySnapshot,
138
+ NetworkSecurityManagerActions.CreateRule,
139
+ NetworkSecurityManagerActions.CreateRuleSnapshot,
140
+ NetworkSecurityManagerActions.CreateScope,
141
+ NetworkSecurityManagerActions.CreateScopeSnapshot,
142
+ NetworkSecurityManagerActions.CreateTemplate,
143
+ NetworkSecurityManagerActions.CreateTemplateSnapshot,
144
+ NetworkSecurityManagerActions.DeleteAdminAccount,
145
+ NetworkSecurityManagerActions.DeleteDeployment,
146
+ NetworkSecurityManagerActions.DeletePolicy,
147
+ NetworkSecurityManagerActions.DeleteRule,
148
+ NetworkSecurityManagerActions.DeleteScope,
149
+ NetworkSecurityManagerActions.DeleteTemplate,
150
+ NetworkSecurityManagerActions.GenerateRuleConfiguration,
151
+ NetworkSecurityManagerActions.PutAdminAccount,
152
+ NetworkSecurityManagerActions.UpdateDeployment,
153
+ NetworkSecurityManagerActions.UpdatePolicy,
154
+ NetworkSecurityManagerActions.UpdateRule,
155
+ NetworkSecurityManagerActions.UpdateScope,
156
+ NetworkSecurityManagerActions.UpdateTemplate,
157
+ ];
158
+ /** All list-level actions. */
159
+ NetworkSecurityManagerActions.AllListActions = [
160
+ NetworkSecurityManagerActions.ListAdminAccounts,
161
+ NetworkSecurityManagerActions.ListDeployments,
162
+ NetworkSecurityManagerActions.ListPolicies,
163
+ NetworkSecurityManagerActions.ListRules,
164
+ NetworkSecurityManagerActions.ListScopes,
165
+ NetworkSecurityManagerActions.ListTemplates,
166
+ ];
167
+ /** All permission-management-level actions. */
168
+ NetworkSecurityManagerActions.AllPermissionManagementActions = [];
169
+ /** All tagging-level actions. */
170
+ NetworkSecurityManagerActions.AllTaggingActions = [
171
+ NetworkSecurityManagerActions.TagResource,
172
+ NetworkSecurityManagerActions.UntagResource,
173
+ ];
174
+ const DeploymentArnRegex = /^arn:(?<partition>[^:]+):network-security-manager:(?<region>[^:]*):(?<account>[^:]*):deployment:(?<deploymentId>[^:/?]+)$/;
175
+ const DeploymentSnapshotArnRegex = /^arn:(?<partition>[^:]+):network-security-manager:(?<region>[^:]*):(?<account>[^:]*):deployment:(?<deploymentId>[^:/?]+):(?<versionNumber>[^:/?]+)$/;
176
+ const PolicyArnRegex = /^arn:(?<partition>[^:]+):network-security-manager:(?<region>[^:]*):(?<account>[^:]*):policy:(?<policyId>[^:/?]+)$/;
177
+ const PolicySnapshotArnRegex = /^arn:(?<partition>[^:]+):network-security-manager:(?<region>[^:]*):(?<account>[^:]*):policy:(?<policyId>[^:/?]+):(?<versionNumber>[^:/?]+)$/;
178
+ const RuleArnRegex = /^arn:(?<partition>[^:]+):network-security-manager:(?<region>[^:]*):(?<account>[^:]*):rule:(?<ruleId>[^:/?]+)$/;
179
+ const RuleSnapshotArnRegex = /^arn:(?<partition>[^:]+):network-security-manager:(?<region>[^:]*):(?<account>[^:]*):rule:(?<ruleId>[^:/?]+):(?<versionNumber>[^:/?]+)$/;
180
+ const ScopeArnRegex = /^arn:(?<partition>[^:]+):network-security-manager:(?<region>[^:]*):(?<account>[^:]*):scope:(?<scopeId>[^:/?]+)$/;
181
+ const ScopeSnapshotArnRegex = /^arn:(?<partition>[^:]+):network-security-manager:(?<region>[^:]*):(?<account>[^:]*):scope:(?<scopeId>[^:/?]+):(?<versionNumber>[^:/?]+)$/;
182
+ const TemplateArnRegex = /^arn:(?<partition>[^:]+):network-security-manager:(?<region>[^:]*):(?<account>[^:]*):template:(?<templateId>[^:/?]+)$/;
183
+ const TemplateSnapshotArnRegex = /^arn:(?<partition>[^:]+):network-security-manager:(?<region>[^:]*):(?<account>[^:]*):template:(?<templateId>[^:/?]+):(?<versionNumber>[^:/?]+)$/;
184
+ /**
185
+ * ARN builders, validators, and parsers for network-security-manager resources.
186
+ */
187
+ class NetworkSecurityManagerResources {
188
+ /**
189
+ * Builds an ARN for the deployment resource.
190
+ */
191
+ static deployment(props) {
192
+ return `arn:${props.partition ?? "aws"}:network-security-manager:${props.region ?? "*"}:${props.account ?? "*"}:deployment:${props.deploymentId}`;
193
+ }
194
+ /**
195
+ * Validates whether a string is a valid ARN for the deployment resource.
196
+ */
197
+ static isValidDeploymentArn(arn) {
198
+ return DeploymentArnRegex.test(arn);
199
+ }
200
+ /**
201
+ * Parses a deployment ARN into its components.
202
+ * @throws Error if the ARN does not match the expected format.
203
+ */
204
+ static parseDeploymentArn(arn) {
205
+ const match = DeploymentArnRegex.exec(arn);
206
+ if (!match?.groups) {
207
+ throw new Error(`Invalid deployment ARN: ${arn}`);
208
+ }
209
+ return {
210
+ partition: match.groups.partition,
211
+ region: match.groups.region,
212
+ account: match.groups.account,
213
+ deploymentId: match.groups.deploymentId,
214
+ };
215
+ }
216
+ /**
217
+ * Builds an ARN for the deployment-snapshot resource.
218
+ */
219
+ static deploymentSnapshot(props) {
220
+ return `arn:${props.partition ?? "aws"}:network-security-manager:${props.region ?? "*"}:${props.account ?? "*"}:deployment:${props.deploymentId}:${props.versionNumber}`;
221
+ }
222
+ /**
223
+ * Validates whether a string is a valid ARN for the deployment-snapshot resource.
224
+ */
225
+ static isValidDeploymentSnapshotArn(arn) {
226
+ return DeploymentSnapshotArnRegex.test(arn);
227
+ }
228
+ /**
229
+ * Parses a deployment-snapshot ARN into its components.
230
+ * @throws Error if the ARN does not match the expected format.
231
+ */
232
+ static parseDeploymentSnapshotArn(arn) {
233
+ const match = DeploymentSnapshotArnRegex.exec(arn);
234
+ if (!match?.groups) {
235
+ throw new Error(`Invalid deployment-snapshot ARN: ${arn}`);
236
+ }
237
+ return {
238
+ partition: match.groups.partition,
239
+ region: match.groups.region,
240
+ account: match.groups.account,
241
+ deploymentId: match.groups.deploymentId,
242
+ versionNumber: match.groups.versionNumber,
243
+ };
244
+ }
245
+ /**
246
+ * Builds an ARN for the policy resource.
247
+ */
248
+ static policy(props) {
249
+ return `arn:${props.partition ?? "aws"}:network-security-manager:${props.region ?? "*"}:${props.account ?? "*"}:policy:${props.policyId}`;
250
+ }
251
+ /**
252
+ * Validates whether a string is a valid ARN for the policy resource.
253
+ */
254
+ static isValidPolicyArn(arn) {
255
+ return PolicyArnRegex.test(arn);
256
+ }
257
+ /**
258
+ * Parses a policy ARN into its components.
259
+ * @throws Error if the ARN does not match the expected format.
260
+ */
261
+ static parsePolicyArn(arn) {
262
+ const match = PolicyArnRegex.exec(arn);
263
+ if (!match?.groups) {
264
+ throw new Error(`Invalid policy ARN: ${arn}`);
265
+ }
266
+ return {
267
+ partition: match.groups.partition,
268
+ region: match.groups.region,
269
+ account: match.groups.account,
270
+ policyId: match.groups.policyId,
271
+ };
272
+ }
273
+ /**
274
+ * Builds an ARN for the policy-snapshot resource.
275
+ */
276
+ static policySnapshot(props) {
277
+ return `arn:${props.partition ?? "aws"}:network-security-manager:${props.region ?? "*"}:${props.account ?? "*"}:policy:${props.policyId}:${props.versionNumber}`;
278
+ }
279
+ /**
280
+ * Validates whether a string is a valid ARN for the policy-snapshot resource.
281
+ */
282
+ static isValidPolicySnapshotArn(arn) {
283
+ return PolicySnapshotArnRegex.test(arn);
284
+ }
285
+ /**
286
+ * Parses a policy-snapshot ARN into its components.
287
+ * @throws Error if the ARN does not match the expected format.
288
+ */
289
+ static parsePolicySnapshotArn(arn) {
290
+ const match = PolicySnapshotArnRegex.exec(arn);
291
+ if (!match?.groups) {
292
+ throw new Error(`Invalid policy-snapshot ARN: ${arn}`);
293
+ }
294
+ return {
295
+ partition: match.groups.partition,
296
+ region: match.groups.region,
297
+ account: match.groups.account,
298
+ policyId: match.groups.policyId,
299
+ versionNumber: match.groups.versionNumber,
300
+ };
301
+ }
302
+ /**
303
+ * Builds an ARN for the rule resource.
304
+ */
305
+ static rule(props) {
306
+ return `arn:${props.partition ?? "aws"}:network-security-manager:${props.region ?? "*"}:${props.account ?? "*"}:rule:${props.ruleId}`;
307
+ }
308
+ /**
309
+ * Validates whether a string is a valid ARN for the rule resource.
310
+ */
311
+ static isValidRuleArn(arn) {
312
+ return RuleArnRegex.test(arn);
313
+ }
314
+ /**
315
+ * Parses a rule ARN into its components.
316
+ * @throws Error if the ARN does not match the expected format.
317
+ */
318
+ static parseRuleArn(arn) {
319
+ const match = RuleArnRegex.exec(arn);
320
+ if (!match?.groups) {
321
+ throw new Error(`Invalid rule ARN: ${arn}`);
322
+ }
323
+ return {
324
+ partition: match.groups.partition,
325
+ region: match.groups.region,
326
+ account: match.groups.account,
327
+ ruleId: match.groups.ruleId,
328
+ };
329
+ }
330
+ /**
331
+ * Builds an ARN for the rule-snapshot resource.
332
+ */
333
+ static ruleSnapshot(props) {
334
+ return `arn:${props.partition ?? "aws"}:network-security-manager:${props.region ?? "*"}:${props.account ?? "*"}:rule:${props.ruleId}:${props.versionNumber}`;
335
+ }
336
+ /**
337
+ * Validates whether a string is a valid ARN for the rule-snapshot resource.
338
+ */
339
+ static isValidRuleSnapshotArn(arn) {
340
+ return RuleSnapshotArnRegex.test(arn);
341
+ }
342
+ /**
343
+ * Parses a rule-snapshot ARN into its components.
344
+ * @throws Error if the ARN does not match the expected format.
345
+ */
346
+ static parseRuleSnapshotArn(arn) {
347
+ const match = RuleSnapshotArnRegex.exec(arn);
348
+ if (!match?.groups) {
349
+ throw new Error(`Invalid rule-snapshot ARN: ${arn}`);
350
+ }
351
+ return {
352
+ partition: match.groups.partition,
353
+ region: match.groups.region,
354
+ account: match.groups.account,
355
+ ruleId: match.groups.ruleId,
356
+ versionNumber: match.groups.versionNumber,
357
+ };
358
+ }
359
+ /**
360
+ * Builds an ARN for the scope resource.
361
+ */
362
+ static scope(props) {
363
+ return `arn:${props.partition ?? "aws"}:network-security-manager:${props.region ?? "*"}:${props.account ?? "*"}:scope:${props.scopeId}`;
364
+ }
365
+ /**
366
+ * Validates whether a string is a valid ARN for the scope resource.
367
+ */
368
+ static isValidScopeArn(arn) {
369
+ return ScopeArnRegex.test(arn);
370
+ }
371
+ /**
372
+ * Parses a scope ARN into its components.
373
+ * @throws Error if the ARN does not match the expected format.
374
+ */
375
+ static parseScopeArn(arn) {
376
+ const match = ScopeArnRegex.exec(arn);
377
+ if (!match?.groups) {
378
+ throw new Error(`Invalid scope ARN: ${arn}`);
379
+ }
380
+ return {
381
+ partition: match.groups.partition,
382
+ region: match.groups.region,
383
+ account: match.groups.account,
384
+ scopeId: match.groups.scopeId,
385
+ };
386
+ }
387
+ /**
388
+ * Builds an ARN for the scope-snapshot resource.
389
+ */
390
+ static scopeSnapshot(props) {
391
+ return `arn:${props.partition ?? "aws"}:network-security-manager:${props.region ?? "*"}:${props.account ?? "*"}:scope:${props.scopeId}:${props.versionNumber}`;
392
+ }
393
+ /**
394
+ * Validates whether a string is a valid ARN for the scope-snapshot resource.
395
+ */
396
+ static isValidScopeSnapshotArn(arn) {
397
+ return ScopeSnapshotArnRegex.test(arn);
398
+ }
399
+ /**
400
+ * Parses a scope-snapshot ARN into its components.
401
+ * @throws Error if the ARN does not match the expected format.
402
+ */
403
+ static parseScopeSnapshotArn(arn) {
404
+ const match = ScopeSnapshotArnRegex.exec(arn);
405
+ if (!match?.groups) {
406
+ throw new Error(`Invalid scope-snapshot ARN: ${arn}`);
407
+ }
408
+ return {
409
+ partition: match.groups.partition,
410
+ region: match.groups.region,
411
+ account: match.groups.account,
412
+ scopeId: match.groups.scopeId,
413
+ versionNumber: match.groups.versionNumber,
414
+ };
415
+ }
416
+ /**
417
+ * Builds an ARN for the template resource.
418
+ */
419
+ static template(props) {
420
+ return `arn:${props.partition ?? "aws"}:network-security-manager:${props.region ?? "*"}:${props.account ?? "*"}:template:${props.templateId}`;
421
+ }
422
+ /**
423
+ * Validates whether a string is a valid ARN for the template resource.
424
+ */
425
+ static isValidTemplateArn(arn) {
426
+ return TemplateArnRegex.test(arn);
427
+ }
428
+ /**
429
+ * Parses a template ARN into its components.
430
+ * @throws Error if the ARN does not match the expected format.
431
+ */
432
+ static parseTemplateArn(arn) {
433
+ const match = TemplateArnRegex.exec(arn);
434
+ if (!match?.groups) {
435
+ throw new Error(`Invalid template ARN: ${arn}`);
436
+ }
437
+ return {
438
+ partition: match.groups.partition,
439
+ region: match.groups.region,
440
+ account: match.groups.account,
441
+ templateId: match.groups.templateId,
442
+ };
443
+ }
444
+ /**
445
+ * Builds an ARN for the template-snapshot resource.
446
+ */
447
+ static templateSnapshot(props) {
448
+ return `arn:${props.partition ?? "aws"}:network-security-manager:${props.region ?? "*"}:${props.account ?? "*"}:template:${props.templateId}:${props.versionNumber}`;
449
+ }
450
+ /**
451
+ * Validates whether a string is a valid ARN for the template-snapshot resource.
452
+ */
453
+ static isValidTemplateSnapshotArn(arn) {
454
+ return TemplateSnapshotArnRegex.test(arn);
455
+ }
456
+ /**
457
+ * Parses a template-snapshot ARN into its components.
458
+ * @throws Error if the ARN does not match the expected format.
459
+ */
460
+ static parseTemplateSnapshotArn(arn) {
461
+ const match = TemplateSnapshotArnRegex.exec(arn);
462
+ if (!match?.groups) {
463
+ throw new Error(`Invalid template-snapshot ARN: ${arn}`);
464
+ }
465
+ return {
466
+ partition: match.groups.partition,
467
+ region: match.groups.region,
468
+ account: match.groups.account,
469
+ templateId: match.groups.templateId,
470
+ versionNumber: match.groups.versionNumber,
471
+ };
472
+ }
473
+ }
474
+ exports.NetworkSecurityManagerResources = NetworkSecurityManagerResources;
475
+ _b = JSII_RTTI_SYMBOL_1;
476
+ NetworkSecurityManagerResources[_b] = { fqn: "@cdk_utils/iam.network_security_manager.NetworkSecurityManagerResources", version: "1.30.0" };
477
+ /**
478
+ * API operation to required IAM actions mapping for network-security-manager.
479
+ */
480
+ class NetworkSecurityManagerOperations {
481
+ }
482
+ exports.NetworkSecurityManagerOperations = NetworkSecurityManagerOperations;
483
+ _c = JSII_RTTI_SYMBOL_1;
484
+ NetworkSecurityManagerOperations[_c] = { fqn: "@cdk_utils/iam.network_security_manager.NetworkSecurityManagerOperations", version: "1.30.0" };
485
+ /** IAM actions required for the CreateDeployment API call. */
486
+ NetworkSecurityManagerOperations.CreateDeployment = [
487
+ "network-security-manager:CreateDeployment",
488
+ "network-security-manager:TagResource",
489
+ ];
490
+ /** IAM actions required for the CreateDeploymentSnapshot API call. */
491
+ NetworkSecurityManagerOperations.CreateDeploymentSnapshot = [
492
+ "network-security-manager:CreateDeploymentSnapshot",
493
+ "network-security-manager:TagResource",
494
+ ];
495
+ /** IAM actions required for the CreatePolicy API call. */
496
+ NetworkSecurityManagerOperations.CreatePolicy = [
497
+ "network-security-manager:CreatePolicy",
498
+ "network-security-manager:TagResource",
499
+ ];
500
+ /** IAM actions required for the CreatePolicySnapshot API call. */
501
+ NetworkSecurityManagerOperations.CreatePolicySnapshot = [
502
+ "network-security-manager:CreatePolicySnapshot",
503
+ "network-security-manager:TagResource",
504
+ ];
505
+ /** IAM actions required for the CreateRule API call. */
506
+ NetworkSecurityManagerOperations.CreateRule = [
507
+ "network-security-manager:CreateRule",
508
+ "network-security-manager:TagResource",
509
+ ];
510
+ /** IAM actions required for the CreateRuleSnapshot API call. */
511
+ NetworkSecurityManagerOperations.CreateRuleSnapshot = [
512
+ "network-security-manager:CreateRuleSnapshot",
513
+ "network-security-manager:TagResource",
514
+ ];
515
+ /** IAM actions required for the CreateScope API call. */
516
+ NetworkSecurityManagerOperations.CreateScope = [
517
+ "network-security-manager:CreateScope",
518
+ "network-security-manager:TagResource",
519
+ ];
520
+ /** IAM actions required for the CreateScopeSnapshot API call. */
521
+ NetworkSecurityManagerOperations.CreateScopeSnapshot = [
522
+ "network-security-manager:CreateScopeSnapshot",
523
+ "network-security-manager:TagResource",
524
+ ];
525
+ /** IAM actions required for the CreateTemplate API call. */
526
+ NetworkSecurityManagerOperations.CreateTemplate = [
527
+ "network-security-manager:CreateTemplate",
528
+ "network-security-manager:TagResource",
529
+ ];
530
+ /** IAM actions required for the CreateTemplateSnapshot API call. */
531
+ NetworkSecurityManagerOperations.CreateTemplateSnapshot = [
532
+ "network-security-manager:CreateTemplateSnapshot",
533
+ "network-security-manager:TagResource",
534
+ ];
535
+ /** IAM actions required for the DeleteAdminAccount API call. */
536
+ NetworkSecurityManagerOperations.DeleteAdminAccount = [
537
+ "network-security-manager:DeleteAdminAccount",
538
+ ];
539
+ /** IAM actions required for the DeleteDeployment API call. */
540
+ NetworkSecurityManagerOperations.DeleteDeployment = [
541
+ "network-security-manager:DeleteDeployment",
542
+ ];
543
+ /** IAM actions required for the DeletePolicy API call. */
544
+ NetworkSecurityManagerOperations.DeletePolicy = [
545
+ "network-security-manager:DeletePolicy",
546
+ ];
547
+ /** IAM actions required for the DeleteRule API call. */
548
+ NetworkSecurityManagerOperations.DeleteRule = [
549
+ "network-security-manager:DeleteRule",
550
+ ];
551
+ /** IAM actions required for the DeleteScope API call. */
552
+ NetworkSecurityManagerOperations.DeleteScope = [
553
+ "network-security-manager:DeleteScope",
554
+ ];
555
+ /** IAM actions required for the DeleteTemplate API call. */
556
+ NetworkSecurityManagerOperations.DeleteTemplate = [
557
+ "network-security-manager:DeleteTemplate",
558
+ ];
559
+ /** IAM actions required for the GenerateRuleConfiguration API call. */
560
+ NetworkSecurityManagerOperations.GenerateRuleConfiguration = [
561
+ "network-security-manager:GenerateRuleConfiguration",
562
+ ];
563
+ /** IAM actions required for the GetAdminAccount API call. */
564
+ NetworkSecurityManagerOperations.opGetAdminAccount = [
565
+ "network-security-manager:GetAdminAccount",
566
+ ];
567
+ /** IAM actions required for the GetDeployment API call. */
568
+ NetworkSecurityManagerOperations.opGetDeployment = [
569
+ "network-security-manager:GetDeployment",
570
+ ];
571
+ /** IAM actions required for the GetPolicy API call. */
572
+ NetworkSecurityManagerOperations.opGetPolicy = [
573
+ "network-security-manager:GetPolicy",
574
+ ];
575
+ /** IAM actions required for the GetRule API call. */
576
+ NetworkSecurityManagerOperations.opGetRule = ["network-security-manager:GetRule"];
577
+ /** IAM actions required for the GetScope API call. */
578
+ NetworkSecurityManagerOperations.opGetScope = ["network-security-manager:GetScope"];
579
+ /** IAM actions required for the GetTemplate API call. */
580
+ NetworkSecurityManagerOperations.opGetTemplate = [
581
+ "network-security-manager:GetTemplate",
582
+ ];
583
+ /** IAM actions required for the ListAdminAccounts API call. */
584
+ NetworkSecurityManagerOperations.ListAdminAccounts = [
585
+ "network-security-manager:ListAdminAccounts",
586
+ ];
587
+ /** IAM actions required for the ListAggregateResourceSynchronizationStatuses API call. */
588
+ NetworkSecurityManagerOperations.ListAggregateResourceSynchronizationStatuses = [
589
+ "network-security-manager:ListAggregateResourceSynchronizationStatuses",
590
+ ];
591
+ /** IAM actions required for the ListDeploymentSnapshots API call. */
592
+ NetworkSecurityManagerOperations.ListDeploymentSnapshots = [
593
+ "network-security-manager:ListDeploymentSnapshots",
594
+ ];
595
+ /** IAM actions required for the ListDeployments API call. */
596
+ NetworkSecurityManagerOperations.ListDeployments = [
597
+ "network-security-manager:ListDeployments",
598
+ ];
599
+ /** IAM actions required for the ListPolicies API call. */
600
+ NetworkSecurityManagerOperations.ListPolicies = [
601
+ "network-security-manager:ListPolicies",
602
+ ];
603
+ /** IAM actions required for the ListPolicySnapshots API call. */
604
+ NetworkSecurityManagerOperations.ListPolicySnapshots = [
605
+ "network-security-manager:ListPolicySnapshots",
606
+ ];
607
+ /** IAM actions required for the ListResourceAssociations API call. */
608
+ NetworkSecurityManagerOperations.ListResourceAssociations = [
609
+ "network-security-manager:ListResourceAssociations",
610
+ ];
611
+ /** IAM actions required for the ListResourceSynchronizationStatuses API call. */
612
+ NetworkSecurityManagerOperations.ListResourceSynchronizationStatuses = [
613
+ "network-security-manager:ListResourceSynchronizationStatuses",
614
+ ];
615
+ /** IAM actions required for the ListRuleSnapshots API call. */
616
+ NetworkSecurityManagerOperations.ListRuleSnapshots = [
617
+ "network-security-manager:ListRuleSnapshots",
618
+ ];
619
+ /** IAM actions required for the ListRules API call. */
620
+ NetworkSecurityManagerOperations.ListRules = ["network-security-manager:ListRules"];
621
+ /** IAM actions required for the ListScopeSnapshots API call. */
622
+ NetworkSecurityManagerOperations.ListScopeSnapshots = [
623
+ "network-security-manager:ListScopeSnapshots",
624
+ ];
625
+ /** IAM actions required for the ListScopes API call. */
626
+ NetworkSecurityManagerOperations.ListScopes = [
627
+ "network-security-manager:ListScopes",
628
+ ];
629
+ /** IAM actions required for the ListTagsForResource API call. */
630
+ NetworkSecurityManagerOperations.ListTagsForResource = [
631
+ "network-security-manager:ListTagsForResource",
632
+ ];
633
+ /** IAM actions required for the ListTemplateSnapshots API call. */
634
+ NetworkSecurityManagerOperations.ListTemplateSnapshots = [
635
+ "network-security-manager:ListTemplateSnapshots",
636
+ ];
637
+ /** IAM actions required for the ListTemplates API call. */
638
+ NetworkSecurityManagerOperations.ListTemplates = [
639
+ "network-security-manager:ListTemplates",
640
+ ];
641
+ /** IAM actions required for the PutAdminAccount API call. */
642
+ NetworkSecurityManagerOperations.PutAdminAccount = [
643
+ "network-security-manager:PutAdminAccount",
644
+ ];
645
+ /** IAM actions required for the TagResource API call. */
646
+ NetworkSecurityManagerOperations.TagResource = [
647
+ "network-security-manager:TagResource",
648
+ ];
649
+ /** IAM actions required for the UntagResource API call. */
650
+ NetworkSecurityManagerOperations.UntagResource = [
651
+ "network-security-manager:UntagResource",
652
+ ];
653
+ /** IAM actions required for the UpdateDeployment API call. */
654
+ NetworkSecurityManagerOperations.UpdateDeployment = [
655
+ "network-security-manager:UpdateDeployment",
656
+ ];
657
+ /** IAM actions required for the UpdatePolicy API call. */
658
+ NetworkSecurityManagerOperations.UpdatePolicy = [
659
+ "network-security-manager:UpdatePolicy",
660
+ ];
661
+ /** IAM actions required for the UpdateRule API call. */
662
+ NetworkSecurityManagerOperations.UpdateRule = [
663
+ "network-security-manager:UpdateRule",
664
+ ];
665
+ /** IAM actions required for the UpdateScope API call. */
666
+ NetworkSecurityManagerOperations.UpdateScope = [
667
+ "network-security-manager:UpdateScope",
668
+ ];
669
+ /** IAM actions required for the UpdateTemplate API call. */
670
+ NetworkSecurityManagerOperations.UpdateTemplate = [
671
+ "network-security-manager:UpdateTemplate",
672
+ ];
673
+ /**
674
+ * Condition key constants and builders for network-security-manager.
675
+ */
676
+ class NetworkSecurityManagerConditions {
677
+ /**
678
+ * Generates a condition block for `aws:RequestTag/${TagKey}`.
679
+ */
680
+ static requestTag(value) {
681
+ return { StringEquals: { "aws:RequestTag/${TagKey}": value } };
682
+ }
683
+ /**
684
+ * Generates a condition block for `aws:ResourceTag/${TagKey}`.
685
+ */
686
+ static resourceTag(value) {
687
+ return { StringEquals: { "aws:ResourceTag/${TagKey}": value } };
688
+ }
689
+ /**
690
+ * Generates a condition block for `aws:TagKeys`.
691
+ */
692
+ static tagKeys(values) {
693
+ return { "ForAllValues:StringEquals": { "aws:TagKeys": values } };
694
+ }
695
+ }
696
+ exports.NetworkSecurityManagerConditions = NetworkSecurityManagerConditions;
697
+ _d = JSII_RTTI_SYMBOL_1;
698
+ NetworkSecurityManagerConditions[_d] = { fqn: "@cdk_utils/iam.network_security_manager.NetworkSecurityManagerConditions", version: "1.30.0" };
699
+ /** Condition keys applicable to the CreateDeployment action. */
700
+ NetworkSecurityManagerConditions.CreateDeploymentConditionKeys = [
701
+ "aws:RequestTag/${TagKey}",
702
+ "aws:TagKeys",
703
+ ];
704
+ /** Condition keys applicable to the CreateDeploymentSnapshot action. */
705
+ NetworkSecurityManagerConditions.CreateDeploymentSnapshotConditionKeys = [
706
+ "aws:RequestTag/${TagKey}",
707
+ "aws:TagKeys",
708
+ ];
709
+ /** Condition keys applicable to the CreatePolicy action. */
710
+ NetworkSecurityManagerConditions.CreatePolicyConditionKeys = [
711
+ "aws:RequestTag/${TagKey}",
712
+ "aws:TagKeys",
713
+ ];
714
+ /** Condition keys applicable to the CreatePolicySnapshot action. */
715
+ NetworkSecurityManagerConditions.CreatePolicySnapshotConditionKeys = [
716
+ "aws:RequestTag/${TagKey}",
717
+ "aws:TagKeys",
718
+ ];
719
+ /** Condition keys applicable to the CreateRule action. */
720
+ NetworkSecurityManagerConditions.CreateRuleConditionKeys = [
721
+ "aws:RequestTag/${TagKey}",
722
+ "aws:TagKeys",
723
+ ];
724
+ /** Condition keys applicable to the CreateRuleSnapshot action. */
725
+ NetworkSecurityManagerConditions.CreateRuleSnapshotConditionKeys = [
726
+ "aws:RequestTag/${TagKey}",
727
+ "aws:TagKeys",
728
+ ];
729
+ /** Condition keys applicable to the CreateScope action. */
730
+ NetworkSecurityManagerConditions.CreateScopeConditionKeys = [
731
+ "aws:RequestTag/${TagKey}",
732
+ "aws:TagKeys",
733
+ ];
734
+ /** Condition keys applicable to the CreateScopeSnapshot action. */
735
+ NetworkSecurityManagerConditions.CreateScopeSnapshotConditionKeys = [
736
+ "aws:RequestTag/${TagKey}",
737
+ "aws:TagKeys",
738
+ ];
739
+ /** Condition keys applicable to the CreateTemplate action. */
740
+ NetworkSecurityManagerConditions.CreateTemplateConditionKeys = [
741
+ "aws:RequestTag/${TagKey}",
742
+ "aws:TagKeys",
743
+ ];
744
+ /** Condition keys applicable to the CreateTemplateSnapshot action. */
745
+ NetworkSecurityManagerConditions.CreateTemplateSnapshotConditionKeys = [
746
+ "aws:RequestTag/${TagKey}",
747
+ "aws:TagKeys",
748
+ ];
749
+ /** Condition keys applicable to the ListResourceAssociations action. */
750
+ NetworkSecurityManagerConditions.ListResourceAssociationsConditionKeys = [
751
+ "aws:ResourceTag/${TagKey}",
752
+ ];
753
+ /** Condition keys applicable to the ListResourceSynchronizationStatuses action. */
754
+ NetworkSecurityManagerConditions.ListResourceSynchronizationStatusesConditionKeys = [
755
+ "aws:ResourceTag/${TagKey}",
756
+ ];
757
+ /** Condition keys applicable to the ListTagsForResource action. */
758
+ NetworkSecurityManagerConditions.ListTagsForResourceConditionKeys = [
759
+ "aws:ResourceTag/${TagKey}",
760
+ ];
761
+ /** Condition keys applicable to the TagResource action. */
762
+ NetworkSecurityManagerConditions.TagResourceConditionKeys = [
763
+ "aws:RequestTag/${TagKey}",
764
+ "aws:ResourceTag/${TagKey}",
765
+ "aws:TagKeys",
766
+ ];
767
+ /** Condition keys applicable to the UntagResource action. */
768
+ NetworkSecurityManagerConditions.UntagResourceConditionKeys = [
769
+ "aws:ResourceTag/${TagKey}",
770
+ "aws:TagKeys",
771
+ ];
772
+ /** Condition key: aws:RequestTag/${TagKey} (String) */
773
+ NetworkSecurityManagerConditions.AWS_REQUEST_TAG = "aws:RequestTag/${TagKey}";
774
+ /** Condition key: aws:ResourceTag/${TagKey} (String) */
775
+ NetworkSecurityManagerConditions.AWS_RESOURCE_TAG = "aws:ResourceTag/${TagKey}";
776
+ /** Condition key: aws:TagKeys (ArrayOfString) */
777
+ NetworkSecurityManagerConditions.AWS_TAG_KEYS = "aws:TagKeys";
778
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dlbmVyYXRlZC9zZXJ2aWNlcy9uZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRkFBZ0Y7QUFDaEYsNkNBQTZDO0FBQzdDLDBEQUEwRDtBQUMxRCwrREFBK0Q7QUFDL0Qsb0RBQW9EO0FBQ3BELGdGQUFnRjtBQUVoRjs7R0FFRztBQUNILE1BQWEsNkJBQTZCOztBQUExQyxzRUFtTEM7OztBQWxMQSw4QkFBOEI7QUFDZCw0Q0FBYyxHQUFHLDBCQUEwQixDQUFDO0FBRTVELHdEQUF3RDtBQUN4Qyw4Q0FBZ0IsR0FDL0IsMkNBQTJDLENBQUM7QUFDN0MsZ0VBQWdFO0FBQ2hELHNEQUF3QixHQUN2QyxtREFBbUQsQ0FBQztBQUNyRCxvREFBb0Q7QUFDcEMsMENBQVksR0FBRyx1Q0FBdUMsQ0FBQztBQUN2RSw0REFBNEQ7QUFDNUMsa0RBQW9CLEdBQ25DLCtDQUErQyxDQUFDO0FBQ2pELGtEQUFrRDtBQUNsQyx3Q0FBVSxHQUFHLHFDQUFxQyxDQUFDO0FBQ25FLDBEQUEwRDtBQUMxQyxnREFBa0IsR0FDakMsNkNBQTZDLENBQUM7QUFDL0MsbURBQW1EO0FBQ25DLHlDQUFXLEdBQUcsc0NBQXNDLENBQUM7QUFDckUsMkRBQTJEO0FBQzNDLGlEQUFtQixHQUNsQyw4Q0FBOEMsQ0FBQztBQUNoRCxzREFBc0Q7QUFDdEMsNENBQWMsR0FBRyx5Q0FBeUMsQ0FBQztBQUMzRSw4REFBOEQ7QUFDOUMsb0RBQXNCLEdBQ3JDLGlEQUFpRCxDQUFDO0FBQ25ELDBEQUEwRDtBQUMxQyxnREFBa0IsR0FDakMsNkNBQTZDLENBQUM7QUFDL0Msd0RBQXdEO0FBQ3hDLDhDQUFnQixHQUMvQiwyQ0FBMkMsQ0FBQztBQUM3QyxvREFBb0Q7QUFDcEMsMENBQVksR0FBRyx1Q0FBdUMsQ0FBQztBQUN2RSxr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dCI6WyIvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQVVUTy1HRU5FUkFURUQgRklMRSDigJQgRE8gTk9UIEVESVQgTUFOVUFMTFlcbi8vIEdlbmVyYXRlZCBmcm9tIEFXUyBTZXJ2aWNlIEF1dGhvcml6YXRpb24gUmVmZXJlbmNlIGRhdGFcbi8vIFNvdXJjZTogZGF0YS9zZXJ2aWNlLXJlZmVyZW5jZS9uZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXIuanNvblxuLy8gUnVuIGBucHggcHJvamVuIGdlbmVyYXRlLWNvbnN0YW50c2AgdG8gcmVnZW5lcmF0ZVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBJQU0gYWN0aW9uIGNvbnN0YW50cyBmb3IgdGhlIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlciBzZXJ2aWNlLlxuICovXG5leHBvcnQgY2xhc3MgTmV0d29ya1NlY3VyaXR5TWFuYWdlckFjdGlvbnMge1xuXHQvKiogVGhlIElBTSBzZXJ2aWNlIHByZWZpeC4gKi9cblx0c3RhdGljIHJlYWRvbmx5IFNFUlZJQ0VfUFJFRklYID0gXCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXJcIjtcblxuXHQvKiogW1dyaXRlXSBuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6Q3JlYXRlRGVwbG95bWVudCAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgQ3JlYXRlRGVwbG95bWVudCA9XG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6Q3JlYXRlRGVwbG95bWVudFwiO1xuXHQvKiogW1dyaXRlXSBuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6Q3JlYXRlRGVwbG95bWVudFNuYXBzaG90ICovXG5cdHN0YXRpYyByZWFkb25seSBDcmVhdGVEZXBsb3ltZW50U25hcHNob3QgPVxuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkNyZWF0ZURlcGxveW1lbnRTbmFwc2hvdFwiO1xuXHQvKiogW1dyaXRlXSBuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6Q3JlYXRlUG9saWN5ICovXG5cdHN0YXRpYyByZWFkb25seSBDcmVhdGVQb2xpY3kgPSBcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpDcmVhdGVQb2xpY3lcIjtcblx0LyoqIFtXcml0ZV0gbmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkNyZWF0ZVBvbGljeVNuYXBzaG90ICovXG5cdHN0YXRpYyByZWFkb25seSBDcmVhdGVQb2xpY3lTbmFwc2hvdCA9XG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6Q3JlYXRlUG9saWN5U25hcHNob3RcIjtcblx0LyoqIFtXcml0ZV0gbmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkNyZWF0ZVJ1bGUgKi9cblx0c3RhdGljIHJlYWRvbmx5IENyZWF0ZVJ1bGUgPSBcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpDcmVhdGVSdWxlXCI7XG5cdC8qKiBbV3JpdGVdIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpDcmVhdGVSdWxlU25hcHNob3QgKi9cblx0c3RhdGljIHJlYWRvbmx5IENyZWF0ZVJ1bGVTbmFwc2hvdCA9XG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6Q3JlYXRlUnVsZVNuYXBzaG90XCI7XG5cdC8qKiBbV3JpdGVdIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpDcmVhdGVTY29wZSAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgQ3JlYXRlU2NvcGUgPSBcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpDcmVhdGVTY29wZVwiO1xuXHQvKiogW1dyaXRlXSBuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6Q3JlYXRlU2NvcGVTbmFwc2hvdCAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgQ3JlYXRlU2NvcGVTbmFwc2hvdCA9XG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6Q3JlYXRlU2NvcGVTbmFwc2hvdFwiO1xuXHQvKiogW1dyaXRlXSBuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6Q3JlYXRlVGVtcGxhdGUgKi9cblx0c3RhdGljIHJlYWRvbmx5IENyZWF0ZVRlbXBsYXRlID0gXCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6Q3JlYXRlVGVtcGxhdGVcIjtcblx0LyoqIFtXcml0ZV0gbmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkNyZWF0ZVRlbXBsYXRlU25hcHNob3QgKi9cblx0c3RhdGljIHJlYWRvbmx5IENyZWF0ZVRlbXBsYXRlU25hcHNob3QgPVxuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkNyZWF0ZVRlbXBsYXRlU25hcHNob3RcIjtcblx0LyoqIFtXcml0ZV0gbmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkRlbGV0ZUFkbWluQWNjb3VudCAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgRGVsZXRlQWRtaW5BY2NvdW50ID1cblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpEZWxldGVBZG1pbkFjY291bnRcIjtcblx0LyoqIFtXcml0ZV0gbmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkRlbGV0ZURlcGxveW1lbnQgKi9cblx0c3RhdGljIHJlYWRvbmx5IERlbGV0ZURlcGxveW1lbnQgPVxuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkRlbGV0ZURlcGxveW1lbnRcIjtcblx0LyoqIFtXcml0ZV0gbmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkRlbGV0ZVBvbGljeSAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgRGVsZXRlUG9saWN5ID0gXCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6RGVsZXRlUG9saWN5XCI7XG5cdC8qKiBbV3JpdGVdIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpEZWxldGVSdWxlICovXG5cdHN0YXRpYyByZWFkb25seSBEZWxldGVSdWxlID0gXCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6RGVsZXRlUnVsZVwiO1xuXHQvKiogW1dyaXRlXSBuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6RGVsZXRlU2NvcGUgKi9cblx0c3RhdGljIHJlYWRvbmx5IERlbGV0ZVNjb3BlID0gXCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6RGVsZXRlU2NvcGVcIjtcblx0LyoqIFtXcml0ZV0gbmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkRlbGV0ZVRlbXBsYXRlICovXG5cdHN0YXRpYyByZWFkb25seSBEZWxldGVUZW1wbGF0ZSA9IFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkRlbGV0ZVRlbXBsYXRlXCI7XG5cdC8qKiBbV3JpdGVdIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpHZW5lcmF0ZVJ1bGVDb25maWd1cmF0aW9uICovXG5cdHN0YXRpYyByZWFkb25seSBHZW5lcmF0ZVJ1bGVDb25maWd1cmF0aW9uID1cblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpHZW5lcmF0ZVJ1bGVDb25maWd1cmF0aW9uXCI7XG5cdC8qKiBbUmVhZF0gbmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkdldEFkbWluQWNjb3VudCAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgYWN0aW9uR2V0QWRtaW5BY2NvdW50ID1cblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpHZXRBZG1pbkFjY291bnRcIjtcblx0LyoqIFtSZWFkXSBuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6R2V0RGVwbG95bWVudCAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgYWN0aW9uR2V0RGVwbG95bWVudCA9XG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6R2V0RGVwbG95bWVudFwiO1xuXHQvKiogW1JlYWRdIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpHZXRQb2xpY3kgKi9cblx0c3RhdGljIHJlYWRvbmx5IGFjdGlvbkdldFBvbGljeSA9IFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkdldFBvbGljeVwiO1xuXHQvKiogW1JlYWRdIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpHZXRSdWxlICovXG5cdHN0YXRpYyByZWFkb25seSBhY3Rpb25HZXRSdWxlID0gXCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6R2V0UnVsZVwiO1xuXHQvKiogW1JlYWRdIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpHZXRTY29wZSAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgYWN0aW9uR2V0U2NvcGUgPSBcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpHZXRTY29wZVwiO1xuXHQvKiogW1JlYWRdIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpHZXRUZW1wbGF0ZSAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgYWN0aW9uR2V0VGVtcGxhdGUgPSBcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpHZXRUZW1wbGF0ZVwiO1xuXHQvKiogW0xpc3RdIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpMaXN0QWRtaW5BY2NvdW50cyAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgTGlzdEFkbWluQWNjb3VudHMgPVxuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3RBZG1pbkFjY291bnRzXCI7XG5cdC8qKiBbUmVhZF0gbmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3RBZ2dyZWdhdGVSZXNvdXJjZVN5bmNocm9uaXphdGlvblN0YXR1c2VzICovXG5cdHN0YXRpYyByZWFkb25seSBMaXN0QWdncmVnYXRlUmVzb3VyY2VTeW5jaHJvbml6YXRpb25TdGF0dXNlcyA9XG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6TGlzdEFnZ3JlZ2F0ZVJlc291cmNlU3luY2hyb25pemF0aW9uU3RhdHVzZXNcIjtcblx0LyoqIFtSZWFkXSBuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6TGlzdERlcGxveW1lbnRTbmFwc2hvdHMgKi9cblx0c3RhdGljIHJlYWRvbmx5IExpc3REZXBsb3ltZW50U25hcHNob3RzID1cblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpMaXN0RGVwbG95bWVudFNuYXBzaG90c1wiO1xuXHQvKiogW0xpc3RdIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpMaXN0RGVwbG95bWVudHMgKi9cblx0c3RhdGljIHJlYWRvbmx5IExpc3REZXBsb3ltZW50cyA9IFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3REZXBsb3ltZW50c1wiO1xuXHQvKiogW0xpc3RdIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpMaXN0UG9saWNpZXMgKi9cblx0c3RhdGljIHJlYWRvbmx5IExpc3RQb2xpY2llcyA9IFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3RQb2xpY2llc1wiO1xuXHQvKiogW1JlYWRdIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpMaXN0UG9saWN5U25hcHNob3RzICovXG5cdHN0YXRpYyByZWFkb25seSBMaXN0UG9saWN5U25hcHNob3RzID1cblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpMaXN0UG9saWN5U25hcHNob3RzXCI7XG5cdC8qKiBbUmVhZF0gbmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3RSZXNvdXJjZUFzc29jaWF0aW9ucyAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgTGlzdFJlc291cmNlQXNzb2NpYXRpb25zID1cblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpMaXN0UmVzb3VyY2VBc3NvY2lhdGlvbnNcIjtcblx0LyoqIFtSZWFkXSBuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6TGlzdFJlc291cmNlU3luY2hyb25pemF0aW9uU3RhdHVzZXMgKi9cblx0c3RhdGljIHJlYWRvbmx5IExpc3RSZXNvdXJjZVN5bmNocm9uaXphdGlvblN0YXR1c2VzID1cblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpMaXN0UmVzb3VyY2VTeW5jaHJvbml6YXRpb25TdGF0dXNlc1wiO1xuXHQvKiogW1JlYWRdIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpMaXN0UnVsZVNuYXBzaG90cyAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgTGlzdFJ1bGVTbmFwc2hvdHMgPVxuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3RSdWxlU25hcHNob3RzXCI7XG5cdC8qKiBbTGlzdF0gbmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3RSdWxlcyAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgTGlzdFJ1bGVzID0gXCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6TGlzdFJ1bGVzXCI7XG5cdC8qKiBbUmVhZF0gbmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3RTY29wZVNuYXBzaG90cyAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgTGlzdFNjb3BlU25hcHNob3RzID1cblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpMaXN0U2NvcGVTbmFwc2hvdHNcIjtcblx0LyoqIFtMaXN0XSBuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6TGlzdFNjb3BlcyAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgTGlzdFNjb3BlcyA9IFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3RTY29wZXNcIjtcblx0LyoqIFtSZWFkXSBuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6TGlzdFRhZ3NGb3JSZXNvdXJjZSAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgTGlzdFRhZ3NGb3JSZXNvdXJjZSA9XG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6TGlzdFRhZ3NGb3JSZXNvdXJjZVwiO1xuXHQvKiogW1JlYWRdIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpMaXN0VGVtcGxhdGVTbmFwc2hvdHMgKi9cblx0c3RhdGljIHJlYWRvbmx5IExpc3RUZW1wbGF0ZVNuYXBzaG90cyA9XG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6TGlzdFRlbXBsYXRlU25hcHNob3RzXCI7XG5cdC8qKiBbTGlzdF0gbmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3RUZW1wbGF0ZXMgKi9cblx0c3RhdGljIHJlYWRvbmx5IExpc3RUZW1wbGF0ZXMgPSBcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpMaXN0VGVtcGxhdGVzXCI7XG5cdC8qKiBbV3JpdGVdIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpQdXRBZG1pbkFjY291bnQgKi9cblx0c3RhdGljIHJlYWRvbmx5IFB1dEFkbWluQWNjb3VudCA9IFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOlB1dEFkbWluQWNjb3VudFwiO1xuXHQvKiogW1RhZ2dpbmddIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpUYWdSZXNvdXJjZSAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgVGFnUmVzb3VyY2UgPSBcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpUYWdSZXNvdXJjZVwiO1xuXHQvKiogW1RhZ2dpbmddIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpVbnRhZ1Jlc291cmNlICovXG5cdHN0YXRpYyByZWFkb25seSBVbnRhZ1Jlc291cmNlID0gXCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6VW50YWdSZXNvdXJjZVwiO1xuXHQvKiogW1dyaXRlXSBuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6VXBkYXRlRGVwbG95bWVudCAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgVXBkYXRlRGVwbG95bWVudCA9XG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6VXBkYXRlRGVwbG95bWVudFwiO1xuXHQvKiogW1dyaXRlXSBuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6VXBkYXRlUG9saWN5ICovXG5cdHN0YXRpYyByZWFkb25seSBVcGRhdGVQb2xpY3kgPSBcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpVcGRhdGVQb2xpY3lcIjtcblx0LyoqIFtXcml0ZV0gbmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOlVwZGF0ZVJ1bGUgKi9cblx0c3RhdGljIHJlYWRvbmx5IFVwZGF0ZVJ1bGUgPSBcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpVcGRhdGVSdWxlXCI7XG5cdC8qKiBbV3JpdGVdIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpVcGRhdGVTY29wZSAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgVXBkYXRlU2NvcGUgPSBcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpVcGRhdGVTY29wZVwiO1xuXHQvKiogW1dyaXRlXSBuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6VXBkYXRlVGVtcGxhdGUgKi9cblx0c3RhdGljIHJlYWRvbmx5IFVwZGF0ZVRlbXBsYXRlID0gXCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6VXBkYXRlVGVtcGxhdGVcIjtcblxuXHQvKiogQWxsIHJlYWQtbGV2ZWwgYWN0aW9ucy4gKi9cblx0c3RhdGljIHJlYWRvbmx5IEFsbFJlYWRBY3Rpb25zOiBzdHJpbmdbXSA9IFtcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5hY3Rpb25HZXRBZG1pbkFjY291bnQsXG5cdFx0TmV0d29ya1NlY3VyaXR5TWFuYWdlckFjdGlvbnMuYWN0aW9uR2V0RGVwbG95bWVudCxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5hY3Rpb25HZXRQb2xpY3ksXG5cdFx0TmV0d29ya1NlY3VyaXR5TWFuYWdlckFjdGlvbnMuYWN0aW9uR2V0UnVsZSxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5hY3Rpb25HZXRTY29wZSxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5hY3Rpb25HZXRUZW1wbGF0ZSxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5MaXN0QWdncmVnYXRlUmVzb3VyY2VTeW5jaHJvbml6YXRpb25TdGF0dXNlcyxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5MaXN0RGVwbG95bWVudFNuYXBzaG90cyxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5MaXN0UG9saWN5U25hcHNob3RzLFxuXHRcdE5ldHdvcmtTZWN1cml0eU1hbmFnZXJBY3Rpb25zLkxpc3RSZXNvdXJjZUFzc29jaWF0aW9ucyxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5MaXN0UmVzb3VyY2VTeW5jaHJvbml6YXRpb25TdGF0dXNlcyxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5MaXN0UnVsZVNuYXBzaG90cyxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5MaXN0U2NvcGVTbmFwc2hvdHMsXG5cdFx0TmV0d29ya1NlY3VyaXR5TWFuYWdlckFjdGlvbnMuTGlzdFRhZ3NGb3JSZXNvdXJjZSxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5MaXN0VGVtcGxhdGVTbmFwc2hvdHMsXG5cdF07XG5cdC8qKiBBbGwgd3JpdGUtbGV2ZWwgYWN0aW9ucy4gKi9cblx0c3RhdGljIHJlYWRvbmx5IEFsbFdyaXRlQWN0aW9uczogc3RyaW5nW10gPSBbXG5cdFx0TmV0d29ya1NlY3VyaXR5TWFuYWdlckFjdGlvbnMuQ3JlYXRlRGVwbG95bWVudCxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5DcmVhdGVEZXBsb3ltZW50U25hcHNob3QsXG5cdFx0TmV0d29ya1NlY3VyaXR5TWFuYWdlckFjdGlvbnMuQ3JlYXRlUG9saWN5LFxuXHRcdE5ldHdvcmtTZWN1cml0eU1hbmFnZXJBY3Rpb25zLkNyZWF0ZVBvbGljeVNuYXBzaG90LFxuXHRcdE5ldHdvcmtTZWN1cml0eU1hbmFnZXJBY3Rpb25zLkNyZWF0ZVJ1bGUsXG5cdFx0TmV0d29ya1NlY3VyaXR5TWFuYWdlckFjdGlvbnMuQ3JlYXRlUnVsZVNuYXBzaG90LFxuXHRcdE5ldHdvcmtTZWN1cml0eU1hbmFnZXJBY3Rpb25zLkNyZWF0ZVNjb3BlLFxuXHRcdE5ldHdvcmtTZWN1cml0eU1hbmFnZXJBY3Rpb25zLkNyZWF0ZVNjb3BlU25hcHNob3QsXG5cdFx0TmV0d29ya1NlY3VyaXR5TWFuYWdlckFjdGlvbnMuQ3JlYXRlVGVtcGxhdGUsXG5cdFx0TmV0d29ya1NlY3VyaXR5TWFuYWdlckFjdGlvbnMuQ3JlYXRlVGVtcGxhdGVTbmFwc2hvdCxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5EZWxldGVBZG1pbkFjY291bnQsXG5cdFx0TmV0d29ya1NlY3VyaXR5TWFuYWdlckFjdGlvbnMuRGVsZXRlRGVwbG95bWVudCxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5EZWxldGVQb2xpY3ksXG5cdFx0TmV0d29ya1NlY3VyaXR5TWFuYWdlckFjdGlvbnMuRGVsZXRlUnVsZSxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5EZWxldGVTY29wZSxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5EZWxldGVUZW1wbGF0ZSxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5HZW5lcmF0ZVJ1bGVDb25maWd1cmF0aW9uLFxuXHRcdE5ldHdvcmtTZWN1cml0eU1hbmFnZXJBY3Rpb25zLlB1dEFkbWluQWNjb3VudCxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5VcGRhdGVEZXBsb3ltZW50LFxuXHRcdE5ldHdvcmtTZWN1cml0eU1hbmFnZXJBY3Rpb25zLlVwZGF0ZVBvbGljeSxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5VcGRhdGVSdWxlLFxuXHRcdE5ldHdvcmtTZWN1cml0eU1hbmFnZXJBY3Rpb25zLlVwZGF0ZVNjb3BlLFxuXHRcdE5ldHdvcmtTZWN1cml0eU1hbmFnZXJBY3Rpb25zLlVwZGF0ZVRlbXBsYXRlLFxuXHRdO1xuXHQvKiogQWxsIGxpc3QtbGV2ZWwgYWN0aW9ucy4gKi9cblx0c3RhdGljIHJlYWRvbmx5IEFsbExpc3RBY3Rpb25zOiBzdHJpbmdbXSA9IFtcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5MaXN0QWRtaW5BY2NvdW50cyxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5MaXN0RGVwbG95bWVudHMsXG5cdFx0TmV0d29ya1NlY3VyaXR5TWFuYWdlckFjdGlvbnMuTGlzdFBvbGljaWVzLFxuXHRcdE5ldHdvcmtTZWN1cml0eU1hbmFnZXJBY3Rpb25zLkxpc3RSdWxlcyxcblx0XHROZXR3b3JrU2VjdXJpdHlNYW5hZ2VyQWN0aW9ucy5MaXN0U2NvcGVzLFxuXHRcdE5ldHdvcmtTZWN1cml0eU1hbmFnZXJBY3Rpb25zLkxpc3RUZW1wbGF0ZXMsXG5cdF07XG5cdC8qKiBBbGwgcGVybWlzc2lvbi1tYW5hZ2VtZW50LWxldmVsIGFjdGlvbnMuICovXG5cdHN0YXRpYyByZWFkb25seSBBbGxQZXJtaXNzaW9uTWFuYWdlbWVudEFjdGlvbnM6IHN0cmluZ1tdID0gW107XG5cdC8qKiBBbGwgdGFnZ2luZy1sZXZlbCBhY3Rpb25zLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgQWxsVGFnZ2luZ0FjdGlvbnM6IHN0cmluZ1tdID0gW1xuXHRcdE5ldHdvcmtTZWN1cml0eU1hbmFnZXJBY3Rpb25zLlRhZ1Jlc291cmNlLFxuXHRcdE5ldHdvcmtTZWN1cml0eU1hbmFnZXJBY3Rpb25zLlVudGFnUmVzb3VyY2UsXG5cdF07XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYnVpbGRpbmcgYSBkZXBsb3ltZW50IEFSTi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyRGVwbG95bWVudEFyblByb3BzIHtcblx0LyoqIFRoZSBEZXBsb3ltZW50SWQgY29tcG9uZW50IG9mIHRoZSBBUk4uICovXG5cdHJlYWRvbmx5IGRlcGxveW1lbnRJZDogc3RyaW5nO1xuXHQvKiogQVdTIHJlZ2lvbi4gRGVmYXVsdHMgdG8gXCIqXCIuICovXG5cdHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcblx0LyoqIEFXUyBhY2NvdW50IElELiBEZWZhdWx0cyB0byBcIipcIi4gKi9cblx0cmVhZG9ubHkgYWNjb3VudD86IHN0cmluZztcblx0LyoqIEFXUyBwYXJ0aXRpb24uIERlZmF1bHRzIHRvIFwiYXdzXCIuICovXG5cdHJlYWRvbmx5IHBhcnRpdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJzZWQgY29tcG9uZW50cyBvZiBhIGRlcGxveW1lbnQgQVJOLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtTZWN1cml0eU1hbmFnZXJEZXBsb3ltZW50QXJuQ29tcG9uZW50cyB7XG5cdC8qKiBBV1MgcGFydGl0aW9uLiAqL1xuXHRyZWFkb25seSBwYXJ0aXRpb246IHN0cmluZztcblx0LyoqIEFXUyByZWdpb24uICovXG5cdHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXHQvKiogQVdTIGFjY291bnQgSUQuICovXG5cdHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcblx0LyoqIFRoZSBEZXBsb3ltZW50SWQgY29tcG9uZW50LiAqL1xuXHRyZWFkb25seSBkZXBsb3ltZW50SWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBidWlsZGluZyBhIGRlcGxveW1lbnQtc25hcHNob3QgQVJOLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtTZWN1cml0eU1hbmFnZXJEZXBsb3ltZW50U25hcHNob3RBcm5Qcm9wcyB7XG5cdC8qKiBUaGUgRGVwbG95bWVudElkIGNvbXBvbmVudCBvZiB0aGUgQVJOLiAqL1xuXHRyZWFkb25seSBkZXBsb3ltZW50SWQ6IHN0cmluZztcblx0LyoqIFRoZSBWZXJzaW9uTnVtYmVyIGNvbXBvbmVudCBvZiB0aGUgQVJOLiAqL1xuXHRyZWFkb25seSB2ZXJzaW9uTnVtYmVyOiBzdHJpbmc7XG5cdC8qKiBBV1MgcmVnaW9uLiBEZWZhdWx0cyB0byBcIipcIi4gKi9cblx0cmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuXHQvKiogQVdTIGFjY291bnQgSUQuIERlZmF1bHRzIHRvIFwiKlwiLiAqL1xuXHRyZWFkb25seSBhY2NvdW50Pzogc3RyaW5nO1xuXHQvKiogQVdTIHBhcnRpdGlvbi4gRGVmYXVsdHMgdG8gXCJhd3NcIi4gKi9cblx0cmVhZG9ubHkgcGFydGl0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcnNlZCBjb21wb25lbnRzIG9mIGEgZGVwbG95bWVudC1zbmFwc2hvdCBBUk4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1NlY3VyaXR5TWFuYWdlckRlcGxveW1lbnRTbmFwc2hvdEFybkNvbXBvbmVudHMge1xuXHQvKiogQVdTIHBhcnRpdGlvbi4gKi9cblx0cmVhZG9ubHkgcGFydGl0aW9uOiBzdHJpbmc7XG5cdC8qKiBBV1MgcmVnaW9uLiAqL1xuXHRyZWFkb25seSByZWdpb246IHN0cmluZztcblx0LyoqIEFXUyBhY2NvdW50IElELiAqL1xuXHRyZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG5cdC8qKiBUaGUgRGVwbG95bWVudElkIGNvbXBvbmVudC4gKi9cblx0cmVhZG9ubHkgZGVwbG95bWVudElkOiBzdHJpbmc7XG5cdC8qKiBUaGUgVmVyc2lvbk51bWJlciBjb21wb25lbnQuICovXG5cdHJlYWRvbmx5IHZlcnNpb25OdW1iZXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBidWlsZGluZyBhIHBvbGljeSBBUk4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1NlY3VyaXR5TWFuYWdlclBvbGljeUFyblByb3BzIHtcblx0LyoqIFRoZSBQb2xpY3lJZCBjb21wb25lbnQgb2YgdGhlIEFSTi4gKi9cblx0cmVhZG9ubHkgcG9saWN5SWQ6IHN0cmluZztcblx0LyoqIEFXUyByZWdpb24uIERlZmF1bHRzIHRvIFwiKlwiLiAqL1xuXHRyZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG5cdC8qKiBBV1MgYWNjb3VudCBJRC4gRGVmYXVsdHMgdG8gXCIqXCIuICovXG5cdHJlYWRvbmx5IGFjY291bnQ/OiBzdHJpbmc7XG5cdC8qKiBBV1MgcGFydGl0aW9uLiBEZWZhdWx0cyB0byBcImF3c1wiLiAqL1xuXHRyZWFkb25seSBwYXJ0aXRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyc2VkIGNvbXBvbmVudHMgb2YgYSBwb2xpY3kgQVJOLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtTZWN1cml0eU1hbmFnZXJQb2xpY3lBcm5Db21wb25lbnRzIHtcblx0LyoqIEFXUyBwYXJ0aXRpb24uICovXG5cdHJlYWRvbmx5IHBhcnRpdGlvbjogc3RyaW5nO1xuXHQvKiogQVdTIHJlZ2lvbi4gKi9cblx0cmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cdC8qKiBBV1MgYWNjb3VudCBJRC4gKi9cblx0cmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuXHQvKiogVGhlIFBvbGljeUlkIGNvbXBvbmVudC4gKi9cblx0cmVhZG9ubHkgcG9saWN5SWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBidWlsZGluZyBhIHBvbGljeS1zbmFwc2hvdCBBUk4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1NlY3VyaXR5TWFuYWdlclBvbGljeVNuYXBzaG90QXJuUHJvcHMge1xuXHQvKiogVGhlIFBvbGljeUlkIGNvbXBvbmVudCBvZiB0aGUgQVJOLiAqL1xuXHRyZWFkb25seSBwb2xpY3lJZDogc3RyaW5nO1xuXHQvKiogVGhlIFZlcnNpb25OdW1iZXIgY29tcG9uZW50IG9mIHRoZSBBUk4uICovXG5cdHJlYWRvbmx5IHZlcnNpb25OdW1iZXI6IHN0cmluZztcblx0LyoqIEFXUyByZWdpb24uIERlZmF1bHRzIHRvIFwiKlwiLiAqL1xuXHRyZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG5cdC8qKiBBV1MgYWNjb3VudCBJRC4gRGVmYXVsdHMgdG8gXCIqXCIuICovXG5cdHJlYWRvbmx5IGFjY291bnQ/OiBzdHJpbmc7XG5cdC8qKiBBV1MgcGFydGl0aW9uLiBEZWZhdWx0cyB0byBcImF3c1wiLiAqL1xuXHRyZWFkb25seSBwYXJ0aXRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyc2VkIGNvbXBvbmVudHMgb2YgYSBwb2xpY3ktc25hcHNob3QgQVJOLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtTZWN1cml0eU1hbmFnZXJQb2xpY3lTbmFwc2hvdEFybkNvbXBvbmVudHMge1xuXHQvKiogQVdTIHBhcnRpdGlvbi4gKi9cblx0cmVhZG9ubHkgcGFydGl0aW9uOiBzdHJpbmc7XG5cdC8qKiBBV1MgcmVnaW9uLiAqL1xuXHRyZWFkb25seSByZWdpb246IHN0cmluZztcblx0LyoqIEFXUyBhY2NvdW50IElELiAqL1xuXHRyZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG5cdC8qKiBUaGUgUG9saWN5SWQgY29tcG9uZW50LiAqL1xuXHRyZWFkb25seSBwb2xpY3lJZDogc3RyaW5nO1xuXHQvKiogVGhlIFZlcnNpb25OdW1iZXIgY29tcG9uZW50LiAqL1xuXHRyZWFkb25seSB2ZXJzaW9uTnVtYmVyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYnVpbGRpbmcgYSBydWxlIEFSTi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyUnVsZUFyblByb3BzIHtcblx0LyoqIFRoZSBSdWxlSWQgY29tcG9uZW50IG9mIHRoZSBBUk4uICovXG5cdHJlYWRvbmx5IHJ1bGVJZDogc3RyaW5nO1xuXHQvKiogQVdTIHJlZ2lvbi4gRGVmYXVsdHMgdG8gXCIqXCIuICovXG5cdHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcblx0LyoqIEFXUyBhY2NvdW50IElELiBEZWZhdWx0cyB0byBcIipcIi4gKi9cblx0cmVhZG9ubHkgYWNjb3VudD86IHN0cmluZztcblx0LyoqIEFXUyBwYXJ0aXRpb24uIERlZmF1bHRzIHRvIFwiYXdzXCIuICovXG5cdHJlYWRvbmx5IHBhcnRpdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJzZWQgY29tcG9uZW50cyBvZiBhIHJ1bGUgQVJOLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtTZWN1cml0eU1hbmFnZXJSdWxlQXJuQ29tcG9uZW50cyB7XG5cdC8qKiBBV1MgcGFydGl0aW9uLiAqL1xuXHRyZWFkb25seSBwYXJ0aXRpb246IHN0cmluZztcblx0LyoqIEFXUyByZWdpb24uICovXG5cdHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXHQvKiogQVdTIGFjY291bnQgSUQuICovXG5cdHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcblx0LyoqIFRoZSBSdWxlSWQgY29tcG9uZW50LiAqL1xuXHRyZWFkb25seSBydWxlSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBidWlsZGluZyBhIHJ1bGUtc25hcHNob3QgQVJOLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtTZWN1cml0eU1hbmFnZXJSdWxlU25hcHNob3RBcm5Qcm9wcyB7XG5cdC8qKiBUaGUgUnVsZUlkIGNvbXBvbmVudCBvZiB0aGUgQVJOLiAqL1xuXHRyZWFkb25seSBydWxlSWQ6IHN0cmluZztcblx0LyoqIFRoZSBWZXJzaW9uTnVtYmVyIGNvbXBvbmVudCBvZiB0aGUgQVJOLiAqL1xuXHRyZWFkb25seSB2ZXJzaW9uTnVtYmVyOiBzdHJpbmc7XG5cdC8qKiBBV1MgcmVnaW9uLiBEZWZhdWx0cyB0byBcIipcIi4gKi9cblx0cmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuXHQvKiogQVdTIGFjY291bnQgSUQuIERlZmF1bHRzIHRvIFwiKlwiLiAqL1xuXHRyZWFkb25seSBhY2NvdW50Pzogc3RyaW5nO1xuXHQvKiogQVdTIHBhcnRpdGlvbi4gRGVmYXVsdHMgdG8gXCJhd3NcIi4gKi9cblx0cmVhZG9ubHkgcGFydGl0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcnNlZCBjb21wb25lbnRzIG9mIGEgcnVsZS1zbmFwc2hvdCBBUk4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1NlY3VyaXR5TWFuYWdlclJ1bGVTbmFwc2hvdEFybkNvbXBvbmVudHMge1xuXHQvKiogQVdTIHBhcnRpdGlvbi4gKi9cblx0cmVhZG9ubHkgcGFydGl0aW9uOiBzdHJpbmc7XG5cdC8qKiBBV1MgcmVnaW9uLiAqL1xuXHRyZWFkb25seSByZWdpb246IHN0cmluZztcblx0LyoqIEFXUyBhY2NvdW50IElELiAqL1xuXHRyZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG5cdC8qKiBUaGUgUnVsZUlkIGNvbXBvbmVudC4gKi9cblx0cmVhZG9ubHkgcnVsZUlkOiBzdHJpbmc7XG5cdC8qKiBUaGUgVmVyc2lvbk51bWJlciBjb21wb25lbnQuICovXG5cdHJlYWRvbmx5IHZlcnNpb25OdW1iZXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBidWlsZGluZyBhIHNjb3BlIEFSTi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyU2NvcGVBcm5Qcm9wcyB7XG5cdC8qKiBUaGUgU2NvcGVJZCBjb21wb25lbnQgb2YgdGhlIEFSTi4gKi9cblx0cmVhZG9ubHkgc2NvcGVJZDogc3RyaW5nO1xuXHQvKiogQVdTIHJlZ2lvbi4gRGVmYXVsdHMgdG8gXCIqXCIuICovXG5cdHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcblx0LyoqIEFXUyBhY2NvdW50IElELiBEZWZhdWx0cyB0byBcIipcIi4gKi9cblx0cmVhZG9ubHkgYWNjb3VudD86IHN0cmluZztcblx0LyoqIEFXUyBwYXJ0aXRpb24uIERlZmF1bHRzIHRvIFwiYXdzXCIuICovXG5cdHJlYWRvbmx5IHBhcnRpdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJzZWQgY29tcG9uZW50cyBvZiBhIHNjb3BlIEFSTi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyU2NvcGVBcm5Db21wb25lbnRzIHtcblx0LyoqIEFXUyBwYXJ0aXRpb24uICovXG5cdHJlYWRvbmx5IHBhcnRpdGlvbjogc3RyaW5nO1xuXHQvKiogQVdTIHJlZ2lvbi4gKi9cblx0cmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cdC8qKiBBV1MgYWNjb3VudCBJRC4gKi9cblx0cmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuXHQvKiogVGhlIFNjb3BlSWQgY29tcG9uZW50LiAqL1xuXHRyZWFkb25seSBzY29wZUlkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYnVpbGRpbmcgYSBzY29wZS1zbmFwc2hvdCBBUk4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1NlY3VyaXR5TWFuYWdlclNjb3BlU25hcHNob3RBcm5Qcm9wcyB7XG5cdC8qKiBUaGUgU2NvcGVJZCBjb21wb25lbnQgb2YgdGhlIEFSTi4gKi9cblx0cmVhZG9ubHkgc2NvcGVJZDogc3RyaW5nO1xuXHQvKiogVGhlIFZlcnNpb25OdW1iZXIgY29tcG9uZW50IG9mIHRoZSBBUk4uICovXG5cdHJlYWRvbmx5IHZlcnNpb25OdW1iZXI6IHN0cmluZztcblx0LyoqIEFXUyByZWdpb24uIERlZmF1bHRzIHRvIFwiKlwiLiAqL1xuXHRyZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG5cdC8qKiBBV1MgYWNjb3VudCBJRC4gRGVmYXVsdHMgdG8gXCIqXCIuICovXG5cdHJlYWRvbmx5IGFjY291bnQ/OiBzdHJpbmc7XG5cdC8qKiBBV1MgcGFydGl0aW9uLiBEZWZhdWx0cyB0byBcImF3c1wiLiAqL1xuXHRyZWFkb25seSBwYXJ0aXRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyc2VkIGNvbXBvbmVudHMgb2YgYSBzY29wZS1zbmFwc2hvdCBBUk4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1NlY3VyaXR5TWFuYWdlclNjb3BlU25hcHNob3RBcm5Db21wb25lbnRzIHtcblx0LyoqIEFXUyBwYXJ0aXRpb24uICovXG5cdHJlYWRvbmx5IHBhcnRpdGlvbjogc3RyaW5nO1xuXHQvKiogQVdTIHJlZ2lvbi4gKi9cblx0cmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cdC8qKiBBV1MgYWNjb3VudCBJRC4gKi9cblx0cmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuXHQvKiogVGhlIFNjb3BlSWQgY29tcG9uZW50LiAqL1xuXHRyZWFkb25seSBzY29wZUlkOiBzdHJpbmc7XG5cdC8qKiBUaGUgVmVyc2lvbk51bWJlciBjb21wb25lbnQuICovXG5cdHJlYWRvbmx5IHZlcnNpb25OdW1iZXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBidWlsZGluZyBhIHRlbXBsYXRlIEFSTi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyVGVtcGxhdGVBcm5Qcm9wcyB7XG5cdC8qKiBUaGUgVGVtcGxhdGVJZCBjb21wb25lbnQgb2YgdGhlIEFSTi4gKi9cblx0cmVhZG9ubHkgdGVtcGxhdGVJZDogc3RyaW5nO1xuXHQvKiogQVdTIHJlZ2lvbi4gRGVmYXVsdHMgdG8gXCIqXCIuICovXG5cdHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcblx0LyoqIEFXUyBhY2NvdW50IElELiBEZWZhdWx0cyB0byBcIipcIi4gKi9cblx0cmVhZG9ubHkgYWNjb3VudD86IHN0cmluZztcblx0LyoqIEFXUyBwYXJ0aXRpb24uIERlZmF1bHRzIHRvIFwiYXdzXCIuICovXG5cdHJlYWRvbmx5IHBhcnRpdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJzZWQgY29tcG9uZW50cyBvZiBhIHRlbXBsYXRlIEFSTi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyVGVtcGxhdGVBcm5Db21wb25lbnRzIHtcblx0LyoqIEFXUyBwYXJ0aXRpb24uICovXG5cdHJlYWRvbmx5IHBhcnRpdGlvbjogc3RyaW5nO1xuXHQvKiogQVdTIHJlZ2lvbi4gKi9cblx0cmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cdC8qKiBBV1MgYWNjb3VudCBJRC4gKi9cblx0cmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuXHQvKiogVGhlIFRlbXBsYXRlSWQgY29tcG9uZW50LiAqL1xuXHRyZWFkb25seSB0ZW1wbGF0ZUlkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYnVpbGRpbmcgYSB0ZW1wbGF0ZS1zbmFwc2hvdCBBUk4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1NlY3VyaXR5TWFuYWdlclRlbXBsYXRlU25hcHNob3RBcm5Qcm9wcyB7XG5cdC8qKiBUaGUgVGVtcGxhdGVJZCBjb21wb25lbnQgb2YgdGhlIEFSTi4gKi9cblx0cmVhZG9ubHkgdGVtcGxhdGVJZDogc3RyaW5nO1xuXHQvKiogVGhlIFZlcnNpb25OdW1iZXIgY29tcG9uZW50IG9mIHRoZSBBUk4uICovXG5cdHJlYWRvbmx5IHZlcnNpb25OdW1iZXI6IHN0cmluZztcblx0LyoqIEFXUyByZWdpb24uIERlZmF1bHRzIHRvIFwiKlwiLiAqL1xuXHRyZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG5cdC8qKiBBV1MgYWNjb3VudCBJRC4gRGVmYXVsdHMgdG8gXCIqXCIuICovXG5cdHJlYWRvbmx5IGFjY291bnQ/OiBzdHJpbmc7XG5cdC8qKiBBV1MgcGFydGl0aW9uLiBEZWZhdWx0cyB0byBcImF3c1wiLiAqL1xuXHRyZWFkb25seSBwYXJ0aXRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyc2VkIGNvbXBvbmVudHMgb2YgYSB0ZW1wbGF0ZS1zbmFwc2hvdCBBUk4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1NlY3VyaXR5TWFuYWdlclRlbXBsYXRlU25hcHNob3RBcm5Db21wb25lbnRzIHtcblx0LyoqIEFXUyBwYXJ0aXRpb24uICovXG5cdHJlYWRvbmx5IHBhcnRpdGlvbjogc3RyaW5nO1xuXHQvKiogQVdTIHJlZ2lvbi4gKi9cblx0cmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cdC8qKiBBV1MgYWNjb3VudCBJRC4gKi9cblx0cmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuXHQvKiogVGhlIFRlbXBsYXRlSWQgY29tcG9uZW50LiAqL1xuXHRyZWFkb25seSB0ZW1wbGF0ZUlkOiBzdHJpbmc7XG5cdC8qKiBUaGUgVmVyc2lvbk51bWJlciBjb21wb25lbnQuICovXG5cdHJlYWRvbmx5IHZlcnNpb25OdW1iZXI6IHN0cmluZztcbn1cblxuY29uc3QgRGVwbG95bWVudEFyblJlZ2V4ID1cblx0L15hcm46KD88cGFydGl0aW9uPlteOl0rKTpuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6KD88cmVnaW9uPlteOl0qKTooPzxhY2NvdW50PlteOl0qKTpkZXBsb3ltZW50Oig/PGRlcGxveW1lbnRJZD5bXjovP10rKSQvO1xuY29uc3QgRGVwbG95bWVudFNuYXBzaG90QXJuUmVnZXggPVxuXHQvXmFybjooPzxwYXJ0aXRpb24+W146XSspOm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjooPzxyZWdpb24+W146XSopOig/PGFjY291bnQ+W146XSopOmRlcGxveW1lbnQ6KD88ZGVwbG95bWVudElkPlteOi8/XSspOig/PHZlcnNpb25OdW1iZXI+W146Lz9dKykkLztcbmNvbnN0IFBvbGljeUFyblJlZ2V4ID1cblx0L15hcm46KD88cGFydGl0aW9uPlteOl0rKTpuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6KD88cmVnaW9uPlteOl0qKTooPzxhY2NvdW50PlteOl0qKTpwb2xpY3k6KD88cG9saWN5SWQ+W146Lz9dKykkLztcbmNvbnN0IFBvbGljeVNuYXBzaG90QXJuUmVnZXggPVxuXHQvXmFybjooPzxwYXJ0aXRpb24+W146XSspOm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjooPzxyZWdpb24+W146XSopOig/PGFjY291bnQ+W146XSopOnBvbGljeTooPzxwb2xpY3lJZD5bXjovP10rKTooPzx2ZXJzaW9uTnVtYmVyPlteOi8/XSspJC87XG5jb25zdCBSdWxlQXJuUmVnZXggPVxuXHQvXmFybjooPzxwYXJ0aXRpb24+W146XSspOm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjooPzxyZWdpb24+W146XSopOig/PGFjY291bnQ+W146XSopOnJ1bGU6KD88cnVsZUlkPlteOi8/XSspJC87XG5jb25zdCBSdWxlU25hcHNob3RBcm5SZWdleCA9XG5cdC9eYXJuOig/PHBhcnRpdGlvbj5bXjpdKyk6bmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOig/PHJlZ2lvbj5bXjpdKik6KD88YWNjb3VudD5bXjpdKik6cnVsZTooPzxydWxlSWQ+W146Lz9dKyk6KD88dmVyc2lvbk51bWJlcj5bXjovP10rKSQvO1xuY29uc3QgU2NvcGVBcm5SZWdleCA9XG5cdC9eYXJuOig/PHBhcnRpdGlvbj5bXjpdKyk6bmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOig/PHJlZ2lvbj5bXjpdKik6KD88YWNjb3VudD5bXjpdKik6c2NvcGU6KD88c2NvcGVJZD5bXjovP10rKSQvO1xuY29uc3QgU2NvcGVTbmFwc2hvdEFyblJlZ2V4ID1cblx0L15hcm46KD88cGFydGl0aW9uPlteOl0rKTpuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6KD88cmVnaW9uPlteOl0qKTooPzxhY2NvdW50PlteOl0qKTpzY29wZTooPzxzY29wZUlkPlteOi8/XSspOig/PHZlcnNpb25OdW1iZXI+W146Lz9dKykkLztcbmNvbnN0IFRlbXBsYXRlQXJuUmVnZXggPVxuXHQvXmFybjooPzxwYXJ0aXRpb24+W146XSspOm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjooPzxyZWdpb24+W146XSopOig/PGFjY291bnQ+W146XSopOnRlbXBsYXRlOig/PHRlbXBsYXRlSWQ+W146Lz9dKykkLztcbmNvbnN0IFRlbXBsYXRlU25hcHNob3RBcm5SZWdleCA9XG5cdC9eYXJuOig/PHBhcnRpdGlvbj5bXjpdKyk6bmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOig/PHJlZ2lvbj5bXjpdKik6KD88YWNjb3VudD5bXjpdKik6dGVtcGxhdGU6KD88dGVtcGxhdGVJZD5bXjovP10rKTooPzx2ZXJzaW9uTnVtYmVyPlteOi8/XSspJC87XG5cbi8qKlxuICogQVJOIGJ1aWxkZXJzLCB2YWxpZGF0b3JzLCBhbmQgcGFyc2VycyBmb3IgbmV0d29yay1zZWN1cml0eS1tYW5hZ2VyIHJlc291cmNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5ldHdvcmtTZWN1cml0eU1hbmFnZXJSZXNvdXJjZXMge1xuXHQvKipcblx0ICogQnVpbGRzIGFuIEFSTiBmb3IgdGhlIGRlcGxveW1lbnQgcmVzb3VyY2UuXG5cdCAqL1xuXHRzdGF0aWMgZGVwbG95bWVudChwcm9wczogTmV0d29ya1NlY3VyaXR5TWFuYWdlckRlcGxveW1lbnRBcm5Qcm9wcyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGBhcm46JHtwcm9wcy5wYXJ0aXRpb24gPz8gXCJhd3NcIn06bmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOiR7cHJvcHMucmVnaW9uID8/IFwiKlwifToke3Byb3BzLmFjY291bnQgPz8gXCIqXCJ9OmRlcGxveW1lbnQ6JHtwcm9wcy5kZXBsb3ltZW50SWR9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYWxpZGF0ZXMgd2hldGhlciBhIHN0cmluZyBpcyBhIHZhbGlkIEFSTiBmb3IgdGhlIGRlcGxveW1lbnQgcmVzb3VyY2UuXG5cdCAqL1xuXHRzdGF0aWMgaXNWYWxpZERlcGxveW1lbnRBcm4oYXJuOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gRGVwbG95bWVudEFyblJlZ2V4LnRlc3QoYXJuKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZXMgYSBkZXBsb3ltZW50IEFSTiBpbnRvIGl0cyBjb21wb25lbnRzLlxuXHQgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBBUk4gZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdC5cblx0ICovXG5cdHN0YXRpYyBwYXJzZURlcGxveW1lbnRBcm4oXG5cdFx0YXJuOiBzdHJpbmcsXG5cdCk6IE5ldHdvcmtTZWN1cml0eU1hbmFnZXJEZXBsb3ltZW50QXJuQ29tcG9uZW50cyB7XG5cdFx0Y29uc3QgbWF0Y2ggPSBEZXBsb3ltZW50QXJuUmVnZXguZXhlYyhhcm4pO1xuXHRcdGlmICghbWF0Y2g/Lmdyb3Vwcykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRlcGxveW1lbnQgQVJOOiAke2Fybn1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhcnRpdGlvbjogbWF0Y2guZ3JvdXBzLnBhcnRpdGlvbixcblx0XHRcdHJlZ2lvbjogbWF0Y2guZ3JvdXBzLnJlZ2lvbixcblx0XHRcdGFjY291bnQ6IG1hdGNoLmdyb3Vwcy5hY2NvdW50LFxuXHRcdFx0ZGVwbG95bWVudElkOiBtYXRjaC5ncm91cHMhLmRlcGxveW1lbnRJZCxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEJ1aWxkcyBhbiBBUk4gZm9yIHRoZSBkZXBsb3ltZW50LXNuYXBzaG90IHJlc291cmNlLlxuXHQgKi9cblx0c3RhdGljIGRlcGxveW1lbnRTbmFwc2hvdChcblx0XHRwcm9wczogTmV0d29ya1NlY3VyaXR5TWFuYWdlckRlcGxveW1lbnRTbmFwc2hvdEFyblByb3BzLFxuXHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBgYXJuOiR7cHJvcHMucGFydGl0aW9uID8/IFwiYXdzXCJ9Om5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjoke3Byb3BzLnJlZ2lvbiA/PyBcIipcIn06JHtwcm9wcy5hY2NvdW50ID8/IFwiKlwifTpkZXBsb3ltZW50OiR7cHJvcHMuZGVwbG95bWVudElkfToke3Byb3BzLnZlcnNpb25OdW1iZXJ9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYWxpZGF0ZXMgd2hldGhlciBhIHN0cmluZyBpcyBhIHZhbGlkIEFSTiBmb3IgdGhlIGRlcGxveW1lbnQtc25hcHNob3QgcmVzb3VyY2UuXG5cdCAqL1xuXHRzdGF0aWMgaXNWYWxpZERlcGxveW1lbnRTbmFwc2hvdEFybihhcm46IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBEZXBsb3ltZW50U25hcHNob3RBcm5SZWdleC50ZXN0KGFybik7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGEgZGVwbG95bWVudC1zbmFwc2hvdCBBUk4gaW50byBpdHMgY29tcG9uZW50cy5cblx0ICogQHRocm93cyBFcnJvciBpZiB0aGUgQVJOIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQuXG5cdCAqL1xuXHRzdGF0aWMgcGFyc2VEZXBsb3ltZW50U25hcHNob3RBcm4oXG5cdFx0YXJuOiBzdHJpbmcsXG5cdCk6IE5ldHdvcmtTZWN1cml0eU1hbmFnZXJEZXBsb3ltZW50U25hcHNob3RBcm5Db21wb25lbnRzIHtcblx0XHRjb25zdCBtYXRjaCA9IERlcGxveW1lbnRTbmFwc2hvdEFyblJlZ2V4LmV4ZWMoYXJuKTtcblx0XHRpZiAoIW1hdGNoPy5ncm91cHMpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkZXBsb3ltZW50LXNuYXBzaG90IEFSTjogJHthcm59YCk7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRwYXJ0aXRpb246IG1hdGNoLmdyb3Vwcy5wYXJ0aXRpb24sXG5cdFx0XHRyZWdpb246IG1hdGNoLmdyb3Vwcy5yZWdpb24sXG5cdFx0XHRhY2NvdW50OiBtYXRjaC5ncm91cHMuYWNjb3VudCxcblx0XHRcdGRlcGxveW1lbnRJZDogbWF0Y2guZ3JvdXBzIS5kZXBsb3ltZW50SWQsXG5cdFx0XHR2ZXJzaW9uTnVtYmVyOiBtYXRjaC5ncm91cHMhLnZlcnNpb25OdW1iZXIsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBCdWlsZHMgYW4gQVJOIGZvciB0aGUgcG9saWN5IHJlc291cmNlLlxuXHQgKi9cblx0c3RhdGljIHBvbGljeShwcm9wczogTmV0d29ya1NlY3VyaXR5TWFuYWdlclBvbGljeUFyblByb3BzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gYGFybjoke3Byb3BzLnBhcnRpdGlvbiA/PyBcImF3c1wifTpuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6JHtwcm9wcy5yZWdpb24gPz8gXCIqXCJ9OiR7cHJvcHMuYWNjb3VudCA/PyBcIipcIn06cG9saWN5OiR7cHJvcHMucG9saWN5SWR9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYWxpZGF0ZXMgd2hldGhlciBhIHN0cmluZyBpcyBhIHZhbGlkIEFSTiBmb3IgdGhlIHBvbGljeSByZXNvdXJjZS5cblx0ICovXG5cdHN0YXRpYyBpc1ZhbGlkUG9saWN5QXJuKGFybjogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIFBvbGljeUFyblJlZ2V4LnRlc3QoYXJuKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZXMgYSBwb2xpY3kgQVJOIGludG8gaXRzIGNvbXBvbmVudHMuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIEFSTiBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0LlxuXHQgKi9cblx0c3RhdGljIHBhcnNlUG9saWN5QXJuKFxuXHRcdGFybjogc3RyaW5nLFxuXHQpOiBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyUG9saWN5QXJuQ29tcG9uZW50cyB7XG5cdFx0Y29uc3QgbWF0Y2ggPSBQb2xpY3lBcm5SZWdleC5leGVjKGFybik7XG5cdFx0aWYgKCFtYXRjaD8uZ3JvdXBzKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcG9saWN5IEFSTjogJHthcm59YCk7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRwYXJ0aXRpb246IG1hdGNoLmdyb3Vwcy5wYXJ0aXRpb24sXG5cdFx0XHRyZWdpb246IG1hdGNoLmdyb3Vwcy5yZWdpb24sXG5cdFx0XHRhY2NvdW50OiBtYXRjaC5ncm91cHMuYWNjb3VudCxcblx0XHRcdHBvbGljeUlkOiBtYXRjaC5ncm91cHMhLnBvbGljeUlkLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQnVpbGRzIGFuIEFSTiBmb3IgdGhlIHBvbGljeS1zbmFwc2hvdCByZXNvdXJjZS5cblx0ICovXG5cdHN0YXRpYyBwb2xpY3lTbmFwc2hvdChcblx0XHRwcm9wczogTmV0d29ya1NlY3VyaXR5TWFuYWdlclBvbGljeVNuYXBzaG90QXJuUHJvcHMsXG5cdCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGBhcm46JHtwcm9wcy5wYXJ0aXRpb24gPz8gXCJhd3NcIn06bmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOiR7cHJvcHMucmVnaW9uID8/IFwiKlwifToke3Byb3BzLmFjY291bnQgPz8gXCIqXCJ9OnBvbGljeToke3Byb3BzLnBvbGljeUlkfToke3Byb3BzLnZlcnNpb25OdW1iZXJ9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYWxpZGF0ZXMgd2hldGhlciBhIHN0cmluZyBpcyBhIHZhbGlkIEFSTiBmb3IgdGhlIHBvbGljeS1zbmFwc2hvdCByZXNvdXJjZS5cblx0ICovXG5cdHN0YXRpYyBpc1ZhbGlkUG9saWN5U25hcHNob3RBcm4oYXJuOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gUG9saWN5U25hcHNob3RBcm5SZWdleC50ZXN0KGFybik7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGEgcG9saWN5LXNuYXBzaG90IEFSTiBpbnRvIGl0cyBjb21wb25lbnRzLlxuXHQgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBBUk4gZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdC5cblx0ICovXG5cdHN0YXRpYyBwYXJzZVBvbGljeVNuYXBzaG90QXJuKFxuXHRcdGFybjogc3RyaW5nLFxuXHQpOiBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyUG9saWN5U25hcHNob3RBcm5Db21wb25lbnRzIHtcblx0XHRjb25zdCBtYXRjaCA9IFBvbGljeVNuYXBzaG90QXJuUmVnZXguZXhlYyhhcm4pO1xuXHRcdGlmICghbWF0Y2g/Lmdyb3Vwcykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBvbGljeS1zbmFwc2hvdCBBUk46ICR7YXJufWApO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0cGFydGl0aW9uOiBtYXRjaC5ncm91cHMucGFydGl0aW9uLFxuXHRcdFx0cmVnaW9uOiBtYXRjaC5ncm91cHMucmVnaW9uLFxuXHRcdFx0YWNjb3VudDogbWF0Y2guZ3JvdXBzLmFjY291bnQsXG5cdFx0XHRwb2xpY3lJZDogbWF0Y2guZ3JvdXBzIS5wb2xpY3lJZCxcblx0XHRcdHZlcnNpb25OdW1iZXI6IG1hdGNoLmdyb3VwcyEudmVyc2lvbk51bWJlcixcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEJ1aWxkcyBhbiBBUk4gZm9yIHRoZSBydWxlIHJlc291cmNlLlxuXHQgKi9cblx0c3RhdGljIHJ1bGUocHJvcHM6IE5ldHdvcmtTZWN1cml0eU1hbmFnZXJSdWxlQXJuUHJvcHMpOiBzdHJpbmcge1xuXHRcdHJldHVybiBgYXJuOiR7cHJvcHMucGFydGl0aW9uID8/IFwiYXdzXCJ9Om5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjoke3Byb3BzLnJlZ2lvbiA/PyBcIipcIn06JHtwcm9wcy5hY2NvdW50ID8/IFwiKlwifTpydWxlOiR7cHJvcHMucnVsZUlkfWA7XG5cdH1cblxuXHQvKipcblx0ICogVmFsaWRhdGVzIHdoZXRoZXIgYSBzdHJpbmcgaXMgYSB2YWxpZCBBUk4gZm9yIHRoZSBydWxlIHJlc291cmNlLlxuXHQgKi9cblx0c3RhdGljIGlzVmFsaWRSdWxlQXJuKGFybjogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIFJ1bGVBcm5SZWdleC50ZXN0KGFybik7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGEgcnVsZSBBUk4gaW50byBpdHMgY29tcG9uZW50cy5cblx0ICogQHRocm93cyBFcnJvciBpZiB0aGUgQVJOIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQuXG5cdCAqL1xuXHRzdGF0aWMgcGFyc2VSdWxlQXJuKGFybjogc3RyaW5nKTogTmV0d29ya1NlY3VyaXR5TWFuYWdlclJ1bGVBcm5Db21wb25lbnRzIHtcblx0XHRjb25zdCBtYXRjaCA9IFJ1bGVBcm5SZWdleC5leGVjKGFybik7XG5cdFx0aWYgKCFtYXRjaD8uZ3JvdXBzKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcnVsZSBBUk46ICR7YXJufWApO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0cGFydGl0aW9uOiBtYXRjaC5ncm91cHMucGFydGl0aW9uLFxuXHRcdFx0cmVnaW9uOiBtYXRjaC5ncm91cHMucmVnaW9uLFxuXHRcdFx0YWNjb3VudDogbWF0Y2guZ3JvdXBzLmFjY291bnQsXG5cdFx0XHRydWxlSWQ6IG1hdGNoLmdyb3VwcyEucnVsZUlkLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQnVpbGRzIGFuIEFSTiBmb3IgdGhlIHJ1bGUtc25hcHNob3QgcmVzb3VyY2UuXG5cdCAqL1xuXHRzdGF0aWMgcnVsZVNuYXBzaG90KFxuXHRcdHByb3BzOiBOZXR3b3JrU2VjdXJpdHlNYW5hZ2VyUnVsZVNuYXBzaG90QXJuUHJvcHMsXG5cdCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGBhcm46JHtwcm9wcy5wYXJ0aXRpb24gPz8gXCJhd3NcIn06bmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOiR7cHJvcHMucmVnaW9uID8/IFwiKlwifToke3Byb3BzLmFjY291bnQgPz8gXCIqXCJ9OnJ1bGU6JHtwcm9wcy5ydWxlSWR9OiR7cHJvcHMudmVyc2lvbk51bWJlcn1gO1xuXHR9XG5cblx0LyoqXG5cdCAqIFZhbGlkYXRlcyB3aGV0aGVyIGEgc3RyaW5nIGlzIGEgdmFsaWQgQVJOIGZvciB0aGUgcnVsZS1zbmFwc2hvdCByZXNvdXJjZS5cblx0ICovXG5cdHN0YXRpYyBpc1ZhbGlkUnVsZVNuYXBzaG90QXJuKGFybjogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIFJ1bGVTbmFwc2hvdEFyblJlZ2V4LnRlc3QoYXJuKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZXMgYSBydWxlLXNuYXBzaG90IEFSTiBpbnRvIGl0cyBjb21wb25lbnRzLlxuXHQgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBBUk4gZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdC5cblx0ICovXG5cdHN0YXRpYyBwYXJzZVJ1bGVTbmFwc2hvdEFybihcblx0XHRhcm46IHN0cmluZyxcblx0KTogTmV0d29ya1NlY3VyaXR5TWFuYWdlclJ1bGVTbmFwc2hvdEFybkNvbXBvbmVudHMge1xuXHRcdGNvbnN0IG1hdGNoID0gUnVsZVNuYXBzaG90QXJuUmVnZXguZXhlYyhhcm4pO1xuXHRcdGlmICghbWF0Y2g/Lmdyb3Vwcykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJ1bGUtc25hcHNob3QgQVJOOiAke2Fybn1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhcnRpdGlvbjogbWF0Y2guZ3JvdXBzLnBhcnRpdGlvbixcblx0XHRcdHJlZ2lvbjogbWF0Y2guZ3JvdXBzLnJlZ2lvbixcblx0XHRcdGFjY291bnQ6IG1hdGNoLmdyb3Vwcy5hY2NvdW50LFxuXHRcdFx0cnVsZUlkOiBtYXRjaC5ncm91cHMhLnJ1bGVJZCxcblx0XHRcdHZlcnNpb25OdW1iZXI6IG1hdGNoLmdyb3VwcyEudmVyc2lvbk51bWJlcixcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEJ1aWxkcyBhbiBBUk4gZm9yIHRoZSBzY29wZSByZXNvdXJjZS5cblx0ICovXG5cdHN0YXRpYyBzY29wZShwcm9wczogTmV0d29ya1NlY3VyaXR5TWFuYWdlclNjb3BlQXJuUHJvcHMpOiBzdHJpbmcge1xuXHRcdHJldHVybiBgYXJuOiR7cHJvcHMucGFydGl0aW9uID8/IFwiYXdzXCJ9Om5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjoke3Byb3BzLnJlZ2lvbiA/PyBcIipcIn06JHtwcm9wcy5hY2NvdW50ID8/IFwiKlwifTpzY29wZToke3Byb3BzLnNjb3BlSWR9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYWxpZGF0ZXMgd2hldGhlciBhIHN0cmluZyBpcyBhIHZhbGlkIEFSTiBmb3IgdGhlIHNjb3BlIHJlc291cmNlLlxuXHQgKi9cblx0c3RhdGljIGlzVmFsaWRTY29wZUFybihhcm46IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBTY29wZUFyblJlZ2V4LnRlc3QoYXJuKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZXMgYSBzY29wZSBBUk4gaW50byBpdHMgY29tcG9uZW50cy5cblx0ICogQHRocm93cyBFcnJvciBpZiB0aGUgQVJOIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQuXG5cdCAqL1xuXHRzdGF0aWMgcGFyc2VTY29wZUFybihhcm46IHN0cmluZyk6IE5ldHdvcmtTZWN1cml0eU1hbmFnZXJTY29wZUFybkNvbXBvbmVudHMge1xuXHRcdGNvbnN0IG1hdGNoID0gU2NvcGVBcm5SZWdleC5leGVjKGFybik7XG5cdFx0aWYgKCFtYXRjaD8uZ3JvdXBzKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2NvcGUgQVJOOiAke2Fybn1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhcnRpdGlvbjogbWF0Y2guZ3JvdXBzLnBhcnRpdGlvbixcblx0XHRcdHJlZ2lvbjogbWF0Y2guZ3JvdXBzLnJlZ2lvbixcblx0XHRcdGFjY291bnQ6IG1hdGNoLmdyb3Vwcy5hY2NvdW50LFxuXHRcdFx0c2NvcGVJZDogbWF0Y2guZ3JvdXBzIS5zY29wZUlkLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQnVpbGRzIGFuIEFSTiBmb3IgdGhlIHNjb3BlLXNuYXBzaG90IHJlc291cmNlLlxuXHQgKi9cblx0c3RhdGljIHNjb3BlU25hcHNob3QoXG5cdFx0cHJvcHM6IE5ldHdvcmtTZWN1cml0eU1hbmFnZXJTY29wZVNuYXBzaG90QXJuUHJvcHMsXG5cdCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGBhcm46JHtwcm9wcy5wYXJ0aXRpb24gPz8gXCJhd3NcIn06bmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOiR7cHJvcHMucmVnaW9uID8/IFwiKlwifToke3Byb3BzLmFjY291bnQgPz8gXCIqXCJ9OnNjb3BlOiR7cHJvcHMuc2NvcGVJZH06JHtwcm9wcy52ZXJzaW9uTnVtYmVyfWA7XG5cdH1cblxuXHQvKipcblx0ICogVmFsaWRhdGVzIHdoZXRoZXIgYSBzdHJpbmcgaXMgYSB2YWxpZCBBUk4gZm9yIHRoZSBzY29wZS1zbmFwc2hvdCByZXNvdXJjZS5cblx0ICovXG5cdHN0YXRpYyBpc1ZhbGlkU2NvcGVTbmFwc2hvdEFybihhcm46IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBTY29wZVNuYXBzaG90QXJuUmVnZXgudGVzdChhcm4pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhcnNlcyBhIHNjb3BlLXNuYXBzaG90IEFSTiBpbnRvIGl0cyBjb21wb25lbnRzLlxuXHQgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBBUk4gZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGZvcm1hdC5cblx0ICovXG5cdHN0YXRpYyBwYXJzZVNjb3BlU25hcHNob3RBcm4oXG5cdFx0YXJuOiBzdHJpbmcsXG5cdCk6IE5ldHdvcmtTZWN1cml0eU1hbmFnZXJTY29wZVNuYXBzaG90QXJuQ29tcG9uZW50cyB7XG5cdFx0Y29uc3QgbWF0Y2ggPSBTY29wZVNuYXBzaG90QXJuUmVnZXguZXhlYyhhcm4pO1xuXHRcdGlmICghbWF0Y2g/Lmdyb3Vwcykge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNjb3BlLXNuYXBzaG90IEFSTjogJHthcm59YCk7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRwYXJ0aXRpb246IG1hdGNoLmdyb3Vwcy5wYXJ0aXRpb24sXG5cdFx0XHRyZWdpb246IG1hdGNoLmdyb3Vwcy5yZWdpb24sXG5cdFx0XHRhY2NvdW50OiBtYXRjaC5ncm91cHMuYWNjb3VudCxcblx0XHRcdHNjb3BlSWQ6IG1hdGNoLmdyb3VwcyEuc2NvcGVJZCxcblx0XHRcdHZlcnNpb25OdW1iZXI6IG1hdGNoLmdyb3VwcyEudmVyc2lvbk51bWJlcixcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEJ1aWxkcyBhbiBBUk4gZm9yIHRoZSB0ZW1wbGF0ZSByZXNvdXJjZS5cblx0ICovXG5cdHN0YXRpYyB0ZW1wbGF0ZShwcm9wczogTmV0d29ya1NlY3VyaXR5TWFuYWdlclRlbXBsYXRlQXJuUHJvcHMpOiBzdHJpbmcge1xuXHRcdHJldHVybiBgYXJuOiR7cHJvcHMucGFydGl0aW9uID8/IFwiYXdzXCJ9Om5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjoke3Byb3BzLnJlZ2lvbiA/PyBcIipcIn06JHtwcm9wcy5hY2NvdW50ID8/IFwiKlwifTp0ZW1wbGF0ZToke3Byb3BzLnRlbXBsYXRlSWR9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYWxpZGF0ZXMgd2hldGhlciBhIHN0cmluZyBpcyBhIHZhbGlkIEFSTiBmb3IgdGhlIHRlbXBsYXRlIHJlc291cmNlLlxuXHQgKi9cblx0c3RhdGljIGlzVmFsaWRUZW1wbGF0ZUFybihhcm46IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBUZW1wbGF0ZUFyblJlZ2V4LnRlc3QoYXJuKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZXMgYSB0ZW1wbGF0ZSBBUk4gaW50byBpdHMgY29tcG9uZW50cy5cblx0ICogQHRocm93cyBFcnJvciBpZiB0aGUgQVJOIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQuXG5cdCAqL1xuXHRzdGF0aWMgcGFyc2VUZW1wbGF0ZUFybihcblx0XHRhcm46IHN0cmluZyxcblx0KTogTmV0d29ya1NlY3VyaXR5TWFuYWdlclRlbXBsYXRlQXJuQ29tcG9uZW50cyB7XG5cdFx0Y29uc3QgbWF0Y2ggPSBUZW1wbGF0ZUFyblJlZ2V4LmV4ZWMoYXJuKTtcblx0XHRpZiAoIW1hdGNoPy5ncm91cHMpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBBUk46ICR7YXJufWApO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0cGFydGl0aW9uOiBtYXRjaC5ncm91cHMucGFydGl0aW9uLFxuXHRcdFx0cmVnaW9uOiBtYXRjaC5ncm91cHMucmVnaW9uLFxuXHRcdFx0YWNjb3VudDogbWF0Y2guZ3JvdXBzLmFjY291bnQsXG5cdFx0XHR0ZW1wbGF0ZUlkOiBtYXRjaC5ncm91cHMhLnRlbXBsYXRlSWQsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBCdWlsZHMgYW4gQVJOIGZvciB0aGUgdGVtcGxhdGUtc25hcHNob3QgcmVzb3VyY2UuXG5cdCAqL1xuXHRzdGF0aWMgdGVtcGxhdGVTbmFwc2hvdChcblx0XHRwcm9wczogTmV0d29ya1NlY3VyaXR5TWFuYWdlclRlbXBsYXRlU25hcHNob3RBcm5Qcm9wcyxcblx0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gYGFybjoke3Byb3BzLnBhcnRpdGlvbiA/PyBcImF3c1wifTpuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6JHtwcm9wcy5yZWdpb24gPz8gXCIqXCJ9OiR7cHJvcHMuYWNjb3VudCA/PyBcIipcIn06dGVtcGxhdGU6JHtwcm9wcy50ZW1wbGF0ZUlkfToke3Byb3BzLnZlcnNpb25OdW1iZXJ9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBWYWxpZGF0ZXMgd2hldGhlciBhIHN0cmluZyBpcyBhIHZhbGlkIEFSTiBmb3IgdGhlIHRlbXBsYXRlLXNuYXBzaG90IHJlc291cmNlLlxuXHQgKi9cblx0c3RhdGljIGlzVmFsaWRUZW1wbGF0ZVNuYXBzaG90QXJuKGFybjogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIFRlbXBsYXRlU25hcHNob3RBcm5SZWdleC50ZXN0KGFybik7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGEgdGVtcGxhdGUtc25hcHNob3QgQVJOIGludG8gaXRzIGNvbXBvbmVudHMuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIEFSTiBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0LlxuXHQgKi9cblx0c3RhdGljIHBhcnNlVGVtcGxhdGVTbmFwc2hvdEFybihcblx0XHRhcm46IHN0cmluZyxcblx0KTogTmV0d29ya1NlY3VyaXR5TWFuYWdlclRlbXBsYXRlU25hcHNob3RBcm5Db21wb25lbnRzIHtcblx0XHRjb25zdCBtYXRjaCA9IFRlbXBsYXRlU25hcHNob3RBcm5SZWdleC5leGVjKGFybik7XG5cdFx0aWYgKCFtYXRjaD8uZ3JvdXBzKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUtc25hcHNob3QgQVJOOiAke2Fybn1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhcnRpdGlvbjogbWF0Y2guZ3JvdXBzLnBhcnRpdGlvbixcblx0XHRcdHJlZ2lvbjogbWF0Y2guZ3JvdXBzLnJlZ2lvbixcblx0XHRcdGFjY291bnQ6IG1hdGNoLmdyb3Vwcy5hY2NvdW50LFxuXHRcdFx0dGVtcGxhdGVJZDogbWF0Y2guZ3JvdXBzIS50ZW1wbGF0ZUlkLFxuXHRcdFx0dmVyc2lvbk51bWJlcjogbWF0Y2guZ3JvdXBzIS52ZXJzaW9uTnVtYmVyLFxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBBUEkgb3BlcmF0aW9uIHRvIHJlcXVpcmVkIElBTSBhY3Rpb25zIG1hcHBpbmcgZm9yIG5ldHdvcmstc2VjdXJpdHktbWFuYWdlci5cbiAqL1xuZXhwb3J0IGNsYXNzIE5ldHdvcmtTZWN1cml0eU1hbmFnZXJPcGVyYXRpb25zIHtcblx0LyoqIElBTSBhY3Rpb25zIHJlcXVpcmVkIGZvciB0aGUgQ3JlYXRlRGVwbG95bWVudCBBUEkgY2FsbC4gKi9cblx0c3RhdGljIHJlYWRvbmx5IENyZWF0ZURlcGxveW1lbnQ6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkNyZWF0ZURlcGxveW1lbnRcIixcblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpUYWdSZXNvdXJjZVwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBDcmVhdGVEZXBsb3ltZW50U25hcHNob3QgQVBJIGNhbGwuICovXG5cdHN0YXRpYyByZWFkb25seSBDcmVhdGVEZXBsb3ltZW50U25hcHNob3Q6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkNyZWF0ZURlcGxveW1lbnRTbmFwc2hvdFwiLFxuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOlRhZ1Jlc291cmNlXCIsXG5cdF07XG5cdC8qKiBJQU0gYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIENyZWF0ZVBvbGljeSBBUEkgY2FsbC4gKi9cblx0c3RhdGljIHJlYWRvbmx5IENyZWF0ZVBvbGljeTogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6Q3JlYXRlUG9saWN5XCIsXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6VGFnUmVzb3VyY2VcIixcblx0XTtcblx0LyoqIElBTSBhY3Rpb25zIHJlcXVpcmVkIGZvciB0aGUgQ3JlYXRlUG9saWN5U25hcHNob3QgQVBJIGNhbGwuICovXG5cdHN0YXRpYyByZWFkb25seSBDcmVhdGVQb2xpY3lTbmFwc2hvdDogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6Q3JlYXRlUG9saWN5U25hcHNob3RcIixcblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpUYWdSZXNvdXJjZVwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBDcmVhdGVSdWxlIEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgQ3JlYXRlUnVsZTogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6Q3JlYXRlUnVsZVwiLFxuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOlRhZ1Jlc291cmNlXCIsXG5cdF07XG5cdC8qKiBJQU0gYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIENyZWF0ZVJ1bGVTbmFwc2hvdCBBUEkgY2FsbC4gKi9cblx0c3RhdGljIHJlYWRvbmx5IENyZWF0ZVJ1bGVTbmFwc2hvdDogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6Q3JlYXRlUnVsZVNuYXBzaG90XCIsXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6VGFnUmVzb3VyY2VcIixcblx0XTtcblx0LyoqIElBTSBhY3Rpb25zIHJlcXVpcmVkIGZvciB0aGUgQ3JlYXRlU2NvcGUgQVBJIGNhbGwuICovXG5cdHN0YXRpYyByZWFkb25seSBDcmVhdGVTY29wZTogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6Q3JlYXRlU2NvcGVcIixcblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpUYWdSZXNvdXJjZVwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBDcmVhdGVTY29wZVNuYXBzaG90IEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgQ3JlYXRlU2NvcGVTbmFwc2hvdDogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6Q3JlYXRlU2NvcGVTbmFwc2hvdFwiLFxuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOlRhZ1Jlc291cmNlXCIsXG5cdF07XG5cdC8qKiBJQU0gYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIENyZWF0ZVRlbXBsYXRlIEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgQ3JlYXRlVGVtcGxhdGU6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkNyZWF0ZVRlbXBsYXRlXCIsXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6VGFnUmVzb3VyY2VcIixcblx0XTtcblx0LyoqIElBTSBhY3Rpb25zIHJlcXVpcmVkIGZvciB0aGUgQ3JlYXRlVGVtcGxhdGVTbmFwc2hvdCBBUEkgY2FsbC4gKi9cblx0c3RhdGljIHJlYWRvbmx5IENyZWF0ZVRlbXBsYXRlU25hcHNob3Q6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkNyZWF0ZVRlbXBsYXRlU25hcHNob3RcIixcblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpUYWdSZXNvdXJjZVwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBEZWxldGVBZG1pbkFjY291bnQgQVBJIGNhbGwuICovXG5cdHN0YXRpYyByZWFkb25seSBEZWxldGVBZG1pbkFjY291bnQ6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkRlbGV0ZUFkbWluQWNjb3VudFwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBEZWxldGVEZXBsb3ltZW50IEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgRGVsZXRlRGVwbG95bWVudDogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6RGVsZXRlRGVwbG95bWVudFwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBEZWxldGVQb2xpY3kgQVBJIGNhbGwuICovXG5cdHN0YXRpYyByZWFkb25seSBEZWxldGVQb2xpY3k6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkRlbGV0ZVBvbGljeVwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBEZWxldGVSdWxlIEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgRGVsZXRlUnVsZTogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6RGVsZXRlUnVsZVwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBEZWxldGVTY29wZSBBUEkgY2FsbC4gKi9cblx0c3RhdGljIHJlYWRvbmx5IERlbGV0ZVNjb3BlOiBzdHJpbmdbXSA9IFtcblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpEZWxldGVTY29wZVwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBEZWxldGVUZW1wbGF0ZSBBUEkgY2FsbC4gKi9cblx0c3RhdGljIHJlYWRvbmx5IERlbGV0ZVRlbXBsYXRlOiBzdHJpbmdbXSA9IFtcblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpEZWxldGVUZW1wbGF0ZVwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBHZW5lcmF0ZVJ1bGVDb25maWd1cmF0aW9uIEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgR2VuZXJhdGVSdWxlQ29uZmlndXJhdGlvbjogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6R2VuZXJhdGVSdWxlQ29uZmlndXJhdGlvblwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBHZXRBZG1pbkFjY291bnQgQVBJIGNhbGwuICovXG5cdHN0YXRpYyByZWFkb25seSBvcEdldEFkbWluQWNjb3VudDogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6R2V0QWRtaW5BY2NvdW50XCIsXG5cdF07XG5cdC8qKiBJQU0gYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIEdldERlcGxveW1lbnQgQVBJIGNhbGwuICovXG5cdHN0YXRpYyByZWFkb25seSBvcEdldERlcGxveW1lbnQ6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkdldERlcGxveW1lbnRcIixcblx0XTtcblx0LyoqIElBTSBhY3Rpb25zIHJlcXVpcmVkIGZvciB0aGUgR2V0UG9saWN5IEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgb3BHZXRQb2xpY3k6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkdldFBvbGljeVwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBHZXRSdWxlIEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgb3BHZXRSdWxlOiBzdHJpbmdbXSA9IFtcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpHZXRSdWxlXCJdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBHZXRTY29wZSBBUEkgY2FsbC4gKi9cblx0c3RhdGljIHJlYWRvbmx5IG9wR2V0U2NvcGU6IHN0cmluZ1tdID0gW1wibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkdldFNjb3BlXCJdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBHZXRUZW1wbGF0ZSBBUEkgY2FsbC4gKi9cblx0c3RhdGljIHJlYWRvbmx5IG9wR2V0VGVtcGxhdGU6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkdldFRlbXBsYXRlXCIsXG5cdF07XG5cdC8qKiBJQU0gYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIExpc3RBZG1pbkFjY291bnRzIEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgTGlzdEFkbWluQWNjb3VudHM6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3RBZG1pbkFjY291bnRzXCIsXG5cdF07XG5cdC8qKiBJQU0gYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIExpc3RBZ2dyZWdhdGVSZXNvdXJjZVN5bmNocm9uaXphdGlvblN0YXR1c2VzIEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgTGlzdEFnZ3JlZ2F0ZVJlc291cmNlU3luY2hyb25pemF0aW9uU3RhdHVzZXM6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3RBZ2dyZWdhdGVSZXNvdXJjZVN5bmNocm9uaXphdGlvblN0YXR1c2VzXCIsXG5cdF07XG5cdC8qKiBJQU0gYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIExpc3REZXBsb3ltZW50U25hcHNob3RzIEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgTGlzdERlcGxveW1lbnRTbmFwc2hvdHM6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3REZXBsb3ltZW50U25hcHNob3RzXCIsXG5cdF07XG5cdC8qKiBJQU0gYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIExpc3REZXBsb3ltZW50cyBBUEkgY2FsbC4gKi9cblx0c3RhdGljIHJlYWRvbmx5IExpc3REZXBsb3ltZW50czogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6TGlzdERlcGxveW1lbnRzXCIsXG5cdF07XG5cdC8qKiBJQU0gYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIExpc3RQb2xpY2llcyBBUEkgY2FsbC4gKi9cblx0c3RhdGljIHJlYWRvbmx5IExpc3RQb2xpY2llczogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6TGlzdFBvbGljaWVzXCIsXG5cdF07XG5cdC8qKiBJQU0gYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIExpc3RQb2xpY3lTbmFwc2hvdHMgQVBJIGNhbGwuICovXG5cdHN0YXRpYyByZWFkb25seSBMaXN0UG9saWN5U25hcHNob3RzOiBzdHJpbmdbXSA9IFtcblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpMaXN0UG9saWN5U25hcHNob3RzXCIsXG5cdF07XG5cdC8qKiBJQU0gYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIExpc3RSZXNvdXJjZUFzc29jaWF0aW9ucyBBUEkgY2FsbC4gKi9cblx0c3RhdGljIHJlYWRvbmx5IExpc3RSZXNvdXJjZUFzc29jaWF0aW9uczogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6TGlzdFJlc291cmNlQXNzb2NpYXRpb25zXCIsXG5cdF07XG5cdC8qKiBJQU0gYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIExpc3RSZXNvdXJjZVN5bmNocm9uaXphdGlvblN0YXR1c2VzIEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgTGlzdFJlc291cmNlU3luY2hyb25pemF0aW9uU3RhdHVzZXM6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3RSZXNvdXJjZVN5bmNocm9uaXphdGlvblN0YXR1c2VzXCIsXG5cdF07XG5cdC8qKiBJQU0gYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIExpc3RSdWxlU25hcHNob3RzIEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgTGlzdFJ1bGVTbmFwc2hvdHM6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3RSdWxlU25hcHNob3RzXCIsXG5cdF07XG5cdC8qKiBJQU0gYWN0aW9ucyByZXF1aXJlZCBmb3IgdGhlIExpc3RSdWxlcyBBUEkgY2FsbC4gKi9cblx0c3RhdGljIHJlYWRvbmx5IExpc3RSdWxlczogc3RyaW5nW10gPSBbXCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6TGlzdFJ1bGVzXCJdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBMaXN0U2NvcGVTbmFwc2hvdHMgQVBJIGNhbGwuICovXG5cdHN0YXRpYyByZWFkb25seSBMaXN0U2NvcGVTbmFwc2hvdHM6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3RTY29wZVNuYXBzaG90c1wiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBMaXN0U2NvcGVzIEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgTGlzdFNjb3Blczogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6TGlzdFNjb3Blc1wiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBMaXN0VGFnc0ZvclJlc291cmNlIEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgTGlzdFRhZ3NGb3JSZXNvdXJjZTogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6TGlzdFRhZ3NGb3JSZXNvdXJjZVwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBMaXN0VGVtcGxhdGVTbmFwc2hvdHMgQVBJIGNhbGwuICovXG5cdHN0YXRpYyByZWFkb25seSBMaXN0VGVtcGxhdGVTbmFwc2hvdHM6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOkxpc3RUZW1wbGF0ZVNuYXBzaG90c1wiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBMaXN0VGVtcGxhdGVzIEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgTGlzdFRlbXBsYXRlczogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6TGlzdFRlbXBsYXRlc1wiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBQdXRBZG1pbkFjY291bnQgQVBJIGNhbGwuICovXG5cdHN0YXRpYyByZWFkb25seSBQdXRBZG1pbkFjY291bnQ6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOlB1dEFkbWluQWNjb3VudFwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBUYWdSZXNvdXJjZSBBUEkgY2FsbC4gKi9cblx0c3RhdGljIHJlYWRvbmx5IFRhZ1Jlc291cmNlOiBzdHJpbmdbXSA9IFtcblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpUYWdSZXNvdXJjZVwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBVbnRhZ1Jlc291cmNlIEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgVW50YWdSZXNvdXJjZTogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6VW50YWdSZXNvdXJjZVwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBVcGRhdGVEZXBsb3ltZW50IEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgVXBkYXRlRGVwbG95bWVudDogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6VXBkYXRlRGVwbG95bWVudFwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBVcGRhdGVQb2xpY3kgQVBJIGNhbGwuICovXG5cdHN0YXRpYyByZWFkb25seSBVcGRhdGVQb2xpY3k6IHN0cmluZ1tdID0gW1xuXHRcdFwibmV0d29yay1zZWN1cml0eS1tYW5hZ2VyOlVwZGF0ZVBvbGljeVwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBVcGRhdGVSdWxlIEFQSSBjYWxsLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgVXBkYXRlUnVsZTogc3RyaW5nW10gPSBbXG5cdFx0XCJuZXR3b3JrLXNlY3VyaXR5LW1hbmFnZXI6VXBkYXRlUnVsZVwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBVcGRhdGVTY29wZSBBUEkgY2FsbC4gKi9cblx0c3RhdGljIHJlYWRvbmx5IFVwZGF0ZVNjb3BlOiBzdHJpbmdbXSA9IFtcblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpVcGRhdGVTY29wZVwiLFxuXHRdO1xuXHQvKiogSUFNIGFjdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBVcGRhdGVUZW1wbGF0ZSBBUEkgY2FsbC4gKi9cblx0c3RhdGljIHJlYWRvbmx5IFVwZGF0ZVRlbXBsYXRlOiBzdHJpbmdbXSA9IFtcblx0XHRcIm5ldHdvcmstc2VjdXJpdHktbWFuYWdlcjpVcGRhdGVUZW1wbGF0ZVwiLFxuXHRdO1xufVxuXG4vKipcbiAqIENvbmRpdGlvbiBrZXkgY29uc3RhbnRzIGFuZCBidWlsZGVycyBmb3IgbmV0d29yay1zZWN1cml0eS1tYW5hZ2VyLlxuICovXG5leHBvcnQgY2xhc3MgTmV0d29ya1NlY3VyaXR5TWFuYWdlckNvbmRpdGlvbnMge1xuXHQvKiogQ29uZGl0aW9uIGtleXMgYXBwbGljYWJsZSB0byB0aGUgQ3JlYXRlRGVwbG95bWVudCBhY3Rpb24uICovXG5cdHN0YXRpYyByZWFkb25seSBDcmVhdGVEZXBsb3ltZW50Q29uZGl0aW9uS2V5czogc3RyaW5nW10gPSBbXG5cdFx0XCJhd3M6UmVxdWVzdFRhZy8ke1RhZ0tleX1cIixcblx0XHRcImF3czpUYWdLZXlzXCIsXG5cdF07XG5cdC8qKiBDb25kaXRpb24ga2V5cyBhcHBsaWNhYmxlIHRvIHRoZSBDcmVhdGVEZXBsb3ltZW50U25hcHNob3QgYWN0aW9uLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgQ3JlYXRlRGVwbG95bWVudFNuYXBzaG90Q29uZGl0aW9uS2V5czogc3RyaW5nW10gPSBbXG5cdFx0XCJhd3M6UmVxdWVzdFRhZy8ke1RhZ0tleX1cIixcblx0XHRcImF3czpUYWdLZXlzXCIsXG5cdF07XG5cdC8qKiBDb25kaXRpb24ga2V5cyBhcHBsaWNhYmxlIHRvIHRoZSBDcmVhdGVQb2xpY3kgYWN0aW9uLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgQ3JlYXRlUG9saWN5Q29uZGl0aW9uS2V5czogc3RyaW5nW10gPSBbXG5cdFx0XCJhd3M6UmVxdWVzdFRhZy8ke1RhZ0tleX1cIixcblx0XHRcImF3czpUYWdLZXlzXCIsXG5cdF07XG5cdC8qKiBDb25kaXRpb24ga2V5cyBhcHBsaWNhYmxlIHRvIHRoZSBDcmVhdGVQb2xpY3lTbmFwc2hvdCBhY3Rpb24uICovXG5cdHN0YXRpYyByZWFkb25seSBDcmVhdGVQb2xpY3lTbmFwc2hvdENvbmRpdGlvbktleXM6IHN0cmluZ1tdID0gW1xuXHRcdFwiYXdzOlJlcXVlc3RUYWcvJHtUYWdLZXl9XCIsXG5cdFx0XCJhd3M6VGFnS2V5c1wiLFxuXHRdO1xuXHQvKiogQ29uZGl0aW9uIGtleXMgYXBwbGljYWJsZSB0byB0aGUgQ3JlYXRlUnVsZSBhY3Rpb24uICovXG5cdHN0YXRpYyByZWFkb25seSBDcmVhdGVSdWxlQ29uZGl0aW9uS2V5czogc3RyaW5nW10gPSBbXG5cdFx0XCJhd3M6UmVxdWVzdFRhZy8ke1RhZ0tleX1cIixcblx0XHRcImF3czpUYWdLZXlzXCIsXG5cdF07XG5cdC8qKiBDb25kaXRpb24ga2V5cyBhcHBsaWNhYmxlIHRvIHRoZSBDcmVhdGVSdWxlU25hcHNob3QgYWN0aW9uLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgQ3JlYXRlUnVsZVNuYXBzaG90Q29uZGl0aW9uS2V5czogc3RyaW5nW10gPSBbXG5cdFx0XCJhd3M6UmVxdWVzdFRhZy8ke1RhZ0tleX1cIixcblx0XHRcImF3czpUYWdLZXlzXCIsXG5cdF07XG5cdC8qKiBDb25kaXRpb24ga2V5cyBhcHBsaWNhYmxlIHRvIHRoZSBDcmVhdGVTY29wZSBhY3Rpb24uICovXG5cdHN0YXRpYyByZWFkb25seSBDcmVhdGVTY29wZUNvbmRpdGlvbktleXM6IHN0cmluZ1tdID0gW1xuXHRcdFwiYXdzOlJlcXVlc3RUYWcvJHtUYWdLZXl9XCIsXG5cdFx0XCJhd3M6VGFnS2V5c1wiLFxuXHRdO1xuXHQvKiogQ29uZGl0aW9uIGtleXMgYXBwbGljYWJsZSB0byB0aGUgQ3JlYXRlU2NvcGVTbmFwc2hvdCBhY3Rpb24uICovXG5cdHN0YXRpYyByZWFkb25seSBDcmVhdGVTY29wZVNuYXBzaG90Q29uZGl0aW9uS2V5czogc3RyaW5nW10gPSBbXG5cdFx0XCJhd3M6UmVxdWVzdFRhZy8ke1RhZ0tleX1cIixcblx0XHRcImF3czpUYWdLZXlzXCIsXG5cdF07XG5cdC8qKiBDb25kaXRpb24ga2V5cyBhcHBsaWNhYmxlIHRvIHRoZSBDcmVhdGVUZW1wbGF0ZSBhY3Rpb24uICovXG5cdHN0YXRpYyByZWFkb25seSBDcmVhdGVUZW1wbGF0ZUNvbmRpdGlvbktleXM6IHN0cmluZ1tdID0gW1xuXHRcdFwiYXdzOlJlcXVlc3RUYWcvJHtUYWdLZXl9XCIsXG5cdFx0XCJhd3M6VGFnS2V5c1wiLFxuXHRdO1xuXHQvKiogQ29uZGl0aW9uIGtleXMgYXBwbGljYWJsZSB0byB0aGUgQ3JlYXRlVGVtcGxhdGVTbmFwc2hvdCBhY3Rpb24uICovXG5cdHN0YXRpYyByZWFkb25seSBDcmVhdGVUZW1wbGF0ZVNuYXBzaG90Q29uZGl0aW9uS2V5czogc3RyaW5nW10gPSBbXG5cdFx0XCJhd3M6UmVxdWVzdFRhZy8ke1RhZ0tleX1cIixcblx0XHRcImF3czpUYWdLZXlzXCIsXG5cdF07XG5cdC8qKiBDb25kaXRpb24ga2V5cyBhcHBsaWNhYmxlIHRvIHRoZSBMaXN0UmVzb3VyY2VBc3NvY2lhdGlvbnMgYWN0aW9uLiAqL1xuXHRzdGF0aWMgcmVhZG9ubHkgTGlzdFJlc291cmNlQXNzb2NpYXRpb25zQ29uZGl0aW9uS2V5czogc3RyaW5nW10gPSBbXG5cdFx0XCJhd3M6UmVzb3VyY2VUYWcvJHtUYWdLZXl9XCIsXG5cdF07XG5cdC8qKiBDb25kaXRpb24ga2V5cyBhcHBsaWNhYmxlIHRvIHRoZSBMaXN0UmVzb3VyY2VTeW5jaHJvbml6YXRpb25TdGF0dXNlcyBhY3Rpb24uICovXG5cdHN0YXRpYyByZWFkb25seSBMaXN0UmVzb3VyY2VTeW5jaHJvbml6YXRpb25TdGF0dXNlc0NvbmRpdGlvbktleXM6IHN0cmluZ1tdID0gW1xuXHRcdFwiYXdzOlJlc291cmNlVGFnLyR7VGFnS2V5fVwiLFxuXHRdO1xuXHQvKiogQ29uZGl0aW9uIGtleXMgYXBwbGljYWJsZSB0byB0aGUgTGlzdFRhZ3NGb3JSZXNvdXJjZSBhY3Rpb24uICovXG5cdHN0YXRpYyByZWFkb25seSBMaXN0VGFnc0ZvclJlc291cmNlQ29uZGl0aW9uS2V5czogc3RyaW5nW10gPSBbXG5cdFx0XCJhd3M6UmVzb3VyY2VUYWcvJHtUYWdLZXl9XCIsXG5cdF07XG5cdC8qKiBDb25kaXRpb24ga2V5cyBhcHBsaWNhYmxlIHRvIHRoZSBUYWdSZXNvdXJjZSBhY3Rpb24uICovXG5cdHN0YXRpYyByZWFkb25seSBUYWdSZXNvdXJjZUNvbmRpdGlvbktleXM6IHN0cmluZ1tdID0gW1xuXHRcdFwiYXdzOlJlcXVlc3RUYWcvJHtUYWdLZXl9XCIsXG5cdFx0XCJhd3M6UmVzb3VyY2VUYWcvJHtUYWdLZXl9XCIsXG5cdFx0XCJhd3M6VGFnS2V5c1wiLFxuXHRdO1xuXHQvKiogQ29uZGl0aW9uIGtleXMgYXBwbGljYWJsZSB0byB0aGUgVW50YWdSZXNvdXJjZSBhY3Rpb24uICovXG5cdHN0YXRpYyByZWFkb25seSBVbnRhZ1Jlc291cmNlQ29uZGl0aW9uS2V5czogc3RyaW5nW10gPSBbXG5cdFx0XCJhd3M6UmVzb3VyY2VUYWcvJHtUYWdLZXl9XCIsXG5cdFx0XCJhd3M6VGFnS2V5c1wiLFxuXHRdO1xuXG5cdC8qKiBDb25kaXRpb24ga2V5OiBhd3M6UmVxdWVzdFRhZy8ke1RhZ0tleX0gKFN0cmluZykgKi9cblx0c3RhdGljIHJlYWRvbmx5IEFXU19SRVFVRVNUX1RBRyA9IFwiYXdzOlJlcXVlc3RUYWcvJHtUYWdLZXl9XCI7XG5cdC8qKiBDb25kaXRpb24ga2V5OiBhd3M6UmVzb3VyY2VUYWcvJHtUYWdLZXl9IChTdHJpbmcpICovXG5cdHN0YXRpYyByZWFkb25seSBBV1NfUkVTT1VSQ0VfVEFHID0gXCJhd3M6UmVzb3VyY2VUYWcvJHtUYWdLZXl9XCI7XG5cdC8qKiBDb25kaXRpb24ga2V5OiBhd3M6VGFnS2V5cyAoQXJyYXlPZlN0cmluZykgKi9cblx0c3RhdGljIHJlYWRvbmx5IEFXU19UQUdfS0VZUyA9IFwiYXdzOlRhZ0tleXNcIjtcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIGEgY29uZGl0aW9uIGJsb2NrIGZvciBgYXdzOlJlcXVlc3RUYWcvJHtUYWdLZXl9YC5cblx0ICovXG5cdHN0YXRpYyByZXF1ZXN0VGFnKHZhbHVlOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG5cdFx0cmV0dXJuIHsgU3RyaW5nRXF1YWxzOiB7IFwiYXdzOlJlcXVlc3RUYWcvJHtUYWdLZXl9XCI6IHZhbHVlIH0gfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgYSBjb25kaXRpb24gYmxvY2sgZm9yIGBhd3M6UmVzb3VyY2VUYWcvJHtUYWdLZXl9YC5cblx0ICovXG5cdHN0YXRpYyByZXNvdXJjZVRhZyh2YWx1ZTogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuXHRcdHJldHVybiB7IFN0cmluZ0VxdWFsczogeyBcImF3czpSZXNvdXJjZVRhZy8ke1RhZ0tleX1cIjogdmFsdWUgfSB9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyBhIGNvbmRpdGlvbiBibG9jayBmb3IgYGF3czpUYWdLZXlzYC5cblx0ICovXG5cdHN0YXRpYyB0YWdLZXlzKHZhbHVlczogc3RyaW5nW10pOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4+IHtcblx0XHRyZXR1cm4geyBcIkZvckFsbFZhbHVlczpTdHJpbmdFcXVhbHNcIjogeyBcImF3czpUYWdLZXlzXCI6IHZhbHVlcyB9IH07XG5cdH1cbn1cbiJdfQ==