@orcabus/platform-cdk-constructs 0.0.11 → 0.0.13-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/.jsii +66 -2
  2. package/api-gateway/api-gateway.js +1 -1
  3. package/api-gateway/config.d.ts +14 -30
  4. package/api-gateway/config.js +1 -1
  5. package/deployment-stack-pipeline/artifact-bucket.js +1 -1
  6. package/deployment-stack-pipeline/pipeline.js +1 -1
  7. package/dynamodb/index.js +2 -2
  8. package/ecs/index.js +1 -1
  9. package/lambda/config.d.ts +1 -2
  10. package/lambda/config.js +6 -11
  11. package/lambda/index.js +10 -7
  12. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/__init__.py +92 -0
  13. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/create_helpers.py +34 -0
  14. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/globals.py +13 -0
  15. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/models.py +50 -0
  16. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/query_helpers.py +51 -0
  17. package/lambda/layers/orcabus_api_tools/src/orcabus_api_tools/fastq_decompression/update_helpers.py +37 -0
  18. package/named-lambda-role/index.js +1 -1
  19. package/package.json +1 -1
  20. package/provider-function/index.js +1 -1
  21. package/shared-config/file-manager.d.ts +2 -1
  22. package/shared-config/file-manager.js +14 -13
  23. package/shared-config/icav2.d.ts +4 -0
  24. package/shared-config/icav2.js +15 -0
  25. package/shared-config/index.d.ts +2 -0
  26. package/shared-config/index.js +4 -2
  27. package/shared-config/networking.js +2 -2
  28. package/shared-config/s3.d.ts +3 -0
  29. package/shared-config/s3.js +14 -0
  30. package/utils/index.d.ts +1 -18
  31. package/utils/index.js +15 -34
package/.jsii CHANGED
@@ -4116,6 +4116,13 @@
4116
4116
  },
4117
4117
  "symbolId": "shared-config/file-manager:"
4118
4118
  },
4119
+ "@orcabus/platform-cdk-constructs.sharedConfig.icav2": {
4120
+ "locationInModule": {
4121
+ "filename": "shared-config/index.ts",
4122
+ "line": 7
4123
+ },
4124
+ "symbolId": "shared-config/icav2:"
4125
+ },
4119
4126
  "@orcabus/platform-cdk-constructs.sharedConfig.networking": {
4120
4127
  "locationInModule": {
4121
4128
  "filename": "shared-config/index.ts",
@@ -4123,6 +4130,13 @@
4123
4130
  },
4124
4131
  "symbolId": "shared-config/networking:"
4125
4132
  },
4133
+ "@orcabus/platform-cdk-constructs.sharedConfig.s3": {
4134
+ "locationInModule": {
4135
+ "filename": "shared-config/index.ts",
4136
+ "line": 6
4137
+ },
4138
+ "symbolId": "shared-config/s3:"
4139
+ },
4126
4140
  "@orcabus/platform-cdk-constructs.utils": {
4127
4141
  "locationInModule": {
4128
4142
  "filename": "index.ts",
@@ -4187,6 +4201,56 @@
4187
4201
  ],
4188
4202
  "symbolId": "api-gateway/api-gateway:ApiGwLogsConfig"
4189
4203
  },
4204
+ "@orcabus/platform-cdk-constructs.apigateway.LogsConfigProps": {
4205
+ "assembly": "@orcabus/platform-cdk-constructs",
4206
+ "datatype": true,
4207
+ "docs": {
4208
+ "stability": "experimental"
4209
+ },
4210
+ "fqn": "@orcabus/platform-cdk-constructs.apigateway.LogsConfigProps",
4211
+ "kind": "interface",
4212
+ "locationInModule": {
4213
+ "filename": "api-gateway/config.ts",
4214
+ "line": 6
4215
+ },
4216
+ "name": "LogsConfigProps",
4217
+ "namespace": "apigateway",
4218
+ "properties": [
4219
+ {
4220
+ "abstract": true,
4221
+ "docs": {
4222
+ "stability": "experimental",
4223
+ "summary": "Removal policy for the log group."
4224
+ },
4225
+ "immutable": true,
4226
+ "locationInModule": {
4227
+ "filename": "api-gateway/config.ts",
4228
+ "line": 15
4229
+ },
4230
+ "name": "removalPolicy",
4231
+ "type": {
4232
+ "fqn": "aws-cdk-lib.RemovalPolicy"
4233
+ }
4234
+ },
4235
+ {
4236
+ "abstract": true,
4237
+ "docs": {
4238
+ "stability": "experimental",
4239
+ "summary": "Retention policy for the API Gateway logs."
4240
+ },
4241
+ "immutable": true,
4242
+ "locationInModule": {
4243
+ "filename": "api-gateway/config.ts",
4244
+ "line": 10
4245
+ },
4246
+ "name": "retention",
4247
+ "type": {
4248
+ "fqn": "aws-cdk-lib.aws_logs.RetentionDays"
4249
+ }
4250
+ }
4251
+ ],
4252
+ "symbolId": "api-gateway/config:LogsConfigProps"
4253
+ },
4190
4254
  "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway": {
4191
4255
  "assembly": "@orcabus/platform-cdk-constructs",
4192
4256
  "base": "constructs.Construct",
@@ -6307,6 +6371,6 @@
6307
6371
  "symbolId": "shared-config/networking:OrcaBusVpc"
6308
6372
  }
6309
6373
  },
6310
- "version": "0.0.11",
6311
- "fingerprint": "jaizXR8QR2/TTOtytaHJ7+KruEKnMkp2s2X0VAXuXJY="
6374
+ "version": "0.0.13-beta.0",
6375
+ "fingerprint": "CxUXlbA9e8qxz9bX7cn2aEg0wnOJK6flcXSfBkwPSes="
6312
6376
  }
@@ -15,7 +15,7 @@ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
15
15
  const aws_route53_targets_1 = require("aws-cdk-lib/aws-route53-targets");
16
16
  const config_1 = require("./config");
17
17
  class OrcaBusApiGateway extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "0.0.11" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "0.0.13-beta.0" };
19
19
  /**
20
20
  * The AWS region where the API Gateway is deployed.
21
21
  */
@@ -1,25 +1,18 @@
1
1
  import { RetentionDays } from "aws-cdk-lib/aws-logs";
2
2
  import { RemovalPolicy } from "aws-cdk-lib";
3
- import { StageName } from "../utils";
4
- export declare const DEFAULT_LOGS_CONFIG: {
5
- BETA: {
6
- retention: RetentionDays;
7
- removalPolicy: RemovalPolicy;
8
- };
9
- GAMMA: {
10
- retention: RetentionDays;
11
- removalPolicy: RemovalPolicy;
12
- };
13
- PROD: {
14
- retention: RetentionDays;
15
- removalPolicy: RemovalPolicy;
16
- };
17
- };
18
- export declare const DEFAULT_ALLOW_CORS_ORIGINS: {
19
- BETA: string[];
20
- GAMMA: string[];
21
- PROD: string[];
22
- };
3
+ import { StageName } from "../shared-config/accounts";
4
+ export interface LogsConfigProps {
5
+ /**
6
+ * Retention policy for the API Gateway logs.
7
+ */
8
+ readonly retention: RetentionDays;
9
+ /**
10
+ * Removal policy for the log group
11
+ */
12
+ readonly removalPolicy: RemovalPolicy;
13
+ }
14
+ export declare const DEFAULT_LOGS_CONFIG: Record<StageName, LogsConfigProps>;
15
+ export declare const DEFAULT_ALLOW_CORS_ORIGINS: Record<StageName, string[]>;
23
16
  export declare const DEFAULT_COGNITO_CLIENT_ID_PARAMETER_NAME_ARRAY: string[];
24
17
  export declare const DEFAULT_COGNITO_USER_POOL_ID_PARAMETER_NAME = "/data_portal/client/cog_user_pool_id";
25
18
  export declare const CERTIFICATE_ARN_PARAMETER_NAME = "/umccr/certificate_arn";
@@ -28,14 +21,5 @@ export declare const HOSTED_ZONE_ID_PARAMETER_NAME = "/hosted_zone/umccr/id";
28
21
  export declare const getDefaultApiGatewayConfiguration: (stage: StageName) => {
29
22
  cognitoClientIdParameterNameArray: string[];
30
23
  corsAllowOrigins: string[];
31
- apiGwLogsConfig: {
32
- retention: RetentionDays;
33
- removalPolicy: RemovalPolicy;
34
- } | {
35
- retention: RetentionDays;
36
- removalPolicy: RemovalPolicy;
37
- } | {
38
- retention: RetentionDays;
39
- removalPolicy: RemovalPolicy;
40
- };
24
+ apiGwLogsConfig: LogsConfigProps;
41
25
  };
@@ -38,4 +38,4 @@ const getDefaultApiGatewayConfiguration = (stage) => {
38
38
  };
39
39
  };
40
40
  exports.getDefaultApiGatewayConfiguration = getDefaultApiGatewayConfiguration;
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFxRDtBQUNyRCw2Q0FBNEM7QUFHL0IsUUFBQSxtQkFBbUIsR0FBRztJQUNqQyxJQUFJLEVBQUU7UUFDSixTQUFTLEVBQUUsd0JBQWEsQ0FBQyxTQUFTO1FBQ2xDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87S0FDckM7SUFDRCxLQUFLLEVBQUU7UUFDTCxTQUFTLEVBQUUsd0JBQWEsQ0FBQyxTQUFTO1FBQ2xDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87S0FDckM7SUFDRCxJQUFJLEVBQUU7UUFDSixTQUFTLEVBQUUsd0JBQWEsQ0FBQyxTQUFTO1FBQ2xDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE1BQU07S0FDcEM7Q0FDRixDQUFDO0FBRVcsUUFBQSwwQkFBMEIsR0FBRztJQUN4QyxJQUFJLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztJQUN0QyxLQUFLLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztJQUN2QyxJQUFJLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSwwQkFBMEIsQ0FBQztDQUNwRSxDQUFDO0FBRVcsUUFBQSw4Q0FBOEMsR0FBRztJQUM1RCxtREFBbUQsRUFBRSw2QkFBNkI7SUFDbEYsaUNBQWlDLEVBQUUsNENBQTRDO0NBQ2hGLENBQUM7QUFFVyxRQUFBLDJDQUEyQyxHQUN0RCxzQ0FBc0MsQ0FBQztBQUU1QixRQUFBLDhCQUE4QixHQUFHLHdCQUF3QixDQUFDO0FBQzFELFFBQUEsaUNBQWlDLEdBQUcseUJBQXlCLENBQUM7QUFDOUQsUUFBQSw2QkFBNkIsR0FBRyx1QkFBdUIsQ0FBQztBQUU5RCxNQUFNLGlDQUFpQyxHQUFHLENBQUMsS0FBZ0IsRUFBRSxFQUFFO0lBQ3BFLE9BQU87UUFDTCxpQ0FBaUMsRUFDL0Isc0RBQThDO1FBQ2hELGdCQUFnQixFQUFFLGtDQUEwQixDQUFDLEtBQUssQ0FBQztRQUNuRCxlQUFlLEVBQUUsMkJBQW1CLENBQUMsS0FBSyxDQUFDO0tBQzVDLENBQUM7QUFDSixDQUFDLENBQUM7QUFQVyxRQUFBLGlDQUFpQyxxQ0FPNUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXRlbnRpb25EYXlzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XG5pbXBvcnQgeyBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBTdGFnZU5hbWUgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTE9HU19DT05GSUcgPSB7XG4gIEJFVEE6IHtcbiAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1dFRUtTLFxuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgfSxcbiAgR0FNTUE6IHtcbiAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1dFRUtTLFxuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgfSxcbiAgUFJPRDoge1xuICAgIHJldGVudGlvbjogUmV0ZW50aW9uRGF5cy5UV09fWUVBUlMsXG4gICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5SRVRBSU4sXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTExPV19DT1JTX09SSUdJTlMgPSB7XG4gIEJFVEE6IFtcImh0dHBzOi8vb3JjYXVpLmRldi51bWNjci5vcmdcIl0sXG4gIEdBTU1BOiBbXCJodHRwczovL29yY2F1aS5zdGcudW1jY3Iub3JnXCJdLFxuICBQUk9EOiBbXCJodHRwczovL29yY2F1aS5wcm9kLnVtY2NyLm9yZ1wiLCBcImh0dHBzOi8vb3JjYXVpLnVtY2NyLm9yZ1wiXSxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NPR05JVE9fQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FX0FSUkFZID0gW1xuICBcIi9kYXRhX3BvcnRhbC9jbGllbnQvZGF0YTIvY29nX2FwcF9jbGllbnRfaWRfc3RhZ2VcIiwgLy8gcG9ydGFsIC0gVG9rZW5TZXJ2aWNlU3RhY2tcbiAgXCIvb3JjYXVpL2NvZ19hcHBfY2xpZW50X2lkX3N0YWdlXCIsIC8vIG9yY2F1aSAtIGh0dHBzOi8vZ2l0aHViLmNvbS91bWNjci9vcmNhLXVpXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT0dOSVRPX1VTRVJfUE9PTF9JRF9QQVJBTUVURVJfTkFNRSA9XG4gIFwiL2RhdGFfcG9ydGFsL2NsaWVudC9jb2dfdXNlcl9wb29sX2lkXCI7XG5cbmV4cG9ydCBjb25zdCBDRVJUSUZJQ0FURV9BUk5fUEFSQU1FVEVSX05BTUUgPSBcIi91bWNjci9jZXJ0aWZpY2F0ZV9hcm5cIjtcbmV4cG9ydCBjb25zdCBIT1NURURfWk9ORV9ET01BSU5fUEFSQU1FVEVSX05BTUUgPSBcIi9ob3N0ZWRfem9uZS91bWNjci9uYW1lXCI7XG5leHBvcnQgY29uc3QgSE9TVEVEX1pPTkVfSURfUEFSQU1FVEVSX05BTUUgPSBcIi9ob3N0ZWRfem9uZS91bWNjci9pZFwiO1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdEFwaUdhdGV3YXlDb25maWd1cmF0aW9uID0gKHN0YWdlOiBTdGFnZU5hbWUpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBjb2duaXRvQ2xpZW50SWRQYXJhbWV0ZXJOYW1lQXJyYXk6XG4gICAgICBERUZBVUxUX0NPR05JVE9fQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FX0FSUkFZLFxuICAgIGNvcnNBbGxvd09yaWdpbnM6IERFRkFVTFRfQUxMT1dfQ09SU19PUklHSU5TW3N0YWdlXSxcbiAgICBhcGlHd0xvZ3NDb25maWc6IERFRkFVTFRfTE9HU19DT05GSUdbc3RhZ2VdLFxuICB9O1xufTtcbiJdfQ==
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFtRDtBQUNuRCw2Q0FBMEM7QUFnQjdCLFFBQUEsbUJBQW1CLEdBQXVDO0lBQ25FLElBQUksRUFBRTtRQUNGLFNBQVMsRUFBRSx3QkFBYSxDQUFDLFNBQVM7UUFDbEMsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztLQUN2QztJQUNELEtBQUssRUFBRTtRQUNILFNBQVMsRUFBRSx3QkFBYSxDQUFDLFNBQVM7UUFDbEMsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztLQUN2QztJQUNELElBQUksRUFBRTtRQUNGLFNBQVMsRUFBRSx3QkFBYSxDQUFDLFNBQVM7UUFDbEMsYUFBYSxFQUFFLDJCQUFhLENBQUMsTUFBTTtLQUN0QztDQUNKLENBQUM7QUFFVyxRQUFBLDBCQUEwQixHQUFnQztJQUNuRSxJQUFJLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztJQUN0QyxLQUFLLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztJQUN2QyxJQUFJLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSwwQkFBMEIsQ0FBQztDQUN0RSxDQUFDO0FBRVcsUUFBQSw4Q0FBOEMsR0FBRztJQUMxRCxtREFBbUQsRUFBRSw2QkFBNkI7SUFDbEYsaUNBQWlDLEVBQUUsNENBQTRDO0NBQ2xGLENBQUM7QUFFVyxRQUFBLDJDQUEyQyxHQUNwRCxzQ0FBc0MsQ0FBQztBQUU5QixRQUFBLDhCQUE4QixHQUFHLHdCQUF3QixDQUFDO0FBQzFELFFBQUEsaUNBQWlDLEdBQUcseUJBQXlCLENBQUM7QUFDOUQsUUFBQSw2QkFBNkIsR0FBRyx1QkFBdUIsQ0FBQztBQUU5RCxNQUFNLGlDQUFpQyxHQUFHLENBQUMsS0FBZ0IsRUFBRSxFQUFFO0lBQ2xFLE9BQU87UUFDSCxpQ0FBaUMsRUFDakMsc0RBQThDO1FBQzlDLGdCQUFnQixFQUFFLGtDQUEwQixDQUFDLEtBQUssQ0FBQztRQUNuRCxlQUFlLEVBQUUsMkJBQW1CLENBQUMsS0FBSyxDQUFDO0tBQzlDLENBQUM7QUFDTixDQUFDLENBQUM7QUFQVyxRQUFBLGlDQUFpQyxxQ0FPNUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JldGVudGlvbkRheXN9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xuaW1wb3J0IHtSZW1vdmFsUG9saWN5fSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7U3RhZ2VOYW1lfSBmcm9tIFwiLi4vc2hhcmVkLWNvbmZpZy9hY2NvdW50c1wiO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nc0NvbmZpZ1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBSZXRlbnRpb24gcG9saWN5IGZvciB0aGUgQVBJIEdhdGV3YXkgbG9ncy5cbiAgICAgKi9cbiAgICByZWFkb25seSByZXRlbnRpb246IFJldGVudGlvbkRheXMsXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgdGhlIGxvZyBncm91cFxuICAgICAqL1xuICAgIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3k7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xPR1NfQ09ORklHOiBSZWNvcmQ8U3RhZ2VOYW1lLCBMb2dzQ29uZmlnUHJvcHM+ID0ge1xuICAgIEJFVEE6IHtcbiAgICAgICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0sXG4gICAgR0FNTUE6IHtcbiAgICAgICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLlRXT19XRUVLUyxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0sXG4gICAgUFJPRDoge1xuICAgICAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuVFdPX1lFQVJTLFxuICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQUxMT1dfQ09SU19PUklHSU5TOiBSZWNvcmQ8U3RhZ2VOYW1lLCBzdHJpbmdbXT4gPSB7XG4gICAgQkVUQTogW1wiaHR0cHM6Ly9vcmNhdWkuZGV2LnVtY2NyLm9yZ1wiXSxcbiAgICBHQU1NQTogW1wiaHR0cHM6Ly9vcmNhdWkuc3RnLnVtY2NyLm9yZ1wiXSxcbiAgICBQUk9EOiBbXCJodHRwczovL29yY2F1aS5wcm9kLnVtY2NyLm9yZ1wiLCBcImh0dHBzOi8vb3JjYXVpLnVtY2NyLm9yZ1wiXSxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NPR05JVE9fQ0xJRU5UX0lEX1BBUkFNRVRFUl9OQU1FX0FSUkFZID0gW1xuICAgIFwiL2RhdGFfcG9ydGFsL2NsaWVudC9kYXRhMi9jb2dfYXBwX2NsaWVudF9pZF9zdGFnZVwiLCAvLyBwb3J0YWwgLSBUb2tlblNlcnZpY2VTdGFja1xuICAgIFwiL29yY2F1aS9jb2dfYXBwX2NsaWVudF9pZF9zdGFnZVwiLCAvLyBvcmNhdWkgLSBodHRwczovL2dpdGh1Yi5jb20vdW1jY3Ivb3JjYS11aVxuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09HTklUT19VU0VSX1BPT0xfSURfUEFSQU1FVEVSX05BTUUgPVxuICAgIFwiL2RhdGFfcG9ydGFsL2NsaWVudC9jb2dfdXNlcl9wb29sX2lkXCI7XG5cbmV4cG9ydCBjb25zdCBDRVJUSUZJQ0FURV9BUk5fUEFSQU1FVEVSX05BTUUgPSBcIi91bWNjci9jZXJ0aWZpY2F0ZV9hcm5cIjtcbmV4cG9ydCBjb25zdCBIT1NURURfWk9ORV9ET01BSU5fUEFSQU1FVEVSX05BTUUgPSBcIi9ob3N0ZWRfem9uZS91bWNjci9uYW1lXCI7XG5leHBvcnQgY29uc3QgSE9TVEVEX1pPTkVfSURfUEFSQU1FVEVSX05BTUUgPSBcIi9ob3N0ZWRfem9uZS91bWNjci9pZFwiO1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdEFwaUdhdGV3YXlDb25maWd1cmF0aW9uID0gKHN0YWdlOiBTdGFnZU5hbWUpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb2duaXRvQ2xpZW50SWRQYXJhbWV0ZXJOYW1lQXJyYXk6XG4gICAgICAgIERFRkFVTFRfQ09HTklUT19DTElFTlRfSURfUEFSQU1FVEVSX05BTUVfQVJSQVksXG4gICAgICAgIGNvcnNBbGxvd09yaWdpbnM6IERFRkFVTFRfQUxMT1dfQ09SU19PUklHSU5TW3N0YWdlXSxcbiAgICAgICAgYXBpR3dMb2dzQ29uZmlnOiBERUZBVUxUX0xPR1NfQ09ORklHW3N0YWdlXSxcbiAgICB9O1xufTtcbiJdfQ==
@@ -13,7 +13,7 @@ exports.CROSS_DEPLOYMENT_ARTIFACT_BUCKET_NAME = "orcabus-cross-deployment-codepi
13
13
  exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ALIAS = "orcabus-cross-deployment-codepipeline-artifact";
14
14
  exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ARN_SSM_PARAMETER_NAME = "/orcabus/deployment-stack-pipeline/artifact-bucket/kms-key-arn";
15
15
  class CrossDeploymentArtifactBucket extends constructs_1.Construct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "0.0.11" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "0.0.13-beta.0" };
17
17
  /**
18
18
  * The S3 bucket used to store artifacts for cross-deployment pipelines.
19
19
  */
@@ -31,7 +31,7 @@ exports.DEFAULT_SYNTH_STEP_PARTIAL_BUILD_SPEC = {
31
31
  * before using this construct.
32
32
  */
33
33
  class DeploymentStackPipeline extends constructs_1.Construct {
34
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "0.0.11" };
34
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "0.0.13-beta.0" };
35
35
  /**
36
36
  * The code pipeline construct that is created.
37
37
  */
package/dynamodb/index.js CHANGED
@@ -40,7 +40,7 @@ const dynamodb = __importStar(require("aws-cdk-lib/aws-dynamodb"));
40
40
  const aws_cdk_lib_1 = require("aws-cdk-lib");
41
41
  const config_1 = require("./config");
42
42
  class DynamoDbPartitionedConstruct extends constructs_1.Construct {
43
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "0.0.11" };
43
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "0.0.13-beta.0" };
44
44
  table;
45
45
  constructor(scope, id, props) {
46
46
  super(scope, id);
@@ -75,7 +75,7 @@ class DynamoDbPartitionedConstruct extends constructs_1.Construct {
75
75
  }
76
76
  exports.DynamoDbPartitionedConstruct = DynamoDbPartitionedConstruct;
77
77
  class DynamoDbNonPartitionedConstruct extends constructs_1.Construct {
78
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "0.0.11" };
78
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "0.0.13-beta.0" };
79
79
  table;
80
80
  constructor(scope, id, props) {
81
81
  super(scope, id);
package/ecs/index.js CHANGED
@@ -52,7 +52,7 @@ exports.LAMBDA_ARCHITECTURE_MAP = {
52
52
  ['ARM64']: lambda.Architecture.ARM_64
53
53
  };
54
54
  class EcsFargateTaskConstruct extends constructs_1.Construct {
55
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "0.0.11" };
55
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "0.0.13-beta.0" };
56
56
  cluster;
57
57
  taskDefinition;
58
58
  securityGroup;
@@ -1,4 +1,4 @@
1
- import { StageName } from "../utils";
1
+ import { StageName } from "../shared-config/accounts";
2
2
  export declare const DEFAULT_ORCABUS_TOKEN_SECRET_ID = "orcabus/token-service-jwt";
3
3
  export declare const DEFAULT_HOSTNAME_SSM_PARAMETER = "/hosted_zone/umccr/name";
4
4
  export declare const MART_ENV_VARS: {
@@ -9,4 +9,3 @@ export declare const MART_ENV_VARS: {
9
9
  export declare const MART_S3_BUCKET: Record<StageName, string>;
10
10
  export declare const MART_S3_PREFIX = "athena-query-results/";
11
11
  export declare const MART_LAMBDA_FUNCTION_NAME = "orcavault";
12
- export declare const DEFAULT_ICAV2_ACCESS_TOKEN_SECRET_ID: Record<StageName, string>;
package/lambda/config.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_ICAV2_ACCESS_TOKEN_SECRET_ID = exports.MART_LAMBDA_FUNCTION_NAME = exports.MART_S3_PREFIX = exports.MART_S3_BUCKET = exports.MART_ENV_VARS = exports.DEFAULT_HOSTNAME_SSM_PARAMETER = exports.DEFAULT_ORCABUS_TOKEN_SECRET_ID = void 0;
4
- const utils_1 = require("../utils");
3
+ exports.MART_LAMBDA_FUNCTION_NAME = exports.MART_S3_PREFIX = exports.MART_S3_BUCKET = exports.MART_ENV_VARS = exports.DEFAULT_HOSTNAME_SSM_PARAMETER = exports.DEFAULT_ORCABUS_TOKEN_SECRET_ID = void 0;
4
+ const accounts_1 = require("../shared-config/accounts");
5
5
  exports.DEFAULT_ORCABUS_TOKEN_SECRET_ID = 'orcabus/token-service-jwt';
6
6
  exports.DEFAULT_HOSTNAME_SSM_PARAMETER = '/hosted_zone/umccr/name';
7
7
  exports.MART_ENV_VARS = {
@@ -10,15 +10,10 @@ exports.MART_ENV_VARS = {
10
10
  athenaDatabaseName: 'mart'
11
11
  };
12
12
  exports.MART_S3_BUCKET = {
13
- BETA: `data-sharing-artifacts-${utils_1.accountIdAlias.BETA}-${utils_1.region}`,
14
- GAMMA: `data-sharing-artifacts-${utils_1.accountIdAlias.GAMMA}-${utils_1.region}`,
15
- PROD: `data-sharing-artifacts-${utils_1.accountIdAlias.PROD}-${utils_1.region}`
13
+ BETA: `data-sharing-artifacts-${accounts_1.accountIdAlias.BETA}-${accounts_1.REGION}`,
14
+ GAMMA: `data-sharing-artifacts-${accounts_1.accountIdAlias.GAMMA}-${accounts_1.REGION}`,
15
+ PROD: `data-sharing-artifacts-${accounts_1.accountIdAlias.PROD}-${accounts_1.REGION}`
16
16
  };
17
17
  exports.MART_S3_PREFIX = 'athena-query-results/';
18
18
  exports.MART_LAMBDA_FUNCTION_NAME = 'orcavault';
19
- exports.DEFAULT_ICAV2_ACCESS_TOKEN_SECRET_ID = {
20
- BETA: 'ICAv2JWTKey-umccr-prod-service-dev', // pragma: allowlist secret
21
- GAMMA: 'ICAv2JWTKey-umccr-prod-service-staging', // pragma: allowlist secret
22
- PROD: 'ICAv2JWTKey-umccr-prod-service-production', // pragma: allowlist secret
23
- };
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9DQUEyRDtBQUU5QyxRQUFBLCtCQUErQixHQUFJLDJCQUEyQixDQUFBO0FBQzlELFFBQUEsOEJBQThCLEdBQUcseUJBQXlCLENBQUE7QUFHMUQsUUFBQSxhQUFhLEdBQUc7SUFDekIsbUJBQW1CLEVBQUUsV0FBVztJQUNoQyxvQkFBb0IsRUFBRSxXQUFXO0lBQ2pDLGtCQUFrQixFQUFFLE1BQU07Q0FDN0IsQ0FBQTtBQUVZLFFBQUEsY0FBYyxHQUE4QjtJQUNyRCxJQUFJLEVBQUUsMEJBQTBCLHNCQUFjLENBQUMsSUFBSSxJQUFJLGNBQU0sRUFBRTtJQUMvRCxLQUFLLEVBQUUsMEJBQTBCLHNCQUFjLENBQUMsS0FBSyxJQUFJLGNBQU0sRUFBRTtJQUNqRSxJQUFJLEVBQUUsMEJBQTBCLHNCQUFjLENBQUMsSUFBSSxJQUFJLGNBQU0sRUFBRTtDQUNsRSxDQUFBO0FBQ1ksUUFBQSxjQUFjLEdBQUcsdUJBQXVCLENBQUE7QUFDeEMsUUFBQSx5QkFBeUIsR0FBRyxXQUFXLENBQUE7QUFFdkMsUUFBQSxvQ0FBb0MsR0FBOEI7SUFDN0UsSUFBSSxFQUFFLG9DQUFvQyxFQUFFLDJCQUEyQjtJQUN2RSxLQUFLLEVBQUUsd0NBQXdDLEVBQUUsMkJBQTJCO0lBQzVFLElBQUksRUFBRSwyQ0FBMkMsRUFBRSwyQkFBMkI7Q0FDL0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YWNjb3VudElkQWxpYXMsIHJlZ2lvbiwgU3RhZ2VOYW1lfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSUQgPSAgJ29yY2FidXMvdG9rZW4tc2VydmljZS1qd3QnXG5leHBvcnQgY29uc3QgREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSID0gJy9ob3N0ZWRfem9uZS91bWNjci9uYW1lJ1xuXG5cbmV4cG9ydCBjb25zdCBNQVJUX0VOVl9WQVJTID0ge1xuICAgIGF0aGVuYVdvcmtncm91cE5hbWU6ICdvcmNhaG91c2UnLFxuICAgIGF0aGVuYURhdGFzb3VyY2VOYW1lOiAnb3JjYXZhdWx0JyxcbiAgICBhdGhlbmFEYXRhYmFzZU5hbWU6ICdtYXJ0J1xufVxuXG5leHBvcnQgY29uc3QgTUFSVF9TM19CVUNLRVQ6IFJlY29yZDxTdGFnZU5hbWUsIHN0cmluZz4gPSB7XG4gICAgQkVUQTogYGRhdGEtc2hhcmluZy1hcnRpZmFjdHMtJHthY2NvdW50SWRBbGlhcy5CRVRBfS0ke3JlZ2lvbn1gLFxuICAgIEdBTU1BOiBgZGF0YS1zaGFyaW5nLWFydGlmYWN0cy0ke2FjY291bnRJZEFsaWFzLkdBTU1BfS0ke3JlZ2lvbn1gLFxuICAgIFBST0Q6IGBkYXRhLXNoYXJpbmctYXJ0aWZhY3RzLSR7YWNjb3VudElkQWxpYXMuUFJPRH0tJHtyZWdpb259YFxufVxuZXhwb3J0IGNvbnN0IE1BUlRfUzNfUFJFRklYID0gJ2F0aGVuYS1xdWVyeS1yZXN1bHRzLydcbmV4cG9ydCBjb25zdCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FID0gJ29yY2F2YXVsdCdcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRDogUmVjb3JkPFN0YWdlTmFtZSwgc3RyaW5nPiA9IHtcbiAgQkVUQTogJ0lDQXYySldUS2V5LXVtY2NyLXByb2Qtc2VydmljZS1kZXYnLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgR0FNTUE6ICdJQ0F2MkpXVEtleS11bWNjci1wcm9kLXNlcnZpY2Utc3RhZ2luZycsIC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICBQUk9EOiAnSUNBdjJKV1RLZXktdW1jY3ItcHJvZC1zZXJ2aWNlLXByb2R1Y3Rpb24nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbn07Il19
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHdEQUE0RTtBQUUvRCxRQUFBLCtCQUErQixHQUFJLDJCQUEyQixDQUFBO0FBQzlELFFBQUEsOEJBQThCLEdBQUcseUJBQXlCLENBQUE7QUFHMUQsUUFBQSxhQUFhLEdBQUc7SUFDekIsbUJBQW1CLEVBQUUsV0FBVztJQUNoQyxvQkFBb0IsRUFBRSxXQUFXO0lBQ2pDLGtCQUFrQixFQUFFLE1BQU07Q0FDN0IsQ0FBQTtBQUVZLFFBQUEsY0FBYyxHQUE4QjtJQUNyRCxJQUFJLEVBQUUsMEJBQTBCLHlCQUFjLENBQUMsSUFBSSxJQUFJLGlCQUFNLEVBQUU7SUFDL0QsS0FBSyxFQUFFLDBCQUEwQix5QkFBYyxDQUFDLEtBQUssSUFBSSxpQkFBTSxFQUFFO0lBQ2pFLElBQUksRUFBRSwwQkFBMEIseUJBQWMsQ0FBQyxJQUFJLElBQUksaUJBQU0sRUFBRTtDQUNsRSxDQUFBO0FBQ1ksUUFBQSxjQUFjLEdBQUcsdUJBQXVCLENBQUE7QUFDeEMsUUFBQSx5QkFBeUIsR0FBRyxXQUFXLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FjY291bnRJZEFsaWFzLCBSRUdJT04sIFN0YWdlTmFtZX0gZnJvbSBcIi4uL3NoYXJlZC1jb25maWcvYWNjb3VudHNcIjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSUQgPSAgJ29yY2FidXMvdG9rZW4tc2VydmljZS1qd3QnXG5leHBvcnQgY29uc3QgREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSID0gJy9ob3N0ZWRfem9uZS91bWNjci9uYW1lJ1xuXG5cbmV4cG9ydCBjb25zdCBNQVJUX0VOVl9WQVJTID0ge1xuICAgIGF0aGVuYVdvcmtncm91cE5hbWU6ICdvcmNhaG91c2UnLFxuICAgIGF0aGVuYURhdGFzb3VyY2VOYW1lOiAnb3JjYXZhdWx0JyxcbiAgICBhdGhlbmFEYXRhYmFzZU5hbWU6ICdtYXJ0J1xufVxuXG5leHBvcnQgY29uc3QgTUFSVF9TM19CVUNLRVQ6IFJlY29yZDxTdGFnZU5hbWUsIHN0cmluZz4gPSB7XG4gICAgQkVUQTogYGRhdGEtc2hhcmluZy1hcnRpZmFjdHMtJHthY2NvdW50SWRBbGlhcy5CRVRBfS0ke1JFR0lPTn1gLFxuICAgIEdBTU1BOiBgZGF0YS1zaGFyaW5nLWFydGlmYWN0cy0ke2FjY291bnRJZEFsaWFzLkdBTU1BfS0ke1JFR0lPTn1gLFxuICAgIFBST0Q6IGBkYXRhLXNoYXJpbmctYXJ0aWZhY3RzLSR7YWNjb3VudElkQWxpYXMuUFJPRH0tJHtSRUdJT059YFxufVxuZXhwb3J0IGNvbnN0IE1BUlRfUzNfUFJFRklYID0gJ2F0aGVuYS1xdWVyeS1yZXN1bHRzLydcbmV4cG9ydCBjb25zdCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FID0gJ29yY2F2YXVsdCdcblxuIl19
package/lambda/index.js CHANGED
@@ -50,11 +50,13 @@ const path_1 = __importDefault(require("path"));
50
50
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
51
51
  const config_1 = require("./config");
52
52
  const utils_1 = require("../utils");
53
+ const accounts_1 = require("../shared-config/accounts");
54
+ const icav2_1 = require("../shared-config/icav2");
53
55
  function getPythonUvDockerImage() {
54
56
  return aws_cdk_lib_1.DockerImage.fromBuild(path_1.default.join(__dirname, 'build_python'));
55
57
  }
56
58
  class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
57
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "0.0.11" };
59
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "0.0.13-beta.0" };
58
60
  // Class constructs, to be used for caching the layers
59
61
  // This means that if there are multiple lambdas throughout the stack
60
62
  // They will all use the same layer
@@ -274,7 +276,7 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
274
276
  'athena:GetTableMetadata',
275
277
  'athena:GetDataCatalog',
276
278
  ],
277
- resources: [`arn:aws:athena:${utils_1.region}:${utils_1.accountIdAlias[stageName]}:*`],
279
+ resources: [`arn:aws:athena:${accounts_1.REGION}:${accounts_1.accountIdAlias[stageName]}:*`],
278
280
  }));
279
281
  this.currentVersion.addToRolePolicy(
280
282
  // From https://docs.aws.amazon.com/athena/latest/ug/example-policies-workgroup.html
@@ -300,7 +302,7 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
300
302
  'athena:DeletePreparedStatement',
301
303
  ],
302
304
  resources: [
303
- `arn:aws:athena:${utils_1.region}:${utils_1.accountIdAlias[stageName]}:workgroup/${config_1.MART_ENV_VARS.athenaWorkgroupName}`,
305
+ `arn:aws:athena:${accounts_1.REGION}:${accounts_1.accountIdAlias[stageName]}:workgroup/${config_1.MART_ENV_VARS.athenaWorkgroupName}`,
304
306
  ],
305
307
  }));
306
308
  // Add read access to the S3 bucket
@@ -312,13 +314,14 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
312
314
  // Resolve the stage name by performing a reverse lookup using cdk.Aws.ACCOUNT_ID on accountIdAlias
313
315
  const stageName = (0, utils_1.resolveStageName)(this);
314
316
  // Set secret object
315
- const icav2AccessTokenSecretId = secretsManager.Secret.fromSecretNameV2(this, 'icav2AccessTokenSecretId', props.icav2AccessTokenSecretId ?? config_1.DEFAULT_ICAV2_ACCESS_TOKEN_SECRET_ID[stageName]);
317
+ const icav2AccessTokenSecretIdObj = secretsManager.Secret.fromSecretNameV2(this, 'icav2AccessTokenSecretId', props.icav2AccessTokenSecretId ?? icav2_1.icav2AccessTokenSecretId[stageName]);
316
318
  // Add permissions for the secret and SSM parameter
317
319
  // To the current version
318
- icav2AccessTokenSecretId.grantRead(this.currentVersion);
320
+ icav2AccessTokenSecretIdObj.grantRead(this.currentVersion);
319
321
  // Add environment variables
320
- this.addEnvironment('ICAV2_ACCESS_TOKEN_SECRET_ID', icav2AccessTokenSecretId.secretName);
322
+ this.addEnvironment('ICAV2_ACCESS_TOKEN_SECRET_ID', icav2AccessTokenSecretIdObj.secretName);
323
+ this.addEnvironment('ICAV2_BASE_URL', icav2_1.icav2BaseUrl);
321
324
  }
322
325
  }
323
326
  exports.PythonUvFunction = PythonUvFunction;
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkEsd0RBRUM7O0FBL0JELDhFQUF5RztBQUV6RywrREFBaUQ7QUFDakQsK0VBQWlFO0FBQ2pFLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsdURBQXlDO0FBQ3pDLDZDQUF3QztBQUV4QyxnREFBd0I7QUFFeEIsdURBSWdDO0FBQ2hDLHFDQVNrQjtBQUNsQixvQ0FBa0U7QUFHbEUsU0FBZ0Isc0JBQXNCO0lBQ2xDLE9BQU8seUJBQVcsQ0FBQyxTQUFTLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBcUZELE1BQWEsZ0JBQWlCLFNBQVEsd0NBQWM7O0lBQ2hELHNEQUFzRDtJQUN0RCxxRUFBcUU7SUFDckUsbUNBQW1DO0lBQzNCLE1BQU0sQ0FBQyxvQkFBb0IsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM5RSxNQUFNLENBQUMsU0FBUyxHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ25FLE1BQU0sQ0FBQyxVQUFVLEdBQXlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDcEUsTUFBTSxDQUFDLFlBQVksR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUU5RSxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQ2xFLE1BQU0sT0FBTyxHQUFHO1lBQ1osR0FBRyxLQUFLO1lBQ1IsUUFBUSxFQUFFO2dCQUNOLEdBQUcsS0FBSyxDQUFDLFFBQVE7Z0JBQ2pCLFNBQVMsRUFBRTtvQkFDUCxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUztvQkFDNUIsMkRBQTJEO29CQUMzRCxjQUFjLEVBQ1YsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsY0FBYyxJQUFJLE1B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QkFDL0IsZ0NBQWdDO2dCQUNoQyxnQ0FBZ0M7YUFDbkM7WUFDRCxTQUFTLEVBQUU7Z0JBQ1Asa0JBQWtCLGNBQU0sSUFBSSxzQkFBYyxDQUFDLFNBQVMsQ0FBQyxjQUFjLHNCQUFhLENBQUMsbUJBQW1CLEVBQUU7YUFDekc7U0FDSixDQUFDLENBQ0wsQ0FBQztRQUVGLG1DQUFtQztRQUNuQyxjQUFjLENBQUMsY0FBYyxDQUN6QixJQUFJLENBQUMsY0FBYyxFQUNuQixHQUFHLHVCQUFjLEdBQUcsQ0FDdkIsQ0FBQTtRQUVELDJDQUEyQztRQUMzQyxrQkFBa0IsQ0FBQyxXQUFXLENBQzFCLElBQUksQ0FBQyxjQUFjLENBQ3RCLENBQUE7SUFDTCxDQUFDO0lBRU8saUJBQWlCLENBQ3JCLEtBQTBCO1FBRTFCLG1HQUFtRztRQUNuRyxNQUFNLFNBQVMsR0FBRyxJQUFBLHdCQUFnQixFQUFDLElBQUksQ0FBQyxDQUFBO1FBRXhDLG9CQUFvQjtRQUNwQixNQUFNLHdCQUF3QixHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQ25FLElBQUksRUFBRSwwQkFBMEIsRUFDaEMsS0FBSyxDQUFDLHdCQUF3QixJQUFJLDZDQUFvQyxDQUFDLFNBQVMsQ0FBQyxDQUNwRixDQUFDO1FBRUYsbURBQW1EO1FBQ25ELHlCQUF5QjtRQUN6Qix3QkFBd0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXhELDRCQUE0QjtRQUM1QixJQUFJLENBQUMsY0FBYyxDQUNmLDhCQUE4QixFQUFFLHdCQUF3QixDQUFDLFVBQVUsQ0FDdEUsQ0FBQTtJQUNMLENBQUM7O0FBdlVMLDRDQXlVQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UHl0aG9uRnVuY3Rpb24sIFB5dGhvbkZ1bmN0aW9uUHJvcHMsIFB5dGhvbkxheWVyVmVyc2lvbn0gZnJvbSBcIkBhd3MtY2RrL2F3cy1sYW1iZGEtcHl0aG9uLWFscGhhXCI7XG5pbXBvcnQge0NvbnN0cnVjdH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0ICogYXMgc2VjcmV0c01hbmFnZXIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiO1xuaW1wb3J0ICogYXMgc3NtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NtXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCAqIGFzIHMzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7RG9ja2VySW1hZ2V9IGZyb20gJ2F3cy1jZGstbGliJztcblxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHtcbiAgICBQYXJhbXNBbmRTZWNyZXRzTGF5ZXJWZXJzaW9uLFxuICAgIFBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbCxcbiAgICBQYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHtcbiAgICAvLyBPcmNhYnVzIGRlZmF1bHRzXG4gICAgREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSLCBERUZBVUxUX09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lELFxuICAgIC8vIE1hcnQgZGVmYXVsdHNcbiAgICBNQVJUX0VOVl9WQVJTLCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FLFxuICAgIE1BUlRfUzNfQlVDS0VULFxuICAgIE1BUlRfUzNfUFJFRklYLFxuICAgIC8vIElDQVYyIGRlZmF1bHRzXG4gICAgREVGQVVMVF9JQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEXG59IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHthY2NvdW50SWRBbGlhcywgcmVnaW9uLCByZXNvbHZlU3RhZ2VOYW1lfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpOiBEb2NrZXJJbWFnZSB7XG4gICAgcmV0dXJuIERvY2tlckltYWdlLmZyb21CdWlsZChwYXRoLmpvaW4oX19kaXJuYW1lLCAnYnVpbGRfcHl0aG9uJykpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yY2FidXNSZXNvdXJjZXNQcm9wcyB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgb3JjYWJ1c1Rva2VuU2VjcmV0SWQsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSURcbiAgICAgKi9cbiAgICByZWFkb25seSBvcmNhYnVzVG9rZW5TZWNyZXRJZD86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBERUZBVUxUX0hPU1ROQU1FX1NTTV9QQVJBTUVURVJcbiAgICAgKi9cbiAgICByZWFkb25seSBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXMge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIGF0aGVuYVdvcmtncm91cE5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX1dPUktHUk9VUF9OQU1FXG4gICAgICovXG4gICAgcmVhZG9ubHkgYXRoZW5hV29ya2dyb3VwTmFtZT86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hRGF0YXNvdXJjZU5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuYXRoZW5hRGF0YXNvdXJjZU5hbWVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFEYXRhc291cmNlTmFtZT86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hRGF0YWJhc2VOYW1lLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9EQVRBQkFTRV9OQU1FXG4gICAgICovXG4gICAgcmVhZG9ubHkgYXRoZW5hRGF0YWJhc2VOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWNhdjJSZXNvdXJjZXNQcm9wcyB7XG4gICAgLyoqXG4gICAgICogVGhlIGlkIG9mIHRoZSBzZWNyZXQgdGhhdCBjb250YWlucyB0aGUgaWNhdjIgYWNjZXNzIHRva2VuXG4gICAgICogb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBAREVGQVVMVF9JQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEXG4gICAgICovXG4gICAgcmVhZG9ubHkgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkPzogc3RyaW5nXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBQeXRob25VdkZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBQeXRob25GdW5jdGlvblByb3BzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBvcmNhYnVzIGFwaSB0b29scyBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZU9yY2FidXNBcGlUb29sc0xheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgbWFydCBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICogTm90ZSB0aGF0IHRoZSBtYXJ0IGxheWVyIGlzIGEgbGl0dGxlIGhlYXZpZXIgdGhhbiB0aGUgb3JjYWJ1cyBhcGkgdG9vbHMgbGF5ZXJcbiAgICAgKiBTaW5jZSB3ZSByZXF1aXJlIHBhbmRhcyB0byBiZSBpbnN0YWxsZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlTWFydExheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgaWNhdjIgbGF5ZXIgaW4gdGhlIGxhbWJkYSBmdW5jdGlvbiBidWlsZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGVJY2F2MkxheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgZmFzdGFwaSBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZUZhc3RBcGlMYXllcj86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIG9yY2FidXNUb2tlblJlc291cmNlcywgb3B0aW9uYWwsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG9cbiAgICAgKiBAREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCBhbmQgQERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUlxuICAgICAqIGZvciB0aGUgc2VjcmV0IGFuZCBTU00gcGFyYW1ldGVyIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9yY2FidXNUb2tlblJlc291cmNlcz86IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgbWFydEVudmlyb25tZW50VmFyaWFibGVzLCBvcHRpb25hbCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0b1xuICAgICAqIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9XT1JLR1JPVVBfTkFNRSwgQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFTT1VSQ0VfTkFNRVxuICAgICAqIGFuZCBATUFSVF9FTlZfVkFSUy5BVEhFTkFfREFUQUJBU0VfTkFNRSBmb3IgdGhlIGF0aGVuYSB3b3JrZ3JvdXAsIGRhdGFzb3VyY2UgYW5kIGRhdGFiYXNlIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcz86IE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgaWNhdjJSZXNvdXJjZXMsIG9wdGlvbmFsLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvXG4gICAgICogQERFRkFVTFRfSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCBmb3IgdGhlIHNlY3JldFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGljYXYyUmVzb3VyY2VzPzogSWNhdjJSZXNvdXJjZXNQcm9wc1xufVxuXG5cbmV4cG9ydCBjbGFzcyBQeXRob25VdkZ1bmN0aW9uIGV4dGVuZHMgUHl0aG9uRnVuY3Rpb24ge1xuICAgIC8vIENsYXNzIGNvbnN0cnVjdHMsIHRvIGJlIHVzZWQgZm9yIGNhY2hpbmcgdGhlIGxheWVyc1xuICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgbGFtYmRhcyB0aHJvdWdob3V0IHRoZSBzdGFja1xuICAgIC8vIFRoZXkgd2lsbCBhbGwgdXNlIHRoZSBzYW1lIGxheWVyXG4gICAgcHJpdmF0ZSBzdGF0aWMgb3JjYWJ1c0FwaVRvb2xzTGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBtYXJ0TGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBpY2F2MkxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgZmFzdEFwaUxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG5cbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHl0aG9uVXZGdW5jdGlvblByb3BzKSB7XG4gICAgICAgIGNvbnN0IHV2UHJvcHMgPSB7XG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgLi4ucHJvcHMuYnVuZGxpbmcsXG4gICAgICAgICAgICAgICAgYnVpbGRBcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnByb3BzLmJ1bmRsaW5nPy5idWlsZEFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBUQVJHRVRQTEFURk9STSB0byBidWlsZCBhcmdzIGlmIGl0J3Mgbm90IGFscmVhZHkgc2V0XG4gICAgICAgICAgICAgICAgICAgIFRBUkdFVFBMQVRGT1JNOlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuYnVuZGxpbmc/LmJ1aWxkQXJncz8uVEFSR0VUUExBVEZPUk0gPz8gbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQuZG9ja2VyUGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2BybSAtcmYgJHtvdXRwdXREaXJ9L3BhbmRhcy90ZXN0c2BdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFyYW1zQW5kU2VjcmV0czpcbiAgICAgICAgICAgICAgICBwcm9wcy5wYXJhbXNBbmRTZWNyZXRzID8/XG4gICAgICAgICAgICAgICAgUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbi5mcm9tVmVyc2lvbihQYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMuVjFfMF8xMDMsIHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjYWNoZVNpemU6IDMwMCxcbiAgICAgICAgICAgICAgICAgICAgbG9nTGV2ZWw6IFBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbC5ERUJVRyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkLCB1dlByb3BzKTtcblxuICAgICAgICBpZiAocHJvcHMuaW5jbHVkZU9yY2FidXNBcGlUb29sc0xheWVyKSB7XG4gICAgICAgICAgICAvKiBTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIE9yY2FidXMgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldE9yY2FidXNSZXNvdXJjZXMocHJvcHMub3JjYWJ1c1Rva2VuUmVzb3VyY2VzID8/IHt9KVxuXG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgb3JjYWJ1cyBBcGkgdG9vbHMgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRPcmNhYnVzQXBpVG9vbHNMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5vcmNhYnVzQXBpVG9vbHNMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVNYXJ0TGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgbWFydCByZXNvdXJjZXMgKi9cbiAgICAgICAgICAgIHRoaXMuc2V0QXRoZW5hUmVzb3VyY2VzKHByb3BzLm1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcyA/PyB7fSlcblxuICAgICAgICAgICAgLyogQnVpbGQgdGhlIG1hcnQgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRNYXJ0VG9vbHNMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5tYXJ0TGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlSWNhdjJMYXllcikge1xuICAgICAgICAgICAgLyogU2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBpY2F2MiByZXNvdXJjZXMgKi9cbiAgICAgICAgICAgIHRoaXMuc2V0SWNhdjJSZXNvdXJjZXMocHJvcHMuaWNhdjJSZXNvdXJjZXMgPz8ge30pXG5cbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBpY2F2MiBsYXllciAqL1xuICAgICAgICAgICAgdGhpcy5idWlsZEljYXYyTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVGYXN0QXBpTGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBmYXN0YXBpIGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkRmFzdEFwaUxheWVyKHNjb3BlKVxuICAgICAgICAgICAgdGhpcy5hZGRMYXllcnMoPFB5dGhvbkxheWVyVmVyc2lvbj5QeXRob25VdkZ1bmN0aW9uLmZhc3RBcGlMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE9yY2FidXNBcGlUb29sc0xheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCBvcmNhYnVzIGFwaSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5vcmNhYnVzQXBpVG9vbHNMYXllci5oYXMoc2NvcGUpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IG5ldyBQeXRob25MYXllclZlcnNpb24odGhpcywgJ29yY2FidXNBcGlUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL29yY2FidXNfYXBpX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ29yY2FidXNBcGlUb29sc0xheWVyJyxcbiAgICAgICAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kSG9va3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlckJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwaXAgaW5zdGFsbCAke2lucHV0RGlyfSAtLXRhcmdldCAke291dHB1dERpcn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLW5hbWUgJ3BhbmRhcycgLWV4ZWMgcm0gLXJmIHt9L3Rlc3RzLyBcXFxcO2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLm9yY2FidXNBcGlUb29sc0xheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE1hcnRUb29sc0xheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbih0aGlzLCAnbWFydFRvb2xzTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvbWFydF90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdtYXJ0VG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZEljYXYyTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5pY2F2MkxheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbih0aGlzLCAnaWNhdjJUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL2ljYXYyX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2ljYXYyVG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRGYXN0QXBpTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5mYXN0QXBpTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHRoaXMsICdmYXN0QXBpTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvZmFzdGFwaV90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdmYXN0QXBpTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtbmFtZSAncGFuZGFzJyAtZXhlYyBybSAtcmYge30vdGVzdHMvIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLmZhc3RBcGlMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0T3JjYWJ1c1Jlc291cmNlcyhcbiAgICAgICAgcHJvcHM6IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBTZXQgc2VjcmV0IG9iamVjdFxuICAgICAgICBjb25zdCBvcmNhYnVzVG9rZW5TZWNyZXRJZCA9IHNlY3JldHNNYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICAgICAgdGhpcywgJ29yY2FidXNUb2tlblNlY3JldElkJyxcbiAgICAgICAgICAgIHByb3BzLm9yY2FidXNUb2tlblNlY3JldElkID8/IERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSURcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgICAgICAgIHRoaXMsICdob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUnLFxuICAgICAgICAgICAgcHJvcHMuaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lID8/IERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUixcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIEFkZCBwZXJtaXNzaW9ucyBmb3IgdGhlIHNlY3JldCBhbmQgU1NNIHBhcmFtZXRlclxuICAgICAgICAvLyBUbyB0aGUgY3VycmVudCB2ZXJzaW9uXG4gICAgICAgIG9yY2FidXNUb2tlblNlY3JldElkLmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKTtcbiAgICAgICAgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lLmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKVxuXG4gICAgICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdPUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCcsIG9yY2FidXNUb2tlblNlY3JldElkLnNlY3JldE5hbWUsXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdIT1NUTkFNRV9TU01fUEFSQU1FVEVSX05BTUUnLCBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUucGFyYW1ldGVyTmFtZSxcbiAgICAgICAgKVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBzZXRBdGhlbmFSZXNvdXJjZXMoXG4gICAgICAgIHByb3BzOiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNcbiAgICApIHtcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgc3RhZ2UgbmFtZSBieSBwZXJmb3JtaW5nIGEgcmV2ZXJzZSBsb29rdXAgdXNpbmcgY2RrLkF3cy5BQ0NPVU5UX0lEIG9uIGFjY291bnRJZEFsaWFzXG4gICAgICAgIGNvbnN0IHN0YWdlTmFtZSA9IHJlc29sdmVTdGFnZU5hbWUodGhpcylcblxuICAgICAgICBjb25zdCBhdGhlbmFTM0J1Y2tldCA9IHMzLkJ1Y2tldC5mcm9tQnVja2V0TmFtZShcbiAgICAgICAgICAgIHRoaXMsICdhdGhlbmFTM0J1Y2tldCcsXG4gICAgICAgICAgICBNQVJUX1MzX0JVQ0tFVFtzdGFnZU5hbWVdXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBhdGhlbmFGdW5jdGlvbk5hbWUgPSBsYW1iZGEuRnVuY3Rpb24uZnJvbUZ1bmN0aW9uTmFtZShcbiAgICAgICAgICAgIHRoaXMsICdsYW1iZGFGdW5jdGlvbk5hbWUnLCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FXG4gICAgICAgIClcblxuICAgICAgICAvLyBBZGQgZW52IHZhcnNcbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGt2IHBhaXJzIG9mIE1BUlRfRU5WX1ZBUlNcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoTUFSVF9FTlZfVkFSUykpIHtcbiAgICAgICAgICAgIC8vIEFmdGVyXG4gICAgICAgICAgICBpZiAocHJvcHNba2V5IGFzIGtleW9mIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoa2V5LCBwcm9wc1trZXkgYXMga2V5b2YgTWFydEVudmlyb25tZW50VmFyaWFibGVzXSEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVybWlzc2lvbnNcbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBsaXN0c1xuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RFbmdpbmVWZXJzaW9ucycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdFdvcmtHcm91cHMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3REYXRhQ2F0YWxvZ3MnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3REYXRhYmFzZXMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldERhdGFiYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0VGFibGVNZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0VGFibGVNZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0RGF0YUNhdGFsb2cnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6YXRoZW5hOiR7cmVnaW9ufToke2FjY291bnRJZEFsaWFzW3N0YWdlTmFtZV19OipgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBleGVjdXRpb25zXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6QmF0Y2hHZXRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RRdWVyeUV4ZWN1dGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0YXJ0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0b3BRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlSZXN1bHRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRRdWVyeVJlc3VsdHNTdHJlYW0nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkNyZWF0ZU5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldE5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkJhdGNoR2V0TmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdE5hbWVkUXVlcmllcycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlTmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6Q3JlYXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0UHJlcGFyZWRTdGF0ZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpVcGRhdGVQcmVwYXJlZFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIGBhcm46YXdzOmF0aGVuYToke3JlZ2lvbn06JHthY2NvdW50SWRBbGlhc1tzdGFnZU5hbWVdfTp3b3JrZ3JvdXAvJHtNQVJUX0VOVl9WQVJTLmF0aGVuYVdvcmtncm91cE5hbWV9YCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcmVhZCBhY2Nlc3MgdG8gdGhlIFMzIGJ1Y2tldFxuICAgICAgICBhdGhlbmFTM0J1Y2tldC5ncmFudFJlYWRXcml0ZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZlcnNpb24sXG4gICAgICAgICAgICBgJHtNQVJUX1MzX1BSRUZJWH0qYFxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIGludm9rZSBhY2Nlc3MgdG8gdGhlIGxhbWJkYSBmdW5jdGlvblxuICAgICAgICBhdGhlbmFGdW5jdGlvbk5hbWUuZ3JhbnRJbnZva2UoXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWZXJzaW9uXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEljYXYyUmVzb3VyY2VzKFxuICAgICAgICBwcm9wczogSWNhdjJSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBzdGFnZSBuYW1lIGJ5IHBlcmZvcm1pbmcgYSByZXZlcnNlIGxvb2t1cCB1c2luZyBjZGsuQXdzLkFDQ09VTlRfSUQgb24gYWNjb3VudElkQWxpYXNcbiAgICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gcmVzb2x2ZVN0YWdlTmFtZSh0aGlzKVxuXG4gICAgICAgIC8vIFNldCBzZWNyZXQgb2JqZWN0XG4gICAgICAgIGNvbnN0IGljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZCA9IHNlY3JldHNNYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICAgICAgdGhpcywgJ2ljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZCcsXG4gICAgICAgICAgICBwcm9wcy5pY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQgPz8gREVGQVVMVF9JQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEW3N0YWdlTmFtZV1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcGVybWlzc2lvbnMgZm9yIHRoZSBzZWNyZXQgYW5kIFNTTSBwYXJhbWV0ZXJcbiAgICAgICAgLy8gVG8gdGhlIGN1cnJlbnQgdmVyc2lvblxuICAgICAgICBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQuZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pO1xuXG4gICAgICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEJywgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkLnNlY3JldE5hbWUsXG4gICAgICAgIClcbiAgICB9XG5cbn1cblxuXG5cblxuIl19
327
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkEsd0RBRUM7O0FBL0JELDhFQUF5RztBQUV6RywrREFBaUQ7QUFDakQsK0VBQWlFO0FBQ2pFLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsdURBQXlDO0FBQ3pDLDZDQUF3QztBQUV4QyxnREFBd0I7QUFFeEIsdURBSWdDO0FBQ2hDLHFDQU9rQjtBQUNsQixvQ0FBMEM7QUFDMUMsd0RBQWlFO0FBQ2pFLGtEQUE4RTtBQUc5RSxTQUFnQixzQkFBc0I7SUFDbEMsT0FBTyx5QkFBVyxDQUFDLFNBQVMsQ0FBQyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFxRkQsTUFBYSxnQkFBaUIsU0FBUSx3Q0FBYzs7SUFDaEQsc0RBQXNEO0lBQ3RELHFFQUFxRTtJQUNyRSxtQ0FBbUM7SUFDM0IsTUFBTSxDQUFDLG9CQUFvQixHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzlFLE1BQU0sQ0FBQyxTQUFTLEdBQXlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkUsTUFBTSxDQUFDLFVBQVUsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNwRSxNQUFNLENBQUMsWUFBWSxHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTlFLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFDbEUsTUFBTSxPQUFPLEdBQUc7WUFDWixHQUFHLEtBQUs7WUFDUixRQUFRLEVBQUU7Z0JBQ04sR0FBRyxLQUFLLENBQUMsUUFBUTtnQkFDakIsU0FBUyxFQUFFO29CQUNQLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTO29CQUM1QiwyREFBMkQ7b0JBQzNELGNBQWMsRUFDVixLQUFLLENBQUMsUUFBUSxF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QUNoQyw2QkFBNkI7Z0JBQzdCLCtCQUErQjtnQkFDL0IsZ0NBQWdDO2dCQUNoQyxnQ0FBZ0M7YUFDbkM7WUFDRCxTQUFTLEVBQUU7Z0JBQ1Asa0JBQWtCLGlCQUFNLElBQUkseUJBQWMsQ0FBQyxTQUFTLENBQUMsY0FBYyxzQkFBYSxDQUFDLG1CQUFtQixFQUFFO2FBQ3pHO1NBQ0osQ0FBQyxDQUNMLENBQUM7UUFFRixtQ0FBbUM7UUFDbkMsY0FBYyxDQUFDLGNBQWMsQ0FDekIsSUFBSSxDQUFDLGNBQWMsRUFDbkIsR0FBRyx1QkFBYyxHQUFHLENBQ3ZCLENBQUE7UUFFRCwyQ0FBMkM7UUFDM0Msa0JBQWtCLENBQUMsV0FBVyxDQUMxQixJQUFJLENBQUMsY0FBYyxDQUN0QixDQUFBO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQixDQUNyQixLQUEwQjtRQUUxQixtR0FBbUc7UUFDbkcsTUFBTSxTQUFTLEdBQUcsSUFBQSx3QkFBZ0IsRUFBQyxJQUFJLENBQUMsQ0FBQTtRQUV4QyxvQkFBb0I7UUFDcEIsTUFBTSwyQkFBMkIsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUN0RSxJQUFJLEVBQUUsMEJBQTBCLEVBQ2hDLEtBQUssQ0FBQyx3QkFBd0IsSUFBSSxnQ0FBd0IsQ0FBQyxTQUFTLENBQUMsQ0FDeEUsQ0FBQztRQUVGLG1EQUFtRDtRQUNuRCx5QkFBeUI7UUFDekIsMkJBQTJCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUzRCw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FDZiw4QkFBOEIsRUFBRSwyQkFBMkIsQ0FBQyxVQUFVLENBQ3pFLENBQUE7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUNmLGdCQUFnQixFQUFFLG9CQUFZLENBQ2pDLENBQUE7SUFDTCxDQUFDOztBQTFVTCw0Q0E0VUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1B5dGhvbkZ1bmN0aW9uLCBQeXRob25GdW5jdGlvblByb3BzLCBQeXRob25MYXllclZlcnNpb259IGZyb20gXCJAYXdzLWNkay9hd3MtbGFtYmRhLXB5dGhvbi1hbHBoYVwiO1xuaW1wb3J0IHtDb25zdHJ1Y3R9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCAqIGFzIHNlY3JldHNNYW5hZ2VyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIjtcbmltcG9ydCAqIGFzIHNzbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNzbVwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQge0RvY2tlckltYWdlfSBmcm9tICdhd3MtY2RrLWxpYic7XG5cbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7XG4gICAgUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbixcbiAgICBQYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwsXG4gICAgUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7XG4gICAgLy8gT3JjYWJ1cyBkZWZhdWx0c1xuICAgIERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUiwgREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCxcbiAgICAvLyBNYXJ0IGRlZmF1bHRzXG4gICAgTUFSVF9FTlZfVkFSUywgTUFSVF9MQU1CREFfRlVOQ1RJT05fTkFNRSxcbiAgICBNQVJUX1MzX0JVQ0tFVCxcbiAgICBNQVJUX1MzX1BSRUZJWCxcbn0gZnJvbSBcIi4vY29uZmlnXCI7XG5pbXBvcnQge3Jlc29sdmVTdGFnZU5hbWV9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHthY2NvdW50SWRBbGlhcywgUkVHSU9OfSBmcm9tIFwiLi4vc2hhcmVkLWNvbmZpZy9hY2NvdW50c1wiO1xuaW1wb3J0IHtpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQsIGljYXYyQmFzZVVybH0gZnJvbSBcIi4uL3NoYXJlZC1jb25maWcvaWNhdjJcIjtcblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpOiBEb2NrZXJJbWFnZSB7XG4gICAgcmV0dXJuIERvY2tlckltYWdlLmZyb21CdWlsZChwYXRoLmpvaW4oX19kaXJuYW1lLCAnYnVpbGRfcHl0aG9uJykpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yY2FidXNSZXNvdXJjZXNQcm9wcyB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgb3JjYWJ1c1Rva2VuU2VjcmV0SWQsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSURcbiAgICAgKi9cbiAgICByZWFkb25seSBvcmNhYnVzVG9rZW5TZWNyZXRJZD86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBERUZBVUxUX0hPU1ROQU1FX1NTTV9QQVJBTUVURVJcbiAgICAgKi9cbiAgICByZWFkb25seSBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXMge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIGF0aGVuYVdvcmtncm91cE5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX1dPUktHUk9VUF9OQU1FXG4gICAgICovXG4gICAgcmVhZG9ubHkgYXRoZW5hV29ya2dyb3VwTmFtZT86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hRGF0YXNvdXJjZU5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuYXRoZW5hRGF0YXNvdXJjZU5hbWVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFEYXRhc291cmNlTmFtZT86IHN0cmluZ1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hRGF0YWJhc2VOYW1lLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9EQVRBQkFTRV9OQU1FXG4gICAgICovXG4gICAgcmVhZG9ubHkgYXRoZW5hRGF0YWJhc2VOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWNhdjJSZXNvdXJjZXNQcm9wcyB7XG4gICAgLyoqXG4gICAgICogVGhlIGlkIG9mIHRoZSBzZWNyZXQgdGhhdCBjb250YWlucyB0aGUgaWNhdjIgYWNjZXNzIHRva2VuXG4gICAgICogb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBAREVGQVVMVF9JQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEXG4gICAgICovXG4gICAgcmVhZG9ubHkgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkPzogc3RyaW5nXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBQeXRob25VdkZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBQeXRob25GdW5jdGlvblByb3BzIHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBvcmNhYnVzIGFwaSB0b29scyBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZU9yY2FidXNBcGlUb29sc0xheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgbWFydCBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICogTm90ZSB0aGF0IHRoZSBtYXJ0IGxheWVyIGlzIGEgbGl0dGxlIGhlYXZpZXIgdGhhbiB0aGUgb3JjYWJ1cyBhcGkgdG9vbHMgbGF5ZXJcbiAgICAgKiBTaW5jZSB3ZSByZXF1aXJlIHBhbmRhcyB0byBiZSBpbnN0YWxsZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlTWFydExheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgaWNhdjIgbGF5ZXIgaW4gdGhlIGxhbWJkYSBmdW5jdGlvbiBidWlsZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGVJY2F2MkxheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgZmFzdGFwaSBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZUZhc3RBcGlMYXllcj86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIG9yY2FidXNUb2tlblJlc291cmNlcywgb3B0aW9uYWwsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG9cbiAgICAgKiBAREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCBhbmQgQERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUlxuICAgICAqIGZvciB0aGUgc2VjcmV0IGFuZCBTU00gcGFyYW1ldGVyIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9yY2FidXNUb2tlblJlc291cmNlcz86IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgbWFydEVudmlyb25tZW50VmFyaWFibGVzLCBvcHRpb25hbCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0b1xuICAgICAqIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9XT1JLR1JPVVBfTkFNRSwgQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFTT1VSQ0VfTkFNRVxuICAgICAqIGFuZCBATUFSVF9FTlZfVkFSUy5BVEhFTkFfREFUQUJBU0VfTkFNRSBmb3IgdGhlIGF0aGVuYSB3b3JrZ3JvdXAsIGRhdGFzb3VyY2UgYW5kIGRhdGFiYXNlIHJlc3BlY3RpdmVseVxuICAgICAqL1xuICAgIHJlYWRvbmx5IG1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcz86IE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc1xuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgaWNhdjJSZXNvdXJjZXMsIG9wdGlvbmFsLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvXG4gICAgICogQERFRkFVTFRfSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCBmb3IgdGhlIHNlY3JldFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGljYXYyUmVzb3VyY2VzPzogSWNhdjJSZXNvdXJjZXNQcm9wc1xufVxuXG5cbmV4cG9ydCBjbGFzcyBQeXRob25VdkZ1bmN0aW9uIGV4dGVuZHMgUHl0aG9uRnVuY3Rpb24ge1xuICAgIC8vIENsYXNzIGNvbnN0cnVjdHMsIHRvIGJlIHVzZWQgZm9yIGNhY2hpbmcgdGhlIGxheWVyc1xuICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgbGFtYmRhcyB0aHJvdWdob3V0IHRoZSBzdGFja1xuICAgIC8vIFRoZXkgd2lsbCBhbGwgdXNlIHRoZSBzYW1lIGxheWVyXG4gICAgcHJpdmF0ZSBzdGF0aWMgb3JjYWJ1c0FwaVRvb2xzTGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBtYXJ0TGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBpY2F2MkxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgZmFzdEFwaUxheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG5cbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHl0aG9uVXZGdW5jdGlvblByb3BzKSB7XG4gICAgICAgIGNvbnN0IHV2UHJvcHMgPSB7XG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgLi4ucHJvcHMuYnVuZGxpbmcsXG4gICAgICAgICAgICAgICAgYnVpbGRBcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnByb3BzLmJ1bmRsaW5nPy5idWlsZEFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBUQVJHRVRQTEFURk9STSB0byBidWlsZCBhcmdzIGlmIGl0J3Mgbm90IGFscmVhZHkgc2V0XG4gICAgICAgICAgICAgICAgICAgIFRBUkdFVFBMQVRGT1JNOlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMuYnVuZGxpbmc/LmJ1aWxkQXJncz8uVEFSR0VUUExBVEZPUk0gPz8gbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQuZG9ja2VyUGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2BybSAtcmYgJHtvdXRwdXREaXJ9L3BhbmRhcy90ZXN0c2BdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFyYW1zQW5kU2VjcmV0czpcbiAgICAgICAgICAgICAgICBwcm9wcy5wYXJhbXNBbmRTZWNyZXRzID8/XG4gICAgICAgICAgICAgICAgUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbi5mcm9tVmVyc2lvbihQYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMuVjFfMF8xMDMsIHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjYWNoZVNpemU6IDMwMCxcbiAgICAgICAgICAgICAgICAgICAgbG9nTGV2ZWw6IFBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbC5ERUJVRyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkLCB1dlByb3BzKTtcblxuICAgICAgICBpZiAocHJvcHMuaW5jbHVkZU9yY2FidXNBcGlUb29sc0xheWVyKSB7XG4gICAgICAgICAgICAvKiBTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIE9yY2FidXMgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldE9yY2FidXNSZXNvdXJjZXMocHJvcHMub3JjYWJ1c1Rva2VuUmVzb3VyY2VzID8/IHt9KVxuXG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgb3JjYWJ1cyBBcGkgdG9vbHMgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRPcmNhYnVzQXBpVG9vbHNMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5vcmNhYnVzQXBpVG9vbHNMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVNYXJ0TGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgbWFydCByZXNvdXJjZXMgKi9cbiAgICAgICAgICAgIHRoaXMuc2V0QXRoZW5hUmVzb3VyY2VzKHByb3BzLm1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcyA/PyB7fSlcblxuICAgICAgICAgICAgLyogQnVpbGQgdGhlIG1hcnQgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRNYXJ0VG9vbHNMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5tYXJ0TGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlSWNhdjJMYXllcikge1xuICAgICAgICAgICAgLyogU2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBpY2F2MiByZXNvdXJjZXMgKi9cbiAgICAgICAgICAgIHRoaXMuc2V0SWNhdjJSZXNvdXJjZXMocHJvcHMuaWNhdjJSZXNvdXJjZXMgPz8ge30pXG5cbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBpY2F2MiBsYXllciAqL1xuICAgICAgICAgICAgdGhpcy5idWlsZEljYXYyTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVGYXN0QXBpTGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBmYXN0YXBpIGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkRmFzdEFwaUxheWVyKHNjb3BlKVxuICAgICAgICAgICAgdGhpcy5hZGRMYXllcnMoPFB5dGhvbkxheWVyVmVyc2lvbj5QeXRob25VdkZ1bmN0aW9uLmZhc3RBcGlMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE9yY2FidXNBcGlUb29sc0xheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCBvcmNhYnVzIGFwaSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5vcmNhYnVzQXBpVG9vbHNMYXllci5oYXMoc2NvcGUpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IG5ldyBQeXRob25MYXllclZlcnNpb24odGhpcywgJ29yY2FidXNBcGlUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL29yY2FidXNfYXBpX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ29yY2FidXNBcGlUb29sc0xheWVyJyxcbiAgICAgICAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kSG9va3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlckJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwaXAgaW5zdGFsbCAke2lucHV0RGlyfSAtLXRhcmdldCAke291dHB1dERpcn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLW5hbWUgJ3BhbmRhcycgLWV4ZWMgcm0gLXJmIHt9L3Rlc3RzLyBcXFxcO2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLm9yY2FidXNBcGlUb29sc0xheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE1hcnRUb29sc0xheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbih0aGlzLCAnbWFydFRvb2xzTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvbWFydF90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdtYXJ0VG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZEljYXYyTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5pY2F2MkxheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbih0aGlzLCAnaWNhdjJUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL2ljYXYyX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2ljYXYyVG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC1uYW1lICdwYW5kYXMnIC1leGVjIHJtIC1yZiB7fS90ZXN0cy8gXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRGYXN0QXBpTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5mYXN0QXBpTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHRoaXMsICdmYXN0QXBpTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvZmFzdGFwaV90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdmYXN0QXBpTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtbmFtZSAncGFuZGFzJyAtZXhlYyBybSAtcmYge30vdGVzdHMvIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLmZhc3RBcGlMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0T3JjYWJ1c1Jlc291cmNlcyhcbiAgICAgICAgcHJvcHM6IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBTZXQgc2VjcmV0IG9iamVjdFxuICAgICAgICBjb25zdCBvcmNhYnVzVG9rZW5TZWNyZXRJZCA9IHNlY3JldHNNYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICAgICAgdGhpcywgJ29yY2FidXNUb2tlblNlY3JldElkJyxcbiAgICAgICAgICAgIHByb3BzLm9yY2FidXNUb2tlblNlY3JldElkID8/IERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSURcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgICAgICAgIHRoaXMsICdob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUnLFxuICAgICAgICAgICAgcHJvcHMuaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lID8/IERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUixcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIEFkZCBwZXJtaXNzaW9ucyBmb3IgdGhlIHNlY3JldCBhbmQgU1NNIHBhcmFtZXRlclxuICAgICAgICAvLyBUbyB0aGUgY3VycmVudCB2ZXJzaW9uXG4gICAgICAgIG9yY2FidXNUb2tlblNlY3JldElkLmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKTtcbiAgICAgICAgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lLmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKVxuXG4gICAgICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdPUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCcsIG9yY2FidXNUb2tlblNlY3JldElkLnNlY3JldE5hbWUsXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdIT1NUTkFNRV9TU01fUEFSQU1FVEVSX05BTUUnLCBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUucGFyYW1ldGVyTmFtZSxcbiAgICAgICAgKVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBzZXRBdGhlbmFSZXNvdXJjZXMoXG4gICAgICAgIHByb3BzOiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNcbiAgICApIHtcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgc3RhZ2UgbmFtZSBieSBwZXJmb3JtaW5nIGEgcmV2ZXJzZSBsb29rdXAgdXNpbmcgY2RrLkF3cy5BQ0NPVU5UX0lEIG9uIGFjY291bnRJZEFsaWFzXG4gICAgICAgIGNvbnN0IHN0YWdlTmFtZSA9IHJlc29sdmVTdGFnZU5hbWUodGhpcylcblxuICAgICAgICBjb25zdCBhdGhlbmFTM0J1Y2tldCA9IHMzLkJ1Y2tldC5mcm9tQnVja2V0TmFtZShcbiAgICAgICAgICAgIHRoaXMsICdhdGhlbmFTM0J1Y2tldCcsXG4gICAgICAgICAgICBNQVJUX1MzX0JVQ0tFVFtzdGFnZU5hbWVdXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBhdGhlbmFGdW5jdGlvbk5hbWUgPSBsYW1iZGEuRnVuY3Rpb24uZnJvbUZ1bmN0aW9uTmFtZShcbiAgICAgICAgICAgIHRoaXMsICdsYW1iZGFGdW5jdGlvbk5hbWUnLCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FXG4gICAgICAgIClcblxuICAgICAgICAvLyBBZGQgZW52IHZhcnNcbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGt2IHBhaXJzIG9mIE1BUlRfRU5WX1ZBUlNcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoTUFSVF9FTlZfVkFSUykpIHtcbiAgICAgICAgICAgIC8vIEFmdGVyXG4gICAgICAgICAgICBpZiAocHJvcHNba2V5IGFzIGtleW9mIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoa2V5LCBwcm9wc1trZXkgYXMga2V5b2YgTWFydEVudmlyb25tZW50VmFyaWFibGVzXSEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVybWlzc2lvbnNcbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBsaXN0c1xuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RFbmdpbmVWZXJzaW9ucycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdFdvcmtHcm91cHMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3REYXRhQ2F0YWxvZ3MnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3REYXRhYmFzZXMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldERhdGFiYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0VGFibGVNZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0VGFibGVNZXRhZGF0YScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0RGF0YUNhdGFsb2cnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6YXRoZW5hOiR7UkVHSU9OfToke2FjY291bnRJZEFsaWFzW3N0YWdlTmFtZV19OipgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBleGVjdXRpb25zXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6QmF0Y2hHZXRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RRdWVyeUV4ZWN1dGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0YXJ0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0b3BRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlSZXN1bHRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRRdWVyeVJlc3VsdHNTdHJlYW0nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkNyZWF0ZU5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldE5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkJhdGNoR2V0TmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdE5hbWVkUXVlcmllcycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlTmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6Q3JlYXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0UHJlcGFyZWRTdGF0ZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpVcGRhdGVQcmVwYXJlZFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIGBhcm46YXdzOmF0aGVuYToke1JFR0lPTn06JHthY2NvdW50SWRBbGlhc1tzdGFnZU5hbWVdfTp3b3JrZ3JvdXAvJHtNQVJUX0VOVl9WQVJTLmF0aGVuYVdvcmtncm91cE5hbWV9YCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcmVhZCBhY2Nlc3MgdG8gdGhlIFMzIGJ1Y2tldFxuICAgICAgICBhdGhlbmFTM0J1Y2tldC5ncmFudFJlYWRXcml0ZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZlcnNpb24sXG4gICAgICAgICAgICBgJHtNQVJUX1MzX1BSRUZJWH0qYFxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIGludm9rZSBhY2Nlc3MgdG8gdGhlIGxhbWJkYSBmdW5jdGlvblxuICAgICAgICBhdGhlbmFGdW5jdGlvbk5hbWUuZ3JhbnRJbnZva2UoXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWZXJzaW9uXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEljYXYyUmVzb3VyY2VzKFxuICAgICAgICBwcm9wczogSWNhdjJSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBzdGFnZSBuYW1lIGJ5IHBlcmZvcm1pbmcgYSByZXZlcnNlIGxvb2t1cCB1c2luZyBjZGsuQXdzLkFDQ09VTlRfSUQgb24gYWNjb3VudElkQWxpYXNcbiAgICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gcmVzb2x2ZVN0YWdlTmFtZSh0aGlzKVxuXG4gICAgICAgIC8vIFNldCBzZWNyZXQgb2JqZWN0XG4gICAgICAgIGNvbnN0IGljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZE9iaiA9IHNlY3JldHNNYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICAgICAgdGhpcywgJ2ljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZCcsXG4gICAgICAgICAgICBwcm9wcy5pY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQgPz8gaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkW3N0YWdlTmFtZV1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcGVybWlzc2lvbnMgZm9yIHRoZSBzZWNyZXQgYW5kIFNTTSBwYXJhbWV0ZXJcbiAgICAgICAgLy8gVG8gdGhlIGN1cnJlbnQgdmVyc2lvblxuICAgICAgICBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWRPYmouZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pO1xuXG4gICAgICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEJywgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkT2JqLnNlY3JldE5hbWUsXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdJQ0FWMl9CQVNFX1VSTCcsIGljYXYyQmFzZVVybCxcbiAgICAgICAgKVxuICAgIH1cblxufVxuXG5cblxuXG4iXX0=
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/env python3
2
+
3
+ # Standard imports
4
+ from typing import Dict, Optional
5
+
6
+ # Local imports
7
+ from .globals import FASTQ_DECOMPRESSION_SUBDOMAIN_NAME
8
+ from ..utils.requests_helpers import (
9
+ get_request_response_results, get_url, patch_request, get_request
10
+ )
11
+
12
+
13
+ # Get url for the subdomain
14
+ def get_fastq_decompression_url(endpoint: str) -> str:
15
+ """
16
+ Get the URL for the Metadata endpoint
17
+ :param endpoint:
18
+ :return:
19
+ """
20
+ return get_url(
21
+ endpoint=endpoint,
22
+ subdomain=FASTQ_DECOMPRESSION_SUBDOMAIN_NAME,
23
+ )
24
+
25
+
26
+ # Wrappers
27
+ def get_fastq_decompression_request(
28
+ endpoint: str,
29
+ params: Optional[Dict] = None,
30
+ ):
31
+ return get_request(
32
+ url=get_fastq_decompression_url(endpoint),
33
+ params=params
34
+ )
35
+
36
+
37
+ def get_fastq_decompression_request_response_results(
38
+ endpoint: str,
39
+ params: Optional[Dict] = None,
40
+ ):
41
+ return get_request_response_results(
42
+ url=get_fastq_decompression_url(endpoint),
43
+ params=params
44
+ )
45
+
46
+
47
+ def fastq_decompression_patch_request(
48
+ endpoint: str,
49
+ params: Optional[Dict] = None,
50
+ ):
51
+ return patch_request(
52
+ url=get_fastq_decompression_url(endpoint),
53
+ params=params
54
+ )
55
+
56
+
57
+ def fastq_decompression_post_request(
58
+ endpoint: str,
59
+ params: Optional[Dict] = None,
60
+ ):
61
+ return patch_request(
62
+ url=get_fastq_decompression_url(endpoint),
63
+ params=params
64
+ )
65
+
66
+ # Create imports
67
+ from .create_helpers import create_job
68
+
69
+ # Query helpers
70
+ from .query_helpers import (
71
+ get_job_from_job_id,
72
+ get_decompression_job_list,
73
+ get_job_list_for_fastq_set
74
+ )
75
+
76
+ # Update helpers
77
+ from .update_helpers import (
78
+ update_status
79
+ )
80
+
81
+ __all__ = [
82
+ # Create helpers
83
+ "create_job",
84
+
85
+ # Query helpers
86
+ "get_job_from_job_id",
87
+ "get_decompression_job_list",
88
+ "get_job_list_for_fastq_set",
89
+
90
+ # Update helpers
91
+ "update_status",
92
+ ]
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env python3
2
+
3
+ """
4
+ Create the job
5
+ """
6
+
7
+ from typing import List, Optional
8
+
9
+ from . import fastq_decompression_post_request
10
+ from .globals import JOB_ENDPOINT
11
+ from .models import Job, JobType
12
+
13
+
14
+ def create_job(
15
+ fastq_set_id_list: List[str],
16
+ output_uri_prefix: str = None,
17
+ job_type: Optional[JobType] = None,
18
+ ) -> Job:
19
+ """
20
+ Create the job
21
+ """
22
+ if job_type is None:
23
+ job_type = 'FASTQ_DECOMPRESSION'
24
+
25
+ return fastq_decompression_post_request(
26
+ JOB_ENDPOINT,
27
+ params={
28
+ "fastqSetIdList": fastq_set_id_list,
29
+ "jobType": job_type,
30
+ "outputUriPrefix": output_uri_prefix,
31
+ }
32
+ )
33
+
34
+
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env python3
2
+
3
+ import re
4
+ from enum import Enum
5
+
6
+ # AWS PARAMETERS
7
+ FASTQ_DECOMPRESSION_SUBDOMAIN_NAME = "fastq-decompression"
8
+
9
+ # API ENDPOINTS
10
+ JOB_ENDPOINT = "api/v1/jobs"
11
+
12
+ # REGEX
13
+ ORCABUS_ULID_REGEX_MATCH = re.compile(r'^[a-z0-9]{3}\.[A-Z0-9]{26}$')
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env python3
2
+
3
+ """
4
+ {
5
+ "id": "ufr.01JJY7P1AVFGHGVMEDE8T4VWJG",
6
+ "jobType: "FASTQ_DECOMPRESSION",
7
+ "stepsExecutionArn": "aws:arn:states:us-east-1:123456789012:execution:myStateMachine:myExecution",
8
+ "status": "SUCCEEDED",
9
+ "startTime": "2021-07-01T00:00:00Z",
10
+ "endTime": "2021-07-01T00:00:00Z",
11
+ }
12
+ """
13
+
14
+ from typing import (
15
+ TypedDict, NotRequired, Literal, List
16
+ )
17
+
18
+ JobType = Literal['FASTQ_DECOMPRESSION']
19
+ JobStatus = Literal['PENDING', 'RUNNING', 'FAILED', 'ABORTED', 'SUCCEEDED']
20
+
21
+
22
+ class JobOutput(TypedDict):
23
+ index: str
24
+ lane: str
25
+ libraryId: str
26
+ instrumentRunId: str
27
+ read1FileUriDecompressed: str
28
+ read2FileUriDecompressed: NotRequired[str]
29
+
30
+
31
+ class Job(TypedDict):
32
+ id: str
33
+ jobType: JobType
34
+ stepsExecutionArn: str
35
+ status: JobStatus
36
+ startTime: str
37
+ endTime: str
38
+ errorMessages: NotRequired[str]
39
+ outputs: NotRequired[List[JobOutput]]
40
+
41
+
42
+ class JobQueryParameters(TypedDict):
43
+ fastqSetId: NotRequired[str]
44
+ status: NotRequired[JobStatus]
45
+ createdAfter: NotRequired[str]
46
+ createdBefore: NotRequired[str]
47
+ completedAfter: NotRequired[str]
48
+ completedBefore: NotRequired[str]
49
+ page: NotRequired[int]
50
+ rowsPerPage: NotRequired[int]
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env python3
2
+
3
+ """
4
+ Query helpers -
5
+
6
+ get_job_from_job_id
7
+
8
+ get_unarchiving_job_list
9
+
10
+ """
11
+
12
+ # Type hints
13
+ from typing import List, Unpack
14
+
15
+ # Local imports
16
+ from . import get_fastq_decompression_request_response_results
17
+ from .models import Job, JobStatus, JobQueryParameters
18
+ from .globals import JOB_ENDPOINT
19
+
20
+
21
+ def get_job_from_job_id(job_id: str, **kwargs) -> Job:
22
+ return get_fastq_decompression_request_response_results(f"{JOB_ENDPOINT}/{job_id}", params=kwargs)
23
+
24
+
25
+ def get_decompression_job_list(**kwargs: Unpack[JobQueryParameters]) -> List[Job]:
26
+ """
27
+ Get fastq decompression jobs
28
+ """
29
+ # Raise error if any of the kwargs are not in the FastqListRowQueryParameters
30
+ for key in kwargs.keys():
31
+ if key not in JobQueryParameters.__annotations__:
32
+ raise ValueError(f"Invalid parameter: {key}")
33
+
34
+ return get_fastq_decompression_request_response_results(
35
+ JOB_ENDPOINT,
36
+ params=dict(kwargs)
37
+ )
38
+
39
+
40
+ def get_job_list_for_fastq_set(
41
+ fastq_set_id: str,
42
+ job_status: JobStatus
43
+ ) -> List[Job]:
44
+ """
45
+ Check if fastq in job list
46
+ :return:
47
+ """
48
+ return get_decompression_job_list(
49
+ fastqSetId=fastq_set_id,
50
+ status=job_status
51
+ )
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env python3
2
+
3
+ """
4
+ Update helpers for the update script.
5
+ """
6
+
7
+ # Standard imports
8
+ from typing import Optional
9
+
10
+ # Local imports
11
+ from . import fastq_decompression_patch_request
12
+ from .globals import JOB_ENDPOINT
13
+ from .models import Job, JobStatus
14
+
15
+
16
+ def update_status(
17
+ job_id: str,
18
+ job_status: JobStatus,
19
+ error_message: Optional[str] = None
20
+ ) -> Job:
21
+ """
22
+ Add QC stats to a fastq_id.
23
+
24
+ :param job_id: The job id
25
+ :param job_status: Dictionary of QC stats
26
+ :param error_message: Optional error message
27
+ """
28
+ return fastq_decompression_patch_request(
29
+ f"{JOB_ENDPOINT}/{job_id}",
30
+ params=dict(filter(
31
+ lambda x: x[1] is not None,
32
+ {
33
+ "status": job_status,
34
+ "error_message": error_message
35
+ }.items()
36
+ ))
37
+ )
@@ -7,7 +7,7 @@ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
7
  * A construct which represents a named role that a Lambda function can assume.
8
8
  */
9
9
  class NamedLambdaRole extends aws_iam_1.Role {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "0.0.11" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "0.0.13-beta.0" };
11
11
  constructor(scope, id, props) {
12
12
  super(scope, id, {
13
13
  assumedBy: new aws_iam_1.ServicePrincipal("lambda.amazonaws.com"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orcabus/platform-cdk-constructs",
3
- "version": "0.0.11",
3
+ "version": "0.0.13-beta.0",
4
4
  "description": "CDK Package for OrcaBus infrastructure.",
5
5
  "main": "index.ts",
6
6
  "types": "index.d.ts",
@@ -15,7 +15,7 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
15
15
  * to the provider framework.
16
16
  */
17
17
  class ProviderFunction extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "0.0.11" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "0.0.13-beta.0" };
19
19
  _function;
20
20
  _response;
21
21
  constructor(scope, id, props) {
@@ -1,10 +1,11 @@
1
1
  /**
2
2
  * Shared config for the FileManager.
3
3
  */
4
- import { StageName } from "../utils/index";
4
+ import { StageName } from "./accounts";
5
5
  export declare const fileManagerBuckets: Record<StageName, string[]>;
6
6
  export declare const fileManagerCacheBuckets: Record<StageName, string[]>;
7
7
  export declare const fileManagerPresignUserSecret = "orcabus/file-manager-presign-user";
8
8
  export declare const accessKeySecretArn: Record<StageName, string>;
9
9
  export declare const fileManagerIngestRoleName = "orcabus-file-manager-ingest-role";
10
10
  export declare const fileManagerPresignUser = "orcabus-file-manager-presign-user";
11
+ export declare const fileManagerDomainPrefix = "file";
@@ -3,22 +3,22 @@
3
3
  * Shared config for the FileManager.
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.fileManagerPresignUser = exports.fileManagerIngestRoleName = exports.accessKeySecretArn = exports.fileManagerPresignUserSecret = exports.fileManagerCacheBuckets = exports.fileManagerBuckets = void 0;
7
- const index_1 = require("../utils/index");
6
+ exports.fileManagerDomainPrefix = exports.fileManagerPresignUser = exports.fileManagerIngestRoleName = exports.accessKeySecretArn = exports.fileManagerPresignUserSecret = exports.fileManagerCacheBuckets = exports.fileManagerBuckets = void 0;
7
+ const utils_1 = require("../utils");
8
8
  const deployment_stack_pipeline_1 = require("../deployment-stack-pipeline");
9
9
  exports.fileManagerBuckets = {
10
- ["BETA"]: [
10
+ BETA: [
11
11
  "umccr-temp-dev",
12
12
  `ntsm-fingerprints-${deployment_stack_pipeline_1.BETA_ENVIRONMENT.account}-ap-southeast-2`,
13
13
  `data-sharing-artifacts-${deployment_stack_pipeline_1.BETA_ENVIRONMENT.account}-ap-southeast-2`,
14
14
  "filemanager-inventory-test",
15
15
  ],
16
- ["GAMMA"]: [
16
+ GAMMA: [
17
17
  "umccr-temp-stg",
18
18
  `ntsm-fingerprints-${deployment_stack_pipeline_1.GAMMA_ENVIRONMENT.account}-ap-southeast-2`,
19
19
  `data-sharing-artifacts-${deployment_stack_pipeline_1.GAMMA_ENVIRONMENT.account}-ap-southeast-2`,
20
20
  ],
21
- ["PROD"]: [
21
+ PROD: [
22
22
  "org.umccr.data.oncoanalyser",
23
23
  "archive-prod-analysis-503977275616-ap-southeast-2",
24
24
  "archive-prod-fastq-503977275616-ap-southeast-2",
@@ -28,17 +28,18 @@ exports.fileManagerBuckets = {
28
28
  ],
29
29
  };
30
30
  exports.fileManagerCacheBuckets = {
31
- ["BETA"]: ["pipeline-dev-cache-503977275616-ap-southeast-2"],
32
- ["GAMMA"]: ["pipeline-stg-cache-503977275616-ap-southeast-2"],
33
- ["PROD"]: ["pipeline-prod-cache-503977275616-ap-southeast-2"],
31
+ BETA: ["pipeline-dev-cache-503977275616-ap-southeast-2"],
32
+ GAMMA: ["pipeline-stg-cache-503977275616-ap-southeast-2"],
33
+ PROD: ["pipeline-prod-cache-503977275616-ap-southeast-2"],
34
34
  };
35
35
  exports.fileManagerPresignUserSecret = "orcabus/file-manager-presign-user"; // pragma: allowlist secret
36
36
  exports.accessKeySecretArn = {
37
- ["BETA"]: `arn:aws:secretsmanager:${deployment_stack_pipeline_1.BETA_ENVIRONMENT.region}:${deployment_stack_pipeline_1.BETA_ENVIRONMENT.account}:secret:${exports.fileManagerPresignUserSecret}`,
38
- ["GAMMA"]: `arn:aws:secretsmanager:${deployment_stack_pipeline_1.GAMMA_ENVIRONMENT.region}:${deployment_stack_pipeline_1.GAMMA_ENVIRONMENT.account}:secret:${exports.fileManagerPresignUserSecret}`,
39
- ["PROD"]: `arn:aws:secretsmanager:${deployment_stack_pipeline_1.PROD_ENVIRONMENT.region}:${deployment_stack_pipeline_1.PROD_ENVIRONMENT.account}:secret:${exports.fileManagerPresignUserSecret}`,
37
+ BETA: `arn:aws:secretsmanager:${deployment_stack_pipeline_1.BETA_ENVIRONMENT.region}:${deployment_stack_pipeline_1.BETA_ENVIRONMENT.account}:secret:${exports.fileManagerPresignUserSecret}`,
38
+ GAMMA: `arn:aws:secretsmanager:${deployment_stack_pipeline_1.GAMMA_ENVIRONMENT.region}:${deployment_stack_pipeline_1.GAMMA_ENVIRONMENT.account}:secret:${exports.fileManagerPresignUserSecret}`,
39
+ PROD: `arn:aws:secretsmanager:${deployment_stack_pipeline_1.PROD_ENVIRONMENT.region}:${deployment_stack_pipeline_1.PROD_ENVIRONMENT.account}:secret:${exports.fileManagerPresignUserSecret}`,
40
40
  };
41
41
  exports.fileManagerIngestRoleName = "orcabus-file-manager-ingest-role";
42
- (0, index_1.validateSecretName)(exports.fileManagerPresignUserSecret);
42
+ (0, utils_1.validateSecretName)(exports.fileManagerPresignUserSecret);
43
43
  exports.fileManagerPresignUser = "orcabus-file-manager-presign-user"; // pragma: allowlist secret
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZmlsZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBRUgsMENBQStEO0FBQy9ELDRFQUlzQztBQUV6QixRQUFBLGtCQUFrQixHQUFnQztJQUM3RCxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ1IsZ0JBQWdCO1FBQ2hCLHFCQUFxQiw0Q0FBZ0IsQ0FBQyxPQUFPLGlCQUFpQjtRQUM5RCwwQkFBMEIsNENBQWdCLENBQUMsT0FBTyxpQkFBaUI7UUFDbkUsNEJBQTRCO0tBQzdCO0lBQ0QsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNULGdCQUFnQjtRQUNoQixxQkFBcUIsNkNBQWlCLENBQUMsT0FBTyxpQkFBaUI7UUFDL0QsMEJBQTBCLDZDQUFpQixDQUFDLE9BQU8saUJBQWlCO0tBQ3JFO0lBQ0QsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNSLDZCQUE2QjtRQUM3QixtREFBbUQ7UUFDbkQsZ0RBQWdEO1FBQ2hELHFCQUFxQiw0Q0FBZ0IsQ0FBQyxPQUFPLGlCQUFpQjtRQUM5RCwwQkFBMEIsNENBQWdCLENBQUMsT0FBTyxpQkFBaUI7UUFDbkUsOENBQThDO0tBQy9DO0NBQ0YsQ0FBQztBQUVXLFFBQUEsdUJBQXVCLEdBQWdDO0lBQ2xFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxnREFBZ0QsQ0FBQztJQUM1RCxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsZ0RBQWdELENBQUM7SUFDN0QsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGlEQUFpRCxDQUFDO0NBQzlELENBQUM7QUFFVyxRQUFBLDRCQUE0QixHQUFHLG1DQUFtQyxDQUFDLENBQUMsMkJBQTJCO0FBQy9GLFFBQUEsa0JBQWtCLEdBQThCO0lBQzNELENBQUMsTUFBTSxDQUFDLEVBQUUsMEJBQTBCLDRDQUFnQixDQUFDLE1BQU0sSUFBSSw0Q0FBZ0IsQ0FBQyxPQUFPLFdBQVcsb0NBQTRCLEVBQUU7SUFDaEksQ0FBQyxPQUFPLENBQUMsRUFBRSwwQkFBMEIsNkNBQWlCLENBQUMsTUFBTSxJQUFJLDZDQUFpQixDQUFDLE9BQU8sV0FBVyxvQ0FBNEIsRUFBRTtJQUNuSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLDBCQUEwQiw0Q0FBZ0IsQ0FBQyxNQUFNLElBQUksNENBQWdCLENBQUMsT0FBTyxXQUFXLG9DQUE0QixFQUFFO0NBQ2pJLENBQUM7QUFFVyxRQUFBLHlCQUF5QixHQUFHLGtDQUFrQyxDQUFDO0FBQzVFLElBQUEsMEJBQWtCLEVBQUMsb0NBQTRCLENBQUMsQ0FBQztBQUVwQyxRQUFBLHNCQUFzQixHQUFHLG1DQUFtQyxDQUFDLENBQUMsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTaGFyZWQgY29uZmlnIGZvciB0aGUgRmlsZU1hbmFnZXIuXG4gKi9cblxuaW1wb3J0IHsgU3RhZ2VOYW1lLCB2YWxpZGF0ZVNlY3JldE5hbWUgfSBmcm9tIFwiLi4vdXRpbHMvaW5kZXhcIjtcbmltcG9ydCB7XG4gIEJFVEFfRU5WSVJPTk1FTlQsXG4gIEdBTU1BX0VOVklST05NRU5ULFxuICBQUk9EX0VOVklST05NRU5ULFxufSBmcm9tIFwiLi4vZGVwbG95bWVudC1zdGFjay1waXBlbGluZVwiO1xuXG5leHBvcnQgY29uc3QgZmlsZU1hbmFnZXJCdWNrZXRzOiBSZWNvcmQ8U3RhZ2VOYW1lLCBzdHJpbmdbXT4gPSB7XG4gIFtcIkJFVEFcIl06IFtcbiAgICBcInVtY2NyLXRlbXAtZGV2XCIsXG4gICAgYG50c20tZmluZ2VycHJpbnRzLSR7QkVUQV9FTlZJUk9OTUVOVC5hY2NvdW50fS1hcC1zb3V0aGVhc3QtMmAsXG4gICAgYGRhdGEtc2hhcmluZy1hcnRpZmFjdHMtJHtCRVRBX0VOVklST05NRU5ULmFjY291bnR9LWFwLXNvdXRoZWFzdC0yYCxcbiAgICBcImZpbGVtYW5hZ2VyLWludmVudG9yeS10ZXN0XCIsXG4gIF0sXG4gIFtcIkdBTU1BXCJdOiBbXG4gICAgXCJ1bWNjci10ZW1wLXN0Z1wiLFxuICAgIGBudHNtLWZpbmdlcnByaW50cy0ke0dBTU1BX0VOVklST05NRU5ULmFjY291bnR9LWFwLXNvdXRoZWFzdC0yYCxcbiAgICBgZGF0YS1zaGFyaW5nLWFydGlmYWN0cy0ke0dBTU1BX0VOVklST05NRU5ULmFjY291bnR9LWFwLXNvdXRoZWFzdC0yYCxcbiAgXSxcbiAgW1wiUFJPRFwiXTogW1xuICAgIFwib3JnLnVtY2NyLmRhdGEub25jb2FuYWx5c2VyXCIsXG4gICAgXCJhcmNoaXZlLXByb2QtYW5hbHlzaXMtNTAzOTc3Mjc1NjE2LWFwLXNvdXRoZWFzdC0yXCIsXG4gICAgXCJhcmNoaXZlLXByb2QtZmFzdHEtNTAzOTc3Mjc1NjE2LWFwLXNvdXRoZWFzdC0yXCIsXG4gICAgYG50c20tZmluZ2VycHJpbnRzLSR7UFJPRF9FTlZJUk9OTUVOVC5hY2NvdW50fS1hcC1zb3V0aGVhc3QtMmAsXG4gICAgYGRhdGEtc2hhcmluZy1hcnRpZmFjdHMtJHtQUk9EX0VOVklST05NRU5ULmFjY291bnR9LWFwLXNvdXRoZWFzdC0yYCxcbiAgICBcInBpcGVsaW5lLW1vbnRhdWstOTc3MjUxNTg2NjU3LWFwLXNvdXRoZWFzdC0yXCIsXG4gIF0sXG59O1xuXG5leHBvcnQgY29uc3QgZmlsZU1hbmFnZXJDYWNoZUJ1Y2tldHM6IFJlY29yZDxTdGFnZU5hbWUsIHN0cmluZ1tdPiA9IHtcbiAgW1wiQkVUQVwiXTogW1wicGlwZWxpbmUtZGV2LWNhY2hlLTUwMzk3NzI3NTYxNi1hcC1zb3V0aGVhc3QtMlwiXSxcbiAgW1wiR0FNTUFcIl06IFtcInBpcGVsaW5lLXN0Zy1jYWNoZS01MDM5NzcyNzU2MTYtYXAtc291dGhlYXN0LTJcIl0sXG4gIFtcIlBST0RcIl06IFtcInBpcGVsaW5lLXByb2QtY2FjaGUtNTAzOTc3Mjc1NjE2LWFwLXNvdXRoZWFzdC0yXCJdLFxufTtcblxuZXhwb3J0IGNvbnN0IGZpbGVNYW5hZ2VyUHJlc2lnblVzZXJTZWNyZXQgPSBcIm9yY2FidXMvZmlsZS1tYW5hZ2VyLXByZXNpZ24tdXNlclwiOyAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbmV4cG9ydCBjb25zdCBhY2Nlc3NLZXlTZWNyZXRBcm46IFJlY29yZDxTdGFnZU5hbWUsIHN0cmluZz4gPSB7XG4gIFtcIkJFVEFcIl06IGBhcm46YXdzOnNlY3JldHNtYW5hZ2VyOiR7QkVUQV9FTlZJUk9OTUVOVC5yZWdpb259OiR7QkVUQV9FTlZJUk9OTUVOVC5hY2NvdW50fTpzZWNyZXQ6JHtmaWxlTWFuYWdlclByZXNpZ25Vc2VyU2VjcmV0fWAsXG4gIFtcIkdBTU1BXCJdOiBgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjoke0dBTU1BX0VOVklST05NRU5ULnJlZ2lvbn06JHtHQU1NQV9FTlZJUk9OTUVOVC5hY2NvdW50fTpzZWNyZXQ6JHtmaWxlTWFuYWdlclByZXNpZ25Vc2VyU2VjcmV0fWAsXG4gIFtcIlBST0RcIl06IGBhcm46YXdzOnNlY3JldHNtYW5hZ2VyOiR7UFJPRF9FTlZJUk9OTUVOVC5yZWdpb259OiR7UFJPRF9FTlZJUk9OTUVOVC5hY2NvdW50fTpzZWNyZXQ6JHtmaWxlTWFuYWdlclByZXNpZ25Vc2VyU2VjcmV0fWAsXG59O1xuXG5leHBvcnQgY29uc3QgZmlsZU1hbmFnZXJJbmdlc3RSb2xlTmFtZSA9IFwib3JjYWJ1cy1maWxlLW1hbmFnZXItaW5nZXN0LXJvbGVcIjtcbnZhbGlkYXRlU2VjcmV0TmFtZShmaWxlTWFuYWdlclByZXNpZ25Vc2VyU2VjcmV0KTtcblxuZXhwb3J0IGNvbnN0IGZpbGVNYW5hZ2VyUHJlc2lnblVzZXIgPSBcIm9yY2FidXMtZmlsZS1tYW5hZ2VyLXByZXNpZ24tdXNlclwiOyAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiJdfQ==
44
+ exports.fileManagerDomainPrefix = "file";
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZmlsZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBRUgsb0NBQThDO0FBQzlDLDRFQUlzQztBQUd6QixRQUFBLGtCQUFrQixHQUFnQztJQUM3RCxJQUFJLEVBQUU7UUFDSixnQkFBZ0I7UUFDaEIscUJBQXFCLDRDQUFnQixDQUFDLE9BQU8saUJBQWlCO1FBQzlELDBCQUEwQiw0Q0FBZ0IsQ0FBQyxPQUFPLGlCQUFpQjtRQUNuRSw0QkFBNEI7S0FDN0I7SUFDRCxLQUFLLEVBQUU7UUFDTCxnQkFBZ0I7UUFDaEIscUJBQXFCLDZDQUFpQixDQUFDLE9BQU8saUJBQWlCO1FBQy9ELDBCQUEwQiw2Q0FBaUIsQ0FBQyxPQUFPLGlCQUFpQjtLQUNyRTtJQUNELElBQUksRUFBRTtRQUNKLDZCQUE2QjtRQUM3QixtREFBbUQ7UUFDbkQsZ0RBQWdEO1FBQ2hELHFCQUFxQiw0Q0FBZ0IsQ0FBQyxPQUFPLGlCQUFpQjtRQUM5RCwwQkFBMEIsNENBQWdCLENBQUMsT0FBTyxpQkFBaUI7UUFDbkUsOENBQThDO0tBQy9DO0NBQ0YsQ0FBQztBQUVXLFFBQUEsdUJBQXVCLEdBQWdDO0lBQ2xFLElBQUksRUFBRSxDQUFDLGdEQUFnRCxDQUFDO0lBQ3hELEtBQUssRUFBRSxDQUFDLGdEQUFnRCxDQUFDO0lBQ3pELElBQUksRUFBRSxDQUFDLGlEQUFpRCxDQUFDO0NBQzFELENBQUM7QUFFVyxRQUFBLDRCQUE0QixHQUFHLG1DQUFtQyxDQUFDLENBQUMsMkJBQTJCO0FBQy9GLFFBQUEsa0JBQWtCLEdBQThCO0lBQzNELElBQUksRUFBRSwwQkFBMEIsNENBQWdCLENBQUMsTUFBTSxJQUFJLDRDQUFnQixDQUFDLE9BQU8sV0FBVyxvQ0FBNEIsRUFBRTtJQUM1SCxLQUFLLEVBQUUsMEJBQTBCLDZDQUFpQixDQUFDLE1BQU0sSUFBSSw2Q0FBaUIsQ0FBQyxPQUFPLFdBQVcsb0NBQTRCLEVBQUU7SUFDL0gsSUFBSSxFQUFFLDBCQUEwQiw0Q0FBZ0IsQ0FBQyxNQUFNLElBQUksNENBQWdCLENBQUMsT0FBTyxXQUFXLG9DQUE0QixFQUFFO0NBQzdILENBQUM7QUFFVyxRQUFBLHlCQUF5QixHQUFHLGtDQUFrQyxDQUFDO0FBQzVFLElBQUEsMEJBQWtCLEVBQUMsb0NBQTRCLENBQUMsQ0FBQztBQUVwQyxRQUFBLHNCQUFzQixHQUFHLG1DQUFtQyxDQUFDLENBQUMsMkJBQTJCO0FBQ3pGLFFBQUEsdUJBQXVCLEdBQUcsTUFBTSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTaGFyZWQgY29uZmlnIGZvciB0aGUgRmlsZU1hbmFnZXIuXG4gKi9cblxuaW1wb3J0IHsgdmFsaWRhdGVTZWNyZXROYW1lIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQge1xuICBCRVRBX0VOVklST05NRU5ULFxuICBHQU1NQV9FTlZJUk9OTUVOVCxcbiAgUFJPRF9FTlZJUk9OTUVOVCxcbn0gZnJvbSBcIi4uL2RlcGxveW1lbnQtc3RhY2stcGlwZWxpbmVcIjtcbmltcG9ydCB7U3RhZ2VOYW1lfSBmcm9tIFwiLi9hY2NvdW50c1wiO1xuXG5leHBvcnQgY29uc3QgZmlsZU1hbmFnZXJCdWNrZXRzOiBSZWNvcmQ8U3RhZ2VOYW1lLCBzdHJpbmdbXT4gPSB7XG4gIEJFVEE6IFtcbiAgICBcInVtY2NyLXRlbXAtZGV2XCIsXG4gICAgYG50c20tZmluZ2VycHJpbnRzLSR7QkVUQV9FTlZJUk9OTUVOVC5hY2NvdW50fS1hcC1zb3V0aGVhc3QtMmAsXG4gICAgYGRhdGEtc2hhcmluZy1hcnRpZmFjdHMtJHtCRVRBX0VOVklST05NRU5ULmFjY291bnR9LWFwLXNvdXRoZWFzdC0yYCxcbiAgICBcImZpbGVtYW5hZ2VyLWludmVudG9yeS10ZXN0XCIsXG4gIF0sXG4gIEdBTU1BOiBbXG4gICAgXCJ1bWNjci10ZW1wLXN0Z1wiLFxuICAgIGBudHNtLWZpbmdlcnByaW50cy0ke0dBTU1BX0VOVklST05NRU5ULmFjY291bnR9LWFwLXNvdXRoZWFzdC0yYCxcbiAgICBgZGF0YS1zaGFyaW5nLWFydGlmYWN0cy0ke0dBTU1BX0VOVklST05NRU5ULmFjY291bnR9LWFwLXNvdXRoZWFzdC0yYCxcbiAgXSxcbiAgUFJPRDogW1xuICAgIFwib3JnLnVtY2NyLmRhdGEub25jb2FuYWx5c2VyXCIsXG4gICAgXCJhcmNoaXZlLXByb2QtYW5hbHlzaXMtNTAzOTc3Mjc1NjE2LWFwLXNvdXRoZWFzdC0yXCIsXG4gICAgXCJhcmNoaXZlLXByb2QtZmFzdHEtNTAzOTc3Mjc1NjE2LWFwLXNvdXRoZWFzdC0yXCIsXG4gICAgYG50c20tZmluZ2VycHJpbnRzLSR7UFJPRF9FTlZJUk9OTUVOVC5hY2NvdW50fS1hcC1zb3V0aGVhc3QtMmAsXG4gICAgYGRhdGEtc2hhcmluZy1hcnRpZmFjdHMtJHtQUk9EX0VOVklST05NRU5ULmFjY291bnR9LWFwLXNvdXRoZWFzdC0yYCxcbiAgICBcInBpcGVsaW5lLW1vbnRhdWstOTc3MjUxNTg2NjU3LWFwLXNvdXRoZWFzdC0yXCIsXG4gIF0sXG59O1xuXG5leHBvcnQgY29uc3QgZmlsZU1hbmFnZXJDYWNoZUJ1Y2tldHM6IFJlY29yZDxTdGFnZU5hbWUsIHN0cmluZ1tdPiA9IHtcbiAgQkVUQTogW1wicGlwZWxpbmUtZGV2LWNhY2hlLTUwMzk3NzI3NTYxNi1hcC1zb3V0aGVhc3QtMlwiXSxcbiAgR0FNTUE6IFtcInBpcGVsaW5lLXN0Zy1jYWNoZS01MDM5NzcyNzU2MTYtYXAtc291dGhlYXN0LTJcIl0sXG4gIFBST0Q6IFtcInBpcGVsaW5lLXByb2QtY2FjaGUtNTAzOTc3Mjc1NjE2LWFwLXNvdXRoZWFzdC0yXCJdLFxufTtcblxuZXhwb3J0IGNvbnN0IGZpbGVNYW5hZ2VyUHJlc2lnblVzZXJTZWNyZXQgPSBcIm9yY2FidXMvZmlsZS1tYW5hZ2VyLXByZXNpZ24tdXNlclwiOyAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbmV4cG9ydCBjb25zdCBhY2Nlc3NLZXlTZWNyZXRBcm46IFJlY29yZDxTdGFnZU5hbWUsIHN0cmluZz4gPSB7XG4gIEJFVEE6IGBhcm46YXdzOnNlY3JldHNtYW5hZ2VyOiR7QkVUQV9FTlZJUk9OTUVOVC5yZWdpb259OiR7QkVUQV9FTlZJUk9OTUVOVC5hY2NvdW50fTpzZWNyZXQ6JHtmaWxlTWFuYWdlclByZXNpZ25Vc2VyU2VjcmV0fWAsXG4gIEdBTU1BOiBgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjoke0dBTU1BX0VOVklST05NRU5ULnJlZ2lvbn06JHtHQU1NQV9FTlZJUk9OTUVOVC5hY2NvdW50fTpzZWNyZXQ6JHtmaWxlTWFuYWdlclByZXNpZ25Vc2VyU2VjcmV0fWAsXG4gIFBST0Q6IGBhcm46YXdzOnNlY3JldHNtYW5hZ2VyOiR7UFJPRF9FTlZJUk9OTUVOVC5yZWdpb259OiR7UFJPRF9FTlZJUk9OTUVOVC5hY2NvdW50fTpzZWNyZXQ6JHtmaWxlTWFuYWdlclByZXNpZ25Vc2VyU2VjcmV0fWAsXG59O1xuXG5leHBvcnQgY29uc3QgZmlsZU1hbmFnZXJJbmdlc3RSb2xlTmFtZSA9IFwib3JjYWJ1cy1maWxlLW1hbmFnZXItaW5nZXN0LXJvbGVcIjtcbnZhbGlkYXRlU2VjcmV0TmFtZShmaWxlTWFuYWdlclByZXNpZ25Vc2VyU2VjcmV0KTtcblxuZXhwb3J0IGNvbnN0IGZpbGVNYW5hZ2VyUHJlc2lnblVzZXIgPSBcIm9yY2FidXMtZmlsZS1tYW5hZ2VyLXByZXNpZ24tdXNlclwiOyAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbmV4cG9ydCBjb25zdCBmaWxlTWFuYWdlckRvbWFpblByZWZpeCA9IFwiZmlsZVwiO1xuIl19
@@ -0,0 +1,4 @@
1
+ import { StageName } from "./accounts";
2
+ export declare const icav2ProjectId: Record<StageName, string>;
3
+ export declare const icav2AccessTokenSecretId: Record<StageName, string>;
4
+ export declare const icav2BaseUrl: string;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.icav2BaseUrl = exports.icav2AccessTokenSecretId = exports.icav2ProjectId = void 0;
4
+ exports.icav2ProjectId = {
5
+ BETA: "ea19a3f5-ec7c-4940-a474-c31cd91dbad4", // development
6
+ GAMMA: "157b9e78-b2e1-45a7-bfcd-691159995f7c", // staging
7
+ PROD: "eba5c946-1677-441d-bbce-6a11baadecbb", // production
8
+ };
9
+ exports.icav2AccessTokenSecretId = {
10
+ BETA: 'ICAv2JWTKey-umccr-prod-service-dev', // pragma: allowlist secret
11
+ GAMMA: 'ICAv2JWTKey-umccr-prod-service-staging', // pragma: allowlist secret
12
+ PROD: 'ICAv2JWTKey-umccr-prod-service-production', // pragma: allowlist secret
13
+ };
14
+ exports.icav2BaseUrl = "https://ica.illumina.com/ica/rest";
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNhdjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpY2F2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFYSxRQUFBLGNBQWMsR0FBOEI7SUFDdkQsSUFBSSxFQUFFLHNDQUFzQyxFQUFFLGNBQWM7SUFDNUQsS0FBSyxFQUFFLHNDQUFzQyxFQUFFLFVBQVU7SUFDekQsSUFBSSxFQUFFLHNDQUFzQyxFQUFFLGFBQWE7Q0FDNUQsQ0FBQztBQUVXLFFBQUEsd0JBQXdCLEdBQThCO0lBQ2pFLElBQUksRUFBRSxvQ0FBb0MsRUFBRSwyQkFBMkI7SUFDdkUsS0FBSyxFQUFFLHdDQUF3QyxFQUFFLDJCQUEyQjtJQUM1RSxJQUFJLEVBQUUsMkNBQTJDLEVBQUUsMkJBQTJCO0NBQy9FLENBQUM7QUFFVyxRQUFBLFlBQVksR0FBVyxtQ0FBbUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3RhZ2VOYW1lfSBmcm9tIFwiLi9hY2NvdW50c1wiO1xuXG5leHBvcnQgY29uc3QgaWNhdjJQcm9qZWN0SWQ6IFJlY29yZDxTdGFnZU5hbWUsIHN0cmluZz4gPSB7XG4gIEJFVEE6IFwiZWExOWEzZjUtZWM3Yy00OTQwLWE0NzQtYzMxY2Q5MWRiYWQ0XCIsIC8vIGRldmVsb3BtZW50XG4gIEdBTU1BOiBcIjE1N2I5ZTc4LWIyZTEtNDVhNy1iZmNkLTY5MTE1OTk5NWY3Y1wiLCAvLyBzdGFnaW5nXG4gIFBST0Q6IFwiZWJhNWM5NDYtMTY3Ny00NDFkLWJiY2UtNmExMWJhYWRlY2JiXCIsIC8vIHByb2R1Y3Rpb25cbn07XG5cbmV4cG9ydCBjb25zdCBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQ6IFJlY29yZDxTdGFnZU5hbWUsIHN0cmluZz4gPSB7XG4gIEJFVEE6ICdJQ0F2MkpXVEtleS11bWNjci1wcm9kLXNlcnZpY2UtZGV2JywgLy8gcHJhZ21hOiBhbGxvd2xpc3Qgc2VjcmV0XG4gIEdBTU1BOiAnSUNBdjJKV1RLZXktdW1jY3ItcHJvZC1zZXJ2aWNlLXN0YWdpbmcnLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgUFJPRDogJ0lDQXYySldUS2V5LXVtY2NyLXByb2Qtc2VydmljZS1wcm9kdWN0aW9uJywgLy8gcHJhZ21hOiBhbGxvd2xpc3Qgc2VjcmV0XG59O1xuXG5leHBvcnQgY29uc3QgaWNhdjJCYXNlVXJsOiBzdHJpbmcgPSBcImh0dHBzOi8vaWNhLmlsbHVtaW5hLmNvbS9pY2EvcmVzdFwiIl19
@@ -3,3 +3,5 @@ export * as networking from "./networking";
3
3
  export * as eventBridge from "./event-bridge";
4
4
  export * as account from "./accounts";
5
5
  export * as database from "./database";
6
+ export * as s3 from "./s3";
7
+ export * as icav2 from "./icav2";
@@ -33,10 +33,12 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.database = exports.account = exports.eventBridge = exports.networking = exports.fileManager = void 0;
36
+ exports.icav2 = exports.s3 = exports.database = exports.account = exports.eventBridge = exports.networking = exports.fileManager = void 0;
37
37
  exports.fileManager = __importStar(require("./file-manager"));
38
38
  exports.networking = __importStar(require("./networking"));
39
39
  exports.eventBridge = __importStar(require("./event-bridge"));
40
40
  exports.account = __importStar(require("./accounts"));
41
41
  exports.database = __importStar(require("./database"));
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4REFBOEM7QUFDOUMsMkRBQTJDO0FBQzNDLDhEQUE4QztBQUM5QyxzREFBc0M7QUFDdEMsdURBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogYXMgZmlsZU1hbmFnZXIgZnJvbSBcIi4vZmlsZS1tYW5hZ2VyXCI7XG5leHBvcnQgKiBhcyBuZXR3b3JraW5nIGZyb20gXCIuL25ldHdvcmtpbmdcIjtcbmV4cG9ydCAqIGFzIGV2ZW50QnJpZGdlIGZyb20gXCIuL2V2ZW50LWJyaWRnZVwiO1xuZXhwb3J0ICogYXMgYWNjb3VudCBmcm9tIFwiLi9hY2NvdW50c1wiO1xuZXhwb3J0ICogYXMgZGF0YWJhc2UgZnJvbSBcIi4vZGF0YWJhc2VcIjtcbiJdfQ==
42
+ exports.s3 = __importStar(require("./s3"));
43
+ exports.icav2 = __importStar(require("./icav2"));
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4REFBOEM7QUFDOUMsMkRBQTJDO0FBQzNDLDhEQUE4QztBQUM5QyxzREFBc0M7QUFDdEMsdURBQXVDO0FBQ3ZDLDJDQUEyQjtBQUMzQixpREFBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBhcyBmaWxlTWFuYWdlciBmcm9tIFwiLi9maWxlLW1hbmFnZXJcIjtcbmV4cG9ydCAqIGFzIG5ldHdvcmtpbmcgZnJvbSBcIi4vbmV0d29ya2luZ1wiO1xuZXhwb3J0ICogYXMgZXZlbnRCcmlkZ2UgZnJvbSBcIi4vZXZlbnQtYnJpZGdlXCI7XG5leHBvcnQgKiBhcyBhY2NvdW50IGZyb20gXCIuL2FjY291bnRzXCI7XG5leHBvcnQgKiBhcyBkYXRhYmFzZSBmcm9tIFwiLi9kYXRhYmFzZVwiO1xuZXhwb3J0ICogYXMgczMgZnJvbSBcIi4vczNcIjtcbmV4cG9ydCAqIGFzIGljYXYyIGZyb20gXCIuL2ljYXYyXCI7Il19
@@ -23,7 +23,7 @@ exports.VPC_LOOKUP_PROPS = {
23
23
  * Helper for looking up the shared OrcaBus VPC.
24
24
  */
25
25
  class OrcaBusVpc {
26
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "0.0.11" };
26
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "0.0.13-beta.0" };
27
27
  /**
28
28
  * The shared VPC that is used by OrcaBus.
29
29
  * @param scope
@@ -42,7 +42,7 @@ exports.SHARED_SECURITY_GROUP_NAME = "OrcaBusSharedComputeSecurityGroup";
42
42
  * Helper for looking up the shared compute security group by name.
43
43
  */
44
44
  class OrcaBusSharedComputeSecurityGroup {
45
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "0.0.11" };
45
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "0.0.13-beta.0" };
46
46
  /**
47
47
  * The shared security group that is used by compute resources to access the database.
48
48
  * @param scope
@@ -0,0 +1,3 @@
1
+ import { StageName } from "./accounts";
2
+ export declare const pipelineCacheBucket: Record<StageName, string>;
3
+ export declare const pipelineCachePrefix: Record<StageName, string>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pipelineCachePrefix = exports.pipelineCacheBucket = void 0;
4
+ exports.pipelineCacheBucket = {
5
+ BETA: "pipeline-dev-cache-503977275616-ap-southeast-2",
6
+ GAMMA: "pipeline-stg-cache-503977275616-ap-southeast-2",
7
+ PROD: "pipeline-prod-cache-503977275616-ap-southeast-2",
8
+ };
9
+ exports.pipelineCachePrefix = {
10
+ BETA: "byob-icav2/development/",
11
+ GAMMA: "byob-icav2/staging/",
12
+ PROD: "byob-icav2/production/",
13
+ };
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzMy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFYSxRQUFBLG1CQUFtQixHQUE4QjtJQUM1RCxJQUFJLEVBQUUsZ0RBQWdEO0lBQ3RELEtBQUssRUFBRSxnREFBZ0Q7SUFDdkQsSUFBSSxFQUFFLGlEQUFpRDtDQUN4RCxDQUFDO0FBQ1csUUFBQSxtQkFBbUIsR0FBOEI7SUFDNUQsSUFBSSxFQUFFLHlCQUF5QjtJQUMvQixLQUFLLEVBQUUscUJBQXFCO0lBQzVCLElBQUksRUFBRSx3QkFBd0I7Q0FDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3RhZ2VOYW1lfSBmcm9tIFwiLi9hY2NvdW50c1wiO1xuXG5leHBvcnQgY29uc3QgcGlwZWxpbmVDYWNoZUJ1Y2tldDogUmVjb3JkPFN0YWdlTmFtZSwgc3RyaW5nPiA9IHtcbiAgQkVUQTogXCJwaXBlbGluZS1kZXYtY2FjaGUtNTAzOTc3Mjc1NjE2LWFwLXNvdXRoZWFzdC0yXCIsXG4gIEdBTU1BOiBcInBpcGVsaW5lLXN0Zy1jYWNoZS01MDM5NzcyNzU2MTYtYXAtc291dGhlYXN0LTJcIixcbiAgUFJPRDogXCJwaXBlbGluZS1wcm9kLWNhY2hlLTUwMzk3NzI3NTYxNi1hcC1zb3V0aGVhc3QtMlwiLFxufTtcbmV4cG9ydCBjb25zdCBwaXBlbGluZUNhY2hlUHJlZml4OiBSZWNvcmQ8U3RhZ2VOYW1lLCBzdHJpbmc+ID0ge1xuICBCRVRBOiBcImJ5b2ItaWNhdjIvZGV2ZWxvcG1lbnQvXCIsXG4gIEdBTU1BOiBcImJ5b2ItaWNhdjIvc3RhZ2luZy9cIixcbiAgUFJPRDogXCJieW9iLWljYXYyL3Byb2R1Y3Rpb24vXCIsXG59O1xuXG4iXX0=
package/utils/index.d.ts CHANGED
@@ -5,18 +5,7 @@
5
5
  */
6
6
  import { Construct } from "constructs";
7
7
  import { SynthesisMessage } from "aws-cdk-lib/cx-api";
8
- /**
9
- * @deprecated Import from `@orcabus/platform-cdk-constructs/shared-config/accounts` instead.
10
- */
11
- export type StageName = "BETA" | "GAMMA" | "PROD";
12
- /**
13
- * @deprecated Import from `@orcabus/platform-cdk-constructs/shared-config/accounts` instead.
14
- */
15
- export declare const region = "ap-southeast-2";
16
- /**
17
- * @deprecated Import from `@orcabus/platform-cdk-constructs/shared-config/accounts` instead.
18
- */
19
- export declare const accountIdAlias: Record<StageName, string>;
8
+ import { StageName } from "../shared-config/accounts";
20
9
  export declare function resolveStageName(scope: Construct): StageName;
21
10
  /**
22
11
  * Stringify the message data.
@@ -26,9 +15,3 @@ export declare function synthesisMessageToString(sm: SynthesisMessage): string;
26
15
  * Validate the secret name so that it doesn't end with 6 characters and a hyphen.
27
16
  */
28
17
  export declare const validateSecretName: (secretName: string) => void;
29
- /**
30
- * TODO: Move to shared-config package
31
- */
32
- export declare const pipelineCacheBucket: Record<StageName, string>;
33
- export declare const pipelineCachePrefix: Record<StageName, string>;
34
- export declare const icav2ProjectId: Record<StageName, string>;
package/utils/index.js CHANGED
@@ -5,29 +5,28 @@
5
5
  *
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.icav2ProjectId = exports.pipelineCachePrefix = exports.pipelineCacheBucket = exports.validateSecretName = exports.accountIdAlias = exports.region = void 0;
8
+ exports.validateSecretName = void 0;
9
9
  exports.resolveStageName = resolveStageName;
10
10
  exports.synthesisMessageToString = synthesisMessageToString;
11
11
  const aws_cdk_lib_1 = require("aws-cdk-lib");
12
- /**
13
- * @deprecated Import from `@orcabus/platform-cdk-constructs/shared-config/accounts` instead.
14
- */
15
- exports.region = "ap-southeast-2";
16
- /**
17
- * @deprecated Import from `@orcabus/platform-cdk-constructs/shared-config/accounts` instead.
18
- */
19
- exports.accountIdAlias = {
20
- BETA: "843407916570", // umccr_development
21
- GAMMA: "455634345446", // umccr_staging
22
- PROD: "472057503814", // umccr_production
23
- };
12
+ const accounts_1 = require("../shared-config/accounts");
24
13
  function resolveStageName(scope) {
25
14
  // See discussion in https://github.com/aws/aws-cdk/issues/1754
26
15
  // Use Stack.of(scope).account to get the account ID instead of
27
16
  // cdk.Aws.ACCOUNT_ID, which may not be available at this point in the CDK lifecycle.
28
- const match = Object.entries(exports.accountIdAlias).find(([_, value]) => value === aws_cdk_lib_1.Stack.of(scope).account);
17
+ const match = Object.entries(accounts_1.accountIdAlias).find(([_, value]) => value === aws_cdk_lib_1.Stack.of(scope).account);
29
18
  if (!match) {
30
- throw new Error(`Account ID ${aws_cdk_lib_1.Stack.of(scope).account} not found in accountIdAlias`);
19
+ // Check if 'stageName' is a property in the variable 'scope'
20
+ // This is useful for cases where the account ID is not found in accountIdAlias
21
+ // but the stage name is provided as a construct attribute.
22
+ const stackObj = scope.node.scope;
23
+ const propertyNames = Object.getOwnPropertyNames(stackObj);
24
+ if (!propertyNames.includes('stageName')) {
25
+ throw new Error(`Account ID ${aws_cdk_lib_1.Stack.of(scope).account} not found in accountIdAlias.
26
+ Please set 'stageName' as a construct attribute in your stack as a fallback`);
27
+ }
28
+ // If 'stageName' is present, return it as a StageName
29
+ return Object(stackObj)['stageName'];
31
30
  }
32
31
  return match[0];
33
32
  }
@@ -48,22 +47,4 @@ const validateSecretName = (secretName) => {
48
47
  }
49
48
  };
50
49
  exports.validateSecretName = validateSecretName;
51
- /**
52
- * TODO: Move to shared-config package
53
- */
54
- exports.pipelineCacheBucket = {
55
- BETA: "pipeline-dev-cache-503977275616-ap-southeast-2",
56
- GAMMA: "pipeline-stg-cache-503977275616-ap-southeast-2",
57
- PROD: "pipeline-prod-cache-503977275616-ap-southeast-2",
58
- };
59
- exports.pipelineCachePrefix = {
60
- BETA: "byob-icav2/development/",
61
- GAMMA: "byob-icav2/staging/",
62
- PROD: "byob-icav2/production/",
63
- };
64
- exports.icav2ProjectId = {
65
- BETA: "ea19a3f5-ec7c-4940-a474-c31cd91dbad4", // development
66
- GAMMA: "157b9e78-b2e1-45a7-bfcd-691159995f7c", // staging
67
- PROD: "eba5c946-1677-441d-bbce-6a11baadecbb", // production
68
- };
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBdUJILDRDQWVDO0FBS0QsNERBRUM7QUExQ0QsNkNBQW9DO0FBT3BDOztHQUVHO0FBQ1UsUUFBQSxNQUFNLEdBQUcsZ0JBQWdCLENBQUM7QUFDdkM7O0dBRUc7QUFDVSxRQUFBLGNBQWMsR0FBOEI7SUFDdkQsSUFBSSxFQUFFLGNBQWMsRUFBRSxvQkFBb0I7SUFDMUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0I7SUFDdkMsSUFBSSxFQUFFLGNBQWMsRUFBRSxtQkFBbUI7Q0FDMUMsQ0FBQztBQUVGLFNBQWdCLGdCQUFnQixDQUFDLEtBQWdCO0lBQy9DLCtEQUErRDtJQUMvRCwrREFBK0Q7SUFDL0QscUZBQXFGO0lBQ3JGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsc0JBQWMsQ0FBQyxDQUFDLElBQUksQ0FDL0MsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FDbEQsQ0FBQztJQUVGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQ2IsY0FBYyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLDhCQUE4QixDQUNwRSxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBYyxDQUFDO0FBQy9CLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLEVBQW9CO0lBQzNELE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQ3ZELENBQUM7QUFFRDs7R0FFRztBQUNJLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxVQUFrQixFQUFFLEVBQUU7SUFDdkQsK0ZBQStGO0lBQy9GLCtDQUErQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksS0FBSyxDQUNiLCtEQUErRCxDQUNoRSxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FBQztBQVJXLFFBQUEsa0JBQWtCLHNCQVE3QjtBQUVGOztHQUVHO0FBRVUsUUFBQSxtQkFBbUIsR0FBOEI7SUFDNUQsSUFBSSxFQUFFLGdEQUFnRDtJQUN0RCxLQUFLLEVBQUUsZ0RBQWdEO0lBQ3ZELElBQUksRUFBRSxpREFBaUQ7Q0FDeEQsQ0FBQztBQUNXLFFBQUEsbUJBQW1CLEdBQThCO0lBQzVELElBQUksRUFBRSx5QkFBeUI7SUFDL0IsS0FBSyxFQUFFLHFCQUFxQjtJQUM1QixJQUFJLEVBQUUsd0JBQXdCO0NBQy9CLENBQUM7QUFFVyxRQUFBLGNBQWMsR0FBOEI7SUFDdkQsSUFBSSxFQUFFLHNDQUFzQyxFQUFFLGNBQWM7SUFDNUQsS0FBSyxFQUFFLHNDQUFzQyxFQUFFLFVBQVU7SUFDekQsSUFBSSxFQUFFLHNDQUFzQyxFQUFFLGFBQWE7Q0FDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICpcbiAqIFNoYXJlZCBjb25maWd1cmF0aW9uIHNob3VsZCBub3cgYmUgcGxhY2VkIGluIHRoZSBzaGFyZWQtY29uZmlnIHBhY2thZ2UuXG4gKlxuICovXG5cbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgU3ludGhlc2lzTWVzc2FnZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9jeC1hcGlcIjtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBJbXBvcnQgZnJvbSBgQG9yY2FidXMvcGxhdGZvcm0tY2RrLWNvbnN0cnVjdHMvc2hhcmVkLWNvbmZpZy9hY2NvdW50c2AgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VOYW1lID0gXCJCRVRBXCIgfCBcIkdBTU1BXCIgfCBcIlBST0RcIjtcbi8qKlxuICogQGRlcHJlY2F0ZWQgSW1wb3J0IGZyb20gYEBvcmNhYnVzL3BsYXRmb3JtLWNkay1jb25zdHJ1Y3RzL3NoYXJlZC1jb25maWcvYWNjb3VudHNgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCByZWdpb24gPSBcImFwLXNvdXRoZWFzdC0yXCI7XG4vKipcbiAqIEBkZXByZWNhdGVkIEltcG9ydCBmcm9tIGBAb3JjYWJ1cy9wbGF0Zm9ybS1jZGstY29uc3RydWN0cy9zaGFyZWQtY29uZmlnL2FjY291bnRzYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgYWNjb3VudElkQWxpYXM6IFJlY29yZDxTdGFnZU5hbWUsIHN0cmluZz4gPSB7XG4gIEJFVEE6IFwiODQzNDA3OTE2NTcwXCIsIC8vIHVtY2NyX2RldmVsb3BtZW50XG4gIEdBTU1BOiBcIjQ1NTYzNDM0NTQ0NlwiLCAvLyB1bWNjcl9zdGFnaW5nXG4gIFBST0Q6IFwiNDcyMDU3NTAzODE0XCIsIC8vIHVtY2NyX3Byb2R1Y3Rpb25cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU3RhZ2VOYW1lKHNjb3BlOiBDb25zdHJ1Y3QpOiBTdGFnZU5hbWUge1xuICAvLyBTZWUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE3NTRcbiAgLy8gVXNlIFN0YWNrLm9mKHNjb3BlKS5hY2NvdW50IHRvIGdldCB0aGUgYWNjb3VudCBJRCBpbnN0ZWFkIG9mXG4gIC8vIGNkay5Bd3MuQUNDT1VOVF9JRCwgd2hpY2ggbWF5IG5vdCBiZSBhdmFpbGFibGUgYXQgdGhpcyBwb2ludCBpbiB0aGUgQ0RLIGxpZmVjeWNsZS5cbiAgY29uc3QgbWF0Y2ggPSBPYmplY3QuZW50cmllcyhhY2NvdW50SWRBbGlhcykuZmluZChcbiAgICAoW18sIHZhbHVlXSkgPT4gdmFsdWUgPT09IFN0YWNrLm9mKHNjb3BlKS5hY2NvdW50LFxuICApO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQWNjb3VudCBJRCAke1N0YWNrLm9mKHNjb3BlKS5hY2NvdW50fSBub3QgZm91bmQgaW4gYWNjb3VudElkQWxpYXNgLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbWF0Y2hbMF0gYXMgU3RhZ2VOYW1lO1xufVxuXG4vKipcbiAqIFN0cmluZ2lmeSB0aGUgbWVzc2FnZSBkYXRhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ludGhlc2lzTWVzc2FnZVRvU3RyaW5nKHNtOiBTeW50aGVzaXNNZXNzYWdlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke0pTT04uc3RyaW5naWZ5KHNtLmVudHJ5LmRhdGEpfSBbJHtzbS5pZH1dYDtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGUgc2VjcmV0IG5hbWUgc28gdGhhdCBpdCBkb2Vzbid0IGVuZCB3aXRoIDYgY2hhcmFjdGVycyBhbmQgYSBoeXBoZW4uXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVNlY3JldE5hbWUgPSAoc2VjcmV0TmFtZTogc3RyaW5nKSA9PiB7XG4gIC8vIE5vdGUsIHRoaXMgc2hvdWxkIG5vdCBlbmQgd2l0aCBhIGh5cGhlbiBhbmQgNiBjaGFyYWN0ZXJzLCBvdGhlcndpc2Ugc2VjcmV0cyBtYW5hZ2VyIHdvbid0IGJlXG4gIC8vIGFibGUgdG8gZmluZCB0aGUgc2VjcmV0IHVzaW5nIGEgcGFydGlhbCBBUk4uXG4gIGlmICgvLSguKXs2fSQvLnRlc3Qoc2VjcmV0TmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcInRoZSBzZWNyZXQgbmFtZSBzaG91bGQgbm90IGVuZCB3aXRoIGEgaHlwaGVuIGFuZCA2IGNoYXJhY3RlcnNcIixcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIFRPRE86IE1vdmUgdG8gc2hhcmVkLWNvbmZpZyBwYWNrYWdlXG4gKi9cblxuZXhwb3J0IGNvbnN0IHBpcGVsaW5lQ2FjaGVCdWNrZXQ6IFJlY29yZDxTdGFnZU5hbWUsIHN0cmluZz4gPSB7XG4gIEJFVEE6IFwicGlwZWxpbmUtZGV2LWNhY2hlLTUwMzk3NzI3NTYxNi1hcC1zb3V0aGVhc3QtMlwiLFxuICBHQU1NQTogXCJwaXBlbGluZS1zdGctY2FjaGUtNTAzOTc3Mjc1NjE2LWFwLXNvdXRoZWFzdC0yXCIsXG4gIFBST0Q6IFwicGlwZWxpbmUtcHJvZC1jYWNoZS01MDM5NzcyNzU2MTYtYXAtc291dGhlYXN0LTJcIixcbn07XG5leHBvcnQgY29uc3QgcGlwZWxpbmVDYWNoZVByZWZpeDogUmVjb3JkPFN0YWdlTmFtZSwgc3RyaW5nPiA9IHtcbiAgQkVUQTogXCJieW9iLWljYXYyL2RldmVsb3BtZW50L1wiLFxuICBHQU1NQTogXCJieW9iLWljYXYyL3N0YWdpbmcvXCIsXG4gIFBST0Q6IFwiYnlvYi1pY2F2Mi9wcm9kdWN0aW9uL1wiLFxufTtcblxuZXhwb3J0IGNvbnN0IGljYXYyUHJvamVjdElkOiBSZWNvcmQ8U3RhZ2VOYW1lLCBzdHJpbmc+ID0ge1xuICBCRVRBOiBcImVhMTlhM2Y1LWVjN2MtNDk0MC1hNDc0LWMzMWNkOTFkYmFkNFwiLCAvLyBkZXZlbG9wbWVudFxuICBHQU1NQTogXCIxNTdiOWU3OC1iMmUxLTQ1YTctYmZjZC02OTExNTk5OTVmN2NcIiwgLy8gc3RhZ2luZ1xuICBQUk9EOiBcImViYTVjOTQ2LTE2NzctNDQxZC1iYmNlLTZhMTFiYWFkZWNiYlwiLCAvLyBwcm9kdWN0aW9uXG59O1xuIl19
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBUUgsNENBeUJDO0FBS0QsNERBRUM7QUFyQ0QsNkNBQW9DO0FBRXBDLHdEQUFtRTtBQUduRSxTQUFnQixnQkFBZ0IsQ0FBQyxLQUFnQjtJQUMvQywrREFBK0Q7SUFDL0QsK0RBQStEO0lBQy9ELHFGQUFxRjtJQUNyRixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLHlCQUFjLENBQUMsQ0FBQyxJQUFJLENBQy9DLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQ2xELENBQUM7SUFFRixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCw2REFBNkQ7UUFDN0QsK0VBQStFO1FBQy9FLDJEQUEyRDtRQUMzRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNsQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksS0FBSyxDQUNiLGNBQWMsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTztvRkFDdUMsQ0FDN0UsQ0FBQztRQUNKLENBQUM7UUFDRCxzREFBc0Q7UUFDdEQsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFjLENBQUM7SUFDcEQsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBYyxDQUFDO0FBQy9CLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLEVBQW9CO0lBQzNELE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO0FBQ3ZELENBQUM7QUFFRDs7R0FFRztBQUNJLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxVQUFrQixFQUFFLEVBQUU7SUFDdkQsK0ZBQStGO0lBQy9GLCtDQUErQztJQUMvQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksS0FBSyxDQUNiLCtEQUErRCxDQUNoRSxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FBQztBQVJXLFFBQUEsa0JBQWtCLHNCQVE3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICpcbiAqIFNoYXJlZCBjb25maWd1cmF0aW9uIHNob3VsZCBub3cgYmUgcGxhY2VkIGluIHRoZSBzaGFyZWQtY29uZmlnIHBhY2thZ2UuXG4gKlxuICovXG5cbmltcG9ydCB7Q29uc3RydWN0fSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFN5bnRoZXNpc01lc3NhZ2UgfSBmcm9tIFwiYXdzLWNkay1saWIvY3gtYXBpXCI7XG5pbXBvcnQge2FjY291bnRJZEFsaWFzLCBTdGFnZU5hbWV9IGZyb20gXCIuLi9zaGFyZWQtY29uZmlnL2FjY291bnRzXCJcblxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVN0YWdlTmFtZShzY29wZTogQ29uc3RydWN0KTogU3RhZ2VOYW1lIHtcbiAgLy8gU2VlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNzU0XG4gIC8vIFVzZSBTdGFjay5vZihzY29wZSkuYWNjb3VudCB0byBnZXQgdGhlIGFjY291bnQgSUQgaW5zdGVhZCBvZlxuICAvLyBjZGsuQXdzLkFDQ09VTlRfSUQsIHdoaWNoIG1heSBub3QgYmUgYXZhaWxhYmxlIGF0IHRoaXMgcG9pbnQgaW4gdGhlIENESyBsaWZlY3ljbGUuXG4gIGNvbnN0IG1hdGNoID0gT2JqZWN0LmVudHJpZXMoYWNjb3VudElkQWxpYXMpLmZpbmQoXG4gICAgKFtfLCB2YWx1ZV0pID0+IHZhbHVlID09PSBTdGFjay5vZihzY29wZSkuYWNjb3VudCxcbiAgKTtcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgLy8gQ2hlY2sgaWYgJ3N0YWdlTmFtZScgaXMgYSBwcm9wZXJ0eSBpbiB0aGUgdmFyaWFibGUgJ3Njb3BlJ1xuICAgIC8vIFRoaXMgaXMgdXNlZnVsIGZvciBjYXNlcyB3aGVyZSB0aGUgYWNjb3VudCBJRCBpcyBub3QgZm91bmQgaW4gYWNjb3VudElkQWxpYXNcbiAgICAvLyBidXQgdGhlIHN0YWdlIG5hbWUgaXMgcHJvdmlkZWQgYXMgYSBjb25zdHJ1Y3QgYXR0cmlidXRlLlxuICAgIGNvbnN0IHN0YWNrT2JqID0gc2NvcGUubm9kZS5zY29wZTtcbiAgICBjb25zdCBwcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc3RhY2tPYmopO1xuICAgIGlmICghcHJvcGVydHlOYW1lcy5pbmNsdWRlcygnc3RhZ2VOYW1lJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFjY291bnQgSUQgJHtTdGFjay5vZihzY29wZSkuYWNjb3VudH0gbm90IGZvdW5kIGluIGFjY291bnRJZEFsaWFzLlxuICAgICAgICBQbGVhc2Ugc2V0ICdzdGFnZU5hbWUnIGFzIGEgY29uc3RydWN0IGF0dHJpYnV0ZSBpbiB5b3VyIHN0YWNrIGFzIGEgZmFsbGJhY2tgLFxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gSWYgJ3N0YWdlTmFtZScgaXMgcHJlc2VudCwgcmV0dXJuIGl0IGFzIGEgU3RhZ2VOYW1lXG4gICAgcmV0dXJuIE9iamVjdChzdGFja09iailbJ3N0YWdlTmFtZSddIGFzIFN0YWdlTmFtZTtcbiAgfVxuXG4gIHJldHVybiBtYXRjaFswXSBhcyBTdGFnZU5hbWU7XG59XG5cbi8qKlxuICogU3RyaW5naWZ5IHRoZSBtZXNzYWdlIGRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzeW50aGVzaXNNZXNzYWdlVG9TdHJpbmcoc206IFN5bnRoZXNpc01lc3NhZ2UpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7SlNPTi5zdHJpbmdpZnkoc20uZW50cnkuZGF0YSl9IFske3NtLmlkfV1gO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHRoZSBzZWNyZXQgbmFtZSBzbyB0aGF0IGl0IGRvZXNuJ3QgZW5kIHdpdGggNiBjaGFyYWN0ZXJzIGFuZCBhIGh5cGhlbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU2VjcmV0TmFtZSA9IChzZWNyZXROYW1lOiBzdHJpbmcpID0+IHtcbiAgLy8gTm90ZSwgdGhpcyBzaG91bGQgbm90IGVuZCB3aXRoIGEgaHlwaGVuIGFuZCA2IGNoYXJhY3RlcnMsIG90aGVyd2lzZSBzZWNyZXRzIG1hbmFnZXIgd29uJ3QgYmVcbiAgLy8gYWJsZSB0byBmaW5kIHRoZSBzZWNyZXQgdXNpbmcgYSBwYXJ0aWFsIEFSTi5cbiAgaWYgKC8tKC4pezZ9JC8udGVzdChzZWNyZXROYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwidGhlIHNlY3JldCBuYW1lIHNob3VsZCBub3QgZW5kIHdpdGggYSBoeXBoZW4gYW5kIDYgY2hhcmFjdGVyc1wiLFxuICAgICk7XG4gIH1cbn07XG4iXX0=