@fjall/components-infrastructure 0.74.6 → 0.75.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/app.d.ts +4 -0
- package/dist/lib/app.js +10 -1
- package/dist/lib/config/aws/backupGlobalSettings.d.ts +29 -0
- package/dist/lib/config/aws/backupGlobalSettings.js +51 -0
- package/dist/lib/config/aws/index.d.ts +1 -0
- package/dist/lib/config/aws/index.js +2 -1
- package/dist/lib/patterns/aws/managedOrganisation.d.ts +6 -0
- package/dist/lib/patterns/aws/managedOrganisation.js +16 -1
- package/dist/lib/patterns/aws/storage.d.ts +44 -0
- package/dist/lib/patterns/aws/storage.js +76 -2
- package/dist/lib/resources/aws/storage/s3.d.ts +41 -3
- package/dist/lib/resources/aws/storage/s3.js +3 -1
- package/dist/lib/utils/standardTagsAspect.js +23 -1
- package/package.json +3 -3
package/dist/lib/app.d.ts
CHANGED
|
@@ -78,6 +78,10 @@ export declare class App extends CdkApp {
|
|
|
78
78
|
* Add a storage resource to the default storage stack using the factory pattern.
|
|
79
79
|
*/
|
|
80
80
|
addStorage(fn: (app: App, scope: Construct) => Construct): Storage;
|
|
81
|
+
/**
|
|
82
|
+
* Add an S3 bucket to the default storage stack using the factory pattern.
|
|
83
|
+
*/
|
|
84
|
+
addS3(fn: (app: App, scope: Construct) => Construct): any;
|
|
81
85
|
/**
|
|
82
86
|
* Manually add a resource to the default storage stack.
|
|
83
87
|
*/
|
package/dist/lib/app.js
CHANGED
|
@@ -165,6 +165,15 @@ class App extends aws_cdk_lib_1.App {
|
|
|
165
165
|
storageStack.addConstruct(storageConstruct);
|
|
166
166
|
return storageConstruct;
|
|
167
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* Add an S3 bucket to the default storage stack using the factory pattern.
|
|
170
|
+
*/
|
|
171
|
+
addS3(fn) {
|
|
172
|
+
const storageStack = this.getDefaultStorageStack();
|
|
173
|
+
const s3Construct = fn(this, storageStack.getStack());
|
|
174
|
+
storageStack.addConstruct(s3Construct);
|
|
175
|
+
return s3Construct;
|
|
176
|
+
}
|
|
168
177
|
/**
|
|
169
178
|
* Manually add a resource to the default storage stack.
|
|
170
179
|
*/
|
|
@@ -214,4 +223,4 @@ class App extends aws_cdk_lib_1.App {
|
|
|
214
223
|
exports.App = App;
|
|
215
224
|
App.instance = null;
|
|
216
225
|
exports.default = App;
|
|
217
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBeUQ7QUFFekQsd0RBQWlFO0FBR2pFLDJDQUF1QztBQUN2QyxxREFBOEQ7QUFHOUQsbUVBQWdFO0FBQ2hFLGlEQUE4QztBQUU5Qzs7OztHQUlHO0FBQ0gsTUFBYSxHQUFJLFNBQVEsaUJBQU07SUFZN0IsWUFBb0IsSUFBYTtRQUMvQixLQUFLLEVBQUUsQ0FBQztRQVRGLFdBQU0sR0FBZ0MsRUFBRSxDQUFDO1FBS3pDLGVBQVUsR0FBOEIsRUFBRSxDQUFDO1FBQzNDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBS3JDLElBQUksSUFBSTtZQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDOztZQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBYTtRQUNoQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzdCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQWE7UUFDckMsNkRBQTZEO1FBQzdELCtDQUErQztRQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLFFBQVEsQ0FBQyxHQUFXLEVBQUUsWUFBb0M7UUFDL0Qsd0RBQXdEO1FBQ3hELElBQ0UsQ0FBQyxJQUFJLENB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O1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQXBQSCxrQkFxUEM7QUFwUGdCLFlBQVEsR0FBZSxJQUFJLEFBQW5CLENBQW9CO0FBc1A3QyxrQkFBZSxHQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHAgYXMgQ2RrQXBwLCBGbiwgQXNwZWN0cyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFZwYywgVnBjRmFjdG9yeSB9IGZyb20gXCIuL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGNcIjtcbmltcG9ydCB7IElWcGMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuXG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuL3Jlc291cmNlc1wiO1xuaW1wb3J0IHsgRWNyLCBFY3JGYWN0b3J5IH0gZnJvbSBcIi4vcmVzb3VyY2VzL2F3cy9zdG9yYWdlL2VjclwiO1xuXG5pbXBvcnQgeyBTdG9yYWdlIH0gZnJvbSBcIi4vcGF0dGVybnMvYXdzL3N0b3JhZ2VcIjtcbmltcG9ydCB7IFN0YW5kYXJkVGFnc0FzcGVjdCB9IGZyb20gXCIuL3V0aWxzL3N0YW5kYXJkVGFnc0FzcGVjdFwiO1xuaW1wb3J0IHsgZ2V0Q29uZmlnIH0gZnJvbSBcIi4vdXRpbHMvZ2V0Q29uZmlnXCI7XG5cbi8qKlxuICogVGhlIGJhc2ljIGNvcm5lci1zdG9uZSBvZiBhbGwgRmphbGwtaG9zdGVkIGFwcGxpY2F0aW9ucy5cbiAqICBUaGlzIGNsYXNzIGlzIGEgc2luZ2xldG9uIGFuZCBzaG91bGQgYmUgdXNlZCB0byBjcmVhdGUgYW5kIG1hbmFnZVxuICogICBhbGwgcmVzb3VyY2VzIGluIGEgRmphbGwgYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHAgZXh0ZW5kcyBDZGtBcHAge1xuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogQXBwIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgc3RhY2tzOiB7IFtrZXk6IHN0cmluZ106IEF3c1N0YWNrIH0gPSB7fTtcblxuICBwcml2YXRlIGRlZmF1bHRWcGM6IElWcGM7XG4gIHByaXZhdGUgZGVmYXVsdEVjcjogRWNyO1xuICBwcml2YXRlIGV4aXN0aW5nVnBjSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgZ2xvYmFsVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBwcml2YXRlIGFzcGVjdEFwcGxpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKG5hbWU/OiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKG5hbWUpIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgZWxzZSB0aGlzLm5hbWUgPSBcIkZqYWxsQXBwXCI7XG4gIH1cblxuICAvKipcbiAgICogR2V0L0NyZWF0ZSBhIGJhc2ljIEZqYWxsIEFwcGxpY2F0aW9uIHdpdGggc3RhbmRhcmQgdGFncyBhcHBsaWVkXG4gICAqIEBwYXJhbSBuYW1lIEFwcGxpY2F0aW9uIG5hbWVcbiAgICogQHJldHVybnMge0FwcH1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0QXBwKG5hbWU/OiBzdHJpbmcpOiBBcHAge1xuICAgIGNvbnN0IGFwcCA9IEFwcC5nZXRJbnN0YW5jZShuYW1lKTtcbiAgICBhcHAuaW5pdGlhbGl6ZVN0YW5kYXJkVGFncygpO1xuICAgIHJldHVybiBhcHA7XG4gIH1cblxuICAvKipcbiAgICogR2V0L0NyZWF0ZSB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBBcHBcbiAgICogQHBhcmFtIG5hbWVcbiAgICogQHJldHVybnMge0FwcH1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2UobmFtZT86IHN0cmluZyk6IEFwcCB7XG4gICAgLy8gRGVzcGl0ZSBzdXBwb3J0aW5nIG11bHRpcGxlIHN0YWNrcyB5b3UgY2FuIHN0aWxsIG9ubHkgZXZlclxuICAgIC8vIGhhdmUgYSBzaW5nbGUgQXBwbGljYXRpb24gcGVyIENESyBkZXBsb3ltZW50XG4gICAgaWYgKCFBcHAuaW5zdGFuY2UpIHtcbiAgICAgIEFwcC5pbnN0YW5jZSA9IG5ldyBBcHAobmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFwcC5pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHN0YWNrIGJ5IGtleS4gSWYgdGhlIHN0YWNrIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqICBEZXBlbmRlbmNpZXMgYXJlIG9ubHkgYXBwbGllZCB0aGUgZmlyc3QgdGltZSBhIHN0YWNrIGlzIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IG9mIHRoZSBzdGFja1xuICAgKiBAcGFyYW0gZGVwZW5kZW5jaWVzIC0gVGhlIHN0YWNrKHMpIHRoYXQgdGhpcyBzdGFjayBkZXBlbmRzIG9uXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXRTdGFjayhrZXk6IHN0cmluZywgZGVwZW5kZW5jaWVzPzogQXdzU3RhY2sgfCBBd3NTdGFja1tdKTogQXdzU3RhY2sge1xuICAgIC8vIEFwcGx5IHRoZSBhc3BlY3Qgb25jZSBiZWZvcmUgY3JlYXRpbmcgdGhlIGZpcnN0IHN0YWNrXG4gICAgaWYgKFxuICAgICAgIXRoaXMuYXNwZWN0QXBwbGllZCAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5zdGFja3MpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5nbG9iYWxUYWdzKS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmFwcGx5VGFnc0FzcGVjdCgpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zdGFja3Nba2V5XSkge1xuICAgICAgdGhpcy5zdGFja3Nba2V5XSA9IG5ldyBBd3NTdGFjayhrZXksIGRlcGVuZGVuY2llcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhY2tzW2tleV07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZGVmYXVsdCBjb21wdXRlIHN0YWNrIC0gbmFtZWQgYXMgYCR7dGhpcy5uYW1lfUNvbXB1dGVgXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0Q29tcHV0ZVN0YWNrKCk6IEF3c1N0YWNrIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFjayhgJHt0aGlzLm5hbWV9Q29tcHV0ZWAsIFtcbiAgICAgIHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpLFxuICAgICAgdGhpcy5nZXREZWZhdWx0U3RvcmFnZVN0YWNrKClcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBkZWZhdWx0IG5ldHdvcmsgc3RhY2sgLSBuYW1lZCBhcyBgJHt0aGlzLm5hbWV9TmV0d29ya2BcbiAgICogQHJldHVybnMge0F3c1N0YWNrfVxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHROZXR3b3JrU3RhY2soKTogQXdzU3RhY2sge1xuICAgIHJldHVybiB0aGlzLmdldFN0YWNrKGAke3RoaXMubmFtZX1OZXR3b3JrYCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVmYXVsdFN0b3JhZ2VTdGFjaygpOiBBd3NTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2soYCR7dGhpcy5uYW1lfVN0b3JhZ2VgLCB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZGVmYXVsdCB2cGMuIElmIHRoZSBWUEMgZG9lcyBub3QgZXhpc3QgaXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKiBAcmV0dXJucyB7VnBjfVxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHRWcGMoKTogSVZwYyB7XG4gICAgdmFyIG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuXG4gICAgaWYgKCF0aGlzLmRlZmF1bHRWcGMpIHtcbiAgICAgIC8vIFVzZSBhbiBleGlzdGluZyBpbXBvcnRlZCBWUEMgaWYgb25lIHdhcyBzdXBwbGllZFxuICAgICAgaWYgKHRoaXMuZXhpc3RpbmdWcGNJZCkge1xuICAgICAgICB0aGlzLmRlZmF1bHRWcGMgPSBWcGMuZnJvbUxvb2t1cChcbiAgICAgICAgICBuZXR3b3JrU3RhY2suZ2V0U3RhY2soKSxcbiAgICAgICAgICBgJHt0aGlzLm5hbWV9SW1wb3J0ZWRWcGNgLFxuICAgICAgICAgIHsgdnBjSWQ6IHRoaXMuZXhpc3RpbmdWcGNJZCB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBdHRlbXB0IHRvIGF1dG9tYXRpY2FsbHkgZGVyaXZlIHRoZSBhY2NvdW50IGFuZCByZWdpb24gZnJvbSB0aGVcbiAgICAgICAgLy8gZW52aXJvbm1lbnQgdGhlIENESyBpcyBydW5uaW5nIGluLiBXaGVuIGFuIGFjY291bnQgSUQgaXMgYXZhaWxhYmxlLFxuICAgICAgICAvLyB1c2UgaXQgdG8gaW1wb3J0IHRoZSBjb3JyZXNwb25kaW5nIElQQU0gcG9vbCBzbyBDSURScyBhcmUgYWxsb2NhdGVkXG4gICAgICAgIC8vIGZyb20gYSBjZW50cmFsIHBvb2wgaW5zdGVhZCBvZiB1c2luZyB0aGUgZGVmYXVsdCAxMC4wLjAuMC8xNiBibG9jay5cblxuICAgICAgICBjb25zdCBhY2NvdW50SWQgPVxuICAgICAgICAgIHRoaXMubm9kZS50cnlHZXRDb250ZXh0KFwiYWNjb3VudElkXCIpIHx8XG4gICAgICAgICAgcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfQUNDT1VOVDtcbiAgICAgICAgY29uc3QgcmVnaW9uID0gcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OO1xuICAgICAgICBjb25zdCBpc01hbmFnZWRBY2NvdW50ID1cbiAgICAgICAgICB0aGlzLm5vZGUudHJ5R2V0Q29udGV4dChcIm1hbmFnZWRBY2NvdW50XCIpID09PSBcInRydWVcIjtcblxuICAgICAgICBsZXQgaXB2NElwYW1Qb29sSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGlzTWFuYWdlZEFjY291bnQgJiYgYWNjb3VudElkICYmIHJlZ2lvbikge1xuICAgICAgICAgIC8vIEluY2x1ZGUgcmVnaW9uIHN1ZmZpeCBmb3IgcmVnaW9uLXNwZWNpZmljIElQQU0gcG9vbCBleHBvcnRzXG4gICAgICAgICAgY29uc3QgcmVnaW9uU3VmZml4ID0gcmVnaW9uLnJlcGxhY2UoLy0vZywgXCJcIik7XG4gICAgICAgICAgaXB2NElwYW1Qb29sSWQgPSBGbi5pbXBvcnRWYWx1ZShgSXBhbVBvb2xJZCR7YWNjb3VudElkfSR7cmVnaW9uU3VmZml4fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0VnBjID0gVnBjRmFjdG9yeS5idWlsZChgJHt0aGlzLm5hbWV9RGVmYXVsdFZwY2AsIHtcbiAgICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgICAgcmVnaW9uLFxuICAgICAgICAgIGlwdjRJcGFtUG9vbElkXG4gICAgICAgIH0pKHRoaXMsIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0VnBjO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldXNlIGFuIGV4aXN0aW5nIFZQQy5cbiAgICogQWNjZXB0cyBlaXRoZXIgYSBWcGMgb2JqZWN0IG9yIGEgcGxhaW4gVlBDIElEIHN0cmluZyBmb3IgY29udmVuaWVuY2UuXG4gICAqL1xuICBwdWJsaWMgdXNlRXhpc3RpbmdWcGModnBjSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlZmF1bHRWcGMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJ1c2VFeGlzdGluZ1ZwYyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIGRlZmF1bHQgVlBDIGhhcyBiZWVuIGNyZWF0ZWRcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmV4aXN0aW5nVnBjSWQgPSB2cGNJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyZWl2ZSB0aGUgZGVmYXVsdCBhcHBsaWNhdGlvbiBjb250YWluZXIgcmVnaXN0cnkuIElmIHRoZSByZWdpc3RyeSBkb2VzIG5vdCBleGlzdFxuICAgKiAgaXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHRDb250YWluZXJSZWdpc3RyeSgpOiBFY3Ige1xuICAgIGlmICghdGhpcy5kZWZhdWx0RWNyKSB7XG4gICAgICB2YXIgbmV0d29ya1N0YWNrID0gdGhpcy5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCk7XG5cbiAgICAgIHRoaXMuZGVmYXVsdEVjciA9IEVjckZhY3RvcnkuYnVpbGQoYCR7dGhpcy5uYW1lfUVjcmApKFxuICAgICAgICB0aGlzLFxuICAgICAgICBuZXR3b3JrU3RhY2suZ2V0U3RhY2soKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0RWNyO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNvbXB1dGUgcmVzb3VyY2UgdG8gdGhlIGRlZmF1bHQgY29tcHV0ZSBzdGFjayB1c2luZyB0aGUgZmFjdG9yeSBwYXR0ZXJuLlxuICAgKi9cbiAgcHVibGljIGFkZENvbXB1dGUoZm46IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gQ29uc3RydWN0KTogdm9pZCB7XG4gICAgY29uc3QgY29tcHV0ZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0Q29tcHV0ZVN0YWNrKCk7XG4gICAgY29tcHV0ZVN0YWNrLmFkZENvbnN0cnVjdChmbih0aGlzLCBjb21wdXRlU3RhY2suZ2V0U3RhY2soKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IGFkZCBhIHJlc291cmNlIHRvIHRoZSBkZWZhdWx0IGNvbXB1dGUgc3RhY2suXG4gICAqL1xuICBwdWJsaWMgYWRkQ29tcHV0ZVJlc291cmNlKHJlc291cmNlOiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBjb21wdXRlU3RhY2sgPSB0aGlzLmdldERlZmF1bHRDb21wdXRlU3RhY2soKTtcbiAgICBjb21wdXRlU3RhY2suYWRkQ29uc3RydWN0KHJlc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQWRkIGEgc3RvcmFnZSByZXNvdXJjZSB0byB0aGUgZGVmYXVsdCBzdG9yYWdlIHN0YWNrIHVzaW5nIHRoZSBmYWN0b3J5IHBhdHRlcm4uXG4gICAqL1xuICBwdWJsaWMgYWRkU3RvcmFnZShmbjogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBDb25zdHJ1Y3QpOiBTdG9yYWdlIHtcbiAgICBjb25zdCBzdG9yYWdlU3RhY2sgPSB0aGlzLmdldERlZmF1bHRTdG9yYWdlU3RhY2soKTtcbiAgICBjb25zdCBzdG9yYWdlQ29uc3RydWN0ID0gZm4odGhpcywgc3RvcmFnZVN0YWNrLmdldFN0YWNrKCkpO1xuICAgIHN0b3JhZ2VTdGFjay5hZGRDb25zdHJ1Y3Qoc3RvcmFnZUNvbnN0cnVjdCk7XG5cbiAgICByZXR1cm4gc3RvcmFnZUNvbnN0cnVjdCBhcyB1bmtub3duIGFzIFN0b3JhZ2U7XG4gIH1cblxuICAvKipcbiAgICogTWFudWFsbHkgYWRkIGEgcmVzb3VyY2UgdG8gdGhlIGRlZmF1bHQgc3RvcmFnZSBzdGFjay5cbiAgICovXG4gIHB1YmxpYyBhZGRTdG9yYWdlUmVzb3VyY2UocmVzb3VyY2U6IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JhZ2VTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdFN0b3JhZ2VTdGFjaygpO1xuICAgIHN0b3JhZ2VTdGFjay5hZGRDb25zdHJ1Y3QocmVzb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgc3RhbmRhcmQgdGFnc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplU3RhbmRhcmRUYWdzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgIHRoaXMuZ2xvYmFsVGFncyA9IHtcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZW52aXJvbm1lbnRcIjogY29uZmlnLmVudmlyb25tZW50LFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpzZXJ2aWNlXCI6IHRoaXMubmFtZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYWxsIHRhZ3MgYXMgYSBzaW5nbGUgYXNwZWN0XG4gICAqL1xuICBwcml2YXRlIGFwcGx5VGFnc0FzcGVjdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXNwZWN0QXBwbGllZCAmJiBPYmplY3Qua2V5cyh0aGlzLmdsb2JhbFRhZ3MpLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEFwcGx5IE9ORSBhc3BlY3Qgd2l0aCBhbGwgdGFncyB1c2luZyB0aGUgQ0RLIHYyLjIwNi4wKyBjb21wYXRpYmxlIFN0YW5kYXJkVGFnc0FzcGVjdFxuICAgICAgQXNwZWN0cy5vZih0aGlzKS5hZGQobmV3IFN0YW5kYXJkVGFnc0FzcGVjdCh0aGlzLmdsb2JhbFRhZ3MpKTtcbiAgICAgIHRoaXMuYXNwZWN0QXBwbGllZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBjdXN0b20gdGFncyB0byBhbGwgcmVzb3VyY2VzIGluIHRoZSBhcHBcbiAgICogQHBhcmFtIHRhZ3MgQ3VzdG9tIHRhZ3MgdG8gYXBwbHkgdG8gYWxsIHJlc291cmNlc1xuICAgKiBAZXhhbXBsZVxuICAgKiBhcHAuYWRkVGFncyh7XG4gICAqICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpvd25lclwiOiBcInBsYXRmb3JtLXRlYW1cIixcbiAgICogICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmNvc3QtY2VudGVyXCI6IFwiQ0MtMTIzXCIsXG4gICAqICAgXCJ0ZWFtOnNsYWNrLWNoYW5uZWxcIjogXCIjcGxhdGZvcm0tYWxlcnRzXCJcbiAgICogfSk7XG4gICAqL1xuICBwdWJsaWMgYWRkVGFncyh0YWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KTogQXBwIHtcbiAgICAvLyBNZXJnZSB0YWdzIGJ1dCBkb24ndCBhcHBseSBhc3BlY3QgeWV0XG4gICAgdGhpcy5nbG9iYWxUYWdzID0ge1xuICAgICAgLi4udGhpcy5nbG9iYWxUYWdzLFxuICAgICAgLi4udGFnc1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBwO1xuIl19
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBeUQ7QUFFekQsd0RBQWlFO0FBR2pFLDJDQUF1QztBQUN2QyxxREFBOEQ7QUFHOUQsbUVBQWdFO0FBQ2hFLGlEQUE4QztBQUU5Qzs7OztHQUlHO0FBQ0gsTUFBYSxHQUFJLFNBQVEsaUJBQU07SUFZN0IsWUFBb0IsSUFBYTtRQUMvQixLQUFLLEVBQUUsQ0FBQztRQVRGLFdBQU0sR0FBZ0MsRUFBRSxDQUFDO1FBS3pDLGVBQVUsR0FBOEIsRUFBRSxDQUFDO1FBQzNDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBS3JDLElBQUksSUFBSTtZQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDOztZQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBYTtRQUNoQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzdCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQWE7UUFDckMsNkRBQTZEO1FBQzdELCtDQUErQztRQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLFFBQVEsQ0FBQyxHQUFXLEVBQUUsWUFBb0M7UUFDL0Qsd0RBQXdEO1FBQ3hELElBQ0UsQ0FBQyxJQUFJLENB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a0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLE9BQU8sQ0FBQyxJQUErQjtRQUM1Qyx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixHQUFHLElBQUksQ0FBQyxVQUFVO1lBQ2xCLEdBQUcsSUFBSTtTQUNSLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBL1BILGtCQWdRQztBQS9QZ0IsWUFBUSxHQUFlLElBQUksQUFBbkIsQ0FBb0I7QUFpUTdDLGtCQUFlLEdBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcCBhcyBDZGtBcHAsIEZuLCBBc3BlY3RzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgVnBjLCBWcGNGYWN0b3J5IH0gZnJvbSBcIi4vcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL3ZwY1wiO1xuaW1wb3J0IHsgSVZwYyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5cbmltcG9ydCB7IEF3c1N0YWNrIH0gZnJvbSBcIi4vcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBFY3IsIEVjckZhY3RvcnkgfSBmcm9tIFwiLi9yZXNvdXJjZXMvYXdzL3N0b3JhZ2UvZWNyXCI7XG5cbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tIFwiLi9wYXR0ZXJucy9hd3Mvc3RvcmFnZVwiO1xuaW1wb3J0IHsgU3RhbmRhcmRUYWdzQXNwZWN0IH0gZnJvbSBcIi4vdXRpbHMvc3RhbmRhcmRUYWdzQXNwZWN0XCI7XG5pbXBvcnQgeyBnZXRDb25maWcgfSBmcm9tIFwiLi91dGlscy9nZXRDb25maWdcIjtcblxuLyoqXG4gKiBUaGUgYmFzaWMgY29ybmVyLXN0b25lIG9mIGFsbCBGamFsbC1ob3N0ZWQgYXBwbGljYXRpb25zLlxuICogIFRoaXMgY2xhc3MgaXMgYSBzaW5nbGV0b24gYW5kIHNob3VsZCBiZSB1c2VkIHRvIGNyZWF0ZSBhbmQgbWFuYWdlXG4gKiAgIGFsbCByZXNvdXJjZXMgaW4gYSBGamFsbCBhcHBsaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwcCBleHRlbmRzIENka0FwcCB7XG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBBcHAgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIG5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBzdGFja3M6IHsgW2tleTogc3RyaW5nXTogQXdzU3RhY2sgfSA9IHt9O1xuXG4gIHByaXZhdGUgZGVmYXVsdFZwYzogSVZwYztcbiAgcHJpdmF0ZSBkZWZhdWx0RWNyOiBFY3I7XG4gIHByaXZhdGUgZXhpc3RpbmdWcGNJZD86IHN0cmluZztcbiAgcHJpdmF0ZSBnbG9iYWxUYWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIHByaXZhdGUgYXNwZWN0QXBwbGllZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IobmFtZT86IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAobmFtZSkgdGhpcy5uYW1lID0gbmFtZTtcbiAgICBlbHNlIHRoaXMubmFtZSA9IFwiRmphbGxBcHBcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQvQ3JlYXRlIGEgYmFzaWMgRmphbGwgQXBwbGljYXRpb24gd2l0aCBzdGFuZGFyZCB0YWdzIGFwcGxpZWRcbiAgICogQHBhcmFtIG5hbWUgQXBwbGljYXRpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7QXBwfVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRBcHAobmFtZT86IHN0cmluZyk6IEFwcCB7XG4gICAgY29uc3QgYXBwID0gQXBwLmdldEluc3RhbmNlKG5hbWUpO1xuICAgIGFwcC5pbml0aWFsaXplU3RhbmRhcmRUYWdzKCk7XG4gICAgcmV0dXJuIGFwcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQvQ3JlYXRlIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEFwcFxuICAgKiBAcGFyYW0gbmFtZVxuICAgKiBAcmV0dXJucyB7QXBwfVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZShuYW1lPzogc3RyaW5nKTogQXBwIHtcbiAgICAvLyBEZXNwaXRlIHN1cHBvcnRpbmcgbXVsdGlwbGUgc3RhY2tzIHlvdSBjYW4gc3RpbGwgb25seSBldmVyXG4gICAgLy8gaGF2ZSBhIHNpbmdsZSBBcHBsaWNhdGlvbiBwZXIgQ0RLIGRlcGxveW1lbnRcbiAgICBpZiAoIUFwcC5pbnN0YW5jZSkge1xuICAgICAgQXBwLmluc3RhbmNlID0gbmV3IEFwcChuYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXBwLmluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgc3RhY2sgYnkga2V5LiBJZiB0aGUgc3RhY2sgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICogIERlcGVuZGVuY2llcyBhcmUgb25seSBhcHBsaWVkIHRoZSBmaXJzdCB0aW1lIGEgc3RhY2sgaXMgY3JlYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIHN0YWNrXG4gICAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgLSBUaGUgc3RhY2socykgdGhhdCB0aGlzIHN0YWNrIGRlcGVuZHMgb25cbiAgICogQHJldHVybnMge0F3c1N0YWNrfVxuICAgKi9cbiAgcHVibGljIGdldFN0YWNrKGtleTogc3RyaW5nLCBkZXBlbmRlbmNpZXM/OiBBd3NTdGFjayB8IEF3c1N0YWNrW10pOiBBd3NTdGFjayB7XG4gICAgLy8gQXBwbHkgdGhlIGFzcGVjdCBvbmNlIGJlZm9yZSBjcmVhdGluZyB0aGUgZmlyc3Qgc3RhY2tcbiAgICBpZiAoXG4gICAgICAhdGhpcy5hc3BlY3RBcHBsaWVkICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnN0YWNrcykubGVuZ3RoID09PSAwICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmdsb2JhbFRhZ3MpLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuYXBwbHlUYWdzQXNwZWN0KCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnN0YWNrc1trZXldKSB7XG4gICAgICB0aGlzLnN0YWNrc1trZXldID0gbmV3IEF3c1N0YWNrKGtleSwgZGVwZW5kZW5jaWVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFja3Nba2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBkZWZhdWx0IGNvbXB1dGUgc3RhY2sgLSBuYW1lZCBhcyBgJHt0aGlzLm5hbWV9Q29tcHV0ZWBcbiAgICogQHJldHVybnMge0F3c1N0YWNrfVxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHRDb21wdXRlU3RhY2soKTogQXdzU3RhY2sge1xuICAgIHJldHVybiB0aGlzLmdldFN0YWNrKGAke3RoaXMubmFtZX1Db21wdXRlYCwgW1xuICAgICAgdGhpcy5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCksXG4gICAgICB0aGlzLmdldERlZmF1bHRTdG9yYWdlU3RhY2soKVxuICAgIF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGRlZmF1bHQgbmV0d29yayBzdGFjayAtIG5hbWVkIGFzIGAke3RoaXMubmFtZX1OZXR3b3JrYFxuICAgKiBAcmV0dXJucyB7QXdzU3RhY2t9XG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpOiBBd3NTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2soYCR7dGhpcy5uYW1lfU5ldHdvcmtgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREZWZhdWx0U3RvcmFnZVN0YWNrKCk6IEF3c1N0YWNrIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFjayhgJHt0aGlzLm5hbWV9U3RvcmFnZWAsIHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBkZWZhdWx0IHZwYy4gSWYgdGhlIFZQQyBkb2VzIG5vdCBleGlzdCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqIEByZXR1cm5zIHtWcGN9XG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdFZwYygpOiBJVnBjIHtcbiAgICB2YXIgbmV0d29ya1N0YWNrID0gdGhpcy5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCk7XG5cbiAgICBpZiAoIXRoaXMuZGVmYXVsdFZwYykge1xuICAgICAgLy8gVXNlIGFuIGV4aXN0aW5nIGltcG9ydGVkIFZQQyBpZiBvbmUgd2FzIHN1cHBsaWVkXG4gICAgICBpZiAodGhpcy5leGlzdGluZ1ZwY0lkKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdFZwYyA9IFZwYy5mcm9tTG9va3VwKFxuICAgICAgICAgIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpLFxuICAgICAgICAgIGAke3RoaXMubmFtZX1JbXBvcnRlZFZwY2AsXG4gICAgICAgICAgeyB2cGNJZDogdGhpcy5leGlzdGluZ1ZwY0lkIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEF0dGVtcHQgdG8gYXV0b21hdGljYWxseSBkZXJpdmUgdGhlIGFjY291bnQgYW5kIHJlZ2lvbiBmcm9tIHRoZVxuICAgICAgICAvLyBlbnZpcm9ubWVudCB0aGUgQ0RLIGlzIHJ1bm5pbmcgaW4uIFdoZW4gYW4gYWNjb3VudCBJRCBpcyBhdmFpbGFibGUsXG4gICAgICAgIC8vIHVzZSBpdCB0byBpbXBvcnQgdGhlIGNvcnJlc3BvbmRpbmcgSVBBTSBwb29sIHNvIENJRFJzIGFyZSBhbGxvY2F0ZWRcbiAgICAgICAgLy8gZnJvbSBhIGNlbnRyYWwgcG9vbCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBkZWZhdWx0IDEwLjAuMC4wLzE2IGJsb2NrLlxuXG4gICAgICAgIGNvbnN0IGFjY291bnRJZCA9XG4gICAgICAgICAgdGhpcy5ub2RlLnRyeUdldENvbnRleHQoXCJhY2NvdW50SWRcIikgfHxcbiAgICAgICAgICBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9BQ0NPVU5UO1xuICAgICAgICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9SRUdJT047XG4gICAgICAgIGNvbnN0IGlzTWFuYWdlZEFjY291bnQgPVxuICAgICAgICAgIHRoaXMubm9kZS50cnlHZXRDb250ZXh0KFwibWFuYWdlZEFjY291bnRcIikgPT09IFwidHJ1ZVwiO1xuXG4gICAgICAgIGxldCBpcHY0SXBhbVBvb2xJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaXNNYW5hZ2VkQWNjb3VudCAmJiBhY2NvdW50SWQgJiYgcmVnaW9uKSB7XG4gICAgICAgICAgLy8gSW5jbHVkZSByZWdpb24gc3VmZml4IGZvciByZWdpb24tc3BlY2lmaWMgSVBBTSBwb29sIGV4cG9ydHNcbiAgICAgICAgICBjb25zdCByZWdpb25TdWZmaXggPSByZWdpb24ucmVwbGFjZSgvLS9nLCBcIlwiKTtcbiAgICAgICAgICBpcHY0SXBhbVBvb2xJZCA9IEZuLmltcG9ydFZhbHVlKGBJcGFtUG9vbElkJHthY2NvdW50SWR9JHtyZWdpb25TdWZmaXh9YCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRlZmF1bHRWcGMgPSBWcGNGYWN0b3J5LmJ1aWxkKGAke3RoaXMubmFtZX1EZWZhdWx0VnBjYCwge1xuICAgICAgICAgIGFjY291bnRJZCxcbiAgICAgICAgICByZWdpb24sXG4gICAgICAgICAgaXB2NElwYW1Qb29sSWRcbiAgICAgICAgfSkodGhpcywgbmV0d29ya1N0YWNrLmdldFN0YWNrKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRWcGM7XG4gIH1cblxuICAvKipcbiAgICogUmV1c2UgYW4gZXhpc3RpbmcgVlBDLlxuICAgKiBBY2NlcHRzIGVpdGhlciBhIFZwYyBvYmplY3Qgb3IgYSBwbGFpbiBWUEMgSUQgc3RyaW5nIGZvciBjb252ZW5pZW5jZS5cbiAgICovXG4gIHB1YmxpYyB1c2VFeGlzdGluZ1ZwYyh2cGNJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVmYXVsdFZwYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcInVzZUV4aXN0aW5nVnBjIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgZGVmYXVsdCBWUEMgaGFzIGJlZW4gY3JlYXRlZFwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuZXhpc3RpbmdWcGNJZCA9IHZwY0lkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJlaXZlIHRoZSBkZWZhdWx0IGFwcGxpY2F0aW9uIGNvbnRhaW5lciByZWdpc3RyeS4gSWYgdGhlIHJlZ2lzdHJ5IGRvZXMgbm90IGV4aXN0XG4gICAqICBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdENvbnRhaW5lclJlZ2lzdHJ5KCk6IEVjciB7XG4gICAgaWYgKCF0aGlzLmRlZmF1bHRFY3IpIHtcbiAgICAgIHZhciBuZXR3b3JrU3RhY2sgPSB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKTtcblxuICAgICAgdGhpcy5kZWZhdWx0RWNyID0gRWNyRmFjdG9yeS5idWlsZChgJHt0aGlzLm5hbWV9RWNyYCkoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRFY3I7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgY29tcHV0ZSByZXNvdXJjZSB0byB0aGUgZGVmYXVsdCBjb21wdXRlIHN0YWNrIHVzaW5nIHRoZSBmYWN0b3J5IHBhdHRlcm4uXG4gICAqL1xuICBwdWJsaWMgYWRkQ29tcHV0ZShmbjogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBjb21wdXRlU3RhY2sgPSB0aGlzLmdldERlZmF1bHRDb21wdXRlU3RhY2soKTtcbiAgICBjb21wdXRlU3RhY2suYWRkQ29uc3RydWN0KGZuKHRoaXMsIGNvbXB1dGVTdGFjay5nZXRTdGFjaygpKSk7XG4gIH1cblxuICAvKipcbiAgICogTWFudWFsbHkgYWRkIGEgcmVzb3VyY2UgdG8gdGhlIGRlZmF1bHQgY29tcHV0ZSBzdGFjay5cbiAgICovXG4gIHB1YmxpYyBhZGRDb21wdXRlUmVzb3VyY2UocmVzb3VyY2U6IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXB1dGVTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdENvbXB1dGVTdGFjaygpO1xuICAgIGNvbXB1dGVTdGFjay5hZGRDb25zdHJ1Y3QocmVzb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqICBBZGQgYSBzdG9yYWdlIHJlc291cmNlIHRvIHRoZSBkZWZhdWx0IHN0b3JhZ2Ugc3RhY2sgdXNpbmcgdGhlIGZhY3RvcnkgcGF0dGVybi5cbiAgICovXG4gIHB1YmxpYyBhZGRTdG9yYWdlKGZuOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IENvbnN0cnVjdCk6IFN0b3JhZ2Uge1xuICAgIGNvbnN0IHN0b3JhZ2VTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdFN0b3JhZ2VTdGFjaygpO1xuICAgIGNvbnN0IHN0b3JhZ2VDb25zdHJ1Y3QgPSBmbih0aGlzLCBzdG9yYWdlU3RhY2suZ2V0U3RhY2soKSk7XG4gICAgc3RvcmFnZVN0YWNrLmFkZENvbnN0cnVjdChzdG9yYWdlQ29uc3RydWN0KTtcblxuICAgIHJldHVybiBzdG9yYWdlQ29uc3RydWN0IGFzIHVua25vd24gYXMgU3RvcmFnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gUzMgYnVja2V0IHRvIHRoZSBkZWZhdWx0IHN0b3JhZ2Ugc3RhY2sgdXNpbmcgdGhlIGZhY3RvcnkgcGF0dGVybi5cbiAgICovXG4gIHB1YmxpYyBhZGRTMyhmbjogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBDb25zdHJ1Y3QpOiBhbnkge1xuICAgIGNvbnN0IHN0b3JhZ2VTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdFN0b3JhZ2VTdGFjaygpO1xuICAgIGNvbnN0IHMzQ29uc3RydWN0ID0gZm4odGhpcywgc3RvcmFnZVN0YWNrLmdldFN0YWNrKCkpO1xuICAgIHN0b3JhZ2VTdGFjay5hZGRDb25zdHJ1Y3QoczNDb25zdHJ1Y3QpO1xuXG4gICAgcmV0dXJuIHMzQ29uc3RydWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IGFkZCBhIHJlc291cmNlIHRvIHRoZSBkZWZhdWx0IHN0b3JhZ2Ugc3RhY2suXG4gICAqL1xuICBwdWJsaWMgYWRkU3RvcmFnZVJlc291cmNlKHJlc291cmNlOiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yYWdlU3RhY2sgPSB0aGlzLmdldERlZmF1bHRTdG9yYWdlU3RhY2soKTtcbiAgICBzdG9yYWdlU3RhY2suYWRkQ29uc3RydWN0KHJlc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHN0YW5kYXJkIHRhZ3NcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVN0YW5kYXJkVGFncygpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICB0aGlzLmdsb2JhbFRhZ3MgPSB7XG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6IGNvbmZpZy5lbnZpcm9ubWVudCxcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiB0aGlzLm5hbWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGFsbCB0YWdzIGFzIGEgc2luZ2xlIGFzcGVjdFxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVRhZ3NBc3BlY3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFzcGVjdEFwcGxpZWQgJiYgT2JqZWN0LmtleXModGhpcy5nbG9iYWxUYWdzKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBBcHBseSBPTkUgYXNwZWN0IHdpdGggYWxsIHRhZ3MgdXNpbmcgdGhlIENESyB2Mi4yMDYuMCsgY29tcGF0aWJsZSBTdGFuZGFyZFRhZ3NBc3BlY3RcbiAgICAgIEFzcGVjdHMub2YodGhpcykuYWRkKG5ldyBTdGFuZGFyZFRhZ3NBc3BlY3QodGhpcy5nbG9iYWxUYWdzKSk7XG4gICAgICB0aGlzLmFzcGVjdEFwcGxpZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgY3VzdG9tIHRhZ3MgdG8gYWxsIHJlc291cmNlcyBpbiB0aGUgYXBwXG4gICAqIEBwYXJhbSB0YWdzIEN1c3RvbSB0YWdzIHRvIGFwcGx5IHRvIGFsbCByZXNvdXJjZXNcbiAgICogQGV4YW1wbGVcbiAgICogYXBwLmFkZFRhZ3Moe1xuICAgKiAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogXCJwbGF0Zm9ybS10ZWFtXCIsXG4gICAqICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpjb3N0LWNlbnRlclwiOiBcIkNDLTEyM1wiLFxuICAgKiAgIFwidGVhbTpzbGFjay1jaGFubmVsXCI6IFwiI3BsYXRmb3JtLWFsZXJ0c1wiXG4gICAqIH0pO1xuICAgKi9cbiAgcHVibGljIGFkZFRhZ3ModGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IEFwcCB7XG4gICAgLy8gTWVyZ2UgdGFncyBidXQgZG9uJ3QgYXBwbHkgYXNwZWN0IHlldFxuICAgIHRoaXMuZ2xvYmFsVGFncyA9IHtcbiAgICAgIC4uLnRoaXMuZ2xvYmFsVGFncyxcbiAgICAgIC4uLnRhZ3NcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcDtcbiJdfQ==
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { StackProps } from "aws-cdk-lib";
|
|
3
|
+
interface BackupGlobalSettingsProps extends StackProps {
|
|
4
|
+
account: string;
|
|
5
|
+
region: string;
|
|
6
|
+
/**
|
|
7
|
+
* Enable cross-account backup copying.
|
|
8
|
+
* Required for enterprise tier backups to compliance account.
|
|
9
|
+
* @default true
|
|
10
|
+
*/
|
|
11
|
+
enableCrossAccountBackup?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Enable delegated administrator for AWS Backup.
|
|
14
|
+
* Allows managing backups from a member account instead of root.
|
|
15
|
+
* Recommended for security best practices.
|
|
16
|
+
* @default false
|
|
17
|
+
*/
|
|
18
|
+
enableDelegatedAdministrator?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Enable Multi-Party Approval for backup restores.
|
|
21
|
+
* Requires approval workflow for restore operations.
|
|
22
|
+
* @default false
|
|
23
|
+
*/
|
|
24
|
+
enableMpa?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare class BackupGlobalSettings extends Construct {
|
|
27
|
+
constructor(scope: Construct, id: string, props: BackupGlobalSettingsProps);
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BackupGlobalSettings = void 0;
|
|
4
|
+
const customResources = require("aws-cdk-lib/custom-resources");
|
|
5
|
+
const constructs_1 = require("constructs");
|
|
6
|
+
const awsCustomResource_1 = require("../../resources/aws/utilities/awsCustomResource");
|
|
7
|
+
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
8
|
+
class BackupGlobalSettings extends constructs_1.Construct {
|
|
9
|
+
constructor(scope, id, props) {
|
|
10
|
+
super(scope, id);
|
|
11
|
+
const { enableCrossAccountBackup = true, enableDelegatedAdministrator = false, enableMpa = false } = props;
|
|
12
|
+
const globalSettings = {
|
|
13
|
+
isCrossAccountBackupEnabled: enableCrossAccountBackup.toString(),
|
|
14
|
+
isDelegatedAdministratorEnabled: enableDelegatedAdministrator.toString(),
|
|
15
|
+
isMpaEnabled: enableMpa.toString()
|
|
16
|
+
};
|
|
17
|
+
// Update global settings on create and update
|
|
18
|
+
new awsCustomResource_1.AwsCustomResource(this, "BackupGlobalSettings", {
|
|
19
|
+
functionName: "updateBackupGlobalSettings",
|
|
20
|
+
onCreate: {
|
|
21
|
+
service: "backup",
|
|
22
|
+
action: "UpdateGlobalSettingsCommand",
|
|
23
|
+
parameters: {
|
|
24
|
+
GlobalSettings: globalSettings
|
|
25
|
+
},
|
|
26
|
+
physicalResourceId: customResources.PhysicalResourceId.of("BackupGlobalSettings")
|
|
27
|
+
},
|
|
28
|
+
onUpdate: {
|
|
29
|
+
service: "backup",
|
|
30
|
+
action: "UpdateGlobalSettingsCommand",
|
|
31
|
+
parameters: {
|
|
32
|
+
GlobalSettings: globalSettings
|
|
33
|
+
},
|
|
34
|
+
physicalResourceId: customResources.PhysicalResourceId.of("BackupGlobalSettings")
|
|
35
|
+
},
|
|
36
|
+
resourceType: "Custom::BackupGlobalSettings",
|
|
37
|
+
policy: customResources.AwsCustomResourcePolicy.fromStatements([
|
|
38
|
+
new aws_iam_1.PolicyStatement({
|
|
39
|
+
actions: [
|
|
40
|
+
"backup:UpdateGlobalSettings",
|
|
41
|
+
"backup:DescribeGlobalSettings"
|
|
42
|
+
],
|
|
43
|
+
resources: ["*"],
|
|
44
|
+
effect: aws_iam_1.Effect.ALLOW
|
|
45
|
+
})
|
|
46
|
+
])
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.BackupGlobalSettings = BackupGlobalSettings;
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwR2xvYmFsU2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9iYWNrdXBHbG9iYWxTZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnRUFBZ0U7QUFDaEUsMkNBQXVDO0FBQ3ZDLHVGQUFvRjtBQUNwRixpREFBOEQ7QUEyQjlELE1BQWEsb0JBQXFCLFNBQVEsc0JBQVM7SUFDakQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFnQztRQUN4RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sRUFDSix3QkFBd0IsR0FBRyxJQUFJLEVBQy9CLDRCQUE0QixHQUFHLEtBQUssRUFDcEMsU0FBUyxHQUFHLEtBQUssRUFDbEIsR0FBRyxLQUFLLENBQUM7UUFFVixNQUFNLGNBQWMsR0FBMkI7WUFDN0MsMkJBQTJCLEVBQUUsd0JBQXdCLENBQUMsUUFBUSxFQUFFO1lBQ2hFLCtCQUErQixFQUFFLDRCQUE0QixDQUFDLFFBQVEsRUFBRTtZQUN4RSxZQUFZLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRTtTQUNuQyxDQUFDO1FBRUYsOENBQThDO1FBQzlDLElBQUkscUNBQWlCLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFO1lBQ2xELFlBQVksRUFBRSw0QkFBNEI7WUFDMUMsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixNQUFNLEVBQUUsNkJBQTZCO2dCQUNyQyxVQUFVLEVBQUU7b0JBQ1YsY0FBYyxFQUFFLGNBQWM7aUJBQy9CO2dCQUNELGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQ3ZELHNCQUFzQixDQUN2QjthQUNGO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixNQUFNLEVBQUUsNkJBQTZCO2dCQUNyQyxVQUFVLEVBQUU7b0JBQ1YsY0FBYyxFQUFFLGNBQWM7aUJBQy9CO2dCQUNELGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQ3ZELHNCQUFzQixDQUN2QjthQUNGO1lBQ0QsWUFBWSxFQUFFLDhCQUE4QjtZQUM1QyxNQUFNLEVBQUUsZUFBZSxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQztnQkFDN0QsSUFBSSx5QkFBZSxDQUFDO29CQUNsQixPQUFPLEVBQUU7d0JBQ1AsNkJBQTZCO3dCQUM3QiwrQkFBK0I7cUJBQ2hDO29CQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztvQkFDaEIsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztpQkFDckIsQ0FBQzthQUNILENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFwREQsb0RBb0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3VzdG9tUmVzb3VyY2VzIGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQXdzQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2VcIjtcbmltcG9ydCB7IEVmZmVjdCwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuaW50ZXJmYWNlIEJhY2t1cEdsb2JhbFNldHRpbmdzUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgYWNjb3VudDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgLyoqXG4gICAqIEVuYWJsZSBjcm9zcy1hY2NvdW50IGJhY2t1cCBjb3B5aW5nLlxuICAgKiBSZXF1aXJlZCBmb3IgZW50ZXJwcmlzZSB0aWVyIGJhY2t1cHMgdG8gY29tcGxpYW5jZSBhY2NvdW50LlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBlbmFibGVDcm9zc0FjY291bnRCYWNrdXA/OiBib29sZWFuO1xuICAvKipcbiAgICogRW5hYmxlIGRlbGVnYXRlZCBhZG1pbmlzdHJhdG9yIGZvciBBV1MgQmFja3VwLlxuICAgKiBBbGxvd3MgbWFuYWdpbmcgYmFja3VwcyBmcm9tIGEgbWVtYmVyIGFjY291bnQgaW5zdGVhZCBvZiByb290LlxuICAgKiBSZWNvbW1lbmRlZCBmb3Igc2VjdXJpdHkgYmVzdCBwcmFjdGljZXMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlbmFibGVEZWxlZ2F0ZWRBZG1pbmlzdHJhdG9yPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVuYWJsZSBNdWx0aS1QYXJ0eSBBcHByb3ZhbCBmb3IgYmFja3VwIHJlc3RvcmVzLlxuICAgKiBSZXF1aXJlcyBhcHByb3ZhbCB3b3JrZmxvdyBmb3IgcmVzdG9yZSBvcGVyYXRpb25zLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZW5hYmxlTXBhPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEJhY2t1cEdsb2JhbFNldHRpbmdzIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJhY2t1cEdsb2JhbFNldHRpbmdzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qge1xuICAgICAgZW5hYmxlQ3Jvc3NBY2NvdW50QmFja3VwID0gdHJ1ZSxcbiAgICAgIGVuYWJsZURlbGVnYXRlZEFkbWluaXN0cmF0b3IgPSBmYWxzZSxcbiAgICAgIGVuYWJsZU1wYSA9IGZhbHNlXG4gICAgfSA9IHByb3BzO1xuXG4gICAgY29uc3QgZ2xvYmFsU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBpc0Nyb3NzQWNjb3VudEJhY2t1cEVuYWJsZWQ6IGVuYWJsZUNyb3NzQWNjb3VudEJhY2t1cC50b1N0cmluZygpLFxuICAgICAgaXNEZWxlZ2F0ZWRBZG1pbmlzdHJhdG9yRW5hYmxlZDogZW5hYmxlRGVsZWdhdGVkQWRtaW5pc3RyYXRvci50b1N0cmluZygpLFxuICAgICAgaXNNcGFFbmFibGVkOiBlbmFibGVNcGEudG9TdHJpbmcoKVxuICAgIH07XG5cbiAgICAvLyBVcGRhdGUgZ2xvYmFsIHNldHRpbmdzIG9uIGNyZWF0ZSBhbmQgdXBkYXRlXG4gICAgbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIFwiQmFja3VwR2xvYmFsU2V0dGluZ3NcIiwge1xuICAgICAgZnVuY3Rpb25OYW1lOiBcInVwZGF0ZUJhY2t1cEdsb2JhbFNldHRpbmdzXCIsXG4gICAgICBvbkNyZWF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcImJhY2t1cFwiLFxuICAgICAgICBhY3Rpb246IFwiVXBkYXRlR2xvYmFsU2V0dGluZ3NDb21tYW5kXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBHbG9iYWxTZXR0aW5nczogZ2xvYmFsU2V0dGluZ3NcbiAgICAgICAgfSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBjdXN0b21SZXNvdXJjZXMuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgIFwiQmFja3VwR2xvYmFsU2V0dGluZ3NcIlxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgb25VcGRhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJiYWNrdXBcIixcbiAgICAgICAgYWN0aW9uOiBcIlVwZGF0ZUdsb2JhbFNldHRpbmdzQ29tbWFuZFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgR2xvYmFsU2V0dGluZ3M6IGdsb2JhbFNldHRpbmdzXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3VzdG9tUmVzb3VyY2VzLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICBcIkJhY2t1cEdsb2JhbFNldHRpbmdzXCJcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OkJhY2t1cEdsb2JhbFNldHRpbmdzXCIsXG4gICAgICBwb2xpY3k6IGN1c3RvbVJlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU3RhdGVtZW50cyhbXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiYmFja3VwOlVwZGF0ZUdsb2JhbFNldHRpbmdzXCIsXG4gICAgICAgICAgICBcImJhY2t1cDpEZXNjcmliZUdsb2JhbFNldHRpbmdzXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPV1xuICAgICAgICB9KVxuICAgICAgXSlcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./backupGlobalSettings"), exports);
|
|
17
18
|
__exportStar(require("./costAllocationTags"), exports);
|
|
18
19
|
__exportStar(require("./identityCenter"), exports);
|
|
19
20
|
__exportStar(require("./ipam"), exports);
|
|
@@ -25,4 +26,4 @@ __exportStar(require("./accountId"), exports);
|
|
|
25
26
|
__exportStar(require("./ecrDefaultImage"), exports);
|
|
26
27
|
__exportStar(require("./eventBus"), exports);
|
|
27
28
|
__exportStar(require("./organisationId"), exports);
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseURBQXVDO0FBQ3ZDLHVEQUFxQztBQUNyQyxtREFBaUM7QUFDakMseUNBQXVCO0FBQ3ZCLHNEQUFvQztBQUNwQywrQ0FBNkI7QUFDN0IsK0NBQTZCO0FBQzdCLGlEQUErQjtBQUMvQiw4Q0FBNEI7QUFDNUIsb0RBQWtDO0FBQ2xDLDZDQUEyQjtBQUMzQixtREFBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9iYWNrdXBHbG9iYWxTZXR0aW5nc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29zdEFsbG9jYXRpb25UYWdzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pZGVudGl0eUNlbnRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaXBhbVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaXBhbURlbGVnYXRlQWRtaW5cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lwYW1Qb29sSWRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JhbVNoYXJpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29yZ2FuaXNhdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYWNjb3VudElkXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lY3JEZWZhdWx0SW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V2ZW50QnVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vcmdhbmlzYXRpb25JZFwiO1xuIl19
|
|
@@ -14,6 +14,11 @@ interface ManagedOrganisationProps extends ExtendedStackProps {
|
|
|
14
14
|
existingAccounts?: Account[];
|
|
15
15
|
costAllocationTags: ICostAllocationTags[];
|
|
16
16
|
identityCenter?: boolean;
|
|
17
|
+
backupSettings?: {
|
|
18
|
+
enableCrossAccountBackup?: boolean;
|
|
19
|
+
enableDelegatedAdministrator?: boolean;
|
|
20
|
+
enableMpa?: boolean;
|
|
21
|
+
};
|
|
17
22
|
}
|
|
18
23
|
export declare class ManagedOrganisation extends Stack {
|
|
19
24
|
private organisation;
|
|
@@ -26,5 +31,6 @@ export declare class ManagedOrganisation extends Stack {
|
|
|
26
31
|
private enableTrustedAccess;
|
|
27
32
|
private enableCostAllocationTags;
|
|
28
33
|
private setupIdentityCenter;
|
|
34
|
+
private setupBackupGlobalSettings;
|
|
29
35
|
}
|
|
30
36
|
export {};
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ManagedOrganisation = void 0;
|
|
4
4
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
5
|
const app_1 = require("../../app");
|
|
6
|
+
const backupGlobalSettings_1 = require("../../config/aws/backupGlobalSettings");
|
|
6
7
|
const identityCenter_1 = require("../../config/aws/identityCenter");
|
|
7
8
|
const ipamDelegateAdmin_1 = require("../../config/aws/ipamDelegateAdmin");
|
|
8
9
|
const ramSharing_1 = require("../../config/aws/ramSharing");
|
|
@@ -35,6 +36,7 @@ class ManagedOrganisation extends aws_cdk_lib_1.Stack {
|
|
|
35
36
|
this.enableTrustedAccess(props);
|
|
36
37
|
this.enableCostAllocationTags(props);
|
|
37
38
|
this.setupIdentityCenter(orgAccounts, props);
|
|
39
|
+
this.setupBackupGlobalSettings(props);
|
|
38
40
|
}
|
|
39
41
|
getPlatformAccountId(orgAccounts, props) {
|
|
40
42
|
const platformEntry = Object.entries(props.accounts).find(([key]) => key.toLowerCase() === "platform");
|
|
@@ -77,6 +79,19 @@ class ManagedOrganisation extends aws_cdk_lib_1.Stack {
|
|
|
77
79
|
});
|
|
78
80
|
}
|
|
79
81
|
}
|
|
82
|
+
setupBackupGlobalSettings(props) {
|
|
83
|
+
const defaultSettings = {
|
|
84
|
+
enableCrossAccountBackup: true,
|
|
85
|
+
enableDelegatedAdministrator: true,
|
|
86
|
+
enableMpa: false
|
|
87
|
+
};
|
|
88
|
+
const settings = { ...defaultSettings, ...props.backupSettings };
|
|
89
|
+
new backupGlobalSettings_1.BackupGlobalSettings(this, "BackupGlobalSettings", {
|
|
90
|
+
account: props.env.account,
|
|
91
|
+
region: props.env.region,
|
|
92
|
+
...settings
|
|
93
|
+
});
|
|
94
|
+
}
|
|
80
95
|
}
|
|
81
96
|
exports.ManagedOrganisation = ManagedOrganisation;
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZE9yZ2FuaXNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvbWFuYWdlZE9yZ2FuaXNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBNkQ7QUFFN0QsbUNBQTRCO0FBRTVCLG9FQUFpRTtBQUNqRSwwRUFBdUU7QUFDdkUsNERBQXlEO0FBQ3pELDRFQUc2QztBQUM3QyxnRUFBeUQ7QUFFekQsOEVBQW1GO0FBb0JuRixNQUFhLG1CQUFvQixTQUFRLG1CQUFLO0lBRzVDLFlBQVksRUFBVSxFQUFFLEtBQStCO1FBQ3JELEtBQUssQ0FBQyxhQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMseUJBQXlCLENBQUM7WUFDN0IsR0FBRyxLQUFLO1lBQ1IsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjLElBQUksSUFBSTtTQUM3QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsS0FBK0I7UUFDeEQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHNCQUFZLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFO1lBQ2hFLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7WUFDeEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxLQUErQjtRQUMvRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLG9CQUFvQixDQUMxQixXQUFtQyxFQUNuQyxLQUErQjtRQUUvQixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ3ZELENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLFVBQVUsQ0FDNUMsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksS0FBSyxDQUNiLDRGQUE0RixDQUM3RixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUV0RSxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV2RCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUNiLG1EQUFtRCxlQUFlLEVBQUUsQ0FDckUsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLGlCQUFpQixDQUFDO0lBQzNCLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxpQkFBeUI7UUFDbkQsSUFBSSxxQ0FBaUIsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7WUFDL0MsU0FBUyxFQUFFLGlCQUFpQjtTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksdUJBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEtBQStCO1FBQ3pELElBQUksaURBQTJCLENBQUMsSUFBSSxFQUFFLDZCQUE2QixFQUFFO1lBQ25FLE9BQU8sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU87WUFDMUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTTtTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsS0FBK0I7UUFDOUQsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hDLElBQUksdUNBQWtCLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO2dCQUNqRCxrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCO2FBQzdDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sbUJBQW1CLENBQ3pCLFdBQW1DLEVBQ25DLEtBQStCO1FBRS9CLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLElBQUksK0JBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ3pDLFFBQVEsRUFBRSxXQUFXO2FBQ3RCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFoR0Qsa0RBZ0dDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW52aXJvbm1lbnQsIFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5cbmltcG9ydCBBcHAgZnJvbSBcIi4uLy4uL2FwcFwiO1xuXG5pbXBvcnQgeyBJZGVudGl0eUNlbnRlciB9IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL2lkZW50aXR5Q2VudGVyXCI7XG5pbXBvcnQgeyBJcGFtRGVsZWdhdGVBZG1pbiB9IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL2lwYW1EZWxlZ2F0ZUFkbWluXCI7XG5pbXBvcnQgeyBSYW1TaGFyaW5nIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvcmFtU2hhcmluZ1wiO1xuaW1wb3J0IHtcbiAgQ29zdEFsbG9jYXRpb25UYWdzLFxuICBJQ29zdEFsbG9jYXRpb25UYWdzXG59IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL2Nvc3RBbGxvY2F0aW9uVGFnc1wiO1xuaW1wb3J0IE9yZ2FuaXNhdGlvbiBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9vcmdhbmlzYXRpb25cIjtcbmltcG9ydCB7IEFjY291bnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LW9yZ2FuaXphdGlvbnNcIjtcbmltcG9ydCB7IEFjdGl2YXRlT3JnYW5pc2F0aW9uc0FjY2VzcyB9IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL29yZ2FuaXNhdGlvbnNBY2Nlc3NcIjtcblxudHlwZSBFeHRlbmRlZFN0YWNrUHJvcHMgPSBPbWl0PFN0YWNrUHJvcHMsIFwiZW52XCI+ICYge1xuICBlbnY6IFJlcXVpcmVkPFBpY2s8RW52aXJvbm1lbnQsIFwicmVnaW9uXCIgfCBcImFjY291bnRcIj4+ICZcbiAgICBQYXJ0aWFsPE9taXQ8RW52aXJvbm1lbnQsIFwicmVnaW9uXCIgfCBcImFjY291bnRcIj4+O1xufTtcblxudHlwZSBBY2NvdW50c0NvbmZpZyA9IHtcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogcmVhZG9ubHkgc3RyaW5nW10gfCBzdHJpbmc7XG59O1xuXG5pbnRlcmZhY2UgTWFuYWdlZE9yZ2FuaXNhdGlvblByb3BzIGV4dGVuZHMgRXh0ZW5kZWRTdGFja1Byb3BzIHtcbiAgb3JnYW5pc2F0aW9uTmFtZTogc3RyaW5nO1xuICBhY2NvdW50czogQWNjb3VudHNDb25maWc7XG4gIG9yZ0VtYWlsOiBzdHJpbmc7XG4gIGV4aXN0aW5nQWNjb3VudHM/OiBBY2NvdW50W107XG4gIGNvc3RBbGxvY2F0aW9uVGFnczogSUNvc3RBbGxvY2F0aW9uVGFnc1tdO1xuICBpZGVudGl0eUNlbnRlcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBNYW5hZ2VkT3JnYW5pc2F0aW9uIGV4dGVuZHMgU3RhY2sge1xuICBwcml2YXRlIG9yZ2FuaXNhdGlvbjogT3JnYW5pc2F0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIHByb3BzOiBNYW5hZ2VkT3JnYW5pc2F0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihBcHAuZ2V0SW5zdGFuY2UoKSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLmNyZWF0ZU9yZ2FuaXNhdGlvbihwcm9wcyk7XG4gICAgdGhpcy5zZXR1cE9yZ2FuaXNhdGlvbkZlYXR1cmVzKHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgaWRlbnRpdHlDZW50ZXI6IHByb3BzLmlkZW50aXR5Q2VudGVyID8/IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3JnYW5pc2F0aW9uKHByb3BzOiBNYW5hZ2VkT3JnYW5pc2F0aW9uUHJvcHMpIHtcbiAgICB0aGlzLm9yZ2FuaXNhdGlvbiA9IG5ldyBPcmdhbmlzYXRpb24odGhpcywgXCJNYW5hZ2VkT3JnYW5pc2F0aW9uXCIsIHtcbiAgICAgIG9yZ2FuaXNhdGlvbk5hbWU6IHByb3BzLm9yZ2FuaXNhdGlvbk5hbWUsXG4gICAgICBhY2NvdW50czogcHJvcHMuYWNjb3VudHMsXG4gICAgICBvcmdFbWFpbDogcHJvcHMub3JnRW1haWwsXG4gICAgICBlbnY6IHByb3BzLmVudixcbiAgICAgIGV4aXN0aW5nQWNjb3VudHM6IHByb3BzLmV4aXN0aW5nQWNjb3VudHNcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBPcmdhbmlzYXRpb25GZWF0dXJlcyhwcm9wczogTWFuYWdlZE9yZ2FuaXNhdGlvblByb3BzKSB7XG4gICAgY29uc3Qgb3JnQWNjb3VudHMgPSB0aGlzLm9yZ2FuaXNhdGlvbi5nZXRBY2NvdW50cygpO1xuICAgIGNvbnN0IHBsYXRmb3JtQWNjb3VudElkID0gdGhpcy5nZXRQbGF0Zm9ybUFjY291bnRJZChvcmdBY2NvdW50cywgcHJvcHMpO1xuXG4gICAgdGhpcy5zZXR1cElwYW1EZWxlZ2F0aW9uKHBsYXRmb3JtQWNjb3VudElkKTtcbiAgICB0aGlzLmVuYWJsZVJhbVNoYXJpbmcoKTtcbiAgICB0aGlzLmVuYWJsZVRydXN0ZWRBY2Nlc3MocHJvcHMpO1xuICAgIHRoaXMuZW5hYmxlQ29zdEFsbG9jYXRpb25UYWdzKHByb3BzKTtcbiAgICB0aGlzLnNldHVwSWRlbnRpdHlDZW50ZXIob3JnQWNjb3VudHMsIHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGxhdGZvcm1BY2NvdW50SWQoXG4gICAgb3JnQWNjb3VudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgcHJvcHM6IE1hbmFnZWRPcmdhbmlzYXRpb25Qcm9wc1xuICApIHtcbiAgICBjb25zdCBwbGF0Zm9ybUVudHJ5ID0gT2JqZWN0LmVudHJpZXMocHJvcHMuYWNjb3VudHMpLmZpbmQoXG4gICAgICAoW2tleV0pID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSBcInBsYXRmb3JtXCJcbiAgICApO1xuXG4gICAgaWYgKCFwbGF0Zm9ybUVudHJ5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdObyBwbGF0Zm9ybSBhY2NvdW50IGZvdW5kLiBQbGVhc2UgaW5jbHVkZSBhIFwicGxhdGZvcm1cIiBrZXkgaW4geW91ciBhY2NvdW50cyBjb25maWd1cmF0aW9uLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjb3VudCA9IHBsYXRmb3JtRW50cnlbMV07XG4gICAgY29uc3QgcGxhdGZvcm1BY2NvdW50ID0gQXJyYXkuaXNBcnJheShhY2NvdW50KSA/IGFjY291bnRbMF0gOiBhY2NvdW50O1xuXG4gICAgY29uc3QgcGxhdGZvcm1BY2NvdW50SWQgPSBvcmdBY2NvdW50c1twbGF0Zm9ybUFjY291bnRdO1xuXG4gICAgaWYgKCFwbGF0Zm9ybUFjY291bnRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUGxhdGZvcm0gYWNjb3VudCBJRCBub3QgZm91bmQgZm9yIGFjY291bnQgbmFtZTogJHtwbGF0Zm9ybUFjY291bnR9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGxhdGZvcm1BY2NvdW50SWQ7XG4gIH1cblxuICBwcml2YXRlIHNldHVwSXBhbURlbGVnYXRpb24ocGxhdGZvcm1BY2NvdW50SWQ6IHN0cmluZykge1xuICAgIG5ldyBJcGFtRGVsZWdhdGVBZG1pbih0aGlzLCBcIklwYW1EZWxlZ2F0ZUFkbWluXCIsIHtcbiAgICAgIGFjY291bnRJZDogcGxhdGZvcm1BY2NvdW50SWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlUmFtU2hhcmluZygpIHtcbiAgICBuZXcgUmFtU2hhcmluZyh0aGlzLCBcIlJhbVNoYXJpbmdcIik7XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZVRydXN0ZWRBY2Nlc3MocHJvcHM6IE1hbmFnZWRPcmdhbmlzYXRpb25Qcm9wcykge1xuICAgIG5ldyBBY3RpdmF0ZU9yZ2FuaXNhdGlvbnNBY2Nlc3ModGhpcywgXCJBY3RpdmF0ZU9yZ2FuaXNhdGlvbnNBY2Nlc3NcIiwge1xuICAgICAgYWNjb3VudDogcHJvcHMuZW52LmFjY291bnQsXG4gICAgICByZWdpb246IHByb3BzLmVudi5yZWdpb25cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlQ29zdEFsbG9jYXRpb25UYWdzKHByb3BzOiBNYW5hZ2VkT3JnYW5pc2F0aW9uUHJvcHMpIHtcbiAgICBpZiAocHJvcHMuY29zdEFsbG9jYXRpb25UYWdzLmxlbmd0aCA+IDApIHtcbiAgICAgIG5ldyBDb3N0QWxsb2NhdGlvblRhZ3ModGhpcywgXCJDb3N0QWxsb2NhdGlvblRhZ3NcIiwge1xuICAgICAgICBjb3N0QWxsb2NhdGlvblRhZ3M6IHByb3BzLmNvc3RBbGxvY2F0aW9uVGFnc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cElkZW50aXR5Q2VudGVyKFxuICAgIG9yZ0FjY291bnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIHByb3BzOiBNYW5hZ2VkT3JnYW5pc2F0aW9uUHJvcHNcbiAgKSB7XG4gICAgaWYgKHByb3BzLmlkZW50aXR5Q2VudGVyKSB7XG4gICAgICBuZXcgSWRlbnRpdHlDZW50ZXIodGhpcywgXCJJZGVudGl0eUNlbnRlclwiLCB7XG4gICAgICAgIGFjY291bnRzOiBvcmdBY2NvdW50c1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZE9yZ2FuaXNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvbWFuYWdlZE9yZ2FuaXNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBNkQ7QUFFN0QsbUNBQTRCO0FBRTVCLGdGQUE2RTtBQUM3RSxvRUFBaUU7QUFDakUsMEVBQXVFO0FBQ3ZFLDREQUF5RDtBQUN6RCw0RUFHNkM7QUFDN0MsZ0VBQXlEO0FBRXpELDhFQUFtRjtBQXlCbkYsTUFBYSxtQkFBb0IsU0FBUSxtQkFBSztJQUc1QyxZQUFZLEVBQVUsRUFBRSxLQUErQjtRQUNyRCxLQUFLLENBQUMsYUFBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1lBQzdCLEdBQUcsS0FBSztZQUNSLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYyxJQUFJLElBQUk7U0FDN0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQStCO1FBQ3hELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxzQkFBWSxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUNoRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1lBQ3hDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2QsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtTQUN6QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8seUJBQXlCLENBQUMsS0FBK0I7UUFDL0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztR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Q0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxlQUFlLEVBQUUsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFakUsSUFBSSwyQ0FBb0IsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUU7WUFDckQsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTztZQUMxQixNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1lBQ3hCLEdBQUcsUUFBUTtTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWpIRCxrREFpSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnZpcm9ubWVudCwgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuaW1wb3J0IEFwcCBmcm9tIFwiLi4vLi4vYXBwXCI7XG5cbmltcG9ydCB7IEJhY2t1cEdsb2JhbFNldHRpbmdzIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvYmFja3VwR2xvYmFsU2V0dGluZ3NcIjtcbmltcG9ydCB7IElkZW50aXR5Q2VudGVyIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaWRlbnRpdHlDZW50ZXJcIjtcbmltcG9ydCB7IElwYW1EZWxlZ2F0ZUFkbWluIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaXBhbURlbGVnYXRlQWRtaW5cIjtcbmltcG9ydCB7IFJhbVNoYXJpbmcgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9yYW1TaGFyaW5nXCI7XG5pbXBvcnQge1xuICBDb3N0QWxsb2NhdGlvblRhZ3MsXG4gIElDb3N0QWxsb2NhdGlvblRhZ3Ncbn0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvY29zdEFsbG9jYXRpb25UYWdzXCI7XG5pbXBvcnQgT3JnYW5pc2F0aW9uIGZyb20gXCIuLi8uLi9jb25maWcvYXdzL29yZ2FuaXNhdGlvblwiO1xuaW1wb3J0IHsgQWNjb3VudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtb3JnYW5pemF0aW9uc1wiO1xuaW1wb3J0IHsgQWN0aXZhdGVPcmdhbmlzYXRpb25zQWNjZXNzIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3Mvb3JnYW5pc2F0aW9uc0FjY2Vzc1wiO1xuXG50eXBlIEV4dGVuZGVkU3RhY2tQcm9wcyA9IE9taXQ8U3RhY2tQcm9wcywgXCJlbnZcIj4gJiB7XG4gIGVudjogUmVxdWlyZWQ8UGljazxFbnZpcm9ubWVudCwgXCJyZWdpb25cIiB8IFwiYWNjb3VudFwiPj4gJlxuICAgIFBhcnRpYWw8T21pdDxFbnZpcm9ubWVudCwgXCJyZWdpb25cIiB8IFwiYWNjb3VudFwiPj47XG59O1xuXG50eXBlIEFjY291bnRzQ29uZmlnID0ge1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiByZWFkb25seSBzdHJpbmdbXSB8IHN0cmluZztcbn07XG5cbmludGVyZmFjZSBNYW5hZ2VkT3JnYW5pc2F0aW9uUHJvcHMgZXh0ZW5kcyBFeHRlbmRlZFN0YWNrUHJvcHMge1xuICBvcmdhbmlzYXRpb25OYW1lOiBzdHJpbmc7XG4gIGFjY291bnRzOiBBY2NvdW50c0NvbmZpZztcbiAgb3JnRW1haWw6IHN0cmluZztcbiAgZXhpc3RpbmdBY2NvdW50cz86IEFjY291bnRbXTtcbiAgY29zdEFsbG9jYXRpb25UYWdzOiBJQ29zdEFsbG9jYXRpb25UYWdzW107XG4gIGlkZW50aXR5Q2VudGVyPzogYm9vbGVhbjtcbiAgYmFja3VwU2V0dGluZ3M/OiB7XG4gICAgZW5hYmxlQ3Jvc3NBY2NvdW50QmFja3VwPzogYm9vbGVhbjtcbiAgICBlbmFibGVEZWxlZ2F0ZWRBZG1pbmlzdHJhdG9yPzogYm9vbGVhbjtcbiAgICBlbmFibGVNcGE/OiBib29sZWFuO1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTWFuYWdlZE9yZ2FuaXNhdGlvbiBleHRlbmRzIFN0YWNrIHtcbiAgcHJpdmF0ZSBvcmdhbmlzYXRpb246IE9yZ2FuaXNhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBwcm9wczogTWFuYWdlZE9yZ2FuaXNhdGlvblByb3BzKSB7XG4gICAgc3VwZXIoQXBwLmdldEluc3RhbmNlKCksIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5jcmVhdGVPcmdhbmlzYXRpb24ocHJvcHMpO1xuICAgIHRoaXMuc2V0dXBPcmdhbmlzYXRpb25GZWF0dXJlcyh7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGlkZW50aXR5Q2VudGVyOiBwcm9wcy5pZGVudGl0eUNlbnRlciA/PyB0cnVlXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU9yZ2FuaXNhdGlvbihwcm9wczogTWFuYWdlZE9yZ2FuaXNhdGlvblByb3BzKSB7XG4gICAgdGhpcy5vcmdhbmlzYXRpb24gPSBuZXcgT3JnYW5pc2F0aW9uKHRoaXMsIFwiTWFuYWdlZE9yZ2FuaXNhdGlvblwiLCB7XG4gICAgICBvcmdhbmlzYXRpb25OYW1lOiBwcm9wcy5vcmdhbmlzYXRpb25OYW1lLFxuICAgICAgYWNjb3VudHM6IHByb3BzLmFjY291bnRzLFxuICAgICAgb3JnRW1haWw6IHByb3BzLm9yZ0VtYWlsLFxuICAgICAgZW52OiBwcm9wcy5lbnYsXG4gICAgICBleGlzdGluZ0FjY291bnRzOiBwcm9wcy5leGlzdGluZ0FjY291bnRzXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwT3JnYW5pc2F0aW9uRmVhdHVyZXMocHJvcHM6IE1hbmFnZWRPcmdhbmlzYXRpb25Qcm9wcykge1xuICAgIGNvbnN0IG9yZ0FjY291bnRzID0gdGhpcy5vcmdhbmlzYXRpb24uZ2V0QWNjb3VudHMoKTtcbiAgICBjb25zdCBwbGF0Zm9ybUFjY291bnRJZCA9IHRoaXMuZ2V0UGxhdGZvcm1BY2NvdW50SWQob3JnQWNjb3VudHMsIHByb3BzKTtcblxuICAgIHRoaXMuc2V0dXBJcGFtRGVsZWdhdGlvbihwbGF0Zm9ybUFjY291bnRJZCk7XG4gICAgdGhpcy5lbmFibGVSYW1TaGFyaW5nKCk7XG4gICAgdGhpcy5lbmFibGVUcnVzdGVkQWNjZXNzKHByb3BzKTtcbiAgICB0aGlzLmVuYWJsZUNvc3RBbGxvY2F0aW9uVGFncyhwcm9wcyk7XG4gICAgdGhpcy5zZXR1cElkZW50aXR5Q2VudGVyKG9yZ0FjY291bnRzLCBwcm9wcyk7XG4gICAgdGhpcy5zZXR1cEJhY2t1cEdsb2JhbFNldHRpbmdzKHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGxhdGZvcm1BY2NvdW50SWQoXG4gICAgb3JnQWNjb3VudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgcHJvcHM6IE1hbmFnZWRPcmdhbmlzYXRpb25Qcm9wc1xuICApIHtcbiAgICBjb25zdCBwbGF0Zm9ybUVudHJ5ID0gT2JqZWN0LmVudHJpZXMocHJvcHMuYWNjb3VudHMpLmZpbmQoXG4gICAgICAoW2tleV0pID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSBcInBsYXRmb3JtXCJcbiAgICApO1xuXG4gICAgaWYgKCFwbGF0Zm9ybUVudHJ5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdObyBwbGF0Zm9ybSBhY2NvdW50IGZvdW5kLiBQbGVhc2UgaW5jbHVkZSBhIFwicGxhdGZvcm1cIiBrZXkgaW4geW91ciBhY2NvdW50cyBjb25maWd1cmF0aW9uLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjb3VudCA9IHBsYXRmb3JtRW50cnlbMV07XG4gICAgY29uc3QgcGxhdGZvcm1BY2NvdW50ID0gQXJyYXkuaXNBcnJheShhY2NvdW50KSA/IGFjY291bnRbMF0gOiBhY2NvdW50O1xuXG4gICAgY29uc3QgcGxhdGZvcm1BY2NvdW50SWQgPSBvcmdBY2NvdW50c1twbGF0Zm9ybUFjY291bnRdO1xuXG4gICAgaWYgKCFwbGF0Zm9ybUFjY291bnRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUGxhdGZvcm0gYWNjb3VudCBJRCBub3QgZm91bmQgZm9yIGFjY291bnQgbmFtZTogJHtwbGF0Zm9ybUFjY291bnR9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGxhdGZvcm1BY2NvdW50SWQ7XG4gIH1cblxuICBwcml2YXRlIHNldHVwSXBhbURlbGVnYXRpb24ocGxhdGZvcm1BY2NvdW50SWQ6IHN0cmluZykge1xuICAgIG5ldyBJcGFtRGVsZWdhdGVBZG1pbih0aGlzLCBcIklwYW1EZWxlZ2F0ZUFkbWluXCIsIHtcbiAgICAgIGFjY291bnRJZDogcGxhdGZvcm1BY2NvdW50SWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlUmFtU2hhcmluZygpIHtcbiAgICBuZXcgUmFtU2hhcmluZyh0aGlzLCBcIlJhbVNoYXJpbmdcIik7XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZVRydXN0ZWRBY2Nlc3MocHJvcHM6IE1hbmFnZWRPcmdhbmlzYXRpb25Qcm9wcykge1xuICAgIG5ldyBBY3RpdmF0ZU9yZ2FuaXNhdGlvbnNBY2Nlc3ModGhpcywgXCJBY3RpdmF0ZU9yZ2FuaXNhdGlvbnNBY2Nlc3NcIiwge1xuICAgICAgYWNjb3VudDogcHJvcHMuZW52LmFjY291bnQsXG4gICAgICByZWdpb246IHByb3BzLmVudi5yZWdpb25cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlQ29zdEFsbG9jYXRpb25UYWdzKHByb3BzOiBNYW5hZ2VkT3JnYW5pc2F0aW9uUHJvcHMpIHtcbiAgICBpZiAocHJvcHMuY29zdEFsbG9jYXRpb25UYWdzLmxlbmd0aCA+IDApIHtcbiAgICAgIG5ldyBDb3N0QWxsb2NhdGlvblRhZ3ModGhpcywgXCJDb3N0QWxsb2NhdGlvblRhZ3NcIiwge1xuICAgICAgICBjb3N0QWxsb2NhdGlvblRhZ3M6IHByb3BzLmNvc3RBbGxvY2F0aW9uVGFnc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cElkZW50aXR5Q2VudGVyKFxuICAgIG9yZ0FjY291bnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIHByb3BzOiBNYW5hZ2VkT3JnYW5pc2F0aW9uUHJvcHNcbiAgKSB7XG4gICAgaWYgKHByb3BzLmlkZW50aXR5Q2VudGVyKSB7XG4gICAgICBuZXcgSWRlbnRpdHlDZW50ZXIodGhpcywgXCJJZGVudGl0eUNlbnRlclwiLCB7XG4gICAgICAgIGFjY291bnRzOiBvcmdBY2NvdW50c1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEJhY2t1cEdsb2JhbFNldHRpbmdzKHByb3BzOiBNYW5hZ2VkT3JnYW5pc2F0aW9uUHJvcHMpIHtcbiAgICBjb25zdCBkZWZhdWx0U2V0dGluZ3MgPSB7XG4gICAgICBlbmFibGVDcm9zc0FjY291bnRCYWNrdXA6IHRydWUsXG4gICAgICBlbmFibGVEZWxlZ2F0ZWRBZG1pbmlzdHJhdG9yOiB0cnVlLFxuICAgICAgZW5hYmxlTXBhOiBmYWxzZVxuICAgIH07XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IHsgLi4uZGVmYXVsdFNldHRpbmdzLCAuLi5wcm9wcy5iYWNrdXBTZXR0aW5ncyB9O1xuXG4gICAgbmV3IEJhY2t1cEdsb2JhbFNldHRpbmdzKHRoaXMsIFwiQmFja3VwR2xvYmFsU2V0dGluZ3NcIiwge1xuICAgICAgYWNjb3VudDogcHJvcHMuZW52LmFjY291bnQsXG4gICAgICByZWdpb246IHByb3BzLmVudi5yZWdpb24sXG4gICAgICAuLi5zZXR0aW5nc1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Construct } from "constructs";
|
|
2
|
+
import { IBucket } from "aws-cdk-lib/aws-s3";
|
|
2
3
|
import App from "../../app";
|
|
3
4
|
import { Secret } from "../../resources/aws/secrets";
|
|
5
|
+
import { BackupVaultTier } from "../../resources/aws/storage";
|
|
4
6
|
import { Connections, IConnectable, IVpc } from "aws-cdk-lib/aws-ec2";
|
|
5
7
|
import { IInstanceEngine, IClusterEngine } from "aws-cdk-lib/aws-rds";
|
|
6
8
|
type BaseStorageProps = {
|
|
@@ -51,4 +53,46 @@ export declare class Storage extends Construct implements IConnectable {
|
|
|
51
53
|
getHostPort(): string;
|
|
52
54
|
getDatabaseName(): string;
|
|
53
55
|
}
|
|
56
|
+
type S3BucketType = "private" | "website" | "publicRead";
|
|
57
|
+
type BaseS3Props = {
|
|
58
|
+
backupVaultTier?: BackupVaultTier;
|
|
59
|
+
versioned?: boolean;
|
|
60
|
+
encryption?: "AES256" | "KMS";
|
|
61
|
+
kmsKeyArn?: string;
|
|
62
|
+
};
|
|
63
|
+
export interface PrivateS3Props extends BaseS3Props {
|
|
64
|
+
bucketType: "private";
|
|
65
|
+
publicReadAccess?: boolean;
|
|
66
|
+
}
|
|
67
|
+
export interface WebsiteS3Props extends BaseS3Props {
|
|
68
|
+
bucketType: "website";
|
|
69
|
+
websiteIndexDocument?: string;
|
|
70
|
+
websiteErrorDocument?: string;
|
|
71
|
+
cors?: Array<{
|
|
72
|
+
allowedOrigins: string[];
|
|
73
|
+
allowedMethods: string[];
|
|
74
|
+
}>;
|
|
75
|
+
}
|
|
76
|
+
export interface PublicReadS3Props extends BaseS3Props {
|
|
77
|
+
bucketType: "publicRead";
|
|
78
|
+
}
|
|
79
|
+
export type IS3Props = PrivateS3Props | WebsiteS3Props | PublicReadS3Props;
|
|
80
|
+
export declare class S3Factory {
|
|
81
|
+
static build<T extends IS3Props>(id: string, props: T): (app: App, scope: Construct) => S3Storage;
|
|
82
|
+
}
|
|
83
|
+
export declare class S3Storage extends Construct {
|
|
84
|
+
id: string;
|
|
85
|
+
scope: Construct;
|
|
86
|
+
private bucket;
|
|
87
|
+
private bucketType;
|
|
88
|
+
constructor(scope: Construct, id: string, props: IS3Props);
|
|
89
|
+
addS3Bucket(props: IS3Props): void;
|
|
90
|
+
private addPrivateBucket;
|
|
91
|
+
private addWebsiteBucket;
|
|
92
|
+
private addPublicReadBucket;
|
|
93
|
+
getBucket(): IBucket;
|
|
94
|
+
getBucketName(): string;
|
|
95
|
+
getBucketArn(): string;
|
|
96
|
+
getBucketType(): S3BucketType;
|
|
97
|
+
}
|
|
54
98
|
export {};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Storage = exports.StorageFactory = void 0;
|
|
3
|
+
exports.S3Storage = exports.S3Factory = exports.Storage = exports.StorageFactory = void 0;
|
|
4
4
|
const constructs_1 = require("constructs");
|
|
5
5
|
const database_1 = require("../../resources/aws/database");
|
|
6
6
|
const rdsAuroraGlobal_1 = require("../../resources/aws/database/rdsAuroraGlobal");
|
|
7
|
+
const storage_1 = require("../../resources/aws/storage");
|
|
7
8
|
class StorageFactory {
|
|
8
9
|
static build(id, props) {
|
|
9
10
|
return (app, scope) => {
|
|
@@ -102,4 +103,77 @@ class Storage extends constructs_1.Construct {
|
|
|
102
103
|
}
|
|
103
104
|
}
|
|
104
105
|
exports.Storage = Storage;
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3Mvc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwyQ0FBdUM7QUFHdkMsMkRBSXNDO0FBQ3RDLGtGQUErRTtBQTZDL0UsTUFBYSxjQUFjO0lBQ3pCLE1BQU0sQ0FBQyxLQUFLLENBQTBCLEVBQVUsRUFBRSxLQUFRO1FBQ3hELE9BQU8sQ0FBQyxHQUFRLEVBQUUsS0FBZ0IsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sWUFBWSxHQUFHO2dCQUNuQixHQUFJLEtBQWE7Z0JBQ2pCLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFTO2FBQzNDLENBQUM7WUFDUCxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBVkQsd0NBVUM7QUFFRCxNQUFhLE9BQVEsU0FBUSxzQkFBUztJQVVwQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQW9CO1FBQzdCLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN0QixNQUFNO1lBQ1IsS0FBSyxjQUFj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QVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUMvQyxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUEzR0QsMEJBMkdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmltcG9ydCBBcHAgZnJvbSBcIi4uLy4uL2FwcFwiO1xuaW1wb3J0IHtcbiAgUmRzQXVyb3JhLFxuICBSZHNGcmVlVGllcixcbiAgUmRzSW5zdGFuY2Vcbn0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvZGF0YWJhc2VcIjtcbmltcG9ydCB7IFJkc0F1cm9yYUdsb2JhbCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL3Jkc0F1cm9yYUdsb2JhbFwiO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuXG5pbXBvcnQgeyBDb25uZWN0aW9ucywgSUNvbm5lY3RhYmxlLCBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IElJbnN0YW5jZUVuZ2luZSwgSUNsdXN0ZXJFbmdpbmUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJkc1wiO1xuXG50eXBlIFN0b3JhZ2VUeXBlID0gXCJBdXJvcmFcIiB8IFwiSW5zdGFuY2VcIiB8IFwiRnJlZVRpZXJcIiB8IFwiR2xvYmFsQXVyb3JhXCI7XG5cbnR5cGUgQmFzZVN0b3JhZ2VQcm9wcyA9IHtcbiAgdnBjPzogSVZwYztcbiAgZGF0YWJhc2VOYW1lOiBzdHJpbmc7XG4gIGluc3RhbmNlVHlwZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVyb3JhU3RvcmFnZVByb3BzIGV4dGVuZHMgQmFzZVN0b3JhZ2VQcm9wcyB7XG4gIHR5cGU6IFwiQXVyb3JhXCI7XG4gIGVuZ2luZT86IElDbHVzdGVyRW5naW5lO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdsb2JhbEF1cm9yYVN0b3JhZ2VQcm9wcyBleHRlbmRzIEJhc2VTdG9yYWdlUHJvcHMge1xuICB0eXBlOiBcIkdsb2JhbEF1cm9yYVwiO1xuICBwcmltYXJ5UmVnaW9uOiBzdHJpbmc7XG4gIGdsb2JhbENsdXN0ZXJJZGVudGlmaWVyPzogc3RyaW5nO1xuICBlbmdpbmU/OiBJQ2x1c3RlckVuZ2luZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZVN0b3JhZ2VQcm9wcyBleHRlbmRzIEJhc2VTdG9yYWdlUHJvcHMge1xuICB0eXBlOiBcIkluc3RhbmNlXCI7XG4gIGVuZ2luZT86IElJbnN0YW5jZUVuZ2luZTtcbiAgYWxsb2NhdGVkU3RvcmFnZT86IG51bWJlcjtcbiAgcG9ydD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGcmVlVGllclN0b3JhZ2VQcm9wcyBleHRlbmRzIEJhc2VTdG9yYWdlUHJvcHMge1xuICB0eXBlOiBcIkZyZWVUaWVyXCI7XG4gIGVuZ2luZT86IElJbnN0YW5jZUVuZ2luZTtcbiAgcG9ydD86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgSVN0b3JhZ2VQcm9wcyA9XG4gIHwgQXVyb3JhU3RvcmFnZVByb3BzXG4gIHwgSW5zdGFuY2VTdG9yYWdlUHJvcHNcbiAgfCBHbG9iYWxBdXJvcmFTdG9yYWdlUHJvcHNcbiAgfCBGcmVlVGllclN0b3JhZ2VQcm9wcztcblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VGYWN0b3J5IHtcbiAgc3RhdGljIGJ1aWxkPFQgZXh0ZW5kcyBJU3RvcmFnZVByb3BzPihpZDogc3RyaW5nLCBwcm9wczogVCkge1xuICAgIHJldHVybiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IHtcbiAgICAgIGNvbnN0IHN0b3JhZ2VQcm9wcyA9IHtcbiAgICAgICAgLi4uKHByb3BzIGFzIGFueSksXG4gICAgICAgIHZwYzogKHByb3BzLnZwYyB8fCBhcHAuZ2V0RGVmYXVsdFZwYygpKSBhcyBJVnBjXG4gICAgICB9IGFzIFQ7XG4gICAgICByZXR1cm4gbmV3IFN0b3JhZ2Uoc2NvcGUsIGlkLCBzdG9yYWdlUHJvcHMpO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2UgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ29ubmVjdGFibGUge1xuICBwdWJsaWMgaWQ6IHN0cmluZztcbiAgcHVibGljIHNjb3BlOiBDb25zdHJ1Y3Q7XG4gIHB1YmxpYyB2cGM6IElWcGM7XG5cbiAgcHVibGljIGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcblxuICBwcml2YXRlIGRhdGFiYXNlTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIGRhdGFiYXNlOiBSZHNBdXJvcmEgfCBSZHNJbnN0YW5jZSB8IFJkc0ZyZWVUaWVyIHwgUmRzQXVyb3JhR2xvYmFsO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJU3RvcmFnZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuXG4gICAgdGhpcy5kYXRhYmFzZU5hbWUgPSBwcm9wcy5kYXRhYmFzZU5hbWU7XG4gICAgdGhpcy5hZGRTdG9yYWdlKHByb3BzKTtcbiAgfVxuXG4gIGFkZFN0b3JhZ2UocHJvcHM6IElTdG9yYWdlUHJvcHMpIHtcbiAgICBzd2l0Y2ggKHByb3BzLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJBdXJvcmFcIjpcbiAgICAgICAgdGhpcy5hZGRBdXJvcmEocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJHbG9iYWxBdXJvcmFcIjpcbiAgICAgICAgdGhpcy5hZGRBdXJvcmFHbG9iYWwocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJJbnN0YW5jZVwiOlxuICAgICAgICB0aGlzLmFkZFJkc0luc3RhbmNlKHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiRnJlZVRpZXJcIjpcbiAgICAgICAgdGhpcy5hZGRSZHNGcmVlVGllcihwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRXhoYXVzdGl2ZW5lc3MgY2hlY2tcbiAgICAgICAgY29uc3QgX2V4aGF1c3RpdmU6IG5ldmVyID0gcHJvcHM7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgc3RvcmFnZSB0eXBlICR7KHByb3BzIGFzIGFueSkudHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEF1cm9yYShwcm9wczogQXVyb3JhU3RvcmFnZVByb3BzKSB7XG4gICAgaWYgKCFwcm9wcy52cGMpIHRocm93IG5ldyBFcnJvcihcIlZQQyBpcyByZXF1aXJlZCBmb3IgQXVyb3JhIGRhdGFiYXNlXCIpO1xuICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgUmRzQXVyb3JhKHRoaXMsIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1SZHNgLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIGRhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgZW5naW5lOiBwcm9wcy5lbmdpbmVcbiAgICB9KTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5kYXRhYmFzZS5jb25uZWN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgYWRkQXVyb3JhR2xvYmFsKHByb3BzOiBHbG9iYWxBdXJvcmFTdG9yYWdlUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLnZwYylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlZQQyBpcyByZXF1aXJlZCBmb3IgR2xvYmFsIEF1cm9yYSBkYXRhYmFzZVwiKTtcbiAgICBpZiAoIXByb3BzLnByaW1hcnlSZWdpb24pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcmltYXJ5UmVnaW9uIGlzIHJlcXVpcmVkIGZvciBHbG9iYWwgQXVyb3JhIGRhdGFiYXNlXCIpO1xuXG4gICAgdGhpcy5kYXRhYmFzZSA9IG5ldyBSZHNBdXJvcmFHbG9iYWwoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVJkc0dsb2JhbGAsXG4gICAgICB7XG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgcHJpbWFyeVJlZ2lvbjogcHJvcHMucHJpbWFyeVJlZ2lvbixcbiAgICAgICAgZ2xvYmFsQ2x1c3RlcklkZW50aWZpZXI6IHByb3BzLmdsb2JhbENsdXN0ZXJJZGVudGlmaWVyLFxuICAgICAgICBlbmdpbmU6IHByb3BzLmVuZ2luZVxuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuZGF0YWJhc2UuY29ubmVjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGFkZFJkc0luc3RhbmNlKHByb3BzOiBJbnN0YW5jZVN0b3JhZ2VQcm9wcykge1xuICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgUmRzSW5zdGFuY2UodGhpcywgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVJkc2AsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgZGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICBpbnN0YW5jZVR5cGU6IHByb3BzLmluc3RhbmNlVHlwZSxcbiAgICAgIGFsbG9jYXRlZFN0b3JhZ2U6IHByb3BzLmFsbG9jYXRlZFN0b3JhZ2UsXG4gICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgZW5naW5lOiBwcm9wcy5lbmdpbmVcbiAgICB9KTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5kYXRhYmFzZS5jb25uZWN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmRzRnJlZVRpZXIocHJvcHM6IEZyZWVUaWVyU3RvcmFnZVByb3BzKSB7XG4gICAgdGhpcy5kYXRhYmFzZSA9IG5ldyBSZHNGcmVlVGllcih0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UmRzYCwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgIHBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICBlbmdpbmU6IHByb3BzLmVuZ2luZVxuICAgIH0pO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmRhdGFiYXNlLmNvbm5lY3Rpb25zO1xuICB9XG5cbiAgZ2V0Q3JlZGVudGlhbHMoKTogU2VjcmV0IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5nZXRDcmVkZW50aWFscygpO1xuICB9XG5cbiAgZ2V0SG9zdEVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuZ2V0SG9zdEVuZHBvaW50KCk7XG4gIH1cblxuICBnZXRIb3N0UG9ydCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmdldEhvc3RQb3J0KCk7XG4gIH1cblxuICBnZXREYXRhYmFzZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZU5hbWU7XG4gIH1cbn1cbiJdfQ==
|
|
106
|
+
class S3Factory {
|
|
107
|
+
static build(id, props) {
|
|
108
|
+
return (app, scope) => {
|
|
109
|
+
return new S3Storage(scope, id, props);
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.S3Factory = S3Factory;
|
|
114
|
+
class S3Storage extends constructs_1.Construct {
|
|
115
|
+
constructor(scope, id, props) {
|
|
116
|
+
super(scope, id);
|
|
117
|
+
this.id = id;
|
|
118
|
+
this.scope = scope;
|
|
119
|
+
this.bucketType = props.bucketType;
|
|
120
|
+
this.addS3Bucket(props);
|
|
121
|
+
}
|
|
122
|
+
addS3Bucket(props) {
|
|
123
|
+
switch (props.bucketType) {
|
|
124
|
+
case "private":
|
|
125
|
+
this.addPrivateBucket(props);
|
|
126
|
+
break;
|
|
127
|
+
case "website":
|
|
128
|
+
this.addWebsiteBucket(props);
|
|
129
|
+
break;
|
|
130
|
+
case "publicRead":
|
|
131
|
+
this.addPublicReadBucket(props);
|
|
132
|
+
break;
|
|
133
|
+
default:
|
|
134
|
+
// Exhaustiveness check
|
|
135
|
+
const _exhaustive = props;
|
|
136
|
+
throw new Error(`Unsupported S3 bucket type ${props.bucketType}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
addPrivateBucket(props) {
|
|
140
|
+
this.bucket = new storage_1.S3Bucket(this, `${this.id}Bucket`, {
|
|
141
|
+
backupVaultTier: props.backupVaultTier,
|
|
142
|
+
versioned: props.versioned,
|
|
143
|
+
encryption: props.encryption,
|
|
144
|
+
encryptionKey: props.kmsKeyArn ? undefined : undefined, // KMS key handling
|
|
145
|
+
publicReadAccess: props.publicReadAccess
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
addWebsiteBucket(props) {
|
|
149
|
+
this.bucket = new storage_1.S3WebsiteBucket(this, `${this.id}Bucket`, {
|
|
150
|
+
backupVaultTier: props.backupVaultTier,
|
|
151
|
+
versioned: props.versioned,
|
|
152
|
+
encryption: props.encryption,
|
|
153
|
+
websiteIndexDocument: props.websiteIndexDocument,
|
|
154
|
+
websiteErrorDocument: props.websiteErrorDocument,
|
|
155
|
+
cors: props.cors
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
addPublicReadBucket(props) {
|
|
159
|
+
this.bucket = new storage_1.S3PublicReadBucket(this, `${this.id}Bucket`, {
|
|
160
|
+
backupVaultTier: props.backupVaultTier,
|
|
161
|
+
versioned: props.versioned,
|
|
162
|
+
encryption: props.encryption
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
getBucket() {
|
|
166
|
+
return this.bucket;
|
|
167
|
+
}
|
|
168
|
+
getBucketName() {
|
|
169
|
+
return this.bucket.bucketName;
|
|
170
|
+
}
|
|
171
|
+
getBucketArn() {
|
|
172
|
+
return this.bucket.bucketArn;
|
|
173
|
+
}
|
|
174
|
+
getBucketType() {
|
|
175
|
+
return this.bucketType;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
exports.S3Storage = S3Storage;
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3Mvc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwyQ0FBdUM7QUFJdkMsMkRBSXNDO0FBQ3RDLGtGQUErRTtBQUUvRSx5REFLcUM7QUE0Q3JDLE1BQWEsY0FBYztJQUN6QixNQUFNLENBQUMsS0FBSyxDQUEwQixFQUFVLEVBQUUsS0FBUTtRQUN4RCxPQUFPLENBQUMsR0FBUSxFQUFFLEtBQWdCLEVBQUUsRUFBRTtZQUNwQyxNQUFNLFlBQVksR0FBRztnQkFDbkIsR0FBSSxLQUFhO2dCQUNqQixHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBUzthQUMzQyxDQUFDO1lBQ1AsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQVZELHdDQVVDO0FBRUQsTUFBYSxPQUFRLFNBQVEsc0JBQVM7SUFVcEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFvQjtRQUM1RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFvQjtRQUM3QixRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEIsTUFBTTtZ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RSxLQUFLLENBQUMsb0JBQW9CO1lBQ2hELElBQUksRUFBRSxLQUFLLENBQUMsSUFBVztTQUN4QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsS0FBd0I7UUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLDRCQUFrQixDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRTtZQUM3RCxlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7WUFDdEMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBaUI7U0FDcEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUE5RUQsOEJBOEVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuXG5pbXBvcnQgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcbmltcG9ydCB7XG4gIFJkc0F1cm9yYSxcbiAgUmRzRnJlZVRpZXIsXG4gIFJkc0luc3RhbmNlXG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlXCI7XG5pbXBvcnQgeyBSZHNBdXJvcmFHbG9iYWwgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9yZHNBdXJvcmFHbG9iYWxcIjtcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3NlY3JldHNcIjtcbmltcG9ydCB7XG4gIFMzQnVja2V0LFxuICBTM1dlYnNpdGVCdWNrZXQsXG4gIFMzUHVibGljUmVhZEJ1Y2tldCxcbiAgQmFja3VwVmF1bHRUaWVyXG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3N0b3JhZ2VcIjtcblxuaW1wb3J0IHsgQ29ubmVjdGlvbnMsIElDb25uZWN0YWJsZSwgSVZwYyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBJSW5zdGFuY2VFbmdpbmUsIElDbHVzdGVyRW5naW5lIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIjtcblxudHlwZSBTdG9yYWdlVHlwZSA9IFwiQXVyb3JhXCIgfCBcIkluc3RhbmNlXCIgfCBcIkZyZWVUaWVyXCIgfCBcIkdsb2JhbEF1cm9yYVwiO1xuXG50eXBlIEJhc2VTdG9yYWdlUHJvcHMgPSB7XG4gIHZwYz86IElWcGM7XG4gIGRhdGFiYXNlTmFtZTogc3RyaW5nO1xuICBpbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1cm9yYVN0b3JhZ2VQcm9wcyBleHRlbmRzIEJhc2VTdG9yYWdlUHJvcHMge1xuICB0eXBlOiBcIkF1cm9yYVwiO1xuICBlbmdpbmU/OiBJQ2x1c3RlckVuZ2luZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHbG9iYWxBdXJvcmFTdG9yYWdlUHJvcHMgZXh0ZW5kcyBCYXNlU3RvcmFnZVByb3BzIHtcbiAgdHlwZTogXCJHbG9iYWxBdXJvcmFcIjtcbiAgcHJpbWFyeVJlZ2lvbjogc3RyaW5nO1xuICBnbG9iYWxDbHVzdGVySWRlbnRpZmllcj86IHN0cmluZztcbiAgZW5naW5lPzogSUNsdXN0ZXJFbmdpbmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VTdG9yYWdlUHJvcHMgZXh0ZW5kcyBCYXNlU3RvcmFnZVByb3BzIHtcbiAgdHlwZTogXCJJbnN0YW5jZVwiO1xuICBlbmdpbmU/OiBJSW5zdGFuY2VFbmdpbmU7XG4gIGFsbG9jYXRlZFN0b3JhZ2U/OiBudW1iZXI7XG4gIHBvcnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnJlZVRpZXJTdG9yYWdlUHJvcHMgZXh0ZW5kcyBCYXNlU3RvcmFnZVByb3BzIHtcbiAgdHlwZTogXCJGcmVlVGllclwiO1xuICBlbmdpbmU/OiBJSW5zdGFuY2VFbmdpbmU7XG4gIHBvcnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIElTdG9yYWdlUHJvcHMgPVxuICB8IEF1cm9yYVN0b3JhZ2VQcm9wc1xuICB8IEluc3RhbmNlU3RvcmFnZVByb3BzXG4gIHwgR2xvYmFsQXVyb3JhU3RvcmFnZVByb3BzXG4gIHwgRnJlZVRpZXJTdG9yYWdlUHJvcHM7XG5cbmV4cG9ydCBjbGFzcyBTdG9yYWdlRmFjdG9yeSB7XG4gIHN0YXRpYyBidWlsZDxUIGV4dGVuZHMgSVN0b3JhZ2VQcm9wcz4oaWQ6IHN0cmluZywgcHJvcHM6IFQpIHtcbiAgICByZXR1cm4gKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiB7XG4gICAgICBjb25zdCBzdG9yYWdlUHJvcHMgPSB7XG4gICAgICAgIC4uLihwcm9wcyBhcyBhbnkpLFxuICAgICAgICB2cGM6IChwcm9wcy52cGMgfHwgYXBwLmdldERlZmF1bHRWcGMoKSkgYXMgSVZwY1xuICAgICAgfSBhcyBUO1xuICAgICAgcmV0dXJuIG5ldyBTdG9yYWdlKHNjb3BlLCBpZCwgc3RvcmFnZVByb3BzKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdG9yYWdlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHVibGljIGlkOiBzdHJpbmc7XG4gIHB1YmxpYyBzY29wZTogQ29uc3RydWN0O1xuICBwdWJsaWMgdnBjOiBJVnBjO1xuXG4gIHB1YmxpYyBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG5cbiAgcHJpdmF0ZSBkYXRhYmFzZU5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBkYXRhYmFzZTogUmRzQXVyb3JhIHwgUmRzSW5zdGFuY2UgfCBSZHNGcmVlVGllciB8IFJkc0F1cm9yYUdsb2JhbDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSVN0b3JhZ2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcblxuICAgIHRoaXMuZGF0YWJhc2VOYW1lID0gcHJvcHMuZGF0YWJhc2VOYW1lO1xuICAgIHRoaXMuYWRkU3RvcmFnZShwcm9wcyk7XG4gIH1cblxuICBhZGRTdG9yYWdlKHByb3BzOiBJU3RvcmFnZVByb3BzKSB7XG4gICAgc3dpdGNoIChwcm9wcy50eXBlKSB7XG4gICAgICBjYXNlIFwiQXVyb3JhXCI6XG4gICAgICAgIHRoaXMuYWRkQXVyb3JhKHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiR2xvYmFsQXVyb3JhXCI6XG4gICAgICAgIHRoaXMuYWRkQXVyb3JhR2xvYmFsKHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiSW5zdGFuY2VcIjpcbiAgICAgICAgdGhpcy5hZGRSZHNJbnN0YW5jZShwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkZyZWVUaWVyXCI6XG4gICAgICAgIHRoaXMuYWRkUmRzRnJlZVRpZXIocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIEV4aGF1c3RpdmVuZXNzIGNoZWNrXG4gICAgICAgIGNvbnN0IF9leGhhdXN0aXZlOiBuZXZlciA9IHByb3BzO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHN0b3JhZ2UgdHlwZSAkeyhwcm9wcyBhcyBhbnkpLnR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRBdXJvcmEocHJvcHM6IEF1cm9yYVN0b3JhZ2VQcm9wcykge1xuICAgIGlmICghcHJvcHMudnBjKSB0aHJvdyBuZXcgRXJyb3IoXCJWUEMgaXMgcmVxdWlyZWQgZm9yIEF1cm9yYSBkYXRhYmFzZVwiKTtcbiAgICB0aGlzLmRhdGFiYXNlID0gbmV3IFJkc0F1cm9yYSh0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UmRzYCwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgIGVuZ2luZTogcHJvcHMuZW5naW5lXG4gICAgfSk7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuZGF0YWJhc2UuY29ubmVjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGFkZEF1cm9yYUdsb2JhbChwcm9wczogR2xvYmFsQXVyb3JhU3RvcmFnZVByb3BzKSB7XG4gICAgaWYgKCFwcm9wcy52cGMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWUEMgaXMgcmVxdWlyZWQgZm9yIEdsb2JhbCBBdXJvcmEgZGF0YWJhc2VcIik7XG4gICAgaWYgKCFwcm9wcy5wcmltYXJ5UmVnaW9uKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicHJpbWFyeVJlZ2lvbiBpcyByZXF1aXJlZCBmb3IgR2xvYmFsIEF1cm9yYSBkYXRhYmFzZVwiKTtcblxuICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgUmRzQXVyb3JhR2xvYmFsKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1SZHNHbG9iYWxgLFxuICAgICAge1xuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgZGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICAgIHByaW1hcnlSZWdpb246IHByb3BzLnByaW1hcnlSZWdpb24sXG4gICAgICAgIGdsb2JhbENsdXN0ZXJJZGVudGlmaWVyOiBwcm9wcy5nbG9iYWxDbHVzdGVySWRlbnRpZmllcixcbiAgICAgICAgZW5naW5lOiBwcm9wcy5lbmdpbmVcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmRhdGFiYXNlLmNvbm5lY3Rpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRSZHNJbnN0YW5jZShwcm9wczogSW5zdGFuY2VTdG9yYWdlUHJvcHMpIHtcbiAgICB0aGlzLmRhdGFiYXNlID0gbmV3IFJkc0luc3RhbmNlKHRoaXMsIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1SZHNgLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIGRhdGFiYXNlTmFtZTogcHJvcHMuZGF0YWJhc2VOYW1lLFxuICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5pbnN0YW5jZVR5cGUsXG4gICAgICBhbGxvY2F0ZWRTdG9yYWdlOiBwcm9wcy5hbGxvY2F0ZWRTdG9yYWdlLFxuICAgICAgcG9ydDogcHJvcHMucG9ydCxcbiAgICAgIGVuZ2luZTogcHJvcHMuZW5naW5lXG4gICAgfSk7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuZGF0YWJhc2UuY29ubmVjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGFkZFJkc0ZyZWVUaWVyKHByb3BzOiBGcmVlVGllclN0b3JhZ2VQcm9wcykge1xuICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgUmRzRnJlZVRpZXIodGhpcywgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVJkc2AsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgZGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgZW5naW5lOiBwcm9wcy5lbmdpbmVcbiAgICB9KTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5kYXRhYmFzZS5jb25uZWN0aW9ucztcbiAgfVxuXG4gIGdldENyZWRlbnRpYWxzKCk6IFNlY3JldCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuZ2V0Q3JlZGVudGlhbHMoKTtcbiAgfVxuXG4gIGdldEhvc3RFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmdldEhvc3RFbmRwb2ludCgpO1xuICB9XG5cbiAgZ2V0SG9zdFBvcnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5nZXRIb3N0UG9ydCgpO1xuICB9XG5cbiAgZ2V0RGF0YWJhc2VOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2VOYW1lO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTMyBTdG9yYWdlIEZhY3RvcnkgUGF0dGVyblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxudHlwZSBTM0J1Y2tldFR5cGUgPSBcInByaXZhdGVcIiB8IFwid2Vic2l0ZVwiIHwgXCJwdWJsaWNSZWFkXCI7XG5cbnR5cGUgQmFzZVMzUHJvcHMgPSB7XG4gIGJhY2t1cFZhdWx0VGllcj86IEJhY2t1cFZhdWx0VGllcjtcbiAgdmVyc2lvbmVkPzogYm9vbGVhbjtcbiAgZW5jcnlwdGlvbj86IFwiQUVTMjU2XCIgfCBcIktNU1wiO1xuICBrbXNLZXlBcm4/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFByaXZhdGVTM1Byb3BzIGV4dGVuZHMgQmFzZVMzUHJvcHMge1xuICBidWNrZXRUeXBlOiBcInByaXZhdGVcIjtcbiAgcHVibGljUmVhZEFjY2Vzcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2Vic2l0ZVMzUHJvcHMgZXh0ZW5kcyBCYXNlUzNQcm9wcyB7XG4gIGJ1Y2tldFR5cGU6IFwid2Vic2l0ZVwiO1xuICB3ZWJzaXRlSW5kZXhEb2N1bWVudD86IHN0cmluZztcbiAgd2Vic2l0ZUVycm9yRG9jdW1lbnQ/OiBzdHJpbmc7XG4gIGNvcnM/OiBBcnJheTx7XG4gICAgYWxsb3dlZE9yaWdpbnM6IHN0cmluZ1tdO1xuICAgIGFsbG93ZWRNZXRob2RzOiBzdHJpbmdbXTtcbiAgfT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljUmVhZFMzUHJvcHMgZXh0ZW5kcyBCYXNlUzNQcm9wcyB7XG4gIGJ1Y2tldFR5cGU6IFwicHVibGljUmVhZFwiO1xufVxuXG5leHBvcnQgdHlwZSBJUzNQcm9wcyA9IFByaXZhdGVTM1Byb3BzIHwgV2Vic2l0ZVMzUHJvcHMgfCBQdWJsaWNSZWFkUzNQcm9wcztcblxuZXhwb3J0IGNsYXNzIFMzRmFjdG9yeSB7XG4gIHN0YXRpYyBidWlsZDxUIGV4dGVuZHMgSVMzUHJvcHM+KGlkOiBzdHJpbmcsIHByb3BzOiBUKSB7XG4gICAgcmV0dXJuIChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBTM1N0b3JhZ2Uoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUzNTdG9yYWdlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIGlkOiBzdHJpbmc7XG4gIHB1YmxpYyBzY29wZTogQ29uc3RydWN0O1xuXG4gIHByaXZhdGUgYnVja2V0OiBTM0J1Y2tldCB8IFMzV2Vic2l0ZUJ1Y2tldCB8IFMzUHVibGljUmVhZEJ1Y2tldDtcbiAgcHJpdmF0ZSBidWNrZXRUeXBlOiBTM0J1Y2tldFR5cGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElTM1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuICAgIHRoaXMuYnVja2V0VHlwZSA9IHByb3BzLmJ1Y2tldFR5cGU7XG5cbiAgICB0aGlzLmFkZFMzQnVja2V0KHByb3BzKTtcbiAgfVxuXG4gIGFkZFMzQnVja2V0KHByb3BzOiBJUzNQcm9wcykge1xuICAgIHN3aXRjaCAocHJvcHMuYnVja2V0VHlwZSkge1xuICAgICAgY2FzZSBcInByaXZhdGVcIjpcbiAgICAgICAgdGhpcy5hZGRQcml2YXRlQnVja2V0KHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwid2Vic2l0ZVwiOlxuICAgICAgICB0aGlzLmFkZFdlYnNpdGVCdWNrZXQocHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJwdWJsaWNSZWFkXCI6XG4gICAgICAgIHRoaXMuYWRkUHVibGljUmVhZEJ1Y2tldChwcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRXhoYXVzdGl2ZW5lc3MgY2hlY2tcbiAgICAgICAgY29uc3QgX2V4aGF1c3RpdmU6IG5ldmVyID0gcHJvcHM7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgUzMgYnVja2V0IHR5cGUgJHsocHJvcHMgYXMgYW55KS5idWNrZXRUeXBlfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkUHJpdmF0ZUJ1Y2tldChwcm9wczogUHJpdmF0ZVMzUHJvcHMpIHtcbiAgICB0aGlzLmJ1Y2tldCA9IG5ldyBTM0J1Y2tldCh0aGlzLCBgJHt0aGlzLmlkfUJ1Y2tldGAsIHtcbiAgICAgIGJhY2t1cFZhdWx0VGllcjogcHJvcHMuYmFja3VwVmF1bHRUaWVyLFxuICAgICAgdmVyc2lvbmVkOiBwcm9wcy52ZXJzaW9uZWQsXG4gICAgICBlbmNyeXB0aW9uOiBwcm9wcy5lbmNyeXB0aW9uIGFzIGFueSxcbiAgICAgIGVuY3J5cHRpb25LZXk6IHByb3BzLmttc0tleUFybiA/IHVuZGVmaW5lZCA6IHVuZGVmaW5lZCwgLy8gS01TIGtleSBoYW5kbGluZ1xuICAgICAgcHVibGljUmVhZEFjY2VzczogcHJvcHMucHVibGljUmVhZEFjY2Vzc1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRXZWJzaXRlQnVja2V0KHByb3BzOiBXZWJzaXRlUzNQcm9wcykge1xuICAgIHRoaXMuYnVja2V0ID0gbmV3IFMzV2Vic2l0ZUJ1Y2tldCh0aGlzLCBgJHt0aGlzLmlkfUJ1Y2tldGAsIHtcbiAgICAgIGJhY2t1cFZhdWx0VGllcjogcHJvcHMuYmFja3VwVmF1bHRUaWVyLFxuICAgICAgdmVyc2lvbmVkOiBwcm9wcy52ZXJzaW9uZWQsXG4gICAgICBlbmNyeXB0aW9uOiBwcm9wcy5lbmNyeXB0aW9uIGFzIGFueSxcbiAgICAgIHdlYnNpdGVJbmRleERvY3VtZW50OiBwcm9wcy53ZWJzaXRlSW5kZXhEb2N1bWVudCxcbiAgICAgIHdlYnNpdGVFcnJvckRvY3VtZW50OiBwcm9wcy53ZWJzaXRlRXJyb3JEb2N1bWVudCxcbiAgICAgIGNvcnM6IHByb3BzLmNvcnMgYXMgYW55XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZFB1YmxpY1JlYWRCdWNrZXQocHJvcHM6IFB1YmxpY1JlYWRTM1Byb3BzKSB7XG4gICAgdGhpcy5idWNrZXQgPSBuZXcgUzNQdWJsaWNSZWFkQnVja2V0KHRoaXMsIGAke3RoaXMuaWR9QnVja2V0YCwge1xuICAgICAgYmFja3VwVmF1bHRUaWVyOiBwcm9wcy5iYWNrdXBWYXVsdFRpZXIsXG4gICAgICB2ZXJzaW9uZWQ6IHByb3BzLnZlcnNpb25lZCxcbiAgICAgIGVuY3J5cHRpb246IHByb3BzLmVuY3J5cHRpb24gYXMgYW55XG4gICAgfSk7XG4gIH1cblxuICBnZXRCdWNrZXQoKTogSUJ1Y2tldCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0O1xuICB9XG5cbiAgZ2V0QnVja2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5idWNrZXROYW1lO1xuICB9XG5cbiAgZ2V0QnVja2V0QXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmJ1Y2tldEFybjtcbiAgfVxuXG4gIGdldEJ1Y2tldFR5cGUoKTogUzNCdWNrZXRUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXRUeXBlO1xuICB9XG59XG4iXX0=
|
|
@@ -1,11 +1,49 @@
|
|
|
1
1
|
import { Bucket, BucketProps } from "aws-cdk-lib/aws-s3";
|
|
2
2
|
import { Construct } from "constructs";
|
|
3
|
+
/**
|
|
4
|
+
* Backup vault tiers for disaster recovery.
|
|
5
|
+
* Determines which AWS Backup plan includes this bucket.
|
|
6
|
+
*/
|
|
7
|
+
export type BackupVaultTier = "standard" | "resilient" | "enterprise";
|
|
8
|
+
/**
|
|
9
|
+
* Extended props for S3Bucket that include disaster recovery configuration.
|
|
10
|
+
*/
|
|
11
|
+
export interface S3BucketProps extends BucketProps {
|
|
12
|
+
/**
|
|
13
|
+
* Backup vault tier for disaster recovery.
|
|
14
|
+
*
|
|
15
|
+
* When set, tags the bucket with "fjall:disasterRecovery:tier": "<tier>"
|
|
16
|
+
* which automatically includes it in the corresponding backup plan.
|
|
17
|
+
*
|
|
18
|
+
* Tiers:
|
|
19
|
+
* - standard: Daily backups, 90-day retention
|
|
20
|
+
* - resilient: Daily + continuous, 35-day retention, cross-region replication
|
|
21
|
+
* - enterprise: Continuous + hourly, 7-year compliance, cross-region + cross-account
|
|
22
|
+
*
|
|
23
|
+
* @default undefined - Bucket will NOT be backed up automatically
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* // Critical user data bucket
|
|
27
|
+
* backupVaultTier: "resilient"
|
|
28
|
+
*
|
|
29
|
+
* // Compliance data
|
|
30
|
+
* backupVaultTier: "enterprise"
|
|
31
|
+
*
|
|
32
|
+
* // Logs bucket (no backups needed)
|
|
33
|
+
* // Don't set this property
|
|
34
|
+
*/
|
|
35
|
+
backupVaultTier?: BackupVaultTier;
|
|
36
|
+
}
|
|
3
37
|
export declare class S3Bucket extends Bucket {
|
|
4
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Backup vault tier if set. Used by StandardTagsAspect to apply DR tags.
|
|
40
|
+
*/
|
|
41
|
+
readonly backupVaultTier?: BackupVaultTier;
|
|
42
|
+
constructor(scope: Construct, id: string, props?: S3BucketProps);
|
|
5
43
|
}
|
|
6
44
|
export declare class S3WebsiteBucket extends S3Bucket {
|
|
7
|
-
constructor(scope: Construct, id: string, props?:
|
|
45
|
+
constructor(scope: Construct, id: string, props?: S3BucketProps);
|
|
8
46
|
}
|
|
9
47
|
export declare class S3PublicReadBucket extends S3Bucket {
|
|
10
|
-
constructor(scope: Construct, id: string, props?:
|
|
48
|
+
constructor(scope: Construct, id: string, props?: S3BucketProps);
|
|
11
49
|
}
|
|
@@ -12,6 +12,8 @@ class S3Bucket extends aws_s3_1.Bucket {
|
|
|
12
12
|
removalPolicy: props?.removalPolicy || aws_cdk_lib_1.RemovalPolicy.DESTROY,
|
|
13
13
|
versioned: true
|
|
14
14
|
});
|
|
15
|
+
// Store backup tier for StandardTagsAspect to read during synthesis
|
|
16
|
+
this.backupVaultTier = props?.backupVaultTier;
|
|
15
17
|
}
|
|
16
18
|
}
|
|
17
19
|
exports.S3Bucket = S3Bucket;
|
|
@@ -41,4 +43,4 @@ class S3PublicReadBucket extends S3Bucket {
|
|
|
41
43
|
}
|
|
42
44
|
}
|
|
43
45
|
exports.S3PublicReadBucket = S3PublicReadBucket;
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9zdG9yYWdlL3MzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUE0QztBQUM1QywrQ0FBNEU7QUF1QzVFLE1BQWEsUUFBUyxTQUFRLGVBQU07SUFNbEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFxQjtRQUM3RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLEdBQUcsS0FBSztZQUNSLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsVUFBVSxFQUFFLElBQUk7WUFDaEIsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLElBQUksMkJBQWEsQ0FBQyxPQUFPO1lBQzVELFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQztRQUVILG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssRUFBRSxlQUFlLENBQUM7SUFDaEQsQ0FBQztDQUNGO0FBbEJELDRCQWtCQztBQUVELE1BQWEsZUFBZ0IsU0FBUSxRQUFRO0lBQzNDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7WUFDUixvQkFBb0IsRUFBRSxZQUFZO1lBQ2xDLG9CQUFvQixFQUFFLFlBQVk7WUFDbEMsZ0JBQWdCLEVBQUUsSUFBSTtTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFURCwwQ0FTQztBQUVELE1BQWEsa0JBQW1CLFNBQVEsUUFBUTtJQUM5QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXFCO1FBQzdELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1IsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixpQkFBaUIsRUFBRSxJQUFJLDBCQUFpQixDQUFDO2dCQUN2QyxlQUFlLEVBQUUsS0FBSztnQkFDdEIsaUJBQWlCLEVBQUUsS0FBSztnQkFDeEIsZ0JBQWdCLEVBQUUsS0FBSztnQkFDdkIscUJBQXFCLEVBQUUsS0FBSzthQUM3QixDQUFDO1NBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBYkQsZ0RBYUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBCbG9ja1B1YmxpY0FjY2VzcywgQnVja2V0LCBCdWNrZXRQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbi8qKlxuICogQmFja3VwIHZhdWx0IHRpZXJzIGZvciBkaXNhc3RlciByZWNvdmVyeS5cbiAqIERldGVybWluZXMgd2hpY2ggQVdTIEJhY2t1cCBwbGFuIGluY2x1ZGVzIHRoaXMgYnVja2V0LlxuICovXG5leHBvcnQgdHlwZSBCYWNrdXBWYXVsdFRpZXIgPSBcInN0YW5kYXJkXCIgfCBcInJlc2lsaWVudFwiIHwgXCJlbnRlcnByaXNlXCI7XG5cbi8qKlxuICogRXh0ZW5kZWQgcHJvcHMgZm9yIFMzQnVja2V0IHRoYXQgaW5jbHVkZSBkaXNhc3RlciByZWNvdmVyeSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFMzQnVja2V0UHJvcHMgZXh0ZW5kcyBCdWNrZXRQcm9wcyB7XG4gIC8qKlxuICAgKiBCYWNrdXAgdmF1bHQgdGllciBmb3IgZGlzYXN0ZXIgcmVjb3ZlcnkuXG4gICAqXG4gICAqIFdoZW4gc2V0LCB0YWdzIHRoZSBidWNrZXQgd2l0aCBcImZqYWxsOmRpc2FzdGVyUmVjb3Zlcnk6dGllclwiOiBcIjx0aWVyPlwiXG4gICAqIHdoaWNoIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgaXQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYmFja3VwIHBsYW4uXG4gICAqXG4gICAqIFRpZXJzOlxuICAgKiAtIHN0YW5kYXJkOiBEYWlseSBiYWNrdXBzLCA5MC1kYXkgcmV0ZW50aW9uXG4gICAqIC0gcmVzaWxpZW50OiBEYWlseSArIGNvbnRpbnVvdXMsIDM1LWRheSByZXRlbnRpb24sIGNyb3NzLXJlZ2lvbiByZXBsaWNhdGlvblxuICAgKiAtIGVudGVycHJpc2U6IENvbnRpbnVvdXMgKyBob3VybHksIDcteWVhciBjb21wbGlhbmNlLCBjcm9zcy1yZWdpb24gKyBjcm9zcy1hY2NvdW50XG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIEJ1Y2tldCB3aWxsIE5PVCBiZSBiYWNrZWQgdXAgYXV0b21hdGljYWxseVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBDcml0aWNhbCB1c2VyIGRhdGEgYnVja2V0XG4gICAqIGJhY2t1cFZhdWx0VGllcjogXCJyZXNpbGllbnRcIlxuICAgKlxuICAgKiAvLyBDb21wbGlhbmNlIGRhdGFcbiAgICogYmFja3VwVmF1bHRUaWVyOiBcImVudGVycHJpc2VcIlxuICAgKlxuICAgKiAvLyBMb2dzIGJ1Y2tldCAobm8gYmFja3VwcyBuZWVkZWQpXG4gICAqIC8vIERvbid0IHNldCB0aGlzIHByb3BlcnR5XG4gICAqL1xuICBiYWNrdXBWYXVsdFRpZXI/OiBCYWNrdXBWYXVsdFRpZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBTM0J1Y2tldCBleHRlbmRzIEJ1Y2tldCB7XG4gIC8qKlxuICAgKiBCYWNrdXAgdmF1bHQgdGllciBpZiBzZXQuIFVzZWQgYnkgU3RhbmRhcmRUYWdzQXNwZWN0IHRvIGFwcGx5IERSIHRhZ3MuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYmFja3VwVmF1bHRUaWVyPzogQmFja3VwVmF1bHRUaWVyO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogUzNCdWNrZXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcz8ucmVtb3ZhbFBvbGljeSB8fCBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICB2ZXJzaW9uZWQ6IHRydWVcbiAgICB9KTtcblxuICAgIC8vIFN0b3JlIGJhY2t1cCB0aWVyIGZvciBTdGFuZGFyZFRhZ3NBc3BlY3QgdG8gcmVhZCBkdXJpbmcgc3ludGhlc2lzXG4gICAgdGhpcy5iYWNrdXBWYXVsdFRpZXIgPSBwcm9wcz8uYmFja3VwVmF1bHRUaWVyO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTM1dlYnNpdGVCdWNrZXQgZXh0ZW5kcyBTM0J1Y2tldCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogUzNCdWNrZXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB3ZWJzaXRlRXJyb3JEb2N1bWVudDogXCJlcnJvci5odG1sXCIsXG4gICAgICB3ZWJzaXRlSW5kZXhEb2N1bWVudDogXCJpbmRleC5odG1sXCIsXG4gICAgICBwdWJsaWNSZWFkQWNjZXNzOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFMzUHVibGljUmVhZEJ1Y2tldCBleHRlbmRzIFMzQnVja2V0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBTM0J1Y2tldFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHB1YmxpY1JlYWRBY2Nlc3M6IHRydWUsXG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogbmV3IEJsb2NrUHVibGljQWNjZXNzKHtcbiAgICAgICAgYmxvY2tQdWJsaWNBY2xzOiBmYWxzZSxcbiAgICAgICAgYmxvY2tQdWJsaWNQb2xpY3k6IGZhbHNlLFxuICAgICAgICBpZ25vcmVQdWJsaWNBY2xzOiBmYWxzZSxcbiAgICAgICAgcmVzdHJpY3RQdWJsaWNCdWNrZXRzOiBmYWxzZVxuICAgICAgfSlcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -458,6 +458,28 @@ class StandardTagsAspect {
|
|
|
458
458
|
}
|
|
459
459
|
}
|
|
460
460
|
}
|
|
461
|
+
// Add disaster recovery tier tag for S3 buckets with backupVaultTier
|
|
462
|
+
if (resource.cfnResourceType === "AWS::S3::Bucket") {
|
|
463
|
+
// Walk up the construct tree to find the L2 S3Bucket construct
|
|
464
|
+
let construct = resource;
|
|
465
|
+
while (construct) {
|
|
466
|
+
// Check if this is our custom S3Bucket class with backupVaultTier property
|
|
467
|
+
if ('backupVaultTier' in construct && construct.backupVaultTier) {
|
|
468
|
+
const tier = construct.backupVaultTier;
|
|
469
|
+
// Map tier names to backup plan tag values
|
|
470
|
+
// Note: "standard" tier uses "default" as the tag value to match existing backup plans
|
|
471
|
+
const tierMap = {
|
|
472
|
+
'standard': 'default',
|
|
473
|
+
'resilient': 'resilient',
|
|
474
|
+
'enterprise': 'enterprise'
|
|
475
|
+
};
|
|
476
|
+
const tagValue = tierMap[tier] || tier;
|
|
477
|
+
tagMap.set("fjall:disasterRecovery:tier", tagValue);
|
|
478
|
+
break;
|
|
479
|
+
}
|
|
480
|
+
construct = construct.node.scope;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
461
483
|
// Apply standard tags
|
|
462
484
|
Object.entries(this.requiredTags).forEach(([key, value]) => {
|
|
463
485
|
tagMap.set(key, value);
|
|
@@ -470,4 +492,4 @@ class StandardTagsAspect {
|
|
|
470
492
|
}
|
|
471
493
|
}
|
|
472
494
|
exports.StandardTagsAspect = StandardTagsAspect;
|
|
473
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRUYWdzQXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWxzL3N0YW5kYXJkVGFnc0FzcGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBMEQ7QUFJMUQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsa0JBQWtCO0lBSTdCLFlBQVksWUFBdUM7UUFGbEMsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBRzNELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPO1FBQ1QsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxJQUFJLHlCQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQW1CLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFFBQXFCO1FBQzlDLDZGQUE2RjtRQUM3RixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTztRQUNULENBQUM7UUFFRCw4RUFBOEU7UUFDOUUsK0VBQStFO1FBQy9FLE1BQU0sZ0JBQWdCLEdBQUc7WUFDdkIsTUFBTTtZQUNOLGtDQUFrQztZQUVsQyxjQUFjO1lBQ2QsMEJBQTBCO1lBQzFCLGtDQUFrQztZQUNsQyw2QkFBNkI7WUFDN0Isb0NBQW9DO1lBQ3BDLHVDQUF1QztZQUN2QyxrQ0FBa0M7WUFDbEMseUJBQXlCO1lBQ3pCLHdCQUF3QjtZQUN4QixtQ0FBbUM7WUFDbkMsMkJBQTJCO1lBQzNCLCtCQUErQjtZQUMvQiwrQkFBK0I7WUFDL0IsK0JBQStCO1lBQy9CLGdDQUFnQztZQUNoQyx3Q0FBd0M7WUFDeEMsMEJBQTBCO1lBQzFCLDBCQUEwQjtZQUMxQixrQ0FBa0M7WUFFbEMsVUFBVTtZQUNWLDBCQUEwQjtZQUMxQixxQ0FBcUM7WUFDckMsd0JBQXdCO1lBRXhCLFNBQVM7WUFDVCxnQ0FBZ0M7WUFFaEMsaUJBQWlCO1lBQ2pCLHFDQUFxQztZQUNyQyw0QkFBNEI7WUFDNUIsMkNBQTJDO1lBQzNDLG9DQUFvQztZQUNwQyx3Q0FBd0M7WUFDeEMsZ0NBQWdDO1lBQ2hDLDZDQUE2QztZQUM3QyxzQ0FBc0M7WUFDdEMscUNBQXFDO1lBQ3JDLG9DQUFvQztZQUNwQywwQ0FBMEM7WUFFMUMsYUFBYTtZQUNiLHdCQUF3QjtZQUN4QixrQ0FBa0M7WUFDbEMsaUNBQWlDO1lBQ2pDLDRCQUE0QjtZQUM1Qiw4QkFBOEI7WUFDOUIsK0JBQStCO1lBRS9CLFlBQVk7WUFDWiw2QkFBNkI7WUFDN0Isa0NBQWtDO1lBRWxDLGFBQWE7WUFDYixtQ0FBbUM7WUFFbkMsZUFBZTtZQUNmLHFDQUFxQztZQUNyQyw0QkFBNEI7WUFFNUIsVUFBVTtZQUNWLDBDQUEwQztZQUMxQyw4QkFBOEI7WUFDOUIsOEJBQThCO1lBQzlCLDZCQUE2QjtZQUM3Qix3Q0FBd0M7WUFDeEMsc0NBQXNDO1lBQ3RDLG1EQUFtRDtZQUNuRCxpREFBaUQ7WUFDakQsNEJBQTRCO1lBQzVCLDZDQUE2QztZQUU3QyxTQUFTO1lBQ1QsdUNBQXVDO1lBQ3ZDLHNDQUFzQztZQUN0Qyw4QkFBOEI7WUFDOUIsMENBQTBDO1lBQzFDLHVDQUF1QztZQUN2QywwQkFBMEI7WUFFMUIsV0FBVztZQUNYLDRCQUE0QjtZQUU1QixNQUFNO1lBQ04sb0NBQW9DO1lBQ3BDLDBCQUEwQjtZQUMxQix1QkFBdUI7WUFDdkIsb0JBQW9CO1lBQ3BCLHFDQUFxQztZQUNyQywwQkFBMEI7WUFDMUIsZ0RBQWdEO1lBQ2hELG1CQUFtQjtZQUNuQix3Q0FBd0M7WUFDeEMsbUNBQW1DO1lBQ25DLG1CQUFtQjtZQUNuQiwwQkFBMEI7WUFDMUIsc0NBQXNDO1lBQ3RDLDhDQUE4QztZQUM5QyxtQ0FBbUM7WUFDbkMsK0JBQStCO1lBQy9CLHNDQUFzQztZQUN0QyxzQ0FBc0M7WUFDdEMsMEJBQTBCO1lBQzFCLGlCQUFpQjtZQUNqQiwrQkFBK0I7WUFDL0IsZ0NBQWdDO1lBQ2hDLDJCQUEyQjtZQUMzQix1Q0FBdUM7WUFDdkMsdUNBQXVDO1lBQ3ZDLG9DQUFvQztZQUNwQyxpQ0FBaUM7WUFDakMseUNBQXlDO1lBQ3pDLG9EQUFvRDtZQUNwRCw4Q0FBOEM7WUFDOUMsOENBQThDO1lBQzlDLDJDQUEyQztZQUMzQywrQkFBK0I7WUFDL0Isb0NBQW9DO1lBQ3BDLCtDQUErQztZQUMvQywrQ0FBK0M7WUFDL0MsdUNBQXVDO1lBQ3ZDLGtDQUFrQztZQUNsQywrQkFBK0I7WUFDL0Isa0NBQWtDO1lBQ2xDLHVDQUF1QztZQUN2Qyw0QkFBNEI7WUFDNUIsd0JBQXdCO1lBQ3hCLHFDQUFxQztZQUNyQyw2Q0FBNkM7WUFDN0MsOEJBQThCO1lBQzlCLHlDQUF5QztZQUN6QyxnQ0FBZ0M7WUFDaEMsOEJBQThCO1lBQzlCLHNDQUFzQztZQUV0QyxNQUFNO1lBQ04sNEJBQTRCO1lBQzVCLGdDQUFnQztZQUNoQywwQkFBMEI7WUFDMUIsb0NBQW9DO1lBRXBDLE1BQU07WUFDTiwwQkFBMEI7WUFDMUIsNEJBQTRCO1lBQzVCLCtDQUErQztZQUMvQywwQkFBMEI7WUFDMUIsbUJBQW1CO1lBRW5CLE1BQU07WUFDTix1QkFBdUI7WUFDdkIsdUJBQXVCO1lBRXZCLE1BQU07WUFDTixpQkFBaUI7WUFDakIsMEJBQTBCO1lBQzFCLGtDQUFrQztZQUVsQyxjQUFjO1lBQ2Qsa0NBQWtDO1lBQ2xDLGlDQUFpQztZQUNqQyx3Q0FBd0M7WUFDeEMsK0JBQStCO1lBRS9CLG1CQUFtQjtZQUNuQiwyQ0FBMkM7WUFDM0MsOENBQThDO1lBRTlDLHlCQUF5QjtZQUN6Qix1Q0FBdUM7WUFDdkMsa0RBQWtEO1lBQ2xELDJDQUEyQztZQUMzQyxvREFBb0Q7WUFFcEQsdUJBQXVCO1lBQ3ZCLDZCQUE2QjtZQUM3QixzQkFBc0I7WUFDdEIseUJBQXlCO1lBQ3pCLHVCQUF1QjtZQUN2Qiw2QkFBNkI7WUFDN0IsbUJBQW1CO1lBRW5CLE1BQU07WUFDTixxQ0FBcUM7WUFDckMsb0JBQW9CO1lBQ3BCLGlDQUFpQztZQUNqQyxrQkFBa0I7WUFFbEIsV0FBVztZQUNYLGdDQUFnQztZQUNoQyx5QkFBeUI7WUFFekIsT0FBTztZQUNQLHVCQUF1QjtZQUN2QixxQkFBcUI7WUFDckIsMENBQTBDO1lBQzFDLHNCQUFzQjtZQUN0QiwwQkFBMEI7WUFDMUIsa0NBQWtDO1lBQ2xDLGtDQUFrQztZQUNsQyxrQkFBa0I7WUFDbEIsZ0NBQWdDO1lBRWhDLFlBQVk7WUFDWiwwQkFBMEI7WUFDMUIsd0JBQXdCO1lBQ3hCLHVCQUF1QjtZQUN2Qix3QkFBd0I7WUFDeEIsd0JBQXdCO1lBQ3hCLGdDQUFnQztZQUVoQyxNQUFNO1lBQ04scUJBQXFCO1lBQ3JCLGlCQUFpQjtZQUNqQix1QkFBdUI7WUFDdkIsMkJBQTJCO1lBQzNCLHlCQUF5QjtZQUN6Qix3QkFBd0I7WUFDeEIsa0JBQWtCO1lBQ2xCLGdCQUFnQjtZQUNoQixzQkFBc0I7WUFDdEIsd0JBQXdCO1lBQ3hCLDZCQUE2QjtZQUM3Qiw2QkFBNkI7WUFDN0IsZ0JBQWdCO1lBQ2hCLHNCQUFzQjtZQUN0QiwrQkFBK0I7WUFDL0IsNEJBQTRCO1lBRTVCLE1BQU07WUFDTixxQ0FBcUM7WUFDckMsc0JBQXNCO1lBQ3RCLHVCQUF1QjtZQUN2Qix3QkFBd0I7WUFDeEIscUJBQXFCO1lBQ3JCLCtCQUErQjtZQUMvQix1QkFBdUI7WUFDdkIsdUJBQXVCO1lBQ3ZCLG1CQUFtQjtZQUNuQiw0QkFBNEI7WUFDNUIsa0JBQWtCO1lBQ2xCLHFDQUFxQztZQUNyQyxnQ0FBZ0M7WUFDaEMsbUNBQW1DO1lBQ25DLHFCQUFxQjtZQUNyQiwwQkFBMEI7WUFDMUIsMkJBQTJCO1lBQzNCLGlCQUFpQjtZQUNqQixzQkFBc0I7WUFDdEIsb0NBQW9DO1lBQ3BDLHFCQUFxQjtZQUNyQixxQkFBcUI7WUFDckIsZ0NBQWdDO1lBRWhDLE1BQU07WUFDTixpQkFBaUI7WUFDakIsaUJBQWlCO1lBQ2pCLHNCQUFzQjtZQUV0QixTQUFTO1lBQ1QsZ0NBQWdDO1lBQ2hDLGdDQUFnQztZQUNoQyxpQ0FBaUM7WUFDakMsMkJBQTJCO1lBQzNCLHFDQUFxQztZQUNyQyx5QkFBeUI7WUFDekIsMkNBQTJDO1lBQzNDLGtCQUFrQjtZQUNsQixzQkFBc0I7WUFFdEIsT0FBTztZQUNQLDBCQUEwQjtZQUMxQix3QkFBd0I7WUFDeEIscUJBQXFCO1lBQ3JCLHNCQUFzQjtZQUN0Qix5QkFBeUI7WUFDekIsNEJBQTRCO1lBQzVCLDJCQUEyQjtZQUMzQiwrQkFBK0I7WUFFL0IsUUFBUTtZQUNSLHVCQUF1QjtZQUN2QixrQ0FBa0M7WUFDbEMsNEJBQTRCO1lBQzVCLHFCQUFxQjtZQUVyQixVQUFVO1lBQ1YsdUNBQXVDO1lBQ3ZDLGdDQUFnQztZQUNoQyw2QkFBNkI7WUFFN0IsZ0JBQWdCO1lBQ2hCLDZCQUE2QjtZQUM3QixrQ0FBa0M7WUFDbEMsd0NBQXdDO1lBQ3hDLDRCQUE0QjtZQUM1QixvQ0FBb0M7WUFFcEMsTUFBTTtZQUNOLG1DQUFtQztZQUNuQyw0QkFBNEI7WUFDNUIsMkJBQTJCO1lBQzNCLDhCQUE4QjtZQUM5QiwyQkFBMkI7WUFDM0Isa0NBQWtDO1lBQ2xDLHlCQUF5QjtZQUN6Qiw2QkFBNkI7WUFDN0IseUJBQXlCO1lBQ3pCLHVCQUF1QjtZQUV2QixXQUFXO1lBQ1gsc0NBQXNDO1lBQ3RDLHFDQUFxQztZQUNyQyw0Q0FBNEM7WUFDNUMsbUNBQW1DO1lBQ25DLCtCQUErQjtZQUMvQixzQ0FBc0M7WUFDdEMsa0NBQWtDO1lBQ2xDLGdDQUFnQztZQUVoQyxVQUFVO1lBQ1Ysc0JBQXNCO1lBQ3RCLDJCQUEyQjtZQUMzQiwwQkFBMEI7WUFDMUIsNkJBQTZCO1lBQzdCLHlCQUF5QjtZQUN6Qiw4QkFBOEI7WUFFOUIsa0JBQWtCO1lBQ2xCLDBDQUEwQztZQUMxQyx5Q0FBeUM7WUFDekMsb0RBQW9EO1lBQ3BELHNDQUFzQztZQUN0Qyw0Q0FBNEM7WUFDNUMsa0RBQWtEO1lBQ2xELDZEQUE2RDtZQUM3RCxvQ0FBb0M7WUFDcEMsK0NBQStDO1lBRS9DLEtBQUs7WUFDTCxzQkFBc0I7WUFDdEIsdUJBQXVCO1lBQ3ZCLGlDQUFpQztZQUNqQyx1Q0FBdUM7WUFDdkMsc0JBQXNCO1lBRXRCLE1BQU07WUFDTixrQkFBa0I7WUFFbEIsaUJBQWlCO1lBQ2pCLHFDQUFxQztZQUNyQyx1Q0FBdUM7WUFDdkMsNkNBQTZDO1lBRTdDLGNBQWM7WUFDZCx1QkFBdUI7WUFFdkIsaUJBQWlCO1lBQ2pCLDZDQUE2QztZQUM3QyxtREFBbUQ7WUFDbkQsMkNBQTJDO1lBQzNDLCtDQUErQztZQUMvQyxvREFBb0Q7WUFDcEQsa0RBQWtEO1lBQ2xELHFDQUFxQztZQUNyQywrQ0FBK0M7WUFDL0Msb0NBQW9DO1lBQ3BDLCtDQUErQztZQUMvQyx5Q0FBeUM7WUFDekMsZ0NBQWdDO1lBQ2hDLDJDQUEyQztZQUUzQyxNQUFNO1lBQ04sNEJBQTRCO1lBQzVCLDRDQUE0QztZQUM1Qyx1QkFBdUI7WUFDdkIsMkJBQTJCO1lBQzNCLHlCQUF5QjtZQUN6Qix5QkFBeUI7WUFDekIsdUJBQXVCO1lBQ3ZCLDBCQUEwQjtZQUMxQixvQkFBb0I7WUFDcEIseUJBQXlCO1lBRXpCLE1BQU07WUFDTix3QkFBd0I7WUFDeEIsdUJBQXVCO1lBRXZCLE1BQU07WUFDTix1QkFBdUI7WUFFdkIsTUFBTTtZQUNOLHVCQUF1QjtZQUN2QixvQkFBb0I7WUFDcEIsNkJBQTZCO1lBQzdCLG1DQUFtQztZQUNuQyxpQ0FBaUM7WUFDakMscUJBQXFCO1lBQ3JCLHlCQUF5QjtZQUN6Qiw0QkFBNEI7WUFDNUIsMEJBQTBCO1lBRTFCLE1BQU07WUFDTixzQkFBc0I7WUFDdEIsdURBQXVEO1lBQ3ZELHlCQUF5QjtZQUV6QixnQkFBZ0I7WUFDaEIsOEJBQThCO1lBRTlCLFlBQVk7WUFDWix3QkFBd0I7WUFDeEIsaUJBQWlCO1lBQ2pCLGdCQUFnQjtZQUNoQiw2QkFBNkI7WUFDN0IsZ0NBQWdDO1lBQ2hDLGtCQUFrQjtZQUNsQix1QkFBdUI7WUFDdkIsZ0NBQWdDO1lBQ2hDLCtCQUErQjtZQUMvQix5QkFBeUI7WUFDekIsaUNBQWlDO1lBQ2pDLG1DQUFtQztZQUNuQyx3QkFBd0I7WUFDeEIscUNBQXFDO1lBQ3JDLHdDQUF3QztZQUN4QywwQkFBMEI7WUFDMUIscUNBQXFDO1lBQ3JDLCtCQUErQjtZQUMvQixtQkFBbUI7WUFDbkIsa0NBQWtDO1lBQ2xDLDZCQUE2QjtZQUM3Qix1QkFBdUI7WUFDdkIsb0JBQW9CO1lBQ3BCLCtCQUErQjtZQUUvQixhQUFhO1lBQ2Isc0JBQXNCO1lBQ3RCLDhCQUE4QjtZQUM5QiwyQkFBMkI7WUFDM0IsMEJBQTBCO1lBQzFCLCtCQUErQjtZQUMvQiw4QkFBOEI7WUFDOUIsK0JBQStCO1NBQ2hDLENBQUM7UUFFRixJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUN4RCxPQUFPO1FBQ1QsQ0FBQztRQUVELDZEQUE2RDtRQUM3RCxNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRS9DLGdEQUFnRDtRQUNoRCxRQUFRLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU8sY0FBYyxDQUFDLFFBQXFCO1FBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBRXpDLHFEQUFxRDtRQUNyRCxJQUFJLFFBQVEsQ0FBQyxlQUFlLEtBQUssZUFBZSxFQUFFLENBQUM7WUFDakQsTUFBTSxHQUFHLEdBQUcsUUFBa0IsQ0FBQztZQUMvQixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDO1lBRXRDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sU0FBUyxHQUNiLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztvQkFDckMsS0FBSyxDQUFDLE9BQU87b0JBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDbEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO2dCQUM5RCxJQUFJLFNBQVMsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDeEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLFNBQVMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRSxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUN6RCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUVILG1DQUFtQztRQUNuQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekQsR0FBRyxFQUFFLEdBQUc7WUFDUixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNGO0FBMWdCRCxnREEwZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUFzcGVjdCwgQ2ZuUmVzb3VyY2UsIFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDZm5WUEMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbi8qKlxuICogQXNwZWN0IHRvIGVuZm9yY2UgYSBzdGFuZGFyZCBzZXQgb2YgdGFncyBvbiBldmVyeSB0YWctY2FwYWJsZSByZXNvdXJjZSBpbiBhIGNvbnN0cnVjdCB0cmVlLlxuICpcbiAqIFVwZGF0ZWQgZm9yIENESyB2Mi4yMDYuMCsgY29tcGF0aWJpbGl0eTpcbiAqIC0gQXZvaWRzIHVzaW5nIGFueSB0YWdnaW5nIEFQSXMgZHVyaW5nIGFzcGVjdCB2aXNpdGF0aW9uIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHNcbiAqIC0gVXNlcyBhIHN5bnRoZXNpcy10aW1lIGFwcHJvYWNoIHRvIG1vZGlmeSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXNcbiAqIC0gTWFpbnRhaW5zIHRoZSBzYW1lIGNsZWFuIEFQSSBhbmQgYXV0b21hdGljIHRhZ2dpbmcgYmVuZWZpdHNcbiAqL1xuZXhwb3J0IGNsYXNzIFN0YW5kYXJkVGFnc0FzcGVjdCBpbXBsZW1lbnRzIElBc3BlY3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcXVpcmVkVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWdnZWRSZXNvdXJjZXMgPSBuZXcgV2Vha1NldDxJQ29uc3RydWN0PigpO1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVpcmVkVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIHRoaXMucmVxdWlyZWRUYWdzID0gcmVxdWlyZWRUYWdzO1xuICB9XG5cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIC8vIFNraXAgaWYgYWxyZWFkeSBwcm9jZXNzZWRcbiAgICBpZiAodGhpcy50YWdnZWRSZXNvdXJjZXMuaGFzKG5vZGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBMMSAoQ0ZOKSByZXNvdXJjZXMgb25seVxuICAgIGlmIChDZm5SZXNvdXJjZS5pc0NmblJlc291cmNlKG5vZGUpKSB7XG4gICAgICB0aGlzLnByb2Nlc3NDZm5SZXNvdXJjZShub2RlIGFzIENmblJlc291cmNlKTtcbiAgICAgIHRoaXMudGFnZ2VkUmVzb3VyY2VzLmFkZChub2RlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NDZm5SZXNvdXJjZShyZXNvdXJjZTogQ2ZuUmVzb3VyY2UpOiB2b2lkIHtcbiAgICAvLyBTa2lwIFNlY3JldFJvdGF0aW9uIHJlc291cmNlcyBhcyB0aGV5IGNyZWF0ZSBuZXN0ZWQgc3RhY2tzIHdpdGggZGlmZmVyZW50IHRhZyByZXF1aXJlbWVudHNcbiAgICBpZiAocmVzb3VyY2Uubm9kZS5wYXRoLmluY2x1ZGVzKFwiU2VjcmV0Um90YXRpb25cIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDb21wcmVoZW5zaXZlIGxpc3Qgb2YgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZXMgdGhhdCBkb24ndCBzdXBwb3J0IHRhZ3NcbiAgICAvLyBUaGlzIGxpc3QgaXMgYmFzZWQgb24gQVdTIENsb3VkRm9ybWF0aW9uIGRvY3VtZW50YXRpb24gYW5kIGtub3duIGxpbWl0YXRpb25zXG4gICAgY29uc3QgdW5zdXBwb3J0ZWRUeXBlcyA9IFtcbiAgICAgIC8vIEFDTVxuICAgICAgXCJBV1M6OkNlcnRpZmljYXRlTWFuYWdlcjo6QWNjb3VudFwiLFxuXG4gICAgICAvLyBBUEkgR2F0ZXdheVxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkFjY291bnRcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpCYXNlUGF0aE1hcHBpbmdcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpEZXBsb3ltZW50XCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6RG9jdW1lbnRhdGlvblBhcnRcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpEb2N1bWVudGF0aW9uVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkdhdGV3YXlSZXNwb25zZVwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZFwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6Ok1vZGVsXCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6UmVxdWVzdFZhbGlkYXRvclwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OlJlc291cmNlXCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlNYXBwaW5nXCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyXCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpEZXBsb3ltZW50XCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpJbnRlZ3JhdGlvblwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25SZXNwb25zZVwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6TW9kZWxcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OlJvdXRlXCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVJlc3BvbnNlXCIsXG5cbiAgICAgIC8vIEFwcFN5bmNcbiAgICAgIFwiQVdTOjpBcHBTeW5jOjpEYXRhU291cmNlXCIsXG4gICAgICBcIkFXUzo6QXBwU3luYzo6RnVuY3Rpb25Db25maWd1cmF0aW9uXCIsXG4gICAgICBcIkFXUzo6QXBwU3luYzo6UmVzb2x2ZXJcIixcblxuICAgICAgLy8gQXRoZW5hXG4gICAgICBcIkFXUzo6QXRoZW5hOjpQcmVwYXJlZFN0YXRlbWVudFwiLFxuXG4gICAgICAvLyBDbG91ZEZvcm1hdGlvblxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpDdXN0b21SZXNvdXJjZVwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpNYWNyb1wiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpNb2R1bGVEZWZhdWx0VmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpNb2R1bGVWZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6Q2xvdWRGb3JtYXRpb246OlB1YmxpY1R5cGVWZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6Q2xvdWRGb3JtYXRpb246OlB1Ymxpc2hlclwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpSZXNvdXJjZURlZmF1bHRWZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6Q2xvdWRGb3JtYXRpb246OlJlc291cmNlVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpUeXBlQWN0aXZhdGlvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpXYWl0Q29uZGl0aW9uXCIsXG4gICAgICBcIkFXUzo6Q2xvdWRGb3JtYXRpb246OldhaXRDb25kaXRpb25IYW5kbGVcIixcblxuICAgICAgLy8gQ2xvdWRXYXRjaFxuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCIsXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6QW5vbWFseURldGVjdG9yXCIsXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6Q29tcG9zaXRlQWxhcm1cIixcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcIixcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpJbnNpZ2h0UnVsZVwiLFxuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6Ok1ldHJpY1N0cmVhbVwiLFxuXG4gICAgICAvLyBDb2RlQnVpbGRcbiAgICAgIFwiQVdTOjpDb2RlQnVpbGQ6OlJlcG9ydEdyb3VwXCIsXG4gICAgICBcIkFXUzo6Q29kZUJ1aWxkOjpTb3VyY2VDcmVkZW50aWFsXCIsXG5cbiAgICAgIC8vIENvZGVEZXBsb3lcbiAgICAgIFwiQVdTOjpDb2RlRGVwbG95OjpEZXBsb3ltZW50Q29uZmlnXCIsXG5cbiAgICAgIC8vIENvZGVQaXBlbGluZVxuICAgICAgXCJBV1M6OkNvZGVQaXBlbGluZTo6Q3VzdG9tQWN0aW9uVHlwZVwiLFxuICAgICAgXCJBV1M6OkNvZGVQaXBlbGluZTo6V2ViaG9va1wiLFxuXG4gICAgICAvLyBDb2duaXRvXG4gICAgICBcIkFXUzo6Q29nbml0bzo6SWRlbnRpdHlQb29sUm9sZUF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiLFxuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sRG9tYWluXCIsXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xHcm91cFwiLFxuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sSWRlbnRpdHlQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sUmVzb3VyY2VTZXJ2ZXJcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFJpc2tDb25maWd1cmF0aW9uQXR0YWNobWVudFwiLFxuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sVUlDdXN0b21pemF0aW9uQXR0YWNobWVudFwiLFxuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sVXNlclwiLFxuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sVXNlclRvR3JvdXBBdHRhY2htZW50XCIsXG5cbiAgICAgIC8vIENvbmZpZ1xuICAgICAgXCJBV1M6OkNvbmZpZzo6QWdncmVnYXRpb25BdXRob3JpemF0aW9uXCIsXG4gICAgICBcIkFXUzo6Q29uZmlnOjpDb25maWd1cmF0aW9uQWdncmVnYXRvclwiLFxuICAgICAgXCJBV1M6OkNvbmZpZzo6Q29uZm9ybWFuY2VQYWNrXCIsXG4gICAgICBcIkFXUzo6Q29uZmlnOjpPcmdhbml6YXRpb25Db25mb3JtYW5jZVBhY2tcIixcbiAgICAgIFwiQVdTOjpDb25maWc6OlJlbWVkaWF0aW9uQ29uZmlndXJhdGlvblwiLFxuICAgICAgXCJBV1M6OkNvbmZpZzo6U3RvcmVkUXVlcnlcIixcblxuICAgICAgLy8gRHluYW1vREJcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6R2xvYmFsVGFibGVcIixcblxuICAgICAgLy8gRUMyXG4gICAgICBcIkFXUzo6RUMyOjpDYXBhY2l0eVJlc2VydmF0aW9uRmxlZXRcIixcbiAgICAgIFwiQVdTOjpFQzI6OkNhcnJpZXJHYXRld2F5XCIsXG4gICAgICBcIkFXUzo6RUMyOjpESENQT3B0aW9uc1wiLFxuICAgICAgXCJBV1M6OkVDMjo6RUMyRmxlZXRcIixcbiAgICAgIFwiQVdTOjpFQzI6OkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlcIixcbiAgICAgIFwiQVdTOjpFQzI6OkVJUEFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpFbmNsYXZlQ2VydGlmaWNhdGVJYW1Sb2xlQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OkZsb3dMb2dcIixcbiAgICAgIFwiQVdTOjpFQzI6OkdhdGV3YXlSb3V0ZVRhYmxlQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6Okluc3RhbmNlQ29ubmVjdEVuZHBvaW50XCIsXG4gICAgICBcIkFXUzo6RUMyOjpLZXlQYWlyXCIsXG4gICAgICBcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6TmV0d29ya0luc2lnaHRzQWNjZXNzU2NvcGVcIixcbiAgICAgIFwiQVdTOjpFQzI6Ok5ldHdvcmtJbnNpZ2h0c0FjY2Vzc1Njb3BlQW5hbHlzaXNcIixcbiAgICAgIFwiQVdTOjpFQzI6Ok5ldHdvcmtJbnNpZ2h0c0FuYWx5c2lzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpOZXR3b3JrSW5zaWdodHNQYXRoXCIsXG4gICAgICBcIkFXUzo6RUMyOjpOZXR3b3JrSW50ZXJmYWNlQXR0YWNobWVudFwiLFxuICAgICAgXCJBV1M6OkVDMjo6TmV0d29ya0ludGVyZmFjZVBlcm1pc3Npb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlBsYWNlbWVudEdyb3VwXCIsXG4gICAgICBcIkFXUzo6RUMyOjpSb3V0ZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1wiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlN1Ym5ldENpZHJCbG9ja1wiLFxuICAgICAgXCJBV1M6OkVDMjo6U3VibmV0TmV0d29ya0FjbEFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTdWJuZXRSb3V0ZVRhYmxlQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5QXR0YWNobWVudFwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlDb25uZWN0XCIsXG4gICAgICBcIkFXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheU11bHRpY2FzdERvbWFpblwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlNdWx0aWNhc3REb21haW5Bc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlNdWx0aWNhc3RHcm91cE1lbWJlclwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlNdWx0aWNhc3RHcm91cFNvdXJjZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlQZWVyaW5nQXR0YWNobWVudFwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlSb3V0ZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlUHJvcGFnYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5VnBjQXR0YWNobWVudFwiLFxuICAgICAgXCJBV1M6OkVDMjo6VmVyaWZpZWRBY2Nlc3NFbmRwb2ludFwiLFxuICAgICAgXCJBV1M6OkVDMjo6VmVyaWZpZWRBY2Nlc3NHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6VmVyaWZpZWRBY2Nlc3NJbnN0YW5jZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6VmVyaWZpZWRBY2Nlc3NUcnVzdFByb3ZpZGVyXCIsXG4gICAgICBcIkFXUzo6RUMyOjpWb2x1bWVBdHRhY2htZW50XCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUENDaWRyQmxvY2tcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0RIQ1BPcHRpb25zQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50Q29ubmVjdGlvbk5vdGlmaWNhdGlvblwiLFxuICAgICAgXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRTZXJ2aWNlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUENFbmRwb2ludFNlcnZpY2VQZXJtaXNzaW9uc1wiLFxuICAgICAgXCJBV1M6OkVDMjo6VlBDR2F0ZXdheUF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQTkNvbm5lY3Rpb25Sb3V0ZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6VlBOR2F0ZXdheVJvdXRlUHJvcGFnYXRpb25cIixcblxuICAgICAgLy8gRUNSXG4gICAgICBcIkFXUzo6RUNSOjpQdWJsaWNSZXBvc2l0b3J5XCIsXG4gICAgICBcIkFXUzo6RUNSOjpQdWxsVGhyb3VnaENhY2hlUnVsZVwiLFxuICAgICAgXCJBV1M6OkVDUjo6UmVnaXN0cnlQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpFQ1I6OlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvblwiLFxuXG4gICAgICAvLyBFQ1NcbiAgICAgIFwiQVdTOjpFQ1M6OkFjY291bnRTZXR0aW5nXCIsXG4gICAgICBcIkFXUzo6RUNTOjpDYXBhY2l0eVByb3ZpZGVyXCIsXG4gICAgICBcIkFXUzo6RUNTOjpDbHVzdGVyQ2FwYWNpdHlQcm92aWRlckFzc29jaWF0aW9uc1wiLFxuICAgICAgXCJBV1M6OkVDUzo6UHJpbWFyeVRhc2tTZXRcIixcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tTZXRcIixcblxuICAgICAgLy8gRUZTXG4gICAgICBcIkFXUzo6RUZTOjpBY2Nlc3NQb2ludFwiLFxuICAgICAgXCJBV1M6OkVGUzo6TW91bnRUYXJnZXRcIixcblxuICAgICAgLy8gRUtTXG4gICAgICBcIkFXUzo6RUtTOjpBZGRvblwiLFxuICAgICAgXCJBV1M6OkVLUzo6RmFyZ2F0ZVByb2ZpbGVcIixcbiAgICAgIFwiQVdTOjpFS1M6OklkZW50aXR5UHJvdmlkZXJDb25maWdcIixcblxuICAgICAgLy8gRWxhc3RpQ2FjaGVcbiAgICAgIFwiQVdTOjpFbGFzdGlDYWNoZTo6UGFyYW1ldGVyR3JvdXBcIixcbiAgICAgIFwiQVdTOjpFbGFzdGlDYWNoZTo6U2VjdXJpdHlHcm91cFwiLFxuICAgICAgXCJBV1M6OkVsYXN0aUNhY2hlOjpTZWN1cml0eUdyb3VwSW5ncmVzc1wiLFxuICAgICAgXCJBV1M6OkVsYXN0aUNhY2hlOjpTdWJuZXRHcm91cFwiLFxuXG4gICAgICAvLyBFbGFzdGljQmVhbnN0YWxrXG4gICAgICBcIkFXUzo6RWxhc3RpY0JlYW5zdGFsazo6QXBwbGljYXRpb25WZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6RWxhc3RpY0JlYW5zdGFsazo6Q29uZmlndXJhdGlvblRlbXBsYXRlXCIsXG5cbiAgICAgIC8vIEVsYXN0aWNMb2FkQmFsYW5jaW5nVjJcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lclwiLFxuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6Okxpc3RlbmVyQ2VydGlmaWNhdGVcIixcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lclJ1bGVcIixcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cEF0dGFjaG1lbnRcIixcblxuICAgICAgLy8gRXZlbnRCcmlkZ2UgKEV2ZW50cylcbiAgICAgIFwiQVdTOjpFdmVudHM6OkFwaURlc3RpbmF0aW9uXCIsXG4gICAgICBcIkFXUzo6RXZlbnRzOjpBcmNoaXZlXCIsXG4gICAgICBcIkFXUzo6RXZlbnRzOjpDb25uZWN0aW9uXCIsXG4gICAgICBcIkFXUzo6RXZlbnRzOjpFbmRwb2ludFwiLFxuICAgICAgXCJBV1M6OkV2ZW50czo6RXZlbnRCdXNQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpFdmVudHM6OlJ1bGVcIixcblxuICAgICAgLy8gRlN4XG4gICAgICBcIkFXUzo6RlN4OjpEYXRhUmVwb3NpdG9yeUFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RlN4OjpTbmFwc2hvdFwiLFxuICAgICAgXCJBV1M6OkZTeDo6U3RvcmFnZVZpcnR1YWxNYWNoaW5lXCIsXG4gICAgICBcIkFXUzo6RlN4OjpWb2x1bWVcIixcblxuICAgICAgLy8gR2FtZUxpZnRcbiAgICAgIFwiQVdTOjpHYW1lTGlmdDo6R2FtZVNlcnZlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6R2FtZUxpZnQ6OkxvY2F0aW9uXCIsXG5cbiAgICAgIC8vIEdsdWVcbiAgICAgIFwiQVdTOjpHbHVlOjpDb25uZWN0aW9uXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6RGF0YWJhc2VcIixcbiAgICAgIFwiQVdTOjpHbHVlOjpEYXRhQ2F0YWxvZ0VuY3J5cHRpb25TZXR0aW5nc1wiLFxuICAgICAgXCJBV1M6OkdsdWU6OlBhcnRpdGlvblwiLFxuICAgICAgXCJBV1M6OkdsdWU6OlNjaGVtYVZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpHbHVlOjpTY2hlbWFWZXJzaW9uTWV0YWRhdGFcIixcbiAgICAgIFwiQVdTOjpHbHVlOjpTZWN1cml0eUNvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpHbHVlOjpUYWJsZVwiLFxuICAgICAgXCJBV1M6OkdsdWU6OlVzZXJEZWZpbmVkRnVuY3Rpb25cIixcblxuICAgICAgLy8gR3VhcmREdXR5XG4gICAgICBcIkFXUzo6R3VhcmREdXR5OjpEZXRlY3RvclwiLFxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6RmlsdGVyXCIsXG4gICAgICBcIkFXUzo6R3VhcmREdXR5OjpJUFNldFwiLFxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6TWFzdGVyXCIsXG4gICAgICBcIkFXUzo6R3VhcmREdXR5OjpNZW1iZXJcIixcbiAgICAgIFwiQVdTOjpHdWFyZER1dHk6OlRocmVhdEludGVsU2V0XCIsXG5cbiAgICAgIC8vIElBTVxuICAgICAgXCJBV1M6OklBTTo6QWNjZXNzS2V5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpHcm91cFwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Okluc3RhbmNlUHJvZmlsZVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6T0lEQ1Byb3ZpZGVyXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06OlNBTUxQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OklBTTo6U2VydmVyQ2VydGlmaWNhdGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlNlcnZpY2VMaW5rZWRSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyXCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyVG9Hcm91cEFkZGl0aW9uXCIsXG4gICAgICBcIkFXUzo6SUFNOjpWaXJ0dWFsTUZBRGV2aWNlXCIsXG5cbiAgICAgIC8vIElvVFxuICAgICAgXCJBV1M6OklvVDo6QWNjb3VudEF1ZGl0Q29uZmlndXJhdGlvblwiLFxuICAgICAgXCJBV1M6OklvVDo6QXV0aG9yaXplclwiLFxuICAgICAgXCJBV1M6OklvVDo6Q2VydGlmaWNhdGVcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkN1c3RvbU1ldHJpY1wiLFxuICAgICAgXCJBV1M6OklvVDo6RGltZW5zaW9uXCIsXG4gICAgICBcIkFXUzo6SW9UOjpEb21haW5Db25maWd1cmF0aW9uXCIsXG4gICAgICBcIkFXUzo6SW9UOjpGbGVldE1ldHJpY1wiLFxuICAgICAgXCJBV1M6OklvVDo6Sm9iVGVtcGxhdGVcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkxvZ2dpbmdcIixcbiAgICAgIFwiQVdTOjpJb1Q6Ok1pdGlnYXRpb25BY3Rpb25cIixcbiAgICAgIFwiQVdTOjpJb1Q6OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklvVDo6UG9saWN5UHJpbmNpcGFsQXR0YWNobWVudFwiLFxuICAgICAgXCJBV1M6OklvVDo6UHJvdmlzaW9uaW5nVGVtcGxhdGVcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlJlc291cmNlU3BlY2lmaWNMb2dnaW5nXCIsXG4gICAgICBcIkFXUzo6SW9UOjpSb2xlQWxpYXNcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlNjaGVkdWxlZEF1ZGl0XCIsXG4gICAgICBcIkFXUzo6SW9UOjpTZWN1cml0eVByb2ZpbGVcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlRoaW5nXCIsXG4gICAgICBcIkFXUzo6SW9UOjpUaGluZ0dyb3VwXCIsXG4gICAgICBcIkFXUzo6SW9UOjpUaGluZ1ByaW5jaXBhbEF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlRoaW5nVHlwZVwiLFxuICAgICAgXCJBV1M6OklvVDo6VG9waWNSdWxlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpUb3BpY1J1bGVEZXN0aW5hdGlvblwiLFxuXG4gICAgICAvLyBLTVNcbiAgICAgIFwiQVdTOjpLTVM6OkFsaWFzXCIsXG4gICAgICBcIkFXUzo6S01TOjpHcmFudFwiLFxuICAgICAgXCJBV1M6OktNUzo6UmVwbGljYUtleVwiLFxuXG4gICAgICAvLyBMYW1iZGFcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkNvZGVTaWduaW5nQ29uZmlnXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpFdmVudEludm9rZUNvbmZpZ1wiLFxuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpMYXllclZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkxheWVyVmVyc2lvblBlcm1pc3Npb25cIixcbiAgICAgIFwiQVdTOjpMYW1iZGE6OlBlcm1pc3Npb25cIixcbiAgICAgIFwiQVdTOjpMYW1iZGE6OlByb3Zpc2lvbmVkQ29uY3VycmVuY3lDb25maWdcIixcbiAgICAgIFwiQVdTOjpMYW1iZGE6OlVybFwiLFxuICAgICAgXCJBV1M6OkxhbWJkYTo6VmVyc2lvblwiLFxuXG4gICAgICAvLyBMb2dzXG4gICAgICBcIkFXUzo6TG9nczo6QWNjb3VudFBvbGljeVwiLFxuICAgICAgXCJBV1M6OkxvZ3M6OkRlc3RpbmF0aW9uXCIsXG4gICAgICBcIkFXUzo6TG9nczo6TG9nR3JvdXBcIixcbiAgICAgIFwiQVdTOjpMb2dzOjpMb2dTdHJlYW1cIixcbiAgICAgIFwiQVdTOjpMb2dzOjpNZXRyaWNGaWx0ZXJcIixcbiAgICAgIFwiQVdTOjpMb2dzOjpRdWVyeURlZmluaXRpb25cIixcbiAgICAgIFwiQVdTOjpMb2dzOjpSZXNvdXJjZVBvbGljeVwiLFxuICAgICAgXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclwiLFxuXG4gICAgICAvLyBNYWNpZVxuICAgICAgXCJBV1M6Ok1hY2llOjpBbGxvd0xpc3RcIixcbiAgICAgIFwiQVdTOjpNYWNpZTo6Q3VzdG9tRGF0YUlkZW50aWZpZXJcIixcbiAgICAgIFwiQVdTOjpNYWNpZTo6RmluZGluZ3NGaWx0ZXJcIixcbiAgICAgIFwiQVdTOjpNYWNpZTo6U2Vzc2lvblwiLFxuXG4gICAgICAvLyBOZXB0dW5lXG4gICAgICBcIkFXUzo6TmVwdHVuZTo6REJDbHVzdGVyUGFyYW1ldGVyR3JvdXBcIixcbiAgICAgIFwiQVdTOjpOZXB0dW5lOjpEQlBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6TmVwdHVuZTo6REJTdWJuZXRHcm91cFwiLFxuXG4gICAgICAvLyBPcmdhbml6YXRpb25zXG4gICAgICBcIkFXUzo6T3JnYW5pemF0aW9uczo6QWNjb3VudFwiLFxuICAgICAgXCJBV1M6Ok9yZ2FuaXphdGlvbnM6Ok9yZ2FuaXphdGlvblwiLFxuICAgICAgXCJBV1M6Ok9yZ2FuaXphdGlvbnM6Ok9yZ2FuaXphdGlvbmFsVW5pdFwiLFxuICAgICAgXCJBV1M6Ok9yZ2FuaXphdGlvbnM6OlBvbGljeVwiLFxuICAgICAgXCJBV1M6Ok9yZ2FuaXphdGlvbnM6OlJlc291cmNlUG9saWN5XCIsXG5cbiAgICAgIC8vIFJEU1xuICAgICAgXCJBV1M6OlJEUzo6REJDbHVzdGVyUGFyYW1ldGVyR3JvdXBcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCUGFyYW1ldGVyR3JvdXBcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCUHJveHlFbmRwb2ludFwiLFxuICAgICAgXCJBV1M6OlJEUzo6REJQcm94eVRhcmdldEdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCU2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCU3VibmV0R3JvdXBcIixcbiAgICAgIFwiQVdTOjpSRFM6OkV2ZW50U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6UkRTOjpHbG9iYWxDbHVzdGVyXCIsXG4gICAgICBcIkFXUzo6UkRTOjpPcHRpb25Hcm91cFwiLFxuXG4gICAgICAvLyBSZWRzaGlmdFxuICAgICAgXCJBV1M6OlJlZHNoaWZ0OjpDbHVzdGVyUGFyYW1ldGVyR3JvdXBcIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6Q2x1c3RlclNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6Q2x1c3RlclNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6UmVkc2hpZnQ6OkNsdXN0ZXJTdWJuZXRHcm91cFwiLFxuICAgICAgXCJBV1M6OlJlZHNoaWZ0OjpFbmRwb2ludEFjY2Vzc1wiLFxuICAgICAgXCJBV1M6OlJlZHNoaWZ0OjpFbmRwb2ludEF1dGhvcml6YXRpb25cIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6RXZlbnRTdWJzY3JpcHRpb25cIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6U2NoZWR1bGVkQWN0aW9uXCIsXG5cbiAgICAgIC8vIFJvdXRlNTNcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpETlNTRUNcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpIZWFsdGhDaGVja1wiLFxuICAgICAgXCJBV1M6OlJvdXRlNTM6Okhvc3RlZFpvbmVcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpLZXlTaWduaW5nS2V5XCIsXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCIsXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0R3JvdXBcIixcblxuICAgICAgLy8gUm91dGU1M1Jlc29sdmVyXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpGaXJld2FsbERvbWFpbkxpc3RcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzUmVzb2x2ZXI6OkZpcmV3YWxsUnVsZUdyb3VwXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpGaXJld2FsbFJ1bGVHcm91cEFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlckNvbmZpZ1wiLFxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJETlNTRUNDb25maWdcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzUmVzb2x2ZXI6OlJlc29sdmVyUXVlcnlMb2dnaW5nQ29uZmlnXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlclF1ZXJ5TG9nZ2luZ0NvbmZpZ0Fzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlclJ1bGVcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzUmVzb2x2ZXI6OlJlc29sdmVyUnVsZUFzc29jaWF0aW9uXCIsXG5cbiAgICAgIC8vIFMzXG4gICAgICBcIkFXUzo6UzM6OkFjY2Vzc1BvaW50XCIsXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFBvbGljeVwiLFxuICAgICAgXCJBV1M6OlMzOjpNdWx0aVJlZ2lvbkFjY2Vzc1BvaW50XCIsXG4gICAgICBcIkFXUzo6UzM6Ok11bHRpUmVnaW9uQWNjZXNzUG9pbnRQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpTMzo6U3RvcmFnZUxlbnNcIixcblxuICAgICAgLy8gU0RCXG4gICAgICBcIkFXUzo6U0RCOjpEb21haW5cIixcblxuICAgICAgLy8gU2VjcmV0c01hbmFnZXJcbiAgICAgIFwiQVdTOjpTZWNyZXRzTWFuYWdlcjo6UmVzb3VyY2VQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpTZWNyZXRzTWFuYWdlcjo6Um90YXRpb25TY2hlZHVsZVwiLFxuICAgICAgXCJBV1M6OlNlY3JldHNNYW5hZ2VyOjpTZWNyZXRUYXJnZXRBdHRhY2htZW50XCIsXG5cbiAgICAgIC8vIFNlY3VyaXR5SHViXG4gICAgICBcIkFXUzo6U2VjdXJpdHlIdWI6Okh1YlwiLFxuXG4gICAgICAvLyBTZXJ2aWNlQ2F0YWxvZ1xuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpBY2NlcHRlZFBvcnRmb2xpb1NoYXJlXCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OkxhdW5jaE5vdGlmaWNhdGlvbkNvbnN0cmFpbnRcIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6TGF1bmNoUm9sZUNvbnN0cmFpbnRcIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6TGF1bmNoVGVtcGxhdGVDb25zdHJhaW50XCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OlBvcnRmb2xpb1ByaW5jaXBhbEFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OlBvcnRmb2xpb1Byb2R1Y3RBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpQb3J0Zm9saW9TaGFyZVwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpSZXNvdXJjZVVwZGF0ZUNvbnN0cmFpbnRcIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6U2VydmljZUFjdGlvblwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpTZXJ2aWNlQWN0aW9uQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6U3RhY2tTZXRDb25zdHJhaW50XCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OlRhZ09wdGlvblwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpUYWdPcHRpb25Bc3NvY2lhdGlvblwiLFxuXG4gICAgICAvLyBTRVNcbiAgICAgIFwiQVdTOjpTRVM6OkNvbmZpZ3VyYXRpb25TZXRcIixcbiAgICAgIFwiQVdTOjpTRVM6OkNvbmZpZ3VyYXRpb25TZXRFdmVudERlc3RpbmF0aW9uXCIsXG4gICAgICBcIkFXUzo6U0VTOjpDb250YWN0TGlzdFwiLFxuICAgICAgXCJBV1M6OlNFUzo6RGVkaWNhdGVkSXBQb29sXCIsXG4gICAgICBcIkFXUzo6U0VTOjpFbWFpbElkZW50aXR5XCIsXG4gICAgICBcIkFXUzo6U0VTOjpSZWNlaXB0RmlsdGVyXCIsXG4gICAgICBcIkFXUzo6U0VTOjpSZWNlaXB0UnVsZVwiLFxuICAgICAgXCJBV1M6OlNFUzo6UmVjZWlwdFJ1bGVTZXRcIixcbiAgICAgIFwiQVdTOjpTRVM6OlRlbXBsYXRlXCIsXG4gICAgICBcIkFXUzo6U0VTOjpWZG1BdHRyaWJ1dGVzXCIsXG5cbiAgICAgIC8vIFNOU1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1BvbGljeVwiLFxuXG4gICAgICAvLyBTUVNcbiAgICAgIFwiQVdTOjpTUVM6OlF1ZXVlUG9saWN5XCIsXG5cbiAgICAgIC8vIFNTTVxuICAgICAgXCJBV1M6OlNTTTo6QXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpTU006OkRvY3VtZW50XCIsXG4gICAgICBcIkFXUzo6U1NNOjpNYWludGVuYW5jZVdpbmRvd1wiLFxuICAgICAgXCJBV1M6OlNTTTo6TWFpbnRlbmFuY2VXaW5kb3dUYXJnZXRcIixcbiAgICAgIFwiQVdTOjpTU006Ok1haW50ZW5hbmNlV2luZG93VGFza1wiLFxuICAgICAgXCJBV1M6OlNTTTo6UGFyYW1ldGVyXCIsXG4gICAgICBcIkFXUzo6U1NNOjpQYXRjaEJhc2VsaW5lXCIsXG4gICAgICBcIkFXUzo6U1NNOjpSZXNvdXJjZURhdGFTeW5jXCIsXG4gICAgICBcIkFXUzo6U1NNOjpSZXNvdXJjZVBvbGljeVwiLFxuXG4gICAgICAvLyBTU09cbiAgICAgIFwiQVdTOjpTU086OkFzc2lnbm1lbnRcIixcbiAgICAgIFwiQVdTOjpTU086Okluc3RhbmNlQWNjZXNzQ29udHJvbEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpTU086OlBlcm1pc3Npb25TZXRcIixcblxuICAgICAgLy8gU3RlcEZ1bmN0aW9uc1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OkFjdGl2aXR5XCIsXG5cbiAgICAgIC8vIFdBRi9XQUZ2MlxuICAgICAgXCJBV1M6OldBRjo6Qnl0ZU1hdGNoU2V0XCIsXG4gICAgICBcIkFXUzo6V0FGOjpJUFNldFwiLFxuICAgICAgXCJBV1M6OldBRjo6UnVsZVwiLFxuICAgICAgXCJBV1M6OldBRjo6U2l6ZUNvbnN0cmFpbnRTZXRcIixcbiAgICAgIFwiQVdTOjpXQUY6OlNxbEluamVjdGlvbk1hdGNoU2V0XCIsXG4gICAgICBcIkFXUzo6V0FGOjpXZWJBQ0xcIixcbiAgICAgIFwiQVdTOjpXQUY6Olhzc01hdGNoU2V0XCIsXG4gICAgICBcIkFXUzo6V0FGUmVnaW9uYWw6OkJ5dGVNYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpHZW9NYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpJUFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpSYXRlQmFzZWRSdWxlXCIsXG4gICAgICBcIkFXUzo6V0FGUmVnaW9uYWw6OlJlZ2V4UGF0dGVyblNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpSdWxlXCIsXG4gICAgICBcIkFXUzo6V0FGUmVnaW9uYWw6OlNpemVDb25zdHJhaW50U2V0XCIsXG4gICAgICBcIkFXUzo6V0FGUmVnaW9uYWw6OlNxbEluamVjdGlvbk1hdGNoU2V0XCIsXG4gICAgICBcIkFXUzo6V0FGUmVnaW9uYWw6OldlYkFDTFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpXZWJBQ0xBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpYc3NNYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRnYyOjpJUFNldFwiLFxuICAgICAgXCJBV1M6OldBRnYyOjpMb2dnaW5nQ29uZmlndXJhdGlvblwiLFxuICAgICAgXCJBV1M6OldBRnYyOjpSZWdleFBhdHRlcm5TZXRcIixcbiAgICAgIFwiQVdTOjpXQUZ2Mjo6UnVsZUdyb3VwXCIsXG4gICAgICBcIkFXUzo6V0FGdjI6OldlYkFDTFwiLFxuICAgICAgXCJBV1M6OldBRnYyOjpXZWJBQ0xBc3NvY2lhdGlvblwiLFxuXG4gICAgICAvLyBTZXJ2ZXJsZXNzXG4gICAgICBcIkFXUzo6U2VydmVybGVzczo6QXBpXCIsXG4gICAgICBcIkFXUzo6U2VydmVybGVzczo6QXBwbGljYXRpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2ZXJsZXNzOjpGdW5jdGlvblwiLFxuICAgICAgXCJBV1M6OlNlcnZlcmxlc3M6Okh0dHBBcGlcIixcbiAgICAgIFwiQVdTOjpTZXJ2ZXJsZXNzOjpMYXllclZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2ZXJsZXNzOjpTaW1wbGVUYWJsZVwiLFxuICAgICAgXCJBV1M6OlNlcnZlcmxlc3M6OlN0YXRlTWFjaGluZVwiXG4gICAgXTtcblxuICAgIGlmICh1bnN1cHBvcnRlZFR5cGVzLmluY2x1ZGVzKHJlc291cmNlLmNmblJlc291cmNlVHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBZGQgYSBzeW50aGVzaXMgaG9vayB0byBtb2RpZnkgdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlXG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihyZXNvdXJjZSk7XG4gICAgY29uc3QgbG9naWNhbElkID0gc3RhY2suZ2V0TG9naWNhbElkKHJlc291cmNlKTtcblxuICAgIC8vIFVzZSBhZGRUcmFuc2Zvcm0gdG8gYWRkIHRhZ3MgZHVyaW5nIHN5bnRoZXNpc1xuICAgIHJlc291cmNlLmFkZFByb3BlcnR5T3ZlcnJpZGUoXCJUYWdzXCIsIHRoaXMuYnVpbGRUYWdzQXJyYXkocmVzb3VyY2UpKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRUYWdzQXJyYXkocmVzb3VyY2U6IENmblJlc291cmNlKTogYW55W10ge1xuICAgIGNvbnN0IHRhZ01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICAvLyBBZGQgSVBBTSBwb29sIHRhZyBmb3IgVlBDcyB3aXRoIElQQU0gY29uZmlndXJhdGlvblxuICAgIGlmIChyZXNvdXJjZS5jZm5SZXNvdXJjZVR5cGUgPT09IFwiQVdTOjpFQzI6OlZQQ1wiKSB7XG4gICAgICBjb25zdCB2cGMgPSByZXNvdXJjZSBhcyBDZm5WUEM7XG4gICAgICBjb25zdCBpcGFtUG9vbElkID0gdnBjLmlwdjRJcGFtUG9vbElkO1xuXG4gICAgICBpZiAoaXBhbVBvb2xJZCkge1xuICAgICAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHJlc291cmNlKTtcbiAgICAgICAgY29uc3QgYWNjb3VudElkID1cbiAgICAgICAgICBzdGFjay5ub2RlLnRyeUdldENvbnRleHQoXCJhY2NvdW50SWRcIikgfHxcbiAgICAgICAgICBzdGFjay5hY2NvdW50IHx8XG4gICAgICAgICAgcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfQUNDT1VOVDtcbiAgICAgICAgY29uc3QgcmVnaW9uID0gc3RhY2sucmVnaW9uIHx8IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX1JFR0lPTjtcbiAgICAgICAgaWYgKGFjY291bnRJZCAmJiByZWdpb24pIHtcbiAgICAgICAgICB0YWdNYXAuc2V0KFwiZmphbGw6b3BlcmF0aW9uczpwb29sXCIsIGAke2FjY291bnRJZH0tJHtyZWdpb259YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBzdGFuZGFyZCB0YWdzXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5yZXF1aXJlZFRhZ3MpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgdGFnTWFwLnNldChrZXksIHZhbHVlKTtcbiAgICB9KTtcblxuICAgIC8vIENvbnZlcnQgdG8gQ2xvdWRGb3JtYXRpb24gZm9ybWF0XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGFnTWFwLmVudHJpZXMoKSkubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICBLZXk6IGtleSxcbiAgICAgIFZhbHVlOiB2YWx1ZVxuICAgIH0pKTtcbiAgfVxufVxuIl19
|
|
495
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmRUYWdzQXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3V0aWxzL3N0YW5kYXJkVGFnc0FzcGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBMEQ7QUFJMUQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsa0JBQWtCO0lBSTdCLFlBQVksWUFBdUM7UUFGbEMsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFDO1FBRzNELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBZ0I7UUFDcEIsNEJBQTRCO1FBQzVCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPO1FBQ1QsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxJQUFJLHlCQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQW1CLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFFBQXFCO1FBQzlDLDZGQUE2RjtRQUM3RixJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTztRQUNULENBQUM7UUFFRCw4RUFBOEU7UUFDOUUsK0VBQStFO1FBQy9FLE1BQU0sZ0JBQWdCLEdBQUc7WUFDdkIsTUFBTTtZQUNOLGtDQUFrQztZQUVsQyxjQUFjO1lBQ2QsMEJBQTBCO1lBQzFCLGtDQUFrQztZQUNsQyw2QkFBNkI7WUFDN0Isb0NBQW9DO1lBQ3BDLHVDQUF1QztZQUN2QyxrQ0FBa0M7WUFDbEMseUJBQXlCO1lBQ3pCLHdCQUF3QjtZ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QUE2QixFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUNwRCxNQUFNO2dCQUNSLENBQUM7Z0JBQ0QsU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO1FBRUQsc0JBQXNCO1FBQ3RCLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDekQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFFSCxtQ0FBbUM7UUFDbkMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELEdBQUcsRUFBRSxHQUFHO1lBQ1IsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7Q0FDRjtBQW5pQkQsZ0RBbWlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElBc3BlY3QsIENmblJlc291cmNlLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ2ZuVlBDIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIEFzcGVjdCB0byBlbmZvcmNlIGEgc3RhbmRhcmQgc2V0IG9mIHRhZ3Mgb24gZXZlcnkgdGFnLWNhcGFibGUgcmVzb3VyY2UgaW4gYSBjb25zdHJ1Y3QgdHJlZS5cbiAqXG4gKiBVcGRhdGVkIGZvciBDREsgdjIuMjA2LjArIGNvbXBhdGliaWxpdHk6XG4gKiAtIEF2b2lkcyB1c2luZyBhbnkgdGFnZ2luZyBBUElzIGR1cmluZyBhc3BlY3QgdmlzaXRhdGlvbiB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzXG4gKiAtIFVzZXMgYSBzeW50aGVzaXMtdGltZSBhcHByb2FjaCB0byBtb2RpZnkgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVzXG4gKiAtIE1haW50YWlucyB0aGUgc2FtZSBjbGVhbiBBUEkgYW5kIGF1dG9tYXRpYyB0YWdnaW5nIGJlbmVmaXRzXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFuZGFyZFRhZ3NBc3BlY3QgaW1wbGVtZW50cyBJQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1aXJlZFRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFnZ2VkUmVzb3VyY2VzID0gbmV3IFdlYWtTZXQ8SUNvbnN0cnVjdD4oKTtcblxuICBjb25zdHJ1Y3RvcihyZXF1aXJlZFRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnJlcXVpcmVkVGFncyA9IHJlcXVpcmVkVGFncztcbiAgfVxuXG4gIHZpc2l0KG5vZGU6IElDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICAvLyBTa2lwIGlmIGFscmVhZHkgcHJvY2Vzc2VkXG4gICAgaWYgKHRoaXMudGFnZ2VkUmVzb3VyY2VzLmhhcyhub2RlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgTDEgKENGTikgcmVzb3VyY2VzIG9ubHlcbiAgICBpZiAoQ2ZuUmVzb3VyY2UuaXNDZm5SZXNvdXJjZShub2RlKSkge1xuICAgICAgdGhpcy5wcm9jZXNzQ2ZuUmVzb3VyY2Uobm9kZSBhcyBDZm5SZXNvdXJjZSk7XG4gICAgICB0aGlzLnRhZ2dlZFJlc291cmNlcy5hZGQobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzQ2ZuUmVzb3VyY2UocmVzb3VyY2U6IENmblJlc291cmNlKTogdm9pZCB7XG4gICAgLy8gU2tpcCBTZWNyZXRSb3RhdGlvbiByZXNvdXJjZXMgYXMgdGhleSBjcmVhdGUgbmVzdGVkIHN0YWNrcyB3aXRoIGRpZmZlcmVudCB0YWcgcmVxdWlyZW1lbnRzXG4gICAgaWYgKHJlc291cmNlLm5vZGUucGF0aC5pbmNsdWRlcyhcIlNlY3JldFJvdGF0aW9uXCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ29tcHJlaGVuc2l2ZSBsaXN0IG9mIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHR5cGVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0YWdzXG4gICAgLy8gVGhpcyBsaXN0IGlzIGJhc2VkIG9uIEFXUyBDbG91ZEZvcm1hdGlvbiBkb2N1bWVudGF0aW9uIGFuZCBrbm93biBsaW1pdGF0aW9uc1xuICAgIGNvbnN0IHVuc3VwcG9ydGVkVHlwZXMgPSBbXG4gICAgICAvLyBBQ01cbiAgICAgIFwiQVdTOjpDZXJ0aWZpY2F0ZU1hbmFnZXI6OkFjY291bnRcIixcblxuICAgICAgLy8gQVBJIEdhdGV3YXlcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpBY2NvdW50XCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6QmFzZVBhdGhNYXBwaW5nXCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudFwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkRvY3VtZW50YXRpb25QYXJ0XCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6RG9jdW1lbnRhdGlvblZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpHYXRld2F5UmVzcG9uc2VcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNb2RlbFwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OlJlcXVlc3RWYWxpZGF0b3JcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpSZXNvdXJjZVwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpTWFwcGluZ1wiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXV0aG9yaXplclwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6RGVwbG95bWVudFwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uUmVzcG9uc2VcIixcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6Ok1vZGVsXCIsXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVwiLFxuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVSZXNwb25zZVwiLFxuXG4gICAgICAvLyBBcHBTeW5jXG4gICAgICBcIkFXUzo6QXBwU3luYzo6RGF0YVNvdXJjZVwiLFxuICAgICAgXCJBV1M6OkFwcFN5bmM6OkZ1bmN0aW9uQ29uZmlndXJhdGlvblwiLFxuICAgICAgXCJBV1M6OkFwcFN5bmM6OlJlc29sdmVyXCIsXG5cbiAgICAgIC8vIEF0aGVuYVxuICAgICAgXCJBV1M6OkF0aGVuYTo6UHJlcGFyZWRTdGF0ZW1lbnRcIixcblxuICAgICAgLy8gQ2xvdWRGb3JtYXRpb25cbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6Q3VzdG9tUmVzb3VyY2VcIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6TWFjcm9cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6TW9kdWxlRGVmYXVsdFZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6TW9kdWxlVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpQdWJsaWNUeXBlVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpQdWJsaXNoZXJcIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6UmVzb3VyY2VEZWZhdWx0VmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpSZXNvdXJjZVZlcnNpb25cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6VHlwZUFjdGl2YXRpb25cIixcbiAgICAgIFwiQVdTOjpDbG91ZEZvcm1hdGlvbjo6V2FpdENvbmRpdGlvblwiLFxuICAgICAgXCJBV1M6OkNsb3VkRm9ybWF0aW9uOjpXYWl0Q29uZGl0aW9uSGFuZGxlXCIsXG5cbiAgICAgIC8vIENsb3VkV2F0Y2hcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiLFxuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFub21hbHlEZXRlY3RvclwiLFxuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkNvbXBvc2l0ZUFsYXJtXCIsXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXCIsXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6SW5zaWdodFJ1bGVcIixcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpNZXRyaWNTdHJlYW1cIixcblxuICAgICAgLy8gQ29kZUJ1aWxkXG4gICAgICBcIkFXUzo6Q29kZUJ1aWxkOjpSZXBvcnRHcm91cFwiLFxuICAgICAgXCJBV1M6OkNvZGVCdWlsZDo6U291cmNlQ3JlZGVudGlhbFwiLFxuXG4gICAgICAvLyBDb2RlRGVwbG95XG4gICAgICBcIkFXUzo6Q29kZURlcGxveTo6RGVwbG95bWVudENvbmZpZ1wiLFxuXG4gICAgICAvLyBDb2RlUGlwZWxpbmVcbiAgICAgIFwiQVdTOjpDb2RlUGlwZWxpbmU6OkN1c3RvbUFjdGlvblR5cGVcIixcbiAgICAgIFwiQVdTOjpDb2RlUGlwZWxpbmU6OldlYmhvb2tcIixcblxuICAgICAgLy8gQ29nbml0b1xuICAgICAgXCJBV1M6OkNvZ25pdG86OklkZW50aXR5UG9vbFJvbGVBdHRhY2htZW50XCIsXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbERvbWFpblwiLFxuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sR3JvdXBcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbElkZW50aXR5UHJvdmlkZXJcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFJlc291cmNlU2VydmVyXCIsXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xSaXNrQ29uZmlndXJhdGlvbkF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVJQ3VzdG9taXphdGlvbkF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVzZXJcIixcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFVzZXJUb0dyb3VwQXR0YWNobWVudFwiLFxuXG4gICAgICAvLyBDb25maWdcbiAgICAgIFwiQVdTOjpDb25maWc6OkFnZ3JlZ2F0aW9uQXV0aG9yaXphdGlvblwiLFxuICAgICAgXCJBV1M6OkNvbmZpZzo6Q29uZmlndXJhdGlvbkFnZ3JlZ2F0b3JcIixcbiAgICAgIFwiQVdTOjpDb25maWc6OkNvbmZvcm1hbmNlUGFja1wiLFxuICAgICAgXCJBV1M6OkNvbmZpZzo6T3JnYW5pemF0aW9uQ29uZm9ybWFuY2VQYWNrXCIsXG4gICAgICBcIkFXUzo6Q29uZmlnOjpSZW1lZGlhdGlvbkNvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpDb25maWc6OlN0b3JlZFF1ZXJ5XCIsXG5cbiAgICAgIC8vIER5bmFtb0RCXG4gICAgICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCIsXG5cbiAgICAgIC8vIEVDMlxuICAgICAgXCJBV1M6OkVDMjo6Q2FwYWNpdHlSZXNlcnZhdGlvbkZsZWV0XCIsXG4gICAgICBcIkFXUzo6RUMyOjpDYXJyaWVyR2F0ZXdheVwiLFxuICAgICAgXCJBV1M6OkVDMjo6REhDUE9wdGlvbnNcIixcbiAgICAgIFwiQVdTOjpFQzI6OkVDMkZsZWV0XCIsXG4gICAgICBcIkFXUzo6RUMyOjpFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5XCIsXG4gICAgICBcIkFXUzo6RUMyOjpFSVBBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkVDMjo6RW5jbGF2ZUNlcnRpZmljYXRlSWFtUm9sZUFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpGbG93TG9nXCIsXG4gICAgICBcIkFXUzo6RUMyOjpHYXRld2F5Um91dGVUYWJsZUFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpJbnN0YW5jZUNvbm5lY3RFbmRwb2ludFwiLFxuICAgICAgXCJBV1M6OkVDMjo6S2V5UGFpclwiLFxuICAgICAgXCJBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGVcIixcbiAgICAgIFwiQVdTOjpFQzI6Ok5ldHdvcmtJbnNpZ2h0c0FjY2Vzc1Njb3BlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpOZXR3b3JrSW5zaWdodHNBY2Nlc3NTY29wZUFuYWx5c2lzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpOZXR3b3JrSW5zaWdodHNBbmFseXNpc1wiLFxuICAgICAgXCJBV1M6OkVDMjo6TmV0d29ya0luc2lnaHRzUGF0aFwiLFxuICAgICAgXCJBV1M6OkVDMjo6TmV0d29ya0ludGVyZmFjZUF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6Ok5ldHdvcmtJbnRlcmZhY2VQZXJtaXNzaW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpQbGFjZW1lbnRHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6Um91dGVcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTdWJuZXRDaWRyQmxvY2tcIixcbiAgICAgIFwiQVdTOjpFQzI6OlN1Ym5ldE5ldHdvcmtBY2xBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkVDMjo6U3VibmV0Um91dGVUYWJsZUFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheUF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Q29ubmVjdFwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlNdWx0aWNhc3REb21haW5cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0RG9tYWluQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0R3JvdXBNZW1iZXJcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5TXVsdGljYXN0R3JvdXBTb3VyY2VcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5UGVlcmluZ0F0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVcIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVUYWJsZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlRyYW5zaXRHYXRld2F5Um91dGVUYWJsZVByb3BhZ2F0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpUcmFuc2l0R2F0ZXdheVZwY0F0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzRW5kcG9pbnRcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzR3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzSW5zdGFuY2VcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZlcmlmaWVkQWNjZXNzVHJ1c3RQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OkVDMjo6Vm9sdW1lQXR0YWNobWVudFwiLFxuICAgICAgXCJBV1M6OkVDMjo6VlBDQ2lkckJsb2NrXCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUENESENQT3B0aW9uc0Fzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUENFbmRwb2ludENvbm5lY3Rpb25Ob3RpZmljYXRpb25cIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50U2VydmljZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRTZXJ2aWNlUGVybWlzc2lvbnNcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0dhdGV3YXlBdHRhY2htZW50XCIsXG4gICAgICBcIkFXUzo6RUMyOjpWUE5Db25uZWN0aW9uUm91dGVcIixcbiAgICAgIFwiQVdTOjpFQzI6OlZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uXCIsXG5cbiAgICAgIC8vIEVDUlxuICAgICAgXCJBV1M6OkVDUjo6UHVibGljUmVwb3NpdG9yeVwiLFxuICAgICAgXCJBV1M6OkVDUjo6UHVsbFRocm91Z2hDYWNoZVJ1bGVcIixcbiAgICAgIFwiQVdTOjpFQ1I6OlJlZ2lzdHJ5UG9saWN5XCIsXG4gICAgICBcIkFXUzo6RUNSOjpSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb25cIixcblxuICAgICAgLy8gRUNTXG4gICAgICBcIkFXUzo6RUNTOjpBY2NvdW50U2V0dGluZ1wiLFxuICAgICAgXCJBV1M6OkVDUzo6Q2FwYWNpdHlQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OkVDUzo6Q2x1c3RlckNhcGFjaXR5UHJvdmlkZXJBc3NvY2lhdGlvbnNcIixcbiAgICAgIFwiQVdTOjpFQ1M6OlByaW1hcnlUYXNrU2V0XCIsXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrU2V0XCIsXG5cbiAgICAgIC8vIEVGU1xuICAgICAgXCJBV1M6OkVGUzo6QWNjZXNzUG9pbnRcIixcbiAgICAgIFwiQVdTOjpFRlM6Ok1vdW50VGFyZ2V0XCIsXG5cbiAgICAgIC8vIEVLU1xuICAgICAgXCJBV1M6OkVLUzo6QWRkb25cIixcbiAgICAgIFwiQVdTOjpFS1M6OkZhcmdhdGVQcm9maWxlXCIsXG4gICAgICBcIkFXUzo6RUtTOjpJZGVudGl0eVByb3ZpZGVyQ29uZmlnXCIsXG5cbiAgICAgIC8vIEVsYXN0aUNhY2hlXG4gICAgICBcIkFXUzo6RWxhc3RpQ2FjaGU6OlBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6RWxhc3RpQ2FjaGU6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFbGFzdGlDYWNoZTo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFbGFzdGlDYWNoZTo6U3VibmV0R3JvdXBcIixcblxuICAgICAgLy8gRWxhc3RpY0JlYW5zdGFsa1xuICAgICAgXCJBV1M6OkVsYXN0aWNCZWFuc3RhbGs6OkFwcGxpY2F0aW9uVmVyc2lvblwiLFxuICAgICAgXCJBV1M6OkVsYXN0aWNCZWFuc3RhbGs6OkNvbmZpZ3VyYXRpb25UZW1wbGF0ZVwiLFxuXG4gICAgICAvLyBFbGFzdGljTG9hZEJhbGFuY2luZ1YyXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJcIixcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lckNlcnRpZmljYXRlXCIsXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJSdWxlXCIsXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBBdHRhY2htZW50XCIsXG5cbiAgICAgIC8vIEV2ZW50QnJpZGdlIChFdmVudHMpXG4gICAgICBcIkFXUzo6RXZlbnRzOjpBcGlEZXN0aW5hdGlvblwiLFxuICAgICAgXCJBV1M6OkV2ZW50czo6QXJjaGl2ZVwiLFxuICAgICAgXCJBV1M6OkV2ZW50czo6Q29ubmVjdGlvblwiLFxuICAgICAgXCJBV1M6OkV2ZW50czo6RW5kcG9pbnRcIixcbiAgICAgIFwiQVdTOjpFdmVudHM6OkV2ZW50QnVzUG9saWN5XCIsXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCIsXG5cbiAgICAgIC8vIEZTeFxuICAgICAgXCJBV1M6OkZTeDo6RGF0YVJlcG9zaXRvcnlBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OkZTeDo6U25hcHNob3RcIixcbiAgICAgIFwiQVdTOjpGU3g6OlN0b3JhZ2VWaXJ0dWFsTWFjaGluZVwiLFxuICAgICAgXCJBV1M6OkZTeDo6Vm9sdW1lXCIsXG5cbiAgICAgIC8vIEdhbWVMaWZ0XG4gICAgICBcIkFXUzo6R2FtZUxpZnQ6OkdhbWVTZXJ2ZXJHcm91cFwiLFxuICAgICAgXCJBV1M6OkdhbWVMaWZ0OjpMb2NhdGlvblwiLFxuXG4gICAgICAvLyBHbHVlXG4gICAgICBcIkFXUzo6R2x1ZTo6Q29ubmVjdGlvblwiLFxuICAgICAgXCJBV1M6OkdsdWU6OkRhdGFiYXNlXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6RGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NcIixcbiAgICAgIFwiQVdTOjpHbHVlOjpQYXJ0aXRpb25cIixcbiAgICAgIFwiQVdTOjpHbHVlOjpTY2hlbWFWZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6U2NoZW1hVmVyc2lvbk1ldGFkYXRhXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6U2VjdXJpdHlDb25maWd1cmF0aW9uXCIsXG4gICAgICBcIkFXUzo6R2x1ZTo6VGFibGVcIixcbiAgICAgIFwiQVdTOjpHbHVlOjpVc2VyRGVmaW5lZEZ1bmN0aW9uXCIsXG5cbiAgICAgIC8vIEd1YXJkRHV0eVxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6RGV0ZWN0b3JcIixcbiAgICAgIFwiQVdTOjpHdWFyZER1dHk6OkZpbHRlclwiLFxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6SVBTZXRcIixcbiAgICAgIFwiQVdTOjpHdWFyZER1dHk6Ok1hc3RlclwiLFxuICAgICAgXCJBV1M6Okd1YXJkRHV0eTo6TWVtYmVyXCIsXG4gICAgICBcIkFXUzo6R3VhcmREdXR5OjpUaHJlYXRJbnRlbFNldFwiLFxuXG4gICAgICAvLyBJQU1cbiAgICAgIFwiQVdTOjpJQU06OkFjY2Vzc0tleVwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBcIixcbiAgICAgIFwiQVdTOjpJQU06Okdyb3VwUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpJbnN0YW5jZVByb2ZpbGVcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok9JRENQcm92aWRlclwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpTQU1MUHJvdmlkZXJcIixcbiAgICAgIFwiQVdTOjpJQU06OlNlcnZlckNlcnRpZmljYXRlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpTZXJ2aWNlTGlua2VkUm9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclRvR3JvdXBBZGRpdGlvblwiLFxuICAgICAgXCJBV1M6OklBTTo6VmlydHVhbE1GQURldmljZVwiLFxuXG4gICAgICAvLyBJb1RcbiAgICAgIFwiQVdTOjpJb1Q6OkFjY291bnRBdWRpdENvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpJb1Q6OkF1dGhvcml6ZXJcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkNlcnRpZmljYXRlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpDdXN0b21NZXRyaWNcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkRpbWVuc2lvblwiLFxuICAgICAgXCJBV1M6OklvVDo6RG9tYWluQ29uZmlndXJhdGlvblwiLFxuICAgICAgXCJBV1M6OklvVDo6RmxlZXRNZXRyaWNcIixcbiAgICAgIFwiQVdTOjpJb1Q6OkpvYlRlbXBsYXRlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpMb2dnaW5nXCIsXG4gICAgICBcIkFXUzo6SW9UOjpNaXRpZ2F0aW9uQWN0aW9uXCIsXG4gICAgICBcIkFXUzo6SW9UOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlBvbGljeVByaW5jaXBhbEF0dGFjaG1lbnRcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlByb3Zpc2lvbmluZ1RlbXBsYXRlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpSZXNvdXJjZVNwZWNpZmljTG9nZ2luZ1wiLFxuICAgICAgXCJBV1M6OklvVDo6Um9sZUFsaWFzXCIsXG4gICAgICBcIkFXUzo6SW9UOjpTY2hlZHVsZWRBdWRpdFwiLFxuICAgICAgXCJBV1M6OklvVDo6U2VjdXJpdHlQcm9maWxlXCIsXG4gICAgICBcIkFXUzo6SW9UOjpUaGluZ1wiLFxuICAgICAgXCJBV1M6OklvVDo6VGhpbmdHcm91cFwiLFxuICAgICAgXCJBV1M6OklvVDo6VGhpbmdQcmluY2lwYWxBdHRhY2htZW50XCIsXG4gICAgICBcIkFXUzo6SW9UOjpUaGluZ1R5cGVcIixcbiAgICAgIFwiQVdTOjpJb1Q6OlRvcGljUnVsZVwiLFxuICAgICAgXCJBV1M6OklvVDo6VG9waWNSdWxlRGVzdGluYXRpb25cIixcblxuICAgICAgLy8gS01TXG4gICAgICBcIkFXUzo6S01TOjpBbGlhc1wiLFxuICAgICAgXCJBV1M6OktNUzo6R3JhbnRcIixcbiAgICAgIFwiQVdTOjpLTVM6OlJlcGxpY2FLZXlcIixcblxuICAgICAgLy8gTGFtYmRhXG4gICAgICBcIkFXUzo6TGFtYmRhOjpDb2RlU2lnbmluZ0NvbmZpZ1wiLFxuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRJbnZva2VDb25maWdcIixcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkV2ZW50U291cmNlTWFwcGluZ1wiLFxuICAgICAgXCJBV1M6OkxhbWJkYTo6TGF5ZXJWZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpMYXllclZlcnNpb25QZXJtaXNzaW9uXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpQZXJtaXNzaW9uXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpQcm92aXNpb25lZENvbmN1cnJlbmN5Q29uZmlnXCIsXG4gICAgICBcIkFXUzo6TGFtYmRhOjpVcmxcIixcbiAgICAgIFwiQVdTOjpMYW1iZGE6OlZlcnNpb25cIixcblxuICAgICAgLy8gTG9nc1xuICAgICAgXCJBV1M6OkxvZ3M6OkFjY291bnRQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpMb2dzOjpEZXN0aW5hdGlvblwiLFxuICAgICAgXCJBV1M6OkxvZ3M6OkxvZ0dyb3VwXCIsXG4gICAgICBcIkFXUzo6TG9nczo6TG9nU3RyZWFtXCIsXG4gICAgICBcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXCIsXG4gICAgICBcIkFXUzo6TG9nczo6UXVlcnlEZWZpbml0aW9uXCIsXG4gICAgICBcIkFXUzo6TG9nczo6UmVzb3VyY2VQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpMb2dzOjpTdWJzY3JpcHRpb25GaWx0ZXJcIixcblxuICAgICAgLy8gTWFjaWVcbiAgICAgIFwiQVdTOjpNYWNpZTo6QWxsb3dMaXN0XCIsXG4gICAgICBcIkFXUzo6TWFjaWU6OkN1c3RvbURhdGFJZGVudGlmaWVyXCIsXG4gICAgICBcIkFXUzo6TWFjaWU6OkZpbmRpbmdzRmlsdGVyXCIsXG4gICAgICBcIkFXUzo6TWFjaWU6OlNlc3Npb25cIixcblxuICAgICAgLy8gTmVwdHVuZVxuICAgICAgXCJBV1M6Ok5lcHR1bmU6OkRCQ2x1c3RlclBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6TmVwdHVuZTo6REJQYXJhbWV0ZXJHcm91cFwiLFxuICAgICAgXCJBV1M6Ok5lcHR1bmU6OkRCU3VibmV0R3JvdXBcIixcblxuICAgICAgLy8gT3JnYW5pemF0aW9uc1xuICAgICAgXCJBV1M6Ok9yZ2FuaXphdGlvbnM6OkFjY291bnRcIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpPcmdhbml6YXRpb25cIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpPcmdhbml6YXRpb25hbFVuaXRcIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpPcmdhbml6YXRpb25zOjpSZXNvdXJjZVBvbGljeVwiLFxuXG4gICAgICAvLyBSRFNcbiAgICAgIFwiQVdTOjpSRFM6OkRCQ2x1c3RlclBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlByb3h5RW5kcG9pbnRcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCUHJveHlUYXJnZXRHcm91cFwiLFxuICAgICAgXCJBV1M6OlJEUzo6REJTZWN1cml0eUdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQlN1Ym5ldEdyb3VwXCIsXG4gICAgICBcIkFXUzo6UkRTOjpFdmVudFN1YnNjcmlwdGlvblwiLFxuICAgICAgXCJBV1M6OlJEUzo6R2xvYmFsQ2x1c3RlclwiLFxuICAgICAgXCJBV1M6OlJEUzo6T3B0aW9uR3JvdXBcIixcblxuICAgICAgLy8gUmVkc2hpZnRcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6Q2x1c3RlclBhcmFtZXRlckdyb3VwXCIsXG4gICAgICBcIkFXUzo6UmVkc2hpZnQ6OkNsdXN0ZXJTZWN1cml0eUdyb3VwXCIsXG4gICAgICBcIkFXUzo6UmVkc2hpZnQ6OkNsdXN0ZXJTZWN1cml0eUdyb3VwSW5ncmVzc1wiLFxuICAgICAgXCJBV1M6OlJlZHNoaWZ0OjpDbHVzdGVyU3VibmV0R3JvdXBcIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6RW5kcG9pbnRBY2Nlc3NcIixcbiAgICAgIFwiQVdTOjpSZWRzaGlmdDo6RW5kcG9pbnRBdXRob3JpemF0aW9uXCIsXG4gICAgICBcIkFXUzo6UmVkc2hpZnQ6OkV2ZW50U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6UmVkc2hpZnQ6OlNjaGVkdWxlZEFjdGlvblwiLFxuXG4gICAgICAvLyBSb3V0ZTUzXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6RE5TU0VDXCIsXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6SGVhbHRoQ2hlY2tcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpIb3N0ZWRab25lXCIsXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6S2V5U2lnbmluZ0tleVwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldEdyb3VwXCIsXG5cbiAgICAgIC8vIFJvdXRlNTNSZXNvbHZlclxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6RmlyZXdhbGxEb21haW5MaXN0XCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpGaXJld2FsbFJ1bGVHcm91cFwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6RmlyZXdhbGxSdWxlR3JvdXBBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJDb25maWdcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzUmVzb2x2ZXI6OlJlc29sdmVyRE5TU0VDQ29uZmlnXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlclF1ZXJ5TG9nZ2luZ0NvbmZpZ1wiLFxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJRdWVyeUxvZ2dpbmdDb25maWdBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTNSZXNvbHZlcjo6UmVzb2x2ZXJSdWxlXCIsXG4gICAgICBcIkFXUzo6Um91dGU1M1Jlc29sdmVyOjpSZXNvbHZlclJ1bGVBc3NvY2lhdGlvblwiLFxuXG4gICAgICAvLyBTM1xuICAgICAgXCJBV1M6OlMzOjpBY2Nlc3NQb2ludFwiLFxuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpTMzo6TXVsdGlSZWdpb25BY2Nlc3NQb2ludFwiLFxuICAgICAgXCJBV1M6OlMzOjpNdWx0aVJlZ2lvbkFjY2Vzc1BvaW50UG9saWN5XCIsXG4gICAgICBcIkFXUzo6UzM6OlN0b3JhZ2VMZW5zXCIsXG5cbiAgICAgIC8vIFNEQlxuICAgICAgXCJBV1M6OlNEQjo6RG9tYWluXCIsXG5cbiAgICAgIC8vIFNlY3JldHNNYW5hZ2VyXG4gICAgICBcIkFXUzo6U2VjcmV0c01hbmFnZXI6OlJlc291cmNlUG9saWN5XCIsXG4gICAgICBcIkFXUzo6U2VjcmV0c01hbmFnZXI6OlJvdGF0aW9uU2NoZWR1bGVcIixcbiAgICAgIFwiQVdTOjpTZWNyZXRzTWFuYWdlcjo6U2VjcmV0VGFyZ2V0QXR0YWNobWVudFwiLFxuXG4gICAgICAvLyBTZWN1cml0eUh1YlxuICAgICAgXCJBV1M6OlNlY3VyaXR5SHViOjpIdWJcIixcblxuICAgICAgLy8gU2VydmljZUNhdGFsb2dcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6QWNjZXB0ZWRQb3J0Zm9saW9TaGFyZVwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpMYXVuY2hOb3RpZmljYXRpb25Db25zdHJhaW50XCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OkxhdW5jaFJvbGVDb25zdHJhaW50XCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OkxhdW5jaFRlbXBsYXRlQ29uc3RyYWludFwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpQb3J0Zm9saW9QcmluY2lwYWxBc3NvY2lhdGlvblwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpQb3J0Zm9saW9Qcm9kdWN0QXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6UG9ydGZvbGlvU2hhcmVcIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6UmVzb3VyY2VVcGRhdGVDb25zdHJhaW50XCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OlNlcnZpY2VBY3Rpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6U2VydmljZUFjdGlvbkFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6U2VydmljZUNhdGFsb2c6OlN0YWNrU2V0Q29uc3RyYWludFwiLFxuICAgICAgXCJBV1M6OlNlcnZpY2VDYXRhbG9nOjpUYWdPcHRpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6VGFnT3B0aW9uQXNzb2NpYXRpb25cIixcblxuICAgICAgLy8gU0VTXG4gICAgICBcIkFXUzo6U0VTOjpDb25maWd1cmF0aW9uU2V0XCIsXG4gICAgICBcIkFXUzo6U0VTOjpDb25maWd1cmF0aW9uU2V0RXZlbnREZXN0aW5hdGlvblwiLFxuICAgICAgXCJBV1M6OlNFUzo6Q29udGFjdExpc3RcIixcbiAgICAgIFwiQVdTOjpTRVM6OkRlZGljYXRlZElwUG9vbFwiLFxuICAgICAgXCJBV1M6OlNFUzo6RW1haWxJZGVudGl0eVwiLFxuICAgICAgXCJBV1M6OlNFUzo6UmVjZWlwdEZpbHRlclwiLFxuICAgICAgXCJBV1M6OlNFUzo6UmVjZWlwdFJ1bGVcIixcbiAgICAgIFwiQVdTOjpTRVM6OlJlY2VpcHRSdWxlU2V0XCIsXG4gICAgICBcIkFXUzo6U0VTOjpUZW1wbGF0ZVwiLFxuICAgICAgXCJBV1M6OlNFUzo6VmRtQXR0cmlidXRlc1wiLFxuXG4gICAgICAvLyBTTlNcbiAgICAgIFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblwiLFxuICAgICAgXCJBV1M6OlNOUzo6VG9waWNQb2xpY3lcIixcblxuICAgICAgLy8gU1FTXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVBvbGljeVwiLFxuXG4gICAgICAvLyBTU01cbiAgICAgIFwiQVdTOjpTU006OkFzc29jaWF0aW9uXCIsXG4gICAgICBcIkFXUzo6U1NNOjpEb2N1bWVudFwiLFxuICAgICAgXCJBV1M6OlNTTTo6TWFpbnRlbmFuY2VXaW5kb3dcIixcbiAgICAgIFwiQVdTOjpTU006Ok1haW50ZW5hbmNlV2luZG93VGFyZ2V0XCIsXG4gICAgICBcIkFXUzo6U1NNOjpNYWludGVuYW5jZVdpbmRvd1Rhc2tcIixcbiAgICAgIFwiQVdTOjpTU006OlBhcmFtZXRlclwiLFxuICAgICAgXCJBV1M6OlNTTTo6UGF0Y2hCYXNlbGluZVwiLFxuICAgICAgXCJBV1M6OlNTTTo6UmVzb3VyY2VEYXRhU3luY1wiLFxuICAgICAgXCJBV1M6OlNTTTo6UmVzb3VyY2VQb2xpY3lcIixcblxuICAgICAgLy8gU1NPXG4gICAgICBcIkFXUzo6U1NPOjpBc3NpZ25tZW50XCIsXG4gICAgICBcIkFXUzo6U1NPOjpJbnN0YW5jZUFjY2Vzc0NvbnRyb2xBdHRyaWJ1dGVDb25maWd1cmF0aW9uXCIsXG4gICAgICBcIkFXUzo6U1NPOjpQZXJtaXNzaW9uU2V0XCIsXG5cbiAgICAgIC8vIFN0ZXBGdW5jdGlvbnNcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpBY3Rpdml0eVwiLFxuXG4gICAgICAvLyBXQUYvV0FGdjJcbiAgICAgIFwiQVdTOjpXQUY6OkJ5dGVNYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRjo6SVBTZXRcIixcbiAgICAgIFwiQVdTOjpXQUY6OlJ1bGVcIixcbiAgICAgIFwiQVdTOjpXQUY6OlNpemVDb25zdHJhaW50U2V0XCIsXG4gICAgICBcIkFXUzo6V0FGOjpTcWxJbmplY3Rpb25NYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRjo6V2ViQUNMXCIsXG4gICAgICBcIkFXUzo6V0FGOjpYc3NNYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpCeXRlTWF0Y2hTZXRcIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6R2VvTWF0Y2hTZXRcIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6SVBTZXRcIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6UmF0ZUJhc2VkUnVsZVwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpSZWdleFBhdHRlcm5TZXRcIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6UnVsZVwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpTaXplQ29uc3RyYWludFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpTcWxJbmplY3Rpb25NYXRjaFNldFwiLFxuICAgICAgXCJBV1M6OldBRlJlZ2lvbmFsOjpXZWJBQ0xcIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6V2ViQUNMQXNzb2NpYXRpb25cIixcbiAgICAgIFwiQVdTOjpXQUZSZWdpb25hbDo6WHNzTWF0Y2hTZXRcIixcbiAgICAgIFwiQVdTOjpXQUZ2Mjo6SVBTZXRcIixcbiAgICAgIFwiQVdTOjpXQUZ2Mjo6TG9nZ2luZ0NvbmZpZ3VyYXRpb25cIixcbiAgICAgIFwiQVdTOjpXQUZ2Mjo6UmVnZXhQYXR0ZXJuU2V0XCIsXG4gICAgICBcIkFXUzo6V0FGdjI6OlJ1bGVHcm91cFwiLFxuICAgICAgXCJBV1M6OldBRnYyOjpXZWJBQ0xcIixcbiAgICAgIFwiQVdTOjpXQUZ2Mjo6V2ViQUNMQXNzb2NpYXRpb25cIixcblxuICAgICAgLy8gU2VydmVybGVzc1xuICAgICAgXCJBV1M6OlNlcnZlcmxlc3M6OkFwaVwiLFxuICAgICAgXCJBV1M6OlNlcnZlcmxlc3M6OkFwcGxpY2F0aW9uXCIsXG4gICAgICBcIkFXUzo6U2VydmVybGVzczo6RnVuY3Rpb25cIixcbiAgICAgIFwiQVdTOjpTZXJ2ZXJsZXNzOjpIdHRwQXBpXCIsXG4gICAgICBcIkFXUzo6U2VydmVybGVzczo6TGF5ZXJWZXJzaW9uXCIsXG4gICAgICBcIkFXUzo6U2VydmVybGVzczo6U2ltcGxlVGFibGVcIixcbiAgICAgIFwiQVdTOjpTZXJ2ZXJsZXNzOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF07XG5cbiAgICBpZiAodW5zdXBwb3J0ZWRUeXBlcy5pbmNsdWRlcyhyZXNvdXJjZS5jZm5SZXNvdXJjZVR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQWRkIGEgc3ludGhlc2lzIGhvb2sgdG8gbW9kaWZ5IHRoZSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZVxuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YocmVzb3VyY2UpO1xuICAgIGNvbnN0IGxvZ2ljYWxJZCA9IHN0YWNrLmdldExvZ2ljYWxJZChyZXNvdXJjZSk7XG5cbiAgICAvLyBVc2UgYWRkVHJhbnNmb3JtIHRvIGFkZCB0YWdzIGR1cmluZyBzeW50aGVzaXNcbiAgICByZXNvdXJjZS5hZGRQcm9wZXJ0eU92ZXJyaWRlKFwiVGFnc1wiLCB0aGlzLmJ1aWxkVGFnc0FycmF5KHJlc291cmNlKSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVGFnc0FycmF5KHJlc291cmNlOiBDZm5SZXNvdXJjZSk6IGFueVtdIHtcbiAgICBjb25zdCB0YWdNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gICAgLy8gQWRkIElQQU0gcG9vbCB0YWcgZm9yIFZQQ3Mgd2l0aCBJUEFNIGNvbmZpZ3VyYXRpb25cbiAgICBpZiAocmVzb3VyY2UuY2ZuUmVzb3VyY2VUeXBlID09PSBcIkFXUzo6RUMyOjpWUENcIikge1xuICAgICAgY29uc3QgdnBjID0gcmVzb3VyY2UgYXMgQ2ZuVlBDO1xuICAgICAgY29uc3QgaXBhbVBvb2xJZCA9IHZwYy5pcHY0SXBhbVBvb2xJZDtcblxuICAgICAgaWYgKGlwYW1Qb29sSWQpIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihyZXNvdXJjZSk7XG4gICAgICAgIGNvbnN0IGFjY291bnRJZCA9XG4gICAgICAgICAgc3RhY2subm9kZS50cnlHZXRDb250ZXh0KFwiYWNjb3VudElkXCIpIHx8XG4gICAgICAgICAgc3RhY2suYWNjb3VudCB8fFxuICAgICAgICAgIHByb2Nlc3MuZW52LkNES19ERUZBVUxUX0FDQ09VTlQ7XG4gICAgICAgIGNvbnN0IHJlZ2lvbiA9IHN0YWNrLnJlZ2lvbiB8fCBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9SRUdJT047XG4gICAgICAgIGlmIChhY2NvdW50SWQgJiYgcmVnaW9uKSB7XG4gICAgICAgICAgdGFnTWFwLnNldChcImZqYWxsOm9wZXJhdGlvbnM6cG9vbFwiLCBgJHthY2NvdW50SWR9LSR7cmVnaW9ufWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGRpc2FzdGVyIHJlY292ZXJ5IHRpZXIgdGFnIGZvciBTMyBidWNrZXRzIHdpdGggYmFja3VwVmF1bHRUaWVyXG4gICAgaWYgKHJlc291cmNlLmNmblJlc291cmNlVHlwZSA9PT0gXCJBV1M6OlMzOjpCdWNrZXRcIikge1xuICAgICAgLy8gV2FsayB1cCB0aGUgY29uc3RydWN0IHRyZWUgdG8gZmluZCB0aGUgTDIgUzNCdWNrZXQgY29uc3RydWN0XG4gICAgICBsZXQgY29uc3RydWN0OiBJQ29uc3RydWN0IHwgdW5kZWZpbmVkID0gcmVzb3VyY2U7XG4gICAgICB3aGlsZSAoY29uc3RydWN0KSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgb3VyIGN1c3RvbSBTM0J1Y2tldCBjbGFzcyB3aXRoIGJhY2t1cFZhdWx0VGllciBwcm9wZXJ0eVxuICAgICAgICBpZiAoJ2JhY2t1cFZhdWx0VGllcicgaW4gY29uc3RydWN0ICYmIChjb25zdHJ1Y3QgYXMgYW55KS5iYWNrdXBWYXVsdFRpZXIpIHtcbiAgICAgICAgICBjb25zdCB0aWVyID0gKGNvbnN0cnVjdCBhcyBhbnkpLmJhY2t1cFZhdWx0VGllcjtcblxuICAgICAgICAgIC8vIE1hcCB0aWVyIG5hbWVzIHRvIGJhY2t1cCBwbGFuIHRhZyB2YWx1ZXNcbiAgICAgICAgICAvLyBOb3RlOiBcInN0YW5kYXJkXCIgdGllciB1c2VzIFwiZGVmYXVsdFwiIGFzIHRoZSB0YWcgdmFsdWUgdG8gbWF0Y2ggZXhpc3RpbmcgYmFja3VwIHBsYW5zXG4gICAgICAgICAgY29uc3QgdGllck1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgICAgICdzdGFuZGFyZCc6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICdyZXNpbGllbnQnOiAncmVzaWxpZW50JyxcbiAgICAgICAgICAgICdlbnRlcnByaXNlJzogJ2VudGVycHJpc2UnXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IHRhZ1ZhbHVlID0gdGllck1hcFt0aWVyXSB8fCB0aWVyO1xuICAgICAgICAgIHRhZ01hcC5zZXQoXCJmamFsbDpkaXNhc3RlclJlY292ZXJ5OnRpZXJcIiwgdGFnVmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdCA9IGNvbnN0cnVjdC5ub2RlLnNjb3BlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFwcGx5IHN0YW5kYXJkIHRhZ3NcbiAgICBPYmplY3QuZW50cmllcyh0aGlzLnJlcXVpcmVkVGFncykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICB0YWdNYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgLy8gQ29udmVydCB0byBDbG91ZEZvcm1hdGlvbiBmb3JtYXRcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0YWdNYXAuZW50cmllcygpKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgIEtleToga2V5LFxuICAgICAgVmFsdWU6IHZhbHVlXG4gICAgfSkpO1xuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fjall/components-infrastructure",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.75.2",
|
|
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.
|
|
38
|
+
"@fjall/util": "^0.75.2",
|
|
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": "87e8d23ce20811d9f674d5b2fc8fcded6cd1fd4a",
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"aws-cdk": "^2.206.0",
|
|
50
50
|
"aws-cdk-lib": "^2.206.0",
|