@aligent/cdk-aspects 0.6.3 → 0.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/README.md +2 -0
- package/lib/cdk-managed-singletons.d.ts +16 -0
- package/lib/cdk-managed-singletons.js +32 -0
- package/lib/defaults/dynamodb.d.ts +0 -20
- package/lib/defaults/dynamodb.js +16 -32
- package/lib/microservice-checks.d.ts +0 -1
- package/lib/microservice-checks.js +3 -22
- package/lib/resource-prefix.js +9 -1
- package/package.json +6 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @aligent/cdk-aspects
|
|
2
2
|
|
|
3
|
+
## 0.6.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#1717](https://github.com/aligent/cdk-constructs/pull/1717) [`3dd2e7a`](https://github.com/aligent/cdk-constructs/commit/3dd2e7a126d245bf5eb8d785ea5b46ad11b50580) Thanks [@kai-nguyen-aligent](https://github.com/kai-nguyen-aligent)! - Fix conflicting throughput config when aspect overrides DynamoDB billing mode
|
|
8
|
+
|
|
9
|
+
## 0.6.4
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#1698](https://github.com/aligent/cdk-constructs/pull/1698) [`c9f490f`](https://github.com/aligent/cdk-constructs/commit/c9f490f17f42aed92646543f7978ac8e4fc9ebb6) Thanks [@toddhainsworth](https://github.com/toddhainsworth)! - Move `aws-cdk-lib` and `constructs` from `dependencies` to `peerDependencies`, matching the convention used by every `@aligent/cdk-*` construct package.
|
|
14
|
+
|
|
15
|
+
As regular dependencies, a consumer whose own `aws-cdk-lib` resolved to a different version ended up with two copies in the tree. The aspects' `instanceof CfnResource` checks compared against the nested copy's class, so `visit()` returned early for every node — aspects silently became a no-op (no prefixes, no defaults, no checks) with a valid-but-untouched synth. Declaring them as peers guarantees a single shared instance with the consumer.
|
|
16
|
+
|
|
17
|
+
- [#1702](https://github.com/aligent/cdk-constructs/pull/1702) [`49f7a78`](https://github.com/aligent/cdk-constructs/commit/49f7a78418a566b4c868293c293ccab9528fc647) Thanks [@toddhainsworth](https://github.com/toddhainsworth)! - Fix `ResourcePrefixAspect` to skip CDK-managed singleton/framework resources (`BucketDeployment` handler, `LogRetention`, `S3AutoDeleteObjects`, and `cr.Provider` framework lambdas) and their nested children (IAM service roles, log groups) instead of pinning deterministic physical names onto them.
|
|
18
|
+
|
|
19
|
+
These singletons share a fixed logical id across every stack, so a deterministic prefixed name collapses to one value per prefix scope. That removed CloudFormation's per-stack and per-creation uniqueness and caused two deploy failures:
|
|
20
|
+
- **Cross-stack IAM role collision** — two `BucketDeployment`-using stacks in the same stage received the same account-global `RoleName`, so the second stack failed with `... already exists`.
|
|
21
|
+
- **Orphaned `/aws/lambda` log group collision on retry** — a failed deploy orphaned the service-created log group, and the deterministic function name regenerated the identical name, wedging every subsequent deploy on `AWS::Logs::LogGroup ... already exists`.
|
|
22
|
+
|
|
23
|
+
The aspect now leaves these resources CloudFormation-named, matching the singleton-skip behaviour `MicroserviceChecks` already applies.
|
|
24
|
+
|
|
3
25
|
## 0.6.3
|
|
4
26
|
|
|
5
27
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -115,6 +115,8 @@ Automatically prefixes physical resource names across supported AWS resource typ
|
|
|
115
115
|
- Handles resource-specific naming rules: S3 names are lowercased, FIFO queues/topics preserve the `.fifo` suffix, SSM parameters use path-style prefixes (`/prefix/name`)
|
|
116
116
|
- **Automatic truncation**: if a prefixed name would exceed AWS's maximum length for that resource type, the aspect truncates the name and appends an 8-character SHA-256 hash to maintain uniqueness. A CDK warning is emitted for each truncated resource. This prevents L3 constructs (e.g. `BucketDeployment`) from generating child resources that cause synthesis failures.
|
|
117
117
|
- Idempotent: already-prefixed resources are skipped
|
|
118
|
+
- Skips AWS-reserved log group names (e.g. `/aws/lambda/...`)
|
|
119
|
+
- Skips CDK-managed singleton/framework resources (`BucketDeployment` handler, `LogRetention`, `S3AutoDeleteObjects`, and `cr.Provider` framework lambdas) and their nested children (IAM service roles, log groups). These singletons share a fixed logical id across every stack, so a deterministic prefixed name collapses to one value per prefix scope. Leaving them CloudFormation-generated preserves the per-stack and per-creation uniqueness that prevents account-global IAM role collisions across stacks and orphaned `/aws/lambda` log group collisions on retry.
|
|
118
120
|
- Supports an exclusion list to skip specific resource types
|
|
119
121
|
|
|
120
122
|
### Usage
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IConstruct } from "constructs";
|
|
2
|
+
/**
|
|
3
|
+
* Path fragments identifying CDK-managed singleton/framework resources that
|
|
4
|
+
* consumers cannot configure or own.
|
|
5
|
+
*
|
|
6
|
+
* Aspects should leave these resources untouched: their runtime config is
|
|
7
|
+
* framework-owned (so cdk-nag rules are noise), and their physical names must
|
|
8
|
+
* stay CloudFormation-generated (so a failed deploy's orphaned `/aws/lambda`
|
|
9
|
+
* LogGroup never collides with a deterministic name on the next attempt).
|
|
10
|
+
*/
|
|
11
|
+
export declare const CDK_MANAGED_PATH_FRAGMENTS: string[];
|
|
12
|
+
/**
|
|
13
|
+
* Returns true when the construct lives under a CDK-managed singleton/framework
|
|
14
|
+
* path and should therefore be skipped by aspects.
|
|
15
|
+
*/
|
|
16
|
+
export declare function isCdkManagedSingleton(node: IConstruct): boolean;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CDK_MANAGED_PATH_FRAGMENTS = void 0;
|
|
4
|
+
exports.isCdkManagedSingleton = isCdkManagedSingleton;
|
|
5
|
+
/**
|
|
6
|
+
* Path fragments identifying CDK-managed singleton/framework resources that
|
|
7
|
+
* consumers cannot configure or own.
|
|
8
|
+
*
|
|
9
|
+
* Aspects should leave these resources untouched: their runtime config is
|
|
10
|
+
* framework-owned (so cdk-nag rules are noise), and their physical names must
|
|
11
|
+
* stay CloudFormation-generated (so a failed deploy's orphaned `/aws/lambda`
|
|
12
|
+
* LogGroup never collides with a deterministic name on the next attempt).
|
|
13
|
+
*/
|
|
14
|
+
exports.CDK_MANAGED_PATH_FRAGMENTS = [
|
|
15
|
+
// aws-s3-deployment.BucketDeployment custom resource handler
|
|
16
|
+
"Custom::CDKBucketDeployment",
|
|
17
|
+
// Deprecated CDK log retention custom resource
|
|
18
|
+
"LogRetention",
|
|
19
|
+
// Bucket(autoDeleteObjects: true)
|
|
20
|
+
"Custom::S3AutoDeleteObjects",
|
|
21
|
+
// cr.Provider framework on-event / is-complete handler
|
|
22
|
+
"AWS679f53fac002430cb0da5b7982bd2287",
|
|
23
|
+
];
|
|
24
|
+
/**
|
|
25
|
+
* Returns true when the construct lives under a CDK-managed singleton/framework
|
|
26
|
+
* path and should therefore be skipped by aspects.
|
|
27
|
+
*/
|
|
28
|
+
function isCdkManagedSingleton(node) {
|
|
29
|
+
const path = node.node.path;
|
|
30
|
+
return exports.CDK_MANAGED_PATH_FRAGMENTS.some(fragment => path.includes(fragment));
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLW1hbmFnZWQtc2luZ2xldG9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay1tYW5hZ2VkLXNpbmdsZXRvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMEJBLHNEQUdDO0FBM0JEOzs7Ozs7OztHQVFHO0FBQ1UsUUFBQSwwQkFBMEIsR0FBRztJQUN4Qyw2REFBNkQ7SUFDN0QsNkJBQTZCO0lBQzdCLCtDQUErQztJQUMvQyxjQUFjO0lBQ2Qsa0NBQWtDO0lBQ2xDLDZCQUE2QjtJQUM3Qix1REFBdUQ7SUFDdkQscUNBQXFDO0NBQ3RDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxJQUFnQjtJQUNwRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUM1QixPQUFPLGtDQUEwQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBQYXRoIGZyYWdtZW50cyBpZGVudGlmeWluZyBDREstbWFuYWdlZCBzaW5nbGV0b24vZnJhbWV3b3JrIHJlc291cmNlcyB0aGF0XG4gKiBjb25zdW1lcnMgY2Fubm90IGNvbmZpZ3VyZSBvciBvd24uXG4gKlxuICogQXNwZWN0cyBzaG91bGQgbGVhdmUgdGhlc2UgcmVzb3VyY2VzIHVudG91Y2hlZDogdGhlaXIgcnVudGltZSBjb25maWcgaXNcbiAqIGZyYW1ld29yay1vd25lZCAoc28gY2RrLW5hZyBydWxlcyBhcmUgbm9pc2UpLCBhbmQgdGhlaXIgcGh5c2ljYWwgbmFtZXMgbXVzdFxuICogc3RheSBDbG91ZEZvcm1hdGlvbi1nZW5lcmF0ZWQgKHNvIGEgZmFpbGVkIGRlcGxveSdzIG9ycGhhbmVkIGAvYXdzL2xhbWJkYWBcbiAqIExvZ0dyb3VwIG5ldmVyIGNvbGxpZGVzIHdpdGggYSBkZXRlcm1pbmlzdGljIG5hbWUgb24gdGhlIG5leHQgYXR0ZW1wdCkuXG4gKi9cbmV4cG9ydCBjb25zdCBDREtfTUFOQUdFRF9QQVRIX0ZSQUdNRU5UUyA9IFtcbiAgLy8gYXdzLXMzLWRlcGxveW1lbnQuQnVja2V0RGVwbG95bWVudCBjdXN0b20gcmVzb3VyY2UgaGFuZGxlclxuICBcIkN1c3RvbTo6Q0RLQnVja2V0RGVwbG95bWVudFwiLFxuICAvLyBEZXByZWNhdGVkIENESyBsb2cgcmV0ZW50aW9uIGN1c3RvbSByZXNvdXJjZVxuICBcIkxvZ1JldGVudGlvblwiLFxuICAvLyBCdWNrZXQoYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUpXG4gIFwiQ3VzdG9tOjpTM0F1dG9EZWxldGVPYmplY3RzXCIsXG4gIC8vIGNyLlByb3ZpZGVyIGZyYW1ld29yayBvbi1ldmVudCAvIGlzLWNvbXBsZXRlIGhhbmRsZXJcbiAgXCJBV1M2NzlmNTNmYWMwMDI0MzBjYjBkYTViNzk4MmJkMjI4N1wiLFxuXTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgY29uc3RydWN0IGxpdmVzIHVuZGVyIGEgQ0RLLW1hbmFnZWQgc2luZ2xldG9uL2ZyYW1ld29ya1xuICogcGF0aCBhbmQgc2hvdWxkIHRoZXJlZm9yZSBiZSBza2lwcGVkIGJ5IGFzcGVjdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Nka01hbmFnZWRTaW5nbGV0b24obm9kZTogSUNvbnN0cnVjdCk6IGJvb2xlYW4ge1xuICBjb25zdCBwYXRoID0gbm9kZS5ub2RlLnBhdGg7XG4gIHJldHVybiBDREtfTUFOQUdFRF9QQVRIX0ZSQUdNRU5UUy5zb21lKGZyYWdtZW50ID0+IHBhdGguaW5jbHVkZXMoZnJhZ21lbnQpKTtcbn1cbiJdfQ==
|
|
@@ -3,26 +3,6 @@ import { IConstruct } from "constructs";
|
|
|
3
3
|
interface Config {
|
|
4
4
|
duration: "SHORT" | "MEDIUM" | "LONG";
|
|
5
5
|
}
|
|
6
|
-
/**
|
|
7
|
-
* Aspect that automatically applies configuration-aware defaults to DynamoDB Tables
|
|
8
|
-
*
|
|
9
|
-
* Visits all constructs in the scope and automatically applies configuration-specific
|
|
10
|
-
* removal policies and point-in-time recovery settings to DynamoDB tables.
|
|
11
|
-
* Different configurations balance between cost optimization and data retention needs.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* // Apply configuration-specific defaults to all tables
|
|
16
|
-
* Aspects.of(app).add(new DynamoDbDefaultsAspect({ duration: 'SHORT' }));
|
|
17
|
-
*
|
|
18
|
-
* // Tables automatically inherit configuration defaults
|
|
19
|
-
* new Table(stack, 'MyTable', {
|
|
20
|
-
* // point-in-time recovery and removal policy applied automatically
|
|
21
|
-
* });
|
|
22
|
-
* ```
|
|
23
|
-
*
|
|
24
|
-
* @see https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_dynamodb.Table.html
|
|
25
|
-
*/
|
|
26
6
|
export declare class DynamoDbDefaultsAspect implements IAspect {
|
|
27
7
|
private readonly defaultProps;
|
|
28
8
|
/**
|
package/lib/defaults/dynamodb.js
CHANGED
|
@@ -3,26 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DynamoDbDefaultsAspect = void 0;
|
|
4
4
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
5
|
const aws_dynamodb_1 = require("aws-cdk-lib/aws-dynamodb");
|
|
6
|
-
/**
|
|
7
|
-
* Aspect that automatically applies configuration-aware defaults to DynamoDB Tables
|
|
8
|
-
*
|
|
9
|
-
* Visits all constructs in the scope and automatically applies configuration-specific
|
|
10
|
-
* removal policies and point-in-time recovery settings to DynamoDB tables.
|
|
11
|
-
* Different configurations balance between cost optimization and data retention needs.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* // Apply configuration-specific defaults to all tables
|
|
16
|
-
* Aspects.of(app).add(new DynamoDbDefaultsAspect({ duration: 'SHORT' }));
|
|
17
|
-
*
|
|
18
|
-
* // Tables automatically inherit configuration defaults
|
|
19
|
-
* new Table(stack, 'MyTable', {
|
|
20
|
-
* // point-in-time recovery and removal policy applied automatically
|
|
21
|
-
* });
|
|
22
|
-
* ```
|
|
23
|
-
*
|
|
24
|
-
* @see https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_dynamodb.Table.html
|
|
25
|
-
*/
|
|
26
6
|
class DynamoDbDefaultsAspect {
|
|
27
7
|
/**
|
|
28
8
|
* Creates a new DynamoDbDefaultsAspect
|
|
@@ -82,6 +62,7 @@ class DynamoDbDefaultsAspect {
|
|
|
82
62
|
* @param node - The construct to potentially modify
|
|
83
63
|
*/
|
|
84
64
|
visit(node) {
|
|
65
|
+
var _a;
|
|
85
66
|
if (node instanceof aws_dynamodb_1.Table) {
|
|
86
67
|
const { billingMode, readCapacity, writeCapacity, maxReadRequestUnits, maxWriteRequestUnits, removalPolicy, } = this.defaultProps;
|
|
87
68
|
if (removalPolicy) {
|
|
@@ -90,27 +71,30 @@ class DynamoDbDefaultsAspect {
|
|
|
90
71
|
const cfnTable = node.node.defaultChild;
|
|
91
72
|
if (!cfnTable)
|
|
92
73
|
return;
|
|
93
|
-
|
|
94
|
-
|
|
74
|
+
cfnTable.billingMode = (_a = cfnTable.billingMode) !== null && _a !== void 0 ? _a : billingMode;
|
|
75
|
+
// Clear conflicting throughput config to prevent CloudFormation errors
|
|
76
|
+
if (cfnTable.billingMode === aws_dynamodb_1.BillingMode.PAY_PER_REQUEST) {
|
|
77
|
+
cfnTable.provisionedThroughput = undefined;
|
|
95
78
|
}
|
|
96
|
-
if (cfnTable.
|
|
97
|
-
cfnTable.
|
|
98
|
-
this.isProvisionedThroughputConfigured()) {
|
|
99
|
-
cfnTable.provisionedThroughput = {
|
|
100
|
-
readCapacityUnits: readCapacity,
|
|
101
|
-
writeCapacityUnits: writeCapacity,
|
|
102
|
-
};
|
|
79
|
+
else if (cfnTable.billingMode === aws_dynamodb_1.BillingMode.PROVISIONED) {
|
|
80
|
+
cfnTable.onDemandThroughput = undefined;
|
|
103
81
|
}
|
|
104
|
-
if (cfnTable.
|
|
105
|
-
cfnTable.billingMode !== aws_dynamodb_1.BillingMode.PROVISIONED &&
|
|
82
|
+
if (cfnTable.billingMode === aws_dynamodb_1.BillingMode.PAY_PER_REQUEST &&
|
|
106
83
|
this.isOnDemandThroughputConfigured()) {
|
|
107
84
|
cfnTable.onDemandThroughput = {
|
|
108
85
|
maxReadRequestUnits,
|
|
109
86
|
maxWriteRequestUnits,
|
|
110
87
|
};
|
|
111
88
|
}
|
|
89
|
+
if (cfnTable.billingMode === aws_dynamodb_1.BillingMode.PROVISIONED &&
|
|
90
|
+
this.isProvisionedThroughputConfigured()) {
|
|
91
|
+
cfnTable.provisionedThroughput = {
|
|
92
|
+
readCapacityUnits: readCapacity,
|
|
93
|
+
writeCapacityUnits: writeCapacity,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
112
96
|
}
|
|
113
97
|
}
|
|
114
98
|
}
|
|
115
99
|
exports.DynamoDbDefaultsAspect = DynamoDbDefaultsAspect;
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1vZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkeW5hbW9kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBMEQ7QUFDMUQsMkRBS2tDO0FBNkJsQyxNQUFhLHNCQUFzQjtJQUdqQzs7OztPQUlHO0lBQ0gsWUFBWSxNQUFjO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxtQkFBbUIsQ0FDekIsUUFBcUM7UUFFckMsUUFBUSxRQUFRLEVBQUUsQ0FBQztZQUNqQixLQUFLLE9BQU87Z0JBQ1YsT0FBTztvQkFDTCxXQUFXLEVBQUUsMEJBQVcsQ0FBQyxXQUFXO29CQUNwQyxZQUFZLEVBQUUsQ0FBQztvQkFDZixhQUFhLEVBQUUsQ0FBQztvQkFDaEIsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztpQkFDckMsQ0FBQztZQUNKLEtBQUssUUFBUTtnQkFDWCxPQUFPO29CQUNMLFdBQVcsRUFBRSwwQkFBVyxDQUFDLGVBQWU7b0JBQ3hDLG1CQUFtQixFQUFFLEdBQUc7b0JBQ3hCLG9CQUFvQixFQUFFLEdBQUc7b0JBQ3pCLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87aUJBQ3JDLENBQUM7WUFDSjtnQkFDRSxPQUFPO29CQUNMLFdBQVcsRUFBRSwwQkFBVyxDQUFDLGVBQWU7b0JBQ3hDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE1BQU07aUJBQ3BDLENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQztJQUVPLGlDQUFpQztRQUN2QyxNQUFNLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBRXZFLE9BQU8sQ0FDTCxXQUFXLEtBQUssMEJBQVcsQ0FBQyxXQUFXO1lBQ3ZDLFlBQVksS0FBSyxTQUFTO1lBQzFCLGFBQWEsS0FBSyxTQUFTLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRU8sOEJBQThCO1FBQ3BDLE1BQU0sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsR0FDOUQsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUVwQixPQUFPLENBQ0wsV0FBVyxLQUFLLDBCQUFXLENBQUMsZUFBZTtZQUMzQyxtQkFBbUIsS0FBSyxTQUFTO1lBQ2pDLG9CQUFvQixLQUFLLFNBQVMsQ0FDbkMsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLElBQWdCOztRQUNwQixJQUFJLElBQUksWUFBWSxvQkFBSyxFQUFFLENBQUM7WUFDMUIsTUFBTSxFQUNKLFdBQVcsRUFDWCxZQUFZLEVBQ1osYUFBYSxFQUNiLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsYUFBYSxHQUNkLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUV0QixJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekMsQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBd0IsQ0FBQztZQUNwRCxJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPO1lBRXRCLFFBQVEsQ0FBQyxXQUFXLEdBQUcsTUFBQSxRQUFRLENBQUMsV0FBVyxtQ0FBSSxXQUFXLENBQUM7WUFFM0QsdUVBQXVFO1lBQ3ZFLElBQUksUUFBUSxDQUFDLFdBQVcsS0FBSywwQkFBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN6RCxRQUFRLENBQUMscUJBQXFCLEdBQUcsU0FBUyxDQUFDO1lBQzdDLENBQUM7aUJBQU0sSUFBSSxRQUFRLENBQUMsV0FBVyxLQUFLLDBCQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzVELFFBQVEsQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7WUFDMUMsQ0FBQztZQUVELElBQ0UsUUFBUSxDQUFDLFdBQVcsS0FBSywwQkFBVyxDQUFDLGVBQWU7Z0JBQ3BELElBQUksQ0FBQyw4QkFBOEIsRUFBRSxFQUNyQyxDQUFDO2dCQUNELFFBQVEsQ0FBQyxrQkFBa0IsR0FBRztvQkFDNUIsbUJBQW1CO29CQUNuQixvQkFBb0I7aUJBQ3JCLENBQUM7WUFDSixDQUFDO1lBRUQsSUFDRSxRQUFRLENBQUMsV0FBVyxLQUFLLDBCQUFXLENBQUMsV0FBVztnQkFDaEQsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLEVBQ3hDLENBQUM7Z0JBQ0QsUUFBUSxDQUFDLHFCQUFxQixHQUFHO29CQUMvQixpQkFBaUIsRUFBRSxZQUFhO29CQUNoQyxrQkFBa0IsRUFBRSxhQUFjO2lCQUNuQyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF6SEQsd0RBeUhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSwgdHlwZSBJQXNwZWN0IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBCaWxsaW5nTW9kZSxcbiAgQ2ZuVGFibGUsXG4gIFRhYmxlLFxuICB0eXBlIFRhYmxlUHJvcHMsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbnRlcmZhY2UgQ29uZmlnIHtcbiAgZHVyYXRpb246IFwiU0hPUlRcIiB8IFwiTUVESVVNXCIgfCBcIkxPTkdcIjtcbn1cblxuLyoqXG4gKiBBc3BlY3QgdGhhdCBhdXRvbWF0aWNhbGx5IGFwcGxpZXMgY29uZmlndXJhdGlvbi1hd2FyZSBkZWZhdWx0cyB0byBEeW5hbW9EQiBUYWJsZXNcbiAqXG4gKiBWaXNpdHMgYWxsIGNvbnN0cnVjdHMgaW4gdGhlIHNjb3BlIGFuZCBhdXRvbWF0aWNhbGx5IGFwcGxpZXMgY29uZmlndXJhdGlvbi1zcGVjaWZpY1xuICogcmVtb3ZhbCBwb2xpY2llcyBhbmQgcG9pbnQtaW4tdGltZSByZWNvdmVyeSBzZXR0aW5ncyB0byBEeW5hbW9EQiB0YWJsZXMuXG4gKiBEaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgYmFsYW5jZSBiZXR3ZWVuIGNvc3Qgb3B0aW1pemF0aW9uIGFuZCBkYXRhIHJldGVudGlvbiBuZWVkcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQXBwbHkgY29uZmlndXJhdGlvbi1zcGVjaWZpYyBkZWZhdWx0cyB0byBhbGwgdGFibGVzXG4gKiBBc3BlY3RzLm9mKGFwcCkuYWRkKG5ldyBEeW5hbW9EYkRlZmF1bHRzQXNwZWN0KHsgZHVyYXRpb246ICdTSE9SVCcgfSkpO1xuICpcbiAqIC8vIFRhYmxlcyBhdXRvbWF0aWNhbGx5IGluaGVyaXQgY29uZmlndXJhdGlvbiBkZWZhdWx0c1xuICogbmV3IFRhYmxlKHN0YWNrLCAnTXlUYWJsZScsIHtcbiAqICAgLy8gcG9pbnQtaW4tdGltZSByZWNvdmVyeSBhbmQgcmVtb3ZhbCBwb2xpY3kgYXBwbGllZCBhdXRvbWF0aWNhbGx5XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjIvZG9jcy9hd3MtY2RrLWxpYi5hd3NfZHluYW1vZGIuVGFibGUuaHRtbFxuICovXG50eXBlIERlZmF1bHRQcm9wcyA9IFRhYmxlUHJvcHMgJiB7IGJpbGxpbmdNb2RlOiBCaWxsaW5nTW9kZSB9O1xuXG5leHBvcnQgY2xhc3MgRHluYW1vRGJEZWZhdWx0c0FzcGVjdCBpbXBsZW1lbnRzIElBc3BlY3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQcm9wczogRGVmYXVsdFByb3BzO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IER5bmFtb0RiRGVmYXVsdHNBc3BlY3RcbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gaWRlbnRpZmllciB1c2VkIHRvIHNlbGVjdCBhcHByb3ByaWF0ZSBkZWZhdWx0cy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQ29uZmlnKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMgPSB0aGlzLnJldGVudGlvblByb3BlcnRpZXMoY29uZmlnLmR1cmF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZHVyYXRpb24tc3BlY2lmaWMgRHluYW1vREIgdGFibGUgcHJvcGVydGllc1xuICAgKlxuICAgKiBAcGFyYW0gZHVyYXRpb24gLSBUaGUgZHVyYXRpb24gdG8gZ2V0IHRoZSB0YWJsZSBwcm9wZXJ0aWVzIGZvclxuICAgKiBAcmV0dXJucyBUaGUgdGFibGUgcHJvcGVydGllcyBmb3IgdGhlIGR1cmF0aW9uXG4gICAqL1xuICBwcml2YXRlIHJldGVudGlvblByb3BlcnRpZXMoXG4gICAgZHVyYXRpb246IFwiU0hPUlRcIiB8IFwiTUVESVVNXCIgfCBcIkxPTkdcIlxuICApOiBEZWZhdWx0UHJvcHMge1xuICAgIHN3aXRjaCAoZHVyYXRpb24pIHtcbiAgICAgIGNhc2UgXCJTSE9SVFwiOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJpbGxpbmdNb2RlOiBCaWxsaW5nTW9kZS5QUk9WSVNJT05FRCxcbiAgICAgICAgICByZWFkQ2FwYWNpdHk6IDEsXG4gICAgICAgICAgd3JpdGVDYXBhY2l0eTogMSxcbiAgICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICAgIH07XG4gICAgICBjYXNlIFwiTUVESVVNXCI6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYmlsbGluZ01vZGU6IEJpbGxpbmdNb2RlLlBBWV9QRVJfUkVRVUVTVCxcbiAgICAgICAgICBtYXhSZWFkUmVxdWVzdFVuaXRzOiAxMDAsXG4gICAgICAgICAgbWF4V3JpdGVSZXF1ZXN0VW5pdHM6IDEwMCxcbiAgICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICAgIH07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJpbGxpbmdNb2RlOiBCaWxsaW5nTW9kZS5QQVlfUEVSX1JFUVVFU1QsXG4gICAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5SRVRBSU4sXG4gICAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1Byb3Zpc2lvbmVkVGhyb3VnaHB1dENvbmZpZ3VyZWQoKSB7XG4gICAgY29uc3QgeyBiaWxsaW5nTW9kZSwgcmVhZENhcGFjaXR5LCB3cml0ZUNhcGFjaXR5IH0gPSB0aGlzLmRlZmF1bHRQcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICBiaWxsaW5nTW9kZSA9PT0gQmlsbGluZ01vZGUuUFJPVklTSU9ORUQgJiZcbiAgICAgIHJlYWRDYXBhY2l0eSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB3cml0ZUNhcGFjaXR5ICE9PSB1bmRlZmluZWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc09uRGVtYW5kVGhyb3VnaHB1dENvbmZpZ3VyZWQoKSB7XG4gICAgY29uc3QgeyBiaWxsaW5nTW9kZSwgbWF4UmVhZFJlcXVlc3RVbml0cywgbWF4V3JpdGVSZXF1ZXN0VW5pdHMgfSA9XG4gICAgICB0aGlzLmRlZmF1bHRQcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICBiaWxsaW5nTW9kZSA9PT0gQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNUICYmXG4gICAgICBtYXhSZWFkUmVxdWVzdFVuaXRzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG1heFdyaXRlUmVxdWVzdFVuaXRzICE9PSB1bmRlZmluZWRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpc2l0cyBhIGNvbnN0cnVjdCBhbmQgYXBwbGllcyBjb25maWd1cmF0aW9uLWFwcHJvcHJpYXRlIGRlZmF1bHRzXG4gICAqXG4gICAqIEFwcGxpZXMgY29uZmlndXJhdGlvbi1zcGVjaWZpYyBiaWxsaW5nIG1vZGUsIHRocm91Z2hwdXQsIHBvaW50LWluLXRpbWUgcmVjb3ZlcnksXG4gICAqIGFuZCByZW1vdmFsIHBvbGljaWVzIHRvIHRhYmxlcyB0aGF0IGRvbid0IGFscmVhZHkgaGF2ZSB0aGVzZSBwcm9wZXJ0aWVzIGV4cGxpY2l0bHkgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZSAtIFRoZSBjb25zdHJ1Y3QgdG8gcG90ZW50aWFsbHkgbW9kaWZ5XG4gICAqL1xuICB2aXNpdChub2RlOiBJQ29uc3RydWN0KTogdm9pZCB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBUYWJsZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBiaWxsaW5nTW9kZSxcbiAgICAgICAgcmVhZENhcGFjaXR5LFxuICAgICAgICB3cml0ZUNhcGFjaXR5LFxuICAgICAgICBtYXhSZWFkUmVxdWVzdFVuaXRzLFxuICAgICAgICBtYXhXcml0ZVJlcXVlc3RVbml0cyxcbiAgICAgICAgcmVtb3ZhbFBvbGljeSxcbiAgICAgIH0gPSB0aGlzLmRlZmF1bHRQcm9wcztcblxuICAgICAgaWYgKHJlbW92YWxQb2xpY3kpIHtcbiAgICAgICAgbm9kZS5hcHBseVJlbW92YWxQb2xpY3kocmVtb3ZhbFBvbGljeSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNmblRhYmxlID0gbm9kZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5UYWJsZTtcbiAgICAgIGlmICghY2ZuVGFibGUpIHJldHVybjtcblxuICAgICAgY2ZuVGFibGUuYmlsbGluZ01vZGUgPSBjZm5UYWJsZS5iaWxsaW5nTW9kZSA/PyBiaWxsaW5nTW9kZTtcblxuICAgICAgLy8gQ2xlYXIgY29uZmxpY3RpbmcgdGhyb3VnaHB1dCBjb25maWcgdG8gcHJldmVudCBDbG91ZEZvcm1hdGlvbiBlcnJvcnNcbiAgICAgIGlmIChjZm5UYWJsZS5iaWxsaW5nTW9kZSA9PT0gQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNUKSB7XG4gICAgICAgIGNmblRhYmxlLnByb3Zpc2lvbmVkVGhyb3VnaHB1dCA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoY2ZuVGFibGUuYmlsbGluZ01vZGUgPT09IEJpbGxpbmdNb2RlLlBST1ZJU0lPTkVEKSB7XG4gICAgICAgIGNmblRhYmxlLm9uRGVtYW5kVGhyb3VnaHB1dCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBjZm5UYWJsZS5iaWxsaW5nTW9kZSA9PT0gQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNUICYmXG4gICAgICAgIHRoaXMuaXNPbkRlbWFuZFRocm91Z2hwdXRDb25maWd1cmVkKClcbiAgICAgICkge1xuICAgICAgICBjZm5UYWJsZS5vbkRlbWFuZFRocm91Z2hwdXQgPSB7XG4gICAgICAgICAgbWF4UmVhZFJlcXVlc3RVbml0cyxcbiAgICAgICAgICBtYXhXcml0ZVJlcXVlc3RVbml0cyxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBjZm5UYWJsZS5iaWxsaW5nTW9kZSA9PT0gQmlsbGluZ01vZGUuUFJPVklTSU9ORUQgJiZcbiAgICAgICAgdGhpcy5pc1Byb3Zpc2lvbmVkVGhyb3VnaHB1dENvbmZpZ3VyZWQoKVxuICAgICAgKSB7XG4gICAgICAgIGNmblRhYmxlLnByb3Zpc2lvbmVkVGhyb3VnaHB1dCA9IHtcbiAgICAgICAgICByZWFkQ2FwYWNpdHlVbml0czogcmVhZENhcGFjaXR5ISxcbiAgICAgICAgICB3cml0ZUNhcGFjaXR5VW5pdHM6IHdyaXRlQ2FwYWNpdHkhLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -3,22 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.MicroserviceChecks = void 0;
|
|
4
4
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
5
|
const cdk_nag_1 = require("cdk-nag");
|
|
6
|
-
|
|
7
|
-
* Path fragments identifying CDK-managed singleton resources that consumers
|
|
8
|
-
* cannot configure. These nodes are skipped during rule evaluation because
|
|
9
|
-
* surfacing nags on memory size, timeout, tracing, or log retention for
|
|
10
|
-
* resources owned by the CDK framework is noise.
|
|
11
|
-
*/
|
|
12
|
-
const CDK_MANAGED_PATH_FRAGMENTS = [
|
|
13
|
-
// aws-s3-deployment.BucketDeployment custom resource handler
|
|
14
|
-
"Custom::CDKBucketDeployment",
|
|
15
|
-
// Deprecated CDK log retention custom resource
|
|
16
|
-
"LogRetention",
|
|
17
|
-
// Bucket(autoDeleteObjects: true)
|
|
18
|
-
"Custom::S3AutoDeleteObjects",
|
|
19
|
-
// cr.Provider framework on-event / is-complete handler
|
|
20
|
-
"AWS679f53fac002430cb0da5b7982bd2287",
|
|
21
|
-
];
|
|
6
|
+
const cdk_managed_singletons_1 = require("./cdk-managed-singletons");
|
|
22
7
|
/**
|
|
23
8
|
* Microservice Checks are a compilation of rules to validate infrastructure-as-code template
|
|
24
9
|
* against recommended practices using the cdk-nag library.
|
|
@@ -36,7 +21,7 @@ class MicroserviceChecks extends cdk_nag_1.NagPack {
|
|
|
36
21
|
this.packName = "Microservices";
|
|
37
22
|
}
|
|
38
23
|
visit(node) {
|
|
39
|
-
if (
|
|
24
|
+
if ((0, cdk_managed_singletons_1.isCdkManagedSingleton)(node))
|
|
40
25
|
return;
|
|
41
26
|
if (node instanceof aws_cdk_lib_1.CfnResource) {
|
|
42
27
|
this.applyRule({
|
|
@@ -69,10 +54,6 @@ class MicroserviceChecks extends cdk_nag_1.NagPack {
|
|
|
69
54
|
});
|
|
70
55
|
}
|
|
71
56
|
}
|
|
72
|
-
isCdkManagedSingleton(node) {
|
|
73
|
-
const path = node.node.path;
|
|
74
|
-
return CDK_MANAGED_PATH_FRAGMENTS.some(fragment => path.includes(fragment));
|
|
75
|
-
}
|
|
76
57
|
}
|
|
77
58
|
exports.MicroserviceChecks = MicroserviceChecks;
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm9zZXJ2aWNlLWNoZWNrcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1pY3Jvc2VydmljZS1jaGVja3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTBDO0FBQzFDLHFDQUE2RTtBQUU3RSxxRUFBaUU7QUFFakU7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsa0JBQW1CLFNBQVEsaUJBQU87SUFDN0MsWUFBWSxLQUFvQjtRQUM5QixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDYixJQUFJLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQztJQUNsQyxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQWdCO1FBQzNCLElBQUksSUFBQSw4Q0FBcUIsRUFBQyxJQUFJLENBQUM7WUFBRSxPQUFPO1FBRXhDLElBQUksSUFBSSxZQUFZLHlCQUFXLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNiLElBQUksRUFBRSx3RUFBd0U7Z0JBQzlFLFdBQVcsRUFDVCxnYkFBZ2I7Z0JBQ2xiLEtBQUssRUFBRSx5QkFBZSxDQUFDLEtBQUs7Z0JBQzVCLElBQUksRUFBRSxlQUFLLENBQUMsTUFBTSxDQUFDLHVCQUF1QjtnQkFDMUMsSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNiLElBQUksRUFBRSx3RUFBd0U7Z0JBQzlFLFdBQVcsRUFDVCxxakJBQXFqQjtnQkFDdmpCLEtBQUssRUFBRSx5QkFBZSxDQUFDLEtBQUs7Z0JBQzVCLElBQUksRUFBRSxlQUFLLENBQUMsTUFBTSxDQUFDLG9CQUFvQjtnQkFDdkMsSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNiLElBQUksRUFBRSxrRUFBa0U7Z0JBQ3hFLFdBQVcsRUFDVCxrSkFBa0o7Z0JBQ3BKLEtBQUssRUFBRSx5QkFBZSxDQUFDLEtBQUs7Z0JBQzVCLElBQUksRUFBRSxlQUFLLENBQUMsTUFBTSxDQUFDLGFBQWE7Z0JBQ2hDLElBQUksRUFBRSxJQUFJO2FBQ1gsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDYixJQUFJLEVBQUUsOEVBQThFO2dCQUNwRixXQUFXLEVBQ1QsMFNBQTBTO2dCQUM1UyxLQUFLLEVBQUUseUJBQWUsQ0FBQyxLQUFLO2dCQUM1QixJQUFJLEVBQUUsZUFBSyxDQUFDLFVBQVUsQ0FBQyxpQ0FBaUM7Z0JBQ3hELElBQUksRUFBRSxJQUFJO2FBQ1gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTVDRCxnREE0Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5SZXNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgTmFnTWVzc2FnZUxldmVsLCBOYWdQYWNrLCBydWxlcywgdHlwZSBOYWdQYWNrUHJvcHMgfSBmcm9tIFwiY2RrLW5hZ1wiO1xuaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IGlzQ2RrTWFuYWdlZFNpbmdsZXRvbiB9IGZyb20gXCIuL2Nkay1tYW5hZ2VkLXNpbmdsZXRvbnNcIjtcblxuLyoqXG4gKiBNaWNyb3NlcnZpY2UgQ2hlY2tzIGFyZSBhIGNvbXBpbGF0aW9uIG9mIHJ1bGVzIHRvIHZhbGlkYXRlIGluZnJhc3RydWN0dXJlLWFzLWNvZGUgdGVtcGxhdGVcbiAqIGFnYWluc3QgcmVjb21tZW5kZWQgcHJhY3RpY2VzIHVzaW5nIHRoZSBjZGstbmFnIGxpYnJhcnkuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2RrLXBhdHRlcm5zL2Nkay1uYWcvXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbiAqIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ015U3RhY2snKTtcbiAqIEFzcGVjdHMub2Yoc3RhY2spLmFkZChuZXcgTWljcm9zZXJ2aWNlc0NoZWNrcygpKTtcbiAqL1xuZXhwb3J0IGNsYXNzIE1pY3Jvc2VydmljZUNoZWNrcyBleHRlbmRzIE5hZ1BhY2sge1xuICBjb25zdHJ1Y3Rvcihwcm9wcz86IE5hZ1BhY2tQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnBhY2tOYW1lID0gXCJNaWNyb3NlcnZpY2VzXCI7XG4gIH1cblxuICBwdWJsaWMgdmlzaXQobm9kZTogSUNvbnN0cnVjdCkge1xuICAgIGlmIChpc0Nka01hbmFnZWRTaW5nbGV0b24obm9kZSkpIHJldHVybjtcblxuICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2ZuUmVzb3VyY2UpIHtcbiAgICAgIHRoaXMuYXBwbHlSdWxlKHtcbiAgICAgICAgaW5mbzogXCJUaGUgTGFtYmRhIGZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXhwbGljaXQgbWVtb3J5IHZhbHVlIGNvbmZpZ3VyZWQuXCIsXG4gICAgICAgIGV4cGxhbmF0aW9uOlxuICAgICAgICAgIFwiTGFtYmRhIGFsbG9jYXRlcyBDUFUgcG93ZXIgaW4gcHJvcG9ydGlvbiB0byB0aGUgYW1vdW50IG9mIG1lbW9yeSBjb25maWd1cmVkLiBCeSBkZWZhdWx0LCB5b3VyIGZ1bmN0aW9ucyBoYXZlIDEyOCBNQiBvZiBtZW1vcnkgYWxsb2NhdGVkLiBZb3UgY2FuIGluY3JlYXNlIHRoYXQgdmFsdWUgdXAgdG8gMTAgR0IuIFdpdGggbW9yZSBDUFUgcmVzb3VyY2VzLCB5b3VyIExhbWJkYSBmdW5jdGlvbidzIGR1cmF0aW9uIG1pZ2h0IGRlY3JlYXNlLiAgWW91IGNhbiB1c2UgdG9vbHMgc3VjaCBhcyBBV1MgTGFtYmRhIFBvd2VyIFR1bmluZyB0byB0ZXN0IHlvdXIgZnVuY3Rpb24gYXQgZGlmZmVyZW50IG1lbW9yeSBzZXR0aW5ncyB0byBmaW5kIHRoZSBvbmUgdGhhdCBtYXRjaGVzIHlvdXIgY29zdCBhbmQgcGVyZm9ybWFuY2UgcmVxdWlyZW1lbnRzIHRoZSBiZXN0LlwiLFxuICAgICAgICBsZXZlbDogTmFnTWVzc2FnZUxldmVsLkVSUk9SLFxuICAgICAgICBydWxlOiBydWxlcy5sYW1iZGEuTGFtYmRhRGVmYXVsdE1lbW9yeVNpemUsXG4gICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYXBwbHlSdWxlKHtcbiAgICAgICAgaW5mbzogXCJUaGUgTGFtYmRhIGZ1bmN0aW9uIGRvZXMgbm90IGhhdmUgYW4gZXhwbGljaXRseSBkZWZpbmVkIHRpbWVvdXQgdmFsdWUuXCIsXG4gICAgICAgIGV4cGxhbmF0aW9uOlxuICAgICAgICAgIFwiTGFtYmRhIGZ1bmN0aW9ucyBoYXZlIGEgZGVmYXVsdCB0aW1lb3V0IG9mIDMgc2Vjb25kcy4gSWYgeW91ciB0aW1lb3V0IHZhbHVlIGlzIHRvbyBzaG9ydCwgTGFtYmRhIG1pZ2h0IHRlcm1pbmF0ZSBpbnZvY2F0aW9ucyBwcmVtYXR1cmVseS4gT24gdGhlIG90aGVyIHNpZGUsIHNldHRpbmcgdGhlIHRpbWVvdXQgbXVjaCBoaWdoZXIgdGhhbiB0aGUgYXZlcmFnZSBleGVjdXRpb24gbWF5IGNhdXNlIGZ1bmN0aW9ucyB0byBleGVjdXRlIGZvciBsb25nZXIgdXBvbiBjb2RlIG1hbGZ1bmN0aW9uLCByZXN1bHRpbmcgaW4gaGlnaGVyIGNvc3RzIGFuZCBwb3NzaWJseSByZWFjaGluZyBjb25jdXJyZW5jeSBsaW1pdHMgZGVwZW5kaW5nIG9uIGhvdyBzdWNoIGZ1bmN0aW9ucyBhcmUgaW52b2tlZC4gWW91IGNhbiBhbHNvIHVzZSBBV1MgTGFtYmRhIFBvd2VyIFR1bmluZyB0byB0ZXN0IHlvdXIgZnVuY3Rpb24gYXQgZGlmZmVyZW50IHRpbWVvdXQgc2V0dGluZ3MgdG8gZmluZCB0aGUgb25lIHRoYXQgbWF0Y2hlcyB5b3VyIGNvc3QgYW5kIHBlcmZvcm1hbmNlIHJlcXVpcmVtZW50cyB0aGUgYmVzdC5cIixcbiAgICAgICAgbGV2ZWw6IE5hZ01lc3NhZ2VMZXZlbC5FUlJPUixcbiAgICAgICAgcnVsZTogcnVsZXMubGFtYmRhLkxhbWJkYURlZmF1bHRUaW1lb3V0LFxuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmFwcGx5UnVsZSh7XG4gICAgICAgIGluZm86IFwiVGhlIExhbWJkYSBmdW5jdGlvbiBkb2VzIG5vdCBoYXZlIHRyYWNpbmcgc2V0IHRvIFRyYWNpbmcuQUNUSVZFLlwiLFxuICAgICAgICBleHBsYW5hdGlvbjpcbiAgICAgICAgICBcIldoZW4gYSBMYW1iZGEgZnVuY3Rpb24gaGFzIEFDVElWRSB0cmFjaW5nLCBMYW1iZGEgYXV0b21hdGljYWxseSBzYW1wbGVzIGludm9jYXRpb24gcmVxdWVzdHMsIGJhc2VkIG9uIHRoZSBzYW1wbGluZyBhbGdvcml0aG0gc3BlY2lmaWVkIGJ5IFgtUmF5LlwiLFxuICAgICAgICBsZXZlbDogTmFnTWVzc2FnZUxldmVsLkVSUk9SLFxuICAgICAgICBydWxlOiBydWxlcy5sYW1iZGEuTGFtYmRhVHJhY2luZyxcbiAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hcHBseVJ1bGUoe1xuICAgICAgICBpbmZvOiBcIlRoZSBDbG91ZFdhdGNoIExvZyBHcm91cCBkb2VzIG5vdCBoYXZlIGFuIGV4cGxpY2l0IHJldGVudGlvbiBwb2xpY3kgZGVmaW5lZC5cIixcbiAgICAgICAgZXhwbGFuYXRpb246XG4gICAgICAgICAgXCJCeSBkZWZhdWx0LCBsb2dzIGFyZSBrZXB0IGluZGVmaW5pdGVseSBhbmQgbmV2ZXIgZXhwaXJlLiBZb3UgY2FuIGFkanVzdCB0aGUgcmV0ZW50aW9uIHBvbGljeSBmb3IgZWFjaCBsb2cgZ3JvdXAsIGtlZXBpbmcgdGhlIGluZGVmaW5pdGUgcmV0ZW50aW9uLCBvciBjaG9vc2luZyBhIHJldGVudGlvbiBwZXJpb2QgYmV0d2VlbiBvbmUgZGF5IGFuZCAxMCB5ZWFycy4gRm9yIExhbWJkYSBmdW5jdGlvbnMsIHRoaXMgYXBwbGllcyB0byB0aGVpciBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgQ2xvdWRXYXRjaCBMb2cgR3JvdXBzLlwiLFxuICAgICAgICBsZXZlbDogTmFnTWVzc2FnZUxldmVsLkVSUk9SLFxuICAgICAgICBydWxlOiBydWxlcy5jbG91ZHdhdGNoLkNsb3VkV2F0Y2hMb2dHcm91cFJldGVudGlvblBlcmlvZCxcbiAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
|
package/lib/resource-prefix.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ResourcePrefixAspect = void 0;
|
|
4
4
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
5
|
const crypto_1 = require("crypto");
|
|
6
|
+
const cdk_managed_singletons_1 = require("./cdk-managed-singletons");
|
|
6
7
|
/**
|
|
7
8
|
* Maps CloudFormation resource types to their name property and AWS length limits.
|
|
8
9
|
* Sources: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html
|
|
@@ -94,6 +95,13 @@ class ResourcePrefixAspect {
|
|
|
94
95
|
var _a, _b;
|
|
95
96
|
if (!(node instanceof aws_cdk_lib_1.CfnResource))
|
|
96
97
|
return;
|
|
98
|
+
// CDK-managed singleton/framework resources must keep their
|
|
99
|
+
// CloudFormation-generated physical names. Pinning a deterministic name onto
|
|
100
|
+
// them (e.g. the BucketDeployment handler) removes the random-suffix
|
|
101
|
+
// orphan-avoidance and wedges deploys on `/aws/lambda/<fn>` LogGroup
|
|
102
|
+
// "already exists" after any failed attempt.
|
|
103
|
+
if ((0, cdk_managed_singletons_1.isCdkManagedSingleton)(node))
|
|
104
|
+
return;
|
|
97
105
|
const resourceType = node.cfnResourceType;
|
|
98
106
|
const config = RESOURCE_CONFIG[resourceType];
|
|
99
107
|
if (!config || this.exclude.has(resourceType)) {
|
|
@@ -224,4 +232,4 @@ class ResourcePrefixAspect {
|
|
|
224
232
|
}
|
|
225
233
|
}
|
|
226
234
|
exports.ResourcePrefixAspect = ResourcePrefixAspect;
|
|
227
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcHJlZml4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVzb3VyY2UtcHJlZml4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUE4RTtBQUU5RSxtQ0FBb0M7QUFvQ3BDOzs7R0FHRztBQUNILE1BQU0sZUFBZSxHQUF1QztJQUMxRCxVQUFVO0lBQ1YsdUJBQXVCLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFFbkUsVUFBVTtJQUNWLGlCQUFpQixFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQzNELHNCQUFzQixFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQ2hFLDRCQUE0QixFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBRXRFLFlBQVk7SUFDWixpQkFBaUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUMxRCxpQkFBaUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtJQUUzRCwyQkFBMkI7SUFDM0IsdUJBQXVCLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFDNUQsbUJBQW1CLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDdkQseUJBQXlCLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDN0Qsa0JBQWtCLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDdEQsa0NBQWtDLEVBQUU7UUFDbEMsT0FBTyxFQUFFLGtCQUFrQjtRQUMzQixTQUFTLEVBQUUsRUFBRTtLQUNkO0lBQ0QsOEJBQThCLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDbEUsMEJBQTBCLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDOUQsK0JBQStCLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFFbkUsTUFBTTtJQUNOLDBCQUEwQixFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQy9ELDRCQUE0QixFQUFFLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQzFFLHlCQUF5QixFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQzlELHdCQUF3QixFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQzdELCtCQUErQixFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBRXBFLG1CQUFtQjtJQUNuQiw2QkFBNkIsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtJQUNsRSxxQkFBcUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtJQUMzRCw2QkFBNkIsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUNqRSw2QkFBNkIsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUVqRSxnQkFBZ0I7SUFDaEIsK0NBQStDLEVBQUU7UUFDL0MsT0FBTyxFQUFFLE1BQU07UUFDZixTQUFTLEVBQUUsRUFBRTtLQUNkO0lBRUQsZ0JBQWdCO0lBQ2hCLHFCQUFxQixFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQ2xFLHdCQUF3QixFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBRWxFLE1BQU07SUFDTixnQkFBZ0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtDQUN6RCxDQUFDO0FBaUJGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxNQUFhLG9CQUFvQjtJQUkvQixZQUFZLEtBQWdDOztRQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNyRCxNQUFNLElBQUksS0FBSyxDQUNiLHNHQUFzRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQ3RILENBQUM7UUFFSixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFBLEtBQUssQ0FBQyxPQUFPLG1DQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBZ0I7O1FBQ3BCLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSx5QkFBVyxDQUFDO1lBQUUsT0FBTztRQUUzQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDOUMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUN0QyxNQUFNLGFBQWEsR0FDakIsTUFBQSxNQUFDLElBQTZCLENBQUMsY0FBYyxtQ0FDNUMsSUFBNkIsQ0FBQyxhQUFhLG1DQUM1QyxFQUFFLENBQUM7UUFFTCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUV0RSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEMsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQ3pDLEtBQUssRUFDTCxZQUFZLEVBQ1osYUFBYSxDQUNkLENBQUM7UUFFRiw4RUFBOEU7UUFDOUUscUVBQXFFO1FBQ3JFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVwRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUxRSxJQUFJLFFBQVE7WUFBRSxPQUFPO1FBRXJCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGtCQUFrQixDQUFDLGVBQXVCLEVBQUUsS0FBb0I7O1FBQ3RFLE1BQU0sSUFBSSxHQUFHLE1BQUEsS0FBSyxDQUFDLE9BQU8sbUNBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUNoRCxPQUFPLENBQ0wsZUFBZSxLQUFLLHFCQUFxQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQ3RFLENBQUM7SUFDSixDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBb0I7O1FBQzVDLE1BQU0sSUFBSSxHQUFHLE1BQUEsS0FBSyxDQUFDLE9BQU8sbUNBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUNoRCxPQUFPLENBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssb0JBQW9CLENBQzFCLElBQWlCLEVBQ2pCLE9BQWUsRUFDZixhQUFzQzs7UUFFdEMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sT0FBTyxHQUFHLE1BQUEsYUFBYSxDQUFDLE9BQU8sQ0FBQyxtQ0FBSSxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEUsTUFBTSxXQUFXLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO2FBQy9CLFlBQVksQ0FBQyxJQUFJLENBQUM7YUFDbEIsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDLDBCQUEwQjthQUN6RCxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsK0JBQStCO1FBRTNELE9BQU8sT0FBTyxPQUFPLEtBQUssUUFBUTtZQUNoQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFO1lBQzFCLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssaUJBQWlCLENBQ3ZCLEtBQW9CLEVBQ3BCLGVBQXVCLEVBQ3ZCLGFBQXNDO1FBRXRDLE1BQU0sSUFBSSxHQUNSLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxtQkFBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2pELENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVztZQUNuQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUVwQix1REFBdUQ7UUFDdkQsSUFDRSxlQUFlLEtBQUssaUJBQWlCO1lBQ3JDLGFBQWEsQ0FBQyxTQUFTLEtBQUssSUFBSTtZQUNoQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQ3ZCLENBQUM7WUFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLE9BQU8sQ0FBQztRQUN2QyxDQUFDO1FBRUQsdURBQXVEO1FBQ3ZELElBQ0UsZUFBZSxLQUFLLGlCQUFpQjtZQUNyQyxhQUFhLENBQUMsU0FBUyxLQUFLLElBQUk7WUFDaEMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUN2QixDQUFDO1lBQ0QsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxPQUFPLENBQUM7UUFDdkMsQ0FBQztRQUVELDBEQUEwRDtRQUMxRCxJQUFJLGVBQWUsS0FBSyxxQkFBcUIsRUFBRSxDQUFDO1lBQzlDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFFRCxpREFBaUQ7UUFDakQsSUFBSSxlQUFlLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztZQUMxQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRCxDQUFDO1FBRUQseUJBQXlCO1FBQ3pCLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7O09BR0c7SUFDSyxhQUFhLENBQ25CLElBQVksRUFDWixTQUFpQixFQUNqQixJQUFnQjtRQUVoQixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksU0FBUztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRTFDLE1BQU0sSUFBSSxHQUFHLElBQUEsbUJBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFekUsNEVBQTRFO1FBQzVFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRXhFLG9EQUFvRDtRQUNwRCxNQUFNLE1BQU0sR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUMzRCxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBRTNFLHlCQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FDN0IsMkJBQTJCLElBQUksTUFBTSxJQUFJLENBQUMsTUFBTSxpREFBaUQsU0FBUyxJQUFJO1lBQzVHLCtCQUErQixTQUFTLHNEQUFzRCxJQUFJLENBQUMsTUFBTSx5QkFBeUIsQ0FDckksQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7O09BR0c7SUFDSyxvQkFBb0IsQ0FDMUIsSUFBWSxFQUNaLGVBQXVCLEVBQ3ZCLElBQWdCO1FBRWhCLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztRQUVyQixJQUFJLGVBQWUsS0FBSyxpQkFBaUIsRUFBRSxDQUFDO1lBQzFDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUNoQyx5QkFBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQzNCLDBDQUEwQyxJQUFJLGdDQUFnQztvQkFDNUUsc0NBQXNDLENBQ3pDLENBQUM7Z0JBQ0YsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNsQixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLHlCQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FDM0IsMENBQTBDLElBQUksMEJBQTBCO29CQUN0RSwrREFBK0QsQ0FDbEUsQ0FBQztnQkFDRixRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUNGO0FBaE5ELG9EQWdOQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFubm90YXRpb25zLCBDZm5SZXNvdXJjZSwgSUFzcGVjdCwgU3RhY2ssIFRva2VuIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5cbmludGVyZmFjZSBSZXNvdXJjZU5hbWVDb25maWcge1xuICAvKiogVGhlIENsb3VkRm9ybWF0aW9uIHByb3BlcnR5IHRoYXQgaG9sZHMgdGhlIHJlc291cmNlJ3MgcGh5c2ljYWwgbmFtZSAqL1xuICBjZm5OYW1lOiBzdHJpbmc7XG4gIC8qKiBNYXhpbXVtIGFsbG93ZWQgY2hhcmFjdGVyIGxlbmd0aCBmb3IgdGhpcyByZXNvdXJjZSB0eXBlICovXG4gIG1heExlbmd0aDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEV4dGVuc2lvbiB0eXBlIHRvIGFjY2VzcyBpbnRlcm5hbCBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0aWVzIG9uIENmblJlc291cmNlLlxuICpcbiAqIENESyBkb2VzIG5vdCBwcm92aWRlIGEgcHVibGljIEFQSSB0byByZWFkIHJhdyBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0aWVzIHRoYXQgaGF2ZVxuICogYmVlbiBzZXQgb24gYSBDZm5SZXNvdXJjZS4gVGhlIHByb3BlcnRpZXMgYF9jZm5Qcm9wZXJ0aWVzYCBhbmQgYGNmblByb3BlcnRpZXNgIGFyZVxuICogcHJvdGVjdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgd2l0aGluIHRoZSBDZm5SZXNvdXJjZSBjbGFzcyBoaWVyYXJjaHkuXG4gKlxuICogV2UgaW52ZXN0aWdhdGVkIHVzaW5nIENESydzIHB1YmxpYyBBUElzLCBidXQgdGhlcmUgaXMgbm8gcHVibGljIG1ldGhvZCB0byByZXRyaWV2ZVxuICogdGhlIHJhdyBwcm9wZXJ0eSB2YWx1ZXMgdGhhdCBoYXZlIGJlZW4gc2V0IChlLmcuLCB2aWEgY29uc3RydWN0b3IgcHJvcHMgb3IgYWRkUHJvcGVydHlPdmVycmlkZSkuXG4gKiBUaGUgb25seSBwdWJsaWMgQVBJcyBhcmUgZm9yIHdyaXRpbmcgKGFkZFByb3BlcnR5T3ZlcnJpZGUsIGFkZFByb3BlcnR5RGVsZXRpb25PdmVycmlkZSkgb3JcbiAqIGdldHRpbmcgYXR0cmlidXRlIHJlZmVyZW5jZXMgKGdldEF0dCksIG5vdCBmb3IgcmVhZGluZyBsaXRlcmFsIHByb3BlcnR5IHZhbHVlcy5cbiAqXG4gKiBUaGlzIHR5cGUgYXNzZXJ0aW9uIGlzIHNhZmUgYmVjYXVzZTpcbiAqIC0gV2Ugb25seSByZWFkIHRoZXNlIHByb3BlcnRpZXMsIG5ldmVyIG1vZGlmeSB0aGVtXG4gKiAtIFdlIG5lZWQgdG8gY2hlY2sgaWYgYSB1c2VyIGV4cGxpY2l0bHkgc2V0IGEgbmFtZSBwcm9wZXJ0eSBiZWZvcmUgYXBwbHlpbmcgb3VyIHByZWZpeFxuICogLSBUaGUgcHJvcGVydGllcyBleGlzdCBhdCBydW50aW1lIGFuZCBhcmUgcGFydCBvZiBDREsncyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvblxuICovXG50eXBlIENmblJlc291cmNlV2l0aFByb3BzID0gQ2ZuUmVzb3VyY2UgJiB7XG4gIHJlYWRvbmx5IF9jZm5Qcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IGNmblByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbmludGVyZmFjZSBSZXNvdXJjZU5hbWVzIHtcbiAgbG9naWNhbE5hbWU6IHN0cmluZztcbiAgcmF3TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIE1hcHMgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZXMgdG8gdGhlaXIgbmFtZSBwcm9wZXJ0eSBhbmQgQVdTIGxlbmd0aCBsaW1pdHMuXG4gKiBTb3VyY2VzOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtdGVtcGxhdGUtcmVzb3VyY2UtdHlwZS1yZWYuaHRtbFxuICovXG5jb25zdCBSRVNPVVJDRV9DT05GSUc6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTmFtZUNvbmZpZz4gPSB7XG4gIC8vIENvbXB1dGVcbiAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIjogeyBjZm5OYW1lOiBcIkZ1bmN0aW9uTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG5cbiAgLy8gU3RvcmFnZVxuICBcIkFXUzo6UzM6OkJ1Y2tldFwiOiB7IGNmbk5hbWU6IFwiQnVja2V0TmFtZVwiLCBtYXhMZW5ndGg6IDYzIH0sXG4gIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIjogeyBjZm5OYW1lOiBcIlRhYmxlTmFtZVwiLCBtYXhMZW5ndGg6IDI1NSB9LFxuICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCI6IHsgY2ZuTmFtZTogXCJUYWJsZU5hbWVcIiwgbWF4TGVuZ3RoOiAyNTUgfSxcblxuICAvLyBNZXNzYWdpbmdcbiAgXCJBV1M6OlNRUzo6UXVldWVcIjogeyBjZm5OYW1lOiBcIlF1ZXVlTmFtZVwiLCBtYXhMZW5ndGg6IDgwIH0sXG4gIFwiQVdTOjpTTlM6OlRvcGljXCI6IHsgY2ZuTmFtZTogXCJUb3BpY05hbWVcIiwgbWF4TGVuZ3RoOiAyNTYgfSxcblxuICAvLyBFdmVudGluZyAmIE9yY2hlc3RyYXRpb25cbiAgXCJBV1M6OkV2ZW50czo6RXZlbnRCdXNcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAyNTYgfSxcbiAgXCJBV1M6OkV2ZW50czo6UnVsZVwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG4gIFwiQVdTOjpFdmVudHM6OkNvbm5lY3Rpb25cIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6UGlwZXM6OlBpcGVcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCI6IHtcbiAgICBjZm5OYW1lOiBcIlN0YXRlTWFjaGluZU5hbWVcIixcbiAgICBtYXhMZW5ndGg6IDgwLFxuICB9LFxuICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6QWN0aXZpdHlcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA4MCB9LFxuICBcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG4gIFwiQVdTOjpTY2hlZHVsZXI6OlNjaGVkdWxlR3JvdXBcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuXG4gIC8vIEFQSVxuICBcIkFXUzo6QXBpR2F0ZXdheTo6UmVzdEFwaVwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDEyOCB9LFxuICBcIkFXUzo6QXBpR2F0ZXdheTo6VXNhZ2VQbGFuXCI6IHsgY2ZuTmFtZTogXCJVc2FnZVBsYW5OYW1lXCIsIG1heExlbmd0aDogMTI4IH0sXG4gIFwiQVdTOjpBcGlHYXRld2F5OjpBcGlLZXlcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAxMjggfSxcbiAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogMTI4IH0sXG4gIFwiQVdTOjpBcGlHYXRld2F5VjI6OkF1dGhvcml6ZXJcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAxMjggfSxcblxuICAvLyBTZWNyZXRzICYgQ29uZmlnXG4gIFwiQVdTOjpTZWNyZXRzTWFuYWdlcjo6U2VjcmV0XCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogNTEyIH0sXG4gIFwiQVdTOjpTU006OlBhcmFtZXRlclwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDIwNDggfSxcbiAgXCJBV1M6OkFwcENvbmZpZzo6QXBwbGljYXRpb25cIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6QXBwQ29uZmlnOjpFbnZpcm9ubWVudFwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG5cbiAgLy8gTm90aWZpY2F0aW9uc1xuICBcIkFXUzo6Tm90aWZpY2F0aW9uczo6Tm90aWZpY2F0aW9uQ29uZmlndXJhdGlvblwiOiB7XG4gICAgY2ZuTmFtZTogXCJOYW1lXCIsXG4gICAgbWF4TGVuZ3RoOiA2NCxcbiAgfSxcblxuICAvLyBPYnNlcnZhYmlsaXR5XG4gIFwiQVdTOjpMb2dzOjpMb2dHcm91cFwiOiB7IGNmbk5hbWU6IFwiTG9nR3JvdXBOYW1lXCIsIG1heExlbmd0aDogNTEyIH0sXG4gIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiOiB7IGNmbk5hbWU6IFwiQWxhcm1OYW1lXCIsIG1heExlbmd0aDogMjU1IH0sXG5cbiAgLy8gSUFNXG4gIFwiQVdTOjpJQU06OlJvbGVcIjogeyBjZm5OYW1lOiBcIlJvbGVOYW1lXCIsIG1heExlbmd0aDogNjQgfSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VQcmVmaXhBc3BlY3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IHRvIGFwcGx5IHRvIGFsbCByZXNvdXJjZSBuYW1lcy5cbiAgICogZS5nLiAnbXlhcHAtcHJvZCcg4oaSICdteWFwcC1wcm9kLW9yZGVycydcbiAgICovXG4gIHByZWZpeDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSB0eXBlcyB0byBza2lwIGVudGlyZWx5LlxuICAgKiBlLmcuIFsnQVdTOjpJQU06OlJvbGUnXSB0byBsZWF2ZSBJQU0gcm9sZSBuYW1lcyB1bnRvdWNoZWQuXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICBleGNsdWRlPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ0RLIEFzcGVjdCB0aGF0IGF1dG9tYXRpY2FsbHkgcHJlZml4ZXMgcGh5c2ljYWwgcmVzb3VyY2UgbmFtZXMgYWNyb3NzIEFXUyByZXNvdXJjZXMuXG4gKlxuICogQHJlbWFya3NcbiAqICoqQ3JpdGljYWwgSW1wbGVtZW50YXRpb24gTm90ZXM6KipcbiAqXG4gKiAxLiAqKlN0YWdlIFN5bnRoZXNpcyBCb3VuZGFyaWVzKio6XG4gKiAgICAtIENESyBgU3RhZ2VgIGNvbnN0cnVjdHMgY3JlYXRlIHN5bnRoZXNpcyBib3VuZGFyaWVzIHRoYXQgcHJldmVudCBBcHAtbGV2ZWwgYXNwZWN0c1xuICogICAgICBmcm9tIHRyYXZlcnNpbmcgaW50byB0aGVtXG4gKiAgICAtIFRoaXMgYXNwZWN0IE1VU1QgYmUgYXBwbGllZCB0byBlYWNoIFN0YWdlIGluZGl2aWR1YWxseSwgbm90IHRvIHRoZSBBcHBcbiAqICAgIC0gRXhhbXBsZTogYEFzcGVjdHMub2Yoc3RhZ2UpLmFkZChuZXcgUmVzb3VyY2VQcmVmaXhBc3BlY3Qoey4uLn0pKWBcbiAqXG4gKiAyLiAqKlByb3BlcnR5IE5hbWUgQ2FzaW5nKio6XG4gKiAgICAtIENsb3VkRm9ybWF0aW9uIHByb3BlcnRpZXMgdXNlIFBhc2NhbENhc2UgKGUuZy4sIGBGdW5jdGlvbk5hbWVgLCBgQnVja2V0TmFtZWApXG4gKiAgICAtIFVzaW5nIGNhbWVsQ2FzZSAoZS5nLiwgYGZ1bmN0aW9uTmFtZWApIHdpbGwgY2F1c2UgZXJyb3JzIHdpdGggdmVyc2lvbmluZyBhc3BlY3RzXG4gKiAgICAtIFdoZW4gdXNpbmcgYGFkZFByb3BlcnR5T3ZlcnJpZGUoKWAsIGFsd2F5cyB1c2UgdGhlIGV4YWN0IENsb3VkRm9ybWF0aW9uIHByb3BlcnR5IG5hbWVcbiAqXG4gKiAzLiAqKkFzcGVjdCBQcmlvcml0eSB3aXRoIFZlcnNpb25pbmcqKjpcbiAqICAgIC0gV2hlbiBjb21iaW5pbmcgd2l0aCBMYW1iZGFBbmRTdGVwRnVuY3Rpb25WZXJzaW9uaW5nQXNwZWN0LCBhcHBseSB0aGlzIGFzcGVjdCBCRUZPUkUgdmVyc2lvbmluZ1xuICogICAgLSBVc2UgQ0RLJ3MgcHJpb3JpdHkgc3lzdGVtOiBgQXNwZWN0cy5vZihzdGFnZSkuYWRkKHByZWZpeEFzcGVjdCwgeyBwcmlvcml0eTogMTAwIH0pYFxuICogICAgLSBUaGVuOiBgQXNwZWN0cy5vZihzdGFnZSkuYWRkKHZlcnNpb25pbmdBc3BlY3QsIHsgcHJpb3JpdHk6IDIwMCB9KWBcbiAqICAgIC0gTG93ZXIgcHJpb3JpdHkgbnVtYmVycyBydW4gZmlyc3RcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ29ycmVjdCB1c2FnZSB3aXRoIHN0YWdpbmdcbiAqIGNvbnN0IHN0YWdlID0gbmV3IEFwcGxpY2F0aW9uU3RhZ2UoYXBwLCAncHJvZCcpO1xuICogQXNwZWN0cy5vZihzdGFnZSkuYWRkKG5ldyBSZXNvdXJjZVByZWZpeEFzcGVjdCh7IHByZWZpeDogJ215YXBwJyB9KSwgeyBwcmlvcml0eTogMTAwIH0pO1xuICogQXNwZWN0cy5vZihzdGFnZSkuYWRkKG5ldyBMYW1iZGFBbmRTdGVwRnVuY3Rpb25WZXJzaW9uaW5nQXNwZWN0KCksIHsgcHJpb3JpdHk6IDIwMCB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VQcmVmaXhBc3BlY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVmaXg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlOiBTZXQ8c3RyaW5nPjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUmVzb3VyY2VQcmVmaXhBc3BlY3RQcm9wcykge1xuICAgIGlmICghcHJvcHMucHJlZml4IHx8ICEvXlthLXowLTktXSskLy50ZXN0KHByb3BzLnByZWZpeCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBSZXNvdXJjZVByZWZpeEFzcGVjdDogcHJlZml4IG11c3QgY29udGFpbiBvbmx5IGxvd2VyY2FzZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgaHlwaGVucywgZ290IFwiJHtwcm9wcy5wcmVmaXh9XCJgXG4gICAgICApO1xuXG4gICAgdGhpcy5wcmVmaXggPSBwcm9wcy5wcmVmaXg7XG4gICAgdGhpcy5leGNsdWRlID0gbmV3IFNldChwcm9wcy5leGNsdWRlID8/IFtdKTtcbiAgfVxuXG4gIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpIHtcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgQ2ZuUmVzb3VyY2UpKSByZXR1cm47XG5cbiAgICBjb25zdCByZXNvdXJjZVR5cGUgPSBub2RlLmNmblJlc291cmNlVHlwZTtcbiAgICBjb25zdCBjb25maWcgPSBSRVNPVVJDRV9DT05GSUdbcmVzb3VyY2VUeXBlXTtcblxuICAgIGlmICghY29uZmlnIHx8IHRoaXMuZXhjbHVkZS5oYXMocmVzb3VyY2VUeXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY2ZuTmFtZSwgbWF4TGVuZ3RoIH0gPSBjb25maWc7XG4gICAgY29uc3QgY2ZuUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPVxuICAgICAgKG5vZGUgYXMgQ2ZuUmVzb3VyY2VXaXRoUHJvcHMpLl9jZm5Qcm9wZXJ0aWVzID8/XG4gICAgICAobm9kZSBhcyBDZm5SZXNvdXJjZVdpdGhQcm9wcykuY2ZuUHJvcGVydGllcyA/P1xuICAgICAge307XG5cbiAgICBjb25zdCBuYW1lcyA9IHRoaXMucmVzb2x2ZVJlc291cmNlTmFtZXMobm9kZSwgY2ZuTmFtZSwgY2ZuUHJvcGVydGllcyk7XG5cbiAgICBpZiAodGhpcy5zaG91bGRTa2lwUmVzb3VyY2UocmVzb3VyY2VUeXBlLCBuYW1lcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0FscmVhZHlQcmVmaXhlZChuYW1lcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVmaXhlZE5hbWUgPSB0aGlzLmJ1aWxkUHJlZml4ZWROYW1lKFxuICAgICAgbmFtZXMsXG4gICAgICByZXNvdXJjZVR5cGUsXG4gICAgICBjZm5Qcm9wZXJ0aWVzXG4gICAgKTtcblxuICAgIC8vIFRydW5jYXRpb24gYXBwbGllcyB0byBhbGwgb3ZlcmZsb3dzIOKAlCBpbmNsdWRpbmcgdXNlci1zZXQgbmFtZXMg4oCUIGJlY2F1c2UgTDNcbiAgICAvLyBjb25zdHJ1Y3RzIGNhbiBnZW5lcmF0ZSBuYW1lcyB0aGUgdXNlciBoYXMgbm8gZGlyZWN0IGNvbnRyb2wgb3Zlci5cbiAgICBjb25zdCBmaW5hbE5hbWUgPSB0aGlzLnRydW5jYXRlVG9GaXQocHJlZml4ZWROYW1lLCBtYXhMZW5ndGgsIG5vZGUpO1xuXG4gICAgY29uc3QgaGFzRXJyb3IgPSB0aGlzLnZhbGlkYXRlUmVzb3VyY2VOYW1lKGZpbmFsTmFtZSwgcmVzb3VyY2VUeXBlLCBub2RlKTtcblxuICAgIGlmIChoYXNFcnJvcikgcmV0dXJuO1xuXG4gICAgbm9kZS5hZGRQcm9wZXJ0eU92ZXJyaWRlKGNmbk5hbWUsIGZpbmFsTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcmVzb3VyY2Ugc2hvdWxkIGJlIHNraXBwZWQgZnJvbSBwcmVmaXhpbmcgYmFzZWQgb25cbiAgICogcmVzb3VyY2UtdHlwZS1zcGVjaWZpYyBydWxlcyAoZS5nLiwgQVdTLXJlc2VydmVkIG5hbWluZyBjb252ZW50aW9ucykuXG4gICAqL1xuICBwcml2YXRlIHNob3VsZFNraXBSZXNvdXJjZShjZm5SZXNvdXJjZVR5cGU6IHN0cmluZywgbmFtZXM6IFJlc291cmNlTmFtZXMpIHtcbiAgICBjb25zdCBuYW1lID0gbmFtZXMucmF3TmFtZSA/PyBuYW1lcy5sb2dpY2FsTmFtZTtcbiAgICByZXR1cm4gKFxuICAgICAgY2ZuUmVzb3VyY2VUeXBlID09PSBcIkFXUzo6TG9nczo6TG9nR3JvdXBcIiAmJiBuYW1lLnN0YXJ0c1dpdGgoXCIvYXdzL1wiKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGlzQWxyZWFkeVByZWZpeGVkKG5hbWVzOiBSZXNvdXJjZU5hbWVzKSB7XG4gICAgY29uc3QgbmFtZSA9IG5hbWVzLnJhd05hbWUgPz8gbmFtZXMubG9naWNhbE5hbWU7XG4gICAgcmV0dXJuIChcbiAgICAgIG5hbWUuc3RhcnRzV2l0aChgJHt0aGlzLnByZWZpeH0tYCkgfHwgbmFtZS5zdGFydHNXaXRoKGAvJHt0aGlzLnByZWZpeH0vYClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBuYW1lIGNvbXBvbmVudHMgZm9yIGEgcmVzb3VyY2U6IHRoZSBleHBsaWNpdGx5IHNldCByYXcgbmFtZSAoaWYgYW55KVxuICAgKiBhbmQgYSBzYW5pdGlzZWQgbG9naWNhbCBJRCBkZXJpdmVkIGZyb20gdGhlIGNvbnN0cnVjdCB0cmVlLlxuICAgKlxuICAgKiBUaGUgcmF3IG5hbWUgaXMgbG9va2VkIHVwIGZyb20gdGhlIENGTiBwcm9wZXJ0aWVzIGluIGJvdGggUGFzY2FsQ2FzZSBhbmQgY2FtZWxDYXNlXG4gICAqIChDREsgc3RvcmVzIEwxIHByb3BlcnRpZXMgaW4gY2FtZWxDYXNlIGludGVybmFsbHkpLiBXaGVuIG5vIGV4cGxpY2l0IG5hbWUgaXMgc2V0LFxuICAgKiBgcmF3TmFtZWAgaXMgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVSZXNvdXJjZU5hbWVzKFxuICAgIG5vZGU6IENmblJlc291cmNlLFxuICAgIGNmbk5hbWU6IHN0cmluZyxcbiAgICBjZm5Qcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBSZXNvdXJjZU5hbWVzIHtcbiAgICBjb25zdCBjYW1lbENmbk5hbWUgPSBjZm5OYW1lLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgY2ZuTmFtZS5zbGljZSgxKTtcbiAgICBjb25zdCByYXdOYW1lID0gY2ZuUHJvcGVydGllc1tjZm5OYW1lXSA/PyBjZm5Qcm9wZXJ0aWVzW2NhbWVsQ2ZuTmFtZV07XG4gICAgY29uc3QgbG9naWNhbE5hbWUgPSBTdGFjay5vZihub2RlKVxuICAgICAgLmdldExvZ2ljYWxJZChub2RlKVxuICAgICAgLnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgXCItXCIpIC8vIG5vbi1hbHBoYW51bWVyaWMg4oaSIGRhc2hcbiAgICAgIC5yZXBsYWNlKC9eLSt8LSskL2csIFwiXCIpOyAvLyB0cmltIGxlYWRpbmcvdHJhaWxpbmcgZGFzaGVzXG5cbiAgICByZXR1cm4gdHlwZW9mIHJhd05hbWUgPT09IFwic3RyaW5nXCJcbiAgICAgID8geyBsb2dpY2FsTmFtZSwgcmF3TmFtZSB9XG4gICAgICA6IHsgbG9naWNhbE5hbWUsIHJhd05hbWU6IHVuZGVmaW5lZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgcHJlZml4ZWQgbmFtZSwgaGFuZGxpbmcgc3BlY2lhbCBjYXNlcyBmb3Igc3BlY2lmaWMgcmVzb3VyY2UgdHlwZXMuXG4gICAqXG4gICAqIFVzZXMgdGhlIHJhdyBuYW1lIHdoZW4gaXQgaXMgYSBjb25jcmV0ZSBzdHJpbmcsIGZhbGxpbmcgYmFjayB0byB0aGUgbG9naWNhbFxuICAgKiBuYW1lIHdoZW4gdGhlIHJhdyBuYW1lIGlzIGFuIHVucmVzb2x2ZWQgQ0RLIHRva2VuLlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFByZWZpeGVkTmFtZShcbiAgICBuYW1lczogUmVzb3VyY2VOYW1lcyxcbiAgICBjZm5SZXNvdXJjZVR5cGU6IHN0cmluZyxcbiAgICBjZm5Qcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApIHtcbiAgICBjb25zdCBuYW1lID1cbiAgICAgICFuYW1lcy5yYXdOYW1lIHx8IFRva2VuLmlzVW5yZXNvbHZlZChuYW1lcy5yYXdOYW1lKVxuICAgICAgICA/IG5hbWVzLmxvZ2ljYWxOYW1lXG4gICAgICAgIDogbmFtZXMucmF3TmFtZTtcblxuICAgIC8vIFNwZWNpYWwgY2FzZTogRklGTyBxdWV1ZXMgbXVzdCBlbmQgd2l0aCAuZmlmbyBzdWZmaXhcbiAgICBpZiAoXG4gICAgICBjZm5SZXNvdXJjZVR5cGUgPT09IFwiQVdTOjpTUVM6OlF1ZXVlXCIgJiZcbiAgICAgIGNmblByb3BlcnRpZXMuZmlmb1F1ZXVlID09PSB0cnVlICYmXG4gICAgICAhbmFtZS5lbmRzV2l0aChcIi5maWZvXCIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wcmVmaXh9LSR7bmFtZX0uZmlmb2A7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlOiBGSUZPIHRvcGljcyBtdXN0IGVuZCB3aXRoIC5maWZvIHN1ZmZpeFxuICAgIGlmIChcbiAgICAgIGNmblJlc291cmNlVHlwZSA9PT0gXCJBV1M6OlNOUzo6VG9waWNcIiAmJlxuICAgICAgY2ZuUHJvcGVydGllcy5maWZvVG9waWMgPT09IHRydWUgJiZcbiAgICAgICFuYW1lLmVuZHNXaXRoKFwiLmZpZm9cIilcbiAgICApIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLnByZWZpeH0tJHtuYW1lfS5maWZvYDtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2U6IFNTTSBwYXJhbWV0ZXIgbmFtZXMgdXNlIHBhdGgtc3R5bGUgcHJlZml4XG4gICAgaWYgKGNmblJlc291cmNlVHlwZSA9PT0gXCJBV1M6OlNTTTo6UGFyYW1ldGVyXCIpIHtcbiAgICAgIHJldHVybiBgLyR7dGhpcy5wcmVmaXh9LyR7bmFtZX1gO1xuICAgIH1cblxuICAgIC8vIFNwZWNpYWwgY2FzZTogUzMgYnVja2V0IG5hbWUgYmUgbG93ZXJjYXNlIG9ubHlcbiAgICBpZiAoY2ZuUmVzb3VyY2VUeXBlID09PSBcIkFXUzo6UzM6OkJ1Y2tldFwiKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wcmVmaXh9LSR7bmFtZX1gLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdDogc2ltcGxlIHByZWZpeFxuICAgIHJldHVybiBgJHt0aGlzLnByZWZpeH0tJHtuYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogVHJ1bmNhdGVzIGEgcHJlZml4ZWQgbmFtZSB0byBmaXQgd2l0aGluIG1heExlbmd0aCBieSBoYXNoaW5nIHRoZSBvcmlnaW5hbFxuICAgKiBmb3IgdW5pcXVlbmVzcy4gRW1pdHMgYSBDREsgd2FybmluZyB3aGVuIHRydW5jYXRpb24gb2NjdXJzLlxuICAgKi9cbiAgcHJpdmF0ZSB0cnVuY2F0ZVRvRml0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBtYXhMZW5ndGg6IG51bWJlcixcbiAgICBub2RlOiBJQ29uc3RydWN0XG4gICk6IHN0cmluZyB7XG4gICAgaWYgKG5hbWUubGVuZ3RoIDw9IG1heExlbmd0aCkgcmV0dXJuIG5hbWU7XG5cbiAgICBjb25zdCBoYXNoID0gY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUobmFtZSkuZGlnZXN0KFwiaGV4XCIpLnNsaWNlKDAsIDgpO1xuXG4gICAgLy8gUHJlc2VydmUgLmZpZm8gc3VmZml4IOKAlCBBV1MgcmVxdWlyZXMgaXQgYXQgdGhlIGVuZCBvZiBGSUZPIHJlc291cmNlIG5hbWVzXG4gICAgY29uc3Qgc3VmZml4ID0gbmFtZS5lbmRzV2l0aChcIi5maWZvXCIpID8gXCIuZmlmb1wiIDogXCJcIjtcbiAgICBjb25zdCBuYW1lV2l0aG91dFN1ZmZpeCA9IHN1ZmZpeCA/IG5hbWUuc2xpY2UoMCwgLXN1ZmZpeC5sZW5ndGgpIDogbmFtZTtcblxuICAgIC8vIDEgYWNjb3VudHMgZm9yIHRoZSBkYXNoIHNlcGFyYXRvciBiZWZvcmUgdGhlIGhhc2hcbiAgICBjb25zdCBidWRnZXQgPSBtYXhMZW5ndGggLSBoYXNoLmxlbmd0aCAtIDEgLSBzdWZmaXgubGVuZ3RoO1xuICAgIGNvbnN0IHRydW5jYXRlZCA9IG5hbWVXaXRob3V0U3VmZml4LnNsaWNlKDAsIGJ1ZGdldCkgKyBcIi1cIiArIGhhc2ggKyBzdWZmaXg7XG5cbiAgICBBbm5vdGF0aW9ucy5vZihub2RlKS5hZGRXYXJuaW5nKFxuICAgICAgYFtSZXNvdXJjZVByZWZpeEFzcGVjdF0gXCIke25hbWV9XCIgKCR7bmFtZS5sZW5ndGh9IGNoYXJzKSBleGNlZWRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbGVuZ3RoIG9mICR7bWF4TGVuZ3RofS4gYCArXG4gICAgICAgIGBOYW1lIGhhcyBiZWVuIHRydW5jYXRlZCB0byBcIiR7dHJ1bmNhdGVkfVwiLiBTaG9ydGVuIHRoZSByZXNvdXJjZSBiYXNlIG5hbWUgb3IgeW91ciBwcmVmaXggKFwiJHt0aGlzLnByZWZpeH1cIikgdG8gYXZvaWQgdHJ1bmNhdGlvbi5gXG4gICAgKTtcblxuICAgIHJldHVybiB0cnVuY2F0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHJlc291cmNlLXNwZWNpZmljIHN0cnVjdHVyYWwgbmFtaW5nIHJlcXVpcmVtZW50cyB0aGF0IEFXUyBlbmZvcmNlcy5cbiAgICogTGVuZ3RoIHZpb2xhdGlvbnMgYXJlIGhhbmRsZWQgdXBzdHJlYW0gYnkgdHJ1bmNhdGVUb0ZpdC5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVSZXNvdXJjZU5hbWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNmblJlc291cmNlVHlwZTogc3RyaW5nLFxuICAgIG5vZGU6IElDb25zdHJ1Y3RcbiAgKTogYm9vbGVhbiB7XG4gICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XG5cbiAgICBpZiAoY2ZuUmVzb3VyY2VUeXBlID09PSBcIkFXUzo6UzM6OkJ1Y2tldFwiKSB7XG4gICAgICBpZiAobmFtZSAhPT0gbmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIEFubm90YXRpb25zLm9mKG5vZGUpLmFkZEVycm9yKFxuICAgICAgICAgIGBbUmVzb3VyY2VQcmVmaXhBc3BlY3RdIFMzIGJ1Y2tldCBuYW1lIFwiJHtuYW1lfVwiIGNvbnRhaW5zIHVwcGVyY2FzZSBsZXR0ZXJzLiBgICtcbiAgICAgICAgICAgIGBCdWNrZXQgbmFtZXMgbXVzdCBiZSBsb3dlcmNhc2Ugb25seS5gXG4gICAgICAgICk7XG4gICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUuaW5jbHVkZXMoXCJfXCIpKSB7XG4gICAgICAgIEFubm90YXRpb25zLm9mKG5vZGUpLmFkZEVycm9yKFxuICAgICAgICAgIGBbUmVzb3VyY2VQcmVmaXhBc3BlY3RdIFMzIGJ1Y2tldCBuYW1lIFwiJHtuYW1lfVwiIGNvbnRhaW5zIHVuZGVyc2NvcmVzLiBgICtcbiAgICAgICAgICAgIGBCdWNrZXQgbmFtZXMgY2Fubm90IGNvbnRhaW4gdW5kZXJzY29yZXMuIFVzZSBoeXBoZW5zIGluc3RlYWQuYFxuICAgICAgICApO1xuICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc0Vycm9yO1xuICB9XG59XG4iXX0=
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtcHJlZml4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVzb3VyY2UtcHJlZml4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUE4RTtBQUU5RSxtQ0FBb0M7QUFDcEMscUVBQWlFO0FBb0NqRTs7O0dBR0c7QUFDSCxNQUFNLGVBQWUsR0FBdUM7SUFDMUQsVUFBVTtJQUNWLHVCQUF1QixFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBRW5FLFVBQVU7SUFDVixpQkFBaUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUMzRCxzQkFBc0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtJQUNoRSw0QkFBNEIsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtJQUV0RSxZQUFZO0lBQ1osaUJBQWlCLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDMUQsaUJBQWlCLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFFM0QsMkJBQTJCO0lBQzNCLHVCQUF1QixFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQzVELG1CQUFtQixFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ3ZELHlCQUF5QixFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQzdELGtCQUFrQixFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ3RELGtDQUFrQyxFQUFFO1FBQ2xDLE9BQU8sRUFBRSxrQkFB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QUssQ0FBQztRQUVyQixJQUFJLGVBQWUsS0FBSyxpQkFBaUIsRUFBRSxDQUFDO1lBQzFDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUNoQyx5QkFBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQzNCLDBDQUEwQyxJQUFJLGdDQUFnQztvQkFDNUUsc0NBQXNDLENBQ3pDLENBQUM7Z0JBQ0YsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNsQixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLHlCQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FDM0IsMENBQTBDLElBQUksMEJBQTBCO29CQUN0RSwrREFBK0QsQ0FDbEUsQ0FBQztnQkFDRixRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUNGO0FBdk5ELG9EQXVOQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFubm90YXRpb25zLCBDZm5SZXNvdXJjZSwgSUFzcGVjdCwgU3RhY2ssIFRva2VuIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBpc0Nka01hbmFnZWRTaW5nbGV0b24gfSBmcm9tIFwiLi9jZGstbWFuYWdlZC1zaW5nbGV0b25zXCI7XG5cbmludGVyZmFjZSBSZXNvdXJjZU5hbWVDb25maWcge1xuICAvKiogVGhlIENsb3VkRm9ybWF0aW9uIHByb3BlcnR5IHRoYXQgaG9sZHMgdGhlIHJlc291cmNlJ3MgcGh5c2ljYWwgbmFtZSAqL1xuICBjZm5OYW1lOiBzdHJpbmc7XG4gIC8qKiBNYXhpbXVtIGFsbG93ZWQgY2hhcmFjdGVyIGxlbmd0aCBmb3IgdGhpcyByZXNvdXJjZSB0eXBlICovXG4gIG1heExlbmd0aDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEV4dGVuc2lvbiB0eXBlIHRvIGFjY2VzcyBpbnRlcm5hbCBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0aWVzIG9uIENmblJlc291cmNlLlxuICpcbiAqIENESyBkb2VzIG5vdCBwcm92aWRlIGEgcHVibGljIEFQSSB0byByZWFkIHJhdyBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0aWVzIHRoYXQgaGF2ZVxuICogYmVlbiBzZXQgb24gYSBDZm5SZXNvdXJjZS4gVGhlIHByb3BlcnRpZXMgYF9jZm5Qcm9wZXJ0aWVzYCBhbmQgYGNmblByb3BlcnRpZXNgIGFyZVxuICogcHJvdGVjdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgd2l0aGluIHRoZSBDZm5SZXNvdXJjZSBjbGFzcyBoaWVyYXJjaHkuXG4gKlxuICogV2UgaW52ZXN0aWdhdGVkIHVzaW5nIENESydzIHB1YmxpYyBBUElzLCBidXQgdGhlcmUgaXMgbm8gcHVibGljIG1ldGhvZCB0byByZXRyaWV2ZVxuICogdGhlIHJhdyBwcm9wZXJ0eSB2YWx1ZXMgdGhhdCBoYXZlIGJlZW4gc2V0IChlLmcuLCB2aWEgY29uc3RydWN0b3IgcHJvcHMgb3IgYWRkUHJvcGVydHlPdmVycmlkZSkuXG4gKiBUaGUgb25seSBwdWJsaWMgQVBJcyBhcmUgZm9yIHdyaXRpbmcgKGFkZFByb3BlcnR5T3ZlcnJpZGUsIGFkZFByb3BlcnR5RGVsZXRpb25PdmVycmlkZSkgb3JcbiAqIGdldHRpbmcgYXR0cmlidXRlIHJlZmVyZW5jZXMgKGdldEF0dCksIG5vdCBmb3IgcmVhZGluZyBsaXRlcmFsIHByb3BlcnR5IHZhbHVlcy5cbiAqXG4gKiBUaGlzIHR5cGUgYXNzZXJ0aW9uIGlzIHNhZmUgYmVjYXVzZTpcbiAqIC0gV2Ugb25seSByZWFkIHRoZXNlIHByb3BlcnRpZXMsIG5ldmVyIG1vZGlmeSB0aGVtXG4gKiAtIFdlIG5lZWQgdG8gY2hlY2sgaWYgYSB1c2VyIGV4cGxpY2l0bHkgc2V0IGEgbmFtZSBwcm9wZXJ0eSBiZWZvcmUgYXBwbHlpbmcgb3VyIHByZWZpeFxuICogLSBUaGUgcHJvcGVydGllcyBleGlzdCBhdCBydW50aW1lIGFuZCBhcmUgcGFydCBvZiBDREsncyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvblxuICovXG50eXBlIENmblJlc291cmNlV2l0aFByb3BzID0gQ2ZuUmVzb3VyY2UgJiB7XG4gIHJlYWRvbmx5IF9jZm5Qcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IGNmblByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbmludGVyZmFjZSBSZXNvdXJjZU5hbWVzIHtcbiAgbG9naWNhbE5hbWU6IHN0cmluZztcbiAgcmF3TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIE1hcHMgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZXMgdG8gdGhlaXIgbmFtZSBwcm9wZXJ0eSBhbmQgQVdTIGxlbmd0aCBsaW1pdHMuXG4gKiBTb3VyY2VzOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtdGVtcGxhdGUtcmVzb3VyY2UtdHlwZS1yZWYuaHRtbFxuICovXG5jb25zdCBSRVNPVVJDRV9DT05GSUc6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTmFtZUNvbmZpZz4gPSB7XG4gIC8vIENvbXB1dGVcbiAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIjogeyBjZm5OYW1lOiBcIkZ1bmN0aW9uTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG5cbiAgLy8gU3RvcmFnZVxuICBcIkFXUzo6UzM6OkJ1Y2tldFwiOiB7IGNmbk5hbWU6IFwiQnVja2V0TmFtZVwiLCBtYXhMZW5ndGg6IDYzIH0sXG4gIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIjogeyBjZm5OYW1lOiBcIlRhYmxlTmFtZVwiLCBtYXhMZW5ndGg6IDI1NSB9LFxuICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCI6IHsgY2ZuTmFtZTogXCJUYWJsZU5hbWVcIiwgbWF4TGVuZ3RoOiAyNTUgfSxcblxuICAvLyBNZXNzYWdpbmdcbiAgXCJBV1M6OlNRUzo6UXVldWVcIjogeyBjZm5OYW1lOiBcIlF1ZXVlTmFtZVwiLCBtYXhMZW5ndGg6IDgwIH0sXG4gIFwiQVdTOjpTTlM6OlRvcGljXCI6IHsgY2ZuTmFtZTogXCJUb3BpY05hbWVcIiwgbWF4TGVuZ3RoOiAyNTYgfSxcblxuICAvLyBFdmVudGluZyAmIE9yY2hlc3RyYXRpb25cbiAgXCJBV1M6OkV2ZW50czo6RXZlbnRCdXNcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAyNTYgfSxcbiAgXCJBV1M6OkV2ZW50czo6UnVsZVwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG4gIFwiQVdTOjpFdmVudHM6OkNvbm5lY3Rpb25cIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6UGlwZXM6OlBpcGVcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCI6IHtcbiAgICBjZm5OYW1lOiBcIlN0YXRlTWFjaGluZU5hbWVcIixcbiAgICBtYXhMZW5ndGg6IDgwLFxuICB9LFxuICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6QWN0aXZpdHlcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA4MCB9LFxuICBcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG4gIFwiQVdTOjpTY2hlZHVsZXI6OlNjaGVkdWxlR3JvdXBcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuXG4gIC8vIEFQSVxuICBcIkFXUzo6QXBpR2F0ZXdheTo6UmVzdEFwaVwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDEyOCB9LFxuICBcIkFXUzo6QXBpR2F0ZXdheTo6VXNhZ2VQbGFuXCI6IHsgY2ZuTmFtZTogXCJVc2FnZVBsYW5OYW1lXCIsIG1heExlbmd0aDogMTI4IH0sXG4gIFwiQVdTOjpBcGlHYXRld2F5OjpBcGlLZXlcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAxMjggfSxcbiAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogMTI4IH0sXG4gIFwiQVdTOjpBcGlHYXRld2F5VjI6OkF1dGhvcml6ZXJcIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiAxMjggfSxcblxuICAvLyBTZWNyZXRzICYgQ29uZmlnXG4gIFwiQVdTOjpTZWNyZXRzTWFuYWdlcjo6U2VjcmV0XCI6IHsgY2ZuTmFtZTogXCJOYW1lXCIsIG1heExlbmd0aDogNTEyIH0sXG4gIFwiQVdTOjpTU006OlBhcmFtZXRlclwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDIwNDggfSxcbiAgXCJBV1M6OkFwcENvbmZpZzo6QXBwbGljYXRpb25cIjogeyBjZm5OYW1lOiBcIk5hbWVcIiwgbWF4TGVuZ3RoOiA2NCB9LFxuICBcIkFXUzo6QXBwQ29uZmlnOjpFbnZpcm9ubWVudFwiOiB7IGNmbk5hbWU6IFwiTmFtZVwiLCBtYXhMZW5ndGg6IDY0IH0sXG5cbiAgLy8gTm90aWZpY2F0aW9uc1xuICBcIkFXUzo6Tm90aWZpY2F0aW9uczo6Tm90aWZpY2F0aW9uQ29uZmlndXJhdGlvblwiOiB7XG4gICAgY2ZuTmFtZTogXCJOYW1lXCIsXG4gICAgbWF4TGVuZ3RoOiA2NCxcbiAgfSxcblxuICAvLyBPYnNlcnZhYmlsaXR5XG4gIFwiQVdTOjpMb2dzOjpMb2dHcm91cFwiOiB7IGNmbk5hbWU6IFwiTG9nR3JvdXBOYW1lXCIsIG1heExlbmd0aDogNTEyIH0sXG4gIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiOiB7IGNmbk5hbWU6IFwiQWxhcm1OYW1lXCIsIG1heExlbmd0aDogMjU1IH0sXG5cbiAgLy8gSUFNXG4gIFwiQVdTOjpJQU06OlJvbGVcIjogeyBjZm5OYW1lOiBcIlJvbGVOYW1lXCIsIG1heExlbmd0aDogNjQgfSxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VQcmVmaXhBc3BlY3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcHJlZml4IHRvIGFwcGx5IHRvIGFsbCByZXNvdXJjZSBuYW1lcy5cbiAgICogZS5nLiAnbXlhcHAtcHJvZCcg4oaSICdteWFwcC1wcm9kLW9yZGVycydcbiAgICovXG4gIHByZWZpeDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSB0eXBlcyB0byBza2lwIGVudGlyZWx5LlxuICAgKiBlLmcuIFsnQVdTOjpJQU06OlJvbGUnXSB0byBsZWF2ZSBJQU0gcm9sZSBuYW1lcyB1bnRvdWNoZWQuXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICBleGNsdWRlPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ0RLIEFzcGVjdCB0aGF0IGF1dG9tYXRpY2FsbHkgcHJlZml4ZXMgcGh5c2ljYWwgcmVzb3VyY2UgbmFtZXMgYWNyb3NzIEFXUyByZXNvdXJjZXMuXG4gKlxuICogQHJlbWFya3NcbiAqICoqQ3JpdGljYWwgSW1wbGVtZW50YXRpb24gTm90ZXM6KipcbiAqXG4gKiAxLiAqKlN0YWdlIFN5bnRoZXNpcyBCb3VuZGFyaWVzKio6XG4gKiAgICAtIENESyBgU3RhZ2VgIGNvbnN0cnVjdHMgY3JlYXRlIHN5bnRoZXNpcyBib3VuZGFyaWVzIHRoYXQgcHJldmVudCBBcHAtbGV2ZWwgYXNwZWN0c1xuICogICAgICBmcm9tIHRyYXZlcnNpbmcgaW50byB0aGVtXG4gKiAgICAtIFRoaXMgYXNwZWN0IE1VU1QgYmUgYXBwbGllZCB0byBlYWNoIFN0YWdlIGluZGl2aWR1YWxseSwgbm90IHRvIHRoZSBBcHBcbiAqICAgIC0gRXhhbXBsZTogYEFzcGVjdHMub2Yoc3RhZ2UpLmFkZChuZXcgUmVzb3VyY2VQcmVmaXhBc3BlY3Qoey4uLn0pKWBcbiAqXG4gKiAyLiAqKlByb3BlcnR5IE5hbWUgQ2FzaW5nKio6XG4gKiAgICAtIENsb3VkRm9ybWF0aW9uIHByb3BlcnRpZXMgdXNlIFBhc2NhbENhc2UgKGUuZy4sIGBGdW5jdGlvbk5hbWVgLCBgQnVja2V0TmFtZWApXG4gKiAgICAtIFVzaW5nIGNhbWVsQ2FzZSAoZS5nLiwgYGZ1bmN0aW9uTmFtZWApIHdpbGwgY2F1c2UgZXJyb3JzIHdpdGggdmVyc2lvbmluZyBhc3BlY3RzXG4gKiAgICAtIFdoZW4gdXNpbmcgYGFkZFByb3BlcnR5T3ZlcnJpZGUoKWAsIGFsd2F5cyB1c2UgdGhlIGV4YWN0IENsb3VkRm9ybWF0aW9uIHByb3BlcnR5IG5hbWVcbiAqXG4gKiAzLiAqKkFzcGVjdCBQcmlvcml0eSB3aXRoIFZlcnNpb25pbmcqKjpcbiAqICAgIC0gV2hlbiBjb21iaW5pbmcgd2l0aCBMYW1iZGFBbmRTdGVwRnVuY3Rpb25WZXJzaW9uaW5nQXNwZWN0LCBhcHBseSB0aGlzIGFzcGVjdCBCRUZPUkUgdmVyc2lvbmluZ1xuICogICAgLSBVc2UgQ0RLJ3MgcHJpb3JpdHkgc3lzdGVtOiBgQXNwZWN0cy5vZihzdGFnZSkuYWRkKHByZWZpeEFzcGVjdCwgeyBwcmlvcml0eTogMTAwIH0pYFxuICogICAgLSBUaGVuOiBgQXNwZWN0cy5vZihzdGFnZSkuYWRkKHZlcnNpb25pbmdBc3BlY3QsIHsgcHJpb3JpdHk6IDIwMCB9KWBcbiAqICAgIC0gTG93ZXIgcHJpb3JpdHkgbnVtYmVycyBydW4gZmlyc3RcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ29ycmVjdCB1c2FnZSB3aXRoIHN0YWdpbmdcbiAqIGNvbnN0IHN0YWdlID0gbmV3IEFwcGxpY2F0aW9uU3RhZ2UoYXBwLCAncHJvZCcpO1xuICogQXNwZWN0cy5vZihzdGFnZSkuYWRkKG5ldyBSZXNvdXJjZVByZWZpeEFzcGVjdCh7IHByZWZpeDogJ215YXBwJyB9KSwgeyBwcmlvcml0eTogMTAwIH0pO1xuICogQXNwZWN0cy5vZihzdGFnZSkuYWRkKG5ldyBMYW1iZGFBbmRTdGVwRnVuY3Rpb25WZXJzaW9uaW5nQXNwZWN0KCksIHsgcHJpb3JpdHk6IDIwMCB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VQcmVmaXhBc3BlY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVmaXg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlOiBTZXQ8c3RyaW5nPjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUmVzb3VyY2VQcmVmaXhBc3BlY3RQcm9wcykge1xuICAgIGlmICghcHJvcHMucHJlZml4IHx8ICEvXlthLXowLTktXSskLy50ZXN0KHByb3BzLnByZWZpeCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBSZXNvdXJjZVByZWZpeEFzcGVjdDogcHJlZml4IG11c3QgY29udGFpbiBvbmx5IGxvd2VyY2FzZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgaHlwaGVucywgZ290IFwiJHtwcm9wcy5wcmVmaXh9XCJgXG4gICAgICApO1xuXG4gICAgdGhpcy5wcmVmaXggPSBwcm9wcy5wcmVmaXg7XG4gICAgdGhpcy5leGNsdWRlID0gbmV3IFNldChwcm9wcy5leGNsdWRlID8/IFtdKTtcbiAgfVxuXG4gIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpIHtcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgQ2ZuUmVzb3VyY2UpKSByZXR1cm47XG5cbiAgICAvLyBDREstbWFuYWdlZCBzaW5nbGV0b24vZnJhbWV3b3JrIHJlc291cmNlcyBtdXN0IGtlZXAgdGhlaXJcbiAgICAvLyBDbG91ZEZvcm1hdGlvbi1nZW5lcmF0ZWQgcGh5c2ljYWwgbmFtZXMuIFBpbm5pbmcgYSBkZXRlcm1pbmlzdGljIG5hbWUgb250b1xuICAgIC8vIHRoZW0gKGUuZy4gdGhlIEJ1Y2tldERlcGxveW1lbnQgaGFuZGxlcikgcmVtb3ZlcyB0aGUgcmFuZG9tLXN1ZmZpeFxuICAgIC8vIG9ycGhhbi1hdm9pZGFuY2UgYW5kIHdlZGdlcyBkZXBsb3lzIG9uIGAvYXdzL2xhbWJkYS88Zm4+YCBMb2dHcm91cFxuICAgIC8vIFwiYWxyZWFkeSBleGlzdHNcIiBhZnRlciBhbnkgZmFpbGVkIGF0dGVtcHQuXG4gICAgaWYgKGlzQ2RrTWFuYWdlZFNpbmdsZXRvbihub2RlKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVzb3VyY2VUeXBlID0gbm9kZS5jZm5SZXNvdXJjZVR5cGU7XG4gICAgY29uc3QgY29uZmlnID0gUkVTT1VSQ0VfQ09ORklHW3Jlc291cmNlVHlwZV07XG5cbiAgICBpZiAoIWNvbmZpZyB8fCB0aGlzLmV4Y2x1ZGUuaGFzKHJlc291cmNlVHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGNmbk5hbWUsIG1heExlbmd0aCB9ID0gY29uZmlnO1xuICAgIGNvbnN0IGNmblByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID1cbiAgICAgIChub2RlIGFzIENmblJlc291cmNlV2l0aFByb3BzKS5fY2ZuUHJvcGVydGllcyA/P1xuICAgICAgKG5vZGUgYXMgQ2ZuUmVzb3VyY2VXaXRoUHJvcHMpLmNmblByb3BlcnRpZXMgPz9cbiAgICAgIHt9O1xuXG4gICAgY29uc3QgbmFtZXMgPSB0aGlzLnJlc29sdmVSZXNvdXJjZU5hbWVzKG5vZGUsIGNmbk5hbWUsIGNmblByb3BlcnRpZXMpO1xuXG4gICAgaWYgKHRoaXMuc2hvdWxkU2tpcFJlc291cmNlKHJlc291cmNlVHlwZSwgbmFtZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNBbHJlYWR5UHJlZml4ZWQobmFtZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJlZml4ZWROYW1lID0gdGhpcy5idWlsZFByZWZpeGVkTmFtZShcbiAgICAgIG5hbWVzLFxuICAgICAgcmVzb3VyY2VUeXBlLFxuICAgICAgY2ZuUHJvcGVydGllc1xuICAgICk7XG5cbiAgICAvLyBUcnVuY2F0aW9uIGFwcGxpZXMgdG8gYWxsIG92ZXJmbG93cyDigJQgaW5jbHVkaW5nIHVzZXItc2V0IG5hbWVzIOKAlCBiZWNhdXNlIEwzXG4gICAgLy8gY29uc3RydWN0cyBjYW4gZ2VuZXJhdGUgbmFtZXMgdGhlIHVzZXIgaGFzIG5vIGRpcmVjdCBjb250cm9sIG92ZXIuXG4gICAgY29uc3QgZmluYWxOYW1lID0gdGhpcy50cnVuY2F0ZVRvRml0KHByZWZpeGVkTmFtZSwgbWF4TGVuZ3RoLCBub2RlKTtcblxuICAgIGNvbnN0IGhhc0Vycm9yID0gdGhpcy52YWxpZGF0ZVJlc291cmNlTmFtZShmaW5hbE5hbWUsIHJlc291cmNlVHlwZSwgbm9kZSk7XG5cbiAgICBpZiAoaGFzRXJyb3IpIHJldHVybjtcblxuICAgIG5vZGUuYWRkUHJvcGVydHlPdmVycmlkZShjZm5OYW1lLCBmaW5hbE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBhIHJlc291cmNlIHNob3VsZCBiZSBza2lwcGVkIGZyb20gcHJlZml4aW5nIGJhc2VkIG9uXG4gICAqIHJlc291cmNlLXR5cGUtc3BlY2lmaWMgcnVsZXMgKGUuZy4sIEFXUy1yZXNlcnZlZCBuYW1pbmcgY29udmVudGlvbnMpLlxuICAgKi9cbiAgcHJpdmF0ZSBzaG91bGRTa2lwUmVzb3VyY2UoY2ZuUmVzb3VyY2VUeXBlOiBzdHJpbmcsIG5hbWVzOiBSZXNvdXJjZU5hbWVzKSB7XG4gICAgY29uc3QgbmFtZSA9IG5hbWVzLnJhd05hbWUgPz8gbmFtZXMubG9naWNhbE5hbWU7XG4gICAgcmV0dXJuIChcbiAgICAgIGNmblJlc291cmNlVHlwZSA9PT0gXCJBV1M6OkxvZ3M6OkxvZ0dyb3VwXCIgJiYgbmFtZS5zdGFydHNXaXRoKFwiL2F3cy9cIilcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FscmVhZHlQcmVmaXhlZChuYW1lczogUmVzb3VyY2VOYW1lcykge1xuICAgIGNvbnN0IG5hbWUgPSBuYW1lcy5yYXdOYW1lID8/IG5hbWVzLmxvZ2ljYWxOYW1lO1xuICAgIHJldHVybiAoXG4gICAgICBuYW1lLnN0YXJ0c1dpdGgoYCR7dGhpcy5wcmVmaXh9LWApIHx8IG5hbWUuc3RhcnRzV2l0aChgLyR7dGhpcy5wcmVmaXh9L2ApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgbmFtZSBjb21wb25lbnRzIGZvciBhIHJlc291cmNlOiB0aGUgZXhwbGljaXRseSBzZXQgcmF3IG5hbWUgKGlmIGFueSlcbiAgICogYW5kIGEgc2FuaXRpc2VkIGxvZ2ljYWwgSUQgZGVyaXZlZCBmcm9tIHRoZSBjb25zdHJ1Y3QgdHJlZS5cbiAgICpcbiAgICogVGhlIHJhdyBuYW1lIGlzIGxvb2tlZCB1cCBmcm9tIHRoZSBDRk4gcHJvcGVydGllcyBpbiBib3RoIFBhc2NhbENhc2UgYW5kIGNhbWVsQ2FzZVxuICAgKiAoQ0RLIHN0b3JlcyBMMSBwcm9wZXJ0aWVzIGluIGNhbWVsQ2FzZSBpbnRlcm5hbGx5KS4gV2hlbiBubyBleHBsaWNpdCBuYW1lIGlzIHNldCxcbiAgICogYHJhd05hbWVgIGlzIGB1bmRlZmluZWRgLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlUmVzb3VyY2VOYW1lcyhcbiAgICBub2RlOiBDZm5SZXNvdXJjZSxcbiAgICBjZm5OYW1lOiBzdHJpbmcsXG4gICAgY2ZuUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUmVzb3VyY2VOYW1lcyB7XG4gICAgY29uc3QgY2FtZWxDZm5OYW1lID0gY2ZuTmFtZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIGNmbk5hbWUuc2xpY2UoMSk7XG4gICAgY29uc3QgcmF3TmFtZSA9IGNmblByb3BlcnRpZXNbY2ZuTmFtZV0gPz8gY2ZuUHJvcGVydGllc1tjYW1lbENmbk5hbWVdO1xuICAgIGNvbnN0IGxvZ2ljYWxOYW1lID0gU3RhY2sub2Yobm9kZSlcbiAgICAgIC5nZXRMb2dpY2FsSWQobm9kZSlcbiAgICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csIFwiLVwiKSAvLyBub24tYWxwaGFudW1lcmljIOKGkiBkYXNoXG4gICAgICAucmVwbGFjZSgvXi0rfC0rJC9nLCBcIlwiKTsgLy8gdHJpbSBsZWFkaW5nL3RyYWlsaW5nIGRhc2hlc1xuXG4gICAgcmV0dXJuIHR5cGVvZiByYXdOYW1lID09PSBcInN0cmluZ1wiXG4gICAgICA/IHsgbG9naWNhbE5hbWUsIHJhd05hbWUgfVxuICAgICAgOiB7IGxvZ2ljYWxOYW1lLCByYXdOYW1lOiB1bmRlZmluZWQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIHByZWZpeGVkIG5hbWUsIGhhbmRsaW5nIHNwZWNpYWwgY2FzZXMgZm9yIHNwZWNpZmljIHJlc291cmNlIHR5cGVzLlxuICAgKlxuICAgKiBVc2VzIHRoZSByYXcgbmFtZSB3aGVuIGl0IGlzIGEgY29uY3JldGUgc3RyaW5nLCBmYWxsaW5nIGJhY2sgdG8gdGhlIGxvZ2ljYWxcbiAgICogbmFtZSB3aGVuIHRoZSByYXcgbmFtZSBpcyBhbiB1bnJlc29sdmVkIENESyB0b2tlbi5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRQcmVmaXhlZE5hbWUoXG4gICAgbmFtZXM6IFJlc291cmNlTmFtZXMsXG4gICAgY2ZuUmVzb3VyY2VUeXBlOiBzdHJpbmcsXG4gICAgY2ZuUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKSB7XG4gICAgY29uc3QgbmFtZSA9XG4gICAgICAhbmFtZXMucmF3TmFtZSB8fCBUb2tlbi5pc1VucmVzb2x2ZWQobmFtZXMucmF3TmFtZSlcbiAgICAgICAgPyBuYW1lcy5sb2dpY2FsTmFtZVxuICAgICAgICA6IG5hbWVzLnJhd05hbWU7XG5cbiAgICAvLyBTcGVjaWFsIGNhc2U6IEZJRk8gcXVldWVzIG11c3QgZW5kIHdpdGggLmZpZm8gc3VmZml4XG4gICAgaWYgKFxuICAgICAgY2ZuUmVzb3VyY2VUeXBlID09PSBcIkFXUzo6U1FTOjpRdWV1ZVwiICYmXG4gICAgICBjZm5Qcm9wZXJ0aWVzLmZpZm9RdWV1ZSA9PT0gdHJ1ZSAmJlxuICAgICAgIW5hbWUuZW5kc1dpdGgoXCIuZmlmb1wiKVxuICAgICkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucHJlZml4fS0ke25hbWV9LmZpZm9gO1xuICAgIH1cblxuICAgIC8vIFNwZWNpYWwgY2FzZTogRklGTyB0b3BpY3MgbXVzdCBlbmQgd2l0aCAuZmlmbyBzdWZmaXhcbiAgICBpZiAoXG4gICAgICBjZm5SZXNvdXJjZVR5cGUgPT09IFwiQVdTOjpTTlM6OlRvcGljXCIgJiZcbiAgICAgIGNmblByb3BlcnRpZXMuZmlmb1RvcGljID09PSB0cnVlICYmXG4gICAgICAhbmFtZS5lbmRzV2l0aChcIi5maWZvXCIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wcmVmaXh9LSR7bmFtZX0uZmlmb2A7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlOiBTU00gcGFyYW1ldGVyIG5hbWVzIHVzZSBwYXRoLXN0eWxlIHByZWZpeFxuICAgIGlmIChjZm5SZXNvdXJjZVR5cGUgPT09IFwiQVdTOjpTU006OlBhcmFtZXRlclwiKSB7XG4gICAgICByZXR1cm4gYC8ke3RoaXMucHJlZml4fS8ke25hbWV9YDtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2U6IFMzIGJ1Y2tldCBuYW1lIGJlIGxvd2VyY2FzZSBvbmx5XG4gICAgaWYgKGNmblJlc291cmNlVHlwZSA9PT0gXCJBV1M6OlMzOjpCdWNrZXRcIikge1xuICAgICAgcmV0dXJuIGAke3RoaXMucHJlZml4fS0ke25hbWV9YC50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQ6IHNpbXBsZSBwcmVmaXhcbiAgICByZXR1cm4gYCR7dGhpcy5wcmVmaXh9LSR7bmFtZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFRydW5jYXRlcyBhIHByZWZpeGVkIG5hbWUgdG8gZml0IHdpdGhpbiBtYXhMZW5ndGggYnkgaGFzaGluZyB0aGUgb3JpZ2luYWxcbiAgICogZm9yIHVuaXF1ZW5lc3MuIEVtaXRzIGEgQ0RLIHdhcm5pbmcgd2hlbiB0cnVuY2F0aW9uIG9jY3Vycy5cbiAgICovXG4gIHByaXZhdGUgdHJ1bmNhdGVUb0ZpdChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbWF4TGVuZ3RoOiBudW1iZXIsXG4gICAgbm9kZTogSUNvbnN0cnVjdFxuICApOiBzdHJpbmcge1xuICAgIGlmIChuYW1lLmxlbmd0aCA8PSBtYXhMZW5ndGgpIHJldHVybiBuYW1lO1xuXG4gICAgY29uc3QgaGFzaCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKG5hbWUpLmRpZ2VzdChcImhleFwiKS5zbGljZSgwLCA4KTtcblxuICAgIC8vIFByZXNlcnZlIC5maWZvIHN1ZmZpeCDigJQgQVdTIHJlcXVpcmVzIGl0IGF0IHRoZSBlbmQgb2YgRklGTyByZXNvdXJjZSBuYW1lc1xuICAgIGNvbnN0IHN1ZmZpeCA9IG5hbWUuZW5kc1dpdGgoXCIuZmlmb1wiKSA/IFwiLmZpZm9cIiA6IFwiXCI7XG4gICAgY29uc3QgbmFtZVdpdGhvdXRTdWZmaXggPSBzdWZmaXggPyBuYW1lLnNsaWNlKDAsIC1zdWZmaXgubGVuZ3RoKSA6IG5hbWU7XG5cbiAgICAvLyAxIGFjY291bnRzIGZvciB0aGUgZGFzaCBzZXBhcmF0b3IgYmVmb3JlIHRoZSBoYXNoXG4gICAgY29uc3QgYnVkZ2V0ID0gbWF4TGVuZ3RoIC0gaGFzaC5sZW5ndGggLSAxIC0gc3VmZml4Lmxlbmd0aDtcbiAgICBjb25zdCB0cnVuY2F0ZWQgPSBuYW1lV2l0aG91dFN1ZmZpeC5zbGljZSgwLCBidWRnZXQpICsgXCItXCIgKyBoYXNoICsgc3VmZml4O1xuXG4gICAgQW5ub3RhdGlvbnMub2Yobm9kZSkuYWRkV2FybmluZyhcbiAgICAgIGBbUmVzb3VyY2VQcmVmaXhBc3BlY3RdIFwiJHtuYW1lfVwiICgke25hbWUubGVuZ3RofSBjaGFycykgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIGxlbmd0aCBvZiAke21heExlbmd0aH0uIGAgK1xuICAgICAgICBgTmFtZSBoYXMgYmVlbiB0cnVuY2F0ZWQgdG8gXCIke3RydW5jYXRlZH1cIi4gU2hvcnRlbiB0aGUgcmVzb3VyY2UgYmFzZSBuYW1lIG9yIHlvdXIgcHJlZml4IChcIiR7dGhpcy5wcmVmaXh9XCIpIHRvIGF2b2lkIHRydW5jYXRpb24uYFxuICAgICk7XG5cbiAgICByZXR1cm4gdHJ1bmNhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyByZXNvdXJjZS1zcGVjaWZpYyBzdHJ1Y3R1cmFsIG5hbWluZyByZXF1aXJlbWVudHMgdGhhdCBBV1MgZW5mb3JjZXMuXG4gICAqIExlbmd0aCB2aW9sYXRpb25zIGFyZSBoYW5kbGVkIHVwc3RyZWFtIGJ5IHRydW5jYXRlVG9GaXQuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUmVzb3VyY2VOYW1lKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjZm5SZXNvdXJjZVR5cGU6IHN0cmluZyxcbiAgICBub2RlOiBJQ29uc3RydWN0XG4gICk6IGJvb2xlYW4ge1xuICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuXG4gICAgaWYgKGNmblJlc291cmNlVHlwZSA9PT0gXCJBV1M6OlMzOjpCdWNrZXRcIikge1xuICAgICAgaWYgKG5hbWUgIT09IG5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBBbm5vdGF0aW9ucy5vZihub2RlKS5hZGRFcnJvcihcbiAgICAgICAgICBgW1Jlc291cmNlUHJlZml4QXNwZWN0XSBTMyBidWNrZXQgbmFtZSBcIiR7bmFtZX1cIiBjb250YWlucyB1cHBlcmNhc2UgbGV0dGVycy4gYCArXG4gICAgICAgICAgICBgQnVja2V0IG5hbWVzIG11c3QgYmUgbG93ZXJjYXNlIG9ubHkuYFxuICAgICAgICApO1xuICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lLmluY2x1ZGVzKFwiX1wiKSkge1xuICAgICAgICBBbm5vdGF0aW9ucy5vZihub2RlKS5hZGRFcnJvcihcbiAgICAgICAgICBgW1Jlc291cmNlUHJlZml4QXNwZWN0XSBTMyBidWNrZXQgbmFtZSBcIiR7bmFtZX1cIiBjb250YWlucyB1bmRlcnNjb3Jlcy4gYCArXG4gICAgICAgICAgICBgQnVja2V0IG5hbWVzIGNhbm5vdCBjb250YWluIHVuZGVyc2NvcmVzLiBVc2UgaHlwaGVucyBpbnN0ZWFkLmBcbiAgICAgICAgKTtcbiAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoYXNFcnJvcjtcbiAgfVxufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aligent/cdk-aspects",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.5",
|
|
4
4
|
"description": "Collection of CDK Asppects",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/jest": "^29.5.10",
|
|
23
|
-
"@types/node": "^24.
|
|
23
|
+
"@types/node": "^24.13.2",
|
|
24
24
|
"aws-cdk": "^2.1124.1",
|
|
25
25
|
"jest": "^29.7.0",
|
|
26
26
|
"ts-jest": "^29.4.9",
|
|
@@ -28,9 +28,11 @@
|
|
|
28
28
|
"typescript": "^5.3.2"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"aws-cdk-lib": "^2.257.0",
|
|
32
|
-
"constructs": "^10.5.0",
|
|
33
31
|
"esbuild": "^0.28.0",
|
|
34
32
|
"source-map-support": "^0.5.21"
|
|
33
|
+
},
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"aws-cdk-lib": "^2.113.0",
|
|
36
|
+
"constructs": "^10.5.0"
|
|
35
37
|
}
|
|
36
38
|
}
|