@fjall/components-infrastructure 0.87.15 → 0.87.16

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.
@@ -8,7 +8,7 @@ import { type ITable } from "aws-cdk-lib/aws-dynamodb";
8
8
  import { type Construct } from "constructs";
9
9
  import { type KeyValue } from "../../../types";
10
10
  import { type SecretImport } from "../secrets";
11
- export interface lambdaFunctionProps {
11
+ export interface LambdaFunctionProps {
12
12
  code: Code;
13
13
  handler: string;
14
14
  lambdaDescription?: string;
@@ -34,7 +34,7 @@ export interface lambdaFunctionProps {
34
34
  appName?: string;
35
35
  functionName?: string;
36
36
  }
37
- export interface SingletonFunctionProps extends lambdaFunctionProps {
37
+ export interface SingletonFunctionProps extends LambdaFunctionProps {
38
38
  uuid?: string;
39
39
  ephemeralStorageSize?: number;
40
40
  }
@@ -48,7 +48,7 @@ export declare class SingletonFunction extends singletonFunction {
48
48
  }
49
49
  export declare class LambdaFunction extends Function {
50
50
  private functionUrlValue?;
51
- constructor(scope: Construct, id: string, props: lambdaFunctionProps);
51
+ constructor(scope: Construct, id: string, props: LambdaFunctionProps);
52
52
  /**
53
53
  * The Lambda's execution role (auto-generated by CDK)
54
54
  */
@@ -115,6 +115,9 @@ export declare class LambdaFunction extends Function {
115
115
  private addSecretsSupport;
116
116
  /**
117
117
  * Add the AWS Parameters and Secrets Lambda Extension layer.
118
+ * Uses CDK's RegionInfo to automatically resolve the correct ARN for each
119
+ * region and architecture. This handles the fact that AWS publishes the
120
+ * layer from different accounts in different regions.
118
121
  * Configures cache TTL for rotation support.
119
122
  */
120
123
  private addSecretsExtensionLayer;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LambdaFunction = exports.SingletonFunction = void 0;
4
4
  const aws_cdk_lib_1 = require("aws-cdk-lib");
5
5
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
6
+ const region_info_1 = require("aws-cdk-lib/region-info");
6
7
  const aws_lambda_event_sources_1 = require("aws-cdk-lib/aws-lambda-event-sources");
7
8
  const aws_s3_1 = require("aws-cdk-lib/aws-s3");
8
9
  const aws_iam_1 = require("aws-cdk-lib/aws-iam");
@@ -17,13 +18,9 @@ const vpc_1 = require("../networking/vpc");
17
18
  * AWS Parameters and Secrets Lambda Extension configuration.
18
19
  * @see https://docs.aws.amazon.com/systems-manager/latest/userguide/ps-integration-lambda-extensions.html
19
20
  */
20
- const LAMBDA_SECRETS_EXTENSION = {
21
- /** AWS account ID that publishes the extension layer (updated Jan 2026) */
22
- ACCOUNT_ID: "590474943231",
23
- /** Layer name for the extension */
24
- LAYER_NAME: "AWS-Parameters-and-Secrets-Lambda-Extension",
25
- /** Current stable version of the extension (updated Jan 2026) */
26
- VERSION: "28",
21
+ const SECRETS_EXTENSION = {
22
+ /** Extension version for RegionInfo lookup (corresponds to V1_0_103 in CDK) */
23
+ VERSION: "11",
27
24
  /** Cache TTL in seconds - 60s supports secret rotation while reducing API calls */
28
25
  CACHE_TTL_SECONDS: "60"
29
26
  };
@@ -233,15 +230,24 @@ class LambdaFunction extends aws_lambda_1.Function {
233
230
  }
234
231
  /**
235
232
  * Add the AWS Parameters and Secrets Lambda Extension layer.
233
+ * Uses CDK's RegionInfo to automatically resolve the correct ARN for each
234
+ * region and architecture. This handles the fact that AWS publishes the
235
+ * layer from different accounts in different regions.
236
236
  * Configures cache TTL for rotation support.
237
237
  */
238
238
  addSecretsExtensionLayer(architecture) {
239
- const archSuffix = architecture === aws_lambda_1.Architecture.ARM_64 ? "-Arm64" : "";
240
- const layerArn = `arn:aws:lambda:${aws_cdk_lib_1.Stack.of(this).region}:${LAMBDA_SECRETS_EXTENSION.ACCOUNT_ID}:layer:` +
241
- `${LAMBDA_SECRETS_EXTENSION.LAYER_NAME}${archSuffix}:${LAMBDA_SECRETS_EXTENSION.VERSION}`;
239
+ const region = aws_cdk_lib_1.Stack.of(this).region;
240
+ const archString = architecture === aws_lambda_1.Architecture.ARM_64 ? "arm64" : "x86_64";
241
+ const regionInfo = region_info_1.RegionInfo.get(region);
242
+ const layerArn = regionInfo.paramsAndSecretsLambdaLayerArn(SECRETS_EXTENSION.VERSION, archString);
243
+ if (!layerArn) {
244
+ throw new Error(`AWS Parameters and Secrets Lambda Extension is not available ` +
245
+ `in region ${region} for architecture ${archString}. ` +
246
+ `Check AWS documentation for supported regions.`);
247
+ }
242
248
  this.addLayers(aws_lambda_1.LayerVersion.fromLayerVersionArn(this, `${this.node.id}SecretsExtension`, layerArn));
243
- this.addEnvironment("SECRETS_MANAGER_TTL", LAMBDA_SECRETS_EXTENSION.CACHE_TTL_SECONDS);
244
- this.addEnvironment("SSM_PARAMETER_STORE_TTL", LAMBDA_SECRETS_EXTENSION.CACHE_TTL_SECONDS);
249
+ this.addEnvironment("SECRETS_MANAGER_TTL", SECRETS_EXTENSION.CACHE_TTL_SECONDS);
250
+ this.addEnvironment("SSM_PARAMETER_STORE_TTL", SECRETS_EXTENSION.CACHE_TTL_SECONDS);
245
251
  }
246
252
  /**
247
253
  * Add Secrets Manager support for CDK-managed secrets (e.g., database credentials).
@@ -311,4 +317,4 @@ class LambdaFunction extends aws_lambda_1.Function {
311
317
  }
312
318
  }
313
319
  exports.LambdaFunction = LambdaFunction;
314
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQStEO0FBQy9ELHVEQVdnQztBQUNoQyxtRkFLOEM7QUFDOUMsK0NBQTREO0FBQzVELGlEQUEwRTtBQUMxRSxpREFBNEQ7QUFDNUQsdURBQTJFO0FBQzNFLHVFQUFnRjtBQUNoRixtREFBK0Q7QUFDL0QsdUVBQXdEO0FBSXhELCtCQUFrQztBQUdsQywyQ0FBd0M7QUFFeEM7OztHQUdHO0FBQ0gsTUFBTSx3QkFBd0IsR0FBRztJQUMvQiwyRUFBMkU7SUFDM0UsVUFBVSxFQUFFLGNBQWM7SUFDMUIsbUNBQW1DO0lBQ25DLFVBQVUsRUFBRSw2Q0FBNkM7SUFDekQsaUVBQWlFO0lBQ2pFLE9BQU8sRUFBRSxJQUFJO0lBQ2IsbUZBQW1GO0lBQ25GLGlCQUFpQixFQUFFLElBQUk7Q0FDZixDQUFDO0FBdUNYLE1BQWEsaUJBQWtCLFNBQVEsOEJBQWlCO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkI7UUFDckUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7WUFDUixJQUFJLEVBQUUsSUFBQSxTQUFJLEdBQUU7WUFDWixPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQzlCLFdBQVcsRUFBRSxLQUFLLENBQUMsaUJBQWlCLElBQUksR0FBRyxFQUFFLG1CQUFtQjtZQUNoRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQjtnQkFDOUMsQ0FBQyxDQUFDLGtCQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztnQkFDNUMsQ0FBQyxDQUFDLFNBQVM7U0FDZCxDQUFDLENBQUM7UUFFSCxJQUFJ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QixTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7WUFDaEIsVUFBVSxFQUFFO2dCQUNWLFlBQVksRUFBRTtvQkFDWixnQkFBZ0IsRUFBRSxPQUFPLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sZ0JBQWdCO2lCQUMvRDthQUNGO1NBQ0YsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssb0JBQW9CLENBQzFCLFlBQXFCLEVBQ3JCLE9BQWdCLEVBQ2hCLFlBQXFCO1FBRXJCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksS0FBSyxDQUNiLG1FQUFtRTtnQkFDakUsOENBQThDO2dCQUM5QyxnRkFBZ0YsQ0FDbkYsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksT0FBTyxXQUFXLFlBQVksRUFBRSxDQUFDO0lBQzlDLENBQUM7Q0FDRjtBQTVZRCx3Q0E0WUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uLCBTdGFjaywgU2l6ZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgU2luZ2xldG9uRnVuY3Rpb24gYXMgc2luZ2xldG9uRnVuY3Rpb24sXG4gIEZ1bmN0aW9uLFxuICB0eXBlIENvZGUsXG4gIHR5cGUgUnVudGltZSxcbiAgQXJjaGl0ZWN0dXJlLFxuICBGdW5jdGlvblVybEF1dGhUeXBlLFxuICB0eXBlIEZ1bmN0aW9uVXJsQ29yc09wdGlvbnMsXG4gIHR5cGUgSW52b2tlTW9kZSxcbiAgU3RhcnRpbmdQb3NpdGlvbixcbiAgTGF5ZXJWZXJzaW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQge1xuICBTcXNFdmVudFNvdXJjZSxcbiAgRHluYW1vRXZlbnRTb3VyY2UsXG4gIFMzRXZlbnRTb3VyY2UsXG4gIHR5cGUgUzNFdmVudFNvdXJjZVByb3BzXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLWV2ZW50LXNvdXJjZXNcIjtcbmltcG9ydCB7IHR5cGUgQnVja2V0LCBFdmVudFR5cGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQsIHR5cGUgSVJvbGUsIEVmZmVjdCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyB0eXBlIElWcGMsIFN1Ym5ldFR5cGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgUnVsZSwgU2NoZWR1bGUsIHR5cGUgRXZlbnRQYXR0ZXJuIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIjtcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uIGFzIExhbWJkYVRhcmdldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHNcIjtcbmltcG9ydCB7IExvZ0dyb3VwLCBSZXRlbnRpb25EYXlzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIElRdWV1ZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3FzXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcbmltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgdHlwZSBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBTZWNyZXRJbXBvcnQgfSBmcm9tIFwiLi4vc2VjcmV0c1wiO1xuaW1wb3J0IHsgVnBjIH0gZnJvbSBcIi4uL25ldHdvcmtpbmcvdnBjXCI7XG5cbi8qKlxuICogQVdTIFBhcmFtZXRlcnMgYW5kIFNlY3JldHMgTGFtYmRhIEV4dGVuc2lvbiBjb25maWd1cmF0aW9uLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3lzdGVtcy1tYW5hZ2VyL2xhdGVzdC91c2VyZ3VpZGUvcHMtaW50ZWdyYXRpb24tbGFtYmRhLWV4dGVuc2lvbnMuaHRtbFxuICovXG5jb25zdCBMQU1CREFfU0VDUkVUU19FWFRFTlNJT04gPSB7XG4gIC8qKiBBV1MgYWNjb3VudCBJRCB0aGF0IHB1Ymxpc2hlcyB0aGUgZXh0ZW5zaW9uIGxheWVyICh1cGRhdGVkIEphbiAyMDI2KSAqL1xuICBBQ0NPVU5UX0lEOiBcIjU5MDQ3NDk0MzIzMVwiLFxuICAvKiogTGF5ZXIgbmFtZSBmb3IgdGhlIGV4dGVuc2lvbiAqL1xuICBMQVlFUl9OQU1FOiBcIkFXUy1QYXJhbWV0ZXJzLWFuZC1TZWNyZXRzLUxhbWJkYS1FeHRlbnNpb25cIixcbiAgLyoqIEN1cnJlbnQgc3RhYmxlIHZlcnNpb24gb2YgdGhlIGV4dGVuc2lvbiAodXBkYXRlZCBKYW4gMjAyNikgKi9cbiAgVkVSU0lPTjogXCIyOFwiLFxuICAvKiogQ2FjaGUgVFRMIGluIHNlY29uZHMgLSA2MHMgc3VwcG9ydHMgc2VjcmV0IHJvdGF0aW9uIHdoaWxlIHJlZHVjaW5nIEFQSSBjYWxscyAqL1xuICBDQUNIRV9UVExfU0VDT05EUzogXCI2MFwiXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIGxhbWJkYUZ1bmN0aW9uUHJvcHMge1xuICBjb2RlOiBDb2RlO1xuICBoYW5kbGVyOiBzdHJpbmc7XG4gIGxhbWJkYURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICByb2xlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJ1bnRpbWU6IFJ1bnRpbWU7XG4gIC8qKiBMYW1iZGEgQ1BVIGFyY2hpdGVjdHVyZS4gRGVmYXVsdDogeDg2XzY0ICovXG4gIGFyY2hpdGVjdHVyZT86IEFyY2hpdGVjdHVyZTtcbiAgdnBjPzogSVZwYztcbiAgdGltZW91dD86IG51bWJlcjtcbiAgbWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgaW5saW5lUG9saWN5OiBQb2xpY3lTdGF0ZW1lbnRbXTtcblxuICBlbmFibGVGdW5jdGlvblVybD86IGJvb2xlYW47XG4gIGZ1bmN0aW9uVXJsQXV0aFR5cGU/OiBGdW5jdGlvblVybEF1dGhUeXBlO1xuICBmdW5jdGlvblVybENvcnM/OiBGdW5jdGlvblVybENvcnNPcHRpb25zO1xuICAvKiogSW52b2tlIG1vZGUgZm9yIEZ1bmN0aW9uIFVSTC4gVXNlIFJFU1BPTlNFX1NUUkVBTSBmb3IgTGFtYmRhIHN0cmVhbWluZy4gKi9cbiAgZnVuY3Rpb25VcmxJbnZva2VNb2RlPzogSW52b2tlTW9kZTtcblxuICBlbnZpcm9ubWVudD86IEtleVZhbHVlO1xuXG4gIHRhZ3M/OiBLZXlWYWx1ZTtcblxuICBzY2hlZHVsZUV4cHJlc3Npb24/OiBzdHJpbmc7XG5cbiAgc2VjcmV0cz86IHN0cmluZ1tdO1xuICBzc21TZWNyZXRzUGF0aD86IHN0cmluZztcbiAgc2VjcmV0c0ltcG9ydD86IFJlY29yZDxzdHJpbmcsIFNlY3JldEltcG9ydD47XG4gIGFwcE5hbWU/OiBzdHJpbmc7XG4gIGZ1bmN0aW9uTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaW5nbGV0b25GdW5jdGlvblByb3BzIGV4dGVuZHMgbGFtYmRhRnVuY3Rpb25Qcm9wcyB7XG4gIHV1aWQ/OiBzdHJpbmc7XG4gIGVwaGVtZXJhbFN0b3JhZ2VTaXplPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgU2luZ2xldG9uRnVuY3Rpb24gZXh0ZW5kcyBzaW5nbGV0b25GdW5jdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTaW5nbGV0b25GdW5jdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHV1aWQ6IHV1aWQoKSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMzAwKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5sYW1iZGFEZXNjcmlwdGlvbiB8fCBgJHtpZH0gc2luZ2xldG9uIGxhbWJkYWAsXG4gICAgICBydW50aW1lOiBwcm9wcy5ydW50aW1lLFxuICAgICAgZXBoZW1lcmFsU3RvcmFnZVNpemU6IHByb3BzLmVwaGVtZXJhbFN0b3JhZ2VTaXplXG4gICAgICAgID8gU2l6ZS5tZWJpYnl0ZXMocHJvcHMuZXBoZW1lcmFsU3RvcmFnZVNpemUpXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZFBvbGljaWVzVG9Sb2xlKHByb3BzLmlubGluZVBvbGljeSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIExhbWJkYSdzIGV4ZWN1dGlvbiByb2xlIChhdXRvLWdlbmVyYXRlZCBieSBDREspXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4ZWN1dGlvblJvbGUoKTogSVJvbGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvbGU7XG4gIH1cblxuICBwcml2YXRlIGFkZFBvbGljaWVzVG9Sb2xlKHN0YXRlbWVudHM6IFBvbGljeVN0YXRlbWVudFtdKSB7XG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygc3RhdGVtZW50cykge1xuICAgICAgdGhpcy5hZGRUb1JvbGVQb2xpY3koc3RhdGVtZW50KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExhbWJkYUZ1bmN0aW9uIGV4dGVuZHMgRnVuY3Rpb24ge1xuICBwcml2YXRlIGZ1bmN0aW9uVXJsVmFsdWU/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IGxhbWJkYUZ1bmN0aW9uUHJvcHMpIHtcbiAgICAvLyBFeHBsaWNpdGx5IHNldCBzdWJuZXQgc2VsZWN0aW9uIHRvIG1hdGNoIFZQQyBlbmRwb2ludCBwbGFjZW1lbnRcbiAgICAvLyAtIFdpdGggTkFUOiBQUklWQVRFX1dJVEhfRUdSRVNTIChjYW4gYWNjZXNzIGludGVybmV0IHZpYSBOQVQpXG4gICAgLy8gLSBXaXRob3V0IE5BVDogUFJJVkFURV9JU09MQVRFRCAoY2FuIGFjY2VzcyBWUEMgZW5kcG9pbnRzIG9ubHksIG5vIGludGVybmV0KVxuICAgIGxldCB2cGNTdWJuZXRzO1xuICAgIGlmIChwcm9wcy52cGMpIHtcbiAgICAgIGNvbnN0IGhhc05hdEdhdGV3YXlzID1cbiAgICAgICAgcHJvcHMudnBjIGluc3RhbmNlb2YgVnBjID8gcHJvcHMudnBjLmhhc05hdEdhdGV3YXlzIDogdHJ1ZTtcbiAgICAgIHZwY1N1Ym5ldHMgPSB7XG4gICAgICAgIHN1Ym5ldFR5cGU6IGhhc05hdEdhdGV3YXlzXG4gICAgICAgICAgPyBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1NcbiAgICAgICAgICA6IFN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgdnBjU3VibmV0cyxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLnRpbWVvdXRcbiAgICAgICAgPyBEdXJhdGlvbi5zZWNvbmRzKHByb3BzLnRpbWVvdXQpXG4gICAgICAgIDogRHVyYXRpb24uc2Vjb25kcygzMDApLFxuICAgICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5U2l6ZSB8fCAxMjgsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMubGFtYmRhRGVzY3JpcHRpb24gfHwgYCR7aWR9IExhbWJkYWAsXG4gICAgICBlbnZpcm9ubWVudDogcHJvcHMuZW52aXJvbm1lbnRcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkUG9saWNpZXNUb1JvbGUocHJvcHMuaW5saW5lUG9saWN5KTtcblxuICAgIHRoaXMuYWRkU2VjcmV0c1N1cHBvcnQoXG4gICAgICBwcm9wcy5zZWNyZXRzLFxuICAgICAgcHJvcHMuc3NtU2VjcmV0c1BhdGgsXG4gICAgICBwcm9wcy5zZWNyZXRzSW1wb3J0LFxuICAgICAgcHJvcHMuYXBwTmFtZSxcbiAgICAgIHByb3BzLmZ1bmN0aW9uTmFtZSxcbiAgICAgIHByb3BzLmFyY2hpdGVjdHVyZVxuICAgICk7XG5cbiAgICBpZiAocHJvcHMuZW5hYmxlRnVuY3Rpb25VcmwpIHtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uVXJsID0gdGhpcy5hZGRGdW5jdGlvblVybCh7XG4gICAgICAgIGF1dGhUeXBlOiBwcm9wcy5mdW5jdGlvblVybEF1dGhUeXBlIHx8IEZ1bmN0aW9uVXJsQXV0aFR5cGUuQVdTX0lBTSxcbiAgICAgICAgY29yczogcHJvcHMuZnVuY3Rpb25VcmxDb3JzLFxuICAgICAgICBpbnZva2VNb2RlOiBwcm9wcy5mdW5jdGlvblVybEludm9rZU1vZGVcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmZ1bmN0aW9uVXJsVmFsdWUgPSBmdW5jdGlvblVybC51cmw7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7aWR9RnVuY3Rpb25VcmxgLCB7XG4gICAgICAgIGtleTogYCR7aWR9RnVuY3Rpb25VcmxgLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb25VcmwudXJsLFxuICAgICAgICBkZXNjcmlwdGlvbjogYCR7aWR9IEZ1bmN0aW9uIFVSTGBcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5zY2hlZHVsZUV4cHJlc3Npb24pIHtcbiAgICAgIGNvbnN0IHJ1bGUgPSBuZXcgUnVsZSh0aGlzLCBgJHtpZH1TY2hlZHVsZVJ1bGVgLCB7XG4gICAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5leHByZXNzaW9uKHByb3BzLnNjaGVkdWxlRXhwcmVzc2lvbilcbiAgICAgIH0pO1xuICAgICAgcnVsZS5hZGRUYXJnZXQobmV3IExhbWJkYVRhcmdldCh0aGlzKSk7XG4gICAgfVxuXG4gICAgbmV3IExvZ0dyb3VwKHRoaXMsIGAke2lkfUxvZ0dyb3VwYCwge1xuICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy9sYW1iZGEvJHt0aGlzLmZ1bmN0aW9uTmFtZX1gLFxuICAgICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLk9ORV9XRUVLXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIExhbWJkYSdzIGV4ZWN1dGlvbiByb2xlIChhdXRvLWdlbmVyYXRlZCBieSBDREspXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4ZWN1dGlvblJvbGUoKTogSVJvbGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvbGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBMYW1iZGEgZnVuY3Rpb24gVVJMIGlmIGVuYWJsZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0RnVuY3Rpb25VcmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5mdW5jdGlvblVybFZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBTUVMgcXVldWUgYXMgYW4gZXZlbnQgc291cmNlIGZvciB0aGlzIExhbWJkYSBmdW5jdGlvbi5cbiAgICogVGhpcyB3aWxsIHRyaWdnZXIgdGhlIExhbWJkYSB3aGVuIG1lc3NhZ2VzIGFycml2ZSBpbiB0aGUgcXVldWUuXG4gICAqL1xuICBwdWJsaWMgYWRkU3FzRXZlbnRTb3VyY2UoXG4gICAgcXVldWU6IElRdWV1ZSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgYmF0Y2hTaXplPzogbnVtYmVyO1xuICAgICAgbWF4QmF0Y2hpbmdXaW5kb3c/OiBudW1iZXI7XG4gICAgICByZXBvcnRCYXRjaEl0ZW1GYWlsdXJlcz86IGJvb2xlYW47XG4gICAgfVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBldmVudFNvdXJjZSA9IG5ldyBTcXNFdmVudFNvdXJjZShxdWV1ZSwge1xuICAgICAgYmF0Y2hTaXplOiBvcHRpb25zPy5iYXRjaFNpemUgPz8gMTAsXG4gICAgICBtYXhCYXRjaGluZ1dpbmRvdzogb3B0aW9ucz8ubWF4QmF0Y2hpbmdXaW5kb3dcbiAgICAgICAgPyBEdXJhdGlvbi5zZWNvbmRzKG9wdGlvbnMubWF4QmF0Y2hpbmdXaW5kb3cpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgcmVwb3J0QmF0Y2hJdGVtRmFpbHVyZXM6IG9wdGlvbnM/LnJlcG9ydEJhdGNoSXRlbUZhaWx1cmVzID8/IHRydWVcbiAgICB9KTtcbiAgICB0aGlzLmFkZEV2ZW50U291cmNlKGV2ZW50U291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBEeW5hbW9EQiB0YWJsZSBzdHJlYW0gYXMgYW4gZXZlbnQgc291cmNlIGZvciB0aGlzIExhbWJkYSBmdW5jdGlvbi5cbiAgICogVGhpcyB3aWxsIHRyaWdnZXIgdGhlIExhbWJkYSB3aGVuIGl0ZW1zIGFyZSBtb2RpZmllZCBpbiB0aGUgdGFibGUuXG4gICAqIFJlcXVpcmVzIER5bmFtb0RCIFN0cmVhbXMgdG8gYmUgZW5hYmxlZCBvbiB0aGUgdGFibGUuXG4gICAqL1xuICBwdWJsaWMgYWRkRHluYW1vRGJFdmVudFNvdXJjZShcbiAgICB0YWJsZTogSVRhYmxlLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBiYXRjaFNpemU/OiBudW1iZXI7XG4gICAgICBzdGFydGluZ1Bvc2l0aW9uPzogXCJUUklNX0hPUklaT05cIiB8IFwiTEFURVNUXCI7XG4gICAgICBtYXhCYXRjaGluZ1dpbmRvdz86IG51bWJlcjtcbiAgICAgIHJldHJ5QXR0ZW1wdHM/OiBudW1iZXI7XG4gICAgICBwYXJhbGxlbGl6YXRpb25GYWN0b3I/OiBudW1iZXI7XG4gICAgICByZXBvcnRCYXRjaEl0ZW1GYWlsdXJlcz86IGJvb2xlYW47XG4gICAgfVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBzdGFydGluZ1Bvc2l0aW9uID1cbiAgICAgIG9wdGlvbnM/LnN0YXJ0aW5nUG9zaXRpb24gPT09IFwiVFJJTV9IT1JJWk9OXCJcbiAgICAgICAgPyBTdGFydGluZ1Bvc2l0aW9uLlRSSU1fSE9SSVpPTlxuICAgICAgICA6IFN0YXJ0aW5nUG9zaXRpb24uTEFURVNUO1xuXG4gICAgY29uc3QgZXZlbnRTb3VyY2UgPSBuZXcgRHluYW1vRXZlbnRTb3VyY2UodGFibGUsIHtcbiAgICAgIHN0YXJ0aW5nUG9zaXRpb24sXG4gICAgICBiYXRjaFNpemU6IG9wdGlvbnM/LmJhdGNoU2l6ZSA/PyAxMDAsXG4gICAgICBtYXhCYXRjaGluZ1dpbmRvdzogb3B0aW9ucz8ubWF4QmF0Y2hpbmdXaW5kb3dcbiAgICAgICAgPyBEdXJhdGlvbi5zZWNvbmRzKG9wdGlvbnMubWF4QmF0Y2hpbmdXaW5kb3cpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgcmV0cnlBdHRlbXB0czogb3B0aW9ucz8ucmV0cnlBdHRlbXB0cyxcbiAgICAgIHBhcmFsbGVsaXphdGlvbkZhY3Rvcjogb3B0aW9ucz8ucGFyYWxsZWxpemF0aW9uRmFjdG9yLFxuICAgICAgcmVwb3J0QmF0Y2hJdGVtRmFpbHVyZXM6IG9wdGlvbnM/LnJlcG9ydEJhdGNoSXRlbUZhaWx1cmVzID8/IHRydWVcbiAgICB9KTtcbiAgICB0aGlzLmFkZEV2ZW50U291cmNlKGV2ZW50U291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gUzMgYnVja2V0IGFzIGFuIGV2ZW50IHNvdXJjZSBmb3IgdGhpcyBMYW1iZGEgZnVuY3Rpb24uXG4gICAqIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBMYW1iZGEgd2hlbiBvYmplY3RzIGFyZSBjcmVhdGVkLCBtb2RpZmllZCwgb3IgZGVsZXRlZC5cbiAgICogVXNlZnVsIGZvciBJU1IgY2FjaGUgaW52YWxpZGF0aW9uIGFuZCBmaWxlIHByb2Nlc3Npbmcgd29ya2Zsb3dzLlxuICAgKi9cbiAgcHVibGljIGFkZFMzRXZlbnRTb3VyY2UoXG4gICAgYnVja2V0OiBCdWNrZXQsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGV2ZW50cz86IEFycmF5PFxuICAgICAgICB8IFwiT0JKRUNUX0NSRUFURURcIlxuICAgICAgICB8IFwiT0JKRUNUX1JFTU9WRURcIlxuICAgICAgICB8IFwiT0JKRUNUX0NSRUFURURfUFVUXCJcbiAgICAgICAgfCBcIk9CSkVDVF9DUkVBVEVEX1BPU1RcIlxuICAgICAgICB8IFwiT0JKRUNUX0NSRUFURURfQ09QWVwiXG4gICAgICAgIHwgXCJPQkpFQ1RfUkVNT1ZFRF9ERUxFVEVcIlxuICAgICAgPjtcbiAgICAgIGZpbHRlcnM/OiBBcnJheTx7IHByZWZpeD86IHN0cmluZzsgc3VmZml4Pzogc3RyaW5nIH0+O1xuICAgIH1cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRUeXBlcyA9IChvcHRpb25zPy5ldmVudHMgPz8gW1wiT0JKRUNUX0NSRUFURURcIl0pLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgIHN3aXRjaCAoZXZlbnQpIHtcbiAgICAgICAgY2FzZSBcIk9CSkVDVF9DUkVBVEVEXCI6XG4gICAgICAgICAgcmV0dXJuIEV2ZW50VHlwZS5PQkpFQ1RfQ1JFQVRFRDtcbiAgICAgICAgY2FzZSBcIk9CSkVDVF9SRU1PVkVEXCI6XG4gICAgICAgICAgcmV0dXJuIEV2ZW50VHlwZS5PQkpFQ1RfUkVNT1ZFRDtcbiAgICAgICAgY2FzZSBcIk9CSkVDVF9DUkVBVEVEX1BVVFwiOlxuICAgICAgICAgIHJldHVybiBFdmVudFR5cGUuT0JKRUNUX0NSRUFURURfUFVUO1xuICAgICAgICBjYXNlIFwiT0JKRUNUX0NSRUFURURfUE9TVFwiOlxuICAgICAgICAgIHJldHVybiBFdmVudFR5cGUuT0JKRUNUX0NSRUFURURfUE9TVDtcbiAgICAgICAgY2FzZSBcIk9CSkVDVF9DUkVBVEVEX0NPUFlcIjpcbiAgICAgICAgICByZXR1cm4gRXZlbnRUeXBlLk9CSkVDVF9DUkVBVEVEX0NPUFk7XG4gICAgICAgIGNhc2UgXCJPQkpFQ1RfUkVNT1ZFRF9ERUxFVEVcIjpcbiAgICAgICAgICByZXR1cm4gRXZlbnRUeXBlLk9CSkVDVF9SRU1PVkVEX0RFTEVURTtcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnN0IF9leGhhdXN0aXZlOiBuZXZlciA9IGV2ZW50O1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBTMyBldmVudCB0eXBlOiAke19leGhhdXN0aXZlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzM0V2ZW50U291cmNlUHJvcHM6IFMzRXZlbnRTb3VyY2VQcm9wcyA9IHtcbiAgICAgIGV2ZW50czogZXZlbnRUeXBlcyxcbiAgICAgIGZpbHRlcnM6IG9wdGlvbnM/LmZpbHRlcnNcbiAgICB9O1xuXG4gICAgY29uc3QgZXZlbnRTb3VyY2UgPSBuZXcgUzNFdmVudFNvdXJjZShidWNrZXQsIHMzRXZlbnRTb3VyY2VQcm9wcyk7XG4gICAgdGhpcy5hZGRFdmVudFNvdXJjZShldmVudFNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIEV2ZW50QnJpZGdlIHJ1bGUgYXMgYW4gZXZlbnQgc291cmNlIGZvciB0aGlzIExhbWJkYSBmdW5jdGlvbi5cbiAgICogVGhpcyB3aWxsIHRyaWdnZXIgdGhlIExhbWJkYSB3aGVuIGV2ZW50cyBtYXRjaGluZyB0aGUgcGF0dGVybiBhcmUgcHVibGlzaGVkLlxuICAgKiBVc2VmdWwgZm9yIHNjaGVkdWxlZCBqb2JzLCBjcm9zcy1zZXJ2aWNlIGV2ZW50IGhhbmRsaW5nLCBhbmQgY3VzdG9tIGV2ZW50IHBhdHRlcm5zLlxuICAgKi9cbiAgcHVibGljIGFkZEV2ZW50QnJpZGdlRXZlbnRTb3VyY2UoXG4gICAgcnVsZUlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgc2NoZWR1bGU/OiBzdHJpbmc7XG4gICAgICBldmVudFBhdHRlcm4/OiBFdmVudFBhdHRlcm47XG4gICAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICB9XG4gICk6IFJ1bGUge1xuICAgIGlmICghb3B0aW9ucy5zY2hlZHVsZSAmJiAhb3B0aW9ucy5ldmVudFBhdHRlcm4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJFdmVudEJyaWRnZSBydWxlIHJlcXVpcmVzIGVpdGhlciBzY2hlZHVsZSBvciBldmVudFBhdHRlcm5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlID0gbmV3IFJ1bGUodGhpcywgcnVsZUlkLCB7XG4gICAgICBzY2hlZHVsZTogb3B0aW9ucy5zY2hlZHVsZVxuICAgICAgICA/IFNjaGVkdWxlLmV4cHJlc3Npb24ob3B0aW9ucy5zY2hlZHVsZSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBldmVudFBhdHRlcm46IG9wdGlvbnMuZXZlbnRQYXR0ZXJuLFxuICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb25cbiAgICB9KTtcblxuICAgIHJ1bGUuYWRkVGFyZ2V0KG5ldyBMYW1iZGFUYXJnZXQodGhpcykpO1xuICAgIHJldHVybiBydWxlO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRQb2xpY2llc1RvUm9sZShzdGF0ZW1lbnRzOiBQb2xpY3lTdGF0ZW1lbnRbXSkge1xuICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KHN0YXRlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBzZWNyZXRzIHN1cHBvcnQgdXNpbmcgQVdTIFBhcmFtZXRlcnMgYW5kIFNlY3JldHMgTGFtYmRhIEV4dGVuc2lvbi5cbiAgICpcbiAgICogVGhlIGV4dGVuc2lvbiBmZXRjaGVzIHNlY3JldHMgYXQgcnVudGltZSBmcm9tOlxuICAgKiAtIFNTTSBQYXJhbWV0ZXIgU3RvcmU6IHZpYSBodHRwOi8vbG9jYWxob3N0OjI3NzMvc3lzdGVtc21hbmFnZXIvcGFyYW1ldGVycy9nZXRcbiAgICogLSBTZWNyZXRzIE1hbmFnZXI6IHZpYSBodHRwOi8vbG9jYWxob3N0OjI3NzMvc2VjcmV0c21hbmFnZXIvZ2V0XG4gICAqXG4gICAqIFRoaXMgcmVwbGFjZXMgdGhlIGluc2VjdXJlIHVuc2FmZVVud3JhcCgpIHBhdHRlcm4gd2hpY2ggcmVzb2x2ZWQgc2VjcmV0cyBhdFxuICAgKiBkZXBsb3kgdGltZSBhbmQgZXhwb3NlZCB0aGVtIGluIExhbWJkYSBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBhZGRTZWNyZXRzU3VwcG9ydChcbiAgICBzZWNyZXRzPzogc3RyaW5nW10sXG4gICAgc3NtU2VjcmV0c1BhdGg/OiBzdHJpbmcsXG4gICAgc2VjcmV0c0ltcG9ydD86IFJlY29yZDxzdHJpbmcsIFNlY3JldEltcG9ydD4sXG4gICAgYXBwTmFtZT86IHN0cmluZyxcbiAgICBmdW5jdGlvbk5hbWU/OiBzdHJpbmcsXG4gICAgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGhhc1NlY3JldHNNYW5hZ2VyID1cbiAgICAgIHNlY3JldHNJbXBvcnQgJiYgT2JqZWN0LmtleXMoc2VjcmV0c0ltcG9ydCkubGVuZ3RoID4gMDtcbiAgICBjb25zdCBoYXNTc21TZWNyZXRzID0gKHNlY3JldHM/Lmxlbmd0aCA/PyAwKSA+IDA7XG5cbiAgICBpZiAoIWhhc1NlY3JldHNNYW5hZ2VyICYmICFoYXNTc21TZWNyZXRzKSByZXR1cm47XG5cbiAgICB0aGlzLmFkZFNlY3JldHNFeHRlbnNpb25MYXllcihhcmNoaXRlY3R1cmUpO1xuXG4gICAgaWYgKGhhc1NlY3JldHNNYW5hZ2VyKSB7XG4gICAgICB0aGlzLmFkZFNlY3JldHNNYW5hZ2VyU3VwcG9ydChzZWNyZXRzSW1wb3J0KTtcbiAgICB9XG5cbiAgICBpZiAoaGFzU3NtU2VjcmV0cykge1xuICAgICAgdGhpcy5hZGRTc21TZWNyZXRzU3VwcG9ydChcbiAgICAgICAgc2VjcmV0cyEsXG4gICAgICAgIHNzbVNlY3JldHNQYXRoLFxuICAgICAgICBhcHBOYW1lLFxuICAgICAgICBmdW5jdGlvbk5hbWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgQVdTIFBhcmFtZXRlcnMgYW5kIFNlY3JldHMgTGFtYmRhIEV4dGVuc2lvbiBsYXllci5cbiAgICogQ29uZmlndXJlcyBjYWNoZSBUVEwgZm9yIHJvdGF0aW9uIHN1cHBvcnQuXG4gICAqL1xuICBwcml2YXRlIGFkZFNlY3JldHNFeHRlbnNpb25MYXllcihhcmNoaXRlY3R1cmU/OiBBcmNoaXRlY3R1cmUpOiB2b2lkIHtcbiAgICBjb25zdCBhcmNoU3VmZml4ID0gYXJjaGl0ZWN0dXJlID09PSBBcmNoaXRlY3R1cmUuQVJNXzY0ID8gXCItQXJtNjRcIiA6IFwiXCI7XG4gICAgY29uc3QgbGF5ZXJBcm4gPVxuICAgICAgYGFybjphd3M6bGFtYmRhOiR7U3RhY2sub2YodGhpcykucmVnaW9ufToke0xBTUJEQV9TRUNSRVRTX0VYVEVOU0lPTi5BQ0NPVU5UX0lEfTpsYXllcjpgICtcbiAgICAgIGAke0xBTUJEQV9TRUNSRVRTX0VYVEVOU0lPTi5MQVlFUl9OQU1FfSR7YXJjaFN1ZmZpeH06JHtMQU1CREFfU0VDUkVUU19FWFRFTlNJT04uVkVSU0lPTn1gO1xuXG4gICAgdGhpcy5hZGRMYXllcnMoXG4gICAgICBMYXllclZlcnNpb24uZnJvbUxheWVyVmVyc2lvbkFybihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7dGhpcy5ub2RlLmlkfVNlY3JldHNFeHRlbnNpb25gLFxuICAgICAgICBsYXllckFyblxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgXCJTRUNSRVRTX01BTkFHRVJfVFRMXCIsXG4gICAgICBMQU1CREFfU0VDUkVUU19FWFRFTlNJT04uQ0FDSEVfVFRMX1NFQ09ORFNcbiAgICApO1xuICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICBcIlNTTV9QQVJBTUVURVJfU1RPUkVfVFRMXCIsXG4gICAgICBMQU1CREFfU0VDUkVUU19FWFRFTlNJT04uQ0FDSEVfVFRMX1NFQ09ORFNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBTZWNyZXRzIE1hbmFnZXIgc3VwcG9ydCBmb3IgQ0RLLW1hbmFnZWQgc2VjcmV0cyAoZS5nLiwgZGF0YWJhc2UgY3JlZGVudGlhbHMpLlxuICAgKiBTdG9yZXMgQVJOICsgZmllbGQgYXMgZW52IHZhcnMgLSB0aGUgTGFtYmRhIEV4dGVuc2lvbiBmZXRjaGVzIGFjdHVhbCB2YWx1ZXMgYXQgcnVudGltZS5cbiAgICovXG4gIHByaXZhdGUgYWRkU2VjcmV0c01hbmFnZXJTdXBwb3J0KFxuICAgIHNlY3JldHNJbXBvcnQ6IFJlY29yZDxzdHJpbmcsIFNlY3JldEltcG9ydD5cbiAgKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBba2V5LCBzZWNyZXRJbXBvcnRdIG9mIE9iamVjdC5lbnRyaWVzKHNlY3JldHNJbXBvcnQpKSB7XG4gICAgICBjb25zdCBzZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7dGhpcy5ub2RlLmlkfUltcG9ydGVkU2VjcmV0JHtrZXl9YCxcbiAgICAgICAgc2VjcmV0SW1wb3J0Lm5hbWVcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoYCR7a2V5fV9TRUNSRVRfQVJOYCwgc2VjcmV0LnNlY3JldEFybik7XG4gICAgICBpZiAoc2VjcmV0SW1wb3J0LmZpZWxkKSB7XG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoYCR7a2V5fV9TRUNSRVRfRklFTERgLCBzZWNyZXRJbXBvcnQuZmllbGQpO1xuICAgICAgfVxuXG4gICAgICBzZWNyZXQuZ3JhbnRSZWFkKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJrbXM6RGVjcnlwdFwiLCBcImttczpEZXNjcmliZUtleVwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICBcImttczpWaWFTZXJ2aWNlXCI6IGBzZWNyZXRzbWFuYWdlci4ke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgU1NNIFBhcmFtZXRlciBTdG9yZSBzdXBwb3J0IGZvciB1c2VyLW1hbmFnZWQgc2VjcmV0cyAodmlhIGZqYWxsIHNlY3JldCBhZGQpLlxuICAgKiBTdG9yZXMgYmFzZSBwYXRoIGFuZCBzZWNyZXQgbmFtZXMgYXMgZW52IHZhcnMgZm9yIGNvbnN1bWVyIGNvZGUuXG4gICAqL1xuICBwcml2YXRlIGFkZFNzbVNlY3JldHNTdXBwb3J0KFxuICAgIHNlY3JldHM6IHN0cmluZ1tdLFxuICAgIHNzbVNlY3JldHNQYXRoPzogc3RyaW5nLFxuICAgIGFwcE5hbWU/OiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lPzogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2VQYXRoID0gdGhpcy5kZXJpdmVTc21TZWNyZXRzUGF0aChcbiAgICAgIHNzbVNlY3JldHNQYXRoLFxuICAgICAgYXBwTmFtZSxcbiAgICAgIGZ1bmN0aW9uTmFtZVxuICAgICk7XG5cbiAgICB0aGlzLmFkZEVudmlyb25tZW50KFwiU1NNX1NFQ1JFVFNfUEFUSFwiLCBiYXNlUGF0aCk7XG4gICAgdGhpcy5hZGRFbnZpcm9ubWVudChcIlNTTV9TRUNSRVRfTkFNRVNcIiwgc2VjcmV0cy5qb2luKFwiLFwiKSk7XG5cbiAgICBjb25zdCBzY29wZWRQYXRoID0gYXBwTmFtZSA/IGAvJHthcHBOYW1lfS8qYCA6IGAke2Jhc2VQYXRofS8qYDtcbiAgICB0aGlzLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wic3NtOkdldFBhcmFtZXRlclwiLCBcInNzbTpHZXRQYXJhbWV0ZXJzXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpzc206JHtTdGFjay5vZih0aGlzKS5yZWdpb259Oio6cGFyYW1ldGVyJHtzY29wZWRQYXRofWBcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcImttczpEZWNyeXB0XCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgIFwia21zOlZpYVNlcnZpY2VcIjogYHNzbS4ke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXJpdmUgU1NNIHNlY3JldHMgcGF0aCBmb3IgTGFtYmRhIGZ1bmN0aW9ucy5cbiAgICogUGF0dGVybjogLzxhcHBOYW1lPi9sYW1iZGEvPGZ1bmN0aW9uTmFtZT5cbiAgICovXG4gIHByaXZhdGUgZGVyaXZlU3NtU2VjcmV0c1BhdGgoXG4gICAgZXhwbGljaXRQYXRoPzogc3RyaW5nLFxuICAgIGFwcE5hbWU/OiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lPzogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKGV4cGxpY2l0UGF0aCkge1xuICAgICAgcmV0dXJuIGV4cGxpY2l0UGF0aDtcbiAgICB9XG5cbiAgICBpZiAoIWFwcE5hbWUgfHwgIWZ1bmN0aW9uTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkxhbWJkYSBmdW5jdGlvbiBoYXMgc2VjcmV0cyBkZWZpbmVkIGJ1dCBubyBzc21TZWNyZXRzUGF0aCBpcyBzZXQgXCIgK1xuICAgICAgICAgIFwiYW5kIGFwcE5hbWUvZnVuY3Rpb25OYW1lIGFyZSBub3QgYXZhaWxhYmxlLiBcIiArXG4gICAgICAgICAgXCJFaXRoZXIgc2V0IHNzbVNlY3JldHNQYXRoIGV4cGxpY2l0bHksIG9yIGVuc3VyZSBBcHAuZ2V0TmFtZSgpIHJldHVybnMgYSB2YWx1ZS5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYC8ke2FwcE5hbWV9L2xhbWJkYS8ke2Z1bmN0aW9uTmFtZX1gO1xuICB9XG59XG4iXX0=
320
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQStEO0FBQy9ELHVEQVdnQztBQUNoQyx5REFBcUQ7QUFDckQsbUZBSzhDO0FBQzlDLCtDQUE0RDtBQUM1RCxpREFBMEU7QUFDMUUsaURBQTREO0FBQzVELHVEQUEyRTtBQUMzRSx1RUFBZ0Y7QUFDaEYsbURBQStEO0FBQy9ELHVFQUF3RDtBQUl4RCwrQkFBa0M7QUFHbEMsMkNBQXdDO0FBRXhDOzs7R0FHRztBQUNILE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsK0VBQStFO0lBQy9FLE9BQU8sRUFBRSxJQUFJO0lBQ2IsbUZBQW1GO0lBQ25GLGlCQUFpQixFQUFFLElBQUk7Q0FDZixDQUFDO0FBdUNYLE1BQWEsaUJBQWtCLFNBQVEsOEJBQWlCO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkI7UUFDckUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7WUFDUixJQUFJLEVBQUUsSUFBQSxTQUFJLEdBQUU7WUFDWixPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQzlCLFdBQVcsRUFBRSxLQUFLLENBQUMsaUJBQWlCLElBQUksR0FBRyxFQUFFLG1CQUFtQjtZQUNoRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQjtnQkFDOUMsQ0FBQyxDQUFDLGtCQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztnQkFDNUMsQ0FBQyxDQUFDLFNBQVM7U0FDZCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFF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SCxDQUFDO1FBRUYsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7WUFDcEIsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQ3hCLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztZQUNoQixVQUFVLEVBQUU7Z0JBQ1YsWUFBWSxFQUFFO29CQUNaLGdCQUFnQixFQUFFLE9BQU8sbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxnQkFBZ0I7aUJBQy9EO2FBQ0Y7U0FDRixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSyxvQkFBb0IsQ0FDMUIsWUFBcUIsRUFDckIsT0FBZ0IsRUFDaEIsWUFBcUI7UUFFckIsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQ2IsbUVBQW1FO2dCQUNqRSw4Q0FBOEM7Z0JBQzlDLGdGQUFnRixDQUNuRixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sSUFBSSxPQUFPLFdBQVcsWUFBWSxFQUFFLENBQUM7SUFDOUMsQ0FBQztDQUNGO0FBNVpELHdDQTRaQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCwgRHVyYXRpb24sIFN0YWNrLCBTaXplIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBTaW5nbGV0b25GdW5jdGlvbiBhcyBzaW5nbGV0b25GdW5jdGlvbixcbiAgRnVuY3Rpb24sXG4gIHR5cGUgQ29kZSxcbiAgdHlwZSBSdW50aW1lLFxuICBBcmNoaXRlY3R1cmUsXG4gIEZ1bmN0aW9uVXJsQXV0aFR5cGUsXG4gIHR5cGUgRnVuY3Rpb25VcmxDb3JzT3B0aW9ucyxcbiAgdHlwZSBJbnZva2VNb2RlLFxuICBTdGFydGluZ1Bvc2l0aW9uLFxuICBMYXllclZlcnNpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IFJlZ2lvbkluZm8gfSBmcm9tIFwiYXdzLWNkay1saWIvcmVnaW9uLWluZm9cIjtcbmltcG9ydCB7XG4gIFNxc0V2ZW50U291cmNlLFxuICBEeW5hbW9FdmVudFNvdXJjZSxcbiAgUzNFdmVudFNvdXJjZSxcbiAgdHlwZSBTM0V2ZW50U291cmNlUHJvcHNcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtZXZlbnQtc291cmNlc1wiO1xuaW1wb3J0IHsgdHlwZSBCdWNrZXQsIEV2ZW50VHlwZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgdHlwZSBJUm9sZSwgRWZmZWN0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IHR5cGUgSVZwYywgU3VibmV0VHlwZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBSdWxlLCBTY2hlZHVsZSwgdHlwZSBFdmVudFBhdHRlcm4gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0IHsgTGFtYmRhRnVuY3Rpb24gYXMgTGFtYmRhVGFyZ2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0c1wiO1xuaW1wb3J0IHsgTG9nR3JvdXAsIFJldGVudGlvbkRheXMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgSVF1ZXVlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zcXNcIjtcbmltcG9ydCB7IHR5cGUgSVRhYmxlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiO1xuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyB0eXBlIEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFNlY3JldEltcG9ydCB9IGZyb20gXCIuLi9zZWNyZXRzXCI7XG5pbXBvcnQgeyBWcGMgfSBmcm9tIFwiLi4vbmV0d29ya2luZy92cGNcIjtcblxuLyoqXG4gKiBBV1MgUGFyYW1ldGVycyBhbmQgU2VjcmV0cyBMYW1iZGEgRXh0ZW5zaW9uIGNvbmZpZ3VyYXRpb24uXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zeXN0ZW1zLW1hbmFnZXIvbGF0ZXN0L3VzZXJndWlkZS9wcy1pbnRlZ3JhdGlvbi1sYW1iZGEtZXh0ZW5zaW9ucy5odG1sXG4gKi9cbmNvbnN0IFNFQ1JFVFNfRVhURU5TSU9OID0ge1xuICAvKiogRXh0ZW5zaW9uIHZlcnNpb24gZm9yIFJlZ2lvbkluZm8gbG9va3VwIChjb3JyZXNwb25kcyB0byBWMV8wXzEwMyBpbiBDREspICovXG4gIFZFUlNJT046IFwiMTFcIixcbiAgLyoqIENhY2hlIFRUTCBpbiBzZWNvbmRzIC0gNjBzIHN1cHBvcnRzIHNlY3JldCByb3RhdGlvbiB3aGlsZSByZWR1Y2luZyBBUEkgY2FsbHMgKi9cbiAgQ0FDSEVfVFRMX1NFQ09ORFM6IFwiNjBcIlxufSBhcyBjb25zdDtcblxuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFGdW5jdGlvblByb3BzIHtcbiAgY29kZTogQ29kZTtcbiAgaGFuZGxlcjogc3RyaW5nO1xuICBsYW1iZGFEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcm9sZURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBydW50aW1lOiBSdW50aW1lO1xuICAvKiogTGFtYmRhIENQVSBhcmNoaXRlY3R1cmUuIERlZmF1bHQ6IHg4Nl82NCAqL1xuICBhcmNoaXRlY3R1cmU/OiBBcmNoaXRlY3R1cmU7XG4gIHZwYz86IElWcGM7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIG1lbW9yeVNpemU/OiBudW1iZXI7XG4gIGlubGluZVBvbGljeTogUG9saWN5U3RhdGVtZW50W107XG5cbiAgZW5hYmxlRnVuY3Rpb25Vcmw/OiBib29sZWFuO1xuICBmdW5jdGlvblVybEF1dGhUeXBlPzogRnVuY3Rpb25VcmxBdXRoVHlwZTtcbiAgZnVuY3Rpb25VcmxDb3JzPzogRnVuY3Rpb25VcmxDb3JzT3B0aW9ucztcbiAgLyoqIEludm9rZSBtb2RlIGZvciBGdW5jdGlvbiBVUkwuIFVzZSBSRVNQT05TRV9TVFJFQU0gZm9yIExhbWJkYSBzdHJlYW1pbmcuICovXG4gIGZ1bmN0aW9uVXJsSW52b2tlTW9kZT86IEludm9rZU1vZGU7XG5cbiAgZW52aXJvbm1lbnQ/OiBLZXlWYWx1ZTtcblxuICB0YWdzPzogS2V5VmFsdWU7XG5cbiAgc2NoZWR1bGVFeHByZXNzaW9uPzogc3RyaW5nO1xuXG4gIHNlY3JldHM/OiBzdHJpbmdbXTtcbiAgc3NtU2VjcmV0c1BhdGg/OiBzdHJpbmc7XG4gIHNlY3JldHNJbXBvcnQ/OiBSZWNvcmQ8c3RyaW5nLCBTZWNyZXRJbXBvcnQ+O1xuICBhcHBOYW1lPzogc3RyaW5nO1xuICBmdW5jdGlvbk5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2luZ2xldG9uRnVuY3Rpb25Qcm9wcyBleHRlbmRzIExhbWJkYUZ1bmN0aW9uUHJvcHMge1xuICB1dWlkPzogc3RyaW5nO1xuICBlcGhlbWVyYWxTdG9yYWdlU2l6ZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFNpbmdsZXRvbkZ1bmN0aW9uIGV4dGVuZHMgc2luZ2xldG9uRnVuY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2luZ2xldG9uRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB1dWlkOiB1dWlkKCksXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDMwMCksXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMubGFtYmRhRGVzY3JpcHRpb24gfHwgYCR7aWR9IHNpbmdsZXRvbiBsYW1iZGFgLFxuICAgICAgcnVudGltZTogcHJvcHMucnVudGltZSxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplOiBwcm9wcy5lcGhlbWVyYWxTdG9yYWdlU2l6ZVxuICAgICAgICA/IFNpemUubWViaWJ5dGVzKHByb3BzLmVwaGVtZXJhbFN0b3JhZ2VTaXplKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRQb2xpY2llc1RvUm9sZShwcm9wcy5pbmxpbmVQb2xpY3kpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBMYW1iZGEncyBleGVjdXRpb24gcm9sZSAoYXV0by1nZW5lcmF0ZWQgYnkgQ0RLKVxuICAgKi9cbiAgcHVibGljIGdldCBleGVjdXRpb25Sb2xlKCk6IElSb2xlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yb2xlO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRQb2xpY2llc1RvUm9sZShzdGF0ZW1lbnRzOiBQb2xpY3lTdGF0ZW1lbnRbXSkge1xuICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KHN0YXRlbWVudCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYW1iZGFGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHtcbiAgcHJpdmF0ZSBmdW5jdGlvblVybFZhbHVlPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBMYW1iZGFGdW5jdGlvblByb3BzKSB7XG4gICAgLy8gRXhwbGljaXRseSBzZXQgc3VibmV0IHNlbGVjdGlvbiB0byBtYXRjaCBWUEMgZW5kcG9pbnQgcGxhY2VtZW50XG4gICAgLy8gLSBXaXRoIE5BVDogUFJJVkFURV9XSVRIX0VHUkVTUyAoY2FuIGFjY2VzcyBpbnRlcm5ldCB2aWEgTkFUKVxuICAgIC8vIC0gV2l0aG91dCBOQVQ6IFBSSVZBVEVfSVNPTEFURUQgKGNhbiBhY2Nlc3MgVlBDIGVuZHBvaW50cyBvbmx5LCBubyBpbnRlcm5ldClcbiAgICBsZXQgdnBjU3VibmV0cztcbiAgICBpZiAocHJvcHMudnBjKSB7XG4gICAgICBjb25zdCBoYXNOYXRHYXRld2F5cyA9XG4gICAgICAgIHByb3BzLnZwYyBpbnN0YW5jZW9mIFZwYyA/IHByb3BzLnZwYy5oYXNOYXRHYXRld2F5cyA6IHRydWU7XG4gICAgICB2cGNTdWJuZXRzID0ge1xuICAgICAgICBzdWJuZXRUeXBlOiBoYXNOYXRHYXRld2F5c1xuICAgICAgICAgID8gU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTXG4gICAgICAgICAgOiBTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURURcbiAgICAgIH07XG4gICAgfVxuXG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHZwY1N1Ym5ldHMsXG4gICAgICB0aW1lb3V0OiBwcm9wcy50aW1lb3V0XG4gICAgICAgID8gRHVyYXRpb24uc2Vjb25kcyhwcm9wcy50aW1lb3V0KVxuICAgICAgICA6IER1cmF0aW9uLnNlY29uZHMoMzAwKSxcbiAgICAgIG1lbW9yeVNpemU6IHByb3BzLm1lbW9yeVNpemUgfHwgMTI4LFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmxhbWJkYURlc2NyaXB0aW9uIHx8IGAke2lkfSBMYW1iZGFgLFxuICAgICAgZW52aXJvbm1lbnQ6IHByb3BzLmVudmlyb25tZW50XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZFBvbGljaWVzVG9Sb2xlKHByb3BzLmlubGluZVBvbGljeSk7XG5cbiAgICB0aGlzLmFkZFNlY3JldHNTdXBwb3J0KFxuICAgICAgcHJvcHMuc2VjcmV0cyxcbiAgICAgIHByb3BzLnNzbVNlY3JldHNQYXRoLFxuICAgICAgcHJvcHMuc2VjcmV0c0ltcG9ydCxcbiAgICAgIHByb3BzLmFwcE5hbWUsXG4gICAgICBwcm9wcy5mdW5jdGlvbk5hbWUsXG4gICAgICBwcm9wcy5hcmNoaXRlY3R1cmVcbiAgICApO1xuXG4gICAgaWYgKHByb3BzLmVuYWJsZUZ1bmN0aW9uVXJsKSB7XG4gICAgICBjb25zdCBmdW5jdGlvblVybCA9IHRoaXMuYWRkRnVuY3Rpb25Vcmwoe1xuICAgICAgICBhdXRoVHlwZTogcHJvcHMuZnVuY3Rpb25VcmxBdXRoVHlwZSB8fCBGdW5jdGlvblVybEF1dGhUeXBlLkFXU19JQU0sXG4gICAgICAgIGNvcnM6IHByb3BzLmZ1bmN0aW9uVXJsQ29ycyxcbiAgICAgICAgaW52b2tlTW9kZTogcHJvcHMuZnVuY3Rpb25VcmxJbnZva2VNb2RlXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5mdW5jdGlvblVybFZhbHVlID0gZnVuY3Rpb25VcmwudXJsO1xuXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke2lkfUZ1bmN0aW9uVXJsYCwge1xuICAgICAgICBrZXk6IGAke2lkfUZ1bmN0aW9uVXJsYCxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uVXJsLnVybCxcbiAgICAgICAgZGVzY3JpcHRpb246IGAke2lkfSBGdW5jdGlvbiBVUkxgXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc2NoZWR1bGVFeHByZXNzaW9uKSB7XG4gICAgICBjb25zdCBydWxlID0gbmV3IFJ1bGUodGhpcywgYCR7aWR9U2NoZWR1bGVSdWxlYCwge1xuICAgICAgICBzY2hlZHVsZTogU2NoZWR1bGUuZXhwcmVzc2lvbihwcm9wcy5zY2hlZHVsZUV4cHJlc3Npb24pXG4gICAgICB9KTtcbiAgICAgIHJ1bGUuYWRkVGFyZ2V0KG5ldyBMYW1iZGFUYXJnZXQodGhpcykpO1xuICAgIH1cblxuICAgIG5ldyBMb2dHcm91cCh0aGlzLCBgJHtpZH1Mb2dHcm91cGAsIHtcbiAgICAgIGxvZ0dyb3VwTmFtZTogYC9hd3MvbGFtYmRhLyR7dGhpcy5mdW5jdGlvbk5hbWV9YCxcbiAgICAgIHJldGVudGlvbjogUmV0ZW50aW9uRGF5cy5PTkVfV0VFS1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBMYW1iZGEncyBleGVjdXRpb24gcm9sZSAoYXV0by1nZW5lcmF0ZWQgYnkgQ0RLKVxuICAgKi9cbiAgcHVibGljIGdldCBleGVjdXRpb25Sb2xlKCk6IElSb2xlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yb2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgTGFtYmRhIGZ1bmN0aW9uIFVSTCBpZiBlbmFibGVkLlxuICAgKi9cbiAgcHVibGljIGdldEZ1bmN0aW9uVXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZnVuY3Rpb25VcmxWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gU1FTIHF1ZXVlIGFzIGFuIGV2ZW50IHNvdXJjZSBmb3IgdGhpcyBMYW1iZGEgZnVuY3Rpb24uXG4gICAqIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBMYW1iZGEgd2hlbiBtZXNzYWdlcyBhcnJpdmUgaW4gdGhlIHF1ZXVlLlxuICAgKi9cbiAgcHVibGljIGFkZFNxc0V2ZW50U291cmNlKFxuICAgIHF1ZXVlOiBJUXVldWUsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGJhdGNoU2l6ZT86IG51bWJlcjtcbiAgICAgIG1heEJhdGNoaW5nV2luZG93PzogbnVtYmVyO1xuICAgICAgcmVwb3J0QmF0Y2hJdGVtRmFpbHVyZXM/OiBib29sZWFuO1xuICAgIH1cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRTb3VyY2UgPSBuZXcgU3FzRXZlbnRTb3VyY2UocXVldWUsIHtcbiAgICAgIGJhdGNoU2l6ZTogb3B0aW9ucz8uYmF0Y2hTaXplID8/IDEwLFxuICAgICAgbWF4QmF0Y2hpbmdXaW5kb3c6IG9wdGlvbnM/Lm1heEJhdGNoaW5nV2luZG93XG4gICAgICAgID8gRHVyYXRpb24uc2Vjb25kcyhvcHRpb25zLm1heEJhdGNoaW5nV2luZG93KVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHJlcG9ydEJhdGNoSXRlbUZhaWx1cmVzOiBvcHRpb25zPy5yZXBvcnRCYXRjaEl0ZW1GYWlsdXJlcyA/PyB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudFNvdXJjZShldmVudFNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgRHluYW1vREIgdGFibGUgc3RyZWFtIGFzIGFuIGV2ZW50IHNvdXJjZSBmb3IgdGhpcyBMYW1iZGEgZnVuY3Rpb24uXG4gICAqIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBMYW1iZGEgd2hlbiBpdGVtcyBhcmUgbW9kaWZpZWQgaW4gdGhlIHRhYmxlLlxuICAgKiBSZXF1aXJlcyBEeW5hbW9EQiBTdHJlYW1zIHRvIGJlIGVuYWJsZWQgb24gdGhlIHRhYmxlLlxuICAgKi9cbiAgcHVibGljIGFkZER5bmFtb0RiRXZlbnRTb3VyY2UoXG4gICAgdGFibGU6IElUYWJsZSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgYmF0Y2hTaXplPzogbnVtYmVyO1xuICAgICAgc3RhcnRpbmdQb3NpdGlvbj86IFwiVFJJTV9IT1JJWk9OXCIgfCBcIkxBVEVTVFwiO1xuICAgICAgbWF4QmF0Y2hpbmdXaW5kb3c/OiBudW1iZXI7XG4gICAgICByZXRyeUF0dGVtcHRzPzogbnVtYmVyO1xuICAgICAgcGFyYWxsZWxpemF0aW9uRmFjdG9yPzogbnVtYmVyO1xuICAgICAgcmVwb3J0QmF0Y2hJdGVtRmFpbHVyZXM/OiBib29sZWFuO1xuICAgIH1cbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhcnRpbmdQb3NpdGlvbiA9XG4gICAgICBvcHRpb25zPy5zdGFydGluZ1Bvc2l0aW9uID09PSBcIlRSSU1fSE9SSVpPTlwiXG4gICAgICAgID8gU3RhcnRpbmdQb3NpdGlvbi5UUklNX0hPUklaT05cbiAgICAgICAgOiBTdGFydGluZ1Bvc2l0aW9uLkxBVEVTVDtcblxuICAgIGNvbnN0IGV2ZW50U291cmNlID0gbmV3IER5bmFtb0V2ZW50U291cmNlKHRhYmxlLCB7XG4gICAgICBzdGFydGluZ1Bvc2l0aW9uLFxuICAgICAgYmF0Y2hTaXplOiBvcHRpb25zPy5iYXRjaFNpemUgPz8gMTAwLFxuICAgICAgbWF4QmF0Y2hpbmdXaW5kb3c6IG9wdGlvbnM/Lm1heEJhdGNoaW5nV2luZG93XG4gICAgICAgID8gRHVyYXRpb24uc2Vjb25kcyhvcHRpb25zLm1heEJhdGNoaW5nV2luZG93KVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHJldHJ5QXR0ZW1wdHM6IG9wdGlvbnM/LnJldHJ5QXR0ZW1wdHMsXG4gICAgICBwYXJhbGxlbGl6YXRpb25GYWN0b3I6IG9wdGlvbnM/LnBhcmFsbGVsaXphdGlvbkZhY3RvcixcbiAgICAgIHJlcG9ydEJhdGNoSXRlbUZhaWx1cmVzOiBvcHRpb25zPy5yZXBvcnRCYXRjaEl0ZW1GYWlsdXJlcyA/PyB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudFNvdXJjZShldmVudFNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIFMzIGJ1Y2tldCBhcyBhbiBldmVudCBzb3VyY2UgZm9yIHRoaXMgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKiBUaGlzIHdpbGwgdHJpZ2dlciB0aGUgTGFtYmRhIHdoZW4gb2JqZWN0cyBhcmUgY3JlYXRlZCwgbW9kaWZpZWQsIG9yIGRlbGV0ZWQuXG4gICAqIFVzZWZ1bCBmb3IgSVNSIGNhY2hlIGludmFsaWRhdGlvbiBhbmQgZmlsZSBwcm9jZXNzaW5nIHdvcmtmbG93cy5cbiAgICovXG4gIHB1YmxpYyBhZGRTM0V2ZW50U291cmNlKFxuICAgIGJ1Y2tldDogQnVja2V0LFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBldmVudHM/OiBBcnJheTxcbiAgICAgICAgfCBcIk9CSkVDVF9DUkVBVEVEXCJcbiAgICAgICAgfCBcIk9CSkVDVF9SRU1PVkVEXCJcbiAgICAgICAgfCBcIk9CSkVDVF9DUkVBVEVEX1BVVFwiXG4gICAgICAgIHwgXCJPQkpFQ1RfQ1JFQVRFRF9QT1NUXCJcbiAgICAgICAgfCBcIk9CSkVDVF9DUkVBVEVEX0NPUFlcIlxuICAgICAgICB8IFwiT0JKRUNUX1JFTU9WRURfREVMRVRFXCJcbiAgICAgID47XG4gICAgICBmaWx0ZXJzPzogQXJyYXk8eyBwcmVmaXg/OiBzdHJpbmc7IHN1ZmZpeD86IHN0cmluZyB9PjtcbiAgICB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50VHlwZXMgPSAob3B0aW9ucz8uZXZlbnRzID8/IFtcIk9CSkVDVF9DUkVBVEVEXCJdKS5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICAgIGNhc2UgXCJPQkpFQ1RfQ1JFQVRFRFwiOlxuICAgICAgICAgIHJldHVybiBFdmVudFR5cGUuT0JKRUNUX0NSRUFURUQ7XG4gICAgICAgIGNhc2UgXCJPQkpFQ1RfUkVNT1ZFRFwiOlxuICAgICAgICAgIHJldHVybiBFdmVudFR5cGUuT0JKRUNUX1JFTU9WRUQ7XG4gICAgICAgIGNhc2UgXCJPQkpFQ1RfQ1JFQVRFRF9QVVRcIjpcbiAgICAgICAgICByZXR1cm4gRXZlbnRUeXBlLk9CSkVDVF9DUkVBVEVEX1BVVDtcbiAgICAgICAgY2FzZSBcIk9CSkVDVF9DUkVBVEVEX1BPU1RcIjpcbiAgICAgICAgICByZXR1cm4gRXZlbnRUeXBlLk9CSkVDVF9DUkVBVEVEX1BPU1Q7XG4gICAgICAgIGNhc2UgXCJPQkpFQ1RfQ1JFQVRFRF9DT1BZXCI6XG4gICAgICAgICAgcmV0dXJuIEV2ZW50VHlwZS5PQkpFQ1RfQ1JFQVRFRF9DT1BZO1xuICAgICAgICBjYXNlIFwiT0JKRUNUX1JFTU9WRURfREVMRVRFXCI6XG4gICAgICAgICAgcmV0dXJuIEV2ZW50VHlwZS5PQkpFQ1RfUkVNT1ZFRF9ERUxFVEU7XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBldmVudDtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gUzMgZXZlbnQgdHlwZTogJHtfZXhoYXVzdGl2ZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgczNFdmVudFNvdXJjZVByb3BzOiBTM0V2ZW50U291cmNlUHJvcHMgPSB7XG4gICAgICBldmVudHM6IGV2ZW50VHlwZXMsXG4gICAgICBmaWx0ZXJzOiBvcHRpb25zPy5maWx0ZXJzXG4gICAgfTtcblxuICAgIGNvbnN0IGV2ZW50U291cmNlID0gbmV3IFMzRXZlbnRTb3VyY2UoYnVja2V0LCBzM0V2ZW50U291cmNlUHJvcHMpO1xuICAgIHRoaXMuYWRkRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBFdmVudEJyaWRnZSBydWxlIGFzIGFuIGV2ZW50IHNvdXJjZSBmb3IgdGhpcyBMYW1iZGEgZnVuY3Rpb24uXG4gICAqIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBMYW1iZGEgd2hlbiBldmVudHMgbWF0Y2hpbmcgdGhlIHBhdHRlcm4gYXJlIHB1Ymxpc2hlZC5cbiAgICogVXNlZnVsIGZvciBzY2hlZHVsZWQgam9icywgY3Jvc3Mtc2VydmljZSBldmVudCBoYW5kbGluZywgYW5kIGN1c3RvbSBldmVudCBwYXR0ZXJucy5cbiAgICovXG4gIHB1YmxpYyBhZGRFdmVudEJyaWRnZUV2ZW50U291cmNlKFxuICAgIHJ1bGVJZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHNjaGVkdWxlPzogc3RyaW5nO1xuICAgICAgZXZlbnRQYXR0ZXJuPzogRXZlbnRQYXR0ZXJuO1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgfVxuICApOiBSdWxlIHtcbiAgICBpZiAoIW9wdGlvbnMuc2NoZWR1bGUgJiYgIW9wdGlvbnMuZXZlbnRQYXR0ZXJuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRXZlbnRCcmlkZ2UgcnVsZSByZXF1aXJlcyBlaXRoZXIgc2NoZWR1bGUgb3IgZXZlbnRQYXR0ZXJuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKHRoaXMsIHJ1bGVJZCwge1xuICAgICAgc2NoZWR1bGU6IG9wdGlvbnMuc2NoZWR1bGVcbiAgICAgICAgPyBTY2hlZHVsZS5leHByZXNzaW9uKG9wdGlvbnMuc2NoZWR1bGUpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnRQYXR0ZXJuOiBvcHRpb25zLmV2ZW50UGF0dGVybixcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uXG4gICAgfSk7XG5cbiAgICBydWxlLmFkZFRhcmdldChuZXcgTGFtYmRhVGFyZ2V0KHRoaXMpKTtcbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUG9saWNpZXNUb1JvbGUoc3RhdGVtZW50czogUG9saWN5U3RhdGVtZW50W10pIHtcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgICB0aGlzLmFkZFRvUm9sZVBvbGljeShzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgc2VjcmV0cyBzdXBwb3J0IHVzaW5nIEFXUyBQYXJhbWV0ZXJzIGFuZCBTZWNyZXRzIExhbWJkYSBFeHRlbnNpb24uXG4gICAqXG4gICAqIFRoZSBleHRlbnNpb24gZmV0Y2hlcyBzZWNyZXRzIGF0IHJ1bnRpbWUgZnJvbTpcbiAgICogLSBTU00gUGFyYW1ldGVyIFN0b3JlOiB2aWEgaHR0cDovL2xvY2FsaG9zdDoyNzczL3N5c3RlbXNtYW5hZ2VyL3BhcmFtZXRlcnMvZ2V0XG4gICAqIC0gU2VjcmV0cyBNYW5hZ2VyOiB2aWEgaHR0cDovL2xvY2FsaG9zdDoyNzczL3NlY3JldHNtYW5hZ2VyL2dldFxuICAgKlxuICAgKiBUaGlzIHJlcGxhY2VzIHRoZSBpbnNlY3VyZSB1bnNhZmVVbndyYXAoKSBwYXR0ZXJuIHdoaWNoIHJlc29sdmVkIHNlY3JldHMgYXRcbiAgICogZGVwbG95IHRpbWUgYW5kIGV4cG9zZWQgdGhlbSBpbiBMYW1iZGEgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgYWRkU2VjcmV0c1N1cHBvcnQoXG4gICAgc2VjcmV0cz86IHN0cmluZ1tdLFxuICAgIHNzbVNlY3JldHNQYXRoPzogc3RyaW5nLFxuICAgIHNlY3JldHNJbXBvcnQ/OiBSZWNvcmQ8c3RyaW5nLCBTZWNyZXRJbXBvcnQ+LFxuICAgIGFwcE5hbWU/OiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lPzogc3RyaW5nLFxuICAgIGFyY2hpdGVjdHVyZT86IEFyY2hpdGVjdHVyZVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBoYXNTZWNyZXRzTWFuYWdlciA9XG4gICAgICBzZWNyZXRzSW1wb3J0ICYmIE9iamVjdC5rZXlzKHNlY3JldHNJbXBvcnQpLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgaGFzU3NtU2VjcmV0cyA9IChzZWNyZXRzPy5sZW5ndGggPz8gMCkgPiAwO1xuXG4gICAgaWYgKCFoYXNTZWNyZXRzTWFuYWdlciAmJiAhaGFzU3NtU2VjcmV0cykgcmV0dXJuO1xuXG4gICAgdGhpcy5hZGRTZWNyZXRzRXh0ZW5zaW9uTGF5ZXIoYXJjaGl0ZWN0dXJlKTtcblxuICAgIGlmIChoYXNTZWNyZXRzTWFuYWdlcikge1xuICAgICAgdGhpcy5hZGRTZWNyZXRzTWFuYWdlclN1cHBvcnQoc2VjcmV0c0ltcG9ydCk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1NzbVNlY3JldHMpIHtcbiAgICAgIHRoaXMuYWRkU3NtU2VjcmV0c1N1cHBvcnQoXG4gICAgICAgIHNlY3JldHMhLFxuICAgICAgICBzc21TZWNyZXRzUGF0aCxcbiAgICAgICAgYXBwTmFtZSxcbiAgICAgICAgZnVuY3Rpb25OYW1lXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIEFXUyBQYXJhbWV0ZXJzIGFuZCBTZWNyZXRzIExhbWJkYSBFeHRlbnNpb24gbGF5ZXIuXG4gICAqIFVzZXMgQ0RLJ3MgUmVnaW9uSW5mbyB0byBhdXRvbWF0aWNhbGx5IHJlc29sdmUgdGhlIGNvcnJlY3QgQVJOIGZvciBlYWNoXG4gICAqIHJlZ2lvbiBhbmQgYXJjaGl0ZWN0dXJlLiBUaGlzIGhhbmRsZXMgdGhlIGZhY3QgdGhhdCBBV1MgcHVibGlzaGVzIHRoZVxuICAgKiBsYXllciBmcm9tIGRpZmZlcmVudCBhY2NvdW50cyBpbiBkaWZmZXJlbnQgcmVnaW9ucy5cbiAgICogQ29uZmlndXJlcyBjYWNoZSBUVEwgZm9yIHJvdGF0aW9uIHN1cHBvcnQuXG4gICAqL1xuICBwcml2YXRlIGFkZFNlY3JldHNFeHRlbnNpb25MYXllcihhcmNoaXRlY3R1cmU/OiBBcmNoaXRlY3R1cmUpOiB2b2lkIHtcbiAgICBjb25zdCByZWdpb24gPSBTdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgY29uc3QgYXJjaFN0cmluZyA9XG4gICAgICBhcmNoaXRlY3R1cmUgPT09IEFyY2hpdGVjdHVyZS5BUk1fNjQgPyBcImFybTY0XCIgOiBcIng4Nl82NFwiO1xuXG4gICAgY29uc3QgcmVnaW9uSW5mbyA9IFJlZ2lvbkluZm8uZ2V0KHJlZ2lvbik7XG4gICAgY29uc3QgbGF5ZXJBcm4gPSByZWdpb25JbmZvLnBhcmFtc0FuZFNlY3JldHNMYW1iZGFMYXllckFybihcbiAgICAgIFNFQ1JFVFNfRVhURU5TSU9OLlZFUlNJT04sXG4gICAgICBhcmNoU3RyaW5nXG4gICAgKTtcblxuICAgIGlmICghbGF5ZXJBcm4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFXUyBQYXJhbWV0ZXJzIGFuZCBTZWNyZXRzIExhbWJkYSBFeHRlbnNpb24gaXMgbm90IGF2YWlsYWJsZSBgICtcbiAgICAgICAgICBgaW4gcmVnaW9uICR7cmVnaW9ufSBmb3IgYXJjaGl0ZWN0dXJlICR7YXJjaFN0cmluZ30uIGAgK1xuICAgICAgICAgIGBDaGVjayBBV1MgZG9jdW1lbnRhdGlvbiBmb3Igc3VwcG9ydGVkIHJlZ2lvbnMuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZExheWVycyhcbiAgICAgIExheWVyVmVyc2lvbi5mcm9tTGF5ZXJWZXJzaW9uQXJuKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHt0aGlzLm5vZGUuaWR9U2VjcmV0c0V4dGVuc2lvbmAsXG4gICAgICAgIGxheWVyQXJuXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICBcIlNFQ1JFVFNfTUFOQUdFUl9UVExcIixcbiAgICAgIFNFQ1JFVFNfRVhURU5TSU9OLkNBQ0hFX1RUTF9TRUNPTkRTXG4gICAgKTtcbiAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgXCJTU01fUEFSQU1FVEVSX1NUT1JFX1RUTFwiLFxuICAgICAgU0VDUkVUU19FWFRFTlNJT04uQ0FDSEVfVFRMX1NFQ09ORFNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBTZWNyZXRzIE1hbmFnZXIgc3VwcG9ydCBmb3IgQ0RLLW1hbmFnZWQgc2VjcmV0cyAoZS5nLiwgZGF0YWJhc2UgY3JlZGVudGlhbHMpLlxuICAgKiBTdG9yZXMgQVJOICsgZmllbGQgYXMgZW52IHZhcnMgLSB0aGUgTGFtYmRhIEV4dGVuc2lvbiBmZXRjaGVzIGFjdHVhbCB2YWx1ZXMgYXQgcnVudGltZS5cbiAgICovXG4gIHByaXZhdGUgYWRkU2VjcmV0c01hbmFnZXJTdXBwb3J0KFxuICAgIHNlY3JldHNJbXBvcnQ6IFJlY29yZDxzdHJpbmcsIFNlY3JldEltcG9ydD5cbiAgKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBba2V5LCBzZWNyZXRJbXBvcnRdIG9mIE9iamVjdC5lbnRyaWVzKHNlY3JldHNJbXBvcnQpKSB7XG4gICAgICBjb25zdCBzZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7dGhpcy5ub2RlLmlkfUltcG9ydGVkU2VjcmV0JHtrZXl9YCxcbiAgICAgICAgc2VjcmV0SW1wb3J0Lm5hbWVcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoYCR7a2V5fV9TRUNSRVRfQVJOYCwgc2VjcmV0LnNlY3JldEFybik7XG4gICAgICBpZiAoc2VjcmV0SW1wb3J0LmZpZWxkKSB7XG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoYCR7a2V5fV9TRUNSRVRfRklFTERgLCBzZWNyZXRJbXBvcnQuZmllbGQpO1xuICAgICAgfVxuXG4gICAgICBzZWNyZXQuZ3JhbnRSZWFkKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJrbXM6RGVjcnlwdFwiLCBcImttczpEZXNjcmliZUtleVwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICBcImttczpWaWFTZXJ2aWNlXCI6IGBzZWNyZXRzbWFuYWdlci4ke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgU1NNIFBhcmFtZXRlciBTdG9yZSBzdXBwb3J0IGZvciB1c2VyLW1hbmFnZWQgc2VjcmV0cyAodmlhIGZqYWxsIHNlY3JldCBhZGQpLlxuICAgKiBTdG9yZXMgYmFzZSBwYXRoIGFuZCBzZWNyZXQgbmFtZXMgYXMgZW52IHZhcnMgZm9yIGNvbnN1bWVyIGNvZGUuXG4gICAqL1xuICBwcml2YXRlIGFkZFNzbVNlY3JldHNTdXBwb3J0KFxuICAgIHNlY3JldHM6IHN0cmluZ1tdLFxuICAgIHNzbVNlY3JldHNQYXRoPzogc3RyaW5nLFxuICAgIGFwcE5hbWU/OiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lPzogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2VQYXRoID0gdGhpcy5kZXJpdmVTc21TZWNyZXRzUGF0aChcbiAgICAgIHNzbVNlY3JldHNQYXRoLFxuICAgICAgYXBwTmFtZSxcbiAgICAgIGZ1bmN0aW9uTmFtZVxuICAgICk7XG5cbiAgICB0aGlzLmFkZEVudmlyb25tZW50KFwiU1NNX1NFQ1JFVFNfUEFUSFwiLCBiYXNlUGF0aCk7XG4gICAgdGhpcy5hZGRFbnZpcm9ubWVudChcIlNTTV9TRUNSRVRfTkFNRVNcIiwgc2VjcmV0cy5qb2luKFwiLFwiKSk7XG5cbiAgICBjb25zdCBzY29wZWRQYXRoID0gYXBwTmFtZSA/IGAvJHthcHBOYW1lfS8qYCA6IGAke2Jhc2VQYXRofS8qYDtcbiAgICB0aGlzLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wic3NtOkdldFBhcmFtZXRlclwiLCBcInNzbTpHZXRQYXJhbWV0ZXJzXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpzc206JHtTdGFjay5vZih0aGlzKS5yZWdpb259Oio6cGFyYW1ldGVyJHtzY29wZWRQYXRofWBcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcImttczpEZWNyeXB0XCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgIFwia21zOlZpYVNlcnZpY2VcIjogYHNzbS4ke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXJpdmUgU1NNIHNlY3JldHMgcGF0aCBmb3IgTGFtYmRhIGZ1bmN0aW9ucy5cbiAgICogUGF0dGVybjogLzxhcHBOYW1lPi9sYW1iZGEvPGZ1bmN0aW9uTmFtZT5cbiAgICovXG4gIHByaXZhdGUgZGVyaXZlU3NtU2VjcmV0c1BhdGgoXG4gICAgZXhwbGljaXRQYXRoPzogc3RyaW5nLFxuICAgIGFwcE5hbWU/OiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lPzogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKGV4cGxpY2l0UGF0aCkge1xuICAgICAgcmV0dXJuIGV4cGxpY2l0UGF0aDtcbiAgICB9XG5cbiAgICBpZiAoIWFwcE5hbWUgfHwgIWZ1bmN0aW9uTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkxhbWJkYSBmdW5jdGlvbiBoYXMgc2VjcmV0cyBkZWZpbmVkIGJ1dCBubyBzc21TZWNyZXRzUGF0aCBpcyBzZXQgXCIgK1xuICAgICAgICAgIFwiYW5kIGFwcE5hbWUvZnVuY3Rpb25OYW1lIGFyZSBub3QgYXZhaWxhYmxlLiBcIiArXG4gICAgICAgICAgXCJFaXRoZXIgc2V0IHNzbVNlY3JldHNQYXRoIGV4cGxpY2l0bHksIG9yIGVuc3VyZSBBcHAuZ2V0TmFtZSgpIHJldHVybnMgYSB2YWx1ZS5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYC8ke2FwcE5hbWV9L2xhbWJkYS8ke2Z1bmN0aW9uTmFtZX1gO1xuICB9XG59XG4iXX0=
@@ -21,8 +21,9 @@ export interface MonitoringRoleConfig {
21
21
  /**
22
22
  * Factory to build a cross-account monitoring IAM role that allows the Fjall webapp
23
23
  * to query CloudWatch metrics, ECS service status, and logs for this application.
24
+ *
24
25
  */
25
26
  export declare class MonitoringRoleFactory {
26
- static build(id: string, config: MonitoringRoleConfig): (app: Construct, scope: Construct) => Role;
27
+ static build(id: string, config: MonitoringRoleConfig): (_app: Construct, scope: Construct) => Role;
27
28
  }
28
29
  export default MonitoringRoleFactory;
@@ -6,110 +6,105 @@ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
6
6
  /**
7
7
  * Factory to build a cross-account monitoring IAM role that allows the Fjall webapp
8
8
  * to query CloudWatch metrics, ECS service status, and logs for this application.
9
+ *
9
10
  */
10
11
  class MonitoringRoleFactory {
11
12
  static build(id, config) {
12
- return (app, scope) => {
13
+ return (_app, scope) => {
13
14
  const stack = aws_cdk_lib_1.Stack.of(scope);
14
15
  const role = new aws_iam_1.Role(scope, id, {
15
16
  roleName: `${config.roleNamePrefix || "FjallMonitoring"}-${config.appName}`,
16
17
  path: config.rolePath || "/",
17
18
  assumedBy: new aws_iam_1.AccountPrincipal(config.webappAccountId),
18
- description: `Cross-account monitoring role for Fjall application: ${config.appName}`,
19
- inlinePolicies: {
20
- MonitoringPolicy: new aws_iam_1.PolicyDocument({
21
- statements: [
22
- // CloudWatch Metrics - all resources
23
- new aws_iam_1.PolicyStatement({
24
- effect: aws_iam_1.Effect.ALLOW,
25
- actions: [
26
- "cloudwatch:GetMetricData",
27
- "cloudwatch:GetMetricStatistics",
28
- "cloudwatch:ListMetrics"
29
- ],
30
- resources: ["*"]
31
- }),
32
- // ECS - scoped to app resources
33
- new aws_iam_1.PolicyStatement({
34
- effect: aws_iam_1.Effect.ALLOW,
35
- actions: [
36
- "ecs:DescribeServices",
37
- "ecs:DescribeTasks",
38
- "ecs:ListTasks",
39
- "ecs:DescribeClusters",
40
- "ecs:ListServices"
41
- ],
42
- resources: ["*"],
43
- conditions: {
44
- StringEquals: {
45
- "aws:ResourceTag/fjall:costAllocation:service": config.appName
46
- }
47
- }
48
- }),
49
- // RDS - describe and monitoring
50
- new aws_iam_1.PolicyStatement({
51
- effect: aws_iam_1.Effect.ALLOW,
52
- actions: [
53
- "rds:DescribeDBInstances",
54
- "rds:DescribeDBClusters",
55
- "rds:DescribeDBProxies",
56
- "rds:ListTagsForResource"
57
- ],
58
- resources: ["*"]
59
- }),
60
- // S3 - bucket metrics and listing
61
- new aws_iam_1.PolicyStatement({
62
- effect: aws_iam_1.Effect.ALLOW,
63
- actions: [
64
- "s3:GetBucketLocation",
65
- "s3:GetBucketMetricsConfiguration",
66
- "s3:GetBucketTagging",
67
- "s3:ListBucket",
68
- "s3:ListAllMyBuckets"
69
- ],
70
- resources: ["*"]
71
- }),
72
- // Lambda - function metrics and status
73
- new aws_iam_1.PolicyStatement({
74
- effect: aws_iam_1.Effect.ALLOW,
75
- actions: [
76
- "lambda:GetFunction",
77
- "lambda:GetFunctionConfiguration",
78
- "lambda:ListFunctions",
79
- "lambda:ListTags"
80
- ],
81
- resources: ["*"]
82
- }),
83
- // Application Load Balancer - metrics and health
84
- new aws_iam_1.PolicyStatement({
85
- effect: aws_iam_1.Effect.ALLOW,
86
- actions: [
87
- "elasticloadbalancing:DescribeLoadBalancers",
88
- "elasticloadbalancing:DescribeTargetGroups",
89
- "elasticloadbalancing:DescribeTargetHealth",
90
- "elasticloadbalancing:DescribeTags"
91
- ],
92
- resources: ["*"]
93
- }),
94
- // CloudWatch Logs - read logs for all app resources
95
- new aws_iam_1.PolicyStatement({
96
- effect: aws_iam_1.Effect.ALLOW,
97
- actions: [
98
- "logs:FilterLogEvents",
99
- "logs:GetLogEvents",
100
- "logs:DescribeLogGroups",
101
- "logs:DescribeLogStreams"
102
- ],
103
- resources: [
104
- `arn:aws:logs:${stack.region}:${stack.account}:log-group:/aws/ecs/${config.appName}*:*`,
105
- `arn:aws:logs:${stack.region}:${stack.account}:log-group:/aws/lambda/${config.appName}*:*`,
106
- `arn:aws:logs:${stack.region}:${stack.account}:log-group:/aws/rds/${config.appName}*:*`
107
- ]
108
- })
109
- ]
110
- })
111
- }
19
+ description: `Cross-account monitoring role for Fjall application: ${config.appName}`
112
20
  });
21
+ // CloudWatch Metrics - all resources
22
+ role.addToPolicy(new aws_iam_1.PolicyStatement({
23
+ effect: aws_iam_1.Effect.ALLOW,
24
+ actions: [
25
+ "cloudwatch:GetMetricData",
26
+ "cloudwatch:GetMetricStatistics",
27
+ "cloudwatch:ListMetrics"
28
+ ],
29
+ resources: ["*"]
30
+ }));
31
+ // ECS - scoped to app resources
32
+ role.addToPolicy(new aws_iam_1.PolicyStatement({
33
+ effect: aws_iam_1.Effect.ALLOW,
34
+ actions: [
35
+ "ecs:DescribeServices",
36
+ "ecs:DescribeTasks",
37
+ "ecs:ListTasks",
38
+ "ecs:DescribeClusters",
39
+ "ecs:ListServices"
40
+ ],
41
+ resources: ["*"],
42
+ conditions: {
43
+ StringEquals: {
44
+ "aws:ResourceTag/fjall:costAllocation:service": config.appName
45
+ }
46
+ }
47
+ }));
48
+ // RDS - describe and monitoring
49
+ role.addToPolicy(new aws_iam_1.PolicyStatement({
50
+ effect: aws_iam_1.Effect.ALLOW,
51
+ actions: [
52
+ "rds:DescribeDBInstances",
53
+ "rds:DescribeDBClusters",
54
+ "rds:DescribeDBProxies",
55
+ "rds:ListTagsForResource"
56
+ ],
57
+ resources: ["*"]
58
+ }));
59
+ // S3 - bucket metrics and listing
60
+ role.addToPolicy(new aws_iam_1.PolicyStatement({
61
+ effect: aws_iam_1.Effect.ALLOW,
62
+ actions: [
63
+ "s3:GetBucketLocation",
64
+ "s3:GetBucketMetricsConfiguration",
65
+ "s3:GetBucketTagging",
66
+ "s3:ListBucket",
67
+ "s3:ListAllMyBuckets"
68
+ ],
69
+ resources: ["*"]
70
+ }));
71
+ // Lambda - function metrics and status
72
+ role.addToPolicy(new aws_iam_1.PolicyStatement({
73
+ effect: aws_iam_1.Effect.ALLOW,
74
+ actions: [
75
+ "lambda:GetFunction",
76
+ "lambda:GetFunctionConfiguration",
77
+ "lambda:ListFunctions",
78
+ "lambda:ListTags"
79
+ ],
80
+ resources: ["*"]
81
+ }));
82
+ // Application Load Balancer - metrics and health
83
+ role.addToPolicy(new aws_iam_1.PolicyStatement({
84
+ effect: aws_iam_1.Effect.ALLOW,
85
+ actions: [
86
+ "elasticloadbalancing:DescribeLoadBalancers",
87
+ "elasticloadbalancing:DescribeTargetGroups",
88
+ "elasticloadbalancing:DescribeTargetHealth",
89
+ "elasticloadbalancing:DescribeTags"
90
+ ],
91
+ resources: ["*"]
92
+ }));
93
+ // CloudWatch Logs - read logs for all app resources
94
+ role.addToPolicy(new aws_iam_1.PolicyStatement({
95
+ effect: aws_iam_1.Effect.ALLOW,
96
+ actions: [
97
+ "logs:FilterLogEvents",
98
+ "logs:GetLogEvents",
99
+ "logs:DescribeLogGroups",
100
+ "logs:DescribeLogStreams"
101
+ ],
102
+ resources: [
103
+ `arn:aws:logs:${stack.region}:${stack.account}:log-group:/aws/ecs/${config.appName}*:*`,
104
+ `arn:aws:logs:${stack.region}:${stack.account}:log-group:/aws/lambda/${config.appName}*:*`,
105
+ `arn:aws:logs:${stack.region}:${stack.account}:log-group:/aws/rds/${config.appName}*:*`
106
+ ]
107
+ }));
113
108
  // Export the role ARN so it can be retrieved after deployment
114
109
  new aws_cdk_lib_1.CfnOutput(scope, `${id}Arn`, {
115
110
  value: role.roleArn,
@@ -122,4 +117,4 @@ class MonitoringRoleFactory {
122
117
  }
123
118
  exports.MonitoringRoleFactory = MonitoringRoleFactory;
124
119
  exports.default = MonitoringRoleFactory;
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXRvcmluZ1JvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9tb25pdG9yaW5nL21vbml0b3JpbmdSb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUErQztBQUMvQyxpREFNNkI7QUF5QjdCOzs7R0FHRztBQUNILE1BQWEscUJBQXFCO0lBQ3pCLE1BQU0sQ0FBQyxLQUFLLENBQ2pCLEVBQVUsRUFDVixNQUE0QjtRQUU1QixPQUFPLENBQUMsR0FBYyxFQUFFLEtBQWdCLEVBQUUsRUFBRTtZQUMxQyxNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU5QixNQUFNLElBQUksR0FBRyxJQUFJLGNBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUMvQixRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsY0FBYyxJQUFJLGlCQUFpQixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQzNFLElBQUksRUFBRSxNQUFNLENBQUMsUUFBUSxJQUFJLEdBQUc7Z0JBQzVCLFNBQVMsRUFBRSxJQUFJLDBCQUFnQixDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7Z0JBQ3ZELFdBQVcsRUFBRSx3REFBd0QsTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDckYsY0FBYyxFQUFFO29CQUNkLGdCQUFnQixFQUFFLElBQUksd0JBQWMsQ0FBQzt3QkFDbkMsVUFBVSxFQUFFOzRCQUNWLHFDQUFxQzs0QkFDckMsSUFBSSx5QkFBZSxDQUFDO2dDQUNsQixNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO2dDQUNwQixPQUFPLEVBQUU7b0NBQ1AsMEJBQTBCO29DQUMxQixnQ0FBZ0M7b0NBQ2hDLHdCQUF3QjtpQ0FDekI7Z0NBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDOzZCQUNqQixDQUFDOzRCQUNGLGdDQUFnQzs0QkFDaEMsSUFBSSx5QkFB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U3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIFJvbGUsXG4gIEFjY291bnRQcmluY2lwYWwsXG4gIFBvbGljeURvY3VtZW50LFxuICBQb2xpY3lTdGF0ZW1lbnQsXG4gIEVmZmVjdFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1vbml0b3JpbmdSb2xlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgYWNjb3VudCBJRCBvZiB0aGUgRmphbGwgd2ViYXBwIHRoYXQgd2lsbCBhc3N1bWUgdGhpcyByb2xlXG4gICAqL1xuICB3ZWJhcHBBY2NvdW50SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIG5hbWUgdG8gc2NvcGUgdGhlIHJvbGUncyBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgYXBwTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCByb2xlIG5hbWUgcHJlZml4LiBEZWZhdWx0cyB0byBcIkZqYWxsTW9uaXRvcmluZ1wiXG4gICAqL1xuICByb2xlTmFtZVByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgSUFNIHBhdGggZm9yIHRoZSByb2xlLiBEZWZhdWx0cyB0byBcIi9cIlxuICAgKi9cbiAgcm9sZVBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmFjdG9yeSB0byBidWlsZCBhIGNyb3NzLWFjY291bnQgbW9uaXRvcmluZyBJQU0gcm9sZSB0aGF0IGFsbG93cyB0aGUgRmphbGwgd2ViYXBwXG4gKiB0byBxdWVyeSBDbG91ZFdhdGNoIG1ldHJpY3MsIEVDUyBzZXJ2aWNlIHN0YXR1cywgYW5kIGxvZ3MgZm9yIHRoaXMgYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25pdG9yaW5nUm9sZUZhY3Rvcnkge1xuICBwdWJsaWMgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgY29uZmlnOiBNb25pdG9yaW5nUm9sZUNvbmZpZ1xuICApOiAoYXBwOiBDb25zdHJ1Y3QsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IFJvbGUge1xuICAgIHJldHVybiAoYXBwOiBDb25zdHJ1Y3QsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IHtcbiAgICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuXG4gICAgICBjb25zdCByb2xlID0gbmV3IFJvbGUoc2NvcGUsIGlkLCB7XG4gICAgICAgIHJvbGVOYW1lOiBgJHtjb25maWcucm9sZU5hbWVQcmVmaXggfHwgXCJGamFsbE1vbml0b3JpbmdcIn0tJHtjb25maWcuYXBwTmFtZX1gLFxuICAgICAgICBwYXRoOiBjb25maWcucm9sZVBhdGggfHwgXCIvXCIsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IEFjY291bnRQcmluY2lwYWwoY29uZmlnLndlYmFwcEFjY291bnRJZCksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgQ3Jvc3MtYWNjb3VudCBtb25pdG9yaW5nIHJvbGUgZm9yIEZqYWxsIGFwcGxpY2F0aW9uOiAke2NvbmZpZy5hcHBOYW1lfWAsXG4gICAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgICAgTW9uaXRvcmluZ1BvbGljeTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgICAgLy8gQ2xvdWRXYXRjaCBNZXRyaWNzIC0gYWxsIHJlc291cmNlc1xuICAgICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICBcImNsb3Vkd2F0Y2g6R2V0TWV0cmljRGF0YVwiLFxuICAgICAgICAgICAgICAgICAgXCJjbG91ZHdhdGNoOkdldE1ldHJpY1N0YXRpc3RpY3NcIixcbiAgICAgICAgICAgICAgICAgIFwiY2xvdWR3YXRjaDpMaXN0TWV0cmljc1wiXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC8vIEVDUyAtIHNjb3BlZCB0byBhcHAgcmVzb3VyY2VzXG4gICAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgIFwiZWNzOkRlc2NyaWJlU2VydmljZXNcIixcbiAgICAgICAgICAgICAgICAgIFwiZWNzOkRlc2NyaWJlVGFza3NcIixcbiAgICAgICAgICAgICAgICAgIFwiZWNzOkxpc3RUYXNrc1wiLFxuICAgICAgICAgICAgICAgICAgXCJlY3M6RGVzY3JpYmVDbHVzdGVyc1wiLFxuICAgICAgICAgICAgICAgICAgXCJlY3M6TGlzdFNlcnZpY2VzXCJcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgICAgICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJhd3M6UmVzb3VyY2VUYWcvZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOlxuICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hcHBOYW1lXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgLy8gUkRTIC0gZGVzY3JpYmUgYW5kIG1vbml0b3JpbmdcbiAgICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgXCJyZHM6RGVzY3JpYmVEQkluc3RhbmNlc1wiLFxuICAgICAgICAgICAgICAgICAgXCJyZHM6RGVzY3JpYmVEQkNsdXN0ZXJzXCIsXG4gICAgICAgICAgICAgICAgICBcInJkczpEZXNjcmliZURCUHJveGllc1wiLFxuICAgICAgICAgICAgICAgICAgXCJyZHM6TGlzdFRhZ3NGb3JSZXNvdXJjZVwiXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC8vIFMzIC0gYnVja2V0IG1ldHJpY3MgYW5kIGxpc3RpbmdcbiAgICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgXCJzMzpHZXRCdWNrZXRMb2NhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgXCJzMzpHZXRCdWNrZXRNZXRyaWNzQ29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgXCJzMzpHZXRCdWNrZXRUYWdnaW5nXCIsXG4gICAgICAgICAgICAgICAgICBcInMzOkxpc3RCdWNrZXRcIixcbiAgICAgICAgICAgICAgICAgIFwiczM6TGlzdEFsbE15QnVja2V0c1wiXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC8vIExhbWJkYSAtIGZ1bmN0aW9uIG1ldHJpY3MgYW5kIHN0YXR1c1xuICAgICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICBcImxhbWJkYTpHZXRGdW5jdGlvblwiLFxuICAgICAgICAgICAgICAgICAgXCJsYW1iZGE6R2V0RnVuY3Rpb25Db25maWd1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgICBcImxhbWJkYTpMaXN0RnVuY3Rpb25zXCIsXG4gICAgICAgICAgICAgICAgICBcImxhbWJkYTpMaXN0VGFnc1wiXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIC8vIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgLSBtZXRyaWNzIGFuZCBoZWFsdGhcbiAgICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgXCJlbGFzdGljbG9hZGJhbGFuY2luZzpEZXNjcmliZUxvYWRCYWxhbmNlcnNcIixcbiAgICAgICAgICAgICAgICAgIFwiZWxhc3RpY2xvYWRiYWxhbmNpbmc6RGVzY3JpYmVUYXJnZXRHcm91cHNcIixcbiAgICAgICAgICAgICAgICAgIFwiZWxhc3RpY2xvYWRiYWxhbmNpbmc6RGVzY3JpYmVUYXJnZXRIZWFsdGhcIixcbiAgICAgICAgICAgICAgICAgIFwiZWxhc3RpY2xvYWRiYWxhbmNpbmc6RGVzY3JpYmVUYWdzXCJcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgLy8gQ2xvdWRXYXRjaCBMb2dzIC0gcmVhZCBsb2dzIGZvciBhbGwgYXBwIHJlc291cmNlc1xuICAgICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICBcImxvZ3M6RmlsdGVyTG9nRXZlbnRzXCIsXG4gICAgICAgICAgICAgICAgICBcImxvZ3M6R2V0TG9nRXZlbnRzXCIsXG4gICAgICAgICAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dHcm91cHNcIixcbiAgICAgICAgICAgICAgICAgIFwibG9nczpEZXNjcmliZUxvZ1N0cmVhbXNcIlxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICBgYXJuOmF3czpsb2dzOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OmxvZy1ncm91cDovYXdzL2Vjcy8ke2NvbmZpZy5hcHBOYW1lfSo6KmAsXG4gICAgICAgICAgICAgICAgICBgYXJuOmF3czpsb2dzOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OmxvZy1ncm91cDovYXdzL2xhbWJkYS8ke2NvbmZpZy5hcHBOYW1lfSo6KmAsXG4gICAgICAgICAgICAgICAgICBgYXJuOmF3czpsb2dzOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OmxvZy1ncm91cDovYXdzL3Jkcy8ke2NvbmZpZy5hcHBOYW1lfSo6KmBcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEV4cG9ydCB0aGUgcm9sZSBBUk4gc28gaXQgY2FuIGJlIHJldHJpZXZlZCBhZnRlciBkZXBsb3ltZW50XG4gICAgICBuZXcgQ2ZuT3V0cHV0KHNjb3BlLCBgJHtpZH1Bcm5gLCB7XG4gICAgICAgIHZhbHVlOiByb2xlLnJvbGVBcm4sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgQVJOIG9mIHRoZSBtb25pdG9yaW5nIHJvbGUgZm9yICR7Y29uZmlnLmFwcE5hbWV9YCxcbiAgICAgICAgZXhwb3J0TmFtZTogYCR7Y29uZmlnLmFwcE5hbWV9LU1vbml0b3JpbmdSb2xlQXJuYFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByb2xlO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9uaXRvcmluZ1JvbGVGYWN0b3J5O1xuIl19
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uaXRvcmluZ1JvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9tb25pdG9yaW5nL21vbml0b3JpbmdSb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUErQztBQUMvQyxpREFLNkI7QUF5QjdCOzs7O0dBSUc7QUFDSCxNQUFhLHFCQUFxQjtJQUN6QixNQUFNLENBQUMsS0FBSyxDQUNqQixFQUFVLEVBQ1YsTUFBNEI7UUFFNUIsT0FBTyxDQUFDLElBQWUsRUFBRSxLQUFnQixFQUFFLEVBQUU7WUFDM0MsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxjQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtnQkFDL0IsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLGNBQWMsSUFBSSxpQkFBaUIsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUMzRSxJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxHQUFHO2dCQUM1QixTQUFTLEVBQUUsSUFBSSwwQkFBZ0IsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO2dCQUN2RCxXQUFXLEVBQUUsd0RBQXdELE1BQU0sQ0FBQyxPQUFPLEVBQUU7YUFDdEYsQ0FBQyxDQUFDO1lBRUgscUNBQXFDO1lBQ3JDLElBQUksQ0FBQyxXQUFXLENBQ2QsSUFBSSx5QkFBZSxDQUFDO2dCQUNsQixNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO2dCQUNwQixPQUFPLEVBQUU7b0JBQ1AsMEJBQTBCO29CQUMxQixnQ0FBZ0M7b0JBQ2hDLHdCQUF3QjtpQkFDekI7Z0JBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO2FBQ2pCLENBQUMsQ0FDSCxDQUFDO1lBRUYsZ0NBQWdDO1lBQ2hDLElBQUksQ0FBQyxXQUFXLENBQ2QsSUFBSSx5QkFBZSxDQUFD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QUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXJJRCxzREFxSUM7QUFFRCxrQkFBZSxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIFJvbGUsXG4gIEFjY291bnRQcmluY2lwYWwsXG4gIFBvbGljeVN0YXRlbWVudCxcbiAgRWZmZWN0XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyB0eXBlIENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9uaXRvcmluZ1JvbGVDb25maWcge1xuICAvKipcbiAgICogVGhlIEFXUyBhY2NvdW50IElEIG9mIHRoZSBGamFsbCB3ZWJhcHAgdGhhdCB3aWxsIGFzc3VtZSB0aGlzIHJvbGVcbiAgICovXG4gIHdlYmFwcEFjY291bnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXBwbGljYXRpb24gbmFtZSB0byBzY29wZSB0aGUgcm9sZSdzIHBlcm1pc3Npb25zIHRvXG4gICAqL1xuICBhcHBOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHJvbGUgbmFtZSBwcmVmaXguIERlZmF1bHRzIHRvIFwiRmphbGxNb25pdG9yaW5nXCJcbiAgICovXG4gIHJvbGVOYW1lUHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBJQU0gcGF0aCBmb3IgdGhlIHJvbGUuIERlZmF1bHRzIHRvIFwiL1wiXG4gICAqL1xuICByb2xlUGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGYWN0b3J5IHRvIGJ1aWxkIGEgY3Jvc3MtYWNjb3VudCBtb25pdG9yaW5nIElBTSByb2xlIHRoYXQgYWxsb3dzIHRoZSBGamFsbCB3ZWJhcHBcbiAqIHRvIHF1ZXJ5IENsb3VkV2F0Y2ggbWV0cmljcywgRUNTIHNlcnZpY2Ugc3RhdHVzLCBhbmQgbG9ncyBmb3IgdGhpcyBhcHBsaWNhdGlvbi5cbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25pdG9yaW5nUm9sZUZhY3Rvcnkge1xuICBwdWJsaWMgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgY29uZmlnOiBNb25pdG9yaW5nUm9sZUNvbmZpZ1xuICApOiAoX2FwcDogQ29uc3RydWN0LCBzY29wZTogQ29uc3RydWN0KSA9PiBSb2xlIHtcbiAgICByZXR1cm4gKF9hcHA6IENvbnN0cnVjdCwgc2NvcGU6IENvbnN0cnVjdCkgPT4ge1xuICAgICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG5cbiAgICAgIGNvbnN0IHJvbGUgPSBuZXcgUm9sZShzY29wZSwgaWQsIHtcbiAgICAgICAgcm9sZU5hbWU6IGAke2NvbmZpZy5yb2xlTmFtZVByZWZpeCB8fCBcIkZqYWxsTW9uaXRvcmluZ1wifS0ke2NvbmZpZy5hcHBOYW1lfWAsXG4gICAgICAgIHBhdGg6IGNvbmZpZy5yb2xlUGF0aCB8fCBcIi9cIixcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgQWNjb3VudFByaW5jaXBhbChjb25maWcud2ViYXBwQWNjb3VudElkKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGBDcm9zcy1hY2NvdW50IG1vbml0b3Jpbmcgcm9sZSBmb3IgRmphbGwgYXBwbGljYXRpb246ICR7Y29uZmlnLmFwcE5hbWV9YFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENsb3VkV2F0Y2ggTWV0cmljcyAtIGFsbCByZXNvdXJjZXNcbiAgICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiY2xvdWR3YXRjaDpHZXRNZXRyaWNEYXRhXCIsXG4gICAgICAgICAgICBcImNsb3Vkd2F0Y2g6R2V0TWV0cmljU3RhdGlzdGljc1wiLFxuICAgICAgICAgICAgXCJjbG91ZHdhdGNoOkxpc3RNZXRyaWNzXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgLy8gRUNTIC0gc2NvcGVkIHRvIGFwcCByZXNvdXJjZXNcbiAgICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiZWNzOkRlc2NyaWJlU2VydmljZXNcIixcbiAgICAgICAgICAgIFwiZWNzOkRlc2NyaWJlVGFza3NcIixcbiAgICAgICAgICAgIFwiZWNzOkxpc3RUYXNrc1wiLFxuICAgICAgICAgICAgXCJlY3M6RGVzY3JpYmVDbHVzdGVyc1wiLFxuICAgICAgICAgICAgXCJlY3M6TGlzdFNlcnZpY2VzXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICAgXCJhd3M6UmVzb3VyY2VUYWcvZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiBjb25maWcuYXBwTmFtZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIC8vIFJEUyAtIGRlc2NyaWJlIGFuZCBtb25pdG9yaW5nXG4gICAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICBcInJkczpEZXNjcmliZURCSW5zdGFuY2VzXCIsXG4gICAgICAgICAgICBcInJkczpEZXNjcmliZURCQ2x1c3RlcnNcIixcbiAgICAgICAgICAgIFwicmRzOkRlc2NyaWJlREJQcm94aWVzXCIsXG4gICAgICAgICAgICBcInJkczpMaXN0VGFnc0ZvclJlc291cmNlXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgLy8gUzMgLSBidWNrZXQgbWV0cmljcyBhbmQgbGlzdGluZ1xuICAgICAgcm9sZS5hZGRUb1BvbGljeShcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgXCJzMzpHZXRCdWNrZXRMb2NhdGlvblwiLFxuICAgICAgICAgICAgXCJzMzpHZXRCdWNrZXRNZXRyaWNzQ29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgXCJzMzpHZXRCdWNrZXRUYWdnaW5nXCIsXG4gICAgICAgICAgICBcInMzOkxpc3RCdWNrZXRcIixcbiAgICAgICAgICAgIFwiczM6TGlzdEFsbE15QnVja2V0c1wiXG4gICAgICAgICAgXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIC8vIExhbWJkYSAtIGZ1bmN0aW9uIG1ldHJpY3MgYW5kIHN0YXR1c1xuICAgICAgcm9sZS5hZGRUb1BvbGljeShcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgXCJsYW1iZGE6R2V0RnVuY3Rpb25cIixcbiAgICAgICAgICAgIFwibGFtYmRhOkdldEZ1bmN0aW9uQ29uZmlndXJhdGlvblwiLFxuICAgICAgICAgICAgXCJsYW1iZGE6TGlzdEZ1bmN0aW9uc1wiLFxuICAgICAgICAgICAgXCJsYW1iZGE6TGlzdFRhZ3NcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICAvLyBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIC0gbWV0cmljcyBhbmQgaGVhbHRoXG4gICAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICBcImVsYXN0aWNsb2FkYmFsYW5jaW5nOkRlc2NyaWJlTG9hZEJhbGFuY2Vyc1wiLFxuICAgICAgICAgICAgXCJlbGFzdGljbG9hZGJhbGFuY2luZzpEZXNjcmliZVRhcmdldEdyb3Vwc1wiLFxuICAgICAgICAgICAgXCJlbGFzdGljbG9hZGJhbGFuY2luZzpEZXNjcmliZVRhcmdldEhlYWx0aFwiLFxuICAgICAgICAgICAgXCJlbGFzdGljbG9hZGJhbGFuY2luZzpEZXNjcmliZVRhZ3NcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICAvLyBDbG91ZFdhdGNoIExvZ3MgLSByZWFkIGxvZ3MgZm9yIGFsbCBhcHAgcmVzb3VyY2VzXG4gICAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICBcImxvZ3M6RmlsdGVyTG9nRXZlbnRzXCIsXG4gICAgICAgICAgICBcImxvZ3M6R2V0TG9nRXZlbnRzXCIsXG4gICAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dHcm91cHNcIixcbiAgICAgICAgICAgIFwibG9nczpEZXNjcmliZUxvZ1N0cmVhbXNcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICBgYXJuOmF3czpsb2dzOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OmxvZy1ncm91cDovYXdzL2Vjcy8ke2NvbmZpZy5hcHBOYW1lfSo6KmAsXG4gICAgICAgICAgICBgYXJuOmF3czpsb2dzOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OmxvZy1ncm91cDovYXdzL2xhbWJkYS8ke2NvbmZpZy5hcHBOYW1lfSo6KmAsXG4gICAgICAgICAgICBgYXJuOmF3czpsb2dzOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OmxvZy1ncm91cDovYXdzL3Jkcy8ke2NvbmZpZy5hcHBOYW1lfSo6KmBcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICAvLyBFeHBvcnQgdGhlIHJvbGUgQVJOIHNvIGl0IGNhbiBiZSByZXRyaWV2ZWQgYWZ0ZXIgZGVwbG95bWVudFxuICAgICAgbmV3IENmbk91dHB1dChzY29wZSwgYCR7aWR9QXJuYCwge1xuICAgICAgICB2YWx1ZTogcm9sZS5yb2xlQXJuLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEFSTiBvZiB0aGUgbW9uaXRvcmluZyByb2xlIGZvciAke2NvbmZpZy5hcHBOYW1lfWAsXG4gICAgICAgIGV4cG9ydE5hbWU6IGAke2NvbmZpZy5hcHBOYW1lfS1Nb25pdG9yaW5nUm9sZUFybmBcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcm9sZTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vbml0b3JpbmdSb2xlRmFjdG9yeTtcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fjall/components-infrastructure",
3
- "version": "0.87.15",
3
+ "version": "0.87.16",
4
4
  "bin": {
5
5
  "infrastructure": "bin/infrastructure.js"
6
6
  },
@@ -36,7 +36,7 @@
36
36
  },
37
37
  "dependencies": {
38
38
  "@aws-sdk/client-organizations": "^3.716.0",
39
- "@fjall/util": "^0.87.15",
39
+ "@fjall/util": "^0.87.16",
40
40
  "@pepperize/cdk-organizations": "^0.7.135",
41
41
  "cdk-time-sleep": "^1.0.0",
42
42
  "constructs": "^10.0.0",
@@ -45,7 +45,7 @@
45
45
  "overrides": {
46
46
  "@smithy/core": "2.5.5"
47
47
  },
48
- "gitHead": "afb7df6ae8f219588ac426cc6f11fb886c6a9e15",
48
+ "gitHead": "362e42fd6a243be8ac65c96a7b21f5e9239c04c9",
49
49
  "peerDependencies": {
50
50
  "aws-cdk": "^2.206.0",
51
51
  "aws-cdk-lib": "^2.206.0",