@aws-cdk/aws-bedrock-agentcore-alpha 2.232.2-alpha.0 → 2.233.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.
- package/.jsii +9 -9
- package/.jsii.tabl.json.gz +0 -0
- package/lib/gateway/gateway-base.js +1 -1
- package/lib/gateway/gateway.js +1 -1
- package/lib/gateway/inbound-auth/authorizer.js +3 -3
- package/lib/gateway/outbound-auth/api-key.js +1 -1
- package/lib/gateway/outbound-auth/credential-provider.js +1 -1
- package/lib/gateway/protocol.js +2 -2
- package/lib/gateway/targets/schema/api-schema.js +4 -4
- package/lib/gateway/targets/schema/tool-schema.js +4 -4
- package/lib/gateway/targets/target-base.js +1 -1
- package/lib/gateway/targets/target-configuration.js +5 -5
- package/lib/gateway/targets/target.js +1 -1
- package/lib/memory/memory-strategy.js +1 -1
- package/lib/memory/memory.js +2 -2
- package/lib/memory/strategies/managed-strategy.js +1 -1
- package/lib/memory/strategies/self-managed-strategy.js +1 -1
- package/lib/network/network-configuration.js +4 -4
- package/lib/runtime/runtime-artifact.js +1 -1
- package/lib/runtime/runtime-authorizer-configuration.js +1 -1
- package/lib/runtime/runtime-base.js +1 -1
- package/lib/runtime/runtime-endpoint-base.js +1 -1
- package/lib/runtime/runtime-endpoint.js +1 -1
- package/lib/runtime/runtime.js +9 -7
- package/lib/runtime/types.d.ts +4 -4
- package/lib/runtime/types.js +1 -1
- package/lib/tools/browser.js +2 -2
- package/lib/tools/code-interpreter.js +2 -2
- package/package.json +9 -9
package/.jsii
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
"url": "https://aws.amazon.com"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@aws-cdk/aws-bedrock-alpha": "2.
|
|
12
|
-
"aws-cdk-lib": "^2.
|
|
11
|
+
"@aws-cdk/aws-bedrock-alpha": "2.233.0-alpha.0",
|
|
12
|
+
"aws-cdk-lib": "^2.233.0",
|
|
13
13
|
"constructs": "^10.0.0"
|
|
14
14
|
},
|
|
15
15
|
"dependencyClosure": {
|
|
@@ -8473,7 +8473,7 @@
|
|
|
8473
8473
|
"stability": "experimental"
|
|
8474
8474
|
},
|
|
8475
8475
|
"homepage": "https://github.com/aws/aws-cdk",
|
|
8476
|
-
"jsiiVersion": "5.9.
|
|
8476
|
+
"jsiiVersion": "5.9.18 (build 9d58cab)",
|
|
8477
8477
|
"keywords": [
|
|
8478
8478
|
"aws",
|
|
8479
8479
|
"cdk",
|
|
@@ -21116,8 +21116,8 @@
|
|
|
21116
21116
|
{
|
|
21117
21117
|
"abstract": true,
|
|
21118
21118
|
"docs": {
|
|
21119
|
-
"default": "- 900 seconds (15 minutes)",
|
|
21120
|
-
"remarks": "When a session remains idle for this duration,\nit will be automatically terminated.
|
|
21119
|
+
"default": "undefined - service default setting is 900 seconds (15 minutes)",
|
|
21120
|
+
"remarks": "When a session remains idle for this duration,\nit will be automatically terminated.",
|
|
21121
21121
|
"stability": "experimental",
|
|
21122
21122
|
"summary": "Timeout in seconds for idle runtime sessions."
|
|
21123
21123
|
},
|
|
@@ -21135,8 +21135,8 @@
|
|
|
21135
21135
|
{
|
|
21136
21136
|
"abstract": true,
|
|
21137
21137
|
"docs": {
|
|
21138
|
-
"default": "- 28800 seconds (8 hours)",
|
|
21139
|
-
"remarks": "Once reached, instances will be automatically\nterminated and replaced.
|
|
21138
|
+
"default": "undefined - service default setting is 28800 seconds (8 hours)",
|
|
21139
|
+
"remarks": "Once reached, instances will be automatically\nterminated and replaced.",
|
|
21140
21140
|
"stability": "experimental",
|
|
21141
21141
|
"summary": "Maximum lifetime for the instance in seconds."
|
|
21142
21142
|
},
|
|
@@ -24416,7 +24416,7 @@
|
|
|
24416
24416
|
},
|
|
24417
24417
|
"locationInModule": {
|
|
24418
24418
|
"filename": "lib/runtime/runtime.ts",
|
|
24419
|
-
"line":
|
|
24419
|
+
"line": 818
|
|
24420
24420
|
},
|
|
24421
24421
|
"name": "addEndpoint",
|
|
24422
24422
|
"parameters": [
|
|
@@ -28149,6 +28149,6 @@
|
|
|
28149
28149
|
"symbolId": "lib/network/network-configuration:VpcConfigProps"
|
|
28150
28150
|
}
|
|
28151
28151
|
},
|
|
28152
|
-
"version": "2.
|
|
28152
|
+
"version": "2.233.0-alpha.0",
|
|
28153
28153
|
"fingerprint": "**********"
|
|
28154
28154
|
}
|
package/.jsii.tabl.json.gz
CHANGED
|
Binary file
|
|
@@ -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.
|
|
28
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayBase", version: "2.233.0-alpha.0" };
|
|
29
29
|
constructor(scope, id) {
|
|
30
30
|
super(scope, id);
|
|
31
31
|
}
|
package/lib/gateway/gateway.js
CHANGED
|
@@ -87,7 +87,7 @@ let Gateway = (() => {
|
|
|
87
87
|
Gateway = _classThis = _classDescriptor.value;
|
|
88
88
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
89
89
|
}
|
|
90
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Gateway", version: "2.
|
|
90
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Gateway", version: "2.233.0-alpha.0" };
|
|
91
91
|
/** Uniquely identifies this class. */
|
|
92
92
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.Gateway';
|
|
93
93
|
/**
|
|
@@ -21,7 +21,7 @@ var GatewayAuthorizerType;
|
|
|
21
21
|
* Custom JWT authorizer configuration implementation
|
|
22
22
|
*/
|
|
23
23
|
class CustomJwtAuthorizer {
|
|
24
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CustomJwtAuthorizer", version: "2.
|
|
24
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CustomJwtAuthorizer", version: "2.233.0-alpha.0" };
|
|
25
25
|
authorizerType = GatewayAuthorizerType.CUSTOM_JWT;
|
|
26
26
|
discoveryUrl;
|
|
27
27
|
allowedAudience;
|
|
@@ -62,7 +62,7 @@ exports.CustomJwtAuthorizer = CustomJwtAuthorizer;
|
|
|
62
62
|
*
|
|
63
63
|
*/
|
|
64
64
|
class IamAuthorizer {
|
|
65
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.IamAuthorizer", version: "2.
|
|
65
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.IamAuthorizer", version: "2.233.0-alpha.0" };
|
|
66
66
|
authorizerType = GatewayAuthorizerType.AWS_IAM;
|
|
67
67
|
/**
|
|
68
68
|
* @internal
|
|
@@ -78,7 +78,7 @@ exports.IamAuthorizer = IamAuthorizer;
|
|
|
78
78
|
* Factory class for creating Gateway Authorizers
|
|
79
79
|
*/
|
|
80
80
|
class GatewayAuthorizer {
|
|
81
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayAuthorizer", version: "2.
|
|
81
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayAuthorizer", version: "2.233.0-alpha.0" };
|
|
82
82
|
/**
|
|
83
83
|
* AWS IAM authorizer instance
|
|
84
84
|
*/
|
|
@@ -19,7 +19,7 @@ var ApiKeyCredentialLocationType;
|
|
|
19
19
|
* API Key location within the request
|
|
20
20
|
*/
|
|
21
21
|
class ApiKeyCredentialLocation {
|
|
22
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ApiKeyCredentialLocation", version: "2.
|
|
22
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ApiKeyCredentialLocation", version: "2.233.0-alpha.0" };
|
|
23
23
|
/**
|
|
24
24
|
* Create a header-based API key credential location
|
|
25
25
|
* @param config - Optional configuration for the credential location
|
|
@@ -31,7 +31,7 @@ var CredentialProviderType;
|
|
|
31
31
|
* Factory class for creating different Gateway Credential Providers
|
|
32
32
|
*/
|
|
33
33
|
class GatewayCredentialProvider {
|
|
34
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayCredentialProvider", version: "2.
|
|
34
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayCredentialProvider", version: "2.233.0-alpha.0" };
|
|
35
35
|
/**
|
|
36
36
|
* Create an API key credential provider from Identity ARN
|
|
37
37
|
* Use this method when you have the Identity ARN as a string
|
package/lib/gateway/protocol.js
CHANGED
|
@@ -21,7 +21,7 @@ var GatewayProtocolType;
|
|
|
21
21
|
* Factory class for instantiating Gateway Protocols
|
|
22
22
|
*/
|
|
23
23
|
class GatewayProtocol {
|
|
24
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayProtocol", version: "2.
|
|
24
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayProtocol", version: "2.233.0-alpha.0" };
|
|
25
25
|
/**
|
|
26
26
|
* Create an MCP protocol configuration
|
|
27
27
|
* @param props - Optional MCP configuration properties
|
|
@@ -75,7 +75,7 @@ var McpGatewaySearchType;
|
|
|
75
75
|
* MCP (Model Context Protocol) configuration implementation
|
|
76
76
|
*/
|
|
77
77
|
class McpProtocolConfiguration {
|
|
78
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.McpProtocolConfiguration", version: "2.
|
|
78
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.McpProtocolConfiguration", version: "2.233.0-alpha.0" };
|
|
79
79
|
protocolType;
|
|
80
80
|
/**
|
|
81
81
|
* The supported MCP protocol versions
|
|
@@ -24,7 +24,7 @@ class ApiSchemaError extends Error {
|
|
|
24
24
|
* Represents the concept of an API Schema for a Gateway Target.
|
|
25
25
|
*/
|
|
26
26
|
class ApiSchema extends base_schema_1.TargetSchema {
|
|
27
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ApiSchema", version: "2.
|
|
27
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ApiSchema", version: "2.233.0-alpha.0" };
|
|
28
28
|
/**
|
|
29
29
|
* Creates an API Schema from a local file.
|
|
30
30
|
* @param path - the path to the local file containing the OpenAPI schema for the action group
|
|
@@ -82,7 +82,7 @@ exports.ApiSchema = ApiSchema;
|
|
|
82
82
|
class AssetApiSchema extends ApiSchema {
|
|
83
83
|
path;
|
|
84
84
|
options;
|
|
85
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AssetApiSchema", version: "2.
|
|
85
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AssetApiSchema", version: "2.233.0-alpha.0" };
|
|
86
86
|
asset;
|
|
87
87
|
constructor(path, options = {}) {
|
|
88
88
|
super();
|
|
@@ -144,7 +144,7 @@ exports.AssetApiSchema = AssetApiSchema;
|
|
|
144
144
|
*/
|
|
145
145
|
class InlineApiSchema extends ApiSchema {
|
|
146
146
|
schema;
|
|
147
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.InlineApiSchema", version: "2.
|
|
147
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.InlineApiSchema", version: "2.233.0-alpha.0" };
|
|
148
148
|
constructor(schema) {
|
|
149
149
|
super(undefined, undefined, schema);
|
|
150
150
|
this.schema = schema;
|
|
@@ -174,7 +174,7 @@ exports.InlineApiSchema = InlineApiSchema;
|
|
|
174
174
|
class S3ApiSchema extends ApiSchema {
|
|
175
175
|
location;
|
|
176
176
|
bucketOwnerAccountId;
|
|
177
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.S3ApiSchema", version: "2.
|
|
177
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.S3ApiSchema", version: "2.233.0-alpha.0" };
|
|
178
178
|
constructor(location, bucketOwnerAccountId) {
|
|
179
179
|
super(location, bucketOwnerAccountId, undefined);
|
|
180
180
|
this.location = location;
|
|
@@ -39,7 +39,7 @@ class ToolSchemaError extends Error {
|
|
|
39
39
|
* TOOL SCHEMA CLASS
|
|
40
40
|
*****************************************************************************/
|
|
41
41
|
class ToolSchema extends base_schema_1.TargetSchema {
|
|
42
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ToolSchema", version: "2.
|
|
42
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ToolSchema", version: "2.233.0-alpha.0" };
|
|
43
43
|
/**
|
|
44
44
|
* Creates a tool Schema from a local file.
|
|
45
45
|
* @param path - the path to the local file containing the function schema for the tool
|
|
@@ -97,7 +97,7 @@ exports.ToolSchema = ToolSchema;
|
|
|
97
97
|
class AssetToolSchema extends ToolSchema {
|
|
98
98
|
path;
|
|
99
99
|
options;
|
|
100
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AssetToolSchema", version: "2.
|
|
100
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AssetToolSchema", version: "2.233.0-alpha.0" };
|
|
101
101
|
asset;
|
|
102
102
|
constructor(path, options = {}) {
|
|
103
103
|
super();
|
|
@@ -150,7 +150,7 @@ exports.AssetToolSchema = AssetToolSchema;
|
|
|
150
150
|
*/
|
|
151
151
|
class InlineToolSchema extends ToolSchema {
|
|
152
152
|
schema;
|
|
153
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.InlineToolSchema", version: "2.
|
|
153
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.InlineToolSchema", version: "2.233.0-alpha.0" };
|
|
154
154
|
constructor(schema) {
|
|
155
155
|
super(undefined, undefined, schema);
|
|
156
156
|
this.schema = schema;
|
|
@@ -180,7 +180,7 @@ exports.InlineToolSchema = InlineToolSchema;
|
|
|
180
180
|
class S3ToolSchema extends ToolSchema {
|
|
181
181
|
location;
|
|
182
182
|
bucketOwnerAccountId;
|
|
183
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.S3ToolSchema", version: "2.
|
|
183
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.S3ToolSchema", version: "2.233.0-alpha.0" };
|
|
184
184
|
constructor(location, bucketOwnerAccountId) {
|
|
185
185
|
super(location, bucketOwnerAccountId, undefined);
|
|
186
186
|
this.location = location;
|
|
@@ -39,7 +39,7 @@ var McpTargetType;
|
|
|
39
39
|
* permission management and property definitions.
|
|
40
40
|
*/
|
|
41
41
|
class GatewayTargetBase extends aws_cdk_lib_1.Resource {
|
|
42
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayTargetBase", version: "2.
|
|
42
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayTargetBase", version: "2.233.0-alpha.0" };
|
|
43
43
|
/**
|
|
44
44
|
* Grants IAM actions to the IAM Principal
|
|
45
45
|
*
|
|
@@ -16,7 +16,7 @@ const validation_helpers_1 = require("../validation-helpers");
|
|
|
16
16
|
* Provides common functionality for all MCP target types
|
|
17
17
|
*/
|
|
18
18
|
class McpTargetConfiguration {
|
|
19
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.McpTargetConfiguration", version: "2.
|
|
19
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.McpTargetConfiguration", version: "2.233.0-alpha.0" };
|
|
20
20
|
/**
|
|
21
21
|
* Renders the configuration as CloudFormation properties
|
|
22
22
|
* @internal
|
|
@@ -38,7 +38,7 @@ exports.McpTargetConfiguration = McpTargetConfiguration;
|
|
|
38
38
|
* allowing the gateway to invoke the function to provide tool capabilities.
|
|
39
39
|
*/
|
|
40
40
|
class LambdaTargetConfiguration extends McpTargetConfiguration {
|
|
41
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.LambdaTargetConfiguration", version: "2.
|
|
41
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.LambdaTargetConfiguration", version: "2.233.0-alpha.0" };
|
|
42
42
|
/**
|
|
43
43
|
* Create a Lambda target configuration
|
|
44
44
|
*
|
|
@@ -128,7 +128,7 @@ exports.LambdaTargetConfiguration = LambdaTargetConfiguration;
|
|
|
128
128
|
* allowing the gateway to transform API operations into tool calls.
|
|
129
129
|
*/
|
|
130
130
|
class OpenApiTargetConfiguration extends McpTargetConfiguration {
|
|
131
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OpenApiTargetConfiguration", version: "2.
|
|
131
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OpenApiTargetConfiguration", version: "2.233.0-alpha.0" };
|
|
132
132
|
/**
|
|
133
133
|
* Create an OpenAPI target configuration
|
|
134
134
|
*
|
|
@@ -246,7 +246,7 @@ exports.OpenApiTargetConfiguration = OpenApiTargetConfiguration;
|
|
|
246
246
|
* allowing the gateway to transform Smithy operations into tool calls.
|
|
247
247
|
*/
|
|
248
248
|
class SmithyTargetConfiguration extends McpTargetConfiguration {
|
|
249
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.SmithyTargetConfiguration", version: "2.
|
|
249
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.SmithyTargetConfiguration", version: "2.233.0-alpha.0" };
|
|
250
250
|
/**
|
|
251
251
|
* Create a Smithy target configuration
|
|
252
252
|
*
|
|
@@ -328,7 +328,7 @@ exports.SmithyTargetConfiguration = SmithyTargetConfiguration;
|
|
|
328
328
|
* synchronization.
|
|
329
329
|
*/
|
|
330
330
|
class McpServerTargetConfiguration extends McpTargetConfiguration {
|
|
331
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.McpServerTargetConfiguration", version: "2.
|
|
331
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.McpServerTargetConfiguration", version: "2.233.0-alpha.0" };
|
|
332
332
|
/**
|
|
333
333
|
* Create an MCP server target configuration
|
|
334
334
|
*
|
|
@@ -78,7 +78,7 @@ let GatewayTarget = (() => {
|
|
|
78
78
|
GatewayTarget = _classThis = _classDescriptor.value;
|
|
79
79
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
80
80
|
}
|
|
81
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayTarget", version: "2.
|
|
81
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.GatewayTarget", version: "2.233.0-alpha.0" };
|
|
82
82
|
/** Uniquely identifies this class. */
|
|
83
83
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.GatewayTarget';
|
|
84
84
|
/**
|
|
@@ -53,7 +53,7 @@ var MemoryStrategyType;
|
|
|
53
53
|
* @see https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/memory-strategies.html
|
|
54
54
|
*/
|
|
55
55
|
class MemoryStrategy {
|
|
56
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.MemoryStrategy", version: "2.
|
|
56
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.MemoryStrategy", version: "2.233.0-alpha.0" };
|
|
57
57
|
/**
|
|
58
58
|
* Default strategies for organizing and extracting memory data, each optimized for specific use cases.
|
|
59
59
|
* This strategy compresses conversations into concise overviews, preserving essential context and key insights for quick recall.
|
package/lib/memory/memory.js
CHANGED
|
@@ -99,7 +99,7 @@ const MEMORY_EXPIRATION_DAYS_MAX = 365;
|
|
|
99
99
|
* Contains methods and attributes valid for Memories either created with CDK or imported.
|
|
100
100
|
*/
|
|
101
101
|
class MemoryBase extends aws_cdk_lib_1.Resource {
|
|
102
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.MemoryBase", version: "2.
|
|
102
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.MemoryBase", version: "2.233.0-alpha.0" };
|
|
103
103
|
constructor(scope, id) {
|
|
104
104
|
super(scope, id);
|
|
105
105
|
}
|
|
@@ -352,7 +352,7 @@ let Memory = (() => {
|
|
|
352
352
|
Memory = _classThis = _classDescriptor.value;
|
|
353
353
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
354
354
|
}
|
|
355
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Memory", version: "2.
|
|
355
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Memory", version: "2.233.0-alpha.0" };
|
|
356
356
|
/** Uniquely identifies this class. */
|
|
357
357
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.Memory';
|
|
358
358
|
/**
|
|
@@ -25,7 +25,7 @@ const PROMPT_MAX_LENGTH = 30000;
|
|
|
25
25
|
* with specific models and prompt templates.
|
|
26
26
|
*/
|
|
27
27
|
class ManagedMemoryStrategy {
|
|
28
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ManagedMemoryStrategy", version: "2.
|
|
28
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ManagedMemoryStrategy", version: "2.233.0-alpha.0" };
|
|
29
29
|
name;
|
|
30
30
|
description;
|
|
31
31
|
/**
|
|
@@ -86,7 +86,7 @@ const DEFAULT_TOKEN_BASED_TRIGGER = 100;
|
|
|
86
86
|
* Use AgentCore memory for event storage with custom triggers. Define memory processing logic in your own environment.
|
|
87
87
|
*/
|
|
88
88
|
class SelfManagedMemoryStrategy {
|
|
89
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.SelfManagedMemoryStrategy", version: "2.
|
|
89
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.SelfManagedMemoryStrategy", version: "2.233.0-alpha.0" };
|
|
90
90
|
name;
|
|
91
91
|
description;
|
|
92
92
|
strategyType;
|
|
@@ -8,7 +8,7 @@ const ec2 = require("aws-cdk-lib/aws-ec2");
|
|
|
8
8
|
* Abstract base class for network configuration.
|
|
9
9
|
*/
|
|
10
10
|
class NetworkConfiguration {
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.NetworkConfiguration", version: "2.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.NetworkConfiguration", version: "2.233.0-alpha.0" };
|
|
12
12
|
/**
|
|
13
13
|
* The network mode to use.
|
|
14
14
|
* Configure the security level for agent
|
|
@@ -87,7 +87,7 @@ exports.NetworkConfiguration = NetworkConfiguration;
|
|
|
87
87
|
* Network configuration for the Browser tool.
|
|
88
88
|
*/
|
|
89
89
|
class BrowserNetworkConfiguration extends NetworkConfiguration {
|
|
90
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserNetworkConfiguration", version: "2.
|
|
90
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserNetworkConfiguration", version: "2.233.0-alpha.0" };
|
|
91
91
|
/**
|
|
92
92
|
* Creates a public network configuration. PUBLIC is the default network mode.
|
|
93
93
|
* @returns A BrowserNetworkConfiguration.
|
|
@@ -133,7 +133,7 @@ exports.BrowserNetworkConfiguration = BrowserNetworkConfiguration;
|
|
|
133
133
|
* Network configuration for the Code Interpreter tool.
|
|
134
134
|
*/
|
|
135
135
|
class CodeInterpreterNetworkConfiguration extends NetworkConfiguration {
|
|
136
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterNetworkConfiguration", version: "2.
|
|
136
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterNetworkConfiguration", version: "2.233.0-alpha.0" };
|
|
137
137
|
/**
|
|
138
138
|
* Creates a public network configuration.
|
|
139
139
|
* @returns A CodeInterpreterNetworkConfiguration.
|
|
@@ -187,7 +187,7 @@ exports.CodeInterpreterNetworkConfiguration = CodeInterpreterNetworkConfiguratio
|
|
|
187
187
|
* Network configuration for the Runtime.
|
|
188
188
|
*/
|
|
189
189
|
class RuntimeNetworkConfiguration extends NetworkConfiguration {
|
|
190
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeNetworkConfiguration", version: "2.
|
|
190
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeNetworkConfiguration", version: "2.233.0-alpha.0" };
|
|
191
191
|
/**
|
|
192
192
|
* Creates a public network configuration. PUBLIC is the default network mode.
|
|
193
193
|
* @returns A RuntimeNetworkConfiguration.
|
|
@@ -47,7 +47,7 @@ var AgentCoreRuntime;
|
|
|
47
47
|
* Provides methods to reference container images from ECR repositories or local assets.
|
|
48
48
|
*/
|
|
49
49
|
class AgentRuntimeArtifact {
|
|
50
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AgentRuntimeArtifact", version: "2.
|
|
50
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.AgentRuntimeArtifact", version: "2.233.0-alpha.0" };
|
|
51
51
|
/**
|
|
52
52
|
* Reference an image in an ECR repository
|
|
53
53
|
*/
|
|
@@ -21,7 +21,7 @@ const validation_helpers_1 = require("./validation-helpers");
|
|
|
21
21
|
* Provides static factory methods to create different authentication types.
|
|
22
22
|
*/
|
|
23
23
|
class RuntimeAuthorizerConfiguration {
|
|
24
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeAuthorizerConfiguration", version: "2.
|
|
24
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeAuthorizerConfiguration", version: "2.233.0-alpha.0" };
|
|
25
25
|
/**
|
|
26
26
|
* Use IAM authentication (default).
|
|
27
27
|
* Requires AWS credentials to sign requests using SigV4.
|
|
@@ -26,7 +26,7 @@ const validation_helpers_1 = require("./validation-helpers");
|
|
|
26
26
|
* Base class for Agent Runtime
|
|
27
27
|
*/
|
|
28
28
|
class RuntimeBase extends aws_cdk_lib_1.Resource {
|
|
29
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeBase", version: "2.
|
|
29
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeBase", version: "2.233.0-alpha.0" };
|
|
30
30
|
/**
|
|
31
31
|
* An accessor for the Connections object that will fail if this Runtime does not have a VPC
|
|
32
32
|
* configured.
|
|
@@ -22,7 +22,7 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
|
22
22
|
* Base class for Runtime Endpoint
|
|
23
23
|
*/
|
|
24
24
|
class RuntimeEndpointBase extends aws_cdk_lib_1.Resource {
|
|
25
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeEndpointBase", version: "2.
|
|
25
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeEndpointBase", version: "2.233.0-alpha.0" };
|
|
26
26
|
constructor(scope, id) {
|
|
27
27
|
super(scope, id);
|
|
28
28
|
}
|
|
@@ -67,7 +67,7 @@ let RuntimeEndpoint = (() => {
|
|
|
67
67
|
RuntimeEndpoint = _classThis = _classDescriptor.value;
|
|
68
68
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
69
69
|
}
|
|
70
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeEndpoint", version: "2.
|
|
70
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.RuntimeEndpoint", version: "2.233.0-alpha.0" };
|
|
71
71
|
/** Uniquely identifies this class. */
|
|
72
72
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.RuntimeEndpoint';
|
|
73
73
|
/**
|
package/lib/runtime/runtime.js
CHANGED
|
@@ -91,7 +91,7 @@ let Runtime = (() => {
|
|
|
91
91
|
Runtime = _classThis = _classDescriptor.value;
|
|
92
92
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
93
93
|
}
|
|
94
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Runtime", version: "2.
|
|
94
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Runtime", version: "2.233.0-alpha.0" };
|
|
95
95
|
/** Uniquely identifies this class. */
|
|
96
96
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.Runtime';
|
|
97
97
|
/**
|
|
@@ -222,11 +222,13 @@ let Runtime = (() => {
|
|
|
222
222
|
if (props.requestHeaderConfiguration) {
|
|
223
223
|
this.validateRequestHeaderConfiguration(props.requestHeaderConfiguration);
|
|
224
224
|
}
|
|
225
|
-
this.lifecycleConfiguration = {
|
|
226
|
-
idleRuntimeSessionTimeout: props.lifecycleConfiguration?.idleRuntimeSessionTimeout
|
|
227
|
-
maxLifetime: props.lifecycleConfiguration?.maxLifetime
|
|
228
|
-
};
|
|
229
|
-
|
|
225
|
+
this.lifecycleConfiguration = props.lifecycleConfiguration ? {
|
|
226
|
+
idleRuntimeSessionTimeout: props.lifecycleConfiguration?.idleRuntimeSessionTimeout,
|
|
227
|
+
maxLifetime: props.lifecycleConfiguration?.maxLifetime,
|
|
228
|
+
} : undefined;
|
|
229
|
+
if (this.lifecycleConfiguration) {
|
|
230
|
+
this.validateLifecycleConfiguration(this.lifecycleConfiguration);
|
|
231
|
+
}
|
|
230
232
|
if (props.executionRole) {
|
|
231
233
|
this.role = props.executionRole;
|
|
232
234
|
if (!aws_cdk_lib_1.Token.isUnresolved(props.executionRole.roleArn)) {
|
|
@@ -691,4 +693,4 @@ let Runtime = (() => {
|
|
|
691
693
|
return Runtime = _classThis;
|
|
692
694
|
})();
|
|
693
695
|
exports.Runtime = Runtime;
|
|
694
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkNBQXdGO0FBQ3hGLHFFQUFxRTtBQUNyRSwyQ0FBMkM7QUFDM0MsMkNBQTJDO0FBQzNDLDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFFMUUsbUNBUWlCO0FBR2pCLGlEQUEyRjtBQUMzRix5REFBcUQ7QUFDckQsbUNBQTJGO0FBQzNGLDZEQUFrRztBQUNsRyw0RUFBK0U7QUFFL0U7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRW5EOzs7R0FHRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsc0JBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFzR3ZEOzsrRUFFK0U7QUFFL0U7Ozs7Ozs7R0FPRztJQUVVLE9BQU87NEJBRG5CLG9DQUFrQjs7OztzQkFDVSwwQkFBVzs7O3VCQUFuQixTQUFRLFdBQVc7Ozs7dUNBcXBCckMsSUFBQSxrQ0FBYyxHQUFFO1lBQ2pCLG9MQUFPLFdBQVcsNkRBZ0JqQjtZQXRxQkgsNktBdXFCQzs7Ozs7UUF0cUJDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQVcsOENBQThDLENBQUM7UUFFdEc7Ozs7Ozs7O1dBUUc7UUFDSSxNQUFNLENBQUMsMEJBQTBCLENBQ3RDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUE2Qjs7Ozs7Ozs7OztZQUU3QixNQUFNLDJCQUE0QixTQUFRLDBCQUFXO2dCQUNuQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztnQkFDeEMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7Z0JBQ3RDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDMUMsbUJB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Q0FBQztZQUNKLENBQUM7WUFFRCxpRUFBaUU7WUFDakUsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztZQUNwQyxNQUFNLFdBQVcsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDMUMsSUFBSSxNQUFNLElBQUksTUFBTSxLQUFLLEVBQUUsSUFBSSxNQUFNLEtBQUssV0FBVyxJQUFJLENBQUMsbUJBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDMUYseUJBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUM3QixtQ0FBbUMsTUFBTSwwQ0FBMEMsV0FBVyxLQUFLO29CQUNuRyx3REFBd0QsQ0FDekQsQ0FBQztZQUNKLENBQUM7U0FDRjtRQUVEOzs7Ozs7O1dBT0c7UUFFSSxXQUFXLENBQ2hCLFlBQW9CLEVBQ3BCLE9BQTRCOzs7Ozs7Ozs7O1lBRTVCLHNFQUFzRTtZQUN0RSxNQUFNLFFBQVEsR0FBRyxJQUFJLGtDQUFlLENBQUMsSUFBSSxFQUFFLFdBQVcsWUFBWSxFQUFFLEVBQUU7Z0JBQ3BFLFlBQVksRUFBRSxZQUFZO2dCQUMxQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7Z0JBQ25DLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLEdBQUc7Z0JBQ3hFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVzthQUNsQyxDQUFDLENBQUM7WUFFSCwrREFBK0Q7WUFDL0QsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRWxELE9BQU8sUUFBUSxDQUFDO1NBQ2pCOztZQXRxQlUsdURBQU87Ozs7O0FBQVAsMEJBQU8iLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IER1cmF0aW9uLCBTdGFjaywgQW5ub3RhdGlvbnMsIFRva2VuLCBBcm4sIEFybkZvcm1hdCwgTGF6eSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGJlZHJvY2thZ2VudGNvcmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEsIE1ldGhvZE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHtcbiAgUlVOVElNRV9MT0dTX0dST1VQX0FDVElPTlMsXG4gIFJVTlRJTUVfTE9HU19ERVNDUklCRV9BQ1RJT05TLFxuICBSVU5USU1FX0xPR1NfU1RSRUFNX0FDVElPTlMsXG4gIFJVTlRJTUVfWFJBWV9BQ1RJT05TLFxuICBSVU5USU1FX0NMT1VEV0FUQ0hfTUVUUklDU19BQ1RJT05TLFxuICBSVU5USU1FX0NMT1VEV0FUQ0hfTkFNRVNQQUNFLFxuICBSVU5USU1FX1dPUktMT0FEX0lERU5USVRZX0FDVElPTlMsXG59IGZyb20gJy4vcGVybXMnO1xuaW1wb3J0IHsgQWdlbnRSdW50aW1lQXJ0aWZhY3QgfSBmcm9tICcuL3J1bnRpbWUtYXJ0aWZhY3QnO1xuaW1wb3J0IHsgUnVudGltZUF1dGhvcml6ZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9ydW50aW1lLWF1dGhvcml6ZXItY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBSdW50aW1lQmFzZSwgSUJlZHJvY2tBZ2VudFJ1bnRpbWUsIEFnZW50UnVudGltZUF0dHJpYnV0ZXMgfSBmcm9tICcuL3J1bnRpbWUtYmFzZSc7XG5pbXBvcnQgeyBSdW50aW1lRW5kcG9pbnQgfSBmcm9tICcuL3J1bnRpbWUtZW5kcG9pbnQnO1xuaW1wb3J0IHsgTGlmZWN5Y2xlQ29uZmlndXJhdGlvbiwgUHJvdG9jb2xUeXBlLCBSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmdGaWVsZCwgVmFsaWRhdGlvbkVycm9yLCB2YWxpZGF0ZUZpZWxkUGF0dGVybiB9IGZyb20gJy4vdmFsaWRhdGlvbi1oZWxwZXJzJztcbmltcG9ydCB7IFJ1bnRpbWVOZXR3b3JrQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL25ldHdvcmsvbmV0d29yay1jb25maWd1cmF0aW9uJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0YW50c1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqXG4gKiBNaW5pbXVtIHRpbWVvdXQgZm9yIGlkbGUgcnVudGltZSBzZXNzaW9uc1xuICogQGludGVybmFsXG4gKi9cbmNvbnN0IExJRkVDWUNMRV9NSU5fVElNRU9VVCA9IER1cmF0aW9uLnNlY29uZHMoNjApO1xuXG4vKipcbiAqIE1heGltdW0gbGlmZXRpbWUgZm9yIHRoZSBpbnN0YW5jZVxuICogQGludGVybmFsXG4gKi9cbmNvbnN0IExJRkVDWUNMRV9NQVhfTElGRVRJTUUgPSBEdXJhdGlvbi5zZWNvbmRzKDI4ODAwKTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3BzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBCZWRyb2NrIEFnZW50IENvcmUgUnVudGltZSByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKVxuICAgKiBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNhbiBiZSB1cCB0byA0OCBjaGFyYWN0ZXJzIGxvbmdcbiAgICogUGF0dGVybjogXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JFxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFydGlmYWN0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIENvbnRhaW5zIHRoZSBjb250YWluZXIgY29uZmlndXJhdGlvbiB3aXRoIEVDUiBVUklcbiAgICovXG4gIHJlYWRvbmx5IGFnZW50UnVudGltZUFydGlmYWN0OiBBZ2VudFJ1bnRpbWVBcnRpZmFjdDtcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIHRoYXQgcHJvdmlkZXMgcGVybWlzc2lvbnMgZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIElmIG5vdCBwcm92aWRlZCwgYSByb2xlIHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5XG4gICAqIEBkZWZhdWx0IC0gQSBuZXcgcm9sZSB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIE5ldHdvcmsgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGRlZmF1bHQgLSBSdW50aW1lTmV0d29ya0NvbmZpZ3VyYXRpb24udXNpbmdQdWJsaWNOZXR3b3JrKClcbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcmtDb25maWd1cmF0aW9uPzogUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKiBMZW5ndGggTWluaW11bTogMSAsIE1heGltdW06IDEyMDBcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm90b2NvbCBjb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAZGVmYXVsdCAtIFByb3RvY29sVHlwZS5IVFRQXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbENvbmZpZ3VyYXRpb24/OiBQcm90b2NvbFR5cGU7XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogLSBNYXhpbXVtIDUwIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKiAtIEtleTogTXVzdCBiZSAxLTEwMCBjaGFyYWN0ZXJzLCBzdGFydCB3aXRoIGxldHRlciBvciB1bmRlcnNjb3JlLCBjb250YWluIG9ubHkgbGV0dGVycywgbnVtYmVycywgYW5kIHVuZGVyc2NvcmVzXG4gICAqIC0gVmFsdWU6IE11c3QgYmUgMC0yMDQ4IGNoYXJhY3RlcnMgKHBlciBDbG91ZEZvcm1hdGlvbiBzcGVjaWZpY2F0aW9uKVxuICAgKiBAZGVmYXVsdCAtIE5vIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnRWYXJpYWJsZXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBdXRob3JpemVyIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIFVzZSBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24gc3RhdGljIG1ldGhvZHMgdG8gY3JlYXRlIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IC0gUnVudGltZUF1dGhvcml6ZXJDb25maWd1cmF0aW9uLmlhbSgpIChJQU0gYXV0aGVudGljYXRpb24pXG4gICAqL1xuICByZWFkb25seSBhdXRob3JpemVyQ29uZmlndXJhdGlvbj86IFJ1bnRpbWVBdXRob3JpemVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGFncyBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQSBsaXN0IG9mIGtleTp2YWx1ZSBwYWlycyBvZiB0YWdzIHRvIGFwcGx5IHRvIHRoaXMgUnVudGltZSByZXNvdXJjZVxuICAgKiBAZGVmYXVsdCB7fSAtIG5vIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciBIVFRQIHJlcXVlc3QgaGVhZGVycyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlIHJ1bnRpbWUuXG4gICAqIEBkZWZhdWx0IC0gTm8gcmVxdWVzdCBoZWFkZXJzIGNvbmZpZ3VyZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uPzogUmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBsaWZlIGN5Y2xlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBZ2VudENvcmUgUnVudGltZS5cbiAgICogQGRlZmF1bHQgLSBObyBsaWZlY3ljbGUgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgbGlmZWN5Y2xlQ29uZmlndXJhdGlvbj86IExpZmVjeWNsZUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYWRkaW5nIGFuIGVuZHBvaW50IHRvIHRoZSBydW50aW1lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRkRW5kcG9pbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIGZvciB0aGUgZW5kcG9pbnQsIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMjAwIGNoYXJhY3RlcnNcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgcnVudGltZSB2ZXJzaW9uIGZvciB0aGlzIGVuZHBvaW50XG4gICAqIEBkZWZhdWx0ICAxXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBCZWRyb2NrIEFnZW50IENvcmUgUnVudGltZVxuICogRW5hYmxlcyBydW5uaW5nIGNvbnRhaW5lcml6ZWQgYWdlbnRzIHdpdGggc3BlY2lmaWMgbmV0d29yayBjb25maWd1cmF0aW9ucyxcbiAqIHNlY3VyaXR5IHNldHRpbmdzLCBhbmQgcnVudGltZSBhcnRpZmFjdHMuXG4gKlxuICogQHJlc291cmNlIEFXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZVxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL3J1bnRpbWUuaHRtbFxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgUnVudGltZSBleHRlbmRzIFJ1bnRpbWVCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEuUnVudGltZSc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBBZ2VudCBSdW50aW1lIHVzaW5nIGF0dHJpYnV0ZXNcbiAgICogVGhpcyBhbGxvd3MgeW91IHRvIHJlZmVyZW5jZSBhbiBBZ2VudCBSdW50aW1lIHRoYXQgd2FzIGNyZWF0ZWQgb3V0c2lkZSBvZiBDREtcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QgaWRcbiAgICogQHBhcmFtIGF0dHJzIFRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBleGlzdGluZyBBZ2VudCBSdW50aW1lXG4gICAqIEByZXR1cm5zIEFuIElCZWRyb2NrQWdlbnRSdW50aW1lIGluc3RhbmNlIHJlcHJlc2VudGluZyB0aGUgaW1wb3J0ZWQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQWdlbnRSdW50aW1lQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IEFnZW50UnVudGltZUF0dHJpYnV0ZXMsXG4gICk6IElCZWRyb2NrQWdlbnRSdW50aW1lIHtcbiAgICBjbGFzcyBJbXBvcnRlZEJlZHJvY2tBZ2VudFJ1bnRpbWUgZXh0ZW5kcyBSdW50aW1lQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lQXJuID0gYXR0cnMuYWdlbnRSdW50aW1lQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUlkID0gYXR0cnMuYWdlbnRSdW50aW1lSWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lTmFtZSA9IGF0dHJzLmFnZW50UnVudGltZU5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lVmVyc2lvbiA9IGF0dHJzLmFnZW50UnVudGltZVZlcnNpb247XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRTdGF0dXMgPSBhdHRycy5hZ2VudFN0YXR1cztcbiAgICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbiA9IGF0dHJzLmRlc2NyaXB0aW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IGF0dHJzLmNyZWF0ZWRBdDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBsYXN0VXBkYXRlZEF0ID0gYXR0cnMubGFzdFVwZGF0ZWRBdDtcblxuICAgICAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG5cbiAgICAgIGNvbnN0cnVjdG9yKHM6IENvbnN0cnVjdCwgaTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHMsIGkpO1xuICAgICAgICB0aGlzLnJvbGUgPSBpYW0uUm9sZS5mcm9tUm9sZUFybih0aGlzLCAnUm9sZScsIGF0dHJzLnJvbGVBcm4pO1xuICAgICAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5yb2xlO1xuICAgICAgICBpZiAoYXR0cnMuc2VjdXJpdHlHcm91cHMpIHtcbiAgICAgICAgICB0aGlzLl9jb25uZWN0aW9ucyA9IG5ldyBlYzIuQ29ubmVjdGlvbnMoe1xuICAgICAgICAgICAgc2VjdXJpdHlHcm91cHM6IGF0dHJzLnNlY3VyaXR5R3JvdXBzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZEJlZHJvY2tBZ2VudFJ1bnRpbWUoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIEFSTiBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBJRCBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSByb2xlOiBpYW0uSVJvbGU7XG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSB2ZXJzaW9uIG9mIHRoaXMgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZVZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIHN0YXR1cyBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhZ2VudFN0YXR1cz86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBhZ2VudCBydW50aW1lIHdhcyBjcmVhdGVkXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIHRpbWVzdGFtcCBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIGFnZW50IHJ1bnRpbWUgd2FzIGxhc3QgdXBkYXRlZFxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBsYXN0IHVwZGF0ZSB0aW1lc3RhbXAgb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbGFzdFVwZGF0ZWRBdD86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcbiAgcHJpdmF0ZSByZWFkb25seSBydW50aW1lUmVzb3VyY2U6IGJlZHJvY2thZ2VudGNvcmUuQ2ZuUnVudGltZTtcbiAgLyoqXG4gICAqIFRoZSBhcnRpZmFjdCBjb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUFydGlmYWN0OiBBZ2VudFJ1bnRpbWVBcnRpZmFjdDtcbiAgcHJpdmF0ZSByZWFkb25seSBuZXR3b3JrQ29uZmlndXJhdGlvbjogUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uIDtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm90b2NvbENvbmZpZ3VyYXRpb246IFByb3RvY29sVHlwZTtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRob3JpemVyQ29uZmlndXJhdGlvbj86IFJ1bnRpbWVBdXRob3JpemVyQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBsaWZlY3ljbGVDb25maWd1cmF0aW9uPzogTGlmZWN5Y2xlQ29uZmlndXJhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUnVudGltZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5hZ2VudFJ1bnRpbWVOYW1lID0gcHJvcHMucnVudGltZU5hbWU7XG4gICAgdGhpcy52YWxpZGF0ZVJ1bnRpbWVOYW1lKCk7XG5cbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcHJvcHMuZGVzY3JpcHRpb247XG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudmFsaWRhdGVEZXNjcmlwdGlvbigpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcykge1xuICAgICAgdGhpcy52YWxpZGF0ZUVudmlyb25tZW50VmFyaWFibGVzKHByb3BzLmVudmlyb25tZW50VmFyaWFibGVzKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudGFncykge1xuICAgICAgdGhpcy52YWxpZGF0ZVRhZ3MocHJvcHMudGFncyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlUmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24ocHJvcHMucmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIHRoaXMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIGlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQ6IHByb3BzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/LmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQgPz8gTElGRUNZQ0xFX01JTl9USU1FT1VULFxuICAgICAgbWF4TGlmZXRpbWU6IHByb3BzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/Lm1heExpZmV0aW1lID8/IExJRkVDWUNMRV9NQVhfTElGRVRJTUUsXG4gICAgfTtcbiAgICB0aGlzLnZhbGlkYXRlTGlmZWN5Y2xlQ29uZmlndXJhdGlvbih0aGlzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24pO1xuXG4gICAgaWYgKHByb3BzLmV4ZWN1dGlvblJvbGUpIHtcbiAgICAgIHRoaXMucm9sZSA9IHByb3BzLmV4ZWN1dGlvblJvbGU7XG4gICAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5leGVjdXRpb25Sb2xlLnJvbGVBcm4pKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVSb2xlQXJuKHByb3BzLmV4ZWN1dGlvblJvbGUucm9sZUFybik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnRXhlY3V0aW9uUm9sZScsIHtcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2JlZHJvY2stYWdlbnRjb3JlLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdFeGVjdXRpb24gcm9sZSBmb3IgQmVkcm9jayBBZ2VudCBDb3JlIFJ1bnRpbWUnLFxuICAgICAgICBtYXhTZXNzaW9uRHVyYXRpb246IER1cmF0aW9uLmhvdXJzKDgpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuYWRkRXhlY3V0aW9uUm9sZVBlcm1pc3Npb25zKCk7XG5cbiAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5yb2xlO1xuICAgIHRoaXMuYWdlbnRSdW50aW1lQXJ0aWZhY3QgPSBwcm9wcy5hZ2VudFJ1bnRpbWVBcnRpZmFjdDtcbiAgICAvLyBTZXQgdXAgbmV0d29yayBjb25maWd1cmF0aW9uIHdpdGggVlBDIHN1cHBvcnRcbiAgICB0aGlzLm5ldHdvcmtDb25maWd1cmF0aW9uID0gcHJvcHMubmV0d29ya0NvbmZpZ3VyYXRpb24gPz8gUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uLnVzaW5nUHVibGljTmV0d29yaygpO1xuICAgIC8vIFNldCBjb25uZWN0aW9ucyAtIGNyZWF0ZSBhIHNoYXJlZCBjb25uZWN0aW9ucyBvYmplY3RcbiAgICBpZiAodGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbi5jb25uZWN0aW9ucykge1xuICAgICAgLy8gVXNlIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24ncyBjb25uZWN0aW9ucyBhcyB0aGUgc2hhcmVkIG9iamVjdFxuICAgICAgdGhpcy5fY29ubmVjdGlvbnMgPSB0aGlzLm5ldHdvcmtDb25maWd1cmF0aW9uLmNvbm5lY3Rpb25zO1xuICAgIH1cbiAgICB0aGlzLnByb3RvY29sQ29uZmlndXJhdGlvbiA9IHByb3BzLnByb3RvY29sQ29uZmlndXJhdGlvbiA/PyBQcm90b2NvbFR5cGUuSFRUUDtcbiAgICB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uID0gcHJvcHMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb247XG5cbiAgICBjb25zdCBjZm5Qcm9wczogYW55ID0ge1xuICAgICAgYWdlbnRSdW50aW1lTmFtZTogdGhpcy5hZ2VudFJ1bnRpbWVOYW1lLFxuICAgICAgcm9sZUFybjogdGhpcy5yb2xlLnJvbGVBcm4sXG4gICAgICBhZ2VudFJ1bnRpbWVBcnRpZmFjdDogTGF6eS5hbnkoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLnJlbmRlckFnZW50UnVudGltZUFydGlmYWN0KCksXG4gICAgICB9KSxcbiAgICAgIG5ldHdvcmtDb25maWd1cmF0aW9uOiBMYXp5LmFueSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24uX3JlbmRlcih0aGlzLl9jb25uZWN0aW9ucyksXG4gICAgICB9KSxcbiAgICAgIHByb3RvY29sQ29uZmlndXJhdGlvbjogTGF6eS5zdHJpbmcoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLnByb3RvY29sQ29uZmlndXJhdGlvbixcbiAgICAgIH0pLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IExhenkuYW55KHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5yZW5kZXJFbnZpcm9ubWVudFZhcmlhYmxlcyhwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcyksXG4gICAgICB9KSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MgPz8ge30sXG4gICAgICBsaWZlY3ljbGVDb25maWd1cmF0aW9uOiB0aGlzLnJlbmRlckxpZmVjeWNsZUNvbmZpZ3VyYXRpb24oKSxcbiAgICB9O1xuICAgIGlmIChwcm9wcy5yZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbikge1xuICAgICAgY2ZuUHJvcHMucmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24gPSB0aGlzLnJlbmRlclJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKHByb3BzLnJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uKSB7XG4gICAgICBjZm5Qcm9wcy5hdXRob3JpemVyQ29uZmlndXJhdGlvbiA9IExhenkuYW55KHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5hdXRob3JpemVyQ29uZmlndXJhdGlvbiEuX3JlbmRlcigpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5ydW50aW1lUmVzb3VyY2UgPSBuZXcgYmVkcm9ja2FnZW50Y29yZS5DZm5SdW50aW1lKHRoaXMsICdSZXNvdXJjZScsIGNmblByb3BzIGFzIGJlZHJvY2thZ2VudGNvcmUuQ2ZuUnVudGltZVByb3BzKTtcblxuICAgIC8vIEFkZCBkZXBlbmRlbmN5IG9uIHRoZSByb2xlIChmb3IgYm90aCBjdXN0b20gYW5kIGF1dG8tY3JlYXRlZCByb2xlcylcbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIFJ1bnRpbWUgd2FpdHMgZm9yIHRoZSByb2xlIGFuZCBhbGwgaXRzIHBvbGljaWVzIChpbmNsdWRpbmcgRUNSIHBlcm1pc3Npb25zKSB0byBiZSBjcmVhdGVkXG4gICAgdGhpcy5ydW50aW1lUmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMucm9sZSk7XG5cbiAgICB0aGlzLmFnZW50UnVudGltZUlkID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0ckFnZW50UnVudGltZUlkO1xuICAgIHRoaXMuYWdlbnRSdW50aW1lQXJuID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0ckFnZW50UnVudGltZUFybjtcbiAgICB0aGlzLmFnZW50U3RhdHVzID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0clN0YXR1cztcbiAgICB0aGlzLmFnZW50UnVudGltZVZlcnNpb24gPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyQWdlbnRSdW50aW1lVmVyc2lvbjtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHRoaXMucnVudGltZVJlc291cmNlLmF0dHJDcmVhdGVkQXQ7XG4gICAgdGhpcy5sYXN0VXBkYXRlZEF0ID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0ckxhc3RVcGRhdGVkQXQ7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBDbG91ZEZvcm1hdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyRW52aXJvbm1lbnRWYXJpYWJsZXMoZW52VmFycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiBhbnkge1xuICAgIGlmICghZW52VmFycyB8fCBPYmplY3Qua2V5cyhlbnZWYXJzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBlbnZWYXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcHJvcGVyIHBlcm1pc3Npb25zIHRvIHRoZSBleGVjdXRpb24gcm9sZSBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQmFzZWQgb246IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvcnVudGltZS1wZXJtaXNzaW9ucy5odG1sXG4gICAqL1xuICBwcml2YXRlIGFkZEV4ZWN1dGlvblJvbGVQZXJtaXNzaW9ucygpIHtcbiAgICBjb25zdCByZWdpb24gPSBTdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgY29uc3QgYWNjb3VudCA9IFN0YWNrLm9mKHRoaXMpLmFjY291bnQ7XG5cbiAgICAvLyBDbG91ZFdhdGNoIExvZ3MgLSBMb2cgR3JvdXAgb3BlcmF0aW9uc1xuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdMb2dHcm91cEFjY2VzcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX0xPR1NfR1JPVVBfQUNUSU9OUyxcbiAgICAgIHJlc291cmNlczogW2Bhcm46JHtTdGFjay5vZih0aGlzKS5wYXJ0aXRpb259OmxvZ3M6JHtyZWdpb259OiR7YWNjb3VudH06bG9nLWdyb3VwOi9hd3MvYmVkcm9jay1hZ2VudGNvcmUvcnVudGltZXMvKmBdLFxuICAgIH0pKTtcblxuICAgIC8vIENsb3VkV2F0Y2ggTG9ncyAtIERlc2NyaWJlIGFsbCBsb2cgZ3JvdXBzXG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0Rlc2NyaWJlTG9nR3JvdXBzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfTE9HU19ERVNDUklCRV9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke1N0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbn06bG9nczoke3JlZ2lvbn06JHthY2NvdW50fTpsb2ctZ3JvdXA6KmBdLFxuICAgIH0pKTtcblxuICAgIC8vIENsb3VkV2F0Y2ggTG9ncyAtIExvZyBTdHJlYW0gb3BlcmF0aW9uc1xuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdMb2dTdHJlYW1BY2Nlc3MnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogUlVOVElNRV9MT0dTX1NUUkVBTV9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke1N0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbn06bG9nczoke3JlZ2lvbn06JHthY2NvdW50fTpsb2ctZ3JvdXA6L2F3cy9iZWRyb2NrLWFnZW50Y29yZS9ydW50aW1lcy8qOmxvZy1zdHJlYW06KmBdLFxuICAgIH0pKTtcblxuICAgIC8vIFgtUmF5IFRyYWNpbmcgLSBtdXN0IGJlICogZm9yIHRyYWNpbmdcbiAgICB0aGlzLnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnWFJheUFjY2VzcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX1hSQVlfQUNUSU9OUyxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuXG4gICAgLy8gQ2xvdWRXYXRjaCBNZXRyaWNzIC0gc2NvcGVkIHRvIGJlZHJvY2stYWdlbnRjb3JlIG5hbWVzcGFjZVxuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdDbG91ZFdhdGNoTWV0cmljcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX0NMT1VEV0FUQ0hfTUVUUklDU19BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgJ2Nsb3Vkd2F0Y2g6bmFtZXNwYWNlJzogUlVOVElNRV9DTE9VRFdBVENIX05BTUVTUEFDRSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkpO1xuXG4gICAgLy8gQmVkcm9jayBBZ2VudENvcmUgV29ya2xvYWQgSWRlbnRpdHkgQWNjZXNzXG4gICAgLy8gTm90ZTogVGhlIGFnZW50IG5hbWUgd2lsbCBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUsIHNvIHdlIHVzZSBhIHdpbGRjYXJkIHBhdHRlcm5cbiAgICB0aGlzLnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnR2V0QWdlbnRBY2Nlc3NUb2tlbicsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX1dPUktMT0FEX0lERU5USVRZX0FDVElPTlMsXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgYGFybjoke1N0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbn06YmVkcm9jay1hZ2VudGNvcmU6JHtyZWdpb259OiR7YWNjb3VudH06d29ya2xvYWQtaWRlbnRpdHktZGlyZWN0b3J5L2RlZmF1bHRgLFxuICAgICAgICBgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpiZWRyb2NrLWFnZW50Y29yZToke3JlZ2lvbn06JHthY2NvdW50fTp3b3JrbG9hZC1pZGVudGl0eS1kaXJlY3RvcnkvZGVmYXVsdC93b3JrbG9hZC1pZGVudGl0eS8qYCxcbiAgICAgIF0sXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGFydGlmYWN0IGNvbmZpZ3VyYXRpb24gZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJBZ2VudFJ1bnRpbWVBcnRpZmFjdCgpOiBhbnkge1xuICAgIC8vIHNldCBwZXJtaXNzaW9uIHdpdGggYmluZFxuICAgIHRoaXMuYWdlbnRSdW50aW1lQXJ0aWZhY3QuYmluZCh0aGlzLCB0aGlzKTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmFnZW50UnVudGltZUFydGlmYWN0Ll9yZW5kZXIoKTtcbiAgICBpZiAoKGNvbmZpZyBhcyBhbnkpLmNvZGUpIHsgLy8gUzNJbWFnZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZUNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjb2RlOiAoY29uZmlnIGFzIGFueSkuY29kZSxcbiAgICAgICAgICBydW50aW1lOiAoY29uZmlnIGFzIGFueSkucnVudGltZSxcbiAgICAgICAgICBlbnRyeVBvaW50OiAoY29uZmlnIGFzIGFueSkuZW50cnlQb2ludCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVjckltYWdlIG9yIEFzc2V0SW1hZ2VcbiAgICAgIGNvbnN0IGNvbnRhaW5lclVyaSA9IChjb25maWcgYXMgYW55KS5jb250YWluZXJVcmk7XG4gICAgICBpZiAoY29udGFpbmVyVXJpKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb250YWluZXJVcmkoY29udGFpbmVyVXJpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRhaW5lckNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjb250YWluZXJVcmk6IGNvbnRhaW5lclVyaSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIHJlcXVlc3QgaGVhZGVyIGNvbmZpZ3VyYXRpb24gZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbihyZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbj86IFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKTogYW55IHtcbiAgICBpZiAoIXJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uPy5hbGxvd2xpc3RlZEhlYWRlcnMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByZXF1ZXN0SGVhZGVyQWxsb3dsaXN0OiByZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbi5hbGxvd2xpc3RlZEhlYWRlcnMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBsaWZlY3ljbGUgY29uZmlndXJhdGlvbiBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckxpZmVjeWNsZUNvbmZpZ3VyYXRpb24oKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dDogdGhpcy5saWZlY3ljbGVDb25maWd1cmF0aW9uPy5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICAgIG1heExpZmV0aW1lOiB0aGlzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/Lm1heExpZmV0aW1lPy50b1NlY29uZHMoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgcmVxdWVzdCBoZWFkZXIgY29uZmlndXJhdGlvblxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbihyZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbjogUmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBhbGxFcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycykge1xuICAgICAgaWYgKHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycy5sZW5ndGggPCAxIHx8IHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycy5sZW5ndGggPiAyMCkge1xuICAgICAgICBhbGxFcnJvcnMucHVzaCgnUmVxdWVzdCBoZWFkZXIgYWxsb3cgbGlzdCBjb250YWluIGJldHdlZW4gMSBhbmQgMjAgaGVhZGVycycpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiByZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbi5hbGxvd2xpc3RlZEhlYWRlcnMpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgbGVuZ3RoXG4gICAgICAgIGNvbnN0IGxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICAgIHZhbHVlOiBoZWFkZXIsXG4gICAgICAgICAgZmllbGROYW1lOiAnUmVxdWVzdCBoZWFkZXInLFxuICAgICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgICBtYXhMZW5ndGg6IDI1NixcbiAgICAgICAgfSk7XG4gICAgICAgIGFsbEVycm9ycy5wdXNoKC4uLmxlbmd0aEVycm9ycyk7XG5cbiAgICAgICAgY29uc3QgcGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICAgIGhlYWRlcixcbiAgICAgICAgICAnUmVxdWVzdCBoZWFkZXInLFxuICAgICAgICAgIC8oQXV0aG9yaXphdGlvbnxYLUFtem4tQmVkcm9jay1BZ2VudENvcmUtUnVudGltZS1DdXN0b20tW2EtekEtWjAtOS1dKykvLFxuICAgICAgICAgICdSZXF1ZXN0IGhlYWRlciBtdXN0IGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgaHlwaGVucycsXG4gICAgICAgICk7XG4gICAgICAgIGFsbEVycm9ycy5wdXNoKC4uLnBhdHRlcm5FcnJvcnMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWxsRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYWxsRXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBsaWZlY3ljbGUgY29uZmlndXJhdGlvblxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVMaWZlY3ljbGVDb25maWd1cmF0aW9uKGxpZmVjeWNsZUNvbmZpZ3VyYXRpb246IExpZmVjeWNsZUNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICBpZiAobGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0ICYmICFsaWZlY3ljbGVDb25maWd1cmF0aW9uLmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQuaXNVbnJlc29sdmVkKCkpIHtcbiAgICAgIGlmIChsaWZlY3ljbGVDb25maWd1cmF0aW9uLmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQudG9TZWNvbmRzKCkgPCBMSUZFQ1lDTEVfTUlOX1RJTUVPVVQudG9TZWNvbmRzKClcbiAgICAgICAgfHwgbGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0LnRvU2Vjb25kcygpID4gTElGRUNZQ0xFX01BWF9MSUZFVElNRS50b1NlY29uZHMoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBJZGxlIHJ1bnRpbWUgc2Vzc2lvbiB0aW1lb3V0IG11c3QgYmUgYmV0d2VlbiAke0xJRkVDWUNMRV9NSU5fVElNRU9VVC50b1NlY29uZHMoKX0gc2Vjb25kcyBhbmQgJHtMSUZFQ1lDTEVfTUFYX0xJRkVUSU1FLnRvU2Vjb25kcygpfSBzZWNvbmRzYCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChsaWZlY3ljbGVDb25maWd1cmF0aW9uLm1heExpZmV0aW1lICYmICFsaWZlY3ljbGVDb25maWd1cmF0aW9uLm1heExpZmV0aW1lLmlzVW5yZXNvbHZlZCgpKSB7XG4gICAgICBpZiAobGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5tYXhMaWZldGltZS50b1NlY29uZHMoKSA8IExJRkVDWUNMRV9NSU5fVElNRU9VVC50b1NlY29uZHMoKVxuICAgICAgICB8fCBsaWZlY3ljbGVDb25maWd1cmF0aW9uLm1heExpZmV0aW1lLnRvU2Vjb25kcygpID4gTElGRUNZQ0xFX01BWF9MSUZFVElNRS50b1NlY29uZHMoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBNYXhpbXVtIGxpZmV0aW1lIG11c3QgYmUgYmV0d2VlbiAke0xJRkVDWUNMRV9NSU5fVElNRU9VVC50b1NlY29uZHMoKX0gc2Vjb25kcyBhbmQgJHtMSUZFQ1lDTEVfTUFYX0xJRkVUSU1FLnRvU2Vjb25kcygpfSBzZWNvbmRzYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgcnVudGltZSBuYW1lIGZvcm1hdFxuICAgKiBQYXR0ZXJuOiBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJ1bnRpbWVOYW1lKCk6IHZvaWQge1xuICAgIC8vIFNraXAgdmFsaWRhdGlvbiBpZiB0aGUgbmFtZSBjb250YWlucyBDREsgdG9rZW5zICh1bnJlc29sdmVkIHZhbHVlcylcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMuYWdlbnRSdW50aW1lTmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsZW5ndGhcbiAgICBjb25zdCBsZW5ndGhFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgIHZhbHVlOiB0aGlzLmFnZW50UnVudGltZU5hbWUsXG4gICAgICBmaWVsZE5hbWU6ICdSdW50aW1lIG5hbWUnLFxuICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgbWF4TGVuZ3RoOiA0OCxcbiAgICB9KTtcblxuICAgIC8vIFZhbGlkYXRlIHBhdHRlcm5cbiAgICBjb25zdCBwYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICB0aGlzLmFnZW50UnVudGltZU5hbWUsXG4gICAgICAnUnVudGltZSBuYW1lJyxcbiAgICAgIC9eW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kLyxcbiAgICAgICdSdW50aW1lIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluIG9ubHkgbGV0dGVycywgbnVtYmVycywgYW5kIHVuZGVyc2NvcmVzJyxcbiAgICApO1xuXG4gICAgLy8gQ29tYmluZSBhbmQgdGhyb3cgaWYgYW55IGVycm9yc1xuICAgIGNvbnN0IGFsbEVycm9ycyA9IFsuLi5sZW5ndGhFcnJvcnMsIC4uLnBhdHRlcm5FcnJvcnNdO1xuICAgIGlmIChhbGxFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihhbGxFcnJvcnMuam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGRlc2NyaXB0aW9uIGZvcm1hdFxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMTIwMCBjaGFyYWN0ZXJzIChwZXIgQ2xvdWRGb3JtYXRpb24gc3BlY2lmaWNhdGlvbilcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRGVzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIHRoZSBkZXNjcmlwdGlvbiBjb250YWlucyBDREsgdG9rZW5zICh1bnJlc29sdmVkIHZhbHVlcylcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMuZGVzY3JpcHRpb24pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICB2YWx1ZTogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgZmllbGROYW1lOiAnRGVzY3JpcHRpb24nLFxuICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgIG1heExlbmd0aDogMTIwMCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihlcnJvcnMuam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqIC0gTWF4aW11bSA1MCBlbnRyaWVzXG4gICAqIC0gS2V5OiAxLTEwMCBjaGFyYWN0ZXJzXG4gICAqIC0gVmFsdWU6IDAtMjA0OCBjaGFyYWN0ZXJzIChwZXIgQ2xvdWRGb3JtYXRpb24gc3BlY2lmaWNhdGlvbilcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRW52aXJvbm1lbnRWYXJpYWJsZXMoZW52VmFyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhlbnZWYXJzKTtcblxuICAgIC8vIFZhbGlkYXRlIG51bWJlciBvZiBlbnRyaWVzICgwLTUwKVxuICAgIGlmIChlbnRyaWVzLmxlbmd0aCA+IDUwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgVG9vIG1hbnkgZW52aXJvbm1lbnQgdmFyaWFibGVzOiAke2VudHJpZXMubGVuZ3RofS4gTWF4aW11bSBhbGxvd2VkIGlzIDUwYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZW50cmllcykge1xuICAgICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIGtleSBvciB2YWx1ZSBjb250YWlucyBDREsgdG9rZW5zXG4gICAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGtleSkgfHwgVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUga2V5IGxlbmd0aFxuICAgICAgY29uc3QgbGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiBrZXksXG4gICAgICAgIGZpZWxkTmFtZTogYEVudmlyb25tZW50IHZhcmlhYmxlIGtleSAnJHtrZXl9J2AsXG4gICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgbWF4TGVuZ3RoOiAxMDAsXG4gICAgICB9KTtcblxuICAgICAgLy8gVmFsaWRhdGUga2V5IHBhdHRlcm5cbiAgICAgIGNvbnN0IHBhdHRlcm5FcnJvcnMgPSB2YWxpZGF0ZUZpZWxkUGF0dGVybihcbiAgICAgICAga2V5LFxuICAgICAgICBgRW52aXJvbm1lbnQgdmFyaWFibGUga2V5ICcke2tleX0nYCxcbiAgICAgICAgL15bYS16QS1aX11bYS16QS1aMC05X10qJC8sXG4gICAgICAgIGBFbnZpcm9ubWVudCB2YXJpYWJsZSBrZXkgJyR7a2V5fScgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIG9yIHVuZGVyc2NvcmUgYW5kIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgdW5kZXJzY29yZXNgLFxuICAgICAgKTtcblxuICAgICAgLy8gQ29tYmluZSBhbmQgdGhyb3cgaWYgYW55IGVycm9yc1xuICAgICAgY29uc3QgYWxsRXJyb3JzID0gWy4uLmxlbmd0aEVycm9ycywgLi4ucGF0dGVybkVycm9yc107XG4gICAgICBpZiAoYWxsRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihhbGxFcnJvcnMuam9pbignXFxuJykpO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSB2YWx1ZSBsZW5ndGggKDAtMjA0OCBjaGFyYWN0ZXJzIHBlciBDbG91ZEZvcm1hdGlvbilcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyMDQ4KSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgZW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWUgbGVuZ3RoIGZvciBrZXkgJyR7a2V5fSc6ICR7dmFsdWUubGVuZ3RofSBjaGFyYWN0ZXJzLiBgICtcbiAgICAgICAgICAnVmFsdWVzIG11c3Qgbm90IGV4Y2VlZCAyMDQ4IGNoYXJhY3RlcnMnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHRhZ3MgZm9ybWF0XG4gICAqIEBwYXJhbSB0YWdzIFRoZSB0YWdzIG9iamVjdCB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVUYWdzKHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICAvLyBWYWxpZGF0ZSBlYWNoIHRhZyBrZXkgYW5kIHZhbHVlXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGFncykpIHtcbiAgICAgIC8vIFNraXAgdmFsaWRhdGlvbiBpZiBrZXkgb3IgdmFsdWUgY29udGFpbnMgQ0RLIHRva2Vuc1xuICAgICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChrZXkpIHx8IFRva2VuLmlzVW5yZXNvbHZlZCh2YWx1ZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyBrZXkgbGVuZ3RoXG4gICAgICBjb25zdCBrZXlMZW5ndGhFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgICAgdmFsdWU6IGtleSxcbiAgICAgICAgZmllbGROYW1lOiBgVGFnIGtleSBcIiR7a2V5fVwiYCxcbiAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICBtYXhMZW5ndGg6IDI1NixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0YWcga2V5IHBhdHRlcm5cbiAgICAgIGNvbnN0IGtleVBhdHRlcm5FcnJvcnMgPSB2YWxpZGF0ZUZpZWxkUGF0dGVybihcbiAgICAgICAga2V5LFxuICAgICAgICBgVGFnIGtleSBcIiR7a2V5fVwiYCxcbiAgICAgICAgL15bYS16QS1aMC05XFxzLl86Lz0rQC1dKiQvLFxuICAgICAgICBgVGFnIGtleSBcIiR7a2V5fVwiIGNhbiBvbmx5IGNvbnRhaW4gbGV0dGVycyAoYS16LCBBLVopLCBudW1iZXJzICgwLTkpLCBzcGFjZXMsIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnMgKC5fOi89K0AtKWAsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIGtleSBlcnJvcnMgYW5kIHRocm93IGlmIGFueVxuICAgICAgY29uc3Qga2V5RXJyb3JzID0gWy4uLmtleUxlbmd0aEVycm9ycywgLi4ua2V5UGF0dGVybkVycm9yc107XG4gICAgICBpZiAoa2V5RXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihrZXlFcnJvcnMuam9pbignXFxuJykpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBUYWcgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZGApO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSB0YWcgdmFsdWUgbGVuZ3RoXG4gICAgICBjb25zdCB2YWx1ZUxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGZpZWxkTmFtZTogYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICBtaW5MZW5ndGg6IDAsXG4gICAgICAgIG1heExlbmd0aDogMjU2LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyB2YWx1ZSBwYXR0ZXJuXG4gICAgICBjb25zdCB2YWx1ZVBhdHRlcm5FcnJvcnMgPSB2YWxpZGF0ZUZpZWxkUGF0dGVybihcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGBUYWcgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiYCxcbiAgICAgICAgL15bYS16QS1aMC05XFxzLl86Lz0rQC1dKiQvLFxuICAgICAgICBgVGFnIHZhbHVlIGZvciBrZXkgXCIke2tleX1cIiBjYW4gb25seSBjb250YWluIGxldHRlcnMgKGEteiwgQS1aKSwgbnVtYmVycyAoMC05KSwgc3BhY2VzLCBhbmQgc3BlY2lhbCBjaGFyYWN0ZXJzICguXzovPStALSlgLFxuICAgICAgKTtcblxuICAgICAgLy8gQ29tYmluZSB2YWx1ZSBlcnJvcnMgYW5kIHRocm93IGlmIGFueVxuICAgICAgY29uc3QgdmFsdWVFcnJvcnMgPSBbLi4udmFsdWVMZW5ndGhFcnJvcnMsIC4uLnZhbHVlUGF0dGVybkVycm9yc107XG4gICAgICBpZiAodmFsdWVFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHZhbHVlRXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBjb250YWluZXIgVVJJIGZvcm1hdFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbnRhaW5lclVyaSh1cmk6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFNraXAgdmFsaWRhdGlvbiBpZiB0aGUgVVJJIGNvbnRhaW5zIENESyB0b2tlbnMgKHVucmVzb2x2ZWQgdmFsdWVzKVxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodXJpKSkge1xuICAgICAgLy8gQWRkIGEgd2FybmluZyB0aGF0IHZhbGlkYXRpb24gd2lsbCBiZSBza2lwcGVkIGZvciB0b2tlbi1iYXNlZCBVUklzXG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRJbmZvKFxuICAgICAgICAnQ29udGFpbmVyIFVSSSB2YWxpZGF0aW9uIHNraXBwZWQgYXMgaXQgY29udGFpbnMgdW5yZXNvbHZlZCBDREsgdG9rZW5zLiAnICtcbiAgICAgICAgJ1RoZSBVUkkgd2lsbCBiZSB2YWxpZGF0ZWQgYXQgZGVwbG95bWVudCB0aW1lLicsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE9ubHkgdmFsaWRhdGUgaWYgdGhlIFVSSSBpcyBhIGNvbmNyZXRlIHN0cmluZyAobm90IGEgdG9rZW4pXG4gICAgY29uc3QgcGF0dGVybiA9IC9eXFxkezEyfVxcLmRrclxcLmVjclxcLihbYS16MC05LV0rKVxcLmFtYXpvbmF3c1xcLmNvbVxcLygoPzpbYS16MC05XSsoPzpbLl8tXVthLXowLTldKykqXFwvKSpbYS16MC05XSsoPzpbLl8tXVthLXowLTldKykqKShbOkBdXFxTKykkLztcbiAgICBpZiAoIXBhdHRlcm4udGVzdCh1cmkpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgSW52YWxpZCBjb250YWluZXIgVVJJIGZvcm1hdDogJHt1cml9LiBNdXN0IGJlIGEgdmFsaWQgRUNSIFVSSSAoZS5nLiwgMTIzNDU2Nzg5MDEyLmRrci5lY3IudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20vbXktYWdlbnQ6bGF0ZXN0KWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIElBTSByb2xlIEFSTiBmb3JtYXQgYW5kIHN0cnVjdHVyZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVSb2xlQXJuKHJvbGVBcm46IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFZhbGlkYXRlIGJhc2ljIEFSTiBmb3JtYXQgZm9yIElBTSByb2xlc1xuICAgIGNvbnN0IGFyblBhdHRlcm4gPSAvXmFybjpbYS16XFwtXSs6aWFtOjpcXGR7MTJ9OnJvbGVcXC9bYS16QS1aMC05Kz0sLkBcXC1fXFwvXSskLztcbiAgICBpZiAoIWFyblBhdHRlcm4udGVzdChyb2xlQXJuKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgSW52YWxpZCBJQU0gcm9sZSBBUk4gZm9ybWF0OiAke3JvbGVBcm59LiBgICtcbiAgJ0V4cGVjdGVkIGZvcm1hdDogYXJuOjxwYXJ0aXRpb24+OmlhbTo6PGFjY291bnQtaWQ+OnJvbGUvPHJvbGUtbmFtZT4gb3IgYXJuOjxwYXJ0aXRpb24+OmlhbTo6PGFjY291bnQtaWQ+OnJvbGUvPHBhdGg+Lzxyb2xlLW5hbWU+Jyk7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdGhlIEFSTiBjb21wb25lbnRzIHVzaW5nIENESydzIEFybi5zcGxpdCgpXG4gICAgLy8gVXNlIFNMQVNIX1JFU09VUkNFX05BTUUgZm9ybWF0IGZvciBJQU0gcm9sZXMgKHdoaWNoIHVzZSBmb3JtYXQ6IHJvbGUvcm9sZS1uYW1lIG9yIHJvbGUvcGF0aC90by9yb2xlLW5hbWUpXG4gICAgY29uc3QgYXJuQ29tcG9uZW50cyA9IEFybi5zcGxpdChyb2xlQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSk7XG5cbiAgICBpZiAoYXJuQ29tcG9uZW50cy5zZXJ2aWNlICE9PSAnaWFtJykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgSW52YWxpZCBzZXJ2aWNlIGluIEFSTjogJHthcm5Db21wb25lbnRzLnNlcnZpY2V9LiBFeHBlY3RlZCAnaWFtJyBmb3IgSUFNIHJvbGUgQVJOLmApO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnRJZCA9IGFybkNvbXBvbmVudHMuYWNjb3VudDtcbiAgICBpZiAoIWFjY291bnRJZCB8fCAhL15cXGR7MTJ9JC8udGVzdChhY2NvdW50SWQpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBJbnZhbGlkIEFXUyBhY2NvdW50IElEIGluIHJvbGUgQVJOOiAke2FjY291bnRJZH0uIE11c3QgYmUgYSAxMi1kaWdpdCBudW1iZXIuYCk7XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCByb2xlIG5hbWUgZnJvbSByZXNvdXJjZVxuICAgIC8vIEZvciBJQU0gcm9sZXMsIHJlc291cmNlIHdpbGwgYmUgXCJyb2xlXCIgYW5kIHJlc291cmNlTmFtZSB3aWxsIGJlIHRoZSByb2xlIG5hbWUgKHdpdGggb3B0aW9uYWwgcGF0aClcbiAgICBjb25zdCByZXNvdXJjZSA9IGFybkNvbXBvbmVudHMucmVzb3VyY2U7XG4gICAgY29uc3QgcmVzb3VyY2VOYW1lID0gYXJuQ29tcG9uZW50cy5yZXNvdXJjZU5hbWU7XG5cbiAgICBpZiAocmVzb3VyY2UgIT09ICdyb2xlJykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgSW52YWxpZCByZXNvdXJjZSB0eXBlIGluIEFSTjogJHtyZXNvdXJjZX0uIEV4cGVjdGVkICdyb2xlJyBmb3IgSUFNIHJvbGUgQVJOLmApO1xuICAgIH1cblxuICAgIGlmICghcmVzb3VyY2VOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdSb2xlIG5hbWUgaXMgbWlzc2luZyBpbiB0aGUgQVJOJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJvbGVQYXRoUGFydHMgPSByZXNvdXJjZU5hbWUuc3BsaXQoJy8nKTtcbiAgICAgIGNvbnN0IHJvbGVOYW1lID0gcm9sZVBhdGhQYXJ0c1tyb2xlUGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAocm9sZU5hbWUubGVuZ3RoID4gNjQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgUm9sZSBuYW1lIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgNjQgY2hhcmFjdGVyczogJHtyb2xlTmFtZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdGFja0FjY291bnQgPSBTdGFjay5vZih0aGlzKS5hY2NvdW50O1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHN0YWNrQWNjb3VudCkgJiYgYWNjb3VudElkICE9PSBzdGFja0FjY291bnQpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmcoXG4gICAgICAgIGBJQU0gcm9sZSBpcyBmcm9tIGEgZGlmZmVyZW50IGFjY291bnQgKCR7YWNjb3VudElkfSkgdGhhbiB0aGUgc3RhY2sgYWNjb3VudCAoJHtzdGFja0FjY291bnR9KS4gYCArXG4gICAgICAgICdFbnN1cmUgY3Jvc3MtYWNjb3VudCBwZXJtaXNzaW9ucyBhcmUgcHJvcGVybHkgY29uZmlndXJlZC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgcmVnaW9uIChJQU0gaXMgZ2xvYmFsLCBzbyByZWdpb24gc2hvdWxkIGJlIGVtcHR5KVxuICAgIGNvbnN0IHJlZ2lvbiA9IGFybkNvbXBvbmVudHMucmVnaW9uO1xuICAgIGNvbnN0IHN0YWNrUmVnaW9uID0gU3RhY2sub2YodGhpcykucmVnaW9uO1xuICAgIGlmIChyZWdpb24gJiYgcmVnaW9uICE9PSAnJyAmJiByZWdpb24gIT09IHN0YWNrUmVnaW9uICYmICFUb2tlbi5pc1VucmVzb2x2ZWQoc3RhY2tSZWdpb24pKSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nKFxuICAgICAgICBgSUFNIHJvbGUgQVJOIGNvbnRhaW5zIGEgcmVnaW9uICgke3JlZ2lvbn0pIHRoYXQgZG9lc24ndCBtYXRjaCB0aGUgc3RhY2sgcmVnaW9uICgke3N0YWNrUmVnaW9ufSkuIGAgK1xuICAgICAgICAnSUFNIGlzIGEgZ2xvYmFsIHNlcnZpY2UsIHNvIHRoaXMgbWlnaHQgYmUgaW50ZW50aW9uYWwuJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBlbmRwb2ludCB0byB0aGlzIHJ1bnRpbWVcbiAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBSdW50aW1lRW5kcG9pbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcnVudGltZVxuICAgKlxuICAgKiBAcGFyYW0gZW5kcG9pbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbmRwb2ludFxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgZW5kcG9pbnRcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgUnVudGltZUVuZHBvaW50XG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkRW5kcG9pbnQoXG4gICAgZW5kcG9pbnROYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEFkZEVuZHBvaW50T3B0aW9ucyxcbiAgKTogUnVudGltZUVuZHBvaW50IHtcbiAgICAvLyBDcmVhdGUgdGhlIGVuZHBvaW50IChzZWN1cml0eSBjb25maWd1cmF0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQpXG4gICAgY29uc3QgZW5kcG9pbnQgPSBuZXcgUnVudGltZUVuZHBvaW50KHRoaXMsIGBFbmRwb2ludCR7ZW5kcG9pbnROYW1lfWAsIHtcbiAgICAgIGVuZHBvaW50TmFtZTogZW5kcG9pbnROYW1lLFxuICAgICAgYWdlbnRSdW50aW1lSWQ6IHRoaXMuYWdlbnRSdW50aW1lSWQsXG4gICAgICBhZ2VudFJ1bnRpbWVWZXJzaW9uOiBvcHRpb25zPy52ZXJzaW9uID8/IHRoaXMuYWdlbnRSdW50aW1lVmVyc2lvbiA/PyAnMScsXG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucz8uZGVzY3JpcHRpb24sXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgZGVwZW5kZW5jeTogZW5kcG9pbnQgbXVzdCB3YWl0IGZvciBydW50aW1lIHRvIGJlIGNyZWF0ZWRcbiAgICBlbmRwb2ludC5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5ydW50aW1lUmVzb3VyY2UpO1xuXG4gICAgcmV0dXJuIGVuZHBvaW50O1xuICB9XG59XG4iXX0=
|
|
696
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkNBQXdGO0FBQ3hGLHFFQUFxRTtBQUNyRSwyQ0FBMkM7QUFDM0MsMkNBQTJDO0FBQzNDLDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFFMUUsbUNBUWlCO0FBR2pCLGlEQUEyRjtBQUMzRix5REFBcUQ7QUFDckQsbUNBQTJGO0FBQzNGLDZEQUFrRztBQUNsRyw0RUFBK0U7QUFFL0U7OytFQUUrRTtBQUMvRTs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFHLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRW5EOzs7R0FHRztBQUNILE1BQU0sc0JBQXNCLEdBQUcsc0JBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFzR3ZEOzsrRUFFK0U7QUFFL0U7Ozs7Ozs7R0FPRztJQUVVLE9BQU87NEJBRG5CLG9DQUFrQjs7OztzQkFDVSwwQkFBVzs7O3VCQUFuQixTQUFRLFdBQVc7Ozs7dUNBd3BCckMsSUFBQSxrQ0FBYyxHQUFFO1lBQ2pCLG9MQUFPLFdBQVcsNkRBZ0JqQjtZQXpxQkgsNktBMHFCQzs7Ozs7UUF6cUJDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQVcsOENBQThDLENBQUM7UUFFdEc7Ozs7Ozs7O1dBUUc7UUFDSSxNQUFNLENBQUMsMEJBQTBCLENBQ3RDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUE2Qjs7Ozs7Ozs7OztZQUU3QixNQUFNLDJCQUE0QixTQUFRLDBCQUFXO2dCQUNuQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztnQkFDeEMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7Z0JBQ3RDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDMUMsbUJB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aW1wb3J0IHsgRHVyYXRpb24sIFN0YWNrLCBBbm5vdGF0aW9ucywgVG9rZW4sIEFybiwgQXJuRm9ybWF0LCBMYXp5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYmVkcm9ja2FnZW50Y29yZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBSVU5USU1FX0xPR1NfR1JPVVBfQUNUSU9OUyxcbiAgUlVOVElNRV9MT0dTX0RFU0NSSUJFX0FDVElPTlMsXG4gIFJVTlRJTUVfTE9HU19TVFJFQU1fQUNUSU9OUyxcbiAgUlVOVElNRV9YUkFZX0FDVElPTlMsXG4gIFJVTlRJTUVfQ0xPVURXQVRDSF9NRVRSSUNTX0FDVElPTlMsXG4gIFJVTlRJTUVfQ0xPVURXQVRDSF9OQU1FU1BBQ0UsXG4gIFJVTlRJTUVfV09SS0xPQURfSURFTlRJVFlfQUNUSU9OUyxcbn0gZnJvbSAnLi9wZXJtcyc7XG5pbXBvcnQgeyBBZ2VudFJ1bnRpbWVBcnRpZmFjdCB9IGZyb20gJy4vcnVudGltZS1hcnRpZmFjdCc7XG5pbXBvcnQgeyBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3J1bnRpbWUtYXV0aG9yaXplci1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IFJ1bnRpbWVCYXNlLCBJQmVkcm9ja0FnZW50UnVudGltZSwgQWdlbnRSdW50aW1lQXR0cmlidXRlcyB9IGZyb20gJy4vcnVudGltZS1iYXNlJztcbmltcG9ydCB7IFJ1bnRpbWVFbmRwb2ludCB9IGZyb20gJy4vcnVudGltZS1lbmRwb2ludCc7XG5pbXBvcnQgeyBMaWZlY3ljbGVDb25maWd1cmF0aW9uLCBQcm90b2NvbFR5cGUsIFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZ0ZpZWxkLCBWYWxpZGF0aW9uRXJyb3IsIHZhbGlkYXRlRmllbGRQYXR0ZXJuIH0gZnJvbSAnLi92YWxpZGF0aW9uLWhlbHBlcnMnO1xuaW1wb3J0IHsgUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vbmV0d29yay9uZXR3b3JrLWNvbmZpZ3VyYXRpb24nO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRzXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKipcbiAqIE1pbmltdW0gdGltZW91dCBmb3IgaWRsZSBydW50aW1lIHNlc3Npb25zXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTElGRUNZQ0xFX01JTl9USU1FT1VUID0gRHVyYXRpb24uc2Vjb25kcyg2MCk7XG5cbi8qKlxuICogTWF4aW11bSBsaWZldGltZSBmb3IgdGhlIGluc3RhbmNlXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgTElGRUNZQ0xFX01BWF9MSUZFVElNRSA9IER1cmF0aW9uLnNlY29uZHMoMjg4MDApO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcHNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIEJlZHJvY2sgQWdlbnQgQ29yZSBSdW50aW1lIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIFZhbGlkIGNoYXJhY3RlcnMgYXJlIGEteiwgQS1aLCAwLTksIF8gKHVuZGVyc2NvcmUpXG4gICAqIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY2FuIGJlIHVwIHRvIDQ4IGNoYXJhY3RlcnMgbG9uZ1xuICAgKiBQYXR0ZXJuOiBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kXG4gICAqL1xuICByZWFkb25seSBydW50aW1lTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJ0aWZhY3QgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQ29udGFpbnMgdGhlIGNvbnRhaW5lciBjb25maWd1cmF0aW9uIHdpdGggRUNSIFVSSVxuICAgKi9cbiAgcmVhZG9ubHkgYWdlbnRSdW50aW1lQXJ0aWZhY3Q6IEFnZW50UnVudGltZUFydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBwcm92aWRlcyBwZXJtaXNzaW9ucyBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogSWYgbm90IHByb3ZpZGVkLCBhIHJvbGUgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHlcbiAgICogQGRlZmF1bHQgLSBBIG5ldyByb2xlIHdpbGwgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogTmV0d29yayBjb25maWd1cmF0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAZGVmYXVsdCAtIFJ1bnRpbWVOZXR3b3JrQ29uZmlndXJhdGlvbi51c2luZ1B1YmxpY05ldHdvcmsoKVxuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29ya0NvbmZpZ3VyYXRpb24/OiBSdW50aW1lTmV0d29ya0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGRlc2NyaXB0aW9uIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqIExlbmd0aCBNaW5pbXVtOiAxICwgTWF4aW11bTogMTIwMFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb3RvY29sIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBkZWZhdWx0IC0gUHJvdG9jb2xUeXBlLkhUVFBcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sQ29uZmlndXJhdGlvbj86IFByb3RvY29sVHlwZTtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiAtIE1heGltdW0gNTAgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqIC0gS2V5OiBNdXN0IGJlIDEtMTAwIGNoYXJhY3RlcnMsIHN0YXJ0IHdpdGggbGV0dGVyIG9yIHVuZGVyc2NvcmUsIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgdW5kZXJzY29yZXNcbiAgICogLSBWYWx1ZTogTXVzdCBiZSAwLTIwNDggY2hhcmFjdGVycyAocGVyIENsb3VkRm9ybWF0aW9uIHNwZWNpZmljYXRpb24pXG4gICAqIEBkZWZhdWx0IC0gTm8gZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudFZhcmlhYmxlcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEF1dGhvcml6ZXIgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogVXNlIFJ1bnRpbWVBdXRob3JpemVyQ29uZmlndXJhdGlvbiBzdGF0aWMgbWV0aG9kcyB0byBjcmVhdGUgdGhlIGNvbmZpZ3VyYXRpb25cbiAgICogQGRlZmF1bHQgLSBSdW50aW1lQXV0aG9yaXplckNvbmZpZ3VyYXRpb24uaWFtKCkgKElBTSBhdXRoZW50aWNhdGlvbilcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcml6ZXJDb25maWd1cmF0aW9uPzogUnVudGltZUF1dGhvcml6ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUYWdzIGZvciB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBBIGxpc3Qgb2Yga2V5OnZhbHVlIHBhaXJzIG9mIHRhZ3MgdG8gYXBwbHkgdG8gdGhpcyBSdW50aW1lIHJlc291cmNlXG4gICAqIEBkZWZhdWx0IHt9IC0gbm8gdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIEhUVFAgcmVxdWVzdCBoZWFkZXJzIHRoYXQgd2lsbCBiZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgcnVudGltZS5cbiAgICogQGRlZmF1bHQgLSBObyByZXF1ZXN0IGhlYWRlcnMgY29uZmlndXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24/OiBSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGxpZmUgY3ljbGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIEFnZW50Q29yZSBSdW50aW1lLlxuICAgKiBAZGVmYXVsdCAtIE5vIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBsaWZlY3ljbGVDb25maWd1cmF0aW9uPzogTGlmZWN5Y2xlQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhZGRpbmcgYW4gZW5kcG9pbnQgdG8gdGhlIHJ1bnRpbWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRFbmRwb2ludE9wdGlvbnMge1xuICAvKipcbiAgICogRGVzY3JpcHRpb24gZm9yIHRoZSBlbmRwb2ludCwgTXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEyMDAgY2hhcmFjdGVyc1xuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBydW50aW1lIHZlcnNpb24gZm9yIHRoaXMgZW5kcG9pbnRcbiAgICogQGRlZmF1bHQgIDFcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc1xuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIEJlZHJvY2sgQWdlbnQgQ29yZSBSdW50aW1lXG4gKiBFbmFibGVzIHJ1bm5pbmcgY29udGFpbmVyaXplZCBhZ2VudHMgd2l0aCBzcGVjaWZpYyBuZXR3b3JrIGNvbmZpZ3VyYXRpb25zLFxuICogc2VjdXJpdHkgc2V0dGluZ3MsIGFuZCBydW50aW1lIGFydGlmYWN0cy5cbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpSdW50aW1lXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvcnVudGltZS5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBSdW50aW1lIGV4dGVuZHMgUnVudGltZUJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1iZWRyb2NrLWFnZW50Y29yZS1hbHBoYS5SdW50aW1lJztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIEFnZW50IFJ1bnRpbWUgdXNpbmcgYXR0cmlidXRlc1xuICAgKiBUaGlzIGFsbG93cyB5b3UgdG8gcmVmZXJlbmNlIGFuIEFnZW50IFJ1bnRpbWUgdGhhdCB3YXMgY3JlYXRlZCBvdXRzaWRlIG9mIENES1xuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCBpZFxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGV4aXN0aW5nIEFnZW50IFJ1bnRpbWVcbiAgICogQHJldHVybnMgQW4gSUJlZHJvY2tBZ2VudFJ1bnRpbWUgaW5zdGFuY2UgcmVwcmVzZW50aW5nIHRoZSBpbXBvcnRlZCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21BZ2VudFJ1bnRpbWVBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogQWdlbnRSdW50aW1lQXR0cmlidXRlcyxcbiAgKTogSUJlZHJvY2tBZ2VudFJ1bnRpbWUge1xuICAgIGNsYXNzIEltcG9ydGVkQmVkcm9ja0FnZW50UnVudGltZSBleHRlbmRzIFJ1bnRpbWVCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVBcm4gPSBhdHRycy5hZ2VudFJ1bnRpbWVBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lSWQgPSBhdHRycy5hZ2VudFJ1bnRpbWVJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVOYW1lID0gYXR0cnMuYWdlbnRSdW50aW1lTmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhZ2VudFJ1bnRpbWVWZXJzaW9uID0gYXR0cnMuYWdlbnRSdW50aW1lVmVyc2lvbjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhZ2VudFN0YXR1cyA9IGF0dHJzLmFnZW50U3RhdHVzO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uID0gYXR0cnMuZGVzY3JpcHRpb247XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0ID0gYXR0cnMuY3JlYXRlZEF0O1xuICAgICAgcHVibGljIHJlYWRvbmx5IGxhc3RVcGRhdGVkQXQgPSBhdHRycy5sYXN0VXBkYXRlZEF0O1xuXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcm9sZTogaWFtLklSb2xlO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcblxuICAgICAgY29uc3RydWN0b3IoczogQ29uc3RydWN0LCBpOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIocywgaSk7XG4gICAgICAgIHRoaXMucm9sZSA9IGlhbS5Sb2xlLmZyb21Sb2xlQXJuKHRoaXMsICdSb2xlJywgYXR0cnMucm9sZUFybik7XG4gICAgICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLnJvbGU7XG4gICAgICAgIGlmIChhdHRycy5zZWN1cml0eUdyb3Vwcykge1xuICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rpb25zID0gbmV3IGVjMi5Db25uZWN0aW9ucyh7XG4gICAgICAgICAgICBzZWN1cml0eUdyb3VwczogYXR0cnMuc2VjdXJpdHlHcm91cHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydGVkQmVkcm9ja0FnZW50UnVudGltZShzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgQVJOIG9mIHRoaXMgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIElEIG9mIHRoaXMgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZUlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYWdlbnQgcnVudGltZVxuICAgKiBAYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoaXMgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50UnVudGltZU5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBhZ2VudCBydW50aW1lXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIHZlcnNpb24gb2YgdGhpcyBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lVmVyc2lvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgc3RhdHVzIG9mIHRoaXMgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFnZW50U3RhdHVzPzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgZGVzY3JpcHRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIGFnZW50IHJ1bnRpbWUgd2FzIGNyZWF0ZWRcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBAcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gdGltZXN0YW1wIG9mIHRoaXMgYWdlbnQgcnVudGltZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgYWdlbnQgcnVudGltZSB3YXMgbGFzdCB1cGRhdGVkXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogQHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIGxhc3QgdXBkYXRlIHRpbWVzdGFtcCBvZiB0aGlzIGFnZW50IHJ1bnRpbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBsYXN0VXBkYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuICBwcml2YXRlIHJlYWRvbmx5IHJ1bnRpbWVSZXNvdXJjZTogYmVkcm9ja2FnZW50Y29yZS5DZm5SdW50aW1lO1xuICAvKipcbiAgICogVGhlIGFydGlmYWN0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZ2VudCBydW50aW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWdlbnRSdW50aW1lQXJ0aWZhY3Q6IEFnZW50UnVudGltZUFydGlmYWN0O1xuICBwcml2YXRlIHJlYWRvbmx5IG5ldHdvcmtDb25maWd1cmF0aW9uOiBSdW50aW1lTmV0d29ya0NvbmZpZ3VyYXRpb24gO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3RvY29sQ29uZmlndXJhdGlvbjogUHJvdG9jb2xUeXBlO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGhvcml6ZXJDb25maWd1cmF0aW9uPzogUnVudGltZUF1dGhvcml6ZXJDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IGxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/OiBMaWZlY3ljbGVDb25maWd1cmF0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSdW50aW1lUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLmFnZW50UnVudGltZU5hbWUgPSBwcm9wcy5ydW50aW1lTmFtZTtcbiAgICB0aGlzLnZhbGlkYXRlUnVudGltZU5hbWUoKTtcblxuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBwcm9wcy5kZXNjcmlwdGlvbjtcbiAgICBpZiAodGhpcy5kZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy52YWxpZGF0ZURlc2NyaXB0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmVudmlyb25tZW50VmFyaWFibGVzKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlRW52aXJvbm1lbnRWYXJpYWJsZXMocHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZXMpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy50YWdzKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlVGFncyhwcm9wcy50YWdzKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMucmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRoaXMudmFsaWRhdGVSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbihwcm9wcy5yZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgdGhpcy5saWZlY3ljbGVDb25maWd1cmF0aW9uID0gcHJvcHMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbiA/IHtcbiAgICAgIGlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQ6IHByb3BzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/LmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQsXG4gICAgICBtYXhMaWZldGltZTogcHJvcHMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbj8ubWF4TGlmZXRpbWUsXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRoaXMudmFsaWRhdGVMaWZlY3ljbGVDb25maWd1cmF0aW9uKHRoaXMubGlmZWN5Y2xlQ29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmV4ZWN1dGlvblJvbGUpIHtcbiAgICAgIHRoaXMucm9sZSA9IHByb3BzLmV4ZWN1dGlvblJvbGU7XG4gICAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5leGVjdXRpb25Sb2xlLnJvbGVBcm4pKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVSb2xlQXJuKHByb3BzLmV4ZWN1dGlvblJvbGUucm9sZUFybik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnRXhlY3V0aW9uUm9sZScsIHtcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2JlZHJvY2stYWdlbnRjb3JlLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdFeGVjdXRpb24gcm9sZSBmb3IgQmVkcm9jayBBZ2VudCBDb3JlIFJ1bnRpbWUnLFxuICAgICAgICBtYXhTZXNzaW9uRHVyYXRpb246IER1cmF0aW9uLmhvdXJzKDgpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuYWRkRXhlY3V0aW9uUm9sZVBlcm1pc3Npb25zKCk7XG5cbiAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5yb2xlO1xuICAgIHRoaXMuYWdlbnRSdW50aW1lQXJ0aWZhY3QgPSBwcm9wcy5hZ2VudFJ1bnRpbWVBcnRpZmFjdDtcbiAgICAvLyBTZXQgdXAgbmV0d29yayBjb25maWd1cmF0aW9uIHdpdGggVlBDIHN1cHBvcnRcbiAgICB0aGlzLm5ldHdvcmtDb25maWd1cmF0aW9uID0gcHJvcHMubmV0d29ya0NvbmZpZ3VyYXRpb24gPz8gUnVudGltZU5ldHdvcmtDb25maWd1cmF0aW9uLnVzaW5nUHVibGljTmV0d29yaygpO1xuICAgIC8vIFNldCBjb25uZWN0aW9ucyAtIGNyZWF0ZSBhIHNoYXJlZCBjb25uZWN0aW9ucyBvYmplY3RcbiAgICBpZiAodGhpcy5uZXR3b3JrQ29uZmlndXJhdGlvbi5jb25uZWN0aW9ucykge1xuICAgICAgLy8gVXNlIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24ncyBjb25uZWN0aW9ucyBhcyB0aGUgc2hhcmVkIG9iamVjdFxuICAgICAgdGhpcy5fY29ubmVjdGlvbnMgPSB0aGlzLm5ldHdvcmtDb25maWd1cmF0aW9uLmNvbm5lY3Rpb25zO1xuICAgIH1cbiAgICB0aGlzLnByb3RvY29sQ29uZmlndXJhdGlvbiA9IHByb3BzLnByb3RvY29sQ29uZmlndXJhdGlvbiA/PyBQcm90b2NvbFR5cGUuSFRUUDtcbiAgICB0aGlzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uID0gcHJvcHMuYXV0aG9yaXplckNvbmZpZ3VyYXRpb247XG5cbiAgICBjb25zdCBjZm5Qcm9wczogYW55ID0ge1xuICAgICAgYWdlbnRSdW50aW1lTmFtZTogdGhpcy5hZ2VudFJ1bnRpbWVOYW1lLFxuICAgICAgcm9sZUFybjogdGhpcy5yb2xlLnJvbGVBcm4sXG4gICAgICBhZ2VudFJ1bnRpbWVBcnRpZmFjdDogTGF6eS5hbnkoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLnJlbmRlckFnZW50UnVudGltZUFydGlmYWN0KCksXG4gICAgICB9KSxcbiAgICAgIG5ldHdvcmtDb25maWd1cmF0aW9uOiBMYXp5LmFueSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMubmV0d29ya0NvbmZpZ3VyYXRpb24uX3JlbmRlcih0aGlzLl9jb25uZWN0aW9ucyksXG4gICAgICB9KSxcbiAgICAgIHByb3RvY29sQ29uZmlndXJhdGlvbjogTGF6eS5zdHJpbmcoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLnByb3RvY29sQ29uZmlndXJhdGlvbixcbiAgICAgIH0pLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IExhenkuYW55KHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5yZW5kZXJFbnZpcm9ubWVudFZhcmlhYmxlcyhwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlcyksXG4gICAgICB9KSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MgPz8ge30sXG4gICAgICBsaWZlY3ljbGVDb25maWd1cmF0aW9uOiB0aGlzLnJlbmRlckxpZmVjeWNsZUNvbmZpZ3VyYXRpb24oKSxcbiAgICB9O1xuICAgIGlmIChwcm9wcy5yZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbikge1xuICAgICAgY2ZuUHJvcHMucmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24gPSB0aGlzLnJlbmRlclJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKHByb3BzLnJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmF1dGhvcml6ZXJDb25maWd1cmF0aW9uKSB7XG4gICAgICBjZm5Qcm9wcy5hdXRob3JpemVyQ29uZmlndXJhdGlvbiA9IExhenkuYW55KHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5hdXRob3JpemVyQ29uZmlndXJhdGlvbiEuX3JlbmRlcigpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5ydW50aW1lUmVzb3VyY2UgPSBuZXcgYmVkcm9ja2FnZW50Y29yZS5DZm5SdW50aW1lKHRoaXMsICdSZXNvdXJjZScsIGNmblByb3BzIGFzIGJlZHJvY2thZ2VudGNvcmUuQ2ZuUnVudGltZVByb3BzKTtcblxuICAgIC8vIEFkZCBkZXBlbmRlbmN5IG9uIHRoZSByb2xlIChmb3IgYm90aCBjdXN0b20gYW5kIGF1dG8tY3JlYXRlZCByb2xlcylcbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIFJ1bnRpbWUgd2FpdHMgZm9yIHRoZSByb2xlIGFuZCBhbGwgaXRzIHBvbGljaWVzIChpbmNsdWRpbmcgRUNSIHBlcm1pc3Npb25zKSB0byBiZSBjcmVhdGVkXG4gICAgdGhpcy5ydW50aW1lUmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMucm9sZSk7XG5cbiAgICB0aGlzLmFnZW50UnVudGltZUlkID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0ckFnZW50UnVudGltZUlkO1xuICAgIHRoaXMuYWdlbnRSdW50aW1lQXJuID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0ckFnZW50UnVudGltZUFybjtcbiAgICB0aGlzLmFnZW50U3RhdHVzID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0clN0YXR1cztcbiAgICB0aGlzLmFnZW50UnVudGltZVZlcnNpb24gPSB0aGlzLnJ1bnRpbWVSZXNvdXJjZS5hdHRyQWdlbnRSdW50aW1lVmVyc2lvbjtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHRoaXMucnVudGltZVJlc291cmNlLmF0dHJDcmVhdGVkQXQ7XG4gICAgdGhpcy5sYXN0VXBkYXRlZEF0ID0gdGhpcy5ydW50aW1lUmVzb3VyY2UuYXR0ckxhc3RVcGRhdGVkQXQ7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBDbG91ZEZvcm1hdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyRW52aXJvbm1lbnRWYXJpYWJsZXMoZW52VmFycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiBhbnkge1xuICAgIGlmICghZW52VmFycyB8fCBPYmplY3Qua2V5cyhlbnZWYXJzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBlbnZWYXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcHJvcGVyIHBlcm1pc3Npb25zIHRvIHRoZSBleGVjdXRpb24gcm9sZSBmb3IgdGhlIGFnZW50IHJ1bnRpbWVcbiAgICogQmFzZWQgb246IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvcnVudGltZS1wZXJtaXNzaW9ucy5odG1sXG4gICAqL1xuICBwcml2YXRlIGFkZEV4ZWN1dGlvblJvbGVQZXJtaXNzaW9ucygpIHtcbiAgICBjb25zdCByZWdpb24gPSBTdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgY29uc3QgYWNjb3VudCA9IFN0YWNrLm9mKHRoaXMpLmFjY291bnQ7XG5cbiAgICAvLyBDbG91ZFdhdGNoIExvZ3MgLSBMb2cgR3JvdXAgb3BlcmF0aW9uc1xuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdMb2dHcm91cEFjY2VzcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX0xPR1NfR1JPVVBfQUNUSU9OUyxcbiAgICAgIHJlc291cmNlczogW2Bhcm46JHtTdGFjay5vZih0aGlzKS5wYXJ0aXRpb259OmxvZ3M6JHtyZWdpb259OiR7YWNjb3VudH06bG9nLWdyb3VwOi9hd3MvYmVkcm9jay1hZ2VudGNvcmUvcnVudGltZXMvKmBdLFxuICAgIH0pKTtcblxuICAgIC8vIENsb3VkV2F0Y2ggTG9ncyAtIERlc2NyaWJlIGFsbCBsb2cgZ3JvdXBzXG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogJ0Rlc2NyaWJlTG9nR3JvdXBzJyxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFJVTlRJTUVfTE9HU19ERVNDUklCRV9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke1N0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbn06bG9nczoke3JlZ2lvbn06JHthY2NvdW50fTpsb2ctZ3JvdXA6KmBdLFxuICAgIH0pKTtcblxuICAgIC8vIENsb3VkV2F0Y2ggTG9ncyAtIExvZyBTdHJlYW0gb3BlcmF0aW9uc1xuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdMb2dTdHJlYW1BY2Nlc3MnLFxuICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogUlVOVElNRV9MT0dTX1NUUkVBTV9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbYGFybjoke1N0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbn06bG9nczoke3JlZ2lvbn06JHthY2NvdW50fTpsb2ctZ3JvdXA6L2F3cy9iZWRyb2NrLWFnZW50Y29yZS9ydW50aW1lcy8qOmxvZy1zdHJlYW06KmBdLFxuICAgIH0pKTtcblxuICAgIC8vIFgtUmF5IFRyYWNpbmcgLSBtdXN0IGJlICogZm9yIHRyYWNpbmdcbiAgICB0aGlzLnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnWFJheUFjY2VzcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX1hSQVlfQUNUSU9OUyxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuXG4gICAgLy8gQ2xvdWRXYXRjaCBNZXRyaWNzIC0gc2NvcGVkIHRvIGJlZHJvY2stYWdlbnRjb3JlIG5hbWVzcGFjZVxuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6ICdDbG91ZFdhdGNoTWV0cmljcycsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX0NMT1VEV0FUQ0hfTUVUUklDU19BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgJ2Nsb3Vkd2F0Y2g6bmFtZXNwYWNlJzogUlVOVElNRV9DTE9VRFdBVENIX05BTUVTUEFDRSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSkpO1xuXG4gICAgLy8gQmVkcm9jayBBZ2VudENvcmUgV29ya2xvYWQgSWRlbnRpdHkgQWNjZXNzXG4gICAgLy8gTm90ZTogVGhlIGFnZW50IG5hbWUgd2lsbCBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUsIHNvIHdlIHVzZSBhIHdpbGRjYXJkIHBhdHRlcm5cbiAgICB0aGlzLnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiAnR2V0QWdlbnRBY2Nlc3NUb2tlbicsXG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICBhY3Rpb25zOiBSVU5USU1FX1dPUktMT0FEX0lERU5USVRZX0FDVElPTlMsXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgYGFybjoke1N0YWNrLm9mKHRoaXMpLnBhcnRpdGlvbn06YmVkcm9jay1hZ2VudGNvcmU6JHtyZWdpb259OiR7YWNjb3VudH06d29ya2xvYWQtaWRlbnRpdHktZGlyZWN0b3J5L2RlZmF1bHRgLFxuICAgICAgICBgYXJuOiR7U3RhY2sub2YodGhpcykucGFydGl0aW9ufTpiZWRyb2NrLWFnZW50Y29yZToke3JlZ2lvbn06JHthY2NvdW50fTp3b3JrbG9hZC1pZGVudGl0eS1kaXJlY3RvcnkvZGVmYXVsdC93b3JrbG9hZC1pZGVudGl0eS8qYCxcbiAgICAgIF0sXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGFydGlmYWN0IGNvbmZpZ3VyYXRpb24gZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJBZ2VudFJ1bnRpbWVBcnRpZmFjdCgpOiBhbnkge1xuICAgIC8vIHNldCBwZXJtaXNzaW9uIHdpdGggYmluZFxuICAgIHRoaXMuYWdlbnRSdW50aW1lQXJ0aWZhY3QuYmluZCh0aGlzLCB0aGlzKTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmFnZW50UnVudGltZUFydGlmYWN0Ll9yZW5kZXIoKTtcbiAgICBpZiAoKGNvbmZpZyBhcyBhbnkpLmNvZGUpIHsgLy8gUzNJbWFnZVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZUNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjb2RlOiAoY29uZmlnIGFzIGFueSkuY29kZSxcbiAgICAgICAgICBydW50aW1lOiAoY29uZmlnIGFzIGFueSkucnVudGltZSxcbiAgICAgICAgICBlbnRyeVBvaW50OiAoY29uZmlnIGFzIGFueSkuZW50cnlQb2ludCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVjckltYWdlIG9yIEFzc2V0SW1hZ2VcbiAgICAgIGNvbnN0IGNvbnRhaW5lclVyaSA9IChjb25maWcgYXMgYW55KS5jb250YWluZXJVcmk7XG4gICAgICBpZiAoY29udGFpbmVyVXJpKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb250YWluZXJVcmkoY29udGFpbmVyVXJpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRhaW5lckNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjb250YWluZXJVcmk6IGNvbnRhaW5lclVyaSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIHJlcXVlc3QgaGVhZGVyIGNvbmZpZ3VyYXRpb24gZm9yIENsb3VkRm9ybWF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbihyZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbj86IFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uKTogYW55IHtcbiAgICBpZiAoIXJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uPy5hbGxvd2xpc3RlZEhlYWRlcnMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByZXF1ZXN0SGVhZGVyQWxsb3dsaXN0OiByZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbi5hbGxvd2xpc3RlZEhlYWRlcnMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBsaWZlY3ljbGUgY29uZmlndXJhdGlvbiBmb3IgQ2xvdWRGb3JtYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckxpZmVjeWNsZUNvbmZpZ3VyYXRpb24oKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWRsZVJ1bnRpbWVTZXNzaW9uVGltZW91dDogdGhpcy5saWZlY3ljbGVDb25maWd1cmF0aW9uPy5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICAgIG1heExpZmV0aW1lOiB0aGlzLmxpZmVjeWNsZUNvbmZpZ3VyYXRpb24/Lm1heExpZmV0aW1lPy50b1NlY29uZHMoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgcmVxdWVzdCBoZWFkZXIgY29uZmlndXJhdGlvblxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVSZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbihyZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbjogUmVxdWVzdEhlYWRlckNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBhbGxFcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycykge1xuICAgICAgaWYgKHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycy5sZW5ndGggPCAxIHx8IHJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uLmFsbG93bGlzdGVkSGVhZGVycy5sZW5ndGggPiAyMCkge1xuICAgICAgICBhbGxFcnJvcnMucHVzaCgnUmVxdWVzdCBoZWFkZXIgYWxsb3cgbGlzdCBjb250YWluIGJldHdlZW4gMSBhbmQgMjAgaGVhZGVycycpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiByZXF1ZXN0SGVhZGVyQ29uZmlndXJhdGlvbi5hbGxvd2xpc3RlZEhlYWRlcnMpIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgbGVuZ3RoXG4gICAgICAgIGNvbnN0IGxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICAgIHZhbHVlOiBoZWFkZXIsXG4gICAgICAgICAgZmllbGROYW1lOiAnUmVxdWVzdCBoZWFkZXInLFxuICAgICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgICBtYXhMZW5ndGg6IDI1NixcbiAgICAgICAgfSk7XG4gICAgICAgIGFsbEVycm9ycy5wdXNoKC4uLmxlbmd0aEVycm9ycyk7XG5cbiAgICAgICAgY29uc3QgcGF0dGVybkVycm9ycyA9IHZhbGlkYXRlRmllbGRQYXR0ZXJuKFxuICAgICAgICAgIGhlYWRlcixcbiAgICAgICAgICAnUmVxdWVzdCBoZWFkZXInLFxuICAgICAgICAgIC8oQXV0aG9yaXphdGlvbnxYLUFtem4tQmVkcm9jay1BZ2VudENvcmUtUnVudGltZS1DdXN0b20tW2EtekEtWjAtOS1dKykvLFxuICAgICAgICAgICdSZXF1ZXN0IGhlYWRlciBtdXN0IGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgaHlwaGVucycsXG4gICAgICAgICk7XG4gICAgICAgIGFsbEVycm9ycy5wdXNoKC4uLnBhdHRlcm5FcnJvcnMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWxsRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYWxsRXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBsaWZlY3ljbGUgY29uZmlndXJhdGlvblxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVMaWZlY3ljbGVDb25maWd1cmF0aW9uKGxpZmVjeWNsZUNvbmZpZ3VyYXRpb246IExpZmVjeWNsZUNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICBpZiAobGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0ICYmICFsaWZlY3ljbGVDb25maWd1cmF0aW9uLmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQuaXNVbnJlc29sdmVkKCkpIHtcbiAgICAgIGlmIChsaWZlY3ljbGVDb25maWd1cmF0aW9uLmlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQudG9TZWNvbmRzKCkgPCBMSUZFQ1lDTEVfTUlOX1RJTUVPVVQudG9TZWNvbmRzKClcbiAgICAgICAgfHwgbGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5pZGxlUnVudGltZVNlc3Npb25UaW1lb3V0LnRvU2Vjb25kcygpID4gTElGRUNZQ0xFX01BWF9MSUZFVElNRS50b1NlY29uZHMoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBJZGxlIHJ1bnRpbWUgc2Vzc2lvbiB0aW1lb3V0IG11c3QgYmUgYmV0d2VlbiAke0xJRkVDWUNMRV9NSU5fVElNRU9VVC50b1NlY29uZHMoKX0gc2Vjb25kcyBhbmQgJHtMSUZFQ1lDTEVfTUFYX0xJRkVUSU1FLnRvU2Vjb25kcygpfSBzZWNvbmRzYCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChsaWZlY3ljbGVDb25maWd1cmF0aW9uLm1heExpZmV0aW1lICYmICFsaWZlY3ljbGVDb25maWd1cmF0aW9uLm1heExpZmV0aW1lLmlzVW5yZXNvbHZlZCgpKSB7XG4gICAgICBpZiAobGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5tYXhMaWZldGltZS50b1NlY29uZHMoKSA8IExJRkVDWUNMRV9NSU5fVElNRU9VVC50b1NlY29uZHMoKVxuICAgICAgICB8fCBsaWZlY3ljbGVDb25maWd1cmF0aW9uLm1heExpZmV0aW1lLnRvU2Vjb25kcygpID4gTElGRUNZQ0xFX01BWF9MSUZFVElNRS50b1NlY29uZHMoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBNYXhpbXVtIGxpZmV0aW1lIG11c3QgYmUgYmV0d2VlbiAke0xJRkVDWUNMRV9NSU5fVElNRU9VVC50b1NlY29uZHMoKX0gc2Vjb25kcyBhbmQgJHtMSUZFQ1lDTEVfTUFYX0xJRkVUSU1FLnRvU2Vjb25kcygpfSBzZWNvbmRzYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgcnVudGltZSBuYW1lIGZvcm1hdFxuICAgKiBQYXR0ZXJuOiBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJ1bnRpbWVOYW1lKCk6IHZvaWQge1xuICAgIC8vIFNraXAgdmFsaWRhdGlvbiBpZiB0aGUgbmFtZSBjb250YWlucyBDREsgdG9rZW5zICh1bnJlc29sdmVkIHZhbHVlcylcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMuYWdlbnRSdW50aW1lTmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsZW5ndGhcbiAgICBjb25zdCBsZW5ndGhFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgIHZhbHVlOiB0aGlzLmFnZW50UnVudGltZU5hbWUsXG4gICAgICBmaWVsZE5hbWU6ICdSdW50aW1lIG5hbWUnLFxuICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgbWF4TGVuZ3RoOiA0OCxcbiAgICB9KTtcblxuICAgIC8vIFZhbGlkYXRlIHBhdHRlcm5cbiAgICBjb25zdCBwYXR0ZXJuRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICB0aGlzLmFnZW50UnVudGltZU5hbWUsXG4gICAgICAnUnVudGltZSBuYW1lJyxcbiAgICAgIC9eW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kLyxcbiAgICAgICdSdW50aW1lIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluIG9ubHkgbGV0dGVycywgbnVtYmVycywgYW5kIHVuZGVyc2NvcmVzJyxcbiAgICApO1xuXG4gICAgLy8gQ29tYmluZSBhbmQgdGhyb3cgaWYgYW55IGVycm9yc1xuICAgIGNvbnN0IGFsbEVycm9ycyA9IFsuLi5sZW5ndGhFcnJvcnMsIC4uLnBhdHRlcm5FcnJvcnNdO1xuICAgIGlmIChhbGxFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihhbGxFcnJvcnMuam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGRlc2NyaXB0aW9uIGZvcm1hdFxuICAgKiBNdXN0IGJlIGJldHdlZW4gMSBhbmQgMTIwMCBjaGFyYWN0ZXJzIChwZXIgQ2xvdWRGb3JtYXRpb24gc3BlY2lmaWNhdGlvbilcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRGVzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIHRoZSBkZXNjcmlwdGlvbiBjb250YWlucyBDREsgdG9rZW5zICh1bnJlc29sdmVkIHZhbHVlcylcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMuZGVzY3JpcHRpb24pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb24pIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICB2YWx1ZTogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgZmllbGROYW1lOiAnRGVzY3JpcHRpb24nLFxuICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgIG1heExlbmd0aDogMTIwMCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihlcnJvcnMuam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAqIC0gTWF4aW11bSA1MCBlbnRyaWVzXG4gICAqIC0gS2V5OiAxLTEwMCBjaGFyYWN0ZXJzXG4gICAqIC0gVmFsdWU6IDAtMjA0OCBjaGFyYWN0ZXJzIChwZXIgQ2xvdWRGb3JtYXRpb24gc3BlY2lmaWNhdGlvbilcbiAgICogQHRocm93cyBFcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRW52aXJvbm1lbnRWYXJpYWJsZXMoZW52VmFyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhlbnZWYXJzKTtcblxuICAgIC8vIFZhbGlkYXRlIG51bWJlciBvZiBlbnRyaWVzICgwLTUwKVxuICAgIGlmIChlbnRyaWVzLmxlbmd0aCA+IDUwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgVG9vIG1hbnkgZW52aXJvbm1lbnQgdmFyaWFibGVzOiAke2VudHJpZXMubGVuZ3RofS4gTWF4aW11bSBhbGxvd2VkIGlzIDUwYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZW50cmllcykge1xuICAgICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIGtleSBvciB2YWx1ZSBjb250YWlucyBDREsgdG9rZW5zXG4gICAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGtleSkgfHwgVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVmFsaWRhdGUga2V5IGxlbmd0aFxuICAgICAgY29uc3QgbGVuZ3RoRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiBrZXksXG4gICAgICAgIGZpZWxkTmFtZTogYEVudmlyb25tZW50IHZhcmlhYmxlIGtleSAnJHtrZXl9J2AsXG4gICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgbWF4TGVuZ3RoOiAxMDAsXG4gICAgICB9KTtcblxuICAgICAgLy8gVmFsaWRhdGUga2V5IHBhdHRlcm5cbiAgICAgIGNvbnN0IHBhdHRlcm5FcnJvcnMgPSB2YWxpZGF0ZUZpZWxkUGF0dGVybihcbiAgICAgICAga2V5LFxuICAgICAgICBgRW52aXJvbm1lbnQgdmFyaWFibGUga2V5ICcke2tleX0nYCxcbiAgICAgICAgL15bYS16QS1aX11bYS16QS1aMC05X10qJC8sXG4gICAgICAgIGBFbnZpcm9ubWVudCB2YXJpYWJsZSBrZXkgJyR7a2V5fScgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIG9yIHVuZGVyc2NvcmUgYW5kIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgdW5kZXJzY29yZXNgLFxuICAgICAgKTtcblxuICAgICAgLy8gQ29tYmluZSBhbmQgdGhyb3cgaWYgYW55IGVycm9yc1xuICAgICAgY29uc3QgYWxsRXJyb3JzID0gWy4uLmxlbmd0aEVycm9ycywgLi4ucGF0dGVybkVycm9yc107XG4gICAgICBpZiAoYWxsRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihhbGxFcnJvcnMuam9pbignXFxuJykpO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSB2YWx1ZSBsZW5ndGggKDAtMjA0OCBjaGFyYWN0ZXJzIHBlciBDbG91ZEZvcm1hdGlvbilcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyMDQ4KSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgZW52aXJvbm1lbnQgdmFyaWFibGUgdmFsdWUgbGVuZ3RoIGZvciBrZXkgJyR7a2V5fSc6ICR7dmFsdWUubGVuZ3RofSBjaGFyYWN0ZXJzLiBgICtcbiAgICAgICAgICAnVmFsdWVzIG11c3Qgbm90IGV4Y2VlZCAyMDQ4IGNoYXJhY3RlcnMnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHRhZ3MgZm9ybWF0XG4gICAqIEBwYXJhbSB0YWdzIFRoZSB0YWdzIG9iamVjdCB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVUYWdzKHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICAvLyBWYWxpZGF0ZSBlYWNoIHRhZyBrZXkgYW5kIHZhbHVlXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGFncykpIHtcbiAgICAgIC8vIFNraXAgdmFsaWRhdGlvbiBpZiBrZXkgb3IgdmFsdWUgY29udGFpbnMgQ0RLIHRva2Vuc1xuICAgICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChrZXkpIHx8IFRva2VuLmlzVW5yZXNvbHZlZCh2YWx1ZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyBrZXkgbGVuZ3RoXG4gICAgICBjb25zdCBrZXlMZW5ndGhFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgICAgdmFsdWU6IGtleSxcbiAgICAgICAgZmllbGROYW1lOiBgVGFnIGtleSBcIiR7a2V5fVwiYCxcbiAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICBtYXhMZW5ndGg6IDI1NixcbiAgICAgIH0pO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0YWcga2V5IHBhdHRlcm5cbiAgICAgIGNvbnN0IGtleVBhdHRlcm5FcnJvcnMgPSB2YWxpZGF0ZUZpZWxkUGF0dGVybihcbiAgICAgICAga2V5LFxuICAgICAgICBgVGFnIGtleSBcIiR7a2V5fVwiYCxcbiAgICAgICAgL15bYS16QS1aMC05XFxzLl86Lz0rQC1dKiQvLFxuICAgICAgICBgVGFnIGtleSBcIiR7a2V5fVwiIGNhbiBvbmx5IGNvbnRhaW4gbGV0dGVycyAoYS16LCBBLVopLCBudW1iZXJzICgwLTkpLCBzcGFjZXMsIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnMgKC5fOi89K0AtKWAsXG4gICAgICApO1xuXG4gICAgICAvLyBDb21iaW5lIGtleSBlcnJvcnMgYW5kIHRocm93IGlmIGFueVxuICAgICAgY29uc3Qga2V5RXJyb3JzID0gWy4uLmtleUxlbmd0aEVycm9ycywgLi4ua2V5UGF0dGVybkVycm9yc107XG4gICAgICBpZiAoa2V5RXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihrZXlFcnJvcnMuam9pbignXFxuJykpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBUYWcgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZGApO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSB0YWcgdmFsdWUgbGVuZ3RoXG4gICAgICBjb25zdCB2YWx1ZUxlbmd0aEVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGZpZWxkTmFtZTogYFRhZyB2YWx1ZSBmb3Iga2V5IFwiJHtrZXl9XCJgLFxuICAgICAgICBtaW5MZW5ndGg6IDAsXG4gICAgICAgIG1heExlbmd0aDogMjU2LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRhZyB2YWx1ZSBwYXR0ZXJuXG4gICAgICBjb25zdCB2YWx1ZVBhdHRlcm5FcnJvcnMgPSB2YWxpZGF0ZUZpZWxkUGF0dGVybihcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGBUYWcgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiYCxcbiAgICAgICAgL15bYS16QS1aMC05XFxzLl86Lz0rQC1dKiQvLFxuICAgICAgICBgVGFnIHZhbHVlIGZvciBrZXkgXCIke2tleX1cIiBjYW4gb25seSBjb250YWluIGxldHRlcnMgKGEteiwgQS1aKSwgbnVtYmVycyAoMC05KSwgc3BhY2VzLCBhbmQgc3BlY2lhbCBjaGFyYWN0ZXJzICguXzovPStALSlgLFxuICAgICAgKTtcblxuICAgICAgLy8gQ29tYmluZSB2YWx1ZSBlcnJvcnMgYW5kIHRocm93IGlmIGFueVxuICAgICAgY29uc3QgdmFsdWVFcnJvcnMgPSBbLi4udmFsdWVMZW5ndGhFcnJvcnMsIC4uLnZhbHVlUGF0dGVybkVycm9yc107XG4gICAgICBpZiAodmFsdWVFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHZhbHVlRXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBjb250YWluZXIgVVJJIGZvcm1hdFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbnRhaW5lclVyaSh1cmk6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFNraXAgdmFsaWRhdGlvbiBpZiB0aGUgVVJJIGNvbnRhaW5zIENESyB0b2tlbnMgKHVucmVzb2x2ZWQgdmFsdWVzKVxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodXJpKSkge1xuICAgICAgLy8gQWRkIGEgd2FybmluZyB0aGF0IHZhbGlkYXRpb24gd2lsbCBiZSBza2lwcGVkIGZvciB0b2tlbi1iYXNlZCBVUklzXG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRJbmZvKFxuICAgICAgICAnQ29udGFpbmVyIFVSSSB2YWxpZGF0aW9uIHNraXBwZWQgYXMgaXQgY29udGFpbnMgdW5yZXNvbHZlZCBDREsgdG9rZW5zLiAnICtcbiAgICAgICAgJ1RoZSBVUkkgd2lsbCBiZSB2YWxpZGF0ZWQgYXQgZGVwbG95bWVudCB0aW1lLicsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE9ubHkgdmFsaWRhdGUgaWYgdGhlIFVSSSBpcyBhIGNvbmNyZXRlIHN0cmluZyAobm90IGEgdG9rZW4pXG4gICAgY29uc3QgcGF0dGVybiA9IC9eXFxkezEyfVxcLmRrclxcLmVjclxcLihbYS16MC05LV0rKVxcLmFtYXpvbmF3c1xcLmNvbVxcLygoPzpbYS16MC05XSsoPzpbLl8tXVthLXowLTldKykqXFwvKSpbYS16MC05XSsoPzpbLl8tXVthLXowLTldKykqKShbOkBdXFxTKykkLztcbiAgICBpZiAoIXBhdHRlcm4udGVzdCh1cmkpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgSW52YWxpZCBjb250YWluZXIgVVJJIGZvcm1hdDogJHt1cml9LiBNdXN0IGJlIGEgdmFsaWQgRUNSIFVSSSAoZS5nLiwgMTIzNDU2Nzg5MDEyLmRrci5lY3IudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20vbXktYWdlbnQ6bGF0ZXN0KWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIElBTSByb2xlIEFSTiBmb3JtYXQgYW5kIHN0cnVjdHVyZVxuICAgKiBAdGhyb3dzIEVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVSb2xlQXJuKHJvbGVBcm46IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIFZhbGlkYXRlIGJhc2ljIEFSTiBmb3JtYXQgZm9yIElBTSByb2xlc1xuICAgIGNvbnN0IGFyblBhdHRlcm4gPSAvXmFybjpbYS16XFwtXSs6aWFtOjpcXGR7MTJ9OnJvbGVcXC9bYS16QS1aMC05Kz0sLkBcXC1fXFwvXSskLztcbiAgICBpZiAoIWFyblBhdHRlcm4udGVzdChyb2xlQXJuKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgSW52YWxpZCBJQU0gcm9sZSBBUk4gZm9ybWF0OiAke3JvbGVBcm59LiBgICtcbiAgJ0V4cGVjdGVkIGZvcm1hdDogYXJuOjxwYXJ0aXRpb24+OmlhbTo6PGFjY291bnQtaWQ+OnJvbGUvPHJvbGUtbmFtZT4gb3IgYXJuOjxwYXJ0aXRpb24+OmlhbTo6PGFjY291bnQtaWQ+OnJvbGUvPHBhdGg+Lzxyb2xlLW5hbWU+Jyk7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdGhlIEFSTiBjb21wb25lbnRzIHVzaW5nIENESydzIEFybi5zcGxpdCgpXG4gICAgLy8gVXNlIFNMQVNIX1JFU09VUkNFX05BTUUgZm9ybWF0IGZvciBJQU0gcm9sZXMgKHdoaWNoIHVzZSBmb3JtYXQ6IHJvbGUvcm9sZS1uYW1lIG9yIHJvbGUvcGF0aC90by9yb2xlLW5hbWUpXG4gICAgY29uc3QgYXJuQ29tcG9uZW50cyA9IEFybi5zcGxpdChyb2xlQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSk7XG5cbiAgICBpZiAoYXJuQ29tcG9uZW50cy5zZXJ2aWNlICE9PSAnaWFtJykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgSW52YWxpZCBzZXJ2aWNlIGluIEFSTjogJHthcm5Db21wb25lbnRzLnNlcnZpY2V9LiBFeHBlY3RlZCAnaWFtJyBmb3IgSUFNIHJvbGUgQVJOLmApO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnRJZCA9IGFybkNvbXBvbmVudHMuYWNjb3VudDtcbiAgICBpZiAoIWFjY291bnRJZCB8fCAhL15cXGR7MTJ9JC8udGVzdChhY2NvdW50SWQpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBJbnZhbGlkIEFXUyBhY2NvdW50IElEIGluIHJvbGUgQVJOOiAke2FjY291bnRJZH0uIE11c3QgYmUgYSAxMi1kaWdpdCBudW1iZXIuYCk7XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCByb2xlIG5hbWUgZnJvbSByZXNvdXJjZVxuICAgIC8vIEZvciBJQU0gcm9sZXMsIHJlc291cmNlIHdpbGwgYmUgXCJyb2xlXCIgYW5kIHJlc291cmNlTmFtZSB3aWxsIGJlIHRoZSByb2xlIG5hbWUgKHdpdGggb3B0aW9uYWwgcGF0aClcbiAgICBjb25zdCByZXNvdXJjZSA9IGFybkNvbXBvbmVudHMucmVzb3VyY2U7XG4gICAgY29uc3QgcmVzb3VyY2VOYW1lID0gYXJuQ29tcG9uZW50cy5yZXNvdXJjZU5hbWU7XG5cbiAgICBpZiAocmVzb3VyY2UgIT09ICdyb2xlJykge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgSW52YWxpZCByZXNvdXJjZSB0eXBlIGluIEFSTjogJHtyZXNvdXJjZX0uIEV4cGVjdGVkICdyb2xlJyBmb3IgSUFNIHJvbGUgQVJOLmApO1xuICAgIH1cblxuICAgIGlmICghcmVzb3VyY2VOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdSb2xlIG5hbWUgaXMgbWlzc2luZyBpbiB0aGUgQVJOJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJvbGVQYXRoUGFydHMgPSByZXNvdXJjZU5hbWUuc3BsaXQoJy8nKTtcbiAgICAgIGNvbnN0IHJvbGVOYW1lID0gcm9sZVBhdGhQYXJ0c1tyb2xlUGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAocm9sZU5hbWUubGVuZ3RoID4gNjQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgUm9sZSBuYW1lIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgNjQgY2hhcmFjdGVyczogJHtyb2xlTmFtZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdGFja0FjY291bnQgPSBTdGFjay5vZih0aGlzKS5hY2NvdW50O1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHN0YWNrQWNjb3VudCkgJiYgYWNjb3VudElkICE9PSBzdGFja0FjY291bnQpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmcoXG4gICAgICAgIGBJQU0gcm9sZSBpcyBmcm9tIGEgZGlmZmVyZW50IGFjY291bnQgKCR7YWNjb3VudElkfSkgdGhhbiB0aGUgc3RhY2sgYWNjb3VudCAoJHtzdGFja0FjY291bnR9KS4gYCArXG4gICAgICAgICdFbnN1cmUgY3Jvc3MtYWNjb3VudCBwZXJtaXNzaW9ucyBhcmUgcHJvcGVybHkgY29uZmlndXJlZC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgcmVnaW9uIChJQU0gaXMgZ2xvYmFsLCBzbyByZWdpb24gc2hvdWxkIGJlIGVtcHR5KVxuICAgIGNvbnN0IHJlZ2lvbiA9IGFybkNvbXBvbmVudHMucmVnaW9uO1xuICAgIGNvbnN0IHN0YWNrUmVnaW9uID0gU3RhY2sub2YodGhpcykucmVnaW9uO1xuICAgIGlmIChyZWdpb24gJiYgcmVnaW9uICE9PSAnJyAmJiByZWdpb24gIT09IHN0YWNrUmVnaW9uICYmICFUb2tlbi5pc1VucmVzb2x2ZWQoc3RhY2tSZWdpb24pKSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nKFxuICAgICAgICBgSUFNIHJvbGUgQVJOIGNvbnRhaW5zIGEgcmVnaW9uICgke3JlZ2lvbn0pIHRoYXQgZG9lc24ndCBtYXRjaCB0aGUgc3RhY2sgcmVnaW9uICgke3N0YWNrUmVnaW9ufSkuIGAgK1xuICAgICAgICAnSUFNIGlzIGEgZ2xvYmFsIHNlcnZpY2UsIHNvIHRoaXMgbWlnaHQgYmUgaW50ZW50aW9uYWwuJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBlbmRwb2ludCB0byB0aGlzIHJ1bnRpbWVcbiAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBSdW50aW1lRW5kcG9pbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcnVudGltZVxuICAgKlxuICAgKiBAcGFyYW0gZW5kcG9pbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbmRwb2ludFxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgZW5kcG9pbnRcbiAgICogQHJldHVybnMgVGhlIGNyZWF0ZWQgUnVudGltZUVuZHBvaW50XG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkRW5kcG9pbnQoXG4gICAgZW5kcG9pbnROYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEFkZEVuZHBvaW50T3B0aW9ucyxcbiAgKTogUnVudGltZUVuZHBvaW50IHtcbiAgICAvLyBDcmVhdGUgdGhlIGVuZHBvaW50IChzZWN1cml0eSBjb25maWd1cmF0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQpXG4gICAgY29uc3QgZW5kcG9pbnQgPSBuZXcgUnVudGltZUVuZHBvaW50KHRoaXMsIGBFbmRwb2ludCR7ZW5kcG9pbnROYW1lfWAsIHtcbiAgICAgIGVuZHBvaW50TmFtZTogZW5kcG9pbnROYW1lLFxuICAgICAgYWdlbnRSdW50aW1lSWQ6IHRoaXMuYWdlbnRSdW50aW1lSWQsXG4gICAgICBhZ2VudFJ1bnRpbWVWZXJzaW9uOiBvcHRpb25zPy52ZXJzaW9uID8/IHRoaXMuYWdlbnRSdW50aW1lVmVyc2lvbiA/PyAnMScsXG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucz8uZGVzY3JpcHRpb24sXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgZGVwZW5kZW5jeTogZW5kcG9pbnQgbXVzdCB3YWl0IGZvciBydW50aW1lIHRvIGJlIGNyZWF0ZWRcbiAgICBlbmRwb2ludC5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5ydW50aW1lUmVzb3VyY2UpO1xuXG4gICAgcmV0dXJuIGVuZHBvaW50O1xuICB9XG59XG4iXX0=
|
package/lib/runtime/types.d.ts
CHANGED
|
@@ -37,14 +37,14 @@ export interface RequestHeaderConfiguration {
|
|
|
37
37
|
export interface LifecycleConfiguration {
|
|
38
38
|
/**
|
|
39
39
|
* Timeout in seconds for idle runtime sessions. When a session remains idle for this duration,
|
|
40
|
-
* it will be automatically terminated.
|
|
41
|
-
* @default - 900 seconds (15 minutes)
|
|
40
|
+
* it will be automatically terminated.
|
|
41
|
+
* @default undefined - service default setting is 900 seconds (15 minutes)
|
|
42
42
|
*/
|
|
43
43
|
readonly idleRuntimeSessionTimeout?: Duration;
|
|
44
44
|
/**
|
|
45
45
|
* Maximum lifetime for the instance in seconds. Once reached, instances will be automatically
|
|
46
|
-
* terminated and replaced.
|
|
47
|
-
* @default - 28800 seconds (8 hours)
|
|
46
|
+
* terminated and replaced.
|
|
47
|
+
* @default undefined - service default setting is 28800 seconds (8 hours)
|
|
48
48
|
*/
|
|
49
49
|
readonly maxLifetime?: Duration;
|
|
50
50
|
}
|
package/lib/runtime/types.js
CHANGED
|
@@ -22,4 +22,4 @@ var ProtocolType;
|
|
|
22
22
|
*/
|
|
23
23
|
ProtocolType["A2A"] = "A2A";
|
|
24
24
|
})(ProtocolType || (exports.ProtocolType = ProtocolType = {}));
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0E7OytFQUUrRTs7O0FBSS9FOztHQUVHO0FBQ0gsSUFBWSxZQWVYO0FBZkQsV0FBWSxZQUFZO0lBQ3RCOztPQUVHO0lBQ0gsMkJBQVcsQ0FBQTtJQUVYOztPQUVHO0lBQ0gsNkJBQWEsQ0FBQTtJQUViOztPQUVHO0lBQ0gsMkJBQVcsQ0FBQTtBQUNiLENBQUMsRUFmVyxZQUFZLDRCQUFaLFlBQVksUUFldkIiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW51bXNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5cbi8qKlxuICogUHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3IgQWdlbnQgUnVudGltZVxuICovXG5leHBvcnQgZW51bSBQcm90b2NvbFR5cGUge1xuICAvKipcbiAgICogTW9kZWwgQ29udGV4dCBQcm90b2NvbFxuICAgKi9cbiAgTUNQID0gJ01DUCcsXG5cbiAgLyoqXG4gICAqIEhUVFAgcHJvdG9jb2xcbiAgICovXG4gIEhUVFAgPSAnSFRUUCcsXG5cbiAgLyoqXG4gICAqIEEyQSBwcm90b2NvbFxuICAgKi9cbiAgQTJBID0gJ0EyQScsXG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgSFRUUCByZXF1ZXN0IGhlYWRlcnMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBydW50aW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBIVFRQIHJlcXVlc3QgaGVhZGVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBydW50aW1lLlxuICAgKiBAZGVmYXVsdCAtIE5vIHJlcXVlc3QgaGVhZGVycyBhbGxvd2VkXG4gICAqL1xuICByZWFkb25seSBhbGxvd2xpc3RlZEhlYWRlcnM/
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0E7OytFQUUrRTs7O0FBSS9FOztHQUVHO0FBQ0gsSUFBWSxZQWVYO0FBZkQsV0FBWSxZQUFZO0lBQ3RCOztPQUVHO0lBQ0gsMkJBQVcsQ0FBQTtJQUVYOztPQUVHO0lBQ0gsNkJBQWEsQ0FBQTtJQUViOztPQUVHO0lBQ0gsMkJBQVcsQ0FBQTtBQUNiLENBQUMsRUFmVyxZQUFZLDRCQUFaLFlBQVksUUFldkIiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW51bXNcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5cbi8qKlxuICogUHJvdG9jb2wgY29uZmlndXJhdGlvbiBmb3IgQWdlbnQgUnVudGltZVxuICovXG5leHBvcnQgZW51bSBQcm90b2NvbFR5cGUge1xuICAvKipcbiAgICogTW9kZWwgQ29udGV4dCBQcm90b2NvbFxuICAgKi9cbiAgTUNQID0gJ01DUCcsXG5cbiAgLyoqXG4gICAqIEhUVFAgcHJvdG9jb2xcbiAgICovXG4gIEhUVFAgPSAnSFRUUCcsXG5cbiAgLyoqXG4gICAqIEEyQSBwcm90b2NvbFxuICAgKi9cbiAgQTJBID0gJ0EyQScsXG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgSFRUUCByZXF1ZXN0IGhlYWRlcnMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBydW50aW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RIZWFkZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBIVFRQIHJlcXVlc3QgaGVhZGVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBydW50aW1lLlxuICAgKiBAZGVmYXVsdCAtIE5vIHJlcXVlc3QgaGVhZGVycyBhbGxvd2VkXG4gICAqL1xuICByZWFkb25seSBhbGxvd2xpc3RlZEhlYWRlcnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBMaWZlY3ljbGVDb25maWd1cmF0aW9uIGxldHMgeW91IG1hbmFnZSB0aGUgbGlmZWN5Y2xlIG9mIHJ1bnRpbWUgc2Vzc2lvbnMgYW5kIHJlc291cmNlcyBpbiBBZ2VudENvcmUgUnVudGltZS5cbiAqIFRoaXMgY29uZmlndXJhdGlvbiBoZWxwcyBvcHRpbWl6ZSByZXNvdXJjZSB1dGlsaXphdGlvbiBieSBhdXRvbWF0aWNhbGx5IGNsZWFuaW5nIHVwIGlkbGUgc2Vzc2lvbnMgYW5kIHByZXZlbnRpbmdcbiAqIGxvbmctcnVubmluZyBpbnN0YW5jZXMgZnJvbSBjb25zdW1pbmcgcmVzb3VyY2VzIGluZGVmaW5pdGVseS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaWZlY3ljbGVDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gc2Vjb25kcyBmb3IgaWRsZSBydW50aW1lIHNlc3Npb25zLiBXaGVuIGEgc2Vzc2lvbiByZW1haW5zIGlkbGUgZm9yIHRoaXMgZHVyYXRpb24sXG4gICAqIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSB0ZXJtaW5hdGVkLlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBzZXJ2aWNlIGRlZmF1bHQgc2V0dGluZyBpcyA5MDAgc2Vjb25kcyAoMTUgbWludXRlcylcbiAgICovXG4gIHJlYWRvbmx5IGlkbGVSdW50aW1lU2Vzc2lvblRpbWVvdXQ/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogTWF4aW11bSBsaWZldGltZSBmb3IgdGhlIGluc3RhbmNlIGluIHNlY29uZHMuIE9uY2UgcmVhY2hlZCwgaW5zdGFuY2VzIHdpbGwgYmUgYXV0b21hdGljYWxseVxuICAgKiB0ZXJtaW5hdGVkIGFuZCByZXBsYWNlZC5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIC0gc2VydmljZSBkZWZhdWx0IHNldHRpbmcgaXMgMjg4MDAgc2Vjb25kcyAoOCBob3VycylcbiAgICovXG4gIHJlYWRvbmx5IG1heExpZmV0aW1lPzogRHVyYXRpb247XG59XG4iXX0=
|
package/lib/tools/browser.js
CHANGED
|
@@ -99,7 +99,7 @@ var BrowserSigning;
|
|
|
99
99
|
* Contains methods and attributes valid for Browsers either created with CDK or imported.
|
|
100
100
|
*/
|
|
101
101
|
class BrowserCustomBase extends aws_cdk_lib_1.Resource {
|
|
102
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserCustomBase", version: "2.
|
|
102
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserCustomBase", version: "2.233.0-alpha.0" };
|
|
103
103
|
/**
|
|
104
104
|
* An accessor for the Connections object that will fail if this Browser does not have a VPC
|
|
105
105
|
* configured.
|
|
@@ -357,7 +357,7 @@ let BrowserCustom = (() => {
|
|
|
357
357
|
BrowserCustom = _classThis = _classDescriptor.value;
|
|
358
358
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
359
359
|
}
|
|
360
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserCustom", version: "2.
|
|
360
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.BrowserCustom", version: "2.233.0-alpha.0" };
|
|
361
361
|
/** Uniquely identifies this class. */
|
|
362
362
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.BrowserCustom';
|
|
363
363
|
/**
|
|
@@ -79,7 +79,7 @@ const CODE_INTERPRETER_TAG_MAX_LENGTH = 256;
|
|
|
79
79
|
* Contains methods and attributes valid for Code Interpreters either created with CDK or imported.
|
|
80
80
|
*/
|
|
81
81
|
class CodeInterpreterCustomBase extends aws_cdk_lib_1.Resource {
|
|
82
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase", version: "2.
|
|
82
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustomBase", version: "2.233.0-alpha.0" };
|
|
83
83
|
/**
|
|
84
84
|
* An accessor for the Connections object that will fail if this Browser does not have a VPC
|
|
85
85
|
* configured.
|
|
@@ -313,7 +313,7 @@ let CodeInterpreterCustom = (() => {
|
|
|
313
313
|
CodeInterpreterCustom = _classThis = _classDescriptor.value;
|
|
314
314
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
315
315
|
}
|
|
316
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustom", version: "2.
|
|
316
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.CodeInterpreterCustom", version: "2.233.0-alpha.0" };
|
|
317
317
|
/** Uniquely identifies this class. */
|
|
318
318
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.CodeInterpreterCustom';
|
|
319
319
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-cdk/aws-bedrock-agentcore-alpha",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.233.0-alpha.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "The CDK Construct Library for Amazon Bedrock",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -78,21 +78,21 @@
|
|
|
78
78
|
},
|
|
79
79
|
"license": "Apache-2.0",
|
|
80
80
|
"devDependencies": {
|
|
81
|
-
"aws-cdk-lib": "2.
|
|
82
|
-
"@aws-cdk/aws-bedrock-alpha": "2.
|
|
83
|
-
"@aws-cdk/cdk-build-tools": "2.
|
|
81
|
+
"aws-cdk-lib": "2.233.0",
|
|
82
|
+
"@aws-cdk/aws-bedrock-alpha": "2.233.0-alpha.0",
|
|
83
|
+
"@aws-cdk/cdk-build-tools": "2.233.0-alpha.0",
|
|
84
84
|
"@aws-cdk/integ-runner": "^2.192.2",
|
|
85
|
-
"@aws-cdk/pkglint": "2.
|
|
86
|
-
"@aws-cdk/integ-tests-alpha": "2.
|
|
85
|
+
"@aws-cdk/pkglint": "2.233.0-alpha.0",
|
|
86
|
+
"@aws-cdk/integ-tests-alpha": "2.233.0-alpha.0",
|
|
87
87
|
"@types/jest": "^29.5.14",
|
|
88
88
|
"constructs": "^10.0.0",
|
|
89
89
|
"jest": "^29.7.0"
|
|
90
90
|
},
|
|
91
91
|
"homepage": "https://github.com/aws/aws-cdk",
|
|
92
92
|
"peerDependencies": {
|
|
93
|
-
"aws-cdk-lib": "^2.
|
|
93
|
+
"aws-cdk-lib": "^2.233.0",
|
|
94
94
|
"constructs": "^10.0.0",
|
|
95
|
-
"@aws-cdk/aws-bedrock-alpha": "2.
|
|
95
|
+
"@aws-cdk/aws-bedrock-alpha": "2.233.0-alpha.0"
|
|
96
96
|
},
|
|
97
97
|
"engines": {
|
|
98
98
|
"node": ">= 18.0.0"
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
},
|
|
124
124
|
"jsiiRosetta": {
|
|
125
125
|
"exampleDependencies": {
|
|
126
|
-
"@aws-cdk/aws-bedrock-alpha": "^2.
|
|
126
|
+
"@aws-cdk/aws-bedrock-alpha": "^2.233.0-alpha.0"
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
}
|