@fjall/components-infrastructure 0.87.20 → 0.88.3
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/dist/lib/app.d.ts +14 -18
- package/dist/lib/app.js +58 -41
- package/dist/lib/config/aws/accountId.js +1 -2
- package/dist/lib/config/aws/backupGlobalSettings.js +1 -2
- package/dist/lib/config/aws/costAllocationTags.js +3 -4
- package/dist/lib/config/aws/identityCenter.d.ts +4 -4
- package/dist/lib/config/aws/identityCenter.js +17 -63
- package/dist/lib/config/aws/identityCenterGroupMembership.js +27 -42
- package/dist/lib/config/aws/index.d.ts +0 -8
- package/dist/lib/config/aws/index.js +1 -9
- package/dist/lib/config/aws/ipamDelegateAdmin.js +1 -2
- package/dist/lib/config/aws/ipamPoolId.js +1 -2
- package/dist/lib/config/aws/organisationId.js +1 -2
- package/dist/lib/config/aws/organisationsAccess.js +1 -2
- package/dist/lib/config/aws/ramSharing.js +1 -2
- package/dist/lib/layers/layers/secrets-resolver/bin/resolve-secrets +30 -0
- package/dist/lib/layers/layers/secrets-resolver/bin/resolve-secrets.mjs +212 -0
- package/dist/lib/layers/secrets-resolver/bin/resolve-secrets +30 -0
- package/dist/lib/layers/secrets-resolver/bin/resolve-secrets.mjs +212 -0
- package/dist/lib/patterns/aws/account.d.ts +12 -0
- package/dist/lib/patterns/aws/account.js +73 -0
- package/dist/lib/patterns/aws/buildkite.js +1 -2
- package/dist/lib/patterns/aws/cdn.d.ts +5 -10
- package/dist/lib/patterns/aws/cdn.js +5 -13
- package/dist/lib/patterns/aws/compute.d.ts +20 -3
- package/dist/lib/patterns/aws/compute.js +29 -5
- package/dist/lib/patterns/aws/database.d.ts +3 -3
- package/dist/lib/patterns/aws/database.js +18 -15
- package/dist/lib/patterns/aws/index.d.ts +4 -3
- package/dist/lib/patterns/aws/index.js +6 -4
- package/dist/lib/patterns/aws/interfaces/index.d.ts +2 -1
- package/dist/lib/patterns/aws/interfaces/index.js +8 -5
- package/dist/lib/patterns/aws/interfaces/organisation.d.ts +22 -0
- package/dist/lib/patterns/aws/interfaces/organisation.js +28 -0
- package/dist/lib/patterns/aws/interfaces/pattern.d.ts +5 -5
- package/dist/lib/patterns/aws/interfaces/pattern.js +1 -1
- package/dist/lib/patterns/aws/interfaces/storage.d.ts +10 -120
- package/dist/lib/patterns/aws/interfaces/storage.js +6 -43
- package/dist/lib/patterns/aws/organisation.d.ts +38 -0
- package/dist/lib/patterns/aws/organisation.js +92 -0
- package/dist/lib/patterns/aws/organisationFactory.d.ts +20 -0
- package/dist/lib/patterns/aws/organisationFactory.js +24 -0
- package/dist/lib/patterns/aws/pattern.d.ts +1 -1
- package/dist/lib/patterns/aws/pattern.js +1 -1
- package/dist/lib/patterns/aws/payload.d.ts +6 -5
- package/dist/lib/patterns/aws/payload.js +92 -42
- package/dist/lib/patterns/aws/platform.d.ts +11 -0
- package/dist/lib/patterns/aws/platform.js +29 -0
- package/dist/lib/patterns/aws/storage.d.ts +40 -125
- package/dist/lib/patterns/aws/storage.js +63 -191
- package/dist/lib/resources/aws/compute/ec2.d.ts +1 -1
- package/dist/lib/resources/aws/compute/ec2.js +3 -4
- package/dist/lib/resources/aws/compute/ecs.d.ts +6 -9
- package/dist/lib/resources/aws/compute/ecs.js +58 -26
- package/dist/lib/resources/aws/compute/lambda.d.ts +14 -1
- package/dist/lib/resources/aws/compute/lambda.js +45 -13
- package/dist/lib/resources/aws/database/rdsAurora.d.ts +1 -0
- package/dist/lib/resources/aws/database/rdsAurora.js +16 -16
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +1 -0
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +14 -10
- package/dist/lib/resources/aws/database/rdsInstance.d.ts +5 -4
- package/dist/lib/resources/aws/database/rdsInstance.js +18 -7
- package/dist/lib/resources/aws/iam/identityCenter/assignment.d.ts +0 -2
- package/dist/lib/resources/aws/iam/identityCenter/assignment.js +9 -46
- package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +1 -2
- package/dist/lib/resources/aws/iam/identityCenter/group.d.ts +1 -3
- package/dist/lib/resources/aws/iam/identityCenter/group.js +7 -85
- package/dist/lib/resources/aws/iam/identityCenter/permissionSet.d.ts +1 -3
- package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +9 -96
- package/dist/lib/resources/aws/index.d.ts +1 -0
- package/dist/lib/resources/aws/index.js +2 -1
- package/dist/lib/resources/aws/logging/cloudTrail.js +7 -4
- package/dist/lib/resources/aws/networking/ipamPool.js +76 -5
- package/dist/lib/resources/aws/organisation/index.d.ts +4 -0
- package/dist/lib/resources/aws/organisation/index.js +10 -0
- package/dist/lib/resources/aws/organisation/organisation.d.ts +12 -0
- package/dist/lib/resources/aws/organisation/organisation.js +14 -0
- package/dist/lib/resources/aws/organisation/organisationAccount.d.ts +18 -0
- package/dist/lib/resources/aws/organisation/organisationAccount.js +31 -0
- package/dist/lib/resources/aws/organisation/organisationPolicy.d.ts +13 -0
- package/dist/lib/resources/aws/organisation/organisationPolicy.js +32 -0
- package/dist/lib/resources/aws/organisation/organisationalUnit.d.ts +10 -0
- package/dist/lib/resources/aws/organisation/organisationalUnit.js +9 -0
- package/dist/lib/resources/aws/secrets/kms.js +10 -7
- package/dist/lib/resources/aws/secrets/parameter.js +5 -4
- package/dist/lib/resources/aws/storage/ecr.d.ts +3 -1
- package/dist/lib/resources/aws/storage/ecr.js +3 -3
- package/dist/lib/resources/aws/storage/s3.d.ts +6 -39
- package/dist/lib/resources/aws/storage/s3.js +31 -34
- package/dist/lib/utils/capitaliseString.d.ts +12 -0
- package/dist/lib/utils/capitaliseString.js +30 -0
- package/dist/lib/utils/capitalizeString.d.ts +11 -0
- package/dist/lib/utils/capitalizeString.js +24 -1
- package/dist/lib/utils/getConfig.d.ts +5 -1
- package/dist/lib/utils/getConfig.js +9 -1
- package/dist/lib/utils/index.d.ts +1 -0
- package/dist/lib/utils/index.js +2 -1
- package/dist/lib/utils/resourceNaming.d.ts +22 -19
- package/dist/lib/utils/resourceNaming.js +39 -35
- package/package.json +5 -6
|
@@ -12,6 +12,7 @@ const database_1 = require("../../resources/aws/database");
|
|
|
12
12
|
const rdsAuroraGlobal_1 = require("../../resources/aws/database/rdsAuroraGlobal");
|
|
13
13
|
const dynamodb_1 = require("../../resources/aws/database/dynamodb");
|
|
14
14
|
const validationLogger_js_1 = require("../../utils/validationLogger.js");
|
|
15
|
+
const capitaliseString_js_1 = require("../../utils/capitaliseString.js");
|
|
15
16
|
const aws_rds_1 = require("aws-cdk-lib/aws-rds");
|
|
16
17
|
const aws_cdk_lib_2 = require("aws-cdk-lib");
|
|
17
18
|
exports.DATABASE_ENGINE_CONFIG = {
|
|
@@ -168,7 +169,7 @@ function validateDatabaseProps(props) {
|
|
|
168
169
|
* // Aurora database - returns RelationalDatabase
|
|
169
170
|
* const aurora = app.addDatabase(DatabaseFactory.build("Main", {
|
|
170
171
|
* type: "Aurora",
|
|
171
|
-
* databaseName: "
|
|
172
|
+
* databaseName: "my_app"
|
|
172
173
|
* }));
|
|
173
174
|
* aurora.getHostEndpoint(); // Available
|
|
174
175
|
*
|
|
@@ -265,7 +266,7 @@ exports.DynamoDBDatabase = DynamoDBDatabase;
|
|
|
265
266
|
* @example
|
|
266
267
|
* const db = app.addDatabase(DatabaseFactory.build("Main", {
|
|
267
268
|
* type: "Aurora",
|
|
268
|
-
* databaseName: "
|
|
269
|
+
* databaseName: "my_app"
|
|
269
270
|
* }));
|
|
270
271
|
* db.grantConnect(lambda);
|
|
271
272
|
*/
|
|
@@ -401,28 +402,30 @@ class RelationalDatabase extends constructs_1.Construct {
|
|
|
401
402
|
addDatabaseOutputs(props) {
|
|
402
403
|
const endpoint = this.database.getHostEndpoint();
|
|
403
404
|
const stackName = aws_cdk_lib_1.Stack.of(this).stackName;
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
405
|
+
// Sanitise for CfnOutput names — CloudFormation export names only allow [a-zA-Z0-9:-]
|
|
406
|
+
const outputName = (0, capitaliseString_js_1.toPascalCase)(props.databaseName);
|
|
407
|
+
new aws_cdk_lib_1.CfnOutput(this, `${outputName}Endpoint`, {
|
|
408
|
+
key: `${stackName}${outputName}Endpoint`,
|
|
409
|
+
exportName: `${stackName}${outputName}Endpoint`,
|
|
407
410
|
value: endpoint,
|
|
408
411
|
description: `Database Endpoint for ${props.databaseName}`
|
|
409
412
|
});
|
|
410
|
-
new aws_cdk_lib_1.CfnOutput(this, `${
|
|
411
|
-
key: `${stackName}${
|
|
412
|
-
exportName: `${stackName}${
|
|
413
|
+
new aws_cdk_lib_1.CfnOutput(this, `${outputName}Port`, {
|
|
414
|
+
key: `${stackName}${outputName}Port`,
|
|
415
|
+
exportName: `${stackName}${outputName}Port`,
|
|
413
416
|
value: this.database.getHostPort(),
|
|
414
417
|
description: `Database Port for ${props.databaseName}`
|
|
415
418
|
});
|
|
416
|
-
new aws_cdk_lib_1.CfnOutput(this, `${
|
|
417
|
-
key: `${stackName}${
|
|
418
|
-
exportName: `${stackName}${
|
|
419
|
+
new aws_cdk_lib_1.CfnOutput(this, `${outputName}DatabaseName`, {
|
|
420
|
+
key: `${stackName}${outputName}DatabaseName`,
|
|
421
|
+
exportName: `${stackName}${outputName}DatabaseName`,
|
|
419
422
|
value: props.databaseName,
|
|
420
423
|
description: `Database Name for ${props.databaseName}`
|
|
421
424
|
});
|
|
422
425
|
const credentials = this.database.getCredentials();
|
|
423
|
-
new aws_cdk_lib_1.CfnOutput(this, `${
|
|
424
|
-
key: `${stackName}${
|
|
425
|
-
exportName: `${stackName}${
|
|
426
|
+
new aws_cdk_lib_1.CfnOutput(this, `${outputName}SecretArn`, {
|
|
427
|
+
key: `${stackName}${outputName}SecretArn`,
|
|
428
|
+
exportName: `${stackName}${outputName}SecretArn`,
|
|
426
429
|
value: credentials.secret.secretArn,
|
|
427
430
|
description: `Database Credentials Secret ARN for ${props.databaseName}`
|
|
428
431
|
});
|
|
@@ -455,4 +458,4 @@ Object.defineProperty(exports, "isDynamoDBDatabase", { enumerable: true, get: fu
|
|
|
455
458
|
Object.defineProperty(exports, "isAuroraDatabase", { enumerable: true, get: function () { return database_js_1.isAuroraDatabase; } });
|
|
456
459
|
Object.defineProperty(exports, "isInstanceDatabase", { enumerable: true, get: function () { return database_js_1.isInstanceDatabase; } });
|
|
457
460
|
Object.defineProperty(exports, "isGlobalAuroraDatabase", { enumerable: true, get: function () { return database_js_1.isGlobalAuroraDatabase; } });
|
|
458
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2RhdGFiYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW9IQSx3REFFQztBQUVELDhDQUVDO0FBRUQsMENBT0M7QUFrREQsMENBU0M7QUFLRCx3Q0FTQztBQTVNRCwyQ0FBdUM7QUFDdkMsNkNBQStDO0FBRy9DLDJEQUFzRTtBQUN0RSxrRkFBK0U7QUFDL0Usb0VBSytDO0FBQy9DLHlFQUd5QztBQXFCekMsaURBUzZCO0FBQzdCLDZDQUF1QztBQVcxQixRQUFBLHNCQUFzQixHQVMvQjtJQUNGLFVBQVUsRUFBRTtRQUNWLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRTtRQUMvQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUU7UUFDakQsZUFBZSxFQUFFLFVBQVU7UUFDM0IsYUFBYSxFQUFFLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRTtRQUN2QyxlQUFlLEVBQUUsOENBQThDO0tBQ2hFO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsd0VBQXdFO1FBQ3hFLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFO1FBQ3RFLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtRQUNuRCxlQUFlLEVBQUUsT0FBTztRQUN4QixhQUFhLEVBQUUsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUU7UUFDakQsZUFBZSxFQUFFLHlDQUF5QztLQUMzRDtDQUNGLENBQUM7QUFFRixNQUFNLHVCQUF1QixHQUFpRDtJQUM1RSxVQUFVLEVBQUUsR0FBRyxFQUFFO1FBQ2YsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyw4QkFBc0IsQ0FBQyxV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YztRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLE9BQXFCO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakQsQ0FBQztDQUNGO0FBOU5ELGdEQThOQztBQVNELDRCQUE0QjtBQUM1Qix3REFXa0M7QUFMaEMsbUhBQUEsb0JBQW9CLE9BQUE7QUFDcEIsaUhBQUEsa0JBQWtCLE9BQUE7QUFDbEIsK0dBQUEsZ0JBQWdCLE9BQUE7QUFDaEIsaUhBQUEsa0JBQWtCLE9BQUE7QUFDbEIscUhBQUEsc0JBQXNCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ2ZuT3V0cHV0LCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uL2FwcFwiO1xuaW1wb3J0IHsgUmRzQXVyb3JhLCBSZHNJbnN0YW5jZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlXCI7XG5pbXBvcnQgeyBSZHNBdXJvcmFHbG9iYWwgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9yZHNBdXJvcmFHbG9iYWxcIjtcbmltcG9ydCB7XG4gIER5bmFtb0RCVGFibGUsXG4gIHR5cGUgRHluYW1vREJLZXlTY2hlbWEsXG4gIHR5cGUgRHluYW1vREJHbG9iYWxTZWNvbmRhcnlJbmRleCxcbiAgdHlwZSBEeW5hbW9EQlRhYmxlUHJvcHNcbn0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvZGF0YWJhc2UvZHluYW1vZGJcIjtcbmltcG9ydCB7XG4gIEZqYWxsTG9nZ2VyLFxuICB3YXJuSWZQcm9wZXJ0aWVzSWdub3JlZFxufSBmcm9tIFwiLi4vLi4vdXRpbHMvdmFsaWRhdGlvbkxvZ2dlci5qc1wiO1xuXG5pbXBvcnQge1xuICB0eXBlIENvbm5lY3Rpb25zLFxuICB0eXBlIElDb25uZWN0YWJsZSxcbiAgdHlwZSBJVnBjLFxuICB0eXBlIFN1Ym5ldFNlbGVjdGlvblxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgdHlwZSBJVGFibGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiXCI7XG5pbXBvcnQgeyB0eXBlIFNlY3JldCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3NlY3JldHNcIjtcbmltcG9ydCB7IHR5cGUgSUdyYW50YWJsZSwgdHlwZSBHcmFudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICB0eXBlIElSZWxhdGlvbmFsRGF0YWJhc2UsXG4gIHR5cGUgSUR5bmFtb0RCRGF0YWJhc2UsXG4gIHR5cGUgQW55RGF0YWJhc2UsXG4gIHR5cGUgUmVsYXRpb25hbERhdGFiYXNlVHlwZVxufSBmcm9tIFwiLi9pbnRlcmZhY2VzL2RhdGFiYXNlLmpzXCI7XG5pbXBvcnQge1xuICB0eXBlIElEeW5hbW9EQkNvbm5lY3RvcixcbiAgdHlwZSBJU2VjdXJpdHlHcm91cENvbm5lY3RvclxufSBmcm9tIFwiLi9pbnRlcmZhY2VzL2Nvbm5lY3Rvci5qc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBJSW5zdGFuY2VFbmdpbmUsXG4gIHR5cGUgSUNsdXN0ZXJFbmdpbmUsXG4gIERhdGFiYXNlQ2x1c3RlckVuZ2luZSxcbiAgRGF0YWJhc2VJbnN0YW5jZUVuZ2luZSxcbiAgQXVyb3JhUG9zdGdyZXNFbmdpbmVWZXJzaW9uLFxuICBBdXJvcmFNeXNxbEVuZ2luZVZlcnNpb24sXG4gIFBvc3RncmVzRW5naW5lVmVyc2lvbixcbiAgTXlzcWxFbmdpbmVWZXJzaW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtcmRzXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgdHlwZSBJS2V5IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1rbXNcIjtcblxuZXhwb3J0IHR5cGUgRGF0YWJhc2VFbmdpbmUgPSBcInBvc3RncmVzcWxcIiB8IFwibXlzcWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFbmdpbmVDb25maWcge1xuICBkZWZhdWx0VXNlcm5hbWU6IHN0cmluZztcbiAgc3NsUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcm90YXRpb25BcHBOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBEQVRBQkFTRV9FTkdJTkVfQ09ORklHOiBSZWNvcmQ8XG4gIERhdGFiYXNlRW5naW5lLFxuICB7XG4gICAgYXVyb3JhOiB7IHZlcnNpb246IHN0cmluZzsgbWFqb3JWZXJzaW9uOiBzdHJpbmcgfTtcbiAgICBpbnN0YW5jZTogeyB2ZXJzaW9uOiBzdHJpbmc7IG1ham9yVmVyc2lvbjogc3RyaW5nIH07XG4gICAgZGVmYXVsdFVzZXJuYW1lOiBzdHJpbmc7XG4gICAgc3NsUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICByb3RhdGlvbkFwcE5hbWU6IHN0cmluZztcbiAgfVxuPiA9IHtcbiAgcG9zdGdyZXNxbDoge1xuICAgIGF1cm9yYTogeyB2ZXJzaW9uOiBcIjE2LjZcIiwgbWFqb3JWZXJzaW9uOiBcIjE2XCIgfSxcbiAgICBpbnN0YW5jZTogeyB2ZXJzaW9uOiBcIjE3LjVcIiwgbWFqb3JWZXJzaW9uOiBcIjE3XCIgfSxcbiAgICBkZWZhdWx0VXNlcm5hbWU6IFwicG9zdGdyZXNcIixcbiAgICBzc2xQYXJhbWV0ZXJzOiB7IFwicmRzLmZvcmNlX3NzbFwiOiBcIjFcIiB9LFxuICAgIHJvdGF0aW9uQXBwTmFtZTogXCJTZWNyZXRzTWFuYWdlclJEU1Bvc3RncmVTUUxSb3RhdGlvbk11bHRpVXNlclwiXG4gIH0sXG4gIG15c3FsOiB7XG4gICAgLy8gbWFqb3JWZXJzaW9uIG11c3QgYmUgQXVyb3JhIHZlcnNpb24gKDMuMDguMCksIE5PVCBNeVNRTCB2ZXJzaW9uICg4LjApXG4gICAgYXVyb3JhOiB7IHZlcnNpb246IFwiOC4wLm15c3FsX2F1cm9yYS4zLjA4LjBcIiwgbWFqb3JWZXJzaW9uOiBcIjMuMDguMFwiIH0sXG4gICAgaW5zdGFuY2U6IHsgdmVyc2lvbjogXCI4LjQuNFwiLCBtYWpvclZlcnNpb246IFwiOC40XCIgfSxcbiAgICBkZWZhdWx0VXNlcm5hbWU6IFwiYWRtaW5cIixcbiAgICBzc2xQYXJhbWV0ZXJzOiB7IHJlcXVpcmVfc2VjdXJlX3RyYW5zcG9ydDogXCJPTlwiIH0sXG4gICAgcm90YXRpb25BcHBOYW1lOiBcIlNlY3JldHNNYW5hZ2VyUkRTTXlTUUxSb3RhdGlvbk11bHRpVXNlclwiXG4gIH1cbn07XG5cbmNvbnN0IEFVUk9SQV9FTkdJTkVfRkFDVE9SSUVTOiBSZWNvcmQ8RGF0YWJhc2VFbmdpbmUsICgpID0+IElDbHVzdGVyRW5naW5lPiA9IHtcbiAgcG9zdGdyZXNxbDogKCkgPT4ge1xuICAgIGNvbnN0IHsgdmVyc2lvbiwgbWFqb3JWZXJzaW9uIH0gPSBEQVRBQkFTRV9FTkdJTkVfQ09ORklHLnBvc3RncmVzcWwuYXVyb3JhO1xuICAgIHJldHVybiBEYXRhYmFzZUNsdXN0ZXJFbmdpbmUuYXVyb3JhUG9zdGdyZXMoe1xuICAgICAgdmVyc2lvbjogQXVyb3JhUG9zdGdyZXNFbmdpbmVWZXJzaW9uLm9mKHZlcnNpb24sIG1ham9yVmVyc2lvbilcbiAgICB9KTtcbiAgfSxcbiAgbXlzcWw6ICgpID0+IHtcbiAgICBjb25zdCB7IHZlcnNpb24sIG1ham9yVmVyc2lvbiB9ID0gREFUQUJBU0VfRU5HSU5FX0NPTkZJRy5teXNxbC5hdXJvcmE7XG4gICAgcmV0dXJuIERhdGFiYXNlQ2x1c3RlckVuZ2luZS5hdXJvcmFNeXNxbCh7XG4gICAgICB2ZXJzaW9uOiBBdXJvcmFNeXNxbEVuZ2luZVZlcnNpb24ub2YodmVyc2lvbiwgbWFqb3JWZXJzaW9uKVxuICAgIH0pO1xuICB9XG59O1xuXG5jb25zdCBJTlNUQU5DRV9FTkdJTkVfRkFDVE9SSUVTOiBSZWNvcmQ8RGF0YWJhc2VFbmdpbmUsICgpID0+IElJbnN0YW5jZUVuZ2luZT4gPVxuICB7XG4gICAgcG9zdGdyZXNxbDogKCkgPT4ge1xuICAgICAgY29uc3QgeyB2ZXJzaW9uLCBtYWpvclZlcnNpb24gfSA9XG4gICAgICAgIERBVEFCQVNFX0VOR0lORV9DT05GSUcucG9zdGdyZXNxbC5pbnN0YW5jZTtcbiAgICAgIHJldHVybiBEYXRhYmFzZUluc3RhbmNlRW5naW5lLnBvc3RncmVzKHtcbiAgICAgICAgdmVyc2lvbjogUG9zdGdyZXNFbmdpbmVWZXJzaW9uLm9mKHZlcnNpb24sIG1ham9yVmVyc2lvbilcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbXlzcWw6ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgdmVyc2lvbiwgbWFqb3JWZXJzaW9uIH0gPSBEQVRBQkFTRV9FTkdJTkVfQ09ORklHLm15c3FsLmluc3RhbmNlO1xuICAgICAgcmV0dXJuIERhdGFiYXNlSW5zdGFuY2VFbmdpbmUubXlzcWwoe1xuICAgICAgICB2ZXJzaW9uOiBNeXNxbEVuZ2luZVZlcnNpb24ub2YodmVyc2lvbiwgbWFqb3JWZXJzaW9uKVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXVyb3JhQ2x1c3RlckVuZ2luZShlbmdpbmU6IERhdGFiYXNlRW5naW5lKTogSUNsdXN0ZXJFbmdpbmUge1xuICByZXR1cm4gQVVST1JBX0VOR0lORV9GQUNUT1JJRVNbZW5naW5lXSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zdGFuY2VFbmdpbmUoZW5naW5lOiBEYXRhYmFzZUVuZ2luZSk6IElJbnN0YW5jZUVuZ2luZSB7XG4gIHJldHVybiBJTlNUQU5DRV9FTkdJTkVfRkFDVE9SSUVTW2VuZ2luZV0oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVuZ2luZUNvbmZpZyhlbmdpbmU6IERhdGFiYXNlRW5naW5lKTogRW5naW5lQ29uZmlnIHtcbiAgY29uc3QgY29uZmlnID0gREFUQUJBU0VfRU5HSU5FX0NPTkZJR1tlbmdpbmVdO1xuICByZXR1cm4ge1xuICAgIGRlZmF1bHRVc2VybmFtZTogY29uZmlnLmRlZmF1bHRVc2VybmFtZSxcbiAgICBzc2xQYXJhbWV0ZXJzOiBjb25maWcuc3NsUGFyYW1ldGVycyxcbiAgICByb3RhdGlvbkFwcE5hbWU6IGNvbmZpZy5yb3RhdGlvbkFwcE5hbWVcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm94eUNvbmZpZyB7XG4gIG1heENvbm5lY3Rpb25zPzogbnVtYmVyO1xuICBtYXhJZGxlQ29ubmVjdGlvbnM/OiBudW1iZXI7XG4gIGNvbm5lY3Rpb25Cb3Jyb3dUaW1lb3V0PzogbnVtYmVyO1xuICByZXF1aXJlVExTPzogYm9vbGVhbjtcbiAgdnBjU3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFkUmVwbGljYUNvbmZpZyB7XG4gIGluc3RhbmNlVHlwZT86IHN0cmluZztcbiAgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVkZW50aWFsc0NvbmZpZyB7XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuICBzZWNyZXRSb3RhdGlvbj86IFNlY3JldFJvdGF0aW9uQ29uZmlnIHwgZmFsc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjcmV0Um90YXRpb25Db25maWcge1xuICBhdXRvbWF0aWNhbGx5QWZ0ZXI/OiBEdXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbmNyeXB0aW9uQ29uZmlnIHtcbiAgc3RvcmFnZUtleT86IEVuY3J5cHRpb25LZXlTcGVjO1xufVxuXG5leHBvcnQgdHlwZSBQZXJmb3JtYW5jZUluc2lnaHRzUmV0ZW50aW9uUGVyaW9kID0gNyB8IDMxIHwgOTMgfCAxODYgfCAzNzIgfCA3MzE7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVyZm9ybWFuY2VJbnNpZ2h0c0NvbmZpZyB7XG4gIGVuY3J5cHRpb25LZXk/OiBFbmNyeXB0aW9uS2V5U3BlYztcbiAgLyoqIFJldGVudGlvbiBwZXJpb2QgaW4gZGF5cy4gRGVmYXVsdDogMzEgKDEgbW9udGgpLiAqL1xuICByZXRlbnRpb25QZXJpb2Q/OiBQZXJmb3JtYW5jZUluc2lnaHRzUmV0ZW50aW9uUGVyaW9kO1xufVxuXG4vLyBNYXJrZXIgZm9yIEFXUyBtYW5hZ2VkIGVuY3J5cHRpb24ga2V5IChhd3MvcmRzLCBhd3MvczMsIGV0Yy4pXG5leHBvcnQgaW50ZXJmYWNlIEF3c01hbmFnZWRLZXkge1xuICByZWFkb25seSBhd3NNYW5hZ2VkOiB0cnVlO1xufVxuXG4vLyBNYXJrZXIgZm9yIGV4cGxpY2l0bHkgcmVxdWVzdGluZyBhIEN1c3RvbWVyIE1hbmFnZWQgS2V5IChDTUspLlxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21lck1hbmFnZWRLZXlNYXJrZXIge1xuICByZWFkb25seSB1c2VDTUs6IHRydWU7XG59XG5cbi8vIEVuY3J5cHRpb24ga2V5IHNwZWNpZmljYXRpb24gZm9yIFJEUyByZXNvdXJjZXMuXG5leHBvcnQgdHlwZSBFbmNyeXB0aW9uS2V5U3BlYyA9IElLZXkgfCBBd3NNYW5hZ2VkS2V5IHwgQ3VzdG9tZXJNYW5hZ2VkS2V5TWFya2VyO1xuXG4vLyBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIHRoZSBlbmNyeXB0aW9uIGtleSBzcGVjIGlzIEFXUyBtYW5hZ2VkLlxuZXhwb3J0IGZ1bmN0aW9uIGlzQXdzTWFuYWdlZEtleShcbiAgc3BlYzogRW5jcnlwdGlvbktleVNwZWMgfCB1bmRlZmluZWRcbik6IHNwZWMgaXMgQXdzTWFuYWdlZEtleSB7XG4gIHJldHVybiAoXG4gICAgc3BlYyAhPT0gdW5kZWZpbmVkICYmXG4gICAgdHlwZW9mIHNwZWMgPT09IFwib2JqZWN0XCIgJiZcbiAgICBcImF3c01hbmFnZWRcIiBpbiBzcGVjICYmXG4gICAgKHNwZWMgYXMgQXdzTWFuYWdlZEtleSkuYXdzTWFuYWdlZCA9PT0gdHJ1ZVxuICApO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgQ01LIGlzIGV4cGxpY2l0bHkgcmVxdWVzdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDTUtSZXF1ZXN0ZWQoXG4gIHNwZWM6IEVuY3J5cHRpb25LZXlTcGVjIHwgdW5kZWZpbmVkXG4pOiBzcGVjIGlzIEN1c3RvbWVyTWFuYWdlZEtleU1hcmtlciB7XG4gIHJldHVybiAoXG4gICAgc3BlYyAhPT0gdW5kZWZpbmVkICYmXG4gICAgdHlwZW9mIHNwZWMgPT09IFwib2JqZWN0XCIgJiZcbiAgICBcInVzZUNNS1wiIGluIHNwZWMgJiZcbiAgICAoc3BlYyBhcyBDdXN0b21lck1hbmFnZWRLZXlNYXJrZXIpLnVzZUNNSyA9PT0gdHJ1ZVxuICApO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlIGNvbnN0YW50IGZvciBzcGVjaWZ5aW5nIEFXUyBtYW5hZ2VkIGVuY3J5cHRpb24gKHRoZSBkZWZhdWx0KS5cbiAqIEBleGFtcGxlXG4gKiBlbmNyeXB0aW9uOiB7IHN0b3JhZ2VLZXk6IEFXU19NQU5BR0VEIH1cbiAqL1xuZXhwb3J0IGNvbnN0IEFXU19NQU5BR0VEOiBBd3NNYW5hZ2VkS2V5ID0geyBhd3NNYW5hZ2VkOiB0cnVlIH0gYXMgY29uc3Q7XG5cbi8qKlxuICogQ29udmVuaWVuY2UgY29uc3RhbnQgZm9yIGV4cGxpY2l0bHkgcmVxdWVzdGluZyBDTUsuXG4gKiBAZXhhbXBsZVxuICogZW5jcnlwdGlvbjogeyBzdG9yYWdlS2V5OiBVU0VfQ01LIH1cbiAqL1xuZXhwb3J0IGNvbnN0IFVTRV9DTUs6IEN1c3RvbWVyTWFuYWdlZEtleU1hcmtlciA9IHsgdXNlQ01LOiB0cnVlIH0gYXMgY29uc3Q7XG5cbi8qKlxuICogKipERVNUUlVDVElWRSoqOiBDaGFuZ2luZyBgc3RvcmFnZUtleWAgYWZ0ZXIgY2x1c3RlciBjcmVhdGlvbiBjYXVzZXMgY2x1c3RlciBSRVBMQUNFTUVOVC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXJvcmFFbmNyeXB0aW9uQ29uZmlnIHtcbiAgLyoqIERFU1RSVUNUSVZFOiBDaGFuZ2luZyBhZnRlciBjcmVhdGlvbiBjYXVzZXMgY2x1c3RlciByZXBsYWNlbWVudCAqL1xuICBzdG9yYWdlS2V5PzogRW5jcnlwdGlvbktleVNwZWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVyb3JhUmVhZGVyQ29uZmlnIHtcbiAgc2NhbGVXaXRoV3JpdGVyPzogYm9vbGVhbjtcbiAgZW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0cz86IGJvb2xlYW47XG4gIGlkZW50aWZpZXJTdWZmaXg/OiBzdHJpbmc7XG4gIGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVyb3JhV3JpdGVyQ29uZmlnIHtcbiAgZW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0cz86IGJvb2xlYW47XG4gIGlkZW50aWZpZXJTdWZmaXg/OiBzdHJpbmc7XG4gIGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVyb3JhUmVhZGVyc0NvbmZpZyB7XG4gIC8qKiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBpbnN0YW5jZXMgKi9cbiAgY291bnQ/OiBudW1iZXI7XG4gIC8qKiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBjb3VudCAqL1xuICBpbnN0YW5jZXM/OiBBdXJvcmFSZWFkZXJDb25maWdbXTtcbiAgZGVmYXVsdEVuYWJsZVBlcmZvcm1hbmNlSW5zaWdodHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEJhc2UgcHJvcHMgZm9yIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbnR5cGUgQmFzZURhdGFiYXNlUHJvcHMgPSB7XG4gIHZwYz86IElWcGM7XG4gIGRhdGFiYXNlTmFtZTogc3RyaW5nO1xuICBpbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG4gIGRlbGV0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1cm9yYURhdGFiYXNlUHJvcHMgZXh0ZW5kcyBCYXNlRGF0YWJhc2VQcm9wcyB7XG4gIHR5cGU6IFwiQXVyb3JhXCI7XG4gIGRhdGFiYXNlRW5naW5lPzogRGF0YWJhc2VFbmdpbmU7XG4gIC8qKiBPdmVycmlkZXMgZGF0YWJhc2VFbmdpbmUgaWYgcHJvdmlkZWQgKi9cbiAgZW5naW5lPzogSUNsdXN0ZXJFbmdpbmU7XG4gIHdyaXRlcj86IEF1cm9yYVdyaXRlckNvbmZpZztcbiAgcmVhZGVycz86IEF1cm9yYVJlYWRlcnNDb25maWcgfCBmYWxzZTtcbiAgcHJveHk/OiBQcm94eUNvbmZpZyB8IGZhbHNlO1xuICBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzQ29uZmlnO1xuICAvKiogREVTVFJVQ1RJVkU6IENoYW5naW5nIHN0b3JhZ2VLZXkgY2F1c2VzIGNsdXN0ZXIgcmVwbGFjZW1lbnQgKi9cbiAgZW5jcnlwdGlvbj86IEF1cm9yYUVuY3J5cHRpb25Db25maWc7XG4gIGJhY2t1cFJldGVudGlvbj86IG51bWJlcjtcbiAgbW9uaXRvcmluZ0ludGVydmFsPzogRHVyYXRpb247XG4gIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93Pzogc3RyaW5nO1xuICBwb3J0PzogbnVtYmVyO1xuICBwZXJmb3JtYW5jZUluc2lnaHRzPzogUGVyZm9ybWFuY2VJbnNpZ2h0c0NvbmZpZyB8IGZhbHNlO1xuICAvKiogQVJOIG9yIGlkZW50aWZpZXIgb2YgREIgY2x1c3RlciBzbmFwc2hvdCB0byByZXN0b3JlIGZyb20gKi9cbiAgc25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAvKiogVXNlcm5hbWUgZnJvbSB0aGUgc25hcHNob3QgKHJlcXVpcmVkIHdoZW4gcmVzdG9yaW5nIGZyb20gc25hcHNob3QgdG8gcmVzZXQgcGFzc3dvcmQpICovXG4gIHNuYXBzaG90VXNlcm5hbWU/OiBzdHJpbmc7XG4gIC8qKiBBbGxvdyBhY2Nlc3MgZnJvbSBWUEMgQ0lEUiAoYXZvaWRzIGNyb3NzLXN0YWNrIGN5Y2xpYyBkZXBlbmRlbmNpZXMgd2l0aCBMYW1iZGEpICovXG4gIGFsbG93VnBjQWNjZXNzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE1ha2UgZGF0YWJhc2UgcHVibGljbHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBpbnRlcm5ldC5cbiAgICogV0FSTklORzogVGhpcyBpcyBhIHNlY3VyaXR5IHJpc2sgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGRldmVsb3BtZW50XG4gICAqIG9yIHdoZW4gYnVpbGRpbmcgUGF5bG9hZCBhcHBzIGxvY2FsbHkgdGhhdCBuZWVkIGRhdGFiYXNlIGFjY2Vzcy5cbiAgICogV2hlbiBlbmFibGVkLCB0aGUgZGF0YWJhc2UgaXMgcGxhY2VkIGluIHB1YmxpYyBzdWJuZXRzLlxuICAgKi9cbiAgcHVibGljbHlBY2Nlc3NpYmxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElQIGFkZHJlc3MgdG8gYWxsb3cgYWNjZXNzIGZyb20gd2hlbiBwdWJsaWNseUFjY2Vzc2libGUgaXMgdHJ1ZS5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgYWNjZXNzIGlzIHJlc3RyaWN0ZWQgdG8gVlBDIG9ubHkgZXZlbiB3aGVuIHB1YmxpYy5cbiAgICogRm9ybWF0OiBDSURSIG5vdGF0aW9uIChlLmcuLCBcIjIwMy4wLjExMy4wLzMyXCIgZm9yIHNpbmdsZSBJUClcbiAgICovXG4gIGFsbG93ZWRJcENpZHI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2xvYmFsQXVyb3JhRGF0YWJhc2VQcm9wcyBleHRlbmRzIEJhc2VEYXRhYmFzZVByb3BzIHtcbiAgdHlwZTogXCJHbG9iYWxBdXJvcmFcIjtcbiAgcHJpbWFyeVJlZ2lvbjogc3RyaW5nO1xuICBzZWNvbmRhcnlSZWdpb25zPzogc3RyaW5nW107XG4gIGdsb2JhbENsdXN0ZXJJZGVudGlmaWVyPzogc3RyaW5nO1xuICBlbmFibGVHbG9iYWxXcml0ZUZvcndhcmRpbmc/OiBib29sZWFuO1xuICBkYXRhYmFzZUVuZ2luZT86IERhdGFiYXNlRW5naW5lO1xuICAvKiogT3ZlcnJpZGVzIGRhdGFiYXNlRW5naW5lIGlmIHByb3ZpZGVkICovXG4gIGVuZ2luZT86IElDbHVzdGVyRW5naW5lO1xuICB3cml0ZXI/OiBBdXJvcmFXcml0ZXJDb25maWc7XG4gIHJlYWRlcnM/OiBBdXJvcmFSZWFkZXJzQ29uZmlnIHwgZmFsc2U7XG4gIHByb3h5PzogUHJveHlDb25maWcgfCBmYWxzZTtcbiAgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFsc0NvbmZpZztcbiAgLyoqIERFU1RSVUNUSVZFOiBDaGFuZ2luZyBzdG9yYWdlS2V5IGNhdXNlcyBjbHVzdGVyIHJlcGxhY2VtZW50ICovXG4gIGVuY3J5cHRpb24/OiBBdXJvcmFFbmNyeXB0aW9uQ29uZmlnO1xuICBiYWNrdXBSZXRlbnRpb24/OiBudW1iZXI7XG4gIG1vbml0b3JpbmdJbnRlcnZhbD86IER1cmF0aW9uO1xuICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdz86IHN0cmluZztcbiAgcG9ydD86IG51bWJlcjtcbiAgcGVyZm9ybWFuY2VJbnNpZ2h0cz86IFBlcmZvcm1hbmNlSW5zaWdodHNDb25maWcgfCBmYWxzZTtcbiAgLyoqIEFSTiBvciBpZGVudGlmaWVyIG9mIERCIGNsdXN0ZXIgc25hcHNob3QgdG8gcmVzdG9yZSBmcm9tICovXG4gIHNuYXBzaG90SWRlbnRpZmllcj86IHN0cmluZztcbiAgLyoqIFVzZXJuYW1lIGZyb20gdGhlIHNuYXBzaG90IChyZXF1aXJlZCB3aGVuIHJlc3RvcmluZyBmcm9tIHNuYXBzaG90IHRvIHJlc2V0IHBhc3N3b3JkKSAqL1xuICBzbmFwc2hvdFVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlRGF0YWJhc2VQcm9wcyBleHRlbmRzIEJhc2VEYXRhYmFzZVByb3BzIHtcbiAgdHlwZTogXCJJbnN0YW5jZVwiO1xuICBkYXRhYmFzZUVuZ2luZT86IERhdGFiYXNlRW5naW5lO1xuICAvKiogT3ZlcnJpZGVzIGRhdGFiYXNlRW5naW5lIGlmIHByb3ZpZGVkICovXG4gIGVuZ2luZT86IElJbnN0YW5jZUVuZ2luZTtcbiAgYWxsb2NhdGVkU3RvcmFnZT86IG51bWJlcjtcbiAgcG9ydD86IG51bWJlcjtcbiAgbXVsdGlBej86IGJvb2xlYW47XG4gIGJhY2t1cFJldGVudGlvbj86IG51bWJlcjtcbiAgcGVyZm9ybWFuY2VJbnNpZ2h0cz86IFBlcmZvcm1hbmNlSW5zaWdodHNDb25maWcgfCBmYWxzZTtcbiAgcHJveHk/OiBQcm94eUNvbmZpZyB8IGZhbHNlO1xuICByZWFkUmVwbGljYT86IFJlYWRSZXBsaWNhQ29uZmlnIHwgZmFsc2U7XG4gIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHNDb25maWc7XG4gIGVuY3J5cHRpb24/OiBFbmNyeXB0aW9uQ29uZmlnO1xuICBwdWJsaWNseUFjY2Vzc2libGU/OiBib29sZWFuO1xuICAvKiogQVJOIG9yIGlkZW50aWZpZXIgb2YgREIgaW5zdGFuY2Ugc25hcHNob3QgdG8gcmVzdG9yZSBmcm9tICovXG4gIHNuYXBzaG90SWRlbnRpZmllcj86IHN0cmluZztcbiAgLyoqIFVzZXJuYW1lIGZyb20gdGhlIHNuYXBzaG90IChyZXF1aXJlZCB3aGVuIHJlc3RvcmluZyBmcm9tIHNuYXBzaG90IHRvIHJlc2V0IHBhc3N3b3JkKSAqL1xuICBzbmFwc2hvdFVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIER5bmFtb0RCIHRhYmxlIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEeW5hbW9EQkRhdGFiYXNlUHJvcHMge1xuICB0eXBlOiBcIkR5bmFtb0RCXCI7XG4gIHBhcnRpdGlvbktleTogRHluYW1vREJLZXlTY2hlbWE7XG4gIHNvcnRLZXk/OiBEeW5hbW9EQktleVNjaGVtYTtcbiAgYmlsbGluZ01vZGU/OiBcIlBBWV9QRVJfUkVRVUVTVFwiIHwgXCJQUk9WSVNJT05FRFwiO1xuICByZWFkQ2FwYWNpdHk/OiBudW1iZXI7XG4gIHdyaXRlQ2FwYWNpdHk/OiBudW1iZXI7XG4gIGdsb2JhbFNlY29uZGFyeUluZGV4ZXM/OiBEeW5hbW9EQkdsb2JhbFNlY29uZGFyeUluZGV4W107XG4gIHRpbWVUb0xpdmVBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIHN0cmVhbT86IFwiTkVXX0lNQUdFXCIgfCBcIk9MRF9JTUFHRVwiIHwgXCJORVdfQU5EX09MRF9JTUFHRVNcIiB8IFwiS0VZU19PTkxZXCI7XG4gIHBvaW50SW5UaW1lUmVjb3Zlcnk/OiBib29sZWFuO1xuICBlbmNyeXB0aW9uPzogXCJBV1NfT1dORURcIiB8IFwiQVdTX01BTkFHRURcIiB8IFwiQ1VTVE9NRVJfTUFOQUdFRFwiO1xuICByZW1vdmFsUG9saWN5PzogXCJERVNUUk9ZXCIgfCBcIlJFVEFJTlwiIHwgXCJTTkFQU0hPVFwiO1xufVxuXG4vKipcbiAqIFJlbGF0aW9uYWwgZGF0YWJhc2UgcHJvcHMgdW5pb24gKEF1cm9yYSwgSW5zdGFuY2UsIEdsb2JhbEF1cm9yYSkuXG4gKi9cbmV4cG9ydCB0eXBlIElSZWxhdGlvbmFsRGF0YWJhc2VQcm9wcyA9XG4gIHwgQXVyb3JhRGF0YWJhc2VQcm9wc1xuICB8IEluc3RhbmNlRGF0YWJhc2VQcm9wc1xuICB8IEdsb2JhbEF1cm9yYURhdGFiYXNlUHJvcHM7XG5cbi8qKlxuICogQWxsIGRhdGFiYXNlIHByb3BzIHVuaW9uLlxuICovXG5leHBvcnQgdHlwZSBJRGF0YWJhc2VQcm9wcyA9XG4gIHwgQXVyb3JhRGF0YWJhc2VQcm9wc1xuICB8IEluc3RhbmNlRGF0YWJhc2VQcm9wc1xuICB8IEdsb2JhbEF1cm9yYURhdGFiYXNlUHJvcHNcbiAgfCBEeW5hbW9EQkRhdGFiYXNlUHJvcHM7XG5cbi8qKlxuICogVmFsaWRhdGVzIER5bmFtb0RCIHByb3BzIGFuZCBsb2dzIHdhcm5pbmdzIGZvciBtaXNjb25maWd1cmVkIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRHluYW1vREJQcm9wcyhwcm9wczogRHluYW1vREJEYXRhYmFzZVByb3BzKTogdm9pZCB7XG4gIC8vIFZhbGlkYXRlIHByb3Zpc2lvbmVkIGNhcGFjaXR5XG4gIGlmIChwcm9wcy5iaWxsaW5nTW9kZSA9PT0gXCJQUk9WSVNJT05FRFwiKSB7XG4gICAgaWYgKCFwcm9wcy5yZWFkQ2FwYWNpdHkgfHwgIXByb3BzLndyaXRlQ2FwYWNpdHkpIHtcbiAgICAgIEZqYWxsTG9nZ2VyLndhcm4oXG4gICAgICAgIFwiJ2JpbGxpbmdNb2RlJyBpcyBQUk9WSVNJT05FRCBidXQgY2FwYWNpdHkgbm90IHNwZWNpZmllZC4gXCIgK1xuICAgICAgICAgIFwiVXNpbmcgZGVmYXVsdCB2YWx1ZXMuIENvbnNpZGVyIHNwZWNpZnlpbmcgJ3JlYWRDYXBhY2l0eScgYW5kICd3cml0ZUNhcGFjaXR5Jy5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBXYXJuIGFib3V0IGNhcGFjaXR5IHdpdGggb24tZGVtYW5kIGJpbGxpbmdcbiAgaWYgKHByb3BzLmJpbGxpbmdNb2RlICE9PSBcIlBST1ZJU0lPTkVEXCIpIHtcbiAgICBpZiAocHJvcHMucmVhZENhcGFjaXR5IHx8IHByb3BzLndyaXRlQ2FwYWNpdHkpIHtcbiAgICAgIEZqYWxsTG9nZ2VyLndhcm4oXG4gICAgICAgIFwiJ3JlYWRDYXBhY2l0eScgb3IgJ3dyaXRlQ2FwYWNpdHknIHNwZWNpZmllZCBidXQgJ2JpbGxpbmdNb2RlJyBcIiArXG4gICAgICAgICAgXCJpcyBub3QgUFJPVklTSU9ORUQuIENhcGFjaXR5IHNldHRpbmdzIHdpbGwgYmUgaWdub3JlZC5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBHU0kgcGFydGl0aW9uIGtleXMgYXJlIGRpZmZlcmVudCBmcm9tIHRhYmxlIHBhcnRpdGlvbiBrZXlcbiAgaWYgKHByb3BzLmdsb2JhbFNlY29uZGFyeUluZGV4ZXMpIHtcbiAgICBjb25zdCB0YWJsZVBhcnRpdGlvbktleSA9IHByb3BzLnBhcnRpdGlvbktleS5uYW1lO1xuICAgIGZvciAoY29uc3QgZ3NpIG9mIHByb3BzLmdsb2JhbFNlY29uZGFyeUluZGV4ZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZ3NpLnBhcnRpdGlvbktleS5uYW1lID09PSB0YWJsZVBhcnRpdGlvbktleSAmJlxuICAgICAgICBnc2kuc29ydEtleT8ubmFtZSA9PT0gcHJvcHMuc29ydEtleT8ubmFtZVxuICAgICAgKSB7XG4gICAgICAgIEZqYWxsTG9nZ2VyLndhcm4oXG4gICAgICAgICAgYEdTSSAnJHtnc2kuaW5kZXhOYW1lfScgaGFzIHRoZSBzYW1lIGtleSBzY2hlbWEgYXMgdGhlIHRhYmxlLiBgICtcbiAgICAgICAgICAgIFwiVGhpcyBtYXkgbm90IHByb3ZpZGUgdGhlIHF1ZXJ5IGZsZXhpYmlsaXR5IHlvdSBuZWVkLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHJlbGF0aW9uYWwgZGF0YWJhc2UgcHJvcHMgYW5kIGxvZ3Mgd2FybmluZ3MgZm9yIGlnbm9yZWQgb3IgbWlzY29uZmlndXJlZCBvcHRpb25zLlxuICogVGhlc2UgY2hlY2tzIGhlbHAgY2F0Y2ggaXNzdWVzIHdoZW4gcHJvcHMgY29tZSBmcm9tIGR5bmFtaWMgc291cmNlcyB3aGVyZVxuICogVHlwZVNjcmlwdCdzIGNvbXBpbGUtdGltZSBjaGVja3MgbWF5IG5vdCBhcHBseS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZWxhdGlvbmFsRGF0YWJhc2VQcm9wcyhcbiAgcHJvcHM6IElSZWxhdGlvbmFsRGF0YWJhc2VQcm9wc1xuKTogdm9pZCB7XG4gIC8vIEdsb2JhbEF1cm9yYSByZXF1aXJlcyBwcmltYXJ5UmVnaW9uXG4gIGlmIChwcm9wcy50eXBlID09PSBcIkdsb2JhbEF1cm9yYVwiICYmICFwcm9wcy5wcmltYXJ5UmVnaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJHbG9iYWxBdXJvcmEgZGF0YWJhc2UgcmVxdWlyZXMgJ3ByaW1hcnlSZWdpb24nLiBcIiArXG4gICAgICAgIFwiU3BlY2lmeSB0aGUgQVdTIHJlZ2lvbiB3aGVyZSB0aGUgcHJpbWFyeSBjbHVzdGVyIHdpbGwgYmUgY3JlYXRlZC5cIlxuICAgICk7XG4gIH1cblxuICAvLyBJbnN0YW5jZS1vbmx5IG9wdGlvbnMgb24gQXVyb3JhL0dsb2JhbEF1cm9yYVxuICB3YXJuSWZQcm9wZXJ0aWVzSWdub3JlZChcbiAgICBwcm9wcyxcbiAgICBbXCJyZWFkUmVwbGljYVwiLCBcIm11bHRpQXpcIiwgXCJhbGxvY2F0ZWRTdG9yYWdlXCJdLFxuICAgIFwiSW5zdGFuY2VcIixcbiAgICBcIkluc3RhbmNlIGRhdGFiYXNlXCJcbiAgKTtcblxuICAvLyBBdXJvcmEtb25seSBvcHRpb25zIG9uIEluc3RhbmNlXG4gIHdhcm5JZlByb3BlcnRpZXNJZ25vcmVkKFxuICAgIHByb3BzLFxuICAgIFtcInJlYWRlcnNcIiwgXCJ3cml0ZXJcIiwgXCJiYWNrdXBSZXRlbnRpb25cIl0sXG4gICAgW1wiQXVyb3JhXCIsIFwiR2xvYmFsQXVyb3JhXCJdLFxuICAgIFwiQXVyb3JhIGRhdGFiYXNlXCJcbiAgKTtcblxuICAvLyBHbG9iYWxBdXJvcmEtb25seSBvcHRpb25zIG9uIG5vbi1nbG9iYWwgZGF0YWJhc2VzXG4gIHdhcm5JZlByb3BlcnRpZXNJZ25vcmVkKFxuICAgIHByb3BzLFxuICAgIFtcInByaW1hcnlSZWdpb25cIiwgXCJzZWNvbmRhcnlSZWdpb25zXCIsIFwiZW5hYmxlR2xvYmFsV3JpdGVGb3J3YXJkaW5nXCJdLFxuICAgIFwiR2xvYmFsQXVyb3JhXCIsXG4gICAgXCJHbG9iYWxBdXJvcmEgZGF0YWJhc2VcIlxuICApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBkYXRhYmFzZSBwcm9wcyBhbmQgbG9ncyB3YXJuaW5ncyBmb3IgaWdub3JlZCBvciBtaXNjb25maWd1cmVkIG9wdGlvbnMuXG4gKiBEaXNwYXRjaGVzIHRvIHR5cGUtc3BlY2lmaWMgdmFsaWRhdG9ycyBiYXNlZCBvbiB0aGUgZGF0YWJhc2UgdHlwZS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVEYXRhYmFzZVByb3BzKHByb3BzOiBJRGF0YWJhc2VQcm9wcyk6IHZvaWQge1xuICBpZiAocHJvcHMudHlwZSA9PT0gXCJEeW5hbW9EQlwiKSB7XG4gICAgdmFsaWRhdGVEeW5hbW9EQlByb3BzKHByb3BzKTtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZGF0ZVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzKHByb3BzKTtcbiAgfVxufVxuXG4vKipcbiAqIEZhY3RvcnkgZm9yIGNyZWF0aW5nIHR5cGUtc2FmZSBkYXRhYmFzZSByZXNvdXJjZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEF1cm9yYSBkYXRhYmFzZSAtIHJldHVybnMgUmVsYXRpb25hbERhdGFiYXNlXG4gKiBjb25zdCBhdXJvcmEgPSBhcHAuYWRkRGF0YWJhc2UoRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKFwiTWFpblwiLCB7XG4gKiAgIHR5cGU6IFwiQXVyb3JhXCIsXG4gKiAgIGRhdGFiYXNlTmFtZTogXCJteWFwcFwiXG4gKiB9KSk7XG4gKiBhdXJvcmEuZ2V0SG9zdEVuZHBvaW50KCk7IC8vIEF2YWlsYWJsZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBEeW5hbW9EQiB0YWJsZSAtIHJldHVybnMgRHluYW1vREJEYXRhYmFzZVxuICogY29uc3QgY2FjaGUgPSBhcHAuYWRkRGF0YWJhc2UoRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKFwiQ2FjaGVcIiwge1xuICogICB0eXBlOiBcIkR5bmFtb0RCXCIsXG4gKiAgIHBhcnRpdGlvbktleTogeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiU1wiIH1cbiAqIH0pKTtcbiAqIGNhY2hlLmdldFRhYmxlTmFtZSgpOyAvLyBBdmFpbGFibGVcbiAqIGNhY2hlLmdyYW50UmVhZFdyaXRlRGF0YShsYW1iZGEpOyAvLyBBdmFpbGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFiYXNlRmFjdG9yeSB7XG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBdXJvcmFEYXRhYmFzZVByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gUmVsYXRpb25hbERhdGFiYXNlO1xuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSW5zdGFuY2VEYXRhYmFzZVByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gUmVsYXRpb25hbERhdGFiYXNlO1xuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogR2xvYmFsQXVyb3JhRGF0YWJhc2VQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IFJlbGF0aW9uYWxEYXRhYmFzZTtcbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IER5bmFtb0RCRGF0YWJhc2VQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IER5bmFtb0RCRGF0YWJhc2U7XG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBJRGF0YWJhc2VQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IEFueURhdGFiYXNlIHtcbiAgICByZXR1cm4gKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KTogQW55RGF0YWJhc2UgPT4ge1xuICAgICAgdmFsaWRhdGVEYXRhYmFzZVByb3BzKHByb3BzKTtcblxuICAgICAgaWYgKHByb3BzLnR5cGUgPT09IFwiRHluYW1vREJcIikge1xuICAgICAgICByZXR1cm4gbmV3IER5bmFtb0RCRGF0YWJhc2Uoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFiYXNlUHJvcHM6IElSZWxhdGlvbmFsRGF0YWJhc2VQcm9wcyA9IHtcbiAgICAgICAgLi4ueyB2cGM6IGFwcC5nZXRWcGMoKSB9LFxuICAgICAgICAuLi5wcm9wc1xuICAgICAgfTtcbiAgICAgIHJldHVybiBuZXcgUmVsYXRpb25hbERhdGFiYXNlKHNjb3BlLCBpZCwgZGF0YWJhc2VQcm9wcyk7XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIER5bmFtb0RCIGRhdGFiYXNlIHdyYXBwZXIgaW1wbGVtZW50aW5nIElEeW5hbW9EQkRhdGFiYXNlIGludGVyZmFjZS5cbiAqIFByb3ZpZGVzIHR5cGUtc2FmZSBhY2Nlc3MgdG8gRHluYW1vREIgdGFibGUgb3BlcmF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgY2FjaGUgPSBhcHAuYWRkRGF0YWJhc2UoRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKFwiQ2FjaGVcIiwge1xuICogICB0eXBlOiBcIkR5bmFtb0RCXCIsXG4gKiAgIHBhcnRpdGlvbktleTogeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiU1wiIH1cbiAqIH0pKTtcbiAqIGNhY2hlLmdyYW50UmVhZFdyaXRlRGF0YShsYW1iZGEpO1xuICovXG5leHBvcnQgY2xhc3MgRHluYW1vREJEYXRhYmFzZVxuICBleHRlbmRzIENvbnN0cnVjdFxuICBpbXBsZW1lbnRzIElEeW5hbW9EQkRhdGFiYXNlLCBJRHluYW1vREJDb25uZWN0b3JcbntcbiAgcHVibGljIHJlYWRvbmx5IGRhdGFiYXNlVHlwZSA9IFwiRHluYW1vREJcIiBhcyBjb25zdDtcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3RvclR5cGUgPSBcImR5bmFtb2RiXCIgYXMgY29uc3Q7XG4gIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdGFibGU6IER5bmFtb0RCVGFibGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IER5bmFtb0RCRGF0YWJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5pZCA9IGlkO1xuXG4gICAgY29uc3QgdGFibGVQcm9wczogRHluYW1vREJUYWJsZVByb3BzID0ge1xuICAgICAgcGFydGl0aW9uS2V5OiBwcm9wcy5wYXJ0aXRpb25LZXksXG4gICAgICBzb3J0S2V5OiBwcm9wcy5zb3J0S2V5LFxuICAgICAgYmlsbGluZ01vZGU6IHByb3BzLmJpbGxpbmdNb2RlLFxuICAgICAgcmVhZENhcGFjaXR5OiBwcm9wcy5yZWFkQ2FwYWNpdHksXG4gICAgICB3cml0ZUNhcGFjaXR5OiBwcm9wcy53cml0ZUNhcGFjaXR5LFxuICAgICAgZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlczogcHJvcHMuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcyxcbiAgICAgIHRpbWVUb0xpdmVBdHRyaWJ1dGU6IHByb3BzLnRpbWVUb0xpdmVBdHRyaWJ1dGUsXG4gICAgICBzdHJlYW06IHByb3BzLnN0cmVhbSxcbiAgICAgIHBvaW50SW5UaW1lUmVjb3Zlcnk6IHByb3BzLnBvaW50SW5UaW1lUmVjb3ZlcnksXG4gICAgICBlbmNyeXB0aW9uOiBwcm9wcy5lbmNyeXB0aW9uLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeVxuICAgIH07XG4gICAgdGhpcy50YWJsZSA9IG5ldyBEeW5hbW9EQlRhYmxlKHRoaXMsIGlkLCB0YWJsZVByb3BzKTtcbiAgfVxuXG4gIGdldFRhYmxlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdldFRhYmxlTmFtZSgpO1xuICB9XG5cbiAgZ2V0VGFibGVBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5nZXRUYWJsZUFybigpO1xuICB9XG5cbiAgZ2V0VGFibGUoKTogSVRhYmxlIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5nZXRUYWJsZSgpO1xuICB9XG5cbiAgZ2V0U3RyZWFtQXJuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ2V0VGFibGVTdHJlYW1Bcm4oKTtcbiAgfVxuXG4gIGdyYW50UmVhZERhdGEoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5ncmFudFJlYWQoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFdyaXRlRGF0YShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdyYW50V3JpdGUoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFJlYWRXcml0ZURhdGEoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5ncmFudFJlYWRXcml0ZShncmFudGVlKTtcbiAgfVxuXG4gIGdyYW50RnVsbEFjY2VzcyhncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdyYW50RnVsbEFjY2VzcyhncmFudGVlKTtcbiAgfVxuXG4gIGdyYW50U3RyZWFtUmVhZChncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdyYW50U3RyZWFtUmVhZChncmFudGVlKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbGF0aW9uYWwgZGF0YWJhc2Ugd3JhcHBlciBpbXBsZW1lbnRpbmcgSVJlbGF0aW9uYWxEYXRhYmFzZSBpbnRlcmZhY2UuXG4gKiBTdXBwb3J0cyBBdXJvcmEsIFJEUyBJbnN0YW5jZSwgYW5kIEdsb2JhbEF1cm9yYSBkYXRhYmFzZSB0eXBlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGIgPSBhcHAuYWRkRGF0YWJhc2UoRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKFwiTWFpblwiLCB7XG4gKiAgIHR5cGU6IFwiQXVyb3JhXCIsXG4gKiAgIGRhdGFiYXNlTmFtZTogXCJteWFwcFwiXG4gKiB9KSk7XG4gKiBkYi5ncmFudENvbm5lY3QobGFtYmRhKTtcbiAqL1xuZXhwb3J0IGNsYXNzIFJlbGF0aW9uYWxEYXRhYmFzZVxuICBleHRlbmRzIENvbnN0cnVjdFxuICBpbXBsZW1lbnRzIElSZWxhdGlvbmFsRGF0YWJhc2UsIElTZWN1cml0eUdyb3VwQ29ubmVjdG9yXG57XG4gIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcbiAgcHVibGljIHJlYWRvbmx5IHZwYzogSVZwYztcbiAgcHVibGljIHJlYWRvbmx5IGRhdGFiYXNlVHlwZTogUmVsYXRpb25hbERhdGFiYXNlVHlwZTtcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3RvclR5cGUgPSBcInJlbGF0aW9uYWxcIiBhcyBjb25zdDtcblxuICBwdWJsaWMgY29ubmVjdGlvbnMhOiBDb25uZWN0aW9ucztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhYmFzZU5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBkYXRhYmFzZSE6IFJkc0F1cm9yYSB8IFJkc0luc3RhbmNlIHwgUmRzQXVyb3JhR2xvYmFsO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJUmVsYXRpb25hbERhdGFiYXNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gICAgdGhpcy5kYXRhYmFzZVR5cGUgPSBwcm9wcy50eXBlO1xuICAgIC8vIFZQQyBpcyB2YWxpZGF0ZWQgaW4gYWRkWHh4IG1ldGhvZHMsIHNvIGFzc2VydGlvbiBpcyBzYWZlIGhlcmVcbiAgICB0aGlzLnZwYyA9IHByb3BzLnZwYyE7XG5cbiAgICB0aGlzLl9kYXRhYmFzZU5hbWUgPSBwcm9wcy5kYXRhYmFzZU5hbWU7XG4gICAgdGhpcy5hZGREYXRhYmFzZShwcm9wcyk7XG4gIH1cblxuICBhZGREYXRhYmFzZShwcm9wczogSVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzKSB7XG4gICAgc3dpdGNoIChwcm9wcy50eXBlKSB7XG4gICAgICBjYXNlIFwiQXVyb3JhXCI6XG4gICAgICAgIHRoaXMuYWRkQXVyb3JhKHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiR2xvYmFsQXVyb3JhXCI6XG4gICAgICAgIHRoaXMuYWRkQXVyb3JhR2xvYmFsKHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiSW5zdGFuY2VcIjpcbiAgICAgICAgdGhpcy5hZGRSZHNJbnN0YW5jZShwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBwcm9wcztcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBVbnN1cHBvcnRlZCBkYXRhYmFzZSB0eXBlOiAke1N0cmluZygoX2V4aGF1c3RpdmUgYXMgSVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzKS50eXBlKX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRBdXJvcmEocHJvcHM6IEF1cm9yYURhdGFiYXNlUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLnZwYykgdGhyb3cgbmV3IEVycm9yKFwiVlBDIGlzIHJlcXVpcmVkIGZvciBBdXJvcmEgZGF0YWJhc2VcIik7XG5cbiAgICBjb25zdCByZXNvbHZlZERhdGFiYXNlRW5naW5lID0gcHJvcHMuZGF0YWJhc2VFbmdpbmUgPz8gXCJwb3N0Z3Jlc3FsXCI7XG4gICAgY29uc3QgcmVzb2x2ZWRFbmdpbmUgPVxuICAgICAgcHJvcHMuZW5naW5lID8/IGdldEF1cm9yYUNsdXN0ZXJFbmdpbmUocmVzb2x2ZWREYXRhYmFzZUVuZ2luZSk7XG4gICAgY29uc3QgZW5naW5lQ29uZmlnID0gZ2V0RW5naW5lQ29uZmlnKHJlc29sdmVkRGF0YWJhc2VFbmdpbmUpO1xuXG4gICAgaWYgKHByb3BzLnB1YmxpY2x5QWNjZXNzaWJsZSkge1xuICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgYEF1cm9yYSBkYXRhYmFzZSAnJHtwcm9wcy5kYXRhYmFzZU5hbWV9JyBpcyBjb25maWd1cmVkIHdpdGggcHVibGljIGFjY2Vzc2liaWxpdHkuIGAgK1xuICAgICAgICAgIFwiVGhpcyBpcyBhIHNlY3VyaXR5IHJpc2sgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGRldmVsb3BtZW50LlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgUmRzQXVyb3JhKHRoaXMsIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1SZHNgLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIGRhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgZW5naW5lOiByZXNvbHZlZEVuZ2luZSxcbiAgICAgIGVuZ2luZUNvbmZpZyxcbiAgICAgIHdyaXRlcjogcHJvcHMud3JpdGVyLFxuICAgICAgcmVhZGVyczogcHJvcHMucmVhZGVycyxcbiAgICAgIHByb3h5OiBwcm9wcy5wcm94eSxcbiAgICAgIGNyZWRlbnRpYWxzOiBwcm9wcy5jcmVkZW50aWFscyxcbiAgICAgIGVuY3J5cHRpb246IHByb3BzLmVuY3J5cHRpb24sXG4gICAgICBiYWNrdXBSZXRlbnRpb246IHByb3BzLmJhY2t1cFJldGVudGlvbixcbiAgICAgIG1vbml0b3JpbmdJbnRlcnZhbDogcHJvcHMubW9uaXRvcmluZ0ludGVydmFsLFxuICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6IHByb3BzLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93LFxuICAgICAgcG9ydDogcHJvcHMucG9ydCxcbiAgICAgIHBlcmZvcm1hbmNlSW5zaWdodHM6IHByb3BzLnBlcmZvcm1hbmNlSW5zaWdodHMsXG4gICAgICBkZWxldGlvblByb3RlY3Rpb246IHByb3BzLmRlbGV0aW9uUHJvdGVjdGlvbixcbiAgICAgIHNuYXBzaG90SWRlbnRpZmllcjogcHJvcHMuc25hcHNob3RJZGVudGlmaWVyLFxuICAgICAgc25hcHNob3RVc2VybmFtZTogcHJvcHMuc25hcHNob3RVc2VybmFtZSxcbiAgICAgIGFsbG93VnBjQWNjZXNzOiBwcm9wcy5hbGxvd1ZwY0FjY2VzcyxcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogcHJvcHMucHVibGljbHlBY2Nlc3NpYmxlLFxuICAgICAgYWxsb3dlZElwQ2lkcjogcHJvcHMuYWxsb3dlZElwQ2lkclxuICAgIH0pO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmRhdGFiYXNlLmNvbm5lY3Rpb25zO1xuICAgIHRoaXMuYWRkRGF0YWJhc2VPdXRwdXRzKHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQXVyb3JhR2xvYmFsKHByb3BzOiBHbG9iYWxBdXJvcmFEYXRhYmFzZVByb3BzKSB7XG4gICAgaWYgKCFwcm9wcy52cGMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWUEMgaXMgcmVxdWlyZWQgZm9yIEdsb2JhbCBBdXJvcmEgZGF0YWJhc2VcIik7XG4gICAgaWYgKCFwcm9wcy5wcmltYXJ5UmVnaW9uKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicHJpbWFyeVJlZ2lvbiBpcyByZXF1aXJlZCBmb3IgR2xvYmFsIEF1cm9yYSBkYXRhYmFzZVwiKTtcblxuICAgIGNvbnN0IHJlc29sdmVkRGF0YWJhc2VFbmdpbmUgPSBwcm9wcy5kYXRhYmFzZUVuZ2luZSA/PyBcInBvc3RncmVzcWxcIjtcbiAgICBjb25zdCByZXNvbHZlZEVuZ2luZSA9XG4gICAgICBwcm9wcy5lbmdpbmUgPz8gZ2V0QXVyb3JhQ2x1c3RlckVuZ2luZShyZXNvbHZlZERhdGFiYXNlRW5naW5lKTtcbiAgICBjb25zdCBlbmdpbmVDb25maWcgPSBnZXRFbmdpbmVDb25maWcocmVzb2x2ZWREYXRhYmFzZUVuZ2luZSk7XG5cbiAgICB0aGlzLmRhdGFiYXNlID0gbmV3IFJkc0F1cm9yYUdsb2JhbChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UmRzR2xvYmFsYCxcbiAgICAgIHtcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIGRhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgICBwcmltYXJ5UmVnaW9uOiBwcm9wcy5wcmltYXJ5UmVnaW9uLFxuICAgICAgICBzZWNvbmRhcnlSZWdpb25zOiBwcm9wcy5zZWNvbmRhcnlSZWdpb25zLFxuICAgICAgICBnbG9iYWxDbHVzdGVySWRlbnRpZmllcjogcHJvcHMuZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXIsXG4gICAgICAgIGVuZ2luZTogcmVzb2x2ZWRFbmdpbmUsXG4gICAgICAgIGVuZ2luZUNvbmZpZyxcbiAgICAgICAgZW5hYmxlR2xvYmFsV3JpdGVGb3J3YXJkaW5nOiBwcm9wcy5lbmFibGVHbG9iYWxXcml0ZUZvcndhcmRpbmcsXG4gICAgICAgIHdyaXRlcjogcHJvcHMud3JpdGVyLFxuICAgICAgICByZWFkZXJzOiBwcm9wcy5yZWFkZXJzLFxuICAgICAgICBwcm94eTogcHJvcHMucHJveHksXG4gICAgICAgIGNyZWRlbnRpYWxzOiBwcm9wcy5jcmVkZW50aWFscyxcbiAgICAgICAgZW5jcnlwdGlvbjogcHJvcHMuZW5jcnlwdGlvbixcbiAgICAgICAgYmFja3VwUmV0ZW50aW9uOiBwcm9wcy5iYWNrdXBSZXRlbnRpb24sXG4gICAgICAgIG1vbml0b3JpbmdJbnRlcnZhbDogcHJvcHMubW9uaXRvcmluZ0ludGVydmFsLFxuICAgICAgICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdzogcHJvcHMucHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3csXG4gICAgICAgIHBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICAgIHBlcmZvcm1hbmNlSW5zaWdodHM6IHByb3BzLnBlcmZvcm1hbmNlSW5zaWdodHMsXG4gICAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogcHJvcHMuZGVsZXRpb25Qcm90ZWN0aW9uLFxuICAgICAgICBzbmFwc2hvdElkZW50aWZpZXI6IHByb3BzLnNuYXBzaG90SWRlbnRpZmllcixcbiAgICAgICAgc25hcHNob3RVc2VybmFtZTogcHJvcHMuc25hcHNob3RVc2VybmFtZVxuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuZGF0YWJhc2UuY29ubmVjdGlvbnM7XG4gICAgdGhpcy5hZGREYXRhYmFzZU91dHB1dHMocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRSZHNJbnN0YW5jZShwcm9wczogSW5zdGFuY2VEYXRhYmFzZVByb3BzKSB7XG4gICAgaWYgKCFwcm9wcy52cGMpIHRocm93IG5ldyBFcnJvcihcIlZQQyBpcyByZXF1aXJlZCBmb3IgSW5zdGFuY2UgZGF0YWJhc2VcIik7XG5cbiAgICBjb25zdCByZXNvbHZlZERhdGFiYXNlRW5naW5lID0gcHJvcHMuZGF0YWJhc2VFbmdpbmUgPz8gXCJwb3N0Z3Jlc3FsXCI7XG4gICAgY29uc3QgcmVzb2x2ZWRFbmdpbmUgPVxuICAgICAgcHJvcHMuZW5naW5lID8/IGdldEluc3RhbmNlRW5naW5lKHJlc29sdmVkRGF0YWJhc2VFbmdpbmUpO1xuICAgIGNvbnN0IGVuZ2luZUNvbmZpZyA9IGdldEVuZ2luZUNvbmZpZyhyZXNvbHZlZERhdGFiYXNlRW5naW5lKTtcblxuICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgUmRzSW5zdGFuY2UodGhpcywgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVJkc2AsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgZGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICBpbnN0YW5jZVR5cGU6IHByb3BzLmluc3RhbmNlVHlwZSxcbiAgICAgIGFsbG9jYXRlZFN0b3JhZ2U6IHByb3BzLmFsbG9jYXRlZFN0b3JhZ2UsXG4gICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgZW5naW5lOiByZXNvbHZlZEVuZ2luZSxcbiAgICAgIGVuZ2luZUNvbmZpZyxcbiAgICAgIG11bHRpQXo6IHByb3BzLm11bHRpQXosXG4gICAgICBiYWNrdXBSZXRlbnRpb246XG4gICAgICAgIHByb3BzLmJhY2t1cFJldGVudGlvbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBEdXJhdGlvbi5kYXlzKHByb3BzLmJhY2t1cFJldGVudGlvbilcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHBlcmZvcm1hbmNlSW5zaWdodHM6IHByb3BzLnBlcmZvcm1hbmNlSW5zaWdodHMsXG4gICAgICBwcm94eTogcHJvcHMucHJveHksXG4gICAgICByZWFkUmVwbGljYTogcHJvcHMucmVhZFJlcGxpY2EsXG4gICAgICBjcmVkZW50aWFsczogcHJvcHMuY3JlZGVudGlhbHMsXG4gICAgICBlbmNyeXB0aW9uOiBwcm9wcy5lbmNyeXB0aW9uLFxuICAgICAgcHVibGljbHlBY2Nlc3NpYmxlOiBwcm9wcy5wdWJsaWNseUFjY2Vzc2libGUsXG4gICAgICBkZWxldGlvblByb3RlY3Rpb246IHByb3BzLmRlbGV0aW9uUHJvdGVjdGlvbixcbiAgICAgIHNuYXBzaG90SWRlbnRpZmllcjogcHJvcHMuc25hcHNob3RJZGVudGlmaWVyLFxuICAgICAgc25hcHNob3RVc2VybmFtZTogcHJvcHMuc25hcHNob3RVc2VybmFtZVxuICAgIH0pO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmRhdGFiYXNlLmNvbm5lY3Rpb25zO1xuICAgIHRoaXMuYWRkRGF0YWJhc2VPdXRwdXRzKHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRGF0YWJhc2VPdXRwdXRzKHByb3BzOiBJUmVsYXRpb25hbERhdGFiYXNlUHJvcHMpIHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMuZGF0YWJhc2UuZ2V0SG9zdEVuZHBvaW50KCk7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gU3RhY2sub2YodGhpcykuc3RhY2tOYW1lO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9RW5kcG9pbnRgLCB7XG4gICAgICBrZXk6IGAke3N0YWNrTmFtZX0ke3Byb3BzLmRhdGFiYXNlTmFtZX1FbmRwb2ludGAsXG4gICAgICBleHBvcnROYW1lOiBgJHtzdGFja05hbWV9JHtwcm9wcy5kYXRhYmFzZU5hbWV9RW5kcG9pbnRgLFxuICAgICAgdmFsdWU6IGVuZHBvaW50LFxuICAgICAgZGVzY3JpcHRpb246IGBEYXRhYmFzZSBFbmRwb2ludCBmb3IgJHtwcm9wcy5kYXRhYmFzZU5hbWV9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UG9ydGAsIHtcbiAgICAgIGtleTogYCR7c3RhY2tOYW1lfSR7cHJvcHMuZGF0YWJhc2VOYW1lfVBvcnRgLFxuICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfSR7cHJvcHMuZGF0YWJhc2VOYW1lfVBvcnRgLFxuICAgICAgdmFsdWU6IHRoaXMuZGF0YWJhc2UuZ2V0SG9zdFBvcnQoKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgRGF0YWJhc2UgUG9ydCBmb3IgJHtwcm9wcy5kYXRhYmFzZU5hbWV9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9RGF0YWJhc2VOYW1lYCwge1xuICAgICAga2V5OiBgJHtzdGFja05hbWV9JHtwcm9wcy5kYXRhYmFzZU5hbWV9RGF0YWJhc2VOYW1lYCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0ke3Byb3BzLmRhdGFiYXNlTmFtZX1EYXRhYmFzZU5hbWVgLFxuICAgICAgdmFsdWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgRGF0YWJhc2UgTmFtZSBmb3IgJHtwcm9wcy5kYXRhYmFzZU5hbWV9YFxuICAgIH0pO1xuXG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB0aGlzLmRhdGFiYXNlLmdldENyZWRlbnRpYWxzKCk7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9U2VjcmV0QXJuYCwge1xuICAgICAga2V5OiBgJHtzdGFja05hbWV9JHtwcm9wcy5kYXRhYmFzZU5hbWV9U2VjcmV0QXJuYCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0ke3Byb3BzLmRhdGFiYXNlTmFtZX1TZWNyZXRBcm5gLFxuICAgICAgdmFsdWU6IGNyZWRlbnRpYWxzLnNlY3JldC5zZWNyZXRBcm4sXG4gICAgICBkZXNjcmlwdGlvbjogYERhdGFiYXNlIENyZWRlbnRpYWxzIFNlY3JldCBBUk4gZm9yICR7cHJvcHMuZGF0YWJhc2VOYW1lfWBcbiAgICB9KTtcbiAgfVxuXG4gIGdldENyZWRlbnRpYWxzKCk6IFNlY3JldCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuZ2V0Q3JlZGVudGlhbHMoKTtcbiAgfVxuXG4gIGdldEhvc3RFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmdldEhvc3RFbmRwb2ludCgpO1xuICB9XG5cbiAgZ2V0SG9zdFBvcnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5nZXRIb3N0UG9ydCgpO1xuICB9XG5cbiAgZ2V0RGF0YWJhc2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBjb25uZWN0IHBlcm1pc3Npb25zIHRvIGEgZ3JhbnRlZSBieSBhZGRpbmcgaXQgdG8gdGhlIGRhdGFiYXNlIHNlY3VyaXR5IGdyb3VwLlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgY29ubmVjdGFibGUgcHJpbmNpcGFsIHRvIGdyYW50IGNvbm5lY3QgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIGdyYW50Q29ubmVjdChncmFudGVlOiBJQ29ubmVjdGFibGUpOiB2b2lkIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLmFsbG93RGVmYXVsdFBvcnRGcm9tKGdyYW50ZWUpO1xuICB9XG59XG5cbi8vIFJlLWV4cG9ydCBEeW5hbW9EQiB0eXBlcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHtcbiAgRHluYW1vREJLZXlTY2hlbWEsXG4gIER5bmFtb0RCR2xvYmFsU2Vjb25kYXJ5SW5kZXgsXG4gIER5bmFtb0RCVGFibGVQcm9wc1xufSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9keW5hbW9kYlwiO1xuXG4vLyBSZS1leHBvcnQgaW50ZXJmYWNlIHR5cGVzXG5leHBvcnQge1xuICB0eXBlIElSZWxhdGlvbmFsRGF0YWJhc2UsXG4gIHR5cGUgSUR5bmFtb0RCRGF0YWJhc2UsXG4gIHR5cGUgQW55RGF0YWJhc2UsXG4gIHR5cGUgRGF0YWJhc2VUeXBlLFxuICB0eXBlIFJlbGF0aW9uYWxEYXRhYmFzZVR5cGUsXG4gIGlzUmVsYXRpb25hbERhdGFiYXNlLFxuICBpc0R5bmFtb0RCRGF0YWJhc2UsXG4gIGlzQXVyb3JhRGF0YWJhc2UsXG4gIGlzSW5zdGFuY2VEYXRhYmFzZSxcbiAgaXNHbG9iYWxBdXJvcmFEYXRhYmFzZVxufSBmcm9tIFwiLi9pbnRlcmZhY2VzL2RhdGFiYXNlLmpzXCI7XG4iXX0=
|
|
461
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2RhdGFiYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXFIQSx3REFFQztBQUVELDhDQUVDO0FBRUQsMENBT0M7QUFrREQsMENBU0M7QUFLRCx3Q0FTQztBQTdNRCwyQ0FBdUM7QUFDdkMsNkNBQStDO0FBRy9DLDJEQUFzRTtBQUN0RSxrRkFBK0U7QUFDL0Usb0VBSytDO0FBQy9DLHlFQUd5QztBQUN6Qyx5RUFBK0Q7QUFxQi9ELGlEQVM2QjtBQUM3Qiw2Q0FBdUM7QUFXMUIsUUFBQSxzQkFBc0IsR0FTL0I7SUFDRixVQUFVLEVBQUU7UUFDVixNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUU7UUFDL0MsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFO1FBQ2pELGVBQWUsRUFBRSxVQUFVO1FBQzNCLGFBQWEsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUU7UUFDdkMsZUFBZSxFQUFFLDhDQUE4QztLQUNoRTtJQUNELEtBQUssRUFBRTtRQUNMLHdFQUF3RTtRQUN4RSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRTtRQUN0RSxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7UUFDbkQsZUFBZSxFQUFFLE9BQU87UUFDeEIsYUFBYSxFQUFFLEVBQUUsd0JBQXdCLEVBQUUsSUFBSSxFQUFFO1FBQ2pELGVBQWUsRUFBRSx5Q0FBeUM7S0FDM0Q7Q0FDRixDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBaUQ7SUFDNUUsVUFBVSxFQUFFLEdBQUcsRUFBRTtRQUNmLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcs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Y0FBYyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxPQUFxQjtRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELENBQUM7Q0FDRjtBQWhPRCxnREFnT0M7QUFTRCw0QkFBNEI7QUFDNUIsd0RBV2tDO0FBTGhDLG1IQUFBLG9CQUFvQixPQUFBO0FBQ3BCLGlIQUFBLGtCQUFrQixPQUFBO0FBQ2xCLCtHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLGlIQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHFIQUFBLHNCQUFzQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENmbk91dHB1dCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuaW1wb3J0IHR5cGUgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcbmltcG9ydCB7IFJkc0F1cm9yYSwgUmRzSW5zdGFuY2UgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9kYXRhYmFzZVwiO1xuaW1wb3J0IHsgUmRzQXVyb3JhR2xvYmFsIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvZGF0YWJhc2UvcmRzQXVyb3JhR2xvYmFsXCI7XG5pbXBvcnQge1xuICBEeW5hbW9EQlRhYmxlLFxuICB0eXBlIER5bmFtb0RCS2V5U2NoZW1hLFxuICB0eXBlIER5bmFtb0RCR2xvYmFsU2Vjb25kYXJ5SW5kZXgsXG4gIHR5cGUgRHluYW1vREJUYWJsZVByb3BzXG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL2R5bmFtb2RiXCI7XG5pbXBvcnQge1xuICBGamFsbExvZ2dlcixcbiAgd2FybklmUHJvcGVydGllc0lnbm9yZWRcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL3ZhbGlkYXRpb25Mb2dnZXIuanNcIjtcbmltcG9ydCB7IHRvUGFzY2FsQ2FzZSB9IGZyb20gXCIuLi8uLi91dGlscy9jYXBpdGFsaXNlU3RyaW5nLmpzXCI7XG5cbmltcG9ydCB7XG4gIHR5cGUgQ29ubmVjdGlvbnMsXG4gIHR5cGUgSUNvbm5lY3RhYmxlLFxuICB0eXBlIElWcGMsXG4gIHR5cGUgU3VibmV0U2VsZWN0aW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcbmltcG9ydCB7IHR5cGUgU2VjcmV0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuaW1wb3J0IHsgdHlwZSBJR3JhbnRhYmxlLCB0eXBlIEdyYW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7XG4gIHR5cGUgSVJlbGF0aW9uYWxEYXRhYmFzZSxcbiAgdHlwZSBJRHluYW1vREJEYXRhYmFzZSxcbiAgdHlwZSBBbnlEYXRhYmFzZSxcbiAgdHlwZSBSZWxhdGlvbmFsRGF0YWJhc2VUeXBlXG59IGZyb20gXCIuL2ludGVyZmFjZXMvZGF0YWJhc2UuanNcIjtcbmltcG9ydCB7XG4gIHR5cGUgSUR5bmFtb0RCQ29ubmVjdG9yLFxuICB0eXBlIElTZWN1cml0eUdyb3VwQ29ubmVjdG9yXG59IGZyb20gXCIuL2ludGVyZmFjZXMvY29ubmVjdG9yLmpzXCI7XG5pbXBvcnQge1xuICB0eXBlIElJbnN0YW5jZUVuZ2luZSxcbiAgdHlwZSBJQ2x1c3RlckVuZ2luZSxcbiAgRGF0YWJhc2VDbHVzdGVyRW5naW5lLFxuICBEYXRhYmFzZUluc3RhbmNlRW5naW5lLFxuICBBdXJvcmFQb3N0Z3Jlc0VuZ2luZVZlcnNpb24sXG4gIEF1cm9yYU15c3FsRW5naW5lVmVyc2lvbixcbiAgUG9zdGdyZXNFbmdpbmVWZXJzaW9uLFxuICBNeXNxbEVuZ2luZVZlcnNpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyB0eXBlIElLZXkgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWttc1wiO1xuXG5leHBvcnQgdHlwZSBEYXRhYmFzZUVuZ2luZSA9IFwicG9zdGdyZXNxbFwiIHwgXCJteXNxbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVuZ2luZUNvbmZpZyB7XG4gIGRlZmF1bHRVc2VybmFtZTogc3RyaW5nO1xuICBzc2xQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICByb3RhdGlvbkFwcE5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IERBVEFCQVNFX0VOR0lORV9DT05GSUc6IFJlY29yZDxcbiAgRGF0YWJhc2VFbmdpbmUsXG4gIHtcbiAgICBhdXJvcmE6IHsgdmVyc2lvbjogc3RyaW5nOyBtYWpvclZlcnNpb246IHN0cmluZyB9O1xuICAgIGluc3RhbmNlOiB7IHZlcnNpb246IHN0cmluZzsgbWFqb3JWZXJzaW9uOiBzdHJpbmcgfTtcbiAgICBkZWZhdWx0VXNlcm5hbWU6IHN0cmluZztcbiAgICBzc2xQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHJvdGF0aW9uQXBwTmFtZTogc3RyaW5nO1xuICB9XG4+ID0ge1xuICBwb3N0Z3Jlc3FsOiB7XG4gICAgYXVyb3JhOiB7IHZlcnNpb246IFwiMTYuNlwiLCBtYWpvclZlcnNpb246IFwiMTZcIiB9LFxuICAgIGluc3RhbmNlOiB7IHZlcnNpb246IFwiMTcuNVwiLCBtYWpvclZlcnNpb246IFwiMTdcIiB9LFxuICAgIGRlZmF1bHRVc2VybmFtZTogXCJwb3N0Z3Jlc1wiLFxuICAgIHNzbFBhcmFtZXRlcnM6IHsgXCJyZHMuZm9yY2Vfc3NsXCI6IFwiMVwiIH0sXG4gICAgcm90YXRpb25BcHBOYW1lOiBcIlNlY3JldHNNYW5hZ2VyUkRTUG9zdGdyZVNRTFJvdGF0aW9uTXVsdGlVc2VyXCJcbiAgfSxcbiAgbXlzcWw6IHtcbiAgICAvLyBtYWpvclZlcnNpb24gbXVzdCBiZSBBdXJvcmEgdmVyc2lvbiAoMy4wOC4wKSwgTk9UIE15U1FMIHZlcnNpb24gKDguMClcbiAgICBhdXJvcmE6IHsgdmVyc2lvbjogXCI4LjAubXlzcWxfYXVyb3JhLjMuMDguMFwiLCBtYWpvclZlcnNpb246IFwiMy4wOC4wXCIgfSxcbiAgICBpbnN0YW5jZTogeyB2ZXJzaW9uOiBcIjguNC40XCIsIG1ham9yVmVyc2lvbjogXCI4LjRcIiB9LFxuICAgIGRlZmF1bHRVc2VybmFtZTogXCJhZG1pblwiLFxuICAgIHNzbFBhcmFtZXRlcnM6IHsgcmVxdWlyZV9zZWN1cmVfdHJhbnNwb3J0OiBcIk9OXCIgfSxcbiAgICByb3RhdGlvbkFwcE5hbWU6IFwiU2VjcmV0c01hbmFnZXJSRFNNeVNRTFJvdGF0aW9uTXVsdGlVc2VyXCJcbiAgfVxufTtcblxuY29uc3QgQVVST1JBX0VOR0lORV9GQUNUT1JJRVM6IFJlY29yZDxEYXRhYmFzZUVuZ2luZSwgKCkgPT4gSUNsdXN0ZXJFbmdpbmU+ID0ge1xuICBwb3N0Z3Jlc3FsOiAoKSA9PiB7XG4gICAgY29uc3QgeyB2ZXJzaW9uLCBtYWpvclZlcnNpb24gfSA9IERBVEFCQVNFX0VOR0lORV9DT05GSUcucG9zdGdyZXNxbC5hdXJvcmE7XG4gICAgcmV0dXJuIERhdGFiYXNlQ2x1c3RlckVuZ2luZS5hdXJvcmFQb3N0Z3Jlcyh7XG4gICAgICB2ZXJzaW9uOiBBdXJvcmFQb3N0Z3Jlc0VuZ2luZVZlcnNpb24ub2YodmVyc2lvbiwgbWFqb3JWZXJzaW9uKVxuICAgIH0pO1xuICB9LFxuICBteXNxbDogKCkgPT4ge1xuICAgIGNvbnN0IHsgdmVyc2lvbiwgbWFqb3JWZXJzaW9uIH0gPSBEQVRBQkFTRV9FTkdJTkVfQ09ORklHLm15c3FsLmF1cm9yYTtcbiAgICByZXR1cm4gRGF0YWJhc2VDbHVzdGVyRW5naW5lLmF1cm9yYU15c3FsKHtcbiAgICAgIHZlcnNpb246IEF1cm9yYU15c3FsRW5naW5lVmVyc2lvbi5vZih2ZXJzaW9uLCBtYWpvclZlcnNpb24pXG4gICAgfSk7XG4gIH1cbn07XG5cbmNvbnN0IElOU1RBTkNFX0VOR0lORV9GQUNUT1JJRVM6IFJlY29yZDxEYXRhYmFzZUVuZ2luZSwgKCkgPT4gSUluc3RhbmNlRW5naW5lPiA9XG4gIHtcbiAgICBwb3N0Z3Jlc3FsOiAoKSA9PiB7XG4gICAgICBjb25zdCB7IHZlcnNpb24sIG1ham9yVmVyc2lvbiB9ID1cbiAgICAgICAgREFUQUJBU0VfRU5HSU5FX0NPTkZJRy5wb3N0Z3Jlc3FsLmluc3RhbmNlO1xuICAgICAgcmV0dXJuIERhdGFiYXNlSW5zdGFuY2VFbmdpbmUucG9zdGdyZXMoe1xuICAgICAgICB2ZXJzaW9uOiBQb3N0Z3Jlc0VuZ2luZVZlcnNpb24ub2YodmVyc2lvbiwgbWFqb3JWZXJzaW9uKVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBteXNxbDogKCkgPT4ge1xuICAgICAgY29uc3QgeyB2ZXJzaW9uLCBtYWpvclZlcnNpb24gfSA9IERBVEFCQVNFX0VOR0lORV9DT05GSUcubXlzcWwuaW5zdGFuY2U7XG4gICAgICByZXR1cm4gRGF0YWJhc2VJbnN0YW5jZUVuZ2luZS5teXNxbCh7XG4gICAgICAgIHZlcnNpb246IE15c3FsRW5naW5lVmVyc2lvbi5vZih2ZXJzaW9uLCBtYWpvclZlcnNpb24pXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdXJvcmFDbHVzdGVyRW5naW5lKGVuZ2luZTogRGF0YWJhc2VFbmdpbmUpOiBJQ2x1c3RlckVuZ2luZSB7XG4gIHJldHVybiBBVVJPUkFfRU5HSU5FX0ZBQ1RPUklFU1tlbmdpbmVdKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnN0YW5jZUVuZ2luZShlbmdpbmU6IERhdGFiYXNlRW5naW5lKTogSUluc3RhbmNlRW5naW5lIHtcbiAgcmV0dXJuIElOU1RBTkNFX0VOR0lORV9GQUNUT1JJRVNbZW5naW5lXSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5naW5lQ29uZmlnKGVuZ2luZTogRGF0YWJhc2VFbmdpbmUpOiBFbmdpbmVDb25maWcge1xuICBjb25zdCBjb25maWcgPSBEQVRBQkFTRV9FTkdJTkVfQ09ORklHW2VuZ2luZV07XG4gIHJldHVybiB7XG4gICAgZGVmYXVsdFVzZXJuYW1lOiBjb25maWcuZGVmYXVsdFVzZXJuYW1lLFxuICAgIHNzbFBhcmFtZXRlcnM6IGNvbmZpZy5zc2xQYXJhbWV0ZXJzLFxuICAgIHJvdGF0aW9uQXBwTmFtZTogY29uZmlnLnJvdGF0aW9uQXBwTmFtZVxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3h5Q29uZmlnIHtcbiAgbWF4Q29ubmVjdGlvbnM/OiBudW1iZXI7XG4gIG1heElkbGVDb25uZWN0aW9ucz86IG51bWJlcjtcbiAgY29ubmVjdGlvbkJvcnJvd1RpbWVvdXQ/OiBudW1iZXI7XG4gIHJlcXVpcmVUTFM/OiBib29sZWFuO1xuICB2cGNTdWJuZXRzPzogU3VibmV0U2VsZWN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRSZXBsaWNhQ29uZmlnIHtcbiAgaW5zdGFuY2VUeXBlPzogc3RyaW5nO1xuICBhdmFpbGFiaWxpdHlab25lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxzQ29uZmlnIHtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHNlY3JldFJvdGF0aW9uPzogU2VjcmV0Um90YXRpb25Db25maWcgfCBmYWxzZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRSb3RhdGlvbkNvbmZpZyB7XG4gIGF1dG9tYXRpY2FsbHlBZnRlcj86IER1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVuY3J5cHRpb25Db25maWcge1xuICBzdG9yYWdlS2V5PzogRW5jcnlwdGlvbktleVNwZWM7XG59XG5cbmV4cG9ydCB0eXBlIFBlcmZvcm1hbmNlSW5zaWdodHNSZXRlbnRpb25QZXJpb2QgPSA3IHwgMzEgfCA5MyB8IDE4NiB8IDM3MjtcblxuZXhwb3J0IGludGVyZmFjZSBQZXJmb3JtYW5jZUluc2lnaHRzQ29uZmlnIHtcbiAgZW5jcnlwdGlvbktleT86IEVuY3J5cHRpb25LZXlTcGVjO1xuICAvKiogUmV0ZW50aW9uIHBlcmlvZCBpbiBkYXlzLiBEZWZhdWx0OiAzMSAoMSBtb250aCkuICovXG4gIHJldGVudGlvblBlcmlvZD86IFBlcmZvcm1hbmNlSW5zaWdodHNSZXRlbnRpb25QZXJpb2Q7XG59XG5cbi8vIE1hcmtlciBmb3IgQVdTIG1hbmFnZWQgZW5jcnlwdGlvbiBrZXkgKGF3cy9yZHMsIGF3cy9zMywgZXRjLilcbmV4cG9ydCBpbnRlcmZhY2UgQXdzTWFuYWdlZEtleSB7XG4gIHJlYWRvbmx5IGF3c01hbmFnZWQ6IHRydWU7XG59XG5cbi8vIE1hcmtlciBmb3IgZXhwbGljaXRseSByZXF1ZXN0aW5nIGEgQ3VzdG9tZXIgTWFuYWdlZCBLZXkgKENNSykuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbWVyTWFuYWdlZEtleU1hcmtlciB7XG4gIHJlYWRvbmx5IHVzZUNNSzogdHJ1ZTtcbn1cblxuLy8gRW5jcnlwdGlvbiBrZXkgc3BlY2lmaWNhdGlvbiBmb3IgUkRTIHJlc291cmNlcy5cbmV4cG9ydCB0eXBlIEVuY3J5cHRpb25LZXlTcGVjID0gSUtleSB8IEF3c01hbmFnZWRLZXkgfCBDdXN0b21lck1hbmFnZWRLZXlNYXJrZXI7XG5cbi8vIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgdGhlIGVuY3J5cHRpb24ga2V5IHNwZWMgaXMgQVdTIG1hbmFnZWQuXG5leHBvcnQgZnVuY3Rpb24gaXNBd3NNYW5hZ2VkS2V5KFxuICBzcGVjOiBFbmNyeXB0aW9uS2V5U3BlYyB8IHVuZGVmaW5lZFxuKTogc3BlYyBpcyBBd3NNYW5hZ2VkS2V5IHtcbiAgcmV0dXJuIChcbiAgICBzcGVjICE9PSB1bmRlZmluZWQgJiZcbiAgICB0eXBlb2Ygc3BlYyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIFwiYXdzTWFuYWdlZFwiIGluIHNwZWMgJiZcbiAgICAoc3BlYyBhcyBBd3NNYW5hZ2VkS2V5KS5hd3NNYW5hZ2VkID09PSB0cnVlXG4gICk7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBDTUsgaXMgZXhwbGljaXRseSByZXF1ZXN0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NNS1JlcXVlc3RlZChcbiAgc3BlYzogRW5jcnlwdGlvbktleVNwZWMgfCB1bmRlZmluZWRcbik6IHNwZWMgaXMgQ3VzdG9tZXJNYW5hZ2VkS2V5TWFya2VyIHtcbiAgcmV0dXJuIChcbiAgICBzcGVjICE9PSB1bmRlZmluZWQgJiZcbiAgICB0eXBlb2Ygc3BlYyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIFwidXNlQ01LXCIgaW4gc3BlYyAmJlxuICAgIChzcGVjIGFzIEN1c3RvbWVyTWFuYWdlZEtleU1hcmtlcikudXNlQ01LID09PSB0cnVlXG4gICk7XG59XG5cbi8qKlxuICogQ29udmVuaWVuY2UgY29uc3RhbnQgZm9yIHNwZWNpZnlpbmcgQVdTIG1hbmFnZWQgZW5jcnlwdGlvbiAodGhlIGRlZmF1bHQpLlxuICogQGV4YW1wbGVcbiAqIGVuY3J5cHRpb246IHsgc3RvcmFnZUtleTogQVdTX01BTkFHRUQgfVxuICovXG5leHBvcnQgY29uc3QgQVdTX01BTkFHRUQ6IEF3c01hbmFnZWRLZXkgPSB7IGF3c01hbmFnZWQ6IHRydWUgfSBhcyBjb25zdDtcblxuLyoqXG4gKiBDb252ZW5pZW5jZSBjb25zdGFudCBmb3IgZXhwbGljaXRseSByZXF1ZXN0aW5nIENNSy5cbiAqIEBleGFtcGxlXG4gKiBlbmNyeXB0aW9uOiB7IHN0b3JhZ2VLZXk6IFVTRV9DTUsgfVxuICovXG5leHBvcnQgY29uc3QgVVNFX0NNSzogQ3VzdG9tZXJNYW5hZ2VkS2V5TWFya2VyID0geyB1c2VDTUs6IHRydWUgfSBhcyBjb25zdDtcblxuLyoqXG4gKiAqKkRFU1RSVUNUSVZFKio6IENoYW5naW5nIGBzdG9yYWdlS2V5YCBhZnRlciBjbHVzdGVyIGNyZWF0aW9uIGNhdXNlcyBjbHVzdGVyIFJFUExBQ0VNRU5ULlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1cm9yYUVuY3J5cHRpb25Db25maWcge1xuICAvKiogREVTVFJVQ1RJVkU6IENoYW5naW5nIGFmdGVyIGNyZWF0aW9uIGNhdXNlcyBjbHVzdGVyIHJlcGxhY2VtZW50ICovXG4gIHN0b3JhZ2VLZXk/OiBFbmNyeXB0aW9uS2V5U3BlYztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXJvcmFSZWFkZXJDb25maWcge1xuICBzY2FsZVdpdGhXcml0ZXI/OiBib29sZWFuO1xuICBlbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzPzogYm9vbGVhbjtcbiAgaWRlbnRpZmllclN1ZmZpeD86IHN0cmluZztcbiAgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXJvcmFXcml0ZXJDb25maWcge1xuICBlbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzPzogYm9vbGVhbjtcbiAgaWRlbnRpZmllclN1ZmZpeD86IHN0cmluZztcbiAgYXZhaWxhYmlsaXR5Wm9uZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXJvcmFSZWFkZXJzQ29uZmlnIHtcbiAgLyoqIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGluc3RhbmNlcyAqL1xuICBjb3VudD86IG51bWJlcjtcbiAgLyoqIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGNvdW50ICovXG4gIGluc3RhbmNlcz86IEF1cm9yYVJlYWRlckNvbmZpZ1tdO1xuICBkZWZhdWx0RW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQmFzZSBwcm9wcyBmb3IgZGF0YWJhc2UgY29uZmlndXJhdGlvbi5cbiAqL1xudHlwZSBCYXNlRGF0YWJhc2VQcm9wcyA9IHtcbiAgdnBjPzogSVZwYztcbiAgZGF0YWJhc2VOYW1lOiBzdHJpbmc7XG4gIGluc3RhbmNlVHlwZT86IHN0cmluZztcbiAgZGVsZXRpb25Qcm90ZWN0aW9uPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVyb3JhRGF0YWJhc2VQcm9wcyBleHRlbmRzIEJhc2VEYXRhYmFzZVByb3BzIHtcbiAgdHlwZTogXCJBdXJvcmFcIjtcbiAgZGF0YWJhc2VFbmdpbmU/OiBEYXRhYmFzZUVuZ2luZTtcbiAgLyoqIE92ZXJyaWRlcyBkYXRhYmFzZUVuZ2luZSBpZiBwcm92aWRlZCAqL1xuICBlbmdpbmU/OiBJQ2x1c3RlckVuZ2luZTtcbiAgd3JpdGVyPzogQXVyb3JhV3JpdGVyQ29uZmlnO1xuICByZWFkZXJzPzogQXVyb3JhUmVhZGVyc0NvbmZpZyB8IGZhbHNlO1xuICBwcm94eT86IFByb3h5Q29uZmlnIHwgZmFsc2U7XG4gIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHNDb25maWc7XG4gIC8qKiBERVNUUlVDVElWRTogQ2hhbmdpbmcgc3RvcmFnZUtleSBjYXVzZXMgY2x1c3RlciByZXBsYWNlbWVudCAqL1xuICBlbmNyeXB0aW9uPzogQXVyb3JhRW5jcnlwdGlvbkNvbmZpZztcbiAgYmFja3VwUmV0ZW50aW9uPzogbnVtYmVyO1xuICBtb25pdG9yaW5nSW50ZXJ2YWw/OiBEdXJhdGlvbjtcbiAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c/OiBzdHJpbmc7XG4gIHBvcnQ/OiBudW1iZXI7XG4gIHBlcmZvcm1hbmNlSW5zaWdodHM/OiBQZXJmb3JtYW5jZUluc2lnaHRzQ29uZmlnIHwgZmFsc2U7XG4gIC8qKiBBUk4gb3IgaWRlbnRpZmllciBvZiBEQiBjbHVzdGVyIHNuYXBzaG90IHRvIHJlc3RvcmUgZnJvbSAqL1xuICBzbmFwc2hvdElkZW50aWZpZXI/OiBzdHJpbmc7XG4gIC8qKiBVc2VybmFtZSBmcm9tIHRoZSBzbmFwc2hvdCAocmVxdWlyZWQgd2hlbiByZXN0b3JpbmcgZnJvbSBzbmFwc2hvdCB0byByZXNldCBwYXNzd29yZCkgKi9cbiAgc25hcHNob3RVc2VybmFtZT86IHN0cmluZztcbiAgLyoqIEFsbG93IGFjY2VzcyBmcm9tIFZQQyBDSURSIChhdm9pZHMgY3Jvc3Mtc3RhY2sgY3ljbGljIGRlcGVuZGVuY2llcyB3aXRoIExhbWJkYSkgKi9cbiAgYWxsb3dWcGNBY2Nlc3M/OiBib29sZWFuO1xuICAvKipcbiAgICogTWFrZSBkYXRhYmFzZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZyb20gdGhlIGludGVybmV0LlxuICAgKiBXQVJOSU5HOiBUaGlzIGlzIGEgc2VjdXJpdHkgcmlzayBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnRcbiAgICogb3Igd2hlbiBidWlsZGluZyBQYXlsb2FkIGFwcHMgbG9jYWxseSB0aGF0IG5lZWQgZGF0YWJhc2UgYWNjZXNzLlxuICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBkYXRhYmFzZSBpcyBwbGFjZWQgaW4gcHVibGljIHN1Ym5ldHMuXG4gICAqL1xuICBwdWJsaWNseUFjY2Vzc2libGU/OiBib29sZWFuO1xuICAvKipcbiAgICogSVAgYWRkcmVzcyB0byBhbGxvdyBhY2Nlc3MgZnJvbSB3aGVuIHB1YmxpY2x5QWNjZXNzaWJsZSBpcyB0cnVlLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBhY2Nlc3MgaXMgcmVzdHJpY3RlZCB0byBWUEMgb25seSBldmVuIHdoZW4gcHVibGljLlxuICAgKiBGb3JtYXQ6IENJRFIgbm90YXRpb24gKGUuZy4sIFwiMjAzLjAuMTEzLjAvMzJcIiBmb3Igc2luZ2xlIElQKVxuICAgKi9cbiAgYWxsb3dlZElwQ2lkcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHbG9iYWxBdXJvcmFEYXRhYmFzZVByb3BzIGV4dGVuZHMgQmFzZURhdGFiYXNlUHJvcHMge1xuICB0eXBlOiBcIkdsb2JhbEF1cm9yYVwiO1xuICBwcmltYXJ5UmVnaW9uOiBzdHJpbmc7XG4gIHNlY29uZGFyeVJlZ2lvbnM/OiBzdHJpbmdbXTtcbiAgZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXI/OiBzdHJpbmc7XG4gIGVuYWJsZUdsb2JhbFdyaXRlRm9yd2FyZGluZz86IGJvb2xlYW47XG4gIGRhdGFiYXNlRW5naW5lPzogRGF0YWJhc2VFbmdpbmU7XG4gIC8qKiBPdmVycmlkZXMgZGF0YWJhc2VFbmdpbmUgaWYgcHJvdmlkZWQgKi9cbiAgZW5naW5lPzogSUNsdXN0ZXJFbmdpbmU7XG4gIHdyaXRlcj86IEF1cm9yYVdyaXRlckNvbmZpZztcbiAgcmVhZGVycz86IEF1cm9yYVJlYWRlcnNDb25maWcgfCBmYWxzZTtcbiAgcHJveHk/OiBQcm94eUNvbmZpZyB8IGZhbHNlO1xuICBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzQ29uZmlnO1xuICAvKiogREVTVFJVQ1RJVkU6IENoYW5naW5nIHN0b3JhZ2VLZXkgY2F1c2VzIGNsdXN0ZXIgcmVwbGFjZW1lbnQgKi9cbiAgZW5jcnlwdGlvbj86IEF1cm9yYUVuY3J5cHRpb25Db25maWc7XG4gIGJhY2t1cFJldGVudGlvbj86IG51bWJlcjtcbiAgbW9uaXRvcmluZ0ludGVydmFsPzogRHVyYXRpb247XG4gIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93Pzogc3RyaW5nO1xuICBwb3J0PzogbnVtYmVyO1xuICBwZXJmb3JtYW5jZUluc2lnaHRzPzogUGVyZm9ybWFuY2VJbnNpZ2h0c0NvbmZpZyB8IGZhbHNlO1xuICAvKiogQVJOIG9yIGlkZW50aWZpZXIgb2YgREIgY2x1c3RlciBzbmFwc2hvdCB0byByZXN0b3JlIGZyb20gKi9cbiAgc25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAvKiogVXNlcm5hbWUgZnJvbSB0aGUgc25hcHNob3QgKHJlcXVpcmVkIHdoZW4gcmVzdG9yaW5nIGZyb20gc25hcHNob3QgdG8gcmVzZXQgcGFzc3dvcmQpICovXG4gIHNuYXBzaG90VXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VEYXRhYmFzZVByb3BzIGV4dGVuZHMgQmFzZURhdGFiYXNlUHJvcHMge1xuICB0eXBlOiBcIkluc3RhbmNlXCI7XG4gIGRhdGFiYXNlRW5naW5lPzogRGF0YWJhc2VFbmdpbmU7XG4gIC8qKiBPdmVycmlkZXMgZGF0YWJhc2VFbmdpbmUgaWYgcHJvdmlkZWQgKi9cbiAgZW5naW5lPzogSUluc3RhbmNlRW5naW5lO1xuICBhbGxvY2F0ZWRTdG9yYWdlPzogbnVtYmVyO1xuICBwb3J0PzogbnVtYmVyO1xuICBtdWx0aUF6PzogYm9vbGVhbjtcbiAgYmFja3VwUmV0ZW50aW9uPzogbnVtYmVyO1xuICBwZXJmb3JtYW5jZUluc2lnaHRzPzogUGVyZm9ybWFuY2VJbnNpZ2h0c0NvbmZpZyB8IGZhbHNlO1xuICBwcm94eT86IFByb3h5Q29uZmlnIHwgZmFsc2U7XG4gIHJlYWRSZXBsaWNhPzogUmVhZFJlcGxpY2FDb25maWcgfCBmYWxzZTtcbiAgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFsc0NvbmZpZztcbiAgZW5jcnlwdGlvbj86IEVuY3J5cHRpb25Db25maWc7XG4gIHB1YmxpY2x5QWNjZXNzaWJsZT86IGJvb2xlYW47XG4gIC8qKiBBUk4gb3IgaWRlbnRpZmllciBvZiBEQiBpbnN0YW5jZSBzbmFwc2hvdCB0byByZXN0b3JlIGZyb20gKi9cbiAgc25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAvKiogVXNlcm5hbWUgZnJvbSB0aGUgc25hcHNob3QgKHJlcXVpcmVkIHdoZW4gcmVzdG9yaW5nIGZyb20gc25hcHNob3QgdG8gcmVzZXQgcGFzc3dvcmQpICovXG4gIHNuYXBzaG90VXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRHluYW1vREIgdGFibGUgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtb0RCRGF0YWJhc2VQcm9wcyB7XG4gIHR5cGU6IFwiRHluYW1vREJcIjtcbiAgcGFydGl0aW9uS2V5OiBEeW5hbW9EQktleVNjaGVtYTtcbiAgc29ydEtleT86IER5bmFtb0RCS2V5U2NoZW1hO1xuICBiaWxsaW5nTW9kZT86IFwiUEFZX1BFUl9SRVFVRVNUXCIgfCBcIlBST1ZJU0lPTkVEXCI7XG4gIHJlYWRDYXBhY2l0eT86IG51bWJlcjtcbiAgd3JpdGVDYXBhY2l0eT86IG51bWJlcjtcbiAgZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcz86IER5bmFtb0RCR2xvYmFsU2Vjb25kYXJ5SW5kZXhbXTtcbiAgdGltZVRvTGl2ZUF0dHJpYnV0ZT86IHN0cmluZztcbiAgc3RyZWFtPzogXCJORVdfSU1BR0VcIiB8IFwiT0xEX0lNQUdFXCIgfCBcIk5FV19BTkRfT0xEX0lNQUdFU1wiIHwgXCJLRVlTX09OTFlcIjtcbiAgcG9pbnRJblRpbWVSZWNvdmVyeT86IGJvb2xlYW47XG4gIGVuY3J5cHRpb24/OiBcIkFXU19PV05FRFwiIHwgXCJBV1NfTUFOQUdFRFwiIHwgXCJDVVNUT01FUl9NQU5BR0VEXCI7XG4gIHJlbW92YWxQb2xpY3k/OiBcIkRFU1RST1lcIiB8IFwiUkVUQUlOXCIgfCBcIlNOQVBTSE9UXCI7XG59XG5cbi8qKlxuICogUmVsYXRpb25hbCBkYXRhYmFzZSBwcm9wcyB1bmlvbiAoQXVyb3JhLCBJbnN0YW5jZSwgR2xvYmFsQXVyb3JhKS5cbiAqL1xuZXhwb3J0IHR5cGUgSVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzID1cbiAgfCBBdXJvcmFEYXRhYmFzZVByb3BzXG4gIHwgSW5zdGFuY2VEYXRhYmFzZVByb3BzXG4gIHwgR2xvYmFsQXVyb3JhRGF0YWJhc2VQcm9wcztcblxuLyoqXG4gKiBBbGwgZGF0YWJhc2UgcHJvcHMgdW5pb24uXG4gKi9cbmV4cG9ydCB0eXBlIElEYXRhYmFzZVByb3BzID1cbiAgfCBBdXJvcmFEYXRhYmFzZVByb3BzXG4gIHwgSW5zdGFuY2VEYXRhYmFzZVByb3BzXG4gIHwgR2xvYmFsQXVyb3JhRGF0YWJhc2VQcm9wc1xuICB8IER5bmFtb0RCRGF0YWJhc2VQcm9wcztcblxuLyoqXG4gKiBWYWxpZGF0ZXMgRHluYW1vREIgcHJvcHMgYW5kIGxvZ3Mgd2FybmluZ3MgZm9yIG1pc2NvbmZpZ3VyZWQgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVEeW5hbW9EQlByb3BzKHByb3BzOiBEeW5hbW9EQkRhdGFiYXNlUHJvcHMpOiB2b2lkIHtcbiAgLy8gVmFsaWRhdGUgcHJvdmlzaW9uZWQgY2FwYWNpdHlcbiAgaWYgKHByb3BzLmJpbGxpbmdNb2RlID09PSBcIlBST1ZJU0lPTkVEXCIpIHtcbiAgICBpZiAoIXByb3BzLnJlYWRDYXBhY2l0eSB8fCAhcHJvcHMud3JpdGVDYXBhY2l0eSkge1xuICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgXCInYmlsbGluZ01vZGUnIGlzIFBST1ZJU0lPTkVEIGJ1dCBjYXBhY2l0eSBub3Qgc3BlY2lmaWVkLiBcIiArXG4gICAgICAgICAgXCJVc2luZyBkZWZhdWx0IHZhbHVlcy4gQ29uc2lkZXIgc3BlY2lmeWluZyAncmVhZENhcGFjaXR5JyBhbmQgJ3dyaXRlQ2FwYWNpdHknLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdhcm4gYWJvdXQgY2FwYWNpdHkgd2l0aCBvbi1kZW1hbmQgYmlsbGluZ1xuICBpZiAocHJvcHMuYmlsbGluZ01vZGUgIT09IFwiUFJPVklTSU9ORURcIikge1xuICAgIGlmIChwcm9wcy5yZWFkQ2FwYWNpdHkgfHwgcHJvcHMud3JpdGVDYXBhY2l0eSkge1xuICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgXCIncmVhZENhcGFjaXR5JyBvciAnd3JpdGVDYXBhY2l0eScgc3BlY2lmaWVkIGJ1dCAnYmlsbGluZ01vZGUnIFwiICtcbiAgICAgICAgICBcImlzIG5vdCBQUk9WSVNJT05FRC4gQ2FwYWNpdHkgc2V0dGluZ3Mgd2lsbCBiZSBpZ25vcmVkLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIEdTSSBwYXJ0aXRpb24ga2V5cyBhcmUgZGlmZmVyZW50IGZyb20gdGFibGUgcGFydGl0aW9uIGtleVxuICBpZiAocHJvcHMuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcykge1xuICAgIGNvbnN0IHRhYmxlUGFydGl0aW9uS2V5ID0gcHJvcHMucGFydGl0aW9uS2V5Lm5hbWU7XG4gICAgZm9yIChjb25zdCBnc2kgb2YgcHJvcHMuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcykge1xuICAgICAgaWYgKFxuICAgICAgICBnc2kucGFydGl0aW9uS2V5Lm5hbWUgPT09IHRhYmxlUGFydGl0aW9uS2V5ICYmXG4gICAgICAgIGdzaS5zb3J0S2V5Py5uYW1lID09PSBwcm9wcy5zb3J0S2V5Py5uYW1lXG4gICAgICApIHtcbiAgICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgICBgR1NJICcke2dzaS5pbmRleE5hbWV9JyBoYXMgdGhlIHNhbWUga2V5IHNjaGVtYSBhcyB0aGUgdGFibGUuIGAgK1xuICAgICAgICAgICAgXCJUaGlzIG1heSBub3QgcHJvdmlkZSB0aGUgcXVlcnkgZmxleGliaWxpdHkgeW91IG5lZWQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgcmVsYXRpb25hbCBkYXRhYmFzZSBwcm9wcyBhbmQgbG9ncyB3YXJuaW5ncyBmb3IgaWdub3JlZCBvciBtaXNjb25maWd1cmVkIG9wdGlvbnMuXG4gKiBUaGVzZSBjaGVja3MgaGVscCBjYXRjaCBpc3N1ZXMgd2hlbiBwcm9wcyBjb21lIGZyb20gZHluYW1pYyBzb3VyY2VzIHdoZXJlXG4gKiBUeXBlU2NyaXB0J3MgY29tcGlsZS10aW1lIGNoZWNrcyBtYXkgbm90IGFwcGx5LlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzKFxuICBwcm9wczogSVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzXG4pOiB2b2lkIHtcbiAgLy8gR2xvYmFsQXVyb3JhIHJlcXVpcmVzIHByaW1hcnlSZWdpb25cbiAgaWYgKHByb3BzLnR5cGUgPT09IFwiR2xvYmFsQXVyb3JhXCIgJiYgIXByb3BzLnByaW1hcnlSZWdpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkdsb2JhbEF1cm9yYSBkYXRhYmFzZSByZXF1aXJlcyAncHJpbWFyeVJlZ2lvbicuIFwiICtcbiAgICAgICAgXCJTcGVjaWZ5IHRoZSBBV1MgcmVnaW9uIHdoZXJlIHRoZSBwcmltYXJ5IGNsdXN0ZXIgd2lsbCBiZSBjcmVhdGVkLlwiXG4gICAgKTtcbiAgfVxuXG4gIC8vIEluc3RhbmNlLW9ubHkgb3B0aW9ucyBvbiBBdXJvcmEvR2xvYmFsQXVyb3JhXG4gIHdhcm5JZlByb3BlcnRpZXNJZ25vcmVkKFxuICAgIHByb3BzLFxuICAgIFtcInJlYWRSZXBsaWNhXCIsIFwibXVsdGlBelwiLCBcImFsbG9jYXRlZFN0b3JhZ2VcIl0sXG4gICAgXCJJbnN0YW5jZVwiLFxuICAgIFwiSW5zdGFuY2UgZGF0YWJhc2VcIlxuICApO1xuXG4gIC8vIEF1cm9yYS1vbmx5IG9wdGlvbnMgb24gSW5zdGFuY2VcbiAgd2FybklmUHJvcGVydGllc0lnbm9yZWQoXG4gICAgcHJvcHMsXG4gICAgW1wicmVhZGVyc1wiLCBcIndyaXRlclwiLCBcImJhY2t1cFJldGVudGlvblwiXSxcbiAgICBbXCJBdXJvcmFcIiwgXCJHbG9iYWxBdXJvcmFcIl0sXG4gICAgXCJBdXJvcmEgZGF0YWJhc2VcIlxuICApO1xuXG4gIC8vIEdsb2JhbEF1cm9yYS1vbmx5IG9wdGlvbnMgb24gbm9uLWdsb2JhbCBkYXRhYmFzZXNcbiAgd2FybklmUHJvcGVydGllc0lnbm9yZWQoXG4gICAgcHJvcHMsXG4gICAgW1wicHJpbWFyeVJlZ2lvblwiLCBcInNlY29uZGFyeVJlZ2lvbnNcIiwgXCJlbmFibGVHbG9iYWxXcml0ZUZvcndhcmRpbmdcIl0sXG4gICAgXCJHbG9iYWxBdXJvcmFcIixcbiAgICBcIkdsb2JhbEF1cm9yYSBkYXRhYmFzZVwiXG4gICk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGRhdGFiYXNlIHByb3BzIGFuZCBsb2dzIHdhcm5pbmdzIGZvciBpZ25vcmVkIG9yIG1pc2NvbmZpZ3VyZWQgb3B0aW9ucy5cbiAqIERpc3BhdGNoZXMgdG8gdHlwZS1zcGVjaWZpYyB2YWxpZGF0b3JzIGJhc2VkIG9uIHRoZSBkYXRhYmFzZSB0eXBlLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZURhdGFiYXNlUHJvcHMocHJvcHM6IElEYXRhYmFzZVByb3BzKTogdm9pZCB7XG4gIGlmIChwcm9wcy50eXBlID09PSBcIkR5bmFtb0RCXCIpIHtcbiAgICB2YWxpZGF0ZUR5bmFtb0RCUHJvcHMocHJvcHMpO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlUmVsYXRpb25hbERhdGFiYXNlUHJvcHMocHJvcHMpO1xuICB9XG59XG5cbi8qKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgdHlwZS1zYWZlIGRhdGFiYXNlIHJlc291cmNlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQXVyb3JhIGRhdGFiYXNlIC0gcmV0dXJucyBSZWxhdGlvbmFsRGF0YWJhc2VcbiAqIGNvbnN0IGF1cm9yYSA9IGFwcC5hZGREYXRhYmFzZShEYXRhYmFzZUZhY3RvcnkuYnVpbGQoXCJNYWluXCIsIHtcbiAqICAgdHlwZTogXCJBdXJvcmFcIixcbiAqICAgZGF0YWJhc2VOYW1lOiBcIm15X2FwcFwiXG4gKiB9KSk7XG4gKiBhdXJvcmEuZ2V0SG9zdEVuZHBvaW50KCk7IC8vIEF2YWlsYWJsZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBEeW5hbW9EQiB0YWJsZSAtIHJldHVybnMgRHluYW1vREJEYXRhYmFzZVxuICogY29uc3QgY2FjaGUgPSBhcHAuYWRkRGF0YWJhc2UoRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKFwiQ2FjaGVcIiwge1xuICogICB0eXBlOiBcIkR5bmFtb0RCXCIsXG4gKiAgIHBhcnRpdGlvbktleTogeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiU1wiIH1cbiAqIH0pKTtcbiAqIGNhY2hlLmdldFRhYmxlTmFtZSgpOyAvLyBBdmFpbGFibGVcbiAqIGNhY2hlLmdyYW50UmVhZFdyaXRlRGF0YShsYW1iZGEpOyAvLyBBdmFpbGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFiYXNlRmFjdG9yeSB7XG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBBdXJvcmFEYXRhYmFzZVByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gUmVsYXRpb25hbERhdGFiYXNlO1xuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSW5zdGFuY2VEYXRhYmFzZVByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gUmVsYXRpb25hbERhdGFiYXNlO1xuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogR2xvYmFsQXVyb3JhRGF0YWJhc2VQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IFJlbGF0aW9uYWxEYXRhYmFzZTtcbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IER5bmFtb0RCRGF0YWJhc2VQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IER5bmFtb0RCRGF0YWJhc2U7XG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBJRGF0YWJhc2VQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IEFueURhdGFiYXNlIHtcbiAgICByZXR1cm4gKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KTogQW55RGF0YWJhc2UgPT4ge1xuICAgICAgdmFsaWRhdGVEYXRhYmFzZVByb3BzKHByb3BzKTtcblxuICAgICAgaWYgKHByb3BzLnR5cGUgPT09IFwiRHluYW1vREJcIikge1xuICAgICAgICByZXR1cm4gbmV3IER5bmFtb0RCRGF0YWJhc2Uoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFiYXNlUHJvcHM6IElSZWxhdGlvbmFsRGF0YWJhc2VQcm9wcyA9IHtcbiAgICAgICAgLi4ueyB2cGM6IGFwcC5nZXRWcGMoKSB9LFxuICAgICAgICAuLi5wcm9wc1xuICAgICAgfTtcbiAgICAgIHJldHVybiBuZXcgUmVsYXRpb25hbERhdGFiYXNlKHNjb3BlLCBpZCwgZGF0YWJhc2VQcm9wcyk7XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIER5bmFtb0RCIGRhdGFiYXNlIHdyYXBwZXIgaW1wbGVtZW50aW5nIElEeW5hbW9EQkRhdGFiYXNlIGludGVyZmFjZS5cbiAqIFByb3ZpZGVzIHR5cGUtc2FmZSBhY2Nlc3MgdG8gRHluYW1vREIgdGFibGUgb3BlcmF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgY2FjaGUgPSBhcHAuYWRkRGF0YWJhc2UoRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKFwiQ2FjaGVcIiwge1xuICogICB0eXBlOiBcIkR5bmFtb0RCXCIsXG4gKiAgIHBhcnRpdGlvbktleTogeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiU1wiIH1cbiAqIH0pKTtcbiAqIGNhY2hlLmdyYW50UmVhZFdyaXRlRGF0YShsYW1iZGEpO1xuICovXG5leHBvcnQgY2xhc3MgRHluYW1vREJEYXRhYmFzZVxuICBleHRlbmRzIENvbnN0cnVjdFxuICBpbXBsZW1lbnRzIElEeW5hbW9EQkRhdGFiYXNlLCBJRHluYW1vREJDb25uZWN0b3JcbntcbiAgcHVibGljIHJlYWRvbmx5IGRhdGFiYXNlVHlwZSA9IFwiRHluYW1vREJcIiBhcyBjb25zdDtcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3RvclR5cGUgPSBcImR5bmFtb2RiXCIgYXMgY29uc3Q7XG4gIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdGFibGU6IER5bmFtb0RCVGFibGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IER5bmFtb0RCRGF0YWJhc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5pZCA9IGlkO1xuXG4gICAgY29uc3QgdGFibGVQcm9wczogRHluYW1vREJUYWJsZVByb3BzID0ge1xuICAgICAgcGFydGl0aW9uS2V5OiBwcm9wcy5wYXJ0aXRpb25LZXksXG4gICAgICBzb3J0S2V5OiBwcm9wcy5zb3J0S2V5LFxuICAgICAgYmlsbGluZ01vZGU6IHByb3BzLmJpbGxpbmdNb2RlLFxuICAgICAgcmVhZENhcGFjaXR5OiBwcm9wcy5yZWFkQ2FwYWNpdHksXG4gICAgICB3cml0ZUNhcGFjaXR5OiBwcm9wcy53cml0ZUNhcGFjaXR5LFxuICAgICAgZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlczogcHJvcHMuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcyxcbiAgICAgIHRpbWVUb0xpdmVBdHRyaWJ1dGU6IHByb3BzLnRpbWVUb0xpdmVBdHRyaWJ1dGUsXG4gICAgICBzdHJlYW06IHByb3BzLnN0cmVhbSxcbiAgICAgIHBvaW50SW5UaW1lUmVjb3Zlcnk6IHByb3BzLnBvaW50SW5UaW1lUmVjb3ZlcnksXG4gICAgICBlbmNyeXB0aW9uOiBwcm9wcy5lbmNyeXB0aW9uLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeVxuICAgIH07XG4gICAgdGhpcy50YWJsZSA9IG5ldyBEeW5hbW9EQlRhYmxlKHRoaXMsIGlkLCB0YWJsZVByb3BzKTtcbiAgfVxuXG4gIGdldFRhYmxlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdldFRhYmxlTmFtZSgpO1xuICB9XG5cbiAgZ2V0VGFibGVBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5nZXRUYWJsZUFybigpO1xuICB9XG5cbiAgZ2V0VGFibGUoKTogSVRhYmxlIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5nZXRUYWJsZSgpO1xuICB9XG5cbiAgZ2V0U3RyZWFtQXJuKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZ2V0VGFibGVTdHJlYW1Bcm4oKTtcbiAgfVxuXG4gIGdyYW50UmVhZERhdGEoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5ncmFudFJlYWQoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFdyaXRlRGF0YShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdyYW50V3JpdGUoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFJlYWRXcml0ZURhdGEoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5ncmFudFJlYWRXcml0ZShncmFudGVlKTtcbiAgfVxuXG4gIGdyYW50RnVsbEFjY2VzcyhncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdyYW50RnVsbEFjY2VzcyhncmFudGVlKTtcbiAgfVxuXG4gIGdyYW50U3RyZWFtUmVhZChncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmdyYW50U3RyZWFtUmVhZChncmFudGVlKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbGF0aW9uYWwgZGF0YWJhc2Ugd3JhcHBlciBpbXBsZW1lbnRpbmcgSVJlbGF0aW9uYWxEYXRhYmFzZSBpbnRlcmZhY2UuXG4gKiBTdXBwb3J0cyBBdXJvcmEsIFJEUyBJbnN0YW5jZSwgYW5kIEdsb2JhbEF1cm9yYSBkYXRhYmFzZSB0eXBlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGIgPSBhcHAuYWRkRGF0YWJhc2UoRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKFwiTWFpblwiLCB7XG4gKiAgIHR5cGU6IFwiQXVyb3JhXCIsXG4gKiAgIGRhdGFiYXNlTmFtZTogXCJteV9hcHBcIlxuICogfSkpO1xuICogZGIuZ3JhbnRDb25uZWN0KGxhbWJkYSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBSZWxhdGlvbmFsRGF0YWJhc2VcbiAgZXh0ZW5kcyBDb25zdHJ1Y3RcbiAgaW1wbGVtZW50cyBJUmVsYXRpb25hbERhdGFiYXNlLCBJU2VjdXJpdHlHcm91cENvbm5lY3Rvclxue1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHB1YmxpYyByZWFkb25seSB2cGM6IElWcGM7XG4gIHB1YmxpYyByZWFkb25seSBkYXRhYmFzZVR5cGU6IFJlbGF0aW9uYWxEYXRhYmFzZVR5cGU7XG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0b3JUeXBlID0gXCJyZWxhdGlvbmFsXCIgYXMgY29uc3Q7XG5cbiAgcHVibGljIGNvbm5lY3Rpb25zITogQ29ubmVjdGlvbnM7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YWJhc2VOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgZGF0YWJhc2UhOiBSZHNBdXJvcmEgfCBSZHNJbnN0YW5jZSB8IFJkc0F1cm9yYUdsb2JhbDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuICAgIHRoaXMuZGF0YWJhc2VUeXBlID0gcHJvcHMudHlwZTtcbiAgICAvLyBWUEMgaXMgdmFsaWRhdGVkIGluIGFkZFh4eCBtZXRob2RzLCBzbyBhc3NlcnRpb24gaXMgc2FmZSBoZXJlXG4gICAgdGhpcy52cGMgPSBwcm9wcy52cGMhO1xuXG4gICAgdGhpcy5fZGF0YWJhc2VOYW1lID0gcHJvcHMuZGF0YWJhc2VOYW1lO1xuICAgIHRoaXMuYWRkRGF0YWJhc2UocHJvcHMpO1xuICB9XG5cbiAgYWRkRGF0YWJhc2UocHJvcHM6IElSZWxhdGlvbmFsRGF0YWJhc2VQcm9wcykge1xuICAgIHN3aXRjaCAocHJvcHMudHlwZSkge1xuICAgICAgY2FzZSBcIkF1cm9yYVwiOlxuICAgICAgICB0aGlzLmFkZEF1cm9yYShwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkdsb2JhbEF1cm9yYVwiOlxuICAgICAgICB0aGlzLmFkZEF1cm9yYUdsb2JhbChwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkluc3RhbmNlXCI6XG4gICAgICAgIHRoaXMuYWRkUmRzSW5zdGFuY2UocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgY29uc3QgX2V4aGF1c3RpdmU6IG5ldmVyID0gcHJvcHM7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVW5zdXBwb3J0ZWQgZGF0YWJhc2UgdHlwZTogJHtTdHJpbmcoKF9leGhhdXN0aXZlIGFzIElSZWxhdGlvbmFsRGF0YWJhc2VQcm9wcykudHlwZSl9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQXVyb3JhKHByb3BzOiBBdXJvcmFEYXRhYmFzZVByb3BzKSB7XG4gICAgaWYgKCFwcm9wcy52cGMpIHRocm93IG5ldyBFcnJvcihcIlZQQyBpcyByZXF1aXJlZCBmb3IgQXVyb3JhIGRhdGFiYXNlXCIpO1xuXG4gICAgY29uc3QgcmVzb2x2ZWREYXRhYmFzZUVuZ2luZSA9IHByb3BzLmRhdGFiYXNlRW5naW5lID8/IFwicG9zdGdyZXNxbFwiO1xuICAgIGNvbnN0IHJlc29sdmVkRW5naW5lID1cbiAgICAgIHByb3BzLmVuZ2luZSA/PyBnZXRBdXJvcmFDbHVzdGVyRW5naW5lKHJlc29sdmVkRGF0YWJhc2VFbmdpbmUpO1xuICAgIGNvbnN0IGVuZ2luZUNvbmZpZyA9IGdldEVuZ2luZUNvbmZpZyhyZXNvbHZlZERhdGFiYXNlRW5naW5lKTtcblxuICAgIGlmIChwcm9wcy5wdWJsaWNseUFjY2Vzc2libGUpIHtcbiAgICAgIEZqYWxsTG9nZ2VyLndhcm4oXG4gICAgICAgIGBBdXJvcmEgZGF0YWJhc2UgJyR7cHJvcHMuZGF0YWJhc2VOYW1lfScgaXMgY29uZmlndXJlZCB3aXRoIHB1YmxpYyBhY2Nlc3NpYmlsaXR5LiBgICtcbiAgICAgICAgICBcIlRoaXMgaXMgYSBzZWN1cml0eSByaXNrIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZXZlbG9wbWVudC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFiYXNlID0gbmV3IFJkc0F1cm9yYSh0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UmRzYCwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgIGVuZ2luZTogcmVzb2x2ZWRFbmdpbmUsXG4gICAgICBlbmdpbmVDb25maWcsXG4gICAgICB3cml0ZXI6IHByb3BzLndyaXRlcixcbiAgICAgIHJlYWRlcnM6IHByb3BzLnJlYWRlcnMsXG4gICAgICBwcm94eTogcHJvcHMucHJveHksXG4gICAgICBjcmVkZW50aWFsczogcHJvcHMuY3JlZGVudGlhbHMsXG4gICAgICBlbmNyeXB0aW9uOiBwcm9wcy5lbmNyeXB0aW9uLFxuICAgICAgYmFja3VwUmV0ZW50aW9uOiBwcm9wcy5iYWNrdXBSZXRlbnRpb24sXG4gICAgICBtb25pdG9yaW5nSW50ZXJ2YWw6IHByb3BzLm1vbml0b3JpbmdJbnRlcnZhbCxcbiAgICAgIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93OiBwcm9wcy5wcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdyxcbiAgICAgIHBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICBwZXJmb3JtYW5jZUluc2lnaHRzOiBwcm9wcy5wZXJmb3JtYW5jZUluc2lnaHRzLFxuICAgICAgZGVsZXRpb25Qcm90ZWN0aW9uOiBwcm9wcy5kZWxldGlvblByb3RlY3Rpb24sXG4gICAgICBzbmFwc2hvdElkZW50aWZpZXI6IHByb3BzLnNuYXBzaG90SWRlbnRpZmllcixcbiAgICAgIHNuYXBzaG90VXNlcm5hbWU6IHByb3BzLnNuYXBzaG90VXNlcm5hbWUsXG4gICAgICBhbGxvd1ZwY0FjY2VzczogcHJvcHMuYWxsb3dWcGNBY2Nlc3MsXG4gICAgICBwdWJsaWNseUFjY2Vzc2libGU6IHByb3BzLnB1YmxpY2x5QWNjZXNzaWJsZSxcbiAgICAgIGFsbG93ZWRJcENpZHI6IHByb3BzLmFsbG93ZWRJcENpZHJcbiAgICB9KTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5kYXRhYmFzZS5jb25uZWN0aW9ucztcbiAgICB0aGlzLmFkZERhdGFiYXNlT3V0cHV0cyhwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIGFkZEF1cm9yYUdsb2JhbChwcm9wczogR2xvYmFsQXVyb3JhRGF0YWJhc2VQcm9wcykge1xuICAgIGlmICghcHJvcHMudnBjKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVlBDIGlzIHJlcXVpcmVkIGZvciBHbG9iYWwgQXVyb3JhIGRhdGFiYXNlXCIpO1xuICAgIGlmICghcHJvcHMucHJpbWFyeVJlZ2lvbilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInByaW1hcnlSZWdpb24gaXMgcmVxdWlyZWQgZm9yIEdsb2JhbCBBdXJvcmEgZGF0YWJhc2VcIik7XG5cbiAgICBjb25zdCByZXNvbHZlZERhdGFiYXNlRW5naW5lID0gcHJvcHMuZGF0YWJhc2VFbmdpbmUgPz8gXCJwb3N0Z3Jlc3FsXCI7XG4gICAgY29uc3QgcmVzb2x2ZWRFbmdpbmUgPVxuICAgICAgcHJvcHMuZW5naW5lID8/IGdldEF1cm9yYUNsdXN0ZXJFbmdpbmUocmVzb2x2ZWREYXRhYmFzZUVuZ2luZSk7XG4gICAgY29uc3QgZW5naW5lQ29uZmlnID0gZ2V0RW5naW5lQ29uZmlnKHJlc29sdmVkRGF0YWJhc2VFbmdpbmUpO1xuXG4gICAgdGhpcy5kYXRhYmFzZSA9IG5ldyBSZHNBdXJvcmFHbG9iYWwoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVJkc0dsb2JhbGAsXG4gICAgICB7XG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgcHJpbWFyeVJlZ2lvbjogcHJvcHMucHJpbWFyeVJlZ2lvbixcbiAgICAgICAgc2Vjb25kYXJ5UmVnaW9uczogcHJvcHMuc2Vjb25kYXJ5UmVnaW9ucyxcbiAgICAgICAgZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXI6IHByb3BzLmdsb2JhbENsdXN0ZXJJZGVudGlmaWVyLFxuICAgICAgICBlbmdpbmU6IHJlc29sdmVkRW5naW5lLFxuICAgICAgICBlbmdpbmVDb25maWcsXG4gICAgICAgIGVuYWJsZUdsb2JhbFdyaXRlRm9yd2FyZGluZzogcHJvcHMuZW5hYmxlR2xvYmFsV3JpdGVGb3J3YXJkaW5nLFxuICAgICAgICB3cml0ZXI6IHByb3BzLndyaXRlcixcbiAgICAgICAgcmVhZGVyczogcHJvcHMucmVhZGVycyxcbiAgICAgICAgcHJveHk6IHByb3BzLnByb3h5LFxuICAgICAgICBjcmVkZW50aWFsczogcHJvcHMuY3JlZGVudGlhbHMsXG4gICAgICAgIGVuY3J5cHRpb246IHByb3BzLmVuY3J5cHRpb24sXG4gICAgICAgIGJhY2t1cFJldGVudGlvbjogcHJvcHMuYmFja3VwUmV0ZW50aW9uLFxuICAgICAgICBtb25pdG9yaW5nSW50ZXJ2YWw6IHByb3BzLm1vbml0b3JpbmdJbnRlcnZhbCxcbiAgICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6IHByb3BzLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93LFxuICAgICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgICBwZXJmb3JtYW5jZUluc2lnaHRzOiBwcm9wcy5wZXJmb3JtYW5jZUluc2lnaHRzLFxuICAgICAgICBkZWxldGlvblByb3RlY3Rpb246IHByb3BzLmRlbGV0aW9uUHJvdGVjdGlvbixcbiAgICAgICAgc25hcHNob3RJZGVudGlmaWVyOiBwcm9wcy5zbmFwc2hvdElkZW50aWZpZXIsXG4gICAgICAgIHNuYXBzaG90VXNlcm5hbWU6IHByb3BzLnNuYXBzaG90VXNlcm5hbWVcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmRhdGFiYXNlLmNvbm5lY3Rpb25zO1xuICAgIHRoaXMuYWRkRGF0YWJhc2VPdXRwdXRzKHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmRzSW5zdGFuY2UocHJvcHM6IEluc3RhbmNlRGF0YWJhc2VQcm9wcykge1xuICAgIGlmICghcHJvcHMudnBjKSB0aHJvdyBuZXcgRXJyb3IoXCJWUEMgaXMgcmVxdWlyZWQgZm9yIEluc3RhbmNlIGRhdGFiYXNlXCIpO1xuXG4gICAgY29uc3QgcmVzb2x2ZWREYXRhYmFzZUVuZ2luZSA9IHByb3BzLmRhdGFiYXNlRW5naW5lID8/IFwicG9zdGdyZXNxbFwiO1xuICAgIGNvbnN0IHJlc29sdmVkRW5naW5lID1cbiAgICAgIHByb3BzLmVuZ2luZSA/PyBnZXRJbnN0YW5jZUVuZ2luZShyZXNvbHZlZERhdGFiYXNlRW5naW5lKTtcbiAgICBjb25zdCBlbmdpbmVDb25maWcgPSBnZXRFbmdpbmVDb25maWcocmVzb2x2ZWREYXRhYmFzZUVuZ2luZSk7XG5cbiAgICB0aGlzLmRhdGFiYXNlID0gbmV3IFJkc0luc3RhbmNlKHRoaXMsIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1SZHNgLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIGRhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5pbnN0YW5jZVR5cGUsXG4gICAgICBhbGxvY2F0ZWRTdG9yYWdlOiBwcm9wcy5hbGxvY2F0ZWRTdG9yYWdlLFxuICAgICAgcG9ydDogcHJvcHMucG9ydCxcbiAgICAgIGVuZ2luZTogcmVzb2x2ZWRFbmdpbmUsXG4gICAgICBlbmdpbmVDb25maWcsXG4gICAgICBtdWx0aUF6OiBwcm9wcy5tdWx0aUF6LFxuICAgICAgYmFja3VwUmV0ZW50aW9uOlxuICAgICAgICBwcm9wcy5iYWNrdXBSZXRlbnRpb24gIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gRHVyYXRpb24uZGF5cyhwcm9wcy5iYWNrdXBSZXRlbnRpb24pXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBwZXJmb3JtYW5jZUluc2lnaHRzOiBwcm9wcy5wZXJmb3JtYW5jZUluc2lnaHRzLFxuICAgICAgcHJveHk6IHByb3BzLnByb3h5LFxuICAgICAgcmVhZFJlcGxpY2E6IHByb3BzLnJlYWRSZXBsaWNhLFxuICAgICAgY3JlZGVudGlhbHM6IHByb3BzLmNyZWRlbnRpYWxzLFxuICAgICAgZW5jcnlwdGlvbjogcHJvcHMuZW5jcnlwdGlvbixcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogcHJvcHMucHVibGljbHlBY2Nlc3NpYmxlLFxuICAgICAgZGVsZXRpb25Qcm90ZWN0aW9uOiBwcm9wcy5kZWxldGlvblByb3RlY3Rpb24sXG4gICAgICBzbmFwc2hvdElkZW50aWZpZXI6IHByb3BzLnNuYXBzaG90SWRlbnRpZmllcixcbiAgICAgIHNuYXBzaG90VXNlcm5hbWU6IHByb3BzLnNuYXBzaG90VXNlcm5hbWVcbiAgICB9KTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5kYXRhYmFzZS5jb25uZWN0aW9ucztcbiAgICB0aGlzLmFkZERhdGFiYXNlT3V0cHV0cyhwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIGFkZERhdGFiYXNlT3V0cHV0cyhwcm9wczogSVJlbGF0aW9uYWxEYXRhYmFzZVByb3BzKSB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmRhdGFiYXNlLmdldEhvc3RFbmRwb2ludCgpO1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZTtcbiAgICAvLyBTYW5pdGlzZSBmb3IgQ2ZuT3V0cHV0IG5hbWVzIOKAlCBDbG91ZEZvcm1hdGlvbiBleHBvcnQgbmFtZXMgb25seSBhbGxvdyBbYS16QS1aMC05Oi1dXG4gICAgY29uc3Qgb3V0cHV0TmFtZSA9IHRvUGFzY2FsQ2FzZShwcm9wcy5kYXRhYmFzZU5hbWUpO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtvdXRwdXROYW1lfUVuZHBvaW50YCwge1xuICAgICAga2V5OiBgJHtzdGFja05hbWV9JHtvdXRwdXROYW1lfUVuZHBvaW50YCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0ke291dHB1dE5hbWV9RW5kcG9pbnRgLFxuICAgICAgdmFsdWU6IGVuZHBvaW50LFxuICAgICAgZGVzY3JpcHRpb246IGBEYXRhYmFzZSBFbmRwb2ludCBmb3IgJHtwcm9wcy5kYXRhYmFzZU5hbWV9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtvdXRwdXROYW1lfVBvcnRgLCB7XG4gICAgICBrZXk6IGAke3N0YWNrTmFtZX0ke291dHB1dE5hbWV9UG9ydGAsXG4gICAgICBleHBvcnROYW1lOiBgJHtzdGFja05hbWV9JHtvdXRwdXROYW1lfVBvcnRgLFxuICAgICAgdmFsdWU6IHRoaXMuZGF0YWJhc2UuZ2V0SG9zdFBvcnQoKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgRGF0YWJhc2UgUG9ydCBmb3IgJHtwcm9wcy5kYXRhYmFzZU5hbWV9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtvdXRwdXROYW1lfURhdGFiYXNlTmFtZWAsIHtcbiAgICAgIGtleTogYCR7c3RhY2tOYW1lfSR7b3V0cHV0TmFtZX1EYXRhYmFzZU5hbWVgLFxuICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfSR7b3V0cHV0TmFtZX1EYXRhYmFzZU5hbWVgLFxuICAgICAgdmFsdWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgRGF0YWJhc2UgTmFtZSBmb3IgJHtwcm9wcy5kYXRhYmFzZU5hbWV9YFxuICAgIH0pO1xuXG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB0aGlzLmRhdGFiYXNlLmdldENyZWRlbnRpYWxzKCk7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtvdXRwdXROYW1lfVNlY3JldEFybmAsIHtcbiAgICAgIGtleTogYCR7c3RhY2tOYW1lfSR7b3V0cHV0TmFtZX1TZWNyZXRBcm5gLFxuICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfSR7b3V0cHV0TmFtZX1TZWNyZXRBcm5gLFxuICAgICAgdmFsdWU6IGNyZWRlbnRpYWxzLnNlY3JldC5zZWNyZXRBcm4sXG4gICAgICBkZXNjcmlwdGlvbjogYERhdGFiYXNlIENyZWRlbnRpYWxzIFNlY3JldCBBUk4gZm9yICR7cHJvcHMuZGF0YWJhc2VOYW1lfWBcbiAgICB9KTtcbiAgfVxuXG4gIGdldENyZWRlbnRpYWxzKCk6IFNlY3JldCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuZ2V0Q3JlZGVudGlhbHMoKTtcbiAgfVxuXG4gIGdldEhvc3RFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmdldEhvc3RFbmRwb2ludCgpO1xuICB9XG5cbiAgZ2V0SG9zdFBvcnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5nZXRIb3N0UG9ydCgpO1xuICB9XG5cbiAgZ2V0RGF0YWJhc2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBjb25uZWN0IHBlcm1pc3Npb25zIHRvIGEgZ3JhbnRlZSBieSBhZGRpbmcgaXQgdG8gdGhlIGRhdGFiYXNlIHNlY3VyaXR5IGdyb3VwLlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgY29ubmVjdGFibGUgcHJpbmNpcGFsIHRvIGdyYW50IGNvbm5lY3QgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIGdyYW50Q29ubmVjdChncmFudGVlOiBJQ29ubmVjdGFibGUpOiB2b2lkIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLmFsbG93RGVmYXVsdFBvcnRGcm9tKGdyYW50ZWUpO1xuICB9XG59XG5cbi8vIFJlLWV4cG9ydCBEeW5hbW9EQiB0eXBlcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHtcbiAgRHluYW1vREJLZXlTY2hlbWEsXG4gIER5bmFtb0RCR2xvYmFsU2Vjb25kYXJ5SW5kZXgsXG4gIER5bmFtb0RCVGFibGVQcm9wc1xufSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9keW5hbW9kYlwiO1xuXG4vLyBSZS1leHBvcnQgaW50ZXJmYWNlIHR5cGVzXG5leHBvcnQge1xuICB0eXBlIElSZWxhdGlvbmFsRGF0YWJhc2UsXG4gIHR5cGUgSUR5bmFtb0RCRGF0YWJhc2UsXG4gIHR5cGUgQW55RGF0YWJhc2UsXG4gIHR5cGUgRGF0YWJhc2VUeXBlLFxuICB0eXBlIFJlbGF0aW9uYWxEYXRhYmFzZVR5cGUsXG4gIGlzUmVsYXRpb25hbERhdGFiYXNlLFxuICBpc0R5bmFtb0RCRGF0YWJhc2UsXG4gIGlzQXVyb3JhRGF0YWJhc2UsXG4gIGlzSW5zdGFuY2VEYXRhYmFzZSxcbiAgaXNHbG9iYWxBdXJvcmFEYXRhYmFzZVxufSBmcm9tIFwiLi9pbnRlcmZhY2VzL2RhdGFiYXNlLmpzXCI7XG4iXX0=
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export * from "./
|
|
2
|
-
export * from "./
|
|
3
|
-
export * from "./
|
|
1
|
+
export * from "./organisation";
|
|
2
|
+
export * from "./platform";
|
|
3
|
+
export * from "./account";
|
|
4
|
+
export * from "./organisationFactory";
|
|
4
5
|
export * from "./buildkite";
|
|
5
6
|
export * from "../../resources/aws/compute/ec2";
|
|
6
7
|
export * from "./fivetranProxy";
|
|
@@ -14,9 +14,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
|
|
18
|
-
__exportStar(require("./
|
|
19
|
-
__exportStar(require("./
|
|
17
|
+
// Organisation patterns
|
|
18
|
+
__exportStar(require("./organisation"), exports);
|
|
19
|
+
__exportStar(require("./platform"), exports);
|
|
20
|
+
__exportStar(require("./account"), exports);
|
|
21
|
+
__exportStar(require("./organisationFactory"), exports);
|
|
20
22
|
__exportStar(require("./buildkite"), exports);
|
|
21
23
|
__exportStar(require("../../resources/aws/compute/ec2"), exports);
|
|
22
24
|
__exportStar(require("./fivetranProxy"), exports);
|
|
@@ -30,4 +32,4 @@ __exportStar(require("./network"), exports);
|
|
|
30
32
|
__exportStar(require("./cdn"), exports);
|
|
31
33
|
__exportStar(require("./messaging"), exports);
|
|
32
34
|
__exportStar(require("./pattern"), exports);
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3QkFBd0I7QUFDeEIsaURBQStCO0FBQy9CLDZDQUEyQjtBQUMzQiw0Q0FBMEI7QUFDMUIsd0RBQXNDO0FBRXRDLDhDQUE0QjtBQUM1QixrRUFBZ0Q7QUFDaEQsa0RBQWdDO0FBQ2hDLDZDQUEyQjtBQUMzQiwrQ0FBNkI7QUFFN0IsV0FBVztBQUNYLDRDQUEwQjtBQUMxQiw0Q0FBMEI7QUFDMUIsOENBQTRCO0FBQzVCLDRDQUEwQjtBQUMxQix3Q0FBc0I7QUFDdEIsOENBQTRCO0FBQzVCLDRDQUEwQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIE9yZ2FuaXNhdGlvbiBwYXR0ZXJuc1xuZXhwb3J0ICogZnJvbSBcIi4vb3JnYW5pc2F0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wbGF0Zm9ybVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYWNjb3VudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vb3JnYW5pc2F0aW9uRmFjdG9yeVwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9idWlsZGtpdGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2NvbXB1dGUvZWMyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9maXZldHJhblByb3h5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaG9zdGVkWm9uZVwiO1xuXG4vLyBQYXR0ZXJuc1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcHV0ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RvcmFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXVkaXRSb2xlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9uZXR3b3JrXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jZG5cIjtcbmV4cG9ydCAqIGZyb20gXCIuL21lc3NhZ2luZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGF0dGVyblwiO1xuIl19
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
export { type ComputeType, type ICompute, type IEcsCompute, type ILambdaCompute, type IEc2Compute, type AnyCompute, isCompute, isEcsCompute, isLambdaCompute, isEc2Compute } from "./compute.js";
|
|
8
8
|
export { type DatabaseType, type RelationalDatabaseType, type IDatabase, type IRelationalDatabase, type IDynamoDBDatabase, type AnyDatabase, isDatabase, isRelationalDatabase, isDynamoDBDatabase, isAuroraDatabase, isInstanceDatabase, isGlobalAuroraDatabase } from "./database.js";
|
|
9
9
|
export { type MessagingType, type IMessaging, type IQueueMessaging, type ITopicMessaging, type IEventBusMessaging, type AnyMessaging, isMessaging, isQueueMessaging, isTopicMessaging, isEventBusMessaging } from "./messaging.js";
|
|
10
|
-
export { type
|
|
10
|
+
export { type IStorage, isStorage } from "./storage.js";
|
|
11
11
|
export { type ConnectorType, type ConnectionAccess, type MessagingAccess, type IConnector, type IStorageConnector, type IDynamoDBConnector, type IQueueConnector, type ISecurityGroupConnector, type AnyConnector, type ConnectionConfig, type ConnectionSpec, type ConnectionResult, isConnector, isConnectable, isConnectionConfig, isStorageConnector, isDynamoDBConnector, isQueueConnector, isSecurityGroupConnector } from "./connector.js";
|
|
12
12
|
export { type PatternType, type IPattern, type IPayload, type IPayloadProps, type IPatternProps, type AnyPattern, type PayloadDatabaseConfig, type PayloadComputeConfig, type PayloadCdnConfig, isPayloadPattern, isPattern } from "./pattern.js";
|
|
13
|
+
export { type OrganisationType, type IOrganisation, type IPlatform, type IAccount, type AnyOrganisation, isOrganisation, isPlatform, isAccount, isOrganisationResource } from "./organisation.js";
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* factory pattern implementations.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.
|
|
9
|
+
exports.isOrganisationResource = exports.isAccount = exports.isPlatform = exports.isOrganisation = exports.isPattern = exports.isPayloadPattern = exports.isSecurityGroupConnector = exports.isQueueConnector = exports.isDynamoDBConnector = exports.isStorageConnector = exports.isConnectionConfig = exports.isConnectable = exports.isConnector = exports.isStorage = exports.isEventBusMessaging = exports.isTopicMessaging = exports.isQueueMessaging = exports.isMessaging = exports.isGlobalAuroraDatabase = exports.isInstanceDatabase = exports.isAuroraDatabase = exports.isDynamoDBDatabase = exports.isRelationalDatabase = exports.isDatabase = exports.isEc2Compute = exports.isLambdaCompute = exports.isEcsCompute = exports.isCompute = void 0;
|
|
10
10
|
// Compute interfaces
|
|
11
11
|
var compute_js_1 = require("./compute.js");
|
|
12
12
|
Object.defineProperty(exports, "isCompute", { enumerable: true, get: function () { return compute_js_1.isCompute; } });
|
|
@@ -30,9 +30,6 @@ Object.defineProperty(exports, "isEventBusMessaging", { enumerable: true, get: f
|
|
|
30
30
|
// Storage interfaces
|
|
31
31
|
var storage_js_1 = require("./storage.js");
|
|
32
32
|
Object.defineProperty(exports, "isStorage", { enumerable: true, get: function () { return storage_js_1.isStorage; } });
|
|
33
|
-
Object.defineProperty(exports, "isPrivateStorage", { enumerable: true, get: function () { return storage_js_1.isPrivateStorage; } });
|
|
34
|
-
Object.defineProperty(exports, "isWebsiteStorage", { enumerable: true, get: function () { return storage_js_1.isWebsiteStorage; } });
|
|
35
|
-
Object.defineProperty(exports, "isPublicStorage", { enumerable: true, get: function () { return storage_js_1.isPublicStorage; } });
|
|
36
33
|
// Connector interfaces
|
|
37
34
|
var connector_js_1 = require("./connector.js");
|
|
38
35
|
Object.defineProperty(exports, "isConnector", { enumerable: true, get: function () { return connector_js_1.isConnector; } });
|
|
@@ -46,4 +43,10 @@ Object.defineProperty(exports, "isSecurityGroupConnector", { enumerable: true, g
|
|
|
46
43
|
var pattern_js_1 = require("./pattern.js");
|
|
47
44
|
Object.defineProperty(exports, "isPayloadPattern", { enumerable: true, get: function () { return pattern_js_1.isPayloadPattern; } });
|
|
48
45
|
Object.defineProperty(exports, "isPattern", { enumerable: true, get: function () { return pattern_js_1.isPattern; } });
|
|
49
|
-
|
|
46
|
+
// Organisation interfaces
|
|
47
|
+
var organisation_js_1 = require("./organisation.js");
|
|
48
|
+
Object.defineProperty(exports, "isOrganisation", { enumerable: true, get: function () { return organisation_js_1.isOrganisation; } });
|
|
49
|
+
Object.defineProperty(exports, "isPlatform", { enumerable: true, get: function () { return organisation_js_1.isPlatform; } });
|
|
50
|
+
Object.defineProperty(exports, "isAccount", { enumerable: true, get: function () { return organisation_js_1.isAccount; } });
|
|
51
|
+
Object.defineProperty(exports, "isOrganisationResource", { enumerable: true, get: function () { return organisation_js_1.isOrganisationResource; } });
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2ludGVyZmFjZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7OztHQUtHOzs7QUFFSCxxQkFBcUI7QUFDckIsMkNBV3NCO0FBSnBCLHVHQUFBLFNBQVMsT0FBQTtBQUNULDBHQUFBLFlBQVksT0FBQTtBQUNaLDZHQUFBLGVBQWUsT0FBQTtBQUNmLDBHQUFBLFlBQVksT0FBQTtBQUdkLHNCQUFzQjtBQUN0Qiw2Q0FhdUI7QUFOckIseUdBQUEsVUFBVSxPQUFBO0FBQ1YsbUhBQUEsb0JBQW9CLE9BQUE7QUFDcEIsaUhBQUEsa0JBQWtCLE9BQUE7QUFDbEIsK0dBQUEsZ0JBQWdCLE9BQUE7QUFDaEIsaUhBQUEsa0JBQWtCLE9BQUE7QUFDbEIscUhBQUEsc0JBQXNCLE9BQUE7QUFHeEIsdUJBQXVCO0FBQ3ZCLCtDQVd3QjtBQUp0QiwyR0FBQSxXQUFXLE9BQUE7QUFDWCxnSEFBQSxnQkFBZ0IsT0FBQTtBQUNoQixnSEFBQSxnQkFBZ0IsT0FBQTtBQUNoQixtSEFBQSxtQkFBbUIsT0FBQTtBQUdyQixxQkFBcUI7QUFDckIsMkNBQXdEO0FBQWhDLHVHQUFBLFNBQVMsT0FBQTtBQUVqQyx1QkFBdUI7QUFDdkIsK0NBb0J3QjtBQVB0QiwyR0FBQSxXQUFXLE9BQUE7QUFDWCw2R0FBQSxhQUFhLE9BQUE7QUFDYixrSEFBQSxrQkFBa0IsT0FBQTtBQUNsQixrSEFBQSxrQkFBa0IsT0FBQTtBQUNsQixtSEFBQSxtQkFBbUIsT0FBQTtBQUNuQixnSEFBQSxnQkFBZ0IsT0FBQTtBQUNoQix3SEFBQSx3QkFBd0IsT0FBQTtBQUcxQixxQkFBcUI7QUFDckIsMkNBWXNCO0FBRnBCLDhHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLHVHQUFBLFNBQVMsT0FBQTtBQUdYLDBCQUEwQjtBQUMxQixxREFVMkI7QUFKekIsaUhBQUEsY0FBYyxPQUFBO0FBQ2QsNkdBQUEsVUFBVSxPQUFBO0FBQ1YsNEdBQUEsU0FBUyxPQUFBO0FBQ1QseUhBQUEsc0JBQXNCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFR5cGUtc2FmZSBpbnRlcmZhY2VzIGZvciBGamFsbCBpbmZyYXN0cnVjdHVyZSBmYWN0b3JpZXMuXG4gKlxuICogVGhpcyBtb2R1bGUgZXhwb3J0cyBhbGwgaW50ZXJmYWNlcyBhbmQgdHlwZSBndWFyZHMgZm9yIHR5cGUtc2FmZVxuICogZmFjdG9yeSBwYXR0ZXJuIGltcGxlbWVudGF0aW9ucy5cbiAqL1xuXG4vLyBDb21wdXRlIGludGVyZmFjZXNcbmV4cG9ydCB7XG4gIHR5cGUgQ29tcHV0ZVR5cGUsXG4gIHR5cGUgSUNvbXB1dGUsXG4gIHR5cGUgSUVjc0NvbXB1dGUsXG4gIHR5cGUgSUxhbWJkYUNvbXB1dGUsXG4gIHR5cGUgSUVjMkNvbXB1dGUsXG4gIHR5cGUgQW55Q29tcHV0ZSxcbiAgaXNDb21wdXRlLFxuICBpc0Vjc0NvbXB1dGUsXG4gIGlzTGFtYmRhQ29tcHV0ZSxcbiAgaXNFYzJDb21wdXRlXG59IGZyb20gXCIuL2NvbXB1dGUuanNcIjtcblxuLy8gRGF0YWJhc2UgaW50ZXJmYWNlc1xuZXhwb3J0IHtcbiAgdHlwZSBEYXRhYmFzZVR5cGUsXG4gIHR5cGUgUmVsYXRpb25hbERhdGFiYXNlVHlwZSxcbiAgdHlwZSBJRGF0YWJhc2UsXG4gIHR5cGUgSVJlbGF0aW9uYWxEYXRhYmFzZSxcbiAgdHlwZSBJRHluYW1vREJEYXRhYmFzZSxcbiAgdHlwZSBBbnlEYXRhYmFzZSxcbiAgaXNEYXRhYmFzZSxcbiAgaXNSZWxhdGlvbmFsRGF0YWJhc2UsXG4gIGlzRHluYW1vREJEYXRhYmFzZSxcbiAgaXNBdXJvcmFEYXRhYmFzZSxcbiAgaXNJbnN0YW5jZURhdGFiYXNlLFxuICBpc0dsb2JhbEF1cm9yYURhdGFiYXNlXG59IGZyb20gXCIuL2RhdGFiYXNlLmpzXCI7XG5cbi8vIE1lc3NhZ2luZyBpbnRlcmZhY2VzXG5leHBvcnQge1xuICB0eXBlIE1lc3NhZ2luZ1R5cGUsXG4gIHR5cGUgSU1lc3NhZ2luZyxcbiAgdHlwZSBJUXVldWVNZXNzYWdpbmcsXG4gIHR5cGUgSVRvcGljTWVzc2FnaW5nLFxuICB0eXBlIElFdmVudEJ1c01lc3NhZ2luZyxcbiAgdHlwZSBBbnlNZXNzYWdpbmcsXG4gIGlzTWVzc2FnaW5nLFxuICBpc1F1ZXVlTWVzc2FnaW5nLFxuICBpc1RvcGljTWVzc2FnaW5nLFxuICBpc0V2ZW50QnVzTWVzc2FnaW5nXG59IGZyb20gXCIuL21lc3NhZ2luZy5qc1wiO1xuXG4vLyBTdG9yYWdlIGludGVyZmFjZXNcbmV4cG9ydCB7IHR5cGUgSVN0b3JhZ2UsIGlzU3RvcmFnZSB9IGZyb20gXCIuL3N0b3JhZ2UuanNcIjtcblxuLy8gQ29ubmVjdG9yIGludGVyZmFjZXNcbmV4cG9ydCB7XG4gIHR5cGUgQ29ubmVjdG9yVHlwZSxcbiAgdHlwZSBDb25uZWN0aW9uQWNjZXNzLFxuICB0eXBlIE1lc3NhZ2luZ0FjY2VzcyxcbiAgdHlwZSBJQ29ubmVjdG9yLFxuICB0eXBlIElTdG9yYWdlQ29ubmVjdG9yLFxuICB0eXBlIElEeW5hbW9EQkNvbm5lY3RvcixcbiAgdHlwZSBJUXVldWVDb25uZWN0b3IsXG4gIHR5cGUgSVNlY3VyaXR5R3JvdXBDb25uZWN0b3IsXG4gIHR5cGUgQW55Q29ubmVjdG9yLFxuICB0eXBlIENvbm5lY3Rpb25Db25maWcsXG4gIHR5cGUgQ29ubmVjdGlvblNwZWMsXG4gIHR5cGUgQ29ubmVjdGlvblJlc3VsdCxcbiAgaXNDb25uZWN0b3IsXG4gIGlzQ29ubmVjdGFibGUsXG4gIGlzQ29ubmVjdGlvbkNvbmZpZyxcbiAgaXNTdG9yYWdlQ29ubmVjdG9yLFxuICBpc0R5bmFtb0RCQ29ubmVjdG9yLFxuICBpc1F1ZXVlQ29ubmVjdG9yLFxuICBpc1NlY3VyaXR5R3JvdXBDb25uZWN0b3Jcbn0gZnJvbSBcIi4vY29ubmVjdG9yLmpzXCI7XG5cbi8vIFBhdHRlcm4gaW50ZXJmYWNlc1xuZXhwb3J0IHtcbiAgdHlwZSBQYXR0ZXJuVHlwZSxcbiAgdHlwZSBJUGF0dGVybixcbiAgdHlwZSBJUGF5bG9hZCxcbiAgdHlwZSBJUGF5bG9hZFByb3BzLFxuICB0eXBlIElQYXR0ZXJuUHJvcHMsXG4gIHR5cGUgQW55UGF0dGVybixcbiAgdHlwZSBQYXlsb2FkRGF0YWJhc2VDb25maWcsXG4gIHR5cGUgUGF5bG9hZENvbXB1dGVDb25maWcsXG4gIHR5cGUgUGF5bG9hZENkbkNvbmZpZyxcbiAgaXNQYXlsb2FkUGF0dGVybixcbiAgaXNQYXR0ZXJuXG59IGZyb20gXCIuL3BhdHRlcm4uanNcIjtcblxuLy8gT3JnYW5pc2F0aW9uIGludGVyZmFjZXNcbmV4cG9ydCB7XG4gIHR5cGUgT3JnYW5pc2F0aW9uVHlwZSxcbiAgdHlwZSBJT3JnYW5pc2F0aW9uLFxuICB0eXBlIElQbGF0Zm9ybSxcbiAgdHlwZSBJQWNjb3VudCxcbiAgdHlwZSBBbnlPcmdhbmlzYXRpb24sXG4gIGlzT3JnYW5pc2F0aW9uLFxuICBpc1BsYXRmb3JtLFxuICBpc0FjY291bnQsXG4gIGlzT3JnYW5pc2F0aW9uUmVzb3VyY2Vcbn0gZnJvbSBcIi4vb3JnYW5pc2F0aW9uLmpzXCI7XG4iXX0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type Construct } from "constructs";
|
|
2
|
+
import type { OrganisationResource } from "../../../resources/aws/organisation";
|
|
3
|
+
export type OrganisationType = "organisation" | "platform" | "account";
|
|
4
|
+
export interface IOrganisation {
|
|
5
|
+
readonly organisationType: "organisation";
|
|
6
|
+
readonly node: Construct["node"];
|
|
7
|
+
getAccounts(): Record<string, string>;
|
|
8
|
+
getOrganisation(): OrganisationResource;
|
|
9
|
+
}
|
|
10
|
+
export interface IPlatform {
|
|
11
|
+
readonly organisationType: "platform";
|
|
12
|
+
readonly node: Construct["node"];
|
|
13
|
+
}
|
|
14
|
+
export interface IAccount {
|
|
15
|
+
readonly organisationType: "account";
|
|
16
|
+
readonly node: Construct["node"];
|
|
17
|
+
}
|
|
18
|
+
export type AnyOrganisation = IOrganisation | IPlatform | IAccount;
|
|
19
|
+
export declare function isOrganisation(resource: unknown): resource is IOrganisation;
|
|
20
|
+
export declare function isPlatform(resource: unknown): resource is IPlatform;
|
|
21
|
+
export declare function isAccount(resource: unknown): resource is IAccount;
|
|
22
|
+
export declare function isOrganisationResource(resource: unknown): resource is AnyOrganisation;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isOrganisation = isOrganisation;
|
|
4
|
+
exports.isPlatform = isPlatform;
|
|
5
|
+
exports.isAccount = isAccount;
|
|
6
|
+
exports.isOrganisationResource = isOrganisationResource;
|
|
7
|
+
function isOrganisation(resource) {
|
|
8
|
+
return (resource !== null &&
|
|
9
|
+
typeof resource === "object" &&
|
|
10
|
+
"organisationType" in resource &&
|
|
11
|
+
resource.organisationType === "organisation");
|
|
12
|
+
}
|
|
13
|
+
function isPlatform(resource) {
|
|
14
|
+
return (resource !== null &&
|
|
15
|
+
typeof resource === "object" &&
|
|
16
|
+
"organisationType" in resource &&
|
|
17
|
+
resource.organisationType === "platform");
|
|
18
|
+
}
|
|
19
|
+
function isAccount(resource) {
|
|
20
|
+
return (resource !== null &&
|
|
21
|
+
typeof resource === "object" &&
|
|
22
|
+
"organisationType" in resource &&
|
|
23
|
+
resource.organisationType === "account");
|
|
24
|
+
}
|
|
25
|
+
function isOrganisationResource(resource) {
|
|
26
|
+
return (isOrganisation(resource) || isPlatform(resource) || isAccount(resource));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9pbnRlcmZhY2VzL29yZ2FuaXNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXdCQSx3Q0FPQztBQUVELGdDQU9DO0FBRUQsOEJBT0M7QUFFRCx3REFNQztBQWpDRCxTQUFnQixjQUFjLENBQUMsUUFBaUI7SUFDOUMsT0FBTyxDQUNMLFFBQVEsS0FBSyxJQUFJO1FBQ2pCLE9BQU8sUUFBUSxLQUFLLFFBQVE7UUFDNUIsa0JBQWtCLElBQUksUUFBUTtRQUM3QixRQUEwQixDQUFDLGdCQUFnQixLQUFLLGNBQWMsQ0FDaEUsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixVQUFVLENBQUMsUUFBaUI7SUFDMUMsT0FBTyxDQUNMLFFBQVEsS0FBSyxJQUFJO1FBQ2pCLE9BQU8sUUFBUSxLQUFLLFFBQVE7UUFDNUIsa0JBQWtCLElBQUksUUFBUTtRQUM3QixRQUFzQixDQUFDLGdCQUFnQixLQUFLLFVBQVUsQ0FDeEQsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixTQUFTLENBQUMsUUFBaUI7SUFDekMsT0FBTyxDQUNMLFFBQVEsS0FBSyxJQUFJO1FBQ2pCLE9BQU8sUUFBUSxLQUFLLFFBQVE7UUFDNUIsa0JBQWtCLElBQUksUUFBUTtRQUM3QixRQUFxQixDQUFDLGdCQUFnQixLQUFLLFNBQVMsQ0FDdEQsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixzQkFBc0IsQ0FDcEMsUUFBaUI7SUFFakIsT0FBTyxDQUNMLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUN4RSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB0eXBlIHsgT3JnYW5pc2F0aW9uUmVzb3VyY2UgfSBmcm9tIFwiLi4vLi4vLi4vcmVzb3VyY2VzL2F3cy9vcmdhbmlzYXRpb25cIjtcblxuZXhwb3J0IHR5cGUgT3JnYW5pc2F0aW9uVHlwZSA9IFwib3JnYW5pc2F0aW9uXCIgfCBcInBsYXRmb3JtXCIgfCBcImFjY291bnRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJT3JnYW5pc2F0aW9uIHtcbiAgcmVhZG9ubHkgb3JnYW5pc2F0aW9uVHlwZTogXCJvcmdhbmlzYXRpb25cIjtcbiAgcmVhZG9ubHkgbm9kZTogQ29uc3RydWN0W1wibm9kZVwiXTtcbiAgZ2V0QWNjb3VudHMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZ2V0T3JnYW5pc2F0aW9uKCk6IE9yZ2FuaXNhdGlvblJlc291cmNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQbGF0Zm9ybSB7XG4gIHJlYWRvbmx5IG9yZ2FuaXNhdGlvblR5cGU6IFwicGxhdGZvcm1cIjtcbiAgcmVhZG9ubHkgbm9kZTogQ29uc3RydWN0W1wibm9kZVwiXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQWNjb3VudCB7XG4gIHJlYWRvbmx5IG9yZ2FuaXNhdGlvblR5cGU6IFwiYWNjb3VudFwiO1xuICByZWFkb25seSBub2RlOiBDb25zdHJ1Y3RbXCJub2RlXCJdO1xufVxuXG5leHBvcnQgdHlwZSBBbnlPcmdhbmlzYXRpb24gPSBJT3JnYW5pc2F0aW9uIHwgSVBsYXRmb3JtIHwgSUFjY291bnQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09yZ2FuaXNhdGlvbihyZXNvdXJjZTogdW5rbm93bik6IHJlc291cmNlIGlzIElPcmdhbmlzYXRpb24ge1xuICByZXR1cm4gKFxuICAgIHJlc291cmNlICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHJlc291cmNlID09PSBcIm9iamVjdFwiICYmXG4gICAgXCJvcmdhbmlzYXRpb25UeXBlXCIgaW4gcmVzb3VyY2UgJiZcbiAgICAocmVzb3VyY2UgYXMgSU9yZ2FuaXNhdGlvbikub3JnYW5pc2F0aW9uVHlwZSA9PT0gXCJvcmdhbmlzYXRpb25cIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGF0Zm9ybShyZXNvdXJjZTogdW5rbm93bik6IHJlc291cmNlIGlzIElQbGF0Zm9ybSB7XG4gIHJldHVybiAoXG4gICAgcmVzb3VyY2UgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgcmVzb3VyY2UgPT09IFwib2JqZWN0XCIgJiZcbiAgICBcIm9yZ2FuaXNhdGlvblR5cGVcIiBpbiByZXNvdXJjZSAmJlxuICAgIChyZXNvdXJjZSBhcyBJUGxhdGZvcm0pLm9yZ2FuaXNhdGlvblR5cGUgPT09IFwicGxhdGZvcm1cIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBY2NvdW50KHJlc291cmNlOiB1bmtub3duKTogcmVzb3VyY2UgaXMgSUFjY291bnQge1xuICByZXR1cm4gKFxuICAgIHJlc291cmNlICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHJlc291cmNlID09PSBcIm9iamVjdFwiICYmXG4gICAgXCJvcmdhbmlzYXRpb25UeXBlXCIgaW4gcmVzb3VyY2UgJiZcbiAgICAocmVzb3VyY2UgYXMgSUFjY291bnQpLm9yZ2FuaXNhdGlvblR5cGUgPT09IFwiYWNjb3VudFwiXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09yZ2FuaXNhdGlvblJlc291cmNlKFxuICByZXNvdXJjZTogdW5rbm93blxuKTogcmVzb3VyY2UgaXMgQW55T3JnYW5pc2F0aW9uIHtcbiAgcmV0dXJuIChcbiAgICBpc09yZ2FuaXNhdGlvbihyZXNvdXJjZSkgfHwgaXNQbGF0Zm9ybShyZXNvdXJjZSkgfHwgaXNBY2NvdW50KHJlc291cmNlKVxuICApO1xufVxuIl19
|
|
@@ -19,7 +19,7 @@ import { type Duration } from "aws-cdk-lib";
|
|
|
19
19
|
import { type Construct } from "constructs";
|
|
20
20
|
import { type RelationalDatabase, type DynamoDBDatabase, type ProxyConfig, type ReadReplicaConfig, type CredentialsConfig, type EncryptionConfig, type AuroraEncryptionConfig, type AuroraWriterConfig, type AuroraReadersConfig, type PerformanceInsightsConfig, type PerformanceInsightsRetentionPeriod } from "../database.js";
|
|
21
21
|
import { type LambdaCompute } from "../compute.js";
|
|
22
|
-
import { type
|
|
22
|
+
import { type Storage } from "../storage.js";
|
|
23
23
|
import { type QueueMessaging } from "../messaging.js";
|
|
24
24
|
import { type Cdn, type SmartCdnBehaviour } from "../cdn.js";
|
|
25
25
|
export type { ProxyConfig, ReadReplicaConfig, CredentialsConfig, EncryptionConfig, AuroraEncryptionConfig, AuroraWriterConfig, AuroraReadersConfig, PerformanceInsightsConfig, PerformanceInsightsRetentionPeriod };
|
|
@@ -181,7 +181,7 @@ export interface PayloadComputeConfig {
|
|
|
181
181
|
server?: PatternLambdaConfig;
|
|
182
182
|
/**
|
|
183
183
|
* Image optimisation Lambda configuration.
|
|
184
|
-
* Handles Next.js image
|
|
184
|
+
* Handles Next.js image optimisation.
|
|
185
185
|
* Defaults: memorySize=1536, timeout=30
|
|
186
186
|
*/
|
|
187
187
|
imageOptimisation?: PatternLambdaConfig;
|
|
@@ -376,11 +376,11 @@ export interface IPayload extends IPattern {
|
|
|
376
376
|
/** Get the Revalidation Lambda function */
|
|
377
377
|
getRevalidation(): LambdaCompute;
|
|
378
378
|
/** Get the Assets S3 bucket (static files) */
|
|
379
|
-
getAssetsBucket():
|
|
379
|
+
getAssetsBucket(): Storage;
|
|
380
380
|
/** Get the Cache S3 bucket (ISR cache) */
|
|
381
|
-
getCacheBucket():
|
|
381
|
+
getCacheBucket(): Storage;
|
|
382
382
|
/** Get the Media S3 bucket (uploads) */
|
|
383
|
-
getMediaBucket():
|
|
383
|
+
getMediaBucket(): Storage;
|
|
384
384
|
/** Get the Tag Cache DynamoDB table */
|
|
385
385
|
getTagCache(): DynamoDBDatabase;
|
|
386
386
|
/** Get the Revalidation SQS queue */
|