@aws-cdk/aws-bedrock-agentcore-alpha 2.225.0-alpha.0 → 2.227.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 (54) hide show
  1. package/.jsii +14021 -5792
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/.warnings.jsii.js +343 -1
  4. package/README.md +880 -19
  5. package/agentcore/gateway/gateway-base.d.ts +292 -0
  6. package/agentcore/gateway/gateway-base.js +171 -0
  7. package/agentcore/gateway/gateway.d.ts +383 -0
  8. package/agentcore/gateway/gateway.js +521 -0
  9. package/agentcore/gateway/inbound-auth/authorizer.d.ts +121 -0
  10. package/agentcore/gateway/inbound-auth/authorizer.js +133 -0
  11. package/agentcore/gateway/outbound-auth/api-key.d.ts +117 -0
  12. package/agentcore/gateway/outbound-auth/api-key.js +141 -0
  13. package/agentcore/gateway/outbound-auth/credential-provider.d.ts +70 -0
  14. package/agentcore/gateway/outbound-auth/credential-provider.js +80 -0
  15. package/agentcore/gateway/outbound-auth/iam-role.d.ts +28 -0
  16. package/agentcore/gateway/outbound-auth/iam-role.js +40 -0
  17. package/agentcore/gateway/outbound-auth/oauth.d.ts +80 -0
  18. package/agentcore/gateway/outbound-auth/oauth.js +76 -0
  19. package/agentcore/gateway/perms.d.ts +75 -0
  20. package/agentcore/gateway/perms.js +112 -0
  21. package/agentcore/gateway/protocol.d.ts +121 -0
  22. package/agentcore/gateway/protocol.js +120 -0
  23. package/agentcore/gateway/targets/schema/api-schema.d.ts +110 -0
  24. package/agentcore/gateway/targets/schema/api-schema.js +207 -0
  25. package/agentcore/gateway/targets/schema/base-schema.d.ts +24 -0
  26. package/agentcore/gateway/targets/schema/base-schema.js +12 -0
  27. package/agentcore/gateway/targets/schema/tool-schema.d.ts +198 -0
  28. package/agentcore/gateway/targets/schema/tool-schema.js +213 -0
  29. package/agentcore/gateway/targets/target-base.d.ts +153 -0
  30. package/agentcore/gateway/targets/target-base.js +81 -0
  31. package/agentcore/gateway/targets/target-configuration.d.ts +230 -0
  32. package/agentcore/gateway/targets/target-configuration.js +407 -0
  33. package/agentcore/gateway/targets/target.d.ts +345 -0
  34. package/agentcore/gateway/targets/target.js +444 -0
  35. package/agentcore/gateway/validation-helpers.d.ts +65 -0
  36. package/agentcore/gateway/validation-helpers.js +333 -0
  37. package/agentcore/index.d.ts +15 -0
  38. package/agentcore/index.js +32 -1
  39. package/agentcore/memory/memory-strategy.js +1 -1
  40. package/agentcore/memory/memory.js +6 -3
  41. package/agentcore/memory/strategies/managed-strategy.js +1 -1
  42. package/agentcore/memory/strategies/self-managed-strategy.js +1 -1
  43. package/agentcore/network/network-configuration.js +4 -4
  44. package/agentcore/runtime/runtime-artifact.js +1 -1
  45. package/agentcore/runtime/runtime-authorizer-configuration.d.ts +1 -1
  46. package/agentcore/runtime/runtime-authorizer-configuration.js +6 -5
  47. package/agentcore/runtime/runtime-base.js +1 -1
  48. package/agentcore/runtime/runtime-endpoint-base.js +1 -1
  49. package/agentcore/runtime/runtime-endpoint.js +1 -1
  50. package/agentcore/runtime/runtime.js +1 -1
  51. package/agentcore/tools/browser.js +2 -2
  52. package/agentcore/tools/code-interpreter.js +2 -2
  53. package/package.json +9 -9
  54. package/rosetta/default.ts-fixture +15 -6
@@ -0,0 +1,444 @@
1
+ "use strict";
2
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
3
+ var useValue = arguments.length > 2;
4
+ for (var i = 0; i < initializers.length; i++) {
5
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
6
+ }
7
+ return useValue ? value : void 0;
8
+ };
9
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
10
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
11
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
12
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
13
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
14
+ var _, done = false;
15
+ for (var i = decorators.length - 1; i >= 0; i--) {
16
+ var context = {};
17
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
18
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
19
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
20
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
21
+ if (kind === "accessor") {
22
+ if (result === void 0) continue;
23
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
24
+ if (_ = accept(result.get)) descriptor.get = _;
25
+ if (_ = accept(result.set)) descriptor.set = _;
26
+ if (_ = accept(result.init)) initializers.unshift(_);
27
+ }
28
+ else if (_ = accept(result)) {
29
+ if (kind === "field") initializers.unshift(_);
30
+ else descriptor[key] = _;
31
+ }
32
+ }
33
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
34
+ done = true;
35
+ };
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.GatewayTarget = void 0;
38
+ const jsiiDeprecationWarnings = require("../../../.warnings.jsii.js");
39
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
40
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
41
+ const bedrockagentcore = require("aws-cdk-lib/aws-bedrockagentcore");
42
+ const iam = require("aws-cdk-lib/aws-iam");
43
+ const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
44
+ const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
45
+ const perms_1 = require("../perms");
46
+ const target_base_1 = require("./target-base");
47
+ const target_configuration_1 = require("./target-configuration");
48
+ const credential_provider_1 = require("../outbound-auth/credential-provider");
49
+ const validation_helpers_1 = require("../validation-helpers");
50
+ /******************************************************************************
51
+ * Class
52
+ *****************************************************************************/
53
+ /**
54
+ *
55
+ * Defines tools that your gateway will host. Supports multiple target types:
56
+ * - Lambda: Wraps a Lambda function as MCP tools
57
+ * - OpenAPI: Exposes an OpenAPI/REST API as MCP tools
58
+ * - Smithy: Exposes a Smithy-modeled API as MCP tools
59
+ *
60
+ * @resource AWS::BedrockAgentCore::GatewayTarget
61
+ * @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-building-adding-targets.html
62
+ */
63
+ let GatewayTarget = (() => {
64
+ let _classDecorators = [prop_injectable_1.propertyInjectable];
65
+ let _classDescriptor;
66
+ let _classExtraInitializers = [];
67
+ let _classThis;
68
+ let _classSuper = target_base_1.GatewayTargetBase;
69
+ let _instanceExtraInitializers = [];
70
+ let _grantSync_decorators;
71
+ var GatewayTarget = class extends _classSuper {
72
+ static { _classThis = this; }
73
+ static {
74
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
75
+ _grantSync_decorators = [(0, metadata_resource_1.MethodMetadata)()];
76
+ __esDecorate(this, null, _grantSync_decorators, { kind: "method", name: "grantSync", static: false, private: false, access: { has: obj => "grantSync" in obj, get: obj => obj.grantSync }, metadata: _metadata }, null, _instanceExtraInitializers);
77
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
78
+ GatewayTarget = _classThis = _classDescriptor.value;
79
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
80
+ }
81
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayTarget", version: "2.227.0-alpha.0" };
82
+ /** Uniquely identifies this class. */
83
+ static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.GatewayTarget';
84
+ /**
85
+ * Import an existing Gateway Target using its attributes
86
+ * This allows you to reference a Gateway Target that was created outside of CDK
87
+ *
88
+ * @param scope The construct scope
89
+ * @param id The construct id
90
+ * @param attrs The attributes of the existing Gateway Target
91
+ * @returns An IGatewayTarget instance representing the imported target
92
+ */
93
+ static fromGatewayTargetAttributes(scope, id, attrs) {
94
+ try {
95
+ jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_GatewayTargetAttributes(attrs);
96
+ }
97
+ catch (error) {
98
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
99
+ Error.captureStackTrace(error, this.fromGatewayTargetAttributes);
100
+ }
101
+ throw error;
102
+ }
103
+ class ImportedGatewayTarget extends target_base_1.GatewayTargetBase {
104
+ targetArn = attrs.targetArn;
105
+ targetId = attrs.targetId;
106
+ name = attrs.gatewayTargetName;
107
+ description = attrs.status;
108
+ gateway = attrs.gateway;
109
+ credentialProviderConfigurations = [];
110
+ targetProtocolType = target_base_1.GatewayTargetProtocolType.MCP;
111
+ status = attrs.status;
112
+ statusReasons = undefined;
113
+ createdAt = attrs.createdAt;
114
+ updatedAt = attrs.updatedAt;
115
+ constructor(s, i) {
116
+ super(s, i);
117
+ }
118
+ }
119
+ return new ImportedGatewayTarget(scope, id);
120
+ }
121
+ /**
122
+ * Create a Lambda-based MCP target
123
+ * Convenience method for creating a target that wraps a Lambda function
124
+ *
125
+ * @param scope The construct scope
126
+ * @param id The construct id
127
+ * @param props The properties for the Lambda target
128
+ * @returns A new GatewayTarget instance
129
+ */
130
+ static forLambda(scope, id, props) {
131
+ try {
132
+ jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_GatewayTargetLambdaProps(props);
133
+ }
134
+ catch (error) {
135
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
136
+ Error.captureStackTrace(error, this.forLambda);
137
+ }
138
+ throw error;
139
+ }
140
+ return new GatewayTarget(scope, id, {
141
+ gateway: props.gateway,
142
+ gatewayTargetName: props.gatewayTargetName,
143
+ description: props.description,
144
+ credentialProviderConfigurations: props.credentialProviderConfigurations,
145
+ targetConfiguration: target_configuration_1.LambdaTargetConfiguration.create(props.lambdaFunction, props.toolSchema),
146
+ });
147
+ }
148
+ /**
149
+ * Create an OpenAPI-based MCP target
150
+ * Convenience method for creating a target that exposes an OpenAPI/REST API
151
+ *
152
+ * @param scope The construct scope
153
+ * @param id The construct id
154
+ * @param props The properties for the OpenAPI target
155
+ * @returns A new GatewayTarget instance
156
+ *
157
+ */
158
+ static forOpenApi(scope, id, props) {
159
+ try {
160
+ jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_GatewayTargetOpenApiProps(props);
161
+ }
162
+ catch (error) {
163
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
164
+ Error.captureStackTrace(error, this.forOpenApi);
165
+ }
166
+ throw error;
167
+ }
168
+ return new GatewayTarget(scope, id, {
169
+ gateway: props.gateway,
170
+ gatewayTargetName: props.gatewayTargetName,
171
+ description: props.description,
172
+ credentialProviderConfigurations: props.credentialProviderConfigurations,
173
+ targetConfiguration: target_configuration_1.OpenApiTargetConfiguration.create(props.apiSchema, props.validateOpenApiSchema),
174
+ });
175
+ }
176
+ /**
177
+ * Create a Smithy-based MCP target
178
+ * Convenience method for creating a target that exposes a Smithy-modeled API
179
+ *
180
+ * @param scope The construct scope
181
+ * @param id The construct id
182
+ * @param props The properties for the Smithy target
183
+ * @returns A new GatewayTarget instance
184
+ */
185
+ static forSmithy(scope, id, props) {
186
+ try {
187
+ jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_GatewayTargetSmithyProps(props);
188
+ }
189
+ catch (error) {
190
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
191
+ Error.captureStackTrace(error, this.forSmithy);
192
+ }
193
+ throw error;
194
+ }
195
+ return new GatewayTarget(scope, id, {
196
+ gateway: props.gateway,
197
+ gatewayTargetName: props.gatewayTargetName,
198
+ description: props.description,
199
+ credentialProviderConfigurations: props.credentialProviderConfigurations,
200
+ targetConfiguration: target_configuration_1.SmithyTargetConfiguration.create(props.smithyModel),
201
+ });
202
+ }
203
+ /**
204
+ * Create an MCP Server-based target
205
+ * Convenience method for creating a target that connects to an external MCP server
206
+ *
207
+ * @param scope The construct scope
208
+ * @param id The construct id
209
+ * @param props The properties for the MCP server target
210
+ * @returns A new GatewayTarget instance
211
+ * @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-target-MCPservers.html
212
+ */
213
+ static forMcpServer(scope, id, props) {
214
+ try {
215
+ jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_GatewayTargetMcpServerProps(props);
216
+ }
217
+ catch (error) {
218
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
219
+ Error.captureStackTrace(error, this.forMcpServer);
220
+ }
221
+ throw error;
222
+ }
223
+ return new GatewayTarget(scope, id, {
224
+ gateway: props.gateway,
225
+ gatewayTargetName: props.gatewayTargetName,
226
+ description: props.description,
227
+ credentialProviderConfigurations: props.credentialProviderConfigurations,
228
+ targetConfiguration: target_configuration_1.McpServerTargetConfiguration.create(props.endpoint),
229
+ });
230
+ }
231
+ /**
232
+ * The ARN of the gateway target
233
+ * @attribute
234
+ */
235
+ targetArn = __runInitializers(this, _instanceExtraInitializers);
236
+ /**
237
+ * The unique identifier of the gateway target
238
+ * @attribute
239
+ */
240
+ targetId;
241
+ /**
242
+ * The name of the gateway target
243
+ */
244
+ name;
245
+ /**
246
+ * Optional description for the gateway target
247
+ */
248
+ description;
249
+ /**
250
+ * The gateway this target belongs to
251
+ */
252
+ gateway;
253
+ /**
254
+ * The credential providers for this target
255
+ */
256
+ credentialProviderConfigurations;
257
+ /**
258
+ * The protocol type (always MCP for now)
259
+ */
260
+ targetProtocolType = target_base_1.GatewayTargetProtocolType.MCP;
261
+ /**
262
+ * The specific MCP target type (Lambda, OpenAPI, Smithy, or MCP Server)
263
+ */
264
+ targetType;
265
+ /**
266
+ * The status of the gateway target
267
+ * @attribute
268
+ */
269
+ status;
270
+ /**
271
+ * The status reasons for the gateway target
272
+ * @attribute
273
+ */
274
+ statusReasons;
275
+ /**
276
+ * Timestamp when the gateway target was created
277
+ * @attribute
278
+ */
279
+ createdAt;
280
+ /**
281
+ * Timestamp when the gateway target was last updated
282
+ * @attribute
283
+ */
284
+ updatedAt;
285
+ targetResource;
286
+ targetConfiguration;
287
+ constructor(scope, id, props) {
288
+ super(scope, id);
289
+ try {
290
+ jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_GatewayTargetProps(props);
291
+ }
292
+ catch (error) {
293
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
294
+ Error.captureStackTrace(error, GatewayTarget);
295
+ }
296
+ throw error;
297
+ }
298
+ // Enhanced CDK Analytics Telemetry
299
+ (0, metadata_resource_1.addConstructMetadata)(this, props);
300
+ // Validate and assign properties
301
+ this.name = props.gatewayTargetName;
302
+ this.validateGatewayTargetName(this.name);
303
+ this.description = props.description;
304
+ if (this.description) {
305
+ this.validateDescription(this.description);
306
+ }
307
+ this.gateway = props.gateway;
308
+ this.targetConfiguration = props.targetConfiguration;
309
+ this.targetType = this.targetConfiguration.targetType;
310
+ // Get target-specific credential configurations
311
+ this.credentialProviderConfigurations = this._getTargetSpecificCredentials(props.credentialProviderConfigurations);
312
+ // Bind the target configuration
313
+ // This sets up permissions and dependencies
314
+ this.targetConfiguration.bind(this, this.gateway);
315
+ // Create the L1 construct
316
+ const cfnProps = {
317
+ gatewayIdentifier: this.gateway.gatewayId,
318
+ name: this.name,
319
+ description: this.description,
320
+ credentialProviderConfigurations: aws_cdk_lib_1.Lazy.any({
321
+ produce: () => this._renderCredentialProviderConfigurations(),
322
+ }),
323
+ targetConfiguration: aws_cdk_lib_1.Lazy.any({
324
+ produce: () => this.targetConfiguration._render(),
325
+ }),
326
+ };
327
+ this.targetResource = new bedrockagentcore.CfnGatewayTarget(this, 'Resource', cfnProps);
328
+ if (this.credentialProviderConfigurations) {
329
+ for (const provider of this.credentialProviderConfigurations) {
330
+ provider
331
+ .grantNeededPermissionsToRole(this.gateway.role)
332
+ ?.applyBefore(this.targetResource);
333
+ }
334
+ }
335
+ this.targetId = this.targetResource.attrTargetId;
336
+ this.targetArn = this.targetResource.ref;
337
+ this.status = this.targetResource.attrStatus;
338
+ this.statusReasons = this.targetResource.attrStatusReasons;
339
+ this.createdAt = this.targetResource.attrCreatedAt;
340
+ this.updatedAt = this.targetResource.attrUpdatedAt;
341
+ }
342
+ /**
343
+ * Grants permission to synchronize this gateway's targets
344
+ *
345
+ * This method grants the `SynchronizeGatewayTargets` permission, which is primarily
346
+ * needed for MCP Server targets when you need to refresh the tool catalog after the
347
+ * MCP server's tools have changed.
348
+ */
349
+ grantSync(grantee) {
350
+ return iam.Grant.addToPrincipal({
351
+ grantee: grantee,
352
+ actions: perms_1.GatewayPerms.SYNC_PERMS,
353
+ resourceArns: [this.gateway.gatewayArn],
354
+ });
355
+ }
356
+ /**
357
+ * Determines the credential provider configurations based on target type
358
+ *
359
+ * - Lambda & Smithy: Default to IAM role if not provided
360
+ * - MCP Server: Return undefined if not provided (service handles NoAuth)
361
+ * - OpenAPI: Return as-is (must be explicitly provided)
362
+ *
363
+ * @param providedCredentials The credentials from props
364
+ * @returns The credential configurations to use, or undefined
365
+ * @internal
366
+ */
367
+ _getTargetSpecificCredentials(providedCredentials) {
368
+ if (providedCredentials && providedCredentials.length > 0) {
369
+ return providedCredentials;
370
+ }
371
+ // Apply target-specific defaults when not provided
372
+ switch (this.targetType) {
373
+ case target_base_1.McpTargetType.LAMBDA:
374
+ case target_base_1.McpTargetType.SMITHY_MODEL:
375
+ return [credential_provider_1.GatewayCredentialProvider.fromIamRole()];
376
+ case target_base_1.McpTargetType.MCP_SERVER:
377
+ // Return empty array, - service handles NoAuth automatically
378
+ return undefined;
379
+ case target_base_1.McpTargetType.OPENAPI_SCHEMA:
380
+ // No default - must be explicitly provided, service handles automatically
381
+ return undefined;
382
+ default:
383
+ return [credential_provider_1.GatewayCredentialProvider.fromIamRole()];
384
+ }
385
+ }
386
+ /**
387
+ * Renders credential provider configurations for CloudFormation
388
+ * @internal
389
+ */
390
+ _renderCredentialProviderConfigurations() {
391
+ return this.credentialProviderConfigurations?.map(provider => provider._render());
392
+ }
393
+ /**
394
+ * Validates the gateway target name format
395
+ * Pattern: ^([0-9a-zA-Z][-]?){1,100}$
396
+ * Max length: 100 characters
397
+ * @param gatewayTargetName The gateway target name to validate
398
+ * @throws Error if the name is invalid
399
+ * @internal
400
+ */
401
+ validateGatewayTargetName(gatewayTargetName) {
402
+ if (aws_cdk_lib_1.Token.isUnresolved(gatewayTargetName)) {
403
+ return;
404
+ }
405
+ const lengthErrors = (0, validation_helpers_1.validateStringField)({
406
+ value: gatewayTargetName,
407
+ fieldName: 'Gateway target name',
408
+ minLength: 1,
409
+ maxLength: 100,
410
+ });
411
+ const patternErrors = (0, validation_helpers_1.validateFieldPattern)(gatewayTargetName, 'Gateway target name', /^([0-9a-zA-Z][-]?){1,100}$/, 'Gateway target name must contain only alphanumeric characters and hyphens, with hyphens only between characters');
412
+ const allErrors = [...lengthErrors, ...patternErrors];
413
+ if (allErrors.length > 0) {
414
+ throw new validation_helpers_1.ValidationError(allErrors.join('\n'));
415
+ }
416
+ }
417
+ /**
418
+ * Validates the description format
419
+ * Must be between 1 and 200 characters
420
+ * @throws Error if validation fails
421
+ * @internal
422
+ */
423
+ validateDescription(description) {
424
+ if (aws_cdk_lib_1.Token.isUnresolved(description)) {
425
+ return;
426
+ }
427
+ const errors = (0, validation_helpers_1.validateStringField)({
428
+ value: description,
429
+ fieldName: 'Gateway target description',
430
+ minLength: 1,
431
+ maxLength: 200,
432
+ });
433
+ if (errors.length > 0) {
434
+ throw new validation_helpers_1.ValidationError(errors.join('\n'));
435
+ }
436
+ }
437
+ static {
438
+ __runInitializers(_classThis, _classExtraInitializers);
439
+ }
440
+ };
441
+ return GatewayTarget = _classThis;
442
+ })();
443
+ exports.GatewayTarget = GatewayTarget;
444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGFyZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUEwQztBQUMxQyxxRUFBcUU7QUFDckUsMkNBQTJDO0FBRTNDLDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFHMUUsb0NBQXdDO0FBR3hDLCtDQUErSDtBQUMvSCxpRUFBOEs7QUFDOUssOEVBQTRHO0FBQzVHLDhEQUFtRztBQXNNbkc7OytFQUUrRTtBQUUvRTs7Ozs7Ozs7O0dBU0c7SUFFVSxhQUFhOzRCQUR6QixvQ0FBa0I7Ozs7c0JBQ2dCLCtCQUFpQjs7OzZCQUF6QixTQUFRLFdBQWlCOzs7O3FDQWlSakQsSUFBQSxrQ0FBYyxHQUFFO1lBQ2pCLDhLQUFPLFNBQVMsNkRBTWY7WUF4UkgsNktBNlhDOzs7OztRQTVYQyxzQ0FBc0M7UUFDL0IsTUFBTSxDQUFVLHFCQUFxQixHQUFXLG9EQUFvRCxDQUFDO1FBQzVHOzs7Ozs7OztXQVFHO1FBQ0ksTUFBTSxDQUFDLDJCQUEyQixDQUN2QyxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBOEI7Ozs7Ozs7Ozs7WUFFOUIsTUFBTSxxQkFBc0IsU0FBUSwrQkFBaUI7Z0JBQ25DLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUM1QixRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDMUIsSUFBSSxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztnQkFDL0IsV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQzNCLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUN4QixnQ0FBZ0MsR0FBRyxFQUFFLENBQUM7Z0JBQ3RDLGtCQUFrQixHQUFHLHVDQUF5QixDQUFDLEdBQUcsQ0FBQztnQkFDbkQsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQ3RCLGFBQWEsR0FB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RSw0QkFBNEI7Z0JBQ3ZDLFNBQVMsRUFBRSxDQUFDO2dCQUNaLFNBQVMsRUFBRSxHQUFHO2FBQ2YsQ0FBQyxDQUFDO1lBRUgsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0QixNQUFNLElBQUksb0NBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDL0MsQ0FBQztTQUNGOztZQTVYVSx1REFBYTs7Ozs7QUFBYixzQ0FBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExhenksIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYmVkcm9ja2FnZW50Y29yZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBJRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElHYXRld2F5IH0gZnJvbSAnLi4vZ2F0ZXdheS1iYXNlJztcbmltcG9ydCB7IEdhdGV3YXlQZXJtcyB9IGZyb20gJy4uL3Blcm1zJztcbmltcG9ydCB7IEFwaVNjaGVtYSB9IGZyb20gJy4vc2NoZW1hL2FwaS1zY2hlbWEnO1xuaW1wb3J0IHsgVG9vbFNjaGVtYSB9IGZyb20gJy4vc2NoZW1hL3Rvb2wtc2NoZW1hJztcbmltcG9ydCB7IEdhdGV3YXlUYXJnZXRCYXNlLCBHYXRld2F5VGFyZ2V0UHJvdG9jb2xUeXBlLCBJR2F0ZXdheVRhcmdldCwgSU1jcEdhdGV3YXlUYXJnZXQsIE1jcFRhcmdldFR5cGUgfSBmcm9tICcuL3RhcmdldC1iYXNlJztcbmltcG9ydCB7IElUYXJnZXRDb25maWd1cmF0aW9uLCBMYW1iZGFUYXJnZXRDb25maWd1cmF0aW9uLCBNY3BTZXJ2ZXJUYXJnZXRDb25maWd1cmF0aW9uLCBPcGVuQXBpVGFyZ2V0Q29uZmlndXJhdGlvbiwgU21pdGh5VGFyZ2V0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vdGFyZ2V0LWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgR2F0ZXdheUNyZWRlbnRpYWxQcm92aWRlciwgSUNyZWRlbnRpYWxQcm92aWRlckNvbmZpZyB9IGZyb20gJy4uL291dGJvdW5kLWF1dGgvY3JlZGVudGlhbC1wcm92aWRlcic7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZ0ZpZWxkLCB2YWxpZGF0ZUZpZWxkUGF0dGVybiwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi1oZWxwZXJzJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3BzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogQ29tbW9uIHByb3BlcnRpZXMgZm9yIGFsbCBHYXRld2F5IFRhcmdldCB0eXBlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEdhdGV3YXlUYXJnZXRDb21tb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSBnYXRld2F5XG4gICAqIFBhdHRlcm46IF4oWzAtOWEtekEtWl1bLV0/KXsxLDEwMH0kXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5VGFyZ2V0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIFRoZSBkZXNjcmlwdGlvbiBjYW4gaGF2ZSB1cCB0byAyMDAgY2hhcmFjdGVyc1xuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIEdhdGV3YXkgVGFyZ2V0IHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheVRhcmdldFByb3BzIGV4dGVuZHMgR2F0ZXdheVRhcmdldENvbW1vblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHRoaXMgdGFyZ2V0IGJlbG9uZ3MgdG9cbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXk6IElHYXRld2F5O1xuXG4gIC8qKlxuICAgKiBUaGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gKExhbWJkYSwgT3BlbkFQSSwgb3IgU21pdGh5KVxuICAgKiBVc2Ugb25lIG9mIHRoZSBjb25maWd1cmF0aW9uIGhlbHBlciBjbGFzc2VzOlxuICAgKiAtIExhbWJkYVRhcmdldENvbmZpZ3VyYXRpb24uY3JlYXRlKClcbiAgICogLSBPcGVuQXBpVGFyZ2V0Q29uZmlndXJhdGlvbi5jcmVhdGUoKVxuICAgKiAtIFNtaXRoeVRhcmdldENvbmZpZ3VyYXRpb24uY3JlYXRlKClcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldENvbmZpZ3VyYXRpb246IElUYXJnZXRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDcmVkZW50aWFsIHByb3ZpZGVycyBmb3IgYXV0aGVudGljYXRpb25cbiAgICogQGRlZmF1bHQgLSBbR2F0ZXdheUNyZWRlbnRpYWxQcm92aWRlci5mcm9tSWFtUm9sZSgpXVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM/OiBJQ3JlZGVudGlhbFByb3ZpZGVyQ29uZmlnW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBMYW1iZGEtYmFzZWQgR2F0ZXdheSBUYXJnZXRcbiAqIENvbnZlbmllbmNlIGludGVyZmFjZSBmb3IgdGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheVRhcmdldExhbWJkYVByb3BzIGV4dGVuZHMgR2F0ZXdheVRhcmdldENvbW1vblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHRoaXMgdGFyZ2V0IGJlbG9uZ3MgdG9cbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXk6IElHYXRld2F5O1xuXG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgdGFyZ2V0XG4gICAqL1xuICByZWFkb25seSBsYW1iZGFGdW5jdGlvbjogSUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdG9vbCBzY2hlbWEgZGVmaW5pbmcgdGhlIGF2YWlsYWJsZSB0b29sc1xuICAgKi9cbiAgcmVhZG9ubHkgdG9vbFNjaGVtYTogVG9vbFNjaGVtYTtcblxuICAvKipcbiAgICogQ3JlZGVudGlhbCBwcm92aWRlcnMgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAqIExhbWJkYSB0YXJnZXRzIG9ubHkgc3VwcG9ydCBJQU0gcm9sZSBhdXRoZW50aWNhdGlvblxuICAgKiBAZGVmYXVsdCAtIFtHYXRld2F5Q3JlZGVudGlhbFByb3ZpZGVyLmZyb21JYW1Sb2xlKCldXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucz86IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBPcGVuQVBJLWJhc2VkIEdhdGV3YXkgVGFyZ2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheVRhcmdldE9wZW5BcGlQcm9wcyBleHRlbmRzIEdhdGV3YXlUYXJnZXRDb21tb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSB0aGlzIHRhcmdldCBiZWxvbmdzIHRvXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5OiBJR2F0ZXdheTtcblxuICAvKipcbiAgICogVGhlIE9wZW5BUEkgc2NoZW1hIGRlZmluaW5nIHRoZSBBUElcbiAgICovXG4gIHJlYWRvbmx5IGFwaVNjaGVtYTogQXBpU2NoZW1hO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBPcGVuQVBJIHNjaGVtYSAob25seSBhcHBsaWVzIHRvIGlubGluZSBzY2hlbWFzKVxuICAgKiBOb3RlOiBWYWxpZGF0aW9uIGlzIG9ubHkgcGVyZm9ybWVkIGZvciBpbmxpbmUgc2NoZW1hcyBkdXJpbmcgQ0RLIHN5bnRoZXNpcy5cbiAgICogUzMgYW5kIGFzc2V0LWJhc2VkIHNjaGVtYXMgY2Fubm90IGJlIHZhbGlkYXRlZCBhdCBzeW50aGVzaXMgdGltZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRhdGVPcGVuQXBpU2NoZW1hPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3JlZGVudGlhbCBwcm92aWRlcnMgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAqIE9wZW5BUEkgdGFyZ2V0cyBzdXBwb3J0IEFQSSBrZXkgYW5kIE9BdXRoIGF1dGhlbnRpY2F0aW9uIChub3QgSUFNKVxuICAgKiBAZGVmYXVsdDogSWYgbm90IHByb3ZpZGVkLCBkZWZhdWx0cyB0byBJQU0gcm9sZSB3aGljaCB3aWxsIGZhaWwgYXQgcnVudGltZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM/OiBJQ3JlZGVudGlhbFByb3ZpZGVyQ29uZmlnW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBTbWl0aHktYmFzZWQgR2F0ZXdheSBUYXJnZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHYXRld2F5VGFyZ2V0U21pdGh5UHJvcHMgZXh0ZW5kcyBHYXRld2F5VGFyZ2V0Q29tbW9uUHJvcHMge1xuICAvKipcbiAgICogVGhlIGdhdGV3YXkgdGhpcyB0YXJnZXQgYmVsb25ncyB0b1xuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheTogSUdhdGV3YXk7XG5cbiAgLyoqXG4gICAqIFRoZSBTbWl0aHkgbW9kZWwgZGVmaW5pbmcgdGhlIEFQSVxuICAgKi9cbiAgcmVhZG9ubHkgc21pdGh5TW9kZWw6IEFwaVNjaGVtYTtcblxuICAvKipcbiAgICogQ3JlZGVudGlhbCBwcm92aWRlcnMgZm9yIGF1dGhlbnRpY2F0aW9uXG4gICAqIFNtaXRoeSB0YXJnZXRzIG9ubHkgc3VwcG9ydCBJQU0gcm9sZSBhdXRoZW50aWNhdGlvblxuICAgKiBAZGVmYXVsdCAtIFtHYXRld2F5Q3JlZGVudGlhbFByb3ZpZGVyLmZyb21JYW1Sb2xlKCldXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucz86IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBNQ1AgU2VydmVyLWJhc2VkIEdhdGV3YXkgVGFyZ2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheVRhcmdldE1jcFNlcnZlclByb3BzIGV4dGVuZHMgR2F0ZXdheVRhcmdldENvbW1vblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHRoaXMgdGFyZ2V0IGJlbG9uZ3MgdG9cbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXk6IElHYXRld2F5O1xuXG4gIC8qKlxuICAgKiBUaGUgSFRUUFMgZW5kcG9pbnQgVVJMIG9mIHRoZSBNQ1Agc2VydmVyXG4gICAqXG4gICAqIFRoZSBlbmRwb2ludCBtdXN0OlxuICAgKiAtIFVzZSBIVFRQUyBwcm90b2NvbFxuICAgKiAtIEJlIHByb3Blcmx5IFVSTC1lbmNvZGVkXG4gICAqIC0gUG9pbnQgdG8gYW4gTUNQIHNlcnZlciB0aGF0IGltcGxlbWVudHMgdG9vbCBjYXBhYmlsaXRpZXNcbiAgICovXG4gIHJlYWRvbmx5IGVuZHBvaW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWRlbnRpYWwgcHJvdmlkZXJzIGZvciBhdXRoZW50aWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXTtcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBpbXBvcnRpbmcgYW4gZXhpc3RpbmcgR2F0ZXdheSBUYXJnZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHYXRld2F5VGFyZ2V0QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBnYXRld2F5IHRhcmdldFxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheVRhcmdldE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgdGhpcyB0YXJnZXQgYmVsb25ncyB0b1xuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheTogSUdhdGV3YXk7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHN0YXR1cyBvZiB0aGUgdGFyZ2V0XG4gICAqIEBkZWZhdWx0IC0gTm8gc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNyZWF0aW9uIHRpbWVzdGFtcFxuICAgKiBAZGVmYXVsdCAtIE5vIGNyZWF0aW9uIHRpbWVzdGFtcFxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBsYXN0IHVwZGF0ZSB0aW1lc3RhbXBcbiAgICogQGRlZmF1bHQgLSBObyB1cGRhdGUgdGltZXN0YW1wXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqXG4gKiBEZWZpbmVzIHRvb2xzIHRoYXQgeW91ciBnYXRld2F5IHdpbGwgaG9zdC4gU3VwcG9ydHMgbXVsdGlwbGUgdGFyZ2V0IHR5cGVzOlxuICogLSBMYW1iZGE6IFdyYXBzIGEgTGFtYmRhIGZ1bmN0aW9uIGFzIE1DUCB0b29sc1xuICogLSBPcGVuQVBJOiBFeHBvc2VzIGFuIE9wZW5BUEkvUkVTVCBBUEkgYXMgTUNQIHRvb2xzXG4gKiAtIFNtaXRoeTogRXhwb3NlcyBhIFNtaXRoeS1tb2RlbGVkIEFQSSBhcyBNQ1AgdG9vbHNcbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpHYXRld2F5VGFyZ2V0XG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvZ2F0ZXdheS1idWlsZGluZy1hZGRpbmctdGFyZ2V0cy5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBHYXRld2F5VGFyZ2V0IGV4dGVuZHMgR2F0ZXdheVRhcmdldEJhc2UgaW1wbGVtZW50cyBJTWNwR2F0ZXdheVRhcmdldCB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhLkdhdGV3YXlUYXJnZXQnO1xuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIEdhdGV3YXkgVGFyZ2V0IHVzaW5nIGl0cyBhdHRyaWJ1dGVzXG4gICAqIFRoaXMgYWxsb3dzIHlvdSB0byByZWZlcmVuY2UgYSBHYXRld2F5IFRhcmdldCB0aGF0IHdhcyBjcmVhdGVkIG91dHNpZGUgb2YgQ0RLXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlcyBvZiB0aGUgZXhpc3RpbmcgR2F0ZXdheSBUYXJnZXRcbiAgICogQHJldHVybnMgQW4gSUdhdGV3YXlUYXJnZXQgaW5zdGFuY2UgcmVwcmVzZW50aW5nIHRoZSBpbXBvcnRlZCB0YXJnZXRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUdhdGV3YXlUYXJnZXRBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogR2F0ZXdheVRhcmdldEF0dHJpYnV0ZXMsXG4gICk6IElHYXRld2F5VGFyZ2V0IHtcbiAgICBjbGFzcyBJbXBvcnRlZEdhdGV3YXlUYXJnZXQgZXh0ZW5kcyBHYXRld2F5VGFyZ2V0QmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0QXJuID0gYXR0cnMudGFyZ2V0QXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHRhcmdldElkID0gYXR0cnMudGFyZ2V0SWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZSA9IGF0dHJzLmdhdGV3YXlUYXJnZXROYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uID0gYXR0cnMuc3RhdHVzO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdhdGV3YXkgPSBhdHRycy5nYXRld2F5O1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zID0gW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0UHJvdG9jb2xUeXBlID0gR2F0ZXdheVRhcmdldFByb3RvY29sVHlwZS5NQ1A7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzID0gYXR0cnMuc3RhdHVzO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHN0YXR1c1JlYXNvbnMgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0ID0gYXR0cnMuY3JlYXRlZEF0O1xuICAgICAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdCA9IGF0dHJzLnVwZGF0ZWRBdDtcblxuICAgICAgY29uc3RydWN0b3IoczogQ29uc3RydWN0LCBpOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIocywgaSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRHYXRld2F5VGFyZ2V0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgTGFtYmRhLWJhc2VkIE1DUCB0YXJnZXRcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBjcmVhdGluZyBhIHRhcmdldCB0aGF0IHdyYXBzIGEgTGFtYmRhIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcGVydGllcyBmb3IgdGhlIExhbWJkYSB0YXJnZXRcbiAgICogQHJldHVybnMgQSBuZXcgR2F0ZXdheVRhcmdldCBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmb3JMYW1iZGEoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBHYXRld2F5VGFyZ2V0TGFtYmRhUHJvcHMsXG4gICk6IEdhdGV3YXlUYXJnZXQge1xuICAgIHJldHVybiBuZXcgR2F0ZXdheVRhcmdldChzY29wZSwgaWQsIHtcbiAgICAgIGdhdGV3YXk6IHByb3BzLmdhdGV3YXksXG4gICAgICBnYXRld2F5VGFyZ2V0TmFtZTogcHJvcHMuZ2F0ZXdheVRhcmdldE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBjcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9uczogcHJvcHMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMsXG4gICAgICB0YXJnZXRDb25maWd1cmF0aW9uOiBMYW1iZGFUYXJnZXRDb25maWd1cmF0aW9uLmNyZWF0ZShcbiAgICAgICAgcHJvcHMubGFtYmRhRnVuY3Rpb24sXG4gICAgICAgIHByb3BzLnRvb2xTY2hlbWEsXG4gICAgICApLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBPcGVuQVBJLWJhc2VkIE1DUCB0YXJnZXRcbiAgICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBjcmVhdGluZyBhIHRhcmdldCB0aGF0IGV4cG9zZXMgYW4gT3BlbkFQSS9SRVNUIEFQSVxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBPcGVuQVBJIHRhcmdldFxuICAgKiBAcmV0dXJucyBBIG5ldyBHYXRld2F5VGFyZ2V0IGluc3RhbmNlXG4gICAqXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZvck9wZW5BcGkoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBHYXRld2F5VGFyZ2V0T3BlbkFwaVByb3BzLFxuICApOiBHYXRld2F5VGFyZ2V0IHtcbiAgICByZXR1cm4gbmV3IEdhdGV3YXlUYXJnZXQoc2NvcGUsIGlkLCB7XG4gICAgICBnYXRld2F5OiBwcm9wcy5nYXRld2F5LFxuICAgICAgZ2F0ZXdheVRhcmdldE5hbWU6IHByb3BzLmdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zLFxuICAgICAgdGFyZ2V0Q29uZmlndXJhdGlvbjogT3BlbkFwaVRhcmdldENvbmZpZ3VyYXRpb24uY3JlYXRlKHByb3BzLmFwaVNjaGVtYSwgcHJvcHMudmFsaWRhdGVPcGVuQXBpU2NoZW1hKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBTbWl0aHktYmFzZWQgTUNQIHRhcmdldFxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGNyZWF0aW5nIGEgdGFyZ2V0IHRoYXQgZXhwb3NlcyBhIFNtaXRoeS1tb2RlbGVkIEFQSVxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBTbWl0aHkgdGFyZ2V0XG4gICAqIEByZXR1cm5zIEEgbmV3IEdhdGV3YXlUYXJnZXQgaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZm9yU21pdGh5KFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogR2F0ZXdheVRhcmdldFNtaXRoeVByb3BzLFxuICApOiBHYXRld2F5VGFyZ2V0IHtcbiAgICByZXR1cm4gbmV3IEdhdGV3YXlUYXJnZXQoc2NvcGUsIGlkLCB7XG4gICAgICBnYXRld2F5OiBwcm9wcy5nYXRld2F5LFxuICAgICAgZ2F0ZXdheVRhcmdldE5hbWU6IHByb3BzLmdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zLFxuICAgICAgdGFyZ2V0Q29uZmlndXJhdGlvbjogU21pdGh5VGFyZ2V0Q29uZmlndXJhdGlvbi5jcmVhdGUocHJvcHMuc21pdGh5TW9kZWwpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBNQ1AgU2VydmVyLWJhc2VkIHRhcmdldFxuICAgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGNyZWF0aW5nIGEgdGFyZ2V0IHRoYXQgY29ubmVjdHMgdG8gYW4gZXh0ZXJuYWwgTUNQIHNlcnZlclxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBNQ1Agc2VydmVyIHRhcmdldFxuICAgKiBAcmV0dXJucyBBIG5ldyBHYXRld2F5VGFyZ2V0IGluc3RhbmNlXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9nYXRld2F5LXRhcmdldC1NQ1BzZXJ2ZXJzLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZm9yTWNwU2VydmVyKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogR2F0ZXdheVRhcmdldE1jcFNlcnZlclByb3BzLFxuICApOiBHYXRld2F5VGFyZ2V0IHtcbiAgICByZXR1cm4gbmV3IEdhdGV3YXlUYXJnZXQoc2NvcGUsIGlkLCB7XG4gICAgICBnYXRld2F5OiBwcm9wcy5nYXRld2F5LFxuICAgICAgZ2F0ZXdheVRhcmdldE5hbWU6IHByb3BzLmdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zLFxuICAgICAgdGFyZ2V0Q29uZmlndXJhdGlvbjogTWNwU2VydmVyVGFyZ2V0Q29uZmlndXJhdGlvbi5jcmVhdGUocHJvcHMuZW5kcG9pbnQpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXRBcm47XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldElkO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHRoaXMgdGFyZ2V0IGJlbG9uZ3MgdG9cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBnYXRld2F5O1xuXG4gIC8qKlxuICAgKiBUaGUgY3JlZGVudGlhbCBwcm92aWRlcnMgZm9yIHRoaXMgdGFyZ2V0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnM6IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIHByb3RvY29sIHR5cGUgKGFsd2F5cyBNQ1AgZm9yIG5vdylcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXRQcm90b2NvbFR5cGUgPSBHYXRld2F5VGFyZ2V0UHJvdG9jb2xUeXBlLk1DUDtcblxuICAvKipcbiAgICogVGhlIHNwZWNpZmljIE1DUCB0YXJnZXQgdHlwZSAoTGFtYmRhLCBPcGVuQVBJLCBTbWl0aHksIG9yIE1DUCBTZXJ2ZXIpXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0VHlwZTogTWNwVGFyZ2V0VHlwZTtcblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgZ2F0ZXdheSB0YXJnZXRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1cz87XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgcmVhc29ucyBmb3IgdGhlIGdhdGV3YXkgdGFyZ2V0XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXNSZWFzb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB3aGVuIHRoZSBnYXRld2F5IHRhcmdldCB3YXMgY3JlYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0PztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIGdhdGV3YXkgdGFyZ2V0IHdhcyBsYXN0IHVwZGF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdD87XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRSZXNvdXJjZTogYmVkcm9ja2FnZW50Y29yZS5DZm5HYXRld2F5VGFyZ2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldENvbmZpZ3VyYXRpb246IElUYXJnZXRDb25maWd1cmF0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBHYXRld2F5VGFyZ2V0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgLy8gVmFsaWRhdGUgYW5kIGFzc2lnbiBwcm9wZXJ0aWVzXG4gICAgdGhpcy5uYW1lID0gcHJvcHMuZ2F0ZXdheVRhcmdldE5hbWU7XG4gICAgdGhpcy52YWxpZGF0ZUdhdGV3YXlUYXJnZXROYW1lKHRoaXMubmFtZSk7XG5cbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudmFsaWRhdGVEZXNjcmlwdGlvbih0aGlzLmRlc2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmdhdGV3YXkgPSBwcm9wcy5nYXRld2F5O1xuICAgIHRoaXMudGFyZ2V0Q29uZmlndXJhdGlvbiA9IHByb3BzLnRhcmdldENvbmZpZ3VyYXRpb247XG4gICAgdGhpcy50YXJnZXRUeXBlID0gdGhpcy50YXJnZXRDb25maWd1cmF0aW9uLnRhcmdldFR5cGU7XG5cbiAgICAvLyBHZXQgdGFyZ2V0LXNwZWNpZmljIGNyZWRlbnRpYWwgY29uZmlndXJhdGlvbnNcbiAgICB0aGlzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zID0gdGhpcy5fZ2V0VGFyZ2V0U3BlY2lmaWNDcmVkZW50aWFscyhcbiAgICAgIHByb3BzLmNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zLFxuICAgICk7XG5cbiAgICAvLyBCaW5kIHRoZSB0YXJnZXQgY29uZmlndXJhdGlvblxuICAgIC8vIFRoaXMgc2V0cyB1cCBwZXJtaXNzaW9ucyBhbmQgZGVwZW5kZW5jaWVzXG4gICAgdGhpcy50YXJnZXRDb25maWd1cmF0aW9uLmJpbmQodGhpcywgdGhpcy5nYXRld2F5KTtcblxuICAgIC8vIENyZWF0ZSB0aGUgTDEgY29uc3RydWN0XG4gICAgY29uc3QgY2ZuUHJvcHM6IGJlZHJvY2thZ2VudGNvcmUuQ2ZuR2F0ZXdheVRhcmdldFByb3BzID0ge1xuICAgICAgZ2F0ZXdheUlkZW50aWZpZXI6IHRoaXMuZ2F0ZXdheS5nYXRld2F5SWQsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIGNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zOiBMYXp5LmFueSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMuX3JlbmRlckNyZWRlbnRpYWxQcm92aWRlckNvbmZpZ3VyYXRpb25zKCksXG4gICAgICB9KSxcblxuICAgICAgdGFyZ2V0Q29uZmlndXJhdGlvbjogTGF6eS5hbnkoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLnRhcmdldENvbmZpZ3VyYXRpb24uX3JlbmRlcigpLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIHRoaXMudGFyZ2V0UmVzb3VyY2UgPSBuZXcgYmVkcm9ja2FnZW50Y29yZS5DZm5HYXRld2F5VGFyZ2V0KFxuICAgICAgdGhpcyxcbiAgICAgICdSZXNvdXJjZScsXG4gICAgICBjZm5Qcm9wcyxcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuY3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgcHJvdmlkZXIgb2YgdGhpcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucykge1xuICAgICAgICBwcm92aWRlclxuICAgICAgICAgIC5ncmFudE5lZWRlZFBlcm1pc3Npb25zVG9Sb2xlKHRoaXMuZ2F0ZXdheS5yb2xlKVxuICAgICAgICAgID8uYXBwbHlCZWZvcmUodGhpcy50YXJnZXRSZXNvdXJjZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy50YXJnZXRJZCA9IHRoaXMudGFyZ2V0UmVzb3VyY2UuYXR0clRhcmdldElkO1xuICAgIHRoaXMudGFyZ2V0QXJuID0gdGhpcy50YXJnZXRSZXNvdXJjZS5yZWY7XG4gICAgdGhpcy5zdGF0dXMgPSB0aGlzLnRhcmdldFJlc291cmNlLmF0dHJTdGF0dXM7XG4gICAgdGhpcy5zdGF0dXNSZWFzb25zID0gdGhpcy50YXJnZXRSZXNvdXJjZS5hdHRyU3RhdHVzUmVhc29ucztcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHRoaXMudGFyZ2V0UmVzb3VyY2UuYXR0ckNyZWF0ZWRBdDtcbiAgICB0aGlzLnVwZGF0ZWRBdCA9IHRoaXMudGFyZ2V0UmVzb3VyY2UuYXR0clVwZGF0ZWRBdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzeW5jaHJvbml6ZSB0aGlzIGdhdGV3YXkncyB0YXJnZXRzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGdyYW50cyB0aGUgYFN5bmNocm9uaXplR2F0ZXdheVRhcmdldHNgIHBlcm1pc3Npb24sIHdoaWNoIGlzIHByaW1hcmlseVxuICAgKiBuZWVkZWQgZm9yIE1DUCBTZXJ2ZXIgdGFyZ2V0cyB3aGVuIHlvdSBuZWVkIHRvIHJlZnJlc2ggdGhlIHRvb2wgY2F0YWxvZyBhZnRlciB0aGVcbiAgICogTUNQIHNlcnZlcidzIHRvb2xzIGhhdmUgY2hhbmdlZC5cbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBncmFudFN5bmMoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZTogZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnM6IEdhdGV3YXlQZXJtcy5TWU5DX1BFUk1TLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5nYXRld2F5LmdhdGV3YXlBcm5dLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgY29uZmlndXJhdGlvbnMgYmFzZWQgb24gdGFyZ2V0IHR5cGVcbiAgICpcbiAgICogLSBMYW1iZGEgJiBTbWl0aHk6IERlZmF1bHQgdG8gSUFNIHJvbGUgaWYgbm90IHByb3ZpZGVkXG4gICAqIC0gTUNQIFNlcnZlcjogUmV0dXJuIHVuZGVmaW5lZCBpZiBub3QgcHJvdmlkZWQgKHNlcnZpY2UgaGFuZGxlcyBOb0F1dGgpXG4gICAqIC0gT3BlbkFQSTogUmV0dXJuIGFzLWlzIChtdXN0IGJlIGV4cGxpY2l0bHkgcHJvdmlkZWQpXG4gICAqXG4gICAqIEBwYXJhbSBwcm92aWRlZENyZWRlbnRpYWxzIFRoZSBjcmVkZW50aWFscyBmcm9tIHByb3BzXG4gICAqIEByZXR1cm5zIFRoZSBjcmVkZW50aWFsIGNvbmZpZ3VyYXRpb25zIHRvIHVzZSwgb3IgdW5kZWZpbmVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0VGFyZ2V0U3BlY2lmaWNDcmVkZW50aWFscyhcbiAgICBwcm92aWRlZENyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbFByb3ZpZGVyQ29uZmlnW10gfCB1bmRlZmluZWQsXG4gICk6IElDcmVkZW50aWFsUHJvdmlkZXJDb25maWdbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHByb3ZpZGVkQ3JlZGVudGlhbHMgJiYgcHJvdmlkZWRDcmVkZW50aWFscy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gcHJvdmlkZWRDcmVkZW50aWFscztcbiAgICB9XG4gICAgLy8gQXBwbHkgdGFyZ2V0LXNwZWNpZmljIGRlZmF1bHRzIHdoZW4gbm90IHByb3ZpZGVkXG4gICAgc3dpdGNoICh0aGlzLnRhcmdldFR5cGUpIHtcbiAgICAgIGNhc2UgTWNwVGFyZ2V0VHlwZS5MQU1CREE6XG4gICAgICBjYXNlIE1jcFRhcmdldFR5cGUuU01JVEhZX01PREVMOlxuICAgICAgICByZXR1cm4gW0dhdGV3YXlDcmVkZW50aWFsUHJvdmlkZXIuZnJvbUlhbVJvbGUoKV07XG5cbiAgICAgIGNhc2UgTWNwVGFyZ2V0VHlwZS5NQ1BfU0VSVkVSOlxuICAgICAgICAvLyBSZXR1cm4gZW1wdHkgYXJyYXksIC0gc2VydmljZSBoYW5kbGVzIE5vQXV0aCBhdXRvbWF0aWNhbGx5XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgIGNhc2UgTWNwVGFyZ2V0VHlwZS5PUEVOQVBJX1NDSEVNQTpcbiAgICAgICAgLy8gTm8gZGVmYXVsdCAtIG11c3QgYmUgZXhwbGljaXRseSBwcm92aWRlZCwgc2VydmljZSBoYW5kbGVzIGF1dG9tYXRpY2FsbHlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtHYXRld2F5Q3JlZGVudGlhbFByb3ZpZGVyLmZyb21JYW1Sb2xlKCldO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGNyZWRlbnRpYWwgcHJvdmlkZXIgY29uZmlndXJhdGlvbnMgZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyQ3JlZGVudGlhbFByb3ZpZGVyQ29uZmlndXJhdGlvbnMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jcmVkZW50aWFsUHJvdmlkZXJDb25maWd1cmF0aW9ucz8ubWFwKHByb3ZpZGVyID0+IHByb3ZpZGVyLl9yZW5kZXIoKSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBnYXRld2F5IHRhcmdldCBuYW1lIGZvcm1hdFxuICAgKiBQYXR0ZXJuOiBeKFswLTlhLXpBLVpdWy1dPyl7MSwxMDB9JFxuICAgKiBNYXggbGVuZ3RoOiAxMDAgY2hhcmFjdGVyc1xuICAgKiBAcGFyYW0gZ2F0ZXdheVRhcmdldE5hbWUgVGhlIGdhdGV3YXkgdGFyZ2V0IG5hbWUgdG8gdmFsaWRhdGVcbiAgICogQHRocm93cyBFcnJvciBpZiB0aGUgbmFtZSBpcyBpbnZhbGlkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUdhdGV3YXlUYXJnZXROYW1lKGdhdGV3YXlUYXJnZXROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGdhdGV3YXlUYXJnZXROYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgdmFsdWU6IGdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgZmllbGROYW1lOiAnR2F0ZXdheSB0YXJnZXQgbmFtZScsXG4gICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICBtYXhMZW5ndGg6IDEwMCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBhdHRlcm5FcnJvcnMgPSB2YWxpZGF0ZUZpZWxkUGF0dGVybihcbiAgICAgIGdhdGV3YXlUYXJnZXROYW1lLFxuICAgICAgJ0dhdGV3YXkgdGFyZ2V0IG5hbWUnLFxuICAgICAgL14oWzAtOWEtekEtWl1bLV0/KXsxLDEwMH0kLyxcbiAgICAgICdHYXRld2F5IHRhcmdldCBuYW1lIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBoeXBoZW5zLCB3aXRoIGh5cGhlbnMgb25seSBiZXR3ZWVuIGNoYXJhY3RlcnMnLFxuICAgICk7XG5cbiAgICBjb25zdCBhbGxFcnJvcnMgPSBbLi4ubGVuZ3RoRXJyb3JzLCAuLi5wYXR0ZXJuRXJyb3JzXTtcbiAgICBpZiAoYWxsRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYWxsRXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBkZXNjcmlwdGlvbiBmb3JtYXRcbiAgICogTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDIwMCBjaGFyYWN0ZXJzXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChkZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgIHZhbHVlOiBkZXNjcmlwdGlvbixcbiAgICAgIGZpZWxkTmFtZTogJ0dhdGV3YXkgdGFyZ2V0IGRlc2NyaXB0aW9uJyxcbiAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgIG1heExlbmd0aDogMjAwLFxuICAgIH0pO1xuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Error thrown when validation fails
3
+ * @internal
4
+ */
5
+ export declare class ValidationError extends Error {
6
+ constructor(message: string);
7
+ }
8
+ interface IntervalValidation {
9
+ fieldName: string;
10
+ minLength: number;
11
+ maxLength: number;
12
+ }
13
+ interface StringLengthValidation extends IntervalValidation {
14
+ value: string;
15
+ }
16
+ /**
17
+ * Validates the length of a string field against minimum and maximum constraints.
18
+ * @param value - The string value to validate
19
+ * @param fieldName - Name of the field being validated (for error messages)
20
+ * @param minLength - Minimum allowed length (defaults to 0)
21
+ * @param maxLength - Maximum allowed length
22
+ * @returns true if validation passes
23
+ * @throws Error if validation fails with current length information
24
+ * @internal
25
+ */
26
+ export declare function validateStringField(params: StringLengthValidation): string[];
27
+ /**
28
+ * Validates a string field against a regex pattern.
29
+ * @param value - The string value to validate
30
+ * @param fieldName - Name of the field being validated (for error messages)
31
+ * @param pattern - Regular expression pattern to test against
32
+ * @param customMessage - Optional custom error message
33
+ * @returns true if validation passes
34
+ * @throws Error if validation fails with detailed message
35
+ * @internal
36
+ */
37
+ export declare function validateFieldPattern(value: string, fieldName: string, pattern: RegExp, customMessage?: string): string[];
38
+ /**
39
+ * @internal
40
+ */
41
+ export type ValidationFn<T> = (param: T) => string[];
42
+ /**
43
+ * OpenAPI schema validation parameters
44
+ * @internal
45
+ */
46
+ export interface OpenApiSchemaValidationParams {
47
+ /**
48
+ * The OpenAPI schema to validate (as a string)
49
+ */
50
+ schema: string;
51
+ /**
52
+ * Optional name for the schema (for error messages)
53
+ */
54
+ schemaName?: string;
55
+ }
56
+ /**
57
+ * Validates an OpenAPI schema against Gateway requirements
58
+ * Based on AWS documentation: https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-schema-openapi.html
59
+ *
60
+ * @param params - The validation parameters
61
+ * @returns Array of validation error messages (empty if valid)
62
+ * @internal
63
+ */
64
+ export declare function validateOpenApiSchema(params: OpenApiSchemaValidationParams): string[];
65
+ export {};