@fjall/components-infrastructure 0.88.1 → 0.88.4

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.
Files changed (146) hide show
  1. package/dist/lib/app.d.ts +34 -11
  2. package/dist/lib/app.js +83 -39
  3. package/dist/lib/aspects/index.d.ts +1 -0
  4. package/dist/lib/aspects/index.js +6 -0
  5. package/dist/lib/config/aws/accountAuditRole.d.ts +20 -0
  6. package/dist/lib/config/aws/accountAuditRole.js +38 -0
  7. package/dist/lib/config/aws/accountMonitoringRole.d.ts +22 -0
  8. package/dist/lib/config/aws/accountMonitoringRole.js +133 -0
  9. package/dist/lib/config/aws/cloudTrail.d.ts +0 -3
  10. package/dist/lib/config/aws/cloudTrail.js +2 -2
  11. package/dist/lib/config/aws/disasterRecovery.js +26 -14
  12. package/dist/lib/config/aws/ecrDefaultImage.js +4 -3
  13. package/dist/lib/config/aws/identityCenter.d.ts +4 -4
  14. package/dist/lib/config/aws/identityCenter.js +17 -62
  15. package/dist/lib/config/aws/identityCenterGroupMembership.js +27 -37
  16. package/dist/lib/config/aws/index.d.ts +4 -7
  17. package/dist/lib/config/aws/index.js +5 -8
  18. package/dist/lib/config/aws/oidcConnector.d.ts +8 -0
  19. package/dist/lib/config/aws/oidcConnector.js +46 -0
  20. package/dist/lib/config/aws/platform.d.ts +2 -0
  21. package/dist/lib/config/aws/platform.js +6 -0
  22. package/dist/lib/config/index.d.ts +2 -0
  23. package/dist/lib/config/index.js +21 -0
  24. package/dist/lib/layers/layers/secrets-resolver/bin/resolve-secrets +30 -0
  25. package/dist/lib/layers/layers/secrets-resolver/bin/resolve-secrets.mjs +212 -0
  26. package/dist/lib/layers/secrets-resolver/bin/resolve-secrets +30 -0
  27. package/dist/lib/layers/secrets-resolver/bin/resolve-secrets.mjs +212 -0
  28. package/dist/lib/patterns/aws/account.js +45 -19
  29. package/dist/lib/patterns/aws/cdn.d.ts +19 -40
  30. package/dist/lib/patterns/aws/cdn.js +21 -17
  31. package/dist/lib/patterns/aws/compute.d.ts +6 -7
  32. package/dist/lib/patterns/aws/compute.js +7 -9
  33. package/dist/lib/patterns/aws/database.d.ts +9 -89
  34. package/dist/lib/patterns/aws/database.js +17 -40
  35. package/dist/lib/patterns/aws/index.d.ts +1 -1
  36. package/dist/lib/patterns/aws/index.js +2 -2
  37. package/dist/lib/patterns/aws/interfaces/cdn.d.ts +26 -0
  38. package/dist/lib/patterns/aws/interfaces/cdn.js +14 -0
  39. package/dist/lib/patterns/aws/interfaces/connector.d.ts +4 -181
  40. package/dist/lib/patterns/aws/interfaces/connector.js +16 -113
  41. package/dist/lib/patterns/aws/interfaces/index.d.ts +1 -0
  42. package/dist/lib/patterns/aws/interfaces/index.js +5 -2
  43. package/dist/lib/patterns/aws/interfaces/pattern.d.ts +6 -6
  44. package/dist/lib/patterns/aws/interfaces/pattern.js +1 -1
  45. package/dist/lib/patterns/aws/network.js +6 -9
  46. package/dist/lib/patterns/aws/organisation.d.ts +6 -17
  47. package/dist/lib/patterns/aws/organisation.js +22 -67
  48. package/dist/lib/patterns/aws/payload.js +11 -12
  49. package/dist/lib/patterns/aws/storage.d.ts +3 -2
  50. package/dist/lib/patterns/aws/storage.js +1 -1
  51. package/dist/lib/resources/aws/audit/auditRole.js +4 -4
  52. package/dist/lib/resources/aws/audit/index.d.ts +1 -0
  53. package/dist/lib/resources/aws/audit/index.js +6 -0
  54. package/dist/lib/resources/aws/backup/backupPlan.js +3 -2
  55. package/dist/lib/resources/aws/backup/backupVault.js +5 -3
  56. package/dist/lib/resources/aws/base/awsStack.d.ts +4 -2
  57. package/dist/lib/resources/aws/base/awsStack.js +8 -2
  58. package/dist/lib/resources/aws/cdn/cloudFront.d.ts +14 -0
  59. package/dist/lib/resources/aws/cdn/cloudFront.js +52 -18
  60. package/dist/lib/resources/aws/compute/ec2.js +18 -22
  61. package/dist/lib/resources/aws/compute/ecs.d.ts +9 -8
  62. package/dist/lib/resources/aws/compute/ecs.js +53 -41
  63. package/dist/lib/resources/aws/compute/index.d.ts +1 -0
  64. package/dist/lib/resources/aws/compute/index.js +2 -1
  65. package/dist/lib/resources/aws/compute/lambda.d.ts +12 -3
  66. package/dist/lib/resources/aws/compute/lambda.js +48 -36
  67. package/dist/lib/resources/aws/database/dynamodb.js +3 -13
  68. package/dist/lib/resources/aws/database/index.d.ts +8 -2
  69. package/dist/lib/resources/aws/database/index.js +19 -3
  70. package/dist/lib/resources/aws/database/rdsAurora.d.ts +2 -3
  71. package/dist/lib/resources/aws/database/rdsAurora.js +33 -69
  72. package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +6 -6
  73. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +25 -29
  74. package/dist/lib/resources/aws/database/rdsDefaults.d.ts +11 -0
  75. package/dist/lib/resources/aws/database/rdsDefaults.js +15 -0
  76. package/dist/lib/resources/aws/database/rdsHelpers.d.ts +39 -0
  77. package/dist/lib/resources/aws/database/rdsHelpers.js +75 -0
  78. package/dist/lib/resources/aws/database/rdsInstance.d.ts +7 -8
  79. package/dist/lib/resources/aws/database/rdsInstance.js +40 -84
  80. package/dist/lib/resources/aws/database/rdsProxyOutput.d.ts +7 -0
  81. package/dist/lib/resources/aws/database/rdsProxyOutput.js +18 -0
  82. package/dist/lib/resources/aws/iam/identityCenter/assignment.d.ts +0 -2
  83. package/dist/lib/resources/aws/iam/identityCenter/assignment.js +9 -45
  84. package/dist/lib/resources/aws/iam/identityCenter/group.d.ts +1 -3
  85. package/dist/lib/resources/aws/iam/identityCenter/group.js +7 -82
  86. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.d.ts +1 -3
  87. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +9 -93
  88. package/dist/lib/resources/aws/iam/index.d.ts +0 -1
  89. package/dist/lib/resources/aws/iam/index.js +1 -2
  90. package/dist/lib/resources/aws/index.d.ts +0 -1
  91. package/dist/lib/resources/aws/index.js +1 -2
  92. package/dist/lib/resources/aws/logging/cloudTrail.js +13 -3
  93. package/dist/lib/resources/aws/logging/index.d.ts +2 -0
  94. package/dist/lib/resources/aws/logging/index.js +19 -0
  95. package/dist/lib/resources/aws/messaging/index.d.ts +3 -2
  96. package/dist/lib/resources/aws/messaging/index.js +4 -3
  97. package/dist/lib/resources/aws/messaging/sqs.js +14 -11
  98. package/dist/lib/resources/aws/messaging/utils.d.ts +1 -2
  99. package/dist/lib/resources/aws/messaging/utils.js +3 -4
  100. package/dist/lib/resources/aws/monitoring/index.d.ts +0 -1
  101. package/dist/lib/resources/aws/monitoring/index.js +4 -17
  102. package/dist/lib/resources/aws/networking/hostedZone.d.ts +28 -0
  103. package/dist/lib/resources/aws/networking/hostedZone.js +153 -0
  104. package/dist/lib/resources/aws/networking/index.d.ts +2 -0
  105. package/dist/lib/resources/aws/networking/index.js +3 -1
  106. package/dist/lib/resources/aws/networking/ipamPool.js +110 -31
  107. package/dist/lib/resources/aws/networking/securityGroup.d.ts +5 -0
  108. package/dist/lib/resources/aws/networking/securityGroup.js +14 -0
  109. package/dist/lib/resources/aws/networking/vpc.js +9 -4
  110. package/dist/lib/resources/aws/organisation/costAllocationTagActivator.d.ts +17 -0
  111. package/dist/lib/resources/aws/organisation/costAllocationTagActivator.js +66 -0
  112. package/dist/lib/resources/aws/organisation/index.d.ts +1 -0
  113. package/dist/lib/resources/aws/organisation/index.js +4 -2
  114. package/dist/lib/resources/aws/secrets/index.d.ts +0 -1
  115. package/dist/lib/resources/aws/secrets/index.js +1 -2
  116. package/dist/lib/resources/aws/secrets/parameter.js +5 -3
  117. package/dist/lib/resources/aws/storage/ecr.d.ts +0 -1
  118. package/dist/lib/resources/aws/storage/ecr.js +5 -7
  119. package/dist/lib/resources/aws/storage/s3.d.ts +3 -3
  120. package/dist/lib/resources/aws/storage/s3.js +1 -1
  121. package/dist/lib/resources/aws/utilities/index.d.ts +5 -0
  122. package/dist/lib/resources/aws/utilities/index.js +22 -0
  123. package/dist/lib/utils/backupTierMapping.d.ts +11 -0
  124. package/dist/lib/utils/backupTierMapping.js +17 -0
  125. package/dist/lib/utils/capitaliseString.d.ts +6 -0
  126. package/dist/lib/utils/capitaliseString.js +10 -1
  127. package/dist/lib/utils/connections.d.ts +46 -0
  128. package/dist/lib/utils/connections.js +159 -0
  129. package/dist/lib/utils/connector.d.ts +183 -0
  130. package/dist/lib/utils/connector.js +117 -0
  131. package/dist/lib/utils/databaseTypes.d.ts +85 -0
  132. package/dist/lib/utils/databaseTypes.js +34 -0
  133. package/dist/lib/utils/env.d.ts +42 -0
  134. package/dist/lib/utils/env.js +128 -0
  135. package/dist/lib/utils/getConfig.d.ts +0 -2
  136. package/dist/lib/utils/getConfig.js +1 -4
  137. package/dist/lib/utils/index.d.ts +6 -0
  138. package/dist/lib/utils/index.js +7 -1
  139. package/dist/lib/utils/removalPolicy.d.ts +2 -0
  140. package/dist/lib/utils/removalPolicy.js +16 -0
  141. package/dist/lib/utils/resourceNaming.js +4 -7
  142. package/dist/lib/utils/standardTagsAspect.d.ts +4 -0
  143. package/dist/lib/utils/standardTagsAspect.js +8 -8
  144. package/dist/lib/utils/vpcUtils.d.ts +14 -0
  145. package/dist/lib/utils/vpcUtils.js +28 -0
  146. package/package.json +8 -8
@@ -3,23 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Organisation = void 0;
4
4
  const aws_cdk_lib_1 = require("aws-cdk-lib");
5
5
  const app_1 = require("../../app");
6
- const backupGlobalSettings_1 = require("../../config/aws/backupGlobalSettings");
7
6
  const identityCenter_1 = require("../../config/aws/identityCenter");
8
- const ipamDelegateAdmin_1 = require("../../config/aws/ipamDelegateAdmin");
9
- const ramSharing_1 = require("../../config/aws/ramSharing");
10
- const costAllocationTags_1 = require("../../config/aws/costAllocationTags");
11
- const organisationsAccess_1 = require("../../config/aws/organisationsAccess");
12
7
  const organisation_1 = require("../../resources/aws/organisation");
13
8
  const stripAndCamelCase_1 = require("../../utils/stripAndCamelCase");
14
9
  const getConfig_1 = require("../../utils/getConfig");
15
10
  /**
16
11
  * Organisation CDK stack.
17
12
  *
18
- * OU creation and account-to-OU placement are handled by CLI pre-deploy steps
19
- * (AwsAccountService). This stack focuses on:
13
+ * OU creation, account-to-OU placement, IPAM delegation, RAM sharing, trusted
14
+ * access, cost allocation tag activation, and backup settings are handled by CLI
15
+ * pre-deploy steps (AwsAccountService). This stack focuses on:
20
16
  * - Account CfnOutput references (for cross-stack consumption)
21
- * - IPAM delegation, RAM sharing, trusted access
22
- * - Cost allocation tags, Identity Center, backup settings
17
+ * - Identity Centre configuration
18
+ * - Cost allocation tag auto-activation (daily Lambda)
23
19
  */
24
20
  class Organisation extends aws_cdk_lib_1.Stack {
25
21
  constructor(id, props) {
@@ -54,7 +50,7 @@ class Organisation extends aws_cdk_lib_1.Stack {
54
50
  managementAccountId
55
51
  });
56
52
  this.createAccountReferences(props);
57
- this.setupOrganisationFeatures(props.costAllocationTags ?? config.costAllocationTags, props.identityCenter ?? true, props.backupSettings);
53
+ this.setupOrganisationFeatures(props.identityCenter ?? true, managementAccountId);
58
54
  }
59
55
  createAccountReferences(props) {
60
56
  for (const [, accountList] of Object.entries(props.accounts)) {
@@ -76,69 +72,28 @@ class Organisation extends aws_cdk_lib_1.Stack {
76
72
  }
77
73
  }
78
74
  }
79
- setupOrganisationFeatures(costAllocationTags, identityCenter, backupSettings) {
80
- const platformAccountId = this.getPlatformAccountId();
81
- // IPAM delegation requires the Platform account to exist.
82
- // On first deploy the account IDs aren't yet in config — skip until next deploy.
83
- if (platformAccountId) {
84
- this.setupIpamDelegation(platformAccountId);
85
- }
86
- this.enableRamSharing();
87
- this.enableTrustedAccess();
88
- this.enableCostAllocationTags(costAllocationTags);
89
- this.setupIdentityCenter(identityCenter);
90
- this.setupBackupGlobalSettings(backupSettings);
91
- }
92
- getPlatformAccountId() {
93
- const platformEntry = Object.entries(this.accountsConfig).find(([key]) => key.toLowerCase() === "platform");
94
- if (!platformEntry) {
95
- return undefined;
96
- }
97
- const account = platformEntry[1];
98
- const platformAccount = Array.isArray(account) ? account[0] : account;
99
- return this.accountMap[platformAccount.toLowerCase()];
100
- }
101
- setupIpamDelegation(platformAccountId) {
102
- new ipamDelegateAdmin_1.IpamDelegateAdmin(this, "IpamDelegateAdmin", {
103
- accountId: platformAccountId
104
- });
105
- }
106
- enableRamSharing() {
107
- new ramSharing_1.RamSharing(this, "RamSharing");
75
+ setupOrganisationFeatures(identityCenter, managementAccountId) {
76
+ this.setupIdentityCenter(identityCenter, managementAccountId);
77
+ this.setupCostAllocationTagActivator();
108
78
  }
109
- enableTrustedAccess() {
110
- new organisationsAccess_1.ActivateOrganisationsAccess(this, "ActivateOrganisationsAccess", {
111
- account: this.account,
112
- region: this.region
113
- });
79
+ setupCostAllocationTagActivator() {
80
+ new organisation_1.CostAllocationTagActivator(this, "CostAllocationTagActivator");
114
81
  }
115
- enableCostAllocationTags(costAllocationTags) {
116
- if (costAllocationTags.length > 0) {
117
- new costAllocationTags_1.CostAllocationTags(this, "CostAllocationTags", {
118
- costAllocationTags
119
- });
120
- }
121
- }
122
- setupIdentityCenter(identityCenter) {
82
+ setupIdentityCenter(identityCenter, managementAccountId) {
123
83
  if (identityCenter) {
84
+ // Exclude the management account from SSO assignments — only root
85
+ // IAM users should have direct access to the organisation account.
86
+ const ssoAccounts = {};
87
+ for (const [name, id] of Object.entries(this.accountMap)) {
88
+ if (id !== managementAccountId) {
89
+ ssoAccounts[name] = id;
90
+ }
91
+ }
124
92
  new identityCenter_1.IdentityCenter(this, "IdentityCenter", {
125
- accounts: this.accountMap
93
+ accounts: ssoAccounts
126
94
  });
127
95
  }
128
96
  }
129
- setupBackupGlobalSettings(backupSettings) {
130
- const defaultSettings = {
131
- enableCrossAccountBackup: true,
132
- enableDelegatedAdministrator: true,
133
- enableMpa: false
134
- };
135
- const settings = { ...defaultSettings, ...backupSettings };
136
- new backupGlobalSettings_1.BackupGlobalSettings(this, "BackupGlobalSettings", {
137
- account: this.account,
138
- region: this.region,
139
- ...settings
140
- });
141
- }
142
97
  getOrganisation() {
143
98
  return this.org;
144
99
  }
@@ -147,4 +102,4 @@ class Organisation extends aws_cdk_lib_1.Stack {
147
102
  }
148
103
  }
149
104
  exports.Organisation = Organisation;
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9vcmdhbmlzYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVFO0FBRXZFLG1DQUE0QjtBQUU1QixnRkFBNkU7QUFDN0Usb0VBQWlFO0FBQ2pFLDBFQUF1RTtBQUN2RSw0REFBeUQ7QUFDekQsNEVBRzZDO0FBQzdDLDhFQUFtRjtBQUNuRixtRUFHMEM7QUFDMUMscUVBQWtFO0FBQ2xFLHFEQUFrRDtBQXlCbEQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxtQkFBSztJQU9yQyxZQUFZLEVBQVUsRUFBRSxLQUF3QjtRQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFTLEdBQUUsQ0FBQztRQUUzQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJO1lBQ3ZCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtZQUNyQixPQUFPLEVBQUUsTUFBTSxDQUFDLFNBQVMsSUFBSSxFQUFFO1NBQ2hDLENBQUM7UUFFRixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkdBQTJHLENBQzVHLENBQUM7UUFDSixDQUFDO1FBRUQsS0FBSyxDQUFDLGFBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBcEJsQyxxQkFBZ0IsR0FBRyxjQUF1QixDQUFDO1FBRW5ELGdCQUFXLEdBQTBCLEVBQUUsQ0FBQztRQW9COUMsd0VBQXdFO1FBQ3hFLCtFQUErRTtRQUMvRSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JC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QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsa0JBQXlDO1FBQ3hFLElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xDLElBQUksdUNBQWtCLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO2dCQUNqRCxrQkFBa0I7YUFDbkIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxjQUF1QjtRQUNqRCxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLElBQUksK0JBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ3pDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVTthQUMxQixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHlCQUF5QixDQUMvQixjQUFvRDtRQUVwRCxNQUFNLGVBQWUsR0FBRztZQUN0Qix3QkFBd0IsRUFBRSxJQUFJO1lBQzlCLDRCQUE0QixFQUFFLElBQUk7WUFDbEMsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxlQUFlLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUUzRCxJQUFJLDJDQUFvQixDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUNyRCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsUUFBUTtTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxlQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRU0sV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBN0tELG9DQTZLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRW52aXJvbm1lbnQsIFN0YWNrLCB0eXBlIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuaW1wb3J0IEFwcCBmcm9tIFwiLi4vLi4vYXBwXCI7XG5cbmltcG9ydCB7IEJhY2t1cEdsb2JhbFNldHRpbmdzIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvYmFja3VwR2xvYmFsU2V0dGluZ3NcIjtcbmltcG9ydCB7IElkZW50aXR5Q2VudGVyIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaWRlbnRpdHlDZW50ZXJcIjtcbmltcG9ydCB7IElwYW1EZWxlZ2F0ZUFkbWluIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaXBhbURlbGVnYXRlQWRtaW5cIjtcbmltcG9ydCB7IFJhbVNoYXJpbmcgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9yYW1TaGFyaW5nXCI7XG5pbXBvcnQge1xuICBDb3N0QWxsb2NhdGlvblRhZ3MsXG4gIHR5cGUgSUNvc3RBbGxvY2F0aW9uVGFnc1xufSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9jb3N0QWxsb2NhdGlvblRhZ3NcIjtcbmltcG9ydCB7IEFjdGl2YXRlT3JnYW5pc2F0aW9uc0FjY2VzcyB9IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL29yZ2FuaXNhdGlvbnNBY2Nlc3NcIjtcbmltcG9ydCB7XG4gIE9yZ2FuaXNhdGlvblJlc291cmNlLFxuICBPcmdhbmlzYXRpb25BY2NvdW50XG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL29yZ2FuaXNhdGlvblwiO1xuaW1wb3J0IHsgc3RyaXBBbmRDYW1lbENhc2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaXBBbmRDYW1lbENhc2VcIjtcbmltcG9ydCB7IGdldENvbmZpZyB9IGZyb20gXCIuLi8uLi91dGlscy9nZXRDb25maWdcIjtcblxudHlwZSBFeHRlbmRlZFN0YWNrUHJvcHMgPSBPbWl0PFN0YWNrUHJvcHMsIFwiZW52XCI+ICYge1xuICBlbnY/OiBSZXF1aXJlZDxQaWNrPEVudmlyb25tZW50LCBcInJlZ2lvblwiIHwgXCJhY2NvdW50XCI+PiAmXG4gICAgUGFydGlhbDxPbWl0PEVudmlyb25tZW50LCBcInJlZ2lvblwiIHwgXCJhY2NvdW50XCI+Pjtcbn07XG5cbmV4cG9ydCB0eXBlIEFjY291bnRzQ29uZmlnID0ge1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiByZWFkb25seSBzdHJpbmdbXSB8IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pc2F0aW9uUHJvcHMgZXh0ZW5kcyBFeHRlbmRlZFN0YWNrUHJvcHMge1xuICBvcmdhbmlzYXRpb25OYW1lOiBzdHJpbmc7XG4gIGFjY291bnRzOiBBY2NvdW50c0NvbmZpZztcbiAgb3JnRW1haWw6IHN0cmluZztcbiAgYWNjb3VudElkcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNvc3RBbGxvY2F0aW9uVGFncz86IElDb3N0QWxsb2NhdGlvblRhZ3NbXTtcbiAgaWRlbnRpdHlDZW50ZXI/OiBib29sZWFuO1xuICBiYWNrdXBTZXR0aW5ncz86IHtcbiAgICBlbmFibGVDcm9zc0FjY291bnRCYWNrdXA/OiBib29sZWFuO1xuICAgIGVuYWJsZURlbGVnYXRlZEFkbWluaXN0cmF0b3I/OiBib29sZWFuO1xuICAgIGVuYWJsZU1wYT86IGJvb2xlYW47XG4gIH07XG59XG5cbi8qKlxuICogT3JnYW5pc2F0aW9uIENESyBzdGFjay5cbiAqXG4gKiBPVSBjcmVhdGlvbiBhbmQgYWNjb3VudC10by1PVSBwbGFjZW1lbnQgYXJlIGhhbmRsZWQgYnkgQ0xJIHByZS1kZXBsb3kgc3RlcHNcbiAqIChBd3NBY2NvdW50U2VydmljZSkuIFRoaXMgc3RhY2sgZm9jdXNlcyBvbjpcbiAqIC0gQWNjb3VudCBDZm5PdXRwdXQgcmVmZXJlbmNlcyAoZm9yIGNyb3NzLXN0YWNrIGNvbnN1bXB0aW9uKVxuICogLSBJUEFNIGRlbGVnYXRpb24sIFJBTSBzaGFyaW5nLCB0cnVzdGVkIGFjY2Vzc1xuICogLSBDb3N0IGFsbG9jYXRpb24gdGFncywgSWRlbnRpdHkgQ2VudGVyLCBiYWNrdXAgc2V0dGluZ3NcbiAqL1xuZXhwb3J0IGNsYXNzIE9yZ2FuaXNhdGlvbiBleHRlbmRzIFN0YWNrIHtcbiAgcHVibGljIHJlYWRvbmx5IG9yZ2FuaXNhdGlvblR5cGUgPSBcIm9yZ2FuaXNhdGlvblwiIGFzIGNvbnN0O1xuICBwcml2YXRlIG9yZzogT3JnYW5pc2F0aW9uUmVzb3VyY2U7XG4gIHByaXZhdGUgYWNjb3VudFJlZnM6IE9yZ2FuaXNhdGlvbkFjY291bnRbXSA9IFtdO1xuICBwcml2YXRlIGFjY291bnRNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHByaXZhdGUgYWNjb3VudHNDb25maWc6IEFjY291bnRzQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIHByb3BzOiBPcmdhbmlzYXRpb25Qcm9wcykge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuXG4gICAgY29uc3QgZW52ID0gcHJvcHMuZW52ID8/IHtcbiAgICAgIHJlZ2lvbjogY29uZmlnLnJlZ2lvbixcbiAgICAgIGFjY291bnQ6IGNvbmZpZy5hY2NvdW50SWQgPz8gXCJcIlxuICAgIH07XG5cbiAgICBpZiAoIWVudi5hY2NvdW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiT3JnYW5pc2F0aW9uIHJlcXVpcmVzIGFuIGFjY291bnQgSUQuIFByb3ZpZGUgaXQgdmlhIGVudi5hY2NvdW50IG9yIGVuc3VyZSBDREsgY29udGV4dCBpbmNsdWRlcyBhY2NvdW50SWQuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3VwZXIoQXBwLmdldEluc3RhbmNlKCksIGlkLCB7IC4uLnByb3BzLCBlbnYgfSk7XG5cbiAgICAvLyBOb3JtYWxpc2UgYWNjb3VudCBtYXAga2V5cyB0byBsb3dlcmNhc2UgZm9yIGNhc2UtaW5zZW5zaXRpdmUgbG9va3Vwcy5cbiAgICAvLyBwcm92aWRlckFjY291bnRzIHN0b3JlcyBuYW1lcyBhcyBsb3dlcmNhc2U7IEFDQ09VTlRTIGNvbmZpZyB1c2VzIFBhc2NhbENhc2UuXG4gICAgY29uc3QgcmF3TWFwID0gcHJvcHMuYWNjb3VudElkcyA/PyBjb25maWcuYWNjb3VudElkcyA/PyB7fTtcbiAgICB0aGlzLmFjY291bnRNYXAgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyYXdNYXApKSB7XG4gICAgICB0aGlzLmFjY291bnRNYXBba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWU7XG4gICAgfVxuICAgIHRoaXMuYWNjb3VudHNDb25maWcgPSBwcm9wcy5hY2NvdW50cztcblxuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5ub2RlLnRyeUdldENvbnRleHQoXCJvcmdJZFwiKTtcbiAgICBjb25zdCByb290SWQgPSB0aGlzLm5vZGUudHJ5R2V0Q29udGV4dChcInJvb3RJZFwiKTtcbiAgICBjb25zdCBtYW5hZ2VtZW50QWNjb3VudElkID1cbiAgICAgIHRoaXMubm9kZS50cnlHZXRDb250ZXh0KFwibWFuYWdlbWVudEFjY291bnRJZFwiKSA/PyB0aGlzLmFjY291bnQ7XG5cbiAgICBpZiAoIW9yZ0lkIHx8ICFyb290SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJvcmdJZCBhbmQgcm9vdElkIG11c3QgYmUgcHJvdmlkZWQgdmlhIENESyBjb250ZXh0LiBSdW4gZGVwbG95bWVudCB0aHJvdWdoIHRoZSBGamFsbCBDTEkuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5vcmcgPSBuZXcgT3JnYW5pc2F0aW9uUmVzb3VyY2UodGhpcywgXCJPcmdhbmlzYXRpb25cIiwge1xuICAgICAgb3JnSWQsXG4gICAgICByb290SWQsXG4gICAgICBtYW5hZ2VtZW50QWNjb3VudElkXG4gICAgfSk7XG4gICAgdGhpcy5jcmVhdGVBY2NvdW50UmVmZXJlbmNlcyhwcm9wcyk7XG4gICAgdGhpcy5zZXR1cE9yZ2FuaXNhdGlvbkZlYXR1cmVzKFxuICAgICAgcHJvcHMuY29zdEFsbG9jYXRpb25UYWdzID8/IGNvbmZpZy5jb3N0QWxsb2NhdGlvblRhZ3MsXG4gICAgICBwcm9wcy5pZGVudGl0eUNlbnRlciA/PyB0cnVlLFxuICAgICAgcHJvcHMuYmFja3VwU2V0dGluZ3NcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBY2NvdW50UmVmZXJlbmNlcyhwcm9wczogT3JnYW5pc2F0aW9uUHJvcHMpIHtcbiAgICBmb3IgKGNvbnN0IFssIGFjY291bnRMaXN0XSBvZiBPYmplY3QuZW50cmllcyhwcm9wcy5hY2NvdW50cykpIHtcbiAgICAgIGNvbnN0IGFjY291bnRzQXJyYXkgPSBBcnJheS5pc0FycmF5KGFjY291bnRMaXN0KVxuICAgICAgICA/IGFjY291bnRMaXN0XG4gICAgICAgIDogW2FjY291bnRMaXN0XTtcblxuICAgICAgZm9yIChjb25zdCBhY2NvdW50TmFtZSBvZiBhY2NvdW50c0FycmF5KSB7XG4gICAgICAgIGNvbnN0IGFjY291bnROYW1lSWQgPSBzdHJpcEFuZENhbWVsQ2FzZShhY2NvdW50TmFtZSk7XG4gICAgICAgIGNvbnN0IGFjY291bnRJZCA9IHRoaXMuYWNjb3VudE1hcFthY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoIWFjY291bnRJZCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmID0gbmV3IE9yZ2FuaXNhdGlvbkFjY291bnQodGhpcywgYCR7YWNjb3VudE5hbWVJZH1BY2NvdW50YCwge1xuICAgICAgICAgIGFjY291bnRJZCxcbiAgICAgICAgICBtYW5hZ2VtZW50QWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgICAgICAgb3JnSWQ6IHRoaXMub3JnLm9yZ0lkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWNjb3VudFJlZnMucHVzaChyZWYpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBPcmdhbmlzYXRpb25GZWF0dXJlcyhcbiAgICBjb3N0QWxsb2NhdGlvblRhZ3M6IElDb3N0QWxsb2NhdGlvblRhZ3NbXSxcbiAgICBpZGVudGl0eUNlbnRlcjogYm9vbGVhbixcbiAgICBiYWNrdXBTZXR0aW5ncz86IE9yZ2FuaXNhdGlvblByb3BzW1wiYmFja3VwU2V0dGluZ3NcIl1cbiAgKSB7XG4gICAgY29uc3QgcGxhdGZvcm1BY2NvdW50SWQgPSB0aGlzLmdldFBsYXRmb3JtQWNjb3VudElkKCk7XG5cbiAgICAvLyBJUEFNIGRlbGVnYXRpb24gcmVxdWlyZXMgdGhlIFBsYXRmb3JtIGFjY291bnQgdG8gZXhpc3QuXG4gICAgLy8gT24gZmlyc3QgZGVwbG95IHRoZSBhY2NvdW50IElEcyBhcmVuJ3QgeWV0IGluIGNvbmZpZyDigJQgc2tpcCB1bnRpbCBuZXh0IGRlcGxveS5cbiAgICBpZiAocGxhdGZvcm1BY2NvdW50SWQpIHtcbiAgICAgIHRoaXMuc2V0dXBJcGFtRGVsZWdhdGlvbihwbGF0Zm9ybUFjY291bnRJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5lbmFibGVSYW1TaGFyaW5nKCk7XG4gICAgdGhpcy5lbmFibGVUcnVzdGVkQWNjZXNzKCk7XG4gICAgdGhpcy5lbmFibGVDb3N0QWxsb2NhdGlvblRhZ3MoY29zdEFsbG9jYXRpb25UYWdzKTtcbiAgICB0aGlzLnNldHVwSWRlbnRpdHlDZW50ZXIoaWRlbnRpdHlDZW50ZXIpO1xuICAgIHRoaXMuc2V0dXBCYWNrdXBHbG9iYWxTZXR0aW5ncyhiYWNrdXBTZXR0aW5ncyk7XG4gIH1cblxuICBwcml2YXRlIGdldFBsYXRmb3JtQWNjb3VudElkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGxhdGZvcm1FbnRyeSA9IE9iamVjdC5lbnRyaWVzKHRoaXMuYWNjb3VudHNDb25maWcpLmZpbmQoXG4gICAgICAoW2tleV0pID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSBcInBsYXRmb3JtXCJcbiAgICApO1xuXG4gICAgaWYgKCFwbGF0Zm9ybUVudHJ5KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnQgPSBwbGF0Zm9ybUVudHJ5WzFdO1xuICAgIGNvbnN0IHBsYXRmb3JtQWNjb3VudCA9IEFycmF5LmlzQXJyYXkoYWNjb3VudCkgPyBhY2NvdW50WzBdIDogYWNjb3VudDtcbiAgICByZXR1cm4gdGhpcy5hY2NvdW50TWFwW3BsYXRmb3JtQWNjb3VudC50b0xvd2VyQ2FzZSgpXTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBJcGFtRGVsZWdhdGlvbihwbGF0Zm9ybUFjY291bnRJZDogc3RyaW5nKSB7XG4gICAgbmV3IElwYW1EZWxlZ2F0ZUFkbWluKHRoaXMsIFwiSXBhbURlbGVnYXRlQWRtaW5cIiwge1xuICAgICAgYWNjb3VudElkOiBwbGF0Zm9ybUFjY291bnRJZFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVSYW1TaGFyaW5nKCkge1xuICAgIG5ldyBSYW1TaGFyaW5nKHRoaXMsIFwiUmFtU2hhcmluZ1wiKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlVHJ1c3RlZEFjY2VzcygpIHtcbiAgICBuZXcgQWN0aXZhdGVPcmdhbmlzYXRpb25zQWNjZXNzKHRoaXMsIFwiQWN0aXZhdGVPcmdhbmlzYXRpb25zQWNjZXNzXCIsIHtcbiAgICAgIGFjY291bnQ6IHRoaXMuYWNjb3VudCxcbiAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb25cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlQ29zdEFsbG9jYXRpb25UYWdzKGNvc3RBbGxvY2F0aW9uVGFnczogSUNvc3RBbGxvY2F0aW9uVGFnc1tdKSB7XG4gICAgaWYgKGNvc3RBbGxvY2F0aW9uVGFncy5sZW5ndGggPiAwKSB7XG4gICAgICBuZXcgQ29zdEFsbG9jYXRpb25UYWdzKHRoaXMsIFwiQ29zdEFsbG9jYXRpb25UYWdzXCIsIHtcbiAgICAgICAgY29zdEFsbG9jYXRpb25UYWdzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwSWRlbnRpdHlDZW50ZXIoaWRlbnRpdHlDZW50ZXI6IGJvb2xlYW4pIHtcbiAgICBpZiAoaWRlbnRpdHlDZW50ZXIpIHtcbiAgICAgIG5ldyBJZGVudGl0eUNlbnRlcih0aGlzLCBcIklkZW50aXR5Q2VudGVyXCIsIHtcbiAgICAgICAgYWNjb3VudHM6IHRoaXMuYWNjb3VudE1hcFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEJhY2t1cEdsb2JhbFNldHRpbmdzKFxuICAgIGJhY2t1cFNldHRpbmdzPzogT3JnYW5pc2F0aW9uUHJvcHNbXCJiYWNrdXBTZXR0aW5nc1wiXVxuICApIHtcbiAgICBjb25zdCBkZWZhdWx0U2V0dGluZ3MgPSB7XG4gICAgICBlbmFibGVDcm9zc0FjY291bnRCYWNrdXA6IHRydWUsXG4gICAgICBlbmFibGVEZWxlZ2F0ZWRBZG1pbmlzdHJhdG9yOiB0cnVlLFxuICAgICAgZW5hYmxlTXBhOiBmYWxzZVxuICAgIH07XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IHsgLi4uZGVmYXVsdFNldHRpbmdzLCAuLi5iYWNrdXBTZXR0aW5ncyB9O1xuXG4gICAgbmV3IEJhY2t1cEdsb2JhbFNldHRpbmdzKHRoaXMsIFwiQmFja3VwR2xvYmFsU2V0dGluZ3NcIiwge1xuICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgIC4uLnNldHRpbmdzXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0T3JnYW5pc2F0aW9uKCk6IE9yZ2FuaXNhdGlvblJlc291cmNlIHtcbiAgICByZXR1cm4gdGhpcy5vcmc7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWNjb3VudHMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuYWNjb3VudE1hcDtcbiAgfVxufVxuIl19
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9vcmdhbmlzYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVFO0FBRXZFLG1DQUE0QjtBQUU1QixvRUFBaUU7QUFDakUsbUVBSTBDO0FBQzFDLHFFQUFrRTtBQUNsRSxxREFBa0Q7QUFtQmxEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQWEsWUFBYSxTQUFRLG1CQUFLO0lBT3JDLFlBQVksRUFBVSxFQUFFLEtBQXdCO1FBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQVMsR0FBRSxDQUFDO1FBRTNCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUk7WUFDdkIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ3JCLE9BQU8sRUFBRSxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUU7U0FDaEMsQ0FBQztRQUVGLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FDYiwyR0FBMkcsQ0FDNUcsQ0FBQztRQUNKLENBQUM7UUFFRCxLQUFLLENBQUMsYUFBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFwQmxDLHFCQUFnQixHQUFHLGNBQXVCLENBQUM7UUFFbkQsZ0JBQVcsR0FBMEIsRUFBRSxDQUFDO1FBb0I5Qyx3RUFBd0U7UUFDeEUsK0VBQStFO1FBQy9FLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFB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SSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pELElBQUksRUFBRSxLQUFLLG1CQUFtQixFQUFFLENBQUM7b0JBQy9CLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSwrQkFBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDekMsUUFBUSxFQUFFLFdBQVc7YUFDdEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTSxlQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRU0sV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBdkhELG9DQXVIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRW52aXJvbm1lbnQsIFN0YWNrLCB0eXBlIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuaW1wb3J0IEFwcCBmcm9tIFwiLi4vLi4vYXBwXCI7XG5cbmltcG9ydCB7IElkZW50aXR5Q2VudGVyIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaWRlbnRpdHlDZW50ZXJcIjtcbmltcG9ydCB7XG4gIE9yZ2FuaXNhdGlvblJlc291cmNlLFxuICBPcmdhbmlzYXRpb25BY2NvdW50LFxuICBDb3N0QWxsb2NhdGlvblRhZ0FjdGl2YXRvclxufSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9vcmdhbmlzYXRpb25cIjtcbmltcG9ydCB7IHN0cmlwQW5kQ2FtZWxDYXNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmlwQW5kQ2FtZWxDYXNlXCI7XG5pbXBvcnQgeyBnZXRDb25maWcgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZ2V0Q29uZmlnXCI7XG5cbnR5cGUgRXh0ZW5kZWRTdGFja1Byb3BzID0gT21pdDxTdGFja1Byb3BzLCBcImVudlwiPiAmIHtcbiAgZW52PzogUmVxdWlyZWQ8UGljazxFbnZpcm9ubWVudCwgXCJyZWdpb25cIiB8IFwiYWNjb3VudFwiPj4gJlxuICAgIFBhcnRpYWw8T21pdDxFbnZpcm9ubWVudCwgXCJyZWdpb25cIiB8IFwiYWNjb3VudFwiPj47XG59O1xuXG5leHBvcnQgdHlwZSBBY2NvdW50c0NvbmZpZyA9IHtcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogcmVhZG9ubHkgc3RyaW5nW10gfCBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXNhdGlvblByb3BzIGV4dGVuZHMgRXh0ZW5kZWRTdGFja1Byb3BzIHtcbiAgb3JnYW5pc2F0aW9uTmFtZTogc3RyaW5nO1xuICBhY2NvdW50czogQWNjb3VudHNDb25maWc7XG4gIG9yZ0VtYWlsOiBzdHJpbmc7XG4gIGFjY291bnRJZHM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBpZGVudGl0eUNlbnRlcj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3JnYW5pc2F0aW9uIENESyBzdGFjay5cbiAqXG4gKiBPVSBjcmVhdGlvbiwgYWNjb3VudC10by1PVSBwbGFjZW1lbnQsIElQQU0gZGVsZWdhdGlvbiwgUkFNIHNoYXJpbmcsIHRydXN0ZWRcbiAqIGFjY2VzcywgY29zdCBhbGxvY2F0aW9uIHRhZyBhY3RpdmF0aW9uLCBhbmQgYmFja3VwIHNldHRpbmdzIGFyZSBoYW5kbGVkIGJ5IENMSVxuICogcHJlLWRlcGxveSBzdGVwcyAoQXdzQWNjb3VudFNlcnZpY2UpLiBUaGlzIHN0YWNrIGZvY3VzZXMgb246XG4gKiAtIEFjY291bnQgQ2ZuT3V0cHV0IHJlZmVyZW5jZXMgKGZvciBjcm9zcy1zdGFjayBjb25zdW1wdGlvbilcbiAqIC0gSWRlbnRpdHkgQ2VudHJlIGNvbmZpZ3VyYXRpb25cbiAqIC0gQ29zdCBhbGxvY2F0aW9uIHRhZyBhdXRvLWFjdGl2YXRpb24gKGRhaWx5IExhbWJkYSlcbiAqL1xuZXhwb3J0IGNsYXNzIE9yZ2FuaXNhdGlvbiBleHRlbmRzIFN0YWNrIHtcbiAgcHVibGljIHJlYWRvbmx5IG9yZ2FuaXNhdGlvblR5cGUgPSBcIm9yZ2FuaXNhdGlvblwiIGFzIGNvbnN0O1xuICBwcml2YXRlIG9yZzogT3JnYW5pc2F0aW9uUmVzb3VyY2U7XG4gIHByaXZhdGUgYWNjb3VudFJlZnM6IE9yZ2FuaXNhdGlvbkFjY291bnRbXSA9IFtdO1xuICBwcml2YXRlIGFjY291bnRNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHByaXZhdGUgYWNjb3VudHNDb25maWc6IEFjY291bnRzQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIHByb3BzOiBPcmdhbmlzYXRpb25Qcm9wcykge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuXG4gICAgY29uc3QgZW52ID0gcHJvcHMuZW52ID8/IHtcbiAgICAgIHJlZ2lvbjogY29uZmlnLnJlZ2lvbixcbiAgICAgIGFjY291bnQ6IGNvbmZpZy5hY2NvdW50SWQgPz8gXCJcIlxuICAgIH07XG5cbiAgICBpZiAoIWVudi5hY2NvdW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiT3JnYW5pc2F0aW9uIHJlcXVpcmVzIGFuIGFjY291bnQgSUQuIFByb3ZpZGUgaXQgdmlhIGVudi5hY2NvdW50IG9yIGVuc3VyZSBDREsgY29udGV4dCBpbmNsdWRlcyBhY2NvdW50SWQuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3VwZXIoQXBwLmdldEluc3RhbmNlKCksIGlkLCB7IC4uLnByb3BzLCBlbnYgfSk7XG5cbiAgICAvLyBOb3JtYWxpc2UgYWNjb3VudCBtYXAga2V5cyB0byBsb3dlcmNhc2UgZm9yIGNhc2UtaW5zZW5zaXRpdmUgbG9va3Vwcy5cbiAgICAvLyBwcm92aWRlckFjY291bnRzIHN0b3JlcyBuYW1lcyBhcyBsb3dlcmNhc2U7IEFDQ09VTlRTIGNvbmZpZyB1c2VzIFBhc2NhbENhc2UuXG4gICAgY29uc3QgcmF3TWFwID0gcHJvcHMuYWNjb3VudElkcyA/PyBjb25maWcuYWNjb3VudElkcyA/PyB7fTtcbiAgICB0aGlzLmFjY291bnRNYXAgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyYXdNYXApKSB7XG4gICAgICB0aGlzLmFjY291bnRNYXBba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWU7XG4gICAgfVxuICAgIHRoaXMuYWNjb3VudHNDb25maWcgPSBwcm9wcy5hY2NvdW50cztcblxuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5ub2RlLnRyeUdldENvbnRleHQoXCJvcmdJZFwiKTtcbiAgICBjb25zdCByb290SWQgPSB0aGlzLm5vZGUudHJ5R2V0Q29udGV4dChcInJvb3RJZFwiKTtcbiAgICBjb25zdCBtYW5hZ2VtZW50QWNjb3VudElkID1cbiAgICAgIHRoaXMubm9kZS50cnlHZXRDb250ZXh0KFwibWFuYWdlbWVudEFjY291bnRJZFwiKSA/PyB0aGlzLmFjY291bnQ7XG5cbiAgICBpZiAoIW9yZ0lkIHx8ICFyb290SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJvcmdJZCBhbmQgcm9vdElkIG11c3QgYmUgcHJvdmlkZWQgdmlhIENESyBjb250ZXh0LiBSdW4gZGVwbG95bWVudCB0aHJvdWdoIHRoZSBGamFsbCBDTEkuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5vcmcgPSBuZXcgT3JnYW5pc2F0aW9uUmVzb3VyY2UodGhpcywgXCJPcmdhbmlzYXRpb25cIiwge1xuICAgICAgb3JnSWQsXG4gICAgICByb290SWQsXG4gICAgICBtYW5hZ2VtZW50QWNjb3VudElkXG4gICAgfSk7XG4gICAgdGhpcy5jcmVhdGVBY2NvdW50UmVmZXJlbmNlcyhwcm9wcyk7XG4gICAgdGhpcy5zZXR1cE9yZ2FuaXNhdGlvbkZlYXR1cmVzKFxuICAgICAgcHJvcHMuaWRlbnRpdHlDZW50ZXIgPz8gdHJ1ZSxcbiAgICAgIG1hbmFnZW1lbnRBY2NvdW50SWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBY2NvdW50UmVmZXJlbmNlcyhwcm9wczogT3JnYW5pc2F0aW9uUHJvcHMpIHtcbiAgICBmb3IgKGNvbnN0IFssIGFjY291bnRMaXN0XSBvZiBPYmplY3QuZW50cmllcyhwcm9wcy5hY2NvdW50cykpIHtcbiAgICAgIGNvbnN0IGFjY291bnRzQXJyYXkgPSBBcnJheS5pc0FycmF5KGFjY291bnRMaXN0KVxuICAgICAgICA/IGFjY291bnRMaXN0XG4gICAgICAgIDogW2FjY291bnRMaXN0XTtcblxuICAgICAgZm9yIChjb25zdCBhY2NvdW50TmFtZSBvZiBhY2NvdW50c0FycmF5KSB7XG4gICAgICAgIGNvbnN0IGFjY291bnROYW1lSWQgPSBzdHJpcEFuZENhbWVsQ2FzZShhY2NvdW50TmFtZSk7XG4gICAgICAgIGNvbnN0IGFjY291bnRJZCA9IHRoaXMuYWNjb3VudE1hcFthY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoIWFjY291bnRJZCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmID0gbmV3IE9yZ2FuaXNhdGlvbkFjY291bnQodGhpcywgYCR7YWNjb3VudE5hbWVJZH1BY2NvdW50YCwge1xuICAgICAgICAgIGFjY291bnRJZCxcbiAgICAgICAgICBtYW5hZ2VtZW50QWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgICAgICAgb3JnSWQ6IHRoaXMub3JnLm9yZ0lkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWNjb3VudFJlZnMucHVzaChyZWYpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBPcmdhbmlzYXRpb25GZWF0dXJlcyhcbiAgICBpZGVudGl0eUNlbnRlcjogYm9vbGVhbixcbiAgICBtYW5hZ2VtZW50QWNjb3VudElkOiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5zZXR1cElkZW50aXR5Q2VudGVyKGlkZW50aXR5Q2VudGVyLCBtYW5hZ2VtZW50QWNjb3VudElkKTtcbiAgICB0aGlzLnNldHVwQ29zdEFsbG9jYXRpb25UYWdBY3RpdmF0b3IoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBDb3N0QWxsb2NhdGlvblRhZ0FjdGl2YXRvcigpIHtcbiAgICBuZXcgQ29zdEFsbG9jYXRpb25UYWdBY3RpdmF0b3IodGhpcywgXCJDb3N0QWxsb2NhdGlvblRhZ0FjdGl2YXRvclwiKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBJZGVudGl0eUNlbnRlcihcbiAgICBpZGVudGl0eUNlbnRlcjogYm9vbGVhbixcbiAgICBtYW5hZ2VtZW50QWNjb3VudElkOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKGlkZW50aXR5Q2VudGVyKSB7XG4gICAgICAvLyBFeGNsdWRlIHRoZSBtYW5hZ2VtZW50IGFjY291bnQgZnJvbSBTU08gYXNzaWdubWVudHMg4oCUIG9ubHkgcm9vdFxuICAgICAgLy8gSUFNIHVzZXJzIHNob3VsZCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIG9yZ2FuaXNhdGlvbiBhY2NvdW50LlxuICAgICAgY29uc3Qgc3NvQWNjb3VudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGlkXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmFjY291bnRNYXApKSB7XG4gICAgICAgIGlmIChpZCAhPT0gbWFuYWdlbWVudEFjY291bnRJZCkge1xuICAgICAgICAgIHNzb0FjY291bnRzW25hbWVdID0gaWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbmV3IElkZW50aXR5Q2VudGVyKHRoaXMsIFwiSWRlbnRpdHlDZW50ZXJcIiwge1xuICAgICAgICBhY2NvdW50czogc3NvQWNjb3VudHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRPcmdhbmlzYXRpb24oKTogT3JnYW5pc2F0aW9uUmVzb3VyY2Uge1xuICAgIHJldHVybiB0aGlzLm9yZztcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY2NvdW50cygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5hY2NvdW50TWFwO1xuICB9XG59XG4iXX0=
@@ -64,7 +64,8 @@ const PAYLOAD_DEFAULTS = {
64
64
  REVALIDATION_TIMEOUT: 300
65
65
  },
66
66
  CACHE: {
67
- MAX_AGE_SECONDS: 31536000 // 1 year
67
+ /** 1 year static assets are content-hashed so long caching is safe; maximises CDN hit rate */
68
+ MAX_AGE_SECONDS: 31536000
68
69
  },
69
70
  OPENNEXT: {
70
71
  ASSETS: ".open-next/assets",
@@ -80,14 +81,6 @@ const PAYLOAD_DEFAULTS = {
80
81
  ADMIN: "/admin/*"
81
82
  }
82
83
  };
83
- /**
84
- * Convert a name to a valid RDS database name (alphanumeric only).
85
- * CloudFormation EarlyValidation hook enforces: ^[a-zA-Z]{1}(?:-?[a-zA-Z0-9]){0,62}$
86
- * RDS API rejects hyphens. Intersection = alphanumeric only.
87
- */
88
- function toValidDatabaseName(name) {
89
- return name.toLowerCase().replace(/[^a-z0-9]/g, "");
90
- }
91
84
  /**
92
85
  * Extract root domain from a full domain name.
93
86
  * e.g., "cms.example.com" -> "example.com"
@@ -174,14 +167,14 @@ class Payload extends constructs_1.Construct {
174
167
  }
175
168
  buildBaseDatabaseProps(dbConfig) {
176
169
  return {
177
- databaseName: dbConfig.databaseName ?? toValidDatabaseName(this.props.name),
170
+ databaseName: dbConfig.databaseName ?? (0, capitaliseString_js_1.toValidDatabaseName)(this.props.name),
178
171
  databaseEngine: dbConfig.databaseEngine ?? "postgresql",
179
172
  backupRetention: dbConfig.backupRetention ?? PAYLOAD_DEFAULTS.DATABASE.BACKUP_RETENTION,
180
173
  deletionProtection: dbConfig.deletionProtection ??
181
174
  PAYLOAD_DEFAULTS.DATABASE.DELETION_PROTECTION,
182
175
  publiclyAccessible: dbConfig.publiclyAccessible,
183
176
  port: dbConfig.port,
184
- performanceInsights: dbConfig.performanceInsights,
177
+ databaseInsights: dbConfig.databaseInsights,
185
178
  proxy: dbConfig.proxy,
186
179
  credentials: dbConfig.credentials,
187
180
  snapshotIdentifier: dbConfig.snapshotIdentifier,
@@ -480,6 +473,9 @@ class Payload extends constructs_1.Construct {
480
473
  }
481
474
  resolveSimpleDomain() {
482
475
  const domain = this.props.domain;
476
+ if (!domain) {
477
+ throw new Error("Domain is required for simple domain resolution");
478
+ }
483
479
  const rootDomain = extractRootDomain(domain);
484
480
  const hostedZone = aws_route53_1.HostedZone.fromLookup(this, `${this.pascalName}HostedZone`, { domainName: rootDomain });
485
481
  const certificate = new aws_certificatemanager_1.Certificate(this, `${this.pascalName}Certificate`, {
@@ -490,6 +486,9 @@ class Payload extends constructs_1.Construct {
490
486
  }
491
487
  resolveAdvancedDomain() {
492
488
  const cdnConfig = this.props.cdn;
489
+ if (!cdnConfig?.domainNames?.length) {
490
+ throw new Error("CDN domain names are required for advanced domain resolution");
491
+ }
493
492
  const certificate = cdnConfig.certificate ??
494
493
  (cdnConfig.certificateArn
495
494
  ? aws_certificatemanager_1.Certificate.fromCertificateArn(this, `${this.pascalName}Certificate`, cdnConfig.certificateArn)
@@ -582,4 +581,4 @@ class Payload extends constructs_1.Construct {
582
581
  }
583
582
  }
584
583
  exports.Payload = Payload;
585
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvcGF5bG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7OztBQUVILDJDQUF1QztBQUN2Qyw2Q0FBK0M7QUFDL0MseURBQXFEO0FBQ3JELHVEQU1nQztBQUNoQywrRUFJNEM7QUFDNUMseURBQTRFO0FBQzVFLHlFQUFtRTtBQUtuRSwrQ0FPdUI7QUFDdkIsNkNBS3NCO0FBQ3RCLDZDQUEwRTtBQUMxRSxpREFJd0I7QUFDeEIscUNBQW9FO0FBQ3BFLHlFQUE4RDtBQUM5RCx5RUFBK0Q7QUFFL0QsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QixxRkFBcUY7SUFDckYsTUFBTSxFQUFFLE9BQU87SUFDZixtRkFBbUY7SUFDbkYsZUFBZSxFQUFFLFdBQVc7SUFDNUIsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFLFVBQW1CO1FBQ3pCLDhFQUE4RTtRQUM5RSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLG1CQUFtQixFQUFFLElBQUk7S0FDMUI7SUFDRCxPQUFPLEVBQUU7UUFDUCw2RkFBNkY7UUFDN0YsYUFBYSxFQUFFLElBQUk7UUFDbkIsK0RBQStEO1FBQy9ELGNBQWMsRUFBRSxFQUFFO1FBQ2xCLDJFQUEyRTtRQUMzRSxZQUFZLEVBQUUsSUFBSTtRQUNsQix3RUFBd0U7UUFDeEUsYUFBYSxFQUFFLEVBQUU7UUFDakIsNEZBQTRGO1FBQzVGLG1CQUFtQixFQUFFLEdBQUc7UUFDeEIsK0VBQStFO1FBQy9FLG9CQUFvQixFQUFFLEdBQUc7S0FDMUI7SUFDRCxLQUFLLEVBQUU7UUFDTCxlQUFlLEVBQUUsUUFBUSxDQUFDLFNBQVM7S0FDcEM7SUFDRCxRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUUsbUJBQW1CO1FBQzNCLEtBQUssRUFBRSxrQkFBa0I7UUFDekIsTUFBTSxFQUFFLHFDQUFxQztRQUM3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UUFBUTtvQkFDMUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUTtpQkFDM0I7Z0JBQ0QsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTthQUNyQixDQUFDO1lBQ0YsV0FBVyxFQUFFLHNDQUFzQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtTQUNyRSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBbm1CRCwwQkFtbUJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXlsb2FkIENNUyBQYXR0ZXJuLlxuICpcbiAqIEEgaGlnaC1sZXZlbCBwYXR0ZXJuIHRoYXQgY3JlYXRlcyBhbGwgaW5mcmFzdHJ1Y3R1cmUgcmVxdWlyZWQgZm9yIGFcbiAqIFBheWxvYWQgQ01TIGRlcGxveW1lbnQgdXNpbmcgT3Blbk5leHQuXG4gKlxuICogUmVzb3VyY2VzIGNyZWF0ZWQ6XG4gKiAtIFJEUyBQb3N0Z3JlU1FMIGRhdGFiYXNlIChBdXJvcmEgb3IgSW5zdGFuY2UpXG4gKiAtIDMgUzMgYnVja2V0cyAoYXNzZXRzLCBjYWNoZSwgbWVkaWEpXG4gKiAtIER5bmFtb0RCIHRhYmxlICh0YWcgY2FjaGUgd2l0aCBHU0kpXG4gKiAtIFNRUyBGSUZPIHF1ZXVlIChyZXZhbGlkYXRpb24pXG4gKiAtIDMgTGFtYmRhIGZ1bmN0aW9ucyAoc2VydmVyLCBpbWFnZSBvcHRpbWlzYXRpb24sIHJldmFsaWRhdGlvbilcbiAqIC0gQ2xvdWRGcm9udCBkaXN0cmlidXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcGF5bG9hZCA9IGFwcC5hZGRQYXR0ZXJuKFBhdHRlcm5GYWN0b3J5LmJ1aWxkKFwiUGF5bG9hZEFwcFwiLCB7XG4gKiAgIHR5cGU6IFwicGF5bG9hZFwiLFxuICogICBuYW1lOiBcIm15LWNtc1wiXG4gKiB9KSk7XG4gKlxuICogLy8gRXNjYXBlIGhhdGNoZXNcbiAqIHBheWxvYWQuZ2V0RGF0YWJhc2UoKS5ncmFudENvbm5lY3Qob3RoZXJMYW1iZGEpO1xuICovXG5cbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQsIFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zZWNyZXRzXCI7XG5pbXBvcnQge1xuICBDb2RlLFxuICBSdW50aW1lLFxuICBBcmNoaXRlY3R1cmUsXG4gIEZ1bmN0aW9uVXJsQXV0aFR5cGUsXG4gIHR5cGUgSUZ1bmN0aW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQge1xuICBDZXJ0aWZpY2F0ZSxcbiAgQ2VydGlmaWNhdGVWYWxpZGF0aW9uLFxuICB0eXBlIElDZXJ0aWZpY2F0ZVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuaW1wb3J0IHsgSG9zdGVkWm9uZSwgQVJlY29yZCwgUmVjb3JkVGFyZ2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXCI7XG5pbXBvcnQgeyBDbG91ZEZyb250VGFyZ2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHNcIjtcblxuaW1wb3J0IHR5cGUgQXBwIGZyb20gXCIuLi8uLi9hcHAuanNcIjtcbmltcG9ydCB7IHR5cGUgSVBheWxvYWRQcm9wcywgdHlwZSBJUGF5bG9hZCB9IGZyb20gXCIuL2ludGVyZmFjZXMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgdHlwZSBNYW5pZmVzdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvbWFuaWZlc3RXcml0ZXIuanNcIjtcbmltcG9ydCB7XG4gIHR5cGUgUmVsYXRpb25hbERhdGFiYXNlLFxuICB0eXBlIER5bmFtb0RCRGF0YWJhc2UsXG4gIERhdGFiYXNlRmFjdG9yeSxcbiAgdHlwZSBBdXJvcmFEYXRhYmFzZVByb3BzLFxuICB0eXBlIEluc3RhbmNlRGF0YWJhc2VQcm9wcyxcbiAgdHlwZSBEeW5hbW9EQkRhdGFiYXNlUHJvcHNcbn0gZnJvbSBcIi4vZGF0YWJhc2UuanNcIjtcbmltcG9ydCB7XG4gIENvbXB1dGVGYWN0b3J5LFxuICB0eXBlIExhbWJkYUNvbXB1dGUsXG4gIEludm9rZU1vZGUsXG4gIHR5cGUgQ29kZUxhbWJkYVByb3BzXG59IGZyb20gXCIuL2NvbXB1dGUuanNcIjtcbmltcG9ydCB7IFN0b3JhZ2VGYWN0b3J5LCB0eXBlIFN0b3JhZ2UsIHR5cGUgUzNQcm9wcyB9IGZyb20gXCIuL3N0b3JhZ2UuanNcIjtcbmltcG9ydCB7XG4gIE1lc3NhZ2luZ0ZhY3RvcnksXG4gIHR5cGUgUXVldWVNZXNzYWdpbmcsXG4gIHR5cGUgSVF1ZXVlUHJvcHNcbn0gZnJvbSBcIi4vbWVzc2FnaW5nLmpzXCI7XG5pbXBvcnQgeyBDZG5GYWN0b3J5LCB0eXBlIENkbiwgdHlwZSBTbWFydENkblByb3BzIH0gZnJvbSBcIi4vY2RuLmpzXCI7XG5pbXBvcnQgeyBGamFsbExvZ2dlciB9IGZyb20gXCIuLi8uLi91dGlscy92YWxpZGF0aW9uTG9nZ2VyLmpzXCI7XG5pbXBvcnQgeyB0b1Bhc2NhbENhc2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY2FwaXRhbGlzZVN0cmluZy5qc1wiO1xuXG5jb25zdCBQQVlMT0FEX0RFRkFVTFRTID0ge1xuICAvKiogUGF0aCB0byBPcGVuTmV4dCBvdXRwdXQgcmVsYXRpdmUgdG8gYXBwIGZvbGRlciAoQ0RLIHJ1bnMgZnJvbSBmamFsbC88YXBwbmFtZT4pICovXG4gIFNPVVJDRTogXCIuLi8uLlwiLFxuICAvKiogQ2xvdWRGcm9udCByZXF1aXJlcyB1cy1lYXN0LTEgZm9yIGNlcnRhaW4gcmVzb3VyY2VzOyB1c2VkIGFzIHJlZ2lvbiBmYWxsYmFjayAqL1xuICBGQUxMQkFDS19SRUdJT046IFwidXMtZWFzdC0xXCIsXG4gIERBVEFCQVNFOiB7XG4gICAgVFlQRTogXCJJbnN0YW5jZVwiIGFzIGNvbnN0LFxuICAgIC8qKiBBV1MgZGVmYXVsdDsgNyBkYXlzIGNvdmVycyBtb3N0IGFjY2lkZW50YWwgZGF0YSBsb3NzIHJlY292ZXJ5IHNjZW5hcmlvcyAqL1xuICAgIEJBQ0tVUF9SRVRFTlRJT046IDcsXG4gICAgREVMRVRJT05fUFJPVEVDVElPTjogdHJ1ZVxuICB9LFxuICBDT01QVVRFOiB7XG4gICAgLyoqIDEuNSBHQiBiYWxhbmNlcyBOZXh0LmpzIFNTUiBwZXJmb3JtYW5jZSB2cyBjb3N0OyBiZWxvdyB0aGlzIHJpc2tzIE9PTSBvbiBjb21wbGV4IHBhZ2VzICovXG4gICAgU0VSVkVSX01FTU9SWTogMTUzNixcbiAgICAvKiogQVBJIEdhdGV3YXkgZGVmYXVsdCBtYXg7IHN1ZmZpY2llbnQgZm9yIG1vc3QgU1NSIHJlbmRlcnMgKi9cbiAgICBTRVJWRVJfVElNRU9VVDogMzAsXG4gICAgLyoqIFNoYXJwIGltYWdlIHByb2Nlc3NpbmcgbmVlZHMgbWVtb3J5IHByb3BvcnRpb25hbCB0byBpbWFnZSBkaW1lbnNpb25zICovXG4gICAgSU1BR0VfTUVNT1JZOiAxNTM2LFxuICAgIC8qKiBJbWFnZSBwcm9jZXNzaW5nIHR5cGljYWxseSBjb21wbGV0ZXMgaW4gPDEwczsgMzBzIHByb3ZpZGVzIG1hcmdpbiAqL1xuICAgIElNQUdFX1RJTUVPVVQ6IDMwLFxuICAgIC8qKiBSZXZhbGlkYXRpb24gaXMgbGlnaHR3ZWlnaHQgKEhUVFAgY2FsbCArIGNhY2hlIHdyaXRlKTsgaGFsZiBvZiBzZXJ2ZXIgbWVtb3J5IHN1ZmZpY2VzICovXG4gICAgUkVWQUxJREFUSU9OX01FTU9SWTogNzY4LFxuICAgIC8qKiA1IG1pbnV0ZXMgYWxsb3dzIGJhdGNoIHJldmFsaWRhdGlvbiBvZiBtYW55IHBhZ2VzIGluIGEgc2luZ2xlIGludm9jYXRpb24gKi9cbiAgICBSRVZBTElEQVRJT05fVElNRU9VVDogMzAwXG4gIH0sXG4gIENBQ0hFOiB7XG4gICAgTUFYX0FHRV9TRUNPTkRTOiAzMTUzNjAwMCAvLyAxIHllYXJcbiAgfSxcbiAgT1BFTk5FWFQ6IHtcbiAgICBBU1NFVFM6IFwiLm9wZW4tbmV4dC9hc3NldHNcIixcbiAgICBDQUNIRTogXCIub3Blbi1uZXh0L2NhY2hlXCIsXG4gICAgU0VSVkVSOiBcIi5vcGVuLW5leHQvc2VydmVyLWZ1bmN0aW9ucy9kZWZhdWx0XCIsXG4gICAgSU1BR0U6IFwiLm9wZW4tbmV4dC9pbWFnZS1vcHRpbWl6YXRpb24tZnVuY3Rpb25cIixcbiAgICBSRVZBTElEQVRJT046IFwiLm9wZW4tbmV4dC9yZXZhbGlkYXRpb24tZnVuY3Rpb25cIlxuICB9LFxuICBQQVRIUzoge1xuICAgIFNUQVRJQzogXCIvX25leHQvc3RhdGljLypcIixcbiAgICBJTUFHRTogXCIvX25leHQvaW1hZ2UqXCIsXG4gICAgQVBJOiBcIi9hcGkvKlwiLFxuICAgIEFETUlOOiBcIi9hZG1pbi8qXCJcbiAgfVxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBDb252ZXJ0IGEgbmFtZSB0byBhIHZhbGlkIFJEUyBkYXRhYmFzZSBuYW1lIChhbHBoYW51bWVyaWMgb25seSkuXG4gKiBDbG91ZEZvcm1hdGlvbiBFYXJseVZhbGlkYXRpb24gaG9vayBlbmZvcmNlczogXlthLXpBLVpdezF9KD86LT9bYS16QS1aMC05XSl7MCw2Mn0kXG4gKiBSRFMgQVBJIHJlamVjdHMgaHlwaGVucy4gSW50ZXJzZWN0aW9uID0gYWxwaGFudW1lcmljIG9ubHkuXG4gKi9cbmZ1bmN0aW9uIHRvVmFsaWREYXRhYmFzZU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0vZywgXCJcIik7XG59XG5cbi8qKlxuICogRXh0cmFjdCByb290IGRvbWFpbiBmcm9tIGEgZnVsbCBkb21haW4gbmFtZS5cbiAqIGUuZy4sIFwiY21zLmV4YW1wbGUuY29tXCIgLT4gXCJleGFtcGxlLmNvbVwiXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RSb290RG9tYWluKGRvbWFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHMgPSBkb21haW4uc3BsaXQoXCIuXCIpO1xuICByZXR1cm4gcGFydHMubGVuZ3RoID4gMiA/IHBhcnRzLnNsaWNlKC0yKS5qb2luKFwiLlwiKSA6IGRvbWFpbjtcbn1cblxuLyoqXG4gKiBTYWZlbHkgZ2V0IHRoZSB1bmRlcmx5aW5nIExhbWJkYSBmdW5jdGlvbiBmcm9tIGEgY29tcHV0ZSByZXNvdXJjZS5cbiAqIFRocm93cyBhIGNsZWFyIGVycm9yIGlmIHRoZSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLlxuICovXG5mdW5jdGlvbiByZXF1aXJlRnVuY3Rpb24oY29tcHV0ZTogTGFtYmRhQ29tcHV0ZSwgbmFtZTogc3RyaW5nKTogSUZ1bmN0aW9uIHtcbiAgY29uc3QgZm4gPSBjb21wdXRlLmdldEZ1bmN0aW9uKCk7XG4gIGlmICghZm4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtuYW1lfSBMYW1iZGEgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4gYCArXG4gICAgICAgIFwiVGhpcyBpbmRpY2F0ZXMgYW4gaW50ZXJuYWwgZXJyb3IgaW4gY29tcHV0ZSByZXNvdXJjZSBjcmVhdGlvbi5cIlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIEJhc2UgZGF0YWJhc2UgcHJvcGVydGllcyBzaGFyZWQgYmV0d2VlbiBBdXJvcmEgYW5kIEluc3RhbmNlLlxuICogVXNlcyBQaWNrIHRvIGV4dHJhY3QgY29tbW9uIHByb3BlcnRpZXMgZnJvbSB0aGUgZGF0YWJhc2UgY29uZmlnLlxuICovXG50eXBlIEJhc2VEYXRhYmFzZVByb3BzID0gUGljazxcbiAgSW5zdGFuY2VEYXRhYmFzZVByb3BzLFxuICB8IFwiZGF0YWJhc2VOYW1lXCJcbiAgfCBcImRhdGFiYXNlRW5naW5lXCJcbiAgfCBcImJhY2t1cFJldGVudGlvblwiXG4gIHwgXCJkZWxldGlvblByb3RlY3Rpb25cIlxuICB8IFwicHVibGljbHlBY2Nlc3NpYmxlXCJcbiAgfCBcInBvcnRcIlxuICB8IFwicGVyZm9ybWFuY2VJbnNpZ2h0c1wiXG4gIHwgXCJwcm94eVwiXG4gIHwgXCJjcmVkZW50aWFsc1wiXG4gIHwgXCJzbmFwc2hvdElkZW50aWZpZXJcIlxuICB8IFwic25hcHNob3RVc2VybmFtZVwiXG4+O1xuXG4vKipcbiAqIExhbWJkYSBjb25maWd1cmF0aW9uIHdpdGggcmVzb2x2ZWQgZGVmYXVsdHMuXG4gKi9cbmludGVyZmFjZSBSZXNvbHZlZExhbWJkYUNvbmZpZyB7XG4gIG1lbW9yeVNpemU6IG51bWJlcjtcbiAgdGltZW91dDogbnVtYmVyO1xuICBlcGhlbWVyYWxTdG9yYWdlU2l6ZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IExhbWJkYSBjb25maWcgZnJvbSBwcm9wcyB3aXRoIGRlZmF1bHRzLlxuICovXG5mdW5jdGlvbiByZXNvbHZlTGFtYmRhQ29uZmlnKFxuICBjb25maWc6XG4gICAgfCB7IG1lbW9yeVNpemU/OiBudW1iZXI7IHRpbWVvdXQ/OiBudW1iZXI7IGVwaGVtZXJhbFN0b3JhZ2VTaXplPzogbnVtYmVyIH1cbiAgICB8IHVuZGVmaW5lZCxcbiAgZGVmYXVsdHM6IHsgbWVtb3J5OiBudW1iZXI7IHRpbWVvdXQ6IG51bWJlciB9XG4pOiBSZXNvbHZlZExhbWJkYUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgbWVtb3J5U2l6ZTogY29uZmlnPy5tZW1vcnlTaXplID8/IGRlZmF1bHRzLm1lbW9yeSxcbiAgICB0aW1lb3V0OiBjb25maWc/LnRpbWVvdXQgPz8gZGVmYXVsdHMudGltZW91dCxcbiAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZTogY29uZmlnPy5lcGhlbWVyYWxTdG9yYWdlU2l6ZVxuICB9O1xufVxuXG4vKipcbiAqIFBheWxvYWQgQ01TIHBhdHRlcm4gaW1wbGVtZW50YXRpb24uXG4gKlxuICogQ29tcG9zZXMgYWxsIHJlcXVpcmVkIEFXUyByZXNvdXJjZXMgZm9yIGEgUGF5bG9hZCBkZXBsb3ltZW50LlxuICovXG5leHBvcnQgY2xhc3MgUGF5bG9hZCBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElQYXlsb2FkIHtcbiAgcHVibGljIHJlYWRvbmx5IHBhdHRlcm5UeXBlID0gXCJwYXlsb2FkXCIgYXMgY29uc3Q7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogSVBheWxvYWRQcm9wcztcbiAgcHJpdmF0ZSByZWFkb25seSBwYXNjYWxOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BheWxvYWRTZWNyZXQ6IFNlY3JldDtcblxuICBwcml2YXRlIF9kYXRhYmFzZSE6IFJlbGF0aW9uYWxEYXRhYmFzZTtcbiAgcHJpdmF0ZSBfc2VydmVyITogTGFtYmRhQ29tcHV0ZTtcbiAgcHJpdmF0ZSBfaW1hZ2VPcHRpbWlzYXRpb24hOiBMYW1iZGFDb21wdXRlO1xuICBwcml2YXRlIF9yZXZhbGlkYXRpb24hOiBMYW1iZGFDb21wdXRlO1xuICBwcml2YXRlIF9hc3NldHNCdWNrZXQhOiBTdG9yYWdlO1xuICBwcml2YXRlIF9jYWNoZUJ1Y2tldCE6IFN0b3JhZ2U7XG4gIHByaXZhdGUgX21lZGlhQnVja2V0ITogU3RvcmFnZTtcbiAgcHJpdmF0ZSBfdGFnQ2FjaGUhOiBEeW5hbW9EQkRhdGFiYXNlO1xuICBwcml2YXRlIF9yZXZhbGlkYXRpb25RdWV1ZSE6IFF1ZXVlTWVzc2FnaW5nO1xuICBwcml2YXRlIF9jZG4hOiBDZG47XG4gIHByaXZhdGUgX3Jlc29sdmVkRG9tYWluOlxuICAgIHwge1xuICAgICAgICBkb21haW5OYW1lczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQ7XG4gICAgICAgIGhvc3RlZFpvbmU6IFJldHVyblR5cGU8dHlwZW9mIEhvc3RlZFpvbmUuZnJvbUxvb2t1cD4gfCB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXBwOiBBcHAsIHByb3BzOiBJUGF5bG9hZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuYXBwID0gYXBwO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLnBhc2NhbE5hbWUgPSB0b1Bhc2NhbENhc2UocHJvcHMubmFtZSk7XG4gICAgdGhpcy5fcGF5bG9hZFNlY3JldCA9IG5ldyBTZWNyZXQodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfVBheWxvYWRTZWNyZXRgLCB7XG4gICAgICBzZWNyZXROYW1lOiBgJHtwcm9wcy5uYW1lfS9wYXlsb2FkLXNlY3JldGAsXG4gICAgICBkZXNjcmlwdGlvbjogYFBheWxvYWQgQ01TIHNlY3JldCBmb3IgJHtwcm9wcy5uYW1lfWAsXG4gICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICBleGNsdWRlUHVuY3R1YXRpb246IHRydWUsXG4gICAgICAgIHBhc3N3b3JkTGVuZ3RoOiA2NFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3Rlck1hbmlmZXN0KCk7XG4gICAgdGhpcy52YWxpZGF0ZVByb3BzKCk7XG5cbiAgICB0aGlzLmNyZWF0ZURhdGFiYXNlKCk7XG4gICAgdGhpcy5jcmVhdGVTdG9yYWdlQnVja2V0cygpO1xuICAgIHRoaXMuY3JlYXRlVGFnQ2FjaGUoKTtcbiAgICB0aGlzLmNyZWF0ZVJldmFsaWRhdGlvblF1ZXVlKCk7XG4gICAgdGhpcy5jcmVhdGVMYW1iZGFGdW5jdGlvbnMoKTtcbiAgICB0aGlzLmNyZWF0ZUNkbigpO1xuICAgIHRoaXMuY3JlYXRlRG5zUmVjb3JkKCk7XG4gICAgdGhpcy5leHBvcnRQYXR0ZXJuT3V0cHV0cygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3Rlck1hbmlmZXN0KCk6IHZvaWQge1xuICAgIGNvbnN0IG1hbmlmZXN0UGF0dGVybjogTWFuaWZlc3RQYXR0ZXJuID0ge1xuICAgICAgdHlwZTogXCJwYXlsb2FkXCIsXG4gICAgICBuYW1lOiB0aGlzLnByb3BzLm5hbWUsXG4gICAgICBzb3VyY2U6IFBBWUxPQURfREVGQVVMVFMuU09VUkNFXG4gICAgfTtcbiAgICB0aGlzLmFwcC5nZXRNYW5pZmVzdENvbGxlY3RvcigpLnNldFBhdHRlcm4obWFuaWZlc3RQYXR0ZXJuKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVQcm9wcygpOiB2b2lkIHtcbiAgICBjb25zdCBkYkNvbmZpZyA9IHRoaXMucHJvcHMuZGF0YWJhc2UgPz8ge307XG4gICAgaWYgKGRiQ29uZmlnLnB1YmxpY2x5QWNjZXNzaWJsZSkge1xuICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgYFBheWxvYWQgZGF0YWJhc2UgJyR7dGhpcy5wcm9wcy5uYW1lfScgaXMgY29uZmlndXJlZCB3aXRoIHB1YmxpYyBhY2Nlc3NpYmlsaXR5LiBgICtcbiAgICAgICAgICBcIlRoaXMgaXMgYSBzZWN1cml0eSByaXNrIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZXZlbG9wbWVudC5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhdGFiYXNlKCk6IHZvaWQge1xuICAgIGNvbnN0IGRiQ29uZmlnID0gdGhpcy5wcm9wcy5kYXRhYmFzZSA/PyB7fTtcbiAgICBjb25zdCBkYXRhYmFzZVR5cGUgPSBkYkNvbmZpZy50eXBlID8/IFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuVFlQRTtcblxuICAgIHRoaXMuX2RhdGFiYXNlID1cbiAgICAgIGRhdGFiYXNlVHlwZSA9PT0gXCJBdXJvcmFcIlxuICAgICAgICA/IHRoaXMuY3JlYXRlQXVyb3JhRGF0YWJhc2UoZGJDb25maWcpXG4gICAgICAgIDogdGhpcy5jcmVhdGVJbnN0YW5jZURhdGFiYXNlKGRiQ29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRCYXNlRGF0YWJhc2VQcm9wcyhcbiAgICBkYkNvbmZpZzogTm9uTnVsbGFibGU8SVBheWxvYWRQcm9wc1tcImRhdGFiYXNlXCJdPlxuICApOiBCYXNlRGF0YWJhc2VQcm9wcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFiYXNlTmFtZTpcbiAgICAgICAgZGJDb25maWcuZGF0YWJhc2VOYW1lID8/IHRvVmFsaWREYXRhYmFzZU5hbWUodGhpcy5wcm9wcy5uYW1lKSxcbiAgICAgIGRhdGFiYXNlRW5naW5lOiBkYkNvbmZpZy5kYXRhYmFzZUVuZ2luZSA/PyBcInBvc3RncmVzcWxcIixcbiAgICAgIGJhY2t1cFJldGVudGlvbjpcbiAgICAgICAgZGJDb25maWcuYmFja3VwUmV0ZW50aW9uID8/IFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuQkFDS1VQX1JFVEVOVElPTixcbiAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjpcbiAgICAgICAgZGJDb25maWcuZGVsZXRpb25Qcm90ZWN0aW9uID8/XG4gICAgICAgIFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuREVMRVRJT05fUFJPVEVDVElPTixcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogZGJDb25maWcucHVibGljbHlBY2Nlc3NpYmxlLFxuICAgICAgcG9ydDogZGJDb25maWcucG9ydCxcbiAgICAgIHBlcmZvcm1hbmNlSW5zaWdodHM6IGRiQ29uZmlnLnBlcmZvcm1hbmNlSW5zaWdodHMsXG4gICAgICBwcm94eTogZGJDb25maWcucHJveHksXG4gICAgICBjcmVkZW50aWFsczogZGJDb25maWcuY3JlZGVudGlhbHMsXG4gICAgICBzbmFwc2hvdElkZW50aWZpZXI6IGRiQ29uZmlnLnNuYXBzaG90SWRlbnRpZmllcixcbiAgICAgIHNuYXBzaG90VXNlcm5hbWU6IGRiQ29uZmlnLnNuYXBzaG90VXNlcm5hbWVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBdXJvcmFEYXRhYmFzZShcbiAgICBkYkNvbmZpZzogTm9uTnVsbGFibGU8SVBheWxvYWRQcm9wc1tcImRhdGFiYXNlXCJdPlxuICApOiBSZWxhdGlvbmFsRGF0YWJhc2Uge1xuICAgIGNvbnN0IGF1cm9yYVByb3BzOiBBdXJvcmFEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJBdXJvcmFcIixcbiAgICAgIC4uLnRoaXMuYnVpbGRCYXNlRGF0YWJhc2VQcm9wcyhkYkNvbmZpZyksXG4gICAgICBhbGxvd2VkSXBDaWRyOiBkYkNvbmZpZy5hbGxvd2VkSXBDaWRyLFxuICAgICAgZW5jcnlwdGlvbjogZGJDb25maWcuZW5jcnlwdGlvbiBhcyBBdXJvcmFEYXRhYmFzZVByb3BzW1wiZW5jcnlwdGlvblwiXSxcbiAgICAgIHdyaXRlcjogZGJDb25maWcud3JpdGVyLFxuICAgICAgcmVhZGVyczogZGJDb25maWcucmVhZGVycyxcbiAgICAgIGFsbG93VnBjQWNjZXNzOiBkYkNvbmZpZy5hbGxvd1ZwY0FjY2VzcyxcbiAgICAgIG1vbml0b3JpbmdJbnRlcnZhbDogZGJDb25maWcubW9uaXRvcmluZ0ludGVydmFsLFxuICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6IGRiQ29uZmlnLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkRGF0YWJhc2UoXG4gICAgICBEYXRhYmFzZUZhY3RvcnkuYnVpbGQodGhpcy5wcm9wcy5uYW1lLCBhdXJvcmFQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJbnN0YW5jZURhdGFiYXNlKFxuICAgIGRiQ29uZmlnOiBOb25OdWxsYWJsZTxJUGF5bG9hZFByb3BzW1wiZGF0YWJhc2VcIl0+XG4gICk6IFJlbGF0aW9uYWxEYXRhYmFzZSB7XG4gICAgY29uc3QgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJJbnN0YW5jZVwiLFxuICAgICAgLi4udGhpcy5idWlsZEJhc2VEYXRhYmFzZVByb3BzKGRiQ29uZmlnKSxcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogZGJDb25maWcucHVibGljbHlBY2Nlc3NpYmxlID8/IGZhbHNlLFxuICAgICAgaW5zdGFuY2VUeXBlOiBkYkNvbmZpZy5pbnN0YW5jZVR5cGUsXG4gICAgICBhbGxvY2F0ZWRTdG9yYWdlOiBkYkNvbmZpZy5hbGxvY2F0ZWRTdG9yYWdlLFxuICAgICAgbXVsdGlBejogZGJDb25maWcubXVsdGlBeixcbiAgICAgIHJlYWRSZXBsaWNhOiBkYkNvbmZpZy5yZWFkUmVwbGljYSxcbiAgICAgIGVuY3J5cHRpb246IGRiQ29uZmlnLmVuY3J5cHRpb24gYXMgSW5zdGFuY2VEYXRhYmFzZVByb3BzW1wiZW5jcnlwdGlvblwiXVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYXBwLmFkZERhdGFiYXNlKFxuICAgICAgRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKHRoaXMucHJvcHMubmFtZSwgaW5zdGFuY2VQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdG9yYWdlQnVja2V0cygpOiB2b2lkIHtcbiAgICB0aGlzLl9hc3NldHNCdWNrZXQgPSB0aGlzLmNyZWF0ZUFzc2V0c0J1Y2tldCgpO1xuICAgIHRoaXMuX2NhY2hlQnVja2V0ID0gdGhpcy5jcmVhdGVDYWNoZUJ1Y2tldCgpO1xuICAgIHRoaXMuX21lZGlhQnVja2V0ID0gdGhpcy5jcmVhdGVNZWRpYUJ1Y2tldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBc3NldHNCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgY29uc3QgYXNzZXRzQ29uZmlnID0gdGhpcy5wcm9wcy5zdG9yYWdlPy5hc3NldHMgPz8ge307XG4gICAgY29uc3QgYXNzZXRzUHJvcHM6IFMzUHJvcHMgPSB7XG4gICAgICB2ZXJzaW9uZWQ6IGFzc2V0c0NvbmZpZy52ZXJzaW9uZWQgPz8gZmFsc2UsXG4gICAgICBkZXBsb3ltZW50OiB7XG4gICAgICAgIHNvdXJjZTogYCR7UEFZTE9BRF9ERUZBVUxUUy5TT1VSQ0V9LyR7UEFZTE9BRF9ERUZBVUxUUy5PUEVOTkVYVC5BU1NFVFN9YCxcbiAgICAgICAgcHJ1bmU6IHRydWUsXG4gICAgICAgIGNhY2hlQ29udHJvbDoge1xuICAgICAgICAgIG1heEFnZTogUEFZTE9BRF9ERUZBVUxUUy5DQUNIRS5NQVhfQUdFX1NFQ09ORFMsXG4gICAgICAgICAgaW1tdXRhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGRTdG9yYWdlKFxuICAgICAgU3RvcmFnZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1hc3NldHNgLCBhc3NldHNQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDYWNoZUJ1Y2tldCgpOiBTdG9yYWdlIHtcbiAgICBjb25zdCBjYWNoZUNvbmZpZyA9IHRoaXMucHJvcHMuc3RvcmFnZT8uY2FjaGUgPz8ge307XG4gICAgY29uc3QgY2FjaGVQcm9wczogUzNQcm9wcyA9IHtcbiAgICAgIHZlcnNpb25lZDogY2FjaGVDb25maWcudmVyc2lvbmVkID8/IGZhbHNlLFxuICAgICAgZGVwbG95bWVudDoge1xuICAgICAgICBzb3VyY2U6IGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuQ0FDSEV9YCxcbiAgICAgICAgcHJ1bmU6IGZhbHNlIC8vIElTUiBhZGRzIGZpbGVzIGF0IHJ1bnRpbWVcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGRTdG9yYWdlKFxuICAgICAgU3RvcmFnZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1jYWNoZWAsIGNhY2hlUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTWVkaWFCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgY29uc3QgbWVkaWFDb25maWcgPSB0aGlzLnByb3BzLnN0b3JhZ2U/Lm1lZGlhID8/IHt9O1xuICAgIGNvbnN0IG1lZGlhUHJvcHM6IFMzUHJvcHMgPSB7XG4gICAgICB2ZXJzaW9uZWQ6IG1lZGlhQ29uZmlnLnZlcnNpb25lZCA/PyBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYXBwLmFkZFN0b3JhZ2UoXG4gICAgICBTdG9yYWdlRmFjdG9yeS5idWlsZChgJHt0aGlzLnByb3BzLm5hbWV9LW1lZGlhYCwgbWVkaWFQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUYWdDYWNoZSgpOiB2b2lkIHtcbiAgICBjb25zdCB0YWdDYWNoZVByb3BzOiBEeW5hbW9EQkRhdGFiYXNlUHJvcHMgPSB7XG4gICAgICB0eXBlOiBcIkR5bmFtb0RCXCIsXG4gICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJ0YWdcIiwgdHlwZTogXCJTXCIgfSxcbiAgICAgIHNvcnRLZXk6IHsgbmFtZTogXCJwYXRoXCIsIHR5cGU6IFwiU1wiIH0sXG4gICAgICBnbG9iYWxTZWNvbmRhcnlJbmRleGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpbmRleE5hbWU6IFwicmV2YWxpZGF0ZVwiLFxuICAgICAgICAgIHBhcnRpdGlvbktleTogeyBuYW1lOiBcInBhdGhcIiwgdHlwZTogXCJTXCIgfSxcbiAgICAgICAgICBzb3J0S2V5OiB7IG5hbWU6IFwicmV2YWxpZGF0ZWRBdFwiLCB0eXBlOiBcIk5cIiB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICAgIHRoaXMuX3RhZ0NhY2hlID0gdGhpcy5hcHAuYWRkRGF0YWJhc2UoXG4gICAgICBEYXRhYmFzZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS10YWctY2FjaGVgLCB0YWdDYWNoZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJldmFsaWRhdGlvblF1ZXVlKCk6IHZvaWQge1xuICAgIGNvbnN0IHF1ZXVlQ29uZmlnID0gdGhpcy5wcm9wcy5tZXNzYWdpbmc/LnJldmFsaWRhdGlvblF1ZXVlID8/IHt9O1xuICAgIGNvbnN0IHJldmFsaWRhdGlvblRpbWVvdXQgPVxuICAgICAgdGhpcy5wcm9wcy5jb21wdXRlPy5yZXZhbGlkYXRpb24/LnRpbWVvdXQgPz9cbiAgICAgIFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5SRVZBTElEQVRJT05fVElNRU9VVDtcblxuICAgIC8vIFJlc29sdmUgZGVhZCBsZXR0ZXIgcXVldWUgY29uZmlnXG4gICAgbGV0IGRscUNvbmZpZzogSVF1ZXVlUHJvcHNbXCJkZWFkTGV0dGVyUXVldWVcIl07XG4gICAgaWYgKHF1ZXVlQ29uZmlnLmRlYWRMZXR0ZXJRdWV1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGRscUNvbmZpZyA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHF1ZXVlQ29uZmlnLmRlYWRMZXR0ZXJRdWV1ZSkge1xuICAgICAgZGxxQ29uZmlnID0ge1xuICAgICAgICBlbmFibGVkOiBxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUuZW5hYmxlZCA/PyB0cnVlLFxuICAgICAgICBtYXhSZWNlaXZlQ291bnQ6IHF1ZXVlQ29uZmlnLmRlYWRMZXR0ZXJRdWV1ZS5tYXhSZWNlaXZlQ291bnQgPz8gM1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGxxQ29uZmlnID0geyBlbmFibGVkOiB0cnVlLCBtYXhSZWNlaXZlQ291bnQ6IDMgfTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWV1ZVByb3BzOiBJUXVldWVQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwicXVldWVcIixcbiAgICAgIHF1ZXVlVHlwZTogXCJmaWZvXCIsXG4gICAgICB2aXNpYmlsaXR5VGltZW91dDogcXVldWVDb25maWcudmlzaWJpbGl0eVRpbWVvdXQgPz8gcmV2YWxpZGF0aW9uVGltZW91dCxcbiAgICAgIG1lc3NhZ2VSZXRlbnRpb25QZXJpb2Q6IHF1ZXVlQ29uZmlnLm1lc3NhZ2VSZXRlbnRpb25QZXJpb2QsXG4gICAgICBtYXhNZXNzYWdlU2l6ZTogcXVldWVDb25maWcubWF4TWVzc2FnZVNpemUsXG4gICAgICBjb250ZW50QmFzZWREZWR1cGxpY2F0aW9uOiB0cnVlLFxuICAgICAgZGVhZExldHRlclF1ZXVlOiBkbHFDb25maWdcbiAgICB9O1xuICAgIHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlID0gdGhpcy5hcHAuYWRkTWVzc2FnaW5nKFxuICAgICAgTWVzc2FnaW5nRmFjdG9yeS5idWlsZChgJHt0aGlzLnByb3BzLm5hbWV9LXJldmFsaWRhdGlvbmAsIHF1ZXVlUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTGFtYmRhRnVuY3Rpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuX3NlcnZlciA9IHRoaXMuY3JlYXRlU2VydmVyTGFtYmRhKCk7XG4gICAgdGhpcy5faW1hZ2VPcHRpbWlzYXRpb24gPSB0aGlzLmNyZWF0ZUltYWdlTGFtYmRhKCk7XG4gICAgdGhpcy5fcmV2YWxpZGF0aW9uID0gdGhpcy5jcmVhdGVSZXZhbGlkYXRpb25MYW1iZGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VydmVyTGFtYmRhKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIGNvbnN0IHsgbWVtb3J5U2l6ZSwgdGltZW91dCwgZXBoZW1lcmFsU3RvcmFnZVNpemUgfSA9IHJlc29sdmVMYW1iZGFDb25maWcoXG4gICAgICB0aGlzLnByb3BzLmNvbXB1dGU/LnNlcnZlcixcbiAgICAgIHtcbiAgICAgICAgbWVtb3J5OiBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuU0VSVkVSX01FTU9SWSxcbiAgICAgICAgdGltZW91dDogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLlNFUlZFUl9USU1FT1VUXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHNlcnZlclByb3BzOiBDb2RlTGFtYmRhUHJvcHMgPSB7XG4gICAgICB0eXBlOiBcImxhbWJkYVwiLFxuICAgICAgZGVwbG95bWVudDogXCJjb2RlXCIsXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChcbiAgICAgICAgYCR7UEFZTE9BRF9ERUZBVUxUUy5TT1VSQ0V9LyR7UEFZTE9BRF9ERUZBVUxUUy5PUEVOTkVYVC5TRVJWRVJ9YFxuICAgICAgKSxcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZXBoZW1lcmFsU3RvcmFnZVNpemUsXG4gICAgICBmdW5jdGlvblVybDoge1xuICAgICAgICBhdXRoVHlwZTogRnVuY3Rpb25VcmxBdXRoVHlwZS5OT05FLFxuICAgICAgICBpbnZva2VNb2RlOiBJbnZva2VNb2RlLlJFU1BPTlNFX1NUUkVBTVxuICAgICAgfSxcbiAgICAgIGNvbm5lY3Rpb25zOiBbdGhpcy5fZGF0YWJhc2VdLFxuICAgICAgc2VjcmV0c0ltcG9ydDoge1xuICAgICAgICBEQVRBQkFTRV9VU0VSTkFNRTogdGhpcy5fZGF0YWJhc2VcbiAgICAgICAgICAuZ2V0Q3JlZGVudGlhbHMoKVxuICAgICAgICAgIC5nZXRJbXBvcnQoXCJ1c2VybmFtZVwiKSxcbiAgICAgICAgREFUQUJBU0VfUEFTU1dPUkQ6IHRoaXMuX2RhdGFiYXNlXG4gICAgICAgICAgLmdldENyZWRlbnRpYWxzKClcbiAgICAgICAgICAuZ2V0SW1wb3J0KFwicGFzc3dvcmRcIiksXG4gICAgICAgIFBBWUxPQURfU0VDUkVUOiB0aGlzLl9wYXlsb2FkU2VjcmV0LmdldEltcG9ydCgpXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuYnVpbGRTZXJ2ZXJFbnZpcm9ubWVudCgpXG4gICAgfTtcblxuICAgIGNvbnN0IHNlcnZlciA9IHRoaXMuYXBwLmFkZENvbXB1dGUoXG4gICAgICBDb21wdXRlRmFjdG9yeS5idWlsZChgJHt0aGlzLnByb3BzLm5hbWV9LXNlcnZlcmAsIHNlcnZlclByb3BzKVxuICAgICk7XG5cbiAgICB0aGlzLmdyYW50U2VydmVyUGVybWlzc2lvbnMoc2VydmVyKTtcbiAgICByZXR1cm4gc2VydmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNlcnZlckVudmlyb25tZW50KCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGJhc2VFbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBEQVRBQkFTRV9IT1NUOiB0aGlzLl9kYXRhYmFzZS5nZXRIb3N0RW5kcG9pbnQoKSxcbiAgICAgIERBVEFCQVNFX1BPUlQ6IHRoaXMuX2RhdGFiYXNlLmdldEhvc3RQb3J0KCksXG4gICAgICBEQVRBQkFTRV9OQU1FOiB0aGlzLl9kYXRhYmFzZS5nZXREYXRhYmFzZU5hbWUoKSxcbiAgICAgIERBVEFCQVNFX1NTTDogXCJ0cnVlXCIsXG4gICAgICBDQUNIRV9CVUNLRVRfTkFNRTogdGhpcy5fY2FjaGVCdWNrZXQuZ2V0QnVja2V0TmFtZSgpLFxuICAgICAgQ0FDSEVfQlVDS0VUX1JFR0lPTjogU3RhY2sub2YodGhpcykucmVnaW9uLFxuICAgICAgQ0FDSEVfRFlOQU1PX1RBQkxFOiB0aGlzLl90YWdDYWNoZS5nZXRUYWJsZU5hbWUoKSxcbiAgICAgIFJFVkFMSURBVElPTl9RVUVVRV9VUkw6IHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlLmdldFF1ZXVlVXJsKCksXG4gICAgICBSRVZBTElEQVRJT05fUVVFVUVfUkVHSU9OOiBTdGFjay5vZih0aGlzKS5yZWdpb24sXG4gICAgICBNRURJQV9CVUNLRVRfTkFNRTogdGhpcy5fbWVkaWFCdWNrZXQuZ2V0QnVja2V0TmFtZSgpXG4gICAgfTtcblxuICAgIC8vIExvY2sgZG93biBDT1JTIHRvIGN1c3RvbSBkb21haW4gd2hlbiBwcm92aWRlZFxuICAgIGNvbnN0IGN1c3RvbURvbWFpbiA9IHRoaXMucHJvcHMuZG9tYWluID8/IHRoaXMucHJvcHMuY2RuPy5kb21haW5OYW1lcz8uWzBdO1xuICAgIGlmIChjdXN0b21Eb21haW4pIHtcbiAgICAgIGJhc2VFbnYuTkVYVF9QVUJMSUNfU0VSVkVSX1VSTCA9IGBodHRwczovLyR7Y3VzdG9tRG9tYWlufWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4uYmFzZUVudiwgLi4udGhpcy5wcm9wcy5lbnZpcm9ubWVudCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBncmFudFNlcnZlclBlcm1pc3Npb25zKHNlcnZlcjogTGFtYmRhQ29tcHV0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHNlcnZlckZ1bmN0aW9uID0gcmVxdWlyZUZ1bmN0aW9uKHNlcnZlciwgXCJTZXJ2ZXJcIik7XG4gICAgdGhpcy5fY2FjaGVCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoc2VydmVyRnVuY3Rpb24pO1xuICAgIHRoaXMuX21lZGlhQnVja2V0LmdyYW50UmVhZFdyaXRlKHNlcnZlckZ1bmN0aW9uKTtcbiAgICB0aGlzLl90YWdDYWNoZS5ncmFudFJlYWRXcml0ZURhdGEoc2VydmVyRnVuY3Rpb24pO1xuICAgIHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlLmdyYW50U2VuZE1lc3NhZ2VzKHNlcnZlckZ1bmN0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSW1hZ2VMYW1iZGEoKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgY29uc3QgeyBtZW1vcnlTaXplLCB0aW1lb3V0LCBlcGhlbWVyYWxTdG9yYWdlU2l6ZSB9ID0gcmVzb2x2ZUxhbWJkYUNvbmZpZyhcbiAgICAgIHRoaXMucHJvcHMuY29tcHV0ZT8uaW1hZ2VPcHRpbWlzYXRpb24sXG4gICAgICB7XG4gICAgICAgIG1lbW9yeTogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLklNQUdFX01FTU9SWSxcbiAgICAgICAgdGltZW91dDogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLklNQUdFX1RJTUVPVVRcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgaW1hZ2VQcm9wczogQ29kZUxhbWJkYVByb3BzID0ge1xuICAgICAgdHlwZTogXCJsYW1iZGFcIixcbiAgICAgIGRlcGxveW1lbnQ6IFwiY29kZVwiLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuSU1BR0V9YFxuICAgICAgKSxcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZXBoZW1lcmFsU3RvcmFnZVNpemUsXG4gICAgICBmdW5jdGlvblVybDogeyBhdXRoVHlwZTogRnVuY3Rpb25VcmxBdXRoVHlwZS5OT05FIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBCVUNLRVRfTkFNRTogdGhpcy5fYXNzZXRzQnVja2V0LmdldEJ1Y2tldE5hbWUoKSxcbiAgICAgICAgQlVDS0VUX0tFWV9QUkVGSVg6IFwiX2Fzc2V0c1wiXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGltYWdlID0gdGhpcy5hcHAuYWRkQ29tcHV0ZShcbiAgICAgIENvbXB1dGVGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0taW1hZ2VgLCBpbWFnZVByb3BzKVxuICAgICk7XG5cbiAgICBjb25zdCBpbWFnZUZ1bmN0aW9uID0gcmVxdWlyZUZ1bmN0aW9uKGltYWdlLCBcIkltYWdlT3B0aW1pc2F0aW9uXCIpO1xuICAgIHRoaXMuX2Fzc2V0c0J1Y2tldC5ncmFudFJlYWQoaW1hZ2VGdW5jdGlvbik7XG5cbiAgICByZXR1cm4gaW1hZ2U7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJldmFsaWRhdGlvbkxhbWJkYSgpOiBMYW1iZGFDb21wdXRlIHtcbiAgICBjb25zdCB7IG1lbW9yeVNpemUsIHRpbWVvdXQsIGVwaGVtZXJhbFN0b3JhZ2VTaXplIH0gPSByZXNvbHZlTGFtYmRhQ29uZmlnKFxuICAgICAgdGhpcy5wcm9wcy5jb21wdXRlPy5yZXZhbGlkYXRpb24sXG4gICAgICB7XG4gICAgICAgIG1lbW9yeTogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLlJFVkFMSURBVElPTl9NRU1PUlksXG4gICAgICAgIHRpbWVvdXQ6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5SRVZBTElEQVRJT05fVElNRU9VVFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCByZXZhbGlkYXRpb25Qcm9wczogQ29kZUxhbWJkYVByb3BzID0ge1xuICAgICAgdHlwZTogXCJsYW1iZGFcIixcbiAgICAgIGRlcGxveW1lbnQ6IFwiY29kZVwiLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuUkVWQUxJREFUSU9OfWBcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBtZW1vcnlTaXplLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQ0FDSEVfRFlOQU1PX1RBQkxFOiB0aGlzLl90YWdDYWNoZS5nZXRUYWJsZU5hbWUoKSxcbiAgICAgICAgQ0FDSEVfQlVDS0VUX05BTUU6IHRoaXMuX2NhY2hlQnVja2V0LmdldEJ1Y2tldE5hbWUoKVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCByZXZhbGlkYXRpb24gPSB0aGlzLmFwcC5hZGRDb21wdXRlKFxuICAgICAgQ29tcHV0ZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1yZXZhbGlkYXRpb25gLCByZXZhbGlkYXRpb25Qcm9wcylcbiAgICApO1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uTGFtYmRhID0gcmV2YWxpZGF0aW9uLmdldExhbWJkYUZ1bmN0aW9uKCk7XG4gICAgcmV2YWxpZGF0aW9uTGFtYmRhLmFkZFNxc0V2ZW50U291cmNlKHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlLmdldFF1ZXVlKCksIHtcbiAgICAgIGJhdGNoU2l6ZTogNVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uRnVuY3Rpb24gPSByZXF1aXJlRnVuY3Rpb24ocmV2YWxpZGF0aW9uLCBcIlJldmFsaWRhdGlvblwiKTtcbiAgICB0aGlzLl90YWdDYWNoZS5ncmFudFJlYWRXcml0ZURhdGEocmV2YWxpZGF0aW9uRnVuY3Rpb24pO1xuICAgIHRoaXMuX2NhY2hlQnVja2V0LmdyYW50UmVhZFdyaXRlKHJldmFsaWRhdGlvbkZ1bmN0aW9uKTtcbiAgICB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5ncmFudENvbnN1bWVNZXNzYWdlcyhyZXZhbGlkYXRpb25GdW5jdGlvbik7XG5cbiAgICByZXR1cm4gcmV2YWxpZGF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDZG4oKTogdm9pZCB7XG4gICAgY29uc3QgeyBkb21haW5OYW1lcywgY2VydGlmaWNhdGUgfSA9IHRoaXMucmVzb2x2ZURvbWFpbkNvbmZpZygpO1xuXG4gICAgY29uc3QgY2RuUHJvcHM6IFNtYXJ0Q2RuUHJvcHMgPSB7XG4gICAgICBvcmlnaW5UeXBlOiBcImF1dG9cIixcbiAgICAgIG9yaWdpbjogdGhpcy5fc2VydmVyLFxuICAgICAgY2FjaGVQb2xpY3k6IFwiQ0FDSElOR19ESVNBQkxFRFwiLFxuICAgICAgZGVmYXVsdEFsbG93ZWRNZXRob2RzOiBcIkFMTFwiLFxuICAgICAgZm9yd2FyZEhvc3RIZWFkZXI6IHRydWUsXG4gICAgICBwcmljZUNsYXNzOiBcIlByaWNlQ2xhc3NfMTAwXCIsXG4gICAgICBkb21haW5OYW1lcyxcbiAgICAgIGNlcnRpZmljYXRlLFxuICAgICAgYmVoYXZpb3VyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcGF0aFBhdHRlcm46IFBBWUxPQURfREVGQVVMVFMuUEFUSFMuU1RBVElDLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5fYXNzZXRzQnVja2V0LFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfT1BUSU1JWkVEXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLklNQUdFLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5faW1hZ2VPcHRpbWlzYXRpb24sXG4gICAgICAgICAgY2FjaGVQb2xpY3k6IFwiQ0FDSElOR19PUFRJTUlaRURcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aFBhdHRlcm46IFBBWUxPQURfREVGQVVMVFMuUEFUSFMuQVBJLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5fc2VydmVyLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfRElTQUJMRURcIixcbiAgICAgICAgICBhbGxvd2VkTWV0aG9kczogXCJBTExcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aFBhdHRlcm46IFBBWUxPQURfREVGQVVMVFMuUEFUSFMuQURNSU4sXG4gICAgICAgICAgb3JpZ2luOiB0aGlzLl9zZXJ2ZXIsXG4gICAgICAgICAgY2FjaGVQb2xpY3k6IFwiQ0FDSElOR19ESVNBQkxFRFwiLFxuICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiBcIkFMTFwiXG4gICAgICAgIH0sXG4gICAgICAgIC4uLih0aGlzLnByb3BzLmNkbj8uYmVoYXZpb3VycyA/PyBbXSlcbiAgICAgIF1cbiAgICB9O1xuXG4gICAgdGhpcy5fY2RuID0gdGhpcy5hcHAuYWRkQ2RuKENkbkZhY3RvcnkuYnVpbGQodGhpcy5wcm9wcy5uYW1lLCBjZG5Qcm9wcykpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRG9tYWluQ29uZmlnKCk6IHtcbiAgICBkb21haW5OYW1lczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgY2VydGlmaWNhdGU6IElDZXJ0aWZpY2F0ZSB8IHVuZGVmaW5lZDtcbiAgICBob3N0ZWRab25lOiBSZXR1cm5UeXBlPHR5cGVvZiBIb3N0ZWRab25lLmZyb21Mb29rdXA+IHwgdW5kZWZpbmVkO1xuICB9IHtcbiAgICBpZiAodGhpcy5fcmVzb2x2ZWREb21haW4pIHJldHVybiB0aGlzLl9yZXNvbHZlZERvbWFpbjtcblxuICAgIGlmICh0aGlzLnByb3BzLmRvbWFpbikge1xuICAgICAgdGhpcy5fcmVzb2x2ZWREb21haW4gPSB0aGlzLnJlc29sdmVTaW1wbGVEb21haW4oKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuY2RuPy5kb21haW5OYW1lcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9yZXNvbHZlZERvbWFpbiA9IHRoaXMucmVzb2x2ZUFkdmFuY2VkRG9tYWluKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jlc29sdmVkRG9tYWluID0ge1xuICAgICAgICBkb21haW5OYW1lczogdW5kZWZpbmVkLFxuICAgICAgICBjZXJ0aWZpY2F0ZTogdW5kZWZpbmVkLFxuICAgICAgICBob3N0ZWRab25lOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVkRG9tYWluO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlU2ltcGxlRG9tYWluKCk6IHtcbiAgICBkb21haW5OYW1lczogc3RyaW5nW107XG4gICAgY2VydGlmaWNhdGU6IElDZXJ0aWZpY2F0ZTtcbiAgICBob3N0ZWRab25lOiBSZXR1cm5UeXBlPHR5cGVvZiBIb3N0ZWRab25lLmZyb21Mb29rdXA+O1xuICB9IHtcbiAgICBjb25zdCBkb21haW4gPSB0aGlzLnByb3BzLmRvbWFpbiE7XG4gICAgY29uc3Qgcm9vdERvbWFpbiA9IGV4dHJhY3RSb290RG9tYWluKGRvbWFpbik7XG5cbiAgICBjb25zdCBob3N0ZWRab25lID0gSG9zdGVkWm9uZS5mcm9tTG9va3VwKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3RoaXMucGFzY2FsTmFtZX1Ib3N0ZWRab25lYCxcbiAgICAgIHsgZG9tYWluTmFtZTogcm9vdERvbWFpbiB9XG4gICAgKTtcblxuICAgIGNvbnN0IGNlcnRpZmljYXRlID0gbmV3IENlcnRpZmljYXRlKHRoaXMsIGAke3RoaXMucGFzY2FsTmFtZX1DZXJ0aWZpY2F0ZWAsIHtcbiAgICAgIGRvbWFpbk5hbWU6IGRvbWFpbixcbiAgICAgIHZhbGlkYXRpb246IENlcnRpZmljYXRlVmFsaWRhdGlvbi5mcm9tRG5zKGhvc3RlZFpvbmUpXG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBkb21haW5OYW1lczogW2RvbWFpbl0sIGNlcnRpZmljYXRlLCBob3N0ZWRab25lIH07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVBZHZhbmNlZERvbWFpbigpOiB7XG4gICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdO1xuICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQ7XG4gICAgaG9zdGVkWm9uZTogdW5kZWZpbmVkO1xuICB9IHtcbiAgICBjb25zdCBjZG5Db25maWcgPSB0aGlzLnByb3BzLmNkbiE7XG4gICAgY29uc3QgY2VydGlmaWNhdGUgPVxuICAgICAgY2RuQ29uZmlnLmNlcnRpZmljYXRlID8/XG4gICAgICAoY2RuQ29uZmlnLmNlcnRpZmljYXRlQXJuXG4gICAgICAgID8gQ2VydGlmaWNhdGUuZnJvbUNlcnRpZmljYXRlQXJuKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGAke3RoaXMucGFzY2FsTmFtZX1DZXJ0aWZpY2F0ZWAsXG4gICAgICAgICAgICBjZG5Db25maWcuY2VydGlmaWNhdGVBcm5cbiAgICAgICAgICApXG4gICAgICAgIDogdW5kZWZpbmVkKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkb21haW5OYW1lczogY2RuQ29uZmlnLmRvbWFpbk5hbWVzISxcbiAgICAgIGNlcnRpZmljYXRlLFxuICAgICAgaG9zdGVkWm9uZTogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRG5zUmVjb3JkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcm9wcy5kb21haW4pIHJldHVybjtcblxuICAgIGNvbnN0IHsgaG9zdGVkWm9uZSB9ID0gdGhpcy5yZXNvbHZlRG9tYWluQ29uZmlnKCk7XG4gICAgaWYgKCFob3N0ZWRab25lKSByZXR1cm47XG5cbiAgICAvLyBDcmVhdGUgdGhlIEROUyByZWNvcmQgaW4gdGhlIENETiBzdGFjayAobm90IHRoZSBDb21wdXRlIHN0YWNrIHdoZXJlIHRoaXNcbiAgICAvLyBQYXlsb2FkIGNvbnN0cnVjdCBsaXZlcykgdG8gYXZvaWQgYSBjeWNsaWMgZGVwZW5kZW5jeTogQ0ROIHJlZmVyZW5jZXMgdGhlXG4gICAgLy8gc2VydmVyIExhbWJkYSBGdW5jdGlvblVybCwgc28gQ29tcHV0ZSBjYW5ub3QgYWxzbyBkZXBlbmQgb24gQ0ROLlxuICAgIGNvbnN0IGNkblN0YWNrID0gdGhpcy5hcHAuZ2V0RGVmYXVsdENkblN0YWNrKCkuZ2V0U3RhY2soKTtcbiAgICBuZXcgQVJlY29yZChjZG5TdGFjaywgYCR7dGhpcy5wYXNjYWxOYW1lfUFsaWFzUmVjb3JkYCwge1xuICAgICAgem9uZTogaG9zdGVkWm9uZSxcbiAgICAgIHJlY29yZE5hbWU6IHRoaXMucHJvcHMuZG9tYWluLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICBuZXcgQ2xvdWRGcm9udFRhcmdldCh0aGlzLl9jZG4uZ2V0RGlzdHJpYnV0aW9uKCkpXG4gICAgICApXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV4cG9ydFBhdHRlcm5PdXRwdXRzKCk6IHZvaWQge1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5UeXBlYCwge1xuICAgICAga2V5OiBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVyblR5cGVgLFxuICAgICAgdmFsdWU6IFwicGF5bG9hZFwiLFxuICAgICAgZGVzY3JpcHRpb246IGBQYXR0ZXJuIHR5cGUgZm9yICR7dGhpcy5wcm9wcy5uYW1lfWBcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5OYW1lYCwge1xuICAgICAga2V5OiBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVybk5hbWVgLFxuICAgICAgdmFsdWU6IHRoaXMucHJvcHMubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgUGF0dGVybiBuYW1lIGZvciAke3RoaXMucHJvcHMubmFtZX1gXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuTGFtYmRhc2AsIHtcbiAgICAgIGtleTogYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5MYW1iZGFzYCxcbiAgICAgIHZhbHVlOiBbXG4gICAgICAgIGAke3RoaXMucHJvcHMubmFtZX0tc2VydmVyYCxcbiAgICAgICAgYCR7dGhpcy5wcm9wcy5uYW1lfS1pbWFnZWAsXG4gICAgICAgIGAke3RoaXMucHJvcHMubmFtZX0tcmV2YWxpZGF0aW9uYFxuICAgICAgXS5qb2luKFwiLFwiKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgTGFtYmRhIGNvbnN0cnVjdCBwcmVmaXhlcyBmb3IgcGF0dGVybiAke3RoaXMucHJvcHMubmFtZX1gXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuUmVzb3VyY2VzYCwge1xuICAgICAga2V5OiBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVyblJlc291cmNlc2AsXG4gICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBkYXRhYmFzZXM6IFt0aGlzLnByb3BzLm5hbWUsIGAke3RoaXMucHJvcHMubmFtZX0tdGFnLWNhY2hlYF0sXG4gICAgICAgIHN0b3JhZ2U6IFtcbiAgICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LWFzc2V0c2AsXG4gICAgICAgICAgYCR7dGhpcy5wcm9wcy5uYW1lfS1jYWNoZWAsXG4gICAgICAgICAgYCR7dGhpcy5wcm9wcy5uYW1lfS1tZWRpYWBcbiAgICAgICAgXSxcbiAgICAgICAgY2RuOiB0aGlzLnByb3BzLm5hbWVcbiAgICAgIH0pLFxuICAgICAgZGVzY3JpcHRpb246IGBSZWxhdGVkIHJlc291cmNlIG5hbWVzIGZvciBwYXR0ZXJuICR7dGhpcy5wcm9wcy5uYW1lfWBcbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGFiYXNlKCk6IFJlbGF0aW9uYWxEYXRhYmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlO1xuICB9XG5cbiAgZ2V0U2VydmVyKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gIH1cblxuICBnZXRJbWFnZU9wdGltaXNhdGlvbigpOiBMYW1iZGFDb21wdXRlIHtcbiAgICByZXR1cm4gdGhpcy5faW1hZ2VPcHRpbWlzYXRpb247XG4gIH1cblxuICBnZXRSZXZhbGlkYXRpb24oKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3JldmFsaWRhdGlvbjtcbiAgfVxuXG4gIGdldEFzc2V0c0J1Y2tldCgpOiBTdG9yYWdlIHtcbiAgICByZXR1cm4gdGhpcy5fYXNzZXRzQnVja2V0O1xuICB9XG5cbiAgZ2V0Q2FjaGVCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlQnVja2V0O1xuICB9XG5cbiAgZ2V0TWVkaWFCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgcmV0dXJuIHRoaXMuX21lZGlhQnVja2V0O1xuICB9XG5cbiAgZ2V0VGFnQ2FjaGUoKTogRHluYW1vREJEYXRhYmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhZ0NhY2hlO1xuICB9XG5cbiAgZ2V0UmV2YWxpZGF0aW9uUXVldWUoKTogUXVldWVNZXNzYWdpbmcge1xuICAgIHJldHVybiB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZTtcbiAgfVxuXG4gIGdldENkbigpOiBDZG4ge1xuICAgIHJldHVybiB0aGlzLl9jZG47XG4gIH1cbn1cbiJdfQ==
584
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvcGF5bG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7OztBQUVILDJDQUF1QztBQUN2Qyw2Q0FBK0M7QUFDL0MseURBQXFEO0FBQ3JELHVEQU1nQztBQUNoQywrRUFJNEM7QUFDNUMseURBQTRFO0FBQzVFLHlFQUFtRTtBQUtuRSwrQ0FPdUI7QUFDdkIsNkNBS3NCO0FBQ3RCLDZDQUEwRTtBQUMxRSxpREFJd0I7QUFDeEIscUNBQW9FO0FBQ3BFLHlFQUE4RDtBQUM5RCx5RUFHeUM7QUFFekMsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QixxRkFBcUY7SUFDckYsTUFBTSxFQUFFLE9BQU87SUFDZixtRkFBbUY7SUFDbkYsZUFBZSxFQUFFLFdBQVc7SUFDNUIsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFLFVBQW1CO1FBQ3pCLDhFQUE4RTtRQUM5RSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLG1CQUFtQixFQUFFLElBQUk7S0FDMUI7SUFDRCxPQUFPLEVBQUU7UUFDUCw2RkFBNkY7UUFDN0YsYUFBYSxFQUFFLElBQUk7UUFDbkIsK0RBQStEO1FBQy9ELGNBQWMsRUFBRSxFQUFFO1FBQ2xCLDJFQUEyRTtRQUMzRSxZQUFZLEVBQUUsSUFBSTtRQUNsQix3RUFBd0U7UUFDeEUsYUFBYSxFQUFFLEVBQUU7UUFDakIsNEZBQTRGO1FBQzVGLG1CQUFtQixFQUFFLEdBQUc7UUFDeEIsK0VBQStFO1FBQy9FLG9CQUFvQixFQUFFLEdBQUc7S0FDMUI7SUFDRCxLQUFLLEVBQUU7UUFDTCxnR0FBZ0c7UUFDaEcsZUFBZSxFQUFFLFFBQVE7S0FDMUI7SUFDRCxRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUUsbUJBQW1CO1FBQzNCLEtBQUssRUFBRSxrQkFBa0I7UUFDekIsTUFBTSxFQUFFLHFDQUFxQztR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QUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTO29CQUMzQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRO29CQUMxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRO2lCQUMzQjtnQkFDRCxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO2FBQ3JCLENBQUM7WUFDRixXQUFXLEVBQUUsc0NBQXNDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO1NBQ3JFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0NBQ0Y7QUE1bUJELDBCQTRtQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBheWxvYWQgQ01TIFBhdHRlcm4uXG4gKlxuICogQSBoaWdoLWxldmVsIHBhdHRlcm4gdGhhdCBjcmVhdGVzIGFsbCBpbmZyYXN0cnVjdHVyZSByZXF1aXJlZCBmb3IgYVxuICogUGF5bG9hZCBDTVMgZGVwbG95bWVudCB1c2luZyBPcGVuTmV4dC5cbiAqXG4gKiBSZXNvdXJjZXMgY3JlYXRlZDpcbiAqIC0gUkRTIFBvc3RncmVTUUwgZGF0YWJhc2UgKEF1cm9yYSBvciBJbnN0YW5jZSlcbiAqIC0gMyBTMyBidWNrZXRzIChhc3NldHMsIGNhY2hlLCBtZWRpYSlcbiAqIC0gRHluYW1vREIgdGFibGUgKHRhZyBjYWNoZSB3aXRoIEdTSSlcbiAqIC0gU1FTIEZJRk8gcXVldWUgKHJldmFsaWRhdGlvbilcbiAqIC0gMyBMYW1iZGEgZnVuY3Rpb25zIChzZXJ2ZXIsIGltYWdlIG9wdGltaXNhdGlvbiwgcmV2YWxpZGF0aW9uKVxuICogLSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwYXlsb2FkID0gYXBwLmFkZFBhdHRlcm4oUGF0dGVybkZhY3RvcnkuYnVpbGQoXCJQYXlsb2FkQXBwXCIsIHtcbiAqICAgdHlwZTogXCJwYXlsb2FkXCIsXG4gKiAgIG5hbWU6IFwibXktY21zXCJcbiAqIH0pKTtcbiAqXG4gKiAvLyBFc2NhcGUgaGF0Y2hlc1xuICogcGF5bG9hZC5nZXREYXRhYmFzZSgpLmdyYW50Q29ubmVjdChvdGhlckxhbWJkYSk7XG4gKi9cblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENmbk91dHB1dCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFNlY3JldCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3NlY3JldHNcIjtcbmltcG9ydCB7XG4gIENvZGUsXG4gIFJ1bnRpbWUsXG4gIEFyY2hpdGVjdHVyZSxcbiAgRnVuY3Rpb25VcmxBdXRoVHlwZSxcbiAgdHlwZSBJRnVuY3Rpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7XG4gIENlcnRpZmljYXRlLFxuICBDZXJ0aWZpY2F0ZVZhbGlkYXRpb24sXG4gIHR5cGUgSUNlcnRpZmljYXRlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyXCI7XG5pbXBvcnQgeyBIb3N0ZWRab25lLCBBUmVjb3JkLCBSZWNvcmRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIjtcbmltcG9ydCB7IENsb3VkRnJvbnRUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uL2FwcC5qc1wiO1xuaW1wb3J0IHsgdHlwZSBJUGF5bG9hZFByb3BzLCB0eXBlIElQYXlsb2FkIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyB0eXBlIE1hbmlmZXN0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9tYW5pZmVzdFdyaXRlci5qc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBSZWxhdGlvbmFsRGF0YWJhc2UsXG4gIHR5cGUgRHluYW1vREJEYXRhYmFzZSxcbiAgRGF0YWJhc2VGYWN0b3J5LFxuICB0eXBlIEF1cm9yYURhdGFiYXNlUHJvcHMsXG4gIHR5cGUgSW5zdGFuY2VEYXRhYmFzZVByb3BzLFxuICB0eXBlIER5bmFtb0RCRGF0YWJhc2VQcm9wc1xufSBmcm9tIFwiLi9kYXRhYmFzZS5qc1wiO1xuaW1wb3J0IHtcbiAgQ29tcHV0ZUZhY3RvcnksXG4gIHR5cGUgTGFtYmRhQ29tcHV0ZSxcbiAgSW52b2tlTW9kZSxcbiAgdHlwZSBDb2RlTGFtYmRhUHJvcHNcbn0gZnJvbSBcIi4vY29tcHV0ZS5qc1wiO1xuaW1wb3J0IHsgU3RvcmFnZUZhY3RvcnksIHR5cGUgU3RvcmFnZSwgdHlwZSBTM1Byb3BzIH0gZnJvbSBcIi4vc3RvcmFnZS5qc1wiO1xuaW1wb3J0IHtcbiAgTWVzc2FnaW5nRmFjdG9yeSxcbiAgdHlwZSBRdWV1ZU1lc3NhZ2luZyxcbiAgdHlwZSBJUXVldWVQcm9wc1xufSBmcm9tIFwiLi9tZXNzYWdpbmcuanNcIjtcbmltcG9ydCB7IENkbkZhY3RvcnksIHR5cGUgQ2RuLCB0eXBlIFNtYXJ0Q2RuUHJvcHMgfSBmcm9tIFwiLi9jZG4uanNcIjtcbmltcG9ydCB7IEZqYWxsTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3ZhbGlkYXRpb25Mb2dnZXIuanNcIjtcbmltcG9ydCB7XG4gIHRvUGFzY2FsQ2FzZSxcbiAgdG9WYWxpZERhdGFiYXNlTmFtZVxufSBmcm9tIFwiLi4vLi4vdXRpbHMvY2FwaXRhbGlzZVN0cmluZy5qc1wiO1xuXG5jb25zdCBQQVlMT0FEX0RFRkFVTFRTID0ge1xuICAvKiogUGF0aCB0byBPcGVuTmV4dCBvdXRwdXQgcmVsYXRpdmUgdG8gYXBwIGZvbGRlciAoQ0RLIHJ1bnMgZnJvbSBmamFsbC88YXBwbmFtZT4pICovXG4gIFNPVVJDRTogXCIuLi8uLlwiLFxuICAvKiogQ2xvdWRGcm9udCByZXF1aXJlcyB1cy1lYXN0LTEgZm9yIGNlcnRhaW4gcmVzb3VyY2VzOyB1c2VkIGFzIHJlZ2lvbiBmYWxsYmFjayAqL1xuICBGQUxMQkFDS19SRUdJT046IFwidXMtZWFzdC0xXCIsXG4gIERBVEFCQVNFOiB7XG4gICAgVFlQRTogXCJJbnN0YW5jZVwiIGFzIGNvbnN0LFxuICAgIC8qKiBBV1MgZGVmYXVsdDsgNyBkYXlzIGNvdmVycyBtb3N0IGFjY2lkZW50YWwgZGF0YSBsb3NzIHJlY292ZXJ5IHNjZW5hcmlvcyAqL1xuICAgIEJBQ0tVUF9SRVRFTlRJT046IDcsXG4gICAgREVMRVRJT05fUFJPVEVDVElPTjogdHJ1ZVxuICB9LFxuICBDT01QVVRFOiB7XG4gICAgLyoqIDEuNSBHQiBiYWxhbmNlcyBOZXh0LmpzIFNTUiBwZXJmb3JtYW5jZSB2cyBjb3N0OyBiZWxvdyB0aGlzIHJpc2tzIE9PTSBvbiBjb21wbGV4IHBhZ2VzICovXG4gICAgU0VSVkVSX01FTU9SWTogMTUzNixcbiAgICAvKiogQVBJIEdhdGV3YXkgZGVmYXVsdCBtYXg7IHN1ZmZpY2llbnQgZm9yIG1vc3QgU1NSIHJlbmRlcnMgKi9cbiAgICBTRVJWRVJfVElNRU9VVDogMzAsXG4gICAgLyoqIFNoYXJwIGltYWdlIHByb2Nlc3NpbmcgbmVlZHMgbWVtb3J5IHByb3BvcnRpb25hbCB0byBpbWFnZSBkaW1lbnNpb25zICovXG4gICAgSU1BR0VfTUVNT1JZOiAxNTM2LFxuICAgIC8qKiBJbWFnZSBwcm9jZXNzaW5nIHR5cGljYWxseSBjb21wbGV0ZXMgaW4gPDEwczsgMzBzIHByb3ZpZGVzIG1hcmdpbiAqL1xuICAgIElNQUdFX1RJTUVPVVQ6IDMwLFxuICAgIC8qKiBSZXZhbGlkYXRpb24gaXMgbGlnaHR3ZWlnaHQgKEhUVFAgY2FsbCArIGNhY2hlIHdyaXRlKTsgaGFsZiBvZiBzZXJ2ZXIgbWVtb3J5IHN1ZmZpY2VzICovXG4gICAgUkVWQUxJREFUSU9OX01FTU9SWTogNzY4LFxuICAgIC8qKiA1IG1pbnV0ZXMgYWxsb3dzIGJhdGNoIHJldmFsaWRhdGlvbiBvZiBtYW55IHBhZ2VzIGluIGEgc2luZ2xlIGludm9jYXRpb24gKi9cbiAgICBSRVZBTElEQVRJT05fVElNRU9VVDogMzAwXG4gIH0sXG4gIENBQ0hFOiB7XG4gICAgLyoqIDEgeWVhciDigJQgc3RhdGljIGFzc2V0cyBhcmUgY29udGVudC1oYXNoZWQgc28gbG9uZyBjYWNoaW5nIGlzIHNhZmU7IG1heGltaXNlcyBDRE4gaGl0IHJhdGUgKi9cbiAgICBNQVhfQUdFX1NFQ09ORFM6IDMxNTM2MDAwXG4gIH0sXG4gIE9QRU5ORVhUOiB7XG4gICAgQVNTRVRTOiBcIi5vcGVuLW5leHQvYXNzZXRzXCIsXG4gICAgQ0FDSEU6IFwiLm9wZW4tbmV4dC9jYWNoZVwiLFxuICAgIFNFUlZFUjogXCIub3Blbi1uZXh0L3NlcnZlci1mdW5jdGlvbnMvZGVmYXVsdFwiLFxuICAgIElNQUdFOiBcIi5vcGVuLW5leHQvaW1hZ2Utb3B0aW1pemF0aW9uLWZ1bmN0aW9uXCIsXG4gICAgUkVWQUxJREFUSU9OOiBcIi5vcGVuLW5leHQvcmV2YWxpZGF0aW9uLWZ1bmN0aW9uXCJcbiAgfSxcbiAgUEFUSFM6IHtcbiAgICBTVEFUSUM6IFwiL19uZXh0L3N0YXRpYy8qXCIsXG4gICAgSU1BR0U6IFwiL19uZXh0L2ltYWdlKlwiLFxuICAgIEFQSTogXCIvYXBpLypcIixcbiAgICBBRE1JTjogXCIvYWRtaW4vKlwiXG4gIH1cbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogRXh0cmFjdCByb290IGRvbWFpbiBmcm9tIGEgZnVsbCBkb21haW4gbmFtZS5cbiAqIGUuZy4sIFwiY21zLmV4YW1wbGUuY29tXCIgLT4gXCJleGFtcGxlLmNvbVwiXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RSb290RG9tYWluKGRvbWFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHMgPSBkb21haW4uc3BsaXQoXCIuXCIpO1xuICByZXR1cm4gcGFydHMubGVuZ3RoID4gMiA/IHBhcnRzLnNsaWNlKC0yKS5qb2luKFwiLlwiKSA6IGRvbWFpbjtcbn1cblxuLyoqXG4gKiBTYWZlbHkgZ2V0IHRoZSB1bmRlcmx5aW5nIExhbWJkYSBmdW5jdGlvbiBmcm9tIGEgY29tcHV0ZSByZXNvdXJjZS5cbiAqIFRocm93cyBhIGNsZWFyIGVycm9yIGlmIHRoZSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLlxuICovXG5mdW5jdGlvbiByZXF1aXJlRnVuY3Rpb24oY29tcHV0ZTogTGFtYmRhQ29tcHV0ZSwgbmFtZTogc3RyaW5nKTogSUZ1bmN0aW9uIHtcbiAgY29uc3QgZm4gPSBjb21wdXRlLmdldEZ1bmN0aW9uKCk7XG4gIGlmICghZm4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtuYW1lfSBMYW1iZGEgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4gYCArXG4gICAgICAgIFwiVGhpcyBpbmRpY2F0ZXMgYW4gaW50ZXJuYWwgZXJyb3IgaW4gY29tcHV0ZSByZXNvdXJjZSBjcmVhdGlvbi5cIlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIEJhc2UgZGF0YWJhc2UgcHJvcGVydGllcyBzaGFyZWQgYmV0d2VlbiBBdXJvcmEgYW5kIEluc3RhbmNlLlxuICogVXNlcyBQaWNrIHRvIGV4dHJhY3QgY29tbW9uIHByb3BlcnRpZXMgZnJvbSB0aGUgZGF0YWJhc2UgY29uZmlnLlxuICovXG50eXBlIEJhc2VEYXRhYmFzZVByb3BzID0gUGljazxcbiAgSW5zdGFuY2VEYXRhYmFzZVByb3BzLFxuICB8IFwiZGF0YWJhc2VOYW1lXCJcbiAgfCBcImRhdGFiYXNlRW5naW5lXCJcbiAgfCBcImJhY2t1cFJldGVudGlvblwiXG4gIHwgXCJkZWxldGlvblByb3RlY3Rpb25cIlxuICB8IFwicHVibGljbHlBY2Nlc3NpYmxlXCJcbiAgfCBcInBvcnRcIlxuICB8IFwiZGF0YWJhc2VJbnNpZ2h0c1wiXG4gIHwgXCJwcm94eVwiXG4gIHwgXCJjcmVkZW50aWFsc1wiXG4gIHwgXCJzbmFwc2hvdElkZW50aWZpZXJcIlxuICB8IFwic25hcHNob3RVc2VybmFtZVwiXG4+O1xuXG4vKipcbiAqIExhbWJkYSBjb25maWd1cmF0aW9uIHdpdGggcmVzb2x2ZWQgZGVmYXVsdHMuXG4gKi9cbmludGVyZmFjZSBSZXNvbHZlZExhbWJkYUNvbmZpZyB7XG4gIG1lbW9yeVNpemU6IG51bWJlcjtcbiAgdGltZW91dDogbnVtYmVyO1xuICBlcGhlbWVyYWxTdG9yYWdlU2l6ZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IExhbWJkYSBjb25maWcgZnJvbSBwcm9wcyB3aXRoIGRlZmF1bHRzLlxuICovXG5mdW5jdGlvbiByZXNvbHZlTGFtYmRhQ29uZmlnKFxuICBjb25maWc6XG4gICAgfCB7IG1lbW9yeVNpemU/OiBudW1iZXI7IHRpbWVvdXQ/OiBudW1iZXI7IGVwaGVtZXJhbFN0b3JhZ2VTaXplPzogbnVtYmVyIH1cbiAgICB8IHVuZGVmaW5lZCxcbiAgZGVmYXVsdHM6IHsgbWVtb3J5OiBudW1iZXI7IHRpbWVvdXQ6IG51bWJlciB9XG4pOiBSZXNvbHZlZExhbWJkYUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgbWVtb3J5U2l6ZTogY29uZmlnPy5tZW1vcnlTaXplID8/IGRlZmF1bHRzLm1lbW9yeSxcbiAgICB0aW1lb3V0OiBjb25maWc/LnRpbWVvdXQgPz8gZGVmYXVsdHMudGltZW91dCxcbiAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZTogY29uZmlnPy5lcGhlbWVyYWxTdG9yYWdlU2l6ZVxuICB9O1xufVxuXG4vKipcbiAqIFBheWxvYWQgQ01TIHBhdHRlcm4gaW1wbGVtZW50YXRpb24uXG4gKlxuICogQ29tcG9zZXMgYWxsIHJlcXVpcmVkIEFXUyByZXNvdXJjZXMgZm9yIGEgUGF5bG9hZCBkZXBsb3ltZW50LlxuICovXG5leHBvcnQgY2xhc3MgUGF5bG9hZCBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElQYXlsb2FkIHtcbiAgcHVibGljIHJlYWRvbmx5IHBhdHRlcm5UeXBlID0gXCJwYXlsb2FkXCIgYXMgY29uc3Q7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogSVBheWxvYWRQcm9wcztcbiAgcHJpdmF0ZSByZWFkb25seSBwYXNjYWxOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BheWxvYWRTZWNyZXQ6IFNlY3JldDtcblxuICBwcml2YXRlIF9kYXRhYmFzZSE6IFJlbGF0aW9uYWxEYXRhYmFzZTtcbiAgcHJpdmF0ZSBfc2VydmVyITogTGFtYmRhQ29tcHV0ZTtcbiAgcHJpdmF0ZSBfaW1hZ2VPcHRpbWlzYXRpb24hOiBMYW1iZGFDb21wdXRlO1xuICBwcml2YXRlIF9yZXZhbGlkYXRpb24hOiBMYW1iZGFDb21wdXRlO1xuICBwcml2YXRlIF9hc3NldHNCdWNrZXQhOiBTdG9yYWdlO1xuICBwcml2YXRlIF9jYWNoZUJ1Y2tldCE6IFN0b3JhZ2U7XG4gIHByaXZhdGUgX21lZGlhQnVja2V0ITogU3RvcmFnZTtcbiAgcHJpdmF0ZSBfdGFnQ2FjaGUhOiBEeW5hbW9EQkRhdGFiYXNlO1xuICBwcml2YXRlIF9yZXZhbGlkYXRpb25RdWV1ZSE6IFF1ZXVlTWVzc2FnaW5nO1xuICBwcml2YXRlIF9jZG4hOiBDZG47XG4gIHByaXZhdGUgX3Jlc29sdmVkRG9tYWluOlxuICAgIHwge1xuICAgICAgICBkb21haW5OYW1lczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQ7XG4gICAgICAgIGhvc3RlZFpvbmU6IFJldHVyblR5cGU8dHlwZW9mIEhvc3RlZFpvbmUuZnJvbUxvb2t1cD4gfCB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXBwOiBBcHAsIHByb3BzOiBJUGF5bG9hZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuYXBwID0gYXBwO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLnBhc2NhbE5hbWUgPSB0b1Bhc2NhbENhc2UocHJvcHMubmFtZSk7XG4gICAgdGhpcy5fcGF5bG9hZFNlY3JldCA9IG5ldyBTZWNyZXQodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfVBheWxvYWRTZWNyZXRgLCB7XG4gICAgICBzZWNyZXROYW1lOiBgJHtwcm9wcy5uYW1lfS9wYXlsb2FkLXNlY3JldGAsXG4gICAgICBkZXNjcmlwdGlvbjogYFBheWxvYWQgQ01TIHNlY3JldCBmb3IgJHtwcm9wcy5uYW1lfWAsXG4gICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICBleGNsdWRlUHVuY3R1YXRpb246IHRydWUsXG4gICAgICAgIHBhc3N3b3JkTGVuZ3RoOiA2NFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3Rlck1hbmlmZXN0KCk7XG4gICAgdGhpcy52YWxpZGF0ZVByb3BzKCk7XG5cbiAgICB0aGlzLmNyZWF0ZURhdGFiYXNlKCk7XG4gICAgdGhpcy5jcmVhdGVTdG9yYWdlQnVja2V0cygpO1xuICAgIHRoaXMuY3JlYXRlVGFnQ2FjaGUoKTtcbiAgICB0aGlzLmNyZWF0ZVJldmFsaWRhdGlvblF1ZXVlKCk7XG4gICAgdGhpcy5jcmVhdGVMYW1iZGFGdW5jdGlvbnMoKTtcbiAgICB0aGlzLmNyZWF0ZUNkbigpO1xuICAgIHRoaXMuY3JlYXRlRG5zUmVjb3JkKCk7XG4gICAgdGhpcy5leHBvcnRQYXR0ZXJuT3V0cHV0cygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3Rlck1hbmlmZXN0KCk6IHZvaWQge1xuICAgIGNvbnN0IG1hbmlmZXN0UGF0dGVybjogTWFuaWZlc3RQYXR0ZXJuID0ge1xuICAgICAgdHlwZTogXCJwYXlsb2FkXCIsXG4gICAgICBuYW1lOiB0aGlzLnByb3BzLm5hbWUsXG4gICAgICBzb3VyY2U6IFBBWUxPQURfREVGQVVMVFMuU09VUkNFXG4gICAgfTtcbiAgICB0aGlzLmFwcC5nZXRNYW5pZmVzdENvbGxlY3RvcigpLnNldFBhdHRlcm4obWFuaWZlc3RQYXR0ZXJuKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVQcm9wcygpOiB2b2lkIHtcbiAgICBjb25zdCBkYkNvbmZpZyA9IHRoaXMucHJvcHMuZGF0YWJhc2UgPz8ge307XG4gICAgaWYgKGRiQ29uZmlnLnB1YmxpY2x5QWNjZXNzaWJsZSkge1xuICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgYFBheWxvYWQgZGF0YWJhc2UgJyR7dGhpcy5wcm9wcy5uYW1lfScgaXMgY29uZmlndXJlZCB3aXRoIHB1YmxpYyBhY2Nlc3NpYmlsaXR5LiBgICtcbiAgICAgICAgICBcIlRoaXMgaXMgYSBzZWN1cml0eSByaXNrIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZXZlbG9wbWVudC5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhdGFiYXNlKCk6IHZvaWQge1xuICAgIGNvbnN0IGRiQ29uZmlnID0gdGhpcy5wcm9wcy5kYXRhYmFzZSA/PyB7fTtcbiAgICBjb25zdCBkYXRhYmFzZVR5cGUgPSBkYkNvbmZpZy50eXBlID8/IFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuVFlQRTtcblxuICAgIHRoaXMuX2RhdGFiYXNlID1cbiAgICAgIGRhdGFiYXNlVHlwZSA9PT0gXCJBdXJvcmFcIlxuICAgICAgICA/IHRoaXMuY3JlYXRlQXVyb3JhRGF0YWJhc2UoZGJDb25maWcpXG4gICAgICAgIDogdGhpcy5jcmVhdGVJbnN0YW5jZURhdGFiYXNlKGRiQ29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRCYXNlRGF0YWJhc2VQcm9wcyhcbiAgICBkYkNvbmZpZzogTm9uTnVsbGFibGU8SVBheWxvYWRQcm9wc1tcImRhdGFiYXNlXCJdPlxuICApOiBCYXNlRGF0YWJhc2VQcm9wcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFiYXNlTmFtZTpcbiAgICAgICAgZGJDb25maWcuZGF0YWJhc2VOYW1lID8/IHRvVmFsaWREYXRhYmFzZU5hbWUodGhpcy5wcm9wcy5uYW1lKSxcbiAgICAgIGRhdGFiYXNlRW5naW5lOiBkYkNvbmZpZy5kYXRhYmFzZUVuZ2luZSA/PyBcInBvc3RncmVzcWxcIixcbiAgICAgIGJhY2t1cFJldGVudGlvbjpcbiAgICAgICAgZGJDb25maWcuYmFja3VwUmV0ZW50aW9uID8/IFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuQkFDS1VQX1JFVEVOVElPTixcbiAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjpcbiAgICAgICAgZGJDb25maWcuZGVsZXRpb25Qcm90ZWN0aW9uID8/XG4gICAgICAgIFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuREVMRVRJT05fUFJPVEVDVElPTixcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogZGJDb25maWcucHVibGljbHlBY2Nlc3NpYmxlLFxuICAgICAgcG9ydDogZGJDb25maWcucG9ydCxcbiAgICAgIGRhdGFiYXNlSW5zaWdodHM6IGRiQ29uZmlnLmRhdGFiYXNlSW5zaWdodHMsXG4gICAgICBwcm94eTogZGJDb25maWcucHJveHksXG4gICAgICBjcmVkZW50aWFsczogZGJDb25maWcuY3JlZGVudGlhbHMsXG4gICAgICBzbmFwc2hvdElkZW50aWZpZXI6IGRiQ29uZmlnLnNuYXBzaG90SWRlbnRpZmllcixcbiAgICAgIHNuYXBzaG90VXNlcm5hbWU6IGRiQ29uZmlnLnNuYXBzaG90VXNlcm5hbWVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBdXJvcmFEYXRhYmFzZShcbiAgICBkYkNvbmZpZzogTm9uTnVsbGFibGU8SVBheWxvYWRQcm9wc1tcImRhdGFiYXNlXCJdPlxuICApOiBSZWxhdGlvbmFsRGF0YWJhc2Uge1xuICAgIGNvbnN0IGF1cm9yYVByb3BzOiBBdXJvcmFEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJBdXJvcmFcIixcbiAgICAgIC4uLnRoaXMuYnVpbGRCYXNlRGF0YWJhc2VQcm9wcyhkYkNvbmZpZyksXG4gICAgICBhbGxvd2VkSXBDaWRyOiBkYkNvbmZpZy5hbGxvd2VkSXBDaWRyLFxuICAgICAgZW5jcnlwdGlvbjogZGJDb25maWcuZW5jcnlwdGlvbixcbiAgICAgIHdyaXRlcjogZGJDb25maWcud3JpdGVyLFxuICAgICAgcmVhZGVyczogZGJDb25maWcucmVhZGVycyxcbiAgICAgIGFsbG93VnBjQWNjZXNzOiBkYkNvbmZpZy5hbGxvd1ZwY0FjY2VzcyxcbiAgICAgIG1vbml0b3JpbmdJbnRlcnZhbDogZGJDb25maWcubW9uaXRvcmluZ0ludGVydmFsLFxuICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6IGRiQ29uZmlnLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkRGF0YWJhc2UoXG4gICAgICBEYXRhYmFzZUZhY3RvcnkuYnVpbGQodGhpcy5wcm9wcy5uYW1lLCBhdXJvcmFQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJbnN0YW5jZURhdGFiYXNlKFxuICAgIGRiQ29uZmlnOiBOb25OdWxsYWJsZTxJUGF5bG9hZFByb3BzW1wiZGF0YWJhc2VcIl0+XG4gICk6IFJlbGF0aW9uYWxEYXRhYmFzZSB7XG4gICAgY29uc3QgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJJbnN0YW5jZVwiLFxuICAgICAgLi4udGhpcy5idWlsZEJhc2VEYXRhYmFzZVByb3BzKGRiQ29uZmlnKSxcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogZGJDb25maWcucHVibGljbHlBY2Nlc3NpYmxlID8/IGZhbHNlLFxuICAgICAgaW5zdGFuY2VUeXBlOiBkYkNvbmZpZy5pbnN0YW5jZVR5cGUsXG4gICAgICBhbGxvY2F0ZWRTdG9yYWdlOiBkYkNvbmZpZy5hbGxvY2F0ZWRTdG9yYWdlLFxuICAgICAgbXVsdGlBejogZGJDb25maWcubXVsdGlBeixcbiAgICAgIHJlYWRSZXBsaWNhOiBkYkNvbmZpZy5yZWFkUmVwbGljYSxcbiAgICAgIGVuY3J5cHRpb246IGRiQ29uZmlnLmVuY3J5cHRpb25cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGREYXRhYmFzZShcbiAgICAgIERhdGFiYXNlRmFjdG9yeS5idWlsZCh0aGlzLnByb3BzLm5hbWUsIGluc3RhbmNlUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3RvcmFnZUJ1Y2tldHMoKTogdm9pZCB7XG4gICAgdGhpcy5fYXNzZXRzQnVja2V0ID0gdGhpcy5jcmVhdGVBc3NldHNCdWNrZXQoKTtcbiAgICB0aGlzLl9jYWNoZUJ1Y2tldCA9IHRoaXMuY3JlYXRlQ2FjaGVCdWNrZXQoKTtcbiAgICB0aGlzLl9tZWRpYUJ1Y2tldCA9IHRoaXMuY3JlYXRlTWVkaWFCdWNrZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQXNzZXRzQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIGNvbnN0IGFzc2V0c0NvbmZpZyA9IHRoaXMucHJvcHMuc3RvcmFnZT8uYXNzZXRzID8/IHt9O1xuICAgIGNvbnN0IGFzc2V0c1Byb3BzOiBTM1Byb3BzID0ge1xuICAgICAgdmVyc2lvbmVkOiBhc3NldHNDb25maWcudmVyc2lvbmVkID8/IGZhbHNlLFxuICAgICAgZGVwbG95bWVudDoge1xuICAgICAgICBzb3VyY2U6IGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuQVNTRVRTfWAsXG4gICAgICAgIHBydW5lOiB0cnVlLFxuICAgICAgICBjYWNoZUNvbnRyb2w6IHtcbiAgICAgICAgICBtYXhBZ2U6IFBBWUxPQURfREVGQVVMVFMuQ0FDSEUuTUFYX0FHRV9TRUNPTkRTLFxuICAgICAgICAgIGltbXV0YWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkU3RvcmFnZShcbiAgICAgIFN0b3JhZ2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tYXNzZXRzYCwgYXNzZXRzUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2FjaGVCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgY29uc3QgY2FjaGVDb25maWcgPSB0aGlzLnByb3BzLnN0b3JhZ2U/LmNhY2hlID8/IHt9O1xuICAgIGNvbnN0IGNhY2hlUHJvcHM6IFMzUHJvcHMgPSB7XG4gICAgICB2ZXJzaW9uZWQ6IGNhY2hlQ29uZmlnLnZlcnNpb25lZCA/PyBmYWxzZSxcbiAgICAgIGRlcGxveW1lbnQ6IHtcbiAgICAgICAgc291cmNlOiBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vJHtQQVlMT0FEX0RFRkFVTFRTLk9QRU5ORVhULkNBQ0hFfWAsXG4gICAgICAgIHBydW5lOiBmYWxzZSAvLyBJU1IgYWRkcyBmaWxlcyBhdCBydW50aW1lXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkU3RvcmFnZShcbiAgICAgIFN0b3JhZ2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tY2FjaGVgLCBjYWNoZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1lZGlhQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIGNvbnN0IG1lZGlhQ29uZmlnID0gdGhpcy5wcm9wcy5zdG9yYWdlPy5tZWRpYSA/PyB7fTtcbiAgICBjb25zdCBtZWRpYVByb3BzOiBTM1Byb3BzID0ge1xuICAgICAgdmVyc2lvbmVkOiBtZWRpYUNvbmZpZy52ZXJzaW9uZWQgPz8gZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGRTdG9yYWdlKFxuICAgICAgU3RvcmFnZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1tZWRpYWAsIG1lZGlhUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGFnQ2FjaGUoKTogdm9pZCB7XG4gICAgY29uc3QgdGFnQ2FjaGVQcm9wczogRHluYW1vREJEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJEeW5hbW9EQlwiLFxuICAgICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwidGFnXCIsIHR5cGU6IFwiU1wiIH0sXG4gICAgICBzb3J0S2V5OiB7IG5hbWU6IFwicGF0aFwiLCB0eXBlOiBcIlNcIiB9LFxuICAgICAgZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlczogW1xuICAgICAgICB7XG4gICAgICAgICAgaW5kZXhOYW1lOiBcInJldmFsaWRhdGVcIixcbiAgICAgICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJwYXRoXCIsIHR5cGU6IFwiU1wiIH0sXG4gICAgICAgICAgc29ydEtleTogeyBuYW1lOiBcInJldmFsaWRhdGVkQXRcIiwgdHlwZTogXCJOXCIgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgICB0aGlzLl90YWdDYWNoZSA9IHRoaXMuYXBwLmFkZERhdGFiYXNlKFxuICAgICAgRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tdGFnLWNhY2hlYCwgdGFnQ2FjaGVQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXZhbGlkYXRpb25RdWV1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBxdWV1ZUNvbmZpZyA9IHRoaXMucHJvcHMubWVzc2FnaW5nPy5yZXZhbGlkYXRpb25RdWV1ZSA/PyB7fTtcbiAgICBjb25zdCByZXZhbGlkYXRpb25UaW1lb3V0ID1cbiAgICAgIHRoaXMucHJvcHMuY29tcHV0ZT8ucmV2YWxpZGF0aW9uPy50aW1lb3V0ID8/XG4gICAgICBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuUkVWQUxJREFUSU9OX1RJTUVPVVQ7XG5cbiAgICAvLyBSZXNvbHZlIGRlYWQgbGV0dGVyIHF1ZXVlIGNvbmZpZ1xuICAgIGxldCBkbHFDb25maWc6IElRdWV1ZVByb3BzW1wiZGVhZExldHRlclF1ZXVlXCJdO1xuICAgIGlmIChxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUgPT09IGZhbHNlKSB7XG4gICAgICBkbHFDb25maWcgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUpIHtcbiAgICAgIGRscUNvbmZpZyA9IHtcbiAgICAgICAgZW5hYmxlZDogcXVldWVDb25maWcuZGVhZExldHRlclF1ZXVlLmVuYWJsZWQgPz8gdHJ1ZSxcbiAgICAgICAgbWF4UmVjZWl2ZUNvdW50OiBxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUubWF4UmVjZWl2ZUNvdW50ID8/IDNcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRscUNvbmZpZyA9IHsgZW5hYmxlZDogdHJ1ZSwgbWF4UmVjZWl2ZUNvdW50OiAzIH07XG4gICAgfVxuXG4gICAgY29uc3QgcXVldWVQcm9wczogSVF1ZXVlUHJvcHMgPSB7XG4gICAgICB0eXBlOiBcInF1ZXVlXCIsXG4gICAgICBxdWV1ZVR5cGU6IFwiZmlmb1wiLFxuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IHF1ZXVlQ29uZmlnLnZpc2liaWxpdHlUaW1lb3V0ID8/IHJldmFsaWRhdGlvblRpbWVvdXQsXG4gICAgICBtZXNzYWdlUmV0ZW50aW9uUGVyaW9kOiBxdWV1ZUNvbmZpZy5tZXNzYWdlUmV0ZW50aW9uUGVyaW9kLFxuICAgICAgbWF4TWVzc2FnZVNpemU6IHF1ZXVlQ29uZmlnLm1heE1lc3NhZ2VTaXplLFxuICAgICAgY29udGVudEJhc2VkRGVkdXBsaWNhdGlvbjogdHJ1ZSxcbiAgICAgIGRlYWRMZXR0ZXJRdWV1ZTogZGxxQ29uZmlnXG4gICAgfTtcbiAgICB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZSA9IHRoaXMuYXBwLmFkZE1lc3NhZ2luZyhcbiAgICAgIE1lc3NhZ2luZ0ZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1yZXZhbGlkYXRpb25gLCBxdWV1ZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxhbWJkYUZ1bmN0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXJ2ZXIgPSB0aGlzLmNyZWF0ZVNlcnZlckxhbWJkYSgpO1xuICAgIHRoaXMuX2ltYWdlT3B0aW1pc2F0aW9uID0gdGhpcy5jcmVhdGVJbWFnZUxhbWJkYSgpO1xuICAgIHRoaXMuX3JldmFsaWRhdGlvbiA9IHRoaXMuY3JlYXRlUmV2YWxpZGF0aW9uTGFtYmRhKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlcnZlckxhbWJkYSgpOiBMYW1iZGFDb21wdXRlIHtcbiAgICBjb25zdCB7IG1lbW9yeVNpemUsIHRpbWVvdXQsIGVwaGVtZXJhbFN0b3JhZ2VTaXplIH0gPSByZXNvbHZlTGFtYmRhQ29uZmlnKFxuICAgICAgdGhpcy5wcm9wcy5jb21wdXRlPy5zZXJ2ZXIsXG4gICAgICB7XG4gICAgICAgIG1lbW9yeTogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLlNFUlZFUl9NRU1PUlksXG4gICAgICAgIHRpbWVvdXQ6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5TRVJWRVJfVElNRU9VVFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBzZXJ2ZXJQcm9wczogQ29kZUxhbWJkYVByb3BzID0ge1xuICAgICAgdHlwZTogXCJsYW1iZGFcIixcbiAgICAgIGRlcGxveW1lbnQ6IFwiY29kZVwiLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuU0VSVkVSfWBcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBtZW1vcnlTaXplLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplLFxuICAgICAgZnVuY3Rpb25Vcmw6IHtcbiAgICAgICAgYXV0aFR5cGU6IEZ1bmN0aW9uVXJsQXV0aFR5cGUuTk9ORSxcbiAgICAgICAgaW52b2tlTW9kZTogSW52b2tlTW9kZS5SRVNQT05TRV9TVFJFQU1cbiAgICAgIH0sXG4gICAgICBjb25uZWN0aW9uczogW3RoaXMuX2RhdGFiYXNlXSxcbiAgICAgIHNlY3JldHNJbXBvcnQ6IHtcbiAgICAgICAgREFUQUJBU0VfVVNFUk5BTUU6IHRoaXMuX2RhdGFiYXNlXG4gICAgICAgICAgLmdldENyZWRlbnRpYWxzKClcbiAgICAgICAgICAuZ2V0SW1wb3J0KFwidXNlcm5hbWVcIiksXG4gICAgICAgIERBVEFCQVNFX1BBU1NXT1JEOiB0aGlzLl9kYXRhYmFzZVxuICAgICAgICAgIC5nZXRDcmVkZW50aWFscygpXG4gICAgICAgICAgLmdldEltcG9ydChcInBhc3N3b3JkXCIpLFxuICAgICAgICBQQVlMT0FEX1NFQ1JFVDogdGhpcy5fcGF5bG9hZFNlY3JldC5nZXRJbXBvcnQoKVxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLmJ1aWxkU2VydmVyRW52aXJvbm1lbnQoKVxuICAgIH07XG5cbiAgICBjb25zdCBzZXJ2ZXIgPSB0aGlzLmFwcC5hZGRDb21wdXRlKFxuICAgICAgQ29tcHV0ZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1zZXJ2ZXJgLCBzZXJ2ZXJQcm9wcylcbiAgICApO1xuXG4gICAgdGhpcy5ncmFudFNlcnZlclBlcm1pc3Npb25zKHNlcnZlcik7XG4gICAgcmV0dXJuIHNlcnZlcjtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTZXJ2ZXJFbnZpcm9ubWVudCgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBiYXNlRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgREFUQUJBU0VfSE9TVDogdGhpcy5fZGF0YWJhc2UuZ2V0SG9zdEVuZHBvaW50KCksXG4gICAgICBEQVRBQkFTRV9QT1JUOiB0aGlzLl9kYXRhYmFzZS5nZXRIb3N0UG9ydCgpLFxuICAgICAgREFUQUJBU0VfTkFNRTogdGhpcy5fZGF0YWJhc2UuZ2V0RGF0YWJhc2VOYW1lKCksXG4gICAgICBEQVRBQkFTRV9TU0w6IFwidHJ1ZVwiLFxuICAgICAgQ0FDSEVfQlVDS0VUX05BTUU6IHRoaXMuX2NhY2hlQnVja2V0LmdldEJ1Y2tldE5hbWUoKSxcbiAgICAgIENBQ0hFX0JVQ0tFVF9SRUdJT046IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbixcbiAgICAgIENBQ0hFX0RZTkFNT19UQUJMRTogdGhpcy5fdGFnQ2FjaGUuZ2V0VGFibGVOYW1lKCksXG4gICAgICBSRVZBTElEQVRJT05fUVVFVUVfVVJMOiB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5nZXRRdWV1ZVVybCgpLFxuICAgICAgUkVWQUxJREFUSU9OX1FVRVVFX1JFR0lPTjogU3RhY2sub2YodGhpcykucmVnaW9uLFxuICAgICAgTUVESUFfQlVDS0VUX05BTUU6IHRoaXMuX21lZGlhQnVja2V0LmdldEJ1Y2tldE5hbWUoKVxuICAgIH07XG5cbiAgICAvLyBMb2NrIGRvd24gQ09SUyB0byBjdXN0b20gZG9tYWluIHdoZW4gcHJvdmlkZWRcbiAgICBjb25zdCBjdXN0b21Eb21haW4gPSB0aGlzLnByb3BzLmRvbWFpbiA/PyB0aGlzLnByb3BzLmNkbj8uZG9tYWluTmFtZXM/LlswXTtcbiAgICBpZiAoY3VzdG9tRG9tYWluKSB7XG4gICAgICBiYXNlRW52Lk5FWFRfUFVCTElDX1NFUlZFUl9VUkwgPSBgaHR0cHM6Ly8ke2N1c3RvbURvbWFpbn1gO1xuICAgIH1cblxuICAgIHJldHVybiB7IC4uLmJhc2VFbnYsIC4uLnRoaXMucHJvcHMuZW52aXJvbm1lbnQgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JhbnRTZXJ2ZXJQZXJtaXNzaW9ucyhzZXJ2ZXI6IExhbWJkYUNvbXB1dGUpOiB2b2lkIHtcbiAgICBjb25zdCBzZXJ2ZXJGdW5jdGlvbiA9IHJlcXVpcmVGdW5jdGlvbihzZXJ2ZXIsIFwiU2VydmVyXCIpO1xuICAgIHRoaXMuX2NhY2hlQnVja2V0LmdyYW50UmVhZFdyaXRlKHNlcnZlckZ1bmN0aW9uKTtcbiAgICB0aGlzLl9tZWRpYUJ1Y2tldC5ncmFudFJlYWRXcml0ZShzZXJ2ZXJGdW5jdGlvbik7XG4gICAgdGhpcy5fdGFnQ2FjaGUuZ3JhbnRSZWFkV3JpdGVEYXRhKHNlcnZlckZ1bmN0aW9uKTtcbiAgICB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5ncmFudFNlbmRNZXNzYWdlcyhzZXJ2ZXJGdW5jdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUltYWdlTGFtYmRhKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIGNvbnN0IHsgbWVtb3J5U2l6ZSwgdGltZW91dCwgZXBoZW1lcmFsU3RvcmFnZVNpemUgfSA9IHJlc29sdmVMYW1iZGFDb25maWcoXG4gICAgICB0aGlzLnByb3BzLmNvbXB1dGU/LmltYWdlT3B0aW1pc2F0aW9uLFxuICAgICAge1xuICAgICAgICBtZW1vcnk6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5JTUFHRV9NRU1PUlksXG4gICAgICAgIHRpbWVvdXQ6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5JTUFHRV9USU1FT1VUXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IGltYWdlUHJvcHM6IENvZGVMYW1iZGFQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwibGFtYmRhXCIsXG4gICAgICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFxuICAgICAgICBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vJHtQQVlMT0FEX0RFRkFVTFRTLk9QRU5ORVhULklNQUdFfWBcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBtZW1vcnlTaXplLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplLFxuICAgICAgZnVuY3Rpb25Vcmw6IHsgYXV0aFR5cGU6IEZ1bmN0aW9uVXJsQXV0aFR5cGUuTk9ORSB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQlVDS0VUX05BTUU6IHRoaXMuX2Fzc2V0c0J1Y2tldC5nZXRCdWNrZXROYW1lKCksXG4gICAgICAgIEJVQ0tFVF9LRVlfUFJFRklYOiBcIl9hc3NldHNcIlxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpbWFnZSA9IHRoaXMuYXBwLmFkZENvbXB1dGUoXG4gICAgICBDb21wdXRlRmFjdG9yeS5idWlsZChgJHt0aGlzLnByb3BzLm5hbWV9LWltYWdlYCwgaW1hZ2VQcm9wcylcbiAgICApO1xuXG4gICAgY29uc3QgaW1hZ2VGdW5jdGlvbiA9IHJlcXVpcmVGdW5jdGlvbihpbWFnZSwgXCJJbWFnZU9wdGltaXNhdGlvblwiKTtcbiAgICB0aGlzLl9hc3NldHNCdWNrZXQuZ3JhbnRSZWFkKGltYWdlRnVuY3Rpb24pO1xuXG4gICAgcmV0dXJuIGltYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXZhbGlkYXRpb25MYW1iZGEoKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgY29uc3QgeyBtZW1vcnlTaXplLCB0aW1lb3V0LCBlcGhlbWVyYWxTdG9yYWdlU2l6ZSB9ID0gcmVzb2x2ZUxhbWJkYUNvbmZpZyhcbiAgICAgIHRoaXMucHJvcHMuY29tcHV0ZT8ucmV2YWxpZGF0aW9uLFxuICAgICAge1xuICAgICAgICBtZW1vcnk6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5SRVZBTElEQVRJT05fTUVNT1JZLFxuICAgICAgICB0aW1lb3V0OiBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuUkVWQUxJREFUSU9OX1RJTUVPVVRcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uUHJvcHM6IENvZGVMYW1iZGFQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwibGFtYmRhXCIsXG4gICAgICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFxuICAgICAgICBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vJHtQQVlMT0FEX0RFRkFVTFRTLk9QRU5ORVhULlJFVkFMSURBVElPTn1gXG4gICAgICApLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgbWVtb3J5U2l6ZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIENBQ0hFX0RZTkFNT19UQUJMRTogdGhpcy5fdGFnQ2FjaGUuZ2V0VGFibGVOYW1lKCksXG4gICAgICAgIENBQ0hFX0JVQ0tFVF9OQU1FOiB0aGlzLl9jYWNoZUJ1Y2tldC5nZXRCdWNrZXROYW1lKClcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uID0gdGhpcy5hcHAuYWRkQ29tcHV0ZShcbiAgICAgIENvbXB1dGVGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tcmV2YWxpZGF0aW9uYCwgcmV2YWxpZGF0aW9uUHJvcHMpXG4gICAgKTtcblxuICAgIGNvbnN0IHJldmFsaWRhdGlvbkxhbWJkYSA9IHJldmFsaWRhdGlvbi5nZXRMYW1iZGFGdW5jdGlvbigpO1xuICAgIHJldmFsaWRhdGlvbkxhbWJkYS5hZGRTcXNFdmVudFNvdXJjZSh0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5nZXRRdWV1ZSgpLCB7XG4gICAgICBiYXRjaFNpemU6IDVcbiAgICB9KTtcblxuICAgIGNvbnN0IHJldmFsaWRhdGlvbkZ1bmN0aW9uID0gcmVxdWlyZUZ1bmN0aW9uKHJldmFsaWRhdGlvbiwgXCJSZXZhbGlkYXRpb25cIik7XG4gICAgdGhpcy5fdGFnQ2FjaGUuZ3JhbnRSZWFkV3JpdGVEYXRhKHJldmFsaWRhdGlvbkZ1bmN0aW9uKTtcbiAgICB0aGlzLl9jYWNoZUJ1Y2tldC5ncmFudFJlYWRXcml0ZShyZXZhbGlkYXRpb25GdW5jdGlvbik7XG4gICAgdGhpcy5fcmV2YWxpZGF0aW9uUXVldWUuZ3JhbnRDb25zdW1lTWVzc2FnZXMocmV2YWxpZGF0aW9uRnVuY3Rpb24pO1xuXG4gICAgcmV0dXJuIHJldmFsaWRhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2RuKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZG9tYWluTmFtZXMsIGNlcnRpZmljYXRlIH0gPSB0aGlzLnJlc29sdmVEb21haW5Db25maWcoKTtcblxuICAgIGNvbnN0IGNkblByb3BzOiBTbWFydENkblByb3BzID0ge1xuICAgICAgb3JpZ2luVHlwZTogXCJhdXRvXCIsXG4gICAgICBvcmlnaW46IHRoaXMuX3NlcnZlcixcbiAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfRElTQUJMRURcIixcbiAgICAgIGRlZmF1bHRBbGxvd2VkTWV0aG9kczogXCJBTExcIixcbiAgICAgIGZvcndhcmRIb3N0SGVhZGVyOiB0cnVlLFxuICAgICAgcHJpY2VDbGFzczogXCJQcmljZUNsYXNzXzEwMFwiLFxuICAgICAgZG9tYWluTmFtZXMsXG4gICAgICBjZXJ0aWZpY2F0ZSxcbiAgICAgIGJlaGF2aW91cnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLlNUQVRJQyxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX2Fzc2V0c0J1Y2tldCxcbiAgICAgICAgICBjYWNoZVBvbGljeTogXCJDQUNISU5HX09QVElNSVpFRFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXRoUGF0dGVybjogUEFZTE9BRF9ERUZBVUxUUy5QQVRIUy5JTUFHRSxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX2ltYWdlT3B0aW1pc2F0aW9uLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfT1BUSU1JWkVEXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLkFQSSxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX3NlcnZlcixcbiAgICAgICAgICBjYWNoZVBvbGljeTogXCJDQUNISU5HX0RJU0FCTEVEXCIsXG4gICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IFwiQUxMXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLkFETUlOLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5fc2VydmVyLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfRElTQUJMRURcIixcbiAgICAgICAgICBhbGxvd2VkTWV0aG9kczogXCJBTExcIlxuICAgICAgICB9LFxuICAgICAgICAuLi4odGhpcy5wcm9wcy5jZG4/LmJlaGF2aW91cnMgPz8gW10pXG4gICAgICBdXG4gICAgfTtcblxuICAgIHRoaXMuX2NkbiA9IHRoaXMuYXBwLmFkZENkbihDZG5GYWN0b3J5LmJ1aWxkKHRoaXMucHJvcHMubmFtZSwgY2RuUHJvcHMpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZURvbWFpbkNvbmZpZygpOiB7XG4gICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQ7XG4gICAgaG9zdGVkWm9uZTogUmV0dXJuVHlwZTx0eXBlb2YgSG9zdGVkWm9uZS5mcm9tTG9va3VwPiB8IHVuZGVmaW5lZDtcbiAgfSB7XG4gICAgaWYgKHRoaXMuX3Jlc29sdmVkRG9tYWluKSByZXR1cm4gdGhpcy5fcmVzb2x2ZWREb21haW47XG5cbiAgICBpZiAodGhpcy5wcm9wcy5kb21haW4pIHtcbiAgICAgIHRoaXMuX3Jlc29sdmVkRG9tYWluID0gdGhpcy5yZXNvbHZlU2ltcGxlRG9tYWluKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmNkbj8uZG9tYWluTmFtZXM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZWREb21haW4gPSB0aGlzLnJlc29sdmVBZHZhbmNlZERvbWFpbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXNvbHZlZERvbWFpbiA9IHtcbiAgICAgICAgZG9tYWluTmFtZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgY2VydGlmaWNhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgaG9zdGVkWm9uZTogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlZERvbWFpbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVNpbXBsZURvbWFpbigpOiB7XG4gICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdO1xuICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGU7XG4gICAgaG9zdGVkWm9uZTogUmV0dXJuVHlwZTx0eXBlb2YgSG9zdGVkWm9uZS5mcm9tTG9va3VwPjtcbiAgfSB7XG4gICAgY29uc3QgZG9tYWluID0gdGhpcy5wcm9wcy5kb21haW47XG4gICAgaWYgKCFkb21haW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRvbWFpbiBpcyByZXF1aXJlZCBmb3Igc2ltcGxlIGRvbWFpbiByZXNvbHV0aW9uXCIpO1xuICAgIH1cbiAgICBjb25zdCByb290RG9tYWluID0gZXh0cmFjdFJvb3REb21haW4oZG9tYWluKTtcblxuICAgIGNvbnN0IGhvc3RlZFpvbmUgPSBIb3N0ZWRab25lLmZyb21Mb29rdXAoXG4gICAgICB0aGlzLFxuICAgICAgYCR7dGhpcy5wYXNjYWxOYW1lfUhvc3RlZFpvbmVgLFxuICAgICAgeyBkb21haW5OYW1lOiByb290RG9tYWluIH1cbiAgICApO1xuXG4gICAgY29uc3QgY2VydGlmaWNhdGUgPSBuZXcgQ2VydGlmaWNhdGUodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfUNlcnRpZmljYXRlYCwge1xuICAgICAgZG9tYWluTmFtZTogZG9tYWluLFxuICAgICAgdmFsaWRhdGlvbjogQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnMoaG9zdGVkWm9uZSlcbiAgICB9KTtcblxuICAgIHJldHVybiB7IGRvbWFpbk5hbWVzOiBbZG9tYWluXSwgY2VydGlmaWNhdGUsIGhvc3RlZFpvbmUgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUFkdmFuY2VkRG9tYWluKCk6IHtcbiAgICBkb21haW5OYW1lczogc3RyaW5nW107XG4gICAgY2VydGlmaWNhdGU6IElDZXJ0aWZpY2F0ZSB8IHVuZGVmaW5lZDtcbiAgICBob3N0ZWRab25lOiB1bmRlZmluZWQ7XG4gIH0ge1xuICAgIGNvbnN0IGNkbkNvbmZpZyA9IHRoaXMucHJvcHMuY2RuO1xuICAgIGlmICghY2RuQ29uZmlnPy5kb21haW5OYW1lcz8ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ0ROIGRvbWFpbiBuYW1lcyBhcmUgcmVxdWlyZWQgZm9yIGFkdmFuY2VkIGRvbWFpbiByZXNvbHV0aW9uXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY2VydGlmaWNhdGUgPVxuICAgICAgY2RuQ29uZmlnLmNlcnRpZmljYXRlID8/XG4gICAgICAoY2RuQ29uZmlnLmNlcnRpZmljYXRlQXJuXG4gICAgICAgID8gQ2VydGlmaWNhdGUuZnJvbUNlcnRpZmljYXRlQXJuKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGAke3RoaXMucGFzY2FsTmFtZX1DZXJ0aWZpY2F0ZWAsXG4gICAgICAgICAgICBjZG5Db25maWcuY2VydGlmaWNhdGVBcm5cbiAgICAgICAgICApXG4gICAgICAgIDogdW5kZWZpbmVkKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkb21haW5OYW1lczogY2RuQ29uZmlnLmRvbWFpbk5hbWVzLFxuICAgICAgY2VydGlmaWNhdGUsXG4gICAgICBob3N0ZWRab25lOiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEbnNSZWNvcmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLmRvbWFpbikgcmV0dXJuO1xuXG4gICAgY29uc3QgeyBob3N0ZWRab25lIH0gPSB0aGlzLnJlc29sdmVEb21haW5Db25maWcoKTtcbiAgICBpZiAoIWhvc3RlZFpvbmUpIHJldHVybjtcblxuICAgIC8vIENyZWF0ZSB0aGUgRE5TIHJlY29yZCBpbiB0aGUgQ0ROIHN0YWNrIChub3QgdGhlIENvbXB1dGUgc3RhY2sgd2hlcmUgdGhpc1xuICAgIC8vIFBheWxvYWQgY29uc3RydWN0IGxpdmVzKSB0byBhdm9pZCBhIGN5Y2xpYyBkZXBlbmRlbmN5OiBDRE4gcmVmZXJlbmNlcyB0aGVcbiAgICAvLyBzZXJ2ZXIgTGFtYmRhIEZ1bmN0aW9uVXJsLCBzbyBDb21wdXRlIGNhbm5vdCBhbHNvIGRlcGVuZCBvbiBDRE4uXG4gICAgY29uc3QgY2RuU3RhY2sgPSB0aGlzLmFwcC5nZXREZWZhdWx0Q2RuU3RhY2soKS5nZXRTdGFjaygpO1xuICAgIG5ldyBBUmVjb3JkKGNkblN0YWNrLCBgJHt0aGlzLnBhc2NhbE5hbWV9QWxpYXNSZWNvcmRgLCB7XG4gICAgICB6b25lOiBob3N0ZWRab25lLFxuICAgICAgcmVjb3JkTmFtZTogdGhpcy5wcm9wcy5kb21haW4sXG4gICAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgIG5ldyBDbG91ZEZyb250VGFyZ2V0KHRoaXMuX2Nkbi5nZXREaXN0cmlidXRpb24oKSlcbiAgICAgIClcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXhwb3J0UGF0dGVybk91dHB1dHMoKTogdm9pZCB7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVyblR5cGVgLCB7XG4gICAgICBrZXk6IGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuVHlwZWAsXG4gICAgICB2YWx1ZTogXCJwYXlsb2FkXCIsXG4gICAgICBkZXNjcmlwdGlvbjogYFBhdHRlcm4gdHlwZSBmb3IgJHt0aGlzLnByb3BzLm5hbWV9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVybk5hbWVgLCB7XG4gICAgICBrZXk6IGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuTmFtZWAsXG4gICAgICB2YWx1ZTogdGhpcy5wcm9wcy5uYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGBQYXR0ZXJuIG5hbWUgZm9yICR7dGhpcy5wcm9wcy5uYW1lfWBcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5MYW1iZGFzYCwge1xuICAgICAga2V5OiBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVybkxhbWJkYXNgLFxuICAgICAgdmFsdWU6IFtcbiAgICAgICAgYCR7dGhpcy5wcm9wcy5uYW1lfS1zZXJ2ZXJgLFxuICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LWltYWdlYCxcbiAgICAgICAgYCR7dGhpcy5wcm9wcy5uYW1lfS1yZXZhbGlkYXRpb25gXG4gICAgICBdLmpvaW4oXCIsXCIpLFxuICAgICAgZGVzY3JpcHRpb246IGBMYW1iZGEgY29uc3RydWN0IHByZWZpeGVzIGZvciBwYXR0ZXJuICR7dGhpcy5wcm9wcy5uYW1lfWBcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5SZXNvdXJjZXNgLCB7XG4gICAgICBrZXk6IGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuUmVzb3VyY2VzYCxcbiAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGRhdGFiYXNlczogW3RoaXMucHJvcHMubmFtZSwgYCR7dGhpcy5wcm9wcy5uYW1lfS10YWctY2FjaGVgXSxcbiAgICAgICAgc3RvcmFnZTogW1xuICAgICAgICAgIGAke3RoaXMucHJvcHMubmFtZX0tYXNzZXRzYCxcbiAgICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LWNhY2hlYCxcbiAgICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LW1lZGlhYFxuICAgICAgICBdLFxuICAgICAgICBjZG46IHRoaXMucHJvcHMubmFtZVxuICAgICAgfSksXG4gICAgICBkZXNjcmlwdGlvbjogYFJlbGF0ZWQgcmVzb3VyY2UgbmFtZXMgZm9yIHBhdHRlcm4gJHt0aGlzLnByb3BzLm5hbWV9YFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RGF0YWJhc2UoKTogUmVsYXRpb25hbERhdGFiYXNlIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YWJhc2U7XG4gIH1cblxuICBnZXRTZXJ2ZXIoKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgfVxuXG4gIGdldEltYWdlT3B0aW1pc2F0aW9uKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIHJldHVybiB0aGlzLl9pbWFnZU9wdGltaXNhdGlvbjtcbiAgfVxuXG4gIGdldFJldmFsaWRhdGlvbigpOiBMYW1iZGFDb21wdXRlIHtcbiAgICByZXR1cm4gdGhpcy5fcmV2YWxpZGF0aW9uO1xuICB9XG5cbiAgZ2V0QXNzZXRzQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIHJldHVybiB0aGlzLl9hc3NldHNCdWNrZXQ7XG4gIH1cblxuICBnZXRDYWNoZUJ1Y2tldCgpOiBTdG9yYWdlIHtcbiAgICByZXR1cm4gdGhpcy5fY2FjaGVCdWNrZXQ7XG4gIH1cblxuICBnZXRNZWRpYUJ1Y2tldCgpOiBTdG9yYWdlIHtcbiAgICByZXR1cm4gdGhpcy5fbWVkaWFCdWNrZXQ7XG4gIH1cblxuICBnZXRUYWdDYWNoZSgpOiBEeW5hbW9EQkRhdGFiYXNlIHtcbiAgICByZXR1cm4gdGhpcy5fdGFnQ2FjaGU7XG4gIH1cblxuICBnZXRSZXZhbGlkYXRpb25RdWV1ZSgpOiBRdWV1ZU1lc3NhZ2luZyB7XG4gICAgcmV0dXJuIHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlO1xuICB9XG5cbiAgZ2V0Q2RuKCk6IENkbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NkbjtcbiAgfVxufVxuIl19
@@ -3,7 +3,8 @@ import { type IBucket, type EventType, type IBucketNotificationDestination, type
3
3
  import { BucketDeployment } from "aws-cdk-lib/aws-s3-deployment";
4
4
  import { type IGrantable, type Grant } from "aws-cdk-lib/aws-iam";
5
5
  import type App from "../../app";
6
- import { type BackupVaultTier, type WebsiteHostingConfig } from "../../resources/aws/storage";
6
+ import { type WebsiteHostingConfig } from "../../resources/aws/storage";
7
+ import { type BackupTier } from "../../utils/backupTierMapping";
7
8
  import { type IStorage } from "./interfaces/storage.js";
8
9
  import { type IStorageConnector } from "./interfaces/connector.js";
9
10
  export { type IStorage, isStorage } from "./interfaces/storage.js";
@@ -35,7 +36,7 @@ export interface S3Props {
35
36
  readonly versioned?: boolean;
36
37
  readonly encryption?: "AES256" | "KMS";
37
38
  readonly kmsKeyArn?: string;
38
- readonly backupVaultTier?: BackupVaultTier;
39
+ readonly backupVaultTier?: BackupTier;
39
40
  readonly cors?: CorsRule[];
40
41
  readonly deployment?: S3DeploymentConfig;
41
42
  }