truemark-cdk-lib 1.23.1 → 1.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aws-vpc/lib/index.d.ts +1 -0
- package/dist/aws-vpc/lib/index.js +2 -1
- package/dist/aws-vpc/lib/network-parameters.d.ts +1 -1
- package/dist/aws-vpc/lib/network-parameters.js +4 -4
- package/dist/aws-vpc/lib/standard-network.d.ts +232 -0
- package/dist/aws-vpc/lib/standard-network.js +384 -0
- package/package.json +1 -1
|
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./network-parameters"), exports);
|
|
18
|
-
|
|
18
|
+
__exportStar(require("./standard-network"), exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzLXZwYy9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVEQUFxQztBQUNyQyxxREFBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL25ldHdvcmstcGFyYW1ldGVycyc7XG5leHBvcnQgKiBmcm9tICcuL3N0YW5kYXJkLW5ldHdvcmsnO1xuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StringListParameter, StringParameter } from 'aws-cdk-lib/aws-ssm';
|
|
2
2
|
import type { Construct } from 'constructs';
|
|
3
|
-
import { ExtendedConstruct, type ExtendedConstructProps } from '../../aws-cdk
|
|
3
|
+
import { ExtendedConstruct, type ExtendedConstructProps } from '../../aws-cdk';
|
|
4
4
|
/**
|
|
5
5
|
* Properties for NetworkParameters.
|
|
6
6
|
*/
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NetworkParameters = void 0;
|
|
4
4
|
const aws_ssm_1 = require("aws-cdk-lib/aws-ssm");
|
|
5
|
-
const
|
|
5
|
+
const aws_cdk_1 = require("../../aws-cdk");
|
|
6
6
|
const truemark_1 = require("../../truemark");
|
|
7
7
|
/**
|
|
8
8
|
* Stores and retrieves network infrastructure identifiers using
|
|
9
9
|
* AWS Systems Manager Parameter Store.
|
|
10
10
|
*/
|
|
11
|
-
class NetworkParameters extends
|
|
11
|
+
class NetworkParameters extends aws_cdk_1.ExtendedConstruct {
|
|
12
12
|
/**
|
|
13
13
|
* Creates a new NetworkParameters instance.
|
|
14
14
|
*
|
|
@@ -19,7 +19,7 @@ class NetworkParameters extends index_1.ExtendedConstruct {
|
|
|
19
19
|
constructor(scope, id, props) {
|
|
20
20
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
|
|
21
21
|
super(scope, id, {
|
|
22
|
-
standardTags:
|
|
22
|
+
standardTags: aws_cdk_1.StandardTags.merge(props.standardTags, truemark_1.LibStandardTags),
|
|
23
23
|
});
|
|
24
24
|
const create = (_a = props.create) !== null && _a !== void 0 ? _a : true;
|
|
25
25
|
const prefix = (_b = props.prefix) !== null && _b !== void 0 ? _b : '/network';
|
|
@@ -304,4 +304,4 @@ class NetworkParameters extends index_1.ExtendedConstruct {
|
|
|
304
304
|
}
|
|
305
305
|
}
|
|
306
306
|
exports.NetworkParameters = NetworkParameters;
|
|
307
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1wYXJhbWV0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy12cGMvbGliL25ldHdvcmstcGFyYW1ldGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBeUU7QUFFekUsK0NBSTZCO0FBQzdCLDZDQUErQztBQXNTL0M7OztHQUdHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSx5QkFBaUI7SUEyVXREOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkI7O1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLG9CQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsMEJBQWUsQ0FBQztTQUN0RSxDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFBLEtBQUssQ0FBQyxNQUFNLG1DQUFJLElBQUksQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFBLEtBQUssQ0FBQyxNQUFNLG1DQUFJLFVBQVUsQ0FBQztRQUMxQyxNQUFNLElBQUksR0FBRyxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUM7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUM7UUFDdEMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQztRQUMzRCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsR0FBRyxJQUFJLGtCQUFrQixDQUFDO1FBQzdELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUM7UUFDekQsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQztRQUMvRCxJQUFJLENBQUMsNEJBQTRCLEdBQUcs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QUFJLEVBQ0osSUFBSSxDQUFDLCtCQUErQixDQUNyQyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLE1BQUEsS0FBSyxDQUFDLDJCQUEyQixtQ0FBSSxLQUFLLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyx3QkFBd0IsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDN0QsSUFBSSxFQUNKLElBQUksQ0FBQyxrQ0FBa0MsQ0FDeEMsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFBLEtBQUssQ0FBQyxnQkFBZ0IsbUNBQUksS0FBSyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDbkQsSUFBSSxFQUNKLElBQUksQ0FBQyx1QkFBdUIsQ0FDN0IsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFBLEtBQUssQ0FBQyxpQkFBaUIsbUNBQUksS0FBSyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDcEQsSUFBSSxFQUNKLElBQUksQ0FBQyx3QkFBd0IsQ0FDOUIsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdHZCRCw4Q0FzdkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdHJpbmdMaXN0UGFyYW1ldGVyLCBTdHJpbmdQYXJhbWV0ZXJ9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHR5cGUge0NvbnN0cnVjdH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBFeHRlbmRlZENvbnN0cnVjdCxcbiAgdHlwZSBFeHRlbmRlZENvbnN0cnVjdFByb3BzLFxuICBTdGFuZGFyZFRhZ3MsXG59IGZyb20gJy4uLy4uL2F3cy1jZGsvaW5kZXgnO1xuaW1wb3J0IHtMaWJTdGFuZGFyZFRhZ3N9IGZyb20gJy4uLy4uL3RydWVtYXJrJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBOZXR3b3JrUGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrUGFyYW1ldGVyc1Byb3BzIGV4dGVuZHMgRXh0ZW5kZWRDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBuZXR3b3JrLiBUaGlzIGlzIG5vcm1hbGx5IHRoZSBuYW1lIG9mIHlvdXIgVlBDLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcmVmaXggZnJvbSB3aGljaCB0byBzdG9yZSBhbmQgcmV0cmlldmUgcGFyYW1ldGVycy4gRGVmYXVsdCBpcyBcIi9uZXR3b3JrXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gXCIvbmV0d29ya1wiXG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNldHRpbmcgdGhpcyB0byBmYWxzZSB3aWxsIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mIHJlc291cmNlcyBpbiB0aGlzIGNvbnN0cnVjdC4gRGVmYXVsdCBpcyB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgc3VwcHJlc3MgdGhlIGNyZWF0aW9uIG9mIGRlZmF1bHQgdGFncyBvbiByZXNvdXJjZXMgY3JlYXRlZCBieSB0aGlzXG4gICAqIGNvbnN0cnVjdC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcHJlc3NUYWdnaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVlBDIElEIHRvIHN0b3JlLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF2YWlsYWJpbGl0eS16b25lIHZhbHVlcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IGF6cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgc3VibmV0IElEcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQcml2YXRlIHN1Ym5ldCBJRHMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEludHJhIHN1Ym5ldCBJRHMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBpbnRyYVN1Ym5ldElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZWRzaGlmdCBzdWJuZXQgSURzIHRvIHN0b3JlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVkc2hpZnRTdWJuZXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRGF0YWJhc2Ugc3VibmV0IElEcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEVsYXN0aWNhY2hlIHN1Ym5ldCBJRHMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBlbGFzdGljYWNoZVN1Ym5ldElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPdXRwb3N0IHN1Ym5ldCBJRHMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBvdXRwb3N0U3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBBTEIgQVJOcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0FsYkFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHJpdmF0ZSBBTEIgQVJOcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVBbGJBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENlcnRpZmljYXRlIEFSTnMgb24gcHVibGljIEFMQnMgdG8gc3RvcmUuIEluZGV4ZXMgc2hvdWxkIG1hdGNoIHB1YmxpY0FsYkFybnMuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ2VydGlmaWNhdGUgQVJOcyBvbiBwcml2YXRlIEFMQnMgdG8gc3RvcmUuIEluZGV4ZXMgc2hvdWxkIG1hdGNoIHByaXZhdGVBbGJBcm5zLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBbHRlcm5hdGl2ZSBwdWJsaWMgQUxCIEFSTnMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBhbHRQdWJsaWNBbGJBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFsdGVybmF0aXZlIHByaXZhdGUgQUxCIEFSTnMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBhbHRQcml2YXRlQWxiQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBbHRlcm5hdGl2ZSBjZXJ0aWZpY2F0ZSBBUk5zIG9uIHB1YmxpYyBBTEJzIHRvIHN0b3JlLiBJbmRleGVzIHNob3VsZCBtYXRjaCBwdWJsaWNBbGJBcm5zLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0UHVibGljQWxiQ2VydGlmaWNhdGVBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFsdGVybmF0aXZlIGNlcnRpZmljYXRlIEFSTnMgb24gcHJpdmF0ZSBBTEJzIHRvIHN0b3JlLiBJbmRleGVzIHNob3VsZCBtYXRjaCBwcml2YXRlQWxiQXJucy5cbiAgICovXG4gIHJlYWRvbmx5IGFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZUFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHVibGljIGNlcnRpZmljYXRlIEFSTiB0byBzdG9yZSBmb3IgdGhpcyBuZXR3b3JrLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljQ2VydGlmaWNhdGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgY2VydGlmaWNhdGUgQVJOIHRvIHN0b3JlIGZvciB0aGlzIG5ldHdvcmsuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQ2VydGlmaWNhdGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENsb3VkRnJvbnQgY2VydGlmaWNhdGUgQVJOIHRvIHN0b3JlIGZvciB0aGlzIG5ldHdvcmsuXG4gICAqL1xuICByZWFkb25seSBjbG91ZEZvbnRDZXJ0aWZpY2F0ZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogUHVibGljIHpvbmUgbmFtZSB0byBzdG9yZSBmb3IgdGhpcyBuZXR3b3JrLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljWm9uZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgem9uZSBuYW1lIHRvIHN0b3JlIGZvciB0aGlzIG5ldHdvcmsuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlWm9uZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExvb2t1cCBWUEMgdmFsdWUgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwVnBjPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIGF2YWlsYWJpbGl0eSB6b25lcyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBBenM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgcHVibGljIHN1Ym5ldHMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUHVibGljU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBwcml2YXRlIHN1Ym5ldHMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUHJpdmF0ZVN1Ym5ldHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgaW50cmEgc3VibmV0cyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cEludHJhU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCByZWRzaGlmdCBzdWJuZXRzIGlmIG5vdCBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUmVkc2hpZnRTdWJuZXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIGRhdGFiYXNlIHN1Ym5ldHMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBEYXRhYmFzZVN1Ym5ldHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgZWxhc3RpY2FjaGUgc3VibmV0cyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cEVsYXN0aWNhY2hlU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBvdXRwb3N0IHN1Ym5ldHMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBPdXRwb3N0U3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBwdWJsaWMgQUxCcyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFB1YmxpY0FsYnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgcHJpdmF0ZSBBTEJzIGlmIG5vdCBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUHJpdmF0ZUFsYnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgQUNNIGNlcnRpZmljYXRlcyBvbiBwdWJsaWMgQUxCcyBpZiBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFB1YmxpY0FsYkNlcnRpZmljYXRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBBQ00gY2VydGlmaWNhdGVzIG9uIHByaXZhdGUgQUxCcyBpZiBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgYWx0ZXJuYXRpdmUgcHVibGljIEFMQnMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBBbHRQdWJsaWNBbGJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIGFsdGVybmF0aXZlIHByaXZhdGUgQUxCcyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cEFsdFByaXZhdGVBbGJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIGFsdGVybmF0aXZlIEFDTSBjZXJ0aWZpY2F0ZXMgb24gcHVibGljIEFMQnMgaWYgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cEFsdFB1YmxpY0FsYkNlcnRpZmljYXRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBhbHRlcm5hdGl2ZSBBQ00gY2VydGlmaWNhdGVzIG9uIHByaXZhdGUgQUxCcyBpZiBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwQWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBwdWJsaWMgY2VydGlmaWNhdGUuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFB1YmxpY0NlcnRpZmljYXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIHByaXZhdGUgY2VydGlmaWNhdGUuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFByaXZhdGVDZXJ0aWZpY2F0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBDbG91ZEZyb250IGNlcnRpZmljYXRlLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBDbG91ZEZyb250Q2VydGlmaWNhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgcHVibGljIHpvbmUuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFB1YmxpY1pvbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgcHJpdmF0ZSB6b25lLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBQcml2YXRlWm9uZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU3RvcmVzIGFuZCByZXRyaWV2ZXMgbmV0d29yayBpbmZyYXN0cnVjdHVyZSBpZGVudGlmaWVycyB1c2luZ1xuICogQVdTIFN5c3RlbXMgTWFuYWdlciBQYXJhbWV0ZXIgU3RvcmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXR3b3JrUGFyYW1ldGVycyBleHRlbmRzIEV4dGVuZGVkQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIFZQQyBJRFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjUGFyYW1ldGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBhdmFpbGFiaWxpdHkgem9uZXNcbiAgICovXG4gIHJlYWRvbmx5IGF6c1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgcHVibGljIHN1Ym5ldCBJRHNcbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHByaXZhdGUgc3VibmV0IElEc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGludHJhIHN1Ym5ldCBJRHNcbiAgICovXG4gIHJlYWRvbmx5IGludHJhU3VibmV0c1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgcmVkc2hpZnQgc3VibmV0IElEc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVkc2hpZnRTdWJuZXRzUGFyYW1ldGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBkYXRhYmFzZSBzdWJuZXQgSURzXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZVN1Ym5ldHNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGVsYXN0aWNhY2hlIHN1Ym5ldCBJRHNcbiAgICovXG4gIHJlYWRvbmx5IGVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgb3V0cG9zdCBzdWJuZXQgSURzLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cG9zdFN1Ym5ldHNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHB1YmxpYyBBTEIgQVJOcy5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0FsYnNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHByaXZhdGUgQUxCIEFSTnMuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQWxic1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgY2VydGlmaWNhdGUgQVJOcyBvbiB0aGUgcHVibGljIEFMQnMuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGNlcnRpZmljYXRlIEFSTnMgb24gdGhlIHByaXZhdGUgQUxCcy5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGFsdGVybmF0aXZlIHB1YmxpYyBBTEIgQVJOcy5cbiAgICovXG4gIHJlYWRvbmx5IGFsdFB1YmxpY0FsYnNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGFsdGVybmF0aXZlIHByaXZhdGUgQUxCIEFSTnMuXG4gICAqL1xuICByZWFkb25seSBhbHRQcml2YXRlQWxic1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgYWx0ZXJuYXRpdmUgY2VydGlmaWNhdGUgQVJOcyBvbiB0aGUgcHVibGljIEFMQnMuXG4gICAqL1xuICByZWFkb25seSBhbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGFsdGVybmF0aXZlIGNlcnRpZmljYXRlIEFSTnMgb24gdGhlIHByaXZhdGUgQUxCcy5cbiAgICovXG4gIHJlYWRvbmx5IGFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHB1YmxpYyBjZXJ0aWZpY2F0ZSBBUk4uXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNDZXJ0aWZpY2F0ZVBhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgcHJpdmF0ZSBjZXJ0aWZpY2F0ZSBBUk4uXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQ2VydGlmaWNhdGVQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIENsb3VkRnJvbnQgY2VydGl0aWNhdGUgQVJOLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRGcm9udENlcnRpZmljYXRlUGFyYW1ldGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBwdWJsaWMgem9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1pvbmVQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHByaXZhdGUgem9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVab25lUGFyYW1ldGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgdnBjSWQgd2FzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjUGFyYW1ldGVyPzogU3RyaW5nUGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgYXpzIHdlcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBhenNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyYXRlZCBpZiBwdWJsaWNTdWJuZXRJZHMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgcHJpdmF0ZVN1Ym5ldElkcyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgaW50cmFTdWJuZXRJZHMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGludHJhU3VibmV0c1BhcmFtZXRlcj86IFN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiByZWRzaGlmdFN1Ym5ldElkcyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVkc2hpZnRTdWJuZXRzUGFyYW1ldGVyPzogU3RyaW5nTGlzdFBhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIGRhdGFiYXNlU3VibmV0SWRzIHdlcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZVN1Ym5ldHNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgZWxhc3RpY2FjaGVTdWJuZXRJZHMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlcj86IFN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiBvdXRwb3N0U3VibmV0SWRzIHdlcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBvdXRwb3N0U3VibmV0c1ByYW1ldGVyPzogU3RyaW5nTGlzdFBhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHB1YmxpY0FsYkFybnMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0FsYnNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgcHJpdmF0ZUFsYkFybnMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVBbGJzUGFyYW1ldGVyPzogU3RyaW5nTGlzdFBhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHB1YmxpY0FsYkNlcnRpZmljYXRlQXJucyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljQWxiQ2VydGlmaWNhdGVzUGFyYW1ldGVyPzogU3RyaW5nTGlzdFBhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHByaXZhdGVBbGJDZXJ0aWZpY2F0ZUFybnMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgYWx0UHVibGljQWxiQXJucyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0UHVibGljQWxic1BhcmFtZXRlcj86IFN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiBhbHRQcml2YXRlQWxiQXJucyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0UHJpdmF0ZUFsYnNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgYWx0UHVibGljQWxiQ2VydGlmaWNhdGVBcm5zIHdlcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBhbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgYWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlc1BhcmFtZXRlcj86IFN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiBwdWJsaWNDZXJ0aWZpY2F0ZUFybiB3YXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNDZXJ0aWZpY2F0ZVBhcmFtZXRlcj86IFN0cmluZ1BhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHByaXZhdGVDZXJ0aWZpY2F0ZUFybiB3YXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQ2VydGlmaWNhdGVQYXJhbWV0ZXI/OiBTdHJpbmdQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiBjbG91ZEZyb250Q2VydGlmaWNhdGVBcm4gd2FzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRGcm9udENlcnRpZmljYXRlUGFyYW1ldGVyPzogU3RyaW5nUGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgcHVibGljWm9uZU5hbWUgd2FzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljWm9uZVBhcmFtZXRlcj86IFN0cmluZ1BhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHByaXZhdGVab25lTmFtZSB3YXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlWm9uZVBhcmFtZXRlcj86IFN0cmluZ1BhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHZwY0lkIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSB2cGNJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGF2YWlsYWJpbGl0eSB6b25lcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYXpzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwdWJsaWMgc3VibmV0IElEcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwcml2YXRlIHN1Ym5ldCBJRHMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVTdWJuZXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGludHJhIHN1Ym5ldCBJRHMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGludHJhU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSByZWRzaGlmdCBzdWJuZXQgSURzIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSByZWRzaGlmdFN1Ym5ldElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0YWJhc2Ugc3VibmV0IElEcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VTdWJuZXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGVsYXN0aWNhY2hlIHN1Ym5ldCBJRHMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVsYXN0aWNhY2hlU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBvdXRwb3N0IHN1Ym5ldCBJRHMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IG91dHBvc3RTdWJuZXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHB1YmxpYyBBTEIgQVJOcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljQWxiQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpdmF0ZSBBTEIgQVJOcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUFsYkFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGNlcnRpZmljYXRlIEFSTnMgb24gdGhlIHB1YmxpYyBBTEJzIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGNlcnRpZmljYXRlIEFSTnMgb24gdGhlIHByaXZhdGUgQUxicyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgYWx0ZXJuYXRpdmUgcHVibGljIEFMQiBBUk5zIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBhbHRQdWJsaWNBbGJBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBhbHRlcm5hdGl2ZSBwcml2YXRlIEFMQiBBUk5zIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBhbHRQcml2YXRlQWxiQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgY2VydGlmaWNhdGUgQVJOcyBvbiB0aGUgYWx0ZXJuYXRpdmUgcHVibGljIEFMQnMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFsdFB1YmxpY0FsYkNlcnRpZmljYXRlQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgY2VydGlmaWNhdGUgQVJOcyBvbiB0aGUgYWx0ZXJuYXRpdmUgcHJpdmF0ZSBBTGJzIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBhbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwdWJsaWMgY2VydGlmaWNhdGUgQVJOIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNDZXJ0aWZpY2F0ZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByaXZhdGUgY2VydGlmaWNhdGUgQVJOIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQ2VydGlmaWNhdGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZyb250IGNlcnRpZmljYXRlIEFSTiBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRGcm9udENlcnRpZmljYXRlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHVibGljIHpvbmUgbmFtZSBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljWm9uZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcml2YXRlIHpvbmUgbmFtZSBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZVpvbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IE5ldHdvcmtQYXJhbWV0ZXJzIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHBhcmVudCBzY29wZVxuICAgKiBAcGFyYW0gaWQgdGhlIGlkIG9mIHRoZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gcHJvcHMgcHJvcGVydGllcyBmb3IgdGhlIGluc3RhbmNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV0d29ya1BhcmFtZXRlcnNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc3RhbmRhcmRUYWdzOiBTdGFuZGFyZFRhZ3MubWVyZ2UocHJvcHMuc3RhbmRhcmRUYWdzLCBMaWJTdGFuZGFyZFRhZ3MpLFxuICAgIH0pO1xuICAgIGNvbnN0IGNyZWF0ZSA9IHByb3BzLmNyZWF0ZSA/PyB0cnVlO1xuICAgIGNvbnN0IHByZWZpeCA9IHByb3BzLnByZWZpeCA/PyAnL25ldHdvcmsnO1xuICAgIGNvbnN0IHBhdGggPSBgJHtwcmVmaXh9LyR7cHJvcHMubmFtZX1gO1xuICAgIHRoaXMudnBjUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3ZwY2A7XG4gICAgdGhpcy5henNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vYXpzYDtcbiAgICB0aGlzLnB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vcHVibGljX3N1Ym5ldHNgO1xuICAgIHRoaXMucHJpdmF0ZVN1Ym5ldHNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vcHJpdmF0ZV9zdWJuZXRzYDtcbiAgICB0aGlzLmludHJhU3VibmV0c1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9pbnRyYV9zdWJuZXRzYDtcbiAgICB0aGlzLnJlZHNoaWZ0U3VibmV0c1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9yZWRzaGlmdF9zdWJuZXRzYDtcbiAgICB0aGlzLmRhdGFiYXNlU3VibmV0c1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9kYXRhYmFzZV9zdWJuZXRzYDtcbiAgICB0aGlzLmVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9lbGFzdGljYWNoZV9zdWJuZXRzYDtcbiAgICB0aGlzLm91dHBvc3RTdWJuZXRzUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L291dHBvc3Rfc3VibmV0c2A7XG4gICAgdGhpcy5wdWJsaWNBbGJzUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3B1YmxpY19hbGJzYDtcbiAgICB0aGlzLnByaXZhdGVBbGJzUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3ByaXZhdGVfYWxic2A7XG4gICAgdGhpcy5wdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vcHVibGljX2FsYl9jZXJ0aWZpY2F0ZXNgO1xuICAgIHRoaXMucHJpdmF0ZUFsYkNlcnRpZmljYXRlc1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wcml2YXRlX2FsYl9jZXJ0aWZpY2F0ZXNgO1xuICAgIHRoaXMuYWx0UHVibGljQWxic1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9hbHRfcHVibGljX2FsYnNgO1xuICAgIHRoaXMuYWx0UHJpdmF0ZUFsYnNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vYWx0X3ByaXZhdGVfYWxic2A7XG4gICAgdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vYWx0X3B1YmxpY19hbGJfY2VydGlmaWNhdGVzYDtcbiAgICB0aGlzLmFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vYWx0X3ByaXZhdGVfYWxiX2NlcnRpZmljYXRlc2A7XG4gICAgdGhpcy5wdWJsaWNDZXJ0aWZpY2F0ZVBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wdWJsaWNfY2VydGlmaWNhdGVgO1xuICAgIHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3ByaXZhdGVfY2VydGlmaWNhdGVgO1xuICAgIHRoaXMuY2xvdWRGcm9udENlcnRpZmljYXRlUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L2Nsb3VkZnJvbnRfY2VydGlmaWNhdGVgO1xuICAgIHRoaXMucHVibGljWm9uZVBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wdWJsaWNfem9uZWA7XG4gICAgdGhpcy5wcml2YXRlWm9uZVBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wcml2YXRlX3pvbmVgO1xuXG4gICAgaWYgKGNyZWF0ZSkge1xuICAgICAgaWYgKHByb3BzLnZwY0lkKSB7XG4gICAgICAgIHRoaXMudnBjUGFyYW1ldGVyID0gbmV3IFN0cmluZ1BhcmFtZXRlcih0aGlzLCAnVnBjSWQnLCB7XG4gICAgICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy52cGNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgIHN0cmluZ1ZhbHVlOiBwcm9wcy52cGNJZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudnBjSWQgPSBwcm9wcy52cGNJZDtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5henMpIHtcbiAgICAgICAgdGhpcy5henNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcih0aGlzLCAnQVpzJywge1xuICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMuYXpzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLmF6cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXpzID0gcHJvcHMuYXpzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnB1YmxpY1N1Ym5ldElkcykge1xuICAgICAgICB0aGlzLnB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQdWJsaWNTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLnB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5wdWJsaWNTdWJuZXRJZHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wdWJsaWNTdWJuZXRJZHMgPSBwcm9wcy5wcml2YXRlU3VibmV0SWRzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnByaXZhdGVTdWJuZXRJZHMpIHtcbiAgICAgICAgdGhpcy5wcml2YXRlU3VibmV0c1BhcmFtZXRlciA9IG5ldyBTdHJpbmdMaXN0UGFyYW1ldGVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ1ByaXZhdGVTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLnByaXZhdGVTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMucHJpdmF0ZVN1Ym5ldElkcyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnByaXZhdGVTdWJuZXRJZHMgPSBwcm9wcy5wcml2YXRlU3VibmV0SWRzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLmludHJhU3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMuaW50cmFTdWJuZXRzUGFyYW1ldGVyID0gbmV3IFN0cmluZ0xpc3RQYXJhbWV0ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnSW50cmFTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmludHJhU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLmludHJhU3VibmV0SWRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaW50cmFTdWJuZXRJZHMgPSBwcm9wcy5pbnRyYVN1Ym5ldElkcztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5yZWRzaGlmdFN1Ym5ldElkcykge1xuICAgICAgICB0aGlzLnJlZHNoaWZ0U3VibmV0c1BhcmFtZXRlciA9IG5ldyBTdHJpbmdMaXN0UGFyYW1ldGVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ1JlZHNoaWZ0U3VibmV0cycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy5yZWRzaGlmdFN1Ym5ldHNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5yZWRzaGlmdFN1Ym5ldElkcyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlZHNoaWZ0U3VibmV0SWRzID0gcHJvcHMucmVkc2hpZnRTdWJuZXRJZHM7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuZGF0YWJhc2VTdWJuZXRJZHMpIHtcbiAgICAgICAgdGhpcy5kYXRhYmFzZVN1Ym5ldHNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdEYXRhYmFzZVN1Ym5ldHMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMuZGF0YWJhc2VTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMuZGF0YWJhc2VTdWJuZXRJZHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kYXRhYmFzZVN1Ym5ldElkcyA9IHByb3BzLmRhdGFiYXNlU3VibmV0SWRzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLmVsYXN0aWNhY2hlU3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMuZWxhc3RpY2FjaGVTdWJuZXRzUGFyYW1ldGVyID0gbmV3IFN0cmluZ0xpc3RQYXJhbWV0ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnRWxhc3RpY2FjaGVTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLmVsYXN0aWNhY2hlU3VibmV0SWRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZWxhc3RpY2FjaGVTdWJuZXRJZHMgPSBwcm9wcy5lbGFzdGljYWNoZVN1Ym5ldElkcztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5vdXRwb3N0U3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMub3V0cG9zdFN1Ym5ldHNQcmFtZXRlciA9IG5ldyBTdHJpbmdMaXN0UGFyYW1ldGVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ091dHBvc3RTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLm91dHBvc3RTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMub3V0cG9zdFN1Ym5ldElkcyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm91dHBvc3RTdWJuZXRJZHMgPSBwcm9wcy5vdXRwb3N0U3VibmV0SWRzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnB1YmxpY0FsYkFybnMpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNBbGJzUGFyYW1ldGVyID0gbmV3IFN0cmluZ0xpc3RQYXJhbWV0ZXIodGhpcywgJ1B1YmxpY0FsYnMnLCB7XG4gICAgICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy5wdWJsaWNBbGJzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLnB1YmxpY0FsYkFybnMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnB1YmxpY0FsYkFybnMgPSBwcm9wcy5wdWJsaWNBbGJBcm5zO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnByaXZhdGVBbGJBcm5zKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUFsYnNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQcml2YXRlQWxicycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy5wcml2YXRlQWxic1BhcmFtZXRlclBhdGgsXG4gICAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLnByaXZhdGVBbGJBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucHJpdmF0ZUFsYkFybnMgPSBwcm9wcy5wcml2YXRlQWxiQXJucztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5wdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnMpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQdWJsaWNBbGJDZXJ0aWZpY2F0ZXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHVibGljQWxiQ2VydGlmaWNhdGVzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMucHVibGljQWxiQ2VydGlmaWNhdGVBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMucHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucykge1xuICAgICAgICB0aGlzLnByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQcml2YXRlQWxiQ2VydGlmaWNhdGVzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLnByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5wcml2YXRlQWxiQ2VydGlmaWNhdGVBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuYWx0UHVibGljQWxiQXJucykge1xuICAgICAgICB0aGlzLmFsdFB1YmxpY0FsYnNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdBbHRQdWJsaWNBbGJzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmFsdFB1YmxpY0FsYnNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5hbHRQdWJsaWNBbGJBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuYWx0UHJpdmF0ZUFsYkFybnMpIHtcbiAgICAgICAgdGhpcy5hbHRQcml2YXRlQWxic1BhcmFtZXRlciA9IG5ldyBTdHJpbmdMaXN0UGFyYW1ldGVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ0FsdFByaXZhdGVBbGJzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmFsdFByaXZhdGVBbGJzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMuYWx0UHJpdmF0ZUFsYkFybnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnMpIHtcbiAgICAgICAgdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdBbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMuYWx0UHVibGljQWxiQ2VydGlmaWNhdGVzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMuYWx0UHVibGljQWxiQ2VydGlmaWNhdGVBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuYWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucykge1xuICAgICAgICB0aGlzLmFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdBbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5hbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMucHVibGljQ2VydGlmaWNhdGVBcm4pIHtcbiAgICAgICAgdGhpcy5wdWJsaWNDZXJ0aWZpY2F0ZVBhcmFtZXRlciA9IG5ldyBTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnUHVibGljQ2VydGlmaWNhdGUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHVibGljQ2VydGlmaWNhdGVQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nVmFsdWU6IHByb3BzLnB1YmxpY0NlcnRpZmljYXRlQXJuLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMucHJpdmF0ZUNlcnRpZmljYXRlQXJuKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlUGFyYW1ldGVyID0gbmV3IFN0cmluZ1BhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQcml2YXRlQ2VydGlmaWNhdGUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ1ZhbHVlOiBwcm9wcy5wcml2YXRlQ2VydGlmaWNhdGVBcm4sXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5jbG91ZEZvbnRDZXJ0aWZpY2F0ZUFybikge1xuICAgICAgICB0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZVBhcmFtZXRlciA9IG5ldyBTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnQ2xvdWRGcm9udENlcnRpZmljYXRlJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZVBhcmFtZXRlclBhdGgsXG4gICAgICAgICAgICBzdHJpbmdWYWx1ZTogcHJvcHMuY2xvdWRGb250Q2VydGlmaWNhdGVBcm4sXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5wdWJsaWNab25lTmFtZSkge1xuICAgICAgICB0aGlzLnB1YmxpY1pvbmVQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nUGFyYW1ldGVyKHRoaXMsICdQdWJsaWNab25lJywge1xuICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHVibGljWm9uZVBhcmFtZXRlclBhdGgsXG4gICAgICAgICAgc3RyaW5nVmFsdWU6IHByb3BzLnB1YmxpY1pvbmVOYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5wcml2YXRlWm9uZU5hbWUpIHtcbiAgICAgICAgdGhpcy5wcml2YXRlWm9uZVBhcmFtZXRlciA9IG5ldyBTdHJpbmdQYXJhbWV0ZXIodGhpcywgJ1ByaXZhdGVab25lJywge1xuICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHJpdmF0ZVpvbmVQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgIHN0cmluZ1ZhbHVlOiBwcm9wcy5wcml2YXRlWm9uZU5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwVnBjID8/IHRydWUpIHtcbiAgICAgIGlmICghdGhpcy52cGNJZCkge1xuICAgICAgICB0aGlzLnZwY0lkID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMudnBjUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cEF6cyA/PyB0cnVlKSB7XG4gICAgICBpZiAoIXRoaXMuYXpzKSB7XG4gICAgICAgIHRoaXMuYXpzID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMuYXpzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwUHVibGljU3VibmV0cyA/PyB0cnVlKSB7XG4gICAgICBpZiAoIXRoaXMucHVibGljU3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMucHVibGljU3VibmV0SWRzID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMucHVibGljU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFByaXZhdGVTdWJuZXRzID8/IHRydWUpIHtcbiAgICAgIGlmICghdGhpcy5wcml2YXRlU3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZVN1Ym5ldElkcyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnByaXZhdGVTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwSW50cmFTdWJuZXRzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMuaW50cmFTdWJuZXRJZHMpIHtcbiAgICAgICAgdGhpcy5pbnRyYVN1Ym5ldElkcyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLmludHJhU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFJlZHNoaWZ0U3VibmV0cyA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLnJlZHNoaWZ0U3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMucmVkc2hpZnRTdWJuZXRJZHMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5yZWRzaGlmdFN1Ym5ldHNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBEYXRhYmFzZVN1Ym5ldHMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5kYXRhYmFzZVN1Ym5ldElkcykge1xuICAgICAgICB0aGlzLmRhdGFiYXNlU3VibmV0SWRzID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMuZGF0YWJhc2VTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwRWxhc3RpY2FjaGVTdWJuZXRzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMuZWxhc3RpY2FjaGVTdWJuZXRJZHMpIHtcbiAgICAgICAgdGhpcy5lbGFzdGljYWNoZVN1Ym5ldElkcyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLmVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cE91dHBvc3RTdWJuZXRzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMub3V0cG9zdFN1Ym5ldElkcykge1xuICAgICAgICB0aGlzLm91dHBvc3RTdWJuZXRJZHMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5vdXRwb3N0U3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFB1YmxpY0FsYnMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5wdWJsaWNBbGJBcm5zKSB7XG4gICAgICAgIHRoaXMucHVibGljQWxiQXJucyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnB1YmxpY0FsYnNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBQcml2YXRlQWxicyA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLnByaXZhdGVBbGJBcm5zKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUFsYkFybnMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5wcml2YXRlQWxic1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFB1YmxpY0FsYkNlcnRpZmljYXRlcyA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLnB1YmxpY0FsYkNlcnRpZmljYXRlQXJucykge1xuICAgICAgICB0aGlzLnB1YmxpY0FsYkNlcnRpZmljYXRlQXJucyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnB1YmxpY0FsYkNlcnRpZmljYXRlc1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5wcml2YXRlQWxiQ2VydGlmaWNhdGVBcm5zKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBBbHRQdWJsaWNBbGJzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMuYWx0UHVibGljQWxiQXJucykge1xuICAgICAgICB0aGlzLmFsdFB1YmxpY0FsYkFybnMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5hbHRQdWJsaWNBbGJzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwQWx0UHJpdmF0ZUFsYnMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5hbHRQcml2YXRlQWxiQXJucykge1xuICAgICAgICB0aGlzLmFsdFByaXZhdGVBbGJBcm5zID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMuYWx0UHJpdmF0ZUFsYnNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBBbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnMpIHtcbiAgICAgICAgdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBBbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMuYWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucykge1xuICAgICAgICB0aGlzLmFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZUFybnMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5hbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwUHVibGljQ2VydGlmaWNhdGUgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5wdWJsaWNDZXJ0aWZpY2F0ZUFybikge1xuICAgICAgICB0aGlzLnB1YmxpY0NlcnRpZmljYXRlQXJuID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMucHVibGljQ2VydGlmaWNhdGVQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwUHJpdmF0ZUNlcnRpZmljYXRlID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMucHJpdmF0ZUNlcnRpZmljYXRlQXJuKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlQXJuID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cENsb3VkRnJvbnRDZXJ0aWZpY2F0ZSA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZUFybikge1xuICAgICAgICB0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZUFybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZVBhcmFtZXRlclBhdGgsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBQdWJsaWNab25lID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMucHVibGljWm9uZU5hbWUpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNab25lTmFtZSA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnB1YmxpY1pvbmVQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwUHJpdmF0ZVpvbmUgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5wcml2YXRlWm9uZU5hbWUpIHtcbiAgICAgICAgdGhpcy5wcml2YXRlWm9uZU5hbWUgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5wcml2YXRlWm9uZVBhcmFtZXRlclBhdGgsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1wYXJhbWV0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy12cGMvbGliL25ldHdvcmstcGFyYW1ldGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBeUU7QUFFekUsMkNBSXVCO0FBQ3ZCLDZDQUErQztBQXNTL0M7OztHQUdHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSwyQkFBaUI7SUEyVXREOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkI7O1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLHNCQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsMEJBQWUsQ0FBQztTQUN0RSxDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFBLEtBQUssQ0FBQyxNQUFNLG1DQUFJLElBQUksQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFBLEtBQUssQ0FBQyxNQUFNLG1DQUFJLFVBQVUsQ0FBQztRQUMxQyxNQUFNLElBQUksR0FBRyxHQUFHLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUM7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUM7UUFDdEMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQztRQUMzRCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsR0FBRyxJQUFJLGtCQUFrQixDQUFDO1FBQzdELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUM7UUFDekQsSUFBSSxDQUFDLDRCQUE0QixHQUFHLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQztRQUMvRCxJQUFJLENBQUMsNEJBQTRCLEdBQUcs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QUFJLEVBQ0osSUFBSSxDQUFDLCtCQUErQixDQUNyQyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLE1BQUEsS0FBSyxDQUFDLDJCQUEyQixtQ0FBSSxLQUFLLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyx3QkFBd0IsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDN0QsSUFBSSxFQUNKLElBQUksQ0FBQyxrQ0FBa0MsQ0FDeEMsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFBLEtBQUssQ0FBQyxnQkFBZ0IsbUNBQUksS0FBSyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDbkQsSUFBSSxFQUNKLElBQUksQ0FBQyx1QkFBdUIsQ0FDN0IsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFBLEtBQUssQ0FBQyxpQkFBaUIsbUNBQUksS0FBSyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyx5QkFBZSxDQUFDLGVBQWUsQ0FDcEQsSUFBSSxFQUNKLElBQUksQ0FBQyx3QkFBd0IsQ0FDOUIsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdHZCRCw4Q0FzdkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdHJpbmdMaXN0UGFyYW1ldGVyLCBTdHJpbmdQYXJhbWV0ZXJ9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHR5cGUge0NvbnN0cnVjdH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBFeHRlbmRlZENvbnN0cnVjdCxcbiAgdHlwZSBFeHRlbmRlZENvbnN0cnVjdFByb3BzLFxuICBTdGFuZGFyZFRhZ3MsXG59IGZyb20gJy4uLy4uL2F3cy1jZGsnO1xuaW1wb3J0IHtMaWJTdGFuZGFyZFRhZ3N9IGZyb20gJy4uLy4uL3RydWVtYXJrJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBOZXR3b3JrUGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrUGFyYW1ldGVyc1Byb3BzIGV4dGVuZHMgRXh0ZW5kZWRDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBuZXR3b3JrLiBUaGlzIGlzIG5vcm1hbGx5IHRoZSBuYW1lIG9mIHlvdXIgVlBDLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcmVmaXggZnJvbSB3aGljaCB0byBzdG9yZSBhbmQgcmV0cmlldmUgcGFyYW1ldGVycy4gRGVmYXVsdCBpcyBcIi9uZXR3b3JrXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gXCIvbmV0d29ya1wiXG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNldHRpbmcgdGhpcyB0byBmYWxzZSB3aWxsIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mIHJlc291cmNlcyBpbiB0aGlzIGNvbnN0cnVjdC4gRGVmYXVsdCBpcyB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgc3VwcHJlc3MgdGhlIGNyZWF0aW9uIG9mIGRlZmF1bHQgdGFncyBvbiByZXNvdXJjZXMgY3JlYXRlZCBieSB0aGlzXG4gICAqIGNvbnN0cnVjdC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcHJlc3NUYWdnaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVlBDIElEIHRvIHN0b3JlLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF2YWlsYWJpbGl0eS16b25lIHZhbHVlcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IGF6cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgc3VibmV0IElEcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQcml2YXRlIHN1Ym5ldCBJRHMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEludHJhIHN1Ym5ldCBJRHMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBpbnRyYVN1Ym5ldElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZWRzaGlmdCBzdWJuZXQgSURzIHRvIHN0b3JlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVkc2hpZnRTdWJuZXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRGF0YWJhc2Ugc3VibmV0IElEcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEVsYXN0aWNhY2hlIHN1Ym5ldCBJRHMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBlbGFzdGljYWNoZVN1Ym5ldElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPdXRwb3N0IHN1Ym5ldCBJRHMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBvdXRwb3N0U3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBBTEIgQVJOcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0FsYkFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHJpdmF0ZSBBTEIgQVJOcyB0byBzdG9yZS5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVBbGJBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENlcnRpZmljYXRlIEFSTnMgb24gcHVibGljIEFMQnMgdG8gc3RvcmUuIEluZGV4ZXMgc2hvdWxkIG1hdGNoIHB1YmxpY0FsYkFybnMuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ2VydGlmaWNhdGUgQVJOcyBvbiBwcml2YXRlIEFMQnMgdG8gc3RvcmUuIEluZGV4ZXMgc2hvdWxkIG1hdGNoIHByaXZhdGVBbGJBcm5zLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBbHRlcm5hdGl2ZSBwdWJsaWMgQUxCIEFSTnMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBhbHRQdWJsaWNBbGJBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFsdGVybmF0aXZlIHByaXZhdGUgQUxCIEFSTnMgdG8gc3RvcmUuXG4gICAqL1xuICByZWFkb25seSBhbHRQcml2YXRlQWxiQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBbHRlcm5hdGl2ZSBjZXJ0aWZpY2F0ZSBBUk5zIG9uIHB1YmxpYyBBTEJzIHRvIHN0b3JlLiBJbmRleGVzIHNob3VsZCBtYXRjaCBwdWJsaWNBbGJBcm5zLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0UHVibGljQWxiQ2VydGlmaWNhdGVBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFsdGVybmF0aXZlIGNlcnRpZmljYXRlIEFSTnMgb24gcHJpdmF0ZSBBTEJzIHRvIHN0b3JlLiBJbmRleGVzIHNob3VsZCBtYXRjaCBwcml2YXRlQWxiQXJucy5cbiAgICovXG4gIHJlYWRvbmx5IGFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZUFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHVibGljIGNlcnRpZmljYXRlIEFSTiB0byBzdG9yZSBmb3IgdGhpcyBuZXR3b3JrLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljQ2VydGlmaWNhdGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgY2VydGlmaWNhdGUgQVJOIHRvIHN0b3JlIGZvciB0aGlzIG5ldHdvcmsuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQ2VydGlmaWNhdGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENsb3VkRnJvbnQgY2VydGlmaWNhdGUgQVJOIHRvIHN0b3JlIGZvciB0aGlzIG5ldHdvcmsuXG4gICAqL1xuICByZWFkb25seSBjbG91ZEZvbnRDZXJ0aWZpY2F0ZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogUHVibGljIHpvbmUgbmFtZSB0byBzdG9yZSBmb3IgdGhpcyBuZXR3b3JrLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljWm9uZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByaXZhdGUgem9uZSBuYW1lIHRvIHN0b3JlIGZvciB0aGlzIG5ldHdvcmsuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlWm9uZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExvb2t1cCBWUEMgdmFsdWUgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwVnBjPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIGF2YWlsYWJpbGl0eSB6b25lcyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBBenM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgcHVibGljIHN1Ym5ldHMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUHVibGljU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBwcml2YXRlIHN1Ym5ldHMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUHJpdmF0ZVN1Ym5ldHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgaW50cmEgc3VibmV0cyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cEludHJhU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCByZWRzaGlmdCBzdWJuZXRzIGlmIG5vdCBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUmVkc2hpZnRTdWJuZXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIGRhdGFiYXNlIHN1Ym5ldHMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBEYXRhYmFzZVN1Ym5ldHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgZWxhc3RpY2FjaGUgc3VibmV0cyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cEVsYXN0aWNhY2hlU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBvdXRwb3N0IHN1Ym5ldHMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBPdXRwb3N0U3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBwdWJsaWMgQUxCcyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFB1YmxpY0FsYnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgcHJpdmF0ZSBBTEJzIGlmIG5vdCBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwUHJpdmF0ZUFsYnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgQUNNIGNlcnRpZmljYXRlcyBvbiBwdWJsaWMgQUxCcyBpZiBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFB1YmxpY0FsYkNlcnRpZmljYXRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBBQ00gY2VydGlmaWNhdGVzIG9uIHByaXZhdGUgQUxCcyBpZiBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgYWx0ZXJuYXRpdmUgcHVibGljIEFMQnMgaWYgbm90IHByb3ZpZGVkLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBBbHRQdWJsaWNBbGJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIGFsdGVybmF0aXZlIHByaXZhdGUgQUxCcyBpZiBub3QgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cEFsdFByaXZhdGVBbGJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIGFsdGVybmF0aXZlIEFDTSBjZXJ0aWZpY2F0ZXMgb24gcHVibGljIEFMQnMgaWYgcHJvdmlkZWQuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cEFsdFB1YmxpY0FsYkNlcnRpZmljYXRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBhbHRlcm5hdGl2ZSBBQ00gY2VydGlmaWNhdGVzIG9uIHByaXZhdGUgQUxCcyBpZiBwcm92aWRlZC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9va3VwQWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBwdWJsaWMgY2VydGlmaWNhdGUuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFB1YmxpY0NlcnRpZmljYXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTG9va3VwIHByaXZhdGUgY2VydGlmaWNhdGUuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFByaXZhdGVDZXJ0aWZpY2F0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExvb2t1cCBDbG91ZEZyb250IGNlcnRpZmljYXRlLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBDbG91ZEZyb250Q2VydGlmaWNhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgcHVibGljIHpvbmUuIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGxvb2t1cFB1YmxpY1pvbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb29rdXAgcHJpdmF0ZSB6b25lLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBsb29rdXBQcml2YXRlWm9uZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU3RvcmVzIGFuZCByZXRyaWV2ZXMgbmV0d29yayBpbmZyYXN0cnVjdHVyZSBpZGVudGlmaWVycyB1c2luZ1xuICogQVdTIFN5c3RlbXMgTWFuYWdlciBQYXJhbWV0ZXIgU3RvcmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXR3b3JrUGFyYW1ldGVycyBleHRlbmRzIEV4dGVuZGVkQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIFZQQyBJRFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjUGFyYW1ldGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBhdmFpbGFiaWxpdHkgem9uZXNcbiAgICovXG4gIHJlYWRvbmx5IGF6c1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgcHVibGljIHN1Ym5ldCBJRHNcbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHByaXZhdGUgc3VibmV0IElEc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGludHJhIHN1Ym5ldCBJRHNcbiAgICovXG4gIHJlYWRvbmx5IGludHJhU3VibmV0c1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgcmVkc2hpZnQgc3VibmV0IElEc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVkc2hpZnRTdWJuZXRzUGFyYW1ldGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBkYXRhYmFzZSBzdWJuZXQgSURzXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZVN1Ym5ldHNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGVsYXN0aWNhY2hlIHN1Ym5ldCBJRHNcbiAgICovXG4gIHJlYWRvbmx5IGVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgb3V0cG9zdCBzdWJuZXQgSURzLlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cG9zdFN1Ym5ldHNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHB1YmxpYyBBTEIgQVJOcy5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0FsYnNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHByaXZhdGUgQUxCIEFSTnMuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQWxic1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgY2VydGlmaWNhdGUgQVJOcyBvbiB0aGUgcHVibGljIEFMQnMuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGNlcnRpZmljYXRlIEFSTnMgb24gdGhlIHByaXZhdGUgQUxCcy5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGFsdGVybmF0aXZlIHB1YmxpYyBBTEIgQVJOcy5cbiAgICovXG4gIHJlYWRvbmx5IGFsdFB1YmxpY0FsYnNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGFsdGVybmF0aXZlIHByaXZhdGUgQUxCIEFSTnMuXG4gICAqL1xuICByZWFkb25seSBhbHRQcml2YXRlQWxic1BhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgYWx0ZXJuYXRpdmUgY2VydGlmaWNhdGUgQVJOcyBvbiB0aGUgcHVibGljIEFMQnMuXG4gICAqL1xuICByZWFkb25seSBhbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIGFsdGVybmF0aXZlIGNlcnRpZmljYXRlIEFSTnMgb24gdGhlIHByaXZhdGUgQUxCcy5cbiAgICovXG4gIHJlYWRvbmx5IGFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHB1YmxpYyBjZXJ0aWZpY2F0ZSBBUk4uXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNDZXJ0aWZpY2F0ZVBhcmFtZXRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byB0aGUgcHJpdmF0ZSBjZXJ0aWZpY2F0ZSBBUk4uXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQ2VydGlmaWNhdGVQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIENsb3VkRnJvbnQgY2VydGl0aWNhdGUgQVJOLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRGcm9udENlcnRpZmljYXRlUGFyYW1ldGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBwdWJsaWMgem9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1pvbmVQYXJhbWV0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHByaXZhdGUgem9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVab25lUGFyYW1ldGVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgdnBjSWQgd2FzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjUGFyYW1ldGVyPzogU3RyaW5nUGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgYXpzIHdlcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBhenNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyYXRlZCBpZiBwdWJsaWNTdWJuZXRJZHMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgcHJpdmF0ZVN1Ym5ldElkcyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgaW50cmFTdWJuZXRJZHMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGludHJhU3VibmV0c1BhcmFtZXRlcj86IFN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiByZWRzaGlmdFN1Ym5ldElkcyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVkc2hpZnRTdWJuZXRzUGFyYW1ldGVyPzogU3RyaW5nTGlzdFBhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIGRhdGFiYXNlU3VibmV0SWRzIHdlcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZVN1Ym5ldHNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgZWxhc3RpY2FjaGVTdWJuZXRJZHMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlcj86IFN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiBvdXRwb3N0U3VibmV0SWRzIHdlcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBvdXRwb3N0U3VibmV0c1ByYW1ldGVyPzogU3RyaW5nTGlzdFBhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHB1YmxpY0FsYkFybnMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0FsYnNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgcHJpdmF0ZUFsYkFybnMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVBbGJzUGFyYW1ldGVyPzogU3RyaW5nTGlzdFBhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHB1YmxpY0FsYkNlcnRpZmljYXRlQXJucyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljQWxiQ2VydGlmaWNhdGVzUGFyYW1ldGVyPzogU3RyaW5nTGlzdFBhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHByaXZhdGVBbGJDZXJ0aWZpY2F0ZUFybnMgd2VyZSBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgYWx0UHVibGljQWxiQXJucyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0UHVibGljQWxic1BhcmFtZXRlcj86IFN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiBhbHRQcml2YXRlQWxiQXJucyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0UHJpdmF0ZUFsYnNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgYWx0UHVibGljQWxiQ2VydGlmaWNhdGVBcm5zIHdlcmUgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBhbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXI/OiBTdHJpbmdMaXN0UGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgYWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucyB3ZXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlc1BhcmFtZXRlcj86IFN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiBwdWJsaWNDZXJ0aWZpY2F0ZUFybiB3YXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNDZXJ0aWZpY2F0ZVBhcmFtZXRlcj86IFN0cmluZ1BhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHByaXZhdGVDZXJ0aWZpY2F0ZUFybiB3YXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQ2VydGlmaWNhdGVQYXJhbWV0ZXI/OiBTdHJpbmdQYXJhbWV0ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgY3JlYXRlZCBpZiBjbG91ZEZyb250Q2VydGlmaWNhdGVBcm4gd2FzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRGcm9udENlcnRpZmljYXRlUGFyYW1ldGVyPzogU3RyaW5nUGFyYW1ldGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVyIGNyZWF0ZWQgaWYgcHVibGljWm9uZU5hbWUgd2FzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljWm9uZVBhcmFtZXRlcj86IFN0cmluZ1BhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlciBjcmVhdGVkIGlmIHByaXZhdGVab25lTmFtZSB3YXMgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlWm9uZVBhcmFtZXRlcj86IFN0cmluZ1BhcmFtZXRlcjtcblxuICAvKipcbiAgICogVGhlIHZwY0lkIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSB2cGNJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGF2YWlsYWJpbGl0eSB6b25lcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYXpzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwdWJsaWMgc3VibmV0IElEcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwcml2YXRlIHN1Ym5ldCBJRHMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVTdWJuZXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGludHJhIHN1Ym5ldCBJRHMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGludHJhU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSByZWRzaGlmdCBzdWJuZXQgSURzIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSByZWRzaGlmdFN1Ym5ldElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0YWJhc2Ugc3VibmV0IElEcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VTdWJuZXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGVsYXN0aWNhY2hlIHN1Ym5ldCBJRHMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVsYXN0aWNhY2hlU3VibmV0SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBvdXRwb3N0IHN1Ym5ldCBJRHMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IG91dHBvc3RTdWJuZXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHB1YmxpYyBBTEIgQVJOcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljQWxiQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpdmF0ZSBBTEIgQVJOcyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUFsYkFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGNlcnRpZmljYXRlIEFSTnMgb24gdGhlIHB1YmxpYyBBTEJzIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGNlcnRpZmljYXRlIEFSTnMgb24gdGhlIHByaXZhdGUgQUxicyBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgYWx0ZXJuYXRpdmUgcHVibGljIEFMQiBBUk5zIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBhbHRQdWJsaWNBbGJBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBhbHRlcm5hdGl2ZSBwcml2YXRlIEFMQiBBUk5zIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBhbHRQcml2YXRlQWxiQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgY2VydGlmaWNhdGUgQVJOcyBvbiB0aGUgYWx0ZXJuYXRpdmUgcHVibGljIEFMQnMgaWYgcHJvdmlkZWQgb3IgbG9va3VwcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFsdFB1YmxpY0FsYkNlcnRpZmljYXRlQXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgY2VydGlmaWNhdGUgQVJOcyBvbiB0aGUgYWx0ZXJuYXRpdmUgcHJpdmF0ZSBBTGJzIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBhbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwdWJsaWMgY2VydGlmaWNhdGUgQVJOIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNDZXJ0aWZpY2F0ZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByaXZhdGUgY2VydGlmaWNhdGUgQVJOIGlmIHByb3ZpZGVkIG9yIGxvb2t1cHMgYXJlIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlQ2VydGlmaWNhdGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZyb250IGNlcnRpZmljYXRlIEFSTiBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRGcm9udENlcnRpZmljYXRlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHVibGljIHpvbmUgbmFtZSBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljWm9uZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcml2YXRlIHpvbmUgbmFtZSBpZiBwcm92aWRlZCBvciBsb29rdXBzIGFyZSBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZVpvbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IE5ldHdvcmtQYXJhbWV0ZXJzIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHBhcmVudCBzY29wZVxuICAgKiBAcGFyYW0gaWQgdGhlIGlkIG9mIHRoZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0gcHJvcHMgcHJvcGVydGllcyBmb3IgdGhlIGluc3RhbmNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV0d29ya1BhcmFtZXRlcnNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgc3RhbmRhcmRUYWdzOiBTdGFuZGFyZFRhZ3MubWVyZ2UocHJvcHMuc3RhbmRhcmRUYWdzLCBMaWJTdGFuZGFyZFRhZ3MpLFxuICAgIH0pO1xuICAgIGNvbnN0IGNyZWF0ZSA9IHByb3BzLmNyZWF0ZSA/PyB0cnVlO1xuICAgIGNvbnN0IHByZWZpeCA9IHByb3BzLnByZWZpeCA/PyAnL25ldHdvcmsnO1xuICAgIGNvbnN0IHBhdGggPSBgJHtwcmVmaXh9LyR7cHJvcHMubmFtZX1gO1xuICAgIHRoaXMudnBjUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3ZwY2A7XG4gICAgdGhpcy5henNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vYXpzYDtcbiAgICB0aGlzLnB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vcHVibGljX3N1Ym5ldHNgO1xuICAgIHRoaXMucHJpdmF0ZVN1Ym5ldHNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vcHJpdmF0ZV9zdWJuZXRzYDtcbiAgICB0aGlzLmludHJhU3VibmV0c1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9pbnRyYV9zdWJuZXRzYDtcbiAgICB0aGlzLnJlZHNoaWZ0U3VibmV0c1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9yZWRzaGlmdF9zdWJuZXRzYDtcbiAgICB0aGlzLmRhdGFiYXNlU3VibmV0c1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9kYXRhYmFzZV9zdWJuZXRzYDtcbiAgICB0aGlzLmVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9lbGFzdGljYWNoZV9zdWJuZXRzYDtcbiAgICB0aGlzLm91dHBvc3RTdWJuZXRzUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L291dHBvc3Rfc3VibmV0c2A7XG4gICAgdGhpcy5wdWJsaWNBbGJzUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3B1YmxpY19hbGJzYDtcbiAgICB0aGlzLnByaXZhdGVBbGJzUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3ByaXZhdGVfYWxic2A7XG4gICAgdGhpcy5wdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vcHVibGljX2FsYl9jZXJ0aWZpY2F0ZXNgO1xuICAgIHRoaXMucHJpdmF0ZUFsYkNlcnRpZmljYXRlc1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wcml2YXRlX2FsYl9jZXJ0aWZpY2F0ZXNgO1xuICAgIHRoaXMuYWx0UHVibGljQWxic1BhcmFtZXRlclBhdGggPSBgJHtwYXRofS9hbHRfcHVibGljX2FsYnNgO1xuICAgIHRoaXMuYWx0UHJpdmF0ZUFsYnNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vYWx0X3ByaXZhdGVfYWxic2A7XG4gICAgdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vYWx0X3B1YmxpY19hbGJfY2VydGlmaWNhdGVzYDtcbiAgICB0aGlzLmFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vYWx0X3ByaXZhdGVfYWxiX2NlcnRpZmljYXRlc2A7XG4gICAgdGhpcy5wdWJsaWNDZXJ0aWZpY2F0ZVBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wdWJsaWNfY2VydGlmaWNhdGVgO1xuICAgIHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3ByaXZhdGVfY2VydGlmaWNhdGVgO1xuICAgIHRoaXMuY2xvdWRGcm9udENlcnRpZmljYXRlUGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L2Nsb3VkZnJvbnRfY2VydGlmaWNhdGVgO1xuICAgIHRoaXMucHVibGljWm9uZVBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wdWJsaWNfem9uZWA7XG4gICAgdGhpcy5wcml2YXRlWm9uZVBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wcml2YXRlX3pvbmVgO1xuXG4gICAgaWYgKGNyZWF0ZSkge1xuICAgICAgaWYgKHByb3BzLnZwY0lkKSB7XG4gICAgICAgIHRoaXMudnBjUGFyYW1ldGVyID0gbmV3IFN0cmluZ1BhcmFtZXRlcih0aGlzLCAnVnBjSWQnLCB7XG4gICAgICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy52cGNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgIHN0cmluZ1ZhbHVlOiBwcm9wcy52cGNJZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudnBjSWQgPSBwcm9wcy52cGNJZDtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5henMpIHtcbiAgICAgICAgdGhpcy5henNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcih0aGlzLCAnQVpzJywge1xuICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMuYXpzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLmF6cyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXpzID0gcHJvcHMuYXpzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnB1YmxpY1N1Ym5ldElkcykge1xuICAgICAgICB0aGlzLnB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQdWJsaWNTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLnB1YmxpY1N1Ym5ldHNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5wdWJsaWNTdWJuZXRJZHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wdWJsaWNTdWJuZXRJZHMgPSBwcm9wcy5wcml2YXRlU3VibmV0SWRzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnByaXZhdGVTdWJuZXRJZHMpIHtcbiAgICAgICAgdGhpcy5wcml2YXRlU3VibmV0c1BhcmFtZXRlciA9IG5ldyBTdHJpbmdMaXN0UGFyYW1ldGVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ1ByaXZhdGVTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLnByaXZhdGVTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMucHJpdmF0ZVN1Ym5ldElkcyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnByaXZhdGVTdWJuZXRJZHMgPSBwcm9wcy5wcml2YXRlU3VibmV0SWRzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLmludHJhU3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMuaW50cmFTdWJuZXRzUGFyYW1ldGVyID0gbmV3IFN0cmluZ0xpc3RQYXJhbWV0ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnSW50cmFTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmludHJhU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLmludHJhU3VibmV0SWRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaW50cmFTdWJuZXRJZHMgPSBwcm9wcy5pbnRyYVN1Ym5ldElkcztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5yZWRzaGlmdFN1Ym5ldElkcykge1xuICAgICAgICB0aGlzLnJlZHNoaWZ0U3VibmV0c1BhcmFtZXRlciA9IG5ldyBTdHJpbmdMaXN0UGFyYW1ldGVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ1JlZHNoaWZ0U3VibmV0cycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy5yZWRzaGlmdFN1Ym5ldHNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5yZWRzaGlmdFN1Ym5ldElkcyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlZHNoaWZ0U3VibmV0SWRzID0gcHJvcHMucmVkc2hpZnRTdWJuZXRJZHM7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuZGF0YWJhc2VTdWJuZXRJZHMpIHtcbiAgICAgICAgdGhpcy5kYXRhYmFzZVN1Ym5ldHNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdEYXRhYmFzZVN1Ym5ldHMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMuZGF0YWJhc2VTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMuZGF0YWJhc2VTdWJuZXRJZHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kYXRhYmFzZVN1Ym5ldElkcyA9IHByb3BzLmRhdGFiYXNlU3VibmV0SWRzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLmVsYXN0aWNhY2hlU3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMuZWxhc3RpY2FjaGVTdWJuZXRzUGFyYW1ldGVyID0gbmV3IFN0cmluZ0xpc3RQYXJhbWV0ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnRWxhc3RpY2FjaGVTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLmVsYXN0aWNhY2hlU3VibmV0SWRzLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZWxhc3RpY2FjaGVTdWJuZXRJZHMgPSBwcm9wcy5lbGFzdGljYWNoZVN1Ym5ldElkcztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5vdXRwb3N0U3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMub3V0cG9zdFN1Ym5ldHNQcmFtZXRlciA9IG5ldyBTdHJpbmdMaXN0UGFyYW1ldGVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ091dHBvc3RTdWJuZXRzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLm91dHBvc3RTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMub3V0cG9zdFN1Ym5ldElkcyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm91dHBvc3RTdWJuZXRJZHMgPSBwcm9wcy5vdXRwb3N0U3VibmV0SWRzO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnB1YmxpY0FsYkFybnMpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNBbGJzUGFyYW1ldGVyID0gbmV3IFN0cmluZ0xpc3RQYXJhbWV0ZXIodGhpcywgJ1B1YmxpY0FsYnMnLCB7XG4gICAgICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy5wdWJsaWNBbGJzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLnB1YmxpY0FsYkFybnMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnB1YmxpY0FsYkFybnMgPSBwcm9wcy5wdWJsaWNBbGJBcm5zO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLnByaXZhdGVBbGJBcm5zKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUFsYnNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQcml2YXRlQWxicycsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGFyYW1ldGVyTmFtZTogdGhpcy5wcml2YXRlQWxic1BhcmFtZXRlclBhdGgsXG4gICAgICAgICAgICBzdHJpbmdMaXN0VmFsdWU6IHByb3BzLnByaXZhdGVBbGJBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucHJpdmF0ZUFsYkFybnMgPSBwcm9wcy5wcml2YXRlQWxiQXJucztcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5wdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnMpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQdWJsaWNBbGJDZXJ0aWZpY2F0ZXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHVibGljQWxiQ2VydGlmaWNhdGVzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMucHVibGljQWxiQ2VydGlmaWNhdGVBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMucHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucykge1xuICAgICAgICB0aGlzLnByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQcml2YXRlQWxiQ2VydGlmaWNhdGVzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLnByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5wcml2YXRlQWxiQ2VydGlmaWNhdGVBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuYWx0UHVibGljQWxiQXJucykge1xuICAgICAgICB0aGlzLmFsdFB1YmxpY0FsYnNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdBbHRQdWJsaWNBbGJzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmFsdFB1YmxpY0FsYnNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5hbHRQdWJsaWNBbGJBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuYWx0UHJpdmF0ZUFsYkFybnMpIHtcbiAgICAgICAgdGhpcy5hbHRQcml2YXRlQWxic1BhcmFtZXRlciA9IG5ldyBTdHJpbmdMaXN0UGFyYW1ldGVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgJ0FsdFByaXZhdGVBbGJzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmFsdFByaXZhdGVBbGJzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMuYWx0UHJpdmF0ZUFsYkFybnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnMpIHtcbiAgICAgICAgdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdBbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMuYWx0UHVibGljQWxiQ2VydGlmaWNhdGVzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ0xpc3RWYWx1ZTogcHJvcHMuYWx0UHVibGljQWxiQ2VydGlmaWNhdGVBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuYWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucykge1xuICAgICAgICB0aGlzLmFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nTGlzdFBhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdBbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVzJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nTGlzdFZhbHVlOiBwcm9wcy5hbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVBcm5zLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMucHVibGljQ2VydGlmaWNhdGVBcm4pIHtcbiAgICAgICAgdGhpcy5wdWJsaWNDZXJ0aWZpY2F0ZVBhcmFtZXRlciA9IG5ldyBTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnUHVibGljQ2VydGlmaWNhdGUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHVibGljQ2VydGlmaWNhdGVQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgICAgc3RyaW5nVmFsdWU6IHByb3BzLnB1YmxpY0NlcnRpZmljYXRlQXJuLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMucHJpdmF0ZUNlcnRpZmljYXRlQXJuKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlUGFyYW1ldGVyID0gbmV3IFN0cmluZ1BhcmFtZXRlcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICdQcml2YXRlQ2VydGlmaWNhdGUnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgICAgIHN0cmluZ1ZhbHVlOiBwcm9wcy5wcml2YXRlQ2VydGlmaWNhdGVBcm4sXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5jbG91ZEZvbnRDZXJ0aWZpY2F0ZUFybikge1xuICAgICAgICB0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZVBhcmFtZXRlciA9IG5ldyBTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnQ2xvdWRGcm9udENlcnRpZmljYXRlJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lOiB0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZVBhcmFtZXRlclBhdGgsXG4gICAgICAgICAgICBzdHJpbmdWYWx1ZTogcHJvcHMuY2xvdWRGb250Q2VydGlmaWNhdGVBcm4sXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5wdWJsaWNab25lTmFtZSkge1xuICAgICAgICB0aGlzLnB1YmxpY1pvbmVQYXJhbWV0ZXIgPSBuZXcgU3RyaW5nUGFyYW1ldGVyKHRoaXMsICdQdWJsaWNab25lJywge1xuICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHVibGljWm9uZVBhcmFtZXRlclBhdGgsXG4gICAgICAgICAgc3RyaW5nVmFsdWU6IHByb3BzLnB1YmxpY1pvbmVOYW1lLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5wcml2YXRlWm9uZU5hbWUpIHtcbiAgICAgICAgdGhpcy5wcml2YXRlWm9uZVBhcmFtZXRlciA9IG5ldyBTdHJpbmdQYXJhbWV0ZXIodGhpcywgJ1ByaXZhdGVab25lJywge1xuICAgICAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucHJpdmF0ZVpvbmVQYXJhbWV0ZXJQYXRoLFxuICAgICAgICAgIHN0cmluZ1ZhbHVlOiBwcm9wcy5wcml2YXRlWm9uZU5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwVnBjID8/IHRydWUpIHtcbiAgICAgIGlmICghdGhpcy52cGNJZCkge1xuICAgICAgICB0aGlzLnZwY0lkID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMudnBjUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cEF6cyA/PyB0cnVlKSB7XG4gICAgICBpZiAoIXRoaXMuYXpzKSB7XG4gICAgICAgIHRoaXMuYXpzID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMuYXpzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwUHVibGljU3VibmV0cyA/PyB0cnVlKSB7XG4gICAgICBpZiAoIXRoaXMucHVibGljU3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMucHVibGljU3VibmV0SWRzID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMucHVibGljU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFByaXZhdGVTdWJuZXRzID8/IHRydWUpIHtcbiAgICAgIGlmICghdGhpcy5wcml2YXRlU3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZVN1Ym5ldElkcyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnByaXZhdGVTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwSW50cmFTdWJuZXRzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMuaW50cmFTdWJuZXRJZHMpIHtcbiAgICAgICAgdGhpcy5pbnRyYVN1Ym5ldElkcyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLmludHJhU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFJlZHNoaWZ0U3VibmV0cyA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLnJlZHNoaWZ0U3VibmV0SWRzKSB7XG4gICAgICAgIHRoaXMucmVkc2hpZnRTdWJuZXRJZHMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5yZWRzaGlmdFN1Ym5ldHNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBEYXRhYmFzZVN1Ym5ldHMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5kYXRhYmFzZVN1Ym5ldElkcykge1xuICAgICAgICB0aGlzLmRhdGFiYXNlU3VibmV0SWRzID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMuZGF0YWJhc2VTdWJuZXRzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwRWxhc3RpY2FjaGVTdWJuZXRzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMuZWxhc3RpY2FjaGVTdWJuZXRJZHMpIHtcbiAgICAgICAgdGhpcy5lbGFzdGljYWNoZVN1Ym5ldElkcyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLmVsYXN0aWNhY2hlU3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cE91dHBvc3RTdWJuZXRzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMub3V0cG9zdFN1Ym5ldElkcykge1xuICAgICAgICB0aGlzLm91dHBvc3RTdWJuZXRJZHMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5vdXRwb3N0U3VibmV0c1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFB1YmxpY0FsYnMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5wdWJsaWNBbGJBcm5zKSB7XG4gICAgICAgIHRoaXMucHVibGljQWxiQXJucyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnB1YmxpY0FsYnNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBQcml2YXRlQWxicyA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLnByaXZhdGVBbGJBcm5zKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUFsYkFybnMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5wcml2YXRlQWxic1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFB1YmxpY0FsYkNlcnRpZmljYXRlcyA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLnB1YmxpY0FsYkNlcnRpZmljYXRlQXJucykge1xuICAgICAgICB0aGlzLnB1YmxpY0FsYkNlcnRpZmljYXRlQXJucyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnB1YmxpY0FsYkNlcnRpZmljYXRlc1BhcmFtZXRlclBhdGgsXG4gICAgICAgICkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cFByaXZhdGVBbGJDZXJ0aWZpY2F0ZXMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5wcml2YXRlQWxiQ2VydGlmaWNhdGVBcm5zKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucyA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnByaXZhdGVBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBBbHRQdWJsaWNBbGJzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMuYWx0UHVibGljQWxiQXJucykge1xuICAgICAgICB0aGlzLmFsdFB1YmxpY0FsYkFybnMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5hbHRQdWJsaWNBbGJzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwQWx0UHJpdmF0ZUFsYnMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5hbHRQcml2YXRlQWxiQXJucykge1xuICAgICAgICB0aGlzLmFsdFByaXZhdGVBbGJBcm5zID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMuYWx0UHJpdmF0ZUFsYnNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBBbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXMgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnMpIHtcbiAgICAgICAgdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZUFybnMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5hbHRQdWJsaWNBbGJDZXJ0aWZpY2F0ZXNQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApLnNwbGl0KCcsJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBBbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVzID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMuYWx0UHJpdmF0ZUFsYkNlcnRpZmljYXRlQXJucykge1xuICAgICAgICB0aGlzLmFsdFByaXZhdGVBbGJDZXJ0aWZpY2F0ZUFybnMgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5hbHRQcml2YXRlQWxiQ2VydGlmaWNhdGVzUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKS5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwUHVibGljQ2VydGlmaWNhdGUgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5wdWJsaWNDZXJ0aWZpY2F0ZUFybikge1xuICAgICAgICB0aGlzLnB1YmxpY0NlcnRpZmljYXRlQXJuID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMucHVibGljQ2VydGlmaWNhdGVQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwUHJpdmF0ZUNlcnRpZmljYXRlID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMucHJpdmF0ZUNlcnRpZmljYXRlQXJuKSB7XG4gICAgICAgIHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlQXJuID0gU3RyaW5nUGFyYW1ldGVyLnZhbHVlRnJvbUxvb2t1cChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMucHJpdmF0ZUNlcnRpZmljYXRlUGFyYW1ldGVyUGF0aCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmxvb2t1cENsb3VkRnJvbnRDZXJ0aWZpY2F0ZSA/PyBmYWxzZSkge1xuICAgICAgaWYgKCF0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZUFybikge1xuICAgICAgICB0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZUFybiA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLmNsb3VkRnJvbnRDZXJ0aWZpY2F0ZVBhcmFtZXRlclBhdGgsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5sb29rdXBQdWJsaWNab25lID8/IGZhbHNlKSB7XG4gICAgICBpZiAoIXRoaXMucHVibGljWm9uZU5hbWUpIHtcbiAgICAgICAgdGhpcy5wdWJsaWNab25lTmFtZSA9IFN0cmluZ1BhcmFtZXRlci52YWx1ZUZyb21Mb29rdXAoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICB0aGlzLnB1YmxpY1pvbmVQYXJhbWV0ZXJQYXRoLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMubG9va3VwUHJpdmF0ZVpvbmUgPz8gZmFsc2UpIHtcbiAgICAgIGlmICghdGhpcy5wcml2YXRlWm9uZU5hbWUpIHtcbiAgICAgICAgdGhpcy5wcml2YXRlWm9uZU5hbWUgPSBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGcm9tTG9va3VwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5wcml2YXRlWm9uZVBhcmFtZXRlclBhdGgsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import * as ec2 from 'aws-cdk-lib/aws-ec2';
|
|
2
|
+
import type { Construct } from 'constructs';
|
|
3
|
+
import { ExtendedConstruct, type ExtendedConstructProps } from '../../aws-cdk';
|
|
4
|
+
import { NetworkParameters } from './network-parameters';
|
|
5
|
+
export type NatType = 'none' | 'single' | 'multi';
|
|
6
|
+
/**
|
|
7
|
+
* Properties for StandardNetwork.
|
|
8
|
+
*/
|
|
9
|
+
export interface StandardNetworkProps extends ExtendedConstructProps {
|
|
10
|
+
/**
|
|
11
|
+
* Name for the VPC. Used as the VPC name tag and the SSM parameter path
|
|
12
|
+
* segment (e.g. /network/{name}/vpc).
|
|
13
|
+
*/
|
|
14
|
+
readonly name: string;
|
|
15
|
+
/**
|
|
16
|
+
* Full VPC CIDR block. e.g. "10.0.0.0/20".
|
|
17
|
+
* Supported VPC prefix lengths for auto-sizing: /16, /17, /18, /19, /20.
|
|
18
|
+
*/
|
|
19
|
+
readonly vpcCidr: string;
|
|
20
|
+
/**
|
|
21
|
+
* Number of availability zones to deploy subnets into. Default is 2.
|
|
22
|
+
*
|
|
23
|
+
* @default 2
|
|
24
|
+
*/
|
|
25
|
+
readonly azCount?: number;
|
|
26
|
+
/**
|
|
27
|
+
* NAT gateway configuration. Default is 'none'.
|
|
28
|
+
*
|
|
29
|
+
* @default 'none'
|
|
30
|
+
*/
|
|
31
|
+
readonly natType?: NatType;
|
|
32
|
+
/**
|
|
33
|
+
* Whether to create public subnets. Default is true.
|
|
34
|
+
*
|
|
35
|
+
* @default true
|
|
36
|
+
*/
|
|
37
|
+
readonly createPublicSubnets?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Whether to create private subnets (PRIVATE_WITH_EGRESS). Default is true.
|
|
40
|
+
*
|
|
41
|
+
* @default true
|
|
42
|
+
*/
|
|
43
|
+
readonly createPrivateSubnets?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Whether to create intra subnets (PRIVATE_ISOLATED, no egress). Default is true.
|
|
46
|
+
*
|
|
47
|
+
* @default true
|
|
48
|
+
*/
|
|
49
|
+
readonly createIntraSubnets?: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Whether to create database subnets (PRIVATE_WITH_EGRESS). Default is true.
|
|
52
|
+
*
|
|
53
|
+
* @default true
|
|
54
|
+
*/
|
|
55
|
+
readonly createDatabaseSubnets?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Whether to create elasticache subnets (PRIVATE_WITH_EGRESS). Default is true.
|
|
58
|
+
*
|
|
59
|
+
* @default true
|
|
60
|
+
*/
|
|
61
|
+
readonly createElasticacheSubnets?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Whether to create redshift subnets (PRIVATE_WITH_EGRESS). Default is false.
|
|
64
|
+
*
|
|
65
|
+
* @default false
|
|
66
|
+
*/
|
|
67
|
+
readonly createRedshiftSubnets?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Apply a uniform CIDR mask to ALL subnet groups, overriding the terraform-style
|
|
70
|
+
* auto-sizing. When set, all groups receive the same mask regardless of type.
|
|
71
|
+
* Per-group overrides below take precedence over this value.
|
|
72
|
+
*/
|
|
73
|
+
readonly subnetCidrMask?: number;
|
|
74
|
+
/**
|
|
75
|
+
* CIDR mask override for private subnets only.
|
|
76
|
+
*
|
|
77
|
+
* Equivalent to setting `private_newbits` in terraform-aws-vpc:
|
|
78
|
+
* privateSubnetCidrMask = vpcPrefix + private_newbits
|
|
79
|
+
*
|
|
80
|
+
* Takes precedence over subnetCidrMask and auto-sizing.
|
|
81
|
+
*/
|
|
82
|
+
readonly privateSubnetCidrMask?: number;
|
|
83
|
+
/**
|
|
84
|
+
* CIDR mask override for public subnets only.
|
|
85
|
+
*
|
|
86
|
+
* Equivalent to setting `public_newbits` in terraform-aws-vpc:
|
|
87
|
+
* publicSubnetCidrMask = vpcPrefix + public_newbits
|
|
88
|
+
*
|
|
89
|
+
* Takes precedence over subnetCidrMask and auto-sizing.
|
|
90
|
+
*/
|
|
91
|
+
readonly publicSubnetCidrMask?: number;
|
|
92
|
+
/**
|
|
93
|
+
* CIDR mask override for intra subnets only.
|
|
94
|
+
*
|
|
95
|
+
* Equivalent to setting `intra_newbits` in terraform-aws-vpc.
|
|
96
|
+
* Takes precedence over subnetCidrMask and auto-sizing.
|
|
97
|
+
*/
|
|
98
|
+
readonly intraSubnetCidrMask?: number;
|
|
99
|
+
/**
|
|
100
|
+
* CIDR mask override for database subnets only.
|
|
101
|
+
*
|
|
102
|
+
* Equivalent to setting `database_newbits` in terraform-aws-vpc.
|
|
103
|
+
* Takes precedence over subnetCidrMask and auto-sizing.
|
|
104
|
+
*/
|
|
105
|
+
readonly databaseSubnetCidrMask?: number;
|
|
106
|
+
/**
|
|
107
|
+
* CIDR mask override for elasticache subnets only.
|
|
108
|
+
*
|
|
109
|
+
* Equivalent to setting `elasticache_newbits` in terraform-aws-vpc.
|
|
110
|
+
* Takes precedence over subnetCidrMask and auto-sizing.
|
|
111
|
+
*/
|
|
112
|
+
readonly elasticacheSubnetCidrMask?: number;
|
|
113
|
+
/**
|
|
114
|
+
* CIDR mask override for redshift subnets only.
|
|
115
|
+
*
|
|
116
|
+
* Equivalent to setting `redshift_newbits` in terraform-aws-vpc.
|
|
117
|
+
* Takes precedence over subnetCidrMask and auto-sizing.
|
|
118
|
+
*/
|
|
119
|
+
readonly redshiftSubnetCidrMask?: number;
|
|
120
|
+
/**
|
|
121
|
+
* Whether to create an S3 gateway VPC endpoint. The endpoint is attached to
|
|
122
|
+
* private, database, elasticache, redshift, and intra subnets (whichever are
|
|
123
|
+
* enabled). Default is true.
|
|
124
|
+
*
|
|
125
|
+
* @default true
|
|
126
|
+
*/
|
|
127
|
+
readonly createS3Endpoint?: boolean;
|
|
128
|
+
/**
|
|
129
|
+
* Whether to create a DynamoDB gateway VPC endpoint. Attached to the same
|
|
130
|
+
* subnet groups as the S3 endpoint. Default is true.
|
|
131
|
+
*
|
|
132
|
+
* @default true
|
|
133
|
+
*/
|
|
134
|
+
readonly createDynamoDbEndpoint?: boolean;
|
|
135
|
+
/**
|
|
136
|
+
* Whether to store VPC and subnet IDs in AWS SSM Parameter Store via the
|
|
137
|
+
* NetworkParameters construct. Default is true.
|
|
138
|
+
*
|
|
139
|
+
* @default true
|
|
140
|
+
*/
|
|
141
|
+
readonly storeParameters?: boolean;
|
|
142
|
+
/**
|
|
143
|
+
* SSM parameter prefix used when storeParameters is true. Default is "/network".
|
|
144
|
+
*
|
|
145
|
+
* @default "/network"
|
|
146
|
+
*/
|
|
147
|
+
readonly parametersPrefix?: string;
|
|
148
|
+
/**
|
|
149
|
+
* Whether to create CloudFormation stack outputs for VPC and subnet IDs.
|
|
150
|
+
* Default is true.
|
|
151
|
+
*
|
|
152
|
+
* @default true
|
|
153
|
+
*/
|
|
154
|
+
readonly createOutputs?: boolean;
|
|
155
|
+
/**
|
|
156
|
+
* Additional tags to apply to public subnets.
|
|
157
|
+
*/
|
|
158
|
+
readonly publicSubnetTags?: Record<string, string>;
|
|
159
|
+
/**
|
|
160
|
+
* Additional tags to apply to private subnets.
|
|
161
|
+
*/
|
|
162
|
+
readonly privateSubnetTags?: Record<string, string>;
|
|
163
|
+
/**
|
|
164
|
+
* Additional tags to apply to intra subnets.
|
|
165
|
+
*/
|
|
166
|
+
readonly intraSubnetTags?: Record<string, string>;
|
|
167
|
+
/**
|
|
168
|
+
* Additional tags to apply to database subnets.
|
|
169
|
+
*/
|
|
170
|
+
readonly databaseSubnetTags?: Record<string, string>;
|
|
171
|
+
/**
|
|
172
|
+
* Additional tags to apply to elasticache subnets.
|
|
173
|
+
*/
|
|
174
|
+
readonly elasticacheSubnetTags?: Record<string, string>;
|
|
175
|
+
/**
|
|
176
|
+
* Additional tags to apply to redshift subnets.
|
|
177
|
+
*/
|
|
178
|
+
readonly redshiftSubnetTags?: Record<string, string>;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Creates a standard multi-tier VPC following TrueMark conventions, with subnet
|
|
182
|
+
* sizing that mirrors the truemark/terraform-aws-vpc Terraform module.
|
|
183
|
+
*
|
|
184
|
+
* **Subnet layout** (each group is replicated across all AZs):
|
|
185
|
+
*
|
|
186
|
+
* | Group | Type | Default sizing (auto, see table below) |
|
|
187
|
+
* |-------------|---------------------|----------------------------------------|
|
|
188
|
+
* | private | PRIVATE_WITH_EGRESS | Larger — sized for workload traffic |
|
|
189
|
+
* | public | PUBLIC | Smaller |
|
|
190
|
+
* | intra | PRIVATE_ISOLATED | Smaller — no egress |
|
|
191
|
+
* | database | PRIVATE_WITH_EGRESS | Smaller |
|
|
192
|
+
* | elasticache | PRIVATE_WITH_EGRESS | Smaller |
|
|
193
|
+
* | redshift | PRIVATE_WITH_EGRESS | Smaller (disabled by default) |
|
|
194
|
+
*
|
|
195
|
+
* **Auto-sizing table** (matches terraform-aws-vpc `private_subnets`/`subnets` locals):
|
|
196
|
+
*
|
|
197
|
+
* | VPC | private | public/intra/database/elasticache/redshift |
|
|
198
|
+
* |--------|---------|---------------------------------------------|
|
|
199
|
+
* | /16 | /19 | /22 |
|
|
200
|
+
* | /17 | /20 | /22 |
|
|
201
|
+
* | /18 | /21 | /23 |
|
|
202
|
+
* | /19 | /22 | /24 |
|
|
203
|
+
* | /20 | /24 | /25 |
|
|
204
|
+
*
|
|
205
|
+
* Override sizing via `subnetCidrMask` (uniform) or per-group props like
|
|
206
|
+
* `privateSubnetCidrMask`, `publicSubnetCidrMask`, etc. — equivalent to the
|
|
207
|
+
* `private_newbits`, `public_newbits`, ... variables in Terraform.
|
|
208
|
+
*
|
|
209
|
+
* > **Note on CIDR placement:** CDK allocates subnet CIDRs sequentially from
|
|
210
|
+
* > the start of the VPC CIDR block. This differs from Terraform's placement,
|
|
211
|
+
* > which uses explicit `netnum` offsets to position subnet groups at specific
|
|
212
|
+
* > addresses within the VPC. The subnet *sizes* match exactly; only the
|
|
213
|
+
* > starting addresses within the VPC differ.
|
|
214
|
+
*
|
|
215
|
+
* Gateway VPC endpoints for S3 and DynamoDB are created by default and attached
|
|
216
|
+
* to private, intra, database, elasticache, and redshift route tables.
|
|
217
|
+
*
|
|
218
|
+
* VPC and subnet IDs are stored in AWS SSM Parameter Store via NetworkParameters
|
|
219
|
+
* and optionally exported as CloudFormation outputs.
|
|
220
|
+
*/
|
|
221
|
+
export declare class StandardNetwork extends ExtendedConstruct {
|
|
222
|
+
/**
|
|
223
|
+
* The VPC created by this construct.
|
|
224
|
+
*/
|
|
225
|
+
readonly vpc: ec2.Vpc;
|
|
226
|
+
/**
|
|
227
|
+
* The NetworkParameters construct holding SSM paths and created parameters.
|
|
228
|
+
* Undefined when storeParameters is false.
|
|
229
|
+
*/
|
|
230
|
+
readonly networkParameters?: NetworkParameters;
|
|
231
|
+
constructor(scope: Construct, id: string, props: StandardNetworkProps);
|
|
232
|
+
}
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StandardNetwork = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const ec2 = require("aws-cdk-lib/aws-ec2");
|
|
6
|
+
const aws_cdk_1 = require("../../aws-cdk");
|
|
7
|
+
const truemark_1 = require("../../truemark");
|
|
8
|
+
const network_parameters_1 = require("./network-parameters");
|
|
9
|
+
// TODO Need ipv6 support and we need to support ipv6 only
|
|
10
|
+
/**
|
|
11
|
+
* Subnet sizing lookup table keyed by VPC prefix length.
|
|
12
|
+
*
|
|
13
|
+
* Mirrors the `private_subnets` and `subnets` locals in truemark/terraform-aws-vpc:
|
|
14
|
+
*
|
|
15
|
+
* VPC private newbits private mask other newbits other mask
|
|
16
|
+
* /16 3 /19 6 /22
|
|
17
|
+
* /17 3 /20 5 /22
|
|
18
|
+
* /18 3 /21 5 /23
|
|
19
|
+
* /19 3 /22 5 /24
|
|
20
|
+
* /20 4 /24 5 /25
|
|
21
|
+
*
|
|
22
|
+
* "newbits" is the number of bits to extend the VPC prefix.
|
|
23
|
+
* cidrMask = vpcPrefix + newbits.
|
|
24
|
+
*/
|
|
25
|
+
const SUBNET_NEWBITS = {
|
|
26
|
+
16: { privateBits: 3, otherBits: 6 },
|
|
27
|
+
17: { privateBits: 3, otherBits: 5 },
|
|
28
|
+
18: { privateBits: 3, otherBits: 5 },
|
|
29
|
+
19: { privateBits: 3, otherBits: 5 },
|
|
30
|
+
20: { privateBits: 4, otherBits: 5 },
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Determines the CIDR masks for each subnet group.
|
|
34
|
+
*
|
|
35
|
+
* Resolution order (highest wins):
|
|
36
|
+
* 1. Per-group override (e.g. privateSubnetCidrMask)
|
|
37
|
+
* 2. Uniform override (subnetCidrMask)
|
|
38
|
+
* 3. Terraform-table auto-sizing from the VPC prefix
|
|
39
|
+
*/
|
|
40
|
+
function resolveSubnetMasks(vpcCidr, props) {
|
|
41
|
+
var _a, _b, _c, _d, _e, _f;
|
|
42
|
+
const vpcPrefix = Number(vpcCidr.split('/')[1]);
|
|
43
|
+
if (!Number.isFinite(vpcPrefix)) {
|
|
44
|
+
throw new Error(`Invalid VPC CIDR: ${vpcCidr}`);
|
|
45
|
+
}
|
|
46
|
+
// --- Auto-sizing from terraform tables ---
|
|
47
|
+
const bits = SUBNET_NEWBITS[vpcPrefix];
|
|
48
|
+
let autoPrivate;
|
|
49
|
+
let autoOther;
|
|
50
|
+
if (bits) {
|
|
51
|
+
autoPrivate = vpcPrefix + bits.privateBits;
|
|
52
|
+
autoOther = vpcPrefix + bits.otherBits;
|
|
53
|
+
}
|
|
54
|
+
else if (props.subnetCidrMask !== undefined) {
|
|
55
|
+
// Fall back to uniform when VPC prefix is outside the table range
|
|
56
|
+
autoPrivate = props.subnetCidrMask;
|
|
57
|
+
autoOther = props.subnetCidrMask;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
throw new Error(`VPC prefix /${vpcPrefix} is not in the auto-sizing table (supported: /16–/20). ` +
|
|
61
|
+
`Provide subnetCidrMask or per-group overrides.`);
|
|
62
|
+
}
|
|
63
|
+
// Uniform override replaces both private and other defaults
|
|
64
|
+
const uniformMask = props.subnetCidrMask;
|
|
65
|
+
const baseMaskPrivate = uniformMask !== null && uniformMask !== void 0 ? uniformMask : autoPrivate;
|
|
66
|
+
const baseMaskOther = uniformMask !== null && uniformMask !== void 0 ? uniformMask : autoOther;
|
|
67
|
+
return {
|
|
68
|
+
private: (_a = props.privateSubnetCidrMask) !== null && _a !== void 0 ? _a : baseMaskPrivate,
|
|
69
|
+
public: (_b = props.publicSubnetCidrMask) !== null && _b !== void 0 ? _b : baseMaskOther,
|
|
70
|
+
intra: (_c = props.intraSubnetCidrMask) !== null && _c !== void 0 ? _c : baseMaskOther,
|
|
71
|
+
database: (_d = props.databaseSubnetCidrMask) !== null && _d !== void 0 ? _d : baseMaskOther,
|
|
72
|
+
elasticache: (_e = props.elasticacheSubnetCidrMask) !== null && _e !== void 0 ? _e : baseMaskOther,
|
|
73
|
+
redshift: (_f = props.redshiftSubnetCidrMask) !== null && _f !== void 0 ? _f : baseMaskOther,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Validates that the VPC CIDR has enough address space for all enabled subnet
|
|
78
|
+
* groups. Each group consumes azCount × 2^(32-cidrMask) IPs.
|
|
79
|
+
*/
|
|
80
|
+
function validateAddressSpace(vpcCidr, azCount, enabledGroups) {
|
|
81
|
+
const vpcPrefix = Number(vpcCidr.split('/')[1]);
|
|
82
|
+
// AWS allows VPC netmasks between /16 and /28.
|
|
83
|
+
if (!Number.isInteger(vpcPrefix) || vpcPrefix < 16 || vpcPrefix > 28) {
|
|
84
|
+
throw new Error(`Invalid VPC CIDR ${vpcCidr}: prefix must be an integer between /16 and /28.`);
|
|
85
|
+
}
|
|
86
|
+
if (!Number.isInteger(azCount) || azCount < 1) {
|
|
87
|
+
throw new Error(`azCount must be a positive integer, got ${azCount}.`);
|
|
88
|
+
}
|
|
89
|
+
// AWS subnet masks must be between /16 and /28, and never larger than the
|
|
90
|
+
// VPC itself.
|
|
91
|
+
for (const g of enabledGroups) {
|
|
92
|
+
if (!Number.isInteger(g.mask) || g.mask < vpcPrefix || g.mask > 28) {
|
|
93
|
+
throw new Error(`Invalid CIDR mask /${g.mask} for ${g.name} subnets: must be an ` +
|
|
94
|
+
`integer between the VPC prefix (/${vpcPrefix}) and /28.`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const vpcIps = 2 ** (32 - vpcPrefix);
|
|
98
|
+
let requiredIps = 0;
|
|
99
|
+
const detail = [];
|
|
100
|
+
for (const g of enabledGroups) {
|
|
101
|
+
const subnetIps = 2 ** (32 - g.mask);
|
|
102
|
+
const groupIps = azCount * subnetIps;
|
|
103
|
+
requiredIps += groupIps;
|
|
104
|
+
detail.push(`${g.name}: ${azCount} × /${g.mask} = ${groupIps} IPs`);
|
|
105
|
+
}
|
|
106
|
+
if (requiredIps > vpcIps) {
|
|
107
|
+
throw new Error(`VPC CIDR ${vpcCidr} (${vpcIps} IPs) is too small.\n` +
|
|
108
|
+
`Required: ${requiredIps} IPs across ${enabledGroups.length} subnet groups:\n` +
|
|
109
|
+
detail.map((d) => ` ${d}`).join('\n') +
|
|
110
|
+
'\nIncrease the VPC size, reduce azCount, or disable some subnet groups.');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function applySubnetTags(subnets, tags) {
|
|
114
|
+
for (const subnet of subnets) {
|
|
115
|
+
for (const [key, value] of Object.entries(tags)) {
|
|
116
|
+
aws_cdk_lib_1.Tags.of(subnet).add(key, value);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Creates a standard multi-tier VPC following TrueMark conventions, with subnet
|
|
122
|
+
* sizing that mirrors the truemark/terraform-aws-vpc Terraform module.
|
|
123
|
+
*
|
|
124
|
+
* **Subnet layout** (each group is replicated across all AZs):
|
|
125
|
+
*
|
|
126
|
+
* | Group | Type | Default sizing (auto, see table below) |
|
|
127
|
+
* |-------------|---------------------|----------------------------------------|
|
|
128
|
+
* | private | PRIVATE_WITH_EGRESS | Larger — sized for workload traffic |
|
|
129
|
+
* | public | PUBLIC | Smaller |
|
|
130
|
+
* | intra | PRIVATE_ISOLATED | Smaller — no egress |
|
|
131
|
+
* | database | PRIVATE_WITH_EGRESS | Smaller |
|
|
132
|
+
* | elasticache | PRIVATE_WITH_EGRESS | Smaller |
|
|
133
|
+
* | redshift | PRIVATE_WITH_EGRESS | Smaller (disabled by default) |
|
|
134
|
+
*
|
|
135
|
+
* **Auto-sizing table** (matches terraform-aws-vpc `private_subnets`/`subnets` locals):
|
|
136
|
+
*
|
|
137
|
+
* | VPC | private | public/intra/database/elasticache/redshift |
|
|
138
|
+
* |--------|---------|---------------------------------------------|
|
|
139
|
+
* | /16 | /19 | /22 |
|
|
140
|
+
* | /17 | /20 | /22 |
|
|
141
|
+
* | /18 | /21 | /23 |
|
|
142
|
+
* | /19 | /22 | /24 |
|
|
143
|
+
* | /20 | /24 | /25 |
|
|
144
|
+
*
|
|
145
|
+
* Override sizing via `subnetCidrMask` (uniform) or per-group props like
|
|
146
|
+
* `privateSubnetCidrMask`, `publicSubnetCidrMask`, etc. — equivalent to the
|
|
147
|
+
* `private_newbits`, `public_newbits`, ... variables in Terraform.
|
|
148
|
+
*
|
|
149
|
+
* > **Note on CIDR placement:** CDK allocates subnet CIDRs sequentially from
|
|
150
|
+
* > the start of the VPC CIDR block. This differs from Terraform's placement,
|
|
151
|
+
* > which uses explicit `netnum` offsets to position subnet groups at specific
|
|
152
|
+
* > addresses within the VPC. The subnet *sizes* match exactly; only the
|
|
153
|
+
* > starting addresses within the VPC differ.
|
|
154
|
+
*
|
|
155
|
+
* Gateway VPC endpoints for S3 and DynamoDB are created by default and attached
|
|
156
|
+
* to private, intra, database, elasticache, and redshift route tables.
|
|
157
|
+
*
|
|
158
|
+
* VPC and subnet IDs are stored in AWS SSM Parameter Store via NetworkParameters
|
|
159
|
+
* and optionally exported as CloudFormation outputs.
|
|
160
|
+
*/
|
|
161
|
+
class StandardNetwork extends aws_cdk_1.ExtendedConstruct {
|
|
162
|
+
constructor(scope, id, props) {
|
|
163
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
164
|
+
super(scope, id, {
|
|
165
|
+
standardTags: aws_cdk_1.StandardTags.merge(props.standardTags, truemark_1.LibStandardTags),
|
|
166
|
+
});
|
|
167
|
+
// TODO You change the default here Daren
|
|
168
|
+
const azCount = (_a = props.azCount) !== null && _a !== void 0 ? _a : 2;
|
|
169
|
+
const natType = (_b = props.natType) !== null && _b !== void 0 ? _b : 'none';
|
|
170
|
+
const natGateways = natType === 'multi' ? azCount : natType === 'single' ? 1 : 0;
|
|
171
|
+
// TODO Need to add support for regional NAT
|
|
172
|
+
// TODO Need to add support for poor NAT
|
|
173
|
+
// TODO Need to add support for network firewall
|
|
174
|
+
const createPublic = (_c = props.createPublicSubnets) !== null && _c !== void 0 ? _c : true;
|
|
175
|
+
const createPrivate = (_d = props.createPrivateSubnets) !== null && _d !== void 0 ? _d : true;
|
|
176
|
+
const createIntra = (_e = props.createIntraSubnets) !== null && _e !== void 0 ? _e : true;
|
|
177
|
+
const createDatabase = (_f = props.createDatabaseSubnets) !== null && _f !== void 0 ? _f : true;
|
|
178
|
+
const createElasticache = (_g = props.createElasticacheSubnets) !== null && _g !== void 0 ? _g : true;
|
|
179
|
+
const createRedshift = (_h = props.createRedshiftSubnets) !== null && _h !== void 0 ? _h : false;
|
|
180
|
+
const masks = resolveSubnetMasks(props.vpcCidr, props);
|
|
181
|
+
const enabledGroups = [];
|
|
182
|
+
if (createPublic)
|
|
183
|
+
enabledGroups.push({ mask: masks.public, name: 'public' });
|
|
184
|
+
if (createPrivate)
|
|
185
|
+
enabledGroups.push({ mask: masks.private, name: 'private' });
|
|
186
|
+
if (createIntra)
|
|
187
|
+
enabledGroups.push({ mask: masks.intra, name: 'intra' });
|
|
188
|
+
if (createDatabase)
|
|
189
|
+
enabledGroups.push({ mask: masks.database, name: 'database' });
|
|
190
|
+
if (createElasticache)
|
|
191
|
+
enabledGroups.push({ mask: masks.elasticache, name: 'elasticache' });
|
|
192
|
+
if (createRedshift)
|
|
193
|
+
enabledGroups.push({ mask: masks.redshift, name: 'redshift' });
|
|
194
|
+
validateAddressSpace(props.vpcCidr, azCount, enabledGroups);
|
|
195
|
+
const subnetConfiguration = [];
|
|
196
|
+
if (createPrivate) {
|
|
197
|
+
subnetConfiguration.push({
|
|
198
|
+
name: 'private',
|
|
199
|
+
subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
|
|
200
|
+
cidrMask: masks.private,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
if (createPublic) {
|
|
204
|
+
subnetConfiguration.push({
|
|
205
|
+
name: 'public',
|
|
206
|
+
subnetType: ec2.SubnetType.PUBLIC,
|
|
207
|
+
cidrMask: masks.public,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
if (createIntra) {
|
|
211
|
+
subnetConfiguration.push({
|
|
212
|
+
name: 'intra',
|
|
213
|
+
subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
|
|
214
|
+
cidrMask: masks.intra,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
if (createDatabase) {
|
|
218
|
+
subnetConfiguration.push({
|
|
219
|
+
name: 'database',
|
|
220
|
+
subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
|
|
221
|
+
cidrMask: masks.database,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
if (createElasticache) {
|
|
225
|
+
subnetConfiguration.push({
|
|
226
|
+
name: 'elasticache',
|
|
227
|
+
subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
|
|
228
|
+
cidrMask: masks.elasticache,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
if (createRedshift) {
|
|
232
|
+
subnetConfiguration.push({
|
|
233
|
+
name: 'redshift',
|
|
234
|
+
subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
|
|
235
|
+
cidrMask: masks.redshift,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
this.vpc = new ec2.Vpc(this, 'Vpc', {
|
|
239
|
+
vpcName: props.name,
|
|
240
|
+
maxAzs: azCount,
|
|
241
|
+
natGateways,
|
|
242
|
+
ipAddresses: ec2.IpAddresses.cidr(props.vpcCidr),
|
|
243
|
+
subnetConfiguration,
|
|
244
|
+
});
|
|
245
|
+
// Apply per-subnet-group tags
|
|
246
|
+
if (props.publicSubnetTags && createPublic) {
|
|
247
|
+
applySubnetTags(this.vpc.selectSubnets({ subnetGroupName: 'public' }).subnets, props.publicSubnetTags);
|
|
248
|
+
}
|
|
249
|
+
if (props.privateSubnetTags && createPrivate) {
|
|
250
|
+
applySubnetTags(this.vpc.selectSubnets({ subnetGroupName: 'private' }).subnets, props.privateSubnetTags);
|
|
251
|
+
}
|
|
252
|
+
if (props.intraSubnetTags && createIntra) {
|
|
253
|
+
applySubnetTags(this.vpc.selectSubnets({ subnetGroupName: 'intra' }).subnets, props.intraSubnetTags);
|
|
254
|
+
}
|
|
255
|
+
if (props.databaseSubnetTags && createDatabase) {
|
|
256
|
+
applySubnetTags(this.vpc.selectSubnets({ subnetGroupName: 'database' }).subnets, props.databaseSubnetTags);
|
|
257
|
+
}
|
|
258
|
+
if (props.elasticacheSubnetTags && createElasticache) {
|
|
259
|
+
applySubnetTags(this.vpc.selectSubnets({ subnetGroupName: 'elasticache' }).subnets, props.elasticacheSubnetTags);
|
|
260
|
+
}
|
|
261
|
+
if (props.redshiftSubnetTags && createRedshift) {
|
|
262
|
+
applySubnetTags(this.vpc.selectSubnets({ subnetGroupName: 'redshift' }).subnets, props.redshiftSubnetTags);
|
|
263
|
+
}
|
|
264
|
+
// Build the list of subnet groups for gateway endpoint route tables.
|
|
265
|
+
const endpointSubnets = [];
|
|
266
|
+
if (createPrivate)
|
|
267
|
+
endpointSubnets.push({ subnetGroupName: 'private' });
|
|
268
|
+
if (createIntra)
|
|
269
|
+
endpointSubnets.push({ subnetGroupName: 'intra' });
|
|
270
|
+
if (createDatabase)
|
|
271
|
+
endpointSubnets.push({ subnetGroupName: 'database' });
|
|
272
|
+
if (createElasticache)
|
|
273
|
+
endpointSubnets.push({ subnetGroupName: 'elasticache' });
|
|
274
|
+
if (createRedshift)
|
|
275
|
+
endpointSubnets.push({ subnetGroupName: 'redshift' });
|
|
276
|
+
if (((_j = props.createS3Endpoint) !== null && _j !== void 0 ? _j : true) && endpointSubnets.length > 0) {
|
|
277
|
+
this.vpc.addGatewayEndpoint('S3GatewayEndpoint', {
|
|
278
|
+
service: ec2.GatewayVpcEndpointAwsService.S3,
|
|
279
|
+
subnets: endpointSubnets,
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
if (((_k = props.createDynamoDbEndpoint) !== null && _k !== void 0 ? _k : true) && endpointSubnets.length > 0) {
|
|
283
|
+
this.vpc.addGatewayEndpoint('DynamoDbGatewayEndpoint', {
|
|
284
|
+
service: ec2.GatewayVpcEndpointAwsService.DYNAMODB,
|
|
285
|
+
subnets: endpointSubnets,
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
// CloudFormation outputs
|
|
289
|
+
if ((_l = props.createOutputs) !== null && _l !== void 0 ? _l : true) {
|
|
290
|
+
const stackName = aws_cdk_lib_1.Stack.of(this).stackName;
|
|
291
|
+
new aws_cdk_lib_1.CfnOutput(this, 'VpcId', {
|
|
292
|
+
value: this.vpc.vpcId,
|
|
293
|
+
exportName: `${stackName}:VpcId`,
|
|
294
|
+
});
|
|
295
|
+
if (createPublic) {
|
|
296
|
+
new aws_cdk_lib_1.CfnOutput(this, 'PublicSubnetIds', {
|
|
297
|
+
value: this.vpc
|
|
298
|
+
.selectSubnets({ subnetGroupName: 'public' })
|
|
299
|
+
.subnetIds.join(','),
|
|
300
|
+
exportName: `${stackName}:PublicSubnetIds`,
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
if (createPrivate) {
|
|
304
|
+
new aws_cdk_lib_1.CfnOutput(this, 'PrivateSubnetIds', {
|
|
305
|
+
value: this.vpc
|
|
306
|
+
.selectSubnets({ subnetGroupName: 'private' })
|
|
307
|
+
.subnetIds.join(','),
|
|
308
|
+
exportName: `${stackName}:PrivateSubnetIds`,
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
if (createIntra) {
|
|
312
|
+
new aws_cdk_lib_1.CfnOutput(this, 'IntraSubnetIds', {
|
|
313
|
+
value: this.vpc
|
|
314
|
+
.selectSubnets({ subnetGroupName: 'intra' })
|
|
315
|
+
.subnetIds.join(','),
|
|
316
|
+
exportName: `${stackName}:IntraSubnetIds`,
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
if (createDatabase) {
|
|
320
|
+
new aws_cdk_lib_1.CfnOutput(this, 'DatabaseSubnetIds', {
|
|
321
|
+
value: this.vpc
|
|
322
|
+
.selectSubnets({ subnetGroupName: 'database' })
|
|
323
|
+
.subnetIds.join(','),
|
|
324
|
+
exportName: `${stackName}:DatabaseSubnetIds`,
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
if (createElasticache) {
|
|
328
|
+
new aws_cdk_lib_1.CfnOutput(this, 'ElasticacheSubnetIds', {
|
|
329
|
+
value: this.vpc
|
|
330
|
+
.selectSubnets({ subnetGroupName: 'elasticache' })
|
|
331
|
+
.subnetIds.join(','),
|
|
332
|
+
exportName: `${stackName}:ElasticacheSubnetIds`,
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
if (createRedshift) {
|
|
336
|
+
new aws_cdk_lib_1.CfnOutput(this, 'RedshiftSubnetIds', {
|
|
337
|
+
value: this.vpc
|
|
338
|
+
.selectSubnets({ subnetGroupName: 'redshift' })
|
|
339
|
+
.subnetIds.join(','),
|
|
340
|
+
exportName: `${stackName}:RedshiftSubnetIds`,
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
// SSM Parameter Store via NetworkParameters
|
|
345
|
+
if ((_m = props.storeParameters) !== null && _m !== void 0 ? _m : true) {
|
|
346
|
+
this.networkParameters = new network_parameters_1.NetworkParameters(this, 'NetworkParameters', {
|
|
347
|
+
name: props.name,
|
|
348
|
+
prefix: props.parametersPrefix,
|
|
349
|
+
create: true,
|
|
350
|
+
lookupVpc: false,
|
|
351
|
+
lookupAzs: false,
|
|
352
|
+
lookupPublicSubnets: false,
|
|
353
|
+
lookupPrivateSubnets: false,
|
|
354
|
+
lookupIntraSubnets: false,
|
|
355
|
+
lookupDatabaseSubnets: false,
|
|
356
|
+
lookupElasticacheSubnets: false,
|
|
357
|
+
lookupRedshiftSubnets: false,
|
|
358
|
+
lookupOutpostSubnets: false,
|
|
359
|
+
vpcId: this.vpc.vpcId,
|
|
360
|
+
azs: this.vpc.availabilityZones,
|
|
361
|
+
publicSubnetIds: createPublic
|
|
362
|
+
? this.vpc.selectSubnets({ subnetGroupName: 'public' }).subnetIds
|
|
363
|
+
: undefined,
|
|
364
|
+
privateSubnetIds: createPrivate
|
|
365
|
+
? this.vpc.selectSubnets({ subnetGroupName: 'private' }).subnetIds
|
|
366
|
+
: undefined,
|
|
367
|
+
intraSubnetIds: createIntra
|
|
368
|
+
? this.vpc.selectSubnets({ subnetGroupName: 'intra' }).subnetIds
|
|
369
|
+
: undefined,
|
|
370
|
+
databaseSubnetIds: createDatabase
|
|
371
|
+
? this.vpc.selectSubnets({ subnetGroupName: 'database' }).subnetIds
|
|
372
|
+
: undefined,
|
|
373
|
+
elasticacheSubnetIds: createElasticache
|
|
374
|
+
? this.vpc.selectSubnets({ subnetGroupName: 'elasticache' }).subnetIds
|
|
375
|
+
: undefined,
|
|
376
|
+
redshiftSubnetIds: createRedshift
|
|
377
|
+
? this.vpc.selectSubnets({ subnetGroupName: 'redshift' }).subnetIds
|
|
378
|
+
: undefined,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
exports.StandardNetwork = StandardNetwork;
|
|
384
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhcmQtbmV0d29yay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MtdnBjL2xpYi9zdGFuZGFyZC1uZXR3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFtRDtBQUNuRCwyQ0FBMkM7QUFFM0MsMkNBSXVCO0FBQ3ZCLDZDQUErQztBQUMvQyw2REFBdUQ7QUFJdkQsMERBQTBEO0FBRTFEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxjQUFjLEdBQ2xCO0lBQ0UsRUFBRSxFQUFFLEVBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFDO0lBQ2xDLEVBQUUsRUFBRSxFQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBQztJQUNsQyxFQUFFLEVBQUUsRUFBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUM7SUFDbEMsRUFBRSxFQUFFLEVBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFDO0lBQ2xDLEVBQUUsRUFBRSxFQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBQztDQUNuQyxDQUFDO0FBeU5KOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGtCQUFrQixDQUN6QixPQUFlLEVBQ2YsS0FBMkI7O0lBRTNCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCw0Q0FBNEM7SUFDNUMsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFD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aWInO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHR5cGUge0NvbnN0cnVjdH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBFeHRlbmRlZENvbnN0cnVjdCxcbiAgdHlwZSBFeHRlbmRlZENvbnN0cnVjdFByb3BzLFxuICBTdGFuZGFyZFRhZ3MsXG59IGZyb20gJy4uLy4uL2F3cy1jZGsnO1xuaW1wb3J0IHtMaWJTdGFuZGFyZFRhZ3N9IGZyb20gJy4uLy4uL3RydWVtYXJrJztcbmltcG9ydCB7TmV0d29ya1BhcmFtZXRlcnN9IGZyb20gJy4vbmV0d29yay1wYXJhbWV0ZXJzJztcblxuZXhwb3J0IHR5cGUgTmF0VHlwZSA9ICdub25lJyB8ICdzaW5nbGUnIHwgJ211bHRpJzsgLy8gVE9ETyBBZGQgIHwgJ3JlZ2lvbmFsJyB8ICdwb29yJztcblxuLy8gVE9ETyBOZWVkIGlwdjYgc3VwcG9ydCBhbmQgd2UgbmVlZCB0byBzdXBwb3J0IGlwdjYgb25seVxuXG4vKipcbiAqIFN1Ym5ldCBzaXppbmcgbG9va3VwIHRhYmxlIGtleWVkIGJ5IFZQQyBwcmVmaXggbGVuZ3RoLlxuICpcbiAqIE1pcnJvcnMgdGhlIGBwcml2YXRlX3N1Ym5ldHNgIGFuZCBgc3VibmV0c2AgbG9jYWxzIGluIHRydWVtYXJrL3RlcnJhZm9ybS1hd3MtdnBjOlxuICpcbiAqICAgVlBDICAgICBwcml2YXRlIG5ld2JpdHMgIHByaXZhdGUgbWFzayAgIG90aGVyIG5ld2JpdHMgICBvdGhlciBtYXNrXG4gKiAgIC8xNiAgICAgICAgICAzICAgICAgICAgICAgICAgLzE5ICAgICAgICAgICAgICA2ICAgICAgICAgICAgICAvMjJcbiAqICAgLzE3ICAgICAgICAgIDMgICAgICAgICAgICAgICAvMjAgICAgICAgICAgICAgIDUgICAgICAgICAgICAgIC8yMlxuICogICAvMTggICAgICAgICAgMyAgICAgICAgICAgICAgIC8yMSAgICAgICAgICAgICAgNSAgICAgICAgICAgICAgLzIzXG4gKiAgIC8xOSAgICAgICAgICAzICAgICAgICAgICAgICAgLzIyICAgICAgICAgICAgICA1ICAgICAgICAgICAgICAvMjRcbiAqICAgLzIwICAgICAgICAgIDQgICAgICAgICAgICAgICAvMjQgICAgICAgICAgICAgIDUgICAgICAgICAgICAgIC8yNVxuICpcbiAqIFwibmV3Yml0c1wiIGlzIHRoZSBudW1iZXIgb2YgYml0cyB0byBleHRlbmQgdGhlIFZQQyBwcmVmaXguXG4gKiBjaWRyTWFzayA9IHZwY1ByZWZpeCArIG5ld2JpdHMuXG4gKi9cbmNvbnN0IFNVQk5FVF9ORVdCSVRTOiBSZWNvcmQ8bnVtYmVyLCB7cHJpdmF0ZUJpdHM6IG51bWJlcjsgb3RoZXJCaXRzOiBudW1iZXJ9PiA9XG4gIHtcbiAgICAxNjoge3ByaXZhdGVCaXRzOiAzLCBvdGhlckJpdHM6IDZ9LFxuICAgIDE3OiB7cHJpdmF0ZUJpdHM6IDMsIG90aGVyQml0czogNX0sXG4gICAgMTg6IHtwcml2YXRlQml0czogMywgb3RoZXJCaXRzOiA1fSxcbiAgICAxOToge3ByaXZhdGVCaXRzOiAzLCBvdGhlckJpdHM6IDV9LFxuICAgIDIwOiB7cHJpdmF0ZUJpdHM6IDQsIG90aGVyQml0czogNX0sXG4gIH07XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgU3RhbmRhcmROZXR3b3JrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YW5kYXJkTmV0d29ya1Byb3BzIGV4dGVuZHMgRXh0ZW5kZWRDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIGZvciB0aGUgVlBDLiBVc2VkIGFzIHRoZSBWUEMgbmFtZSB0YWcgYW5kIHRoZSBTU00gcGFyYW1ldGVyIHBhdGhcbiAgICogc2VnbWVudCAoZS5nLiAvbmV0d29yay97bmFtZX0vdnBjKS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRnVsbCBWUEMgQ0lEUiBibG9jay4gZS5nLiBcIjEwLjAuMC4wLzIwXCIuXG4gICAqIFN1cHBvcnRlZCBWUEMgcHJlZml4IGxlbmd0aHMgZm9yIGF1dG8tc2l6aW5nOiAvMTYsIC8xNywgLzE4LCAvMTksIC8yMC5cbiAgICovXG4gIHJlYWRvbmx5IHZwY0NpZHI6IHN0cmluZztcblxuICAvLyBUT0RPIFN1Z2dlc3QgYm90aCB0aGlzIGFuZCB0aGUgdGVycmFmb3JtIG1vZHVsZSBkZWZhdWx0IHRvIDNcbiAgLyoqXG4gICAqIE51bWJlciBvZiBhdmFpbGFiaWxpdHkgem9uZXMgdG8gZGVwbG95IHN1Ym5ldHMgaW50by4gRGVmYXVsdCBpcyAyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICByZWFkb25seSBhekNvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOQVQgZ2F0ZXdheSBjb25maWd1cmF0aW9uLiBEZWZhdWx0IGlzICdub25lJy5cbiAgICpcbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICByZWFkb25seSBuYXRUeXBlPzogTmF0VHlwZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBjcmVhdGUgcHVibGljIHN1Ym5ldHMuIERlZmF1bHQgaXMgdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlUHVibGljU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIHByaXZhdGUgc3VibmV0cyAoUFJJVkFURV9XSVRIX0VHUkVTUykuIERlZmF1bHQgaXMgdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlUHJpdmF0ZVN1Ym5ldHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNyZWF0ZSBpbnRyYSBzdWJuZXRzIChQUklWQVRFX0lTT0xBVEVELCBubyBlZ3Jlc3MpLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUludHJhU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIGRhdGFiYXNlIHN1Ym5ldHMgKFBSSVZBVEVfV0lUSF9FR1JFU1MpLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZURhdGFiYXNlU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIGVsYXN0aWNhY2hlIHN1Ym5ldHMgKFBSSVZBVEVfV0lUSF9FR1JFU1MpLiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUVsYXN0aWNhY2hlU3VibmV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIHJlZHNoaWZ0IHN1Ym5ldHMgKFBSSVZBVEVfV0lUSF9FR1JFU1MpLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlUmVkc2hpZnRTdWJuZXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXBwbHkgYSB1bmlmb3JtIENJRFIgbWFzayB0byBBTEwgc3VibmV0IGdyb3Vwcywgb3ZlcnJpZGluZyB0aGUgdGVycmFmb3JtLXN0eWxlXG4gICAqIGF1dG8tc2l6aW5nLiBXaGVuIHNldCwgYWxsIGdyb3VwcyByZWNlaXZlIHRoZSBzYW1lIG1hc2sgcmVnYXJkbGVzcyBvZiB0eXBlLlxuICAgKiBQZXItZ3JvdXAgb3ZlcnJpZGVzIGJlbG93IHRha2UgcHJlY2VkZW5jZSBvdmVyIHRoaXMgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRDaWRyTWFzaz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ0lEUiBtYXNrIG92ZXJyaWRlIGZvciBwcml2YXRlIHN1Ym5ldHMgb25seS5cbiAgICpcbiAgICogRXF1aXZhbGVudCB0byBzZXR0aW5nIGBwcml2YXRlX25ld2JpdHNgIGluIHRlcnJhZm9ybS1hd3MtdnBjOlxuICAgKiAgIHByaXZhdGVTdWJuZXRDaWRyTWFzayA9IHZwY1ByZWZpeCArIHByaXZhdGVfbmV3Yml0c1xuICAgKlxuICAgKiBUYWtlcyBwcmVjZWRlbmNlIG92ZXIgc3VibmV0Q2lkck1hc2sgYW5kIGF1dG8tc2l6aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldENpZHJNYXNrPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDSURSIG1hc2sgb3ZlcnJpZGUgZm9yIHB1YmxpYyBzdWJuZXRzIG9ubHkuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8gc2V0dGluZyBgcHVibGljX25ld2JpdHNgIGluIHRlcnJhZm9ybS1hd3MtdnBjOlxuICAgKiAgIHB1YmxpY1N1Ym5ldENpZHJNYXNrID0gdnBjUHJlZml4ICsgcHVibGljX25ld2JpdHNcbiAgICpcbiAgICogVGFrZXMgcHJlY2VkZW5jZSBvdmVyIHN1Ym5ldENpZHJNYXNrIGFuZCBhdXRvLXNpemluZy5cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldENpZHJNYXNrPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDSURSIG1hc2sgb3ZlcnJpZGUgZm9yIGludHJhIHN1Ym5ldHMgb25seS5cbiAgICpcbiAgICogRXF1aXZhbGVudCB0byBzZXR0aW5nIGBpbnRyYV9uZXdiaXRzYCBpbiB0ZXJyYWZvcm0tYXdzLXZwYy5cbiAgICogVGFrZXMgcHJlY2VkZW5jZSBvdmVyIHN1Ym5ldENpZHJNYXNrIGFuZCBhdXRvLXNpemluZy5cbiAgICovXG4gIHJlYWRvbmx5IGludHJhU3VibmV0Q2lkck1hc2s/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENJRFIgbWFzayBvdmVycmlkZSBmb3IgZGF0YWJhc2Ugc3VibmV0cyBvbmx5LlxuICAgKlxuICAgKiBFcXVpdmFsZW50IHRvIHNldHRpbmcgYGRhdGFiYXNlX25ld2JpdHNgIGluIHRlcnJhZm9ybS1hd3MtdnBjLlxuICAgKiBUYWtlcyBwcmVjZWRlbmNlIG92ZXIgc3VibmV0Q2lkck1hc2sgYW5kIGF1dG8tc2l6aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VTdWJuZXRDaWRyTWFzaz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ0lEUiBtYXNrIG92ZXJyaWRlIGZvciBlbGFzdGljYWNoZSBzdWJuZXRzIG9ubHkuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8gc2V0dGluZyBgZWxhc3RpY2FjaGVfbmV3Yml0c2AgaW4gdGVycmFmb3JtLWF3cy12cGMuXG4gICAqIFRha2VzIHByZWNlZGVuY2Ugb3ZlciBzdWJuZXRDaWRyTWFzayBhbmQgYXV0by1zaXppbmcuXG4gICAqL1xuICByZWFkb25seSBlbGFzdGljYWNoZVN1Ym5ldENpZHJNYXNrPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDSURSIG1hc2sgb3ZlcnJpZGUgZm9yIHJlZHNoaWZ0IHN1Ym5ldHMgb25seS5cbiAgICpcbiAgICogRXF1aXZhbGVudCB0byBzZXR0aW5nIGByZWRzaGlmdF9uZXdiaXRzYCBpbiB0ZXJyYWZvcm0tYXdzLXZwYy5cbiAgICogVGFrZXMgcHJlY2VkZW5jZSBvdmVyIHN1Ym5ldENpZHJNYXNrIGFuZCBhdXRvLXNpemluZy5cbiAgICovXG4gIHJlYWRvbmx5IHJlZHNoaWZ0U3VibmV0Q2lkck1hc2s/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIGFuIFMzIGdhdGV3YXkgVlBDIGVuZHBvaW50LiBUaGUgZW5kcG9pbnQgaXMgYXR0YWNoZWQgdG9cbiAgICogcHJpdmF0ZSwgZGF0YWJhc2UsIGVsYXN0aWNhY2hlLCByZWRzaGlmdCwgYW5kIGludHJhIHN1Ym5ldHMgKHdoaWNoZXZlciBhcmVcbiAgICogZW5hYmxlZCkuIERlZmF1bHQgaXMgdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlUzNFbmRwb2ludD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIGEgRHluYW1vREIgZ2F0ZXdheSBWUEMgZW5kcG9pbnQuIEF0dGFjaGVkIHRvIHRoZSBzYW1lXG4gICAqIHN1Ym5ldCBncm91cHMgYXMgdGhlIFMzIGVuZHBvaW50LiBEZWZhdWx0IGlzIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUR5bmFtb0RiRW5kcG9pbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN0b3JlIFZQQyBhbmQgc3VibmV0IElEcyBpbiBBV1MgU1NNIFBhcmFtZXRlciBTdG9yZSB2aWEgdGhlXG4gICAqIE5ldHdvcmtQYXJhbWV0ZXJzIGNvbnN0cnVjdC4gRGVmYXVsdCBpcyB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBzdG9yZVBhcmFtZXRlcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTU00gcGFyYW1ldGVyIHByZWZpeCB1c2VkIHdoZW4gc3RvcmVQYXJhbWV0ZXJzIGlzIHRydWUuIERlZmF1bHQgaXMgXCIvbmV0d29ya1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIi9uZXR3b3JrXCJcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnNQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIENsb3VkRm9ybWF0aW9uIHN0YWNrIG91dHB1dHMgZm9yIFZQQyBhbmQgc3VibmV0IElEcy5cbiAgICogRGVmYXVsdCBpcyB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVPdXRwdXRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCB0YWdzIHRvIGFwcGx5IHRvIHB1YmxpYyBzdWJuZXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljU3VibmV0VGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgdGFncyB0byBhcHBseSB0byBwcml2YXRlIHN1Ym5ldHMuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlU3VibmV0VGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgdGFncyB0byBhcHBseSB0byBpbnRyYSBzdWJuZXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW50cmFTdWJuZXRUYWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCB0YWdzIHRvIGFwcGx5IHRvIGRhdGFiYXNlIHN1Ym5ldHMuXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZVN1Ym5ldFRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHRhZ3MgdG8gYXBwbHkgdG8gZWxhc3RpY2FjaGUgc3VibmV0cy5cbiAgICovXG4gIHJlYWRvbmx5IGVsYXN0aWNhY2hlU3VibmV0VGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgdGFncyB0byBhcHBseSB0byByZWRzaGlmdCBzdWJuZXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVkc2hpZnRTdWJuZXRUYWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBSZXNvbHZlZCBDSURSIG1hc2sgZm9yIGVhY2ggc3VibmV0IGdyb3VwLlxuICovXG5pbnRlcmZhY2UgUmVzb2x2ZWRTdWJuZXRNYXNrcyB7XG4gIHByaXZhdGU6IG51bWJlcjtcbiAgcHVibGljOiBudW1iZXI7XG4gIGludHJhOiBudW1iZXI7XG4gIGRhdGFiYXNlOiBudW1iZXI7XG4gIGVsYXN0aWNhY2hlOiBudW1iZXI7XG4gIHJlZHNoaWZ0OiBudW1iZXI7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgQ0lEUiBtYXNrcyBmb3IgZWFjaCBzdWJuZXQgZ3JvdXAuXG4gKlxuICogUmVzb2x1dGlvbiBvcmRlciAoaGlnaGVzdCB3aW5zKTpcbiAqICAgMS4gUGVyLWdyb3VwIG92ZXJyaWRlIChlLmcuIHByaXZhdGVTdWJuZXRDaWRyTWFzaylcbiAqICAgMi4gVW5pZm9ybSBvdmVycmlkZSAgKHN1Ym5ldENpZHJNYXNrKVxuICogICAzLiBUZXJyYWZvcm0tdGFibGUgYXV0by1zaXppbmcgZnJvbSB0aGUgVlBDIHByZWZpeFxuICovXG5mdW5jdGlvbiByZXNvbHZlU3VibmV0TWFza3MoXG4gIHZwY0NpZHI6IHN0cmluZyxcbiAgcHJvcHM6IFN0YW5kYXJkTmV0d29ya1Byb3BzLFxuKTogUmVzb2x2ZWRTdWJuZXRNYXNrcyB7XG4gIGNvbnN0IHZwY1ByZWZpeCA9IE51bWJlcih2cGNDaWRyLnNwbGl0KCcvJylbMV0pO1xuXG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHZwY1ByZWZpeCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgVlBDIENJRFI6ICR7dnBjQ2lkcn1gKTtcbiAgfVxuXG4gIC8vIC0tLSBBdXRvLXNpemluZyBmcm9tIHRlcnJhZm9ybSB0YWJsZXMgLS0tXG4gIGNvbnN0IGJpdHMgPSBTVUJORVRfTkVXQklUU1t2cGNQcmVmaXhdO1xuXG4gIGxldCBhdXRvUHJpdmF0ZTogbnVtYmVyO1xuICBsZXQgYXV0b090aGVyOiBudW1iZXI7XG5cbiAgaWYgKGJpdHMpIHtcbiAgICBhdXRvUHJpdmF0ZSA9IHZwY1ByZWZpeCArIGJpdHMucHJpdmF0ZUJpdHM7XG4gICAgYXV0b090aGVyID0gdnBjUHJlZml4ICsgYml0cy5vdGhlckJpdHM7XG4gIH0gZWxzZSBpZiAocHJvcHMuc3VibmV0Q2lkck1hc2sgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIEZhbGwgYmFjayB0byB1bmlmb3JtIHdoZW4gVlBDIHByZWZpeCBpcyBvdXRzaWRlIHRoZSB0YWJsZSByYW5nZVxuICAgIGF1dG9Qcml2YXRlID0gcHJvcHMuc3VibmV0Q2lkck1hc2s7XG4gICAgYXV0b090aGVyID0gcHJvcHMuc3VibmV0Q2lkck1hc2s7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFZQQyBwcmVmaXggLyR7dnBjUHJlZml4fSBpcyBub3QgaW4gdGhlIGF1dG8tc2l6aW5nIHRhYmxlIChzdXBwb3J0ZWQ6IC8xNuKAky8yMCkuIGAgK1xuICAgICAgICBgUHJvdmlkZSBzdWJuZXRDaWRyTWFzayBvciBwZXItZ3JvdXAgb3ZlcnJpZGVzLmAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFVuaWZvcm0gb3ZlcnJpZGUgcmVwbGFjZXMgYm90aCBwcml2YXRlIGFuZCBvdGhlciBkZWZhdWx0c1xuICBjb25zdCB1bmlmb3JtTWFzayA9IHByb3BzLnN1Ym5ldENpZHJNYXNrO1xuICBjb25zdCBiYXNlTWFza1ByaXZhdGUgPSB1bmlmb3JtTWFzayA/PyBhdXRvUHJpdmF0ZTtcbiAgY29uc3QgYmFzZU1hc2tPdGhlciA9IHVuaWZvcm1NYXNrID8/IGF1dG9PdGhlcjtcblxuICByZXR1cm4ge1xuICAgIHByaXZhdGU6IHByb3BzLnByaXZhdGVTdWJuZXRDaWRyTWFzayA/PyBiYXNlTWFza1ByaXZhdGUsXG4gICAgcHVibGljOiBwcm9wcy5wdWJsaWNTdWJuZXRDaWRyTWFzayA/PyBiYXNlTWFza090aGVyLFxuICAgIGludHJhOiBwcm9wcy5pbnRyYVN1Ym5ldENpZHJNYXNrID8/IGJhc2VNYXNrT3RoZXIsXG4gICAgZGF0YWJhc2U6IHByb3BzLmRhdGFiYXNlU3VibmV0Q2lkck1hc2sgPz8gYmFzZU1hc2tPdGhlcixcbiAgICBlbGFzdGljYWNoZTogcHJvcHMuZWxhc3RpY2FjaGVTdWJuZXRDaWRyTWFzayA/PyBiYXNlTWFza090aGVyLFxuICAgIHJlZHNoaWZ0OiBwcm9wcy5yZWRzaGlmdFN1Ym5ldENpZHJNYXNrID8/IGJhc2VNYXNrT3RoZXIsXG4gIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoYXQgdGhlIFZQQyBDSURSIGhhcyBlbm91Z2ggYWRkcmVzcyBzcGFjZSBmb3IgYWxsIGVuYWJsZWQgc3VibmV0XG4gKiBncm91cHMuIEVhY2ggZ3JvdXAgY29uc3VtZXMgYXpDb3VudCDDlyAyXigzMi1jaWRyTWFzaykgSVBzLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUFkZHJlc3NTcGFjZShcbiAgdnBjQ2lkcjogc3RyaW5nLFxuICBhekNvdW50OiBudW1iZXIsXG4gIGVuYWJsZWRHcm91cHM6IHttYXNrOiBudW1iZXI7IG5hbWU6IHN0cmluZ31bXSxcbik6IHZvaWQge1xuICBjb25zdCB2cGNQcmVmaXggPSBOdW1iZXIodnBjQ2lkci5zcGxpdCgnLycpWzFdKTtcblxuICAvLyBBV1MgYWxsb3dzIFZQQyBuZXRtYXNrcyBiZXR3ZWVuIC8xNiBhbmQgLzI4LlxuICBpZiAoIU51bWJlci5pc0ludGVnZXIodnBjUHJlZml4KSB8fCB2cGNQcmVmaXggPCAxNiB8fCB2cGNQcmVmaXggPiAyOCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIFZQQyBDSURSICR7dnBjQ2lkcn06IHByZWZpeCBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAvMTYgYW5kIC8yOC5gLFxuICAgICk7XG4gIH1cblxuICBpZiAoIU51bWJlci5pc0ludGVnZXIoYXpDb3VudCkgfHwgYXpDb3VudCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGF6Q291bnQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIGdvdCAke2F6Q291bnR9LmApO1xuICB9XG5cbiAgLy8gQVdTIHN1Ym5ldCBtYXNrcyBtdXN0IGJlIGJldHdlZW4gLzE2IGFuZCAvMjgsIGFuZCBuZXZlciBsYXJnZXIgdGhhbiB0aGVcbiAgLy8gVlBDIGl0c2VsZi5cbiAgZm9yIChjb25zdCBnIG9mIGVuYWJsZWRHcm91cHMpIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZy5tYXNrKSB8fCBnLm1hc2sgPCB2cGNQcmVmaXggfHwgZy5tYXNrID4gMjgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgQ0lEUiBtYXNrIC8ke2cubWFza30gZm9yICR7Zy5uYW1lfSBzdWJuZXRzOiBtdXN0IGJlIGFuIGAgK1xuICAgICAgICAgIGBpbnRlZ2VyIGJldHdlZW4gdGhlIFZQQyBwcmVmaXggKC8ke3ZwY1ByZWZpeH0pIGFuZCAvMjguYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdnBjSXBzID0gMiAqKiAoMzIgLSB2cGNQcmVmaXgpO1xuICBsZXQgcmVxdWlyZWRJcHMgPSAwO1xuICBjb25zdCBkZXRhaWw6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBnIG9mIGVuYWJsZWRHcm91cHMpIHtcbiAgICBjb25zdCBzdWJuZXRJcHMgPSAyICoqICgzMiAtIGcubWFzayk7XG4gICAgY29uc3QgZ3JvdXBJcHMgPSBhekNvdW50ICogc3VibmV0SXBzO1xuICAgIHJlcXVpcmVkSXBzICs9IGdyb3VwSXBzO1xuICAgIGRldGFpbC5wdXNoKGAke2cubmFtZX06ICR7YXpDb3VudH0gw5cgLyR7Zy5tYXNrfSA9ICR7Z3JvdXBJcHN9IElQc2ApO1xuICB9XG5cbiAgaWYgKHJlcXVpcmVkSXBzID4gdnBjSXBzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFZQQyBDSURSICR7dnBjQ2lkcn0gKCR7dnBjSXBzfSBJUHMpIGlzIHRvbyBzbWFsbC5cXG5gICtcbiAgICAgICAgYFJlcXVpcmVkOiAke3JlcXVpcmVkSXBzfSBJUHMgYWNyb3NzICR7ZW5hYmxlZEdyb3Vwcy5sZW5ndGh9IHN1Ym5ldCBncm91cHM6XFxuYCArXG4gICAgICAgIGRldGFpbC5tYXAoKGQpID0+IGAgICR7ZH1gKS5qb2luKCdcXG4nKSArXG4gICAgICAgICdcXG5JbmNyZWFzZSB0aGUgVlBDIHNpemUsIHJlZHVjZSBhekNvdW50LCBvciBkaXNhYmxlIHNvbWUgc3VibmV0IGdyb3Vwcy4nLFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlTdWJuZXRUYWdzKFxuICBzdWJuZXRzOiBlYzIuSVN1Ym5ldFtdLFxuICB0YWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuKTogdm9pZCB7XG4gIGZvciAoY29uc3Qgc3VibmV0IG9mIHN1Ym5ldHMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0YWdzKSkge1xuICAgICAgVGFncy5vZihzdWJuZXQpLmFkZChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhbmRhcmQgbXVsdGktdGllciBWUEMgZm9sbG93aW5nIFRydWVNYXJrIGNvbnZlbnRpb25zLCB3aXRoIHN1Ym5ldFxuICogc2l6aW5nIHRoYXQgbWlycm9ycyB0aGUgdHJ1ZW1hcmsvdGVycmFmb3JtLWF3cy12cGMgVGVycmFmb3JtIG1vZHVsZS5cbiAqXG4gKiAqKlN1Ym5ldCBsYXlvdXQqKiAoZWFjaCBncm91cCBpcyByZXBsaWNhdGVkIGFjcm9zcyBhbGwgQVpzKTpcbiAqXG4gKiB8IEdyb3VwICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICB8IERlZmF1bHQgc2l6aW5nIChhdXRvLCBzZWUgdGFibGUgYmVsb3cpIHxcbiAqIHwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCBwcml2YXRlICAgICB8IFBSSVZBVEVfV0lUSF9FR1JFU1MgfCBMYXJnZXIg4oCUIHNpemVkIGZvciB3b3JrbG9hZCB0cmFmZmljICAgIHxcbiAqIHwgcHVibGljICAgICAgfCBQVUJMSUMgICAgICAgICAgICAgIHwgU21hbGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBpbnRyYSAgICAgICB8IFBSSVZBVEVfSVNPTEFURUQgICAgfCBTbWFsbGVyIOKAlCBubyBlZ3Jlc3MgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgZGF0YWJhc2UgICAgfCBQUklWQVRFX1dJVEhfRUdSRVNTIHwgU21hbGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBlbGFzdGljYWNoZSB8IFBSSVZBVEVfV0lUSF9FR1JFU1MgfCBTbWFsbGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IHJlZHNoaWZ0ICAgIHwgUFJJVkFURV9XSVRIX0VHUkVTUyB8IFNtYWxsZXIgKGRpc2FibGVkIGJ5IGRlZmF1bHQpICAgICAgICAgIHxcbiAqXG4gKiAqKkF1dG8tc2l6aW5nIHRhYmxlKiogKG1hdGNoZXMgdGVycmFmb3JtLWF3cy12cGMgYHByaXZhdGVfc3VibmV0c2AvYHN1Ym5ldHNgIGxvY2Fscyk6XG4gKlxuICogfCBWUEMgICAgfCBwcml2YXRlIHwgcHVibGljL2ludHJhL2RhdGFiYXNlL2VsYXN0aWNhY2hlL3JlZHNoaWZ0IHxcbiAqIHwtLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAvMTYgICAgfCAvMTkgICAgIHwgLzIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IC8xNyAgICB8IC8yMCAgICAgfCAvMjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgLzE4ICAgIHwgLzIxICAgICB8IC8yMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAvMTkgICAgfCAvMjIgICAgIHwgLzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IC8yMCAgICB8IC8yNCAgICAgfCAvMjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqXG4gKiBPdmVycmlkZSBzaXppbmcgdmlhIGBzdWJuZXRDaWRyTWFza2AgKHVuaWZvcm0pIG9yIHBlci1ncm91cCBwcm9wcyBsaWtlXG4gKiBgcHJpdmF0ZVN1Ym5ldENpZHJNYXNrYCwgYHB1YmxpY1N1Ym5ldENpZHJNYXNrYCwgZXRjLiDigJQgZXF1aXZhbGVudCB0byB0aGVcbiAqIGBwcml2YXRlX25ld2JpdHNgLCBgcHVibGljX25ld2JpdHNgLCAuLi4gdmFyaWFibGVzIGluIFRlcnJhZm9ybS5cbiAqXG4gKiA+ICoqTm90ZSBvbiBDSURSIHBsYWNlbWVudDoqKiBDREsgYWxsb2NhdGVzIHN1Ym5ldCBDSURScyBzZXF1ZW50aWFsbHkgZnJvbVxuICogPiB0aGUgc3RhcnQgb2YgdGhlIFZQQyBDSURSIGJsb2NrLiBUaGlzIGRpZmZlcnMgZnJvbSBUZXJyYWZvcm0ncyBwbGFjZW1lbnQsXG4gKiA+IHdoaWNoIHVzZXMgZXhwbGljaXQgYG5ldG51bWAgb2Zmc2V0cyB0byBwb3NpdGlvbiBzdWJuZXQgZ3JvdXBzIGF0IHNwZWNpZmljXG4gKiA+IGFkZHJlc3NlcyB3aXRoaW4gdGhlIFZQQy4gVGhlIHN1Ym5ldCAqc2l6ZXMqIG1hdGNoIGV4YWN0bHk7IG9ubHkgdGhlXG4gKiA+IHN0YXJ0aW5nIGFkZHJlc3NlcyB3aXRoaW4gdGhlIFZQQyBkaWZmZXIuXG4gKlxuICogR2F0ZXdheSBWUEMgZW5kcG9pbnRzIGZvciBTMyBhbmQgRHluYW1vREIgYXJlIGNyZWF0ZWQgYnkgZGVmYXVsdCBhbmQgYXR0YWNoZWRcbiAqIHRvIHByaXZhdGUsIGludHJhLCBkYXRhYmFzZSwgZWxhc3RpY2FjaGUsIGFuZCByZWRzaGlmdCByb3V0ZSB0YWJsZXMuXG4gKlxuICogVlBDIGFuZCBzdWJuZXQgSURzIGFyZSBzdG9yZWQgaW4gQVdTIFNTTSBQYXJhbWV0ZXIgU3RvcmUgdmlhIE5ldHdvcmtQYXJhbWV0ZXJzXG4gKiBhbmQgb3B0aW9uYWxseSBleHBvcnRlZCBhcyBDbG91ZEZvcm1hdGlvbiBvdXRwdXRzLlxuICovXG5leHBvcnQgY2xhc3MgU3RhbmRhcmROZXR3b3JrIGV4dGVuZHMgRXh0ZW5kZWRDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIFZQQyBjcmVhdGVkIGJ5IHRoaXMgY29uc3RydWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBlYzIuVnBjO1xuXG4gIC8qKlxuICAgKiBUaGUgTmV0d29ya1BhcmFtZXRlcnMgY29uc3RydWN0IGhvbGRpbmcgU1NNIHBhdGhzIGFuZCBjcmVhdGVkIHBhcmFtZXRlcnMuXG4gICAqIFVuZGVmaW5lZCB3aGVuIHN0b3JlUGFyYW1ldGVycyBpcyBmYWxzZS5cbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcmtQYXJhbWV0ZXJzPzogTmV0d29ya1BhcmFtZXRlcnM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YW5kYXJkTmV0d29ya1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBzdGFuZGFyZFRhZ3M6IFN0YW5kYXJkVGFncy5tZXJnZShwcm9wcy5zdGFuZGFyZFRhZ3MsIExpYlN0YW5kYXJkVGFncyksXG4gICAgfSk7XG5cbiAgICAvLyBUT0RPIFlvdSBjaGFuZ2UgdGhlIGRlZmF1bHQgaGVyZSBEYXJlblxuICAgIGNvbnN0IGF6Q291bnQgPSBwcm9wcy5hekNvdW50ID8/IDI7XG4gICAgY29uc3QgbmF0VHlwZSA9IHByb3BzLm5hdFR5cGUgPz8gJ25vbmUnO1xuXG4gICAgY29uc3QgbmF0R2F0ZXdheXMgPVxuICAgICAgbmF0VHlwZSA9PT0gJ211bHRpJyA/IGF6Q291bnQgOiBuYXRUeXBlID09PSAnc2luZ2xlJyA/IDEgOiAwO1xuXG4gICAgLy8gVE9ETyBOZWVkIHRvIGFkZCBzdXBwb3J0IGZvciByZWdpb25hbCBOQVRcbiAgICAvLyBUT0RPIE5lZWQgdG8gYWRkIHN1cHBvcnQgZm9yIHBvb3IgTkFUXG5cbiAgICAvLyBUT0RPIE5lZWQgdG8gYWRkIHN1cHBvcnQgZm9yIG5ldHdvcmsgZmlyZXdhbGxcblxuICAgIGNvbnN0IGNyZWF0ZVB1YmxpYyA9IHByb3BzLmNyZWF0ZVB1YmxpY1N1Ym5ldHMgPz8gdHJ1ZTtcbiAgICBjb25zdCBjcmVhdGVQcml2YXRlID0gcHJvcHMuY3JlYXRlUHJpdmF0ZVN1Ym5ldHMgPz8gdHJ1ZTtcbiAgICBjb25zdCBjcmVhdGVJbnRyYSA9IHByb3BzLmNyZWF0ZUludHJhU3VibmV0cyA/PyB0cnVlO1xuICAgIGNvbnN0IGNyZWF0ZURhdGFiYXNlID0gcHJvcHMuY3JlYXRlRGF0YWJhc2VTdWJuZXRzID8/IHRydWU7XG4gICAgY29uc3QgY3JlYXRlRWxhc3RpY2FjaGUgPSBwcm9wcy5jcmVhdGVFbGFzdGljYWNoZVN1Ym5ldHMgPz8gdHJ1ZTtcbiAgICBjb25zdCBjcmVhdGVSZWRzaGlmdCA9IHByb3BzLmNyZWF0ZVJlZHNoaWZ0U3VibmV0cyA/PyBmYWxzZTtcblxuICAgIGNvbnN0IG1hc2tzID0gcmVzb2x2ZVN1Ym5ldE1hc2tzKHByb3BzLnZwY0NpZHIsIHByb3BzKTtcblxuICAgIGNvbnN0IGVuYWJsZWRHcm91cHM6IHttYXNrOiBudW1iZXI7IG5hbWU6IHN0cmluZ31bXSA9IFtdO1xuICAgIGlmIChjcmVhdGVQdWJsaWMpIGVuYWJsZWRHcm91cHMucHVzaCh7bWFzazogbWFza3MucHVibGljLCBuYW1lOiAncHVibGljJ30pO1xuICAgIGlmIChjcmVhdGVQcml2YXRlKVxuICAgICAgZW5hYmxlZEdyb3Vwcy5wdXNoKHttYXNrOiBtYXNrcy5wcml2YXRlLCBuYW1lOiAncHJpdmF0ZSd9KTtcbiAgICBpZiAoY3JlYXRlSW50cmEpIGVuYWJsZWRHcm91cHMucHVzaCh7bWFzazogbWFza3MuaW50cmEsIG5hbWU6ICdpbnRyYSd9KTtcbiAgICBpZiAoY3JlYXRlRGF0YWJhc2UpXG4gICAgICBlbmFibGVkR3JvdXBzLnB1c2goe21hc2s6IG1hc2tzLmRhdGFiYXNlLCBuYW1lOiAnZGF0YWJhc2UnfSk7XG4gICAgaWYgKGNyZWF0ZUVsYXN0aWNhY2hlKVxuICAgICAgZW5hYmxlZEdyb3Vwcy5wdXNoKHttYXNrOiBtYXNrcy5lbGFzdGljYWNoZSwgbmFtZTogJ2VsYXN0aWNhY2hlJ30pO1xuICAgIGlmIChjcmVhdGVSZWRzaGlmdClcbiAgICAgIGVuYWJsZWRHcm91cHMucHVzaCh7bWFzazogbWFza3MucmVkc2hpZnQsIG5hbWU6ICdyZWRzaGlmdCd9KTtcblxuICAgIHZhbGlkYXRlQWRkcmVzc1NwYWNlKHByb3BzLnZwY0NpZHIsIGF6Q291bnQsIGVuYWJsZWRHcm91cHMpO1xuXG4gICAgY29uc3Qgc3VibmV0Q29uZmlndXJhdGlvbjogZWMyLlN1Ym5ldENvbmZpZ3VyYXRpb25bXSA9IFtdO1xuXG4gICAgaWYgKGNyZWF0ZVByaXZhdGUpIHtcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb24ucHVzaCh7XG4gICAgICAgIG5hbWU6ICdwcml2YXRlJyxcbiAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyxcbiAgICAgICAgY2lkck1hc2s6IG1hc2tzLnByaXZhdGUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGNyZWF0ZVB1YmxpYykge1xuICAgICAgc3VibmV0Q29uZmlndXJhdGlvbi5wdXNoKHtcbiAgICAgICAgbmFtZTogJ3B1YmxpYycsXG4gICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBVQkxJQyxcbiAgICAgICAgY2lkck1hc2s6IG1hc2tzLnB1YmxpYyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlSW50cmEpIHtcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb24ucHVzaCh7XG4gICAgICAgIG5hbWU6ICdpbnRyYScsXG4gICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURUQsXG4gICAgICAgIGNpZHJNYXNrOiBtYXNrcy5pbnRyYSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlRGF0YWJhc2UpIHtcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb24ucHVzaCh7XG4gICAgICAgIG5hbWU6ICdkYXRhYmFzZScsXG4gICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MsXG4gICAgICAgIGNpZHJNYXNrOiBtYXNrcy5kYXRhYmFzZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlRWxhc3RpY2FjaGUpIHtcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb24ucHVzaCh7XG4gICAgICAgIG5hbWU6ICdlbGFzdGljYWNoZScsXG4gICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MsXG4gICAgICAgIGNpZHJNYXNrOiBtYXNrcy5lbGFzdGljYWNoZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlUmVkc2hpZnQpIHtcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb24ucHVzaCh7XG4gICAgICAgIG5hbWU6ICdyZWRzaGlmdCcsXG4gICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MsXG4gICAgICAgIGNpZHJNYXNrOiBtYXNrcy5yZWRzaGlmdCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudnBjID0gbmV3IGVjMi5WcGModGhpcywgJ1ZwYycsIHtcbiAgICAgIHZwY05hbWU6IHByb3BzLm5hbWUsXG4gICAgICBtYXhBenM6IGF6Q291bnQsXG4gICAgICBuYXRHYXRld2F5cyxcbiAgICAgIGlwQWRkcmVzc2VzOiBlYzIuSXBBZGRyZXNzZXMuY2lkcihwcm9wcy52cGNDaWRyKSxcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb24sXG4gICAgfSk7XG5cbiAgICAvLyBBcHBseSBwZXItc3VibmV0LWdyb3VwIHRhZ3NcbiAgICBpZiAocHJvcHMucHVibGljU3VibmV0VGFncyAmJiBjcmVhdGVQdWJsaWMpIHtcbiAgICAgIGFwcGx5U3VibmV0VGFncyhcbiAgICAgICAgdGhpcy52cGMuc2VsZWN0U3VibmV0cyh7c3VibmV0R3JvdXBOYW1lOiAncHVibGljJ30pLnN1Ym5ldHMsXG4gICAgICAgIHByb3BzLnB1YmxpY1N1Ym5ldFRhZ3MsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocHJvcHMucHJpdmF0ZVN1Ym5ldFRhZ3MgJiYgY3JlYXRlUHJpdmF0ZSkge1xuICAgICAgYXBwbHlTdWJuZXRUYWdzKFxuICAgICAgICB0aGlzLnZwYy5zZWxlY3RTdWJuZXRzKHtzdWJuZXRHcm91cE5hbWU6ICdwcml2YXRlJ30pLnN1Ym5ldHMsXG4gICAgICAgIHByb3BzLnByaXZhdGVTdWJuZXRUYWdzLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmludHJhU3VibmV0VGFncyAmJiBjcmVhdGVJbnRyYSkge1xuICAgICAgYXBwbHlTdWJuZXRUYWdzKFxuICAgICAgICB0aGlzLnZwYy5zZWxlY3RTdWJuZXRzKHtzdWJuZXRHcm91cE5hbWU6ICdpbnRyYSd9KS5zdWJuZXRzLFxuICAgICAgICBwcm9wcy5pbnRyYVN1Ym5ldFRhZ3MsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocHJvcHMuZGF0YWJhc2VTdWJuZXRUYWdzICYmIGNyZWF0ZURhdGFiYXNlKSB7XG4gICAgICBhcHBseVN1Ym5ldFRhZ3MoXG4gICAgICAgIHRoaXMudnBjLnNlbGVjdFN1Ym5ldHMoe3N1Ym5ldEdyb3VwTmFtZTogJ2RhdGFiYXNlJ30pLnN1Ym5ldHMsXG4gICAgICAgIHByb3BzLmRhdGFiYXNlU3VibmV0VGFncyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5lbGFzdGljYWNoZVN1Ym5ldFRhZ3MgJiYgY3JlYXRlRWxhc3RpY2FjaGUpIHtcbiAgICAgIGFwcGx5U3VibmV0VGFncyhcbiAgICAgICAgdGhpcy52cGMuc2VsZWN0U3VibmV0cyh7c3VibmV0R3JvdXBOYW1lOiAnZWxhc3RpY2FjaGUnfSkuc3VibmV0cyxcbiAgICAgICAgcHJvcHMuZWxhc3RpY2FjaGVTdWJuZXRUYWdzLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLnJlZHNoaWZ0U3VibmV0VGFncyAmJiBjcmVhdGVSZWRzaGlmdCkge1xuICAgICAgYXBwbHlTdWJuZXRUYWdzKFxuICAgICAgICB0aGlzLnZwYy5zZWxlY3RTdWJuZXRzKHtzdWJuZXRHcm91cE5hbWU6ICdyZWRzaGlmdCd9KS5zdWJuZXRzLFxuICAgICAgICBwcm9wcy5yZWRzaGlmdFN1Ym5ldFRhZ3MsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIHRoZSBsaXN0IG9mIHN1Ym5ldCBncm91cHMgZm9yIGdhdGV3YXkgZW5kcG9pbnQgcm91dGUgdGFibGVzLlxuICAgIGNvbnN0IGVuZHBvaW50U3VibmV0czogZWMyLlN1Ym5ldFNlbGVjdGlvbltdID0gW107XG4gICAgaWYgKGNyZWF0ZVByaXZhdGUpIGVuZHBvaW50U3VibmV0cy5wdXNoKHtzdWJuZXRHcm91cE5hbWU6ICdwcml2YXRlJ30pO1xuICAgIGlmIChjcmVhdGVJbnRyYSkgZW5kcG9pbnRTdWJuZXRzLnB1c2goe3N1Ym5ldEdyb3VwTmFtZTogJ2ludHJhJ30pO1xuICAgIGlmIChjcmVhdGVEYXRhYmFzZSkgZW5kcG9pbnRTdWJuZXRzLnB1c2goe3N1Ym5ldEdyb3VwTmFtZTogJ2RhdGFiYXNlJ30pO1xuICAgIGlmIChjcmVhdGVFbGFzdGljYWNoZSlcbiAgICAgIGVuZHBvaW50U3VibmV0cy5wdXNoKHtzdWJuZXRHcm91cE5hbWU6ICdlbGFzdGljYWNoZSd9KTtcbiAgICBpZiAoY3JlYXRlUmVkc2hpZnQpIGVuZHBvaW50U3VibmV0cy5wdXNoKHtzdWJuZXRHcm91cE5hbWU6ICdyZWRzaGlmdCd9KTtcblxuICAgIGlmICgocHJvcHMuY3JlYXRlUzNFbmRwb2ludCA/PyB0cnVlKSAmJiBlbmRwb2ludFN1Ym5ldHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52cGMuYWRkR2F0ZXdheUVuZHBvaW50KCdTM0dhdGV3YXlFbmRwb2ludCcsIHtcbiAgICAgICAgc2VydmljZTogZWMyLkdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UuUzMsXG4gICAgICAgIHN1Ym5ldHM6IGVuZHBvaW50U3VibmV0cyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICgocHJvcHMuY3JlYXRlRHluYW1vRGJFbmRwb2ludCA/PyB0cnVlKSAmJiBlbmRwb2ludFN1Ym5ldHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52cGMuYWRkR2F0ZXdheUVuZHBvaW50KCdEeW5hbW9EYkdhdGV3YXlFbmRwb2ludCcsIHtcbiAgICAgICAgc2VydmljZTogZWMyLkdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UuRFlOQU1PREIsXG4gICAgICAgIHN1Ym5ldHM6IGVuZHBvaW50U3VibmV0cyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENsb3VkRm9ybWF0aW9uIG91dHB1dHNcbiAgICBpZiAocHJvcHMuY3JlYXRlT3V0cHV0cyA/PyB0cnVlKSB7XG4gICAgICBjb25zdCBzdGFja05hbWUgPSBTdGFjay5vZih0aGlzKS5zdGFja05hbWU7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgJ1ZwY0lkJywge1xuICAgICAgICB2YWx1ZTogdGhpcy52cGMudnBjSWQsXG4gICAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX06VnBjSWRgLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChjcmVhdGVQdWJsaWMpIHtcbiAgICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCAnUHVibGljU3VibmV0SWRzJywge1xuICAgICAgICAgIHZhbHVlOiB0aGlzLnZwY1xuICAgICAgICAgICAgLnNlbGVjdFN1Ym5ldHMoe3N1Ym5ldEdyb3VwTmFtZTogJ3B1YmxpYyd9KVxuICAgICAgICAgICAgLnN1Ym5ldElkcy5qb2luKCcsJyksXG4gICAgICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfTpQdWJsaWNTdWJuZXRJZHNgLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChjcmVhdGVQcml2YXRlKSB7XG4gICAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgJ1ByaXZhdGVTdWJuZXRJZHMnLCB7XG4gICAgICAgICAgdmFsdWU6IHRoaXMudnBjXG4gICAgICAgICAgICAuc2VsZWN0U3VibmV0cyh7c3VibmV0R3JvdXBOYW1lOiAncHJpdmF0ZSd9KVxuICAgICAgICAgICAgLnN1Ym5ldElkcy5qb2luKCcsJyksXG4gICAgICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfTpQcml2YXRlU3VibmV0SWRzYCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY3JlYXRlSW50cmEpIHtcbiAgICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCAnSW50cmFTdWJuZXRJZHMnLCB7XG4gICAgICAgICAgdmFsdWU6IHRoaXMudnBjXG4gICAgICAgICAgICAuc2VsZWN0U3VibmV0cyh7c3VibmV0R3JvdXBOYW1lOiAnaW50cmEnfSlcbiAgICAgICAgICAgIC5zdWJuZXRJZHMuam9pbignLCcpLFxuICAgICAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX06SW50cmFTdWJuZXRJZHNgLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChjcmVhdGVEYXRhYmFzZSkge1xuICAgICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsICdEYXRhYmFzZVN1Ym5ldElkcycsIHtcbiAgICAgICAgICB2YWx1ZTogdGhpcy52cGNcbiAgICAgICAgICAgIC5zZWxlY3RTdWJuZXRzKHtzdWJuZXRHcm91cE5hbWU6ICdkYXRhYmFzZSd9KVxuICAgICAgICAgICAgLnN1Ym5ldElkcy5qb2luKCcsJyksXG4gICAgICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfTpEYXRhYmFzZVN1Ym5ldElkc2AsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNyZWF0ZUVsYXN0aWNhY2hlKSB7XG4gICAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgJ0VsYXN0aWNhY2hlU3VibmV0SWRzJywge1xuICAgICAgICAgIHZhbHVlOiB0aGlzLnZwY1xuICAgICAgICAgICAgLnNlbGVjdFN1Ym5ldHMoe3N1Ym5ldEdyb3VwTmFtZTogJ2VsYXN0aWNhY2hlJ30pXG4gICAgICAgICAgICAuc3VibmV0SWRzLmpvaW4oJywnKSxcbiAgICAgICAgICBleHBvcnROYW1lOiBgJHtzdGFja05hbWV9OkVsYXN0aWNhY2hlU3VibmV0SWRzYCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY3JlYXRlUmVkc2hpZnQpIHtcbiAgICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCAnUmVkc2hpZnRTdWJuZXRJZHMnLCB7XG4gICAgICAgICAgdmFsdWU6IHRoaXMudnBjXG4gICAgICAgICAgICAuc2VsZWN0U3VibmV0cyh7c3VibmV0R3JvdXBOYW1lOiAncmVkc2hpZnQnfSlcbiAgICAgICAgICAgIC5zdWJuZXRJZHMuam9pbignLCcpLFxuICAgICAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX06UmVkc2hpZnRTdWJuZXRJZHNgLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTU00gUGFyYW1ldGVyIFN0b3JlIHZpYSBOZXR3b3JrUGFyYW1ldGVyc1xuICAgIGlmIChwcm9wcy5zdG9yZVBhcmFtZXRlcnMgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5uZXR3b3JrUGFyYW1ldGVycyA9IG5ldyBOZXR3b3JrUGFyYW1ldGVycyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgJ05ldHdvcmtQYXJhbWV0ZXJzJyxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgICAgICAgcHJlZml4OiBwcm9wcy5wYXJhbWV0ZXJzUHJlZml4LFxuICAgICAgICAgIGNyZWF0ZTogdHJ1ZSxcbiAgICAgICAgICBsb29rdXBWcGM6IGZhbHNlLFxuICAgICAgICAgIGxvb2t1cEF6czogZmFsc2UsXG4gICAgICAgICAgbG9va3VwUHVibGljU3VibmV0czogZmFsc2UsXG4gICAgICAgICAgbG9va3VwUHJpdmF0ZVN1Ym5ldHM6IGZhbHNlLFxuICAgICAgICAgIGxvb2t1cEludHJhU3VibmV0czogZmFsc2UsXG4gICAgICAgICAgbG9va3VwRGF0YWJhc2VTdWJuZXRzOiBmYWxzZSxcbiAgICAgICAgICBsb29rdXBFbGFzdGljYWNoZVN1Ym5ldHM6IGZhbHNlLFxuICAgICAgICAgIGxvb2t1cFJlZHNoaWZ0U3VibmV0czogZmFsc2UsXG4gICAgICAgICAgbG9va3VwT3V0cG9zdFN1Ym5ldHM6IGZhbHNlLFxuICAgICAgICAgIHZwY0lkOiB0aGlzLnZwYy52cGNJZCxcbiAgICAgICAgICBhenM6IHRoaXMudnBjLmF2YWlsYWJpbGl0eVpvbmVzLFxuICAgICAgICAgIHB1YmxpY1N1Ym5ldElkczogY3JlYXRlUHVibGljXG4gICAgICAgICAgICA/IHRoaXMudnBjLnNlbGVjdFN1Ym5ldHMoe3N1Ym5ldEdyb3VwTmFtZTogJ3B1YmxpYyd9KS5zdWJuZXRJZHNcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHByaXZhdGVTdWJuZXRJZHM6IGNyZWF0ZVByaXZhdGVcbiAgICAgICAgICAgID8gdGhpcy52cGMuc2VsZWN0U3VibmV0cyh7c3VibmV0R3JvdXBOYW1lOiAncHJpdmF0ZSd9KS5zdWJuZXRJZHNcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGludHJhU3VibmV0SWRzOiBjcmVhdGVJbnRyYVxuICAgICAgICAgICAgPyB0aGlzLnZwYy5zZWxlY3RTdWJuZXRzKHtzdWJuZXRHcm91cE5hbWU6ICdpbnRyYSd9KS5zdWJuZXRJZHNcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGRhdGFiYXNlU3VibmV0SWRzOiBjcmVhdGVEYXRhYmFzZVxuICAgICAgICAgICAgPyB0aGlzLnZwYy5zZWxlY3RTdWJuZXRzKHtzdWJuZXRHcm91cE5hbWU6ICdkYXRhYmFzZSd9KS5zdWJuZXRJZHNcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGVsYXN0aWNhY2hlU3VibmV0SWRzOiBjcmVhdGVFbGFzdGljYWNoZVxuICAgICAgICAgICAgPyB0aGlzLnZwYy5zZWxlY3RTdWJuZXRzKHtzdWJuZXRHcm91cE5hbWU6ICdlbGFzdGljYWNoZSd9KS5zdWJuZXRJZHNcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlZHNoaWZ0U3VibmV0SWRzOiBjcmVhdGVSZWRzaGlmdFxuICAgICAgICAgICAgPyB0aGlzLnZwYy5zZWxlY3RTdWJuZXRzKHtzdWJuZXRHcm91cE5hbWU6ICdyZWRzaGlmdCd9KS5zdWJuZXRJZHNcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|