@jjrawlins/cfn-drift-remediate 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cli.js CHANGED
@@ -66,6 +66,7 @@ async function remediate(options, spinner) {
66
66
  remediatedResources: [],
67
67
  skippedResources: [],
68
68
  removedResources: [],
69
+ nonImportableResources: [],
69
70
  errors: [],
70
71
  };
71
72
  const log = (message) => {
@@ -126,29 +127,71 @@ async function remediate(options, spinner) {
126
127
  result.success = true;
127
128
  return result;
128
129
  }
129
- // Filter to only importable resources
130
+ // Categorize drifted resources by importability and drift status
130
131
  const modifiedResources = [];
131
132
  const deletedResources = [];
133
+ const nonImportableModified = [];
134
+ const nonImportableDeleted = [];
132
135
  for (const resource of allDriftedResources) {
133
- if (!(0, eligible_resources_1.isResourceImportable)(resource.resourceType)) {
134
- result.skippedResources.push(resource.logicalResourceId);
135
- continue;
136
- }
136
+ const importable = (0, eligible_resources_1.isResourceImportable)(resource.resourceType);
137
137
  if (resource.stackResourceDriftStatus === 'DELETED') {
138
- deletedResources.push(resource);
138
+ if (importable) {
139
+ deletedResources.push(resource);
140
+ }
141
+ else {
142
+ nonImportableDeleted.push(resource);
143
+ }
139
144
  }
140
145
  else {
141
- modifiedResources.push(resource);
146
+ if (importable) {
147
+ modifiedResources.push(resource);
148
+ }
149
+ else {
150
+ nonImportableModified.push(resource);
151
+ }
142
152
  }
143
153
  }
144
- if (modifiedResources.length === 0 && deletedResources.length === 0) {
154
+ // Track non-importable resources in result
155
+ for (const r of nonImportableModified) {
156
+ result.nonImportableResources.push({
157
+ logicalResourceId: r.logicalResourceId,
158
+ resourceType: r.resourceType,
159
+ physicalResourceId: r.physicalResourceId,
160
+ driftStatus: 'MODIFIED',
161
+ propertyDifferences: r.propertyDifferences,
162
+ });
163
+ }
164
+ for (const r of nonImportableDeleted) {
165
+ result.nonImportableResources.push({
166
+ logicalResourceId: r.logicalResourceId,
167
+ resourceType: r.resourceType,
168
+ physicalResourceId: r.physicalResourceId,
169
+ driftStatus: 'DELETED',
170
+ });
171
+ }
172
+ // Display non-importable report before prompts
173
+ if (nonImportableModified.length > 0 || nonImportableDeleted.length > 0) {
174
+ if (spinner)
175
+ spinner.stop();
176
+ (0, interactive_1.displayNonImportableReport)(nonImportableModified, nonImportableDeleted);
177
+ }
178
+ // If all drifted resources are non-importable MODIFIED, report and return
179
+ if (modifiedResources.length === 0 && deletedResources.length === 0 && nonImportableDeleted.length === 0) {
180
+ if (nonImportableModified.length > 0) {
181
+ result.success = true;
182
+ return result;
183
+ }
145
184
  result.errors.push('All drifted resources are not eligible for import');
146
185
  return result;
147
186
  }
148
- // Step 4: Interactive decisions
187
+ // Step 4: Interactive decisions (importable resources only)
149
188
  if (spinner)
150
189
  spinner.stop();
151
190
  decisions = await (0, interactive_1.promptForDecisions)(modifiedResources, deletedResources, options.yes ?? false);
191
+ // Non-importable DELETED resources are always removed (no prompt needed)
192
+ for (const r of nonImportableDeleted) {
193
+ decisions.remove.push(r);
194
+ }
152
195
  if (spinner)
153
196
  spinner.start('Processing...');
154
197
  // Export plan if requested (exit without executing)
@@ -160,7 +203,7 @@ async function remediate(options, spinner) {
160
203
  toolVersion: packageVersion(),
161
204
  driftDetectionId: detectionId,
162
205
  };
163
- const plan = (0, plan_1.buildPlan)(planMetadata, decisions);
206
+ const plan = (0, plan_1.buildPlan)(planMetadata, decisions, nonImportableModified);
164
207
  const planPath = path.resolve(options.exportPlan);
165
208
  fs.writeFileSync(planPath, (0, plan_1.serializePlan)(plan));
166
209
  if (spinner)
@@ -257,6 +300,13 @@ async function remediate(options, spinner) {
257
300
  console.log(` - ${c.logicalResourceId} (${c.resourceType}) -> depends on ${c.dependsOn}`);
258
301
  }
259
302
  }
303
+ const reportOnly = result.nonImportableResources.filter((r) => r.driftStatus === 'MODIFIED');
304
+ if (reportOnly.length > 0) {
305
+ console.log('\nNon-importable drifted resources (manual action required):');
306
+ for (const r of reportOnly) {
307
+ console.log(` - ${r.logicalResourceId} (${r.resourceType}) [MODIFIED]`);
308
+ }
309
+ }
260
310
  result.success = true;
261
311
  result.remediatedResources = allImportable.map((r) => r.LogicalResourceId);
262
312
  result.removedResources = [
@@ -388,4 +438,4 @@ async function remediate(options, spinner) {
388
438
  }
389
439
  return result;
390
440
  }
391
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBDQSw4QkE2YUM7QUF2ZEQsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUU3QixpREFBb0Q7QUFDcEQsaUVBQTRGO0FBQzVGLG1EQUE4RTtBQUM5RSxxQ0FBaUY7QUFDakYsK0RBQTBGO0FBQzFGLHFFQVNvQztBQVNwQyx1Q0FBd0M7QUFFeEMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLHdCQUF3QixDQUFDLENBQUM7QUFFbEcsU0FBUyxjQUFjO0lBQ3JCLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMzRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDL0QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsU0FBUyxDQUM3QixPQUEyQixFQUMzQixPQUFhO0lBRWIsTUFBTSxNQUFNLEdBQUcsSUFBSSw2QkFBZ0IsQ0FBQztRQUNsQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07UUFDdEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0tBQ3pCLENBQUMsQ0FBQztJQUVILE1BQU0sTUFBTSxHQUFzQjtRQUNoQyxPQUFPLEVBQUUsS0FBSztRQUNkLG1CQUFtQixFQUFFLEVBQUU7UUFDdkIsZ0JBQWdCLEVBQUUsRUFBRTtRQUNwQixnQkFBZ0IsRUFBRSxFQUFFO1FBQ3BCLE1BQU0sRUFBRSxFQUFFO0tBQ1gs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TUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgT3JhIH0gZnJvbSAnb3JhJztcbmltcG9ydCB7IENmbkNsaWVudFdyYXBwZXIgfSBmcm9tICcuL2xpYi9jZm4tY2xpZW50JztcbmltcG9ydCB7IGlzUmVzb3VyY2VJbXBvcnRhYmxlLCBnZXRBbGxSZXF1aXJlZENhcGFiaWxpdGllcyB9IGZyb20gJy4vbGliL2VsaWdpYmxlLXJlc291cmNlcyc7XG5pbXBvcnQgeyBkaXNwbGF5Q2FzY2FkZVdhcm5pbmcsIHByb21wdEZvckRlY2lzaW9ucyB9IGZyb20gJy4vbGliL2ludGVyYWN0aXZlJztcbmltcG9ydCB7IGJ1aWxkUGxhbiwgc2VyaWFsaXplUGxhbiwgbG9hZFBsYW4sIHBsYW5Ub0RlY2lzaW9ucyB9IGZyb20gJy4vbGliL3BsYW4nO1xuaW1wb3J0IHsgYnVpbGRSZXNvdXJjZXNUb0ltcG9ydCwgYnVpbGRSZWltcG9ydERlc2NyaXB0b3IgfSBmcm9tICcuL2xpYi9yZXNvdXJjZS1pbXBvcnRlcic7XG5pbXBvcnQge1xuICBwYXJzZVRlbXBsYXRlLFxuICBzdHJpbmdpZnlUZW1wbGF0ZSxcbiAgY29sbGVjdFJlZmVyZW5jZXMsXG4gIGFkZFJlc29sdXRpb25PdXRwdXRzLFxuICBwYXJzZVJlc29sdmVkT3V0cHV0cyxcbiAgc2V0UmV0ZW50aW9uT25BbGxSZXNvdXJjZXMsXG4gIHRyYW5zZm9ybVRlbXBsYXRlRm9yUmVtb3ZhbCxcbiAgYW5hbHl6ZUNhc2NhZGVSZW1vdmFscyxcbn0gZnJvbSAnLi9saWIvdGVtcGxhdGUtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHtcbiAgUmVtZWRpYXRpb25PcHRpb25zLFxuICBSZW1lZGlhdGlvblJlc3VsdCxcbiAgUmVjb3ZlcnlDaGVja3BvaW50LFxuICBEcmlmdGVkUmVzb3VyY2UsXG4gIEludGVyYWN0aXZlRGVjaXNpb25zLFxuICBSZXNvdXJjZVRvSW1wb3J0LFxufSBmcm9tICcuL2xpYi90eXBlcyc7XG5pbXBvcnQgeyBkZWVwQ2xvbmUgfSBmcm9tICcuL2xpYi91dGlscyc7XG5cbmNvbnN0IERFRkFVTFRfQ0FQQUJJTElUSUVTID0gWydDQVBBQklMSVRZX0lBTScsICdDQVBBQklMSVRZX05BTUVEX0lBTScsICdDQVBBQklMSVRZX0FVVE9fRVhQQU5EJ107XG5cbmZ1bmN0aW9uIHBhY2thZ2VWZXJzaW9uKCk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGtnUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdwYWNrYWdlLmpzb24nKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGtnUGF0aCwgJ3V0Zi04JykpLnZlcnNpb247XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAndW5rbm93bic7XG4gIH1cbn1cblxuLyoqXG4gKiBNYWluIHJlbWVkaWF0aW9uIGZ1bmN0aW9uIHRoYXQgb3JjaGVzdHJhdGVzIHRoZSBkcmlmdCByZW1lZGlhdGlvbiBwcm9jZXNzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW1lZGlhdGUoXG4gIG9wdGlvbnM6IFJlbWVkaWF0aW9uT3B0aW9ucyxcbiAgc3Bpbm5lcj86IE9yYSxcbik6IFByb21pc2U8UmVtZWRpYXRpb25SZXN1bHQ+IHtcbiAgY29uc3QgY2xpZW50ID0gbmV3IENmbkNsaWVudFdyYXBwZXIoe1xuICAgIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24sXG4gICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICB9KTtcblxuICBjb25zdCByZXN1bHQ6IFJlbWVkaWF0aW9uUmVzdWx0ID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIHJlbWVkaWF0ZWRSZXNvdXJjZXM6IFtdLFxuICAgIHNraXBwZWRSZXNvdXJjZXM6IFtdLFxuICAgIHJlbW92ZWRSZXNvdXJjZXM6IFtdLFxuICAgIGVycm9yczogW10sXG4gIH07XG5cbiAgY29uc3QgbG9nID0gKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICAgIGlmIChzcGlubmVyKSB7XG4gICAgICBzcGlubmVyLnRleHQgPSBtZXNzYWdlO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICB9XG4gIH07XG5cbiAgdHJ5IHtcbiAgICAvLyBTdGVwIDE6IEdldCBzdGFjayBpbmZvIGFuZCBvcmlnaW5hbCB0ZW1wbGF0ZVxuICAgIGxvZygnRmV0Y2hpbmcgc3RhY2sgaW5mb3JtYXRpb24uLi4nKTtcbiAgICBjb25zdCBzdGFja0luZm8gPSBhd2FpdCBjbGllbnQuZ2V0U3RhY2tJbmZvKG9wdGlvbnMuc3RhY2tOYW1lKTtcblxuICAgIGxvZygnRmV0Y2hpbmcgb3JpZ2luYWwgdGVtcGxhdGUuLi4nKTtcbiAgICBjb25zdCBvcmlnaW5hbFRlbXBsYXRlQm9keSA9IGF3YWl0IGNsaWVudC5nZXRUZW1wbGF0ZShzdGFja0luZm8uc3RhY2tJZCwgdHJ1ZSk7XG4gICAgY29uc3Qgb3JpZ2luYWxUZW1wbGF0ZSA9IHBhcnNlVGVtcGxhdGUob3JpZ2luYWxUZW1wbGF0ZUJvZHkpO1xuXG4gICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgY29uc29sZS5sb2coYEZvdW5kIHN0YWNrOiAke3N0YWNrSW5mby5zdGFja05hbWV9ICgke3N0YWNrSW5mby5zdGFja0lkfSlgKTtcbiAgICB9XG5cbiAgICAvLyBTdGVwcyAyLTQ6IERldGVjdCBkcmlmdCBhbmQgY29sbGVjdCBkZWNpc2lvbnMgKG9yIGxvYWQgZnJvbSBwbGFuKVxuICAgIGxldCBhbGxEcmlmdGVkUmVzb3VyY2VzOiBEcmlmdGVkUmVzb3VyY2VbXTtcbiAgICBsZXQgZGVjaXNpb25zOiBJbnRlcmFjdGl2ZURlY2lzaW9ucztcblxuICAgIGlmIChvcHRpb25zLmFwcGx5UGxhbikge1xuICAgICAgLy8gQXBwbHkgYSBwcmV2aW91c2x5IGV4cG9ydGVkIHBsYW4g4oCUIHNraXAgZHJpZnQgZGV0ZWN0aW9uIGFuZCBwcm9tcHRpbmdcbiAgICAgIGxvZygnTG9hZGluZyByZW1lZGlhdGlvbiBwbGFuLi4uJyk7XG4gICAgICBjb25zdCBwbGFuSnNvbiA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUob3B0aW9ucy5hcHBseVBsYW4pLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IHBsYW4gPSBsb2FkUGxhbihwbGFuSnNvbiwgb3B0aW9ucy5zdGFja05hbWUpO1xuICAgICAgY29uc3QgbG9hZGVkID0gcGxhblRvRGVjaXNpb25zKHBsYW4pO1xuICAgICAgYWxsRHJpZnRlZFJlc291cmNlcyA9IGxvYWRlZC5hbGxEcmlmdGVkUmVzb3VyY2VzO1xuICAgICAgZGVjaXNpb25zID0gbG9hZGVkLmRlY2lzaW9ucztcblxuICAgICAgaWYgKHNwaW5uZXIpIHNwaW5uZXIuc3RhcnQoJ1Byb2Nlc3NpbmcuLi4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm9ybWFsIGZsb3c6IGRldGVjdCBkcmlmdCBhbmQgcHJvbXB0IGludGVyYWN0aXZlbHlcblxuICAgICAgLy8gU3RlcCAyOiBEZXRlY3QgZHJpZnRcbiAgICAgIGxvZygnRGV0ZWN0aW5nIHN0YWNrIGRyaWZ0Li4uJyk7XG4gICAgICBjb25zdCBkZXRlY3Rpb25JZCA9IGF3YWl0IGNsaWVudC5kZXRlY3REcmlmdChzdGFja0luZm8uc3RhY2tJZCk7XG5cbiAgICAgIGxvZygnV2FpdGluZyBmb3IgZHJpZnQgZGV0ZWN0aW9uIHRvIGNvbXBsZXRlLi4uJyk7XG4gICAgICBjb25zdCBkZXRlY3Rpb25SZXN1bHQgPSBhd2FpdCBjbGllbnQud2FpdEZvckRyaWZ0RGV0ZWN0aW9uKGRldGVjdGlvbklkKTtcblxuICAgICAgaWYgKGRldGVjdGlvblJlc3VsdC5zdGF0dXMgIT09ICdERVRFQ1RJT05fQ09NUExFVEUnKSB7XG4gICAgICAgIHJlc3VsdC5lcnJvcnMucHVzaChgRHJpZnQgZGV0ZWN0aW9uIGRpZCBub3QgY29tcGxldGU6ICR7ZGV0ZWN0aW9uUmVzdWx0LnN0YXR1c31gKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKGRldGVjdGlvblJlc3VsdC5kcmlmdFN0YXR1cyA9PT0gJ0lOX1NZTkMnKSB7XG4gICAgICAgIGlmIChzcGlubmVyKSBzcGlubmVyLnN1Y2NlZWQoJ1N0YWNrIGlzIGluIHN5bmMgLSBubyBkcmlmdCBkZXRlY3RlZCcpO1xuICAgICAgICByZXN1bHQuc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0ZXAgMzogR2V0IGRyaWZ0ZWQgcmVzb3VyY2VzIGFuZCBzZXBhcmF0ZSBieSB0eXBlXG4gICAgICBsb2coJ0FuYWx5emluZyBkcmlmdGVkIHJlc291cmNlcy4uLicpO1xuICAgICAgYWxsRHJpZnRlZFJlc291cmNlcyA9IGF3YWl0IGNsaWVudC5nZXREcmlmdGVkUmVzb3VyY2VzKHN0YWNrSW5mby5zdGFja0lkKTtcblxuICAgICAgaWYgKGFsbERyaWZ0ZWRSZXNvdXJjZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChzcGlubmVyKSBzcGlubmVyLnN1Y2NlZWQoJ05vIGRyaWZ0ZWQgcmVzb3VyY2VzIGZvdW5kJyk7XG4gICAgICAgIHJlc3VsdC5zdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgLy8gRmlsdGVyIHRvIG9ubHkgaW1wb3J0YWJsZSByZXNvdXJjZXNcbiAgICAgIGNvbnN0IG1vZGlmaWVkUmVzb3VyY2VzOiBEcmlmdGVkUmVzb3VyY2VbXSA9IFtdO1xuICAgICAgY29uc3QgZGVsZXRlZFJlc291cmNlczogRHJpZnRlZFJlc291cmNlW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBhbGxEcmlmdGVkUmVzb3VyY2VzKSB7XG4gICAgICAgIGlmICghaXNSZXNvdXJjZUltcG9ydGFibGUocmVzb3VyY2UucmVzb3VyY2VUeXBlKSkge1xuICAgICAgICAgIHJlc3VsdC5za2lwcGVkUmVzb3VyY2VzLnB1c2gocmVzb3VyY2UubG9naWNhbFJlc291cmNlSWQpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNvdXJjZS5zdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09ICdERUxFVEVEJykge1xuICAgICAgICAgIGRlbGV0ZWRSZXNvdXJjZXMucHVzaChyZXNvdXJjZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbW9kaWZpZWRSZXNvdXJjZXMucHVzaChyZXNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1vZGlmaWVkUmVzb3VyY2VzLmxlbmd0aCA9PT0gMCAmJiBkZWxldGVkUmVzb3VyY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXN1bHQuZXJyb3JzLnB1c2goJ0FsbCBkcmlmdGVkIHJlc291cmNlcyBhcmUgbm90IGVsaWdpYmxlIGZvciBpbXBvcnQnKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgLy8gU3RlcCA0OiBJbnRlcmFjdGl2ZSBkZWNpc2lvbnNcbiAgICAgIGlmIChzcGlubmVyKSBzcGlubmVyLnN0b3AoKTtcblxuICAgICAgZGVjaXNpb25zID0gYXdhaXQgcHJvbXB0Rm9yRGVjaXNpb25zKFxuICAgICAgICBtb2RpZmllZFJlc291cmNlcyxcbiAgICAgICAgZGVsZXRlZFJlc291cmNlcyxcbiAgICAgICAgb3B0aW9ucy55ZXMgPz8gZmFsc2UsXG4gICAgICApO1xuXG4gICAgICBpZiAoc3Bpbm5lcikgc3Bpbm5lci5zdGFydCgnUHJvY2Vzc2luZy4uLicpO1xuXG4gICAgICAvLyBFeHBvcnQgcGxhbiBpZiByZXF1ZXN0ZWQgKGV4aXQgd2l0aG91dCBleGVjdXRpbmcpXG4gICAgICBpZiAob3B0aW9ucy5leHBvcnRQbGFuKSB7XG4gICAgICAgIGNvbnN0IHBsYW5NZXRhZGF0YSA9IHtcbiAgICAgICAgICBzdGFja05hbWU6IHN0YWNrSW5mby5zdGFja05hbWUsXG4gICAgICAgICAgcmVnaW9uOiBjbGllbnQucmVnaW9uLFxuICAgICAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHRvb2xWZXJzaW9uOiBwYWNrYWdlVmVyc2lvbigpLFxuICAgICAgICAgIGRyaWZ0RGV0ZWN0aW9uSWQ6IGRldGVjdGlvbklkLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwbGFuID0gYnVpbGRQbGFuKHBsYW5NZXRhZGF0YSwgZGVjaXNpb25zKTtcbiAgICAgICAgY29uc3QgcGxhblBhdGggPSBwYXRoLnJlc29sdmUob3B0aW9ucy5leHBvcnRQbGFuKTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwbGFuUGF0aCwgc2VyaWFsaXplUGxhbihwbGFuKSk7XG4gICAgICAgIGlmIChzcGlubmVyKSBzcGlubmVyLnN1Y2NlZWQoYFBsYW4gZXhwb3J0ZWQgdG8gJHtwbGFuUGF0aH1gKTtcbiAgICAgICAgcmVzdWx0LnN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlY29yZCBza2lwcGVkIHJlc291cmNlc1xuICAgIGZvciAoY29uc3QgciBvZiBkZWNpc2lvbnMuc2tpcCkge1xuICAgICAgcmVzdWx0LnNraXBwZWRSZXNvdXJjZXMucHVzaChyLmxvZ2ljYWxSZXNvdXJjZUlkKTtcbiAgICB9XG5cbiAgICAvLyBJZiBldmVyeXRoaW5nIHdhcyBza2lwcGVkIG9yIGNhbmNlbGxlZCwgd2UncmUgZG9uZVxuICAgIGlmIChkZWNpc2lvbnMuYXV0b2ZpeC5sZW5ndGggPT09IDAgJiYgZGVjaXNpb25zLnJlaW1wb3J0Lmxlbmd0aCA9PT0gMCAmJiBkZWNpc2lvbnMucmVtb3ZlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKHNwaW5uZXIpIHNwaW5uZXIuc3VjY2VlZCgnTm8gYWN0aW9ucyBzZWxlY3RlZCcpO1xuICAgICAgcmVzdWx0LnN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBTdGVwIDU6IEJ1aWxkIHJlc291cmNlcyB0byBpbXBvcnQgZnJvbSBkZWNpc2lvbnNcbiAgICBjb25zdCByZXNvdXJjZUlkZW50aWZpZXJzID0gYXdhaXQgY2xpZW50LmdldFJlc291cmNlSWRlbnRpZmllcnMob3JpZ2luYWxUZW1wbGF0ZUJvZHkpO1xuXG4gICAgLy8gQXV0b2ZpeCByZXNvdXJjZXM6IHVzZSBleGlzdGluZyBidWlsZFJlc291cmNlc1RvSW1wb3J0XG4gICAgY29uc3QgeyBpbXBvcnRhYmxlOiBhdXRvZml4SW1wb3J0YWJsZSwgc2tpcHBlZDogYXV0b2ZpeFNraXBwZWQgfSA9XG4gICAgICBidWlsZFJlc291cmNlc1RvSW1wb3J0KGRlY2lzaW9ucy5hdXRvZml4LCByZXNvdXJjZUlkZW50aWZpZXJzKTtcblxuICAgIGZvciAoY29uc3QgcyBvZiBhdXRvZml4U2tpcHBlZCkge1xuICAgICAgaWYgKCFyZXN1bHQuc2tpcHBlZFJlc291cmNlcy5pbmNsdWRlcyhzLmxvZ2ljYWxSZXNvdXJjZUlkKSkge1xuICAgICAgICByZXN1bHQuc2tpcHBlZFJlc291cmNlcy5wdXNoKHMubG9naWNhbFJlc291cmNlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlaW1wb3J0IHJlc291cmNlczogYnVpbGQgZnJvbSB1c2VyLXByb3ZpZGVkIHBoeXNpY2FsIElEc1xuICAgIGNvbnN0IHJlaW1wb3J0SW1wb3J0YWJsZTogUmVzb3VyY2VUb0ltcG9ydFtdID0gW107XG4gICAgZm9yIChjb25zdCB7IHJlc291cmNlLCBwaHlzaWNhbElkIH0gb2YgZGVjaXNpb25zLnJlaW1wb3J0KSB7XG4gICAgICBjb25zdCBkZXNjcmlwdG9yID0gYnVpbGRSZWltcG9ydERlc2NyaXB0b3IocmVzb3VyY2UsIHBoeXNpY2FsSWQsIHJlc291cmNlSWRlbnRpZmllcnMpO1xuICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgcmVpbXBvcnRJbXBvcnRhYmxlLnB1c2goZGVzY3JpcHRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQuZXJyb3JzLnB1c2goXG4gICAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgaW1wb3J0IGlkZW50aWZpZXIgZm9yICR7cmVzb3VyY2UubG9naWNhbFJlc291cmNlSWR9IGZyb20gXCIke3BoeXNpY2FsSWR9XCJgLFxuICAgICAgICApO1xuICAgICAgICByZXN1bHQuc2tpcHBlZFJlc291cmNlcy5wdXNoKHJlc291cmNlLmxvZ2ljYWxSZXNvdXJjZUlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb21iaW5lZCBpbXBvcnRhYmxlIGxpc3RcbiAgICBjb25zdCBhbGxJbXBvcnRhYmxlID0gWy4uLmF1dG9maXhJbXBvcnRhYmxlLCAuLi5yZWltcG9ydEltcG9ydGFibGVdO1xuXG4gICAgLy8gSWYgbm90aGluZyB0byBpbXBvcnQgQU5EIG5vdGhpbmcgdG8gcmVtb3ZlLCB3ZSdyZSBzdHVja1xuICAgIGlmIChhbGxJbXBvcnRhYmxlLmxlbmd0aCA9PT0gMCAmJiBkZWNpc2lvbnMucmVtb3ZlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LmVycm9ycy5wdXNoKCdDb3VsZCBub3QgZGV0ZXJtaW5lIGltcG9ydCBpZGVudGlmaWVycyBmb3IgYW55IHNlbGVjdGVkIHJlc291cmNlcycpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCB0aGUgc2V0IG9mIGxvZ2ljYWwgSURzIHRoYXQgbmVlZCByZW1vdmFsIGZyb20gdGhlIHRlbXBsYXRlXG4gICAgLy8gVGhpcyBpbmNsdWRlcyBldmVyeXRoaW5nIGJlaW5nIGFjdGVkIG9uIChhdXRvZml4LCByZWltcG9ydCwgcmVtb3ZlKVxuICAgIGNvbnN0IGxvZ2ljYWxJZHNUb1JlbW92ZSA9IG5ldyBTZXQoW1xuICAgICAgLi4uYXV0b2ZpeEltcG9ydGFibGUubWFwKChyKSA9PiByLkxvZ2ljYWxSZXNvdXJjZUlkKSxcbiAgICAgIC4uLnJlaW1wb3J0SW1wb3J0YWJsZS5tYXAoKHIpID0+IHIuTG9naWNhbFJlc291cmNlSWQpLFxuICAgICAgLi4uZGVjaXNpb25zLnJlbW92ZS5tYXAoKHIpID0+IHIubG9naWNhbFJlc291cmNlSWQpLFxuICAgIF0pO1xuXG4gICAgLy8gQW5hbHl6ZSBjYXNjYWRlIHJlbW92YWxzIChyZXNvdXJjZXMgd2l0aCBicm9rZW4gUmVmL0dldEF0dCB0byByZW1vdmVkIHJlc291cmNlcylcbiAgICBjb25zdCBjYXNjYWRlUmVtb3ZhbHMgPSBhbmFseXplQ2FzY2FkZVJlbW92YWxzKG9yaWdpbmFsVGVtcGxhdGUsIGxvZ2ljYWxJZHNUb1JlbW92ZSk7XG5cbiAgICAvLyBQYXJ0aXRpb24gaW50byBwZXJtYW5lbnQgKGRlcGVuZCBvbiB1c2VyLXJlbW92ZWQgcmVzb3VyY2VzKSB2cyB0ZW1wb3JhcnkgKGRlcGVuZCBvbiBhdXRvZml4L3JlaW1wb3J0KVxuICAgIGNvbnN0IHBlcm1hbmVudGx5UmVtb3ZlZElkcyA9IG5ldyBTZXQoZGVjaXNpb25zLnJlbW92ZS5tYXAoKHIpID0+IHIubG9naWNhbFJlc291cmNlSWQpKTtcbiAgICBjb25zdCBwZXJtYW5lbnRDYXNjYWRlID0gY2FzY2FkZVJlbW92YWxzLmZpbHRlcigoYykgPT4gcGVybWFuZW50bHlSZW1vdmVkSWRzLmhhcyhjLmRlcGVuZHNPbikpO1xuICAgIGNvbnN0IHRlbXBvcmFyeUNhc2NhZGUgPSBjYXNjYWRlUmVtb3ZhbHMuZmlsdGVyKChjKSA9PiAhcGVybWFuZW50bHlSZW1vdmVkSWRzLmhhcyhjLmRlcGVuZHNPbikpO1xuXG4gICAgaWYgKGNhc2NhZGVSZW1vdmFscy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoc3Bpbm5lcikgc3Bpbm5lci5zdG9wKCk7XG4gICAgICBkaXNwbGF5Q2FzY2FkZVdhcm5pbmcocGVybWFuZW50Q2FzY2FkZSwgdGVtcG9yYXJ5Q2FzY2FkZSk7XG4gICAgICBpZiAoc3Bpbm5lcikgc3Bpbm5lci5zdGFydCgnUHJvY2Vzc2luZy4uLicpO1xuICAgIH1cblxuICAgIC8vIERyeSBydW4gLSBzaG93IHdoYXQgd291bGQgYmUgZG9uZVxuICAgIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgICAgaWYgKHNwaW5uZXIpIHNwaW5uZXIuaW5mbygnRHJ5IHJ1biAtIHBsYW5uZWQgYWN0aW9uczonKTtcbiAgICAgIGlmIChhbGxJbXBvcnRhYmxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1xcblJlc291cmNlcyB0byByZW1lZGlhdGU6Jyk7XG4gICAgICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgYWxsSW1wb3J0YWJsZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIC0gJHtyZXNvdXJjZS5Mb2dpY2FsUmVzb3VyY2VJZH0gKCR7cmVzb3VyY2UuUmVzb3VyY2VUeXBlfSlgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAgIElkZW50aWZpZXI6ICR7SlNPTi5zdHJpbmdpZnkocmVzb3VyY2UuUmVzb3VyY2VJZGVudGlmaWVyKX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlY2lzaW9ucy5yZW1vdmUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnXFxuUmVzb3VyY2VzIHRvIHJlbW92ZSBmcm9tIHN0YWNrOicpO1xuICAgICAgICBmb3IgKGNvbnN0IHIgb2YgZGVjaXNpb25zLnJlbW92ZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIC0gJHtyLmxvZ2ljYWxSZXNvdXJjZUlkfSAoJHtyLnJlc291cmNlVHlwZX0pYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwZXJtYW5lbnRDYXNjYWRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1xcblJlc291cmNlcyBwZXJtYW5lbnRseSBjYXNjYWRlLXJlbW92ZWQgKGJyb2tlbiByZWZlcmVuY2VzKTonKTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHBlcm1hbmVudENhc2NhZGUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAtICR7Yy5sb2dpY2FsUmVzb3VyY2VJZH0gKCR7Yy5yZXNvdXJjZVR5cGV9KSAtPiBkZXBlbmRzIG9uICR7Yy5kZXBlbmRzT259YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0ZW1wb3JhcnlDYXNjYWRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1xcblJlc291cmNlcyB0ZW1wb3JhcmlseSByZW1vdmVkIGFuZCByZWNyZWF0ZWQ6Jyk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiB0ZW1wb3JhcnlDYXNjYWRlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgLSAke2MubG9naWNhbFJlc291cmNlSWR9ICgke2MucmVzb3VyY2VUeXBlfSkgLT4gZGVwZW5kcyBvbiAke2MuZGVwZW5kc09ufWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXN1bHQuc3VjY2VzcyA9IHRydWU7XG4gICAgICByZXN1bHQucmVtZWRpYXRlZFJlc291cmNlcyA9IGFsbEltcG9ydGFibGUubWFwKChyKSA9PiByLkxvZ2ljYWxSZXNvdXJjZUlkKTtcbiAgICAgIHJlc3VsdC5yZW1vdmVkUmVzb3VyY2VzID0gW1xuICAgICAgICAuLi5kZWNpc2lvbnMucmVtb3ZlLm1hcCgocikgPT4gci5sb2dpY2FsUmVzb3VyY2VJZCksXG4gICAgICAgIC4uLnBlcm1hbmVudENhc2NhZGUubWFwKChjKSA9PiBjLmxvZ2ljYWxSZXNvdXJjZUlkKSxcbiAgICAgIF07XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIERldGVybWluZSByZXF1aXJlZCBjYXBhYmlsaXRpZXNcbiAgICBjb25zdCByZXNvdXJjZVR5cGVzID0gYWxsSW1wb3J0YWJsZS5tYXAoKHIpID0+IHIuUmVzb3VyY2VUeXBlKTtcbiAgICBjb25zdCBhZGRpdGlvbmFsQ2FwcyA9IGdldEFsbFJlcXVpcmVkQ2FwYWJpbGl0aWVzKHJlc291cmNlVHlwZXMpO1xuICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9IFsuLi5uZXcgU2V0KFsuLi5ERUZBVUxUX0NBUEFCSUxJVElFUywgLi4uYWRkaXRpb25hbENhcHNdKV07XG5cbiAgICAvLyBTYXZlIHJlY292ZXJ5IGNoZWNrcG9pbnQgYmVmb3JlIGFueSBzdGFjayBtdXRhdGlvbnNcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvWzouXS9nLCAnLScpO1xuICAgIGNvbnN0IGJhY2t1cEZpbGVOYW1lID0gYC5jZm4tZHJpZnQtcmVtZWRpYXRlLWJhY2t1cC0ke3N0YWNrSW5mby5zdGFja05hbWV9LSR7dGltZXN0YW1wfS5qc29uYDtcbiAgICBjb25zdCBiYWNrdXBQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGJhY2t1cEZpbGVOYW1lKTtcbiAgICBjb25zdCBjaGVja3BvaW50OiBSZWNvdmVyeUNoZWNrcG9pbnQgPSB7XG4gICAgICBzdGFja05hbWU6IHN0YWNrSW5mby5zdGFja05hbWUsXG4gICAgICBzdGFja0lkOiBzdGFja0luZm8uc3RhY2tJZCxcbiAgICAgIG9yaWdpbmFsVGVtcGxhdGVCb2R5LFxuICAgICAgcGFyYW1ldGVyczogc3RhY2tJbmZvLnBhcmFtZXRlcnMsXG4gICAgICBkcmlmdGVkUmVzb3VyY2VJZHM6IEFycmF5LmZyb20obG9naWNhbElkc1RvUmVtb3ZlKSxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH07XG4gICAgZnMud3JpdGVGaWxlU3luYyhiYWNrdXBQYXRoLCBKU09OLnN0cmluZ2lmeShjaGVja3BvaW50LCBudWxsLCAyKSk7XG4gICAgbG9nKGBSZWNvdmVyeSBjaGVja3BvaW50IHNhdmVkIHRvOiAke2JhY2t1cFBhdGh9YCk7XG4gICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgY29uc29sZS5sb2coYFJlY292ZXJ5IGNoZWNrcG9pbnQ6ICR7YmFja3VwUGF0aH1gKTtcbiAgICB9XG5cbiAgICAvLyBTdGVwIDY6IFNldCBEZWxldGlvblBvbGljeTogUmV0YWluIG9uIGFsbCByZXNvdXJjZXNcbiAgICAvLyBERUxFVEVEIHJlc291cmNlcyBtdXN0IGJlIHJlbW92ZWQgZnJvbSB0aGUgdGVtcGxhdGUgZmlyc3Qg4oCUIENsb3VkRm9ybWF0aW9uXG4gICAgLy8gY2Fubm90IHVwZGF0ZSBtZXRhZGF0YSBvbiByZXNvdXJjZXMgdGhhdCBubyBsb25nZXIgZXhpc3QgaW4gQVdTLlxuICAgIGxvZygnU2V0dGluZyBEZWxldGlvblBvbGljeTogUmV0YWluIG9uIGFsbCByZXNvdXJjZXMuLi4nKTtcbiAgICBjb25zdCBkZWxldGVkTG9naWNhbElkcyA9IG5ldyBTZXQoXG4gICAgICBhbGxEcmlmdGVkUmVzb3VyY2VzXG4gICAgICAgIC5maWx0ZXIoKHIpID0+IHIuc3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzID09PSAnREVMRVRFRCcgJiYgbG9naWNhbElkc1RvUmVtb3ZlLmhhcyhyLmxvZ2ljYWxSZXNvdXJjZUlkKSlcbiAgICAgICAgLm1hcCgocikgPT4gci5sb2dpY2FsUmVzb3VyY2VJZCksXG4gICAgKTtcblxuICAgIGxldCByZXRhaW5UZW1wbGF0ZSA9IHNldFJldGVudGlvbk9uQWxsUmVzb3VyY2VzKG9yaWdpbmFsVGVtcGxhdGUpO1xuXG4gICAgaWYgKGRlbGV0ZWRMb2dpY2FsSWRzLnNpemUgPiAwKSB7XG4gICAgICAvLyBSZW1vdmUgZGVsZXRlZCByZXNvdXJjZXMgYW5kIGNsZWFuIHVwIHRoZWlyIGRhbmdsaW5nIHJlZmVyZW5jZXNcbiAgICAgIGNvbnN0IHsgdGVtcGxhdGU6IGNsZWFuZWRUZW1wbGF0ZSB9ID0gdHJhbnNmb3JtVGVtcGxhdGVGb3JSZW1vdmFsKFxuICAgICAgICByZXRhaW5UZW1wbGF0ZSxcbiAgICAgICAgZGVsZXRlZExvZ2ljYWxJZHMsXG4gICAgICAgIG5ldyBNYXAoKSwgLy8gbm8gcmVzb2x2ZWQgdmFsdWVzIOKAlCBqdXN0IHN0cmlwIHVucmVzb2x2YWJsZSByZWZlcmVuY2VzXG4gICAgICApO1xuICAgICAgcmV0YWluVGVtcGxhdGUgPSBjbGVhbmVkVGVtcGxhdGU7XG4gICAgfVxuXG4gICAgYXdhaXQgY2xpZW50LnVwZGF0ZVN0YWNrKFxuICAgICAgc3RhY2tJbmZvLnN0YWNrSWQsXG4gICAgICBzdHJpbmdpZnlUZW1wbGF0ZShyZXRhaW5UZW1wbGF0ZSksXG4gICAgICByZXRhaW5UZW1wbGF0ZS5QYXJhbWV0ZXJzID8gc3RhY2tJbmZvLnBhcmFtZXRlcnMgOiB1bmRlZmluZWQsXG4gICAgICBjYXBhYmlsaXRpZXMsXG4gICAgKTtcblxuICAgIC8vIFN0ZXAgNzogUmVzb2x2ZSBjcm9zcy1yZWZlcmVuY2VzIHRvIE1PRElGSUVEIHJlc291cmNlcyBiZWluZyByZW1vdmVkXG4gICAgLy8gKERFTEVURUQgcmVzb3VyY2VzIGFyZSBhbHJlYWR5IHJlbW92ZWQgZnJvbSB0aGUgdGVtcGxhdGUsIHNvIG9ubHkgTU9ESUZJRUQgcmVmcyByZW1haW4pXG4gICAgY29uc3QgbW9kaWZpZWRJZHNUb1JlbW92ZSA9IG5ldyBTZXQoXG4gICAgICBbLi4ubG9naWNhbElkc1RvUmVtb3ZlXS5maWx0ZXIoKGlkKSA9PiAhZGVsZXRlZExvZ2ljYWxJZHMuaGFzKGlkKSksXG4gICAgKTtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gY29sbGVjdFJlZmVyZW5jZXMocmV0YWluVGVtcGxhdGUsIG1vZGlmaWVkSWRzVG9SZW1vdmUpO1xuXG4gICAgbGV0IHJlc29sdmVkVmFsdWVzID0gbmV3IE1hcDxzdHJpbmcsIHVua25vd24+KCk7XG4gICAgaWYgKHJlZmVyZW5jZXMuc2l6ZSA+IDApIHtcbiAgICAgIGxvZygnUmVzb2x2aW5nIHJlZmVyZW5jZXMgdG8gZHJpZnRlZCByZXNvdXJjZXMuLi4nKTtcblxuICAgICAgY29uc3Qgb3V0cHV0VGVtcGxhdGUgPSBhZGRSZXNvbHV0aW9uT3V0cHV0cyhyZXRhaW5UZW1wbGF0ZSwgcmVmZXJlbmNlcyk7XG4gICAgICBhd2FpdCBjbGllbnQudXBkYXRlU3RhY2soXG4gICAgICAgIHN0YWNrSW5mby5zdGFja0lkLFxuICAgICAgICBzdHJpbmdpZnlUZW1wbGF0ZShvdXRwdXRUZW1wbGF0ZSksXG4gICAgICAgIG91dHB1dFRlbXBsYXRlLlBhcmFtZXRlcnMgPyBzdGFja0luZm8ucGFyYW1ldGVycyA6IHVuZGVmaW5lZCxcbiAgICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdXBkYXRlZFN0YWNrSW5mbyA9IGF3YWl0IGNsaWVudC5nZXRTdGFja0luZm8oc3RhY2tJbmZvLnN0YWNrSWQpO1xuICAgICAgcmVzb2x2ZWRWYWx1ZXMgPSBwYXJzZVJlc29sdmVkT3V0cHV0cyh1cGRhdGVkU3RhY2tJbmZvLm91dHB1dHMgfHwgW10sIHJlZmVyZW5jZXMpO1xuICAgIH1cblxuICAgIC8vIFN0ZXAgODogUmVtb3ZlIHJlbWFpbmluZyAoTU9ESUZJRUQpIHJlc291cmNlcyBmcm9tIHRlbXBsYXRlXG4gICAgbG9nKCdSZW1vdmluZyByZXNvdXJjZXMgZnJvbSBzdGFjayAocmVzb3VyY2VzIHJldGFpbmVkIGluIEFXUykuLi4nKTtcbiAgICBjb25zdCB7IHRlbXBsYXRlOiByZW1vdmFsVGVtcGxhdGUgfSA9IHRyYW5zZm9ybVRlbXBsYXRlRm9yUmVtb3ZhbChcbiAgICAgIHJldGFpblRlbXBsYXRlLFxuICAgICAgbW9kaWZpZWRJZHNUb1JlbW92ZSxcbiAgICAgIHJlc29sdmVkVmFsdWVzLFxuICAgICk7XG5cbiAgICBjb25zdCByZW1vdmFsUGFyYW1zID0gcmVtb3ZhbFRlbXBsYXRlLlBhcmFtZXRlcnMgPyBzdGFja0luZm8ucGFyYW1ldGVycyA6IHVuZGVmaW5lZDtcbiAgICBhd2FpdCBjbGllbnQudXBkYXRlU3RhY2soXG4gICAgICBzdGFja0luZm8uc3RhY2tJZCxcbiAgICAgIHN0cmluZ2lmeVRlbXBsYXRlKHJlbW92YWxUZW1wbGF0ZSksXG4gICAgICByZW1vdmFsUGFyYW1zLFxuICAgICAgY2FwYWJpbGl0aWVzLFxuICAgICk7XG5cbiAgICAvLyBTdGVwIDk6IEltcG9ydCByZXNvdXJjZXMgKG9ubHkgaWYgdGhlcmUgYXJlIHJlc291cmNlcyB0byBpbXBvcnQpXG4gICAgaWYgKGFsbEltcG9ydGFibGUubGVuZ3RoID4gMCkge1xuICAgICAgbG9nKCdQcmVwYXJpbmcgaW1wb3J0IHRlbXBsYXRlIHdpdGggYWN0dWFsIHJlc291cmNlIHN0YXRlLi4uJyk7XG5cbiAgICAgIC8vIEJ1aWxkIGltcG9ydCB0ZW1wbGF0ZSBmcm9tIHRoZSByZW1vdmFsIHRlbXBsYXRlIChjdXJyZW50IHN0YWNrIHN0YXRlKVxuICAgICAgLy8gYW5kIGFkZCBiYWNrIHRoZSByZXNvdXJjZXMgYmVpbmcgaW1wb3J0ZWQgd2l0aCB0aGVpciBhY3R1YWwgcHJvcGVydGllc1xuICAgICAgY29uc3QgaW1wb3J0VGVtcGxhdGUgPSBkZWVwQ2xvbmUocmVtb3ZhbFRlbXBsYXRlKTtcblxuICAgICAgZm9yIChjb25zdCBpbXBvcnRhYmxlIG9mIGFsbEltcG9ydGFibGUpIHtcbiAgICAgICAgY29uc3QgbG9naWNhbElkID0gaW1wb3J0YWJsZS5Mb2dpY2FsUmVzb3VyY2VJZDtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxSZXNvdXJjZSA9IG9yaWdpbmFsVGVtcGxhdGUuUmVzb3VyY2VzPy5bbG9naWNhbElkXTtcbiAgICAgICAgaWYgKCFvcmlnaW5hbFJlc291cmNlKSBjb250aW51ZTtcblxuICAgICAgICAvLyBTdGFydCB3aXRoIG9yaWdpbmFsIHJlc291cmNlIGRlZmluaXRpb25cbiAgICAgICAgaW1wb3J0VGVtcGxhdGUuUmVzb3VyY2VzW2xvZ2ljYWxJZF0gPSBkZWVwQ2xvbmUob3JpZ2luYWxSZXNvdXJjZSk7XG5cbiAgICAgICAgLy8gRm9yIGF1dG9maXggcmVzb3VyY2VzLCBvdmVycmlkZSB3aXRoIGFjdHVhbCAoZHJpZnRlZCkgcHJvcGVydGllc1xuICAgICAgICBjb25zdCBhdXRvZml4UmVzb3VyY2UgPSBkZWNpc2lvbnMuYXV0b2ZpeC5maW5kKChyKSA9PiByLmxvZ2ljYWxSZXNvdXJjZUlkID09PSBsb2dpY2FsSWQpO1xuICAgICAgICBpZiAoYXV0b2ZpeFJlc291cmNlPy5hY3R1YWxQcm9wZXJ0aWVzICYmIE9iamVjdC5rZXlzKGF1dG9maXhSZXNvdXJjZS5hY3R1YWxQcm9wZXJ0aWVzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaW1wb3J0VGVtcGxhdGUuUmVzb3VyY2VzW2xvZ2ljYWxJZF0uUHJvcGVydGllcyA9IGF1dG9maXhSZXNvdXJjZS5hY3R1YWxQcm9wZXJ0aWVzO1xuICAgICAgICB9XG5cbiAgICAgICAgaW1wb3J0VGVtcGxhdGUuUmVzb3VyY2VzW2xvZ2ljYWxJZF0uRGVsZXRpb25Qb2xpY3kgPSAnUmV0YWluJztcbiAgICAgIH1cblxuICAgICAgLy8gRW5zdXJlIFJldGFpbiBvbiBhbGwgcmVzb3VyY2VzIGluIGltcG9ydCB0ZW1wbGF0ZVxuICAgICAgZm9yIChjb25zdCBsb2dpY2FsSWQgb2YgT2JqZWN0LmtleXMoaW1wb3J0VGVtcGxhdGUuUmVzb3VyY2VzKSkge1xuICAgICAgICBpbXBvcnRUZW1wbGF0ZS5SZXNvdXJjZXNbbG9naWNhbElkXS5EZWxldGlvblBvbGljeSA9ICdSZXRhaW4nO1xuICAgICAgfVxuXG4gICAgICBsb2coJ0NyZWF0aW5nIGltcG9ydCBjaGFuZ2Ugc2V0Li4uJyk7XG4gICAgICBjb25zdCBjaGFuZ2VTZXROYW1lID0gYXdhaXQgY2xpZW50LmNyZWF0ZUltcG9ydENoYW5nZVNldChcbiAgICAgICAgc3RhY2tJbmZvLnN0YWNrTmFtZSxcbiAgICAgICAgc3RyaW5naWZ5VGVtcGxhdGUoaW1wb3J0VGVtcGxhdGUpLFxuICAgICAgICBhbGxJbXBvcnRhYmxlLFxuICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICApO1xuXG4gICAgICBsb2coJ0V4ZWN1dGluZyBpbXBvcnQuLi4nKTtcbiAgICAgIGF3YWl0IGNsaWVudC5leGVjdXRlQ2hhbmdlU2V0KHN0YWNrSW5mby5zdGFja05hbWUsIGNoYW5nZVNldE5hbWUpO1xuICAgIH1cblxuICAgIC8vIFN0ZXAgMTA6IFJlc3RvcmUgdGVtcGxhdGVcbiAgICBpZiAoZGVjaXNpb25zLnJlbW92ZS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBTb21lIHJlc291cmNlcyBwZXJtYW5lbnRseSByZW1vdmVkIOKAlCByZXN0b3JlIG9yaWdpbmFsIE1JTlVTIHJlbW92ZWQgcmVzb3VyY2VzXG4gICAgICBsb2coJ1Jlc3RvcmluZyB0ZW1wbGF0ZSAoZXhjbHVkaW5nIHJlbW92ZWQgcmVzb3VyY2VzKS4uLicpO1xuICAgICAgY29uc3QgcmVzdG9yZWRUZW1wbGF0ZSA9IGRlZXBDbG9uZShvcmlnaW5hbFRlbXBsYXRlKTtcbiAgICAgIGZvciAoY29uc3QgciBvZiBkZWNpc2lvbnMucmVtb3ZlKSB7XG4gICAgICAgIGRlbGV0ZSByZXN0b3JlZFRlbXBsYXRlLlJlc291cmNlc1tyLmxvZ2ljYWxSZXNvdXJjZUlkXTtcbiAgICAgIH1cbiAgICAgIC8vIENsZWFuIHVwIHJlZmVyZW5jZXMgYW5kIG91dHB1dHMgcG9pbnRpbmcgdG8gcmVtb3ZlZCByZXNvdXJjZXNcbiAgICAgIGNvbnN0IHsgdGVtcGxhdGU6IGNsZWFuZWRUZW1wbGF0ZSB9ID0gdHJhbnNmb3JtVGVtcGxhdGVGb3JSZW1vdmFsKFxuICAgICAgICByZXN0b3JlZFRlbXBsYXRlLFxuICAgICAgICBuZXcgU2V0KGRlY2lzaW9ucy5yZW1vdmUubWFwKChyKSA9PiByLmxvZ2ljYWxSZXNvdXJjZUlkKSksXG4gICAgICAgIHJlc29sdmVkVmFsdWVzLFxuICAgICAgKTtcbiAgICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgRGVsZXRpb25Qb2xpY3kgdmFsdWVzICh0cmFuc2Zvcm1UZW1wbGF0ZUZvclJlbW92YWwgc2V0cyBSZXRhaW4gb24gYWxsKVxuICAgICAgZm9yIChjb25zdCBbbG9naWNhbElkLCByZXNvdXJjZV0gb2YgT2JqZWN0LmVudHJpZXMoY2xlYW5lZFRlbXBsYXRlLlJlc291cmNlcyB8fCB7fSkpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxSZXNvdXJjZSA9IG9yaWdpbmFsVGVtcGxhdGUuUmVzb3VyY2VzPy5bbG9naWNhbElkXTtcbiAgICAgICAgaWYgKG9yaWdpbmFsUmVzb3VyY2U/LkRlbGV0aW9uUG9saWN5KSB7XG4gICAgICAgICAgcmVzb3VyY2UuRGVsZXRpb25Qb2xpY3kgPSBvcmlnaW5hbFJlc291cmNlLkRlbGV0aW9uUG9saWN5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSByZXNvdXJjZS5EZWxldGlvblBvbGljeTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgY2xpZW50LnVwZGF0ZVN0YWNrKFxuICAgICAgICBzdGFja0luZm8uc3RhY2tOYW1lLFxuICAgICAgICBzdHJpbmdpZnlUZW1wbGF0ZShjbGVhbmVkVGVtcGxhdGUpLFxuICAgICAgICBjbGVhbmVkVGVtcGxhdGUuUGFyYW1ldGVycyA/IHN0YWNrSW5mby5wYXJhbWV0ZXJzIDogdW5kZWZpbmVkLFxuICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyByZW1vdmFscyDigJQgcmVzdG9yZSBleGFjdCBvcmlnaW5hbFxuICAgICAgbG9nKCdSZXN0b3Jpbmcgb3JpZ2luYWwgdGVtcGxhdGUuLi4nKTtcbiAgICAgIGF3YWl0IGNsaWVudC51cGRhdGVTdGFjayhcbiAgICAgICAgc3RhY2tJbmZvLnN0YWNrTmFtZSxcbiAgICAgICAgb3JpZ2luYWxUZW1wbGF0ZUJvZHksXG4gICAgICAgIHN0YWNrSW5mby5wYXJhbWV0ZXJzLFxuICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJlc3VsdC5zdWNjZXNzID0gdHJ1ZTtcbiAgICByZXN1bHQucmVtZWRpYXRlZFJlc291cmNlcyA9IGFsbEltcG9ydGFibGUubWFwKChyKSA9PiByLkxvZ2ljYWxSZXNvdXJjZUlkKTtcbiAgICByZXN1bHQucmVtb3ZlZFJlc291cmNlcyA9IFtcbiAgICAgIC4uLmRlY2lzaW9ucy5yZW1vdmUubWFwKChyKSA9PiByLmxvZ2ljYWxSZXNvdXJjZUlkKSxcbiAgICAgIC4uLnBlcm1hbmVudENhc2NhZGUubWFwKChjKSA9PiBjLmxvZ2ljYWxSZXNvdXJjZUlkKSxcbiAgICBdO1xuXG4gICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgY29uc29sZS5sb2coYFJlbWVkaWF0aW9uIGNvbXBsZXRlLiBSZWNvdmVyeSBjaGVja3BvaW50IGNhbiBiZSByZW1vdmVkOiAke2JhY2t1cFBhdGh9YCk7XG4gICAgfVxuXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzdWx0LmVycm9ycy5wdXNoKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIl19
441
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBDQSw4QkErZEM7QUF6Z0JELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFFN0IsaURBQW9EO0FBQ3BELGlFQUE0RjtBQUM1RixtREFBMEc7QUFDMUcscUNBQWlGO0FBQ2pGLCtEQUEwRjtBQUMxRixxRUFTb0M7QUFTcEMsdUNBQXdDO0FBRXhDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0FBRWxHLFNBQVMsY0FBYztJQUNyQixJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDM0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQy9ELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLFNBQVMsQ0FDN0IsT0FBMkIsRUFDM0IsT0FBYTtJQUViLE1BQU0sTUFBTSxHQUFHLElBQUksNkJBQWdCLENBQUM7UUFDbEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztLQUN6QixDQUFDLENBQUM7SUFFSCxNQUFNLE1BQU0sR0FBc0I7UUFDaEMsT0FBTyxFQUFFLEtBQUs7UUFDZCxtQkFBbUIsRUFBRSxFQUFFO1FBQ3ZCLGdCQUFnQixFQUFFLEVBQUU7UUFDcEIsZ0JBQWdCLEVBQUUsRUFBRTtRQUNwQixzQkFBc0IsRUFBRSxFQUFFO1FB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LEVBQ3BCLFNBQVMsQ0FBQyxVQUFVLEVBQ3BCLFlBQVksQ0FDYixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMzRSxNQUFNLENBQUMsZ0JBQWdCLEdBQUc7WUFDeEIsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1lBQ25ELEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7U0FDcEQsQ0FBQztRQUVGLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkRBQTZELFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDekYsQ0FBQztJQUVILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgT3JhIH0gZnJvbSAnb3JhJztcbmltcG9ydCB7IENmbkNsaWVudFdyYXBwZXIgfSBmcm9tICcuL2xpYi9jZm4tY2xpZW50JztcbmltcG9ydCB7IGlzUmVzb3VyY2VJbXBvcnRhYmxlLCBnZXRBbGxSZXF1aXJlZENhcGFiaWxpdGllcyB9IGZyb20gJy4vbGliL2VsaWdpYmxlLXJlc291cmNlcyc7XG5pbXBvcnQgeyBkaXNwbGF5Q2FzY2FkZVdhcm5pbmcsIGRpc3BsYXlOb25JbXBvcnRhYmxlUmVwb3J0LCBwcm9tcHRGb3JEZWNpc2lvbnMgfSBmcm9tICcuL2xpYi9pbnRlcmFjdGl2ZSc7XG5pbXBvcnQgeyBidWlsZFBsYW4sIHNlcmlhbGl6ZVBsYW4sIGxvYWRQbGFuLCBwbGFuVG9EZWNpc2lvbnMgfSBmcm9tICcuL2xpYi9wbGFuJztcbmltcG9ydCB7IGJ1aWxkUmVzb3VyY2VzVG9JbXBvcnQsIGJ1aWxkUmVpbXBvcnREZXNjcmlwdG9yIH0gZnJvbSAnLi9saWIvcmVzb3VyY2UtaW1wb3J0ZXInO1xuaW1wb3J0IHtcbiAgcGFyc2VUZW1wbGF0ZSxcbiAgc3RyaW5naWZ5VGVtcGxhdGUsXG4gIGNvbGxlY3RSZWZlcmVuY2VzLFxuICBhZGRSZXNvbHV0aW9uT3V0cHV0cyxcbiAgcGFyc2VSZXNvbHZlZE91dHB1dHMsXG4gIHNldFJldGVudGlvbk9uQWxsUmVzb3VyY2VzLFxuICB0cmFuc2Zvcm1UZW1wbGF0ZUZvclJlbW92YWwsXG4gIGFuYWx5emVDYXNjYWRlUmVtb3ZhbHMsXG59IGZyb20gJy4vbGliL3RlbXBsYXRlLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7XG4gIFJlbWVkaWF0aW9uT3B0aW9ucyxcbiAgUmVtZWRpYXRpb25SZXN1bHQsXG4gIFJlY292ZXJ5Q2hlY2twb2ludCxcbiAgRHJpZnRlZFJlc291cmNlLFxuICBJbnRlcmFjdGl2ZURlY2lzaW9ucyxcbiAgUmVzb3VyY2VUb0ltcG9ydCxcbn0gZnJvbSAnLi9saWIvdHlwZXMnO1xuaW1wb3J0IHsgZGVlcENsb25lIH0gZnJvbSAnLi9saWIvdXRpbHMnO1xuXG5jb25zdCBERUZBVUxUX0NBUEFCSUxJVElFUyA9IFsnQ0FQQUJJTElUWV9JQU0nLCAnQ0FQQUJJTElUWV9OQU1FRF9JQU0nLCAnQ0FQQUJJTElUWV9BVVRPX0VYUEFORCddO1xuXG5mdW5jdGlvbiBwYWNrYWdlVmVyc2lvbigpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHBrZ1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAncGFja2FnZS5qc29uJyk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBrZ1BhdGgsICd1dGYtOCcpKS52ZXJzaW9uO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJ3Vua25vd24nO1xuICB9XG59XG5cbi8qKlxuICogTWFpbiByZW1lZGlhdGlvbiBmdW5jdGlvbiB0aGF0IG9yY2hlc3RyYXRlcyB0aGUgZHJpZnQgcmVtZWRpYXRpb24gcHJvY2Vzc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVtZWRpYXRlKFxuICBvcHRpb25zOiBSZW1lZGlhdGlvbk9wdGlvbnMsXG4gIHNwaW5uZXI/OiBPcmEsXG4pOiBQcm9taXNlPFJlbWVkaWF0aW9uUmVzdWx0PiB7XG4gIGNvbnN0IGNsaWVudCA9IG5ldyBDZm5DbGllbnRXcmFwcGVyKHtcbiAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgfSk7XG5cbiAgY29uc3QgcmVzdWx0OiBSZW1lZGlhdGlvblJlc3VsdCA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICByZW1lZGlhdGVkUmVzb3VyY2VzOiBbXSxcbiAgICBza2lwcGVkUmVzb3VyY2VzOiBbXSxcbiAgICByZW1vdmVkUmVzb3VyY2VzOiBbXSxcbiAgICBub25JbXBvcnRhYmxlUmVzb3VyY2VzOiBbXSxcbiAgICBlcnJvcnM6IFtdLFxuICB9O1xuXG4gIGNvbnN0IGxvZyA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoc3Bpbm5lcikge1xuICAgICAgc3Bpbm5lci50ZXh0ID0gbWVzc2FnZTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgY29uc29sZS5sb2cobWVzc2FnZSk7XG4gICAgfVxuICB9O1xuXG4gIHRyeSB7XG4gICAgLy8gU3RlcCAxOiBHZXQgc3RhY2sgaW5mbyBhbmQgb3JpZ2luYWwgdGVtcGxhdGVcbiAgICBsb2coJ0ZldGNoaW5nIHN0YWNrIGluZm9ybWF0aW9uLi4uJyk7XG4gICAgY29uc3Qgc3RhY2tJbmZvID0gYXdhaXQgY2xpZW50LmdldFN0YWNrSW5mbyhvcHRpb25zLnN0YWNrTmFtZSk7XG5cbiAgICBsb2coJ0ZldGNoaW5nIG9yaWdpbmFsIHRlbXBsYXRlLi4uJyk7XG4gICAgY29uc3Qgb3JpZ2luYWxUZW1wbGF0ZUJvZHkgPSBhd2FpdCBjbGllbnQuZ2V0VGVtcGxhdGUoc3RhY2tJbmZvLnN0YWNrSWQsIHRydWUpO1xuICAgIGNvbnN0IG9yaWdpbmFsVGVtcGxhdGUgPSBwYXJzZVRlbXBsYXRlKG9yaWdpbmFsVGVtcGxhdGVCb2R5KTtcblxuICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBGb3VuZCBzdGFjazogJHtzdGFja0luZm8uc3RhY2tOYW1lfSAoJHtzdGFja0luZm8uc3RhY2tJZH0pYCk7XG4gICAgfVxuXG4gICAgLy8gU3RlcHMgMi00OiBEZXRlY3QgZHJpZnQgYW5kIGNvbGxlY3QgZGVjaXNpb25zIChvciBsb2FkIGZyb20gcGxhbilcbiAgICBsZXQgYWxsRHJpZnRlZFJlc291cmNlczogRHJpZnRlZFJlc291cmNlW107XG4gICAgbGV0IGRlY2lzaW9uczogSW50ZXJhY3RpdmVEZWNpc2lvbnM7XG5cbiAgICBpZiAob3B0aW9ucy5hcHBseVBsYW4pIHtcbiAgICAgIC8vIEFwcGx5IGEgcHJldmlvdXNseSBleHBvcnRlZCBwbGFuIOKAlCBza2lwIGRyaWZ0IGRldGVjdGlvbiBhbmQgcHJvbXB0aW5nXG4gICAgICBsb2coJ0xvYWRpbmcgcmVtZWRpYXRpb24gcGxhbi4uLicpO1xuICAgICAgY29uc3QgcGxhbkpzb24gPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKG9wdGlvbnMuYXBwbHlQbGFuKSwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBwbGFuID0gbG9hZFBsYW4ocGxhbkpzb24sIG9wdGlvbnMuc3RhY2tOYW1lKTtcbiAgICAgIGNvbnN0IGxvYWRlZCA9IHBsYW5Ub0RlY2lzaW9ucyhwbGFuKTtcbiAgICAgIGFsbERyaWZ0ZWRSZXNvdXJjZXMgPSBsb2FkZWQuYWxsRHJpZnRlZFJlc291cmNlcztcbiAgICAgIGRlY2lzaW9ucyA9IGxvYWRlZC5kZWNpc2lvbnM7XG5cbiAgICAgIGlmIChzcGlubmVyKSBzcGlubmVyLnN0YXJ0KCdQcm9jZXNzaW5nLi4uJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vcm1hbCBmbG93OiBkZXRlY3QgZHJpZnQgYW5kIHByb21wdCBpbnRlcmFjdGl2ZWx5XG5cbiAgICAgIC8vIFN0ZXAgMjogRGV0ZWN0IGRyaWZ0XG4gICAgICBsb2coJ0RldGVjdGluZyBzdGFjayBkcmlmdC4uLicpO1xuICAgICAgY29uc3QgZGV0ZWN0aW9uSWQgPSBhd2FpdCBjbGllbnQuZGV0ZWN0RHJpZnQoc3RhY2tJbmZvLnN0YWNrSWQpO1xuXG4gICAgICBsb2coJ1dhaXRpbmcgZm9yIGRyaWZ0IGRldGVjdGlvbiB0byBjb21wbGV0ZS4uLicpO1xuICAgICAgY29uc3QgZGV0ZWN0aW9uUmVzdWx0ID0gYXdhaXQgY2xpZW50LndhaXRGb3JEcmlmdERldGVjdGlvbihkZXRlY3Rpb25JZCk7XG5cbiAgICAgIGlmIChkZXRlY3Rpb25SZXN1bHQuc3RhdHVzICE9PSAnREVURUNUSU9OX0NPTVBMRVRFJykge1xuICAgICAgICByZXN1bHQuZXJyb3JzLnB1c2goYERyaWZ0IGRldGVjdGlvbiBkaWQgbm90IGNvbXBsZXRlOiAke2RldGVjdGlvblJlc3VsdC5zdGF0dXN9YCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZXRlY3Rpb25SZXN1bHQuZHJpZnRTdGF0dXMgPT09ICdJTl9TWU5DJykge1xuICAgICAgICBpZiAoc3Bpbm5lcikgc3Bpbm5lci5zdWNjZWVkKCdTdGFjayBpcyBpbiBzeW5jIC0gbm8gZHJpZnQgZGV0ZWN0ZWQnKTtcbiAgICAgICAgcmVzdWx0LnN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICAvLyBTdGVwIDM6IEdldCBkcmlmdGVkIHJlc291cmNlcyBhbmQgc2VwYXJhdGUgYnkgdHlwZVxuICAgICAgbG9nKCdBbmFseXppbmcgZHJpZnRlZCByZXNvdXJjZXMuLi4nKTtcbiAgICAgIGFsbERyaWZ0ZWRSZXNvdXJjZXMgPSBhd2FpdCBjbGllbnQuZ2V0RHJpZnRlZFJlc291cmNlcyhzdGFja0luZm8uc3RhY2tJZCk7XG5cbiAgICAgIGlmIChhbGxEcmlmdGVkUmVzb3VyY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoc3Bpbm5lcikgc3Bpbm5lci5zdWNjZWVkKCdObyBkcmlmdGVkIHJlc291cmNlcyBmb3VuZCcpO1xuICAgICAgICByZXN1bHQuc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIENhdGVnb3JpemUgZHJpZnRlZCByZXNvdXJjZXMgYnkgaW1wb3J0YWJpbGl0eSBhbmQgZHJpZnQgc3RhdHVzXG4gICAgICBjb25zdCBtb2RpZmllZFJlc291cmNlczogRHJpZnRlZFJlc291cmNlW10gPSBbXTtcbiAgICAgIGNvbnN0IGRlbGV0ZWRSZXNvdXJjZXM6IERyaWZ0ZWRSZXNvdXJjZVtdID0gW107XG4gICAgICBjb25zdCBub25JbXBvcnRhYmxlTW9kaWZpZWQ6IERyaWZ0ZWRSZXNvdXJjZVtdID0gW107XG4gICAgICBjb25zdCBub25JbXBvcnRhYmxlRGVsZXRlZDogRHJpZnRlZFJlc291cmNlW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBhbGxEcmlmdGVkUmVzb3VyY2VzKSB7XG4gICAgICAgIGNvbnN0IGltcG9ydGFibGUgPSBpc1Jlc291cmNlSW1wb3J0YWJsZShyZXNvdXJjZS5yZXNvdXJjZVR5cGUpO1xuICAgICAgICBpZiAocmVzb3VyY2Uuc3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzID09PSAnREVMRVRFRCcpIHtcbiAgICAgICAgICBpZiAoaW1wb3J0YWJsZSkge1xuICAgICAgICAgICAgZGVsZXRlZFJlc291cmNlcy5wdXNoKHJlc291cmNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9uSW1wb3J0YWJsZURlbGV0ZWQucHVzaChyZXNvdXJjZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpbXBvcnRhYmxlKSB7XG4gICAgICAgICAgICBtb2RpZmllZFJlc291cmNlcy5wdXNoKHJlc291cmNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9uSW1wb3J0YWJsZU1vZGlmaWVkLnB1c2gocmVzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUcmFjayBub24taW1wb3J0YWJsZSByZXNvdXJjZXMgaW4gcmVzdWx0XG4gICAgICBmb3IgKGNvbnN0IHIgb2Ygbm9uSW1wb3J0YWJsZU1vZGlmaWVkKSB7XG4gICAgICAgIHJlc3VsdC5ub25JbXBvcnRhYmxlUmVzb3VyY2VzLnB1c2goe1xuICAgICAgICAgIGxvZ2ljYWxSZXNvdXJjZUlkOiByLmxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgICAgICAgIHJlc291cmNlVHlwZTogci5yZXNvdXJjZVR5cGUsXG4gICAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiByLnBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgICAgICAgICBkcmlmdFN0YXR1czogJ01PRElGSUVEJyxcbiAgICAgICAgICBwcm9wZXJ0eURpZmZlcmVuY2VzOiByLnByb3BlcnR5RGlmZmVyZW5jZXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCByIG9mIG5vbkltcG9ydGFibGVEZWxldGVkKSB7XG4gICAgICAgIHJlc3VsdC5ub25JbXBvcnRhYmxlUmVzb3VyY2VzLnB1c2goe1xuICAgICAgICAgIGxvZ2ljYWxSZXNvdXJjZUlkOiByLmxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgICAgICAgIHJlc291cmNlVHlwZTogci5yZXNvdXJjZVR5cGUsXG4gICAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiByLnBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgICAgICAgICBkcmlmdFN0YXR1czogJ0RFTEVURUQnLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gRGlzcGxheSBub24taW1wb3J0YWJsZSByZXBvcnQgYmVmb3JlIHByb21wdHNcbiAgICAgIGlmIChub25JbXBvcnRhYmxlTW9kaWZpZWQubGVuZ3RoID4gMCB8fCBub25JbXBvcnRhYmxlRGVsZXRlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChzcGlubmVyKSBzcGlubmVyLnN0b3AoKTtcbiAgICAgICAgZGlzcGxheU5vbkltcG9ydGFibGVSZXBvcnQobm9uSW1wb3J0YWJsZU1vZGlmaWVkLCBub25JbXBvcnRhYmxlRGVsZXRlZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGFsbCBkcmlmdGVkIHJlc291cmNlcyBhcmUgbm9uLWltcG9ydGFibGUgTU9ESUZJRUQsIHJlcG9ydCBhbmQgcmV0dXJuXG4gICAgICBpZiAobW9kaWZpZWRSZXNvdXJjZXMubGVuZ3RoID09PSAwICYmIGRlbGV0ZWRSZXNvdXJjZXMubGVuZ3RoID09PSAwICYmIG5vbkltcG9ydGFibGVEZWxldGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAobm9uSW1wb3J0YWJsZU1vZGlmaWVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXN1bHQuc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuZXJyb3JzLnB1c2goJ0FsbCBkcmlmdGVkIHJlc291cmNlcyBhcmUgbm90IGVsaWdpYmxlIGZvciBpbXBvcnQnKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgLy8gU3RlcCA0OiBJbnRlcmFjdGl2ZSBkZWNpc2lvbnMgKGltcG9ydGFibGUgcmVzb3VyY2VzIG9ubHkpXG4gICAgICBpZiAoc3Bpbm5lcikgc3Bpbm5lci5zdG9wKCk7XG5cbiAgICAgIGRlY2lzaW9ucyA9IGF3YWl0IHByb21wdEZvckRlY2lzaW9ucyhcbiAgICAgICAgbW9kaWZpZWRSZXNvdXJjZXMsXG4gICAgICAgIGRlbGV0ZWRSZXNvdXJjZXMsXG4gICAgICAgIG9wdGlvbnMueWVzID8/IGZhbHNlLFxuICAgICAgKTtcblxuICAgICAgLy8gTm9uLWltcG9ydGFibGUgREVMRVRFRCByZXNvdXJjZXMgYXJlIGFsd2F5cyByZW1vdmVkIChubyBwcm9tcHQgbmVlZGVkKVxuICAgICAgZm9yIChjb25zdCByIG9mIG5vbkltcG9ydGFibGVEZWxldGVkKSB7XG4gICAgICAgIGRlY2lzaW9ucy5yZW1vdmUucHVzaChyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwaW5uZXIpIHNwaW5uZXIuc3RhcnQoJ1Byb2Nlc3NpbmcuLi4nKTtcblxuICAgICAgLy8gRXhwb3J0IHBsYW4gaWYgcmVxdWVzdGVkIChleGl0IHdpdGhvdXQgZXhlY3V0aW5nKVxuICAgICAgaWYgKG9wdGlvbnMuZXhwb3J0UGxhbikge1xuICAgICAgICBjb25zdCBwbGFuTWV0YWRhdGEgPSB7XG4gICAgICAgICAgc3RhY2tOYW1lOiBzdGFja0luZm8uc3RhY2tOYW1lLFxuICAgICAgICAgIHJlZ2lvbjogY2xpZW50LnJlZ2lvbixcbiAgICAgICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICB0b29sVmVyc2lvbjogcGFja2FnZVZlcnNpb24oKSxcbiAgICAgICAgICBkcmlmdERldGVjdGlvbklkOiBkZXRlY3Rpb25JZCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGxhbiA9IGJ1aWxkUGxhbihwbGFuTWV0YWRhdGEsIGRlY2lzaW9ucywgbm9uSW1wb3J0YWJsZU1vZGlmaWVkKTtcbiAgICAgICAgY29uc3QgcGxhblBhdGggPSBwYXRoLnJlc29sdmUob3B0aW9ucy5leHBvcnRQbGFuKTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwbGFuUGF0aCwgc2VyaWFsaXplUGxhbihwbGFuKSk7XG4gICAgICAgIGlmIChzcGlubmVyKSBzcGlubmVyLnN1Y2NlZWQoYFBsYW4gZXhwb3J0ZWQgdG8gJHtwbGFuUGF0aH1gKTtcbiAgICAgICAgcmVzdWx0LnN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlY29yZCBza2lwcGVkIHJlc291cmNlc1xuICAgIGZvciAoY29uc3QgciBvZiBkZWNpc2lvbnMuc2tpcCkge1xuICAgICAgcmVzdWx0LnNraXBwZWRSZXNvdXJjZXMucHVzaChyLmxvZ2ljYWxSZXNvdXJjZUlkKTtcbiAgICB9XG5cbiAgICAvLyBJZiBldmVyeXRoaW5nIHdhcyBza2lwcGVkIG9yIGNhbmNlbGxlZCwgd2UncmUgZG9uZVxuICAgIGlmIChkZWNpc2lvbnMuYXV0b2ZpeC5sZW5ndGggPT09IDAgJiYgZGVjaXNpb25zLnJlaW1wb3J0Lmxlbmd0aCA9PT0gMCAmJiBkZWNpc2lvbnMucmVtb3ZlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKHNwaW5uZXIpIHNwaW5uZXIuc3VjY2VlZCgnTm8gYWN0aW9ucyBzZWxlY3RlZCcpO1xuICAgICAgcmVzdWx0LnN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBTdGVwIDU6IEJ1aWxkIHJlc291cmNlcyB0byBpbXBvcnQgZnJvbSBkZWNpc2lvbnNcbiAgICBjb25zdCByZXNvdXJjZUlkZW50aWZpZXJzID0gYXdhaXQgY2xpZW50LmdldFJlc291cmNlSWRlbnRpZmllcnMob3JpZ2luYWxUZW1wbGF0ZUJvZHkpO1xuXG4gICAgLy8gQXV0b2ZpeCByZXNvdXJjZXM6IHVzZSBleGlzdGluZyBidWlsZFJlc291cmNlc1RvSW1wb3J0XG4gICAgY29uc3QgeyBpbXBvcnRhYmxlOiBhdXRvZml4SW1wb3J0YWJsZSwgc2tpcHBlZDogYXV0b2ZpeFNraXBwZWQgfSA9XG4gICAgICBidWlsZFJlc291cmNlc1RvSW1wb3J0KGRlY2lzaW9ucy5hdXRvZml4LCByZXNvdXJjZUlkZW50aWZpZXJzKTtcblxuICAgIGZvciAoY29uc3QgcyBvZiBhdXRvZml4U2tpcHBlZCkge1xuICAgICAgaWYgKCFyZXN1bHQuc2tpcHBlZFJlc291cmNlcy5pbmNsdWRlcyhzLmxvZ2ljYWxSZXNvdXJjZUlkKSkge1xuICAgICAgICByZXN1bHQuc2tpcHBlZFJlc291cmNlcy5wdXNoKHMubG9naWNhbFJlc291cmNlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlaW1wb3J0IHJlc291cmNlczogYnVpbGQgZnJvbSB1c2VyLXByb3ZpZGVkIHBoeXNpY2FsIElEc1xuICAgIGNvbnN0IHJlaW1wb3J0SW1wb3J0YWJsZTogUmVzb3VyY2VUb0ltcG9ydFtdID0gW107XG4gICAgZm9yIChjb25zdCB7IHJlc291cmNlLCBwaHlzaWNhbElkIH0gb2YgZGVjaXNpb25zLnJlaW1wb3J0KSB7XG4gICAgICBjb25zdCBkZXNjcmlwdG9yID0gYnVpbGRSZWltcG9ydERlc2NyaXB0b3IocmVzb3VyY2UsIHBoeXNpY2FsSWQsIHJlc291cmNlSWRlbnRpZmllcnMpO1xuICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgcmVpbXBvcnRJbXBvcnRhYmxlLnB1c2goZGVzY3JpcHRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQuZXJyb3JzLnB1c2goXG4gICAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgaW1wb3J0IGlkZW50aWZpZXIgZm9yICR7cmVzb3VyY2UubG9naWNhbFJlc291cmNlSWR9IGZyb20gXCIke3BoeXNpY2FsSWR9XCJgLFxuICAgICAgICApO1xuICAgICAgICByZXN1bHQuc2tpcHBlZFJlc291cmNlcy5wdXNoKHJlc291cmNlLmxvZ2ljYWxSZXNvdXJjZUlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb21iaW5lZCBpbXBvcnRhYmxlIGxpc3RcbiAgICBjb25zdCBhbGxJbXBvcnRhYmxlID0gWy4uLmF1dG9maXhJbXBvcnRhYmxlLCAuLi5yZWltcG9ydEltcG9ydGFibGVdO1xuXG4gICAgLy8gSWYgbm90aGluZyB0byBpbXBvcnQgQU5EIG5vdGhpbmcgdG8gcmVtb3ZlLCB3ZSdyZSBzdHVja1xuICAgIGlmIChhbGxJbXBvcnRhYmxlLmxlbmd0aCA9PT0gMCAmJiBkZWNpc2lvbnMucmVtb3ZlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LmVycm9ycy5wdXNoKCdDb3VsZCBub3QgZGV0ZXJtaW5lIGltcG9ydCBpZGVudGlmaWVycyBmb3IgYW55IHNlbGVjdGVkIHJlc291cmNlcycpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCB0aGUgc2V0IG9mIGxvZ2ljYWwgSURzIHRoYXQgbmVlZCByZW1vdmFsIGZyb20gdGhlIHRlbXBsYXRlXG4gICAgLy8gVGhpcyBpbmNsdWRlcyBldmVyeXRoaW5nIGJlaW5nIGFjdGVkIG9uIChhdXRvZml4LCByZWltcG9ydCwgcmVtb3ZlKVxuICAgIGNvbnN0IGxvZ2ljYWxJZHNUb1JlbW92ZSA9IG5ldyBTZXQoW1xuICAgICAgLi4uYXV0b2ZpeEltcG9ydGFibGUubWFwKChyKSA9PiByLkxvZ2ljYWxSZXNvdXJjZUlkKSxcbiAgICAgIC4uLnJlaW1wb3J0SW1wb3J0YWJsZS5tYXAoKHIpID0+IHIuTG9naWNhbFJlc291cmNlSWQpLFxuICAgICAgLi4uZGVjaXNpb25zLnJlbW92ZS5tYXAoKHIpID0+IHIubG9naWNhbFJlc291cmNlSWQpLFxuICAgIF0pO1xuXG4gICAgLy8gQW5hbHl6ZSBjYXNjYWRlIHJlbW92YWxzIChyZXNvdXJjZXMgd2l0aCBicm9rZW4gUmVmL0dldEF0dCB0byByZW1vdmVkIHJlc291cmNlcylcbiAgICBjb25zdCBjYXNjYWRlUmVtb3ZhbHMgPSBhbmFseXplQ2FzY2FkZVJlbW92YWxzKG9yaWdpbmFsVGVtcGxhdGUsIGxvZ2ljYWxJZHNUb1JlbW92ZSk7XG5cbiAgICAvLyBQYXJ0aXRpb24gaW50byBwZXJtYW5lbnQgKGRlcGVuZCBvbiB1c2VyLXJlbW92ZWQgcmVzb3VyY2VzKSB2cyB0ZW1wb3JhcnkgKGRlcGVuZCBvbiBhdXRvZml4L3JlaW1wb3J0KVxuICAgIGNvbnN0IHBlcm1hbmVudGx5UmVtb3ZlZElkcyA9IG5ldyBTZXQoZGVjaXNpb25zLnJlbW92ZS5tYXAoKHIpID0+IHIubG9naWNhbFJlc291cmNlSWQpKTtcbiAgICBjb25zdCBwZXJtYW5lbnRDYXNjYWRlID0gY2FzY2FkZVJlbW92YWxzLmZpbHRlcigoYykgPT4gcGVybWFuZW50bHlSZW1vdmVkSWRzLmhhcyhjLmRlcGVuZHNPbikpO1xuICAgIGNvbnN0IHRlbXBvcmFyeUNhc2NhZGUgPSBjYXNjYWRlUmVtb3ZhbHMuZmlsdGVyKChjKSA9PiAhcGVybWFuZW50bHlSZW1vdmVkSWRzLmhhcyhjLmRlcGVuZHNPbikpO1xuXG4gICAgaWYgKGNhc2NhZGVSZW1vdmFscy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoc3Bpbm5lcikgc3Bpbm5lci5zdG9wKCk7XG4gICAgICBkaXNwbGF5Q2FzY2FkZVdhcm5pbmcocGVybWFuZW50Q2FzY2FkZSwgdGVtcG9yYXJ5Q2FzY2FkZSk7XG4gICAgICBpZiAoc3Bpbm5lcikgc3Bpbm5lci5zdGFydCgnUHJvY2Vzc2luZy4uLicpO1xuICAgIH1cblxuICAgIC8vIERyeSBydW4gLSBzaG93IHdoYXQgd291bGQgYmUgZG9uZVxuICAgIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgICAgaWYgKHNwaW5uZXIpIHNwaW5uZXIuaW5mbygnRHJ5IHJ1biAtIHBsYW5uZWQgYWN0aW9uczonKTtcbiAgICAgIGlmIChhbGxJbXBvcnRhYmxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1xcblJlc291cmNlcyB0byByZW1lZGlhdGU6Jyk7XG4gICAgICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgYWxsSW1wb3J0YWJsZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIC0gJHtyZXNvdXJjZS5Mb2dpY2FsUmVzb3VyY2VJZH0gKCR7cmVzb3VyY2UuUmVzb3VyY2VUeXBlfSlgKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAgIElkZW50aWZpZXI6ICR7SlNPTi5zdHJpbmdpZnkocmVzb3VyY2UuUmVzb3VyY2VJZGVudGlmaWVyKX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlY2lzaW9ucy5yZW1vdmUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnXFxuUmVzb3VyY2VzIHRvIHJlbW92ZSBmcm9tIHN0YWNrOicpO1xuICAgICAgICBmb3IgKGNvbnN0IHIgb2YgZGVjaXNpb25zLnJlbW92ZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIC0gJHtyLmxvZ2ljYWxSZXNvdXJjZUlkfSAoJHtyLnJlc291cmNlVHlwZX0pYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwZXJtYW5lbnRDYXNjYWRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1xcblJlc291cmNlcyBwZXJtYW5lbnRseSBjYXNjYWRlLXJlbW92ZWQgKGJyb2tlbiByZWZlcmVuY2VzKTonKTtcbiAgICAgICAgZm9yIChjb25zdCBjIG9mIHBlcm1hbmVudENhc2NhZGUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAtICR7Yy5sb2dpY2FsUmVzb3VyY2VJZH0gKCR7Yy5yZXNvdXJjZVR5cGV9KSAtPiBkZXBlbmRzIG9uICR7Yy5kZXBlbmRzT259YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0ZW1wb3JhcnlDYXNjYWRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1xcblJlc291cmNlcyB0ZW1wb3JhcmlseSByZW1vdmVkIGFuZCByZWNyZWF0ZWQ6Jyk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiB0ZW1wb3JhcnlDYXNjYWRlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgLSAke2MubG9naWNhbFJlc291cmNlSWR9ICgke2MucmVzb3VyY2VUeXBlfSkgLT4gZGVwZW5kcyBvbiAke2MuZGVwZW5kc09ufWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCByZXBvcnRPbmx5ID0gcmVzdWx0Lm5vbkltcG9ydGFibGVSZXNvdXJjZXMuZmlsdGVyKChyKSA9PiByLmRyaWZ0U3RhdHVzID09PSAnTU9ESUZJRUQnKTtcbiAgICAgIGlmIChyZXBvcnRPbmx5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1xcbk5vbi1pbXBvcnRhYmxlIGRyaWZ0ZWQgcmVzb3VyY2VzIChtYW51YWwgYWN0aW9uIHJlcXVpcmVkKTonKTtcbiAgICAgICAgZm9yIChjb25zdCByIG9mIHJlcG9ydE9ubHkpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAtICR7ci5sb2dpY2FsUmVzb3VyY2VJZH0gKCR7ci5yZXNvdXJjZVR5cGV9KSBbTU9ESUZJRURdYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdC5zdWNjZXNzID0gdHJ1ZTtcbiAgICAgIHJlc3VsdC5yZW1lZGlhdGVkUmVzb3VyY2VzID0gYWxsSW1wb3J0YWJsZS5tYXAoKHIpID0+IHIuTG9naWNhbFJlc291cmNlSWQpO1xuICAgICAgcmVzdWx0LnJlbW92ZWRSZXNvdXJjZXMgPSBbXG4gICAgICAgIC4uLmRlY2lzaW9ucy5yZW1vdmUubWFwKChyKSA9PiByLmxvZ2ljYWxSZXNvdXJjZUlkKSxcbiAgICAgICAgLi4ucGVybWFuZW50Q2FzY2FkZS5tYXAoKGMpID0+IGMubG9naWNhbFJlc291cmNlSWQpLFxuICAgICAgXTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gRGV0ZXJtaW5lIHJlcXVpcmVkIGNhcGFiaWxpdGllc1xuICAgIGNvbnN0IHJlc291cmNlVHlwZXMgPSBhbGxJbXBvcnRhYmxlLm1hcCgocikgPT4gci5SZXNvdXJjZVR5cGUpO1xuICAgIGNvbnN0IGFkZGl0aW9uYWxDYXBzID0gZ2V0QWxsUmVxdWlyZWRDYXBhYmlsaXRpZXMocmVzb3VyY2VUeXBlcyk7XG4gICAgY29uc3QgY2FwYWJpbGl0aWVzID0gWy4uLm5ldyBTZXQoWy4uLkRFRkFVTFRfQ0FQQUJJTElUSUVTLCAuLi5hZGRpdGlvbmFsQ2Fwc10pXTtcblxuICAgIC8vIFNhdmUgcmVjb3ZlcnkgY2hlY2twb2ludCBiZWZvcmUgYW55IHN0YWNrIG11dGF0aW9uc1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bOi5dL2csICctJyk7XG4gICAgY29uc3QgYmFja3VwRmlsZU5hbWUgPSBgLmNmbi1kcmlmdC1yZW1lZGlhdGUtYmFja3VwLSR7c3RhY2tJbmZvLnN0YWNrTmFtZX0tJHt0aW1lc3RhbXB9Lmpzb25gO1xuICAgIGNvbnN0IGJhY2t1cFBhdGggPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgYmFja3VwRmlsZU5hbWUpO1xuICAgIGNvbnN0IGNoZWNrcG9pbnQ6IFJlY292ZXJ5Q2hlY2twb2ludCA9IHtcbiAgICAgIHN0YWNrTmFtZTogc3RhY2tJbmZvLnN0YWNrTmFtZSxcbiAgICAgIHN0YWNrSWQ6IHN0YWNrSW5mby5zdGFja0lkLFxuICAgICAgb3JpZ2luYWxUZW1wbGF0ZUJvZHksXG4gICAgICBwYXJhbWV0ZXJzOiBzdGFja0luZm8ucGFyYW1ldGVycyxcbiAgICAgIGRyaWZ0ZWRSZXNvdXJjZUlkczogQXJyYXkuZnJvbShsb2dpY2FsSWRzVG9SZW1vdmUpLFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGJhY2t1cFBhdGgsIEpTT04uc3RyaW5naWZ5KGNoZWNrcG9pbnQsIG51bGwsIDIpKTtcbiAgICBsb2coYFJlY292ZXJ5IGNoZWNrcG9pbnQgc2F2ZWQgdG86ICR7YmFja3VwUGF0aH1gKTtcbiAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICBjb25zb2xlLmxvZyhgUmVjb3ZlcnkgY2hlY2twb2ludDogJHtiYWNrdXBQYXRofWApO1xuICAgIH1cblxuICAgIC8vIFN0ZXAgNjogU2V0IERlbGV0aW9uUG9saWN5OiBSZXRhaW4gb24gYWxsIHJlc291cmNlc1xuICAgIC8vIERFTEVURUQgcmVzb3VyY2VzIG11c3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSB0ZW1wbGF0ZSBmaXJzdCDigJQgQ2xvdWRGb3JtYXRpb25cbiAgICAvLyBjYW5ub3QgdXBkYXRlIG1ldGFkYXRhIG9uIHJlc291cmNlcyB0aGF0IG5vIGxvbmdlciBleGlzdCBpbiBBV1MuXG4gICAgbG9nKCdTZXR0aW5nIERlbGV0aW9uUG9saWN5OiBSZXRhaW4gb24gYWxsIHJlc291cmNlcy4uLicpO1xuICAgIGNvbnN0IGRlbGV0ZWRMb2dpY2FsSWRzID0gbmV3IFNldChcbiAgICAgIGFsbERyaWZ0ZWRSZXNvdXJjZXNcbiAgICAgICAgLmZpbHRlcigocikgPT4gci5zdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09ICdERUxFVEVEJyAmJiBsb2dpY2FsSWRzVG9SZW1vdmUuaGFzKHIubG9naWNhbFJlc291cmNlSWQpKVxuICAgICAgICAubWFwKChyKSA9PiByLmxvZ2ljYWxSZXNvdXJjZUlkKSxcbiAgICApO1xuXG4gICAgbGV0IHJldGFpblRlbXBsYXRlID0gc2V0UmV0ZW50aW9uT25BbGxSZXNvdXJjZXMob3JpZ2luYWxUZW1wbGF0ZSk7XG5cbiAgICBpZiAoZGVsZXRlZExvZ2ljYWxJZHMuc2l6ZSA+IDApIHtcbiAgICAgIC8vIFJlbW92ZSBkZWxldGVkIHJlc291cmNlcyBhbmQgY2xlYW4gdXAgdGhlaXIgZGFuZ2xpbmcgcmVmZXJlbmNlc1xuICAgICAgY29uc3QgeyB0ZW1wbGF0ZTogY2xlYW5lZFRlbXBsYXRlIH0gPSB0cmFuc2Zvcm1UZW1wbGF0ZUZvclJlbW92YWwoXG4gICAgICAgIHJldGFpblRlbXBsYXRlLFxuICAgICAgICBkZWxldGVkTG9naWNhbElkcyxcbiAgICAgICAgbmV3IE1hcCgpLCAvLyBubyByZXNvbHZlZCB2YWx1ZXMg4oCUIGp1c3Qgc3RyaXAgdW5yZXNvbHZhYmxlIHJlZmVyZW5jZXNcbiAgICAgICk7XG4gICAgICByZXRhaW5UZW1wbGF0ZSA9IGNsZWFuZWRUZW1wbGF0ZTtcbiAgICB9XG5cbiAgICBhd2FpdCBjbGllbnQudXBkYXRlU3RhY2soXG4gICAgICBzdGFja0luZm8uc3RhY2tJZCxcbiAgICAgIHN0cmluZ2lmeVRlbXBsYXRlKHJldGFpblRlbXBsYXRlKSxcbiAgICAgIHJldGFpblRlbXBsYXRlLlBhcmFtZXRlcnMgPyBzdGFja0luZm8ucGFyYW1ldGVycyA6IHVuZGVmaW5lZCxcbiAgICAgIGNhcGFiaWxpdGllcyxcbiAgICApO1xuXG4gICAgLy8gU3RlcCA3OiBSZXNvbHZlIGNyb3NzLXJlZmVyZW5jZXMgdG8gTU9ESUZJRUQgcmVzb3VyY2VzIGJlaW5nIHJlbW92ZWRcbiAgICAvLyAoREVMRVRFRCByZXNvdXJjZXMgYXJlIGFscmVhZHkgcmVtb3ZlZCBmcm9tIHRoZSB0ZW1wbGF0ZSwgc28gb25seSBNT0RJRklFRCByZWZzIHJlbWFpbilcbiAgICBjb25zdCBtb2RpZmllZElkc1RvUmVtb3ZlID0gbmV3IFNldChcbiAgICAgIFsuLi5sb2dpY2FsSWRzVG9SZW1vdmVdLmZpbHRlcigoaWQpID0+ICFkZWxldGVkTG9naWNhbElkcy5oYXMoaWQpKSxcbiAgICApO1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBjb2xsZWN0UmVmZXJlbmNlcyhyZXRhaW5UZW1wbGF0ZSwgbW9kaWZpZWRJZHNUb1JlbW92ZSk7XG5cbiAgICBsZXQgcmVzb2x2ZWRWYWx1ZXMgPSBuZXcgTWFwPHN0cmluZywgdW5rbm93bj4oKTtcbiAgICBpZiAocmVmZXJlbmNlcy5zaXplID4gMCkge1xuICAgICAgbG9nKCdSZXNvbHZpbmcgcmVmZXJlbmNlcyB0byBkcmlmdGVkIHJlc291cmNlcy4uLicpO1xuXG4gICAgICBjb25zdCBvdXRwdXRUZW1wbGF0ZSA9IGFkZFJlc29sdXRpb25PdXRwdXRzKHJldGFpblRlbXBsYXRlLCByZWZlcmVuY2VzKTtcbiAgICAgIGF3YWl0IGNsaWVudC51cGRhdGVTdGFjayhcbiAgICAgICAgc3RhY2tJbmZvLnN0YWNrSWQsXG4gICAgICAgIHN0cmluZ2lmeVRlbXBsYXRlKG91dHB1dFRlbXBsYXRlKSxcbiAgICAgICAgb3V0cHV0VGVtcGxhdGUuUGFyYW1ldGVycyA/IHN0YWNrSW5mby5wYXJhbWV0ZXJzIDogdW5kZWZpbmVkLFxuICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICApO1xuXG4gICAgICBjb25zdCB1cGRhdGVkU3RhY2tJbmZvID0gYXdhaXQgY2xpZW50LmdldFN0YWNrSW5mbyhzdGFja0luZm8uc3RhY2tJZCk7XG4gICAgICByZXNvbHZlZFZhbHVlcyA9IHBhcnNlUmVzb2x2ZWRPdXRwdXRzKHVwZGF0ZWRTdGFja0luZm8ub3V0cHV0cyB8fCBbXSwgcmVmZXJlbmNlcyk7XG4gICAgfVxuXG4gICAgLy8gU3RlcCA4OiBSZW1vdmUgcmVtYWluaW5nIChNT0RJRklFRCkgcmVzb3VyY2VzIGZyb20gdGVtcGxhdGVcbiAgICBsb2coJ1JlbW92aW5nIHJlc291cmNlcyBmcm9tIHN0YWNrIChyZXNvdXJjZXMgcmV0YWluZWQgaW4gQVdTKS4uLicpO1xuICAgIGNvbnN0IHsgdGVtcGxhdGU6IHJlbW92YWxUZW1wbGF0ZSB9ID0gdHJhbnNmb3JtVGVtcGxhdGVGb3JSZW1vdmFsKFxuICAgICAgcmV0YWluVGVtcGxhdGUsXG4gICAgICBtb2RpZmllZElkc1RvUmVtb3ZlLFxuICAgICAgcmVzb2x2ZWRWYWx1ZXMsXG4gICAgKTtcblxuICAgIGNvbnN0IHJlbW92YWxQYXJhbXMgPSByZW1vdmFsVGVtcGxhdGUuUGFyYW1ldGVycyA/IHN0YWNrSW5mby5wYXJhbWV0ZXJzIDogdW5kZWZpbmVkO1xuICAgIGF3YWl0IGNsaWVudC51cGRhdGVTdGFjayhcbiAgICAgIHN0YWNrSW5mby5zdGFja0lkLFxuICAgICAgc3RyaW5naWZ5VGVtcGxhdGUocmVtb3ZhbFRlbXBsYXRlKSxcbiAgICAgIHJlbW92YWxQYXJhbXMsXG4gICAgICBjYXBhYmlsaXRpZXMsXG4gICAgKTtcblxuICAgIC8vIFN0ZXAgOTogSW1wb3J0IHJlc291cmNlcyAob25seSBpZiB0aGVyZSBhcmUgcmVzb3VyY2VzIHRvIGltcG9ydClcbiAgICBpZiAoYWxsSW1wb3J0YWJsZS5sZW5ndGggPiAwKSB7XG4gICAgICBsb2coJ1ByZXBhcmluZyBpbXBvcnQgdGVtcGxhdGUgd2l0aCBhY3R1YWwgcmVzb3VyY2Ugc3RhdGUuLi4nKTtcblxuICAgICAgLy8gQnVpbGQgaW1wb3J0IHRlbXBsYXRlIGZyb20gdGhlIHJlbW92YWwgdGVtcGxhdGUgKGN1cnJlbnQgc3RhY2sgc3RhdGUpXG4gICAgICAvLyBhbmQgYWRkIGJhY2sgdGhlIHJlc291cmNlcyBiZWluZyBpbXBvcnRlZCB3aXRoIHRoZWlyIGFjdHVhbCBwcm9wZXJ0aWVzXG4gICAgICBjb25zdCBpbXBvcnRUZW1wbGF0ZSA9IGRlZXBDbG9uZShyZW1vdmFsVGVtcGxhdGUpO1xuXG4gICAgICBmb3IgKGNvbnN0IGltcG9ydGFibGUgb2YgYWxsSW1wb3J0YWJsZSkge1xuICAgICAgICBjb25zdCBsb2dpY2FsSWQgPSBpbXBvcnRhYmxlLkxvZ2ljYWxSZXNvdXJjZUlkO1xuICAgICAgICBjb25zdCBvcmlnaW5hbFJlc291cmNlID0gb3JpZ2luYWxUZW1wbGF0ZS5SZXNvdXJjZXM/Lltsb2dpY2FsSWRdO1xuICAgICAgICBpZiAoIW9yaWdpbmFsUmVzb3VyY2UpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIFN0YXJ0IHdpdGggb3JpZ2luYWwgcmVzb3VyY2UgZGVmaW5pdGlvblxuICAgICAgICBpbXBvcnRUZW1wbGF0ZS5SZXNvdXJjZXNbbG9naWNhbElkXSA9IGRlZXBDbG9uZShvcmlnaW5hbFJlc291cmNlKTtcblxuICAgICAgICAvLyBGb3IgYXV0b2ZpeCByZXNvdXJjZXMsIG92ZXJyaWRlIHdpdGggYWN0dWFsIChkcmlmdGVkKSBwcm9wZXJ0aWVzXG4gICAgICAgIGNvbnN0IGF1dG9maXhSZXNvdXJjZSA9IGRlY2lzaW9ucy5hdXRvZml4LmZpbmQoKHIpID0+IHIubG9naWNhbFJlc291cmNlSWQgPT09IGxvZ2ljYWxJZCk7XG4gICAgICAgIGlmIChhdXRvZml4UmVzb3VyY2U/LmFjdHVhbFByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXMoYXV0b2ZpeFJlc291cmNlLmFjdHVhbFByb3BlcnRpZXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpbXBvcnRUZW1wbGF0ZS5SZXNvdXJjZXNbbG9naWNhbElkXS5Qcm9wZXJ0aWVzID0gYXV0b2ZpeFJlc291cmNlLmFjdHVhbFByb3BlcnRpZXM7XG4gICAgICAgIH1cblxuICAgICAgICBpbXBvcnRUZW1wbGF0ZS5SZXNvdXJjZXNbbG9naWNhbElkXS5EZWxldGlvblBvbGljeSA9ICdSZXRhaW4nO1xuICAgICAgfVxuXG4gICAgICAvLyBFbnN1cmUgUmV0YWluIG9uIGFsbCByZXNvdXJjZXMgaW4gaW1wb3J0IHRlbXBsYXRlXG4gICAgICBmb3IgKGNvbnN0IGxvZ2ljYWxJZCBvZiBPYmplY3Qua2V5cyhpbXBvcnRUZW1wbGF0ZS5SZXNvdXJjZXMpKSB7XG4gICAgICAgIGltcG9ydFRlbXBsYXRlLlJlc291cmNlc1tsb2dpY2FsSWRdLkRlbGV0aW9uUG9saWN5ID0gJ1JldGFpbic7XG4gICAgICB9XG5cbiAgICAgIGxvZygnQ3JlYXRpbmcgaW1wb3J0IGNoYW5nZSBzZXQuLi4nKTtcbiAgICAgIGNvbnN0IGNoYW5nZVNldE5hbWUgPSBhd2FpdCBjbGllbnQuY3JlYXRlSW1wb3J0Q2hhbmdlU2V0KFxuICAgICAgICBzdGFja0luZm8uc3RhY2tOYW1lLFxuICAgICAgICBzdHJpbmdpZnlUZW1wbGF0ZShpbXBvcnRUZW1wbGF0ZSksXG4gICAgICAgIGFsbEltcG9ydGFibGUsXG4gICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICk7XG5cbiAgICAgIGxvZygnRXhlY3V0aW5nIGltcG9ydC4uLicpO1xuICAgICAgYXdhaXQgY2xpZW50LmV4ZWN1dGVDaGFuZ2VTZXQoc3RhY2tJbmZvLnN0YWNrTmFtZSwgY2hhbmdlU2V0TmFtZSk7XG4gICAgfVxuXG4gICAgLy8gU3RlcCAxMDogUmVzdG9yZSB0ZW1wbGF0ZVxuICAgIGlmIChkZWNpc2lvbnMucmVtb3ZlLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFNvbWUgcmVzb3VyY2VzIHBlcm1hbmVudGx5IHJlbW92ZWQg4oCUIHJlc3RvcmUgb3JpZ2luYWwgTUlOVVMgcmVtb3ZlZCByZXNvdXJjZXNcbiAgICAgIGxvZygnUmVzdG9yaW5nIHRlbXBsYXRlIChleGNsdWRpbmcgcmVtb3ZlZCByZXNvdXJjZXMpLi4uJyk7XG4gICAgICBjb25zdCByZXN0b3JlZFRlbXBsYXRlID0gZGVlcENsb25lKG9yaWdpbmFsVGVtcGxhdGUpO1xuICAgICAgZm9yIChjb25zdCByIG9mIGRlY2lzaW9ucy5yZW1vdmUpIHtcbiAgICAgICAgZGVsZXRlIHJlc3RvcmVkVGVtcGxhdGUuUmVzb3VyY2VzW3IubG9naWNhbFJlc291cmNlSWRdO1xuICAgICAgfVxuICAgICAgLy8gQ2xlYW4gdXAgcmVmZXJlbmNlcyBhbmQgb3V0cHV0cyBwb2ludGluZyB0byByZW1vdmVkIHJlc291cmNlc1xuICAgICAgY29uc3QgeyB0ZW1wbGF0ZTogY2xlYW5lZFRlbXBsYXRlIH0gPSB0cmFuc2Zvcm1UZW1wbGF0ZUZvclJlbW92YWwoXG4gICAgICAgIHJlc3RvcmVkVGVtcGxhdGUsXG4gICAgICAgIG5ldyBTZXQoZGVjaXNpb25zLnJlbW92ZS5tYXAoKHIpID0+IHIubG9naWNhbFJlc291cmNlSWQpKSxcbiAgICAgICAgcmVzb2x2ZWRWYWx1ZXMsXG4gICAgICApO1xuICAgICAgLy8gUmVzdG9yZSBvcmlnaW5hbCBEZWxldGlvblBvbGljeSB2YWx1ZXMgKHRyYW5zZm9ybVRlbXBsYXRlRm9yUmVtb3ZhbCBzZXRzIFJldGFpbiBvbiBhbGwpXG4gICAgICBmb3IgKGNvbnN0IFtsb2dpY2FsSWQsIHJlc291cmNlXSBvZiBPYmplY3QuZW50cmllcyhjbGVhbmVkVGVtcGxhdGUuUmVzb3VyY2VzIHx8IHt9KSkge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFJlc291cmNlID0gb3JpZ2luYWxUZW1wbGF0ZS5SZXNvdXJjZXM/Lltsb2dpY2FsSWRdO1xuICAgICAgICBpZiAob3JpZ2luYWxSZXNvdXJjZT8uRGVsZXRpb25Qb2xpY3kpIHtcbiAgICAgICAgICByZXNvdXJjZS5EZWxldGlvblBvbGljeSA9IG9yaWdpbmFsUmVzb3VyY2UuRGVsZXRpb25Qb2xpY3k7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIHJlc291cmNlLkRlbGV0aW9uUG9saWN5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBjbGllbnQudXBkYXRlU3RhY2soXG4gICAgICAgIHN0YWNrSW5mby5zdGFja05hbWUsXG4gICAgICAgIHN0cmluZ2lmeVRlbXBsYXRlKGNsZWFuZWRUZW1wbGF0ZSksXG4gICAgICAgIGNsZWFuZWRUZW1wbGF0ZS5QYXJhbWV0ZXJzID8gc3RhY2tJbmZvLnBhcmFtZXRlcnMgOiB1bmRlZmluZWQsXG4gICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIHJlbW92YWxzIOKAlCByZXN0b3JlIGV4YWN0IG9yaWdpbmFsXG4gICAgICBsb2coJ1Jlc3RvcmluZyBvcmlnaW5hbCB0ZW1wbGF0ZS4uLicpO1xuICAgICAgYXdhaXQgY2xpZW50LnVwZGF0ZVN0YWNrKFxuICAgICAgICBzdGFja0luZm8uc3RhY2tOYW1lLFxuICAgICAgICBvcmlnaW5hbFRlbXBsYXRlQm9keSxcbiAgICAgICAgc3RhY2tJbmZvLnBhcmFtZXRlcnMsXG4gICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVzdWx0LnN1Y2Nlc3MgPSB0cnVlO1xuICAgIHJlc3VsdC5yZW1lZGlhdGVkUmVzb3VyY2VzID0gYWxsSW1wb3J0YWJsZS5tYXAoKHIpID0+IHIuTG9naWNhbFJlc291cmNlSWQpO1xuICAgIHJlc3VsdC5yZW1vdmVkUmVzb3VyY2VzID0gW1xuICAgICAgLi4uZGVjaXNpb25zLnJlbW92ZS5tYXAoKHIpID0+IHIubG9naWNhbFJlc291cmNlSWQpLFxuICAgICAgLi4ucGVybWFuZW50Q2FzY2FkZS5tYXAoKGMpID0+IGMubG9naWNhbFJlc291cmNlSWQpLFxuICAgIF07XG5cbiAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICBjb25zb2xlLmxvZyhgUmVtZWRpYXRpb24gY29tcGxldGUuIFJlY292ZXJ5IGNoZWNrcG9pbnQgY2FuIGJlIHJlbW92ZWQ6ICR7YmFja3VwUGF0aH1gKTtcbiAgICB9XG5cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXN1bHQuZXJyb3JzLnB1c2goZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
package/lib/index.d.ts CHANGED
@@ -6,5 +6,5 @@ export * from './lib/eligible-resources';
6
6
  export * from './lib/template-transformer';
7
7
  export * from './lib/resource-importer';
8
8
  export * from './lib/resource-identifier';
9
- export { promptForDecisions, formatDriftDiff, displayCascadeWarning } from './lib/interactive';
9
+ export { promptForDecisions, formatDriftDiff, displayCascadeWarning, displayNonImportableReport } from './lib/interactive';
10
10
  export { buildPlan, serializePlan, loadPlan, planToDecisions } from './lib/plan';
package/lib/index.js CHANGED
@@ -40,7 +40,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
40
40
  return (mod && mod.__esModule) ? mod : { "default": mod };
41
41
  };
42
42
  Object.defineProperty(exports, "__esModule", { value: true });
43
- exports.planToDecisions = exports.loadPlan = exports.serializePlan = exports.buildPlan = exports.displayCascadeWarning = exports.formatDriftDiff = exports.promptForDecisions = exports.CfnClientWrapper = exports.remediate = void 0;
43
+ exports.planToDecisions = exports.loadPlan = exports.serializePlan = exports.buildPlan = exports.displayNonImportableReport = exports.displayCascadeWarning = exports.formatDriftDiff = exports.promptForDecisions = exports.CfnClientWrapper = exports.remediate = void 0;
44
44
  const fs = __importStar(require("fs"));
45
45
  const path = __importStar(require("path"));
46
46
  const chalk_1 = __importDefault(require("chalk"));
@@ -108,6 +108,14 @@ commander_1.program
108
108
  console.log(chalk_1.default.yellow(` - ${resource}`));
109
109
  }
110
110
  }
111
+ const reportOnly = result.nonImportableResources?.filter((r) => r.driftStatus === 'MODIFIED') ?? [];
112
+ if (reportOnly.length > 0) {
113
+ console.log(chalk_1.default.yellow('\nNon-importable drifted resources (manual action required):'));
114
+ for (const r of reportOnly) {
115
+ console.log(chalk_1.default.yellow(` - ${r.logicalResourceId} (${r.resourceType})`));
116
+ }
117
+ console.log(chalk_1.default.dim(' Update your CDK/CloudFormation source to match, or revert manually.'));
118
+ }
111
119
  }
112
120
  else {
113
121
  spinner.fail(chalk_1.default.red('Drift remediation failed'));
@@ -143,9 +151,10 @@ var interactive_1 = require("./lib/interactive");
143
151
  Object.defineProperty(exports, "promptForDecisions", { enumerable: true, get: function () { return interactive_1.promptForDecisions; } });
144
152
  Object.defineProperty(exports, "formatDriftDiff", { enumerable: true, get: function () { return interactive_1.formatDriftDiff; } });
145
153
  Object.defineProperty(exports, "displayCascadeWarning", { enumerable: true, get: function () { return interactive_1.displayCascadeWarning; } });
154
+ Object.defineProperty(exports, "displayNonImportableReport", { enumerable: true, get: function () { return interactive_1.displayNonImportableReport; } });
146
155
  var plan_1 = require("./lib/plan");
147
156
  Object.defineProperty(exports, "buildPlan", { enumerable: true, get: function () { return plan_1.buildPlan; } });
148
157
  Object.defineProperty(exports, "serializePlan", { enumerable: true, get: function () { return plan_1.serializePlan; } });
149
158
  Object.defineProperty(exports, "loadPlan", { enumerable: true, get: function () { return plan_1.loadPlan; } });
150
159
  Object.defineProperty(exports, "planToDecisions", { enumerable: true, get: function () { return plan_1.planToDecisions; } });
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0Isa0RBQTBCO0FBQzFCLHlDQUFvQztBQUNwQyw4Q0FBc0I7QUFDdEIsK0JBQWtDO0FBRWxDLGdDQUFnQztBQUNoQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDbkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRTFFLG1CQUFPO0tBQ0osSUFBSSxDQUFDLHFCQUFxQixDQUFDO0tBQzNCLFdBQVcsQ0FBQyxnR0FBZ0csQ0FBQztLQUM3RyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRWhDLG1CQUFPO0tBQ0osUUFBUSxDQUFDLGNBQWMsRUFBRSx3Q0FBd0MsQ0FBQztLQUNsRSxNQUFNLENBQUMsdUJBQXVCLEVBQUUsNkNBQTZDLENBQUM7S0FDOUUsTUFBTSxDQUFDLHlCQUF5QixFQUFFLHNEQUFzRCxDQUFDO0tBQ3pGLE1BQU0sQ0FBQyxXQUFXLEVBQUUsZ0RBQWdELEVBQUUsS0FBSyxDQUFDO0tBQzVFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsMkNBQTJDLEVBQUUsS0FBSyxDQUFDO0tBQ3ZFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxDQUFDO0tBQ3ZELE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxtREFBbUQsQ0FBQztLQUNuRixNQUFNLENBQUMscUJBQXFCLEVBQUUsOENBQThDLENBQUM7S0FDN0UsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFpQixFQUFFLE9B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QztBQUMxQyxpREFBK0Y7QUFBdEYsaUhBQUEsa0JBQWtCLE9BQUE7QUFBRSw4R0FBQSxlQUFlLE9BQUE7QUFBRSxvSEFBQSxxQkFBcUIsT0FBQTtBQUNuRSxtQ0FBaUY7QUFBeEUsaUdBQUEsU0FBUyxPQUFBO0FBQUUscUdBQUEsYUFBYSxPQUFBO0FBQUUsZ0dBQUEsUUFBUSxPQUFBO0FBQUUsdUdBQUEsZUFBZSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBwcm9ncmFtIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCB7IHJlbWVkaWF0ZSB9IGZyb20gJy4vY2xpJztcblxuLy8gR2V0IHZlcnNpb24gZnJvbSBwYWNrYWdlLmpzb25cbmNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdwYWNrYWdlLmpzb24nKTtcbmNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGFja2FnZUpzb25QYXRoLCAndXRmLTgnKSk7XG5cbnByb2dyYW1cbiAgLm5hbWUoJ2Nmbi1kcmlmdC1yZW1lZGlhdGUnKVxuICAuZGVzY3JpcHRpb24oJ1JlbWVkaWF0ZSBDbG91ZEZvcm1hdGlvbiBzdGFjayBkcmlmdCBieSByZS1pbXBvcnRpbmcgZHJpZnRlZCByZXNvdXJjZXMgd2l0aCB0aGVpciBhY3R1YWwgc3RhdGUnKVxuICAudmVyc2lvbihwYWNrYWdlSnNvbi52ZXJzaW9uKTtcblxucHJvZ3JhbVxuICAuYXJndW1lbnQoJzxzdGFjay1uYW1lPicsICdOYW1lIG9yIElEIG9mIHRoZSBDbG91ZEZvcm1hdGlvbiBzdGFjaycpXG4gIC5vcHRpb24oJy1yLCAtLXJlZ2lvbiA8cmVnaW9uPicsICdBV1MgcmVnaW9uIChkZWZhdWx0cyB0byBBV1NfUkVHSU9OIGVudiB2YXIpJylcbiAgLm9wdGlvbignLXAsIC0tcHJvZmlsZSA8cHJvZmlsZT4nLCAnQVdTIHByb2ZpbGUgdG8gdXNlIChkZWZhdWx0cyB0byBBV1NfUFJPRklMRSBlbnYgdmFyKScpXG4gIC5vcHRpb24oJy0tZHJ5LXJ1bicsICdTaG93IHdoYXQgd291bGQgYmUgZG9uZSB3aXRob3V0IG1ha2luZyBjaGFuZ2VzJywgZmFsc2UpXG4gIC5vcHRpb24oJy15LCAtLXllcycsICdTa2lwIGludGVyYWN0aXZlIHByb21wdHMsIGFjY2VwdCBkZWZhdWx0cycsIGZhbHNlKVxuICAub3B0aW9uKCctdiwgLS12ZXJib3NlJywgJ0VuYWJsZSB2ZXJib3NlIG91dHB1dCcsIGZhbHNlKVxuICAub3B0aW9uKCctLWV4cG9ydC1wbGFuIDxmaWxlPicsICdFeHBvcnQgcmVtZWRpYXRpb24gcGxhbiB0byBmaWxlIHdpdGhvdXQgZXhlY3V0aW5nJylcbiAgLm9wdGlvbignLS1hcHBseS1wbGFuIDxmaWxlPicsICdBcHBseSBhIHByZXZpb3VzbHkgZXhwb3J0ZWQgcmVtZWRpYXRpb24gcGxhbicpXG4gIC5hY3Rpb24oYXN5bmMgKHN0YWNrTmFtZTogc3RyaW5nLCBvcHRpb25zOiB7XG4gICAgcmVnaW9uPzogc3RyaW5nO1xuICAgIHByb2ZpbGU/OiBzdHJpbmc7XG4gICAgZHJ5UnVuOiBib29sZWFuO1xuICAgIHllczogYm9vbGVhbjtcbiAgICB2ZXJib3NlOiBib29sZWFuO1xuICAgIGV4cG9ydFBsYW4/OiBzdHJpbmc7XG4gICAgYXBwbHlQbGFuPzogc3RyaW5nO1xuICB9KSA9PiB7XG4gICAgaWYgKG9wdGlvbnMuZXhwb3J0UGxhbiAmJiBvcHRpb25zLmFwcGx5UGxhbikge1xuICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOiAtLWV4cG9ydC1wbGFuIGFuZCAtLWFwcGx5LXBsYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZScpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGlubmVyID0gb3JhKCdTdGFydGluZyBkcmlmdCByZW1lZGlhdGlvbi4uLicpLnN0YXJ0KCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVtZWRpYXRlKFxuICAgICAgICB7XG4gICAgICAgICAgc3RhY2tOYW1lLFxuICAgICAgICAgIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24sXG4gICAgICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgICAgIGRyeVJ1bjogb3B0aW9ucy5kcnlSdW4sXG4gICAgICAgICAgeWVzOiBvcHRpb25zLnllcyxcbiAgICAgICAgICB2ZXJib3NlOiBvcHRpb25zLnZlcmJvc2UsXG4gICAgICAgICAgZXhwb3J0UGxhbjogb3B0aW9ucy5leHBvcnRQbGFuLFxuICAgICAgICAgIGFwcGx5UGxhbjogb3B0aW9ucy5hcHBseVBsYW4sXG4gICAgICAgIH0sXG4gICAgICAgIHNwaW5uZXIsXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuZXhwb3J0UGxhbikge1xuICAgICAgICAgIC8vIHNwaW5uZXIuc3VjY2VlZCBhbHJlYWR5IGNhbGxlZCBpbiByZW1lZGlhdGUoKSDigJQgbm90aGluZyBtb3JlIHRvIHByaW50XG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnJlbWVkaWF0ZWRSZXNvdXJjZXMubGVuZ3RoID4gMCB8fCByZXN1bHQucmVtb3ZlZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKGNoYWxrLmdyZWVuKCdEcmlmdCByZW1lZGlhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IScpKTtcbiAgICAgICAgICBpZiAocmVzdWx0LnJlbWVkaWF0ZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbignXFxuUmVtZWRpYXRlZCByZXNvdXJjZXM6JykpO1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiByZXN1bHQucmVtZWRpYXRlZFJlc291cmNlcykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGAgIC0gJHtyZXNvdXJjZX1gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN1bHQucmVtb3ZlZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1xcblJlbW92ZWQgZnJvbSBzdGFjayAoc3RpbGwgZXhpc3QgaW4gQVdTKTonKSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc3VsdC5yZW1vdmVkUmVzb3VyY2VzKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhgICAtICR7cmVzb3VyY2V9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoY2hhbGsuZ3JlZW4oJ1N0YWNrIGlzIGFscmVhZHkgaW4gc3luYyAtIG5vIHJlbWVkaWF0aW9uIG5lZWRlZCcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXN1bHQuc2tpcHBlZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdcXG5Ta2lwcGVkIHJlc291cmNlczonKSk7XG4gICAgICAgICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiByZXN1bHQuc2tpcHBlZFJlc291cmNlcykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGAgIC0gJHtyZXNvdXJjZX1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcGlubmVyLmZhaWwoY2hhbGsucmVkKCdEcmlmdCByZW1lZGlhdGlvbiBmYWlsZWQnKSk7XG4gICAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgcmVzdWx0LmVycm9ycykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKGAgIC0gJHtlcnJvcn1gKSk7XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgQ3RybCtDIGR1cmluZyBpbnRlcmFjdGl2ZSBwcm9tcHRzXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSAnRXhpdFByb21wdEVycm9yJykge1xuICAgICAgICBzcGlubmVyLnN0b3AoKTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdcXG5BYm9ydGVkIGJ5IHVzZXInKSk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxMzApO1xuICAgICAgfVxuICAgICAgc3Bpbm5lci5mYWlsKGNoYWxrLnJlZChgRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvcn1gKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9KTtcblxucHJvZ3JhbS5wYXJzZSgpO1xuXG4vLyBFeHBvcnQgbGlicmFyeSBmdW5jdGlvbnMgZm9yIHByb2dyYW1tYXRpYyB1c2VcbmV4cG9ydCB7IHJlbWVkaWF0ZSB9IGZyb20gJy4vY2xpJztcbmV4cG9ydCB7IENmbkNsaWVudFdyYXBwZXIgfSBmcm9tICcuL2xpYi9jZm4tY2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VsaWdpYmxlLXJlc291cmNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90ZW1wbGF0ZS10cmFuc2Zvcm1lcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZXNvdXJjZS1pbXBvcnRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZXNvdXJjZS1pZGVudGlmaWVyJztcbmV4cG9ydCB7IHByb21wdEZvckRlY2lzaW9ucywgZm9ybWF0RHJpZnREaWZmLCBkaXNwbGF5Q2FzY2FkZVdhcm5pbmcgfSBmcm9tICcuL2xpYi9pbnRlcmFjdGl2ZSc7XG5leHBvcnQgeyBidWlsZFBsYW4sIHNlcmlhbGl6ZVBsYW4sIGxvYWRQbGFuLCBwbGFuVG9EZWNpc2lvbnMgfSBmcm9tICcuL2xpYi9wbGFuJztcbiJdfQ==
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0Isa0RBQTBCO0FBQzFCLHlDQUFvQztBQUNwQyw4Q0FBc0I7QUFDdEIsK0JBQWtDO0FBRWxDLGdDQUFnQztBQUNoQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDbkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRTFFLG1CQUFPO0tBQ0osSUFBSSxDQUFDLHFCQUFxQixDQUFDO0tBQzNCLFdBQVcsQ0FBQyxnR0FBZ0csQ0FBQztLQUM3RyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRWhDLG1CQUFPO0tBQ0osUUFBUSxDQUFDLGNBQWMsRUFBRSx3Q0FBd0MsQ0FBQztLQUNsRSxNQUFNLENBQUMsdUJBQXVCLEVBQUUsNkNBQTZDLENBQUM7S0FDOUUsTUFBTSxDQUFDLHlCQUF5QixFQUFFLHNEQUFzRCxDQUFDO0tBQ3pGLE1BQU0sQ0FBQyxXQUFXLEVBQUUsZ0RBQWdELEVBQUUsS0FBSyxDQUFDO0tBQzVFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsMkNBQTJDLEVBQUUsS0FBSyxDQUFDO0tBQ3ZFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxDQUFDO0tBQ3ZELE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxtREFBbUQsQ0FBQztLQUNuRixNQUFNLENBQUMscUJBQXFCLEVBQUUsOENBQThDLENBQUM7S0FDN0UsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFpQixFQUFFLE9B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QUFLLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUMvQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEYsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFTCxtQkFBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBRWhCLGdEQUFnRDtBQUNoRCw2QkFBa0M7QUFBekIsZ0dBQUEsU0FBUyxPQUFBO0FBQ2xCLCtDQUFvRDtBQUEzQyw4R0FBQSxnQkFBZ0IsT0FBQTtBQUN6Qiw4Q0FBNEI7QUFDNUIsMkRBQXlDO0FBQ3pDLDZEQUEyQztBQUMzQywwREFBd0M7QUFDeEMsNERBQTBDO0FBQzFDLGlEQUEySDtBQUFsSCxpSEFBQSxrQkFBa0IsT0FBQTtBQUFFLDhHQUFBLGVBQWUsT0FBQTtBQUFFLG9IQUFBLHFCQUFxQixPQUFBO0FBQUUseUhBQUEsMEJBQTBCLE9BQUE7QUFDL0YsbUNBQWlGO0FBQXhFLGlHQUFBLFNBQVMsT0FBQTtBQUFFLHFHQUFBLGFBQWEsT0FBQTtBQUFFLGdHQUFBLFFBQVEsT0FBQTtBQUFFLHVHQUFBLGVBQWUsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgcHJvZ3JhbSB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgeyByZW1lZGlhdGUgfSBmcm9tICcuL2NsaSc7XG5cbi8vIEdldCB2ZXJzaW9uIGZyb20gcGFja2FnZS5qc29uXG5jb25zdCBwYWNrYWdlSnNvblBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAncGFja2FnZS5qc29uJyk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhY2thZ2VKc29uUGF0aCwgJ3V0Zi04JykpO1xuXG5wcm9ncmFtXG4gIC5uYW1lKCdjZm4tZHJpZnQtcmVtZWRpYXRlJylcbiAgLmRlc2NyaXB0aW9uKCdSZW1lZGlhdGUgQ2xvdWRGb3JtYXRpb24gc3RhY2sgZHJpZnQgYnkgcmUtaW1wb3J0aW5nIGRyaWZ0ZWQgcmVzb3VyY2VzIHdpdGggdGhlaXIgYWN0dWFsIHN0YXRlJylcbiAgLnZlcnNpb24ocGFja2FnZUpzb24udmVyc2lvbik7XG5cbnByb2dyYW1cbiAgLmFyZ3VtZW50KCc8c3RhY2stbmFtZT4nLCAnTmFtZSBvciBJRCBvZiB0aGUgQ2xvdWRGb3JtYXRpb24gc3RhY2snKVxuICAub3B0aW9uKCctciwgLS1yZWdpb24gPHJlZ2lvbj4nLCAnQVdTIHJlZ2lvbiAoZGVmYXVsdHMgdG8gQVdTX1JFR0lPTiBlbnYgdmFyKScpXG4gIC5vcHRpb24oJy1wLCAtLXByb2ZpbGUgPHByb2ZpbGU+JywgJ0FXUyBwcm9maWxlIHRvIHVzZSAoZGVmYXVsdHMgdG8gQVdTX1BST0ZJTEUgZW52IHZhciknKVxuICAub3B0aW9uKCctLWRyeS1ydW4nLCAnU2hvdyB3aGF0IHdvdWxkIGJlIGRvbmUgd2l0aG91dCBtYWtpbmcgY2hhbmdlcycsIGZhbHNlKVxuICAub3B0aW9uKCcteSwgLS15ZXMnLCAnU2tpcCBpbnRlcmFjdGl2ZSBwcm9tcHRzLCBhY2NlcHQgZGVmYXVsdHMnLCBmYWxzZSlcbiAgLm9wdGlvbignLXYsIC0tdmVyYm9zZScsICdFbmFibGUgdmVyYm9zZSBvdXRwdXQnLCBmYWxzZSlcbiAgLm9wdGlvbignLS1leHBvcnQtcGxhbiA8ZmlsZT4nLCAnRXhwb3J0IHJlbWVkaWF0aW9uIHBsYW4gdG8gZmlsZSB3aXRob3V0IGV4ZWN1dGluZycpXG4gIC5vcHRpb24oJy0tYXBwbHktcGxhbiA8ZmlsZT4nLCAnQXBwbHkgYSBwcmV2aW91c2x5IGV4cG9ydGVkIHJlbWVkaWF0aW9uIHBsYW4nKVxuICAuYWN0aW9uKGFzeW5jIChzdGFja05hbWU6IHN0cmluZywgb3B0aW9uczoge1xuICAgIHJlZ2lvbj86IHN0cmluZztcbiAgICBwcm9maWxlPzogc3RyaW5nO1xuICAgIGRyeVJ1bjogYm9vbGVhbjtcbiAgICB5ZXM6IGJvb2xlYW47XG4gICAgdmVyYm9zZTogYm9vbGVhbjtcbiAgICBleHBvcnRQbGFuPzogc3RyaW5nO1xuICAgIGFwcGx5UGxhbj86IHN0cmluZztcbiAgfSkgPT4ge1xuICAgIGlmIChvcHRpb25zLmV4cG9ydFBsYW4gJiYgb3B0aW9ucy5hcHBseVBsYW4pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjogLS1leHBvcnQtcGxhbiBhbmQgLS1hcHBseS1wbGFuIGFyZSBtdXR1YWxseSBleGNsdXNpdmUnKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnU3RhcnRpbmcgZHJpZnQgcmVtZWRpYXRpb24uLi4nKS5zdGFydCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlbWVkaWF0ZShcbiAgICAgICAge1xuICAgICAgICAgIHN0YWNrTmFtZSxcbiAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgICAgICBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuLFxuICAgICAgICAgIHllczogb3B0aW9ucy55ZXMsXG4gICAgICAgICAgdmVyYm9zZTogb3B0aW9ucy52ZXJib3NlLFxuICAgICAgICAgIGV4cG9ydFBsYW46IG9wdGlvbnMuZXhwb3J0UGxhbixcbiAgICAgICAgICBhcHBseVBsYW46IG9wdGlvbnMuYXBwbHlQbGFuLFxuICAgICAgICB9LFxuICAgICAgICBzcGlubmVyLFxuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmV4cG9ydFBsYW4pIHtcbiAgICAgICAgICAvLyBzcGlubmVyLnN1Y2NlZWQgYWxyZWFkeSBjYWxsZWQgaW4gcmVtZWRpYXRlKCkg4oCUIG5vdGhpbmcgbW9yZSB0byBwcmludFxuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5yZW1lZGlhdGVkUmVzb3VyY2VzLmxlbmd0aCA+IDAgfHwgcmVzdWx0LnJlbW92ZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZChjaGFsay5ncmVlbignRHJpZnQgcmVtZWRpYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnKSk7XG4gICAgICAgICAgaWYgKHJlc3VsdC5yZW1lZGlhdGVkUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ1xcblJlbWVkaWF0ZWQgcmVzb3VyY2VzOicpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzdWx0LnJlbWVkaWF0ZWRSZXNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgICAtICR7cmVzb3VyY2V9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0LnJlbW92ZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdcXG5SZW1vdmVkIGZyb20gc3RhY2sgKHN0aWxsIGV4aXN0IGluIEFXUyk6JykpO1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiByZXN1bHQucmVtb3ZlZFJlc291cmNlcykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCAgLSAke3Jlc291cmNlfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKGNoYWxrLmdyZWVuKCdTdGFjayBpcyBhbHJlYWR5IGluIHN5bmMgLSBubyByZW1lZGlhdGlvbiBuZWVkZWQnKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0LnNraXBwZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnXFxuU2tpcHBlZCByZXNvdXJjZXM6JykpO1xuICAgICAgICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzdWx0LnNraXBwZWRSZXNvdXJjZXMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhgICAtICR7cmVzb3VyY2V9YCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcG9ydE9ubHkgPSByZXN1bHQubm9uSW1wb3J0YWJsZVJlc291cmNlcz8uZmlsdGVyKChyKSA9PiByLmRyaWZ0U3RhdHVzID09PSAnTU9ESUZJRUQnKSA/PyBbXTtcbiAgICAgICAgaWYgKHJlcG9ydE9ubHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnXFxuTm9uLWltcG9ydGFibGUgZHJpZnRlZCByZXNvdXJjZXMgKG1hbnVhbCBhY3Rpb24gcmVxdWlyZWQpOicpKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHIgb2YgcmVwb3J0T25seSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGAgIC0gJHtyLmxvZ2ljYWxSZXNvdXJjZUlkfSAoJHtyLnJlc291cmNlVHlwZX0pYCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oJyAgVXBkYXRlIHlvdXIgQ0RLL0Nsb3VkRm9ybWF0aW9uIHNvdXJjZSB0byBtYXRjaCwgb3IgcmV2ZXJ0IG1hbnVhbGx5LicpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKGNoYWxrLnJlZCgnRHJpZnQgcmVtZWRpYXRpb24gZmFpbGVkJykpO1xuICAgICAgICBmb3IgKGNvbnN0IGVycm9yIG9mIHJlc3VsdC5lcnJvcnMpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChgICAtICR7ZXJyb3J9YCkpO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIEN0cmwrQyBkdXJpbmcgaW50ZXJhY3RpdmUgcHJvbXB0c1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubmFtZSA9PT0gJ0V4aXRQcm9tcHRFcnJvcicpIHtcbiAgICAgICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnXFxuQWJvcnRlZCBieSB1c2VyJykpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMTMwKTtcbiAgICAgIH1cbiAgICAgIHNwaW5uZXIuZmFpbChjaGFsay5yZWQoYEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogZXJyb3J9YCkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfSk7XG5cbnByb2dyYW0ucGFyc2UoKTtcblxuLy8gRXhwb3J0IGxpYnJhcnkgZnVuY3Rpb25zIGZvciBwcm9ncmFtbWF0aWMgdXNlXG5leHBvcnQgeyByZW1lZGlhdGUgfSBmcm9tICcuL2NsaSc7XG5leHBvcnQgeyBDZm5DbGllbnRXcmFwcGVyIH0gZnJvbSAnLi9saWIvY2ZuLWNsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lbGlnaWJsZS1yZXNvdXJjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGVtcGxhdGUtdHJhbnNmb3JtZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzb3VyY2UtaW1wb3J0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVzb3VyY2UtaWRlbnRpZmllcic7XG5leHBvcnQgeyBwcm9tcHRGb3JEZWNpc2lvbnMsIGZvcm1hdERyaWZ0RGlmZiwgZGlzcGxheUNhc2NhZGVXYXJuaW5nLCBkaXNwbGF5Tm9uSW1wb3J0YWJsZVJlcG9ydCB9IGZyb20gJy4vbGliL2ludGVyYWN0aXZlJztcbmV4cG9ydCB7IGJ1aWxkUGxhbiwgc2VyaWFsaXplUGxhbiwgbG9hZFBsYW4sIHBsYW5Ub0RlY2lzaW9ucyB9IGZyb20gJy4vbGliL3BsYW4nO1xuIl19
@@ -23,6 +23,11 @@ export declare function confirmActions(decisions: InteractiveDecisions): Promise
23
23
  * @param temporaryRemovals - Resources temporarily removed and recreated (depend on autofix/reimport resources)
24
24
  */
25
25
  export declare function displayCascadeWarning(permanentRemovals: CascadeRemoval[], temporaryRemovals: CascadeRemoval[]): void;
26
+ /**
27
+ * Display a report of non-importable drifted resources.
28
+ * Called before interactive prompts so the user has the full picture.
29
+ */
30
+ export declare function displayNonImportableReport(modifiedNonImportable: DriftedResource[], deletedNonImportable: DriftedResource[]): void;
26
31
  /**
27
32
  * Run the full interactive prompt flow for all drifted resources.
28
33
  * When `autoAccept` is true, returns default actions without prompting.
@@ -8,6 +8,7 @@ exports.promptModifiedResource = promptModifiedResource;
8
8
  exports.promptDeletedResource = promptDeletedResource;
9
9
  exports.confirmActions = confirmActions;
10
10
  exports.displayCascadeWarning = displayCascadeWarning;
11
+ exports.displayNonImportableReport = displayNonImportableReport;
11
12
  exports.promptForDecisions = promptForDecisions;
12
13
  const prompts_1 = require("@inquirer/prompts");
13
14
  const chalk_1 = __importDefault(require("chalk"));
@@ -160,6 +161,36 @@ function displayCascadeWarning(permanentRemovals, temporaryRemovals) {
160
161
  console.log(chalk_1.default.dim('\nThese resources reference resources being reimported and will be restored when the original template is applied.\n'));
161
162
  }
162
163
  }
164
+ /**
165
+ * Display a report of non-importable drifted resources.
166
+ * Called before interactive prompts so the user has the full picture.
167
+ */
168
+ function displayNonImportableReport(modifiedNonImportable, deletedNonImportable) {
169
+ if (modifiedNonImportable.length === 0 && deletedNonImportable.length === 0)
170
+ return;
171
+ const total = modifiedNonImportable.length + deletedNonImportable.length;
172
+ console.log(chalk_1.default.bold.yellow(`\n${total} drifted resource(s) cannot be auto-remediated (not importable by CloudFormation):`));
173
+ if (modifiedNonImportable.length > 0) {
174
+ console.log(chalk_1.default.bold.yellow(`\n MODIFIED (report only - ${modifiedNonImportable.length}):`));
175
+ for (const r of modifiedNonImportable) {
176
+ console.log(chalk_1.default.yellow(` ${r.logicalResourceId} (${r.resourceType})`));
177
+ console.log(chalk_1.default.dim(` Physical ID: ${r.physicalResourceId}`));
178
+ if (r.propertyDifferences && r.propertyDifferences.length > 0) {
179
+ console.log(chalk_1.default.dim(' Changes:'));
180
+ console.log(formatDriftDiff(r.propertyDifferences));
181
+ }
182
+ }
183
+ console.log(chalk_1.default.dim('\n To fix: update your CDK/CloudFormation source to match the actual state, or revert the resource manually.\n'));
184
+ }
185
+ if (deletedNonImportable.length > 0) {
186
+ console.log(chalk_1.default.bold.red(`\n DELETED (will be removed from template - ${deletedNonImportable.length}):`));
187
+ for (const r of deletedNonImportable) {
188
+ console.log(chalk_1.default.red(` ${r.logicalResourceId} (${r.resourceType})`));
189
+ console.log(chalk_1.default.dim(` Former Physical ID: ${r.physicalResourceId}`));
190
+ }
191
+ console.log(chalk_1.default.dim('\n These resources no longer exist in AWS and will be removed from the stack template.\n'));
192
+ }
193
+ }
163
194
  /**
164
195
  * Run the full interactive prompt flow for all drifted resources.
165
196
  * When `autoAccept` is true, returns default actions without prompting.
@@ -235,4 +266,4 @@ async function promptForDecisions(modifiedResources, deletedResources, autoAccep
235
266
  }
236
267
  return decisions;
237
268
  }
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2ludGVyYWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBZ0JBLDBDQWlCQztBQUtELHdEQW1DQztBQUtELHNEQXFDQztBQUtELHdDQWlDQztBQVNELHNEQXNDQztBQU1ELGdEQXNFQztBQXBSRCwrQ0FBMkQ7QUFDM0Qsa0RBQTBCO0FBUzFCLE1BQU0sY0FBYyxHQUNsQixtSEFBbUgsQ0FBQztBQUV0SDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxLQUEyQjtJQUN6RCxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7SUFDM0IsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQyxRQUFRLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM1QixLQUFLLFdBQVc7Z0JBQ2QsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxlQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hHLE1BQU07WUFDUixLQUFLLEtBQUs7Z0JBQ1IsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLGVBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxLQUFLLGVBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDaEYsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sZUFBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEtBQUssZUFBSyxDQUFDLEdB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TUFBTSxTQUFTLEdBQUcsTUFBTSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsMkNBQTJDO1lBQzNDLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLENBQUMsR0FBRyxpQkFBaUIsRUFBRSxHQUFHLGdCQUFnQixDQUFDO2FBQ2xELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzZWxlY3QsIGlucHV0LCBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7XG4gIENhc2NhZGVSZW1vdmFsLFxuICBEcmlmdGVkUmVzb3VyY2UsXG4gIEludGVyYWN0aXZlRGVjaXNpb25zLFxuICBSZXNvdXJjZUFjdGlvbixcbiAgUHJvcGVydHlEaWZmZXJlbmNlLFxufSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgUkVNT1ZFX1dBUk5JTkcgPVxuICAnTm90ZTogQWxzbyByZW1vdmUgdGhpcyByZXNvdXJjZSBmcm9tIHlvdXIgc291cmNlIHRlbXBsYXRlIChDREsvQ0ZOKSB0byBwcmV2ZW50IGl0IGJlaW5nIHJlY3JlYXRlZCBvbiBuZXh0IGRlcGxveS4nO1xuXG4vKipcbiAqIEZvcm1hdCBwcm9wZXJ0eS1sZXZlbCBkcmlmdCBhcyBhIGNvbG9yZWQgZGlmZiBmb3IgZGlzcGxheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERyaWZ0RGlmZihkaWZmczogUHJvcGVydHlEaWZmZXJlbmNlW10pOiBzdHJpbmcge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBkaWZmIG9mIGRpZmZzKSB7XG4gICAgY29uc3QgcGF0aCA9IGNoYWxrLmRpbShkaWZmLnByb3BlcnR5UGF0aCk7XG4gICAgc3dpdGNoIChkaWZmLmRpZmZlcmVuY2VUeXBlKSB7XG4gICAgICBjYXNlICdOT1RfRVFVQUwnOlxuICAgICAgICBsaW5lcy5wdXNoKGAgICAgJHtwYXRofTogJHtjaGFsay5yZWQoZGlmZi5leHBlY3RlZFZhbHVlKX0gLT4gJHtjaGFsay5ncmVlbihkaWZmLmFjdHVhbFZhbHVlKX1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBREQnOlxuICAgICAgICBsaW5lcy5wdXNoKGAgICAgJHtjaGFsay5ncmVlbignKycpfSAke3BhdGh9OiAke2NoYWxrLmdyZWVuKGRpZmYuYWN0dWFsVmFsdWUpfWApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1JFTU9WRSc6XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICAke2NoYWxrLnJlZCgnLScpfSAke3BhdGh9OiAke2NoYWxrLnJlZChkaWZmLmV4cGVjdGVkVmFsdWUpfWApO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIFByb21wdCB0aGUgdXNlciBmb3IgYSBzaW5nbGUgTU9ESUZJRUQgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9tcHRNb2RpZmllZFJlc291cmNlKFxuICByZXNvdXJjZTogRHJpZnRlZFJlc291cmNlLFxuICBpbmRleDogbnVtYmVyLFxuICB0b3RhbDogbnVtYmVyLFxuKTogUHJvbWlzZTxSZXNvdXJjZUFjdGlvbj4ge1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKGBcXG5bJHtpbmRleCArIDF9LyR7dG90YWx9XSAke3Jlc291cmNlLmxvZ2ljYWxSZXNvdXJjZUlkfWApKTtcbiAgY29uc29sZS5sb2coYCAgVHlwZTogJHtyZXNvdXJjZS5yZXNvdXJjZVR5cGV9YCk7XG4gIGNvbnNvbGUubG9nKGAgIFN0YXR1czogJHtjaGFsay55ZWxsb3coJ01PRElGSUVEJyl9YCk7XG4gIGNvbnNvbGUubG9nKGAgIFBoeXNpY2FsIElEOiAke3Jlc291cmNlLnBoeXNpY2FsUmVzb3VyY2VJZH1gKTtcblxuICBpZiAocmVzb3VyY2UucHJvcGVydHlEaWZmZXJlbmNlcyAmJiByZXNvdXJjZS5wcm9wZXJ0eURpZmZlcmVuY2VzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oJyAgQ2hhbmdlczonKSk7XG4gICAgY29uc29sZS5sb2coZm9ybWF0RHJpZnREaWZmKHJlc291cmNlLnByb3BlcnR5RGlmZmVyZW5jZXMpKTtcbiAgfVxuXG4gIGNvbnN0IGFjdGlvbiA9IGF3YWl0IHNlbGVjdDxzdHJpbmc+KHtcbiAgICBtZXNzYWdlOiAnQWN0aW9uOicsXG4gICAgZGVmYXVsdDogJ2F1dG9maXgnLFxuICAgIGNob2ljZXM6IFtcbiAgICAgIHsgbmFtZTogJ0F1dG9maXggLSByZWltcG9ydCB3aXRoIGFjdHVhbCBBV1Mgc3RhdGUnLCB2YWx1ZTogJ2F1dG9maXgnIH0sXG4gICAgICB7IG5hbWU6ICdTa2lwIC0gbGVhdmUgZHJpZnQgYXMtaXMnLCB2YWx1ZTogJ3NraXAnIH0sXG4gICAgICB7IG5hbWU6ICdSZW1vdmUgZnJvbSBzdGFjayAtIHN0b3AgbWFuYWdpbmcgdGhpcyByZXNvdXJjZScsIHZhbHVlOiAncmVtb3ZlJyB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIGlmIChhY3Rpb24gPT09ICdyZW1vdmUnKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGAgICR7UkVNT1ZFX1dBUk5JTkd9YCkpO1xuICB9XG5cbiAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICBjYXNlICdhdXRvZml4JzogcmV0dXJuIHsga2luZDogJ2F1dG9maXgnIH07XG4gICAgY2FzZSAnc2tpcCc6IHJldHVybiB7IGtpbmQ6ICdza2lwJyB9O1xuICAgIGNhc2UgJ3JlbW92ZSc6IHJldHVybiB7IGtpbmQ6ICdyZW1vdmUnIH07XG4gICAgZGVmYXVsdDogcmV0dXJuIHsga2luZDogJ2F1dG9maXgnIH07XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9tcHQgdGhlIHVzZXIgZm9yIGEgc2luZ2xlIERFTEVURUQgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9tcHREZWxldGVkUmVzb3VyY2UoXG4gIHJlc291cmNlOiBEcmlmdGVkUmVzb3VyY2UsXG4gIGluZGV4OiBudW1iZXIsXG4gIHRvdGFsOiBudW1iZXIsXG4pOiBQcm9taXNlPFJlc291cmNlQWN0aW9uPiB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoYFxcblske2luZGV4ICsgMX0vJHt0b3RhbH1dICR7cmVzb3VyY2UubG9naWNhbFJlc291cmNlSWR9YCkpO1xuICBjb25zb2xlLmxvZyhgICBUeXBlOiAke3Jlc291cmNlLnJlc291cmNlVHlwZX1gKTtcbiAgY29uc29sZS5sb2coYCAgU3RhdHVzOiAke2NoYWxrLnJlZCgnREVMRVRFRCcpfWApO1xuICBjb25zb2xlLmxvZyhgICBGb3JtZXIgUGh5c2ljYWwgSUQ6ICR7cmVzb3VyY2UucGh5c2ljYWxSZXNvdXJjZUlkfWApO1xuXG4gIGNvbnN0IGFjdGlvbiA9IGF3YWl0IHNlbGVjdDxzdHJpbmc+KHtcbiAgICBtZXNzYWdlOiAnQWN0aW9uOicsXG4gICAgZGVmYXVsdDogJ3JlbW92ZScsXG4gICAgY2hvaWNlczogW1xuICAgICAgeyBuYW1lOiAnUmVtb3ZlIGZyb20gc3RhY2sgLSBhY2NlcHQgZGVsZXRpb24nLCB2YWx1ZTogJ3JlbW92ZScgfSxcbiAgICAgIHsgbmFtZTogJ1JlLWltcG9ydCAtIHByb3ZpZGUgcmVzb3VyY2UgbmFtZSwgSUQsIG9yIEFSTicsIHZhbHVlOiAncmVpbXBvcnQnIH0sXG4gICAgICB7IG5hbWU6ICdTa2lwIC0gbGVhdmUgYXMtaXMgKHN0YWNrIHN0YXlzIGRyaWZ0ZWQpJywgdmFsdWU6ICdza2lwJyB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIGlmIChhY3Rpb24gPT09ICdyZWltcG9ydCcpIHtcbiAgICBjb25zdCBwaHlzaWNhbElkID0gYXdhaXQgaW5wdXQoe1xuICAgICAgbWVzc2FnZTogYEVudGVyIHJlc291cmNlIG5hbWUsIElELCBvciBBUk4gZm9yICR7cmVzb3VyY2UubG9naWNhbFJlc291cmNlSWR9ICgke3Jlc291cmNlLnJlc291cmNlVHlwZX0pOmAsXG4gICAgICB2YWxpZGF0ZTogKHZhbDogc3RyaW5nKSA9PiB2YWwudHJpbSgpLmxlbmd0aCA+IDAgfHwgJ1Jlc291cmNlIGlkZW50aWZpZXIgaXMgcmVxdWlyZWQnLFxuICAgIH0pO1xuICAgIHJldHVybiB7IGtpbmQ6ICdyZWltcG9ydCcsIHBoeXNpY2FsSWQ6IHBoeXNpY2FsSWQudHJpbSgpIH07XG4gIH1cblxuICBpZiAoYWN0aW9uID09PSAncmVtb3ZlJykge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhgICAke1JFTU9WRV9XQVJOSU5HfWApKTtcbiAgfVxuXG4gIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgY2FzZSAncmVtb3ZlJzogcmV0dXJuIHsga2luZDogJ3JlbW92ZScgfTtcbiAgICBjYXNlICdza2lwJzogcmV0dXJuIHsga2luZDogJ3NraXAnIH07XG4gICAgZGVmYXVsdDogcmV0dXJuIHsga2luZDogJ3JlbW92ZScgfTtcbiAgfVxufVxuXG4vKipcbiAqIFByaW50IGEgc3VtbWFyeSBvZiBwbGFubmVkIGFjdGlvbnMgYW5kIGFzayBmb3IgZmluYWwgY29uZmlybWF0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29uZmlybUFjdGlvbnMoZGVjaXNpb25zOiBJbnRlcmFjdGl2ZURlY2lzaW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5QbGFubmVkIGFjdGlvbnM6JykpO1xuICBpZiAoZGVjaXNpb25zLmF1dG9maXgubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGAgIEF1dG9maXg6ICR7ZGVjaXNpb25zLmF1dG9maXgubGVuZ3RofSByZXNvdXJjZShzKWApKTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgZGVjaXNpb25zLmF1dG9maXgpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICAgIC0gJHtyLmxvZ2ljYWxSZXNvdXJjZUlkfSAoJHtyLnJlc291cmNlVHlwZX0pYCkpO1xuICAgIH1cbiAgfVxuICBpZiAoZGVjaXNpb25zLnJlaW1wb3J0Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGAgIFJlLWltcG9ydDogJHtkZWNpc2lvbnMucmVpbXBvcnQubGVuZ3RofSByZXNvdXJjZShzKWApKTtcbiAgICBmb3IgKGNvbnN0IHsgcmVzb3VyY2UsIHBoeXNpY2FsSWQgfSBvZiBkZWNpc2lvbnMucmVpbXBvcnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICAgIC0gJHtyZXNvdXJjZS5sb2dpY2FsUmVzb3VyY2VJZH0gLT4gJHtwaHlzaWNhbElkfWApKTtcbiAgICB9XG4gIH1cbiAgaWYgKGRlY2lzaW9ucy5yZW1vdmUubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZChgICBSZW1vdmU6ICR7ZGVjaXNpb25zLnJlbW92ZS5sZW5ndGh9IHJlc291cmNlKHMpYCkpO1xuICAgIGZvciAoY29uc3QgciBvZiBkZWNpc2lvbnMucmVtb3ZlKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oYCAgICAtICR7ci5sb2dpY2FsUmVzb3VyY2VJZH0gKCR7ci5yZXNvdXJjZVR5cGV9KWApKTtcbiAgICB9XG4gIH1cbiAgaWYgKGRlY2lzaW9ucy5za2lwLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oYCAgU2tpcDogJHtkZWNpc2lvbnMuc2tpcC5sZW5ndGh9IHJlc291cmNlKHMpYCkpO1xuICB9XG5cbiAgY29uc3QgYWN0aW9uQ291bnQgPSBkZWNpc2lvbnMuYXV0b2ZpeC5sZW5ndGggKyBkZWNpc2lvbnMucmVpbXBvcnQubGVuZ3RoICsgZGVjaXNpb25zLnJlbW92ZS5sZW5ndGg7XG4gIGlmIChhY3Rpb25Db3VudCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBjb25maXJtKHtcbiAgICBtZXNzYWdlOiBgUHJvY2VlZCB3aXRoICR7YWN0aW9uQ291bnR9IGFjdGlvbihzKT9gLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0pO1xufVxuXG4vKipcbiAqIERpc3BsYXkgYSB3YXJuaW5nIGFib3V0IHJlc291cmNlcyB0aGF0IHdpbGwgYmUgY2FzY2FkZS1yZW1vdmVkXG4gKiBiZWNhdXNlIHRoZXkgcmVmZXJlbmNlIHJlc291cmNlcyBiZWluZyByZW1vdmVkLlxuICpcbiAqIEBwYXJhbSBwZXJtYW5lbnRSZW1vdmFscyAtIFJlc291cmNlcyBwZXJtYW5lbnRseSByZW1vdmVkIChkZXBlbmQgb24gdXNlci1yZW1vdmVkIHJlc291cmNlcylcbiAqIEBwYXJhbSB0ZW1wb3JhcnlSZW1vdmFscyAtIFJlc291cmNlcyB0ZW1wb3JhcmlseSByZW1vdmVkIGFuZCByZWNyZWF0ZWQgKGRlcGVuZCBvbiBhdXRvZml4L3JlaW1wb3J0IHJlc291cmNlcylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlDYXNjYWRlV2FybmluZyhcbiAgcGVybWFuZW50UmVtb3ZhbHM6IENhc2NhZGVSZW1vdmFsW10sXG4gIHRlbXBvcmFyeVJlbW92YWxzOiBDYXNjYWRlUmVtb3ZhbFtdLFxuKTogdm9pZCB7XG4gIGlmIChwZXJtYW5lbnRSZW1vdmFscy5sZW5ndGggPT09IDAgJiYgdGVtcG9yYXJ5UmVtb3ZhbHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgaWYgKHBlcm1hbmVudFJlbW92YWxzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLnllbGxvdyhcbiAgICAgIGBcXG5XYXJuaW5nOiAke3Blcm1hbmVudFJlbW92YWxzLmxlbmd0aH0gYWRkaXRpb25hbCByZXNvdXJjZShzKSB3aWxsIGJlIHBlcm1hbmVudGx5IHJlbW92ZWQgZnJvbSB0aGUgc3RhY2sgZHVlIHRvIGJyb2tlbiByZWZlcmVuY2VzOmAsXG4gICAgKSk7XG4gICAgZm9yIChjb25zdCByZW1vdmFsIG9mIHBlcm1hbmVudFJlbW92YWxzKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXG4gICAgICAgIGAgIC0gJHtyZW1vdmFsLmxvZ2ljYWxSZXNvdXJjZUlkfSAoJHtyZW1vdmFsLnJlc291cmNlVHlwZX0pYCArXG4gICAgICAgIGNoYWxrLmRpbShgIHJlZmVyZW5jZXMgcmVtb3ZlZCByZXNvdXJjZSAke3JlbW92YWwuZGVwZW5kc09ufWApLFxuICAgICAgKSk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcbiAgICAgICdcXG5UaGVzZSByZXNvdXJjZXMgaGF2ZSBSZWYvR2V0QXR0IHJlZmVyZW5jZXMgdG8gcGVybWFuZW50bHkgcmVtb3ZlZCByZXNvdXJjZXMgYW5kIGNhbm5vdCByZW1haW4gaW4gdGhlIHN0YWNrLicsXG4gICAgKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZGltKFxuICAgICAgJ0Fsc28gcmVtb3ZlIHRoZW0gZnJvbSB5b3VyIHNvdXJjZSB0ZW1wbGF0ZSAoQ0RLL0NGTikgdG8gcHJldmVudCB0aGVtIGJlaW5nIHJlY3JlYXRlZCBvbiBuZXh0IGRlcGxveS5cXG4nLFxuICAgICkpO1xuICB9XG5cbiAgaWYgKHRlbXBvcmFyeVJlbW92YWxzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmN5YW4oXG4gICAgICBgXFxuTm90ZTogJHt0ZW1wb3JhcnlSZW1vdmFscy5sZW5ndGh9IGRlcGVuZGVudCByZXNvdXJjZShzKSB3aWxsIGJlIHRlbXBvcmFyaWx5IHJlbW92ZWQgZnJvbSB0aGUgc3RhY2sgZHVyaW5nIHJlbWVkaWF0aW9uOmAsXG4gICAgKSk7XG4gICAgZm9yIChjb25zdCByZW1vdmFsIG9mIHRlbXBvcmFyeVJlbW92YWxzKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKFxuICAgICAgICBgICAtICR7cmVtb3ZhbC5sb2dpY2FsUmVzb3VyY2VJZH0gKCR7cmVtb3ZhbC5yZXNvdXJjZVR5cGV9KWAgK1xuICAgICAgICBjaGFsay5kaW0oYCByZWZlcmVuY2VzICR7cmVtb3ZhbC5kZXBlbmRzT259YCksXG4gICAgICApKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coY2hhbGsuZGltKFxuICAgICAgJ1xcblRoZXNlIHJlc291cmNlcyByZWZlcmVuY2UgcmVzb3VyY2VzIGJlaW5nIHJlaW1wb3J0ZWQgYW5kIHdpbGwgYmUgcmVzdG9yZWQgd2hlbiB0aGUgb3JpZ2luYWwgdGVtcGxhdGUgaXMgYXBwbGllZC5cXG4nLFxuICAgICkpO1xuICB9XG59XG5cbi8qKlxuICogUnVuIHRoZSBmdWxsIGludGVyYWN0aXZlIHByb21wdCBmbG93IGZvciBhbGwgZHJpZnRlZCByZXNvdXJjZXMuXG4gKiBXaGVuIGBhdXRvQWNjZXB0YCBpcyB0cnVlLCByZXR1cm5zIGRlZmF1bHQgYWN0aW9ucyB3aXRob3V0IHByb21wdGluZy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb21wdEZvckRlY2lzaW9ucyhcbiAgbW9kaWZpZWRSZXNvdXJjZXM6IERyaWZ0ZWRSZXNvdXJjZVtdLFxuICBkZWxldGVkUmVzb3VyY2VzOiBEcmlmdGVkUmVzb3VyY2VbXSxcbiAgYXV0b0FjY2VwdDogYm9vbGVhbixcbik6IFByb21pc2U8SW50ZXJhY3RpdmVEZWNpc2lvbnM+IHtcbiAgY29uc3QgZGVjaXNpb25zOiBJbnRlcmFjdGl2ZURlY2lzaW9ucyA9IHtcbiAgICBhdXRvZml4OiBbXSxcbiAgICByZWltcG9ydDogW10sXG4gICAgcmVtb3ZlOiBbXSxcbiAgICBza2lwOiBbXSxcbiAgfTtcblxuICBjb25zdCB0b3RhbENvdW50ID0gbW9kaWZpZWRSZXNvdXJjZXMubGVuZ3RoICsgZGVsZXRlZFJlc291cmNlcy5sZW5ndGg7XG5cbiAgLy8gTm9uLVRUWSBndWFyZFxuICBpZiAoIWF1dG9BY2NlcHQgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3Muc3RkaW4gJiYgIXByb2Nlc3Muc3RkaW4uaXNUVFkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVyYWN0aXZlIG1vZGUgcmVxdWlyZXMgYSB0ZXJtaW5hbC4gVXNlIC0teWVzICgteSkgZm9yIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLicpO1xuICB9XG5cbiAgaWYgKCFhdXRvQWNjZXB0ICYmIHRvdGFsQ291bnQgPiAwKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChgXFxuRm91bmQgJHt0b3RhbENvdW50fSBkcmlmdGVkIHJlc291cmNlKHMpLiBDaG9vc2UgYW4gYWN0aW9uIGZvciBlYWNoOlxcbmApKTtcbiAgfVxuXG4gIGxldCBpZHggPSAwO1xuXG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgbW9kaWZpZWRSZXNvdXJjZXMpIHtcbiAgICBpZiAoYXV0b0FjY2VwdCkge1xuICAgICAgZGVjaXNpb25zLmF1dG9maXgucHVzaChyZXNvdXJjZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IGF3YWl0IHByb21wdE1vZGlmaWVkUmVzb3VyY2UocmVzb3VyY2UsIGlkeCwgdG90YWxDb3VudCk7XG4gICAgICBzd2l0Y2ggKGFjdGlvbi5raW5kKSB7XG4gICAgICAgIGNhc2UgJ2F1dG9maXgnOiBkZWNpc2lvbnMuYXV0b2ZpeC5wdXNoKHJlc291cmNlKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3NraXAnOiBkZWNpc2lvbnMuc2tpcC5wdXNoKHJlc291cmNlKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JlbW92ZSc6IGRlY2lzaW9ucy5yZW1vdmUucHVzaChyZXNvdXJjZSk7IGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZHgrKztcbiAgfVxuXG4gIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgZGVsZXRlZFJlc291cmNlcykge1xuICAgIGlmIChhdXRvQWNjZXB0KSB7XG4gICAgICBkZWNpc2lvbnMucmVtb3ZlLnB1c2gocmVzb3VyY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSBhd2FpdCBwcm9tcHREZWxldGVkUmVzb3VyY2UocmVzb3VyY2UsIGlkeCwgdG90YWxDb3VudCk7XG4gICAgICBzd2l0Y2ggKGFjdGlvbi5raW5kKSB7XG4gICAgICAgIGNhc2UgJ3JlbW92ZSc6IGRlY2lzaW9ucy5yZW1vdmUucHVzaChyZXNvdXJjZSk7IGJyZWFrO1xuICAgICAgICBjYXNlICdyZWltcG9ydCc6XG4gICAgICAgICAgZGVjaXNpb25zLnJlaW1wb3J0LnB1c2goeyByZXNvdXJjZSwgcGh5c2ljYWxJZDogKGFjdGlvbiBhcyB7IGtpbmQ6ICdyZWltcG9ydCc7IHBoeXNpY2FsSWQ6IHN0cmluZyB9KS5waHlzaWNhbElkIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdza2lwJzogZGVjaXNpb25zLnNraXAucHVzaChyZXNvdXJjZSk7IGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZHgrKztcbiAgfVxuXG4gIC8vIFNob3cgc3VtbWFyeSBhbmQgY29uZmlybSAodW5sZXNzIGF1dG8tYWNjZXB0aW5nKVxuICBpZiAoIWF1dG9BY2NlcHQpIHtcbiAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCBjb25maXJtQWN0aW9ucyhkZWNpc2lvbnMpO1xuICAgIGlmICghY29uZmlybWVkKSB7XG4gICAgICAvLyBVc2VyIGNhbmNlbGxlZCDigJQgbW92ZSBldmVyeXRoaW5nIHRvIHNraXBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGF1dG9maXg6IFtdLFxuICAgICAgICByZWltcG9ydDogW10sXG4gICAgICAgIHJlbW92ZTogW10sXG4gICAgICAgIHNraXA6IFsuLi5tb2RpZmllZFJlc291cmNlcywgLi4uZGVsZXRlZFJlc291cmNlc10sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZWNpc2lvbnM7XG59XG4iXX0=
269
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2ludGVyYWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBZ0JBLDBDQWlCQztBQUtELHdEQW1DQztBQUtELHNEQXFDQztBQUtELHdDQWlDQztBQVNELHNEQXNDQztBQU1ELGdFQTRDQztBQU1ELGdEQXNFQztBQXRVRCwrQ0FBMkQ7QUFDM0Qsa0RBQTBCO0FBUzFCLE1BQU0sY0FBYyxHQUNsQixtSEFBbUgsQ0FBQztBQUV0SDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxLQUEyQjtJQUN6RCxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7SUFDM0IsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQyxRQUFRLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM1QixLQUFLLFdBQVc7Z0JBQ2QsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxlQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hHLE1BQU07WUFDUixLQUFLLEtBQUs7Z0JBQ1IsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLGVBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxLQUFLLGVBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDaEYsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sZUFBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEtBQUss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aW1wb3J0IHsgc2VsZWN0LCBpbnB1dCwgY29uZmlybSB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQge1xuICBDYXNjYWRlUmVtb3ZhbCxcbiAgRHJpZnRlZFJlc291cmNlLFxuICBJbnRlcmFjdGl2ZURlY2lzaW9ucyxcbiAgUmVzb3VyY2VBY3Rpb24sXG4gIFByb3BlcnR5RGlmZmVyZW5jZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IFJFTU9WRV9XQVJOSU5HID1cbiAgJ05vdGU6IEFsc28gcmVtb3ZlIHRoaXMgcmVzb3VyY2UgZnJvbSB5b3VyIHNvdXJjZSB0ZW1wbGF0ZSAoQ0RLL0NGTikgdG8gcHJldmVudCBpdCBiZWluZyByZWNyZWF0ZWQgb24gbmV4dCBkZXBsb3kuJztcblxuLyoqXG4gKiBGb3JtYXQgcHJvcGVydHktbGV2ZWwgZHJpZnQgYXMgYSBjb2xvcmVkIGRpZmYgZm9yIGRpc3BsYXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREcmlmdERpZmYoZGlmZnM6IFByb3BlcnR5RGlmZmVyZW5jZVtdKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZGlmZiBvZiBkaWZmcykge1xuICAgIGNvbnN0IHBhdGggPSBjaGFsay5kaW0oZGlmZi5wcm9wZXJ0eVBhdGgpO1xuICAgIHN3aXRjaCAoZGlmZi5kaWZmZXJlbmNlVHlwZSkge1xuICAgICAgY2FzZSAnTk9UX0VRVUFMJzpcbiAgICAgICAgbGluZXMucHVzaChgICAgICR7cGF0aH06ICR7Y2hhbGsucmVkKGRpZmYuZXhwZWN0ZWRWYWx1ZSl9IC0+ICR7Y2hhbGsuZ3JlZW4oZGlmZi5hY3R1YWxWYWx1ZSl9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQUREJzpcbiAgICAgICAgbGluZXMucHVzaChgICAgICR7Y2hhbGsuZ3JlZW4oJysnKX0gJHtwYXRofTogJHtjaGFsay5ncmVlbihkaWZmLmFjdHVhbFZhbHVlKX1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdSRU1PVkUnOlxuICAgICAgICBsaW5lcy5wdXNoKGAgICAgJHtjaGFsay5yZWQoJy0nKX0gJHtwYXRofTogJHtjaGFsay5yZWQoZGlmZi5leHBlY3RlZFZhbHVlKX1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBQcm9tcHQgdGhlIHVzZXIgZm9yIGEgc2luZ2xlIE1PRElGSUVEIHJlc291cmNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvbXB0TW9kaWZpZWRSZXNvdXJjZShcbiAgcmVzb3VyY2U6IERyaWZ0ZWRSZXNvdXJjZSxcbiAgaW5kZXg6IG51bWJlcixcbiAgdG90YWw6IG51bWJlcixcbik6IFByb21pc2U8UmVzb3VyY2VBY3Rpb24+IHtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZChgXFxuWyR7aW5kZXggKyAxfS8ke3RvdGFsfV0gJHtyZXNvdXJjZS5sb2dpY2FsUmVzb3VyY2VJZH1gKSk7XG4gIGNvbnNvbGUubG9nKGAgIFR5cGU6ICR7cmVzb3VyY2UucmVzb3VyY2VUeXBlfWApO1xuICBjb25zb2xlLmxvZyhgICBTdGF0dXM6ICR7Y2hhbGsueWVsbG93KCdNT0RJRklFRCcpfWApO1xuICBjb25zb2xlLmxvZyhgICBQaHlzaWNhbCBJRDogJHtyZXNvdXJjZS5waHlzaWNhbFJlc291cmNlSWR9YCk7XG5cbiAgaWYgKHJlc291cmNlLnByb3BlcnR5RGlmZmVyZW5jZXMgJiYgcmVzb3VyY2UucHJvcGVydHlEaWZmZXJlbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZGltKCcgIENoYW5nZXM6JykpO1xuICAgIGNvbnNvbGUubG9nKGZvcm1hdERyaWZ0RGlmZihyZXNvdXJjZS5wcm9wZXJ0eURpZmZlcmVuY2VzKSk7XG4gIH1cblxuICBjb25zdCBhY3Rpb24gPSBhd2FpdCBzZWxlY3Q8c3RyaW5nPih7XG4gICAgbWVzc2FnZTogJ0FjdGlvbjonLFxuICAgIGRlZmF1bHQ6ICdhdXRvZml4JyxcbiAgICBjaG9pY2VzOiBbXG4gICAgICB7IG5hbWU6ICdBdXRvZml4IC0gcmVpbXBvcnQgd2l0aCBhY3R1YWwgQVdTIHN0YXRlJywgdmFsdWU6ICdhdXRvZml4JyB9LFxuICAgICAgeyBuYW1lOiAnU2tpcCAtIGxlYXZlIGRyaWZ0IGFzLWlzJywgdmFsdWU6ICdza2lwJyB9LFxuICAgICAgeyBuYW1lOiAnUmVtb3ZlIGZyb20gc3RhY2sgLSBzdG9wIG1hbmFnaW5nIHRoaXMgcmVzb3VyY2UnLCB2YWx1ZTogJ3JlbW92ZScgfSxcbiAgICBdLFxuICB9KTtcblxuICBpZiAoYWN0aW9uID09PSAncmVtb3ZlJykge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhgICAke1JFTU9WRV9XQVJOSU5HfWApKTtcbiAgfVxuXG4gIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgY2FzZSAnYXV0b2ZpeCc6IHJldHVybiB7IGtpbmQ6ICdhdXRvZml4JyB9O1xuICAgIGNhc2UgJ3NraXAnOiByZXR1cm4geyBraW5kOiAnc2tpcCcgfTtcbiAgICBjYXNlICdyZW1vdmUnOiByZXR1cm4geyBraW5kOiAncmVtb3ZlJyB9O1xuICAgIGRlZmF1bHQ6IHJldHVybiB7IGtpbmQ6ICdhdXRvZml4JyB9O1xuICB9XG59XG5cbi8qKlxuICogUHJvbXB0IHRoZSB1c2VyIGZvciBhIHNpbmdsZSBERUxFVEVEIHJlc291cmNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvbXB0RGVsZXRlZFJlc291cmNlKFxuICByZXNvdXJjZTogRHJpZnRlZFJlc291cmNlLFxuICBpbmRleDogbnVtYmVyLFxuICB0b3RhbDogbnVtYmVyLFxuKTogUHJvbWlzZTxSZXNvdXJjZUFjdGlvbj4ge1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKGBcXG5bJHtpbmRleCArIDF9LyR7dG90YWx9XSAke3Jlc291cmNlLmxvZ2ljYWxSZXNvdXJjZUlkfWApKTtcbiAgY29uc29sZS5sb2coYCAgVHlwZTogJHtyZXNvdXJjZS5yZXNvdXJjZVR5cGV9YCk7XG4gIGNvbnNvbGUubG9nKGAgIFN0YXR1czogJHtjaGFsay5yZWQoJ0RFTEVURUQnKX1gKTtcbiAgY29uc29sZS5sb2coYCAgRm9ybWVyIFBoeXNpY2FsIElEOiAke3Jlc291cmNlLnBoeXNpY2FsUmVzb3VyY2VJZH1gKTtcblxuICBjb25zdCBhY3Rpb24gPSBhd2FpdCBzZWxlY3Q8c3RyaW5nPih7XG4gICAgbWVzc2FnZTogJ0FjdGlvbjonLFxuICAgIGRlZmF1bHQ6ICdyZW1vdmUnLFxuICAgIGNob2ljZXM6IFtcbiAgICAgIHsgbmFtZTogJ1JlbW92ZSBmcm9tIHN0YWNrIC0gYWNjZXB0IGRlbGV0aW9uJywgdmFsdWU6ICdyZW1vdmUnIH0sXG4gICAgICB7IG5hbWU6ICdSZS1pbXBvcnQgLSBwcm92aWRlIHJlc291cmNlIG5hbWUsIElELCBvciBBUk4nLCB2YWx1ZTogJ3JlaW1wb3J0JyB9LFxuICAgICAgeyBuYW1lOiAnU2tpcCAtIGxlYXZlIGFzLWlzIChzdGFjayBzdGF5cyBkcmlmdGVkKScsIHZhbHVlOiAnc2tpcCcgfSxcbiAgICBdLFxuICB9KTtcblxuICBpZiAoYWN0aW9uID09PSAncmVpbXBvcnQnKSB7XG4gICAgY29uc3QgcGh5c2ljYWxJZCA9IGF3YWl0IGlucHV0KHtcbiAgICAgIG1lc3NhZ2U6IGBFbnRlciByZXNvdXJjZSBuYW1lLCBJRCwgb3IgQVJOIGZvciAke3Jlc291cmNlLmxvZ2ljYWxSZXNvdXJjZUlkfSAoJHtyZXNvdXJjZS5yZXNvdXJjZVR5cGV9KTpgLFxuICAgICAgdmFsaWRhdGU6ICh2YWw6IHN0cmluZykgPT4gdmFsLnRyaW0oKS5sZW5ndGggPiAwIHx8ICdSZXNvdXJjZSBpZGVudGlmaWVyIGlzIHJlcXVpcmVkJyxcbiAgICB9KTtcbiAgICByZXR1cm4geyBraW5kOiAncmVpbXBvcnQnLCBwaHlzaWNhbElkOiBwaHlzaWNhbElkLnRyaW0oKSB9O1xuICB9XG5cbiAgaWYgKGFjdGlvbiA9PT0gJ3JlbW92ZScpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCAgJHtSRU1PVkVfV0FSTklOR31gKSk7XG4gIH1cblxuICBzd2l0Y2ggKGFjdGlvbikge1xuICAgIGNhc2UgJ3JlbW92ZSc6IHJldHVybiB7IGtpbmQ6ICdyZW1vdmUnIH07XG4gICAgY2FzZSAnc2tpcCc6IHJldHVybiB7IGtpbmQ6ICdza2lwJyB9O1xuICAgIGRlZmF1bHQ6IHJldHVybiB7IGtpbmQ6ICdyZW1vdmUnIH07XG4gIH1cbn1cblxuLyoqXG4gKiBQcmludCBhIHN1bW1hcnkgb2YgcGxhbm5lZCBhY3Rpb25zIGFuZCBhc2sgZm9yIGZpbmFsIGNvbmZpcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbmZpcm1BY3Rpb25zKGRlY2lzaW9uczogSW50ZXJhY3RpdmVEZWNpc2lvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuUGxhbm5lZCBhY3Rpb25zOicpKTtcbiAgaWYgKGRlY2lzaW9ucy5hdXRvZml4Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgICBBdXRvZml4OiAke2RlY2lzaW9ucy5hdXRvZml4Lmxlbmd0aH0gcmVzb3VyY2UocylgKSk7XG4gICAgZm9yIChjb25zdCByIG9mIGRlY2lzaW9ucy5hdXRvZml4KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oYCAgICAtICR7ci5sb2dpY2FsUmVzb3VyY2VJZH0gKCR7ci5yZXNvdXJjZVR5cGV9KWApKTtcbiAgICB9XG4gIH1cbiAgaWYgKGRlY2lzaW9ucy5yZWltcG9ydC5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgICBSZS1pbXBvcnQ6ICR7ZGVjaXNpb25zLnJlaW1wb3J0Lmxlbmd0aH0gcmVzb3VyY2UocylgKSk7XG4gICAgZm9yIChjb25zdCB7IHJlc291cmNlLCBwaHlzaWNhbElkIH0gb2YgZGVjaXNpb25zLnJlaW1wb3J0KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oYCAgICAtICR7cmVzb3VyY2UubG9naWNhbFJlc291cmNlSWR9IC0+ICR7cGh5c2ljYWxJZH1gKSk7XG4gICAgfVxuICB9XG4gIGlmIChkZWNpc2lvbnMucmVtb3ZlLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoYCAgUmVtb3ZlOiAke2RlY2lzaW9ucy5yZW1vdmUubGVuZ3RofSByZXNvdXJjZShzKWApKTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgZGVjaXNpb25zLnJlbW92ZSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKGAgICAgLSAke3IubG9naWNhbFJlc291cmNlSWR9ICgke3IucmVzb3VyY2VUeXBlfSlgKSk7XG4gICAgfVxuICB9XG4gIGlmIChkZWNpc2lvbnMuc2tpcC5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZGltKGAgIFNraXA6ICR7ZGVjaXNpb25zLnNraXAubGVuZ3RofSByZXNvdXJjZShzKWApKTtcbiAgfVxuXG4gIGNvbnN0IGFjdGlvbkNvdW50ID0gZGVjaXNpb25zLmF1dG9maXgubGVuZ3RoICsgZGVjaXNpb25zLnJlaW1wb3J0Lmxlbmd0aCArIGRlY2lzaW9ucy5yZW1vdmUubGVuZ3RoO1xuICBpZiAoYWN0aW9uQ291bnQgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gY29uZmlybSh7XG4gICAgbWVzc2FnZTogYFByb2NlZWQgd2l0aCAke2FjdGlvbkNvdW50fSBhY3Rpb24ocyk/YCxcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9KTtcbn1cblxuLyoqXG4gKiBEaXNwbGF5IGEgd2FybmluZyBhYm91dCByZXNvdXJjZXMgdGhhdCB3aWxsIGJlIGNhc2NhZGUtcmVtb3ZlZFxuICogYmVjYXVzZSB0aGV5IHJlZmVyZW5jZSByZXNvdXJjZXMgYmVpbmcgcmVtb3ZlZC5cbiAqXG4gKiBAcGFyYW0gcGVybWFuZW50UmVtb3ZhbHMgLSBSZXNvdXJjZXMgcGVybWFuZW50bHkgcmVtb3ZlZCAoZGVwZW5kIG9uIHVzZXItcmVtb3ZlZCByZXNvdXJjZXMpXG4gKiBAcGFyYW0gdGVtcG9yYXJ5UmVtb3ZhbHMgLSBSZXNvdXJjZXMgdGVtcG9yYXJpbHkgcmVtb3ZlZCBhbmQgcmVjcmVhdGVkIChkZXBlbmQgb24gYXV0b2ZpeC9yZWltcG9ydCByZXNvdXJjZXMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5Q2FzY2FkZVdhcm5pbmcoXG4gIHBlcm1hbmVudFJlbW92YWxzOiBDYXNjYWRlUmVtb3ZhbFtdLFxuICB0ZW1wb3JhcnlSZW1vdmFsczogQ2FzY2FkZVJlbW92YWxbXSxcbik6IHZvaWQge1xuICBpZiAocGVybWFuZW50UmVtb3ZhbHMubGVuZ3RoID09PSAwICYmIHRlbXBvcmFyeVJlbW92YWxzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gIGlmIChwZXJtYW5lbnRSZW1vdmFscy5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZC55ZWxsb3coXG4gICAgICBgXFxuV2FybmluZzogJHtwZXJtYW5lbnRSZW1vdmFscy5sZW5ndGh9IGFkZGl0aW9uYWwgcmVzb3VyY2Uocykgd2lsbCBiZSBwZXJtYW5lbnRseSByZW1vdmVkIGZyb20gdGhlIHN0YWNrIGR1ZSB0byBicm9rZW4gcmVmZXJlbmNlczpgLFxuICAgICkpO1xuICAgIGZvciAoY29uc3QgcmVtb3ZhbCBvZiBwZXJtYW5lbnRSZW1vdmFscykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KFxuICAgICAgICBgICAtICR7cmVtb3ZhbC5sb2dpY2FsUmVzb3VyY2VJZH0gKCR7cmVtb3ZhbC5yZXNvdXJjZVR5cGV9KWAgK1xuICAgICAgICBjaGFsay5kaW0oYCByZWZlcmVuY2VzIHJlbW92ZWQgcmVzb3VyY2UgJHtyZW1vdmFsLmRlcGVuZHNPbn1gKSxcbiAgICAgICkpO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oXG4gICAgICAnXFxuVGhlc2UgcmVzb3VyY2VzIGhhdmUgUmVmL0dldEF0dCByZWZlcmVuY2VzIHRvIHBlcm1hbmVudGx5IHJlbW92ZWQgcmVzb3VyY2VzIGFuZCBjYW5ub3QgcmVtYWluIGluIHRoZSBzdGFjay4nLFxuICAgICkpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcbiAgICAgICdBbHNvIHJlbW92ZSB0aGVtIGZyb20geW91ciBzb3VyY2UgdGVtcGxhdGUgKENESy9DRk4pIHRvIHByZXZlbnQgdGhlbSBiZWluZyByZWNyZWF0ZWQgb24gbmV4dCBkZXBsb3kuXFxuJyxcbiAgICApKTtcbiAgfVxuXG4gIGlmICh0ZW1wb3JhcnlSZW1vdmFscy5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZC5jeWFuKFxuICAgICAgYFxcbk5vdGU6ICR7dGVtcG9yYXJ5UmVtb3ZhbHMubGVuZ3RofSBkZXBlbmRlbnQgcmVzb3VyY2Uocykgd2lsbCBiZSB0ZW1wb3JhcmlseSByZW1vdmVkIGZyb20gdGhlIHN0YWNrIGR1cmluZyByZW1lZGlhdGlvbjpgLFxuICAgICkpO1xuICAgIGZvciAoY29uc3QgcmVtb3ZhbCBvZiB0ZW1wb3JhcnlSZW1vdmFscykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihcbiAgICAgICAgYCAgLSAke3JlbW92YWwubG9naWNhbFJlc291cmNlSWR9ICgke3JlbW92YWwucmVzb3VyY2VUeXBlfSlgICtcbiAgICAgICAgY2hhbGsuZGltKGAgcmVmZXJlbmNlcyAke3JlbW92YWwuZGVwZW5kc09ufWApLFxuICAgICAgKSk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcbiAgICAgICdcXG5UaGVzZSByZXNvdXJjZXMgcmVmZXJlbmNlIHJlc291cmNlcyBiZWluZyByZWltcG9ydGVkIGFuZCB3aWxsIGJlIHJlc3RvcmVkIHdoZW4gdGhlIG9yaWdpbmFsIHRlbXBsYXRlIGlzIGFwcGxpZWQuXFxuJyxcbiAgICApKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BsYXkgYSByZXBvcnQgb2Ygbm9uLWltcG9ydGFibGUgZHJpZnRlZCByZXNvdXJjZXMuXG4gKiBDYWxsZWQgYmVmb3JlIGludGVyYWN0aXZlIHByb21wdHMgc28gdGhlIHVzZXIgaGFzIHRoZSBmdWxsIHBpY3R1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5Tm9uSW1wb3J0YWJsZVJlcG9ydChcbiAgbW9kaWZpZWROb25JbXBvcnRhYmxlOiBEcmlmdGVkUmVzb3VyY2VbXSxcbiAgZGVsZXRlZE5vbkltcG9ydGFibGU6IERyaWZ0ZWRSZXNvdXJjZVtdLFxuKTogdm9pZCB7XG4gIGlmIChtb2RpZmllZE5vbkltcG9ydGFibGUubGVuZ3RoID09PSAwICYmIGRlbGV0ZWROb25JbXBvcnRhYmxlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gIGNvbnN0IHRvdGFsID0gbW9kaWZpZWROb25JbXBvcnRhYmxlLmxlbmd0aCArIGRlbGV0ZWROb25JbXBvcnRhYmxlLmxlbmd0aDtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZC55ZWxsb3coXG4gICAgYFxcbiR7dG90YWx9IGRyaWZ0ZWQgcmVzb3VyY2UocykgY2Fubm90IGJlIGF1dG8tcmVtZWRpYXRlZCAobm90IGltcG9ydGFibGUgYnkgQ2xvdWRGb3JtYXRpb24pOmAsXG4gICkpO1xuXG4gIGlmIChtb2RpZmllZE5vbkltcG9ydGFibGUubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQueWVsbG93KFxuICAgICAgYFxcbiAgTU9ESUZJRUQgKHJlcG9ydCBvbmx5IC0gJHttb2RpZmllZE5vbkltcG9ydGFibGUubGVuZ3RofSk6YCxcbiAgICApKTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgbW9kaWZpZWROb25JbXBvcnRhYmxlKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXG4gICAgICAgIGAgICAgJHtyLmxvZ2ljYWxSZXNvdXJjZUlkfSAoJHtyLnJlc291cmNlVHlwZX0pYCxcbiAgICAgICkpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKGAgICAgICBQaHlzaWNhbCBJRDogJHtyLnBoeXNpY2FsUmVzb3VyY2VJZH1gKSk7XG4gICAgICBpZiAoci5wcm9wZXJ0eURpZmZlcmVuY2VzICYmIHIucHJvcGVydHlEaWZmZXJlbmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbSgnICAgICAgQ2hhbmdlczonKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGZvcm1hdERyaWZ0RGlmZihyLnByb3BlcnR5RGlmZmVyZW5jZXMpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coY2hhbGsuZGltKFxuICAgICAgJ1xcbiAgVG8gZml4OiB1cGRhdGUgeW91ciBDREsvQ2xvdWRGb3JtYXRpb24gc291cmNlIHRvIG1hdGNoIHRoZSBhY3R1YWwgc3RhdGUsIG9yIHJldmVydCB0aGUgcmVzb3VyY2UgbWFudWFsbHkuXFxuJyxcbiAgICApKTtcbiAgfVxuXG4gIGlmIChkZWxldGVkTm9uSW1wb3J0YWJsZS5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZC5yZWQoXG4gICAgICBgXFxuICBERUxFVEVEICh3aWxsIGJlIHJlbW92ZWQgZnJvbSB0ZW1wbGF0ZSAtICR7ZGVsZXRlZE5vbkltcG9ydGFibGUubGVuZ3RofSk6YCxcbiAgICApKTtcbiAgICBmb3IgKGNvbnN0IHIgb2YgZGVsZXRlZE5vbkltcG9ydGFibGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZChcbiAgICAgICAgYCAgICAke3IubG9naWNhbFJlc291cmNlSWR9ICgke3IucmVzb3VyY2VUeXBlfSlgLFxuICAgICAgKSk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oYCAgICAgIEZvcm1lciBQaHlzaWNhbCBJRDogJHtyLnBoeXNpY2FsUmVzb3VyY2VJZH1gKSk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcbiAgICAgICdcXG4gIFRoZXNlIHJlc291cmNlcyBubyBsb25nZXIgZXhpc3QgaW4gQVdTIGFuZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgc3RhY2sgdGVtcGxhdGUuXFxuJyxcbiAgICApKTtcbiAgfVxufVxuXG4vKipcbiAqIFJ1biB0aGUgZnVsbCBpbnRlcmFjdGl2ZSBwcm9tcHQgZmxvdyBmb3IgYWxsIGRyaWZ0ZWQgcmVzb3VyY2VzLlxuICogV2hlbiBgYXV0b0FjY2VwdGAgaXMgdHJ1ZSwgcmV0dXJucyBkZWZhdWx0IGFjdGlvbnMgd2l0aG91dCBwcm9tcHRpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9tcHRGb3JEZWNpc2lvbnMoXG4gIG1vZGlmaWVkUmVzb3VyY2VzOiBEcmlmdGVkUmVzb3VyY2VbXSxcbiAgZGVsZXRlZFJlc291cmNlczogRHJpZnRlZFJlc291cmNlW10sXG4gIGF1dG9BY2NlcHQ6IGJvb2xlYW4sXG4pOiBQcm9taXNlPEludGVyYWN0aXZlRGVjaXNpb25zPiB7XG4gIGNvbnN0IGRlY2lzaW9uczogSW50ZXJhY3RpdmVEZWNpc2lvbnMgPSB7XG4gICAgYXV0b2ZpeDogW10sXG4gICAgcmVpbXBvcnQ6IFtdLFxuICAgIHJlbW92ZTogW10sXG4gICAgc2tpcDogW10sXG4gIH07XG5cbiAgY29uc3QgdG90YWxDb3VudCA9IG1vZGlmaWVkUmVzb3VyY2VzLmxlbmd0aCArIGRlbGV0ZWRSZXNvdXJjZXMubGVuZ3RoO1xuXG4gIC8vIE5vbi1UVFkgZ3VhcmRcbiAgaWYgKCFhdXRvQWNjZXB0ICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLnN0ZGluICYmICFwcm9jZXNzLnN0ZGluLmlzVFRZKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlcmFjdGl2ZSBtb2RlIHJlcXVpcmVzIGEgdGVybWluYWwuIFVzZSAtLXllcyAoLXkpIGZvciBub24taW50ZXJhY3RpdmUgbW9kZS4nKTtcbiAgfVxuXG4gIGlmICghYXV0b0FjY2VwdCAmJiB0b3RhbENvdW50ID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoYFxcbkZvdW5kICR7dG90YWxDb3VudH0gZHJpZnRlZCByZXNvdXJjZShzKS4gQ2hvb3NlIGFuIGFjdGlvbiBmb3IgZWFjaDpcXG5gKSk7XG4gIH1cblxuICBsZXQgaWR4ID0gMDtcblxuICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIG1vZGlmaWVkUmVzb3VyY2VzKSB7XG4gICAgaWYgKGF1dG9BY2NlcHQpIHtcbiAgICAgIGRlY2lzaW9ucy5hdXRvZml4LnB1c2gocmVzb3VyY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSBhd2FpdCBwcm9tcHRNb2RpZmllZFJlc291cmNlKHJlc291cmNlLCBpZHgsIHRvdGFsQ291bnQpO1xuICAgICAgc3dpdGNoIChhY3Rpb24ua2luZCkge1xuICAgICAgICBjYXNlICdhdXRvZml4JzogZGVjaXNpb25zLmF1dG9maXgucHVzaChyZXNvdXJjZSk7IGJyZWFrO1xuICAgICAgICBjYXNlICdza2lwJzogZGVjaXNpb25zLnNraXAucHVzaChyZXNvdXJjZSk7IGJyZWFrO1xuICAgICAgICBjYXNlICdyZW1vdmUnOiBkZWNpc2lvbnMucmVtb3ZlLnB1c2gocmVzb3VyY2UpOyBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWR4Kys7XG4gIH1cblxuICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIGRlbGV0ZWRSZXNvdXJjZXMpIHtcbiAgICBpZiAoYXV0b0FjY2VwdCkge1xuICAgICAgZGVjaXNpb25zLnJlbW92ZS5wdXNoKHJlc291cmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYWN0aW9uID0gYXdhaXQgcHJvbXB0RGVsZXRlZFJlc291cmNlKHJlc291cmNlLCBpZHgsIHRvdGFsQ291bnQpO1xuICAgICAgc3dpdGNoIChhY3Rpb24ua2luZCkge1xuICAgICAgICBjYXNlICdyZW1vdmUnOiBkZWNpc2lvbnMucmVtb3ZlLnB1c2gocmVzb3VyY2UpOyBicmVhaztcbiAgICAgICAgY2FzZSAncmVpbXBvcnQnOlxuICAgICAgICAgIGRlY2lzaW9ucy5yZWltcG9ydC5wdXNoKHsgcmVzb3VyY2UsIHBoeXNpY2FsSWQ6IChhY3Rpb24gYXMgeyBraW5kOiAncmVpbXBvcnQnOyBwaHlzaWNhbElkOiBzdHJpbmcgfSkucGh5c2ljYWxJZCB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc2tpcCc6IGRlY2lzaW9ucy5za2lwLnB1c2gocmVzb3VyY2UpOyBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWR4Kys7XG4gIH1cblxuICAvLyBTaG93IHN1bW1hcnkgYW5kIGNvbmZpcm0gKHVubGVzcyBhdXRvLWFjY2VwdGluZylcbiAgaWYgKCFhdXRvQWNjZXB0KSB7XG4gICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgY29uZmlybUFjdGlvbnMoZGVjaXNpb25zKTtcbiAgICBpZiAoIWNvbmZpcm1lZCkge1xuICAgICAgLy8gVXNlciBjYW5jZWxsZWQg4oCUIG1vdmUgZXZlcnl0aGluZyB0byBza2lwXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhdXRvZml4OiBbXSxcbiAgICAgICAgcmVpbXBvcnQ6IFtdLFxuICAgICAgICByZW1vdmU6IFtdLFxuICAgICAgICBza2lwOiBbLi4ubW9kaWZpZWRSZXNvdXJjZXMsIC4uLmRlbGV0ZWRSZXNvdXJjZXNdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVjaXNpb25zO1xufVxuIl19
package/lib/lib/plan.d.ts CHANGED
@@ -2,7 +2,7 @@ import { DriftedResource, InteractiveDecisions, PlanMetadata, RemediationPlan }
2
2
  /**
3
3
  * Build a RemediationPlan from drift detection results and interactive decisions.
4
4
  */
5
- export declare function buildPlan(metadata: PlanMetadata, decisions: InteractiveDecisions): RemediationPlan;
5
+ export declare function buildPlan(metadata: PlanMetadata, decisions: InteractiveDecisions, nonImportableModified?: DriftedResource[]): RemediationPlan;
6
6
  /**
7
7
  * Serialize a plan to formatted JSON.
8
8
  */
package/lib/lib/plan.js CHANGED
@@ -4,11 +4,11 @@ exports.buildPlan = buildPlan;
4
4
  exports.serializePlan = serializePlan;
5
5
  exports.loadPlan = loadPlan;
6
6
  exports.planToDecisions = planToDecisions;
7
- const VALID_ACTIONS = new Set(['autofix', 'reimport', 'remove', 'skip']);
7
+ const VALID_ACTIONS = new Set(['autofix', 'reimport', 'remove', 'skip', 'report_only']);
8
8
  /**
9
9
  * Build a RemediationPlan from drift detection results and interactive decisions.
10
10
  */
11
- function buildPlan(metadata, decisions) {
11
+ function buildPlan(metadata, decisions, nonImportableModified) {
12
12
  const planDecisions = [];
13
13
  const resources = {};
14
14
  for (const r of decisions.autofix) {
@@ -52,6 +52,18 @@ function buildPlan(metadata, decisions) {
52
52
  });
53
53
  resources[r.logicalResourceId] = r;
54
54
  }
55
+ if (nonImportableModified) {
56
+ for (const r of nonImportableModified) {
57
+ planDecisions.push({
58
+ logicalResourceId: r.logicalResourceId,
59
+ resourceType: r.resourceType,
60
+ driftStatus: r.stackResourceDriftStatus,
61
+ physicalResourceId: r.physicalResourceId,
62
+ action: 'report_only',
63
+ });
64
+ resources[r.logicalResourceId] = r;
65
+ }
66
+ }
55
67
  return {
56
68
  version: 1,
57
69
  metadata,
@@ -139,6 +151,10 @@ function planToDecisions(plan) {
139
151
  case 'skip':
140
152
  decisions.skip.push(resource);
141
153
  break;
154
+ case 'report_only':
155
+ // report_only resources are informational; treat as skip during execution
156
+ decisions.skip.push(resource);
157
+ break;
142
158
  }
143
159
  }
144
160
  // Resources in _resources but not in decisions are treated as skip
@@ -150,4 +166,4 @@ function planToDecisions(plan) {
150
166
  const allDriftedResources = Object.values(plan._resources);
151
167
  return { allDriftedResources, decisions };
152
168
  }
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGxhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWFBLDhCQTBEQztBQUtELHNDQUVDO0FBTUQsNEJBd0RDO0FBS0QsMENBZ0RDO0FBekxELE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUV6RTs7R0FFRztBQUNILFNBQWdCLFNBQVMsQ0FDdkIsUUFBc0IsRUFDdEIsU0FBK0I7SUFFL0IsTUFBTSxhQUFhLEdBQW1CLEVBQUUsQ0FBQztJQUN6QyxNQUFNLFNBQVMsR0FBb0MsRUFBRSxDQUFDO0lBRXRELEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDakIsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQjtZQUN0QyxZQUFZLEVBQUUsQ0FBQyxDQUFDLFlBQVk7WUFDNUIsV0FBVyxFQUFFLENBQUMsQ0FBQyx3QkFBd0I7WUFDdkMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQjtZQUN4QyxNQUFNLEVBQUUsU0FBUztTQUNsQixDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFELGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDakIsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLGlCQUFpQjtZQUM3QyxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVk7WUFDbkMsV0FBVyxFQUFFLFFBQVEsQ0FBQyx3QkFBd0I7WUFDOUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLGtCQUFr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Q0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEcmlmdGVkUmVzb3VyY2UsXG4gIEludGVyYWN0aXZlRGVjaXNpb25zLFxuICBQbGFuRGVjaXNpb24sXG4gIFBsYW5NZXRhZGF0YSxcbiAgUmVtZWRpYXRpb25QbGFuLFxufSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgVkFMSURfQUNUSU9OUyA9IG5ldyBTZXQoWydhdXRvZml4JywgJ3JlaW1wb3J0JywgJ3JlbW92ZScsICdza2lwJ10pO1xuXG4vKipcbiAqIEJ1aWxkIGEgUmVtZWRpYXRpb25QbGFuIGZyb20gZHJpZnQgZGV0ZWN0aW9uIHJlc3VsdHMgYW5kIGludGVyYWN0aXZlIGRlY2lzaW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUGxhbihcbiAgbWV0YWRhdGE6IFBsYW5NZXRhZGF0YSxcbiAgZGVjaXNpb25zOiBJbnRlcmFjdGl2ZURlY2lzaW9ucyxcbik6IFJlbWVkaWF0aW9uUGxhbiB7XG4gIGNvbnN0IHBsYW5EZWNpc2lvbnM6IFBsYW5EZWNpc2lvbltdID0gW107XG4gIGNvbnN0IHJlc291cmNlczogUmVjb3JkPHN0cmluZywgRHJpZnRlZFJlc291cmNlPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgciBvZiBkZWNpc2lvbnMuYXV0b2ZpeCkge1xuICAgIHBsYW5EZWNpc2lvbnMucHVzaCh7XG4gICAgICBsb2dpY2FsUmVzb3VyY2VJZDogci5sb2dpY2FsUmVzb3VyY2VJZCxcbiAgICAgIHJlc291cmNlVHlwZTogci5yZXNvdXJjZVR5cGUsXG4gICAgICBkcmlmdFN0YXR1czogci5zdGFja1Jlc291cmNlRHJpZnRTdGF0dXMsXG4gICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IHIucGh5c2ljYWxSZXNvdXJjZUlkLFxuICAgICAgYWN0aW9uOiAnYXV0b2ZpeCcsXG4gICAgfSk7XG4gICAgcmVzb3VyY2VzW3IubG9naWNhbFJlc291cmNlSWRdID0gcjtcbiAgfVxuXG4gIGZvciAoY29uc3QgeyByZXNvdXJjZSwgcGh5c2ljYWxJZCB9IG9mIGRlY2lzaW9ucy5yZWltcG9ydCkge1xuICAgIHBsYW5EZWNpc2lvbnMucHVzaCh7XG4gICAgICBsb2dpY2FsUmVzb3VyY2VJZDogcmVzb3VyY2UubG9naWNhbFJlc291cmNlSWQsXG4gICAgICByZXNvdXJjZVR5cGU6IHJlc291cmNlLnJlc291cmNlVHlwZSxcbiAgICAgIGRyaWZ0U3RhdHVzOiByZXNvdXJjZS5zdGFja1Jlc291cmNlRHJpZnRTdGF0dXMsXG4gICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IHJlc291cmNlLnBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgICAgIGFjdGlvbjogJ3JlaW1wb3J0JyxcbiAgICAgIHJlaW1wb3J0UGh5c2ljYWxJZDogcGh5c2ljYWxJZCxcbiAgICB9KTtcbiAgICByZXNvdXJjZXNbcmVzb3VyY2UubG9naWNhbFJlc291cmNlSWRdID0gcmVzb3VyY2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IHIgb2YgZGVjaXNpb25zLnJlbW92ZSkge1xuICAgIHBsYW5EZWNpc2lvbnMucHVzaCh7XG4gICAgICBsb2dpY2FsUmVzb3VyY2VJZDogci5sb2dpY2FsUmVzb3VyY2VJZCxcbiAgICAgIHJlc291cmNlVHlwZTogci5yZXNvdXJjZVR5cGUsXG4gICAgICBkcmlmdFN0YXR1czogci5zdGFja1Jlc291cmNlRHJpZnRTdGF0dXMsXG4gICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IHIucGh5c2ljYWxSZXNvdXJjZUlkLFxuICAgICAgYWN0aW9uOiAncmVtb3ZlJyxcbiAgICB9KTtcbiAgICByZXNvdXJjZXNbci5sb2dpY2FsUmVzb3VyY2VJZF0gPSByO1xuICB9XG5cbiAgZm9yIChjb25zdCByIG9mIGRlY2lzaW9ucy5za2lwKSB7XG4gICAgcGxhbkRlY2lzaW9ucy5wdXNoKHtcbiAgICAgIGxvZ2ljYWxSZXNvdXJjZUlkOiByLmxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgICAgcmVzb3VyY2VUeXBlOiByLnJlc291cmNlVHlwZSxcbiAgICAgIGRyaWZ0U3RhdHVzOiByLnN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyxcbiAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogci5waHlzaWNhbFJlc291cmNlSWQsXG4gICAgICBhY3Rpb246ICdza2lwJyxcbiAgICB9KTtcbiAgICByZXNvdXJjZXNbci5sb2dpY2FsUmVzb3VyY2VJZF0gPSByO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiAxLFxuICAgIG1ldGFkYXRhLFxuICAgIGRlY2lzaW9uczogcGxhbkRlY2lzaW9ucyxcbiAgICBfcmVzb3VyY2VzOiByZXNvdXJjZXMsXG4gIH07XG59XG5cbi8qKlxuICogU2VyaWFsaXplIGEgcGxhbiB0byBmb3JtYXR0ZWQgSlNPTi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVBsYW4ocGxhbjogUmVtZWRpYXRpb25QbGFuKTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBsYW4sIG51bGwsIDIpO1xufVxuXG4vKipcbiAqIExvYWQgYW5kIHZhbGlkYXRlIGEgcGxhbiBmcm9tIGEgSlNPTiBzdHJpbmcuXG4gKiBUaHJvd3MgZGVzY3JpcHRpdmUgZXJyb3JzIG9uIHZhbGlkYXRpb24gZmFpbHVyZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUGxhbihqc29uOiBzdHJpbmcsIGV4cGVjdGVkU3RhY2tOYW1lOiBzdHJpbmcpOiBSZW1lZGlhdGlvblBsYW4ge1xuICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IEpTT04ucGFyc2UoanNvbik7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwbGFuIGZpbGU6IG5vdCB2YWxpZCBKU09OJyk7XG4gIH1cblxuICBjb25zdCBwbGFuID0gcGFyc2VkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIGlmIChwbGFuLnZlcnNpb24gIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVW5zdXBwb3J0ZWQgcGxhbiB2ZXJzaW9uOiAke3BsYW4udmVyc2lvbn0uIFRoaXMgdG9vbCBzdXBwb3J0cyB2ZXJzaW9uIDEuYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbWV0YWRhdGEgPSBwbGFuLm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBpZiAoIW1ldGFkYXRhIHx8IHR5cGVvZiBtZXRhZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGxhbiBmaWxlOiBtaXNzaW5nIG1ldGFkYXRhJyk7XG4gIH1cblxuICBpZiAobWV0YWRhdGEuc3RhY2tOYW1lICE9PSBleHBlY3RlZFN0YWNrTmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBQbGFuIHN0YWNrIG5hbWUgXCIke21ldGFkYXRhLnN0YWNrTmFtZX1cIiBkb2VzIG5vdCBtYXRjaCB0YXJnZXQgc3RhY2sgXCIke2V4cGVjdGVkU3RhY2tOYW1lfVwiYCxcbiAgICApO1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHBsYW4uZGVjaXNpb25zKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwbGFuIGZpbGU6IGRlY2lzaW9ucyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGRlY2lzaW9uIG9mIHBsYW4uZGVjaXNpb25zIGFzIFBsYW5EZWNpc2lvbltdKSB7XG4gICAgaWYgKCFkZWNpc2lvbi5sb2dpY2FsUmVzb3VyY2VJZCB8fCAhZGVjaXNpb24uYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHBsYW4gZGVjaXNpb246IG1pc3NpbmcgbG9naWNhbFJlc291cmNlSWQgb3IgYWN0aW9uIGluICR7SlNPTi5zdHJpbmdpZnkoZGVjaXNpb24pfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIVZBTElEX0FDVElPTlMuaGFzKGRlY2lzaW9uLmFjdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgYWN0aW9uIFwiJHtkZWNpc2lvbi5hY3Rpb259XCIgZm9yIHJlc291cmNlICR7ZGVjaXNpb24ubG9naWNhbFJlc291cmNlSWR9LiBgICtcbiAgICAgICAgYFZhbGlkIGFjdGlvbnM6ICR7Wy4uLlZBTElEX0FDVElPTlNdLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkZWNpc2lvbi5hY3Rpb24gPT09ICdyZWltcG9ydCcgJiYgIWRlY2lzaW9uLnJlaW1wb3J0UGh5c2ljYWxJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUmVzb3VyY2UgJHtkZWNpc2lvbi5sb2dpY2FsUmVzb3VyY2VJZH0gaGFzIGFjdGlvbiBcInJlaW1wb3J0XCIgYnV0IG5vIHJlaW1wb3J0UGh5c2ljYWxJZGAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc291cmNlcyA9IHBsYW4uX3Jlc291cmNlcyBhcyBSZWNvcmQ8c3RyaW5nLCBEcmlmdGVkUmVzb3VyY2U+IHwgdW5kZWZpbmVkO1xuICBpZiAoIXJlc291cmNlcyB8fCB0eXBlb2YgcmVzb3VyY2VzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwbGFuIGZpbGU6IG1pc3NpbmcgX3Jlc291cmNlcycpO1xuICB9XG5cbiAgcmV0dXJuIHBsYW4gYXMgdW5rbm93biBhcyBSZW1lZGlhdGlvblBsYW47XG59XG5cbi8qKlxuICogQ29udmVydCBhIGxvYWRlZCBwbGFuIGJhY2sgaW50byBJbnRlcmFjdGl2ZURlY2lzaW9ucyBhbmQgcmVzb3VyY2UgYXJyYXlzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGxhblRvRGVjaXNpb25zKHBsYW46IFJlbWVkaWF0aW9uUGxhbik6IHtcbiAgYWxsRHJpZnRlZFJlc291cmNlczogRHJpZnRlZFJlc291cmNlW107XG4gIGRlY2lzaW9uczogSW50ZXJhY3RpdmVEZWNpc2lvbnM7XG59IHtcbiAgY29uc3QgZGVjaXNpb25zOiBJbnRlcmFjdGl2ZURlY2lzaW9ucyA9IHtcbiAgICBhdXRvZml4OiBbXSxcbiAgICByZWltcG9ydDogW10sXG4gICAgcmVtb3ZlOiBbXSxcbiAgICBza2lwOiBbXSxcbiAgfTtcblxuICBjb25zdCBzZWVuSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBkIG9mIHBsYW4uZGVjaXNpb25zKSB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSBwbGFuLl9yZXNvdXJjZXNbZC5sb2dpY2FsUmVzb3VyY2VJZF07XG4gICAgaWYgKCFyZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgUmVzb3VyY2UgXCIke2QubG9naWNhbFJlc291cmNlSWR9XCIgaW4gZGVjaXNpb25zIG5vdCBmb3VuZCBpbiBwbGFuIF9yZXNvdXJjZXNgLFxuICAgICAgKTtcbiAgICB9XG4gICAgc2Vlbklkcy5hZGQoZC5sb2dpY2FsUmVzb3VyY2VJZCk7XG5cbiAgICBzd2l0Y2ggKGQuYWN0aW9uKSB7XG4gICAgICBjYXNlICdhdXRvZml4JzpcbiAgICAgICAgZGVjaXNpb25zLmF1dG9maXgucHVzaChyZXNvdXJjZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVpbXBvcnQnOlxuICAgICAgICBkZWNpc2lvbnMucmVpbXBvcnQucHVzaCh7IHJlc291cmNlLCBwaHlzaWNhbElkOiBkLnJlaW1wb3J0UGh5c2ljYWxJZCEgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVtb3ZlJzpcbiAgICAgICAgZGVjaXNpb25zLnJlbW92ZS5wdXNoKHJlc291cmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdza2lwJzpcbiAgICAgICAgZGVjaXNpb25zLnNraXAucHVzaChyZXNvdXJjZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlc291cmNlcyBpbiBfcmVzb3VyY2VzIGJ1dCBub3QgaW4gZGVjaXNpb25zIGFyZSB0cmVhdGVkIGFzIHNraXBcbiAgZm9yIChjb25zdCBbbG9naWNhbElkLCByZXNvdXJjZV0gb2YgT2JqZWN0LmVudHJpZXMocGxhbi5fcmVzb3VyY2VzKSkge1xuICAgIGlmICghc2Vlbklkcy5oYXMobG9naWNhbElkKSkge1xuICAgICAgZGVjaXNpb25zLnNraXAucHVzaChyZXNvdXJjZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYWxsRHJpZnRlZFJlc291cmNlcyA9IE9iamVjdC52YWx1ZXMocGxhbi5fcmVzb3VyY2VzKTtcblxuICByZXR1cm4geyBhbGxEcmlmdGVkUmVzb3VyY2VzLCBkZWNpc2lvbnMgfTtcbn1cbiJdfQ==
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGxhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWFBLDhCQXdFQztBQUtELHNDQUVDO0FBTUQsNEJBd0RDO0FBS0QsMENBb0RDO0FBM01ELE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFFeEY7O0dBRUc7QUFDSCxTQUFnQixTQUFTLENBQ3ZCLFFBQXNCLEVBQ3RCLFNBQStCLEVBQy9CLHFCQUF5QztJQUV6QyxNQUFNLGFBQWEsR0FBbUIsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sU0FBUyxHQUFvQyxFQUFFLENBQUM7SUFFdEQsS0FBSyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEMsYUFBYSxDQUFDLElBQUksQ0FBQztZQUNqQixpQkFBaUIsRUFBRSxDQUFDLENBQUMsaUJBQWlCO1lBQ3RDLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWTtZQUM1QixXQUFXLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QjtZQUN2QyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsa0JBQWtCO1lBQ3hDLE1BQU0sRUFBRSxTQUFTO1NBQ2xCLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELEtBQUssTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUQsYUFBYSxDQUFDLElBQUksQ0FBQztZQUNqQixpQkFBaUIsRUFBRSxRQUFRLENBQUMsaUJBQWlCO1lBQzdDLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxXQUFXLEVBQUUsUUFBUSxDQUFDLHdCQUF3QjtZQUM5QyxrQkFB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Q1gsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlCLE1BQU07WUFDUixLQUFLLGFBQWE7Z0JBQ2hCLDBFQUEwRTtnQkFDMUUsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlCLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVELG1FQUFtRTtJQUNuRSxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNwRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzVCLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUUzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERyaWZ0ZWRSZXNvdXJjZSxcbiAgSW50ZXJhY3RpdmVEZWNpc2lvbnMsXG4gIFBsYW5EZWNpc2lvbixcbiAgUGxhbk1ldGFkYXRhLFxuICBSZW1lZGlhdGlvblBsYW4sXG59IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBWQUxJRF9BQ1RJT05TID0gbmV3IFNldChbJ2F1dG9maXgnLCAncmVpbXBvcnQnLCAncmVtb3ZlJywgJ3NraXAnLCAncmVwb3J0X29ubHknXSk7XG5cbi8qKlxuICogQnVpbGQgYSBSZW1lZGlhdGlvblBsYW4gZnJvbSBkcmlmdCBkZXRlY3Rpb24gcmVzdWx0cyBhbmQgaW50ZXJhY3RpdmUgZGVjaXNpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQbGFuKFxuICBtZXRhZGF0YTogUGxhbk1ldGFkYXRhLFxuICBkZWNpc2lvbnM6IEludGVyYWN0aXZlRGVjaXNpb25zLFxuICBub25JbXBvcnRhYmxlTW9kaWZpZWQ/OiBEcmlmdGVkUmVzb3VyY2VbXSxcbik6IFJlbWVkaWF0aW9uUGxhbiB7XG4gIGNvbnN0IHBsYW5EZWNpc2lvbnM6IFBsYW5EZWNpc2lvbltdID0gW107XG4gIGNvbnN0IHJlc291cmNlczogUmVjb3JkPHN0cmluZywgRHJpZnRlZFJlc291cmNlPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgciBvZiBkZWNpc2lvbnMuYXV0b2ZpeCkge1xuICAgIHBsYW5EZWNpc2lvbnMucHVzaCh7XG4gICAgICBsb2dpY2FsUmVzb3VyY2VJZDogci5sb2dpY2FsUmVzb3VyY2VJZCxcbiAgICAgIHJlc291cmNlVHlwZTogci5yZXNvdXJjZVR5cGUsXG4gICAgICBkcmlmdFN0YXR1czogci5zdGFja1Jlc291cmNlRHJpZnRTdGF0dXMsXG4gICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IHIucGh5c2ljYWxSZXNvdXJjZUlkLFxuICAgICAgYWN0aW9uOiAnYXV0b2ZpeCcsXG4gICAgfSk7XG4gICAgcmVzb3VyY2VzW3IubG9naWNhbFJlc291cmNlSWRdID0gcjtcbiAgfVxuXG4gIGZvciAoY29uc3QgeyByZXNvdXJjZSwgcGh5c2ljYWxJZCB9IG9mIGRlY2lzaW9ucy5yZWltcG9ydCkge1xuICAgIHBsYW5EZWNpc2lvbnMucHVzaCh7XG4gICAgICBsb2dpY2FsUmVzb3VyY2VJZDogcmVzb3VyY2UubG9naWNhbFJlc291cmNlSWQsXG4gICAgICByZXNvdXJjZVR5cGU6IHJlc291cmNlLnJlc291cmNlVHlwZSxcbiAgICAgIGRyaWZ0U3RhdHVzOiByZXNvdXJjZS5zdGFja1Jlc291cmNlRHJpZnRTdGF0dXMsXG4gICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IHJlc291cmNlLnBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgICAgIGFjdGlvbjogJ3JlaW1wb3J0JyxcbiAgICAgIHJlaW1wb3J0UGh5c2ljYWxJZDogcGh5c2ljYWxJZCxcbiAgICB9KTtcbiAgICByZXNvdXJjZXNbcmVzb3VyY2UubG9naWNhbFJlc291cmNlSWRdID0gcmVzb3VyY2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IHIgb2YgZGVjaXNpb25zLnJlbW92ZSkge1xuICAgIHBsYW5EZWNpc2lvbnMucHVzaCh7XG4gICAgICBsb2dpY2FsUmVzb3VyY2VJZDogci5sb2dpY2FsUmVzb3VyY2VJZCxcbiAgICAgIHJlc291cmNlVHlwZTogci5yZXNvdXJjZVR5cGUsXG4gICAgICBkcmlmdFN0YXR1czogci5zdGFja1Jlc291cmNlRHJpZnRTdGF0dXMsXG4gICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IHIucGh5c2ljYWxSZXNvdXJjZUlkLFxuICAgICAgYWN0aW9uOiAncmVtb3ZlJyxcbiAgICB9KTtcbiAgICByZXNvdXJjZXNbci5sb2dpY2FsUmVzb3VyY2VJZF0gPSByO1xuICB9XG5cbiAgZm9yIChjb25zdCByIG9mIGRlY2lzaW9ucy5za2lwKSB7XG4gICAgcGxhbkRlY2lzaW9ucy5wdXNoKHtcbiAgICAgIGxvZ2ljYWxSZXNvdXJjZUlkOiByLmxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgICAgcmVzb3VyY2VUeXBlOiByLnJlc291cmNlVHlwZSxcbiAgICAgIGRyaWZ0U3RhdHVzOiByLnN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyxcbiAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogci5waHlzaWNhbFJlc291cmNlSWQsXG4gICAgICBhY3Rpb246ICdza2lwJyxcbiAgICB9KTtcbiAgICByZXNvdXJjZXNbci5sb2dpY2FsUmVzb3VyY2VJZF0gPSByO1xuICB9XG5cbiAgaWYgKG5vbkltcG9ydGFibGVNb2RpZmllZCkge1xuICAgIGZvciAoY29uc3QgciBvZiBub25JbXBvcnRhYmxlTW9kaWZpZWQpIHtcbiAgICAgIHBsYW5EZWNpc2lvbnMucHVzaCh7XG4gICAgICAgIGxvZ2ljYWxSZXNvdXJjZUlkOiByLmxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgICAgICByZXNvdXJjZVR5cGU6IHIucmVzb3VyY2VUeXBlLFxuICAgICAgICBkcmlmdFN0YXR1czogci5zdGFja1Jlc291cmNlRHJpZnRTdGF0dXMsXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogci5waHlzaWNhbFJlc291cmNlSWQsXG4gICAgICAgIGFjdGlvbjogJ3JlcG9ydF9vbmx5JyxcbiAgICAgIH0pO1xuICAgICAgcmVzb3VyY2VzW3IubG9naWNhbFJlc291cmNlSWRdID0gcjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHZlcnNpb246IDEsXG4gICAgbWV0YWRhdGEsXG4gICAgZGVjaXNpb25zOiBwbGFuRGVjaXNpb25zLFxuICAgIF9yZXNvdXJjZXM6IHJlc291cmNlcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgYSBwbGFuIHRvIGZvcm1hdHRlZCBKU09OLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplUGxhbihwbGFuOiBSZW1lZGlhdGlvblBsYW4pOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGxhbiwgbnVsbCwgMik7XG59XG5cbi8qKlxuICogTG9hZCBhbmQgdmFsaWRhdGUgYSBwbGFuIGZyb20gYSBKU09OIHN0cmluZy5cbiAqIFRocm93cyBkZXNjcmlwdGl2ZSBlcnJvcnMgb24gdmFsaWRhdGlvbiBmYWlsdXJlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQbGFuKGpzb246IHN0cmluZywgZXhwZWN0ZWRTdGFja05hbWU6IHN0cmluZyk6IFJlbWVkaWF0aW9uUGxhbiB7XG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShqc29uKTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHBsYW4gZmlsZTogbm90IHZhbGlkIEpTT04nKTtcbiAgfVxuXG4gIGNvbnN0IHBsYW4gPSBwYXJzZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgaWYgKHBsYW4udmVyc2lvbiAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBVbnN1cHBvcnRlZCBwbGFuIHZlcnNpb246ICR7cGxhbi52ZXJzaW9ufS4gVGhpcyB0b29sIHN1cHBvcnRzIHZlcnNpb24gMS5gLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBtZXRhZGF0YSA9IHBsYW4ubWV0YWRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIGlmICghbWV0YWRhdGEgfHwgdHlwZW9mIG1ldGFkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwbGFuIGZpbGU6IG1pc3NpbmcgbWV0YWRhdGEnKTtcbiAgfVxuXG4gIGlmIChtZXRhZGF0YS5zdGFja05hbWUgIT09IGV4cGVjdGVkU3RhY2tOYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFBsYW4gc3RhY2sgbmFtZSBcIiR7bWV0YWRhdGEuc3RhY2tOYW1lfVwiIGRvZXMgbm90IG1hdGNoIHRhcmdldCBzdGFjayBcIiR7ZXhwZWN0ZWRTdGFja05hbWV9XCJgLFxuICAgICk7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkocGxhbi5kZWNpc2lvbnMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHBsYW4gZmlsZTogZGVjaXNpb25zIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZGVjaXNpb24gb2YgcGxhbi5kZWNpc2lvbnMgYXMgUGxhbkRlY2lzaW9uW10pIHtcbiAgICBpZiAoIWRlY2lzaW9uLmxvZ2ljYWxSZXNvdXJjZUlkIHx8ICFkZWNpc2lvbi5hY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgcGxhbiBkZWNpc2lvbjogbWlzc2luZyBsb2dpY2FsUmVzb3VyY2VJZCBvciBhY3Rpb24gaW4gJHtKU09OLnN0cmluZ2lmeShkZWNpc2lvbil9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghVkFMSURfQUNUSU9OUy5oYXMoZGVjaXNpb24uYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBhY3Rpb24gXCIke2RlY2lzaW9uLmFjdGlvbn1cIiBmb3IgcmVzb3VyY2UgJHtkZWNpc2lvbi5sb2dpY2FsUmVzb3VyY2VJZH0uIGAgK1xuICAgICAgICBgVmFsaWQgYWN0aW9uczogJHtbLi4uVkFMSURfQUNUSU9OU10uam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGRlY2lzaW9uLmFjdGlvbiA9PT0gJ3JlaW1wb3J0JyAmJiAhZGVjaXNpb24ucmVpbXBvcnRQaHlzaWNhbElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBSZXNvdXJjZSAke2RlY2lzaW9uLmxvZ2ljYWxSZXNvdXJjZUlkfSBoYXMgYWN0aW9uIFwicmVpbXBvcnRcIiBidXQgbm8gcmVpbXBvcnRQaHlzaWNhbElkYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVzb3VyY2VzID0gcGxhbi5fcmVzb3VyY2VzIGFzIFJlY29yZDxzdHJpbmcsIERyaWZ0ZWRSZXNvdXJjZT4gfCB1bmRlZmluZWQ7XG4gIGlmICghcmVzb3VyY2VzIHx8IHR5cGVvZiByZXNvdXJjZXMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHBsYW4gZmlsZTogbWlzc2luZyBfcmVzb3VyY2VzJyk7XG4gIH1cblxuICByZXR1cm4gcGxhbiBhcyB1bmtub3duIGFzIFJlbWVkaWF0aW9uUGxhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgbG9hZGVkIHBsYW4gYmFjayBpbnRvIEludGVyYWN0aXZlRGVjaXNpb25zIGFuZCByZXNvdXJjZSBhcnJheXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbGFuVG9EZWNpc2lvbnMocGxhbjogUmVtZWRpYXRpb25QbGFuKToge1xuICBhbGxEcmlmdGVkUmVzb3VyY2VzOiBEcmlmdGVkUmVzb3VyY2VbXTtcbiAgZGVjaXNpb25zOiBJbnRlcmFjdGl2ZURlY2lzaW9ucztcbn0ge1xuICBjb25zdCBkZWNpc2lvbnM6IEludGVyYWN0aXZlRGVjaXNpb25zID0ge1xuICAgIGF1dG9maXg6IFtdLFxuICAgIHJlaW1wb3J0OiBbXSxcbiAgICByZW1vdmU6IFtdLFxuICAgIHNraXA6IFtdLFxuICB9O1xuXG4gIGNvbnN0IHNlZW5JZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IGQgb2YgcGxhbi5kZWNpc2lvbnMpIHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHBsYW4uX3Jlc291cmNlc1tkLmxvZ2ljYWxSZXNvdXJjZUlkXTtcbiAgICBpZiAoIXJlc291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBSZXNvdXJjZSBcIiR7ZC5sb2dpY2FsUmVzb3VyY2VJZH1cIiBpbiBkZWNpc2lvbnMgbm90IGZvdW5kIGluIHBsYW4gX3Jlc291cmNlc2AsXG4gICAgICApO1xuICAgIH1cbiAgICBzZWVuSWRzLmFkZChkLmxvZ2ljYWxSZXNvdXJjZUlkKTtcblxuICAgIHN3aXRjaCAoZC5hY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2F1dG9maXgnOlxuICAgICAgICBkZWNpc2lvbnMuYXV0b2ZpeC5wdXNoKHJlc291cmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZWltcG9ydCc6XG4gICAgICAgIGRlY2lzaW9ucy5yZWltcG9ydC5wdXNoKHsgcmVzb3VyY2UsIHBoeXNpY2FsSWQ6IGQucmVpbXBvcnRQaHlzaWNhbElkISB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZW1vdmUnOlxuICAgICAgICBkZWNpc2lvbnMucmVtb3ZlLnB1c2gocmVzb3VyY2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NraXAnOlxuICAgICAgICBkZWNpc2lvbnMuc2tpcC5wdXNoKHJlc291cmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXBvcnRfb25seSc6XG4gICAgICAgIC8vIHJlcG9ydF9vbmx5IHJlc291cmNlcyBhcmUgaW5mb3JtYXRpb25hbDsgdHJlYXQgYXMgc2tpcCBkdXJpbmcgZXhlY3V0aW9uXG4gICAgICAgIGRlY2lzaW9ucy5za2lwLnB1c2gocmVzb3VyY2UpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBSZXNvdXJjZXMgaW4gX3Jlc291cmNlcyBidXQgbm90IGluIGRlY2lzaW9ucyBhcmUgdHJlYXRlZCBhcyBza2lwXG4gIGZvciAoY29uc3QgW2xvZ2ljYWxJZCwgcmVzb3VyY2VdIG9mIE9iamVjdC5lbnRyaWVzKHBsYW4uX3Jlc291cmNlcykpIHtcbiAgICBpZiAoIXNlZW5JZHMuaGFzKGxvZ2ljYWxJZCkpIHtcbiAgICAgIGRlY2lzaW9ucy5za2lwLnB1c2gocmVzb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFsbERyaWZ0ZWRSZXNvdXJjZXMgPSBPYmplY3QudmFsdWVzKHBsYW4uX3Jlc291cmNlcyk7XG5cbiAgcmV0dXJuIHsgYWxsRHJpZnRlZFJlc291cmNlcywgZGVjaXNpb25zIH07XG59XG4iXX0=
@@ -101,6 +101,17 @@ export interface RemediationOptions {
101
101
  /** File path to load and apply a previously exported remediation plan */
102
102
  applyPlan?: string;
103
103
  }
104
+ /**
105
+ * A drifted resource that cannot be imported via CloudFormation.
106
+ * MODIFIED resources are report-only; DELETED resources are auto-removed.
107
+ */
108
+ export interface NonImportableResource {
109
+ logicalResourceId: string;
110
+ resourceType: string;
111
+ physicalResourceId: string;
112
+ driftStatus: 'MODIFIED' | 'DELETED';
113
+ propertyDifferences?: PropertyDifference[];
114
+ }
104
115
  /**
105
116
  * Result of the remediation process
106
117
  */
@@ -113,6 +124,8 @@ export interface RemediationResult {
113
124
  skippedResources: string[];
114
125
  /** List of resource logical IDs permanently removed from the stack */
115
126
  removedResources: string[];
127
+ /** Non-importable drifted resources reported for manual action */
128
+ nonImportableResources: NonImportableResource[];
116
129
  /** Error messages if any */
117
130
  errors: string[];
118
131
  }
@@ -203,7 +216,7 @@ export interface PlanDecision {
203
216
  resourceType: string;
204
217
  driftStatus: 'MODIFIED' | 'DELETED';
205
218
  physicalResourceId: string;
206
- action: 'autofix' | 'reimport' | 'remove' | 'skip';
219
+ action: 'autofix' | 'reimport' | 'remove' | 'skip' | 'report_only';
207
220
  /** Only present when action is 'reimport' */
208
221
  reimportPhysicalId?: string;
209
222
  }
package/lib/lib/types.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcHJlc2VudHMgYSBkcmlmdGVkIENsb3VkRm9ybWF0aW9uIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJpZnRlZFJlc291cmNlIHtcbiAgLyoqIExvZ2ljYWwgcmVzb3VyY2UgSUQgaW4gdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlICovXG4gIGxvZ2ljYWxSZXNvdXJjZUlkOiBzdHJpbmc7XG4gIC8qKiBBV1MgcmVzb3VyY2UgdHlwZSAoZS5nLiwgQVdTOjpTMzo6QnVja2V0KSAqL1xuICByZXNvdXJjZVR5cGU6IHN0cmluZztcbiAgLyoqIFBoeXNpY2FsIHJlc291cmNlIElEIChlLmcuLCBidWNrZXQgbmFtZSwgaW5zdGFuY2UgSUQpICovXG4gIHBoeXNpY2FsUmVzb3VyY2VJZDogc3RyaW5nO1xuICAvKiogRHJpZnQgc3RhdHVzIC0gTU9ESUZJRUQgbWVhbnMgcHJvcGVydGllcyBjaGFuZ2VkLCBERUxFVEVEIG1lYW5zIHJlc291cmNlIHdhcyByZW1vdmVkICovXG4gIHN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1czogJ01PRElGSUVEJyB8ICdERUxFVEVEJztcbiAgLyoqIExpc3Qgb2YgcHJvcGVydHkgZGlmZmVyZW5jZXMgaWYgYXZhaWxhYmxlICovXG4gIHByb3BlcnR5RGlmZmVyZW5jZXM/OiBQcm9wZXJ0eURpZmZlcmVuY2VbXTtcbiAgLyoqIEFjdHVhbCBwcm9wZXJ0aWVzIG9mIHRoZSByZXNvdXJjZSBhcyBpdCBleGlzdHMgaW4gQVdTICovXG4gIGFjdHVhbFByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIEV4cGVjdGVkIHByb3BlcnRpZXMgYWNjb3JkaW5nIHRvIHRoZSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSAqL1xuICBleHBlY3RlZFByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIENvbnRleHQgZm9yIHBoeXNpY2FsIHJlc291cmNlIGlkZW50aWZpY2F0aW9uICovXG4gIHBoeXNpY2FsUmVzb3VyY2VJZENvbnRleHQ/OiBQaHlzaWNhbFJlc291cmNlSWRDb250ZXh0W107XG59XG5cbi8qKlxuICogQ29udGV4dCBpbmZvcm1hdGlvbiBmb3IgaWRlbnRpZnlpbmcgYSBwaHlzaWNhbCByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBoeXNpY2FsUmVzb3VyY2VJZENvbnRleHQge1xuICBrZXk6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZGlmZmVyZW5jZSBpbiBhIHJlc291cmNlIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHlEaWZmZXJlbmNlIHtcbiAgLyoqIEpTT05QYXRoIHRvIHRoZSBwcm9wZXJ0eSB0aGF0IGRpZmZlcnMgKi9cbiAgcHJvcGVydHlQYXRoOiBzdHJpbmc7XG4gIC8qKiBFeHBlY3RlZCB2YWx1ZSBhY2NvcmRpbmcgdG8gQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgKi9cbiAgZXhwZWN0ZWRWYWx1ZTogc3RyaW5nO1xuICAvKiogQWN0dWFsIHZhbHVlIGluIEFXUyAqL1xuICBhY3R1YWxWYWx1ZTogc3RyaW5nO1xuICAvKiogVHlwZSBvZiBkaWZmZXJlbmNlICovXG4gIGRpZmZlcmVuY2VUeXBlOiAnQUREJyB8ICdSRU1PVkUnIHwgJ05PVF9FUVVBTCc7XG59XG5cbi8qKlxuICogUmVzb3VyY2UgdG8gaW1wb3J0IGJhY2sgaW50byBDbG91ZEZvcm1hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlVG9JbXBvcnQge1xuICAvKiogQVdTIHJlc291cmNlIHR5cGUgKi9cbiAgUmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIC8qKiBMb2dpY2FsIHJlc291cmNlIElEIGluIHRoZSB0ZW1wbGF0ZSAqL1xuICBMb2dpY2FsUmVzb3VyY2VJZDogc3RyaW5nO1xuICAvKiogTWFwIG9mIGlkZW50aWZpZXIgcHJvcGVydHkgbmFtZXMgdG8gdmFsdWVzICovXG4gIFJlc291cmNlSWRlbnRpZmllcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBBY3Rpb24gdGhlIHVzZXIgY2hvc2UgZm9yIGEgc2luZ2xlIGRyaWZ0ZWQgcmVzb3VyY2VcbiAqL1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VBY3Rpb24gPVxuICB8IHsga2luZDogJ2F1dG9maXgnIH1cbiAgfCB7IGtpbmQ6ICdza2lwJyB9XG4gIHwgeyBraW5kOiAncmVtb3ZlJyB9XG4gIHwgeyBraW5kOiAncmVpbXBvcnQnOyBwaHlzaWNhbElkOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBTdHJ1Y3R1cmVkIHJlc3VsdCBvZiB0aGUgaW50ZXJhY3RpdmUgcHJvbXB0aW5nIHBoYXNlLlxuICogUGFydGl0aW9ucyB1c2VyIGRlY2lzaW9ucyBpbnRvIGdyb3VwcyBmb3IgdGhlIG9yY2hlc3RyYXRvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlcmFjdGl2ZURlY2lzaW9ucyB7XG4gIC8qKiBNT0RJRklFRCByZXNvdXJjZXMgdG8gYXV0b2ZpeCAocmVtb3ZlICsgcmVpbXBvcnQgd2l0aCBhY3R1YWwgc3RhdGUpICovXG4gIGF1dG9maXg6IERyaWZ0ZWRSZXNvdXJjZVtdO1xuICAvKiogREVMRVRFRCByZXNvdXJjZXMgdG8gcmVpbXBvcnQgd2l0aCB1c2VyLXByb3ZpZGVkIHBoeXNpY2FsIElEcyAqL1xuICByZWltcG9ydDogQXJyYXk8eyByZXNvdXJjZTogRHJpZnRlZFJlc291cmNlOyBwaHlzaWNhbElkOiBzdHJpbmcgfT47XG4gIC8qKiBSZXNvdXJjZXMgdG8gcGVybWFuZW50bHkgcmVtb3ZlIGZyb20gc3RhY2sgKHJldGFpbiBpbiBBV1MpICovXG4gIHJlbW92ZTogRHJpZnRlZFJlc291cmNlW107XG4gIC8qKiBSZXNvdXJjZXMgdGhlIHVzZXIgY2hvc2UgdG8gc2tpcCBlbnRpcmVseSAqL1xuICBza2lwOiBEcmlmdGVkUmVzb3VyY2VbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgcmVtZWRpYXRpb24gcHJvY2Vzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbWVkaWF0aW9uT3B0aW9ucyB7XG4gIC8qKiBOYW1lIG9mIHRoZSBDbG91ZEZvcm1hdGlvbiBzdGFjayAqL1xuICBzdGFja05hbWU6IHN0cmluZztcbiAgLyoqIEFXUyByZWdpb24gKi9cbiAgcmVnaW9uPzogc3RyaW5nO1xuICAvKiogQVdTIHByb2ZpbGUgdG8gdXNlICovXG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIC8qKiBJZiB0cnVlLCBvbmx5IHNob3cgd2hhdCB3b3VsZCBiZSBkb25lIHdpdGhvdXQgbWFraW5nIGNoYW5nZXMgKi9cbiAgZHJ5UnVuPzogYm9vbGVhbjtcbiAgLyoqIFNraXAgaW50ZXJhY3RpdmUgcHJvbXB0czsgYWNjZXB0IGRlZmF1bHQgYWN0aW9uIGZvciBldmVyeSByZXNvdXJjZSAqL1xuICB5ZXM/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHZlcmJvc2Ugb3V0cHV0ICovXG4gIHZlcmJvc2U/OiBib29sZWFuO1xuICAvKiogRmlsZSBwYXRoIHRvIGV4cG9ydCB0aGUgcmVtZWRpYXRpb24gcGxhbiB0byAoZXhpdHMgd2l0aG91dCBleGVjdXRpbmcpICovXG4gIGV4cG9ydFBsYW4/OiBzdHJpbmc7XG4gIC8qKiBGaWxlIHBhdGggdG8gbG9hZCBhbmQgYXBwbHkgYSBwcmV2aW91c2x5IGV4cG9ydGVkIHJlbWVkaWF0aW9uIHBsYW4gKi9cbiAgYXBwbHlQbGFuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiB0aGUgcmVtZWRpYXRpb24gcHJvY2Vzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbWVkaWF0aW9uUmVzdWx0IHtcbiAgLyoqIFdoZXRoZXIgcmVtZWRpYXRpb24gd2FzIHN1Y2Nlc3NmdWwgKi9cbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgLyoqIExpc3Qgb2YgcmVzb3VyY2UgbG9naWNhbCBJRHMgdGhhdCB3ZXJlIHJlbWVkaWF0ZWQgKGF1dG9maXggKyByZWltcG9ydCkgKi9cbiAgcmVtZWRpYXRlZFJlc291cmNlczogc3RyaW5nW107XG4gIC8qKiBMaXN0IG9mIHJlc291cmNlIGxvZ2ljYWwgSURzIHRoYXQgd2VyZSBza2lwcGVkICovXG4gIHNraXBwZWRSZXNvdXJjZXM6IHN0cmluZ1tdO1xuICAvKiogTGlzdCBvZiByZXNvdXJjZSBsb2dpY2FsIElEcyBwZXJtYW5lbnRseSByZW1vdmVkIGZyb20gdGhlIHN0YWNrICovXG4gIHJlbW92ZWRSZXNvdXJjZXM6IHN0cmluZ1tdO1xuICAvKiogRXJyb3IgbWVzc2FnZXMgaWYgYW55ICovXG4gIGVycm9yczogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSB7XG4gIEFXU1RlbXBsYXRlRm9ybWF0VmVyc2lvbj86IHN0cmluZztcbiAgRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIE1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIFBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgTWFwcGluZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgQ29uZGl0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBUcmFuc2Zvcm0/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgUmVzb3VyY2VzOiBSZWNvcmQ8c3RyaW5nLCBDbG91ZEZvcm1hdGlvblJlc291cmNlPjtcbiAgT3V0cHV0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIGRlZmluaXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbG91ZEZvcm1hdGlvblJlc291cmNlIHtcbiAgVHlwZTogc3RyaW5nO1xuICBQcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIERlcGVuZHNPbj86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBDb25kaXRpb24/OiBzdHJpbmc7XG4gIERlbGV0aW9uUG9saWN5PzogJ0RlbGV0ZScgfCAnUmV0YWluJyB8ICdTbmFwc2hvdCcgfCAnUmV0YWluRXhjZXB0T25DcmVhdGUnO1xuICBVcGRhdGVSZXBsYWNlUG9saWN5PzogJ0RlbGV0ZScgfCAnUmV0YWluJyB8ICdTbmFwc2hvdCc7XG4gIE1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHRyYW5zZm9ybWluZyBhIHRlbXBsYXRlIGZvciBkcmlmdCByZW1lZGlhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZm9ybVJlc3VsdCB7XG4gIC8qKiBUaGUgdHJhbnNmb3JtZWQgdGVtcGxhdGUgKi9cbiAgdGVtcGxhdGU6IENsb3VkRm9ybWF0aW9uVGVtcGxhdGU7XG4gIC8qKiBMaXN0IG9mIGxvZ2ljYWwgSURzIHRoYXQgd2VyZSByZW1vdmVkICovXG4gIHJlbW92ZWRSZXNvdXJjZXM6IHN0cmluZ1tdO1xuICAvKiogTWFwIG9mIHJlc29sdmVkIHJlZmVyZW5jZSB2YWx1ZXMgKi9cbiAgcmVzb2x2ZWRSZWZlcmVuY2VzOiBNYXA8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBSZWNvdmVyeSBjaGVja3BvaW50IHNhdmVkIGJlZm9yZSBzdGFjayBtdXRhdGlvbnMgZm9yIG1hbnVhbCByZWNvdmVyeVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY292ZXJ5Q2hlY2twb2ludCB7XG4gIC8qKiBTdGFjayBuYW1lICovXG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICAvKiogU3RhY2sgQVJOICovXG4gIHN0YWNrSWQ6IHN0cmluZztcbiAgLyoqIE9yaWdpbmFsIHRlbXBsYXRlIGJvZHkgKGJlZm9yZSBhbnkgbXV0YXRpb25zKSAqL1xuICBvcmlnaW5hbFRlbXBsYXRlQm9keTogc3RyaW5nO1xuICAvKiogU3RhY2sgcGFyYW1ldGVycyAqL1xuICBwYXJhbWV0ZXJzOiBBcnJheTx7IFBhcmFtZXRlcktleT86IHN0cmluZzsgUGFyYW1ldGVyVmFsdWU/OiBzdHJpbmcgfT47XG4gIC8qKiBMb2dpY2FsIElEcyBvZiBkcmlmdGVkIHJlc291cmNlcyBiZWluZyByZW1lZGlhdGVkICovXG4gIGRyaWZ0ZWRSZXNvdXJjZUlkczogc3RyaW5nW107XG4gIC8qKiBJU08gdGltZXN0YW1wIHdoZW4gY2hlY2twb2ludCB3YXMgY3JlYXRlZCAqL1xuICB0aW1lc3RhbXA6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYSByZXNvdXJjZSB0aGF0IHdpbGwgYmUgY2FzY2FkZS1yZW1vdmVkIGJlY2F1c2UgaXQgaGFzXG4gKiB1bnJlc29sdmFibGUgcmVmZXJlbmNlcyB0byBhIHJlbW92ZWQgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FzY2FkZVJlbW92YWwge1xuICAvKiogTG9naWNhbCBJRCBvZiB0aGUgcmVzb3VyY2UgdGhhdCB3aWxsIGJlIGNhc2NhZGUtcmVtb3ZlZCAqL1xuICBsb2dpY2FsUmVzb3VyY2VJZDogc3RyaW5nO1xuICAvKiogQVdTIHJlc291cmNlIHR5cGUgb2YgdGhlIGNhc2NhZGUtcmVtb3ZlZCByZXNvdXJjZSAqL1xuICByZXNvdXJjZVR5cGU6IHN0cmluZztcbiAgLyoqIExvZ2ljYWwgSUQgb2YgdGhlIHJlbW92ZWQgcmVzb3VyY2UgdGhhdCB0aGlzIG9uZSBkZXBlbmRzIG9uICovXG4gIGRlcGVuZHNPbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhIGFib3V0IHdoZW4gYW5kIHdoZXJlIGEgcmVtZWRpYXRpb24gcGxhbiB3YXMgY3JlYXRlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYW5NZXRhZGF0YSB7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHRvb2xWZXJzaW9uOiBzdHJpbmc7XG4gIGRyaWZ0RGV0ZWN0aW9uSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSByZXNvdXJjZSBkZWNpc2lvbiBpbiBhIHJlbWVkaWF0aW9uIHBsYW4gKGh1bWFuLXJlYWRhYmxlL2VkaXRhYmxlKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYW5EZWNpc2lvbiB7XG4gIGxvZ2ljYWxSZXNvdXJjZUlkOiBzdHJpbmc7XG4gIHJlc291cmNlVHlwZTogc3RyaW5nO1xuICBkcmlmdFN0YXR1czogJ01PRElGSUVEJyB8ICdERUxFVEVEJztcbiAgcGh5c2ljYWxSZXNvdXJjZUlkOiBzdHJpbmc7XG4gIGFjdGlvbjogJ2F1dG9maXgnIHwgJ3JlaW1wb3J0JyB8ICdyZW1vdmUnIHwgJ3NraXAnO1xuICAvKiogT25seSBwcmVzZW50IHdoZW4gYWN0aW9uIGlzICdyZWltcG9ydCcgKi9cbiAgcmVpbXBvcnRQaHlzaWNhbElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6YWJsZSByZW1lZGlhdGlvbiBwbGFuIGZvciBleHBvcnQvaW1wb3J0IHdvcmtmbG93XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVtZWRpYXRpb25QbGFuIHtcbiAgdmVyc2lvbjogMTtcbiAgbWV0YWRhdGE6IFBsYW5NZXRhZGF0YTtcbiAgLyoqIEh1bWFuLXJlYWRhYmxlL2VkaXRhYmxlIGxpc3Qgb2YgcmVzb3VyY2UgZGVjaXNpb25zICovXG4gIGRlY2lzaW9uczogUGxhbkRlY2lzaW9uW107XG4gIC8qKiBJbnRlcm5hbCByZXNvdXJjZSBkYXRhIG5lZWRlZCB0byBleGVjdXRlIHRoZSBwbGFuIChkbyBub3QgZWRpdCkgKi9cbiAgX3Jlc291cmNlczogUmVjb3JkPHN0cmluZywgRHJpZnRlZFJlc291cmNlPjtcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcHJlc2VudHMgYSBkcmlmdGVkIENsb3VkRm9ybWF0aW9uIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJpZnRlZFJlc291cmNlIHtcbiAgLyoqIExvZ2ljYWwgcmVzb3VyY2UgSUQgaW4gdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlICovXG4gIGxvZ2ljYWxSZXNvdXJjZUlkOiBzdHJpbmc7XG4gIC8qKiBBV1MgcmVzb3VyY2UgdHlwZSAoZS5nLiwgQVdTOjpTMzo6QnVja2V0KSAqL1xuICByZXNvdXJjZVR5cGU6IHN0cmluZztcbiAgLyoqIFBoeXNpY2FsIHJlc291cmNlIElEIChlLmcuLCBidWNrZXQgbmFtZSwgaW5zdGFuY2UgSUQpICovXG4gIHBoeXNpY2FsUmVzb3VyY2VJZDogc3RyaW5nO1xuICAvKiogRHJpZnQgc3RhdHVzIC0gTU9ESUZJRUQgbWVhbnMgcHJvcGVydGllcyBjaGFuZ2VkLCBERUxFVEVEIG1lYW5zIHJlc291cmNlIHdhcyByZW1vdmVkICovXG4gIHN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1czogJ01PRElGSUVEJyB8ICdERUxFVEVEJztcbiAgLyoqIExpc3Qgb2YgcHJvcGVydHkgZGlmZmVyZW5jZXMgaWYgYXZhaWxhYmxlICovXG4gIHByb3BlcnR5RGlmZmVyZW5jZXM/OiBQcm9wZXJ0eURpZmZlcmVuY2VbXTtcbiAgLyoqIEFjdHVhbCBwcm9wZXJ0aWVzIG9mIHRoZSByZXNvdXJjZSBhcyBpdCBleGlzdHMgaW4gQVdTICovXG4gIGFjdHVhbFByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIEV4cGVjdGVkIHByb3BlcnRpZXMgYWNjb3JkaW5nIHRvIHRoZSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSAqL1xuICBleHBlY3RlZFByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIENvbnRleHQgZm9yIHBoeXNpY2FsIHJlc291cmNlIGlkZW50aWZpY2F0aW9uICovXG4gIHBoeXNpY2FsUmVzb3VyY2VJZENvbnRleHQ/OiBQaHlzaWNhbFJlc291cmNlSWRDb250ZXh0W107XG59XG5cbi8qKlxuICogQ29udGV4dCBpbmZvcm1hdGlvbiBmb3IgaWRlbnRpZnlpbmcgYSBwaHlzaWNhbCByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBoeXNpY2FsUmVzb3VyY2VJZENvbnRleHQge1xuICBrZXk6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZGlmZmVyZW5jZSBpbiBhIHJlc291cmNlIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHlEaWZmZXJlbmNlIHtcbiAgLyoqIEpTT05QYXRoIHRvIHRoZSBwcm9wZXJ0eSB0aGF0IGRpZmZlcnMgKi9cbiAgcHJvcGVydHlQYXRoOiBzdHJpbmc7XG4gIC8qKiBFeHBlY3RlZCB2YWx1ZSBhY2NvcmRpbmcgdG8gQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgKi9cbiAgZXhwZWN0ZWRWYWx1ZTogc3RyaW5nO1xuICAvKiogQWN0dWFsIHZhbHVlIGluIEFXUyAqL1xuICBhY3R1YWxWYWx1ZTogc3RyaW5nO1xuICAvKiogVHlwZSBvZiBkaWZmZXJlbmNlICovXG4gIGRpZmZlcmVuY2VUeXBlOiAnQUREJyB8ICdSRU1PVkUnIHwgJ05PVF9FUVVBTCc7XG59XG5cbi8qKlxuICogUmVzb3VyY2UgdG8gaW1wb3J0IGJhY2sgaW50byBDbG91ZEZvcm1hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlVG9JbXBvcnQge1xuICAvKiogQVdTIHJlc291cmNlIHR5cGUgKi9cbiAgUmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIC8qKiBMb2dpY2FsIHJlc291cmNlIElEIGluIHRoZSB0ZW1wbGF0ZSAqL1xuICBMb2dpY2FsUmVzb3VyY2VJZDogc3RyaW5nO1xuICAvKiogTWFwIG9mIGlkZW50aWZpZXIgcHJvcGVydHkgbmFtZXMgdG8gdmFsdWVzICovXG4gIFJlc291cmNlSWRlbnRpZmllcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBBY3Rpb24gdGhlIHVzZXIgY2hvc2UgZm9yIGEgc2luZ2xlIGRyaWZ0ZWQgcmVzb3VyY2VcbiAqL1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VBY3Rpb24gPVxuICB8IHsga2luZDogJ2F1dG9maXgnIH1cbiAgfCB7IGtpbmQ6ICdza2lwJyB9XG4gIHwgeyBraW5kOiAncmVtb3ZlJyB9XG4gIHwgeyBraW5kOiAncmVpbXBvcnQnOyBwaHlzaWNhbElkOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBTdHJ1Y3R1cmVkIHJlc3VsdCBvZiB0aGUgaW50ZXJhY3RpdmUgcHJvbXB0aW5nIHBoYXNlLlxuICogUGFydGl0aW9ucyB1c2VyIGRlY2lzaW9ucyBpbnRvIGdyb3VwcyBmb3IgdGhlIG9yY2hlc3RyYXRvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlcmFjdGl2ZURlY2lzaW9ucyB7XG4gIC8qKiBNT0RJRklFRCByZXNvdXJjZXMgdG8gYXV0b2ZpeCAocmVtb3ZlICsgcmVpbXBvcnQgd2l0aCBhY3R1YWwgc3RhdGUpICovXG4gIGF1dG9maXg6IERyaWZ0ZWRSZXNvdXJjZVtdO1xuICAvKiogREVMRVRFRCByZXNvdXJjZXMgdG8gcmVpbXBvcnQgd2l0aCB1c2VyLXByb3ZpZGVkIHBoeXNpY2FsIElEcyAqL1xuICByZWltcG9ydDogQXJyYXk8eyByZXNvdXJjZTogRHJpZnRlZFJlc291cmNlOyBwaHlzaWNhbElkOiBzdHJpbmcgfT47XG4gIC8qKiBSZXNvdXJjZXMgdG8gcGVybWFuZW50bHkgcmVtb3ZlIGZyb20gc3RhY2sgKHJldGFpbiBpbiBBV1MpICovXG4gIHJlbW92ZTogRHJpZnRlZFJlc291cmNlW107XG4gIC8qKiBSZXNvdXJjZXMgdGhlIHVzZXIgY2hvc2UgdG8gc2tpcCBlbnRpcmVseSAqL1xuICBza2lwOiBEcmlmdGVkUmVzb3VyY2VbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgcmVtZWRpYXRpb24gcHJvY2Vzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbWVkaWF0aW9uT3B0aW9ucyB7XG4gIC8qKiBOYW1lIG9mIHRoZSBDbG91ZEZvcm1hdGlvbiBzdGFjayAqL1xuICBzdGFja05hbWU6IHN0cmluZztcbiAgLyoqIEFXUyByZWdpb24gKi9cbiAgcmVnaW9uPzogc3RyaW5nO1xuICAvKiogQVdTIHByb2ZpbGUgdG8gdXNlICovXG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIC8qKiBJZiB0cnVlLCBvbmx5IHNob3cgd2hhdCB3b3VsZCBiZSBkb25lIHdpdGhvdXQgbWFraW5nIGNoYW5nZXMgKi9cbiAgZHJ5UnVuPzogYm9vbGVhbjtcbiAgLyoqIFNraXAgaW50ZXJhY3RpdmUgcHJvbXB0czsgYWNjZXB0IGRlZmF1bHQgYWN0aW9uIGZvciBldmVyeSByZXNvdXJjZSAqL1xuICB5ZXM/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHZlcmJvc2Ugb3V0cHV0ICovXG4gIHZlcmJvc2U/OiBib29sZWFuO1xuICAvKiogRmlsZSBwYXRoIHRvIGV4cG9ydCB0aGUgcmVtZWRpYXRpb24gcGxhbiB0byAoZXhpdHMgd2l0aG91dCBleGVjdXRpbmcpICovXG4gIGV4cG9ydFBsYW4/OiBzdHJpbmc7XG4gIC8qKiBGaWxlIHBhdGggdG8gbG9hZCBhbmQgYXBwbHkgYSBwcmV2aW91c2x5IGV4cG9ydGVkIHJlbWVkaWF0aW9uIHBsYW4gKi9cbiAgYXBwbHlQbGFuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgZHJpZnRlZCByZXNvdXJjZSB0aGF0IGNhbm5vdCBiZSBpbXBvcnRlZCB2aWEgQ2xvdWRGb3JtYXRpb24uXG4gKiBNT0RJRklFRCByZXNvdXJjZXMgYXJlIHJlcG9ydC1vbmx5OyBERUxFVEVEIHJlc291cmNlcyBhcmUgYXV0by1yZW1vdmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vbkltcG9ydGFibGVSZXNvdXJjZSB7XG4gIGxvZ2ljYWxSZXNvdXJjZUlkOiBzdHJpbmc7XG4gIHJlc291cmNlVHlwZTogc3RyaW5nO1xuICBwaHlzaWNhbFJlc291cmNlSWQ6IHN0cmluZztcbiAgZHJpZnRTdGF0dXM6ICdNT0RJRklFRCcgfCAnREVMRVRFRCc7XG4gIHByb3BlcnR5RGlmZmVyZW5jZXM/OiBQcm9wZXJ0eURpZmZlcmVuY2VbXTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgdGhlIHJlbWVkaWF0aW9uIHByb2Nlc3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW1lZGlhdGlvblJlc3VsdCB7XG4gIC8qKiBXaGV0aGVyIHJlbWVkaWF0aW9uIHdhcyBzdWNjZXNzZnVsICovXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIC8qKiBMaXN0IG9mIHJlc291cmNlIGxvZ2ljYWwgSURzIHRoYXQgd2VyZSByZW1lZGlhdGVkIChhdXRvZml4ICsgcmVpbXBvcnQpICovXG4gIHJlbWVkaWF0ZWRSZXNvdXJjZXM6IHN0cmluZ1tdO1xuICAvKiogTGlzdCBvZiByZXNvdXJjZSBsb2dpY2FsIElEcyB0aGF0IHdlcmUgc2tpcHBlZCAqL1xuICBza2lwcGVkUmVzb3VyY2VzOiBzdHJpbmdbXTtcbiAgLyoqIExpc3Qgb2YgcmVzb3VyY2UgbG9naWNhbCBJRHMgcGVybWFuZW50bHkgcmVtb3ZlZCBmcm9tIHRoZSBzdGFjayAqL1xuICByZW1vdmVkUmVzb3VyY2VzOiBzdHJpbmdbXTtcbiAgLyoqIE5vbi1pbXBvcnRhYmxlIGRyaWZ0ZWQgcmVzb3VyY2VzIHJlcG9ydGVkIGZvciBtYW51YWwgYWN0aW9uICovXG4gIG5vbkltcG9ydGFibGVSZXNvdXJjZXM6IE5vbkltcG9ydGFibGVSZXNvdXJjZVtdO1xuICAvKiogRXJyb3IgbWVzc2FnZXMgaWYgYW55ICovXG4gIGVycm9yczogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSB7XG4gIEFXU1RlbXBsYXRlRm9ybWF0VmVyc2lvbj86IHN0cmluZztcbiAgRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIE1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIFBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgTWFwcGluZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgQ29uZGl0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBUcmFuc2Zvcm0/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgUmVzb3VyY2VzOiBSZWNvcmQ8c3RyaW5nLCBDbG91ZEZvcm1hdGlvblJlc291cmNlPjtcbiAgT3V0cHV0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIGRlZmluaXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbG91ZEZvcm1hdGlvblJlc291cmNlIHtcbiAgVHlwZTogc3RyaW5nO1xuICBQcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIERlcGVuZHNPbj86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBDb25kaXRpb24/OiBzdHJpbmc7XG4gIERlbGV0aW9uUG9saWN5PzogJ0RlbGV0ZScgfCAnUmV0YWluJyB8ICdTbmFwc2hvdCcgfCAnUmV0YWluRXhjZXB0T25DcmVhdGUnO1xuICBVcGRhdGVSZXBsYWNlUG9saWN5PzogJ0RlbGV0ZScgfCAnUmV0YWluJyB8ICdTbmFwc2hvdCc7XG4gIE1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIHRyYW5zZm9ybWluZyBhIHRlbXBsYXRlIGZvciBkcmlmdCByZW1lZGlhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZm9ybVJlc3VsdCB7XG4gIC8qKiBUaGUgdHJhbnNmb3JtZWQgdGVtcGxhdGUgKi9cbiAgdGVtcGxhdGU6IENsb3VkRm9ybWF0aW9uVGVtcGxhdGU7XG4gIC8qKiBMaXN0IG9mIGxvZ2ljYWwgSURzIHRoYXQgd2VyZSByZW1vdmVkICovXG4gIHJlbW92ZWRSZXNvdXJjZXM6IHN0cmluZ1tdO1xuICAvKiogTWFwIG9mIHJlc29sdmVkIHJlZmVyZW5jZSB2YWx1ZXMgKi9cbiAgcmVzb2x2ZWRSZWZlcmVuY2VzOiBNYXA8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBSZWNvdmVyeSBjaGVja3BvaW50IHNhdmVkIGJlZm9yZSBzdGFjayBtdXRhdGlvbnMgZm9yIG1hbnVhbCByZWNvdmVyeVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY292ZXJ5Q2hlY2twb2ludCB7XG4gIC8qKiBTdGFjayBuYW1lICovXG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICAvKiogU3RhY2sgQVJOICovXG4gIHN0YWNrSWQ6IHN0cmluZztcbiAgLyoqIE9yaWdpbmFsIHRlbXBsYXRlIGJvZHkgKGJlZm9yZSBhbnkgbXV0YXRpb25zKSAqL1xuICBvcmlnaW5hbFRlbXBsYXRlQm9keTogc3RyaW5nO1xuICAvKiogU3RhY2sgcGFyYW1ldGVycyAqL1xuICBwYXJhbWV0ZXJzOiBBcnJheTx7IFBhcmFtZXRlcktleT86IHN0cmluZzsgUGFyYW1ldGVyVmFsdWU/OiBzdHJpbmcgfT47XG4gIC8qKiBMb2dpY2FsIElEcyBvZiBkcmlmdGVkIHJlc291cmNlcyBiZWluZyByZW1lZGlhdGVkICovXG4gIGRyaWZ0ZWRSZXNvdXJjZUlkczogc3RyaW5nW107XG4gIC8qKiBJU08gdGltZXN0YW1wIHdoZW4gY2hlY2twb2ludCB3YXMgY3JlYXRlZCAqL1xuICB0aW1lc3RhbXA6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYSByZXNvdXJjZSB0aGF0IHdpbGwgYmUgY2FzY2FkZS1yZW1vdmVkIGJlY2F1c2UgaXQgaGFzXG4gKiB1bnJlc29sdmFibGUgcmVmZXJlbmNlcyB0byBhIHJlbW92ZWQgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FzY2FkZVJlbW92YWwge1xuICAvKiogTG9naWNhbCBJRCBvZiB0aGUgcmVzb3VyY2UgdGhhdCB3aWxsIGJlIGNhc2NhZGUtcmVtb3ZlZCAqL1xuICBsb2dpY2FsUmVzb3VyY2VJZDogc3RyaW5nO1xuICAvKiogQVdTIHJlc291cmNlIHR5cGUgb2YgdGhlIGNhc2NhZGUtcmVtb3ZlZCByZXNvdXJjZSAqL1xuICByZXNvdXJjZVR5cGU6IHN0cmluZztcbiAgLyoqIExvZ2ljYWwgSUQgb2YgdGhlIHJlbW92ZWQgcmVzb3VyY2UgdGhhdCB0aGlzIG9uZSBkZXBlbmRzIG9uICovXG4gIGRlcGVuZHNPbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhIGFib3V0IHdoZW4gYW5kIHdoZXJlIGEgcmVtZWRpYXRpb24gcGxhbiB3YXMgY3JlYXRlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYW5NZXRhZGF0YSB7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHRvb2xWZXJzaW9uOiBzdHJpbmc7XG4gIGRyaWZ0RGV0ZWN0aW9uSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSByZXNvdXJjZSBkZWNpc2lvbiBpbiBhIHJlbWVkaWF0aW9uIHBsYW4gKGh1bWFuLXJlYWRhYmxlL2VkaXRhYmxlKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYW5EZWNpc2lvbiB7XG4gIGxvZ2ljYWxSZXNvdXJjZUlkOiBzdHJpbmc7XG4gIHJlc291cmNlVHlwZTogc3RyaW5nO1xuICBkcmlmdFN0YXR1czogJ01PRElGSUVEJyB8ICdERUxFVEVEJztcbiAgcGh5c2ljYWxSZXNvdXJjZUlkOiBzdHJpbmc7XG4gIGFjdGlvbjogJ2F1dG9maXgnIHwgJ3JlaW1wb3J0JyB8ICdyZW1vdmUnIHwgJ3NraXAnIHwgJ3JlcG9ydF9vbmx5JztcbiAgLyoqIE9ubHkgcHJlc2VudCB3aGVuIGFjdGlvbiBpcyAncmVpbXBvcnQnICovXG4gIHJlaW1wb3J0UGh5c2ljYWxJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZXJpYWxpemFibGUgcmVtZWRpYXRpb24gcGxhbiBmb3IgZXhwb3J0L2ltcG9ydCB3b3JrZmxvd1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbWVkaWF0aW9uUGxhbiB7XG4gIHZlcnNpb246IDE7XG4gIG1ldGFkYXRhOiBQbGFuTWV0YWRhdGE7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZS9lZGl0YWJsZSBsaXN0IG9mIHJlc291cmNlIGRlY2lzaW9ucyAqL1xuICBkZWNpc2lvbnM6IFBsYW5EZWNpc2lvbltdO1xuICAvKiogSW50ZXJuYWwgcmVzb3VyY2UgZGF0YSBuZWVkZWQgdG8gZXhlY3V0ZSB0aGUgcGxhbiAoZG8gbm90IGVkaXQpICovXG4gIF9yZXNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIERyaWZ0ZWRSZXNvdXJjZT47XG59XG4iXX0=
package/package.json CHANGED
@@ -37,7 +37,7 @@
37
37
  "@stylistic/eslint-plugin": "^2",
38
38
  "@types/jest": "^30.0.0",
39
39
  "@types/js-yaml": "^4.0.9",
40
- "@types/node": "^25.0.10",
40
+ "@types/node": "^25.3.3",
41
41
  "@typescript-eslint/eslint-plugin": "^8",
42
42
  "@typescript-eslint/parser": "^8",
43
43
  "commit-and-tag-version": "^12",
@@ -47,18 +47,18 @@
47
47
  "eslint-plugin-import": "^2.32.0",
48
48
  "jest": "^30.2.0",
49
49
  "jest-junit": "^16",
50
- "projen": "^0.99.8",
50
+ "projen": "^0.99.17",
51
51
  "ts-jest": "^29.4.6",
52
52
  "ts-node": "^10.9.2",
53
53
  "typescript": "^5.9.3"
54
54
  },
55
55
  "dependencies": {
56
- "@aws-sdk/client-cloudformation": "^3.975.0",
57
- "@aws-sdk/credential-providers": "^3.975.0",
56
+ "@aws-sdk/client-cloudformation": "^3.1000.0",
57
+ "@aws-sdk/credential-providers": "^3.1000.0",
58
58
  "@inquirer/prompts": "^8.3.0",
59
59
  "chalk": "^5.6.2",
60
- "commander": "^14.0.2",
61
- "ora": "^9.1.0",
60
+ "commander": "^14.0.3",
61
+ "ora": "^9.3.0",
62
62
  "yaml-cfn": "^0.3.2"
63
63
  },
64
64
  "engines": {
@@ -69,7 +69,7 @@
69
69
  "publishConfig": {
70
70
  "access": "public"
71
71
  },
72
- "version": "0.0.6",
72
+ "version": "0.0.8",
73
73
  "jest": {
74
74
  "coverageProvider": "v8",
75
75
  "testPathIgnorePatterns": [