@jjrawlins/cdk-ami-builder 0.0.23 → 0.0.25

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 (114) hide show
  1. package/.jsii +12 -12
  2. package/cdk-ami-builder/jsii/jsii.go +2 -2
  3. package/cdk-ami-builder/version +1 -1
  4. package/lib/ImagePipeline/ImagePipeline.js +1 -1
  5. package/lib/Lambdas/CheckStateMachineStatus/CheckStateMachineStatus-function.js +1 -1
  6. package/lib/Lambdas/StartStateMachine/StartStateMachine-function.js +1 -1
  7. package/node_modules/@aws-sdk/client-ec2/dist-cjs/index.js +123 -5
  8. package/node_modules/@aws-sdk/client-ec2/dist-es/models/models_7.js +0 -4
  9. package/node_modules/@aws-sdk/client-ec2/dist-es/models/models_8.js +4 -0
  10. package/node_modules/@aws-sdk/client-ec2/dist-es/protocols/Aws_ec2.js +124 -0
  11. package/node_modules/@aws-sdk/client-ec2/dist-types/commands/CopySnapshotCommand.d.ts +7 -10
  12. package/node_modules/@aws-sdk/client-ec2/dist-types/commands/CreateFpgaImageCommand.d.ts +2 -2
  13. package/node_modules/@aws-sdk/client-ec2/dist-types/commands/DescribeImageUsageReportEntriesCommand.d.ts +1 -1
  14. package/node_modules/@aws-sdk/client-ec2/dist-types/commands/DisableImageBlockPublicAccessCommand.d.ts +0 -4
  15. package/node_modules/@aws-sdk/client-ec2/dist-types/commands/GetAllowedImagesSettingsCommand.d.ts +12 -0
  16. package/node_modules/@aws-sdk/client-ec2/dist-types/commands/GetInstanceMetadataDefaultsCommand.d.ts +1 -1
  17. package/node_modules/@aws-sdk/client-ec2/dist-types/commands/GetNetworkInsightsAccessScopeAnalysisFindingsCommand.d.ts +2 -1
  18. package/node_modules/@aws-sdk/client-ec2/dist-types/commands/GetNetworkInsightsAccessScopeContentCommand.d.ts +1 -2
  19. package/node_modules/@aws-sdk/client-ec2/dist-types/commands/ModifyInstanceMetadataDefaultsCommand.d.ts +3 -3
  20. package/node_modules/@aws-sdk/client-ec2/dist-types/commands/ReplaceImageCriteriaInAllowedImagesSettingsCommand.d.ts +12 -0
  21. package/node_modules/@aws-sdk/client-ec2/dist-types/models/models_1.d.ts +4 -4
  22. package/node_modules/@aws-sdk/client-ec2/dist-types/models/models_2.d.ts +4 -0
  23. package/node_modules/@aws-sdk/client-ec2/dist-types/models/models_4.d.ts +11 -11
  24. package/node_modules/@aws-sdk/client-ec2/dist-types/models/models_6.d.ts +100 -65
  25. package/node_modules/@aws-sdk/client-ec2/dist-types/models/models_7.d.ts +45 -31
  26. package/node_modules/@aws-sdk/client-ec2/dist-types/models/models_8.d.ts +149 -22
  27. package/node_modules/@aws-sdk/client-ec2/dist-types/ts3.4/commands/GetNetworkInsightsAccessScopeAnalysisFindingsCommand.d.ts +2 -4
  28. package/node_modules/@aws-sdk/client-ec2/dist-types/ts3.4/commands/GetNetworkInsightsAccessScopeContentCommand.d.ts +4 -2
  29. package/node_modules/@aws-sdk/client-ec2/dist-types/ts3.4/models/models_6.d.ts +11 -12
  30. package/node_modules/@aws-sdk/client-ec2/dist-types/ts3.4/models/models_7.d.ts +12 -10
  31. package/node_modules/@aws-sdk/client-ec2/dist-types/ts3.4/models/models_8.d.ts +20 -2
  32. package/node_modules/@aws-sdk/client-ec2/package.json +19 -19
  33. package/node_modules/@aws-sdk/client-ecs/package.json +18 -18
  34. package/node_modules/@aws-sdk/client-kms/package.json +18 -18
  35. package/node_modules/@aws-sdk/client-s3/package.json +28 -28
  36. package/node_modules/@aws-sdk/client-secrets-manager/package.json +18 -18
  37. package/node_modules/@aws-sdk/client-sfn/package.json +18 -18
  38. package/node_modules/@aws-sdk/client-sns/package.json +18 -18
  39. package/node_modules/@aws-sdk/client-sqs/dist-types/commands/SendMessageBatchCommand.d.ts +1 -1
  40. package/node_modules/@aws-sdk/client-sqs/dist-types/commands/SendMessageCommand.d.ts +1 -1
  41. package/node_modules/@aws-sdk/client-sqs/dist-types/models/models_0.d.ts +1 -1
  42. package/node_modules/@aws-sdk/client-sqs/package.json +19 -19
  43. package/node_modules/@aws-sdk/client-ssm/package.json +18 -18
  44. package/node_modules/@aws-sdk/client-sso/package.json +17 -17
  45. package/node_modules/@aws-sdk/core/package.json +5 -5
  46. package/node_modules/@aws-sdk/credential-provider-env/package.json +4 -3
  47. package/node_modules/@aws-sdk/credential-provider-http/package.json +6 -5
  48. package/node_modules/@aws-sdk/credential-provider-ini/package.json +10 -9
  49. package/node_modules/@aws-sdk/credential-provider-node/package.json +9 -8
  50. package/node_modules/@aws-sdk/credential-provider-process/package.json +4 -3
  51. package/node_modules/@aws-sdk/credential-provider-sso/package.json +6 -5
  52. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +5 -4
  53. package/node_modules/@aws-sdk/middleware-bucket-endpoint/package.json +4 -3
  54. package/node_modules/@aws-sdk/middleware-expect-continue/package.json +3 -2
  55. package/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/getCrc32ChecksumAlgorithmFunction.d.ts +1 -1
  56. package/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/stringHasher.d.ts +1 -1
  57. package/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/ts3.4/getCrc32ChecksumAlgorithmFunction.d.ts +1 -1
  58. package/node_modules/@aws-sdk/middleware-flexible-checksums/dist-types/ts3.4/stringHasher.d.ts +1 -1
  59. package/node_modules/@aws-sdk/middleware-flexible-checksums/package.json +5 -4
  60. package/node_modules/@aws-sdk/middleware-host-header/package.json +3 -2
  61. package/node_modules/@aws-sdk/middleware-location-constraint/package.json +3 -2
  62. package/node_modules/@aws-sdk/middleware-logger/package.json +3 -2
  63. package/node_modules/@aws-sdk/middleware-recursion-detection/package.json +3 -2
  64. package/node_modules/@aws-sdk/middleware-sdk-ec2/package.json +6 -5
  65. package/node_modules/@aws-sdk/middleware-sdk-s3/package.json +8 -7
  66. package/node_modules/@aws-sdk/middleware-sdk-sqs/package.json +4 -3
  67. package/node_modules/@aws-sdk/middleware-ssec/package.json +3 -2
  68. package/node_modules/@aws-sdk/middleware-user-agent/package.json +6 -5
  69. package/node_modules/@aws-sdk/nested-clients/package.json +18 -17
  70. package/node_modules/@aws-sdk/region-config-resolver/package.json +3 -2
  71. package/node_modules/@aws-sdk/signature-v4-multi-region/package.json +4 -3
  72. package/node_modules/@aws-sdk/token-providers/package.json +5 -5
  73. package/node_modules/@aws-sdk/types/package.json +2 -1
  74. package/node_modules/@aws-sdk/util-arn-parser/package.json +2 -1
  75. package/node_modules/@aws-sdk/util-endpoints/package.json +3 -3
  76. package/node_modules/@aws-sdk/util-format-url/package.json +3 -2
  77. package/node_modules/@aws-sdk/util-locate-window/package.json +2 -1
  78. package/node_modules/@aws-sdk/util-user-agent-browser/package.json +3 -2
  79. package/node_modules/@aws-sdk/util-user-agent-node/package.json +4 -3
  80. package/node_modules/@aws-sdk/xml-builder/package.json +2 -1
  81. package/node_modules/cdk-iam-floyd/README.md +3 -3
  82. package/node_modules/cdk-iam-floyd/lib/generated/aws-managed-policies/cdk-iam-floyd.d.ts +2 -4
  83. package/node_modules/cdk-iam-floyd/lib/generated/aws-managed-policies/cdk-iam-floyd.js +5 -9
  84. package/node_modules/cdk-iam-floyd/lib/generated/aws-managed-policies/iam-floyd.d.ts +2 -4
  85. package/node_modules/cdk-iam-floyd/lib/generated/aws-managed-policies/iam-floyd.js +3 -5
  86. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudformation.d.ts +23 -0
  87. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudformation.js +29 -1
  88. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudwatchobservabilityadminservice.d.ts +133 -1
  89. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/cloudwatchobservabilityadminservice.js +166 -2
  90. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/elasticvmwareservice.d.ts +16 -0
  91. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/elasticvmwareservice.js +24 -2
  92. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/iamidentitycenter.d.ts +333 -0
  93. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/iamidentitycenter.js +334 -1
  94. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/iamidentitycenterdirectory.d.ts +108 -0
  95. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/iamidentitycenterdirectory.js +109 -1
  96. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/iamidentitycenteroidcservice.d.ts +4 -1
  97. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/iamidentitycenteroidcservice.js +5 -2
  98. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/identitystore.d.ts +93 -0
  99. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/identitystore.js +103 -1
  100. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/invoicingservice.d.ts +24 -0
  101. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/invoicingservice.js +34 -1
  102. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/qinconnect.d.ts +8 -0
  103. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/qinconnect.js +12 -1
  104. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/s3.d.ts +2 -0
  105. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/s3.js +3 -1
  106. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/taxsettings.d.ts +48 -0
  107. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/taxsettings.js +68 -2
  108. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/workspaces.d.ts +6 -14
  109. package/node_modules/cdk-iam-floyd/lib/generated/policy-statements/workspaces.js +7 -18
  110. package/node_modules/cdk-iam-floyd/package.json +4 -4
  111. package/package.json +13 -13
  112. package/node_modules/@aws-sdk/middleware-sdk-ec2/dist-es/fixture.js +0 -13
  113. package/node_modules/@aws-sdk/middleware-sdk-ec2/dist-types/fixture.d.ts +0 -12
  114. package/node_modules/@aws-sdk/middleware-sdk-ec2/dist-types/ts3.4/fixture.d.ts +0 -12
@@ -8,6 +8,21 @@ import { aws_iam as iam } from "aws-cdk-lib";
8
8
  */
9
9
  export declare class Observabilityadmin extends PolicyStatement {
10
10
  servicePrefix: string;
11
+ /**
12
+ * Grants permission to create a new organization centralization rule with the specified name for the organization
13
+ *
14
+ * Access Level: Write
15
+ *
16
+ * Possible conditions:
17
+ * - .ifAwsTagKeys()
18
+ * - .ifAwsRequestTag()
19
+ * - .ifCentralizationSourceRegions()
20
+ * - .ifCentralizationDestinationRegion()
21
+ * - .ifCentralizationBackupRegion()
22
+ *
23
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_CreateCentralizationRuleForOrganization.html
24
+ */
25
+ toCreateCentralizationRuleForOrganization(): this;
11
26
  /**
12
27
  * Grants permission to create a new telemetry rule with the specified name for the account
13
28
  *
@@ -32,6 +47,14 @@ export declare class Observabilityadmin extends PolicyStatement {
32
47
  * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_CreateTelemetryRuleForOrganization.html
33
48
  */
34
49
  toCreateTelemetryRuleForOrganization(): this;
50
+ /**
51
+ * Grants permission to delete an organization centralization rule with the specified name for the organization
52
+ *
53
+ * Access Level: Write
54
+ *
55
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_DeleteCentralizationRuleForOrganization.html
56
+ */
57
+ toDeleteCentralizationRuleForOrganization(): this;
35
58
  /**
36
59
  * Grants permission to delete a telemetry rule with the specified name for the account
37
60
  *
@@ -48,6 +71,22 @@ export declare class Observabilityadmin extends PolicyStatement {
48
71
  * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_DeleteTelemetryRuleForOrganization.html
49
72
  */
50
73
  toDeleteTelemetryRuleForOrganization(): this;
74
+ /**
75
+ * Grants permission to retrieve the specified organization centralization rule for the organization
76
+ *
77
+ * Access Level: Read
78
+ *
79
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_GetCentralizationRuleForOrganization.html
80
+ */
81
+ toGetCentralizationRuleForOrganization(): this;
82
+ /**
83
+ * Grants permission to retrieve the status of the Resource tags for telemetry feature for the account
84
+ *
85
+ * Access Level: Read
86
+ *
87
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_GetTelemetryEnrichmentStatus.html
88
+ */
89
+ toGetTelemetryEnrichmentStatus(): this;
51
90
  /**
52
91
  * Grants permission to retrieve the Telemetry Config feature status for the account
53
92
  *
@@ -80,6 +119,14 @@ export declare class Observabilityadmin extends PolicyStatement {
80
119
  * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_GetTelemetryRuleForOrganization.html
81
120
  */
82
121
  toGetTelemetryRuleForOrganization(): this;
122
+ /**
123
+ * Grants permission to list the centralization rules for the organization
124
+ *
125
+ * Access Level: List
126
+ *
127
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_ListCentralizationRulesForOrganization.html
128
+ */
129
+ toListCentralizationRulesForOrganization(): this;
83
130
  /**
84
131
  * Grants permission to retrieve telemetry configurations for resources associated with the account
85
132
  *
@@ -120,6 +167,14 @@ export declare class Observabilityadmin extends PolicyStatement {
120
167
  * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_ListTelemetryRulesForOrganization.html
121
168
  */
122
169
  toListTelemetryRulesForOrganization(): this;
170
+ /**
171
+ * Grants permission to enable the Resource tags for telemetry feature for the account
172
+ *
173
+ * Access Level: Write
174
+ *
175
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_StartTelemetryEnrichment.html
176
+ */
177
+ toStartTelemetryEnrichment(): this;
123
178
  /**
124
179
  * Grants permission to start the Telemetry Config feature for the account
125
180
  *
@@ -136,6 +191,14 @@ export declare class Observabilityadmin extends PolicyStatement {
136
191
  * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_StartTelemetryEvaluationForOrganization.html
137
192
  */
138
193
  toStartTelemetryEvaluationForOrganization(): this;
194
+ /**
195
+ * Grants permission to disable the Resource tags for telemetry feature for the account
196
+ *
197
+ * Access Level: Write
198
+ *
199
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_StopTelemetryEnrichment.html
200
+ */
201
+ toStopTelemetryEnrichment(): this;
139
202
  /**
140
203
  * Grants permission to stop the Telemetry Config feature for the account
141
204
  *
@@ -175,6 +238,19 @@ export declare class Observabilityadmin extends PolicyStatement {
175
238
  * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_UntagResource.html
176
239
  */
177
240
  toUntagResource(): this;
241
+ /**
242
+ * Grants permission to update the specified centralization rule for the organization
243
+ *
244
+ * Access Level: Write
245
+ *
246
+ * Possible conditions:
247
+ * - .ifCentralizationSourceRegions()
248
+ * - .ifCentralizationDestinationRegion()
249
+ * - .ifCentralizationBackupRegion()
250
+ *
251
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_UpdateCentralizationRuleForOrganization.html
252
+ */
253
+ toUpdateCentralizationRuleForOrganization(): this;
178
254
  /**
179
255
  * Grants permission to update the specified telemetry rule for the account
180
256
  *
@@ -184,7 +260,7 @@ export declare class Observabilityadmin extends PolicyStatement {
184
260
  */
185
261
  toUpdateTelemetryRule(): this;
186
262
  /**
187
- * Grants permission to retrieve the specified organization telemetry rule for the organization
263
+ * Grants permission to update the specified telemetry rule for the organization
188
264
  *
189
265
  * Access Level: Write
190
266
  *
@@ -220,12 +296,27 @@ export declare class Observabilityadmin extends PolicyStatement {
220
296
  * - .ifAwsResourceTag()
221
297
  */
222
298
  onOrganizationTelemetryRule(telemetryRuleName: string, account?: string, region?: string, partition?: string): this;
299
+ /**
300
+ * Adds a resource of type organization-centralization-rule to the statement
301
+ *
302
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_OrganizationCentralizationRule.html
303
+ *
304
+ * @param centralizationRuleName - Identifier for the centralizationRuleName.
305
+ * @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
306
+ * @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
307
+ * @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
308
+ *
309
+ * Possible conditions:
310
+ * - .ifAwsResourceTag()
311
+ */
312
+ onOrganizationCentralizationRule(centralizationRuleName: string, account?: string, region?: string, partition?: string): this;
223
313
  /**
224
314
  * Filters access by the tags that are passed in the request
225
315
  *
226
316
  * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag
227
317
  *
228
318
  * Applies to actions:
319
+ * - .toCreateCentralizationRuleForOrganization()
229
320
  * - .toCreateTelemetryRule()
230
321
  * - .toCreateTelemetryRuleForOrganization()
231
322
  * - .toTagResource()
@@ -243,6 +334,7 @@ export declare class Observabilityadmin extends PolicyStatement {
243
334
  * Applies to resource types:
244
335
  * - telemetry-rule
245
336
  * - organization-telemetry-rule
337
+ * - organization-centralization-rule
246
338
  *
247
339
  * @param tagKey The tag key to check
248
340
  * @param value The value(s) to check
@@ -255,6 +347,7 @@ export declare class Observabilityadmin extends PolicyStatement {
255
347
  * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys
256
348
  *
257
349
  * Applies to actions:
350
+ * - .toCreateCentralizationRuleForOrganization()
258
351
  * - .toCreateTelemetryRule()
259
352
  * - .toCreateTelemetryRuleForOrganization()
260
353
  * - .toTagResource()
@@ -264,6 +357,45 @@ export declare class Observabilityadmin extends PolicyStatement {
264
357
  * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
265
358
  */
266
359
  ifAwsTagKeys(value: string | string[], operator?: Operator | string): this;
360
+ /**
361
+ * Filters access by the backup region that is passed in the request
362
+ *
363
+ * https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/reference_policies_condition-keys.htmlcondition-keys-observabilityadmin.html#condition-keys-centralizationbackupregion
364
+ *
365
+ * Applies to actions:
366
+ * - .toCreateCentralizationRuleForOrganization()
367
+ * - .toUpdateCentralizationRuleForOrganization()
368
+ *
369
+ * @param value The value(s) to check
370
+ * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
371
+ */
372
+ ifCentralizationBackupRegion(value: string | string[], operator?: Operator | string): this;
373
+ /**
374
+ * Filters access by the destination region that is passed in the request
375
+ *
376
+ * https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/reference_policies_condition-keys.htmlcondition-keys-observabilityadmin.html#condition-keys-centralizationdestinationregion
377
+ *
378
+ * Applies to actions:
379
+ * - .toCreateCentralizationRuleForOrganization()
380
+ * - .toUpdateCentralizationRuleForOrganization()
381
+ *
382
+ * @param value The value(s) to check
383
+ * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
384
+ */
385
+ ifCentralizationDestinationRegion(value: string | string[], operator?: Operator | string): this;
386
+ /**
387
+ * Filters access by the source regions that are passed in the request
388
+ *
389
+ * https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/reference_policies_condition-keys.htmlcondition-keys-observabilityadmin.html#condition-keys-centralizationsourceregions
390
+ *
391
+ * Applies to actions:
392
+ * - .toCreateCentralizationRuleForOrganization()
393
+ * - .toUpdateCentralizationRuleForOrganization()
394
+ *
395
+ * @param value The value(s) to check
396
+ * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
397
+ */
398
+ ifCentralizationSourceRegions(value: string | string[], operator?: Operator | string): this;
267
399
  /**
268
400
  * Statement provider for service [observabilityadmin](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchobservabilityadminservice.html).
269
401
  *
@@ -8,6 +8,23 @@ const shared_1 = require("../../shared");
8
8
  * @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement
9
9
  */
10
10
  class Observabilityadmin extends shared_1.PolicyStatement {
11
+ /**
12
+ * Grants permission to create a new organization centralization rule with the specified name for the organization
13
+ *
14
+ * Access Level: Write
15
+ *
16
+ * Possible conditions:
17
+ * - .ifAwsTagKeys()
18
+ * - .ifAwsRequestTag()
19
+ * - .ifCentralizationSourceRegions()
20
+ * - .ifCentralizationDestinationRegion()
21
+ * - .ifCentralizationBackupRegion()
22
+ *
23
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_CreateCentralizationRuleForOrganization.html
24
+ */
25
+ toCreateCentralizationRuleForOrganization() {
26
+ return this.to('CreateCentralizationRuleForOrganization');
27
+ }
11
28
  /**
12
29
  * Grants permission to create a new telemetry rule with the specified name for the account
13
30
  *
@@ -36,6 +53,16 @@ class Observabilityadmin extends shared_1.PolicyStatement {
36
53
  toCreateTelemetryRuleForOrganization() {
37
54
  return this.to('CreateTelemetryRuleForOrganization');
38
55
  }
56
+ /**
57
+ * Grants permission to delete an organization centralization rule with the specified name for the organization
58
+ *
59
+ * Access Level: Write
60
+ *
61
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_DeleteCentralizationRuleForOrganization.html
62
+ */
63
+ toDeleteCentralizationRuleForOrganization() {
64
+ return this.to('DeleteCentralizationRuleForOrganization');
65
+ }
39
66
  /**
40
67
  * Grants permission to delete a telemetry rule with the specified name for the account
41
68
  *
@@ -56,6 +83,26 @@ class Observabilityadmin extends shared_1.PolicyStatement {
56
83
  toDeleteTelemetryRuleForOrganization() {
57
84
  return this.to('DeleteTelemetryRuleForOrganization');
58
85
  }
86
+ /**
87
+ * Grants permission to retrieve the specified organization centralization rule for the organization
88
+ *
89
+ * Access Level: Read
90
+ *
91
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_GetCentralizationRuleForOrganization.html
92
+ */
93
+ toGetCentralizationRuleForOrganization() {
94
+ return this.to('GetCentralizationRuleForOrganization');
95
+ }
96
+ /**
97
+ * Grants permission to retrieve the status of the Resource tags for telemetry feature for the account
98
+ *
99
+ * Access Level: Read
100
+ *
101
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_GetTelemetryEnrichmentStatus.html
102
+ */
103
+ toGetTelemetryEnrichmentStatus() {
104
+ return this.to('GetTelemetryEnrichmentStatus');
105
+ }
59
106
  /**
60
107
  * Grants permission to retrieve the Telemetry Config feature status for the account
61
108
  *
@@ -96,6 +143,16 @@ class Observabilityadmin extends shared_1.PolicyStatement {
96
143
  toGetTelemetryRuleForOrganization() {
97
144
  return this.to('GetTelemetryRuleForOrganization');
98
145
  }
146
+ /**
147
+ * Grants permission to list the centralization rules for the organization
148
+ *
149
+ * Access Level: List
150
+ *
151
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_ListCentralizationRulesForOrganization.html
152
+ */
153
+ toListCentralizationRulesForOrganization() {
154
+ return this.to('ListCentralizationRulesForOrganization');
155
+ }
99
156
  /**
100
157
  * Grants permission to retrieve telemetry configurations for resources associated with the account
101
158
  *
@@ -146,6 +203,16 @@ class Observabilityadmin extends shared_1.PolicyStatement {
146
203
  toListTelemetryRulesForOrganization() {
147
204
  return this.to('ListTelemetryRulesForOrganization');
148
205
  }
206
+ /**
207
+ * Grants permission to enable the Resource tags for telemetry feature for the account
208
+ *
209
+ * Access Level: Write
210
+ *
211
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_StartTelemetryEnrichment.html
212
+ */
213
+ toStartTelemetryEnrichment() {
214
+ return this.to('StartTelemetryEnrichment');
215
+ }
149
216
  /**
150
217
  * Grants permission to start the Telemetry Config feature for the account
151
218
  *
@@ -166,6 +233,16 @@ class Observabilityadmin extends shared_1.PolicyStatement {
166
233
  toStartTelemetryEvaluationForOrganization() {
167
234
  return this.to('StartTelemetryEvaluationForOrganization');
168
235
  }
236
+ /**
237
+ * Grants permission to disable the Resource tags for telemetry feature for the account
238
+ *
239
+ * Access Level: Write
240
+ *
241
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_StopTelemetryEnrichment.html
242
+ */
243
+ toStopTelemetryEnrichment() {
244
+ return this.to('StopTelemetryEnrichment');
245
+ }
169
246
  /**
170
247
  * Grants permission to stop the Telemetry Config feature for the account
171
248
  *
@@ -213,6 +290,21 @@ class Observabilityadmin extends shared_1.PolicyStatement {
213
290
  toUntagResource() {
214
291
  return this.to('UntagResource');
215
292
  }
293
+ /**
294
+ * Grants permission to update the specified centralization rule for the organization
295
+ *
296
+ * Access Level: Write
297
+ *
298
+ * Possible conditions:
299
+ * - .ifCentralizationSourceRegions()
300
+ * - .ifCentralizationDestinationRegion()
301
+ * - .ifCentralizationBackupRegion()
302
+ *
303
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_UpdateCentralizationRuleForOrganization.html
304
+ */
305
+ toUpdateCentralizationRuleForOrganization() {
306
+ return this.to('UpdateCentralizationRuleForOrganization');
307
+ }
216
308
  /**
217
309
  * Grants permission to update the specified telemetry rule for the account
218
310
  *
@@ -224,7 +316,7 @@ class Observabilityadmin extends shared_1.PolicyStatement {
224
316
  return this.to('UpdateTelemetryRule');
225
317
  }
226
318
  /**
227
- * Grants permission to retrieve the specified organization telemetry rule for the organization
319
+ * Grants permission to update the specified telemetry rule for the organization
228
320
  *
229
321
  * Access Level: Write
230
322
  *
@@ -265,12 +357,29 @@ class Observabilityadmin extends shared_1.PolicyStatement {
265
357
  onOrganizationTelemetryRule(telemetryRuleName, account, region, partition) {
266
358
  return this.on(`arn:${partition ?? this.defaultPartition}:observabilityadmin:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:organization-telemetry-rule:${telemetryRuleName}`);
267
359
  }
360
+ /**
361
+ * Adds a resource of type organization-centralization-rule to the statement
362
+ *
363
+ * https://docs.aws.amazon.com/cloudwatch/latest/observabilityadmin/API_OrganizationCentralizationRule.html
364
+ *
365
+ * @param centralizationRuleName - Identifier for the centralizationRuleName.
366
+ * @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
367
+ * @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
368
+ * @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
369
+ *
370
+ * Possible conditions:
371
+ * - .ifAwsResourceTag()
372
+ */
373
+ onOrganizationCentralizationRule(centralizationRuleName, account, region, partition) {
374
+ return this.on(`arn:${partition ?? this.defaultPartition}:observabilityadmin:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:organization-centralization-rule:${centralizationRuleName}`);
375
+ }
268
376
  /**
269
377
  * Filters access by the tags that are passed in the request
270
378
  *
271
379
  * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag
272
380
  *
273
381
  * Applies to actions:
382
+ * - .toCreateCentralizationRuleForOrganization()
274
383
  * - .toCreateTelemetryRule()
275
384
  * - .toCreateTelemetryRuleForOrganization()
276
385
  * - .toTagResource()
@@ -290,6 +399,7 @@ class Observabilityadmin extends shared_1.PolicyStatement {
290
399
  * Applies to resource types:
291
400
  * - telemetry-rule
292
401
  * - organization-telemetry-rule
402
+ * - organization-centralization-rule
293
403
  *
294
404
  * @param tagKey The tag key to check
295
405
  * @param value The value(s) to check
@@ -304,6 +414,7 @@ class Observabilityadmin extends shared_1.PolicyStatement {
304
414
  * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys
305
415
  *
306
416
  * Applies to actions:
417
+ * - .toCreateCentralizationRuleForOrganization()
307
418
  * - .toCreateTelemetryRule()
308
419
  * - .toCreateTelemetryRuleForOrganization()
309
420
  * - .toTagResource()
@@ -315,6 +426,51 @@ class Observabilityadmin extends shared_1.PolicyStatement {
315
426
  ifAwsTagKeys(value, operator) {
316
427
  return this.if(`aws:TagKeys`, value, operator ?? 'StringLike');
317
428
  }
429
+ /**
430
+ * Filters access by the backup region that is passed in the request
431
+ *
432
+ * https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/reference_policies_condition-keys.htmlcondition-keys-observabilityadmin.html#condition-keys-centralizationbackupregion
433
+ *
434
+ * Applies to actions:
435
+ * - .toCreateCentralizationRuleForOrganization()
436
+ * - .toUpdateCentralizationRuleForOrganization()
437
+ *
438
+ * @param value The value(s) to check
439
+ * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
440
+ */
441
+ ifCentralizationBackupRegion(value, operator) {
442
+ return this.if(`CentralizationBackupRegion`, value, operator ?? 'StringLike');
443
+ }
444
+ /**
445
+ * Filters access by the destination region that is passed in the request
446
+ *
447
+ * https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/reference_policies_condition-keys.htmlcondition-keys-observabilityadmin.html#condition-keys-centralizationdestinationregion
448
+ *
449
+ * Applies to actions:
450
+ * - .toCreateCentralizationRuleForOrganization()
451
+ * - .toUpdateCentralizationRuleForOrganization()
452
+ *
453
+ * @param value The value(s) to check
454
+ * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
455
+ */
456
+ ifCentralizationDestinationRegion(value, operator) {
457
+ return this.if(`CentralizationDestinationRegion`, value, operator ?? 'StringLike');
458
+ }
459
+ /**
460
+ * Filters access by the source regions that are passed in the request
461
+ *
462
+ * https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/reference_policies_condition-keys.htmlcondition-keys-observabilityadmin.html#condition-keys-centralizationsourceregions
463
+ *
464
+ * Applies to actions:
465
+ * - .toCreateCentralizationRuleForOrganization()
466
+ * - .toUpdateCentralizationRuleForOrganization()
467
+ *
468
+ * @param value The value(s) to check
469
+ * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
470
+ */
471
+ ifCentralizationSourceRegions(value, operator) {
472
+ return this.if(`CentralizationSourceRegions`, value, operator ?? 'StringLike');
473
+ }
318
474
  /**
319
475
  * Statement provider for service [observabilityadmin](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatchobservabilityadminservice.html).
320
476
  *
@@ -324,18 +480,25 @@ class Observabilityadmin extends shared_1.PolicyStatement {
324
480
  this.servicePrefix = 'observabilityadmin';
325
481
  this.accessLevelList = {
326
482
  Write: [
483
+ 'CreateCentralizationRuleForOrganization',
327
484
  'CreateTelemetryRule',
328
485
  'CreateTelemetryRuleForOrganization',
486
+ 'DeleteCentralizationRuleForOrganization',
329
487
  'DeleteTelemetryRule',
330
488
  'DeleteTelemetryRuleForOrganization',
489
+ 'StartTelemetryEnrichment',
331
490
  'StartTelemetryEvaluation',
332
491
  'StartTelemetryEvaluationForOrganization',
492
+ 'StopTelemetryEnrichment',
333
493
  'StopTelemetryEvaluation',
334
494
  'StopTelemetryEvaluationForOrganization',
495
+ 'UpdateCentralizationRuleForOrganization',
335
496
  'UpdateTelemetryRule',
336
497
  'UpdateTelemetryRuleForOrganization'
337
498
  ],
338
499
  Read: [
500
+ 'GetCentralizationRuleForOrganization',
501
+ 'GetTelemetryEnrichmentStatus',
339
502
  'GetTelemetryEvaluationStatus',
340
503
  'GetTelemetryEvaluationStatusForOrganization',
341
504
  'GetTelemetryRule',
@@ -344,6 +507,7 @@ class Observabilityadmin extends shared_1.PolicyStatement {
344
507
  'ListResourceTelemetryForOrganization'
345
508
  ],
346
509
  List: [
510
+ 'ListCentralizationRulesForOrganization',
347
511
  'ListTagsForResource',
348
512
  'ListTelemetryRules',
349
513
  'ListTelemetryRulesForOrganization'
@@ -356,4 +520,4 @@ class Observabilityadmin extends shared_1.PolicyStatement {
356
520
  }
357
521
  }
358
522
  exports.Observabilityadmin = Observabilityadmin;
359
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWR3YXRjaG9ic2VydmFiaWxpdHlhZG1pbnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZHdhdGNob2JzZXJ2YWJpbGl0eWFkbWluc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FBeUQ7QUFHekQ7Ozs7R0FJRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsd0JBQWU7SUFHckQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLG9DQUFvQztRQUN6QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsb0NBQW9DLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0kscUJBQXFCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxvQ0FBb0M7UUFDekMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLDhCQUE4QjtRQUNuQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksNkNBQTZDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGlDQUFpQztRQUN0QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksdUJBQXVCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxzQ0FBc0M7UUFDM0MsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksb0JBQW9CO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxtQ0FBbUM7UUFDeEMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLDBCQUEwQjtRQUMvQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0kseUNBQXlDO1FBQzlDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSx5QkFBeUI7UUFDOUIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHdDQUF3QztRQUM3QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsd0NBQXdDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLGFBQWE7UUFDbEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxlQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0kscUJBQXFCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxvQ0FBb0M7UUFDekMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQWtDRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSSxlQUFlLENBQUMsaUJBQXlCLEVBQUUsT0FBZ0IsRUFBRSxNQUFlLEVBQUUsU0FBa0I7UUFDckcsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQVEsU0FBUyxJQUFJLElBQUksQ0FBQyxnQkFBaUIsdUJBQXdCLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYyxJQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBZSxtQkFBb0IsaUJBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQy9MLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSSwyQkFBMkIsQ0FBQyxpQkFBeUIsRUFBRSxPQUFnQixFQUFFLE1BQWUsRUFBRSxTQUFrQjtRQUNqSCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBUSxTQUFTLElBQUksSUFBSSxDQUFDLGdCQUFpQix1QkFBd0IsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFjLElBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFlLGdDQUFpQyxpQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFDNU0sQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSSxlQUFlLENBQUMsTUFBYyxFQUFFLEtBQXdCLEVBQUUsUUFBNEI7UUFDM0YsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFtQixNQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxJQUFJLFlBQVksQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSSxnQkFBZ0IsQ0FBQyxNQUFjLEVBQUUsS0FBd0IsRUFBRSxRQUE0QjtRQUM1RixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW9CLE1BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLElBQUksWUFBWSxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSSxZQUFZLENBQUMsS0FBd0IsRUFBRSxRQUE0QjtRQUN4RSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLElBQUksWUFBWSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksS0FBZ0M7UUFDMUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBcFhSLGtCQUFhLEdBQUcsb0JBQW9CLENBQUM7UUF3UGxDLG9CQUFlLEdBQW9CO1lBQzNDLEtBQUssRUFBRTtnQkFDTCxxQkFBcUI7Z0JBQ3JCLG9DQUFvQztnQkFDcEMscUJBQXFCO2dCQUNyQixvQ0FBb0M7Z0JBQ3BDLDBCQUEwQjtnQkFDMUIseUNBQXlDO2dCQUN6Qyx5QkFBeUI7Z0JBQ3pCLHdDQUF3QztnQkFDeEMscUJBQXFCO2dCQUNyQixvQ0FBb0M7YUFDckM7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osOEJBQThCO2dCQUM5Qiw2Q0FBNkM7Z0JBQzdDLGtCQUFrQjtnQkFDbEIsaUNBQWlDO2dCQUNqQyx1QkFBdUI7Z0JBQ3ZCLHNDQUFzQzthQUN2QztZQUNELElBQUksRUFBRTtnQkFDSixxQkFBcUI7Z0JBQ3JCLG9CQUFvQjtnQkFDcEIsbUNBQW1DO2FBQ3BDO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLGFBQWE7Z0JBQ2IsZUFBZTthQUNoQjtTQUNGLENBQUM7SUErRkYsQ0FBQztDQUNGO0FBdlhELGdEQXVYQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjY2Vzc0xldmVsTGlzdCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hY2Nlc3MtbGV2ZWwnO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50LCBPcGVyYXRvciB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBhd3NfaWFtIGFzIGlhbSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG4vKipcbiAqIFN0YXRlbWVudCBwcm92aWRlciBmb3Igc2VydmljZSBbb2JzZXJ2YWJpbGl0eWFkbWluXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9hbWF6b25jbG91ZHdhdGNob2JzZXJ2YWJpbGl0eWFkbWluc2VydmljZS5odG1sKS5cbiAqXG4gKiBAcGFyYW0gc2lkIFtTSURdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfc2lkLmh0bWwpIG9mIHRoZSBzdGF0ZW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIE9ic2VydmFiaWxpdHlhZG1pbiBleHRlbmRzIFBvbGljeVN0YXRlbWVudCB7XG4gIHB1YmxpYyBzZXJ2aWNlUHJlZml4ID0gJ29ic2VydmFiaWxpdHlhZG1pbic7XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG5ldyB0ZWxlbWV0cnkgcnVsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBmb3IgdGhlIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKiAtIC5pZkF3c1JlcXVlc3RUYWcoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9DcmVhdGVUZWxlbWV0cnlSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVRlbGVtZXRyeVJ1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVRlbGVtZXRyeVJ1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBuZXcgb3JnYW5pemF0aW9uIHRlbGVtZXRyeSBydWxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGZvciB0aGUgb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NUYWdLZXlzKClcbiAgICogLSAuaWZBd3NSZXF1ZXN0VGFnKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfQ3JlYXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGEgdGVsZW1ldHJ5IHJ1bGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZm9yIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfRGVsZXRlVGVsZW1ldHJ5UnVsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVUZWxlbWV0cnlSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVUZWxlbWV0cnlSdWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGFuIG9yZ2FuaXphdGlvbiB0ZWxlbWV0cnkgcnVsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBmb3IgdGhlIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0RlbGV0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIHRoZSBUZWxlbWV0cnkgQ29uZmlnIGZlYXR1cmUgc3RhdHVzIGZvciB0aGUgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfR2V0VGVsZW1ldHJ5RXZhbHVhdGlvblN0YXR1cy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRUZWxlbWV0cnlFdmFsdWF0aW9uU3RhdHVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRUZWxlbWV0cnlFdmFsdWF0aW9uU3RhdHVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgdGhlIFRlbGVtZXRyeSBDb25maWcgZmVhdHVyZSBzdGF0dXMgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0dldFRlbGVtZXRyeUV2YWx1YXRpb25TdGF0dXNGb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0VGVsZW1ldHJ5RXZhbHVhdGlvblN0YXR1c0Zvck9yZ2FuaXphdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0VGVsZW1ldHJ5RXZhbHVhdGlvblN0YXR1c0Zvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIHRoZSBzcGVjaWZpZWQgdGVsZW1ldHJ5IHJ1bGUgZm9yIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9HZXRUZWxlbWV0cnlSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFRlbGVtZXRyeVJ1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFRlbGVtZXRyeVJ1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSB0aGUgc3BlY2lmaWVkIG9yZ2FuaXphdGlvbiB0ZWxlbWV0cnkgcnVsZSBmb3IgdGhlIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfR2V0VGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgdGVsZW1ldHJ5IGNvbmZpZ3VyYXRpb25zIGZvciByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9MaXN0UmVzb3VyY2VUZWxlbWV0cnkuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFJlc291cmNlVGVsZW1ldHJ5KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0UmVzb3VyY2VUZWxlbWV0cnknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSB0ZWxlbWV0cnkgY29uZmlndXJhdGlvbnMgZm9yIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYWNjb3VudHMgaW4gdGhlIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfTGlzdFJlc291cmNlVGVsZW1ldHJ5Rm9yT3JnYW5pemF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RSZXNvdXJjZVRlbGVtZXRyeUZvck9yZ2FuaXphdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFJlc291cmNlVGVsZW1ldHJ5Rm9yT3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCB0aGUgdGFncyBmb3IgdGhlIHNwZWNpZmllZCByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfTGlzdFRhZ3NGb3JSZXNvdXJjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0VGFnc0ZvclJlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0VGFnc0ZvclJlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCB0aGUgdGVsZW1ldHJ5IHJ1bGVzIGZvciB0aGUgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfTGlzdFRlbGVtZXRyeVJ1bGVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RUZWxlbWV0cnlSdWxlcygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFRlbGVtZXRyeVJ1bGVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCB0aGUgdGVsZW1ldHJ5IHJ1bGVzIGZvciB0aGUgb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9MaXN0VGVsZW1ldHJ5UnVsZXNGb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFRlbGVtZXRyeVJ1bGVzRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0VGVsZW1ldHJ5UnVsZXNGb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdGFydCB0aGUgVGVsZW1ldHJ5IENvbmZpZyBmZWF0dXJlIGZvciB0aGUgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX1N0YXJ0VGVsZW1ldHJ5RXZhbHVhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9TdGFydFRlbGVtZXRyeUV2YWx1YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0VGVsZW1ldHJ5RXZhbHVhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHN0YXJ0IHRoZSBUZWxlbWV0cnkgQ29uZmlnIGZlYXR1cmUgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9TdGFydFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRUZWxlbWV0cnlFdmFsdWF0aW9uRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdG9wIHRoZSBUZWxlbWV0cnkgQ29uZmlnIGZlYXR1cmUgZm9yIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfU3RvcFRlbGVtZXRyeUV2YWx1YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RvcFRlbGVtZXRyeUV2YWx1YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0b3BUZWxlbWV0cnlFdmFsdWF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc3RvcCB0aGUgVGVsZW1ldHJ5IENvbmZpZyBmZWF0dXJlIGZvciB0aGUgb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfU3RvcFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RvcFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0b3BUZWxlbWV0cnlFdmFsdWF0aW9uRm9yT3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYWRkIG9yIHVwZGF0ZSB0aGUgc3BlY2lmaWVkIHRhZ3MgZm9yIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBUYWdnaW5nXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzVGFnS2V5cygpXG4gICAqIC0gLmlmQXdzUmVxdWVzdFRhZygpXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX1RhZ1Jlc291cmNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1RhZ1Jlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdUYWdSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJlbW92ZSB0aGUgc3BlY2lmaWVkIHRhZ3MgZnJvbSB0aGUgc3BlY2lmaWVkIHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogVGFnZ2luZ1xuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9VbnRhZ1Jlc291cmNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VudGFnUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VudGFnUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgdGhlIHNwZWNpZmllZCB0ZWxlbWV0cnkgcnVsZSBmb3IgdGhlIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9VcGRhdGVUZWxlbWV0cnlSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZVRlbGVtZXRyeVJ1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVRlbGVtZXRyeVJ1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSB0aGUgc3BlY2lmaWVkIG9yZ2FuaXphdGlvbiB0ZWxlbWV0cnkgcnVsZSBmb3IgdGhlIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX1VwZGF0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFjY2Vzc0xldmVsTGlzdDogQWNjZXNzTGV2ZWxMaXN0ID0ge1xuICAgIFdyaXRlOiBbXG4gICAgICAnQ3JlYXRlVGVsZW1ldHJ5UnVsZScsXG4gICAgICAnQ3JlYXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbicsXG4gICAgICAnRGVsZXRlVGVsZW1ldHJ5UnVsZScsXG4gICAgICAnRGVsZXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbicsXG4gICAgICAnU3RhcnRUZWxlbWV0cnlFdmFsdWF0aW9uJyxcbiAgICAgICdTdGFydFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24nLFxuICAgICAgJ1N0b3BUZWxlbWV0cnlFdmFsdWF0aW9uJyxcbiAgICAgICdTdG9wVGVsZW1ldHJ5RXZhbHVhdGlvbkZvck9yZ2FuaXphdGlvbicsXG4gICAgICAnVXBkYXRlVGVsZW1ldHJ5UnVsZScsXG4gICAgICAnVXBkYXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbidcbiAgICBdLFxuICAgIFJlYWQ6IFtcbiAgICAgICdHZXRUZWxlbWV0cnlFdmFsdWF0aW9uU3RhdHVzJyxcbiAgICAgICdHZXRUZWxlbWV0cnlFdmFsdWF0aW9uU3RhdHVzRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdHZXRUZWxlbWV0cnlSdWxlJyxcbiAgICAgICdHZXRUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdMaXN0UmVzb3VyY2VUZWxlbWV0cnknLFxuICAgICAgJ0xpc3RSZXNvdXJjZVRlbGVtZXRyeUZvck9yZ2FuaXphdGlvbidcbiAgICBdLFxuICAgIExpc3Q6IFtcbiAgICAgICdMaXN0VGFnc0ZvclJlc291cmNlJyxcbiAgICAgICdMaXN0VGVsZW1ldHJ5UnVsZXMnLFxuICAgICAgJ0xpc3RUZWxlbWV0cnlSdWxlc0Zvck9yZ2FuaXphdGlvbidcbiAgICBdLFxuICAgIFRhZ2dpbmc6IFtcbiAgICAgICdUYWdSZXNvdXJjZScsXG4gICAgICAnVW50YWdSZXNvdXJjZSdcbiAgICBdXG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIHRlbGVtZXRyeS1ydWxlIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfVGVsZW1ldHJ5UnVsZS5odG1sXG4gICAqXG4gICAqIEBwYXJhbSB0ZWxlbWV0cnlSdWxlTmFtZSAtIElkZW50aWZpZXIgZm9yIHRoZSB0ZWxlbWV0cnlSdWxlTmFtZS5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uVGVsZW1ldHJ5UnVsZSh0ZWxlbWV0cnlSdWxlTmFtZTogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9Om9ic2VydmFiaWxpdHlhZG1pbjokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06dGVsZW1ldHJ5LXJ1bGU6JHsgdGVsZW1ldHJ5UnVsZU5hbWUgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIG9yZ2FuaXphdGlvbi10ZWxlbWV0cnktcnVsZSB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX09yZ2FuaXphdGlvblRlbGVtZXRyeVJ1bGUuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gdGVsZW1ldHJ5UnVsZU5hbWUgLSBJZGVudGlmaWVyIGZvciB0aGUgdGVsZW1ldHJ5UnVsZU5hbWUuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICovXG4gIHB1YmxpYyBvbk9yZ2FuaXphdGlvblRlbGVtZXRyeVJ1bGUodGVsZW1ldHJ5UnVsZU5hbWU6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpvYnNlcnZhYmlsaXR5YWRtaW46JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9Om9yZ2FuaXphdGlvbi10ZWxlbWV0cnktcnVsZTokeyB0ZWxlbWV0cnlSdWxlTmFtZSB9YCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHRhZ3MgdGhhdCBhcmUgcGFzc2VkIGluIHRoZSByZXF1ZXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbCNjb25kaXRpb24ta2V5cy1yZXF1ZXN0dGFnXG4gICAqXG4gICAqIEFwcGxpZXMgdG8gYWN0aW9uczpcbiAgICogLSAudG9DcmVhdGVUZWxlbWV0cnlSdWxlKClcbiAgICogLSAudG9DcmVhdGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICogLSAudG9UYWdSZXNvdXJjZSgpXG4gICAqXG4gICAqIEBwYXJhbSB0YWdLZXkgVGhlIHRhZyBrZXkgdG8gY2hlY2tcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZShzKSB0byBjaGVja1xuICAgKiBAcGFyYW0gb3BlcmF0b3IgV29ya3Mgd2l0aCBbc3RyaW5nIG9wZXJhdG9yc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWwjQ29uZGl0aW9uc19TdHJpbmcpLiAqKkRlZmF1bHQ6KiogYFN0cmluZ0xpa2VgXG4gICAqL1xuICBwdWJsaWMgaWZBd3NSZXF1ZXN0VGFnKHRhZ0tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlJlcXVlc3RUYWcvJHsgdGFnS2V5IH1gLCB2YWx1ZSwgb3BlcmF0b3IgPz8gJ1N0cmluZ0xpa2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSB0aGUgdGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbCNjb25kaXRpb24ta2V5cy1yZXNvdXJjZXRhZ1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIHJlc291cmNlIHR5cGVzOlxuICAgKiAtIHRlbGVtZXRyeS1ydWxlXG4gICAqIC0gb3JnYW5pemF0aW9uLXRlbGVtZXRyeS1ydWxlXG4gICAqXG4gICAqIEBwYXJhbSB0YWdLZXkgVGhlIHRhZyBrZXkgdG8gY2hlY2tcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZShzKSB0byBjaGVja1xuICAgKiBAcGFyYW0gb3BlcmF0b3IgV29ya3Mgd2l0aCBbc3RyaW5nIG9wZXJhdG9yc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWwjQ29uZGl0aW9uc19TdHJpbmcpLiAqKkRlZmF1bHQ6KiogYFN0cmluZ0xpa2VgXG4gICAqL1xuICBwdWJsaWMgaWZBd3NSZXNvdXJjZVRhZyh0YWdLZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYGF3czpSZXNvdXJjZVRhZy8keyB0YWdLZXkgfWAsIHZhbHVlLCBvcGVyYXRvciA/PyAnU3RyaW5nTGlrZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYWNjZXNzIGJ5IHRoZSB0YWcga2V5cyB0aGF0IGFyZSBwYXNzZWQgaW4gdGhlIHJlcXVlc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19jb25kaXRpb24ta2V5cy5odG1sI2NvbmRpdGlvbi1rZXlzLXRhZ2tleXNcbiAgICpcbiAgICogQXBwbGllcyB0byBhY3Rpb25zOlxuICAgKiAtIC50b0NyZWF0ZVRlbGVtZXRyeVJ1bGUoKVxuICAgKiAtIC50b0NyZWF0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24oKVxuICAgKiAtIC50b1RhZ1Jlc291cmNlKClcbiAgICogLSAudG9VbnRhZ1Jlc291cmNlKClcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZShzKSB0byBjaGVja1xuICAgKiBAcGFyYW0gb3BlcmF0b3IgV29ya3Mgd2l0aCBbc3RyaW5nIG9wZXJhdG9yc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWwjQ29uZGl0aW9uc19TdHJpbmcpLiAqKkRlZmF1bHQ6KiogYFN0cmluZ0xpa2VgXG4gICAqL1xuICBwdWJsaWMgaWZBd3NUYWdLZXlzKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3BlcmF0b3I/OiBPcGVyYXRvciB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmlmKGBhd3M6VGFnS2V5c2AsIHZhbHVlLCBvcGVyYXRvciA/PyAnU3RyaW5nTGlrZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXRlbWVudCBwcm92aWRlciBmb3Igc2VydmljZSBbb2JzZXJ2YWJpbGl0eWFkbWluXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9hbWF6b25jbG91ZHdhdGNob2JzZXJ2YWJpbGl0eWFkbWluc2VydmljZS5odG1sKS5cbiAgICpcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BzPzogaWFtLlBvbGljeVN0YXRlbWVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG59XG4iXX0=
523
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWR3YXRjaG9ic2VydmFiaWxpdHlhZG1pbnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbG91ZHdhdGNob2JzZXJ2YWJpbGl0eWFkbWluc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FBeUQ7QUFHekQ7Ozs7R0FJRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsd0JBQWU7SUFHckQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNJLHlDQUF5QztRQUM5QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMseUNBQXlDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLG9DQUFvQztRQUN6QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsb0NBQW9DLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0kseUNBQXlDO1FBQzlDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxxQkFBcUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLG9DQUFvQztRQUN6QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsb0NBQW9DLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksc0NBQXNDO1FBQzNDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSw4QkFBOEI7UUFDbkMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLDhCQUE4QixDQUFDLENB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Z0JBQ3JCLG9DQUFvQztnQkFDcEMseUNBQXlDO2dCQUN6QyxxQkFBcUI7Z0JBQ3JCLG9DQUFvQztnQkFDcEMsMEJBQTBCO2dCQUMxQiwwQkFBMEI7Z0JBQzFCLHlDQUF5QztnQkFDekMseUJBQXlCO2dCQUN6Qix5QkFBeUI7Z0JBQ3pCLHdDQUF3QztnQkFDeEMseUNBQXlDO2dCQUN6QyxxQkFBcUI7Z0JBQ3JCLG9DQUFvQzthQUNyQztZQUNELElBQUksRUFBRTtnQkFDSixzQ0FBc0M7Z0JBQ3RDLDhCQUE4QjtnQkFDOUIsOEJBQThCO2dCQUM5Qiw2Q0FBNkM7Z0JBQzdDLGtCQUFrQjtnQkFDbEIsaUNBQWlDO2dCQUNqQyx1QkFBdUI7Z0JBQ3ZCLHNDQUFzQzthQUN2QztZQUNELElBQUksRUFBRTtnQkFDSix3Q0FBd0M7Z0JBQ3hDLHFCQUFxQjtnQkFDckIsb0JBQW9CO2dCQUNwQixtQ0FBbUM7YUFDcEM7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsYUFBYTtnQkFDYixlQUFlO2FBQ2hCO1NBQ0YsQ0FBQztJQW1LRixDQUFDO0NBQ0Y7QUF2aUJELGdEQXVpQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY2Nlc3NMZXZlbExpc3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWNjZXNzLWxldmVsJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgYXdzX2lhbSBhcyBpYW0gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuLyoqXG4gKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW29ic2VydmFiaWxpdHlhZG1pbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYW1hem9uY2xvdWR3YXRjaG9ic2VydmFiaWxpdHlhZG1pbnNlcnZpY2UuaHRtbCkuXG4gKlxuICogQHBhcmFtIHNpZCBbU0lEXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sKSBvZiB0aGUgc3RhdGVtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBPYnNlcnZhYmlsaXR5YWRtaW4gZXh0ZW5kcyBQb2xpY3lTdGF0ZW1lbnQge1xuICBwdWJsaWMgc2VydmljZVByZWZpeCA9ICdvYnNlcnZhYmlsaXR5YWRtaW4nO1xuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBuZXcgb3JnYW5pemF0aW9uIGNlbnRyYWxpemF0aW9uIHJ1bGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKiAtIC5pZkF3c1JlcXVlc3RUYWcoKVxuICAgKiAtIC5pZkNlbnRyYWxpemF0aW9uU291cmNlUmVnaW9ucygpXG4gICAqIC0gLmlmQ2VudHJhbGl6YXRpb25EZXN0aW5hdGlvblJlZ2lvbigpXG4gICAqIC0gLmlmQ2VudHJhbGl6YXRpb25CYWNrdXBSZWdpb24oKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9DcmVhdGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBuZXcgdGVsZW1ldHJ5IHJ1bGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZm9yIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NUYWdLZXlzKClcbiAgICogLSAuaWZBd3NSZXF1ZXN0VGFnKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfQ3JlYXRlVGVsZW1ldHJ5UnVsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVUZWxlbWV0cnlSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVUZWxlbWV0cnlSdWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbmV3IG9yZ2FuaXphdGlvbiB0ZWxlbWV0cnkgcnVsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBmb3IgdGhlIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzVGFnS2V5cygpXG4gICAqIC0gLmlmQXdzUmVxdWVzdFRhZygpXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0NyZWF0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhbiBvcmdhbml6YXRpb24gY2VudHJhbGl6YXRpb24gcnVsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBmb3IgdGhlIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0RlbGV0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIHRlbGVtZXRyeSBydWxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGZvciB0aGUgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0RlbGV0ZVRlbGVtZXRyeVJ1bGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlVGVsZW1ldHJ5UnVsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlVGVsZW1ldHJ5UnVsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhbiBvcmdhbml6YXRpb24gdGVsZW1ldHJ5IHJ1bGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9EZWxldGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSB0aGUgc3BlY2lmaWVkIG9yZ2FuaXphdGlvbiBjZW50cmFsaXphdGlvbiBydWxlIGZvciB0aGUgb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9HZXRDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0Q2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSB0aGUgc3RhdHVzIG9mIHRoZSBSZXNvdXJjZSB0YWdzIGZvciB0ZWxlbWV0cnkgZmVhdHVyZSBmb3IgdGhlIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0dldFRlbGVtZXRyeUVucmljaG1lbnRTdGF0dXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0VGVsZW1ldHJ5RW5yaWNobWVudFN0YXR1cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0VGVsZW1ldHJ5RW5yaWNobWVudFN0YXR1cycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIHRoZSBUZWxlbWV0cnkgQ29uZmlnIGZlYXR1cmUgc3RhdHVzIGZvciB0aGUgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfR2V0VGVsZW1ldHJ5RXZhbHVhdGlvblN0YXR1cy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRUZWxlbWV0cnlFdmFsdWF0aW9uU3RhdHVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRUZWxlbWV0cnlFdmFsdWF0aW9uU3RhdHVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgdGhlIFRlbGVtZXRyeSBDb25maWcgZmVhdHVyZSBzdGF0dXMgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0dldFRlbGVtZXRyeUV2YWx1YXRpb25TdGF0dXNGb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0VGVsZW1ldHJ5RXZhbHVhdGlvblN0YXR1c0Zvck9yZ2FuaXphdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0VGVsZW1ldHJ5RXZhbHVhdGlvblN0YXR1c0Zvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIHRoZSBzcGVjaWZpZWQgdGVsZW1ldHJ5IHJ1bGUgZm9yIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9HZXRUZWxlbWV0cnlSdWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFRlbGVtZXRyeVJ1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFRlbGVtZXRyeVJ1bGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSB0aGUgc3BlY2lmaWVkIG9yZ2FuaXphdGlvbiB0ZWxlbWV0cnkgcnVsZSBmb3IgdGhlIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfR2V0VGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCB0aGUgY2VudHJhbGl6YXRpb24gcnVsZXMgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0xpc3RDZW50cmFsaXphdGlvblJ1bGVzRm9yT3JnYW5pemF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RDZW50cmFsaXphdGlvblJ1bGVzRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0Q2VudHJhbGl6YXRpb25SdWxlc0Zvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIHRlbGVtZXRyeSBjb25maWd1cmF0aW9ucyBmb3IgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfTGlzdFJlc291cmNlVGVsZW1ldHJ5Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RSZXNvdXJjZVRlbGVtZXRyeSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFJlc291cmNlVGVsZW1ldHJ5Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgdGVsZW1ldHJ5IGNvbmZpZ3VyYXRpb25zIGZvciByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGFjY291bnRzIGluIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0xpc3RSZXNvdXJjZVRlbGVtZXRyeUZvck9yZ2FuaXphdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0UmVzb3VyY2VUZWxlbWV0cnlGb3JPcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RSZXNvdXJjZVRlbGVtZXRyeUZvck9yZ2FuaXphdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgdGhlIHRhZ3MgZm9yIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0xpc3RUYWdzRm9yUmVzb3VyY2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFRhZ3NGb3JSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFRhZ3NGb3JSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgdGhlIHRlbGVtZXRyeSBydWxlcyBmb3IgdGhlIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX0xpc3RUZWxlbWV0cnlSdWxlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0VGVsZW1ldHJ5UnVsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RUZWxlbWV0cnlSdWxlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgdGhlIHRlbGVtZXRyeSBydWxlcyBmb3IgdGhlIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfTGlzdFRlbGVtZXRyeVJ1bGVzRm9yT3JnYW5pemF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RUZWxlbWV0cnlSdWxlc0Zvck9yZ2FuaXphdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFRlbGVtZXRyeVJ1bGVzRm9yT3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZW5hYmxlIHRoZSBSZXNvdXJjZSB0YWdzIGZvciB0ZWxlbWV0cnkgZmVhdHVyZSBmb3IgdGhlIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9TdGFydFRlbGVtZXRyeUVucmljaG1lbnQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRUZWxlbWV0cnlFbnJpY2htZW50KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydFRlbGVtZXRyeUVucmljaG1lbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdGFydCB0aGUgVGVsZW1ldHJ5IENvbmZpZyBmZWF0dXJlIGZvciB0aGUgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX1N0YXJ0VGVsZW1ldHJ5RXZhbHVhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9TdGFydFRlbGVtZXRyeUV2YWx1YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0VGVsZW1ldHJ5RXZhbHVhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHN0YXJ0IHRoZSBUZWxlbWV0cnkgQ29uZmlnIGZlYXR1cmUgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9TdGFydFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRUZWxlbWV0cnlFdmFsdWF0aW9uRm9yT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkaXNhYmxlIHRoZSBSZXNvdXJjZSB0YWdzIGZvciB0ZWxlbWV0cnkgZmVhdHVyZSBmb3IgdGhlIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9TdG9wVGVsZW1ldHJ5RW5yaWNobWVudC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9TdG9wVGVsZW1ldHJ5RW5yaWNobWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3RvcFRlbGVtZXRyeUVucmljaG1lbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdG9wIHRoZSBUZWxlbWV0cnkgQ29uZmlnIGZlYXR1cmUgZm9yIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfU3RvcFRlbGVtZXRyeUV2YWx1YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RvcFRlbGVtZXRyeUV2YWx1YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0b3BUZWxlbWV0cnlFdmFsdWF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc3RvcCB0aGUgVGVsZW1ldHJ5IENvbmZpZyBmZWF0dXJlIGZvciB0aGUgb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfU3RvcFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RvcFRlbGVtZXRyeUV2YWx1YXRpb25Gb3JPcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0b3BUZWxlbWV0cnlFdmFsdWF0aW9uRm9yT3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYWRkIG9yIHVwZGF0ZSB0aGUgc3BlY2lmaWVkIHRhZ3MgZm9yIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBUYWdnaW5nXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzVGFnS2V5cygpXG4gICAqIC0gLmlmQXdzUmVxdWVzdFRhZygpXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX1RhZ1Jlc291cmNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1RhZ1Jlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdUYWdSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJlbW92ZSB0aGUgc3BlY2lmaWVkIHRhZ3MgZnJvbSB0aGUgc3BlY2lmaWVkIHJlc291cmNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogVGFnZ2luZ1xuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9VbnRhZ1Jlc291cmNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VudGFnUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VudGFnUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgdGhlIHNwZWNpZmllZCBjZW50cmFsaXphdGlvbiBydWxlIGZvciB0aGUgb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZDZW50cmFsaXphdGlvblNvdXJjZVJlZ2lvbnMoKVxuICAgKiAtIC5pZkNlbnRyYWxpemF0aW9uRGVzdGluYXRpb25SZWdpb24oKVxuICAgKiAtIC5pZkNlbnRyYWxpemF0aW9uQmFja3VwUmVnaW9uKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfVXBkYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIHRoZSBzcGVjaWZpZWQgdGVsZW1ldHJ5IHJ1bGUgZm9yIHRoZSBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfVXBkYXRlVGVsZW1ldHJ5UnVsZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVUZWxlbWV0cnlSdWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVUZWxlbWV0cnlSdWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIHRoZSBzcGVjaWZpZWQgdGVsZW1ldHJ5IHJ1bGUgZm9yIHRoZSBvcmdhbml6YXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9VcGRhdGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhY2Nlc3NMZXZlbExpc3Q6IEFjY2Vzc0xldmVsTGlzdCA9IHtcbiAgICBXcml0ZTogW1xuICAgICAgJ0NyZWF0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbicsXG4gICAgICAnQ3JlYXRlVGVsZW1ldHJ5UnVsZScsXG4gICAgICAnQ3JlYXRlVGVsZW1ldHJ5UnVsZUZvck9yZ2FuaXphdGlvbicsXG4gICAgICAnRGVsZXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdEZWxldGVUZWxlbWV0cnlSdWxlJyxcbiAgICAgICdEZWxldGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdTdGFydFRlbGVtZXRyeUVucmljaG1lbnQnLFxuICAgICAgJ1N0YXJ0VGVsZW1ldHJ5RXZhbHVhdGlvbicsXG4gICAgICAnU3RhcnRUZWxlbWV0cnlFdmFsdWF0aW9uRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdTdG9wVGVsZW1ldHJ5RW5yaWNobWVudCcsXG4gICAgICAnU3RvcFRlbGVtZXRyeUV2YWx1YXRpb24nLFxuICAgICAgJ1N0b3BUZWxlbWV0cnlFdmFsdWF0aW9uRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdVcGRhdGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24nLFxuICAgICAgJ1VwZGF0ZVRlbGVtZXRyeVJ1bGUnLFxuICAgICAgJ1VwZGF0ZVRlbGVtZXRyeVJ1bGVGb3JPcmdhbml6YXRpb24nXG4gICAgXSxcbiAgICBSZWFkOiBbXG4gICAgICAnR2V0Q2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdHZXRUZWxlbWV0cnlFbnJpY2htZW50U3RhdHVzJyxcbiAgICAgICdHZXRUZWxlbWV0cnlFdmFsdWF0aW9uU3RhdHVzJyxcbiAgICAgICdHZXRUZWxlbWV0cnlFdmFsdWF0aW9uU3RhdHVzRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdHZXRUZWxlbWV0cnlSdWxlJyxcbiAgICAgICdHZXRUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uJyxcbiAgICAgICdMaXN0UmVzb3VyY2VUZWxlbWV0cnknLFxuICAgICAgJ0xpc3RSZXNvdXJjZVRlbGVtZXRyeUZvck9yZ2FuaXphdGlvbidcbiAgICBdLFxuICAgIExpc3Q6IFtcbiAgICAgICdMaXN0Q2VudHJhbGl6YXRpb25SdWxlc0Zvck9yZ2FuaXphdGlvbicsXG4gICAgICAnTGlzdFRhZ3NGb3JSZXNvdXJjZScsXG4gICAgICAnTGlzdFRlbGVtZXRyeVJ1bGVzJyxcbiAgICAgICdMaXN0VGVsZW1ldHJ5UnVsZXNGb3JPcmdhbml6YXRpb24nXG4gICAgXSxcbiAgICBUYWdnaW5nOiBbXG4gICAgICAnVGFnUmVzb3VyY2UnLFxuICAgICAgJ1VudGFnUmVzb3VyY2UnXG4gICAgXVxuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSB0ZWxlbWV0cnktcnVsZSB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZHdhdGNoL2xhdGVzdC9vYnNlcnZhYmlsaXR5YWRtaW4vQVBJX1RlbGVtZXRyeVJ1bGUuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gdGVsZW1ldHJ5UnVsZU5hbWUgLSBJZGVudGlmaWVyIGZvciB0aGUgdGVsZW1ldHJ5UnVsZU5hbWUuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICovXG4gIHB1YmxpYyBvblRlbGVtZXRyeVJ1bGUodGVsZW1ldHJ5UnVsZU5hbWU6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpvYnNlcnZhYmlsaXR5YWRtaW46JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OnRlbGVtZXRyeS1ydWxlOiR7IHRlbGVtZXRyeVJ1bGVOYW1lIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBvcmdhbml6YXRpb24tdGVsZW1ldHJ5LXJ1bGUgdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWR3YXRjaC9sYXRlc3Qvb2JzZXJ2YWJpbGl0eWFkbWluL0FQSV9Pcmdhbml6YXRpb25UZWxlbWV0cnlSdWxlLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIHRlbGVtZXRyeVJ1bGVOYW1lIC0gSWRlbnRpZmllciBmb3IgdGhlIHRlbGVtZXRyeVJ1bGVOYW1lLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25Pcmdhbml6YXRpb25UZWxlbWV0cnlSdWxlKHRlbGVtZXRyeVJ1bGVOYW1lOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06b2JzZXJ2YWJpbGl0eWFkbWluOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTpvcmdhbml6YXRpb24tdGVsZW1ldHJ5LXJ1bGU6JHsgdGVsZW1ldHJ5UnVsZU5hbWUgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIG9yZ2FuaXphdGlvbi1jZW50cmFsaXphdGlvbi1ydWxlIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvbGF0ZXN0L29ic2VydmFiaWxpdHlhZG1pbi9BUElfT3JnYW5pemF0aW9uQ2VudHJhbGl6YXRpb25SdWxlLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIGNlbnRyYWxpemF0aW9uUnVsZU5hbWUgLSBJZGVudGlmaWVyIGZvciB0aGUgY2VudHJhbGl6YXRpb25SdWxlTmFtZS5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uT3JnYW5pemF0aW9uQ2VudHJhbGl6YXRpb25SdWxlKGNlbnRyYWxpemF0aW9uUnVsZU5hbWU6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpvYnNlcnZhYmlsaXR5YWRtaW46JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9Om9yZ2FuaXphdGlvbi1jZW50cmFsaXphdGlvbi1ydWxlOiR7IGNlbnRyYWxpemF0aW9uUnVsZU5hbWUgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYWNjZXNzIGJ5IHRoZSB0YWdzIHRoYXQgYXJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtcmVxdWVzdHRhZ1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICogLSAudG9DcmVhdGVUZWxlbWV0cnlSdWxlKClcbiAgICogLSAudG9DcmVhdGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICogLSAudG9UYWdSZXNvdXJjZSgpXG4gICAqXG4gICAqIEBwYXJhbSB0YWdLZXkgVGhlIHRhZyBrZXkgdG8gY2hlY2tcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZShzKSB0byBjaGVja1xuICAgKiBAcGFyYW0gb3BlcmF0b3IgV29ya3Mgd2l0aCBbc3RyaW5nIG9wZXJhdG9yc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWwjQ29uZGl0aW9uc19TdHJpbmcpLiAqKkRlZmF1bHQ6KiogYFN0cmluZ0xpa2VgXG4gICAqL1xuICBwdWJsaWMgaWZBd3NSZXF1ZXN0VGFnKHRhZ0tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlJlcXVlc3RUYWcvJHsgdGFnS2V5IH1gLCB2YWx1ZSwgb3BlcmF0b3IgPz8gJ1N0cmluZ0xpa2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSB0aGUgdGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc291cmNlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbCNjb25kaXRpb24ta2V5cy1yZXNvdXJjZXRhZ1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIHJlc291cmNlIHR5cGVzOlxuICAgKiAtIHRlbGVtZXRyeS1ydWxlXG4gICAqIC0gb3JnYW5pemF0aW9uLXRlbGVtZXRyeS1ydWxlXG4gICAqIC0gb3JnYW5pemF0aW9uLWNlbnRyYWxpemF0aW9uLXJ1bGVcbiAgICpcbiAgICogQHBhcmFtIHRhZ0tleSBUaGUgdGFnIGtleSB0byBjaGVja1xuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkF3c1Jlc291cmNlVGFnKHRhZ0tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlJlc291cmNlVGFnLyR7IHRhZ0tleSB9YCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHRhZyBrZXlzIHRoYXQgYXJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtdGFna2V5c1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICogLSAudG9DcmVhdGVUZWxlbWV0cnlSdWxlKClcbiAgICogLSAudG9DcmVhdGVUZWxlbWV0cnlSdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICogLSAudG9UYWdSZXNvdXJjZSgpXG4gICAqIC0gLnRvVW50YWdSZXNvdXJjZSgpXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzVGFnS2V5cyh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlRhZ0tleXNgLCB2YWx1ZSwgb3BlcmF0b3IgPz8gJ1N0cmluZ0xpa2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSB0aGUgYmFja3VwIHJlZ2lvbiB0aGF0IGlzIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbW9uaXRvcmluZy9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbGNvbmRpdGlvbi1rZXlzLW9ic2VydmFiaWxpdHlhZG1pbi5odG1sI2NvbmRpdGlvbi1rZXlzLWNlbnRyYWxpemF0aW9uYmFja3VwcmVnaW9uXG4gICAqXG4gICAqIEFwcGxpZXMgdG8gYWN0aW9uczpcbiAgICogLSAudG9DcmVhdGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24oKVxuICAgKiAtIC50b1VwZGF0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbigpXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQ2VudHJhbGl6YXRpb25CYWNrdXBSZWdpb24odmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYENlbnRyYWxpemF0aW9uQmFja3VwUmVnaW9uYCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIGRlc3RpbmF0aW9uIHJlZ2lvbiB0aGF0IGlzIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbW9uaXRvcmluZy9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbGNvbmRpdGlvbi1rZXlzLW9ic2VydmFiaWxpdHlhZG1pbi5odG1sI2NvbmRpdGlvbi1rZXlzLWNlbnRyYWxpemF0aW9uZGVzdGluYXRpb25yZWdpb25cbiAgICpcbiAgICogQXBwbGllcyB0byBhY3Rpb25zOlxuICAgKiAtIC50b0NyZWF0ZUNlbnRyYWxpemF0aW9uUnVsZUZvck9yZ2FuaXphdGlvbigpXG4gICAqIC0gLnRvVXBkYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZShzKSB0byBjaGVja1xuICAgKiBAcGFyYW0gb3BlcmF0b3IgV29ya3Mgd2l0aCBbc3RyaW5nIG9wZXJhdG9yc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWwjQ29uZGl0aW9uc19TdHJpbmcpLiAqKkRlZmF1bHQ6KiogYFN0cmluZ0xpa2VgXG4gICAqL1xuICBwdWJsaWMgaWZDZW50cmFsaXphdGlvbkRlc3RpbmF0aW9uUmVnaW9uKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3BlcmF0b3I/OiBPcGVyYXRvciB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmlmKGBDZW50cmFsaXphdGlvbkRlc3RpbmF0aW9uUmVnaW9uYCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHNvdXJjZSByZWdpb25zIHRoYXQgYXJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbW9uaXRvcmluZy9yZWZlcmVuY2VfcG9saWNpZXNfY29uZGl0aW9uLWtleXMuaHRtbGNvbmRpdGlvbi1rZXlzLW9ic2VydmFiaWxpdHlhZG1pbi5odG1sI2NvbmRpdGlvbi1rZXlzLWNlbnRyYWxpemF0aW9uc291cmNlcmVnaW9uc1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlQ2VudHJhbGl6YXRpb25SdWxlRm9yT3JnYW5pemF0aW9uKClcbiAgICogLSAudG9VcGRhdGVDZW50cmFsaXphdGlvblJ1bGVGb3JPcmdhbml6YXRpb24oKVxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkNlbnRyYWxpemF0aW9uU291cmNlUmVnaW9ucyh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgQ2VudHJhbGl6YXRpb25Tb3VyY2VSZWdpb25zYCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogU3RhdGVtZW50IHByb3ZpZGVyIGZvciBzZXJ2aWNlIFtvYnNlcnZhYmlsaXR5YWRtaW5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2FtYXpvbmNsb3Vkd2F0Y2hvYnNlcnZhYmlsaXR5YWRtaW5zZXJ2aWNlLmh0bWwpLlxuICAgKlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM/OiBpYW0uUG9saWN5U3RhdGVtZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbn1cbiJdfQ==