@aws-cdk/aws-bedrock-agentcore-alpha 2.253.0-alpha.0 → 2.254.0-alpha.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 (78) hide show
  1. package/.jsii +17116 -11830
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/README.md +140 -10
  4. package/lib/evaluation/custom-evaluator.d.ts +9 -0
  5. package/lib/evaluation/custom-evaluator.js +8 -2
  6. package/lib/evaluation/data-source.js +1 -1
  7. package/lib/evaluation/evaluator-base.js +1 -1
  8. package/lib/evaluation/evaluator-config.js +2 -2
  9. package/lib/evaluation/evaluator.js +1 -1
  10. package/lib/evaluation/online-evaluation-base.js +1 -1
  11. package/lib/evaluation/online-evaluation.d.ts +9 -0
  12. package/lib/evaluation/online-evaluation.js +8 -2
  13. package/lib/evaluation/types.js +5 -5
  14. package/lib/evaluation/validation-helpers.d.ts +8 -0
  15. package/lib/evaluation/validation-helpers.js +62 -1
  16. package/lib/gateway/gateway-base.js +1 -1
  17. package/lib/gateway/gateway.d.ts +3 -2
  18. package/lib/gateway/gateway.js +3 -3
  19. package/lib/gateway/inbound-auth/authorizer.js +4 -4
  20. package/lib/gateway/inbound-auth/custom-claim.js +1 -1
  21. package/lib/gateway/interceptor.js +1 -1
  22. package/lib/gateway/outbound-auth/api-key.d.ts +13 -4
  23. package/lib/gateway/outbound-auth/api-key.js +63 -21
  24. package/lib/gateway/outbound-auth/credential-provider.d.ts +48 -4
  25. package/lib/gateway/outbound-auth/credential-provider.js +49 -2
  26. package/lib/gateway/outbound-auth/iam-role.d.ts +4 -3
  27. package/lib/gateway/outbound-auth/iam-role.js +3 -5
  28. package/lib/gateway/outbound-auth/oauth.d.ts +11 -3
  29. package/lib/gateway/outbound-auth/oauth.js +70 -20
  30. package/lib/gateway/perms.d.ts +15 -3
  31. package/lib/gateway/perms.js +24 -9
  32. package/lib/gateway/protocol.js +2 -2
  33. package/lib/gateway/targets/schema/api-schema.js +4 -4
  34. package/lib/gateway/targets/schema/tool-schema.js +4 -4
  35. package/lib/gateway/targets/target-base.js +1 -1
  36. package/lib/gateway/targets/target-configuration.js +6 -6
  37. package/lib/gateway/targets/target.js +3 -3
  38. package/lib/identity/api-key-credential-provider.d.ts +217 -0
  39. package/lib/identity/api-key-credential-provider.js +249 -0
  40. package/lib/identity/grant-helpers.d.ts +74 -0
  41. package/lib/identity/grant-helpers.js +132 -0
  42. package/lib/identity/oauth2-credential-provider.d.ts +679 -0
  43. package/lib/identity/oauth2-credential-provider.js +863 -0
  44. package/lib/identity/perms.d.ts +119 -0
  45. package/lib/identity/perms.js +178 -0
  46. package/lib/identity/validation-helpers.d.ts +61 -0
  47. package/lib/identity/validation-helpers.js +156 -0
  48. package/lib/identity/workload-identity.d.ts +186 -0
  49. package/lib/identity/workload-identity.js +212 -0
  50. package/lib/index.d.ts +4 -0
  51. package/lib/index.js +8 -1
  52. package/lib/memory/memory-strategy.js +1 -1
  53. package/lib/memory/memory.js +2 -2
  54. package/lib/memory/strategies/managed-strategy.js +1 -1
  55. package/lib/memory/strategies/self-managed-strategy.js +1 -1
  56. package/lib/memory/validation-helpers.js +2 -2
  57. package/lib/network/network-configuration.js +4 -4
  58. package/lib/policy/policy-base.js +1 -1
  59. package/lib/policy/policy-engine-base.js +1 -1
  60. package/lib/policy/policy-engine.js +1 -1
  61. package/lib/policy/policy-statement.d.ts +2 -1
  62. package/lib/policy/policy-statement.js +14 -12
  63. package/lib/policy/policy-types.js +1 -1
  64. package/lib/policy/policy.js +1 -1
  65. package/lib/runtime/inbound-auth/custom-claim.js +1 -1
  66. package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +1 -1
  67. package/lib/runtime/observability.js +2 -2
  68. package/lib/runtime/runtime-artifact.d.ts +11 -3
  69. package/lib/runtime/runtime-artifact.js +12 -4
  70. package/lib/runtime/runtime-base.js +1 -1
  71. package/lib/runtime/runtime-endpoint-base.js +1 -1
  72. package/lib/runtime/runtime-endpoint.js +1 -1
  73. package/lib/runtime/runtime.js +1 -1
  74. package/lib/runtime/types.d.ts +7 -1
  75. package/lib/runtime/types.js +7 -1
  76. package/lib/tools/browser.js +2 -2
  77. package/lib/tools/code-interpreter.js +2 -2
  78. package/package.json +18 -10
@@ -9,7 +9,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
9
9
  * at various levels (session, trace, or tool call).
10
10
  */
11
11
  class BuiltinEvaluator {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BuiltinEvaluator", version: "2.253.0-alpha.0" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BuiltinEvaluator", version: "2.254.0-alpha.0" };
13
13
  /**
14
14
  * Evaluates whether the information in the agent's response is factually accurate.
15
15
  */
@@ -78,7 +78,7 @@ exports.BuiltinEvaluator = BuiltinEvaluator;
78
78
  * The execution status of an online evaluation configuration.
79
79
  */
80
80
  class ExecutionStatus {
81
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ExecutionStatus", version: "2.253.0-alpha.0" };
81
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ExecutionStatus", version: "2.254.0-alpha.0" };
82
82
  /**
83
83
  * The evaluation is enabled and actively processing agent traces.
84
84
  */
@@ -103,7 +103,7 @@ exports.ExecutionStatus = ExecutionStatus;
103
103
  * Filter operators for online evaluation filtering.
104
104
  */
105
105
  class FilterOperator {
106
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.FilterOperator", version: "2.253.0-alpha.0" };
106
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.FilterOperator", version: "2.254.0-alpha.0" };
107
107
  /**
108
108
  * Exact equality comparison.
109
109
  */
@@ -157,7 +157,7 @@ exports.FilterOperator = FilterOperator;
157
157
  * - `FilterValue.boolean()` for boolean comparisons
158
158
  */
159
159
  class FilterValue {
160
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.FilterValue", version: "2.253.0-alpha.0" };
160
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.FilterValue", version: "2.254.0-alpha.0" };
161
161
  /**
162
162
  * Creates a string filter value.
163
163
  *
@@ -201,7 +201,7 @@ exports.FilterValue = FilterValue;
201
201
  * Determines what granularity of data the evaluator operates on.
202
202
  */
203
203
  class EvaluationLevel {
204
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluationLevel", version: "2.253.0-alpha.0" };
204
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluationLevel", version: "2.254.0-alpha.0" };
205
205
  /**
206
206
  * Evaluates individual tool call invocations within a trace.
207
207
  */
@@ -130,4 +130,12 @@ export declare function validateLambdaTimeout(seconds: number | undefined, _scop
130
130
  * @returns The validated parameter
131
131
  */
132
132
  export declare function throwIfInvalid<T>(validationFn: ValidationFn<T>, param: T, scope?: IConstruct): T;
133
+ /** Validates tags for Evaluator resources (Unicode keys allowed per CFN docs) */
134
+ export declare function validateEvaluatorTags(tags?: {
135
+ [key: string]: string;
136
+ }, scope?: IConstruct): string[];
137
+ /** Validates tags for OnlineEvaluationConfig resources (ASCII keys per CFN pattern) */
138
+ export declare function validateEvaluationTags(tags?: {
139
+ [key: string]: string;
140
+ }, scope?: IConstruct): string[];
133
141
  export {};
@@ -26,6 +26,8 @@ exports.validateCategoricalRatingScale = validateCategoricalRatingScale;
26
26
  exports.validateNumericalRatingScale = validateNumericalRatingScale;
27
27
  exports.validateLambdaTimeout = validateLambdaTimeout;
28
28
  exports.throwIfInvalid = throwIfInvalid;
29
+ exports.validateEvaluatorTags = validateEvaluatorTags;
30
+ exports.validateEvaluationTags = validateEvaluationTags;
29
31
  const aws_cdk_lib_1 = require("aws-cdk-lib");
30
32
  const errors_1 = require("aws-cdk-lib/core/lib/errors");
31
33
  const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
@@ -49,6 +51,13 @@ const SERVICE_NAMES_MAX_COUNT = 1;
49
51
  const EVALUATOR_NAME_MIN_LENGTH = 1;
50
52
  const EVALUATOR_NAME_MAX_LENGTH = 48;
51
53
  const RATING_SCALE_MIN_OPTIONS = 1;
54
+ const TAG_KEY_MIN = 1;
55
+ const TAG_KEY_MAX = 128;
56
+ const TAG_VALUE_MAX = 256;
57
+ const TAGS_MAX_COUNT = 50;
58
+ const ONLINE_EVALUATION_CONFIG_TAG_KEY_PATTERN = /^[a-zA-Z+\-=._:/]+$/;
59
+ const EVALUATOR_TAG_KEY_PATTERN = /^[\p{L}\p{N}\s._:/=+@-]+$/u;
60
+ const TAG_VALUE_PATTERN = /^[\p{L}\p{N}\s._/=+-]*$/u;
52
61
  /******************************************************************************
53
62
  * VALIDATION FUNCTIONS
54
63
  *****************************************************************************/
@@ -346,4 +355,56 @@ function throwIfInvalid(validationFn, param, scope) {
346
355
  }
347
356
  return param;
348
357
  }
349
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidmFsaWRhdGlvbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFxREgsZ0RBZ0NDO0FBUUQsa0RBa0JDO0FBUUQsZ0RBcUJDO0FBUUQsZ0VBd0JDO0FBUUQsMENBY0M7QUFRRCx3REF3QkM7QUFRRCxzREFhQztBQVFELG9EQWFDO0FBU0Qsc0RBZ0NDO0FBUUQsb0RBaUJDO0FBUUQsd0VBa0JDO0FBUUQsb0VBa0JDO0FBUUQsc0RBZ0JDO0FBYUQsd0NBVUM7QUEvYUQsNkNBQW9DO0FBQ3BDLHdEQUF1RjtBQUN2Riw0RUFBNEQ7QUFZNUQ7OytFQUUrRTtBQUMvRSxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUNqQyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUNuQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUMvQixNQUFNLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztBQUNoQyxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQztBQUNyQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztBQUNwQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUM1QixNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUMvQixNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUMvQixNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUNsQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUNsQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQUNwQyxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztBQUNyQyxNQUFNLHdC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Q0gsU0FBZ0IsY0FBYyxDQUFJLFlBQTZCLEVBQUUsS0FBUSxFQUFFLEtBQWtCO0lBQzNGLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLElBQUksd0JBQWUsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RSxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxnQ0FBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgVG9rZW4gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IsIFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvZXJyb3JzJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IENhdGVnb3JpY2FsUmF0aW5nT3B0aW9uLCBGaWx0ZXJDb25maWcsIE51bWVyaWNhbFJhdGluZ09wdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgZXZhbHVhdG9yIHJlZmVyZW5jZXMgdXNlZCBpbiB2YWxpZGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbmludGVyZmFjZSBJRXZhbHVhdG9yUmVmZXJlbmNlIHtcbiAgcmVhZG9ubHkgZXZhbHVhdG9ySWQ6IHN0cmluZztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05TVEFOVFNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmNvbnN0IENPTkZJR19OQU1FX01JTl9MRU5HVEggPSAxO1xuY29uc3QgQ09ORklHX05BTUVfTUFYX0xFTkdUSCA9IDQ4O1xuY29uc3QgREVTQ1JJUFRJT05fTUFYX0xFTkdUSCA9IDIwMDtcbmNvbnN0IEVWQUxVQVRPUlNfTUlOX0NPVU5UID0gMTtcbmNvbnN0IEVWQUxVQVRPUlNfTUFYX0NPVU5UID0gMTA7XG5jb25zdCBTQU1QTElOR19QRVJDRU5UQUdFX01JTiA9IDAuMDE7XG5jb25zdCBTQU1QTElOR19QRVJDRU5UQUdFX01BWCA9IDEwMDtcbmNvbnN0IEZJTFRFUlNfTUFYX0NPVU5UID0gNTtcbmNvbnN0IFNFU1NJT05fVElNRU9VVF9NSU4gPSAxO1xuY29uc3QgU0VTU0lPTl9USU1FT1VUX01BWCA9IDE0NDA7XG5jb25zdCBMT0dfR1JPVVBTX01JTl9DT1VOVCA9IDE7XG5jb25zdCBMT0dfR1JPVVBTX01BWF9DT1VOVCA9IDU7XG5jb25zdCBTRVJWSUNFX05BTUVTX01JTl9DT1VOVCA9IDE7XG5jb25zdCBTRVJWSUNFX05BTUVTX01BWF9DT1VOVCA9IDE7XG5jb25zdCBFVkFMVUFUT1JfTkFNRV9NSU5fTEVOR1RIID0gMTtcbmNvbnN0IEVWQUxVQVRPUl9OQU1FX01BWF9MRU5HVEggPSA0ODtcbmNvbnN0IFJBVElOR19TQ0FMRV9NSU5fT1BUSU9OUyA9IDE7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFlQRVNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25GbjxUPiA9IChwYXJhbTogVCwgc2NvcGU/OiBJQ29uc3RydWN0KSA9PiBzdHJpbmdbXTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVElPTiBGVU5DVElPTlNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIG9ubGluZSBldmFsdWF0aW9uIGNvbmZpZ3VyYXRpb24gbmFtZS5cbiAqIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3Jlcy5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIGNvbmZpZ3VyYXRpb24gbmFtZSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb25maWdOYW1lKG5hbWU6IHN0cmluZywgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChuYW1lID09IG51bGwpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChuYW1lKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAobmFtZS5sZW5ndGggPCBDT05GSUdfTkFNRV9NSU5fTEVOR1RIKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgQ29uZmlndXJhdGlvbiBuYW1lIG11c3QgYmUgYXQgbGVhc3QgJHtDT05GSUdfTkFNRV9NSU5fTEVOR1RIfSBjaGFyYWN0ZXIocyksIGdvdCAke25hbWUubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChuYW1lLmxlbmd0aCA+IENPTkZJR19OQU1FX01BWF9MRU5HVEgpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBDb25maWd1cmF0aW9uIG5hbWUgbXVzdCBiZSBhdCBtb3N0ICR7Q09ORklHX05BTUVfTUFYX0xFTkdUSH0gY2hhcmFjdGVycywgZ290ICR7bmFtZS5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gUGF0dGVybjogXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JFxuICBjb25zdCB2YWxpZE5hbWVQYXR0ZXJuID0gL15bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSQvO1xuICBpZiAoIXZhbGlkTmFtZVBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYENvbmZpZ3VyYXRpb24gbmFtZSBcIiR7bmFtZX1cIiBkb2VzIG5vdCBtYXRjaCByZXF1aXJlZCBwYXR0ZXJuLiBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgdW5kZXJzY29yZXMuYCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGRlc2NyaXB0aW9uIGZpZWxkLlxuICogQHBhcmFtIGRlc2NyaXB0aW9uIC0gVGhlIGRlc2NyaXB0aW9uIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoZGVzY3JpcHRpb24gPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGRlc2NyaXB0aW9uKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoZGVzY3JpcHRpb24ubGVuZ3RoID4gREVTQ1JJUFRJT05fTUFYX0xFTkdUSCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYERlc2NyaXB0aW9uIG11c3QgYmUgYXQgbW9zdCAke0RFU0NSSVBUSU9OX01BWF9MRU5HVEh9IGNoYXJhY3RlcnMsIGdvdCAke2Rlc2NyaXB0aW9uLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgZXZhbHVhdG9ycyBhcnJheS5cbiAqIEBwYXJhbSBldmFsdWF0b3JzIC0gVGhlIGV2YWx1YXRvcnMgYXJyYXkgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRXZhbHVhdG9ycyhldmFsdWF0b3JzOiBJRXZhbHVhdG9yUmVmZXJlbmNlW10sIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoZXZhbHVhdG9ycyA9PSBudWxsKSB7XG4gICAgZXJyb3JzLnB1c2goJ0V2YWx1YXRvcnMgYXJyYXkgaXMgcmVxdWlyZWQnKTtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKGV2YWx1YXRvcnMubGVuZ3RoIDwgRVZBTFVBVE9SU19NSU5fQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBBdCBsZWFzdCAke0VWQUxVQVRPUlNfTUlOX0NPVU5UfSBldmFsdWF0b3IgaXMgcmVxdWlyZWQsIGdvdCAke2V2YWx1YXRvcnMubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChldmFsdWF0b3JzLmxlbmd0aCA+IEVWQUxVQVRPUlNfTUFYX0NPVU5UKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgQXQgbW9zdCAke0VWQUxVQVRPUlNfTUFYX0NPVU5UfSBldmFsdWF0b3JzIGFyZSBhbGxvd2VkLCBnb3QgJHtldmFsdWF0b3JzLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgc2FtcGxpbmcgcGVyY2VudGFnZS5cbiAqIEBwYXJhbSBwZXJjZW50YWdlIC0gVGhlIHNhbXBsaW5nIHBlcmNlbnRhZ2UgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2FtcGxpbmdQZXJjZW50YWdlKHBlcmNlbnRhZ2U6IG51bWJlciB8IHVuZGVmaW5lZCwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChwZXJjZW50YWdlID09IG51bGwpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChwZXJjZW50YWdlKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAocGVyY2VudGFnZSA8IFNBTVBMSU5HX1BFUkNFTlRBR0VfTUlOKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgU2FtcGxpbmcgcGVyY2VudGFnZSBtdXN0IGJlIGF0IGxlYXN0ICR7U0FNUExJTkdfUEVSQ0VOVEFHRV9NSU59LCBnb3QgJHtwZXJjZW50YWdlfWAsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChwZXJjZW50YWdlID4gU0FNUExJTkdfUEVSQ0VOVEFHRV9NQVgpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBTYW1wbGluZyBwZXJjZW50YWdlIG11c3QgYmUgYXQgbW9zdCAke1NBTVBMSU5HX1BFUkNFTlRBR0VfTUFYfSwgZ290ICR7cGVyY2VudGFnZX1gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgZmlsdGVycyBhcnJheS5cbiAqIEBwYXJhbSBmaWx0ZXJzIC0gVGhlIGZpbHRlcnMgYXJyYXkgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmlsdGVycyhmaWx0ZXJzOiBGaWx0ZXJDb25maWdbXSB8IHVuZGVmaW5lZCwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChmaWx0ZXJzID09IG51bGwpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKGZpbHRlcnMubGVuZ3RoID4gRklMVEVSU19NQVhfQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBBdCBtb3N0ICR7RklMVEVSU19NQVhfQ09VTlR9IGZpbHRlcnMgYXJlIGFsbG93ZWQsIGdvdCAke2ZpbHRlcnMubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBzZXNzaW9uIHRpbWVvdXQgaW4gbWludXRlcy5cbiAqIEBwYXJhbSBtaW51dGVzIC0gVGhlIHNlc3Npb24gdGltZW91dCBpbiBtaW51dGVzIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNlc3Npb25UaW1lb3V0KG1pbnV0ZXM6IG51bWJlciB8IHVuZGVmaW5lZCwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChtaW51dGVzID09IG51bGwpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChtaW51dGVzKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAobWludXRlcyA8IFNFU1NJT05fVElNRU9VVF9NSU4pIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBTZXNzaW9uIHRpbWVvdXQgbXVzdCBiZSBhdCBsZWFzdCAke1NFU1NJT05fVElNRU9VVF9NSU59IG1pbnV0ZShzKSwgZ290ICR7bWludXRlc31gLFxuICAgICk7XG4gIH1cblxuICBpZiAobWludXRlcyA+IFNFU1NJT05fVElNRU9VVF9NQVgpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBTZXNzaW9uIHRpbWVvdXQgbXVzdCBiZSBhdCBtb3N0ICR7U0VTU0lPTl9USU1FT1VUX01BWH0gbWludXRlcywgZ290ICR7bWludXRlc31gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgbG9nIGdyb3VwIG5hbWVzIGFycmF5LlxuICogQHBhcmFtIG5hbWVzIC0gVGhlIGxvZyBncm91cCBuYW1lcyBhcnJheSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMb2dHcm91cE5hbWVzKG5hbWVzOiBzdHJpbmdbXSwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChuYW1lcyA9PSBudWxsIHx8IG5hbWVzLmxlbmd0aCA8IExPR19HUk9VUFNfTUlOX0NPVU5UKSB7XG4gICAgZXJyb3JzLnB1c2goYEF0IGxlYXN0ICR7TE9HX0dST1VQU19NSU5fQ09VTlR9IGxvZyBncm91cCBuYW1lIGlzIHJlcXVpcmVkLCBnb3QgJHtuYW1lcz8ubGVuZ3RoID8/IDB9YCk7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChuYW1lcy5sZW5ndGggPiBMT0dfR1JPVVBTX01BWF9DT1VOVCkge1xuICAgIGVycm9ycy5wdXNoKGBBdCBtb3N0ICR7TE9HX0dST1VQU19NQVhfQ09VTlR9IGxvZyBncm91cCBuYW1lcyBhcmUgYWxsb3dlZCwgZ290ICR7bmFtZXMubGVuZ3RofWApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHNlcnZpY2UgbmFtZXMgYXJyYXkuXG4gKiBAcGFyYW0gbmFtZXMgLSBUaGUgc2VydmljZSBuYW1lcyBhcnJheSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTZXJ2aWNlTmFtZXMobmFtZXM6IHN0cmluZ1tdLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG5hbWVzID09IG51bGwgfHwgbmFtZXMubGVuZ3RoIDwgU0VSVklDRV9OQU1FU19NSU5fQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChgQXQgbGVhc3QgJHtTRVJWSUNFX05BTUVTX01JTl9DT1VOVH0gc2VydmljZSBuYW1lIGlzIHJlcXVpcmVkLCBnb3QgJHtuYW1lcz8ubGVuZ3RoID8/IDB9YCk7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChuYW1lcy5sZW5ndGggPiBTRVJWSUNFX05BTUVTX01BWF9DT1VOVCkge1xuICAgIGVycm9ycy5wdXNoKGBBdCBtb3N0ICR7U0VSVklDRV9OQU1FU19NQVhfQ09VTlR9IHNlcnZpY2UgbmFtZSBpcyBhbGxvd2VkLCBnb3QgJHtuYW1lcy5sZW5ndGh9YCk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgZXZhbHVhdG9yIG5hbWUuXG4gKiBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgdW5kZXJzY29yZXMuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBldmFsdWF0b3IgbmFtZSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVFdmFsdWF0b3JOYW1lKG5hbWU6IHN0cmluZywgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChuYW1lID09IG51bGwpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChuYW1lKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAobmFtZS5sZW5ndGggPCBFVkFMVUFUT1JfTkFNRV9NSU5fTEVOR1RIKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgRXZhbHVhdG9yIG5hbWUgbXVzdCBiZSBhdCBsZWFzdCAke0VWQUxVQVRPUl9OQU1FX01JTl9MRU5HVEh9IGNoYXJhY3RlcihzKSwgZ290ICR7bmFtZS5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgaWYgKG5hbWUubGVuZ3RoID4gRVZBTFVBVE9SX05BTUVfTUFYX0xFTkdUSCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYEV2YWx1YXRvciBuYW1lIG11c3QgYmUgYXQgbW9zdCAke0VWQUxVQVRPUl9OQU1FX01BWF9MRU5HVEh9IGNoYXJhY3RlcnMsIGdvdCAke25hbWUubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFBhdHRlcm46IF5bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSRcbiAgY29uc3QgdmFsaWROYW1lUGF0dGVybiA9IC9eW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kLztcbiAgaWYgKCF2YWxpZE5hbWVQYXR0ZXJuLnRlc3QobmFtZSkpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBFdmFsdWF0b3IgbmFtZSBcIiR7bmFtZX1cIiBkb2VzIG5vdCBtYXRjaCByZXF1aXJlZCBwYXR0ZXJuLiBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgdW5kZXJzY29yZXMuYCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhhdCBpbnN0cnVjdGlvbnMgYXJlIHByb3ZpZGVkIGFuZCBub24tZW1wdHkuXG4gKiBAcGFyYW0gaW5zdHJ1Y3Rpb25zIC0gVGhlIGluc3RydWN0aW9ucyB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zOiBzdHJpbmcsIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoaW5zdHJ1Y3Rpb25zID09IG51bGwpIHtcbiAgICBlcnJvcnMucHVzaCgnSW5zdHJ1Y3Rpb25zIGFyZSByZXF1aXJlZCBmb3IgTExNLWFzLWEtSnVkZ2UgZXZhbHVhdG9ycycpO1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGluc3RydWN0aW9ucykpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKGluc3RydWN0aW9ucy50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgZXJyb3JzLnB1c2goJ0luc3RydWN0aW9ucyBtdXN0IG5vdCBiZSBlbXB0eScpO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBjYXRlZ29yaWNhbCByYXRpbmcgc2NhbGUuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBjYXRlZ29yaWNhbCByYXRpbmcgb3B0aW9ucyB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDYXRlZ29yaWNhbFJhdGluZ1NjYWxlKG9wdGlvbnM6IENhdGVnb3JpY2FsUmF0aW5nT3B0aW9uW10sIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAob3B0aW9ucyA9PSBudWxsIHx8IG9wdGlvbnMubGVuZ3RoIDwgUkFUSU5HX1NDQUxFX01JTl9PUFRJT05TKSB7XG4gICAgZXJyb3JzLnB1c2goYEF0IGxlYXN0ICR7UkFUSU5HX1NDQUxFX01JTl9PUFRJT05TfSBjYXRlZ29yaWNhbCByYXRpbmcgb3B0aW9uIGlzIHJlcXVpcmVkLCBnb3QgJHtvcHRpb25zPy5sZW5ndGggPz8gMH1gKTtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQob3B0aW9uc1tpXS5sYWJlbCkgJiYgKCFvcHRpb25zW2ldLmxhYmVsIHx8IG9wdGlvbnNbaV0ubGFiZWwudHJpbSgpLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBDYXRlZ29yaWNhbCByYXRpbmcgb3B0aW9uIGF0IGluZGV4ICR7aX0gbXVzdCBoYXZlIGEgbm9uLWVtcHR5IGxhYmVsYCk7XG4gICAgfVxuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnNbaV0uZGVmaW5pdGlvbikgJiYgKCFvcHRpb25zW2ldLmRlZmluaXRpb24gfHwgb3B0aW9uc1tpXS5kZWZpbml0aW9uLnRyaW0oKS5sZW5ndGggPT09IDApKSB7XG4gICAgICBlcnJvcnMucHVzaChgQ2F0ZWdvcmljYWwgcmF0aW5nIG9wdGlvbiBhdCBpbmRleCAke2l9IG11c3QgaGF2ZSBhIG5vbi1lbXB0eSBkZWZpbml0aW9uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBudW1lcmljYWwgcmF0aW5nIHNjYWxlLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgbnVtZXJpY2FsIHJhdGluZyBvcHRpb25zIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZU51bWVyaWNhbFJhdGluZ1NjYWxlKG9wdGlvbnM6IE51bWVyaWNhbFJhdGluZ09wdGlvbltdLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG9wdGlvbnMgPT0gbnVsbCB8fCBvcHRpb25zLmxlbmd0aCA8IFJBVElOR19TQ0FMRV9NSU5fT1BUSU9OUykge1xuICAgIGVycm9ycy5wdXNoKGBBdCBsZWFzdCAke1JBVElOR19TQ0FMRV9NSU5fT1BUSU9OU30gbnVtZXJpY2FsIHJhdGluZyBvcHRpb24gaXMgcmVxdWlyZWQsIGdvdCAke29wdGlvbnM/Lmxlbmd0aCA/PyAwfWApO1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChvcHRpb25zW2ldLmxhYmVsKSAmJiAoIW9wdGlvbnNbaV0ubGFiZWwgfHwgb3B0aW9uc1tpXS5sYWJlbC50cmltKCkubGVuZ3RoID09PSAwKSkge1xuICAgICAgZXJyb3JzLnB1c2goYE51bWVyaWNhbCByYXRpbmcgb3B0aW9uIGF0IGluZGV4ICR7aX0gbXVzdCBoYXZlIGEgbm9uLWVtcHR5IGxhYmVsYCk7XG4gICAgfVxuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnNbaV0uZGVmaW5pdGlvbikgJiYgKCFvcHRpb25zW2ldLmRlZmluaXRpb24gfHwgb3B0aW9uc1tpXS5kZWZpbml0aW9uLnRyaW0oKS5sZW5ndGggPT09IDApKSB7XG4gICAgICBlcnJvcnMucHVzaChgTnVtZXJpY2FsIHJhdGluZyBvcHRpb24gYXQgaW5kZXggJHtpfSBtdXN0IGhhdmUgYSBub24tZW1wdHkgZGVmaW5pdGlvbmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBMYW1iZGEgdGltZW91dCBpbiBzZWNvbmRzLlxuICogQHBhcmFtIHNlY29uZHMgLSBUaGUgdGltZW91dCBpbiBzZWNvbmRzIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxhbWJkYVRpbWVvdXQoc2Vjb25kczogbnVtYmVyIHwgdW5kZWZpbmVkLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHNlY29uZHMgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHNlY29uZHMpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChzZWNvbmRzIDw9IDApIHtcbiAgICBlcnJvcnMucHVzaChgTGFtYmRhIHRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciwgZ290ICR7c2Vjb25kc31gKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEVMUEVSIEZVTkNUSU9OU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIFRocm93cyBhIHZhbGlkYXRpb24gZXJyb3IgaWYgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gcmV0dXJucyBhbnkgZXJyb3JzLlxuICogQHBhcmFtIHZhbGlkYXRpb25GbiAtIFRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHRvIGV4ZWN1dGVcbiAqIEBwYXJhbSBwYXJhbSAtIFRoZSBwYXJhbWV0ZXIgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBzY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBUaGUgdmFsaWRhdGVkIHBhcmFtZXRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dJZkludmFsaWQ8VD4odmFsaWRhdGlvbkZuOiBWYWxpZGF0aW9uRm48VD4sIHBhcmFtOiBULCBzY29wZT86IElDb25zdHJ1Y3QpOiBUIHtcbiAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGlvbkZuKHBhcmFtLCBzY29wZSk7XG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIGlmIChzY29wZSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgVmFsaWRhdGlvbkZhaWxlZGAsIGVycm9ycy5qb2luKCdcXG4nKSwgc2NvcGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFZhbGlkYXRpb25GYWlsZWRgLCBlcnJvcnMuam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGFyYW07XG59XG4iXX0=
358
+ /**
359
+ * Validates tags for evaluation resources.
360
+ * @param tags - The tags object to validate
361
+ * @param keyPattern - The regex pattern to validate tag keys against
362
+ * @param _scope - The construct scope for error reporting (optional)
363
+ * @returns Array of validation error messages, empty if valid
364
+ */
365
+ function validateTags(tags, keyPattern, _scope) {
366
+ const errors = [];
367
+ if (tags == null) {
368
+ return errors;
369
+ }
370
+ if (aws_cdk_lib_1.Token.isUnresolved(tags)) {
371
+ return errors;
372
+ }
373
+ if (Object.keys(tags).length > TAGS_MAX_COUNT) {
374
+ errors.push(`Cannot have more than ${TAGS_MAX_COUNT} tags, got ${Object.keys(tags).length}`);
375
+ }
376
+ for (const [key, value] of Object.entries(tags)) {
377
+ if (!aws_cdk_lib_1.Token.isUnresolved(key)) {
378
+ if (key.trim().length === 0) {
379
+ errors.push('Tag key cannot be empty or consist only of whitespace');
380
+ }
381
+ else if (key.length < TAG_KEY_MIN || key.length > TAG_KEY_MAX) {
382
+ errors.push(`Tag key "${key}" must be between ${TAG_KEY_MIN} and ${TAG_KEY_MAX} characters, got ${key.length}`);
383
+ }
384
+ if (key.toLowerCase().startsWith('aws:')) {
385
+ errors.push(`Tag key "${key}" cannot start with "aws:" as this prefix is reserved by AWS`);
386
+ }
387
+ if (!keyPattern.test(key)) {
388
+ errors.push(`Tag key "${key}" contains invalid characters`);
389
+ }
390
+ }
391
+ if (!aws_cdk_lib_1.Token.isUnresolved(value)) {
392
+ if (value.length > TAG_VALUE_MAX) {
393
+ errors.push(`Tag value for key "${key}" must be at most ${TAG_VALUE_MAX} characters, got ${value.length}`);
394
+ }
395
+ if (!TAG_VALUE_PATTERN.test(value)) {
396
+ errors.push(`Tag value for key "${key}" contains invalid characters. Valid: Unicode letters, digits, whitespace, and _./=+-`);
397
+ }
398
+ }
399
+ }
400
+ return errors;
401
+ }
402
+ /** Validates tags for Evaluator resources (Unicode keys allowed per CFN docs) */
403
+ function validateEvaluatorTags(tags, scope) {
404
+ return validateTags(tags, EVALUATOR_TAG_KEY_PATTERN, scope);
405
+ }
406
+ /** Validates tags for OnlineEvaluationConfig resources (ASCII keys per CFN pattern) */
407
+ function validateEvaluationTags(tags, scope) {
408
+ return validateTags(tags, ONLINE_EVALUATION_CONFIG_TAG_KEY_PATTERN, scope);
409
+ }
410
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidmFsaWRhdGlvbi1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUE0REgsZ0RBZ0NDO0FBUUQsa0RBa0JDO0FBUUQsZ0RBcUJDO0FBUUQsZ0VBd0JDO0FBUUQsMENBY0M7QUFRRCx3REF3QkM7QUFRRCxzREFhQztBQVFELG9EQWFDO0FBU0Qsc0RBZ0NDO0FBUUQsb0RBaUJDO0FBUUQsd0VBa0JDO0FBUUQsb0VBa0JDO0FBUUQsc0RBZ0JDO0FBYUQsd0NBVUM7QUFrREQsc0RBRUM7QUFHRCx3REFFQztBQS9lRCw2Q0FBb0M7QUFDcEMsd0RBQXVGO0FBQ3ZGLDRFQUE0RDtBQVk1RDs7K0VBRStFO0FBQy9FLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBQ25DLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBQ3BDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0seUJBQXlCLEdBQUcs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O1lBQzlELENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLGFBQWEsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHFCQUFxQixhQUFhLG9CQUFvQixLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUM3RyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHVGQUF1RixDQUFDLENBQUM7WUFDaEksQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELGlGQUFpRjtBQUNqRixTQUFnQixxQkFBcUIsQ0FBQyxJQUFnQyxFQUFFLEtBQWtCO0lBQ3hGLE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQsdUZBQXVGO0FBQ3ZGLFNBQWdCLHNCQUFzQixDQUFDLElBQWdDLEVBQUUsS0FBa0I7SUFDekYsT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLHdDQUF3QyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciwgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9lcnJvcnMnO1xuaW1wb3J0IHsgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgQ2F0ZWdvcmljYWxSYXRpbmdPcHRpb24sIEZpbHRlckNvbmZpZywgTnVtZXJpY2FsUmF0aW5nT3B0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBldmFsdWF0b3IgcmVmZXJlbmNlcyB1c2VkIGluIHZhbGlkYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIElFdmFsdWF0b3JSZWZlcmVuY2Uge1xuICByZWFkb25seSBldmFsdWF0b3JJZDogc3RyaW5nO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUQU5UU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuY29uc3QgQ09ORklHX05BTUVfTUlOX0xFTkdUSCA9IDE7XG5jb25zdCBDT05GSUdfTkFNRV9NQVhfTEVOR1RIID0gNDg7XG5jb25zdCBERVNDUklQVElPTl9NQVhfTEVOR1RIID0gMjAwO1xuY29uc3QgRVZBTFVBVE9SU19NSU5fQ09VTlQgPSAxO1xuY29uc3QgRVZBTFVBVE9SU19NQVhfQ09VTlQgPSAxMDtcbmNvbnN0IFNBTVBMSU5HX1BFUkNFTlRBR0VfTUlOID0gMC4wMTtcbmNvbnN0IFNBTVBMSU5HX1BFUkNFTlRBR0VfTUFYID0gMTAwO1xuY29uc3QgRklMVEVSU19NQVhfQ09VTlQgPSA1O1xuY29uc3QgU0VTU0lPTl9USU1FT1VUX01JTiA9IDE7XG5jb25zdCBTRVNTSU9OX1RJTUVPVVRfTUFYID0gMTQ0MDtcbmNvbnN0IExPR19HUk9VUFNfTUlOX0NPVU5UID0gMTtcbmNvbnN0IExPR19HUk9VUFNfTUFYX0NPVU5UID0gNTtcbmNvbnN0IFNFUlZJQ0VfTkFNRVNfTUlOX0NPVU5UID0gMTtcbmNvbnN0IFNFUlZJQ0VfTkFNRVNfTUFYX0NPVU5UID0gMTtcbmNvbnN0IEVWQUxVQVRPUl9OQU1FX01JTl9MRU5HVEggPSAxO1xuY29uc3QgRVZBTFVBVE9SX05BTUVfTUFYX0xFTkdUSCA9IDQ4O1xuY29uc3QgUkFUSU5HX1NDQUxFX01JTl9PUFRJT05TID0gMTtcbmNvbnN0IFRBR19LRVlfTUlOID0gMTtcbmNvbnN0IFRBR19LRVlfTUFYID0gMTI4O1xuY29uc3QgVEFHX1ZBTFVFX01BWCA9IDI1NjtcbmNvbnN0IFRBR1NfTUFYX0NPVU5UID0gNTA7XG5jb25zdCBPTkxJTkVfRVZBTFVBVElPTl9DT05GSUdfVEFHX0tFWV9QQVRURVJOID0gL15bYS16QS1aK1xcLT0uXzovXSskLztcbmNvbnN0IEVWQUxVQVRPUl9UQUdfS0VZX1BBVFRFUk4gPSAvXltcXHB7TH1cXHB7Tn1cXHMuXzovPStALV0rJC91O1xuY29uc3QgVEFHX1ZBTFVFX1BBVFRFUk4gPSAvXltcXHB7TH1cXHB7Tn1cXHMuXy89Ky1dKiQvdTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUWVBFU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0IHR5cGUgVmFsaWRhdGlvbkZuPFQ+ID0gKHBhcmFtOiBULCBzY29wZT86IElDb25zdHJ1Y3QpID0+IHN0cmluZ1tdO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFUSU9OIEZVTkNUSU9OU1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgb25saW5lIGV2YWx1YXRpb24gY29uZmlndXJhdGlvbiBuYW1lLlxuICogTXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIHVuZGVyc2NvcmVzLlxuICogQHBhcmFtIG5hbWUgLSBUaGUgY29uZmlndXJhdGlvbiBuYW1lIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbmZpZ05hbWUobmFtZTogc3RyaW5nLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG5hbWUpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChuYW1lLmxlbmd0aCA8IENPTkZJR19OQU1FX01JTl9MRU5HVEgpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBDb25maWd1cmF0aW9uIG5hbWUgbXVzdCBiZSBhdCBsZWFzdCAke0NPTkZJR19OQU1FX01JTl9MRU5HVEh9IGNoYXJhY3RlcihzKSwgZ290ICR7bmFtZS5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgaWYgKG5hbWUubGVuZ3RoID4gQ09ORklHX05BTUVfTUFYX0xFTkdUSCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYENvbmZpZ3VyYXRpb24gbmFtZSBtdXN0IGJlIGF0IG1vc3QgJHtDT05GSUdfTkFNRV9NQVhfTEVOR1RIfSBjaGFyYWN0ZXJzLCBnb3QgJHtuYW1lLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cblxuICAvLyBQYXR0ZXJuOiBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kXG4gIGNvbnN0IHZhbGlkTmFtZVBhdHRlcm4gPSAvXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JC87XG4gIGlmICghdmFsaWROYW1lUGF0dGVybi50ZXN0KG5hbWUpKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgQ29uZmlndXJhdGlvbiBuYW1lIFwiJHtuYW1lfVwiIGRvZXMgbm90IG1hdGNoIHJlcXVpcmVkIHBhdHRlcm4uIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3Jlcy5gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgZGVzY3JpcHRpb24gZmllbGQuXG4gKiBAcGFyYW0gZGVzY3JpcHRpb24gLSBUaGUgZGVzY3JpcHRpb24gdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChkZXNjcmlwdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoZGVzY3JpcHRpb24pKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChkZXNjcmlwdGlvbi5sZW5ndGggPiBERVNDUklQVElPTl9NQVhfTEVOR1RIKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgRGVzY3JpcHRpb24gbXVzdCBiZSBhdCBtb3N0ICR7REVTQ1JJUFRJT05fTUFYX0xFTkdUSH0gY2hhcmFjdGVycywgZ290ICR7ZGVzY3JpcHRpb24ubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBldmFsdWF0b3JzIGFycmF5LlxuICogQHBhcmFtIGV2YWx1YXRvcnMgLSBUaGUgZXZhbHVhdG9ycyBhcnJheSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVFdmFsdWF0b3JzKGV2YWx1YXRvcnM6IElFdmFsdWF0b3JSZWZlcmVuY2VbXSwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChldmFsdWF0b3JzID09IG51bGwpIHtcbiAgICBlcnJvcnMucHVzaCgnRXZhbHVhdG9ycyBhcnJheSBpcyByZXF1aXJlZCcpO1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoZXZhbHVhdG9ycy5sZW5ndGggPCBFVkFMVUFUT1JTX01JTl9DT1VOVCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYEF0IGxlYXN0ICR7RVZBTFVBVE9SU19NSU5fQ09VTlR9IGV2YWx1YXRvciBpcyByZXF1aXJlZCwgZ290ICR7ZXZhbHVhdG9ycy5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgaWYgKGV2YWx1YXRvcnMubGVuZ3RoID4gRVZBTFVBVE9SU19NQVhfQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBBdCBtb3N0ICR7RVZBTFVBVE9SU19NQVhfQ09VTlR9IGV2YWx1YXRvcnMgYXJlIGFsbG93ZWQsIGdvdCAke2V2YWx1YXRvcnMubGVuZ3RofWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBzYW1wbGluZyBwZXJjZW50YWdlLlxuICogQHBhcmFtIHBlcmNlbnRhZ2UgLSBUaGUgc2FtcGxpbmcgcGVyY2VudGFnZSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYW1wbGluZ1BlcmNlbnRhZ2UocGVyY2VudGFnZTogbnVtYmVyIHwgdW5kZWZpbmVkLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKHBlcmNlbnRhZ2UgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHBlcmNlbnRhZ2UpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChwZXJjZW50YWdlIDwgU0FNUExJTkdfUEVSQ0VOVEFHRV9NSU4pIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBTYW1wbGluZyBwZXJjZW50YWdlIG11c3QgYmUgYXQgbGVhc3QgJHtTQU1QTElOR19QRVJDRU5UQUdFX01JTn0sIGdvdCAke3BlcmNlbnRhZ2V9YCxcbiAgICApO1xuICB9XG5cbiAgaWYgKHBlcmNlbnRhZ2UgPiBTQU1QTElOR19QRVJDRU5UQUdFX01BWCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYFNhbXBsaW5nIHBlcmNlbnRhZ2UgbXVzdCBiZSBhdCBtb3N0ICR7U0FNUExJTkdfUEVSQ0VOVEFHRV9NQVh9LCBnb3QgJHtwZXJjZW50YWdlfWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBmaWx0ZXJzIGFycmF5LlxuICogQHBhcmFtIGZpbHRlcnMgLSBUaGUgZmlsdGVycyBhcnJheSB0byB2YWxpZGF0ZVxuICogQHBhcmFtIF9zY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGUgZm9yIGVycm9yIHJlcG9ydGluZyAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VzLCBlbXB0eSBpZiB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVGaWx0ZXJzKGZpbHRlcnM6IEZpbHRlckNvbmZpZ1tdIHwgdW5kZWZpbmVkLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKGZpbHRlcnMgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoZmlsdGVycy5sZW5ndGggPiBGSUxURVJTX01BWF9DT1VOVCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYEF0IG1vc3QgJHtGSUxURVJTX01BWF9DT1VOVH0gZmlsdGVycyBhcmUgYWxsb3dlZCwgZ290ICR7ZmlsdGVycy5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHNlc3Npb24gdGltZW91dCBpbiBtaW51dGVzLlxuICogQHBhcmFtIG1pbnV0ZXMgLSBUaGUgc2Vzc2lvbiB0aW1lb3V0IGluIG1pbnV0ZXMgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2Vzc2lvblRpbWVvdXQobWludXRlczogbnVtYmVyIHwgdW5kZWZpbmVkLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG1pbnV0ZXMgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG1pbnV0ZXMpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChtaW51dGVzIDwgU0VTU0lPTl9USU1FT1VUX01JTikge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYFNlc3Npb24gdGltZW91dCBtdXN0IGJlIGF0IGxlYXN0ICR7U0VTU0lPTl9USU1FT1VUX01JTn0gbWludXRlKHMpLCBnb3QgJHttaW51dGVzfWAsXG4gICAgKTtcbiAgfVxuXG4gIGlmIChtaW51dGVzID4gU0VTU0lPTl9USU1FT1VUX01BWCkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYFNlc3Npb24gdGltZW91dCBtdXN0IGJlIGF0IG1vc3QgJHtTRVNTSU9OX1RJTUVPVVRfTUFYfSBtaW51dGVzLCBnb3QgJHttaW51dGVzfWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBsb2cgZ3JvdXAgbmFtZXMgYXJyYXkuXG4gKiBAcGFyYW0gbmFtZXMgLSBUaGUgbG9nIGdyb3VwIG5hbWVzIGFycmF5IHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxvZ0dyb3VwTmFtZXMobmFtZXM6IHN0cmluZ1tdLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG5hbWVzID09IG51bGwgfHwgbmFtZXMubGVuZ3RoIDwgTE9HX0dST1VQU19NSU5fQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChgQXQgbGVhc3QgJHtMT0dfR1JPVVBTX01JTl9DT1VOVH0gbG9nIGdyb3VwIG5hbWUgaXMgcmVxdWlyZWQsIGdvdCAke25hbWVzPy5sZW5ndGggPz8gMH1gKTtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKG5hbWVzLmxlbmd0aCA+IExPR19HUk9VUFNfTUFYX0NPVU5UKSB7XG4gICAgZXJyb3JzLnB1c2goYEF0IG1vc3QgJHtMT0dfR1JPVVBTX01BWF9DT1VOVH0gbG9nIGdyb3VwIG5hbWVzIGFyZSBhbGxvd2VkLCBnb3QgJHtuYW1lcy5sZW5ndGh9YCk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgc2VydmljZSBuYW1lcyBhcnJheS5cbiAqIEBwYXJhbSBuYW1lcyAtIFRoZSBzZXJ2aWNlIG5hbWVzIGFycmF5IHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNlcnZpY2VOYW1lcyhuYW1lczogc3RyaW5nW10sIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAobmFtZXMgPT0gbnVsbCB8fCBuYW1lcy5sZW5ndGggPCBTRVJWSUNFX05BTUVTX01JTl9DT1VOVCkge1xuICAgIGVycm9ycy5wdXNoKGBBdCBsZWFzdCAke1NFUlZJQ0VfTkFNRVNfTUlOX0NPVU5UfSBzZXJ2aWNlIG5hbWUgaXMgcmVxdWlyZWQsIGdvdCAke25hbWVzPy5sZW5ndGggPz8gMH1gKTtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKG5hbWVzLmxlbmd0aCA+IFNFUlZJQ0VfTkFNRVNfTUFYX0NPVU5UKSB7XG4gICAgZXJyb3JzLnB1c2goYEF0IG1vc3QgJHtTRVJWSUNFX05BTUVTX01BWF9DT1VOVH0gc2VydmljZSBuYW1lIGlzIGFsbG93ZWQsIGdvdCAke25hbWVzLmxlbmd0aH1gKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBldmFsdWF0b3IgbmFtZS5cbiAqIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3Jlcy5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIGV2YWx1YXRvciBuYW1lIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUV2YWx1YXRvck5hbWUobmFtZTogc3RyaW5nLCBfc2NvcGU/OiBJQ29uc3RydWN0KTogc3RyaW5nW10ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG5hbWUpKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChuYW1lLmxlbmd0aCA8IEVWQUxVQVRPUl9OQU1FX01JTl9MRU5HVEgpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgIGBFdmFsdWF0b3IgbmFtZSBtdXN0IGJlIGF0IGxlYXN0ICR7RVZBTFVBVE9SX05BTUVfTUlOX0xFTkdUSH0gY2hhcmFjdGVyKHMpLCBnb3QgJHtuYW1lLmxlbmd0aH1gLFxuICAgICk7XG4gIH1cblxuICBpZiAobmFtZS5sZW5ndGggPiBFVkFMVUFUT1JfTkFNRV9NQVhfTEVOR1RIKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgRXZhbHVhdG9yIG5hbWUgbXVzdCBiZSBhdCBtb3N0ICR7RVZBTFVBVE9SX05BTUVfTUFYX0xFTkdUSH0gY2hhcmFjdGVycywgZ290ICR7bmFtZS5sZW5ndGh9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gUGF0dGVybjogXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JFxuICBjb25zdCB2YWxpZE5hbWVQYXR0ZXJuID0gL15bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSQvO1xuICBpZiAoIXZhbGlkTmFtZVBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgIGVycm9ycy5wdXNoKFxuICAgICAgYEV2YWx1YXRvciBuYW1lIFwiJHtuYW1lfVwiIGRvZXMgbm90IG1hdGNoIHJlcXVpcmVkIHBhdHRlcm4uIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB1bmRlcnNjb3Jlcy5gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGF0IGluc3RydWN0aW9ucyBhcmUgcHJvdmlkZWQgYW5kIG5vbi1lbXB0eS5cbiAqIEBwYXJhbSBpbnN0cnVjdGlvbnMgLSBUaGUgaW5zdHJ1Y3Rpb25zIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnM6IHN0cmluZywgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChpbnN0cnVjdGlvbnMgPT0gbnVsbCkge1xuICAgIGVycm9ycy5wdXNoKCdJbnN0cnVjdGlvbnMgYXJlIHJlcXVpcmVkIGZvciBMTE0tYXMtYS1KdWRnZSBldmFsdWF0b3JzJyk7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoaW5zdHJ1Y3Rpb25zKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoaW5zdHJ1Y3Rpb25zLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICBlcnJvcnMucHVzaCgnSW5zdHJ1Y3Rpb25zIG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIGNhdGVnb3JpY2FsIHJhdGluZyBzY2FsZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGNhdGVnb3JpY2FsIHJhdGluZyBvcHRpb25zIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNhdGVnb3JpY2FsUmF0aW5nU2NhbGUob3B0aW9uczogQ2F0ZWdvcmljYWxSYXRpbmdPcHRpb25bXSwgX3Njb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChvcHRpb25zID09IG51bGwgfHwgb3B0aW9ucy5sZW5ndGggPCBSQVRJTkdfU0NBTEVfTUlOX09QVElPTlMpIHtcbiAgICBlcnJvcnMucHVzaChgQXQgbGVhc3QgJHtSQVRJTkdfU0NBTEVfTUlOX09QVElPTlN9IGNhdGVnb3JpY2FsIHJhdGluZyBvcHRpb24gaXMgcmVxdWlyZWQsIGdvdCAke29wdGlvbnM/Lmxlbmd0aCA/PyAwfWApO1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChvcHRpb25zW2ldLmxhYmVsKSAmJiAoIW9wdGlvbnNbaV0ubGFiZWwgfHwgb3B0aW9uc1tpXS5sYWJlbC50cmltKCkubGVuZ3RoID09PSAwKSkge1xuICAgICAgZXJyb3JzLnB1c2goYENhdGVnb3JpY2FsIHJhdGluZyBvcHRpb24gYXQgaW5kZXggJHtpfSBtdXN0IGhhdmUgYSBub24tZW1wdHkgbGFiZWxgKTtcbiAgICB9XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQob3B0aW9uc1tpXS5kZWZpbml0aW9uKSAmJiAoIW9wdGlvbnNbaV0uZGVmaW5pdGlvbiB8fCBvcHRpb25zW2ldLmRlZmluaXRpb24udHJpbSgpLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBDYXRlZ29yaWNhbCByYXRpbmcgb3B0aW9uIGF0IGluZGV4ICR7aX0gbXVzdCBoYXZlIGEgbm9uLWVtcHR5IGRlZmluaXRpb25gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIG51bWVyaWNhbCByYXRpbmcgc2NhbGUuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBudW1lcmljYWwgcmF0aW5nIG9wdGlvbnMgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTnVtZXJpY2FsUmF0aW5nU2NhbGUob3B0aW9uczogTnVtZXJpY2FsUmF0aW5nT3B0aW9uW10sIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAob3B0aW9ucyA9PSBudWxsIHx8IG9wdGlvbnMubGVuZ3RoIDwgUkFUSU5HX1NDQUxFX01JTl9PUFRJT05TKSB7XG4gICAgZXJyb3JzLnB1c2goYEF0IGxlYXN0ICR7UkFUSU5HX1NDQUxFX01JTl9PUFRJT05TfSBudW1lcmljYWwgcmF0aW5nIG9wdGlvbiBpcyByZXF1aXJlZCwgZ290ICR7b3B0aW9ucz8ubGVuZ3RoID8/IDB9YCk7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnNbaV0ubGFiZWwpICYmICghb3B0aW9uc1tpXS5sYWJlbCB8fCBvcHRpb25zW2ldLmxhYmVsLnRyaW0oKS5sZW5ndGggPT09IDApKSB7XG4gICAgICBlcnJvcnMucHVzaChgTnVtZXJpY2FsIHJhdGluZyBvcHRpb24gYXQgaW5kZXggJHtpfSBtdXN0IGhhdmUgYSBub24tZW1wdHkgbGFiZWxgKTtcbiAgICB9XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQob3B0aW9uc1tpXS5kZWZpbml0aW9uKSAmJiAoIW9wdGlvbnNbaV0uZGVmaW5pdGlvbiB8fCBvcHRpb25zW2ldLmRlZmluaXRpb24udHJpbSgpLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBOdW1lcmljYWwgcmF0aW5nIG9wdGlvbiBhdCBpbmRleCAke2l9IG11c3QgaGF2ZSBhIG5vbi1lbXB0eSBkZWZpbml0aW9uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIExhbWJkYSB0aW1lb3V0IGluIHNlY29uZHMuXG4gKiBAcGFyYW0gc2Vjb25kcyAtIFRoZSB0aW1lb3V0IGluIHNlY29uZHMgdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSBfc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlIGZvciBlcnJvciByZXBvcnRpbmcgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcywgZW1wdHkgaWYgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGFtYmRhVGltZW91dChzZWNvbmRzOiBudW1iZXIgfCB1bmRlZmluZWQsIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoc2Vjb25kcyA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVycm9ycztcbiAgfVxuXG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoc2Vjb25kcykpIHtcbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaWYgKHNlY29uZHMgPD0gMCkge1xuICAgIGVycm9ycy5wdXNoKGBMYW1iZGEgdGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyLCBnb3QgJHtzZWNvbmRzfWApO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIRUxQRVIgRlVOQ1RJT05TXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogVGhyb3dzIGEgdmFsaWRhdGlvbiBlcnJvciBpZiB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvbiByZXR1cm5zIGFueSBlcnJvcnMuXG4gKiBAcGFyYW0gdmFsaWRhdGlvbkZuIC0gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gdG8gZXhlY3V0ZVxuICogQHBhcmFtIHBhcmFtIC0gVGhlIHBhcmFtZXRlciB0byB2YWxpZGF0ZVxuICogQHBhcmFtIHNjb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIFRoZSB2YWxpZGF0ZWQgcGFyYW1ldGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0lmSW52YWxpZDxUPih2YWxpZGF0aW9uRm46IFZhbGlkYXRpb25GbjxUPiwgcGFyYW06IFQsIHNjb3BlPzogSUNvbnN0cnVjdCk6IFQge1xuICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0aW9uRm4ocGFyYW0sIHNjb3BlKTtcbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBWYWxpZGF0aW9uRmFpbGVkYCwgZXJyb3JzLmpvaW4oJ1xcbicpLCBzY29wZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgVmFsaWRhdGlvbkZhaWxlZGAsIGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXJhbTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGFncyBmb3IgZXZhbHVhdGlvbiByZXNvdXJjZXMuXG4gKiBAcGFyYW0gdGFncyAtIFRoZSB0YWdzIG9iamVjdCB0byB2YWxpZGF0ZVxuICogQHBhcmFtIGtleVBhdHRlcm4gLSBUaGUgcmVnZXggcGF0dGVybiB0byB2YWxpZGF0ZSB0YWcga2V5cyBhZ2FpbnN0XG4gKiBAcGFyYW0gX3Njb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZSBmb3IgZXJyb3IgcmVwb3J0aW5nIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZXMsIGVtcHR5IGlmIHZhbGlkXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlVGFncyh0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgdW5kZWZpbmVkLCBrZXlQYXR0ZXJuOiBSZWdFeHAsIF9zY29wZT86IElDb25zdHJ1Y3QpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgaWYgKHRhZ3MgPT0gbnVsbCkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZCh0YWdzKSkge1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXModGFncykubGVuZ3RoID4gVEFHU19NQVhfQ09VTlQpIHtcbiAgICBlcnJvcnMucHVzaChgQ2Fubm90IGhhdmUgbW9yZSB0aGFuICR7VEFHU19NQVhfQ09VTlR9IHRhZ3MsIGdvdCAke09iamVjdC5rZXlzKHRhZ3MpLmxlbmd0aH1gKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRhZ3MpKSB7XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQoa2V5KSkge1xuICAgICAgaWYgKGtleS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKCdUYWcga2V5IGNhbm5vdCBiZSBlbXB0eSBvciBjb25zaXN0IG9ubHkgb2Ygd2hpdGVzcGFjZScpO1xuICAgICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoIDwgVEFHX0tFWV9NSU4gfHwga2V5Lmxlbmd0aCA+IFRBR19LRVlfTUFYKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBUYWcga2V5IFwiJHtrZXl9XCIgbXVzdCBiZSBiZXR3ZWVuICR7VEFHX0tFWV9NSU59IGFuZCAke1RBR19LRVlfTUFYfSBjaGFyYWN0ZXJzLCBnb3QgJHtrZXkubGVuZ3RofWApO1xuICAgICAgfVxuICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2F3czonKSkge1xuICAgICAgICBlcnJvcnMucHVzaChgVGFnIGtleSBcIiR7a2V5fVwiIGNhbm5vdCBzdGFydCB3aXRoIFwiYXdzOlwiIGFzIHRoaXMgcHJlZml4IGlzIHJlc2VydmVkIGJ5IEFXU2ApO1xuICAgICAgfVxuICAgICAgaWYgKCFrZXlQYXR0ZXJuLnRlc3Qoa2V5KSkge1xuICAgICAgICBlcnJvcnMucHVzaChgVGFnIGtleSBcIiR7a2V5fVwiIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyc2ApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZCh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiBUQUdfVkFMVUVfTUFYKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGBUYWcgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiIG11c3QgYmUgYXQgbW9zdCAke1RBR19WQUxVRV9NQVh9IGNoYXJhY3RlcnMsIGdvdCAke3ZhbHVlLmxlbmd0aH1gKTtcbiAgICAgIH1cbiAgICAgIGlmICghVEFHX1ZBTFVFX1BBVFRFUk4udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCIgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzLiBWYWxpZDogVW5pY29kZSBsZXR0ZXJzLCBkaWdpdHMsIHdoaXRlc3BhY2UsIGFuZCBfLi89Ky1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXJyb3JzO1xufVxuXG4vKiogVmFsaWRhdGVzIHRhZ3MgZm9yIEV2YWx1YXRvciByZXNvdXJjZXMgKFVuaWNvZGUga2V5cyBhbGxvd2VkIHBlciBDRk4gZG9jcykgKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUV2YWx1YXRvclRhZ3ModGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIHNjb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHZhbGlkYXRlVGFncyh0YWdzLCBFVkFMVUFUT1JfVEFHX0tFWV9QQVRURVJOLCBzY29wZSk7XG59XG5cbi8qKiBWYWxpZGF0ZXMgdGFncyBmb3IgT25saW5lRXZhbHVhdGlvbkNvbmZpZyByZXNvdXJjZXMgKEFTQ0lJIGtleXMgcGVyIENGTiBwYXR0ZXJuKSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRXZhbHVhdGlvblRhZ3ModGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIHNjb3BlPzogSUNvbnN0cnVjdCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHZhbGlkYXRlVGFncyh0YWdzLCBPTkxJTkVfRVZBTFVBVElPTl9DT05GSUdfVEFHX0tFWV9QQVRURVJOLCBzY29wZSk7XG59XG4iXX0=
@@ -25,7 +25,7 @@ var GatewayExceptionLevel;
25
25
  * Base Class
26
26
  *****************************************************************************/
27
27
  class GatewayBase extends aws_cdk_lib_1.Resource {
28
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayBase", version: "2.253.0-alpha.0" };
28
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayBase", version: "2.254.0-alpha.0" };
29
29
  /**
30
30
  * A reference to a Gateway resource.
31
31
  */
@@ -117,8 +117,9 @@ export interface AddOpenApiTargetOptions {
117
117
  */
118
118
  readonly validateOpenApiSchema?: boolean;
119
119
  /**
120
- * Credential providers for authentication
121
- * @default - [GatewayCredentialProvider.iamRole()]
120
+ * Credential providers for outbound authentication (OpenAPI targets use API Key or OAuth, not IAM).
121
+ *
122
+ * @default - none (no credential configuration on the target; supply providers for secured backends)
122
123
  */
123
124
  readonly credentialProviderConfigurations?: ICredentialProviderConfig[];
124
125
  }