@fjall/components-infrastructure 0.73.11 → 0.73.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/__tests__/patterns/__snapshots__/compute.test.js.snap +433 -0
- package/dist/lib/__tests__/patterns/compute.test.d.ts +1 -0
- package/dist/lib/__tests__/patterns/compute.test.js +137 -0
- package/dist/lib/__tests__/simple.test.d.ts +0 -0
- package/dist/lib/__tests__/simple.test.js +12 -0
- package/dist/lib/resources/aws/backup/backupPlan.d.ts +24 -0
- package/dist/lib/resources/aws/backup/backupPlan.js +172 -0
- package/dist/lib/resources/aws/backup/backupVault.d.ts +19 -0
- package/dist/lib/resources/aws/backup/backupVault.js +44 -0
- package/dist/lib/resources/aws/backup/index.d.ts +2 -0
- package/dist/lib/resources/aws/backup/index.js +19 -0
- package/dist/lib/resources/aws/organisations/account.d.ts +37 -0
- package/dist/lib/resources/aws/organisations/account.js +220 -0
- package/dist/lib/resources/aws/organisations/delegatedAdministrator.d.ts +14 -0
- package/dist/lib/resources/aws/organisations/delegatedAdministrator.js +61 -0
- package/dist/lib/resources/aws/organisations/index.d.ts +8 -0
- package/dist/lib/resources/aws/organisations/index.js +22 -0
- package/dist/lib/resources/aws/organisations/interfaces.d.ts +105 -0
- package/dist/lib/resources/aws/organisations/interfaces.js +3 -0
- package/dist/lib/resources/aws/organisations/organisation.d.ts +47 -0
- package/dist/lib/resources/aws/organisations/organisation.js +263 -0
- package/dist/lib/resources/aws/organisations/organisationalUnit.d.ts +28 -0
- package/dist/lib/resources/aws/organisations/organisationalUnit.js +170 -0
- package/dist/lib/resources/aws/organisations/policy.d.ts +17 -0
- package/dist/lib/resources/aws/organisations/policy.js +93 -0
- package/dist/lib/resources/aws/organisations/trustedServiceAccess.d.ts +13 -0
- package/dist/lib/resources/aws/organisations/trustedServiceAccess.js +58 -0
- package/dist/lib/resources/aws/organisations/types.d.ts +165 -0
- package/dist/lib/resources/aws/organisations/types.js +36 -0
- package/dist/lib/utils/directTagging.d.ts +31 -0
- package/dist/lib/utils/directTagging.js +86 -0
- package/dist/lib/utils/fjallConstruct.d.ts +8 -0
- package/dist/lib/utils/fjallConstruct.js +18 -0
- package/dist/lib/utils/fjallStackSynthesizer.d.ts +9 -0
- package/dist/lib/utils/fjallStackSynthesizer.js +22 -0
- package/dist/lib/utils/standardTagsAspect.js +2 -2
- package/dist/lib/utils/tagContext.d.ts +28 -0
- package/dist/lib/utils/tagContext.js +53 -0
- package/dist/lib/utils/tagSynthesizer.d.ts +13 -0
- package/dist/lib/utils/tagSynthesizer.js +55 -0
- package/package.json +3 -3
- package/dist/lib/patterns/aws/ec2.d.ts +0 -43
- package/dist/lib/patterns/aws/ec2.js +0 -123
- package/dist/lib/utils/getCidr.d.ts +0 -8
- package/dist/lib/utils/getCidr.js +0 -40
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DirectTagging = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
/**
|
|
6
|
+
* DirectTagging provides a way to apply tags to resources without using aspects.
|
|
7
|
+
* This approach works by directly manipulating CloudFormation resources during
|
|
8
|
+
* stack initialization, avoiding the infinite loop issue in CDK v2.206.0+
|
|
9
|
+
*/
|
|
10
|
+
class DirectTagging {
|
|
11
|
+
/**
|
|
12
|
+
* Set global tags that will be applied to all resources
|
|
13
|
+
*/
|
|
14
|
+
static setGlobalTags(tags) {
|
|
15
|
+
DirectTagging.globalTags = {
|
|
16
|
+
...DirectTagging.globalTags,
|
|
17
|
+
...tags
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Set tags for a specific stack
|
|
22
|
+
*/
|
|
23
|
+
static setStackTags(stack, tags) {
|
|
24
|
+
const existingTags = DirectTagging.stackTags.get(stack) || {};
|
|
25
|
+
DirectTagging.stackTags.set(stack, {
|
|
26
|
+
...existingTags,
|
|
27
|
+
...tags
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Apply tags to a CloudFormation resource directly
|
|
32
|
+
*/
|
|
33
|
+
static tagCfnResource(resource) {
|
|
34
|
+
const stack = aws_cdk_lib_1.Stack.of(resource);
|
|
35
|
+
const stackTags = DirectTagging.stackTags.get(stack) || {};
|
|
36
|
+
const allTags = {
|
|
37
|
+
...DirectTagging.globalTags,
|
|
38
|
+
...stackTags
|
|
39
|
+
};
|
|
40
|
+
if (Object.keys(allTags).length === 0) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
// Check if resource supports tags
|
|
44
|
+
if (!('tags' in resource) || typeof resource.tags !== 'object') {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Get existing tags
|
|
48
|
+
const existingTags = resource.tags || [];
|
|
49
|
+
const tagMap = new Map();
|
|
50
|
+
// Add existing tags to map
|
|
51
|
+
if (Array.isArray(existingTags)) {
|
|
52
|
+
existingTags.forEach((tag) => {
|
|
53
|
+
if (tag.key && tag.value) {
|
|
54
|
+
tagMap.set(tag.key, tag.value);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
// Add new tags (overwriting if they exist)
|
|
59
|
+
Object.entries(allTags).forEach(([key, value]) => {
|
|
60
|
+
tagMap.set(key, value);
|
|
61
|
+
});
|
|
62
|
+
// Convert back to array format
|
|
63
|
+
resource.tags = Array.from(tagMap.entries()).map(([key, value]) => ({
|
|
64
|
+
key,
|
|
65
|
+
value
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Process a construct tree and tag all CloudFormation resources
|
|
70
|
+
*/
|
|
71
|
+
static processConstructTree(root) {
|
|
72
|
+
const processNode = (node) => {
|
|
73
|
+
// Check if this is a CloudFormation resource
|
|
74
|
+
if (aws_cdk_lib_1.CfnResource.isCfnResource(node)) {
|
|
75
|
+
DirectTagging.tagCfnResource(node);
|
|
76
|
+
}
|
|
77
|
+
// Process children
|
|
78
|
+
node.node.children.forEach(child => processNode(child));
|
|
79
|
+
};
|
|
80
|
+
processNode(root);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.DirectTagging = DirectTagging;
|
|
84
|
+
DirectTagging.globalTags = {};
|
|
85
|
+
DirectTagging.stackTags = new Map();
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0VGFnZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi91dGlscy9kaXJlY3RUYWdnaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFpRDtBQUdqRDs7OztHQUlHO0FBQ0gsTUFBYSxhQUFhO0lBSXhCOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUErQjtRQUN6RCxhQUFhLENBQUMsVUFBVSxHQUFHO1lBQ3pCLEdBQUcsYUFBYSxDQUFDLFVBQVU7WUFDM0IsR0FBRyxJQUFJO1NBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBWSxFQUFFLElBQStCO1FBQ3RFLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5RCxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUU7WUFDakMsR0FBRyxZQUFZO1lBQ2YsR0FBRyxJQUFJO1NBQ1IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFxQjtRQUNoRCxNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0QsTUFBTSxPQUFPLEdBQUc7WUFDZCxHQUFHLGFBQWEsQ0FBQyxVQUFVO1lBQzNCLEdBQUcsU0FBUztTQUNiLENBQUM7UUFFRixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE9BQU87UUFDVCxDQUFDO1FBRUQsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxPQUFPLFFBQVEsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0QsT0FBTztRQUNULENBQUM7UUFFRCxvQkFBb0I7UUFDcEIsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFFekMsMkJBQTJCO1FBQzNCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ2hDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDaEMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELDJDQUEyQztRQUMzQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDL0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFFSCwrQkFBK0I7UUFDL0IsUUFBUSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLEdBQUc7WUFDSCxLQUFLO1NBQ04sQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBZ0I7UUFDakQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFnQixFQUFFLEVBQUU7WUFDdkMsNkNBQTZDO1lBQzdDLElBQUkseUJBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBRUQsbUJBQW1CO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQztRQUVGLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDOztBQXJGSCxzQ0FzRkM7QUFyRmdCLHdCQUFVLEdBQThCLEVBQUUsQ0FBQztBQUMzQyx1QkFBUyxHQUEwQyxJQUFJLEdBQUcsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2ssIENmblJlc291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJQ29uc3RydWN0LCBOb2RlIH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBEaXJlY3RUYWdnaW5nIHByb3ZpZGVzIGEgd2F5IHRvIGFwcGx5IHRhZ3MgdG8gcmVzb3VyY2VzIHdpdGhvdXQgdXNpbmcgYXNwZWN0cy5cbiAqIFRoaXMgYXBwcm9hY2ggd29ya3MgYnkgZGlyZWN0bHkgbWFuaXB1bGF0aW5nIENsb3VkRm9ybWF0aW9uIHJlc291cmNlcyBkdXJpbmdcbiAqIHN0YWNrIGluaXRpYWxpemF0aW9uLCBhdm9pZGluZyB0aGUgaW5maW5pdGUgbG9vcCBpc3N1ZSBpbiBDREsgdjIuMjA2LjArXG4gKi9cbmV4cG9ydCBjbGFzcyBEaXJlY3RUYWdnaW5nIHtcbiAgcHJpdmF0ZSBzdGF0aWMgZ2xvYmFsVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBzdGFja1RhZ3M6IE1hcDxTdGFjaywgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfT4gPSBuZXcgTWFwKCk7XG4gIFxuICAvKipcbiAgICogU2V0IGdsb2JhbCB0YWdzIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIGFsbCByZXNvdXJjZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc2V0R2xvYmFsVGFncyh0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogdm9pZCB7XG4gICAgRGlyZWN0VGFnZ2luZy5nbG9iYWxUYWdzID0ge1xuICAgICAgLi4uRGlyZWN0VGFnZ2luZy5nbG9iYWxUYWdzLFxuICAgICAgLi4udGFnc1xuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZXQgdGFncyBmb3IgYSBzcGVjaWZpYyBzdGFja1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzZXRTdGFja1RhZ3Moc3RhY2s6IFN0YWNrLCB0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogdm9pZCB7XG4gICAgY29uc3QgZXhpc3RpbmdUYWdzID0gRGlyZWN0VGFnZ2luZy5zdGFja1RhZ3MuZ2V0KHN0YWNrKSB8fCB7fTtcbiAgICBEaXJlY3RUYWdnaW5nLnN0YWNrVGFncy5zZXQoc3RhY2ssIHtcbiAgICAgIC4uLmV4aXN0aW5nVGFncyxcbiAgICAgIC4uLnRhZ3NcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEFwcGx5IHRhZ3MgdG8gYSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSBkaXJlY3RseVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0YWdDZm5SZXNvdXJjZShyZXNvdXJjZTogQ2ZuUmVzb3VyY2UpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHJlc291cmNlKTtcbiAgICBjb25zdCBzdGFja1RhZ3MgPSBEaXJlY3RUYWdnaW5nLnN0YWNrVGFncy5nZXQoc3RhY2spIHx8IHt9O1xuICAgIGNvbnN0IGFsbFRhZ3MgPSB7XG4gICAgICAuLi5EaXJlY3RUYWdnaW5nLmdsb2JhbFRhZ3MsXG4gICAgICAuLi5zdGFja1RhZ3NcbiAgICB9O1xuICAgIFxuICAgIGlmIChPYmplY3Qua2V5cyhhbGxUYWdzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgcmVzb3VyY2Ugc3VwcG9ydHMgdGFnc1xuICAgIGlmICghKCd0YWdzJyBpbiByZXNvdXJjZSkgfHwgdHlwZW9mIHJlc291cmNlLnRhZ3MgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIEdldCBleGlzdGluZyB0YWdzXG4gICAgY29uc3QgZXhpc3RpbmdUYWdzID0gcmVzb3VyY2UudGFncyB8fCBbXTtcbiAgICBjb25zdCB0YWdNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIFxuICAgIC8vIEFkZCBleGlzdGluZyB0YWdzIHRvIG1hcFxuICAgIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nVGFncykpIHtcbiAgICAgIGV4aXN0aW5nVGFncy5mb3JFYWNoKCh0YWc6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGFnLmtleSAmJiB0YWcudmFsdWUpIHtcbiAgICAgICAgICB0YWdNYXAuc2V0KHRhZy5rZXksIHRhZy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBBZGQgbmV3IHRhZ3MgKG92ZXJ3cml0aW5nIGlmIHRoZXkgZXhpc3QpXG4gICAgT2JqZWN0LmVudHJpZXMoYWxsVGFncykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICB0YWdNYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIENvbnZlcnQgYmFjayB0byBhcnJheSBmb3JtYXRcbiAgICByZXNvdXJjZS50YWdzID0gQXJyYXkuZnJvbSh0YWdNYXAuZW50cmllcygpKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlXG4gICAgfSkpO1xuICB9XG4gIFxuICAvKipcbiAgICogUHJvY2VzcyBhIGNvbnN0cnVjdCB0cmVlIGFuZCB0YWcgYWxsIENsb3VkRm9ybWF0aW9uIHJlc291cmNlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBwcm9jZXNzQ29uc3RydWN0VHJlZShyb290OiBJQ29uc3RydWN0KTogdm9pZCB7XG4gICAgY29uc3QgcHJvY2Vzc05vZGUgPSAobm9kZTogSUNvbnN0cnVjdCkgPT4ge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIENsb3VkRm9ybWF0aW9uIHJlc291cmNlXG4gICAgICBpZiAoQ2ZuUmVzb3VyY2UuaXNDZm5SZXNvdXJjZShub2RlKSkge1xuICAgICAgICBEaXJlY3RUYWdnaW5nLnRhZ0NmblJlc291cmNlKG5vZGUpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBQcm9jZXNzIGNoaWxkcmVuXG4gICAgICBub2RlLm5vZGUuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiBwcm9jZXNzTm9kZShjaGlsZCkpO1xuICAgIH07XG4gICAgXG4gICAgcHJvY2Vzc05vZGUocm9vdCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
/**
|
|
3
|
+
* Base construct for Fjall resources that automatically
|
|
4
|
+
* applies tags from context during construction.
|
|
5
|
+
*/
|
|
6
|
+
export declare class FjallConstruct extends Construct {
|
|
7
|
+
constructor(scope: Construct, id: string);
|
|
8
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FjallConstruct = void 0;
|
|
4
|
+
const constructs_1 = require("constructs");
|
|
5
|
+
const tagContext_1 = require("./tagContext");
|
|
6
|
+
/**
|
|
7
|
+
* Base construct for Fjall resources that automatically
|
|
8
|
+
* applies tags from context during construction.
|
|
9
|
+
*/
|
|
10
|
+
class FjallConstruct extends constructs_1.Construct {
|
|
11
|
+
constructor(scope, id) {
|
|
12
|
+
super(scope, id);
|
|
13
|
+
// Apply tags from context during construction
|
|
14
|
+
tagContext_1.TagContext.applyTagsFromContext(this.node);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.FjallConstruct = FjallConstruct;
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmphbGxDb25zdHJ1Y3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvZmphbGxDb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUEwQztBQUUxQzs7O0dBR0c7QUFDSCxNQUFhLGNBQWUsU0FBUSxzQkFBUztJQUMzQyxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLDhDQUE4QztRQUM5Qyx1QkFBVSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0Y7QUFQRCx3Q0FPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBUYWdDb250ZXh0IH0gZnJvbSBcIi4vdGFnQ29udGV4dFwiO1xuXG4vKipcbiAqIEJhc2UgY29uc3RydWN0IGZvciBGamFsbCByZXNvdXJjZXMgdGhhdCBhdXRvbWF0aWNhbGx5XG4gKiBhcHBsaWVzIHRhZ3MgZnJvbSBjb250ZXh0IGR1cmluZyBjb25zdHJ1Y3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBGamFsbENvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIFxuICAgIC8vIEFwcGx5IHRhZ3MgZnJvbSBjb250ZXh0IGR1cmluZyBjb25zdHJ1Y3Rpb25cbiAgICBUYWdDb250ZXh0LmFwcGx5VGFnc0Zyb21Db250ZXh0KHRoaXMubm9kZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DefaultStackSynthesizer } from "aws-cdk-lib";
|
|
2
|
+
import { ISynthesisSession } from "aws-cdk-lib/core";
|
|
3
|
+
/**
|
|
4
|
+
* Custom stack synthesizer that applies tags during synthesis.
|
|
5
|
+
* This avoids the infinite loop issue with aspects in CDK v2.206.0+
|
|
6
|
+
*/
|
|
7
|
+
export declare class FjallStackSynthesizer extends DefaultStackSynthesizer {
|
|
8
|
+
synthesize(session: ISynthesisSession): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FjallStackSynthesizer = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const directTagging_1 = require("./directTagging");
|
|
6
|
+
/**
|
|
7
|
+
* Custom stack synthesizer that applies tags during synthesis.
|
|
8
|
+
* This avoids the infinite loop issue with aspects in CDK v2.206.0+
|
|
9
|
+
*/
|
|
10
|
+
class FjallStackSynthesizer extends aws_cdk_lib_1.DefaultStackSynthesizer {
|
|
11
|
+
synthesize(session) {
|
|
12
|
+
const stack = this.boundStack;
|
|
13
|
+
// Process the entire construct tree to apply tags
|
|
14
|
+
if (stack) {
|
|
15
|
+
directTagging_1.DirectTagging.processConstructTree(stack);
|
|
16
|
+
}
|
|
17
|
+
// Continue with normal synthesis
|
|
18
|
+
super.synthesize(session);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.FjallStackSynthesizer = FjallStackSynthesizer;
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmphbGxTdGFja1N5bnRoZXNpemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWxzL2ZqYWxsU3RhY2tTeW50aGVzaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBc0Q7QUFFdEQsbURBQWdEO0FBRWhEOzs7R0FHRztBQUNILE1BQWEscUJBQXNCLFNBQVEscUNBQXVCO0lBQ3pELFVBQVUsQ0FBQyxPQUEwQjtRQUMxQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRTlCLGtEQUFrRDtRQUNsRCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsNkJBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBWkQsc0RBWUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWZhdWx0U3RhY2tTeW50aGVzaXplciB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgSVN5bnRoZXNpc1Nlc3Npb24gfSBmcm9tIFwiYXdzLWNkay1saWIvY29yZVwiO1xuaW1wb3J0IHsgRGlyZWN0VGFnZ2luZyB9IGZyb20gXCIuL2RpcmVjdFRhZ2dpbmdcIjtcblxuLyoqXG4gKiBDdXN0b20gc3RhY2sgc3ludGhlc2l6ZXIgdGhhdCBhcHBsaWVzIHRhZ3MgZHVyaW5nIHN5bnRoZXNpcy5cbiAqIFRoaXMgYXZvaWRzIHRoZSBpbmZpbml0ZSBsb29wIGlzc3VlIHdpdGggYXNwZWN0cyBpbiBDREsgdjIuMjA2LjArXG4gKi9cbmV4cG9ydCBjbGFzcyBGamFsbFN0YWNrU3ludGhlc2l6ZXIgZXh0ZW5kcyBEZWZhdWx0U3RhY2tTeW50aGVzaXplciB7XG4gIHB1YmxpYyBzeW50aGVzaXplKHNlc3Npb246IElTeW50aGVzaXNTZXNzaW9uKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhY2sgPSB0aGlzLmJvdW5kU3RhY2s7XG4gICAgXG4gICAgLy8gUHJvY2VzcyB0aGUgZW50aXJlIGNvbnN0cnVjdCB0cmVlIHRvIGFwcGx5IHRhZ3NcbiAgICBpZiAoc3RhY2spIHtcbiAgICAgIERpcmVjdFRhZ2dpbmcucHJvY2Vzc0NvbnN0cnVjdFRyZWUoc3RhY2spO1xuICAgIH1cbiAgICBcbiAgICAvLyBDb250aW51ZSB3aXRoIG5vcm1hbCBzeW50aGVzaXNcbiAgICBzdXBlci5zeW50aGVzaXplKHNlc3Npb24pO1xuICB9XG59XG4iXX0=
|
|
@@ -446,7 +446,7 @@ class StandardTagsAspect {
|
|
|
446
446
|
// Add IPAM pool tag for VPCs with IPAM configuration
|
|
447
447
|
if (resource.cfnResourceType === "AWS::EC2::VPC") {
|
|
448
448
|
const properties = resource.cfnProperties || {};
|
|
449
|
-
if (properties.
|
|
449
|
+
if (properties.Ipv4IpamPoolId) {
|
|
450
450
|
const stack = aws_cdk_lib_1.Stack.of(resource);
|
|
451
451
|
const accountId = stack.node.tryGetContext("accountId");
|
|
452
452
|
const region = stack.region;
|
|
@@ -467,4 +467,4 @@ class StandardTagsAspect {
|
|
|
467
467
|
}
|
|
468
468
|
}
|
|
469
469
|
exports.StandardTagsAspect = StandardTagsAspect;
|
|
470
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRUYWdzQXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWxzL3N0YW5kYXJkVGFnc0FzcGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBMEQ7QUFHMUQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsa0JBQWtCO0lBSTdCLFlBQVksWUFBdUM7UUFGbEMsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBRzNELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPO1FBQ1QsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxJQUFJLHlCQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQW1CLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFFBQXFCO1FBQzlDLDZGQUE2RjtRQUM3RixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTztRQUNULENBQUM7UUFFRCw4RUFBOEU7UUFDOUUsK0VBQStFO1FBQy9FLE1BQU0sZ0JBQWdCLEdBQUc7WUFDdkIsTUFBTTtZQUNOLGtDQUFrQztZQUVsQyxjQUFjO1lBQ2QsMEJBQTBCO1lBQzFCLGtDQUFrQztZQUNsQyw2QkFBNkI7WUFDN0Isb0NBQW9DO1lBQ3BDLHVDQUF1QztZQUN2QyxrQ0FBa0M7WUFDbEMseUJBQXlCO1lBQ3pCLHdCQUF3QjtZ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LElBQUksVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUM5QixNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQzVCLElBQUksU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUN4QixNQUFNLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ2hFLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELHNCQUFzQjtRQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3pELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsbUNBQW1DO1FBQ25DLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RCxHQUFHLEVBQUUsR0FBRztZQUNSLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0Y7QUFyZ0JELGdEQXFnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQXNwZWN0LCBDZm5SZXNvdXJjZSwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIEFzcGVjdCB0byBlbmZvcmNlIGEgc3RhbmRhcmQgc2V0IG9mIHRhZ3Mgb24gZXZlcnkgdGFnLWNhcGFibGUgcmVzb3VyY2UgaW4gYSBjb25zdHJ1Y3QgdHJlZS5cbiAqXG4gKiBVcGRhdGVkIGZvciBDREsgdjIuMjA2LjArIGNvbXBhdGliaWxpdHk6XG4gKiAtIEF2b2lkcyB1c2luZyBhbnkgdGFnZ2luZyBBUElzIGR1cmluZyBhc3BlY3QgdmlzaXRhdGlvbiB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzXG4gKiAtIFVzZXMgYSBzeW50aGVzaXMtdGltZSBhcHByb2FjaCB0byBtb2RpZnkgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVzXG4gKiAtIE1haW50YWlucyB0aGUgc2FtZSBjbGVhbiBBUEkgYW5kIGF1dG9tYXRpYyB0YWdnaW5nIGJlbmVmaXRzXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFuZGFyZFRhZ3NBc3BlY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1aXJlZFRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFnZ2VkUmVzb3VyY2VzID0gbmV3IFdlYWtTZXQ8SUNvbnN0cnVjdD4oKTtcblxuICBjb25zdHJ1Y3RvcihyZXF1aXJlZFRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnJlcXVpcmVkVGFncyA9IHJlcXVpcmVkVGFncztcbiAgfVxuXG4gIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICAvLyBTa2lwIGlmIGFscmVhZHkgcHJvY2Vzc2VkXG4gICAgaWYgKHRoaXMudGFnZ2VkUmVzb3VyY2VzLmhhcyhub2RlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgTDEgKENGTikgcmVzb3VyY2VzIG9ubHlcbiAgICBpZiAoQ2ZuUmVzb3VyY2UuaXNDZm5SZXNvdXJjZShub2RlKSkge1xuICAgICAgdGhpcy5wcm9jZXNzQ2ZuUmVzb3VyY2Uobm9kZSBhcyBDZm5SZXNvdXJjZSk7XG4gICAgICB0aGlzLnRhZ2dlZFJlc291cmNlcy5hZGQobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzQ2ZuUmVzb3VyY2UocmVzb3VyY2U6IENmblJlc291cmNlKTogdm9pZCB7XG4gICAgLy8gU2tpcCBTZWNyZXRSb3RhdGlvbiByZXNvdXJjZXMgYXMgdGhleSBjcmVhdGUgbmVzdGVkIHN0YWNrcyB3aXRoIGRpZmZlcmVudCB0YWcgcmVxdWlyZW1lbnRzXG4gICAgaWYgKHJlc291cmNlLm5vZGUucGF0aC5pbmNsdWRlcyhcIlNlY3JldFJvdGF0aW9uXCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ29tcHJlaGVuc2l2ZSBsaXN0IG9mIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHR5cGVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0YWdzXG4gICAgLy8gVGhpcyBsaXN0IGlzIGJhc2VkIG9uIEFXUyBDbG91ZEZvcm1hdGlvbiBkb2N1bWVudGF0aW9uIGFuZCBrbm93biBsaW1pdGF0aW9uc1xuICAgIGNvbnN0IHVuc3VwcG9ydGVkVHlwZXMgPSBbXG4gICAgICAvLyBBQ01cbiAgICAgIFwiQVdTOjpDZXJ0aWZpY2F0ZU1hbmFnZXI6OkFjY291bnRcIixcblxuICAgICAgLy8gQVBJIEdhdGV3YXlcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpBY2NvdW50XCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6QmFzZVBhdGhNYXBwaW5nXCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudFwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkRvY3VtZW50YXRpb25QYXJ0XCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6RG9jdW1lbnRhdGlvblZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpHYXRld2F5UmVzcG9uc2VcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNb2RlbFwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OlJlcXVlc3RWYWxpZGF0b3JcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpSZXNvdXJjZVwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpTWFwcGluZ1wiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXV0aG9yaXplclwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6RGVwbG95bWVudFwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uUmVzcG9uc2VcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6Ok1vZGVsXCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVSZXNwb25zZVwiLFxuXG4gICAgICAvLyBBcHBTeW5jXG4gICAgICBcIkFXUzo6QXBwU3luYzo6RGF0YVNvdXJjZVwiLFxuICAgICAgXCJBV1M6OkFwcFN5bmM6OkZ1bmN0aW9uQ29uZmlndXJhdGlvblwiLFxuICAgICAgXCJBV1M6OkFwcFN5bmM6OlJlc29sdmVyXCIsXG5cbiAgICAgIC8vIEF0aGVuYVxuICAgICAgXCJBV1M6OkF0aGVuYTo6UHJlcGFyZWRTdGF0ZW1lbnRcIixcblxuICAgICAgLy8gQ2xvdWRGb3JtYXRpb25cbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6Q3VzdG9tUmVzb3VyY2VcIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6TWFjcm9cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6TW9kdWxlRGVmYXVsdFZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6TW9kdWxlVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpQdWJsaWNUeXBlVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpQdWJsaXNoZXJcIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6UmVzb3VyY2VEZWZhdWx0VmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpSZXNvdXJjZVZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6VHlwZUFjdGl2YXRpb25cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6V2FpdENvbmRpdGlvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpXYWl0Q29uZGl0aW9uSGFuZGxlXCIsXG5cbiAgICAgIC8vIENsb3VkV2F0Y2hcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiLFxuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFub21hbHlEZXRlY3RvclwiLFxuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkNvbXBvc2l0ZUFsYXJtXCIsXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXCIsXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6SW5zaWdodFJ1bGVcIixcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpNZXRyaWNTdHJlYW1cIixcblxuICAgICAgLy8gQ29kZUJ1aWxkXG4gICAgICBcIkFXUzo6Q29kZUJ1aWxkOjpSZXBvcnRHcm91cFwiLFxuICAgICAgXCJBV1M6OkNvZGVCdWlsZDo6U291cmNlQ3JlZGVudGlhbFwiLFxuXG4gICAgICAvLyBDb2RlRGVwbG95XG4gICAgICBcIkFXUzo6Q29kZURlcGxveTo6RGVwbG95bWVudENvbmZpZ1wiLFxuXG4gICAgICAvLyBDb2RlUGlwZWxpbmVcbiAgICAgIFwiQVdTOjpDb2RlUGlwZWxpbmU6OkN1c3RvbUFjdGlvblR5cGVcIixcbiAgICAgIFwiQVdTOjpDb2RlUGlwZWxpbmU6OldlYmhvb2tcIixcblxuICAgICAgLy8gQ29nbml0b1xuICAgICAgXCJBV1M6OkNvZ25pdG86OklkZW50aXR5UG9vbFJvbGVBdHRhY2htZW50XCIsXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbERvbWFpblwiLFxuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sR3JvdXBcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbElkZW50aXR5UHJvdmlkZXJcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFJlc291cmNlU2VydmVyXCIsXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVJQ3VzdG9taXphdGlvbkF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVzZXJcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVzZXJUb0dyb3VwQXR0YWNobWVudFwiLFxuXG4gICAgICAvLyBDb25maWdcbiAgICAgIFwiQVdTOjpDb25maWc6OkFnZ3JlZ2F0aW9uQXV0aG9yaXphdGlvblwiLFxuICAgICAgXCJBV1M6OkNvbmZpZzo6Q29uZmlndXJhdGlvbkFnZ3JlZ2F0b3JcIixcbiAgICAgIFwiQVdTOjpDb25maWc6OkNvbmZvcm1hbmNlUGFja1wiLFxuICAgICAgXCJBV1M6OkNvbmZpZzo6T3JnYW5pemF0aW9uQ29uZm9ybWFuY2VQYWNrXCIsXG4gICAgICBcIkFXUzo6Q29uZmlnOjpSZW1lZGlhdGlvbkNvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpDb25maWc6OlN0b3JlZFF1ZXJ5XCIsXG5cbiAgICAgIC8vIER5bmFtb0RCXG4gICAgICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCIsXG5cbiAgICAgIC8vIEVDMlxuICAgICAgXCJBV1M6OkVDMjo6Q2FwYWNpdHlSZXNlcnZhdGlvbkZsZWV0XCIsXG4gICAgICBcIkFXUzo6RUMyOjpDYXJyaWVyR2F0ZXdheVwiLFxuICAgICAgXCJBV1M6OkVDMjo6REhDUE9wdGlvbnNcIixcbiAgICAgIFwiQVdTOjpFQzI6OkVDMkZsZWV0XCIsXG4gICAgICBcIkFXUzo6RUMyOjpFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5XCIsXG4gICAgICBcIkFXUzo6RUMyOjpFSVBBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkVDMjo6RW5jbGF2ZUNlcnRpZmljYXRlSWFtUm9sZUFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpGbG93TG9nXCIsXG4gICAgICBcIkFXUzo6RUMyOjpHYXRld2F5Um91dGVUYWJsZUFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpJbnN0YW5jZUNvbm5lY3RFbmRwb2ludFwiLFxuICAgICAgXCJBV1M6OkVDMjo6S2V5UGFpclwiLFxuICAgICAgXCJBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGVcIixcbiAgICAgIFwiQVdTOjpFQzI6Ok5ldHdvcmtJbnNpZ2h0c0FjY2Vzc1Njb3BlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpOZXR3b3JrSW5zaWdodHNBY2Nlc3NTY29wZUFuYWx5c2lzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpOZXR3b3JrSW5zaWdodHNBbmFseXNpc1wiLFxuICAgICAgXCJBV1M6OkVDMjo6TmV0d29ya0luc2lnaHRzUGF0aFwiLFxuICAgICAgXCJBV1M6OkVDMjo6TmV0d29ya0ludGVyZmFjZUF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6Ok5ldHdvcmtJbnRlcmZhY2VQZXJtaXNzaW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpQbGFjZW1lbnRHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6Um91dGVcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTdWJuZXRDaWRyQmxvY2tcIixcbiAgICAgIFwiQVdTOjpFQzI6OlN1Ym5ldE5ldHdvcmtBY2xBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkVDMjo6U3VibmV0Um91dGVUYWJsZUFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheUF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Q29ubmVjdFwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlNdWx0aWNhc3REb21haW5cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0RG9tYWluQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0R3JvdXBNZW1iZXJcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0R3JvdXBTb3VyY2VcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5UGVlcmluZ0F0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVUYWJsZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVUYWJsZVByb3BhZ2F0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheVZwY0F0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzRW5kcG9pbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzR3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzSW5zdGFuY2VcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzVHJ1c3RQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OkVDMjo6Vm9sdW1lQXR0YWNobWVudFwiLFxuICAgICAgXCJBV1M6OkVDMjo6VlBDQ2lkckJsb2NrXCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUENESENQT3B0aW9uc0Fzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUENFbmRwb2ludENvbm5lY3Rpb25Ob3RpZmljYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50U2VydmljZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRTZXJ2aWNlUGVybWlzc2lvbnNcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0dhdGV3YXlBdHRhY2htZW50XCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUE5Db25uZWN0aW9uUm91dGVcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uXCIsXG5cbiAgICAgIC8vIEVDUlxuICAgICAgXCJBV1M6OkVDUjo6UHVibGljUmVwb3NpdG9yeVwiLFxuICAgICAgXCJBV1M6OkVDUjo6UHVsbFRocm91Z2hDYWNoZVJ1bGVcIixcbiAgICAgIFwiQVdTOjpFQ1I6OlJlZ2lzdHJ5UG9saWN5XCIsXG4gICAgICBcIkFXUzo6RUNSOjpSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb25cIixcblxuICAgICAgLy8gRUNTXG4gICAgICBcIkFXUzo6RUNTOjpBY2NvdW50U2V0dGluZ1wiLFxuICAgICAgXCJBV1M6OkVDUzo6Q2FwYWNpdHlQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OkVDUzo6Q2x1c3RlckNhcGFjaXR5UHJvdmlkZXJBc3NvY2lhdGlvbnNcIixcbiAgICAgIFwiQVdTOjpFQ1M6OlByaW1hcnlUYXNrU2V0XCIsXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrU2V0XCIsXG5cbiAgICAgIC8vIEVGU1xuICAgICAgXCJBV1M6OkVGUzo6QWNjZXNzUG9pbnRcIixcbiAgICAgIFwiQVdTOjpFRlM6Ok1vdW50VGFyZ2V0XCIsXG5cbiAgICAgIC8vIEVLU1xuICAgICAgXCJBV1M6OkVLUzo6QWRkb25cIixcbiAgICAgIFwiQVdTOjpFS1M6OkZhcmdhdGVQcm9maWxlXCIsXG4gICAgICBcIkFXUzo6RUtTOjpJZGVudGl0eVByb3ZpZGVyQ29uZmlnXCIsXG5cbiAgICAgIC8vIEVsYXN0aUNhY2hlXG4gICAgICBcIkFXUzo6RWxhc3RpQ2FjaGU6OlBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6RWxhc3RpQ2FjaGU6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFbGFzdGlDYWNoZTo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFbGFzdGlDYWNoZTo6U3VibmV0R3JvdXBcIixcblxuICAgICAgLy8gRWxhc3RpY0JlYW5zdGFsa1xuICAgICAgXCJBV1M6OkVsYXN0aWNCZWFuc3RhbGs6OkFwcGxpY2F0aW9uVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkVsYXN0aWNCZWFuc3RhbGs6OkNvbmZpZ3VyYXRpb25UZW1wbGF0ZVwiLFxuXG4gICAgICAvLyBFbGFzdGljTG9hZEJhbGFuY2luZ1YyXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJcIixcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lckNlcnRpZmljYXRlXCIsXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJSdWxlXCIsXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBBdHRhY2htZW50XCIsXG5cbiAgICAgIC8vIEV2ZW50QnJpZGdlIChFdmVudHMpXG4gICAgICBcIkFXUzo6RXZlbnRzOjpBcGlEZXN0aW5hdGlvblwiLFxuICAgICAgXCJBV1M6OkV2ZW50czo6QXJjaGl2ZVwiLFxuICAgICAgXCJBV1M6OkV2ZW50czo6Q29ubmVjdGlvblwiLFxuICAgICAgXCJBV1M6OkV2ZW50czo6RW5kcG9pbnRcIixcbiAgICAgIFwiQVdTOjpFdmVudHM6OkV2ZW50QnVzUG9saWN5XCIsXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCIsXG5cbiAgICAgIC8vIEZTeFxuICAgICAgXCJBV1M6OkZTeDo6RGF0YVJlcG9zaXRvcnlBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkZTeDo6U25hcHNob3RcIixcbiAgICAgIFwiQVdTOjpGU3g6OlN0b3JhZ2VWaXJ0dWFsTWFjaGluZVwiLFxuICAgICAgXCJBV1M6OkZTeDo6Vm9sdW1lXCIsXG5cbiAgICAgIC8vIEdhbWVMaWZ0XG4gICAgICBcIkFXUzo6R2FtZUxpZnQ6OkdhbWVTZXJ2ZXJHcm91cFwiLFxuICAgICAgXCJBV1M6OkdhbWVMaWZ0OjpMb2NhdGlvblwiLFxuXG4gICAgICAvLyBHbHVlXG4gICAgICBcIkFXUzo6R2x1ZTo6Q29ubmVjdGlvblwiLFxuICAgICAgXCJBV1M6OkdsdWU6OkRhdGFiYXNlXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6RGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NcIixcbiAgICAgIFwiQVdTOjpHbHVlOjpQYXJ0aXRpb25cIixcbiAgICAgIFwiQVdTOjpHbHVlOjpTY2hlbWFWZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6U2NoZW1hVmVyc2lvbk1ldGFkYXRhXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6U2VjdXJpdHlDb25maWd1cmF0aW9uXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6VGFibGVcIixcbiAgICAgIFwiQVdTOjpHbHVlOjpVc2VyRGVmaW5lZEZ1bmN0aW9uXCIsXG5cbiAgICAgIC8vIEd1YXJkRHV0eVxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6RGV0ZWN0b3JcIixcbiAgICAgIFwiQVdTOjpHdWFyZER1dHk6OkZpbHRlclwiLFxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6SVBTZXRcIixcbiAgICAgIFwiQVdTOjpHdWFyZER1dHk6Ok1hc3RlclwiLFxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6TWVtYmVyXCIsXG4gICAgICBcIkFXUzo6R3VhcmREdXR5OjpUaHJlYXRJbnRlbFNldFwiLFxuXG4gICAgICAvLyBJQU1cbiAgICAgIFwiQVdTOjpJQU06OkFjY2Vzc0tleVwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBcIixcbiAgICAgIFwiQVdTOjpJQU06Okdyb3VwUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpJbnN0YW5jZVByb2ZpbGVcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok9JRENQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpTQU1MUHJvdmlkZXJcIixcbiAgICAgIFwiQVdTOjpJQU06OlNlcnZlckNlcnRpZmljYXRlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpTZXJ2aWNlTGlua2VkUm9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclRvR3JvdXBBZGRpdGlvblwiLFxuICAgICAgXCJBV1M6OklBTTo6VmlydHVhbE1GQURldmljZVwiLFxuXG4gICAgICAvLyBJb1RcbiAgICAgIFwiQVdTOjpJb1Q6OkFjY291bnRBdWRpdENvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpJb1Q6OkF1dGhvcml6ZXJcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkNlcnRpZmljYXRlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpDdXN0b21NZXRyaWNcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkRpbWVuc2lvblwiLFxuICAgICAgXCJBV1M6OklvVDo6RG9tYWluQ29uZmlndXJhdGlvblwiLFxuICAgICAgXCJBV1M6OklvVDo6RmxlZXRNZXRyaWNcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkpvYlRlbXBsYXRlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpMb2dnaW5nXCIsXG4gICAgICBcIkFXUzo6SW9UOjpNaXRpZ2F0aW9uQWN0aW9uXCIsXG4gICAgICBcIkFXUzo6SW9UOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlBvbGljeVByaW5jaXBhbEF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlByb3Zpc2lvbmluZ1RlbXBsYXRlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpSZXNvdXJjZVNwZWNpZmljTG9nZ2luZ1wiLFxuICAgICAgXCJBV1M6OklvVDo6Um9sZUFsaWFzXCIsXG4gICAgICBcIkFXUzo6SW9UOjpTY2hlZHVsZWRBdWRpdFwiLFxuICAgICAgXCJBV1M6OklvVDo6U2VjdXJpdHlQcm9maWxlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpUaGluZ1wiLFxuICAgICAgXCJBV1M6OklvVDo6VGhpbmdHcm91cFwiLFxuICAgICAgXCJBV1M6OklvVDo6VGhpbmdQcmluY2lwYWxBdHRhY2htZW50XCIsXG4gICAgICBcIkFXUzo6SW9UOjpUaGluZ1R5cGVcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlRvcGljUnVsZVwiLFxuICAgICAgXCJBV1M6OklvVDo6VG9waWNSdWxlRGVzdGluYXRpb25cIixcblxuICAgICAgLy8gS01TXG4gICAgICBcIkFXUzo6S01TOjpBbGlhc1wiLFxuICAgICAgXCJBV1M6OktNUzo6R3JhbnRcIixcbiAgICAgIFwiQVdTOjpLTVM6OlJlcGxpY2FLZXlcIixcblxuICAgICAgLy8gTGFtYmRhXG4gICAgICBcIkFXUzo6TGFtYmRhOjpDb2RlU2lnbmluZ0NvbmZpZ1wiLFxuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRJbnZva2VDb25maWdcIixcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkV2ZW50U291cmNlTWFwcGluZ1wiLFxuICAgICAgXCJBV1M6OkxhbWJkYTo6TGF5ZXJWZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpMYXllclZlcnNpb25QZXJtaXNzaW9uXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpQZXJtaXNzaW9uXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpQcm92aXNpb25lZENvbmN1cnJlbmN5Q29uZmlnXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpVcmxcIixcbiAgICAgIFwiQVdTOjpMYW1iZGE6OlZlcnNpb25cIixcblxuICAgICAgLy8gTG9nc1xuICAgICAgXCJBV1M6OkxvZ3M6OkFjY291bnRQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpMb2dzOjpEZXN0aW5hdGlvblwiLFxuICAgICAgXCJBV1M6OkxvZ3M6OkxvZ0dyb3VwXCIsXG4gICAgICBcIkFXUzo6TG9nczo6TG9nU3RyZWFtXCIsXG4gICAgICBcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXCIsXG4gICAgICBcIkFXUzo6TG9nczo6UXVlcnlEZWZpbml0aW9uXCIsXG4gICAgICBcIkFXUzo6TG9nczo6UmVzb3VyY2VQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpMb2dzOjpTdWJzY3JpcHRpb25GaWx0ZXJcIixcblxuICAgICAgLy8gTWFjaWVcbiAgICAgIFwiQVdTOjpNYWNpZTo6QWxsb3dMaXN0XCIsXG4gICAgICBcIkFXUzo6TWFjaWU6OkN1c3RvbURhdGFJZGVudGlmaWVyXCIsXG4gICAgICBcIkFXUzo6TWFjaWU6OkZpbmRpbmdzRmlsdGVyXCIsXG4gICAgICBcIkFXUzo6TWFjaWU6OlNlc3Npb25cIixcblxuICAgICAgLy8gTmVwdHVuZVxuICAgICAgXCJBV1M6Ok5lcHR1bmU6OkRCQ2x1c3RlclBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6TmVwdHVuZTo6REJQYXJhbWV0ZXJHcm91cFwiLFxuICAgICAgXCJBV1M6Ok5lcHR1bmU6OkRCU3VibmV0R3JvdXBcIixcblxuICAgICAgLy8gT3JnYW5pemF0aW9uc1xuICAgICAgXCJBV1M6Ok9yZ2FuaXphdGlvbnM6OkFjY291bnRcIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpPcmdhbml6YXRpb25cIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpPcmdhbml6YXRpb25hbFVuaXRcIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpSZXNvdXJjZVBvbGljeVwiLFxuXG4gICAgICAvLyBSRFNcbiAgICAgIFwiQVdTOjpSRFM6OkRCQ2x1c3RlclBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlByb3h5RW5kcG9pbnRcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCUHJveHlUYXJnZXRHcm91cFwiLFxuICAgICAgXCJBV1M6OlJEUzo6REJTZWN1cml0eUdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlN1Ym5ldEdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpFdmVudFN1YnNjcmlwdGlvblwiLFxuICAgICAgXCJBV1M6OlJEUzo6R2xvYmFsQ2x1c3RlclwiLFxuICAgICAgXCJBV1M6OlJEUzo6T3B0aW9uR3JvdXBcIixcblxuICAgICAgLy8gUmVkc2hpZnRcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6Q2x1c3RlclBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6UmVkc2hpZnQ6OkNsdXN0ZXJTZWN1cml0eUdyb3VwXCIsXG4gICAgICBcIkFXUzo6UmVkc2hpZnQ6OkNsdXN0ZXJTZWN1cml0eUdyb3VwSW5ncmVzc1wiLFxuICAgICAgXCJBV1M6OlJlZHNoaWZ0OjpDbHVzdGVyU3VibmV0R3JvdXBcIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6RW5kcG9pbnRBY2Nlc3NcIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6RW5kcG9pbnRBdXRob3JpemF0aW9uXCIsXG4gICAgICBcIkFXUzo6UmVkc2hpZnQ6OkV2ZW50U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6UmVkc2hpZnQ6OlNjaGVkdWxlZEFjdGlvblwiLFxuXG4gICAgICAvLyBSb3V0ZTUzXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6RE5TU0VDXCIsXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6SGVhbHRoQ2hlY2tcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpIb3N0ZWRab25lXCIsXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6S2V5U2lnbmluZ0tleVwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldEdyb3VwXCIsXG5cbiAgICAgIC8vIFJvdXRlNTNSZXNvbHZlclxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6RmlyZXdhbGxEb21haW5MaXN0XCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpGaXJld2FsbFJ1bGVHcm91cFwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6RmlyZXdhbGxSdWxlR3JvdXBBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJDb25maWdcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzUmVzb2x2ZXI6OlJlc29sdmVyRE5TU0VDQ29uZmlnXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlclF1ZXJ5TG9nZ2luZ0NvbmZpZ1wiLFxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJRdWVyeUxvZ2dpbmdDb25maWdBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJSdWxlXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlclJ1bGVBc3NvY2lhdGlvblwiLFxuXG4gICAgICAvLyBTM1xuICAgICAgXCJBV1M6OlMzOjpBY2Nlc3NQb2ludFwiLFxuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpTMzo6TXVsdGlSZWdpb25BY2Nlc3NQb2ludFwiLFxuICAgICAgXCJBV1M6OlMzOjpNdWx0aVJlZ2lvbkFjY2Vzc1BvaW50UG9saWN5XCIsXG4gICAgICBcIkFXUzo6UzM6OlN0b3JhZ2VMZW5zXCIsXG5cbiAgICAgIC8vIFNEQlxuICAgICAgXCJBV1M6OlNEQjo6RG9tYWluXCIsXG5cbiAgICAgIC8vIFNlY3JldHNNYW5hZ2VyXG4gICAgICBcIkFXUzo6U2VjcmV0c01hbmFnZXI6OlJlc291cmNlUG9saWN5XCIsXG4gICAgICBcIkFXUzo6U2VjcmV0c01hbmFnZXI6OlJvdGF0aW9uU2NoZWR1bGVcIixcbiAgICAgIFwiQVdTOjpTZWNyZXRzTWFuYWdlcjo6U2VjcmV0VGFyZ2V0QXR0YWNobWVudFwiLFxuXG4gICAgICAvLyBTZWN1cml0eUh1YlxuICAgICAgXCJBV1M6OlNlY3VyaXR5SHViOjpIdWJcIixcblxuICAgICAgLy8gU2VydmljZUNhdGFsb2dcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6QWNjZXB0ZWRQb3J0Zm9saW9TaGFyZVwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpMYXVuY2hOb3RpZmljYXRpb25Db25zdHJhaW50XCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OkxhdW5jaFJvbGVDb25zdHJhaW50XCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OkxhdW5jaFRlbXBsYXRlQ29uc3RyYWludFwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpQb3J0Zm9saW9QcmluY2lwYWxBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpQb3J0Zm9saW9Qcm9kdWN0QXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6UG9ydGZvbGlvU2hhcmVcIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6UmVzb3VyY2VVcGRhdGVDb25zdHJhaW50XCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OlNlcnZpY2VBY3Rpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6U2VydmljZUFjdGlvbkFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OlN0YWNrU2V0Q29uc3RyYWludFwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpUYWdPcHRpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6VGFnT3B0aW9uQXNzb2NpYXRpb25cIixcblxuICAgICAgLy8gU0VTXG4gICAgICBcIkFXUzo6U0VTOjpDb25maWd1cmF0aW9uU2V0XCIsXG4gICAgICBcIkFXUzo6U0VTOjpDb25maWd1cmF0aW9uU2V0RXZlbnREZXN0aW5hdGlvblwiLFxuICAgICAgXCJBV1M6OlNFUzo6Q29udGFjdExpc3RcIixcbiAgICAgIFwiQVdTOjpTRVM6OkRlZGljYXRlZElwUG9vbFwiLFxuICAgICAgXCJBV1M6OlNFUzo6RW1haWxJZGVudGl0eVwiLFxuICAgICAgXCJBV1M6OlNFUzo6UmVjZWlwdEZpbHRlclwiLFxuICAgICAgXCJBV1M6OlNFUzo6UmVjZWlwdFJ1bGVcIixcbiAgICAgIFwiQVdTOjpTRVM6OlJlY2VpcHRSdWxlU2V0XCIsXG4gICAgICBcIkFXUzo6U0VTOjpUZW1wbGF0ZVwiLFxuICAgICAgXCJBV1M6OlNFUzo6VmRtQXR0cmlidXRlc1wiLFxuXG4gICAgICAvLyBTTlNcbiAgICAgIFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblwiLFxuICAgICAgXCJBV1M6OlNOUzo6VG9waWNQb2xpY3lcIixcblxuICAgICAgLy8gU1FTXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVBvbGljeVwiLFxuXG4gICAgICAvLyBTU01cbiAgICAgIFwiQVdTOjpTU006OkFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6U1NNOjpEb2N1bWVudFwiLFxuICAgICAgXCJBV1M6OlNTTTo6TWFpbnRlbmFuY2VXaW5kb3dcIixcbiAgICAgIFwiQVdTOjpTU006Ok1haW50ZW5hbmNlV2luZG93VGFyZ2V0XCIsXG4gICAgICBcIkFXUzo6U1NNOjpNYWludGVuYW5jZVdpbmRvd1Rhc2tcIixcbiAgICAgIFwiQVdTOjpTU006OlBhcmFtZXRlclwiLFxuICAgICAgXCJBV1M6OlNTTTo6UGF0Y2hCYXNlbGluZVwiLFxuICAgICAgXCJBV1M6OlNTTTo6UmVzb3VyY2VEYXRhU3luY1wiLFxuICAgICAgXCJBV1M6OlNTTTo6UmVzb3VyY2VQb2xpY3lcIixcblxuICAgICAgLy8gU1NPXG4gICAgICBcIkFXUzo6U1NPOjpBc3NpZ25tZW50XCIsXG4gICAgICBcIkFXUzo6U1NPOjpJbnN0YW5jZUFjY2Vzc0NvbnRyb2xBdHRyaWJ1dGVDb25maWd1cmF0aW9uXCIsXG4gICAgICBcIkFXUzo6U1NPOjpQZXJtaXNzaW9uU2V0XCIsXG5cbiAgICAgIC8vIFN0ZXBGdW5jdGlvbnNcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpBY3Rpdml0eVwiLFxuXG4gICAgICAvLyBXQUYvV0FGdjJcbiAgICAgIFwiQVdTOjpXQUY6OkJ5dGVNYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRjo6SVBTZXRcIixcbiAgICAgIFwiQVdTOjpXQUY6OlJ1bGVcIixcbiAgICAgIFwiQVdTOjpXQUY6OlNpemVDb25zdHJhaW50U2V0XCIsXG4gICAgICBcIkFXUzo6V0FGOjpTcWxJbmplY3Rpb25NYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRjo6V2ViQUNMXCIsXG4gICAgICBcIkFXUzo6V0FGOjpYc3NNYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpCeXRlTWF0Y2hTZXRcIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6R2VvTWF0Y2hTZXRcIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6SVBTZXRcIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6UmF0ZUJhc2VkUnVsZVwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpSZWdleFBhdHRlcm5TZXRcIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6UnVsZVwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpTaXplQ29uc3RyYWludFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpTcWxJbmplY3Rpb25NYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpXZWJBQ0xcIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6V2ViQUNMQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6WHNzTWF0Y2hTZXRcIixcbiAgICAgIFwiQVdTOjpXQUZ2Mjo6SVBTZXRcIixcbiAgICAgIFwiQVdTOjpXQUZ2Mjo6TG9nZ2luZ0NvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpXQUZ2Mjo6UmVnZXhQYXR0ZXJuU2V0XCIsXG4gICAgICBcIkFXUzo6V0FGdjI6OlJ1bGVHcm91cFwiLFxuICAgICAgXCJBV1M6OldBRnYyOjpXZWJBQ0xcIixcbiAgICAgIFwiQVdTOjpXQUZ2Mjo6V2ViQUNMQXNzb2NpYXRpb25cIixcblxuICAgICAgLy8gU2VydmVybGVzc1xuICAgICAgXCJBV1M6OlNlcnZlcmxlc3M6OkFwaVwiLFxuICAgICAgXCJBV1M6OlNlcnZlcmxlc3M6OkFwcGxpY2F0aW9uXCIsXG4gICAgICBcIkFXUzo6U2VydmVybGVzczo6RnVuY3Rpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2ZXJsZXNzOjpIdHRwQXBpXCIsXG4gICAgICBcIkFXUzo6U2VydmVybGVzczo6TGF5ZXJWZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6U2VydmVybGVzczo6U2ltcGxlVGFibGVcIixcbiAgICAgIFwiQVdTOjpTZXJ2ZXJsZXNzOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF07XG5cbiAgICBpZiAodW5zdXBwb3J0ZWRUeXBlcy5pbmNsdWRlcyhyZXNvdXJjZS5jZm5SZXNvdXJjZVR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQWRkIGEgc3ludGhlc2lzIGhvb2sgdG8gbW9kaWZ5IHRoZSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZVxuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YocmVzb3VyY2UpO1xuICAgIGNvbnN0IGxvZ2ljYWxJZCA9IHN0YWNrLmdldExvZ2ljYWxJZChyZXNvdXJjZSk7XG5cbiAgICAvLyBVc2UgYWRkVHJhbnNmb3JtIHRvIGFkZCB0YWdzIGR1cmluZyBzeW50aGVzaXNcbiAgICByZXNvdXJjZS5hZGRQcm9wZXJ0eU92ZXJyaWRlKFwiVGFnc1wiLCB0aGlzLmJ1aWxkVGFnc0FycmF5KHJlc291cmNlKSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVGFnc0FycmF5KHJlc291cmNlOiBDZm5SZXNvdXJjZSk6IGFueVtdIHtcbiAgICBjb25zdCB0YWdNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gICAgLy8gQWRkIElQQU0gcG9vbCB0YWcgZm9yIFZQQ3Mgd2l0aCBJUEFNIGNvbmZpZ3VyYXRpb25cbiAgICBpZiAocmVzb3VyY2UuY2ZuUmVzb3VyY2VUeXBlID09PSBcIkFXUzo6RUMyOjpWUENcIikge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IChyZXNvdXJjZSBhcyBhbnkpLmNmblByb3BlcnRpZXMgfHwge307XG4gICAgICBpZiAocHJvcGVydGllcy5pcHY0SXBhbVBvb2xJZCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHJlc291cmNlKTtcbiAgICAgICAgY29uc3QgYWNjb3VudElkID0gc3RhY2subm9kZS50cnlHZXRDb250ZXh0KFwiYWNjb3VudElkXCIpO1xuICAgICAgICBjb25zdCByZWdpb24gPSBzdGFjay5yZWdpb247XG4gICAgICAgIGlmIChhY2NvdW50SWQgJiYgcmVnaW9uKSB7XG4gICAgICAgICAgdGFnTWFwLnNldChcImZqYWxsOm9wZXJhdGlvbnM6cG9vbFwiLCBgJHthY2NvdW50SWR9LSR7cmVnaW9ufWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgc3RhbmRhcmQgdGFnc1xuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMucmVxdWlyZWRUYWdzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIHRhZ01hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBDb252ZXJ0IHRvIENsb3VkRm9ybWF0aW9uIGZvcm1hdFxuICAgIHJldHVybiBBcnJheS5mcm9tKHRhZ01hcC5lbnRyaWVzKCkpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgS2V5OiBrZXksXG4gICAgICBWYWx1ZTogdmFsdWVcbiAgICB9KSk7XG4gIH1cbn1cbiJdfQ==
|
|
470
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRUYWdzQXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWxzL3N0YW5kYXJkVGFnc0FzcGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBMEQ7QUFHMUQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsa0JBQWtCO0lBSTdCLFlBQVksWUFBdUM7UUFGbEMsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBRzNELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPO1FBQ1QsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxJQUFJLHlCQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQW1CLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFFBQXFCO1FBQzlDLDZGQUE2RjtRQUM3RixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTztRQUNULENBQUM7UUFFRCw4RUFBOEU7UUFDOUUsK0VBQStFO1FBQy9FLE1BQU0sZ0JBQWdCLEdBQUc7WUFDdkIsTUFBTTtZQUNOLGtDQUFrQztZQUVsQyxjQUFjO1lBQ2QsMEJBQTBCO1lBQzFCLGtDQUFrQztZQUNsQyw2QkFBNkI7WUFDN0Isb0NBQW9DO1lBQ3BDLHVDQUF1QztZQUN2QyxrQ0FBa0M7WUFDbEMseUJBQXlCO1lBQ3pCLHdCQUF3QjtZ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LElBQUksVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUM5QixNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQzVCLElBQUksU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUN4QixNQUFNLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ2hFLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELHNCQUFzQjtRQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3pELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsbUNBQW1DO1FBQ25DLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RCxHQUFHLEVBQUUsR0FBRztZQUNSLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0Y7QUFyZ0JELGdEQXFnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQXNwZWN0LCBDZm5SZXNvdXJjZSwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIEFzcGVjdCB0byBlbmZvcmNlIGEgc3RhbmRhcmQgc2V0IG9mIHRhZ3Mgb24gZXZlcnkgdGFnLWNhcGFibGUgcmVzb3VyY2UgaW4gYSBjb25zdHJ1Y3QgdHJlZS5cbiAqXG4gKiBVcGRhdGVkIGZvciBDREsgdjIuMjA2LjArIGNvbXBhdGliaWxpdHk6XG4gKiAtIEF2b2lkcyB1c2luZyBhbnkgdGFnZ2luZyBBUElzIGR1cmluZyBhc3BlY3QgdmlzaXRhdGlvbiB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzXG4gKiAtIFVzZXMgYSBzeW50aGVzaXMtdGltZSBhcHByb2FjaCB0byBtb2RpZnkgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVzXG4gKiAtIE1haW50YWlucyB0aGUgc2FtZSBjbGVhbiBBUEkgYW5kIGF1dG9tYXRpYyB0YWdnaW5nIGJlbmVmaXRzXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFuZGFyZFRhZ3NBc3BlY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1aXJlZFRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFnZ2VkUmVzb3VyY2VzID0gbmV3IFdlYWtTZXQ8SUNvbnN0cnVjdD4oKTtcblxuICBjb25zdHJ1Y3RvcihyZXF1aXJlZFRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnJlcXVpcmVkVGFncyA9IHJlcXVpcmVkVGFncztcbiAgfVxuXG4gIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICAvLyBTa2lwIGlmIGFscmVhZHkgcHJvY2Vzc2VkXG4gICAgaWYgKHRoaXMudGFnZ2VkUmVzb3VyY2VzLmhhcyhub2RlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgTDEgKENGTikgcmVzb3VyY2VzIG9ubHlcbiAgICBpZiAoQ2ZuUmVzb3VyY2UuaXNDZm5SZXNvdXJjZShub2RlKSkge1xuICAgICAgdGhpcy5wcm9jZXNzQ2ZuUmVzb3VyY2Uobm9kZSBhcyBDZm5SZXNvdXJjZSk7XG4gICAgICB0aGlzLnRhZ2dlZFJlc291cmNlcy5hZGQobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzQ2ZuUmVzb3VyY2UocmVzb3VyY2U6IENmblJlc291cmNlKTogdm9pZCB7XG4gICAgLy8gU2tpcCBTZWNyZXRSb3RhdGlvbiByZXNvdXJjZXMgYXMgdGhleSBjcmVhdGUgbmVzdGVkIHN0YWNrcyB3aXRoIGRpZmZlcmVudCB0YWcgcmVxdWlyZW1lbnRzXG4gICAgaWYgKHJlc291cmNlLm5vZGUucGF0aC5pbmNsdWRlcyhcIlNlY3JldFJvdGF0aW9uXCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ29tcHJlaGVuc2l2ZSBsaXN0IG9mIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHR5cGVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0YWdzXG4gICAgLy8gVGhpcyBsaXN0IGlzIGJhc2VkIG9uIEFXUyBDbG91ZEZvcm1hdGlvbiBkb2N1bWVudGF0aW9uIGFuZCBrbm93biBsaW1pdGF0aW9uc1xuICAgIGNvbnN0IHVuc3VwcG9ydGVkVHlwZXMgPSBbXG4gICAgICAvLyBBQ01cbiAgICAgIFwiQVdTOjpDZXJ0aWZpY2F0ZU1hbmFnZXI6OkFjY291bnRcIixcblxuICAgICAgLy8gQVBJIEdhdGV3YXlcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpBY2NvdW50XCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6QmFzZVBhdGhNYXBwaW5nXCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudFwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkRvY3VtZW50YXRpb25QYXJ0XCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6RG9jdW1lbnRhdGlvblZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpHYXRld2F5UmVzcG9uc2VcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNb2RlbFwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OlJlcXVlc3RWYWxpZGF0b3JcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpSZXNvdXJjZVwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpTWFwcGluZ1wiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXV0aG9yaXplclwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6RGVwbG95bWVudFwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uUmVzcG9uc2VcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6Ok1vZGVsXCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVSZXNwb25zZVwiLFxuXG4gICAgICAvLyBBcHBTeW5jXG4gICAgICBcIkFXUzo6QXBwU3luYzo6RGF0YVNvdXJjZVwiLFxuICAgICAgXCJBV1M6OkFwcFN5bmM6OkZ1bmN0aW9uQ29uZmlndXJhdGlvblwiLFxuICAgICAgXCJBV1M6OkFwcFN5bmM6OlJlc29sdmVyXCIsXG5cbiAgICAgIC8vIEF0aGVuYVxuICAgICAgXCJBV1M6OkF0aGVuYTo6UHJlcGFyZWRTdGF0ZW1lbnRcIixcblxuICAgICAgLy8gQ2xvdWRGb3JtYXRpb25cbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6Q3VzdG9tUmVzb3VyY2VcIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6TWFjcm9cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6TW9kdWxlRGVmYXVsdFZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6TW9kdWxlVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpQdWJsaWNUeXBlVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpQdWJsaXNoZXJcIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6UmVzb3VyY2VEZWZhdWx0VmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpSZXNvdXJjZVZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6VHlwZUFjdGl2YXRpb25cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6V2FpdENvbmRpdGlvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpXYWl0Q29uZGl0aW9uSGFuZGxlXCIsXG5cbiAgICAgIC8vIENsb3VkV2F0Y2hcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiLFxuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFub21hbHlEZXRlY3RvclwiLFxuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkNvbXBvc2l0ZUFsYXJtXCIsXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXCIsXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6SW5zaWdodFJ1bGVcIixcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpNZXRyaWNTdHJlYW1cIixcblxuICAgICAgLy8gQ29kZUJ1aWxkXG4gICAgICBcIkFXUzo6Q29kZUJ1aWxkOjpSZXBvcnRHcm91cFwiLFxuICAgICAgXCJBV1M6OkNvZGVCdWlsZDo6U291cmNlQ3JlZGVudGlhbFwiLFxuXG4gICAgICAvLyBDb2RlRGVwbG95XG4gICAgICBcIkFXUzo6Q29kZURlcGxveTo6RGVwbG95bWVudENvbmZpZ1wiLFxuXG4gICAgICAvLyBDb2RlUGlwZWxpbmVcbiAgICAgIFwiQVdTOjpDb2RlUGlwZWxpbmU6OkN1c3RvbUFjdGlvblR5cGVcIixcbiAgICAgIFwiQVdTOjpDb2RlUGlwZWxpbmU6OldlYmhvb2tcIixcblxuICAgICAgLy8gQ29nbml0b1xuICAgICAgXCJBV1M6OkNvZ25pdG86OklkZW50aXR5UG9vbFJvbGVBdHRhY2htZW50XCIsXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbERvbWFpblwiLFxuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sR3JvdXBcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbElkZW50aXR5UHJvdmlkZXJcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFJlc291cmNlU2VydmVyXCIsXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVJQ3VzdG9taXphdGlvbkF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVzZXJcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVzZXJUb0dyb3VwQXR0YWNobWVudFwiLFxuXG4gICAgICAvLyBDb25maWdcbiAgICAgIFwiQVdTOjpDb25maWc6OkFnZ3JlZ2F0aW9uQXV0aG9yaXphdGlvblwiLFxuICAgICAgXCJBV1M6OkNvbmZpZzo6Q29uZmlndXJhdGlvbkFnZ3JlZ2F0b3JcIixcbiAgICAgIFwiQVdTOjpDb25maWc6OkNvbmZvcm1hbmNlUGFja1wiLFxuICAgICAgXCJBV1M6OkNvbmZpZzo6T3JnYW5pemF0aW9uQ29uZm9ybWFuY2VQYWNrXCIsXG4gICAgICBcIkFXUzo6Q29uZmlnOjpSZW1lZGlhdGlvbkNvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpDb25maWc6OlN0b3JlZFF1ZXJ5XCIsXG5cbiAgICAgIC8vIER5bmFtb0RCXG4gICAgICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCIsXG5cbiAgICAgIC8vIEVDMlxuICAgICAgXCJBV1M6OkVDMjo6Q2FwYWNpdHlSZXNlcnZhdGlvbkZsZWV0XCIsXG4gICAgICBcIkFXUzo6RUMyOjpDYXJyaWVyR2F0ZXdheVwiLFxuICAgICAgXCJBV1M6OkVDMjo6REhDUE9wdGlvbnNcIixcbiAgICAgIFwiQVdTOjpFQzI6OkVDMkZsZWV0XCIsXG4gICAgICBcIkFXUzo6RUMyOjpFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5XCIsXG4gICAgICBcIkFXUzo6RUMyOjpFSVBBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkVDMjo6RW5jbGF2ZUNlcnRpZmljYXRlSWFtUm9sZUFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpGbG93TG9nXCIsXG4gICAgICBcIkFXUzo6RUMyOjpHYXRld2F5Um91dGVUYWJsZUFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpJbnN0YW5jZUNvbm5lY3RFbmRwb2ludFwiLFxuICAgICAgXCJBV1M6OkVDMjo6S2V5UGFpclwiLFxuICAgICAgXCJBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGVcIixcbiAgICAgIFwiQVdTOjpFQzI6Ok5ldHdvcmtJbnNpZ2h0c0FjY2Vzc1Njb3BlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpOZXR3b3JrSW5zaWdodHNBY2Nlc3NTY29wZUFuYWx5c2lzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpOZXR3b3JrSW5zaWdodHNBbmFseXNpc1wiLFxuICAgICAgXCJBV1M6OkVDMjo6TmV0d29ya0luc2lnaHRzUGF0aFwiLFxuICAgICAgXCJBV1M6OkVDMjo6TmV0d29ya0ludGVyZmFjZUF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6Ok5ldHdvcmtJbnRlcmZhY2VQZXJtaXNzaW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpQbGFjZW1lbnRHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6Um91dGVcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTdWJuZXRDaWRyQmxvY2tcIixcbiAgICAgIFwiQVdTOjpFQzI6OlN1Ym5ldE5ldHdvcmtBY2xBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkVDMjo6U3VibmV0Um91dGVUYWJsZUFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheUF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Q29ubmVjdFwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlNdWx0aWNhc3REb21haW5cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0RG9tYWluQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0R3JvdXBNZW1iZXJcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0R3JvdXBTb3VyY2VcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5UGVlcmluZ0F0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVUYWJsZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVUYWJsZVByb3BhZ2F0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheVZwY0F0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzRW5kcG9pbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzR3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzSW5zdGFuY2VcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzVHJ1c3RQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OkVDMjo6Vm9sdW1lQXR0YWNobWVudFwiLFxuICAgICAgXCJBV1M6OkVDMjo6VlBDQ2lkckJsb2NrXCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUENESENQT3B0aW9uc0Fzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUENFbmRwb2ludENvbm5lY3Rpb25Ob3RpZmljYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50U2VydmljZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRTZXJ2aWNlUGVybWlzc2lvbnNcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0dhdGV3YXlBdHRhY2htZW50XCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUE5Db25uZWN0aW9uUm91dGVcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uXCIsXG5cbiAgICAgIC8vIEVDUlxuICAgICAgXCJBV1M6OkVDUjo6UHVibGljUmVwb3NpdG9yeVwiLFxuICAgICAgXCJBV1M6OkVDUjo6UHVsbFRocm91Z2hDYWNoZVJ1bGVcIixcbiAgICAgIFwiQVdTOjpFQ1I6OlJlZ2lzdHJ5UG9saWN5XCIsXG4gICAgICBcIkFXUzo6RUNSOjpSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb25cIixcblxuICAgICAgLy8gRUNTXG4gICAgICBcIkFXUzo6RUNTOjpBY2NvdW50U2V0dGluZ1wiLFxuICAgICAgXCJBV1M6OkVDUzo6Q2FwYWNpdHlQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OkVDUzo6Q2x1c3RlckNhcGFjaXR5UHJvdmlkZXJBc3NvY2lhdGlvbnNcIixcbiAgICAgIFwiQVdTOjpFQ1M6OlByaW1hcnlUYXNrU2V0XCIsXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrU2V0XCIsXG5cbiAgICAgIC8vIEVGU1xuICAgICAgXCJBV1M6OkVGUzo6QWNjZXNzUG9pbnRcIixcbiAgICAgIFwiQVdTOjpFRlM6Ok1vdW50VGFyZ2V0XCIsXG5cbiAgICAgIC8vIEVLU1xuICAgICAgXCJBV1M6OkVLUzo6QWRkb25cIixcbiAgICAgIFwiQVdTOjpFS1M6OkZhcmdhdGVQcm9maWxlXCIsXG4gICAgICBcIkFXUzo6RUtTOjpJZGVudGl0eVByb3ZpZGVyQ29uZmlnXCIsXG5cbiAgICAgIC8vIEVsYXN0aUNhY2hlXG4gICAgICBcIkFXUzo6RWxhc3RpQ2FjaGU6OlBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6RWxhc3RpQ2FjaGU6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFbGFzdGlDYWNoZTo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFbGFzdGlDYWNoZTo6U3VibmV0R3JvdXBcIixcblxuICAgICAgLy8gRWxhc3RpY0JlYW5zdGFsa1xuICAgICAgXCJBV1M6OkVsYXN0aWNCZWFuc3RhbGs6OkFwcGxpY2F0aW9uVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkVsYXN0aWNCZWFuc3RhbGs6OkNvbmZpZ3VyYXRpb25UZW1wbGF0ZVwiLFxuXG4gICAgICAvLyBFbGFzdGljTG9hZEJhbGFuY2luZ1YyXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJcIixcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lckNlcnRpZmljYXRlXCIsXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJSdWxlXCIsXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBBdHRhY2htZW50XCIsXG5cbiAgICAgIC8vIEV2ZW50QnJpZGdlIChFdmVudHMpXG4gICAgICBcIkFXUzo6RXZlbnRzOjpBcGlEZXN0aW5hdGlvblwiLFxuICAgICAgXCJBV1M6OkV2ZW50czo6QXJjaGl2ZVwiLFxuICAgICAgXCJBV1M6OkV2ZW50czo6Q29ubmVjdGlvblwiLFxuICAgICAgXCJBV1M6OkV2ZW50czo6RW5kcG9pbnRcIixcbiAgICAgIFwiQVdTOjpFdmVudHM6OkV2ZW50QnVzUG9saWN5XCIsXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCIsXG5cbiAgICAgIC8vIEZTeFxuICAgICAgXCJBV1M6OkZTeDo6RGF0YVJlcG9zaXRvcnlBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkZTeDo6U25hcHNob3RcIixcbiAgICAgIFwiQVdTOjpGU3g6OlN0b3JhZ2VWaXJ0dWFsTWFjaGluZVwiLFxuICAgICAgXCJBV1M6OkZTeDo6Vm9sdW1lXCIsXG5cbiAgICAgIC8vIEdhbWVMaWZ0XG4gICAgICBcIkFXUzo6R2FtZUxpZnQ6OkdhbWVTZXJ2ZXJHcm91cFwiLFxuICAgICAgXCJBV1M6OkdhbWVMaWZ0OjpMb2NhdGlvblwiLFxuXG4gICAgICAvLyBHbHVlXG4gICAgICBcIkFXUzo6R2x1ZTo6Q29ubmVjdGlvblwiLFxuICAgICAgXCJBV1M6OkdsdWU6OkRhdGFiYXNlXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6RGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NcIixcbiAgICAgIFwiQVdTOjpHbHVlOjpQYXJ0aXRpb25cIixcbiAgICAgIFwiQVdTOjpHbHVlOjpTY2hlbWFWZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6U2NoZW1hVmVyc2lvbk1ldGFkYXRhXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6U2VjdXJpdHlDb25maWd1cmF0aW9uXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6VGFibGVcIixcbiAgICAgIFwiQVdTOjpHbHVlOjpVc2VyRGVmaW5lZEZ1bmN0aW9uXCIsXG5cbiAgICAgIC8vIEd1YXJkRHV0eVxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6RGV0ZWN0b3JcIixcbiAgICAgIFwiQVdTOjpHdWFyZER1dHk6OkZpbHRlclwiLFxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6SVBTZXRcIixcbiAgICAgIFwiQVdTOjpHdWFyZER1dHk6Ok1hc3RlclwiLFxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6TWVtYmVyXCIsXG4gICAgICBcIkFXUzo6R3VhcmREdXR5OjpUaHJlYXRJbnRlbFNldFwiLFxuXG4gICAgICAvLyBJQU1cbiAgICAgIFwiQVdTOjpJQU06OkFjY2Vzc0tleVwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBcIixcbiAgICAgIFwiQVdTOjpJQU06Okdyb3VwUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpJbnN0YW5jZVByb2ZpbGVcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok9JRENQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpTQU1MUHJvdmlkZXJcIixcbiAgICAgIFwiQVdTOjpJQU06OlNlcnZlckNlcnRpZmljYXRlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpTZXJ2aWNlTGlua2VkUm9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclRvR3JvdXBBZGRpdGlvblwiLFxuICAgICAgXCJBV1M6OklBTTo6VmlydHVhbE1GQURldmljZVwiLFxuXG4gICAgICAvLyBJb1RcbiAgICAgIFwiQVdTOjpJb1Q6OkFjY291bnRBdWRpdENvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpJb1Q6OkF1dGhvcml6ZXJcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkNlcnRpZmljYXRlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpDdXN0b21NZXRyaWNcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkRpbWVuc2lvblwiLFxuICAgICAgXCJBV1M6OklvVDo6RG9tYWluQ29uZmlndXJhdGlvblwiLFxuICAgICAgXCJBV1M6OklvVDo6RmxlZXRNZXRyaWNcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkpvYlRlbXBsYXRlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpMb2dnaW5nXCIsXG4gICAgICBcIkFXUzo6SW9UOjpNaXRpZ2F0aW9uQWN0aW9uXCIsXG4gICAgICBcIkFXUzo6SW9UOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlBvbGljeVByaW5jaXBhbEF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlByb3Zpc2lvbmluZ1RlbXBsYXRlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpSZXNvdXJjZVNwZWNpZmljTG9nZ2luZ1wiLFxuICAgICAgXCJBV1M6OklvVDo6Um9sZUFsaWFzXCIsXG4gICAgICBcIkFXUzo6SW9UOjpTY2hlZHVsZWRBdWRpdFwiLFxuICAgICAgXCJBV1M6OklvVDo6U2VjdXJpdHlQcm9maWxlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpUaGluZ1wiLFxuICAgICAgXCJBV1M6OklvVDo6VGhpbmdHcm91cFwiLFxuICAgICAgXCJBV1M6OklvVDo6VGhpbmdQcmluY2lwYWxBdHRhY2htZW50XCIsXG4gICAgICBcIkFXUzo6SW9UOjpUaGluZ1R5cGVcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlRvcGljUnVsZVwiLFxuICAgICAgXCJBV1M6OklvVDo6VG9waWNSdWxlRGVzdGluYXRpb25cIixcblxuICAgICAgLy8gS01TXG4gICAgICBcIkFXUzo6S01TOjpBbGlhc1wiLFxuICAgICAgXCJBV1M6OktNUzo6R3JhbnRcIixcbiAgICAgIFwiQVdTOjpLTVM6OlJlcGxpY2FLZXlcIixcblxuICAgICAgLy8gTGFtYmRhXG4gICAgICBcIkFXUzo6TGFtYmRhOjpDb2RlU2lnbmluZ0NvbmZpZ1wiLFxuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRJbnZva2VDb25maWdcIixcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkV2ZW50U291cmNlTWFwcGluZ1wiLFxuICAgICAgXCJBV1M6OkxhbWJkYTo6TGF5ZXJWZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpMYXllclZlcnNpb25QZXJtaXNzaW9uXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpQZXJtaXNzaW9uXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpQcm92aXNpb25lZENvbmN1cnJlbmN5Q29uZmlnXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpVcmxcIixcbiAgICAgIFwiQVdTOjpMYW1iZGE6OlZlcnNpb25cIixcblxuICAgICAgLy8gTG9nc1xuICAgICAgXCJBV1M6OkxvZ3M6OkFjY291bnRQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpMb2dzOjpEZXN0aW5hdGlvblwiLFxuICAgICAgXCJBV1M6OkxvZ3M6OkxvZ0dyb3VwXCIsXG4gICAgICBcIkFXUzo6TG9nczo6TG9nU3RyZWFtXCIsXG4gICAgICBcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXCIsXG4gICAgICBcIkFXUzo6TG9nczo6UXVlcnlEZWZpbml0aW9uXCIsXG4gICAgICBcIkFXUzo6TG9nczo6UmVzb3VyY2VQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpMb2dzOjpTdWJzY3JpcHRpb25GaWx0ZXJcIixcblxuICAgICAgLy8gTWFjaWVcbiAgICAgIFwiQVdTOjpNYWNpZTo6QWxsb3dMaXN0XCIsXG4gICAgICBcIkFXUzo6TWFjaWU6OkN1c3RvbURhdGFJZGVudGlmaWVyXCIsXG4gICAgICBcIkFXUzo6TWFjaWU6OkZpbmRpbmdzRmlsdGVyXCIsXG4gICAgICBcIkFXUzo6TWFjaWU6OlNlc3Npb25cIixcblxuICAgICAgLy8gTmVwdHVuZVxuICAgICAgXCJBV1M6Ok5lcHR1bmU6OkRCQ2x1c3RlclBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6TmVwdHVuZTo6REJQYXJhbWV0ZXJHcm91cFwiLFxuICAgICAgXCJBV1M6Ok5lcHR1bmU6OkRCU3VibmV0R3JvdXBcIixcblxuICAgICAgLy8gT3JnYW5pemF0aW9uc1xuICAgICAgXCJBV1M6Ok9yZ2FuaXphdGlvbnM6OkFjY291bnRcIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpPcmdhbml6YXRpb25cIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpPcmdhbml6YXRpb25hbFVuaXRcIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpSZXNvdXJjZVBvbGljeVwiLFxuXG4gICAgICAvLyBSRFNcbiAgICAgIFwiQVdTOjpSRFM6OkRCQ2x1c3RlclBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlByb3h5RW5kcG9pbnRcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCUHJveHlUYXJnZXRHcm91cFwiLFxuICAgICAgXCJBV1M6OlJEUzo6REJTZWN1cml0eUdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlN1Ym5ldEdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpFdmVudFN1YnNjcmlwdGlvblwiLFxuICAgICAgXCJBV1M6OlJEUzo6R2xvYmFsQ2x1c3RlclwiLFxuICAgICAgXCJBV1M6OlJEUzo6T3B0aW9uR3JvdXBcIixcblxuICAgICAgLy8gUmVkc2hpZnRcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6Q2x1c3RlclBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6UmVkc2hpZnQ6OkNsdXN0ZXJTZWN1cml0eUdyb3VwXCIsXG4gICAgICBcIkFXUzo6UmVkc2hpZnQ6OkNsdXN0ZXJTZWN1cml0eUdyb3VwSW5ncmVzc1wiLFxuICAgICAgXCJBV1M6OlJlZHNoaWZ0OjpDbHVzdGVyU3VibmV0R3JvdXBcIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6RW5kcG9pbnRBY2Nlc3NcIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6RW5kcG9pbnRBdXRob3JpemF0aW9uXCIsXG4gICAgICBcIkFXUzo6UmVkc2hpZnQ6OkV2ZW50U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6UmVkc2hpZnQ6OlNjaGVkdWxlZEFjdGlvblwiLFxuXG4gICAgICAvLyBSb3V0ZTUzXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6RE5TU0VDXCIsXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6SGVhbHRoQ2hlY2tcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpIb3N0ZWRab25lXCIsXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6S2V5U2lnbmluZ0tleVwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldEdyb3VwXCIsXG5cbiAgICAgIC8vIFJvdXRlNTNSZXNvbHZlclxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6RmlyZXdhbGxEb21haW5MaXN0XCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpGaXJld2FsbFJ1bGVHcm91cFwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6RmlyZXdhbGxSdWxlR3JvdXBBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJDb25maWdcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzUmVzb2x2ZXI6OlJlc29sdmVyRE5TU0VDQ29uZmlnXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlclF1ZXJ5TG9nZ2luZ0NvbmZpZ1wiLFxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJRdWVyeUxvZ2dpbmdDb25maWdBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJSdWxlXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlclJ1bGVBc3NvY2lhdGlvblwiLFxuXG4gICAgICAvLyBTM1xuICAgICAgXCJBV1M6OlMzOjpBY2Nlc3NQb2ludFwiLFxuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpTMzo6TXVsdGlSZWdpb25BY2Nlc3NQb2ludFwiLFxuICAgICAgXCJBV1M6OlMzOjpNdWx0aVJlZ2lvbkFjY2Vzc1BvaW50UG9saWN5XCIsXG4gICAgICBcIkFXUzo6UzM6OlN0b3JhZ2VMZW5zXCIsXG5cbiAgICAgIC8vIFNEQlxuICAgICAgXCJBV1M6OlNEQjo6RG9tYWluXCIsXG5cbiAgICAgIC8vIFNlY3JldHNNYW5hZ2VyXG4gICAgICBcIkFXUzo6U2VjcmV0c01hbmFnZXI6OlJlc291cmNlUG9saWN5XCIsXG4gICAgICBcIkFXUzo6U2VjcmV0c01hbmFnZXI6OlJvdGF0aW9uU2NoZWR1bGVcIixcbiAgICAgIFwiQVdTOjpTZWNyZXRzTWFuYWdlcjo6U2VjcmV0VGFyZ2V0QXR0YWNobWVudFwiLFxuXG4gICAgICAvLyBTZWN1cml0eUh1YlxuICAgICAgXCJBV1M6OlNlY3VyaXR5SHViOjpIdWJcIixcblxuICAgICAgLy8gU2VydmljZUNhdGFsb2dcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6QWNjZXB0ZWRQb3J0Zm9saW9TaGFyZVwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpMYXVuY2hOb3RpZmljYXRpb25Db25zdHJhaW50XCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OkxhdW5jaFJvbGVDb25zdHJhaW50XCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OkxhdW5jaFRlbXBsYXRlQ29uc3RyYWludFwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpQb3J0Zm9saW9QcmluY2lwYWxBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpQb3J0Zm9saW9Qcm9kdWN0QXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6UG9ydGZvbGlvU2hhcmVcIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6UmVzb3VyY2VVcGRhdGVDb25zdHJhaW50XCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OlNlcnZpY2VBY3Rpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6U2VydmljZUFjdGlvbkFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OlN0YWNrU2V0Q29uc3RyYWludFwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpUYWdPcHRpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6VGFnT3B0aW9uQXNzb2NpYXRpb25cIixcblxuICAgICAgLy8gU0VTXG4gICAgICBcIkFXUzo6U0VTOjpDb25maWd1cmF0aW9uU2V0XCIsXG4gICAgICBcIkFXUzo6U0VTOjpDb25maWd1cmF0aW9uU2V0RXZlbnREZXN0aW5hdGlvblwiLFxuICAgICAgXCJBV1M6OlNFUzo6Q29udGFjdExpc3RcIixcbiAgICAgIFwiQVdTOjpTRVM6OkRlZGljYXRlZElwUG9vbFwiLFxuICAgICAgXCJBV1M6OlNFUzo6RW1haWxJZGVudGl0eVwiLFxuICAgICAgXCJBV1M6OlNFUzo6UmVjZWlwdEZpbHRlclwiLFxuICAgICAgXCJBV1M6OlNFUzo6UmVjZWlwdFJ1bGVcIixcbiAgICAgIFwiQVdTOjpTRVM6OlJlY2VpcHRSdWxlU2V0XCIsXG4gICAgICBcIkFXUzo6U0VTOjpUZW1wbGF0ZVwiLFxuICAgICAgXCJBV1M6OlNFUzo6VmRtQXR0cmlidXRlc1wiLFxuXG4gICAgICAvLyBTTlNcbiAgICAgIFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblwiLFxuICAgICAgXCJBV1M6OlNOUzo6VG9waWNQb2xpY3lcIixcblxuICAgICAgLy8gU1FTXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVBvbGljeVwiLFxuXG4gICAgICAvLyBTU01cbiAgICAgIFwiQVdTOjpTU006OkFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6U1NNOjpEb2N1bWVudFwiLFxuICAgICAgXCJBV1M6OlNTTTo6TWFpbnRlbmFuY2VXaW5kb3dcIixcbiAgICAgIFwiQVdTOjpTU006Ok1haW50ZW5hbmNlV2luZG93VGFyZ2V0XCIsXG4gICAgICBcIkFXUzo6U1NNOjpNYWludGVuYW5jZVdpbmRvd1Rhc2tcIixcbiAgICAgIFwiQVdTOjpTU006OlBhcmFtZXRlclwiLFxuICAgICAgXCJBV1M6OlNTTTo6UGF0Y2hCYXNlbGluZVwiLFxuICAgICAgXCJBV1M6OlNTTTo6UmVzb3VyY2VEYXRhU3luY1wiLFxuICAgICAgXCJBV1M6OlNTTTo6UmVzb3VyY2VQb2xpY3lcIixcblxuICAgICAgLy8gU1NPXG4gICAgICBcIkFXUzo6U1NPOjpBc3NpZ25tZW50XCIsXG4gICAgICBcIkFXUzo6U1NPOjpJbnN0YW5jZUFjY2Vzc0NvbnRyb2xBdHRyaWJ1dGVDb25maWd1cmF0aW9uXCIsXG4gICAgICBcIkFXUzo6U1NPOjpQZXJtaXNzaW9uU2V0XCIsXG5cbiAgICAgIC8vIFN0ZXBGdW5jdGlvbnNcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpBY3Rpdml0eVwiLFxuXG4gICAgICAvLyBXQUYvV0FGdjJcbiAgICAgIFwiQVdTOjpXQUY6OkJ5dGVNYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRjo6SVBTZXRcIixcbiAgICAgIFwiQVdTOjpXQUY6OlJ1bGVcIixcbiAgICAgIFwiQVdTOjpXQUY6OlNpemVDb25zdHJhaW50U2V0XCIsXG4gICAgICBcIkFXUzo6V0FGOjpTcWxJbmplY3Rpb25NYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRjo6V2ViQUNMXCIsXG4gICAgICBcIkFXUzo6V0FGOjpYc3NNYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpCeXRlTWF0Y2hTZXRcIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6R2VvTWF0Y2hTZXRcIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6SVBTZXRcIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6UmF0ZUJhc2VkUnVsZVwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpSZWdleFBhdHRlcm5TZXRcIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6UnVsZVwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpTaXplQ29uc3RyYWludFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpTcWxJbmplY3Rpb25NYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpXZWJBQ0xcIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6V2ViQUNMQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6WHNzTWF0Y2hTZXRcIixcbiAgICAgIFwiQVdTOjpXQUZ2Mjo6SVBTZXRcIixcbiAgICAgIFwiQVdTOjpXQUZ2Mjo6TG9nZ2luZ0NvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpXQUZ2Mjo6UmVnZXhQYXR0ZXJuU2V0XCIsXG4gICAgICBcIkFXUzo6V0FGdjI6OlJ1bGVHcm91cFwiLFxuICAgICAgXCJBV1M6OldBRnYyOjpXZWJBQ0xcIixcbiAgICAgIFwiQVdTOjpXQUZ2Mjo6V2ViQUNMQXNzb2NpYXRpb25cIixcblxuICAgICAgLy8gU2VydmVybGVzc1xuICAgICAgXCJBV1M6OlNlcnZlcmxlc3M6OkFwaVwiLFxuICAgICAgXCJBV1M6OlNlcnZlcmxlc3M6OkFwcGxpY2F0aW9uXCIsXG4gICAgICBcIkFXUzo6U2VydmVybGVzczo6RnVuY3Rpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2ZXJsZXNzOjpIdHRwQXBpXCIsXG4gICAgICBcIkFXUzo6U2VydmVybGVzczo6TGF5ZXJWZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6U2VydmVybGVzczo6U2ltcGxlVGFibGVcIixcbiAgICAgIFwiQVdTOjpTZXJ2ZXJsZXNzOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF07XG5cbiAgICBpZiAodW5zdXBwb3J0ZWRUeXBlcy5pbmNsdWRlcyhyZXNvdXJjZS5jZm5SZXNvdXJjZVR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQWRkIGEgc3ludGhlc2lzIGhvb2sgdG8gbW9kaWZ5IHRoZSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZVxuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YocmVzb3VyY2UpO1xuICAgIGNvbnN0IGxvZ2ljYWxJZCA9IHN0YWNrLmdldExvZ2ljYWxJZChyZXNvdXJjZSk7XG5cbiAgICAvLyBVc2UgYWRkVHJhbnNmb3JtIHRvIGFkZCB0YWdzIGR1cmluZyBzeW50aGVzaXNcbiAgICByZXNvdXJjZS5hZGRQcm9wZXJ0eU92ZXJyaWRlKFwiVGFnc1wiLCB0aGlzLmJ1aWxkVGFnc0FycmF5KHJlc291cmNlKSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVGFnc0FycmF5KHJlc291cmNlOiBDZm5SZXNvdXJjZSk6IGFueVtdIHtcbiAgICBjb25zdCB0YWdNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gICAgLy8gQWRkIElQQU0gcG9vbCB0YWcgZm9yIFZQQ3Mgd2l0aCBJUEFNIGNvbmZpZ3VyYXRpb25cbiAgICBpZiAocmVzb3VyY2UuY2ZuUmVzb3VyY2VUeXBlID09PSBcIkFXUzo6RUMyOjpWUENcIikge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IChyZXNvdXJjZSBhcyBhbnkpLmNmblByb3BlcnRpZXMgfHwge307XG4gICAgICBpZiAocHJvcGVydGllcy5JcHY0SXBhbVBvb2xJZCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHJlc291cmNlKTtcbiAgICAgICAgY29uc3QgYWNjb3VudElkID0gc3RhY2subm9kZS50cnlHZXRDb250ZXh0KFwiYWNjb3VudElkXCIpO1xuICAgICAgICBjb25zdCByZWdpb24gPSBzdGFjay5yZWdpb247XG4gICAgICAgIGlmIChhY2NvdW50SWQgJiYgcmVnaW9uKSB7XG4gICAgICAgICAgdGFnTWFwLnNldChcImZqYWxsOm9wZXJhdGlvbnM6cG9vbFwiLCBgJHthY2NvdW50SWR9LSR7cmVnaW9ufWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgc3RhbmRhcmQgdGFnc1xuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMucmVxdWlyZWRUYWdzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIHRhZ01hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBDb252ZXJ0IHRvIENsb3VkRm9ybWF0aW9uIGZvcm1hdFxuICAgIHJldHVybiBBcnJheS5mcm9tKHRhZ01hcC5lbnRyaWVzKCkpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgS2V5OiBrZXksXG4gICAgICBWYWx1ZTogdmFsdWVcbiAgICB9KSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Node } from "constructs";
|
|
2
|
+
/**
|
|
3
|
+
* TagContext provides a CDK context-based approach for passing tags
|
|
4
|
+
* down the construct tree without using aspects.
|
|
5
|
+
*
|
|
6
|
+
* This avoids the infinite loop issue with Tags.of() creating aspects
|
|
7
|
+
* during the aspect visitation phase in CDK v2.206.0+
|
|
8
|
+
*/
|
|
9
|
+
export declare class TagContext {
|
|
10
|
+
private static readonly TAG_CONTEXT_KEY;
|
|
11
|
+
/**
|
|
12
|
+
* Set tags in the context for a construct
|
|
13
|
+
*/
|
|
14
|
+
static setTags(node: Node, tags: {
|
|
15
|
+
[key: string]: string;
|
|
16
|
+
}): void;
|
|
17
|
+
/**
|
|
18
|
+
* Get tags from the context, including inherited tags from parent constructs
|
|
19
|
+
*/
|
|
20
|
+
static getTags(node: Node): {
|
|
21
|
+
[key: string]: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Apply tags from context to a construct using a safe approach
|
|
25
|
+
* This should be called during construction, not during synthesis
|
|
26
|
+
*/
|
|
27
|
+
static applyTagsFromContext(node: Node): void;
|
|
28
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TagContext = void 0;
|
|
4
|
+
const constructs_1 = require("constructs");
|
|
5
|
+
/**
|
|
6
|
+
* TagContext provides a CDK context-based approach for passing tags
|
|
7
|
+
* down the construct tree without using aspects.
|
|
8
|
+
*
|
|
9
|
+
* This avoids the infinite loop issue with Tags.of() creating aspects
|
|
10
|
+
* during the aspect visitation phase in CDK v2.206.0+
|
|
11
|
+
*/
|
|
12
|
+
class TagContext {
|
|
13
|
+
/**
|
|
14
|
+
* Set tags in the context for a construct
|
|
15
|
+
*/
|
|
16
|
+
static setTags(node, tags) {
|
|
17
|
+
const existingTags = this.getTags(node);
|
|
18
|
+
node.setContext(this.TAG_CONTEXT_KEY, {
|
|
19
|
+
...existingTags,
|
|
20
|
+
...tags
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get tags from the context, including inherited tags from parent constructs
|
|
25
|
+
*/
|
|
26
|
+
static getTags(node) {
|
|
27
|
+
// Get tags from this node
|
|
28
|
+
const nodeTags = node.tryGetContext(this.TAG_CONTEXT_KEY) || {};
|
|
29
|
+
// Get inherited tags from parent
|
|
30
|
+
const parentTags = node.scope ? this.getTags(constructs_1.Node.of(node.scope)) : {};
|
|
31
|
+
// Node tags override parent tags
|
|
32
|
+
return {
|
|
33
|
+
...parentTags,
|
|
34
|
+
...nodeTags
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Apply tags from context to a construct using a safe approach
|
|
39
|
+
* This should be called during construction, not during synthesis
|
|
40
|
+
*/
|
|
41
|
+
static applyTagsFromContext(node) {
|
|
42
|
+
const tags = this.getTags(node);
|
|
43
|
+
if (Object.keys(tags).length === 0) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Instead of using Tags.of() which creates aspects,
|
|
47
|
+
// we'll store tags as metadata that can be processed later
|
|
48
|
+
node.addMetadata('fjall:applied-tags', tags);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.TagContext = TagContext;
|
|
52
|
+
TagContext.TAG_CONTEXT_KEY = "fjall:tags";
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi91dGlscy90YWdDb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUFrQztBQUVsQzs7Ozs7O0dBTUc7QUFDSCxNQUFhLFVBQVU7SUFHckI7O09BRUc7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVUsRUFBRSxJQUErQjtRQUMvRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNwQyxHQUFHLFlBQVk7WUFDZixHQUFHLElBQUk7U0FDUixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVU7UUFDOUIsMEJBQTBCO1FBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVoRSxpQ0FBaUM7UUFDakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXZFLGlDQUFpQztRQUNqQyxPQUFPO1lBQ0wsR0FBRyxVQUFVO1lBQ2IsR0FBRyxRQUFRO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBVTtRQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTztRQUNULENBQUM7UUFFRCxvREFBb0Q7UUFDcEQsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQzs7QUE3Q0gsZ0NBOENDO0FBN0N5QiwwQkFBZSxHQUFHLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vZGUgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIFRhZ0NvbnRleHQgcHJvdmlkZXMgYSBDREsgY29udGV4dC1iYXNlZCBhcHByb2FjaCBmb3IgcGFzc2luZyB0YWdzXG4gKiBkb3duIHRoZSBjb25zdHJ1Y3QgdHJlZSB3aXRob3V0IHVzaW5nIGFzcGVjdHMuXG4gKiBcbiAqIFRoaXMgYXZvaWRzIHRoZSBpbmZpbml0ZSBsb29wIGlzc3VlIHdpdGggVGFncy5vZigpIGNyZWF0aW5nIGFzcGVjdHNcbiAqIGR1cmluZyB0aGUgYXNwZWN0IHZpc2l0YXRpb24gcGhhc2UgaW4gQ0RLIHYyLjIwNi4wK1xuICovXG5leHBvcnQgY2xhc3MgVGFnQ29udGV4dCB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBR19DT05URVhUX0tFWSA9IFwiZmphbGw6dGFnc1wiO1xuXG4gIC8qKlxuICAgKiBTZXQgdGFncyBpbiB0aGUgY29udGV4dCBmb3IgYSBjb25zdHJ1Y3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc2V0VGFncyhub2RlOiBOb2RlLCB0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogdm9pZCB7XG4gICAgY29uc3QgZXhpc3RpbmdUYWdzID0gdGhpcy5nZXRUYWdzKG5vZGUpO1xuICAgIG5vZGUuc2V0Q29udGV4dCh0aGlzLlRBR19DT05URVhUX0tFWSwge1xuICAgICAgLi4uZXhpc3RpbmdUYWdzLFxuICAgICAgLi4udGFnc1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0YWdzIGZyb20gdGhlIGNvbnRleHQsIGluY2x1ZGluZyBpbmhlcml0ZWQgdGFncyBmcm9tIHBhcmVudCBjb25zdHJ1Y3RzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldFRhZ3Mobm9kZTogTm9kZSk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIC8vIEdldCB0YWdzIGZyb20gdGhpcyBub2RlXG4gICAgY29uc3Qgbm9kZVRhZ3MgPSBub2RlLnRyeUdldENvbnRleHQodGhpcy5UQUdfQ09OVEVYVF9LRVkpIHx8IHt9O1xuICAgIFxuICAgIC8vIEdldCBpbmhlcml0ZWQgdGFncyBmcm9tIHBhcmVudFxuICAgIGNvbnN0IHBhcmVudFRhZ3MgPSBub2RlLnNjb3BlID8gdGhpcy5nZXRUYWdzKE5vZGUub2Yobm9kZS5zY29wZSkpIDoge307XG4gICAgXG4gICAgLy8gTm9kZSB0YWdzIG92ZXJyaWRlIHBhcmVudCB0YWdzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBhcmVudFRhZ3MsXG4gICAgICAuLi5ub2RlVGFnc1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgdGFncyBmcm9tIGNvbnRleHQgdG8gYSBjb25zdHJ1Y3QgdXNpbmcgYSBzYWZlIGFwcHJvYWNoXG4gICAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBkdXJpbmcgY29uc3RydWN0aW9uLCBub3QgZHVyaW5nIHN5bnRoZXNpc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhcHBseVRhZ3NGcm9tQ29udGV4dChub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0VGFncyhub2RlKTtcbiAgICBcbiAgICBpZiAoT2JqZWN0LmtleXModGFncykubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSW5zdGVhZCBvZiB1c2luZyBUYWdzLm9mKCkgd2hpY2ggY3JlYXRlcyBhc3BlY3RzLFxuICAgIC8vIHdlJ2xsIHN0b3JlIHRhZ3MgYXMgbWV0YWRhdGEgdGhhdCBjYW4gYmUgcHJvY2Vzc2VkIGxhdGVyXG4gICAgbm9kZS5hZGRNZXRhZGF0YSgnZmphbGw6YXBwbGllZC10YWdzJywgdGFncyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IConstruct } from "constructs";
|
|
2
|
+
import { IAspect } from "aws-cdk-lib";
|
|
3
|
+
/**
|
|
4
|
+
* TagSynthesizer is a specialized aspect that runs during synthesis
|
|
5
|
+
* to apply tags stored in metadata to CloudFormation resources.
|
|
6
|
+
*
|
|
7
|
+
* This approach avoids creating new aspects during aspect visitation,
|
|
8
|
+
* which causes the infinite loop in CDK v2.206.0+
|
|
9
|
+
*/
|
|
10
|
+
export declare class TagSynthesizer implements IAspect {
|
|
11
|
+
visit(node: IConstruct): void;
|
|
12
|
+
private collectTagsFromTree;
|
|
13
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TagSynthesizer = void 0;
|
|
4
|
+
const constructs_1 = require("constructs");
|
|
5
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
|
+
/**
|
|
7
|
+
* TagSynthesizer is a specialized aspect that runs during synthesis
|
|
8
|
+
* to apply tags stored in metadata to CloudFormation resources.
|
|
9
|
+
*
|
|
10
|
+
* This approach avoids creating new aspects during aspect visitation,
|
|
11
|
+
* which causes the infinite loop in CDK v2.206.0+
|
|
12
|
+
*/
|
|
13
|
+
class TagSynthesizer {
|
|
14
|
+
visit(node) {
|
|
15
|
+
// Only process CfnResource nodes
|
|
16
|
+
if (!aws_cdk_lib_1.CfnResource.isCfnResource(node)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
// Walk up the tree to collect all tag metadata
|
|
20
|
+
const collectedTags = {};
|
|
21
|
+
this.collectTagsFromTree(node, collectedTags);
|
|
22
|
+
if (Object.keys(collectedTags).length === 0) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// Apply tags directly to the CloudFormation resource
|
|
26
|
+
// This doesn't create new aspects, avoiding the infinite loop
|
|
27
|
+
const cfnResource = node;
|
|
28
|
+
// Apply tags using the TagManager directly
|
|
29
|
+
const tagManager = aws_cdk_lib_1.TagManager.of(cfnResource);
|
|
30
|
+
if (tagManager) {
|
|
31
|
+
Object.entries(collectedTags).forEach(([key, value]) => {
|
|
32
|
+
tagManager.setTag(key, value);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
collectTagsFromTree(node, collectedTags) {
|
|
37
|
+
// Walk up the tree
|
|
38
|
+
let current = node;
|
|
39
|
+
const tagSets = [];
|
|
40
|
+
while (current) {
|
|
41
|
+
const metadata = constructs_1.Node.of(current).metadata;
|
|
42
|
+
const tagMetadata = metadata.find(m => m.type === 'fjall:applied-tags');
|
|
43
|
+
if (tagMetadata && tagMetadata.data) {
|
|
44
|
+
tagSets.unshift(tagMetadata.data);
|
|
45
|
+
}
|
|
46
|
+
current = current.node.scope;
|
|
47
|
+
}
|
|
48
|
+
// Apply tags in order (parent to child) so child tags override parent tags
|
|
49
|
+
tagSets.forEach(tags => {
|
|
50
|
+
Object.assign(collectedTags, tags);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.TagSynthesizer = TagSynthesizer;
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnU3ludGhlc2l6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbHMvdGFnU3ludGhlc2l6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQThDO0FBQzlDLDZDQUErRDtBQUUvRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLGNBQWM7SUFDbEIsS0FBSyxDQUFDLElBQWdCO1FBQzNCLGlDQUFpQztRQUNqQyxJQUFJLENBQUMseUJBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPO1FBQ1QsQ0FBQztRQUVELCtDQUErQztRQUMvQyxNQUFNLGFBQWEsR0FBOEIsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFOUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPO1FBQ1QsQ0FBQztRQUVELHFEQUFxRDtRQUNyRCw4REFBOEQ7UUFDOUQsTUFBTSxXQUFXLEdBQUcsSUFBbUIsQ0FBQztRQUV4QywyQ0FBMkM7UUFDM0MsTUFBTSxVQUFVLEdBQUcsd0JBQVUsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtnQkFDckQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQixDQUFDLElBQWdCLEVBQUUsYUFBd0M7UUFDcEYsbUJBQW1CO1FBQ25CLElBQUksT0FBTyxHQUEyQixJQUFJLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQXFDLEVBQUUsQ0FBQztRQUVyRCxPQUFPLE9BQU8sRUFBRSxDQUFDO1lBQ2YsTUFBTSxRQUFRLEdBQUcsaUJBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQzNDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLG9CQUFvQixDQUFDLENBQUM7WUFFeEUsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNwQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFpQyxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUVELE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQStCLENBQUM7UUFDekQsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBakRELHdDQWlEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElDb25zdHJ1Y3QsIE5vZGUgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ2ZuUmVzb3VyY2UsIElBc3BlY3QsIFRhZ01hbmFnZXIgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuLyoqXG4gKiBUYWdTeW50aGVzaXplciBpcyBhIHNwZWNpYWxpemVkIGFzcGVjdCB0aGF0IHJ1bnMgZHVyaW5nIHN5bnRoZXNpc1xuICogdG8gYXBwbHkgdGFncyBzdG9yZWQgaW4gbWV0YWRhdGEgdG8gQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2VzLlxuICogXG4gKiBUaGlzIGFwcHJvYWNoIGF2b2lkcyBjcmVhdGluZyBuZXcgYXNwZWN0cyBkdXJpbmcgYXNwZWN0IHZpc2l0YXRpb24sXG4gKiB3aGljaCBjYXVzZXMgdGhlIGluZmluaXRlIGxvb3AgaW4gQ0RLIHYyLjIwNi4wK1xuICovXG5leHBvcnQgY2xhc3MgVGFnU3ludGhlc2l6ZXIgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHVibGljIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICAvLyBPbmx5IHByb2Nlc3MgQ2ZuUmVzb3VyY2Ugbm9kZXNcbiAgICBpZiAoIUNmblJlc291cmNlLmlzQ2ZuUmVzb3VyY2Uobm9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBXYWxrIHVwIHRoZSB0cmVlIHRvIGNvbGxlY3QgYWxsIHRhZyBtZXRhZGF0YVxuICAgIGNvbnN0IGNvbGxlY3RlZFRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICB0aGlzLmNvbGxlY3RUYWdzRnJvbVRyZWUobm9kZSwgY29sbGVjdGVkVGFncyk7XG4gICAgXG4gICAgaWYgKE9iamVjdC5rZXlzKGNvbGxlY3RlZFRhZ3MpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHRhZ3MgZGlyZWN0bHkgdG8gdGhlIENsb3VkRm9ybWF0aW9uIHJlc291cmNlXG4gICAgLy8gVGhpcyBkb2Vzbid0IGNyZWF0ZSBuZXcgYXNwZWN0cywgYXZvaWRpbmcgdGhlIGluZmluaXRlIGxvb3BcbiAgICBjb25zdCBjZm5SZXNvdXJjZSA9IG5vZGUgYXMgQ2ZuUmVzb3VyY2U7XG4gICAgXG4gICAgLy8gQXBwbHkgdGFncyB1c2luZyB0aGUgVGFnTWFuYWdlciBkaXJlY3RseVxuICAgIGNvbnN0IHRhZ01hbmFnZXIgPSBUYWdNYW5hZ2VyLm9mKGNmblJlc291cmNlKTtcbiAgICBpZiAodGFnTWFuYWdlcikge1xuICAgICAgT2JqZWN0LmVudHJpZXMoY29sbGVjdGVkVGFncykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIHRhZ01hbmFnZXIuc2V0VGFnKGtleSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuICBwcml2YXRlIGNvbGxlY3RUYWdzRnJvbVRyZWUobm9kZTogSUNvbnN0cnVjdCwgY29sbGVjdGVkVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIC8vIFdhbGsgdXAgdGhlIHRyZWVcbiAgICBsZXQgY3VycmVudDogSUNvbnN0cnVjdCB8IHVuZGVmaW5lZCA9IG5vZGU7XG4gICAgY29uc3QgdGFnU2V0czogQXJyYXk8eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfT4gPSBbXTtcbiAgICBcbiAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBOb2RlLm9mKGN1cnJlbnQpLm1ldGFkYXRhO1xuICAgICAgY29uc3QgdGFnTWV0YWRhdGEgPSBtZXRhZGF0YS5maW5kKG0gPT4gbS50eXBlID09PSAnZmphbGw6YXBwbGllZC10YWdzJyk7XG4gICAgICBcbiAgICAgIGlmICh0YWdNZXRhZGF0YSAmJiB0YWdNZXRhZGF0YS5kYXRhKSB7XG4gICAgICAgIHRhZ1NldHMudW5zaGlmdCh0YWdNZXRhZGF0YS5kYXRhIGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5ub2RlLnNjb3BlIGFzIElDb25zdHJ1Y3QgfCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIFxuICAgIC8vIEFwcGx5IHRhZ3MgaW4gb3JkZXIgKHBhcmVudCB0byBjaGlsZCkgc28gY2hpbGQgdGFncyBvdmVycmlkZSBwYXJlbnQgdGFnc1xuICAgIHRhZ1NldHMuZm9yRWFjaCh0YWdzID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY29sbGVjdGVkVGFncywgdGFncyk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fjall/components-infrastructure",
|
|
3
|
-
"version": "0.73.
|
|
3
|
+
"version": "0.73.12",
|
|
4
4
|
"bin": {
|
|
5
5
|
"infrastructure": "bin/infrastructure.js"
|
|
6
6
|
},
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@aws-sdk/client-organizations": "^3.716.0",
|
|
38
|
-
"@fjall/util": "^0.73.
|
|
38
|
+
"@fjall/util": "^0.73.12",
|
|
39
39
|
"@pepperize/cdk-organizations": "^0.7.135",
|
|
40
40
|
"cdk-time-sleep": "^1.0.0",
|
|
41
41
|
"constructs": "^10.0.0",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"overrides": {
|
|
45
45
|
"@smithy/core": "2.5.5"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "c743a27fa262f4cff0c2471b295c61b8eb9a2236",
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"aws-cdk": "^2.206.0",
|
|
50
50
|
"aws-cdk-lib": "^2.206.0",
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { BlockDevice, IMachineImage, IVpc, SubnetType, UserData, SecurityGroup, IConnectable, Connections } from "aws-cdk-lib/aws-ec2";
|
|
2
|
-
import { Construct } from "constructs";
|
|
3
|
-
import { StackProps } from "aws-cdk-lib";
|
|
4
|
-
import { Role } from "aws-cdk-lib/aws-iam";
|
|
5
|
-
import { KeyValue } from "../../types";
|
|
6
|
-
interface ExistingVpcConfig {
|
|
7
|
-
vpcId?: string;
|
|
8
|
-
subnetType?: SubnetType;
|
|
9
|
-
}
|
|
10
|
-
interface NewVpcConfig {
|
|
11
|
-
subnetType: SubnetType;
|
|
12
|
-
}
|
|
13
|
-
export type VpcProps = ExistingVpcConfig | NewVpcConfig;
|
|
14
|
-
interface Ec2InstanceProps extends StackProps {
|
|
15
|
-
spotCapacityPercentage?: number;
|
|
16
|
-
blockDevices?: BlockDevice[];
|
|
17
|
-
accountId?: string;
|
|
18
|
-
serviceName: string;
|
|
19
|
-
vpc: VpcProps;
|
|
20
|
-
minCapcity?: number;
|
|
21
|
-
maxCapacity?: number;
|
|
22
|
-
instanceType: string;
|
|
23
|
-
machineImage?: IMachineImage;
|
|
24
|
-
userData?: UserData;
|
|
25
|
-
role?: Role;
|
|
26
|
-
enableSSH?: boolean;
|
|
27
|
-
tags: KeyValue;
|
|
28
|
-
}
|
|
29
|
-
export declare class Ec2Instance extends Construct implements IConnectable {
|
|
30
|
-
private launchTemplate;
|
|
31
|
-
vpc: IVpc;
|
|
32
|
-
asgSecurityGroup: SecurityGroup;
|
|
33
|
-
private autoScalingGroup;
|
|
34
|
-
private keyPair;
|
|
35
|
-
constructor(scope: Construct, id: string, props: Ec2InstanceProps);
|
|
36
|
-
connections: Connections;
|
|
37
|
-
addVpc(props: Ec2InstanceProps): void;
|
|
38
|
-
addKeyPair(props: Ec2InstanceProps): void;
|
|
39
|
-
addLaunchTemplate(props: Ec2InstanceProps): void;
|
|
40
|
-
addAutoScalingGroup(props: Ec2InstanceProps): void;
|
|
41
|
-
suspendAutoScaling(): void;
|
|
42
|
-
}
|
|
43
|
-
export {};
|