@fjall/components-infrastructure 0.88.4 → 0.89.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/lib/config/aws/disasterRecovery.js +28 -7
- package/dist/lib/patterns/aws/compute.d.ts +6 -716
- package/dist/lib/patterns/aws/compute.js +24 -427
- package/dist/lib/patterns/aws/computeEc2.d.ts +67 -0
- package/dist/lib/patterns/aws/computeEc2.js +46 -0
- package/dist/lib/patterns/aws/computeEcs.d.ts +446 -0
- package/dist/lib/patterns/aws/computeEcs.js +246 -0
- package/dist/lib/patterns/aws/computeLambda.d.ts +220 -0
- package/dist/lib/patterns/aws/computeLambda.js +147 -0
- package/dist/lib/patterns/aws/domainDelegation.d.ts +8 -0
- package/dist/lib/patterns/aws/domainDelegation.js +54 -0
- package/dist/lib/patterns/aws/domainFactory.d.ts +8 -0
- package/dist/lib/patterns/aws/domainFactory.js +23 -0
- package/dist/lib/patterns/aws/index.d.ts +3 -0
- package/dist/lib/patterns/aws/index.js +5 -1
- package/dist/lib/patterns/aws/interfaces/domain.d.ts +2 -0
- package/dist/lib/patterns/aws/interfaces/domain.js +6 -0
- package/dist/lib/patterns/aws/interfaces/index.d.ts +1 -0
- package/dist/lib/patterns/aws/interfaces/index.js +1 -1
- package/dist/lib/patterns/aws/interfaces/pattern.d.ts +3 -0
- package/dist/lib/patterns/aws/interfaces/pattern.js +1 -1
- package/dist/lib/patterns/aws/payload.js +11 -1
- package/dist/lib/resources/aws/compute/ecs.d.ts +14 -2
- package/dist/lib/resources/aws/compute/ecs.js +69 -24
- package/dist/lib/resources/aws/networking/domain.d.ts +13 -0
- package/dist/lib/resources/aws/networking/domain.js +102 -0
- package/dist/lib/resources/aws/networking/domainCertificate.d.ts +13 -0
- package/dist/lib/resources/aws/networking/domainCertificate.js +28 -0
- package/dist/lib/resources/aws/networking/hostedZone.js +3 -6
- package/dist/lib/resources/aws/networking/index.d.ts +2 -0
- package/dist/lib/resources/aws/networking/index.js +3 -1
- package/dist/lib/utils/capitaliseString.d.ts +1 -18
- package/dist/lib/utils/capitaliseString.js +8 -37
- package/dist/lib/utils/dnsRecords.d.ts +4 -0
- package/dist/lib/utils/dnsRecords.js +108 -0
- package/dist/lib/utils/domainTypes.d.ts +37 -0
- package/dist/lib/utils/domainTypes.js +10 -0
- package/dist/lib/utils/env.js +23 -29
- package/dist/lib/utils/getConfig.js +42 -16
- package/dist/lib/utils/index.d.ts +1 -0
- package/dist/lib/utils/index.js +2 -1
- package/package.json +4 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Fjall
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -7,7 +7,8 @@ const backup_1 = require("../../resources/aws/backup");
|
|
|
7
7
|
const aws_backup_1 = require("aws-cdk-lib/aws-backup");
|
|
8
8
|
const events = require("aws-cdk-lib/aws-events");
|
|
9
9
|
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
10
|
-
const
|
|
10
|
+
const app_1 = require("../../app");
|
|
11
|
+
const validationLogger_1 = require("../../utils/validationLogger");
|
|
11
12
|
// Backup retention constants (in days)
|
|
12
13
|
const RETENTION_PERIODS = {
|
|
13
14
|
STANDARD: 90,
|
|
@@ -32,17 +33,37 @@ const VAULT_LOCK = {
|
|
|
32
33
|
class DisasterRecovery extends constructs_1.Construct {
|
|
33
34
|
constructor(scope, id, props) {
|
|
34
35
|
super(scope, id);
|
|
35
|
-
|
|
36
|
+
// Read org config from CDK context
|
|
37
|
+
const app = app_1.default.getInstance();
|
|
38
|
+
const orgConfigRaw = app.node.tryGetContext("orgConfig");
|
|
39
|
+
let orgConfig;
|
|
40
|
+
if (typeof orgConfigRaw === "string") {
|
|
41
|
+
try {
|
|
42
|
+
const parsed = JSON.parse(orgConfigRaw);
|
|
43
|
+
orgConfig =
|
|
44
|
+
typeof parsed === "object" && parsed !== null
|
|
45
|
+
? parsed
|
|
46
|
+
: undefined;
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
validationLogger_1.FjallLogger.warn(`[fjall] Failed to parse orgConfig from CDK context: ${err instanceof Error ? err.message : String(err)}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const providerAccounts = Array.isArray(orgConfig?.providerAccounts)
|
|
53
|
+
? orgConfig.providerAccounts
|
|
54
|
+
: [];
|
|
36
55
|
// Determine if this is a compliance account
|
|
37
|
-
const account =
|
|
56
|
+
const account = providerAccounts.find((pa) => pa.id === props.accountId);
|
|
38
57
|
const isComplianceAccount = account?.environment === "compliance";
|
|
39
58
|
// Get DR configuration
|
|
40
|
-
const disasterRecoveryRegion =
|
|
59
|
+
const disasterRecoveryRegion = typeof orgConfig?.disasterRecoveryRegion === "string"
|
|
60
|
+
? orgConfig.disasterRecoveryRegion
|
|
61
|
+
: undefined;
|
|
41
62
|
// Look up compliance account for cross-account replication
|
|
42
63
|
// Skip if the compliance account (prevent self-replication)
|
|
43
64
|
const disasterRecoveryAccount = isComplianceAccount
|
|
44
65
|
? undefined
|
|
45
|
-
:
|
|
66
|
+
: providerAccounts.find((pa) => pa.environment === "compliance");
|
|
46
67
|
// Construct cross-account DR vault ARN (compliance account in DR region)
|
|
47
68
|
const disasterRecoveryVaultArn = disasterRecoveryAccount && disasterRecoveryRegion
|
|
48
69
|
? `arn:aws:backup:${disasterRecoveryRegion}:${disasterRecoveryAccount.id}:backup-vault:backupVault`
|
|
@@ -63,7 +84,7 @@ class DisasterRecovery extends constructs_1.Construct {
|
|
|
63
84
|
});
|
|
64
85
|
// Configure cross-account access policies
|
|
65
86
|
if (isComplianceAccount) {
|
|
66
|
-
const allAccounts =
|
|
87
|
+
const allAccounts = providerAccounts;
|
|
67
88
|
const productionAccounts = allAccounts.filter((acc) => acc.environment === "production");
|
|
68
89
|
if (productionAccounts.length > 0) {
|
|
69
90
|
const copyStatement = new aws_iam_1.PolicyStatement({
|
|
@@ -218,4 +239,4 @@ class DisasterRecovery extends constructs_1.Construct {
|
|
|
218
239
|
}
|
|
219
240
|
}
|
|
220
241
|
exports.DisasterRecovery = DisasterRecovery;
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzYXN0ZXJSZWNvdmVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb25maWcvYXdzL2Rpc2FzdGVyUmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWlFO0FBQ2pFLDJDQUF1QztBQUN2Qyx1REFBcUU7QUFDckUsdURBSWdDO0FBQ2hDLGlEQUFpRDtBQUNqRCxpREFBZ0Y7QUFDaEYsc0NBQW9EO0FBRXBELHVDQUF1QztBQUN2QyxNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLFFBQVEsRUFBRSxFQUFFO0lBQ1osU0FBUyxFQUFFLEdBQUc7SUFDZCxxQkFBcUIsRUFBRSxFQUFFLEVBQUUsZ0NBQWdDO0lBQzNELHFCQUFxQixFQUFFLElBQUksRUFBRSxVQUFVO0lBQ3ZDLG9CQUFvQixFQUFFLEVBQUUsRUFBRSxjQUFjO0lBQ3hDLHFCQUFxQixFQUFFLEdBQUc7Q0FDbEIsQ0FBQztBQUVYLDBCQUEwQjtBQUMxQixNQUFNLGNBQWMsR0FBRztJQUNyQixLQUFLLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQzNCLFVBQVUsRUFBRSxzQkFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDOUIsZ0JBQWdCLEVBQUUsc0JBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQzNCLENBQUM7QUFFWCx1QkFBdUI7QUFDdkIsTUFBTSxVQUFVLEdBQUc7SUFDakIsYUFBYSxFQUFFLHNCQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNqQyxhQUFhLEVBQUUsc0JBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ25DLFlBQVksRUFBRSxzQkFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Q0FDdEIsQ0FBQztBQWNYLE1BQWEsZ0JBQWlCLFNBQVEsc0JBQVM7SUFTN0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE0QjtRQUNwRSxLQUFLLENBQUMs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QyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2xELENBQUM7Q0FDRjtBQW5SRCw0Q0FtUkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQmFja3VwVmF1bHQsIEJhY2t1cFBsYW4gfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9iYWNrdXBcIjtcbmltcG9ydCB7XG4gIEJhY2t1cFBsYW5SdWxlLFxuICB0eXBlIEJhY2t1cFBsYW5Db3B5QWN0aW9uUHJvcHMsXG4gIEJhY2t1cFZhdWx0IGFzIFZhdWx0XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYmFja3VwXCI7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIjtcbmltcG9ydCB7IEFjY291bnRQcmluY2lwYWwsIEVmZmVjdCwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IENvbmZpZyBhcyBGamFsbENvbmZpZyB9IGZyb20gXCJAZmphbGwvdXRpbFwiO1xuXG4vLyBCYWNrdXAgcmV0ZW50aW9uIGNvbnN0YW50cyAoaW4gZGF5cylcbmNvbnN0IFJFVEVOVElPTl9QRVJJT0RTID0ge1xuICBTVEFOREFSRDogOTAsXG4gIFJFU0lMSUVOVDogMzY1LFxuICBFTlRFUlBSSVNFX0NPTlRJTlVPVVM6IDM1LCAvLyBBV1MgbWF4IGZvciBjb250aW51b3VzIGJhY2t1cFxuICBFTlRFUlBSSVNFX0NPTVBMSUFOQ0U6IDI1NTUsIC8vIDcgeWVhcnNcbiAgQ09MRF9TVE9SQUdFX01JTklNVU06IDkwLCAvLyBBV1MgbWluaW11bVxuICBDT0xEX1NUT1JBR0VfT05FX1lFQVI6IDM2NVxufSBhcyBjb25zdDtcblxuLy8gQmFja3VwIHdpbmRvdyBjb25zdGFudHNcbmNvbnN0IEJBQ0tVUF9XSU5ET1dTID0ge1xuICBTVEFSVDogRHVyYXRpb24ubWludXRlcyg2MCksXG4gIENPTVBMRVRJT046IER1cmF0aW9uLmhvdXJzKDEyKSxcbiAgQ09NUExFVElPTl9TSE9SVDogRHVyYXRpb24uaG91cnMoMilcbn0gYXMgY29uc3Q7XG5cbi8vIFZhdWx0IGxvY2sgY29uc3RhbnRzXG5jb25zdCBWQVVMVF9MT0NLID0ge1xuICBNSU5fUkVURU5USU9OOiBEdXJhdGlvbi5kYXlzKDM2NSksXG4gIE1BWF9SRVRFTlRJT046IER1cmF0aW9uLmRheXMoMzY1MDApLFxuICBHUkFDRV9QRVJJT0Q6IER1cmF0aW9uLmRheXMoMylcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tQmFja3VwUGxhbkNvbmZpZyB7XG4gIHBsYW5OYW1lOiBzdHJpbmc7XG4gIHJ1bGVzOiBCYWNrdXBQbGFuUnVsZVtdO1xuICB0YWdWYWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpc2FzdGVyUmVjb3ZlcnlQcm9wcyB7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICBhY2NvdW50SWQ6IHN0cmluZztcbiAgY3VzdG9tQmFja3VwUGxhbnM/OiBDdXN0b21CYWNrdXBQbGFuQ29uZmlnW107XG59XG5cbmV4cG9ydCBjbGFzcyBEaXNhc3RlclJlY292ZXJ5IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGJhY2t1cFZhdWx0OiBCYWNrdXBWYXVsdDtcbiAgcHVibGljIHJlYWRvbmx5IGJhY2t1cFBsYW5zOiB7XG4gICAgc3RhbmRhcmQ6IEJhY2t1cFBsYW47XG4gICAgcmVzaWxpZW50OiBCYWNrdXBQbGFuO1xuICAgIGVudGVycHJpc2U6IEJhY2t1cFBsYW47XG4gIH07XG4gIHB1YmxpYyByZWFkb25seSBjdXN0b21CYWNrdXBQbGFucz86IEJhY2t1cFBsYW5bXTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGlzYXN0ZXJSZWNvdmVyeVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGZqYWxsQ29uZmlnID0gRmphbGxDb25maWcubG9hZENvbmZpZygpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBjb21wbGlhbmNlIGFjY291bnRcbiAgICBjb25zdCBhY2NvdW50ID0gZmphbGxDb25maWcuZ2V0UHJvdmlkZXJBY2NvdW50QnlJZChwcm9wcy5hY2NvdW50SWQpO1xuICAgIGNvbnN0IGlzQ29tcGxpYW5jZUFjY291bnQgPSBhY2NvdW50Py5lbnZpcm9ubWVudCA9PT0gXCJjb21wbGlhbmNlXCI7XG5cbiAgICAvLyBHZXQgRFIgY29uZmlndXJhdGlvblxuICAgIGNvbnN0IGRpc2FzdGVyUmVjb3ZlcnlSZWdpb24gPSBmamFsbENvbmZpZy5nZXREaXNhc3RlclJlY292ZXJ5UmVnaW9uKCk7XG5cbiAgICAvLyBMb29rIHVwIGNvbXBsaWFuY2UgYWNjb3VudCBmb3IgY3Jvc3MtYWNjb3VudCByZXBsaWNhdGlvblxuICAgIC8vIFNraXAgaWYgdGhlIGNvbXBsaWFuY2UgYWNjb3VudCAocHJldmVudCBzZWxmLXJlcGxpY2F0aW9uKVxuICAgIGNvbnN0IGRpc2FzdGVyUmVjb3ZlcnlBY2NvdW50ID0gaXNDb21wbGlhbmNlQWNjb3VudFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogZmphbGxDb25maWcuZ2V0QWNjb3VudEJ5RW52aXJvbm1lbnQoXCJjb21wbGlhbmNlXCIpO1xuXG4gICAgLy8gQ29uc3RydWN0IGNyb3NzLWFjY291bnQgRFIgdmF1bHQgQVJOIChjb21wbGlhbmNlIGFjY291bnQgaW4gRFIgcmVnaW9uKVxuICAgIGNvbnN0IGRpc2FzdGVyUmVjb3ZlcnlWYXVsdEFybiA9XG4gICAgICBkaXNhc3RlclJlY292ZXJ5QWNjb3VudCAmJiBkaXNhc3RlclJlY292ZXJ5UmVnaW9uXG4gICAgICAgID8gYGFybjphd3M6YmFja3VwOiR7ZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbn06JHtkaXNhc3RlclJlY292ZXJ5QWNjb3VudC5pZH06YmFja3VwLXZhdWx0OmJhY2t1cFZhdWx0YFxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIENvbXBsaWFuY2UgYWNjb3VudHMgZ2V0IHZhdWx0IGxvY2tzIGZvciBwcm90ZWN0aW9uXG4gICAgY29uc3QgbG9ja0NvbmZpZ3VyYXRpb24gPSBpc0NvbXBsaWFuY2VBY2NvdW50XG4gICAgICA/IHtcbiAgICAgICAgICBtaW5SZXRlbnRpb246IFZBVUxUX0xPQ0suTUlOX1JFVEVOVElPTixcbiAgICAgICAgICBtYXhSZXRlbnRpb246IFZBVUxUX0xPQ0suTUFYX1JFVEVOVElPTixcbiAgICAgICAgICBjaGFuZ2VhYmxlRm9yOiBWQVVMVF9MT0NLLkdSQUNFX1BFUklPRFxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIENyZWF0ZSBwcmltYXJ5IGJhY2t1cCB2YXVsdFxuICAgIHRoaXMuYmFja3VwVmF1bHQgPSBuZXcgQmFja3VwVmF1bHQodGhpcywgXCJCYWNrdXBWYXVsdFwiLCB7XG4gICAgICB2YXVsdE5hbWU6IFwiYmFja3VwVmF1bHRcIixcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIGxvY2tDb25maWd1cmF0aW9uOiBsb2NrQ29uZmlndXJhdGlvblxuICAgIH0pO1xuXG4gICAgLy8gQ29uZmlndXJlIGNyb3NzLWFjY291bnQgYWNjZXNzIHBvbGljaWVzXG5cbiAgICBpZiAoaXNDb21wbGlhbmNlQWNjb3VudCkge1xuICAgICAgY29uc3QgYWxsQWNjb3VudHMgPSBmamFsbENvbmZpZy5yb290Q29uZmlnLnByb3ZpZGVyQWNjb3VudHMgfHwgW107XG4gICAgICBjb25zdCBwcm9kdWN0aW9uQWNjb3VudHMgPSBhbGxBY2NvdW50cy5maWx0ZXIoXG4gICAgICAgIChhY2MpID0+IGFjYy5lbnZpcm9ubWVudCA9PT0gXCJwcm9kdWN0aW9uXCJcbiAgICAgICk7XG5cbiAgICAgIGlmIChwcm9kdWN0aW9uQWNjb3VudHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBjb3B5U3RhdGVtZW50ID0gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgcHJpbmNpcGFsczogcHJvZHVjdGlvbkFjY291bnRzLm1hcChcbiAgICAgICAgICAgIChhY2MpID0+IG5ldyBBY2NvdW50UHJpbmNpcGFsKGFjYy5pZClcbiAgICAgICAgICApLFxuICAgICAgICAgIGFjdGlvbnM6IFtcImJhY2t1cDpDb3B5SW50b0JhY2t1cFZhdWx0XCJdLFxuICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5iYWNrdXBWYXVsdC52YXVsdC5hZGRUb0FjY2Vzc1BvbGljeShjb3B5U3RhdGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb25zdHJ1Y3QgY3Jvc3MtcmVnaW9uIHJlcGxpY2F0aW9uIHZhdWx0IEFSTiAoc2FtZSBhY2NvdW50LCBEUiByZWdpb24pXG4gICAgLy8gT25seSByZXBsaWNhdGUgaWYgRFIgcmVnaW9uIGV4aXN0cyBBTkQgaXMgZGlmZmVyZW50IGZyb20gY3VycmVudCByZWdpb25cbiAgICBjb25zdCByZXBsaWNhdGlvblZhdWx0QXJuID1cbiAgICAgIGRpc2FzdGVyUmVjb3ZlcnlSZWdpb24gJiYgZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbiAhPT0gcHJvcHMucmVnaW9uXG4gICAgICAgID8gYGFybjphd3M6YmFja3VwOiR7ZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbn06JHtwcm9wcy5hY2NvdW50SWR9OmJhY2t1cC12YXVsdDpiYWNrdXBWYXVsdGBcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBDcmVhdGUgYWxsIHRocmVlIGJhY2t1cCBwbGFuc1xuICAgIHRoaXMuYmFja3VwUGxhbnMgPSB7XG4gICAgICBzdGFuZGFyZDogbmV3IEJhY2t1cFBsYW4odGhpcywgXCJTdGFuZGFyZEJhY2t1cFBsYW5cIiwge1xuICAgICAgICBwbGFuTmFtZTogXCJzdGFuZGFyZFwiLFxuICAgICAgICBydWxlczogdGhpcy5jcmVhdGVTdGFuZGFyZEJhY2t1cFJ1bGVzKFwic3RhbmRhcmRcIiksXG4gICAgICAgIHRhZ1ZhbHVlOiBcImRlZmF1bHRcIixcbiAgICAgICAgYmFja3VwVmF1bHQ6IHRoaXMuYmFja3VwVmF1bHRcbiAgICAgIH0pLFxuICAgICAgcmVzaWxpZW50OiBuZXcgQmFja3VwUGxhbih0aGlzLCBcIlJlc2lsaWVudEJhY2t1cFBsYW5cIiwge1xuICAgICAgICBwbGFuTmFtZTogXCJyZXNpbGllbnRcIixcbiAgICAgICAgcnVsZXM6IHRoaXMuY3JlYXRlUmVzaWxpZW50QmFja3VwUnVsZXMoXG4gICAgICAgICAgXCJyZXNpbGllbnRcIixcbiAgICAgICAgICByZXBsaWNhdGlvblZhdWx0QXJuXG4gICAgICAgICksXG4gICAgICAgIHRhZ1ZhbHVlOiBcInJlc2lsaWVudFwiLFxuICAgICAgICBiYWNrdXBWYXVsdDogdGhpcy5iYWNrdXBWYXVsdFxuICAgICAgfSksXG4gICAgICBlbnRlcnByaXNlOiBuZXcgQmFja3VwUGxhbih0aGlzLCBcIkVudGVycHJpc2VCYWNrdXBQbGFuXCIsIHtcbiAgICAgICAgcGxhbk5hbWU6IFwiZW50ZXJwcmlzZVwiLFxuICAgICAgICBydWxlczogdGhpcy5jcmVhdGVFbnRlcnByaXNlQmFja3VwUnVsZXMoXG4gICAgICAgICAgXCJlbnRlcnByaXNlXCIsXG4gICAgICAgICAgcmVwbGljYXRpb25WYXVsdEFybixcbiAgICAgICAgICBkaXNhc3RlclJlY292ZXJ5VmF1bHRBcm5cbiAgICAgICAgKSxcbiAgICAgICAgdGFnVmFsdWU6IFwiZW50ZXJwcmlzZVwiLFxuICAgICAgICBiYWNrdXBWYXVsdDogdGhpcy5iYWNrdXBWYXVsdFxuICAgICAgfSlcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIGN1c3RvbSBiYWNrdXAgcGxhbnMgaWYgcHJvdmlkZWRcbiAgICBpZiAocHJvcHMuY3VzdG9tQmFja3VwUGxhbnMgJiYgcHJvcHMuY3VzdG9tQmFja3VwUGxhbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jdXN0b21CYWNrdXBQbGFucyA9IHByb3BzLmN1c3RvbUJhY2t1cFBsYW5zLm1hcCgoY29uZmlnLCBpbmRleCkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IEJhY2t1cFBsYW4odGhpcywgYEN1c3RvbUJhY2t1cFBsYW4ke2luZGV4fWAsIHtcbiAgICAgICAgICBwbGFuTmFtZTogY29uZmlnLnBsYW5OYW1lLFxuICAgICAgICAgIHJ1bGVzOiBjb25maWcucnVsZXMsXG4gICAgICAgICAgdGFnVmFsdWU6IGNvbmZpZy50YWdWYWx1ZSxcbiAgICAgICAgICBiYWNrdXBWYXVsdDogdGhpcy5iYWNrdXBWYXVsdFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEV4cG9ydCBkaXNhc3RlciByZWNvdmVyeSBjb25maWd1cmF0aW9uXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBcIkRpc2FzdGVyUmVjb3ZlcnlFbmFibGVkXCIsIHtcbiAgICAgIGtleTogXCJEaXNhc3RlclJlY292ZXJ5RW5hYmxlZFwiLFxuICAgICAgdmFsdWU6IFwidHJ1ZVwiLFxuICAgICAgZXhwb3J0TmFtZTogXCJEaXNhc3RlclJlY292ZXJ5RW5hYmxlZFwiXG4gICAgfSk7XG5cbiAgICBpZiAoZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbikge1xuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBcIlJlcGxpY2F0aW9uUmVnaW9uXCIsIHtcbiAgICAgICAga2V5OiBcIlJlcGxpY2F0aW9uUmVnaW9uXCIsXG4gICAgICAgIHZhbHVlOiBkaXNhc3RlclJlY292ZXJ5UmVnaW9uLFxuICAgICAgICBleHBvcnROYW1lOiBcIlJlcGxpY2F0aW9uUmVnaW9uXCJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc0NvbXBsaWFuY2VBY2NvdW50KSB7XG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiVmF1bHRMb2NrRW5hYmxlZFwiLCB7XG4gICAgICAgIGtleTogXCJWYXVsdExvY2tFbmFibGVkXCIsXG4gICAgICAgIHZhbHVlOiBcInRydWVcIixcbiAgICAgICAgZXhwb3J0TmFtZTogXCJWYXVsdExvY2tFbmFibGVkXCJcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3RhbmRhcmRCYWNrdXBSdWxlcyhwbGFuTmFtZTogc3RyaW5nKTogQmFja3VwUGxhblJ1bGVbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBCYWNrdXBQbGFuUnVsZSh7XG4gICAgICAgIHJ1bGVOYW1lOiBgJHtwbGFuTmFtZX1EYWlseWAsXG4gICAgICAgIHNjaGVkdWxlRXhwcmVzc2lvbjogZXZlbnRzLlNjaGVkdWxlLmNyb24oeyBob3VyOiBcIjJcIiwgbWludXRlOiBcIjBcIiB9KSwgLy8gMiBBTSBkYWlseVxuICAgICAgICBkZWxldGVBZnRlcjogRHVyYXRpb24uZGF5cyhSRVRFTlRJT05fUEVSSU9EUy5TVEFOREFSRCksXG4gICAgICAgIHN0YXJ0V2luZG93OiBCQUNLVVBfV0lORE9XUy5TVEFSVCxcbiAgICAgICAgY29tcGxldGlvbldpbmRvdzogQkFDS1VQX1dJTkRPV1MuQ09NUExFVElPTlxuICAgICAgfSlcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXNpbGllbnRCYWNrdXBSdWxlcyhcbiAgICBwbGFuTmFtZTogc3RyaW5nLFxuICAgIHJlcGxpY2F0aW9uVmF1bHRBcm4/OiBzdHJpbmdcbiAgKTogQmFja3VwUGxhblJ1bGVbXSB7XG4gICAgY29uc3QgY29weUFjdGlvbnMgPSB0aGlzLmNyZWF0ZUNvcHlBY3Rpb25zKFxuICAgICAgcGxhbk5hbWUsXG4gICAgICByZXBsaWNhdGlvblZhdWx0QXJuLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgRHVyYXRpb24uZGF5cyhSRVRFTlRJT05fUEVSSU9EUy5FTlRFUlBSSVNFX0NPTlRJTlVPVVMpLFxuICAgICAgdW5kZWZpbmVkXG4gICAgKTtcblxuICAgIHJldHVybiBbXG4gICAgICBuZXcgQmFja3VwUGxhblJ1bGUoe1xuICAgICAgICBydWxlTmFtZTogYCR7cGxhbk5hbWV9RGFpbHlgLFxuICAgICAgICBzY2hlZHVsZUV4cHJlc3Npb246IGV2ZW50cy5TY2hlZHVsZS5jcm9uKHsgaG91cjogXCIyXCIsIG1pbnV0ZTogXCIwXCIgfSksIC8vIDIgQU0gZGFpbHlcbiAgICAgICAgZGVsZXRlQWZ0ZXI6IER1cmF0aW9uLmRheXMoUkVURU5USU9OX1BFUklPRFMuRU5URVJQUklTRV9DT05USU5VT1VTKSxcbiAgICAgICAgZW5hYmxlQ29udGludW91c0JhY2t1cDogdHJ1ZSxcbiAgICAgICAgc3RhcnRXaW5kb3c6IEJBQ0tVUF9XSU5ET1dTLlNUQVJULFxuICAgICAgICBjb21wbGV0aW9uV2luZG93OiBCQUNLVVBfV0lORE9XUy5DT01QTEVUSU9OLFxuICAgICAgICBjb3B5QWN0aW9uc1xuICAgICAgfSlcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFbnRlcnByaXNlQmFja3VwUnVsZXMoXG4gICAgcGxhbk5hbWU6IHN0cmluZyxcbiAgICByZXBsaWNhdGlvblZhdWx0QXJuPzogc3RyaW5nLFxuICAgIGRpc2FzdGVyUmVjb3ZlcnlWYXVsdEFybj86IHN0cmluZ1xuICApOiBCYWNrdXBQbGFuUnVsZVtdIHtcbiAgICBjb25zdCBjb250aW51b3VzQ29weUFjdGlvbnMgPSB0aGlzLmNyZWF0ZUNvcHlBY3Rpb25zKFxuICAgICAgYCR7cGxhbk5hbWV9Q29udGludW91c2AsXG4gICAgICByZXBsaWNhdGlvblZhdWx0QXJuLFxuICAgICAgZGlzYXN0ZXJSZWNvdmVyeVZhdWx0QXJuLFxuICAgICAgRHVyYXRpb24uZGF5cyhSRVRFTlRJT05fUEVSSU9EUy5FTlRFUlBSSVNFX0NPTlRJTlVPVVMpLFxuICAgICAgdW5kZWZpbmVkXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbXBsaWFuY2VDb3B5QWN0aW9ucyA9IHRoaXMuY3JlYXRlQ29weUFjdGlvbnMoXG4gICAgICBgJHtwbGFuTmFtZX1Db21wbGlhbmNlYCxcbiAgICAgIHJlcGxpY2F0aW9uVmF1bHRBcm4sXG4gICAgICBkaXNhc3RlclJlY292ZXJ5VmF1bHRBcm4sXG4gICAgICBEdXJhdGlvbi5kYXlzKFJFVEVOVElPTl9QRVJJT0RTLkVOVEVSUFJJU0VfQ09NUExJQU5DRSksXG4gICAgICBEdXJhdGlvbi5kYXlzKFJFVEVOVElPTl9QRVJJT0RTLkNPTERfU1RPUkFHRV9PTkVfWUVBUilcbiAgICApO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIC8vIENvbnRpbnVvdXMgYmFja3VwICgzNS1kYXkgbWF4IFBJVFIgd2luZG93KVxuICAgICAgbmV3IEJhY2t1cFBsYW5SdWxlKHtcbiAgICAgICAgcnVsZU5hbWU6IGAke3BsYW5OYW1lfUNvbnRpbnVvdXNgLFxuICAgICAgICBzY2hlZHVsZUV4cHJlc3Npb246IGV2ZW50cy5TY2hlZHVsZS5jcm9uKHsgaG91cjogXCIyXCIsIG1pbnV0ZTogXCIwXCIgfSksIC8vIERhaWx5IGZvciBjb250aW51b3VzIGJhY2t1cFxuICAgICAgICBkZWxldGVBZnRlcjogRHVyYXRpb24uZGF5cyhSRVRFTlRJT05fUEVSSU9EUy5FTlRFUlBSSVNFX0NPTlRJTlVPVVMpLFxuICAgICAgICBlbmFibGVDb250aW51b3VzQmFja3VwOiB0cnVlLFxuICAgICAgICBzdGFydFdpbmRvdzogQkFDS1VQX1dJTkRPV1MuU1RBUlQsXG4gICAgICAgIGNvbXBsZXRpb25XaW5kb3c6IEJBQ0tVUF9XSU5ET1dTLkNPTVBMRVRJT04sXG4gICAgICAgIGNvcHlBY3Rpb25zOiBjb250aW51b3VzQ29weUFjdGlvbnNcbiAgICAgIH0pLFxuICAgICAgLy8gSG91cmx5IHNuYXBzaG90cyBmb3IgbG9uZy10ZXJtIGNvbXBsaWFuY2UgKDcgeWVhcnMpXG4gICAgICBuZXcgQmFja3VwUGxhblJ1bGUoe1xuICAgICAgICBydWxlTmFtZTogYCR7cGxhbk5hbWV9SG91cmx5Q29tcGxpYW5jZWAsXG4gICAgICAgIHNjaGVkdWxlRXhwcmVzc2lvbjogZXZlbnRzLlNjaGVkdWxlLmNyb24oeyBtaW51dGU6IFwiMFwiIH0pLCAvLyBFdmVyeSBob3VyXG4gICAgICAgIGRlbGV0ZUFmdGVyOiBEdXJhdGlvbi5kYXlzKFJFVEVOVElPTl9QRVJJT0RTLkVOVEVSUFJJU0VfQ09NUExJQU5DRSksXG4gICAgICAgIG1vdmVUb0NvbGRTdG9yYWdlQWZ0ZXI6IER1cmF0aW9uLmRheXMoXG4gICAgICAgICAgUkVURU5USU9OX1BFUklPRFMuQ09MRF9TVE9SQUdFX09ORV9ZRUFSXG4gICAgICAgICksXG4gICAgICAgIHN0YXJ0V2luZG93OiBCQUNLVVBfV0lORE9XUy5TVEFSVCxcbiAgICAgICAgY29tcGxldGlvbldpbmRvdzogQkFDS1VQX1dJTkRPV1MuQ09NUExFVElPTl9TSE9SVCxcbiAgICAgICAgY29weUFjdGlvbnM6IGNvbXBsaWFuY2VDb3B5QWN0aW9uc1xuICAgICAgfSlcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb3B5QWN0aW9ucyhcbiAgICBwbGFuTmFtZTogc3RyaW5nLFxuICAgIHJlcGxpY2F0aW9uVmF1bHRBcm4/OiBzdHJpbmcsXG4gICAgZGlzYXN0ZXJSZWNvdmVyeVZhdWx0QXJuPzogc3RyaW5nLFxuICAgIGRlbGV0ZUFmdGVyPzogRHVyYXRpb24sXG4gICAgbW92ZVRvQ29sZFN0b3JhZ2VBZnRlcj86IER1cmF0aW9uXG4gICk6IEJhY2t1cFBsYW5Db3B5QWN0aW9uUHJvcHNbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYWN0aW9uczogQmFja3VwUGxhbkNvcHlBY3Rpb25Qcm9wc1tdID0gW107XG5cbiAgICAvLyBDcm9zcy1yZWdpb24gcmVwbGljYXRpb25cbiAgICBpZiAocmVwbGljYXRpb25WYXVsdEFybikge1xuICAgICAgY29uc3QgcmVwbGljYXRpb25BY3Rpb246IEJhY2t1cFBsYW5Db3B5QWN0aW9uUHJvcHMgPSB7XG4gICAgICAgIGRlc3RpbmF0aW9uQmFja3VwVmF1bHQ6IFZhdWx0LmZyb21CYWNrdXBWYXVsdEFybihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGAke3BsYW5OYW1lfVJlcGxpY2F0aW9uVmF1bHRSZWZgLFxuICAgICAgICAgIHJlcGxpY2F0aW9uVmF1bHRBcm5cbiAgICAgICAgKSxcbiAgICAgICAgLi4uKGRlbGV0ZUFmdGVyICYmIHsgZGVsZXRlQWZ0ZXIgfSksXG4gICAgICAgIC8vIE9ubHkgYWRkIGNvbGQgc3RvcmFnZSBpZiBzcGVjaWZpZWQgYW5kID49IDkwIGRheXNcbiAgICAgICAgLi4uKG1vdmVUb0NvbGRTdG9yYWdlQWZ0ZXIgJiZcbiAgICAgICAgbW92ZVRvQ29sZFN0b3JhZ2VBZnRlci50b0RheXMoKSA+PVxuICAgICAgICAgIFJFVEVOVElPTl9QRVJJT0RTLkNPTERfU1RPUkFHRV9NSU5JTVVNXG4gICAgICAgICAgPyB7IG1vdmVUb0NvbGRTdG9yYWdlQWZ0ZXIgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9O1xuICAgICAgYWN0aW9ucy5wdXNoKHJlcGxpY2F0aW9uQWN0aW9uKTtcbiAgICB9XG5cbiAgICAvLyBDcm9zcy1hY2NvdW50IERSIHZhdWx0XG4gICAgaWYgKGRpc2FzdGVyUmVjb3ZlcnlWYXVsdEFybikge1xuICAgICAgY29uc3QgZHJBY3Rpb246IEJhY2t1cFBsYW5Db3B5QWN0aW9uUHJvcHMgPSB7XG4gICAgICAgIGRlc3RpbmF0aW9uQmFja3VwVmF1bHQ6IFZhdWx0LmZyb21CYWNrdXBWYXVsdEFybihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGAke3BsYW5OYW1lfURpc2FzdGVyUmVjb3ZlcnlWYXVsdFJlZmAsXG4gICAgICAgICAgZGlzYXN0ZXJSZWNvdmVyeVZhdWx0QXJuXG4gICAgICAgICksXG4gICAgICAgIC4uLihkZWxldGVBZnRlciAmJiB7IGRlbGV0ZUFmdGVyIH0pLFxuICAgICAgICAvLyBPbmx5IGFkZCBjb2xkIHN0b3JhZ2UgaWYgc3BlY2lmaWVkIGFuZCA+PSA5MCBkYXlzXG4gICAgICAgIC4uLihtb3ZlVG9Db2xkU3RvcmFnZUFmdGVyICYmXG4gICAgICAgIG1vdmVUb0NvbGRTdG9yYWdlQWZ0ZXIudG9EYXlzKCkgPj1cbiAgICAgICAgICBSRVRFTlRJT05fUEVSSU9EUy5DT0xEX1NUT1JBR0VfTUlOSU1VTVxuICAgICAgICAgID8geyBtb3ZlVG9Db2xkU3RvcmFnZUFmdGVyIH1cbiAgICAgICAgICA6IHt9KVxuICAgICAgfTtcbiAgICAgIGFjdGlvbnMucHVzaChkckFjdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGlvbnMubGVuZ3RoID4gMCA/IGFjdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzYXN0ZXJSZWNvdmVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb25maWcvYXdzL2Rpc2FzdGVyUmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWlFO0FBQ2pFLDJDQUF1QztBQUN2Qyx1REFBcUU7QUFDckUsdURBSWdDO0FBQ2hDLGlEQUFpRDtBQUNqRCxpREFBZ0Y7QUFFaEYsbUNBQTRCO0FBQzVCLG1FQUEyRDtBQUUzRCx1Q0FBdUM7QUFDdkMsTUFBTSxpQkFBaUIsR0FBRztJQUN4QixRQUFRLEVBQUUsRUFBRTtJQUNaLFNBQVMsRUFBRSxHQUFHO0lBQ2QscUJBQXFCLEVBQUUsRUFBRSxFQUFFLGdDQUFnQztJQUMzRCxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsVUFBVTtJQUN2QyxvQkFBb0IsRUFBRSxFQUFFLEVBQUUsY0FBYztJQUN4QyxxQkFBcUIsRUFBRSxHQUFHO0NBQ2xCLENBQUM7QUFFWCwwQkFBMEI7QUFDMUIsTUFBTSxjQUFjLEdBQUc7SUFDckIsS0FBSyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUMzQixVQUFVLEVBQUUsc0JBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQzlCLGdCQUFnQixFQUFFLHNCQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUMzQixDQUFDO0FBRVgsdUJBQXVCO0FBQ3ZCLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLGFBQWEsRUFBRSxzQkFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDakMsYUFBYSxFQUFFLHNCQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNuQyxZQUFZLEVBQUUsc0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0NBQ3RCLENBQUM7QUFjWCxNQUFhLGdCQUFpQixTQUFRLHNCQUFTO0lBUzdDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFD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QUFHLFFBQVEscUJBQXFCLEVBQ2hDLG1CQUFtQixDQUNwQjtnQkFDRCxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQ25DLG9EQUFvRDtnQkFDcEQsR0FBRyxDQUFDLHNCQUFzQjtvQkFDMUIsc0JBQXNCLENBQUMsTUFBTSxFQUFFO3dCQUM3QixpQkFBaUIsQ0FBQyxvQkFBb0I7b0JBQ3RDLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixFQUFFO29CQUM1QixDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ1IsQ0FBQztZQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQseUJBQXlCO1FBQ3pCLElBQUksd0JBQXdCLEVBQUUsQ0FBQztZQUM3QixNQUFNLFFBQVEsR0FBOEI7Z0JBQzFDLHNCQUFzQixFQUFFLHdCQUFLLENBQUMsa0JBQWtCLENBQzlDLElBQUksRUFDSixHQUFHLFFBQVEsMEJBQTBCLEVBQ3JDLHdCQUF3QixDQUN6QjtnQkFDRCxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQ25DLG9EQUFvRDtnQkFDcEQsR0FBRyxDQUFDLHNCQUFzQjtvQkFDMUIsc0JBQXNCLENBQUMsTUFBTSxFQUFFO3dCQUM3QixpQkFBaUIsQ0FBQyxvQkFBb0I7b0JBQ3RDLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixFQUFFO29CQUM1QixDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ1IsQ0FBQztZQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2xELENBQUM7Q0FDRjtBQXpTRCw0Q0F5U0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQmFja3VwVmF1bHQsIEJhY2t1cFBsYW4gfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9iYWNrdXBcIjtcbmltcG9ydCB7XG4gIEJhY2t1cFBsYW5SdWxlLFxuICB0eXBlIEJhY2t1cFBsYW5Db3B5QWN0aW9uUHJvcHMsXG4gIEJhY2t1cFZhdWx0IGFzIFZhdWx0XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYmFja3VwXCI7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIjtcbmltcG9ydCB7IEFjY291bnRQcmluY2lwYWwsIEVmZmVjdCwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IHR5cGUgUHJvdmlkZXJBY2NvdW50IH0gZnJvbSBcIkBmamFsbC91dGlsXCI7XG5pbXBvcnQgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcbmltcG9ydCB7IEZqYWxsTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3ZhbGlkYXRpb25Mb2dnZXJcIjtcblxuLy8gQmFja3VwIHJldGVudGlvbiBjb25zdGFudHMgKGluIGRheXMpXG5jb25zdCBSRVRFTlRJT05fUEVSSU9EUyA9IHtcbiAgU1RBTkRBUkQ6IDkwLFxuICBSRVNJTElFTlQ6IDM2NSxcbiAgRU5URVJQUklTRV9DT05USU5VT1VTOiAzNSwgLy8gQVdTIG1heCBmb3IgY29udGludW91cyBiYWNrdXBcbiAgRU5URVJQUklTRV9DT01QTElBTkNFOiAyNTU1LCAvLyA3IHllYXJzXG4gIENPTERfU1RPUkFHRV9NSU5JTVVNOiA5MCwgLy8gQVdTIG1pbmltdW1cbiAgQ09MRF9TVE9SQUdFX09ORV9ZRUFSOiAzNjVcbn0gYXMgY29uc3Q7XG5cbi8vIEJhY2t1cCB3aW5kb3cgY29uc3RhbnRzXG5jb25zdCBCQUNLVVBfV0lORE9XUyA9IHtcbiAgU1RBUlQ6IER1cmF0aW9uLm1pbnV0ZXMoNjApLFxuICBDT01QTEVUSU9OOiBEdXJhdGlvbi5ob3VycygxMiksXG4gIENPTVBMRVRJT05fU0hPUlQ6IER1cmF0aW9uLmhvdXJzKDIpXG59IGFzIGNvbnN0O1xuXG4vLyBWYXVsdCBsb2NrIGNvbnN0YW50c1xuY29uc3QgVkFVTFRfTE9DSyA9IHtcbiAgTUlOX1JFVEVOVElPTjogRHVyYXRpb24uZGF5cygzNjUpLFxuICBNQVhfUkVURU5USU9OOiBEdXJhdGlvbi5kYXlzKDM2NTAwKSxcbiAgR1JBQ0VfUEVSSU9EOiBEdXJhdGlvbi5kYXlzKDMpXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUJhY2t1cFBsYW5Db25maWcge1xuICBwbGFuTmFtZTogc3RyaW5nO1xuICBydWxlczogQmFja3VwUGxhblJ1bGVbXTtcbiAgdGFnVmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXNhc3RlclJlY292ZXJ5UHJvcHMge1xuICByZWdpb246IHN0cmluZztcbiAgYWNjb3VudElkOiBzdHJpbmc7XG4gIGN1c3RvbUJhY2t1cFBsYW5zPzogQ3VzdG9tQmFja3VwUGxhbkNvbmZpZ1tdO1xufVxuXG5leHBvcnQgY2xhc3MgRGlzYXN0ZXJSZWNvdmVyeSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBiYWNrdXBWYXVsdDogQmFja3VwVmF1bHQ7XG4gIHB1YmxpYyByZWFkb25seSBiYWNrdXBQbGFuczoge1xuICAgIHN0YW5kYXJkOiBCYWNrdXBQbGFuO1xuICAgIHJlc2lsaWVudDogQmFja3VwUGxhbjtcbiAgICBlbnRlcnByaXNlOiBCYWNrdXBQbGFuO1xuICB9O1xuICBwdWJsaWMgcmVhZG9ubHkgY3VzdG9tQmFja3VwUGxhbnM/OiBCYWNrdXBQbGFuW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERpc2FzdGVyUmVjb3ZlcnlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBSZWFkIG9yZyBjb25maWcgZnJvbSBDREsgY29udGV4dFxuICAgIGNvbnN0IGFwcCA9IEFwcC5nZXRJbnN0YW5jZSgpO1xuICAgIGNvbnN0IG9yZ0NvbmZpZ1JhdyA9IGFwcC5ub2RlLnRyeUdldENvbnRleHQoXCJvcmdDb25maWdcIik7XG4gICAgbGV0IG9yZ0NvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiBvcmdDb25maWdSYXcgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uob3JnQ29uZmlnUmF3KTtcbiAgICAgICAgb3JnQ29uZmlnID1cbiAgICAgICAgICB0eXBlb2YgcGFyc2VkID09PSBcIm9iamVjdFwiICYmIHBhcnNlZCAhPT0gbnVsbFxuICAgICAgICAgICAgPyAocGFyc2VkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgICBgW2ZqYWxsXSBGYWlsZWQgdG8gcGFyc2Ugb3JnQ29uZmlnIGZyb20gQ0RLIGNvbnRleHQ6ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcHJvdmlkZXJBY2NvdW50cyA9IEFycmF5LmlzQXJyYXkob3JnQ29uZmlnPy5wcm92aWRlckFjY291bnRzKVxuICAgICAgPyAob3JnQ29uZmlnLnByb3ZpZGVyQWNjb3VudHMgYXMgUHJvdmlkZXJBY2NvdW50W10pXG4gICAgICA6IFtdO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBjb21wbGlhbmNlIGFjY291bnRcbiAgICBjb25zdCBhY2NvdW50ID0gcHJvdmlkZXJBY2NvdW50cy5maW5kKChwYSkgPT4gcGEuaWQgPT09IHByb3BzLmFjY291bnRJZCk7XG4gICAgY29uc3QgaXNDb21wbGlhbmNlQWNjb3VudCA9IGFjY291bnQ/LmVudmlyb25tZW50ID09PSBcImNvbXBsaWFuY2VcIjtcblxuICAgIC8vIEdldCBEUiBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbiA9XG4gICAgICB0eXBlb2Ygb3JnQ29uZmlnPy5kaXNhc3RlclJlY292ZXJ5UmVnaW9uID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gb3JnQ29uZmlnLmRpc2FzdGVyUmVjb3ZlcnlSZWdpb25cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBMb29rIHVwIGNvbXBsaWFuY2UgYWNjb3VudCBmb3IgY3Jvc3MtYWNjb3VudCByZXBsaWNhdGlvblxuICAgIC8vIFNraXAgaWYgdGhlIGNvbXBsaWFuY2UgYWNjb3VudCAocHJldmVudCBzZWxmLXJlcGxpY2F0aW9uKVxuICAgIGNvbnN0IGRpc2FzdGVyUmVjb3ZlcnlBY2NvdW50ID0gaXNDb21wbGlhbmNlQWNjb3VudFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogcHJvdmlkZXJBY2NvdW50cy5maW5kKChwYSkgPT4gcGEuZW52aXJvbm1lbnQgPT09IFwiY29tcGxpYW5jZVwiKTtcblxuICAgIC8vIENvbnN0cnVjdCBjcm9zcy1hY2NvdW50IERSIHZhdWx0IEFSTiAoY29tcGxpYW5jZSBhY2NvdW50IGluIERSIHJlZ2lvbilcbiAgICBjb25zdCBkaXNhc3RlclJlY292ZXJ5VmF1bHRBcm4gPVxuICAgICAgZGlzYXN0ZXJSZWNvdmVyeUFjY291bnQgJiYgZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvblxuICAgICAgICA/IGBhcm46YXdzOmJhY2t1cDoke2Rpc2FzdGVyUmVjb3ZlcnlSZWdpb259OiR7ZGlzYXN0ZXJSZWNvdmVyeUFjY291bnQuaWR9OmJhY2t1cC12YXVsdDpiYWNrdXBWYXVsdGBcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBDb21wbGlhbmNlIGFjY291bnRzIGdldCB2YXVsdCBsb2NrcyBmb3IgcHJvdGVjdGlvblxuICAgIGNvbnN0IGxvY2tDb25maWd1cmF0aW9uID0gaXNDb21wbGlhbmNlQWNjb3VudFxuICAgICAgPyB7XG4gICAgICAgICAgbWluUmV0ZW50aW9uOiBWQVVMVF9MT0NLLk1JTl9SRVRFTlRJT04sXG4gICAgICAgICAgbWF4UmV0ZW50aW9uOiBWQVVMVF9MT0NLLk1BWF9SRVRFTlRJT04sXG4gICAgICAgICAgY2hhbmdlYWJsZUZvcjogVkFVTFRfTE9DSy5HUkFDRV9QRVJJT0RcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBDcmVhdGUgcHJpbWFyeSBiYWNrdXAgdmF1bHRcbiAgICB0aGlzLmJhY2t1cFZhdWx0ID0gbmV3IEJhY2t1cFZhdWx0KHRoaXMsIFwiQmFja3VwVmF1bHRcIiwge1xuICAgICAgdmF1bHROYW1lOiBcImJhY2t1cFZhdWx0XCIsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBsb2NrQ29uZmlndXJhdGlvbjogbG9ja0NvbmZpZ3VyYXRpb25cbiAgICB9KTtcblxuICAgIC8vIENvbmZpZ3VyZSBjcm9zcy1hY2NvdW50IGFjY2VzcyBwb2xpY2llc1xuXG4gICAgaWYgKGlzQ29tcGxpYW5jZUFjY291bnQpIHtcbiAgICAgIGNvbnN0IGFsbEFjY291bnRzID0gcHJvdmlkZXJBY2NvdW50cztcbiAgICAgIGNvbnN0IHByb2R1Y3Rpb25BY2NvdW50cyA9IGFsbEFjY291bnRzLmZpbHRlcihcbiAgICAgICAgKGFjYykgPT4gYWNjLmVudmlyb25tZW50ID09PSBcInByb2R1Y3Rpb25cIlxuICAgICAgKTtcblxuICAgICAgaWYgKHByb2R1Y3Rpb25BY2NvdW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGNvcHlTdGF0ZW1lbnQgPSBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICBwcmluY2lwYWxzOiBwcm9kdWN0aW9uQWNjb3VudHMubWFwKFxuICAgICAgICAgICAgKGFjYykgPT4gbmV3IEFjY291bnRQcmluY2lwYWwoYWNjLmlkKVxuICAgICAgICAgICksXG4gICAgICAgICAgYWN0aW9uczogW1wiYmFja3VwOkNvcHlJbnRvQmFja3VwVmF1bHRcIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJhY2t1cFZhdWx0LnZhdWx0LmFkZFRvQWNjZXNzUG9saWN5KGNvcHlTdGF0ZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCBjcm9zcy1yZWdpb24gcmVwbGljYXRpb24gdmF1bHQgQVJOIChzYW1lIGFjY291bnQsIERSIHJlZ2lvbilcbiAgICAvLyBPbmx5IHJlcGxpY2F0ZSBpZiBEUiByZWdpb24gZXhpc3RzIEFORCBpcyBkaWZmZXJlbnQgZnJvbSBjdXJyZW50IHJlZ2lvblxuICAgIGNvbnN0IHJlcGxpY2F0aW9uVmF1bHRBcm4gPVxuICAgICAgZGlzYXN0ZXJSZWNvdmVyeVJlZ2lvbiAmJiBkaXNhc3RlclJlY292ZXJ5UmVnaW9uICE9PSBwcm9wcy5yZWdpb25cbiAgICAgICAgPyBgYXJuOmF3czpiYWNrdXA6JHtkaXNhc3RlclJlY292ZXJ5UmVnaW9ufToke3Byb3BzLmFjY291bnRJZH06YmFja3VwLXZhdWx0OmJhY2t1cFZhdWx0YFxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIENyZWF0ZSBhbGwgdGhyZWUgYmFja3VwIHBsYW5zXG4gICAgdGhpcy5iYWNrdXBQbGFucyA9IHtcbiAgICAgIHN0YW5kYXJkOiBuZXcgQmFja3VwUGxhbih0aGlzLCBcIlN0YW5kYXJkQmFja3VwUGxhblwiLCB7XG4gICAgICAgIHBsYW5OYW1lOiBcInN0YW5kYXJkXCIsXG4gICAgICAgIHJ1bGVzOiB0aGlzLmNyZWF0ZVN0YW5kYXJkQmFja3VwUnVsZXMoXCJzdGFuZGFyZFwiKSxcbiAgICAgICAgdGFnVmFsdWU6IFwiZGVmYXVsdFwiLFxuICAgICAgICBiYWNrdXBWYXVsdDogdGhpcy5iYWNrdXBWYXVsdFxuICAgICAgfSksXG4gICAgICByZXNpbGllbnQ6IG5ldyBCYWNrdXBQbGFuKHRoaXMsIFwiUmVzaWxpZW50QmFja3VwUGxhblwiLCB7XG4gICAgICAgIHBsYW5OYW1lOiBcInJlc2lsaWVudFwiLFxuICAgICAgICBydWxlczogdGhpcy5jcmVhdGVSZXNpbGllbnRCYWNrdXBSdWxlcyhcbiAgICAgICAgICBcInJlc2lsaWVudFwiLFxuICAgICAgICAgIHJlcGxpY2F0aW9uVmF1bHRBcm5cbiAgICAgICAgKSxcbiAgICAgICAgdGFnVmFsdWU6IFwicmVzaWxpZW50XCIsXG4gICAgICAgIGJhY2t1cFZhdWx0OiB0aGlzLmJhY2t1cFZhdWx0XG4gICAgICB9KSxcbiAgICAgIGVudGVycHJpc2U6IG5ldyBCYWNrdXBQbGFuKHRoaXMsIFwiRW50ZXJwcmlzZUJhY2t1cFBsYW5cIiwge1xuICAgICAgICBwbGFuTmFtZTogXCJlbnRlcnByaXNlXCIsXG4gICAgICAgIHJ1bGVzOiB0aGlzLmNyZWF0ZUVudGVycHJpc2VCYWNrdXBSdWxlcyhcbiAgICAgICAgICBcImVudGVycHJpc2VcIixcbiAgICAgICAgICByZXBsaWNhdGlvblZhdWx0QXJuLFxuICAgICAgICAgIGRpc2FzdGVyUmVjb3ZlcnlWYXVsdEFyblxuICAgICAgICApLFxuICAgICAgICB0YWdWYWx1ZTogXCJlbnRlcnByaXNlXCIsXG4gICAgICAgIGJhY2t1cFZhdWx0OiB0aGlzLmJhY2t1cFZhdWx0XG4gICAgICB9KVxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgY3VzdG9tIGJhY2t1cCBwbGFucyBpZiBwcm92aWRlZFxuICAgIGlmIChwcm9wcy5jdXN0b21CYWNrdXBQbGFucyAmJiBwcm9wcy5jdXN0b21CYWNrdXBQbGFucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmN1c3RvbUJhY2t1cFBsYW5zID0gcHJvcHMuY3VzdG9tQmFja3VwUGxhbnMubWFwKChjb25maWcsIGluZGV4KSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgQmFja3VwUGxhbih0aGlzLCBgQ3VzdG9tQmFja3VwUGxhbiR7aW5kZXh9YCwge1xuICAgICAgICAgIHBsYW5OYW1lOiBjb25maWcucGxhbk5hbWUsXG4gICAgICAgICAgcnVsZXM6IGNvbmZpZy5ydWxlcyxcbiAgICAgICAgICB0YWdWYWx1ZTogY29uZmlnLnRhZ1ZhbHVlLFxuICAgICAgICAgIGJhY2t1cFZhdWx0OiB0aGlzLmJhY2t1cFZhdWx0XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRXhwb3J0IGRpc2FzdGVyIHJlY292ZXJ5IGNvbmZpZ3VyYXRpb25cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiRGlzYXN0ZXJSZWNvdmVyeUVuYWJsZWRcIiwge1xuICAgICAga2V5OiBcIkRpc2FzdGVyUmVjb3ZlcnlFbmFibGVkXCIsXG4gICAgICB2YWx1ZTogXCJ0cnVlXCIsXG4gICAgICBleHBvcnROYW1lOiBcIkRpc2FzdGVyUmVjb3ZlcnlFbmFibGVkXCJcbiAgICB9KTtcblxuICAgIGlmIChkaXNhc3RlclJlY292ZXJ5UmVnaW9uKSB7XG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiUmVwbGljYXRpb25SZWdpb25cIiwge1xuICAgICAgICBrZXk6IFwiUmVwbGljYXRpb25SZWdpb25cIixcbiAgICAgICAgdmFsdWU6IGRpc2FzdGVyUmVjb3ZlcnlSZWdpb24sXG4gICAgICAgIGV4cG9ydE5hbWU6IFwiUmVwbGljYXRpb25SZWdpb25cIlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGlzQ29tcGxpYW5jZUFjY291bnQpIHtcbiAgICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJWYXVsdExvY2tFbmFibGVkXCIsIHtcbiAgICAgICAga2V5OiBcIlZhdWx0TG9ja0VuYWJsZWRcIixcbiAgICAgICAgdmFsdWU6IFwidHJ1ZVwiLFxuICAgICAgICBleHBvcnROYW1lOiBcIlZhdWx0TG9ja0VuYWJsZWRcIlxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdGFuZGFyZEJhY2t1cFJ1bGVzKHBsYW5OYW1lOiBzdHJpbmcpOiBCYWNrdXBQbGFuUnVsZVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgbmV3IEJhY2t1cFBsYW5SdWxlKHtcbiAgICAgICAgcnVsZU5hbWU6IGAke3BsYW5OYW1lfURhaWx5YCxcbiAgICAgICAgc2NoZWR1bGVFeHByZXNzaW9uOiBldmVudHMuU2NoZWR1bGUuY3Jvbih7IGhvdXI6IFwiMlwiLCBtaW51dGU6IFwiMFwiIH0pLCAvLyAyIEFNIGRhaWx5XG4gICAgICAgIGRlbGV0ZUFmdGVyOiBEdXJhdGlvbi5kYXlzKFJFVEVOVElPTl9QRVJJT0RTLlNUQU5EQVJEKSxcbiAgICAgICAgc3RhcnRXaW5kb3c6IEJBQ0tVUF9XSU5ET1dTLlNUQVJULFxuICAgICAgICBjb21wbGV0aW9uV2luZG93OiBCQUNLVVBfV0lORE9XUy5DT01QTEVUSU9OXG4gICAgICB9KVxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlc2lsaWVudEJhY2t1cFJ1bGVzKFxuICAgIHBsYW5OYW1lOiBzdHJpbmcsXG4gICAgcmVwbGljYXRpb25WYXVsdEFybj86IHN0cmluZ1xuICApOiBCYWNrdXBQbGFuUnVsZVtdIHtcbiAgICBjb25zdCBjb3B5QWN0aW9ucyA9IHRoaXMuY3JlYXRlQ29weUFjdGlvbnMoXG4gICAgICBwbGFuTmFtZSxcbiAgICAgIHJlcGxpY2F0aW9uVmF1bHRBcm4sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBEdXJhdGlvbi5kYXlzKFJFVEVOVElPTl9QRVJJT0RTLkVOVEVSUFJJU0VfQ09OVElOVU9VUyksXG4gICAgICB1bmRlZmluZWRcbiAgICApO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIG5ldyBCYWNrdXBQbGFuUnVsZSh7XG4gICAgICAgIHJ1bGVOYW1lOiBgJHtwbGFuTmFtZX1EYWlseWAsXG4gICAgICAgIHNjaGVkdWxlRXhwcmVzc2lvbjogZXZlbnRzLlNjaGVkdWxlLmNyb24oeyBob3VyOiBcIjJcIiwgbWludXRlOiBcIjBcIiB9KSwgLy8gMiBBTSBkYWlseVxuICAgICAgICBkZWxldGVBZnRlcjogRHVyYXRpb24uZGF5cyhSRVRFTlRJT05fUEVSSU9EUy5FTlRFUlBSSVNFX0NPTlRJTlVPVVMpLFxuICAgICAgICBlbmFibGVDb250aW51b3VzQmFja3VwOiB0cnVlLFxuICAgICAgICBzdGFydFdpbmRvdzogQkFDS1VQX1dJTkRPV1MuU1RBUlQsXG4gICAgICAgIGNvbXBsZXRpb25XaW5kb3c6IEJBQ0tVUF9XSU5ET1dTLkNPTVBMRVRJT04sXG4gICAgICAgIGNvcHlBY3Rpb25zXG4gICAgICB9KVxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVudGVycHJpc2VCYWNrdXBSdWxlcyhcbiAgICBwbGFuTmFtZTogc3RyaW5nLFxuICAgIHJlcGxpY2F0aW9uVmF1bHRBcm4/OiBzdHJpbmcsXG4gICAgZGlzYXN0ZXJSZWNvdmVyeVZhdWx0QXJuPzogc3RyaW5nXG4gICk6IEJhY2t1cFBsYW5SdWxlW10ge1xuICAgIGNvbnN0IGNvbnRpbnVvdXNDb3B5QWN0aW9ucyA9IHRoaXMuY3JlYXRlQ29weUFjdGlvbnMoXG4gICAgICBgJHtwbGFuTmFtZX1Db250aW51b3VzYCxcbiAgICAgIHJlcGxpY2F0aW9uVmF1bHRBcm4sXG4gICAgICBkaXNhc3RlclJlY292ZXJ5VmF1bHRBcm4sXG4gICAgICBEdXJhdGlvbi5kYXlzKFJFVEVOVElPTl9QRVJJT0RTLkVOVEVSUFJJU0VfQ09OVElOVU9VUyksXG4gICAgICB1bmRlZmluZWRcbiAgICApO1xuXG4gICAgY29uc3QgY29tcGxpYW5jZUNvcHlBY3Rpb25zID0gdGhpcy5jcmVhdGVDb3B5QWN0aW9ucyhcbiAgICAgIGAke3BsYW5OYW1lfUNvbXBsaWFuY2VgLFxuICAgICAgcmVwbGljYXRpb25WYXVsdEFybixcbiAgICAgIGRpc2FzdGVyUmVjb3ZlcnlWYXVsdEFybixcbiAgICAgIER1cmF0aW9uLmRheXMoUkVURU5USU9OX1BFUklPRFMuRU5URVJQUklTRV9DT01QTElBTkNFKSxcbiAgICAgIER1cmF0aW9uLmRheXMoUkVURU5USU9OX1BFUklPRFMuQ09MRF9TVE9SQUdFX09ORV9ZRUFSKVxuICAgICk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgLy8gQ29udGludW91cyBiYWNrdXAgKDM1LWRheSBtYXggUElUUiB3aW5kb3cpXG4gICAgICBuZXcgQmFja3VwUGxhblJ1bGUoe1xuICAgICAgICBydWxlTmFtZTogYCR7cGxhbk5hbWV9Q29udGludW91c2AsXG4gICAgICAgIHNjaGVkdWxlRXhwcmVzc2lvbjogZXZlbnRzLlNjaGVkdWxlLmNyb24oeyBob3VyOiBcIjJcIiwgbWludXRlOiBcIjBcIiB9KSwgLy8gRGFpbHkgZm9yIGNvbnRpbnVvdXMgYmFja3VwXG4gICAgICAgIGRlbGV0ZUFmdGVyOiBEdXJhdGlvbi5kYXlzKFJFVEVOVElPTl9QRVJJT0RTLkVOVEVSUFJJU0VfQ09OVElOVU9VUyksXG4gICAgICAgIGVuYWJsZUNvbnRpbnVvdXNCYWNrdXA6IHRydWUsXG4gICAgICAgIHN0YXJ0V2luZG93OiBCQUNLVVBfV0lORE9XUy5TVEFSVCxcbiAgICAgICAgY29tcGxldGlvbldpbmRvdzogQkFDS1VQX1dJTkRPV1MuQ09NUExFVElPTixcbiAgICAgICAgY29weUFjdGlvbnM6IGNvbnRpbnVvdXNDb3B5QWN0aW9uc1xuICAgICAgfSksXG4gICAgICAvLyBIb3VybHkgc25hcHNob3RzIGZvciBsb25nLXRlcm0gY29tcGxpYW5jZSAoNyB5ZWFycylcbiAgICAgIG5ldyBCYWNrdXBQbGFuUnVsZSh7XG4gICAgICAgIHJ1bGVOYW1lOiBgJHtwbGFuTmFtZX1Ib3VybHlDb21wbGlhbmNlYCxcbiAgICAgICAgc2NoZWR1bGVFeHByZXNzaW9uOiBldmVudHMuU2NoZWR1bGUuY3Jvbih7IG1pbnV0ZTogXCIwXCIgfSksIC8vIEV2ZXJ5IGhvdXJcbiAgICAgICAgZGVsZXRlQWZ0ZXI6IER1cmF0aW9uLmRheXMoUkVURU5USU9OX1BFUklPRFMuRU5URVJQUklTRV9DT01QTElBTkNFKSxcbiAgICAgICAgbW92ZVRvQ29sZFN0b3JhZ2VBZnRlcjogRHVyYXRpb24uZGF5cyhcbiAgICAgICAgICBSRVRFTlRJT05fUEVSSU9EUy5DT0xEX1NUT1JBR0VfT05FX1lFQVJcbiAgICAgICAgKSxcbiAgICAgICAgc3RhcnRXaW5kb3c6IEJBQ0tVUF9XSU5ET1dTLlNUQVJULFxuICAgICAgICBjb21wbGV0aW9uV2luZG93OiBCQUNLVVBfV0lORE9XUy5DT01QTEVUSU9OX1NIT1JULFxuICAgICAgICBjb3B5QWN0aW9uczogY29tcGxpYW5jZUNvcHlBY3Rpb25zXG4gICAgICB9KVxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvcHlBY3Rpb25zKFxuICAgIHBsYW5OYW1lOiBzdHJpbmcsXG4gICAgcmVwbGljYXRpb25WYXVsdEFybj86IHN0cmluZyxcbiAgICBkaXNhc3RlclJlY292ZXJ5VmF1bHRBcm4/OiBzdHJpbmcsXG4gICAgZGVsZXRlQWZ0ZXI/OiBEdXJhdGlvbixcbiAgICBtb3ZlVG9Db2xkU3RvcmFnZUFmdGVyPzogRHVyYXRpb25cbiAgKTogQmFja3VwUGxhbkNvcHlBY3Rpb25Qcm9wc1tdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBhY3Rpb25zOiBCYWNrdXBQbGFuQ29weUFjdGlvblByb3BzW10gPSBbXTtcblxuICAgIC8vIENyb3NzLXJlZ2lvbiByZXBsaWNhdGlvblxuICAgIGlmIChyZXBsaWNhdGlvblZhdWx0QXJuKSB7XG4gICAgICBjb25zdCByZXBsaWNhdGlvbkFjdGlvbjogQmFja3VwUGxhbkNvcHlBY3Rpb25Qcm9wcyA9IHtcbiAgICAgICAgZGVzdGluYXRpb25CYWNrdXBWYXVsdDogVmF1bHQuZnJvbUJhY2t1cFZhdWx0QXJuKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYCR7cGxhbk5hbWV9UmVwbGljYXRpb25WYXVsdFJlZmAsXG4gICAgICAgICAgcmVwbGljYXRpb25WYXVsdEFyblxuICAgICAgICApLFxuICAgICAgICAuLi4oZGVsZXRlQWZ0ZXIgJiYgeyBkZWxldGVBZnRlciB9KSxcbiAgICAgICAgLy8gT25seSBhZGQgY29sZCBzdG9yYWdlIGlmIHNwZWNpZmllZCBhbmQgPj0gOTAgZGF5c1xuICAgICAgICAuLi4obW92ZVRvQ29sZFN0b3JhZ2VBZnRlciAmJlxuICAgICAgICBtb3ZlVG9Db2xkU3RvcmFnZUFmdGVyLnRvRGF5cygpID49XG4gICAgICAgICAgUkVURU5USU9OX1BFUklPRFMuQ09MRF9TVE9SQUdFX01JTklNVU1cbiAgICAgICAgICA/IHsgbW92ZVRvQ29sZFN0b3JhZ2VBZnRlciB9XG4gICAgICAgICAgOiB7fSlcbiAgICAgIH07XG4gICAgICBhY3Rpb25zLnB1c2gocmVwbGljYXRpb25BY3Rpb24pO1xuICAgIH1cblxuICAgIC8vIENyb3NzLWFjY291bnQgRFIgdmF1bHRcbiAgICBpZiAoZGlzYXN0ZXJSZWNvdmVyeVZhdWx0QXJuKSB7XG4gICAgICBjb25zdCBkckFjdGlvbjogQmFja3VwUGxhbkNvcHlBY3Rpb25Qcm9wcyA9IHtcbiAgICAgICAgZGVzdGluYXRpb25CYWNrdXBWYXVsdDogVmF1bHQuZnJvbUJhY2t1cFZhdWx0QXJuKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYCR7cGxhbk5hbWV9RGlzYXN0ZXJSZWNvdmVyeVZhdWx0UmVmYCxcbiAgICAgICAgICBkaXNhc3RlclJlY292ZXJ5VmF1bHRBcm5cbiAgICAgICAgKSxcbiAgICAgICAgLi4uKGRlbGV0ZUFmdGVyICYmIHsgZGVsZXRlQWZ0ZXIgfSksXG4gICAgICAgIC8vIE9ubHkgYWRkIGNvbGQgc3RvcmFnZSBpZiBzcGVjaWZpZWQgYW5kID49IDkwIGRheXNcbiAgICAgICAgLi4uKG1vdmVUb0NvbGRTdG9yYWdlQWZ0ZXIgJiZcbiAgICAgICAgbW92ZVRvQ29sZFN0b3JhZ2VBZnRlci50b0RheXMoKSA+PVxuICAgICAgICAgIFJFVEVOVElPTl9QRVJJT0RTLkNPTERfU1RPUkFHRV9NSU5JTVVNXG4gICAgICAgICAgPyB7IG1vdmVUb0NvbGRTdG9yYWdlQWZ0ZXIgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9O1xuICAgICAgYWN0aW9ucy5wdXNoKGRyQWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9ucy5sZW5ndGggPiAwID8gYWN0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|