@orcabus/platform-cdk-constructs 0.0.53 → 0.0.55
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 +2 -2
- package/api-gateway/api-gateway.js +1 -1
- package/deployment-stack-pipeline/artifact-bucket.js +1 -1
- package/deployment-stack-pipeline/pipeline.js +1 -1
- package/dynamodb/index.js +2 -2
- package/ecs/index.js +1 -1
- package/lambda/index.js +10 -3
- package/lambda/layers/icav2_tools/poetry.lock +12 -12
- package/monitored-queue/index.js +1 -1
- package/named-lambda-role/index.js +1 -1
- package/package.json +1 -1
- package/provider-function/index.js +1 -1
- package/shared-config/networking.js +2 -2
- package/shared-config/slack.js +1 -1
package/.jsii
CHANGED
|
@@ -6821,6 +6821,6 @@
|
|
|
6821
6821
|
"symbolId": "shared-config/slack:SlackAlerts"
|
|
6822
6822
|
}
|
|
6823
6823
|
},
|
|
6824
|
-
"version": "0.0.
|
|
6825
|
-
"fingerprint": "
|
|
6824
|
+
"version": "0.0.55",
|
|
6825
|
+
"fingerprint": "u7xT9QZU3eF1y/hbiySf4IKtwFz8Y3WBvU0O9x2Fc4w="
|
|
6826
6826
|
}
|
|
@@ -15,7 +15,7 @@ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
|
15
15
|
const aws_route53_targets_1 = require("aws-cdk-lib/aws-route53-targets");
|
|
16
16
|
const config_1 = require("./config");
|
|
17
17
|
class OrcaBusApiGateway extends constructs_1.Construct {
|
|
18
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "0.0.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "0.0.55" };
|
|
19
19
|
/**
|
|
20
20
|
* The AWS region where the API Gateway is deployed.
|
|
21
21
|
*/
|
|
@@ -13,7 +13,7 @@ exports.CROSS_DEPLOYMENT_ARTIFACT_BUCKET_NAME = "orcabus-cross-deployment-codepi
|
|
|
13
13
|
exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ALIAS = "orcabus-cross-deployment-codepipeline-artifact";
|
|
14
14
|
exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ARN_SSM_PARAMETER_NAME = "/orcabus/deployment-stack-pipeline/artifact-bucket/kms-key-arn";
|
|
15
15
|
class CrossDeploymentArtifactBucket extends constructs_1.Construct {
|
|
16
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "0.0.
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "0.0.55" };
|
|
17
17
|
/**
|
|
18
18
|
* The S3 bucket used to store artifacts for cross-deployment pipelines.
|
|
19
19
|
*/
|
|
@@ -32,7 +32,7 @@ exports.DEFAULT_SYNTH_STEP_PARTIAL_BUILD_SPEC = {
|
|
|
32
32
|
* before using this construct.
|
|
33
33
|
*/
|
|
34
34
|
class DeploymentStackPipeline extends constructs_1.Construct {
|
|
35
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "0.0.
|
|
35
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "0.0.55" };
|
|
36
36
|
/**
|
|
37
37
|
* The code pipeline construct that is created.
|
|
38
38
|
*/
|
package/dynamodb/index.js
CHANGED
|
@@ -40,7 +40,7 @@ const dynamodb = __importStar(require("aws-cdk-lib/aws-dynamodb"));
|
|
|
40
40
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
41
41
|
const config_1 = require("./config");
|
|
42
42
|
class DynamoDbPartitionedConstruct extends constructs_1.Construct {
|
|
43
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "0.0.
|
|
43
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "0.0.55" };
|
|
44
44
|
table;
|
|
45
45
|
constructor(scope, id, props) {
|
|
46
46
|
super(scope, id);
|
|
@@ -75,7 +75,7 @@ class DynamoDbPartitionedConstruct extends constructs_1.Construct {
|
|
|
75
75
|
}
|
|
76
76
|
exports.DynamoDbPartitionedConstruct = DynamoDbPartitionedConstruct;
|
|
77
77
|
class DynamoDbNonPartitionedConstruct extends constructs_1.Construct {
|
|
78
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "0.0.
|
|
78
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "0.0.55" };
|
|
79
79
|
table;
|
|
80
80
|
constructor(scope, id, props) {
|
|
81
81
|
super(scope, id);
|
package/ecs/index.js
CHANGED
|
@@ -55,7 +55,7 @@ exports.LAMBDA_ARCHITECTURE_MAP = {
|
|
|
55
55
|
['ARM64']: lambda.Architecture.ARM_64
|
|
56
56
|
};
|
|
57
57
|
class EcsFargateTaskConstruct extends constructs_1.Construct {
|
|
58
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "0.0.
|
|
58
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "0.0.55" };
|
|
59
59
|
cluster;
|
|
60
60
|
taskDefinition;
|
|
61
61
|
taskExecutionRole;
|
package/lambda/index.js
CHANGED
|
@@ -56,7 +56,7 @@ function getPythonUvDockerImage() {
|
|
|
56
56
|
return aws_cdk_lib_1.DockerImage.fromBuild(path_1.default.join(__dirname, 'build_python'));
|
|
57
57
|
}
|
|
58
58
|
class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
|
|
59
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "0.0.
|
|
59
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "0.0.55" };
|
|
60
60
|
// Class constructs, to be used for caching the layers
|
|
61
61
|
// This means that if there are multiple lambdas throughout the stack
|
|
62
62
|
// They will all use the same layer
|
|
@@ -82,7 +82,10 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
|
|
|
82
82
|
},
|
|
83
83
|
// @ts-ignore
|
|
84
84
|
afterBundling(inputDir, outputDir) {
|
|
85
|
-
return (props.bundling?.commandHooks?.afterBundling ?? []).concat([
|
|
85
|
+
return (props.bundling?.commandHooks?.afterBundling ?? []).concat([
|
|
86
|
+
`rm -rf ${outputDir}/pandas/tests`,
|
|
87
|
+
`find ${outputDir} -name '__pycache__' -exec rm -rf {}/ \\;`,
|
|
88
|
+
]);
|
|
86
89
|
},
|
|
87
90
|
},
|
|
88
91
|
},
|
|
@@ -141,6 +144,7 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
|
|
|
141
144
|
return [
|
|
142
145
|
`pip install ${inputDir} --target ${outputDir}`,
|
|
143
146
|
`find ${outputDir} -name 'pandas' -exec rm -rf {}/tests/ \\;`,
|
|
147
|
+
`find ${outputDir} -name '__pycache__' -exec rm -rf {}/ \\;`,
|
|
144
148
|
];
|
|
145
149
|
},
|
|
146
150
|
},
|
|
@@ -169,6 +173,7 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
|
|
|
169
173
|
return [
|
|
170
174
|
`pip install ${inputDir} --target ${outputDir}`,
|
|
171
175
|
`find ${outputDir} -name 'pandas' -exec rm -rf {}/tests/ \\;`,
|
|
176
|
+
`find ${outputDir} -name '__pycache__' -exec rm -rf {}/ \\;`,
|
|
172
177
|
];
|
|
173
178
|
},
|
|
174
179
|
},
|
|
@@ -197,6 +202,7 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
|
|
|
197
202
|
return [
|
|
198
203
|
`pip install ${inputDir} --target ${outputDir}`,
|
|
199
204
|
`find ${outputDir} -name 'pandas' -exec rm -rf {}/tests/ \\;`,
|
|
205
|
+
`find ${outputDir} -name '__pycache__' -exec rm -rf {}/ \\;`,
|
|
200
206
|
];
|
|
201
207
|
},
|
|
202
208
|
},
|
|
@@ -225,6 +231,7 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
|
|
|
225
231
|
return [
|
|
226
232
|
`pip install ${inputDir} --target ${outputDir}`,
|
|
227
233
|
`find ${outputDir} -name 'pandas' -exec rm -rf {}/tests/ \\;`,
|
|
234
|
+
`find ${outputDir} -name '__pycache__' -exec rm -rf {}/ \\;`,
|
|
228
235
|
];
|
|
229
236
|
},
|
|
230
237
|
},
|
|
@@ -324,4 +331,4 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
|
|
|
324
331
|
}
|
|
325
332
|
}
|
|
326
333
|
exports.PythonUvFunction = PythonUvFunction;
|
|
327
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkEsd0RBRUM7O0FBL0JELDhFQUF5RztBQUV6RywrREFBaUQ7QUFDakQsK0VBQWlFO0FBQ2pFLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsdURBQXlDO0FBQ3pDLDZDQUF3QztBQUV4QyxnREFBd0I7QUFFeEIsdURBSWdDO0FBQ2hDLHFDQU9rQjtBQUNsQixvQ0FBMEM7QUFDMUMsd0RBQW1FO0FBQ25FLGtEQUFvRjtBQUdwRixTQUFnQixzQkFBc0I7SUFDbEMsT0FBTyx5QkFBVyxDQUFDLFNBQVMsQ0FBQyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFxRkQsTUFBYSxnQkFBaUIsU0FBUSx3Q0FBYzs7SUFDaEQsc0RBQXNEO0lBQ3RELHFFQUFxRTtJQUNyRSxtQ0FBbUM7SUFDM0IsTUFBTSxDQUFDLG9CQUFvQixHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzlFLE1BQU0sQ0FBQyxTQUFTLEdBQXlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkUsTUFBTSxDQUFDLFVBQVUsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNwRSxNQUFNLENBQUMsWUFBWSxHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTlFLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFDbEUsTUFBTSxPQUFPLEdBQUc7WUFDWixHQUFHLEtBQUs7WUFDUixRQUFRLEVBQUU7Z0JBQ04sR0FBRyxLQUFLLENBQUMsUUFBUTtnQkFDakIsU0FBUyxFQUFFO29CQUNQLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTO29CQUM1QiwyREFBMkQ7b0JBQzNELGNBQWMsRUFDVixLQUFLLENBQUMsUUFBUSxF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LENBQUE7SUFDTCxDQUFDOztBQTFVTCw0Q0E0VUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1B5dGhvbkZ1bmN0aW9uLCBQeXRob25GdW5jdGlvblByb3BzLCBQeXRob25MYXllclZlcnNpb259IGZyb20gXCJAYXdzLWNkay9hd3MtbGFtYmRhLXB5dGhvbi1hbHBoYVwiO1xuaW1wb3J0IHtDb25zdHJ1Y3R9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCAqIGFzIHNlY3JldHNNYW5hZ2VyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIjtcbmltcG9ydCAqIGFzIHNzbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQge0RvY2tlckltYWdlfSBmcm9tICdhd3MtY2RrLWxpYic7XG5cbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7XG4gICAgUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbixcbiAgICBQYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwsXG4gICAgUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7XG4gICAgLy8gT3JjYWJ1cyBkZWZhdWx0c1xuICAgIERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUiwgREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCxcbiAgICAvLyBNYXJ0IGRlZmF1bHRzXG4gICAgTUFSVF9FTlZfVkFSUywgTUFSVF9MQU1CREFfRlVOQ1RJT05fTkFNRSxcbiAgICBNQVJUX1MzX0JVQ0tFVCxcbiAgICBNQVJUX1MzX1BSRUZJWCxcbn0gZnJvbSBcIi4vY29uZmlnXCI7XG5pbXBvcnQge3Jlc29sdmVTdGFnZU5hbWV9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHtBQ0NPVU5UX0lEX0FMSUFTLCBSRUdJT059IGZyb20gXCIuLi9zaGFyZWQtY29uZmlnL2FjY291bnRzXCI7XG5pbXBvcnQge0lDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSUQsIElDQVYyX0JBU0VfVVJMfSBmcm9tIFwiLi4vc2hhcmVkLWNvbmZpZy9pY2F2MlwiO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQeXRob25VdkRvY2tlckltYWdlKCk6IERvY2tlckltYWdlIHtcbiAgICByZXR1cm4gRG9ja2VySW1hZ2UuZnJvbUJ1aWxkKHBhdGguam9pbihfX2Rpcm5hbWUsICdidWlsZF9weXRob24nKSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JjYWJ1c1Jlc291cmNlc1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBvcmNhYnVzVG9rZW5TZWNyZXRJZCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBAREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRFxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9yY2FidXNUb2tlblNlY3JldElkPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcyB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hV29ya2dyb3VwTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBATUFSVF9FTlZfVkFSUy5BVEhFTkFfV09SS0dST1VQX05BTUVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFXb3JrZ3JvdXBOYW1lPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBhdGhlbmFEYXRhc291cmNlTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBATUFSVF9FTlZfVkFSUy5hdGhlbmFEYXRhc291cmNlTmFtZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGF0aGVuYURhdGFzb3VyY2VOYW1lPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBhdGhlbmFEYXRhYmFzZU5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFCQVNFX05BTUVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFEYXRhYmFzZU5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJY2F2MlJlc291cmNlc1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgaWQgb2YgdGhlIHNlY3JldCB0aGF0IGNvbnRhaW5zIHRoZSBpY2F2MiBhY2Nlc3MgdG9rZW5cbiAgICAgKiBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEXG4gICAgICovXG4gICAgcmVhZG9ubHkgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkPzogc3RyaW5nXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBQeXRob25VdkZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBQeXRob25GdW5jdGlvblByb3BzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBvcmNhYnVzIGFwaSB0b29scyBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZU9yY2FidXNBcGlUb29sc0xheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgbWFydCBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICogTm90ZSB0aGF0IHRoZSBtYXJ0IGxheWVyIGlzIGEgbGl0dGxlIGhlYXZpZXIgdGhhbiB0aGUgb3JjYWJ1cyBhcGkgdG9vbHMgbGF5ZXJcbiAgICAgKiBTaW5jZSB3ZSByZXF1aXJlIHBhbmRhcyB0byBiZSBpbnN0YWxsZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlTWFydExheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgaWNhdjIgbGF5ZXIgaW4gdGhlIGxhbWJkYSBmdW5jdGlvbiBidWlsZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGVJY2F2MkxheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgZmFzdGFwaSBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZUZhc3RBcGlMYXllcj86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIG9yY2FidXNUb2tlblJlc291cmNlcywgb3B0aW9uYWwsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG9cbiAgICAgKiBAREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCBhbmQgQERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUlxuICAgICAqIGZvciB0aGUgc2VjcmV0IGFuZCBTU00gcGFyYW1ldGVyIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9yY2FidXNUb2tlblJlc291cmNlcz86IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgbWFydEVudmlyb25tZW50VmFyaWFibGVzLCBvcHRpb25hbCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0b1xuICAgICAqIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9XT1JLR1JPVVBfTkFNRSwgQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFTT1VSQ0VfTkFNRVxuICAgICAqIGFuZCBATUFSVF9FTlZfVkFSUy5BVEhFTkFfREFUQUJBU0VfTkFNRSBmb3IgdGhlIGF0aGVuYSB3b3JrZ3JvdXAsIGRhdGFzb3VyY2UgYW5kIGRhdGFiYXNlIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcz86IE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgaWNhdjJSZXNvdXJjZXMsIG9wdGlvbmFsLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvXG4gICAgICogQERFRkFVTFRfSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCBmb3IgdGhlIHNlY3JldFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGljYXYyUmVzb3VyY2VzPzogSWNhdjJSZXNvdXJjZXNQcm9wc1xufVxuXG5cbmV4cG9ydCBjbGFzcyBQeXRob25VdkZ1bmN0aW9uIGV4dGVuZHMgUHl0aG9uRnVuY3Rpb24ge1xuICAgIC8vIENsYXNzIGNvbnN0cnVjdHMsIHRvIGJlIHVzZWQgZm9yIGNhY2hpbmcgdGhlIGxheWVyc1xuICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgbGFtYmRhcyB0aHJvdWdob3V0IHRoZSBzdGFja1xuICAgIC8vIFRoZXkgd2lsbCBhbGwgdXNlIHRoZSBzYW1lIGxheWVyXG4gICAgcHJpdmF0ZSBzdGF0aWMgb3JjYWJ1c0FwaVRvb2xzTGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBtYXJ0TGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBpY2F2MkxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgZmFzdEFwaUxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG5cbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHl0aG9uVXZGdW5jdGlvblByb3BzKSB7XG4gICAgICAgIGNvbnN0IHV2UHJvcHMgPSB7XG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgLi4ucHJvcHMuYnVuZGxpbmcsXG4gICAgICAgICAgICAgICAgYnVpbGRBcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnByb3BzLmJ1bmRsaW5nPy5idWlsZEFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBUQVJHRVRQTEFURk9STSB0byBidWlsZCBhcmdzIGlmIGl0J3Mgbm90IGFscmVhZHkgc2V0XG4gICAgICAgICAgICAgICAgICAgIFRBUkdFVFBMQVRGT1JNOlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuYnVuZGxpbmc/LmJ1aWxkQXJncz8uVEFSR0VUUExBVEZPUk0gPz8gbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQuZG9ja2VyUGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLmJ1bmRsaW5nPy5jb21tYW5kSG9va3M/LmJlZm9yZUJ1bmRsaW5nIGFzIHVua25vd24gYXMgc3RyaW5nW10gPz8gW107XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocHJvcHMuYnVuZGxpbmc/LmNvbW1hbmRIb29rcz8uYWZ0ZXJCdW5kbGluZyBhcyB1bmtub3duIGFzIHN0cmluZ1tdID8/IFtdKS5jb25jYXQoW2BybSAtcmYgJHtvdXRwdXREaXJ9L3BhbmRhcy90ZXN0c2BdKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhcmFtc0FuZFNlY3JldHM6XG4gICAgICAgICAgICAgICAgcHJvcHMucGFyYW1zQW5kU2VjcmV0cyA/P1xuICAgICAgICAgICAgICAgIFBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24uZnJvbVZlcnNpb24oUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLlYxXzBfMTAzLCB7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVTaXplOiAzMDAsXG4gICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBQYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwuREVCVUcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCwgdXZQcm9wcyk7XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVPcmNhYnVzQXBpVG9vbHNMYXllcikge1xuICAgICAgICAgICAgLyogU2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBPcmNhYnVzIHJlc291cmNlcyAqL1xuICAgICAgICAgICAgdGhpcy5zZXRPcmNhYnVzUmVzb3VyY2VzKHByb3BzLm9yY2FidXNUb2tlblJlc291cmNlcyA/PyB7fSlcblxuICAgICAgICAgICAgLyogQnVpbGQgdGhlIG9yY2FidXMgQXBpIHRvb2xzIGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkT3JjYWJ1c0FwaVRvb2xzTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlTWFydExheWVyKSB7XG4gICAgICAgICAgICAvKiBTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIG1hcnQgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldEF0aGVuYVJlc291cmNlcyhwcm9wcy5tYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXMgPz8ge30pXG5cbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBtYXJ0IGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkTWFydFRvb2xzTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLmdldChzY29wZSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuaW5jbHVkZUljYXYyTGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgaWNhdjIgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldEljYXYyUmVzb3VyY2VzKHByb3BzLmljYXYyUmVzb3VyY2VzID8/IHt9KVxuXG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgaWNhdjIgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRJY2F2MkxheWVyKHNjb3BlKVxuICAgICAgICAgICAgdGhpcy5hZGRMYXllcnMoPFB5dGhvbkxheWVyVmVyc2lvbj5QeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlRmFzdEFwaUxheWVyKSB7XG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgZmFzdGFwaSBsYXllciAqL1xuICAgICAgICAgICAgdGhpcy5idWlsZEZhc3RBcGlMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5mYXN0QXBpTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRPcmNhYnVzQXBpVG9vbHNMYXllcihzY29wZTogQ29uc3RydWN0KSB7XG4gICAgICAgIC8vIE9ubHkgYnVpbGQgb3JjYWJ1cyBhcGkgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHNjb3BlLCAnb3JjYWJ1c0FwaVRvb2xzTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvb3JjYWJ1c19hcGlfdG9vbHMnKSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NF0sXG4gICAgICAgICAgICAgICAgbGljZW5zZTogJ0dQTDMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnb3JjYWJ1c0FwaVRvb2xzTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtbmFtZSAncGFuZGFzJyAtZXhlYyBybSAtcmYge30vdGVzdHMvIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuc2V0KHNjb3BlLCBsYXllcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkTWFydFRvb2xzTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5tYXJ0TGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHNjb3BlLCAnbWFydFRvb2xzTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvbWFydF90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdtYXJ0VG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZEljYXYyTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5pY2F2MkxheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbihzY29wZSwgJ2ljYXYyVG9vbHNMYXllcicsIHtcbiAgICAgICAgICAgICAgICBlbnRyeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2xheWVycy9pY2F2Ml90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdpY2F2MlRvb2xzTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtbmFtZSAncGFuZGFzJyAtZXhlYyBybSAtcmYge30vdGVzdHMvIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuc2V0KHNjb3BlLCBsYXllcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkRmFzdEFwaUxheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24uZmFzdEFwaUxheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbihzY29wZSwgJ2Zhc3RBcGlMYXllcicsIHtcbiAgICAgICAgICAgICAgICBlbnRyeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2xheWVycy9mYXN0YXBpX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2Zhc3RBcGlMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24uZmFzdEFwaUxheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRPcmNhYnVzUmVzb3VyY2VzKFxuICAgICAgICBwcm9wczogT3JjYWJ1c1Jlc291cmNlc1Byb3BzXG4gICAgKSB7XG4gICAgICAgIC8vIFNldCBzZWNyZXQgb2JqZWN0XG4gICAgICAgIGNvbnN0IG9yY2FidXNUb2tlblNlY3JldElkID0gc2VjcmV0c01hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoXG4gICAgICAgICAgICB0aGlzLCAnb3JjYWJ1c1Rva2VuU2VjcmV0SWQnLFxuICAgICAgICAgICAgcHJvcHMub3JjYWJ1c1Rva2VuU2VjcmV0SWQgPz8gREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgICAgICAgICAgdGhpcywgJ2hvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZScsXG4gICAgICAgICAgICBwcm9wcy5ob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUgPz8gREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSLFxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIHBlcm1pc3Npb25zIGZvciB0aGUgc2VjcmV0IGFuZCBTU00gcGFyYW1ldGVyXG4gICAgICAgIC8vIFRvIHRoZSBjdXJyZW50IHZlcnNpb25cbiAgICAgICAgb3JjYWJ1c1Rva2VuU2VjcmV0SWQuZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pO1xuICAgICAgICBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUuZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pXG5cbiAgICAgICAgLy8gQWRkIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgICAgICAgJ09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lEJywgb3JjYWJ1c1Rva2VuU2VjcmV0SWQuc2VjcmV0TmFtZSxcbiAgICAgICAgKVxuICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgICAgICAgJ0hPU1ROQU1FX1NTTV9QQVJBTUVURVJfTkFNRScsIGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZS5wYXJhbWV0ZXJOYW1lLFxuICAgICAgICApXG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHNldEF0aGVuYVJlc291cmNlcyhcbiAgICAgICAgcHJvcHM6IE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc1xuICAgICkge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBzdGFnZSBuYW1lIGJ5IHBlcmZvcm1pbmcgYSByZXZlcnNlIGxvb2t1cCB1c2luZyBjZGsuQXdzLkFDQ09VTlRfSUQgb24gQUNDT1VOVF9JRF9BTElBU1xuICAgICAgICBjb25zdCBzdGFnZU5hbWUgPSByZXNvbHZlU3RhZ2VOYW1lKHRoaXMpXG5cbiAgICAgICAgY29uc3QgYXRoZW5hUzNCdWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUoXG4gICAgICAgICAgICB0aGlzLCAnYXRoZW5hUzNCdWNrZXQnLFxuICAgICAgICAgICAgTUFSVF9TM19CVUNLRVRbc3RhZ2VOYW1lXVxuICAgICAgICApXG5cbiAgICAgICAgY29uc3QgYXRoZW5hRnVuY3Rpb25OYW1lID0gbGFtYmRhLkZ1bmN0aW9uLmZyb21GdW5jdGlvbk5hbWUoXG4gICAgICAgICAgICB0aGlzLCAnbGFtYmRhRnVuY3Rpb25OYW1lJywgTUFSVF9MQU1CREFfRlVOQ1RJT05fTkFNRVxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIGVudiB2YXJzXG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBrdiBwYWlycyBvZiBNQVJUX0VOVl9WQVJTXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKE1BUlRfRU5WX1ZBUlMpKSB7XG4gICAgICAgICAgICAvLyBBZnRlclxuICAgICAgICAgICAgaWYgKHByb3BzW2tleSBhcyBrZXlvZiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KGtleSwgcHJvcHNba2V5IGFzIGtleW9mIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc10hKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBlcm1pc3Npb25zXG4gICAgICAgIHRoaXMuY3VycmVudFZlcnNpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICAgICAgLy8gRnJvbSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXRoZW5hL2xhdGVzdC91Zy9leGFtcGxlLXBvbGljaWVzLXdvcmtncm91cC5odG1sXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAvLyBXb3JrZ3JvdXAgbGlzdHNcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0RW5naW5lVmVyc2lvbnMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RXb3JrR3JvdXBzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0RGF0YUNhdGFsb2dzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0RGF0YWJhc2VzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXREYXRhYmFzZScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdFRhYmxlTWV0YWRhdGEnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFRhYmxlTWV0YWRhdGEnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldERhdGFDYXRhbG9nJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmF0aGVuYToke1JFR0lPTn06JHtBQ0NPVU5UX0lEX0FMSUFTW3N0YWdlTmFtZV19OipgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBleGVjdXRpb25zXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6QmF0Y2hHZXRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RRdWVyeUV4ZWN1dGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0YXJ0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0b3BRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlSZXN1bHRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRRdWVyeVJlc3VsdHNTdHJlYW0nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkNyZWF0ZU5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldE5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkJhdGNoR2V0TmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdE5hbWVkUXVlcmllcycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlTmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6Q3JlYXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0UHJlcGFyZWRTdGF0ZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpVcGRhdGVQcmVwYXJlZFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIGBhcm46YXdzOmF0aGVuYToke1JFR0lPTn06JHtBQ0NPVU5UX0lEX0FMSUFTW3N0YWdlTmFtZV19Ondvcmtncm91cC8ke01BUlRfRU5WX1ZBUlMuYXRoZW5hV29ya2dyb3VwTmFtZX1gLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEFkZCByZWFkIGFjY2VzcyB0byB0aGUgUzMgYnVja2V0XG4gICAgICAgIGF0aGVuYVMzQnVja2V0LmdyYW50UmVhZFdyaXRlKFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbixcbiAgICAgICAgICAgIGAke01BUlRfUzNfUFJFRklYfSpgXG4gICAgICAgIClcblxuICAgICAgICAvLyBBZGQgaW52b2tlIGFjY2VzcyB0byB0aGUgbGFtYmRhIGZ1bmN0aW9uXG4gICAgICAgIGF0aGVuYUZ1bmN0aW9uTmFtZS5ncmFudEludm9rZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZlcnNpb25cbiAgICAgICAgKVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SWNhdjJSZXNvdXJjZXMoXG4gICAgICAgIHByb3BzOiBJY2F2MlJlc291cmNlc1Byb3BzXG4gICAgKSB7XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIHN0YWdlIG5hbWUgYnkgcGVyZm9ybWluZyBhIHJldmVyc2UgbG9va3VwIHVzaW5nIGNkay5Bd3MuQUNDT1VOVF9JRCBvbiBBQ0NPVU5UX0lEX0FMSUFTXG4gICAgICAgIGNvbnN0IHN0YWdlTmFtZSA9IHJlc29sdmVTdGFnZU5hbWUodGhpcylcblxuICAgICAgICAvLyBTZXQgc2VjcmV0IG9iamVjdFxuICAgICAgICBjb25zdCBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWRPYmplY3QgPSBzZWNyZXRzTWFuYWdlci5TZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgICAgIHRoaXMsICdJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEJyxcbiAgICAgICAgICAgIHByb3BzLmljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZCA/PyBJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEW3N0YWdlTmFtZV1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcGVybWlzc2lvbnMgZm9yIHRoZSBzZWNyZXQgYW5kIFNTTSBwYXJhbWV0ZXJcbiAgICAgICAgLy8gVG8gdGhlIGN1cnJlbnQgdmVyc2lvblxuICAgICAgICBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWRPYmplY3QuZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pO1xuXG4gICAgICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEJywgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkT2JqZWN0LnNlY3JldE5hbWUsXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdJQ0FWMl9CQVNFX1VSTCcsIElDQVYyX0JBU0VfVVJMLFxuICAgICAgICApXG4gICAgfVxuXG59XG5cblxuXG5cbiJdfQ==
|
|
334
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkEsd0RBRUM7O0FBL0JELDhFQUF5RztBQUV6RywrREFBaUQ7QUFDakQsK0VBQWlFO0FBQ2pFLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsdURBQXlDO0FBQ3pDLDZDQUF3QztBQUV4QyxnREFBd0I7QUFFeEIsdURBSWdDO0FBQ2hDLHFDQU9rQjtBQUNsQixvQ0FBMEM7QUFDMUMsd0RBQW1FO0FBQ25FLGtEQUFvRjtBQUdwRixTQUFnQixzQkFBc0I7SUFDbEMsT0FBTyx5QkFBVyxDQUFDLFNBQVMsQ0FBQyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFxRkQsTUFBYSxnQkFBaUIsU0FBUSx3Q0FBYzs7SUFDaEQsc0RBQXNEO0lBQ3RELHFFQUFxRTtJQUNyRSxtQ0FBbUM7SUFDM0IsTUFBTSxDQUFDLG9CQUFvQixHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzlFLE1BQU0sQ0FBQyxTQUFTLEdBQXlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkUsTUFBTSxDQUFDLFVBQVUsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNwRSxNQUFNLENBQUMsWUFBWSxHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTlFLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFDbEUsTUFBTSxPQUFPLEdBQUc7WUFDWixHQUFHLEtBQUs7WUFDUixRQUFRLEVBQUU7Z0JBQ04sR0FBRyxLQUFLLENBQUMsUUFBUTtnQkFDakIsU0FBUyxFQUFFO29CQUNQLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTO29CQUM1QiwyREFBMkQ7b0JBQzNELGNBQWMsRUFDVixLQUFLLENBQUMsUUFBUSxF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RCw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FDZiw4QkFBOEIsRUFBRSw4QkFBOEIsQ0FBQyxVQUFVLENBQzVFLENBQUE7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUNmLGdCQUFnQixFQUFFLHNCQUFjLENBQ25DLENBQUE7SUFDTCxDQUFDOztBQW5WTCw0Q0FxVkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1B5dGhvbkZ1bmN0aW9uLCBQeXRob25GdW5jdGlvblByb3BzLCBQeXRob25MYXllclZlcnNpb259IGZyb20gXCJAYXdzLWNkay9hd3MtbGFtYmRhLXB5dGhvbi1hbHBoYVwiO1xuaW1wb3J0IHtDb25zdHJ1Y3R9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCAqIGFzIHNlY3JldHNNYW5hZ2VyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIjtcbmltcG9ydCAqIGFzIHNzbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQge0RvY2tlckltYWdlfSBmcm9tICdhd3MtY2RrLWxpYic7XG5cbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7XG4gICAgUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbixcbiAgICBQYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwsXG4gICAgUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7XG4gICAgLy8gT3JjYWJ1cyBkZWZhdWx0c1xuICAgIERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUiwgREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCxcbiAgICAvLyBNYXJ0IGRlZmF1bHRzXG4gICAgTUFSVF9FTlZfVkFSUywgTUFSVF9MQU1CREFfRlVOQ1RJT05fTkFNRSxcbiAgICBNQVJUX1MzX0JVQ0tFVCxcbiAgICBNQVJUX1MzX1BSRUZJWCxcbn0gZnJvbSBcIi4vY29uZmlnXCI7XG5pbXBvcnQge3Jlc29sdmVTdGFnZU5hbWV9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHtBQ0NPVU5UX0lEX0FMSUFTLCBSRUdJT059IGZyb20gXCIuLi9zaGFyZWQtY29uZmlnL2FjY291bnRzXCI7XG5pbXBvcnQge0lDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSUQsIElDQVYyX0JBU0VfVVJMfSBmcm9tIFwiLi4vc2hhcmVkLWNvbmZpZy9pY2F2MlwiO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQeXRob25VdkRvY2tlckltYWdlKCk6IERvY2tlckltYWdlIHtcbiAgICByZXR1cm4gRG9ja2VySW1hZ2UuZnJvbUJ1aWxkKHBhdGguam9pbihfX2Rpcm5hbWUsICdidWlsZF9weXRob24nKSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JjYWJ1c1Jlc291cmNlc1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBvcmNhYnVzVG9rZW5TZWNyZXRJZCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBAREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRFxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9yY2FidXNUb2tlblNlY3JldElkPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcyB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hV29ya2dyb3VwTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBATUFSVF9FTlZfVkFSUy5BVEhFTkFfV09SS0dST1VQX05BTUVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFXb3JrZ3JvdXBOYW1lPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBhdGhlbmFEYXRhc291cmNlTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBATUFSVF9FTlZfVkFSUy5hdGhlbmFEYXRhc291cmNlTmFtZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGF0aGVuYURhdGFzb3VyY2VOYW1lPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBhdGhlbmFEYXRhYmFzZU5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFCQVNFX05BTUVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFEYXRhYmFzZU5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJY2F2MlJlc291cmNlc1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgaWQgb2YgdGhlIHNlY3JldCB0aGF0IGNvbnRhaW5zIHRoZSBpY2F2MiBhY2Nlc3MgdG9rZW5cbiAgICAgKiBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEXG4gICAgICovXG4gICAgcmVhZG9ubHkgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkPzogc3RyaW5nXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBQeXRob25VdkZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBQeXRob25GdW5jdGlvblByb3BzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBvcmNhYnVzIGFwaSB0b29scyBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZU9yY2FidXNBcGlUb29sc0xheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgbWFydCBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICogTm90ZSB0aGF0IHRoZSBtYXJ0IGxheWVyIGlzIGEgbGl0dGxlIGhlYXZpZXIgdGhhbiB0aGUgb3JjYWJ1cyBhcGkgdG9vbHMgbGF5ZXJcbiAgICAgKiBTaW5jZSB3ZSByZXF1aXJlIHBhbmRhcyB0byBiZSBpbnN0YWxsZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlTWFydExheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgaWNhdjIgbGF5ZXIgaW4gdGhlIGxhbWJkYSBmdW5jdGlvbiBidWlsZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGVJY2F2MkxheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgZmFzdGFwaSBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZUZhc3RBcGlMYXllcj86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIG9yY2FidXNUb2tlblJlc291cmNlcywgb3B0aW9uYWwsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG9cbiAgICAgKiBAREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCBhbmQgQERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUlxuICAgICAqIGZvciB0aGUgc2VjcmV0IGFuZCBTU00gcGFyYW1ldGVyIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9yY2FidXNUb2tlblJlc291cmNlcz86IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgbWFydEVudmlyb25tZW50VmFyaWFibGVzLCBvcHRpb25hbCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0b1xuICAgICAqIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9XT1JLR1JPVVBfTkFNRSwgQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFTT1VSQ0VfTkFNRVxuICAgICAqIGFuZCBATUFSVF9FTlZfVkFSUy5BVEhFTkFfREFUQUJBU0VfTkFNRSBmb3IgdGhlIGF0aGVuYSB3b3JrZ3JvdXAsIGRhdGFzb3VyY2UgYW5kIGRhdGFiYXNlIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcz86IE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgaWNhdjJSZXNvdXJjZXMsIG9wdGlvbmFsLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvXG4gICAgICogQERFRkFVTFRfSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCBmb3IgdGhlIHNlY3JldFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGljYXYyUmVzb3VyY2VzPzogSWNhdjJSZXNvdXJjZXNQcm9wc1xufVxuXG5cbmV4cG9ydCBjbGFzcyBQeXRob25VdkZ1bmN0aW9uIGV4dGVuZHMgUHl0aG9uRnVuY3Rpb24ge1xuICAgIC8vIENsYXNzIGNvbnN0cnVjdHMsIHRvIGJlIHVzZWQgZm9yIGNhY2hpbmcgdGhlIGxheWVyc1xuICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgbGFtYmRhcyB0aHJvdWdob3V0IHRoZSBzdGFja1xuICAgIC8vIFRoZXkgd2lsbCBhbGwgdXNlIHRoZSBzYW1lIGxheWVyXG4gICAgcHJpdmF0ZSBzdGF0aWMgb3JjYWJ1c0FwaVRvb2xzTGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBtYXJ0TGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBpY2F2MkxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgZmFzdEFwaUxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG5cbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHl0aG9uVXZGdW5jdGlvblByb3BzKSB7XG4gICAgICAgIGNvbnN0IHV2UHJvcHMgPSB7XG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgLi4ucHJvcHMuYnVuZGxpbmcsXG4gICAgICAgICAgICAgICAgYnVpbGRBcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnByb3BzLmJ1bmRsaW5nPy5idWlsZEFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBUQVJHRVRQTEFURk9STSB0byBidWlsZCBhcmdzIGlmIGl0J3Mgbm90IGFscmVhZHkgc2V0XG4gICAgICAgICAgICAgICAgICAgIFRBUkdFVFBMQVRGT1JNOlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuYnVuZGxpbmc/LmJ1aWxkQXJncz8uVEFSR0VUUExBVEZPUk0gPz8gbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQuZG9ja2VyUGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLmJ1bmRsaW5nPy5jb21tYW5kSG9va3M/LmJlZm9yZUJ1bmRsaW5nIGFzIHVua25vd24gYXMgc3RyaW5nW10gPz8gW107XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocHJvcHMuYnVuZGxpbmc/LmNvbW1hbmRIb29rcz8uYWZ0ZXJCdW5kbGluZyBhcyB1bmtub3duIGFzIHN0cmluZ1tdID8/IFtdKS5jb25jYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcm0gLXJmICR7b3V0cHV0RGlyfS9wYW5kYXMvdGVzdHNgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtbmFtZSAnX19weWNhY2hlX18nIC1leGVjIHJtIC1yZiB7fS8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFyYW1zQW5kU2VjcmV0czpcbiAgICAgICAgICAgICAgICBwcm9wcy5wYXJhbXNBbmRTZWNyZXRzID8/XG4gICAgICAgICAgICAgICAgUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbi5mcm9tVmVyc2lvbihQYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMuVjFfMF8xMDMsIHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjYWNoZVNpemU6IDMwMCxcbiAgICAgICAgICAgICAgICAgICAgbG9nTGV2ZWw6IFBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbC5ERUJVRyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkLCB1dlByb3BzKTtcblxuICAgICAgICBpZiAocHJvcHMuaW5jbHVkZU9yY2FidXNBcGlUb29sc0xheWVyKSB7XG4gICAgICAgICAgICAvKiBTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIE9yY2FidXMgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldE9yY2FidXNSZXNvdXJjZXMocHJvcHMub3JjYWJ1c1Rva2VuUmVzb3VyY2VzID8/IHt9KVxuXG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgb3JjYWJ1cyBBcGkgdG9vbHMgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRPcmNhYnVzQXBpVG9vbHNMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5vcmNhYnVzQXBpVG9vbHNMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVNYXJ0TGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgbWFydCByZXNvdXJjZXMgKi9cbiAgICAgICAgICAgIHRoaXMuc2V0QXRoZW5hUmVzb3VyY2VzKHByb3BzLm1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcyA/PyB7fSlcblxuICAgICAgICAgICAgLyogQnVpbGQgdGhlIG1hcnQgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRNYXJ0VG9vbHNMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5tYXJ0TGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlSWNhdjJMYXllcikge1xuICAgICAgICAgICAgLyogU2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBpY2F2MiByZXNvdXJjZXMgKi9cbiAgICAgICAgICAgIHRoaXMuc2V0SWNhdjJSZXNvdXJjZXMocHJvcHMuaWNhdjJSZXNvdXJjZXMgPz8ge30pXG5cbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBpY2F2MiBsYXllciAqL1xuICAgICAgICAgICAgdGhpcy5idWlsZEljYXYyTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVGYXN0QXBpTGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBmYXN0YXBpIGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkRmFzdEFwaUxheWVyKHNjb3BlKVxuICAgICAgICAgICAgdGhpcy5hZGRMYXllcnMoPFB5dGhvbkxheWVyVmVyc2lvbj5QeXRob25VdkZ1bmN0aW9uLmZhc3RBcGlMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE9yY2FidXNBcGlUb29sc0xheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCBvcmNhYnVzIGFwaSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5vcmNhYnVzQXBpVG9vbHNMYXllci5oYXMoc2NvcGUpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IG5ldyBQeXRob25MYXllclZlcnNpb24oc2NvcGUsICdvcmNhYnVzQXBpVG9vbHNMYXllcicsIHtcbiAgICAgICAgICAgICAgICBlbnRyeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2xheWVycy9vcmNhYnVzX2FwaV90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdvcmNhYnVzQXBpVG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLW5hbWUgJ19fcHljYWNoZV9fJyAtZXhlYyBybSAtcmYge30vIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuc2V0KHNjb3BlLCBsYXllcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkTWFydFRvb2xzTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5tYXJ0TGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHNjb3BlLCAnbWFydFRvb2xzTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvbWFydF90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdtYXJ0VG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLW5hbWUgJ19fcHljYWNoZV9fJyAtZXhlYyBybSAtcmYge30vIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLm1hcnRMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRJY2F2MkxheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5oYXMoc2NvcGUpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IG5ldyBQeXRob25MYXllclZlcnNpb24oc2NvcGUsICdpY2F2MlRvb2xzTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvaWNhdjJfdG9vbHMnKSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NF0sXG4gICAgICAgICAgICAgICAgbGljZW5zZTogJ0dQTDMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnaWNhdjJUb29sc0xheWVyJyxcbiAgICAgICAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kSG9va3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlckJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwaXAgaW5zdGFsbCAke2lucHV0RGlyfSAtLXRhcmdldCAke291dHB1dERpcn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLW5hbWUgJ3BhbmRhcycgLWV4ZWMgcm0gLXJmIHt9L3Rlc3RzLyBcXFxcO2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtbmFtZSAnX19weWNhY2hlX18nIC1leGVjIHJtIC1yZiB7fS8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRGYXN0QXBpTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5mYXN0QXBpTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHNjb3BlLCAnZmFzdEFwaUxheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL2Zhc3RhcGlfdG9vbHMnKSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NF0sXG4gICAgICAgICAgICAgICAgbGljZW5zZTogJ0dQTDMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZmFzdEFwaUxheWVyJyxcbiAgICAgICAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kSG9va3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlckJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwaXAgaW5zdGFsbCAke2lucHV0RGlyfSAtLXRhcmdldCAke291dHB1dERpcn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLW5hbWUgJ3BhbmRhcycgLWV4ZWMgcm0gLXJmIHt9L3Rlc3RzLyBcXFxcO2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtbmFtZSAnX19weWNhY2hlX18nIC1leGVjIHJtIC1yZiB7fS8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24uZmFzdEFwaUxheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRPcmNhYnVzUmVzb3VyY2VzKFxuICAgICAgICBwcm9wczogT3JjYWJ1c1Jlc291cmNlc1Byb3BzXG4gICAgKSB7XG4gICAgICAgIC8vIFNldCBzZWNyZXQgb2JqZWN0XG4gICAgICAgIGNvbnN0IG9yY2FidXNUb2tlblNlY3JldElkID0gc2VjcmV0c01hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoXG4gICAgICAgICAgICB0aGlzLCAnb3JjYWJ1c1Rva2VuU2VjcmV0SWQnLFxuICAgICAgICAgICAgcHJvcHMub3JjYWJ1c1Rva2VuU2VjcmV0SWQgPz8gREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgICAgICAgICAgdGhpcywgJ2hvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZScsXG4gICAgICAgICAgICBwcm9wcy5ob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUgPz8gREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSLFxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIHBlcm1pc3Npb25zIGZvciB0aGUgc2VjcmV0IGFuZCBTU00gcGFyYW1ldGVyXG4gICAgICAgIC8vIFRvIHRoZSBjdXJyZW50IHZlcnNpb25cbiAgICAgICAgb3JjYWJ1c1Rva2VuU2VjcmV0SWQuZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pO1xuICAgICAgICBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUuZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pXG5cbiAgICAgICAgLy8gQWRkIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgICAgICAgJ09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lEJywgb3JjYWJ1c1Rva2VuU2VjcmV0SWQuc2VjcmV0TmFtZSxcbiAgICAgICAgKVxuICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgICAgICAgJ0hPU1ROQU1FX1NTTV9QQVJBTUVURVJfTkFNRScsIGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZS5wYXJhbWV0ZXJOYW1lLFxuICAgICAgICApXG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHNldEF0aGVuYVJlc291cmNlcyhcbiAgICAgICAgcHJvcHM6IE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc1xuICAgICkge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBzdGFnZSBuYW1lIGJ5IHBlcmZvcm1pbmcgYSByZXZlcnNlIGxvb2t1cCB1c2luZyBjZGsuQXdzLkFDQ09VTlRfSUQgb24gQUNDT1VOVF9JRF9BTElBU1xuICAgICAgICBjb25zdCBzdGFnZU5hbWUgPSByZXNvbHZlU3RhZ2VOYW1lKHRoaXMpXG5cbiAgICAgICAgY29uc3QgYXRoZW5hUzNCdWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUoXG4gICAgICAgICAgICB0aGlzLCAnYXRoZW5hUzNCdWNrZXQnLFxuICAgICAgICAgICAgTUFSVF9TM19CVUNLRVRbc3RhZ2VOYW1lXVxuICAgICAgICApXG5cbiAgICAgICAgY29uc3QgYXRoZW5hRnVuY3Rpb25OYW1lID0gbGFtYmRhLkZ1bmN0aW9uLmZyb21GdW5jdGlvbk5hbWUoXG4gICAgICAgICAgICB0aGlzLCAnbGFtYmRhRnVuY3Rpb25OYW1lJywgTUFSVF9MQU1CREFfRlVOQ1RJT05fTkFNRVxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIGVudiB2YXJzXG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBrdiBwYWlycyBvZiBNQVJUX0VOVl9WQVJTXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKE1BUlRfRU5WX1ZBUlMpKSB7XG4gICAgICAgICAgICAvLyBBZnRlclxuICAgICAgICAgICAgaWYgKHByb3BzW2tleSBhcyBrZXlvZiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KGtleSwgcHJvcHNba2V5IGFzIGtleW9mIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc10hKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBlcm1pc3Npb25zXG4gICAgICAgIHRoaXMuY3VycmVudFZlcnNpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICAgICAgLy8gRnJvbSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXRoZW5hL2xhdGVzdC91Zy9leGFtcGxlLXBvbGljaWVzLXdvcmtncm91cC5odG1sXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAvLyBXb3JrZ3JvdXAgbGlzdHNcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0RW5naW5lVmVyc2lvbnMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RXb3JrR3JvdXBzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0RGF0YUNhdGFsb2dzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0RGF0YWJhc2VzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXREYXRhYmFzZScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdFRhYmxlTWV0YWRhdGEnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFRhYmxlTWV0YWRhdGEnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldERhdGFDYXRhbG9nJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmF0aGVuYToke1JFR0lPTn06JHtBQ0NPVU5UX0lEX0FMSUFTW3N0YWdlTmFtZV19OipgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBleGVjdXRpb25zXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6QmF0Y2hHZXRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RRdWVyeUV4ZWN1dGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0YXJ0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0b3BRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlSZXN1bHRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRRdWVyeVJlc3VsdHNTdHJlYW0nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkNyZWF0ZU5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldE5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkJhdGNoR2V0TmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdE5hbWVkUXVlcmllcycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlTmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6Q3JlYXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0UHJlcGFyZWRTdGF0ZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpVcGRhdGVQcmVwYXJlZFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIGBhcm46YXdzOmF0aGVuYToke1JFR0lPTn06JHtBQ0NPVU5UX0lEX0FMSUFTW3N0YWdlTmFtZV19Ondvcmtncm91cC8ke01BUlRfRU5WX1ZBUlMuYXRoZW5hV29ya2dyb3VwTmFtZX1gLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEFkZCByZWFkIGFjY2VzcyB0byB0aGUgUzMgYnVja2V0XG4gICAgICAgIGF0aGVuYVMzQnVja2V0LmdyYW50UmVhZFdyaXRlKFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbixcbiAgICAgICAgICAgIGAke01BUlRfUzNfUFJFRklYfSpgXG4gICAgICAgIClcblxuICAgICAgICAvLyBBZGQgaW52b2tlIGFjY2VzcyB0byB0aGUgbGFtYmRhIGZ1bmN0aW9uXG4gICAgICAgIGF0aGVuYUZ1bmN0aW9uTmFtZS5ncmFudEludm9rZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZlcnNpb25cbiAgICAgICAgKVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SWNhdjJSZXNvdXJjZXMoXG4gICAgICAgIHByb3BzOiBJY2F2MlJlc291cmNlc1Byb3BzXG4gICAgKSB7XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIHN0YWdlIG5hbWUgYnkgcGVyZm9ybWluZyBhIHJldmVyc2UgbG9va3VwIHVzaW5nIGNkay5Bd3MuQUNDT1VOVF9JRCBvbiBBQ0NPVU5UX0lEX0FMSUFTXG4gICAgICAgIGNvbnN0IHN0YWdlTmFtZSA9IHJlc29sdmVTdGFnZU5hbWUodGhpcylcblxuICAgICAgICAvLyBTZXQgc2VjcmV0IG9iamVjdFxuICAgICAgICBjb25zdCBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWRPYmplY3QgPSBzZWNyZXRzTWFuYWdlci5TZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgICAgIHRoaXMsICdJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEJyxcbiAgICAgICAgICAgIHByb3BzLmljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZCA/PyBJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEW3N0YWdlTmFtZV1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcGVybWlzc2lvbnMgZm9yIHRoZSBzZWNyZXQgYW5kIFNTTSBwYXJhbWV0ZXJcbiAgICAgICAgLy8gVG8gdGhlIGN1cnJlbnQgdmVyc2lvblxuICAgICAgICBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWRPYmplY3QuZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pO1xuXG4gICAgICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEJywgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkT2JqZWN0LnNlY3JldE5hbWUsXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdJQ0FWMl9CQVNFX1VSTCcsIElDQVYyX0JBU0VfVVJMLFxuICAgICAgICApXG4gICAgfVxuXG59XG5cblxuXG5cbiJdfQ==
|
|
@@ -274,14 +274,14 @@ files = [
|
|
|
274
274
|
|
|
275
275
|
[[package]]
|
|
276
276
|
name = "libica"
|
|
277
|
-
version = "3.
|
|
277
|
+
version = "3.1"
|
|
278
278
|
description = "Python SDK for Illumina Connected Analytics"
|
|
279
279
|
optional = false
|
|
280
280
|
python-versions = ">=3.8"
|
|
281
281
|
groups = ["main"]
|
|
282
282
|
files = [
|
|
283
|
-
{file = "libica-3.
|
|
284
|
-
{file = "libica-3.
|
|
283
|
+
{file = "libica-3.1-py3-none-any.whl", hash = "sha256:ef27d5576a5765d39a5f8617f18e46fbb2dce85e64e627e4f998a248d08e5439"},
|
|
284
|
+
{file = "libica-3.1.tar.gz", hash = "sha256:6b4f18d35d9881ec870b5d5b6ad5daa58e29110ab5d4537847cbf646086aafec"},
|
|
285
285
|
]
|
|
286
286
|
|
|
287
287
|
[package.dependencies]
|
|
@@ -377,14 +377,14 @@ files = [
|
|
|
377
377
|
|
|
378
378
|
[[package]]
|
|
379
379
|
name = "mypy-boto3-secretsmanager"
|
|
380
|
-
version = "1.
|
|
381
|
-
description = "Type annotations for boto3 SecretsManager 1.
|
|
380
|
+
version = "1.40.0"
|
|
381
|
+
description = "Type annotations for boto3 SecretsManager 1.40.0 service generated with mypy-boto3-builder 8.11.0"
|
|
382
382
|
optional = false
|
|
383
383
|
python-versions = ">=3.8"
|
|
384
384
|
groups = ["dev"]
|
|
385
385
|
files = [
|
|
386
|
-
{file = "mypy_boto3_secretsmanager-1.
|
|
387
|
-
{file = "mypy_boto3_secretsmanager-1.
|
|
386
|
+
{file = "mypy_boto3_secretsmanager-1.40.0-py3-none-any.whl", hash = "sha256:be624629e76d929c952e80e45faabfd7b512652ce1270c7e03c3ae247738eef6"},
|
|
387
|
+
{file = "mypy_boto3_secretsmanager-1.40.0.tar.gz", hash = "sha256:f6509365d5d4fe3260703badcef5a1c45455ed454e5f03f3573a5023cc176644"},
|
|
388
388
|
]
|
|
389
389
|
|
|
390
390
|
[[package]]
|
|
@@ -1124,20 +1124,20 @@ test = ["websockets"]
|
|
|
1124
1124
|
|
|
1125
1125
|
[[package]]
|
|
1126
1126
|
name = "wrapica"
|
|
1127
|
-
version = "2.37.0.
|
|
1127
|
+
version = "2.37.0.dev20250801071834"
|
|
1128
1128
|
description = "Secondary level functions for ICAv2 based off libica"
|
|
1129
1129
|
optional = false
|
|
1130
1130
|
python-versions = "<3.13,>=3.12"
|
|
1131
1131
|
groups = ["main"]
|
|
1132
1132
|
files = [
|
|
1133
|
-
{file = "wrapica-2.37.0.
|
|
1134
|
-
{file = "wrapica-2.37.0.
|
|
1133
|
+
{file = "wrapica-2.37.0.dev20250801071834-py3-none-any.whl", hash = "sha256:93b1bae9d316e41b2976925da7ec478d2ce06403562c523b091cb94e43a15bce"},
|
|
1134
|
+
{file = "wrapica-2.37.0.dev20250801071834.tar.gz", hash = "sha256:71a1fee7a346807aa71b9139ce70d281686f4a0ad0bf850bfbcfa4e852a4d538"},
|
|
1135
1135
|
]
|
|
1136
1136
|
|
|
1137
1137
|
[package.dependencies]
|
|
1138
1138
|
beautifulsoup4 = ">=4.10.0,<5"
|
|
1139
1139
|
cwl_utils = ">=0.38,<1"
|
|
1140
|
-
libica = ">=3.
|
|
1140
|
+
libica = ">=3.1,<4"
|
|
1141
1141
|
pandas = ">=2.2.2,<3"
|
|
1142
1142
|
PyJWT = ">=2.8.0,<3"
|
|
1143
1143
|
"ruamel.base" = ">=1.0.0,<2"
|
|
@@ -1159,4 +1159,4 @@ reference = "testpypi"
|
|
|
1159
1159
|
[metadata]
|
|
1160
1160
|
lock-version = "2.1"
|
|
1161
1161
|
python-versions = ">3.12,<3.13"
|
|
1162
|
-
content-hash = "
|
|
1162
|
+
content-hash = "6538cd5b066dc99768df4363fc24e298599ea7f94afb4e2fc50c2e8b75a6421b"
|
package/monitored-queue/index.js
CHANGED
|
@@ -13,7 +13,7 @@ const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
|
|
|
13
13
|
* SNS topic.
|
|
14
14
|
*/
|
|
15
15
|
class MonitoredQueue extends constructs_1.Construct {
|
|
16
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "0.0.
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "0.0.55" };
|
|
17
17
|
queue;
|
|
18
18
|
deadLetterQueue;
|
|
19
19
|
alarm;
|
|
@@ -7,7 +7,7 @@ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
|
7
7
|
* A construct which represents a named role that a Lambda function can assume.
|
|
8
8
|
*/
|
|
9
9
|
class NamedLambdaRole extends aws_iam_1.Role {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "0.0.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "0.0.55" };
|
|
11
11
|
constructor(scope, id, props) {
|
|
12
12
|
super(scope, id, {
|
|
13
13
|
assumedBy: new aws_iam_1.ServicePrincipal("lambda.amazonaws.com"),
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
|
15
15
|
* to the provider framework.
|
|
16
16
|
*/
|
|
17
17
|
class ProviderFunction extends constructs_1.Construct {
|
|
18
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "0.0.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "0.0.55" };
|
|
19
19
|
_function;
|
|
20
20
|
_response;
|
|
21
21
|
constructor(scope, id, props) {
|
|
@@ -23,7 +23,7 @@ exports.VPC_LOOKUP_PROPS = {
|
|
|
23
23
|
* Helper for looking up the shared OrcaBus VPC.
|
|
24
24
|
*/
|
|
25
25
|
class OrcaBusVpc {
|
|
26
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "0.0.
|
|
26
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "0.0.55" };
|
|
27
27
|
/**
|
|
28
28
|
* The shared VPC that is used by OrcaBus.
|
|
29
29
|
* @param scope
|
|
@@ -42,7 +42,7 @@ exports.SHARED_SECURITY_GROUP_NAME = "OrcaBusSharedComputeSecurityGroup";
|
|
|
42
42
|
* Helper for looking up the shared compute security group by name.
|
|
43
43
|
*/
|
|
44
44
|
class OrcaBusSharedComputeSecurityGroup {
|
|
45
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "0.0.
|
|
45
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "0.0.55" };
|
|
46
46
|
/**
|
|
47
47
|
* The shared security group that is used by compute resources to access the database.
|
|
48
48
|
* @param scope
|
package/shared-config/slack.js
CHANGED
|
@@ -11,7 +11,7 @@ exports.SLACK_ALERTS_SNS_TOPIC = "AwsChatBotTopic-alerts";
|
|
|
11
11
|
* A helper class to construct the arn for the slack SNS topic.
|
|
12
12
|
*/
|
|
13
13
|
class SlackAlerts {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "0.0.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "0.0.55" };
|
|
15
15
|
/**
|
|
16
16
|
* Format the ARN for the slack alerts SNS topic for the current stack.
|
|
17
17
|
* @param stack
|