@aws-cdk/integ-runner 2.197.24 → 2.199.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -130,6 +130,7 @@ class IntegTestRunner extends runner_base_1.IntegRunner {
130
130
  traceLogs: enableForVerbosityLevel(2) ?? false,
131
131
  verbose: enableForVerbosityLevel(3),
132
132
  debug: enableForVerbosityLevel(4),
133
+ roleArn: options.roleArn,
133
134
  }, options.testCaseName, options.verbosity ?? 0);
134
135
  }
135
136
  catch (e) {
@@ -157,6 +158,7 @@ class IntegTestRunner extends runner_base_1.IntegRunner {
157
158
  const clean = options.clean ?? true;
158
159
  const updateWorkflowEnabled = (options.updateWorkflow ?? true)
159
160
  && (actualTestCase.stackUpdateWorkflow ?? true);
161
+ const allowDeleteFailures = actualTestCase.allowDeleteFailures ?? options.allowDeleteFailures ?? false;
160
162
  const enableForVerbosityLevel = (needed = 1) => {
161
163
  const verbosity = options.verbosity ?? 0;
162
164
  return (verbosity >= needed) ? true : undefined;
@@ -169,7 +171,8 @@ class IntegTestRunner extends runner_base_1.IntegRunner {
169
171
  requireApproval: cloud_assembly_schema_1.RequireApproval.NEVER,
170
172
  verbose: enableForVerbosityLevel(3),
171
173
  debug: enableForVerbosityLevel(4),
172
- }, updateWorkflowEnabled, options.testCaseName);
174
+ roleArn: options.roleArn,
175
+ }, updateWorkflowEnabled, options.testCaseName, allowDeleteFailures);
173
176
  }
174
177
  // only create the snapshot if there are no failed assertion results
175
178
  // (i.e. no failures)
@@ -192,6 +195,7 @@ class IntegTestRunner extends runner_base_1.IntegRunner {
192
195
  output: path.relative(this.directory, this.cdkOutDir),
193
196
  ...actualTestCase.cdkCommandOptions?.destroy?.args,
194
197
  context: this.getContext(actualTestCase.cdkCommandOptions?.destroy?.args?.context),
198
+ roleArn: options.roleArn ?? actualTestCase.cdkCommandOptions?.destroy?.args?.roleArn,
195
199
  verbose: enableForVerbosityLevel(3),
196
200
  debug: enableForVerbosityLevel(4),
197
201
  });
@@ -362,7 +366,7 @@ class IntegTestRunner extends runner_base_1.IntegRunner {
362
366
  * Perform a integ test case deployment, including
363
367
  * performing the update workflow
364
368
  */
365
- async deploy(deployArgs, updateWorkflowEnabled, testCaseName) {
369
+ async deploy(deployArgs, updateWorkflowEnabled, testCaseName, allowDeleteFailures) {
366
370
  const actualTestCase = (await this.actualTestSuite()).testSuite[testCaseName];
367
371
  try {
368
372
  if (actualTestCase.hooks?.preDeploy) {
@@ -394,7 +398,8 @@ class IntegTestRunner extends runner_base_1.IntegRunner {
394
398
  });
395
399
  }
396
400
  // now deploy the "actual" test.
397
- await this.cdk.deploy({
401
+ // This is the stack update if the update workflow ran above.
402
+ const actualDeployResult = await this.cdk.deploy({
398
403
  ...deployArgs,
399
404
  lookups: (await this.actualTestSuite()).enableLookups,
400
405
  stacks: [
@@ -405,6 +410,19 @@ class IntegTestRunner extends runner_base_1.IntegRunner {
405
410
  context: this.getContext(actualTestCase?.cdkCommandOptions?.deploy?.args?.context),
406
411
  app: this.cdkApp,
407
412
  });
413
+ if (actualDeployResult.deleteFailures.length > 0) {
414
+ const details = actualDeployResult.deleteFailures
415
+ .map(f => ` - ${f.logicalResourceId} (${f.resourceType}): ${f.reason}`)
416
+ .join('\n');
417
+ const message = `${actualDeployResult.deleteFailures.length} resource(s) failed to delete during stack update:\n${details}\n` +
418
+ 'These resources are no longer managed by CloudFormation but still exist and may incur charges.';
419
+ if (allowDeleteFailures) {
420
+ logger.warning(message);
421
+ }
422
+ else {
423
+ throw new Error(message);
424
+ }
425
+ }
408
426
  // If there are any assertions
409
427
  // deploy the assertion stack as well
410
428
  // This is separate from the above deployment because we want to
@@ -497,4 +515,4 @@ class IntegTestRunner extends runner_base_1.IntegRunner {
497
515
  }
498
516
  }
499
517
  exports.IntegTestRunner = IntegTestRunner;
500
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWctdGVzdC1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlZy10ZXN0LXJ1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNkI7QUFFN0IsMEVBQWlFO0FBQ2pFLHFDQUFxQztBQUNyQyxvREFBNkQ7QUFDN0QsK0JBQStCO0FBQy9CLHlDQUF5QztBQUV6QywrQ0FBNEM7QUFFNUMsb0NBQW9DO0FBQ3BDLG9DQUErRjtBQUUvRiw4Q0FBMEY7QUFFMUY7Ozs7R0FJRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsbUJBQU0sQ0FBQyxHQUFHLEVBQUUsbUJBQU0sQ0FBQyxNQUFNLENBQVUsQ0FBQztBQUd6RDs7R0FFRztBQUNILFNBQVMsV0FBVyxDQUFDLEtBQWdCO0lBQ25DLE9BQVEsV0FBaUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQTBERDs7O0dBR0c7QUFDSCxNQUFhLGVBQWdCLFNBQVEseUJBQVc7SUFDOUMsWUFBWSxPQUEyQixFQUFFLGtCQUF3QztRQUMvRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7SUFDaEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXO1FBQ3RCLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JELHNEQUFzRDtRQUN0RCwwREFBMEQ7UUFDMUQsNERBQTREO1FBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksZUFBZSxDQUFDLElBQUksS0FBSyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3hFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxxREFBcUQ7Z0JBQ25GLHlCQUF5QjtnQkFDekIsZ0ZBQWdGLENBQ2pGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxlQUFlLENBQUMsU0FBUyxDQUFD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LFdBQW9CLEVBQUUsZUFBd0I7UUFDM0UsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixNQUFNLE9BQU8sR0FBSSxDQUFXLENBQUMsT0FBTyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO29CQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXJnQkQsMENBcWdCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgdHlwZSB7IERlc3Ryb3lPcHRpb25zLCBUZXN0Q2FzZSB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgeyBSZXF1aXJlQXBwcm92YWwgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0ICogYXMgY2hva2lkYXIgZnJvbSAnY2hva2lkYXInO1xuaW1wb3J0IHsgdHlwZSBFdmVudE5hbWUsIEVWRU5UUyB9IGZyb20gJ2Nob2tpZGFyL2hhbmRsZXIuanMnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMgd29ya2VycG9vbCBmcm9tICd3b3JrZXJwb29sJztcbmltcG9ydCB0eXBlIHsgSW50ZWdSdW5uZXJPcHRpb25zIH0gZnJvbSAnLi9ydW5uZXItYmFzZSc7XG5pbXBvcnQgeyBJbnRlZ1J1bm5lciB9IGZyb20gJy4vcnVubmVyLWJhc2UnO1xuaW1wb3J0IHR5cGUgKiBhcyBjZGsgZnJvbSAnLi4vZW5naW5lcy9jZGstaW50ZXJmYWNlJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgY2h1bmtzLCBleGVjLCBleGVjV2l0aFN1YlNoZWxsLCBwcm9taXNlV2l0aFJlc29sdmVycywgcmVuZGVyQ29tbWFuZCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgRGVzdHJ1Y3RpdmVDaGFuZ2UsIEFzc2VydGlvblJlc3VsdHMsIEFzc2VydGlvblJlc3VsdCB9IGZyb20gJy4uL3dvcmtlcnMvY29tbW9uJztcbmltcG9ydCB7IERpYWdub3N0aWNSZWFzb24sIGZvcm1hdEFzc2VydGlvblJlc3VsdHMsIGZvcm1hdEVycm9yIH0gZnJvbSAnLi4vd29ya2Vycy9jb21tb24nO1xuXG4vKipcbiAqIEZpbGUgZXZlbnRzIHRoYXQgd2UgY2FyZSBhYm91dCBmcm9tIGNob2tpZGFyLlxuICogSW4gY2hva2lkYXIgdjQsIEV2ZW50TmFtZSBpbmNsdWRlcyBhZGRpdGlvbmFsIGV2ZW50cyBsaWtlICdlcnJvcicsICdyYXcnLCAncmVhZHknLCAnYWxsJ1xuICogdGhhdCB3ZSBuZWVkIHRvIGZpbHRlciBvdXQgaW4gdGhlICdhbGwnIGhhbmRsZXIuXG4gKi9cbmNvbnN0IEZJTEVfRVZFTlRTID0gW0VWRU5UUy5BREQsIEVWRU5UUy5DSEFOR0VdIGFzIGNvbnN0O1xudHlwZSBGaWxlRXZlbnQgPSB0eXBlb2YgRklMRV9FVkVOVFNbbnVtYmVyXTtcblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIGV2ZW50IGlzIGEgZmlsZSBldmVudCB3ZSBzaG91bGQgcHJvY2Vzcy5cbiAqL1xuZnVuY3Rpb24gaXNGaWxlRXZlbnQoZXZlbnQ6IEV2ZW50TmFtZSk6IGV2ZW50IGlzIEZpbGVFdmVudCB7XG4gIHJldHVybiAoRklMRV9FVkVOVFMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKGV2ZW50KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0ZXN0IGNhc2VcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RDYXNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGV2ZWwgb2YgdmVyYm9zaXR5IGZvciBsb2dnaW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICByZWFkb25seSB2ZXJib3NpdHk/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hPcHRpb25zIGV4dGVuZHMgQ29tbW9uT3B0aW9ucyB7XG5cbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgaW50ZWdyYXRpb24gdGVzdCBydW5uZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5PcHRpb25zIGV4dGVuZHMgQ29tbW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBydW4gYGNkayBkZXN0cm95YCBhbmQgY2xlYW51cCB0aGVcbiAgICogaW50ZWdyYXRpb24gdGVzdCBzdGFja3MuXG4gICAqXG4gICAqIFNldCB0aGlzIHRvIGZhbHNlIGlmIHlvdSBuZWVkIHRvIHBlcmZvcm0gYW55IHZhbGlkYXRpb25cbiAgICogb3IgdHJvdWJsZXNob290aW5nIGFmdGVyIGRlcGxveW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNsZWFuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgc2V0IHRvIHRydWUsIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0IHdpbGwgbm90IGRlcGxveVxuICAgKiBhbnl0aGluZyBhbmQgd2lsbCBzaW1wbHkgdXBkYXRlIHRoZSBzbmFwc2hvdC5cbiAgICpcbiAgICogWW91IHNob3VsZCBOT1QgdXNlIHRoaXMgbWV0aG9kIHNpbmNlIHlvdSBhcmUgZXNzZW50aWFsbHlcbiAgICogYnlwYXNzaW5nIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZHJ5UnVuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBzZXQgdG8gZmFsc2UgdGhlbiB0aGUgc3RhY2sgdXBkYXRlIHdvcmtmbG93IHdpbGxcbiAgICogbm90IGJlIHJ1blxuICAgKlxuICAgKiBUaGUgdXBkYXRlIHdvcmtmbG93IGV4aXN0cyB0byBjaGVjayBmb3IgY2FzZXMgd2hlcmUgYSBjaGFuZ2Ugd291bGQgY2F1c2VcbiAgICogYSBmYWlsdXJlIHRvIGFuIGV4aXN0aW5nIHN0YWNrLCBidXQgbm90IGZvciBhIG5ld2x5IGNyZWF0ZWQgc3RhY2suXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZVdvcmtmbG93PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBbiBpbnRlZ3JhdGlvbiB0ZXN0IHJ1bm5lciB0aGF0IG9yY2hlc3RyYXRlcyBleGVjdXRpbmdcbiAqIGludGVncmF0aW9uIHRlc3RzXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlZ1Rlc3RSdW5uZXIgZXh0ZW5kcyBJbnRlZ1J1bm5lciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEludGVnUnVubmVyT3B0aW9ucywgZGVzdHJ1Y3RpdmVDaGFuZ2VzPzogRGVzdHJ1Y3RpdmVDaGFuZ2VbXSkge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIHRoaXMuX2Rlc3RydWN0aXZlQ2hhbmdlcyA9IGRlc3RydWN0aXZlQ2hhbmdlcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhY3R1YWxUZXN0cygpOiBQcm9taXNlPHsgW3Rlc3ROYW1lOiBzdHJpbmddOiBUZXN0Q2FzZSB9IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgYWN0dWFsVGVzdFN1aXRlID0gYXdhaXQgdGhpcy5hY3R1YWxUZXN0U3VpdGUoKTtcbiAgICAvLyBXZSBkb24ndCB3YW50IG5ldyB0ZXN0cyB3cml0dGVuIGluIHRoZSBsZWdhY3kgbW9kZS5cbiAgICAvLyBJZiB0aGVyZSBpcyBubyBleGlzdGluZyBzbmFwc2hvdCBfYW5kXyB0aGlzIGlzIGEgbGVnYWN5XG4gICAgLy8gdGVzdCB0aGVuIHBvaW50IHRoZSB1c2VyIHRvIHRoZSBuZXcgYEludGVnVGVzdGAgY29uc3RydWN0XG4gICAgaWYgKCF0aGlzLmhhc1NuYXBzaG90KCkgJiYgYWN0dWFsVGVzdFN1aXRlLnR5cGUgPT09ICdsZWdhY3ktdGVzdC1zdWl0ZScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLnRlc3ROYW1lfSBpcyBhIG5ldyB0ZXN0LiBQbGVhc2UgdXNlIHRoZSBJbnRlZ1Rlc3QgY29uc3RydWN0IGAgK1xuICAgICAgICAndG8gY29uZmlndXJlIHRoZSB0ZXN0XFxuJyArXG4gICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvdHJlZS9tYWluL3BhY2thZ2VzLyU0MGF3cy1jZGsvaW50ZWctdGVzdHMtYWxwaGEnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0dWFsVGVzdFN1aXRlLnRlc3RTdWl0ZTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVDZGtDb250ZXh0SnNvbigpOiB2b2lkIHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5jZGtDb250ZXh0UGF0aCkpIHtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5jZGtDb250ZXh0UGF0aCwgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB3YXRjaDogeyB9LFxuICAgICAgfSwgdW5kZWZpbmVkLCAyKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0cyB3aXRoIHRoZSB1cGRhdGUgcGF0aCB3b3JrZmxvd1xuICAgKiBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgc25hcHNob3QgdGhhdCBpcyBkZXBsb3llZCBpcyB0aGUgY3VycmVudCBzbmFwc2hvdFxuICAgKiBmcm9tIHRoZSB1cHN0cmVhbSBicmFuY2guIEluIG9yZGVyIHRvIGd1YXJhbnRlZSB0aGF0LCBmaXJzdCBjaGVja291dCB0aGUgbGF0ZXN0XG4gICAqICh0byB0aGUgdXNlcikgc25hcHNob3QgZnJvbSB1cHN0cmVhbVxuICAgKlxuICAgKiBJdCBpcyBub3Qgc3RyYWlnaHRmb3J3YXJkIHRvIGZpZ3VyZSBvdXQgd2hhdCBicmFuY2ggdGhlIGN1cnJlbnRcbiAgICogd29ya2luZyBicmFuY2ggd2FzIGNyZWF0ZWQgZnJvbS4gVGhpcyBpcyBhIGJlc3QgZWZmb3J0IGF0dGVtcHQgdG8gZG8gc28uXG4gICAqIFRoaXMgYXNzdW1lcyB0aGF0IHRoZXJlIGlzIGFuICdvcmlnaW4nLiBgZ2l0IHJlbW90ZSBzaG93IG9yaWdpbmAgcmV0dXJucyBhIGxpc3Qgb2ZcbiAgICogYWxsIGJyYW5jaGVzIGFuZCB3ZSB0aGVuIHNlYXJjaCBmb3Igb25lIHRoYXQgc3RhcnRzIHdpdGggYEhFQUQgYnJhbmNoOiBgXG4gICAqL1xuICBwcml2YXRlIGNoZWNrb3V0U25hcHNob3QoKTogdm9pZCB7XG4gICAgLy8gV2UgdXNlIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0aGUgc25hcHNob3QgdG8gcnVuIGdpdCBjb21tYW5kcyBpblxuICAgIC8vIFdlIGRvbid0IGNoYW5nZSB0aGUgY3dkIGZvciBleGVjdXRpbmcgZ2l0LCBidXQgaW5zdGVhZCB1c2UgdGhlIC1DIGZsYWdcbiAgICAvLyBAc2VlIGh0dHBzOi8vZ2l0LXNjbS5jb20vZG9jcy9naXQjRG9jdW1lbnRhdGlvbi9naXQudHh0LS1DbHRwYXRoZ3RcbiAgICAvLyBUaGlzIHdheSB3ZSBhcmUgZ3VhcmFudGVlZCB0byBvcGVyYXRlIHVuZGVyIHRoZSBjb3JyZWN0IGdpdCByZXBvLCBldmVuXG4gICAgLy8gd2hlbiBleGVjdXRpbmcgaW50ZWctcnVubmVyIGZyb20gb3V0c2lkZSB0aGUgcmVwbyB1bmRlciB0ZXN0LlxuICAgIGNvbnN0IGdpdEN3ZCA9IHBhdGguZGlybmFtZSh0aGlzLnNuYXBzaG90RGlyKTtcbiAgICBjb25zdCBnaXQgPSBbJ2dpdCcsICctQycsIGdpdEN3ZF07XG5cbiAgICAvLyBodHRwczovL2dpdC1zY20uY29tL2RvY3MvZ2l0LW1lcmdlLWJhc2VcbiAgICBsZXQgYmFzZUJyYW5jaDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIC8vIHRyeSB0byBmaW5kIHRoZSBiYXNlIGJyYW5jaCB0aGF0IHRoZSB3b3JraW5nIGJyYW5jaCB3YXMgY3JlYXRlZCBmcm9tXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9yaWdpbjogc3RyaW5nID0gZXhlYyhbLi4uZ2l0LCAncmVtb3RlJywgJ3Nob3cnLCAnb3JpZ2luJ10pO1xuICAgICAgY29uc3Qgb3JpZ2luTGluZXMgPSBvcmlnaW4uc3BsaXQoJ1xcbicpO1xuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIG9yaWdpbkxpbmVzKSB7XG4gICAgICAgIGlmIChsaW5lLnRyaW0oKS5zdGFydHNXaXRoKCdIRUFEIGJyYW5jaDogJykpIHtcbiAgICAgICAgICBiYXNlQnJhbmNoID0gbGluZS50cmltKCkuc3BsaXQoJ0hFQUQgYnJhbmNoOiAnKVsxXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci53YXJuaW5nKCclc1xcbiVzJyxcbiAgICAgICAgJ0NvdWxkIG5vdCBkZXRlcm1pbmUgZ2l0IG9yaWdpbiBicmFuY2guJyxcbiAgICAgICAgYFlvdSBuZWVkIHRvIG1hbnVhbGx5IGNoZWNrb3V0IHRoZSBzbmFwc2hvdCBkaXJlY3RvcnkgJHt0aGlzLnNuYXBzaG90RGlyfWAgK1xuICAgICAgICAnZnJvbSB0aGUgbWVyZ2UtYmFzZSAoaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1tZXJnZS1iYXNlKScsXG4gICAgICApO1xuICAgICAgbG9nZ2VyLndhcm5pbmcoJ2Vycm9yOiAlcycsIGZvcm1hdEVycm9yKGUpKTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBmb3VuZCB0aGUgYmFzZSBicmFuY2ggdGhlbiBnZXQgdGhlIG1lcmdlLWJhc2UgKG1vc3QgcmVjZW50IGNvbW1vbiBjb21taXQpXG4gICAgLy8gYW5kIGNoZWNrb3V0IHRoZSBzbmFwc2hvdCB1c2luZyB0aGF0IGNvbW1pdFxuICAgIGlmIChiYXNlQnJhbmNoKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZVNuYXBzaG90RGlyID0gcGF0aC5yZWxhdGl2ZShnaXRDd2QsIHRoaXMuc25hcHNob3REaXIpO1xuXG4gICAgICBjb25zdCBjaGVja291dENvbW1hbmQgPSBbLi4uZ2l0LCAnY2hlY2tvdXQnLCBbLi4uZ2l0LCAnbWVyZ2UtYmFzZScsICdIRUFEJywgYmFzZUJyYW5jaF0sICctLScsIHJlbGF0aXZlU25hcHNob3REaXJdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXhlY1dpdGhTdWJTaGVsbChjaGVja291dENvbW1hbmQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybmluZygnJXNcXG4lcycsXG4gICAgICAgICAgYENvdWxkIG5vdCBjaGVja291dCBzbmFwc2hvdCBkaXJlY3RvcnkgJyR7dGhpcy5zbmFwc2hvdERpcn0nLiBQbGVhc2UgdmVyaWZ5IHRoZSBmb2xsb3dpbmcgY29tbWFuZCBjb21wbGV0ZXMgY29ycmVjdGx5OmAsXG4gICAgICAgICAgcmVuZGVyQ29tbWFuZChjaGVja291dENvbW1hbmQpLFxuICAgICAgICAgICcnLFxuICAgICAgICApO1xuICAgICAgICBsb2dnZXIud2FybmluZygnZXJyb3I6ICVzJywgZm9ybWF0RXJyb3IoZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNkayBkZXBsb3kgLS13YXRjaCBmb3IgYW4gaW50ZWdyYXRpb24gdGVzdFxuICAgKlxuICAgKiBUaGlzIGlzIG1lYW50IHRvIGJlIHJ1biBvbiBhIHNpbmdsZSB0ZXN0IGFuZCB3aWxsIG5vdCBjcmVhdGUgYSBzbmFwc2hvdFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHdhdGNoSW50ZWdUZXN0KG9wdGlvbnM6IFdhdGNoT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFjdHVhbFRlc3RTdWl0ZSA9IGF3YWl0IHRoaXMuYWN0dWFsVGVzdFN1aXRlKCk7XG4gICAgY29uc3QgYWN0dWFsVGVzdENhc2UgPSBhY3R1YWxUZXN0U3VpdGUudGVzdFN1aXRlW29wdGlvbnMudGVzdENhc2VOYW1lXTtcbiAgICBpZiAoIWFjdHVhbFRlc3RDYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpZCBub3QgZmluZCB0ZXN0IGNhc2UgbmFtZSAnJHtvcHRpb25zLnRlc3RDYXNlTmFtZX0nIGluICcke09iamVjdC5rZXlzKGFjdHVhbFRlc3RTdWl0ZS50ZXN0U3VpdGUpfSdgKTtcbiAgICB9XG4gICAgY29uc3QgZW5hYmxlRm9yVmVyYm9zaXR5TGV2ZWwgPSAobmVlZGVkID0gMSkgPT4ge1xuICAgICAgY29uc3QgdmVyYm9zaXR5ID0gb3B0aW9ucy52ZXJib3NpdHkgPz8gMDtcbiAgICAgIHJldHVybiAodmVyYm9zaXR5ID49IG5lZWRlZCkgPyB0cnVlIDogdW5kZWZpbmVkO1xuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMud2F0Y2goXG4gICAgICAgIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRBcmdzLFxuICAgICAgICAgIGRlcGxveW1lbnRNZXRob2Q6IHtcbiAgICAgICAgICAgIG1ldGhvZDogJ2hvdHN3YXAnLFxuICAgICAgICAgICAgZmFsbGJhY2s6IHtcbiAgICAgICAgICAgICAgbWV0aG9kOiAnY2hhbmdlLXNldCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvZmlsZTogdGhpcy5wcm9maWxlLFxuICAgICAgICAgIHJlcXVpcmVBcHByb3ZhbDogUmVxdWlyZUFwcHJvdmFsLk5FVkVSLFxuICAgICAgICAgIHRyYWNlTG9nczogZW5hYmxlRm9yVmVyYm9zaXR5TGV2ZWwoMikgPz8gZmFsc2UsXG4gICAgICAgICAgdmVyYm9zZTogZW5hYmxlRm9yVmVyYm9zaXR5TGV2ZWwoMyksXG4gICAgICAgICAgZGVidWc6IGVuYWJsZUZvclZlcmJvc2l0eUxldmVsKDQpLFxuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zLnRlc3RDYXNlTmFtZSxcbiAgICAgICAgb3B0aW9ucy52ZXJib3NpdHkgPz8gMCxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3JjaGVzdHJhdGVzIHJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHMuIEN1cnJlbnRseSB0aGlzIGluY2x1ZGVzXG4gICAqXG4gICAqIDEuIChpZiB1cGRhdGUgd29ya2Zsb3cgaXMgZW5hYmxlZCkgRGVwbG95aW5nIHRoZSBzbmFwc2hvdCB0ZXN0IHN0YWNrc1xuICAgKiAyLiBEZXBsb3lpbmcgdGhlIGludGVncmF0aW9uIHRlc3Qgc3RhY2tzXG4gICAqIDIuIFNhdmluZyB0aGUgc25hcHNob3QgKGlmIHN1Y2Nlc3NmdWwpXG4gICAqIDMuIERlc3Ryb3lpbmcgdGhlIGludGVncmF0aW9uIHRlc3Qgc3RhY2tzIChpZiBjbGVhbj1mYWxzZSlcbiAgICpcbiAgICogVGhlIHVwZGF0ZSB3b3JrZmxvdyBleGlzdHMgdG8gY2hlY2sgZm9yIGNhc2VzIHdoZXJlIGEgY2hhbmdlIHdvdWxkIGNhdXNlXG4gICAqIGEgZmFpbHVyZSB0byBhbiBleGlzdGluZyBzdGFjaywgYnV0IG5vdCBmb3IgYSBuZXdseSBjcmVhdGVkIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJ1bkludGVnVGVzdENhc2Uob3B0aW9uczogUnVuT3B0aW9ucyk6IFByb21pc2U8QXNzZXJ0aW9uUmVzdWx0cyB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBhc3NlcnRpb25SZXN1bHRzOiBBc3NlcnRpb25SZXN1bHRzIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFjdHVhbFRlc3RTdWl0ZSA9IGF3YWl0IHRoaXMuYWN0dWFsVGVzdFN1aXRlKCk7XG4gICAgY29uc3QgYWN0dWFsVGVzdENhc2UgPSBhY3R1YWxUZXN0U3VpdGUudGVzdFN1aXRlW29wdGlvbnMudGVzdENhc2VOYW1lXTtcbiAgICBpZiAoIWFjdHVhbFRlc3RDYXNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERpZCBub3QgZmluZCB0ZXN0IGNhc2UgbmFtZSAnJHtvcHRpb25zLnRlc3RDYXNlTmFtZX0nIGluICcke09iamVjdC5rZXlzKGFjdHVhbFRlc3RTdWl0ZS50ZXN0U3VpdGUpfSdgKTtcbiAgICB9XG4gICAgY29uc3QgY2xlYW4gPSBvcHRpb25zLmNsZWFuID8/IHRydWU7XG4gICAgY29uc3QgdXBkYXRlV29ya2Zsb3dFbmFibGVkID0gKG9wdGlvbnMudXBkYXRlV29ya2Zsb3cgPz8gdHJ1ZSlcbiAgICAgICYmIChhY3R1YWxUZXN0Q2FzZS5zdGFja1VwZGF0ZVdvcmtmbG93ID8/IHRydWUpO1xuICAgIGNvbnN0IGVuYWJsZUZvclZlcmJvc2l0eUxldmVsID0gKG5lZWRlZCA9IDEpID0+IHtcbiAgICAgIGNvbnN0IHZlcmJvc2l0eSA9IG9wdGlvbnMudmVyYm9zaXR5ID8/IDA7XG4gICAgICByZXR1cm4gKHZlcmJvc2l0eSA+PSBuZWVkZWQpID8gdHJ1ZSA6IHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy5kcnlSdW4gJiYgKGFjdHVhbFRlc3RDYXNlLmNka0NvbW1hbmRPcHRpb25zPy5kZXBsb3k/LmVuYWJsZWQgPz8gdHJ1ZSkpIHtcbiAgICAgICAgYXNzZXJ0aW9uUmVzdWx0cyA9IGF3YWl0IHRoaXMuZGVwbG95KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdEFyZ3MsXG4gICAgICAgICAgICBwcm9maWxlOiB0aGlzLnByb2ZpbGUsXG4gICAgICAgICAgICByZXF1aXJlQXBwcm92YWw6IFJlcXVpcmVBcHByb3ZhbC5ORVZFUixcbiAgICAgICAgICAgIHZlcmJvc2U6IGVuYWJsZUZvclZlcmJvc2l0eUxldmVsKDMpLFxuICAgICAgICAgICAgZGVidWc6IGVuYWJsZUZvclZlcmJvc2l0eUxldmVsKDQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXBkYXRlV29ya2Zsb3dFbmFibGVkLFxuICAgICAgICAgIG9wdGlvbnMudGVzdENhc2VOYW1lLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBvbmx5IGNyZWF0ZSB0aGUgc25hcHNob3QgaWYgdGhlcmUgYXJlIG5vIGZhaWxlZCBhc3NlcnRpb24gcmVzdWx0c1xuICAgICAgLy8gKGkuZS4gbm8gZmFpbHVyZXMpXG4gICAgICBpZiAoIU9iamVjdC52YWx1ZXMoYXNzZXJ0aW9uUmVzdWx0cyA/PyB7fSkuc29tZShyZXN1bHQgPT4gcmVzdWx0LnN0YXR1cyA9PT0gJ2ZhaWwnKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZVNuYXBzaG90KCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKCFvcHRpb25zLmRyeVJ1bikge1xuICAgICAgICBpZiAoY2xlYW4gJiYgKGFjdHVhbFRlc3RDYXNlLmNka0NvbW1hbmRPcHRpb25zPy5kZXN0cm95Py5lbmFibGVkID8/IHRydWUpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5kZXN0cm95KG9wdGlvbnMudGVzdENhc2VOYW1lLCB7XG4gICAgICAgICAgICAuLi50aGlzLmRlZmF1bHRBcmdzLFxuICAgICAgICAgICAgcHJvZmlsZTogdGhpcy5wcm9maWxlLFxuICAgICAgICAgICAgYWxsOiB0cnVlLFxuICAgICAgICAgICAgZm9yY2U6IHRydWUsXG4gICAgICAgICAgICBhcHA6IHRoaXMuY2RrQXBwLFxuICAgICAgICAgICAgb3V0cHV0OiBwYXRoLnJlbGF0aXZlKHRoaXMuZGlyZWN0b3J5LCB0aGlzLmNka091dERpciksXG4gICAgICAgICAgICAuLi5hY3R1YWxUZXN0Q2FzZS5jZGtDb21tYW5kT3B0aW9ucz8uZGVzdHJveT8uYXJncyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHRoaXMuZ2V0Q29udGV4dChhY3R1YWxUZXN0Q2FzZS5jZGtDb21tYW5kT3B0aW9ucz8uZGVzdHJveT8uYXJncz8uY29udGV4dCksXG4gICAgICAgICAgICB2ZXJib3NlOiBlbmFibGVGb3JWZXJib3NpdHlMZXZlbCgzKSxcbiAgICAgICAgICAgIGRlYnVnOiBlbmFibGVGb3JWZXJib3NpdHlMZXZlbCg0KSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgfVxuICAgIHJldHVybiBhc3NlcnRpb25SZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYSBpbnRlZyB0ZXN0IGNhc2Ugc3RhY2sgZGVzdHJ1Y3Rpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZGVzdHJveSh0ZXN0Q2FzZU5hbWU6IHN0cmluZywgZGVzdHJveUFyZ3M6IERlc3Ryb3lPcHRpb25zKSB7XG4gICAgY29uc3QgYWN0dWFsVGVzdENhc2UgPSAoYXdhaXQgdGhpcy5hY3R1YWxUZXN0U3VpdGUoKSkudGVzdFN1aXRlW3Rlc3RDYXNlTmFtZV07XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhY3R1YWxUZXN0Q2FzZS5ob29rcz8ucHJlRGVzdHJveSkge1xuICAgICAgICBhY3R1YWxUZXN0Q2FzZS5ob29rcy5wcmVEZXN0cm95LmZvckVhY2goY21kID0+IHtcbiAgICAgICAgICBleGVjKGNodW5rcyhjbWQpLCB7XG4gICAgICAgICAgICBjd2Q6IHBhdGguZGlybmFtZSh0aGlzLnNuYXBzaG90RGlyKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmNkay5kZXN0cm95KHtcbiAgICAgICAgLi4uZGVzdHJveUFyZ3MsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGFjdHVhbFRlc3RDYXNlLmhvb2tzPy5wb3N0RGVzdHJveSkge1xuICAgICAgICBhY3R1YWxUZXN0Q2FzZS5ob29rcy5wb3N0RGVzdHJveS5mb3JFYWNoKGNtZCA9PiB7XG4gICAgICAgICAgZXhlYyhjaHVua3MoY21kKSwge1xuICAgICAgICAgICAgY3dkOiBwYXRoLmRpcm5hbWUodGhpcy5zbmFwc2hvdERpciksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMucGFyc2VFcnJvcihlLFxuICAgICAgICBhY3R1YWxUZXN0Q2FzZS5jZGtDb21tYW5kT3B0aW9ucz8uZGVzdHJveT8uZXhwZWN0RXJyb3IgPz8gZmFsc2UsXG4gICAgICAgIGFjdHVhbFRlc3RDYXNlLmNka0NvbW1hbmRPcHRpb25zPy5kZXN0cm95Py5leHBlY3RlZE1lc3NhZ2UsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2F0Y2gob3B0aW9uczogY2RrLldhdGNoT3B0aW9ucywgdGVzdENhc2VOYW1lOiBzdHJpbmcsIHZlcmJvc2l0eTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYWN0dWFsVGVzdFN1aXRlID0gYXdhaXQgdGhpcy5hY3R1YWxUZXN0U3VpdGUoKTtcbiAgICBjb25zdCBhY3R1YWxUZXN0Q2FzZSA9IGFjdHVhbFRlc3RTdWl0ZS50ZXN0U3VpdGVbdGVzdENhc2VOYW1lXTtcbiAgICBpZiAoYWN0dWFsVGVzdENhc2UuaG9va3M/LnByZURlcGxveSkge1xuICAgICAgYWN0dWFsVGVzdENhc2UuaG9va3MucHJlRGVwbG95LmZvckVhY2goY21kID0+IHtcbiAgICAgICAgZXhlYyhjaHVua3MoY21kKSwge1xuICAgICAgICAgIGN3ZDogcGF0aC5kaXJuYW1lKHRoaXMuc25hcHNob3REaXIpLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB3YXRjaEFyZ3MgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbG9va3VwczogYWN0dWFsVGVzdFN1aXRlLmVuYWJsZUxvb2t1cHMsXG4gICAgICBzdGFja3M6IFtcbiAgICAgICAgLi4uYWN0dWFsVGVzdENhc2Uuc3RhY2tzLFxuICAgICAgICAuLi5hY3R1YWxUZXN0Q2FzZS5hc3NlcnRpb25TdGFjayA/IFthY3R1YWxUZXN0Q2FzZS5hc3NlcnRpb25TdGFja10gOiBbXSxcbiAgICAgIF0sXG4gICAgICBvdXRwdXQ6IHBhdGgucmVsYXRpdmUodGhpcy5kaXJlY3RvcnksIHRoaXMuY2RrT3V0RGlyKSxcbiAgICAgIG91dHB1dHNGaWxlOiBwYXRoLnJlbGF0aXZlKHRoaXMuZGlyZWN0b3J5LCBwYXRoLmpvaW4odGhpcy5jZGtPdXREaXIsICdhc3NlcnRpb24tcmVzdWx0cy5qc29uJykpLFxuICAgICAgLi4uYWN0dWFsVGVzdENhc2U/LmNka0NvbW1hbmRPcHRpb25zPy5kZXBsb3k/LmFyZ3MsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIC4uLnRoaXMuZ2V0Q29udGV4dChhY3R1YWxUZXN0Q2FzZT8uY2RrQ29tbWFuZE9wdGlvbnM/LmRlcGxveT8uYXJncz8uY29udGV4dCksXG4gICAgICB9LFxuICAgICAgYXBwOiB0aGlzLmNka0FwcCxcbiAgICB9O1xuICAgIGNvbnN0IGRlc3Ryb3lNZXNzYWdlID0ge1xuICAgICAgYWRkaXRpb25hbE1lc3NhZ2VzOiBbXG4gICAgICAgICdBZnRlciB5b3UgYXJlIGRvbmUgeW91IG11c3QgbWFudWFsbHkgZGVzdHJveSB0aGUgZGVwbG95ZWQgc3RhY2tzJyxcbiAgICAgICAgYCAgJHtbXG4gICAgICAgICAgLi4ucHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiA/IFtgQVdTX1JFR0lPTj0ke3Byb2Nlc3MuZW52LkFXU19SRUdJT059YF0gOiBbXSxcbiAgICAgICAgICAnY2RrIGRlc3Ryb3knLFxuICAgICAgICAgIGAtYSAnJHt0aGlzLmNka0FwcH0nYCxcbiAgICAgICAgICB3YXRjaEFyZ3Muc3RhY2tzLmpvaW4oJyAnKSxcbiAgICAgICAgICBgLS1wcm9maWxlICR7d2F0Y2hBcmdzLnByb2ZpbGV9YCxcbiAgICAgICAgXS5qb2luKCcgJyl9YCxcbiAgICAgIF0sXG4gICAgfTtcbiAgICB3b3JrZXJwb29sLndvcmtlckVtaXQoZGVzdHJveU1lc3NhZ2UpO1xuICAgIGlmICh3YXRjaEFyZ3MudmVyYm9zZSkge1xuICAgICAgLy8gaWYgYC12dnZgIChvciBhYm92ZSkgaXMgdXNlZCB0aGVuIHByaW50IG91dCB0aGUgY29tbWFuZCB0aGF0IHdhcyB1c2VkXG4gICAgICAvLyB0aGlzIGFsbG93cyB1c2VycyB0byBtYW51YWxseSBydW4gdGhlIGNvbW1hbmRcbiAgICAgIHdvcmtlcnBvb2wud29ya2VyRW1pdCh7XG4gICAgICAgIGFkZGl0aW9uYWxNZXNzYWdlczogW1xuICAgICAgICAgICdSZXBybzonLFxuICAgICAgICAgIGAgICR7W1xuICAgICAgICAgICAgJ2NkayBzeW50aCcsXG4gICAgICAgICAgICBgLWEgJyR7dGhpcy5jZGtBcHB9J2AsXG4gICAgICAgICAgICBgLW8gJyR7dGhpcy5jZGtPdXREaXJ9J2AsXG4gICAgICAgICAgICAuLi5PYmplY3QuZW50cmllcyh0aGlzLmdldENvbnRleHQoKSkuZmxhdE1hcCgoW2ssIHZdKSA9PiB0eXBlb2YgdiAhPT0gJ29iamVjdCcgPyBbYC1jICcke2t9PSR7dn0nYF0gOiBbXSksXG4gICAgICAgICAgICB3YXRjaEFyZ3Muc3RhY2tzLmpvaW4oJyAnKSxcbiAgICAgICAgICAgIGAtLW91dHB1dHMtZmlsZSAke3dhdGNoQXJncy5vdXRwdXRzRmlsZX1gLFxuICAgICAgICAgICAgYC0tcHJvZmlsZSAke3dhdGNoQXJncy5wcm9maWxlfWAsXG4gICAgICAgICAgICAnLS1ob3Rzd2FwLWZhbGxiYWNrJyxcbiAgICAgICAgICBdLmpvaW4oJyAnKX1gLFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNzZXJ0aW9uUmVzdWx0cyA9IHBhdGguam9pbih0aGlzLmNka091dERpciwgJ2Fzc2VydGlvbi1yZXN1bHRzLmpzb24nKTtcbiAgICBjb25zdCB3YXRjaGVyID0gY2hva2lkYXIud2F0Y2goW3RoaXMuY2RrT3V0RGlyXSwge1xuICAgICAgY3dkOiB0aGlzLmRpcmVjdG9yeSxcbiAgICB9KTtcbiAgICB3YXRjaGVyLm9uKCdhbGwnLCAoZXZlbnQ6IEV2ZW50TmFtZSwgZmlsZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIWlzRmlsZUV2ZW50KGV2ZW50KSkge1xuICAgICAgICByZXR1cm47IC8vIElnbm9yZSBub24tZmlsZSBldmVudHMgbGlrZSAnZXJyb3InLCAncmF3JywgJ3JlYWR5JywgJ2FsbCdcbiAgICAgIH1cbiAgICAgIC8vIHdlIG9ubHkgY2FyZSBhYm91dCBjaGFuZ2VzIHRvIHRoZSBgYXNzZXJ0aW9uLXJlc3VsdHMuanNvbmAgZmlsZS4gSWYgdGhlcmVcbiAgICAgIC8vIGFyZSBhc3NlcnRpb25zIHRoZW4gdGhpcyB3aWxsIGNoYW5nZSBvbiBldmVyeSBkZXBsb3ltZW50XG4gICAgICBpZiAoYXNzZXJ0aW9uUmVzdWx0cy5lbmRzV2l0aChmaWxlKSAmJiAoZXZlbnQgPT09ICdhZGQnIHx8IGV2ZW50ID09PSAnY2hhbmdlJykpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICBpZiAoYWN0dWFsVGVzdENhc2UuaG9va3M/LnBvc3REZXBsb3kpIHtcbiAgICAgICAgICBhY3R1YWxUZXN0Q2FzZS5ob29rcy5wb3N0RGVwbG95LmZvckVhY2goY21kID0+IHtcbiAgICAgICAgICAgIGV4ZWMoY2h1bmtzKGNtZCksIHtcbiAgICAgICAgICAgICAgY3dkOiBwYXRoLmRpcm5hbWUodGhpcy5zbmFwc2hvdERpciksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhY3R1YWxUZXN0Q2FzZS5hc3NlcnRpb25TdGFjayAmJiBhY3R1YWxUZXN0Q2FzZS5hc3NlcnRpb25TdGFja05hbWUpIHtcbiAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLnByb2Nlc3NBc3NlcnRpb25SZXN1bHRzKFxuICAgICAgICAgICAgYXNzZXJ0aW9uUmVzdWx0cyxcbiAgICAgICAgICAgIGFjdHVhbFRlc3RDYXNlLmFzc2VydGlvblN0YWNrTmFtZSxcbiAgICAgICAgICAgIGFjdHVhbFRlc3RDYXNlLmFzc2VydGlvblN0YWNrLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHJlcyAmJiBPYmplY3QudmFsdWVzKHJlcykuc29tZShyID0+IHIuc3RhdHVzID09PSAnZmFpbCcpKSB7XG4gICAgICAgICAgICB3b3JrZXJwb29sLndvcmtlckVtaXQoe1xuICAgICAgICAgICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uQVNTRVJUSU9OX0ZBSUxFRCxcbiAgICAgICAgICAgICAgdGVzdE5hbWU6IGAke3Rlc3RDYXNlTmFtZX0gKCR7d2F0Y2hBcmdzLnByb2ZpbGV9YCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogZm9ybWF0QXNzZXJ0aW9uUmVzdWx0cyhyZXMpLFxuICAgICAgICAgICAgICBkdXJhdGlvbjogKERhdGUubm93KCkgLSBzdGFydCkgLyAxMDAwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdvcmtlcnBvb2wud29ya2VyRW1pdCh7XG4gICAgICAgICAgICAgIHJlYXNvbjogRGlhZ25vc3RpY1JlYXNvbi5URVNUX1NVQ0NFU1MsXG4gICAgICAgICAgICAgIHRlc3ROYW1lOiBgJHt0ZXN0Q2FzZU5hbWV9YCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogcmVzID8gZm9ybWF0QXNzZXJ0aW9uUmVzdWx0cyhyZXMpIDogJ05PIEFTU0VSVElPTlMnLFxuICAgICAgICAgICAgICBkdXJhdGlvbjogKERhdGUubm93KCkgLSBzdGFydCkgLyAxMDAwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVtaXQgdGhlIGRlc3Ryb3kgbWVzc2FnZSBhZnRlciBldmVyeSBydW5cbiAgICAgICAgICAvLyBzbyB0aGF0IGl0J3MgdmlzaWJsZSB0byB0aGUgdXNlclxuICAgICAgICAgIHdvcmtlcnBvb2wud29ya2VyRW1pdChkZXN0cm95TWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIHdhdGNoZXIub24oJ3JlYWR5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXNvbHZlKHt9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgeyBwcm9taXNlOiB3YWl0ZXIsIHJlc29sdmUgfSA9IHByb21pc2VXaXRoUmVzb2x2ZXJzPG51bWJlciB8IG51bGw+KCk7XG5cbiAgICBhd2FpdCB0aGlzLmNkay53YXRjaCh3YXRjaEFyZ3MsIHtcbiAgICAgIC8vIGlmIGAtdmAgKG9yIGFib3ZlKSBpcyBwYXNzZWQgdGhlbiBzdHJlYW0gdGhlIGxvZ3NcbiAgICAgIG9uU3Rkb3V0OiAobWVzc2FnZSkgPT4ge1xuICAgICAgICBpZiAodmVyYm9zaXR5ID4gMCkge1xuICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gaWYgYC12YCAob3IgYWJvdmUpIGlzIHBhc3NlZCB0aGVuIHN0cmVhbSB0aGUgbG9nc1xuICAgICAgb25TdGRlcnI6IChtZXNzYWdlKSA9PiB7XG4gICAgICAgIGlmICh2ZXJib3NpdHkgPiAwKSB7XG4gICAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkNsb3NlOiBhc3luYyAoY29kZSkgPT4ge1xuICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2F0Y2ggZXhpdGVkIHdpdGggZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB3YXRjaGVyLmNsb3NlKCk7XG4gICAgICAgIHJlc29sdmUoY29kZSk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgYXdhaXQgd2FpdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYSBpbnRlZyB0ZXN0IGNhc2UgZGVwbG95bWVudCwgaW5jbHVkaW5nXG4gICAqIHBlcmZvcm1pbmcgdGhlIHVwZGF0ZSB3b3JrZmxvd1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkZXBsb3koXG4gICAgZGVwbG95QXJnczogY2RrLkRlcGxveU9wdGlvbnMsXG4gICAgdXBkYXRlV29ya2Zsb3dFbmFibGVkOiBib29sZWFuLFxuICAgIHRlc3RDYXNlTmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPEFzc2VydGlvblJlc3VsdHMgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBhY3R1YWxUZXN0Q2FzZSA9IChhd2FpdCB0aGlzLmFjdHVhbFRlc3RTdWl0ZSgpKS50ZXN0U3VpdGVbdGVzdENhc2VOYW1lXTtcbiAgICB0cnkge1xuICAgICAgaWYgKGFjdHVhbFRlc3RDYXNlLmhvb2tzPy5wcmVEZXBsb3kpIHtcbiAgICAgICAgYWN0dWFsVGVzdENhc2UuaG9va3MucHJlRGVwbG95LmZvckVhY2goY21kID0+IHtcbiAgICAgICAgICBleGVjKGNodW5rcyhjbWQpLCB7XG4gICAgICAgICAgICBjd2Q6IHBhdGguZGlybmFtZSh0aGlzLnNuYXBzaG90RGlyKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgdXBkYXRlIHdvcmtmbG93IGlzIG5vdCBkaXNhYmxlZCwgZmlyc3RcbiAgICAgIC8vIHBlcmZvcm0gYSBkZXBsb3ltZW50IHdpdGggdGhlIGV4aXN0aW5nIHNuYXBzaG90XG4gICAgICAvLyB0aGVuIHBlcmZvcm0gYSBkZXBsb3ltZW50ICh3aGljaCB3aWxsIGJlIGEgc3RhY2sgdXBkYXRlKVxuICAgICAgLy8gd2l0aCB0aGUgY3VycmVudCBpbnRlZ3JhdGlvbiB0ZXN0XG4gICAgICAvLyBXZSBhbHNvIG9ubHkgd2FudCB0byBydW4gdGhlIHVwZGF0ZSB3b3JrZmxvdyBpZiB0aGVyZSBpcyBhbiBleGlzdGluZ1xuICAgICAgLy8gc25hcHNob3QgKG90aGVyd2lzZSB0aGVyZSBpcyBub3RoaW5nIHRvIHVwZGF0ZSlcbiAgICAgIGNvbnN0IGV4cGVjdGVkVGVzdFN1aXRlID0gYXdhaXQgdGhpcy5leHBlY3RlZFRlc3RTdWl0ZSgpO1xuICAgICAgaWYgKHVwZGF0ZVdvcmtmbG93RW5hYmxlZCAmJiB0aGlzLmhhc1NuYXBzaG90KCkgJiZcbiAgICAgICAgKGV4cGVjdGVkVGVzdFN1aXRlICYmIHRlc3RDYXNlTmFtZSBpbiBleHBlY3RlZFRlc3RTdWl0ZT8udGVzdFN1aXRlKSkge1xuICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIHNuYXBzaG90IGlzIHRoZSBsYXRlc3QgZnJvbSAnb3JpZ2luJ1xuICAgICAgICB0aGlzLmNoZWNrb3V0U25hcHNob3QoKTtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRUZXN0Q2FzZSA9IGV4cGVjdGVkVGVzdFN1aXRlLnRlc3RTdWl0ZVt0ZXN0Q2FzZU5hbWVdO1xuICAgICAgICBhd2FpdCB0aGlzLmNkay5kZXBsb3koe1xuICAgICAgICAgIC4uLmRlcGxveUFyZ3MsXG4gICAgICAgICAgc3RhY2tzOiBleHBlY3RlZFRlc3RDYXNlLnN0YWNrcyxcbiAgICAgICAgICAuLi5leHBlY3RlZFRlc3RDYXNlPy5jZGtDb21tYW5kT3B0aW9ucz8uZGVwbG95Py5hcmdzLFxuICAgICAgICAgIGNvbnRleHQ6IHRoaXMuZ2V0Q29udGV4dChleHBlY3RlZFRlc3RDYXNlPy5jZGtDb21tYW5kT3B0aW9ucz8uZGVwbG95Py5hcmdzPy5jb250ZXh0KSxcbiAgICAgICAgICBhcHA6IHBhdGgucmVsYXRpdmUodGhpcy5kaXJlY3RvcnksIHRoaXMuc25hcHNob3REaXIpLFxuICAgICAgICAgIGxvb2t1cHM6IGV4cGVjdGVkVGVzdFN1aXRlPy5lbmFibGVMb29rdXBzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIG5vdyBkZXBsb3kgdGhlIFwiYWN0dWFsXCIgdGVzdC5cbiAgICAgIGF3YWl0IHRoaXMuY2RrLmRlcGxveSh7XG4gICAgICAgIC4uLmRlcGxveUFyZ3MsXG4gICAgICAgIGxvb2t1cHM6IChhd2FpdCB0aGlzLmFjdHVhbFRlc3RTdWl0ZSgpKS5lbmFibGVMb29rdXBzLFxuICAgICAgICBzdGFja3M6IFtcbiAgICAgICAgICAuLi5hY3R1YWxUZXN0Q2FzZS5zdGFja3MsXG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dDogcGF0aC5yZWxhdGl2ZSh0aGlzLmRpcmVjdG9yeSwgdGhpcy5jZGtPdXREaXIpLFxuICAgICAgICAuLi5hY3R1YWxUZXN0Q2FzZT8uY2RrQ29tbWFuZE9wdGlvbnM/LmRlcGxveT8uYXJncyxcbiAgICAgICAgY29udGV4dDogdGhpcy5nZXRDb250ZXh0KGFjdHVhbFRlc3RDYXNlPy5jZGtDb21tYW5kT3B0aW9ucz8uZGVwbG95Py5hcmdzPy5jb250ZXh0KSxcbiAgICAgICAgYXBwOiB0aGlzLmNka0FwcCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGFzc2VydGlvbnNcbiAgICAgIC8vIGRlcGxveSB0aGUgYXNzZXJ0aW9uIHN0YWNrIGFzIHdlbGxcbiAgICAgIC8vIFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgYWJvdmUgZGVwbG95bWVudCBiZWNhdXNlIHdlIHdhbnQgdG9cbiAgICAgIC8vIHNldCBgcm9sbGJhY2s6IGZhbHNlYC4gVGhpcyBhbGxvd3MgdGhlIGFzc2VydGlvbiBzdGFjayB0byBkZXBsb3kgYWxsIHRoZVxuICAgICAgLy8gYXNzZXJ0aW9ucyBpbnN0ZWFkIG9mIGZhaWxpbmcgYXQgdGhlIGZpcnN0IGZhaWxlZCBhc3NlcnRpb25cbiAgICAgIC8vIGNvbWJpbmluZyBpdCB3aXRoIHRoZSBhYm92ZSBkZXBsb3ltZW50IHdvdWxkIHByZXZlbnQgYW55IHJlcGxhY2VtZW50IHVwZGF0ZXNcbiAgICAgIGlmIChhY3R1YWxUZXN0Q2FzZS5hc3NlcnRpb25TdGFjaykge1xuICAgICAgICBhd2FpdCB0aGlzLmNkay5kZXBsb3koe1xuICAgICAgICAgIC4uLmRlcGxveUFyZ3MsXG4gICAgICAgICAgbG9va3VwczogKGF3YWl0IHRoaXMuYWN0dWFsVGVzdFN1aXRlKCkpLmVuYWJsZUxvb2t1cHMsXG4gICAgICAgICAgc3RhY2tzOiBbXG4gICAgICAgICAgICBhY3R1YWxUZXN0Q2FzZS5hc3NlcnRpb25TdGFjayxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJvbGxiYWNrOiBmYWxzZSxcbiAgICAgICAgICBvdXRwdXQ6IHBhdGgucmVsYXRpdmUodGhpcy5kaXJlY3RvcnksIHRoaXMuY2RrT3V0RGlyKSxcbiAgICAgICAgICAuLi5hY3R1YWxUZXN0Q2FzZT8uY2RrQ29tbWFuZE9wdGlvbnM/LmRlcGxveT8uYXJncyxcbiAgICAgICAgICBvdXRwdXRzRmlsZTogcGF0aC5yZWxhdGl2ZSh0aGlzLmRpcmVjdG9yeSwgcGF0aC5qb2luKHRoaXMuY2RrT3V0RGlyLCAnYXNzZXJ0aW9uLXJlc3VsdHMuanNvbicpKSxcbiAgICAgICAgICBjb250ZXh0OiB0aGlzLmdldENvbnRleHQoYWN0dWFsVGVzdENhc2U/LmNka0NvbW1hbmRPcHRpb25zPy5kZXBsb3k/LmFyZ3M/LmNvbnRleHQpLFxuICAgICAgICAgIGFwcDogdGhpcy5jZGtBcHAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWN0dWFsVGVzdENhc2UuaG9va3M/LnBvc3REZXBsb3kpIHtcbiAgICAgICAgYWN0dWFsVGVzdENhc2UuaG9va3MucG9zdERlcGxveS5mb3JFYWNoKGNtZCA9PiB7XG4gICAgICAgICAgZXhlYyhjaHVua3MoY21kKSwge1xuICAgICAgICAgICAgY3dkOiBwYXRoLmRpcm5hbWUodGhpcy5zbmFwc2hvdERpciksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWN0dWFsVGVzdENhc2UuYXNzZXJ0aW9uU3RhY2sgJiYgYWN0dWFsVGVzdENhc2UuYXNzZXJ0aW9uU3RhY2tOYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBc3NlcnRpb25SZXN1bHRzKFxuICAgICAgICAgIHBhdGguam9pbih0aGlzLmNka091dERpciwgJ2Fzc2VydGlvbi1yZXN1bHRzLmpzb24nKSxcbiAgICAgICAgICBhY3R1YWxUZXN0Q2FzZS5hc3NlcnRpb25TdGFja05hbWUsXG4gICAgICAgICAgYWN0dWFsVGVzdENhc2UuYXNzZXJ0aW9uU3RhY2ssXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5wYXJzZUVycm9yKGUsXG4gICAgICAgIGFjdHVhbFRlc3RDYXNlLmNka0NvbW1hbmRPcHRpb25zPy5kZXBsb3k/LmV4cGVjdEVycm9yID8/IGZhbHNlLFxuICAgICAgICBhY3R1YWxUZXN0Q2FzZS5jZGtDb21tYW5kT3B0aW9ucz8uZGVwbG95Py5leHBlY3RlZE1lc3NhZ2UsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyB0aGUgb3V0cHV0c0ZpbGUgd2hpY2ggY29udGFpbnMgdGhlIGFzc2VydGlvbnMgcmVzdWx0cyBhcyBzdGFja1xuICAgKiBvdXRwdXRzXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NBc3NlcnRpb25SZXN1bHRzKGZpbGU6IHN0cmluZywgYXNzZXJ0aW9uU3RhY2tOYW1lOiBzdHJpbmcsIGFzc2VydGlvblN0YWNrSWQ6IHN0cmluZyk6IEFzc2VydGlvblJlc3VsdHMgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlc3VsdHM6IEFzc2VydGlvblJlc3VsdHMgPSB7fTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhmaWxlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0czogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH0gPSBmcy5yZWFkSlNPTlN5bmMoZmlsZSk7XG5cbiAgICAgICAgaWYgKGFzc2VydGlvblN0YWNrTmFtZSBpbiBvdXRwdXRzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBbYXNzZXJ0aW9uSWQsIHJlc3VsdF0gb2YgT2JqZWN0LmVudHJpZXMob3V0cHV0c1thc3NlcnRpb25TdGFja05hbWVdKSkge1xuICAgICAgICAgICAgaWYgKGFzc2VydGlvbklkLnN0YXJ0c1dpdGgoJ0Fzc2VydGlvblJlc3VsdHMnKSkge1xuICAgICAgICAgICAgICBjb25zdCBhc3NlcnRpb25SZXN1bHQ6IEFzc2VydGlvblJlc3VsdCA9IEpTT04ucGFyc2UocmVzdWx0LnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKSk7XG4gICAgICAgICAgICAgIGlmIChhc3NlcnRpb25SZXN1bHQuc3RhdHVzID09PSAnZmFpbCcgfHwgYXNzZXJ0aW9uUmVzdWx0LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0c1thc3NlcnRpb25JZF0gPSBhc3NlcnRpb25SZXN1bHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG91dHB1dHMsIGJ1dCB0aGV5IGNhbm5vdCBiZSBwcm9jZXNzZWQsIHRoZW4gdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgdGVzdCBmYWlsc1xuICAgICAgICByZXN1bHRzW2Fzc2VydGlvblN0YWNrSWRdID0ge1xuICAgICAgICAgIHN0YXR1czogJ2ZhaWwnLFxuICAgICAgICAgIG1lc3NhZ2U6IGBlcnJvciBwcm9jZXNzaW5nIGFzc2VydGlvbiByZXN1bHRzOiAke2V9YCxcbiAgICAgICAgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgb3V0cHV0cyBmaWxlIHNvIGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBzbmFwc2hvdFxuICAgICAgICAvLyBpdCB3aWxsIGNvbnRhaW4gZW52IHNwZWNpZmljIGluZm9ybWF0aW9uIGZyb20gdmFsdWVzXG4gICAgICAgIC8vIHJlc29sdmVkIGF0IGRlcGxveSB0aW1lXG4gICAgICAgIGZzLnVubGlua1N5bmMoZmlsZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXN1bHRzKS5sZW5ndGggPiAwID8gcmVzdWx0cyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gZXJyb3IgbWVzc2FnZSByZXR1cm5lZCBmcm9tIGEgQ0RLIGNvbW1hbmRcbiAgICovXG4gIHByaXZhdGUgcGFyc2VFcnJvcihlOiB1bmtub3duLCBleHBlY3RFcnJvcjogYm9vbGVhbiwgZXhwZWN0ZWRNZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgaWYgKGV4cGVjdEVycm9yKSB7XG4gICAgICBpZiAoZXhwZWN0ZWRNZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAoZSBhcyBFcnJvcikubWVzc2FnZTtcbiAgICAgICAgaWYgKCFtZXNzYWdlLm1hdGNoKGV4cGVjdGVkTWVzc2FnZSkpIHtcbiAgICAgICAgICB0aHJvdyAoZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
518
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWctdGVzdC1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnRlZy10ZXN0LXJ1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNkI7QUFFN0IsMEVBQWlFO0FBQ2pFLHFDQUFxQztBQUNyQyxvREFBNkQ7QUFDN0QsK0JBQStCO0FBQy9CLHlDQUF5QztBQUV6QywrQ0FBNEM7QUFFNUMsb0NBQW9DO0FBQ3BDLG9DQUErRjtBQUUvRiw4Q0FBMEY7QUFFMUY7Ozs7R0FJRztBQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsbUJBQU0sQ0FBQyxHQUFHLEVBQUUsbUJBQU0sQ0FBQyxNQUFNLENBQVUsQ0FBQztBQUd6RDs7R0FFRztBQUNILFNBQVMsV0FBVyxDQUFDLEtBQWdCO0lBQ25DLE9BQVEsV0FBaUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQWdGRDs7O0dBR0c7QUFDSCxNQUFhLGVBQWdCLFNBQVEseUJBQVc7SUFDOUMsWUFBWSxPQUEyQixFQUFFLGtCQUF3QztRQUMvRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7SUFDaEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXO1FBQ3RCLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JELHNEQUFzRDtRQUN0RCwwREFBMEQ7UUFDMUQsNERBQTREO1FBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksZUFBZSxDQUFDLElBQUksS0FBSyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3hFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxxREFBcUQ7Z0JBQ25GLHlCQUF5QjtnQkFDekIsZ0ZBQWdGLENBQ2pGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxlQUFlLENBQUMsU0FBUyxDQUFD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QUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7b0JBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDWixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxDQUFDLENBQUM7UUFDVixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBMWhCRCwwQ0EwaEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB0eXBlIHsgRGVzdHJveU9wdGlvbnMsIFRlc3RDYXNlIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB7IFJlcXVpcmVBcHByb3ZhbCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBjaG9raWRhciBmcm9tICdjaG9raWRhcic7XG5pbXBvcnQgeyB0eXBlIEV2ZW50TmFtZSwgRVZFTlRTIH0gZnJvbSAnY2hva2lkYXIvaGFuZGxlci5qcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgKiBhcyB3b3JrZXJwb29sIGZyb20gJ3dvcmtlcnBvb2wnO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1J1bm5lck9wdGlvbnMgfSBmcm9tICcuL3J1bm5lci1iYXNlJztcbmltcG9ydCB7IEludGVnUnVubmVyIH0gZnJvbSAnLi9ydW5uZXItYmFzZSc7XG5pbXBvcnQgdHlwZSAqIGFzIGNkayBmcm9tICcuLi9lbmdpbmVzL2Nkay1pbnRlcmZhY2UnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBjaHVua3MsIGV4ZWMsIGV4ZWNXaXRoU3ViU2hlbGwsIHByb21pc2VXaXRoUmVzb2x2ZXJzLCByZW5kZXJDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBEZXN0cnVjdGl2ZUNoYW5nZSwgQXNzZXJ0aW9uUmVzdWx0cywgQXNzZXJ0aW9uUmVzdWx0IH0gZnJvbSAnLi4vd29ya2Vycy9jb21tb24nO1xuaW1wb3J0IHsgRGlhZ25vc3RpY1JlYXNvbiwgZm9ybWF0QXNzZXJ0aW9uUmVzdWx0cywgZm9ybWF0RXJyb3IgfSBmcm9tICcuLi93b3JrZXJzL2NvbW1vbic7XG5cbi8qKlxuICogRmlsZSBldmVudHMgdGhhdCB3ZSBjYXJlIGFib3V0IGZyb20gY2hva2lkYXIuXG4gKiBJbiBjaG9raWRhciB2NCwgRXZlbnROYW1lIGluY2x1ZGVzIGFkZGl0aW9uYWwgZXZlbnRzIGxpa2UgJ2Vycm9yJywgJ3JhdycsICdyZWFkeScsICdhbGwnXG4gKiB0aGF0IHdlIG5lZWQgdG8gZmlsdGVyIG91dCBpbiB0aGUgJ2FsbCcgaGFuZGxlci5cbiAqL1xuY29uc3QgRklMRV9FVkVOVFMgPSBbRVZFTlRTLkFERCwgRVZFTlRTLkNIQU5HRV0gYXMgY29uc3Q7XG50eXBlIEZpbGVFdmVudCA9IHR5cGVvZiBGSUxFX0VWRU5UU1tudW1iZXJdO1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gZXZlbnQgaXMgYSBmaWxlIGV2ZW50IHdlIHNob3VsZCBwcm9jZXNzLlxuICovXG5mdW5jdGlvbiBpc0ZpbGVFdmVudChldmVudDogRXZlbnROYW1lKTogZXZlbnQgaXMgRmlsZUV2ZW50IHtcbiAgcmV0dXJuIChGSUxFX0VWRU5UUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMoZXZlbnQpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRlc3QgY2FzZVxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdENhc2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsZXZlbCBvZiB2ZXJib3NpdHkgZm9yIGxvZ2dpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHJlYWRvbmx5IHZlcmJvc2l0eT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXYXRjaE9wdGlvbnMgZXh0ZW5kcyBDb21tb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIEFSTiBvZiB0aGUgSUFNIHJvbGUgZm9yIENsb3VkRm9ybWF0aW9uIHRvIGFzc3VtZSBkdXJpbmcgZGVwbG95L2Rlc3Ryb3lcbiAgICpcbiAgICogQGRlZmF1bHQgLSB1c2UgdGhlIGJvb3RzdHJhcCBjZm4tZXhlYyByb2xlXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0IHJ1bm5lclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bk9wdGlvbnMgZXh0ZW5kcyBDb21tb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHJ1biBgY2RrIGRlc3Ryb3lgIGFuZCBjbGVhbnVwIHRoZVxuICAgKiBpbnRlZ3JhdGlvbiB0ZXN0IHN0YWNrcy5cbiAgICpcbiAgICogU2V0IHRoaXMgdG8gZmFsc2UgaWYgeW91IG5lZWQgdG8gcGVyZm9ybSBhbnkgdmFsaWRhdGlvblxuICAgKiBvciB0cm91Ymxlc2hvb3RpbmcgYWZ0ZXIgZGVwbG95bWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2xlYW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGludGVncmF0aW9uIHRlc3Qgd2lsbCBub3QgZGVwbG95XG4gICAqIGFueXRoaW5nIGFuZCB3aWxsIHNpbXBseSB1cGRhdGUgdGhlIHNuYXBzaG90LlxuICAgKlxuICAgKiBZb3Ugc2hvdWxkIE5PVCB1c2UgdGhpcyBtZXRob2Qgc2luY2UgeW91IGFyZSBlc3NlbnRpYWxseVxuICAgKiBieXBhc3NpbmcgdGhlIGludGVncmF0aW9uIHRlc3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkcnlSdW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiB0aGlzIGlzIHNldCB0byBmYWxzZSB0aGVuIHRoZSBzdGFjayB1cGRhdGUgd29ya2Zsb3cgd2lsbFxuICAgKiBub3QgYmUgcnVuXG4gICAqXG4gICAqIFRoZSB1cGRhdGUgd29ya2Zsb3cgZXhpc3RzIHRvIGNoZWNrIGZvciBjYXNlcyB3aGVyZSBhIGNoYW5nZSB3b3VsZCBjYXVzZVxuICAgKiBhIGZhaWx1cmUgdG8gYW4gZXhpc3Rpbmcgc3RhY2ssIGJ1dCBub3QgZm9yIGEgbmV3bHkgY3JlYXRlZCBzdGFjay5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlV29ya2Zsb3c/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBUk4gb2YgdGhlIElBTSByb2xlIGZvciBDbG91ZEZvcm1hdGlvbiB0byBhc3N1bWUgZHVyaW5nIGRlcGxveS9kZXN0cm95XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdXNlIHRoZSBib290c3RyYXAgY2ZuLWV4ZWMgcm9sZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyByZXNvdXJjZXMgdGhhdCBmYWlsIHRvIGRlbGV0ZSBkdXJpbmcgYSBzdGFjayB1cGRhdGUuXG4gICAqXG4gICAqIFdoZW4gZmFsc2UsIHRoZSB0ZXN0IHdpbGwgZmFpbCBpZiBDbG91ZEZvcm1hdGlvbiBza2lwcyBkZWxldGluZyBhIHJlc291cmNlXG4gICAqIGR1cmluZyBhIHN0YWNrIHVwZGF0ZS4gV2hlbiB0cnVlLCBvbmx5IGEgd2FybmluZyBpcyBwcmludGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dEZWxldGVGYWlsdXJlcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQW4gaW50ZWdyYXRpb24gdGVzdCBydW5uZXIgdGhhdCBvcmNoZXN0cmF0ZXMgZXhlY3V0aW5nXG4gKiBpbnRlZ3JhdGlvbiB0ZXN0c1xuICovXG5leHBvcnQgY2xhc3MgSW50ZWdUZXN0UnVubmVyIGV4dGVuZHMgSW50ZWdSdW5uZXIge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJbnRlZ1J1bm5lck9wdGlvbnMsIGRlc3RydWN0aXZlQ2hhbmdlcz86IERlc3RydWN0aXZlQ2hhbmdlW10pIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICB0aGlzLl9kZXN0cnVjdGl2ZUNoYW5nZXMgPSBkZXN0cnVjdGl2ZUNoYW5nZXM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWN0dWFsVGVzdHMoKTogUHJvbWlzZTx7IFt0ZXN0TmFtZTogc3RyaW5nXTogVGVzdENhc2UgfSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGFjdHVhbFRlc3RTdWl0ZSA9IGF3YWl0IHRoaXMuYWN0dWFsVGVzdFN1aXRlKCk7XG4gICAgLy8gV2UgZG9uJ3Qgd2FudCBuZXcgdGVzdHMgd3JpdHRlbiBpbiB0aGUgbGVnYWN5IG1vZGUuXG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gZXhpc3Rpbmcgc25hcHNob3QgX2FuZF8gdGhpcyBpcyBhIGxlZ2FjeVxuICAgIC8vIHRlc3QgdGhlbiBwb2ludCB0aGUgdXNlciB0byB0aGUgbmV3IGBJbnRlZ1Rlc3RgIGNvbnN0cnVjdFxuICAgIGlmICghdGhpcy5oYXNTbmFwc2hvdCgpICYmIGFjdHVhbFRlc3RTdWl0ZS50eXBlID09PSAnbGVnYWN5LXRlc3Qtc3VpdGUnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy50ZXN0TmFtZX0gaXMgYSBuZXcgdGVzdC4gUGxlYXNlIHVzZSB0aGUgSW50ZWdUZXN0IGNvbnN0cnVjdCBgICtcbiAgICAgICAgJ3RvIGNvbmZpZ3VyZSB0aGUgdGVzdFxcbicgK1xuICAgICAgICAnaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL3RyZWUvbWFpbi9wYWNrYWdlcy8lNDBhd3MtY2RrL2ludGVnLXRlc3RzLWFscGhhJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdHVhbFRlc3RTdWl0ZS50ZXN0U3VpdGU7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQ2RrQ29udGV4dEpzb24oKTogdm9pZCB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuY2RrQ29udGV4dFBhdGgpKSB7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuY2RrQ29udGV4dFBhdGgsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgd2F0Y2g6IHsgfSxcbiAgICAgIH0sIHVuZGVmaW5lZCwgMikpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHMgd2l0aCB0aGUgdXBkYXRlIHBhdGggd29ya2Zsb3dcbiAgICogaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIHNuYXBzaG90IHRoYXQgaXMgZGVwbG95ZWQgaXMgdGhlIGN1cnJlbnQgc25hcHNob3RcbiAgICogZnJvbSB0aGUgdXBzdHJlYW0gYnJhbmNoLiBJbiBvcmRlciB0byBndWFyYW50ZWUgdGhhdCwgZmlyc3QgY2hlY2tvdXQgdGhlIGxhdGVzdFxuICAgKiAodG8gdGhlIHVzZXIpIHNuYXBzaG90IGZyb20gdXBzdHJlYW1cbiAgICpcbiAgICogSXQgaXMgbm90IHN0cmFpZ2h0Zm9yd2FyZCB0byBmaWd1cmUgb3V0IHdoYXQgYnJhbmNoIHRoZSBjdXJyZW50XG4gICAqIHdvcmtpbmcgYnJhbmNoIHdhcyBjcmVhdGVkIGZyb20uIFRoaXMgaXMgYSBiZXN0IGVmZm9ydCBhdHRlbXB0IHRvIGRvIHNvLlxuICAgKiBUaGlzIGFzc3VtZXMgdGhhdCB0aGVyZSBpcyBhbiAnb3JpZ2luJy4gYGdpdCByZW1vdGUgc2hvdyBvcmlnaW5gIHJldHVybnMgYSBsaXN0IG9mXG4gICAqIGFsbCBicmFuY2hlcyBhbmQgd2UgdGhlbiBzZWFyY2ggZm9yIG9uZSB0aGF0IHN0YXJ0cyB3aXRoIGBIRUFEIGJyYW5jaDogYFxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja291dFNuYXBzaG90KCk6IHZvaWQge1xuICAgIC8vIFdlIHVzZSB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIHNuYXBzaG90IHRvIHJ1biBnaXQgY29tbWFuZHMgaW5cbiAgICAvLyBXZSBkb24ndCBjaGFuZ2UgdGhlIGN3ZCBmb3IgZXhlY3V0aW5nIGdpdCwgYnV0IGluc3RlYWQgdXNlIHRoZSAtQyBmbGFnXG4gICAgLy8gQHNlZSBodHRwczovL2dpdC1zY20uY29tL2RvY3MvZ2l0I0RvY3VtZW50YXRpb24vZ2l0LnR4dC0tQ2x0cGF0aGd0XG4gICAgLy8gVGhpcyB3YXkgd2UgYXJlIGd1YXJhbnRlZWQgdG8gb3BlcmF0ZSB1bmRlciB0aGUgY29ycmVjdCBnaXQgcmVwbywgZXZlblxuICAgIC8vIHdoZW4gZXhlY3V0aW5nIGludGVnLXJ1bm5lciBmcm9tIG91dHNpZGUgdGhlIHJlcG8gdW5kZXIgdGVzdC5cbiAgICBjb25zdCBnaXRDd2QgPSBwYXRoLmRpcm5hbWUodGhpcy5zbmFwc2hvdERpcik7XG4gICAgY29uc3QgZ2l0ID0gWydnaXQnLCAnLUMnLCBnaXRDd2RdO1xuXG4gICAgLy8gaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1tZXJnZS1iYXNlXG4gICAgbGV0IGJhc2VCcmFuY2g6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAvLyB0cnkgdG8gZmluZCB0aGUgYmFzZSBicmFuY2ggdGhhdCB0aGUgd29ya2luZyBicmFuY2ggd2FzIGNyZWF0ZWQgZnJvbVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcmlnaW46IHN0cmluZyA9IGV4ZWMoWy4uLmdpdCwgJ3JlbW90ZScsICdzaG93JywgJ29yaWdpbiddKTtcbiAgICAgIGNvbnN0IG9yaWdpbkxpbmVzID0gb3JpZ2luLnNwbGl0KCdcXG4nKTtcbiAgICAgIGZvciAoY29uc3QgbGluZSBvZiBvcmlnaW5MaW5lcykge1xuICAgICAgICBpZiAobGluZS50cmltKCkuc3RhcnRzV2l0aCgnSEVBRCBicmFuY2g6ICcpKSB7XG4gICAgICAgICAgYmFzZUJyYW5jaCA9IGxpbmUudHJpbSgpLnNwbGl0KCdIRUFEIGJyYW5jaDogJylbMV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIud2FybmluZygnJXNcXG4lcycsXG4gICAgICAgICdDb3VsZCBub3QgZGV0ZXJtaW5lIGdpdCBvcmlnaW4gYnJhbmNoLicsXG4gICAgICAgIGBZb3UgbmVlZCB0byBtYW51YWxseSBjaGVja291dCB0aGUgc25hcHNob3QgZGlyZWN0b3J5ICR7dGhpcy5zbmFwc2hvdERpcn1gICtcbiAgICAgICAgJ2Zyb20gdGhlIG1lcmdlLWJhc2UgKGh0dHBzOi8vZ2l0LXNjbS5jb20vZG9jcy9naXQtbWVyZ2UtYmFzZSknLFxuICAgICAgKTtcbiAgICAgIGxvZ2dlci53YXJuaW5nKCdlcnJvcjogJXMnLCBmb3JtYXRFcnJvcihlKSk7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgZm91bmQgdGhlIGJhc2UgYnJhbmNoIHRoZW4gZ2V0IHRoZSBtZXJnZS1iYXNlIChtb3N0IHJlY2VudCBjb21tb24gY29tbWl0KVxuICAgIC8vIGFuZCBjaGVja291dCB0aGUgc25hcHNob3QgdXNpbmcgdGhhdCBjb21taXRcbiAgICBpZiAoYmFzZUJyYW5jaCkge1xuICAgICAgY29uc3QgcmVsYXRpdmVTbmFwc2hvdERpciA9IHBhdGgucmVsYXRpdmUoZ2l0Q3dkLCB0aGlzLnNuYXBzaG90RGlyKTtcblxuICAgICAgY29uc3QgY2hlY2tvdXRDb21tYW5kID0gWy4uLmdpdCwgJ2NoZWNrb3V0JywgWy4uLmdpdCwgJ21lcmdlLWJhc2UnLCAnSEVBRCcsIGJhc2VCcmFuY2hdLCAnLS0nLCByZWxhdGl2ZVNuYXBzaG90RGlyXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV4ZWNXaXRoU3ViU2hlbGwoY2hlY2tvdXRDb21tYW5kKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLndhcm5pbmcoJyVzXFxuJXMnLFxuICAgICAgICAgIGBDb3VsZCBub3QgY2hlY2tvdXQgc25hcHNob3QgZGlyZWN0b3J5ICcke3RoaXMuc25hcHNob3REaXJ9Jy4gUGxlYXNlIHZlcmlmeSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgY29tcGxldGVzIGNvcnJlY3RseTpgLFxuICAgICAgICAgIHJlbmRlckNvbW1hbmQoY2hlY2tvdXRDb21tYW5kKSxcbiAgICAgICAgICAnJyxcbiAgICAgICAgKTtcbiAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ2Vycm9yOiAlcycsIGZvcm1hdEVycm9yKGUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBjZGsgZGVwbG95IC0td2F0Y2ggZm9yIGFuIGludGVncmF0aW9uIHRlc3RcbiAgICpcbiAgICogVGhpcyBpcyBtZWFudCB0byBiZSBydW4gb24gYSBzaW5nbGUgdGVzdCBhbmQgd2lsbCBub3QgY3JlYXRlIGEgc25hcHNob3RcbiAgICovXG4gIHB1YmxpYyBhc3luYyB3YXRjaEludGVnVGVzdChvcHRpb25zOiBXYXRjaE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhY3R1YWxUZXN0U3VpdGUgPSBhd2FpdCB0aGlzLmFjdHVhbFRlc3RTdWl0ZSgpO1xuICAgIGNvbnN0IGFjdHVhbFRlc3RDYXNlID0gYWN0dWFsVGVzdFN1aXRlLnRlc3RTdWl0ZVtvcHRpb25zLnRlc3RDYXNlTmFtZV07XG4gICAgaWYgKCFhY3R1YWxUZXN0Q2FzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGZpbmQgdGVzdCBjYXNlIG5hbWUgJyR7b3B0aW9ucy50ZXN0Q2FzZU5hbWV9JyBpbiAnJHtPYmplY3Qua2V5cyhhY3R1YWxUZXN0U3VpdGUudGVzdFN1aXRlKX0nYCk7XG4gICAgfVxuICAgIGNvbnN0IGVuYWJsZUZvclZlcmJvc2l0eUxldmVsID0gKG5lZWRlZCA9IDEpID0+IHtcbiAgICAgIGNvbnN0IHZlcmJvc2l0eSA9IG9wdGlvbnMudmVyYm9zaXR5ID8/IDA7XG4gICAgICByZXR1cm4gKHZlcmJvc2l0eSA+PSBuZWVkZWQpID8gdHJ1ZSA6IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLndhdGNoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4udGhpcy5kZWZhdWx0QXJncyxcbiAgICAgICAgICBkZXBsb3ltZW50TWV0aG9kOiB7XG4gICAgICAgICAgICBtZXRob2Q6ICdob3Rzd2FwJyxcbiAgICAgICAgICAgIGZhbGxiYWNrOiB7XG4gICAgICAgICAgICAgIG1ldGhvZDogJ2NoYW5nZS1zZXQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByb2ZpbGU6IHRoaXMucHJvZmlsZSxcbiAgICAgICAgICByZXF1aXJlQXBwcm92YWw6IFJlcXVpcmVBcHByb3ZhbC5ORVZFUixcbiAgICAgICAgICB0cmFjZUxvZ3M6IGVuYWJsZUZvclZlcmJvc2l0eUxldmVsKDIpID8/IGZhbHNlLFxuICAgICAgICAgIHZlcmJvc2U6IGVuYWJsZUZvclZlcmJvc2l0eUxldmVsKDMpLFxuICAgICAgICAgIGRlYnVnOiBlbmFibGVGb3JWZXJib3NpdHlMZXZlbCg0KSxcbiAgICAgICAgICByb2xlQXJuOiBvcHRpb25zLnJvbGVBcm4sXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnMudGVzdENhc2VOYW1lLFxuICAgICAgICBvcHRpb25zLnZlcmJvc2l0eSA/PyAwLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcmNoZXN0cmF0ZXMgcnVubmluZyBpbnRlZ3JhdGlvbiB0ZXN0cy4gQ3VycmVudGx5IHRoaXMgaW5jbHVkZXNcbiAgICpcbiAgICogMS4gKGlmIHVwZGF0ZSB3b3JrZmxvdyBpcyBlbmFibGVkKSBEZXBsb3lpbmcgdGhlIHNuYXBzaG90IHRlc3Qgc3RhY2tzXG4gICAqIDIuIERlcGxveWluZyB0aGUgaW50ZWdyYXRpb24gdGVzdCBzdGFja3NcbiAgICogMi4gU2F2aW5nIHRoZSBzbmFwc2hvdCAoaWYgc3VjY2Vzc2Z1bClcbiAgICogMy4gRGVzdHJveWluZyB0aGUgaW50ZWdyYXRpb24gdGVzdCBzdGFja3MgKGlmIGNsZWFuPWZhbHNlKVxuICAgKlxuICAgKiBUaGUgdXBkYXRlIHdvcmtmbG93IGV4aXN0cyB0byBjaGVjayBmb3IgY2FzZXMgd2hlcmUgYSBjaGFuZ2Ugd291bGQgY2F1c2VcbiAgICogYSBmYWlsdXJlIHRvIGFuIGV4aXN0aW5nIHN0YWNrLCBidXQgbm90IGZvciBhIG5ld2x5IGNyZWF0ZWQgc3RhY2suXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcnVuSW50ZWdUZXN0Q2FzZShvcHRpb25zOiBSdW5PcHRpb25zKTogUHJvbWlzZTxBc3NlcnRpb25SZXN1bHRzIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGFzc2VydGlvblJlc3VsdHM6IEFzc2VydGlvblJlc3VsdHMgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgYWN0dWFsVGVzdFN1aXRlID0gYXdhaXQgdGhpcy5hY3R1YWxUZXN0U3VpdGUoKTtcbiAgICBjb25zdCBhY3R1YWxUZXN0Q2FzZSA9IGFjdHVhbFRlc3RTdWl0ZS50ZXN0U3VpdGVbb3B0aW9ucy50ZXN0Q2FzZU5hbWVdO1xuICAgIGlmICghYWN0dWFsVGVzdENhc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlkIG5vdCBmaW5kIHRlc3QgY2FzZSBuYW1lICcke29wdGlvbnMudGVzdENhc2VOYW1lfScgaW4gJyR7T2JqZWN0LmtleXMoYWN0dWFsVGVzdFN1aXRlLnRlc3RTdWl0ZSl9J2ApO1xuICAgIH1cbiAgICBjb25zdCBjbGVhbiA9IG9wdGlvbnMuY2xlYW4gPz8gdHJ1ZTtcbiAgICBjb25zdCB1cGRhdGVXb3JrZmxvd0VuYWJsZWQgPSAob3B0aW9ucy51cGRhdGVXb3JrZmxvdyA/PyB0cnVlKVxuICAgICAgJiYgKGFjdHVhbFRlc3RDYXNlLnN0YWNrVXBkYXRlV29ya2Zsb3cgPz8gdHJ1ZSk7XG4gICAgY29uc3QgYWxsb3dEZWxldGVGYWlsdXJlcyA9IGFjdHVhbFRlc3RDYXNlLmFsbG93RGVsZXRlRmFpbHVyZXMgPz8gb3B0aW9ucy5hbGxvd0RlbGV0ZUZhaWx1cmVzID8/IGZhbHNlO1xuICAgIGNvbnN0IGVuYWJsZUZvclZlcmJvc2l0eUxldmVsID0gKG5lZWRlZCA9IDEpID0+IHtcbiAgICAgIGNvbnN0IHZlcmJvc2l0eSA9IG9wdGlvbnMudmVyYm9zaXR5ID8/IDA7XG4gICAgICByZXR1cm4gKHZlcmJvc2l0eSA+PSBuZWVkZWQpID8gdHJ1ZSA6IHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy5kcnlSdW4gJiYgKGFjdHVhbFRlc3RDYXNlLmNka0NvbW1hbmRPcHRpb25zPy5kZXBsb3k/LmVuYWJsZWQgPz8gdHJ1ZSkpIHtcbiAgICAgICAgYXNzZXJ0aW9uUmVzdWx0cyA9IGF3YWl0IHRoaXMuZGVwbG95KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdEFyZ3MsXG4gICAgICAgICAgICBwcm9maWxlOiB0aGlzLnByb2ZpbGUsXG4gICAgICAgICAgICByZXF1aXJlQXBwcm92YWw6IFJlcXVpcmVBcHByb3ZhbC5ORVZFUixcbiAgICAgICAgICAgIHZlcmJvc2U6IGVuYWJsZUZvclZlcmJvc2l0eUxldmVsKDMpLFxuICAgICAgICAgICAgZGVidWc6IGVuYWJsZUZvclZlcmJvc2l0eUxldmVsKDQpLFxuICAgICAgICAgICAgcm9sZUFybjogb3B0aW9ucy5yb2xlQXJuLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXBkYXRlV29ya2Zsb3dFbmFibGVkLFxuICAgICAgICAgIG9wdGlvbnMudGVzdENhc2VOYW1lLFxuICAgICAgICAgIGFsbG93RGVsZXRlRmFpbHVyZXMsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIG9ubHkgY3JlYXRlIHRoZSBzbmFwc2hvdCBpZiB0aGVyZSBhcmUgbm8gZmFpbGVkIGFzc2VydGlvbiByZXN1bHRzXG4gICAgICAvLyAoaS5lLiBubyBmYWlsdXJlcylcbiAgICAgIGlmICghT2JqZWN0LnZhbHVlcyhhc3NlcnRpb25SZXN1bHRzID8/IHt9KS5zb21lKHJlc3VsdCA9PiByZXN1bHQuc3RhdHVzID09PSAnZmFpbCcpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlU25hcHNob3QoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoIW9wdGlvbnMuZHJ5UnVuKSB7XG4gICAgICAgIGlmIChjbGVhbiAmJiAoYWN0dWFsVGVzdENhc2UuY2RrQ29tbWFuZE9wdGlvbnM/LmRlc3Ryb3k/LmVuYWJsZWQgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmRlc3Ryb3kob3B0aW9ucy50ZXN0Q2FzZU5hbWUsIHtcbiAgICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdEFyZ3MsXG4gICAgICAgICAgICBwcm9maWxlOiB0aGlzLnByb2ZpbGUsXG4gICAgICAgICAgICBhbGw6IHRydWUsXG4gICAgICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgICAgICAgIGFwcDogdGhpcy5jZGtBcHAsXG4gICAgICAgICAgICBvdXRwdXQ6IHBhdGgucmVsYXRpdmUodGhpcy5kaXJlY3RvcnksIHRoaXMuY2RrT3V0RGlyKSxcbiAgICAgICAgICAgIC4uLmFjdHVhbFRlc3RDYXNlLmNka0NvbW1hbmRPcHRpb25zPy5kZXN0cm95Py5hcmdzLFxuICAgICAgICAgICAgY29udGV4dDogdGhpcy5nZXRDb250ZXh0KGFjdHVhbFRlc3RDYXNlLmNka0NvbW1hbmRPcHRpb25zPy5kZXN0cm95Py5hcmdzPy5jb250ZXh0KSxcbiAgICAgICAgICAgIHJvbGVBcm46IG9wdGlvbnMucm9sZUFybiA/PyBhY3R1YWxUZXN0Q2FzZS5jZGtDb21tYW5kT3B0aW9ucz8uZGVzdHJveT8uYXJncz8ucm9sZUFybixcbiAgICAgICAgICAgIHZlcmJvc2U6IGVuYWJsZUZvclZlcmJvc2l0eUxldmVsKDMpLFxuICAgICAgICAgICAgZGVidWc6IGVuYWJsZUZvclZlcmJvc2l0eUxldmVsKDQpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICB9XG4gICAgcmV0dXJuIGFzc2VydGlvblJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBhIGludGVnIHRlc3QgY2FzZSBzdGFjayBkZXN0cnVjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkZXN0cm95KHRlc3RDYXNlTmFtZTogc3RyaW5nLCBkZXN0cm95QXJnczogRGVzdHJveU9wdGlvbnMpIHtcbiAgICBjb25zdCBhY3R1YWxUZXN0Q2FzZSA9IChhd2FpdCB0aGlzLmFjdHVhbFRlc3RTdWl0ZSgpKS50ZXN0U3VpdGVbdGVzdENhc2VOYW1lXTtcbiAgICB0cnkge1xuICAgICAgaWYgKGFjdHVhbFRlc3RDYXNlLmhvb2tzPy5wcmVEZXN0cm95KSB7XG4gICAgICAgIGFjdHVhbFRlc3RDYXNlLmhvb2tzLnByZURlc3Ryb3kuZm9yRWFjaChjbWQgPT4ge1xuICAgICAgICAgIGV4ZWMoY2h1bmtzKGNtZCksIHtcbiAgICAgICAgICAgIGN3ZDogcGF0aC5kaXJuYW1lKHRoaXMuc25hcHNob3REaXIpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuY2RrLmRlc3Ryb3koe1xuICAgICAgICAuLi5kZXN0cm95QXJncyxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoYWN0dWFsVGVzdENhc2UuaG9va3M/LnBvc3REZXN0cm95KSB7XG4gICAgICAgIGFjdHVhbFRlc3RDYXNlLmhvb2tzLnBvc3REZXN0cm95LmZvckVhY2goY21kID0+IHtcbiAgICAgICAgICBleGVjKGNodW5rcyhjbWQpLCB7XG4gICAgICAgICAgICBjd2Q6IHBhdGguZGlybmFtZSh0aGlzLnNuYXBzaG90RGlyKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5wYXJzZUVycm9yKGUsXG4gICAgICAgIGFjdHVhbFRlc3RDYXNlLmNka0NvbW1hbmRPcHRpb25zPy5kZXN0cm95Py5leHBlY3RFcnJvciA/PyBmYWxzZSxcbiAgICAgICAgYWN0dWFsVGVzdENhc2UuY2RrQ29tbWFuZE9wdGlvbnM/LmRlc3Ryb3k/LmV4cGVjdGVkTWVzc2FnZSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YXRjaChvcHRpb25zOiBjZGsuV2F0Y2hPcHRpb25zLCB0ZXN0Q2FzZU5hbWU6IHN0cmluZywgdmVyYm9zaXR5OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhY3R1YWxUZXN0U3VpdGUgPSBhd2FpdCB0aGlzLmFjdHVhbFRlc3RTdWl0ZSgpO1xuICAgIGNvbnN0IGFjdHVhbFRlc3RDYXNlID0gYWN0dWFsVGVzdFN1aXRlLnRlc3RTdWl0ZVt0ZXN0Q2FzZU5hbWVdO1xuICAgIGlmIChhY3R1YWxUZXN0Q2FzZS5ob29rcz8ucHJlRGVwbG95KSB7XG4gICAgICBhY3R1YWxUZXN0Q2FzZS5ob29rcy5wcmVEZXBsb3kuZm9yRWFjaChjbWQgPT4ge1xuICAgICAgICBleGVjKGNodW5rcyhjbWQpLCB7XG4gICAgICAgICAgY3dkOiBwYXRoLmRpcm5hbWUodGhpcy5zbmFwc2hvdERpciksXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHdhdGNoQXJncyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBsb29rdXBzOiBhY3R1YWxUZXN0U3VpdGUuZW5hYmxlTG9va3VwcyxcbiAgICAgIHN0YWNrczogW1xuICAgICAgICAuLi5hY3R1YWxUZXN0Q2FzZS5zdGFja3MsXG4gICAgICAgIC4uLmFjdHVhbFRlc3RDYXNlLmFzc2VydGlvblN0YWNrID8gW2FjdHVhbFRlc3RDYXNlLmFzc2VydGlvblN0YWNrXSA6IFtdLFxuICAgICAgXSxcbiAgICAgIG91dHB1dDogcGF0aC5yZWxhdGl2ZSh0aGlzLmRpcmVjdG9yeSwgdGhpcy5jZGtPdXREaXIpLFxuICAgICAgb3V0cHV0c0ZpbGU6IHBhdGgucmVsYXRpdmUodGhpcy5kaXJlY3RvcnksIHBhdGguam9pbih0aGlzLmNka091dERpciwgJ2Fzc2VydGlvbi1yZXN1bHRzLmpzb24nKSksXG4gICAgICAuLi5hY3R1YWxUZXN0Q2FzZT8uY2RrQ29tbWFuZE9wdGlvbnM/LmRlcGxveT8uYXJncyxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgLi4udGhpcy5nZXRDb250ZXh0KGFjdHVhbFRlc3RDYXNlPy5jZGtDb21tYW5kT3B0aW9ucz8uZGVwbG95Py5hcmdzPy5jb250ZXh0KSxcbiAgICAgIH0sXG4gICAgICBhcHA6IHRoaXMuY2RrQXBwLFxuICAgIH07XG4gICAgY29uc3QgZGVzdHJveU1lc3NhZ2UgPSB7XG4gICAgICBhZGRpdGlvbmFsTWVzc2FnZXM6IFtcbiAgICAgICAgJ0FmdGVyIHlvdSBhcmUgZG9uZSB5b3UgbXVzdCBtYW51YWxseSBkZXN0cm95IHRoZSBkZXBsb3llZCBzdGFja3MnLFxuICAgICAgICBgICAke1tcbiAgICAgICAgICAuLi5wcm9jZXNzLmVudi5BV1NfUkVHSU9OID8gW2BBV1NfUkVHSU9OPSR7cHJvY2Vzcy5lbnYuQVdTX1JFR0lPTn1gXSA6IFtdLFxuICAgICAgICAgICdjZGsgZGVzdHJveScsXG4gICAgICAgICAgYC1hICcke3RoaXMuY2RrQXBwfSdgLFxuICAgICAgICAgIHdhdGNoQXJncy5zdGFja3Muam9pbignICcpLFxuICAgICAgICAgIGAtLXByb2ZpbGUgJHt3YXRjaEFyZ3MucHJvZmlsZX1gLFxuICAgICAgICBdLmpvaW4oJyAnKX1gLFxuICAgICAgXSxcbiAgICB9O1xuICAgIHdvcmtlcnBvb2wud29ya2VyRW1pdChkZXN0cm95TWVzc2FnZSk7XG4gICAgaWYgKHdhdGNoQXJncy52ZXJib3NlKSB7XG4gICAgICAvLyBpZiBgLXZ2dmAgKG9yIGFib3ZlKSBpcyB1c2VkIHRoZW4gcHJpbnQgb3V0IHRoZSBjb21tYW5kIHRoYXQgd2FzIHVzZWRcbiAgICAgIC8vIHRoaXMgYWxsb3dzIHVzZXJzIHRvIG1hbnVhbGx5IHJ1biB0aGUgY29tbWFuZFxuICAgICAgd29ya2VycG9vbC53b3JrZXJFbWl0KHtcbiAgICAgICAgYWRkaXRpb25hbE1lc3NhZ2VzOiBbXG4gICAgICAgICAgJ1JlcHJvOicsXG4gICAgICAgICAgYCAgJHtbXG4gICAgICAgICAgICAnY2RrIHN5bnRoJyxcbiAgICAgICAgICAgIGAtYSAnJHt0aGlzLmNka0FwcH0nYCxcbiAgICAgICAgICAgIGAtbyAnJHt0aGlzLmNka091dERpcn0nYCxcbiAgICAgICAgICAgIC4uLk9iamVjdC5lbnRyaWVzKHRoaXMuZ2V0Q29udGV4dCgpKS5mbGF0TWFwKChbaywgdl0pID0+IHR5cGVvZiB2ICE9PSAnb2JqZWN0JyA/IFtgLWMgJyR7a309JHt2fSdgXSA6IFtdKSxcbiAgICAgICAgICAgIHdhdGNoQXJncy5zdGFja3Muam9pbignICcpLFxuICAgICAgICAgICAgYC0tb3V0cHV0cy1maWxlICR7d2F0Y2hBcmdzLm91dHB1dHNGaWxlfWAsXG4gICAgICAgICAgICBgLS1wcm9maWxlICR7d2F0Y2hBcmdzLnByb2ZpbGV9YCxcbiAgICAgICAgICAgICctLWhvdHN3YXAtZmFsbGJhY2snLFxuICAgICAgICAgIF0uam9pbignICcpfWAsXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3NlcnRpb25SZXN1bHRzID0gcGF0aC5qb2luKHRoaXMuY2RrT3V0RGlyLCAnYXNzZXJ0aW9uLXJlc3VsdHMuanNvbicpO1xuICAgIGNvbnN0IHdhdGNoZXIgPSBjaG9raWRhci53YXRjaChbdGhpcy5jZGtPdXREaXJdLCB7XG4gICAgICBjd2Q6IHRoaXMuZGlyZWN0b3J5LFxuICAgIH0pO1xuICAgIHdhdGNoZXIub24oJ2FsbCcsIChldmVudDogRXZlbnROYW1lLCBmaWxlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghaXNGaWxlRXZlbnQoZXZlbnQpKSB7XG4gICAgICAgIHJldHVybjsgLy8gSWdub3JlIG5vbi1maWxlIGV2ZW50cyBsaWtlICdlcnJvcicsICdyYXcnLCAncmVhZHknLCAnYWxsJ1xuICAgICAgfVxuICAgICAgLy8gd2Ugb25seSBjYXJlIGFib3V0IGNoYW5nZXMgdG8gdGhlIGBhc3NlcnRpb24tcmVzdWx0cy5qc29uYCBmaWxlLiBJZiB0aGVyZVxuICAgICAgLy8gYXJlIGFzc2VydGlvbnMgdGhlbiB0aGlzIHdpbGwgY2hhbmdlIG9uIGV2ZXJ5IGRlcGxveW1lbnRcbiAgICAgIGlmIChhc3NlcnRpb25SZXN1bHRzLmVuZHNXaXRoKGZpbGUpICYmIChldmVudCA9PT0gJ2FkZCcgfHwgZXZlbnQgPT09ICdjaGFuZ2UnKSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgIGlmIChhY3R1YWxUZXN0Q2FzZS5ob29rcz8ucG9zdERlcGxveSkge1xuICAgICAgICAgIGFjdHVhbFRlc3RDYXNlLmhvb2tzLnBvc3REZXBsb3kuZm9yRWFjaChjbWQgPT4ge1xuICAgICAgICAgICAgZXhlYyhjaHVua3MoY21kKSwge1xuICAgICAgICAgICAgICBjd2Q6IHBhdGguZGlybmFtZSh0aGlzLnNuYXBzaG90RGlyKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdHVhbFRlc3RDYXNlLmFzc2VydGlvblN0YWNrICYmIGFjdHVhbFRlc3RDYXNlLmFzc2VydGlvblN0YWNrTmFtZSkge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMucHJvY2Vzc0Fzc2VydGlvblJlc3VsdHMoXG4gICAgICAgICAgICBhc3NlcnRpb25SZXN1bHRzLFxuICAgICAgICAgICAgYWN0dWFsVGVzdENhc2UuYXNzZXJ0aW9uU3RhY2tOYW1lLFxuICAgICAgICAgICAgYWN0dWFsVGVzdENhc2UuYXNzZXJ0aW9uU3RhY2ssXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAocmVzICYmIE9iamVjdC52YWx1ZXMocmVzKS5zb21lKHIgPT4gci5zdGF0dXMgPT09ICdmYWlsJykpIHtcbiAgICAgICAgICAgIHdvcmtlcnBvb2wud29ya2VyRW1pdCh7XG4gICAgICAgICAgICAgIHJlYXNvbjogRGlhZ25vc3RpY1JlYXNvbi5BU1NFUlRJT05fRkFJTEVELFxuICAgICAgICAgICAgICB0ZXN0TmFtZTogYCR7dGVzdENhc2VOYW1lfSAoJHt3YXRjaEFyZ3MucHJvZmlsZX1gLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBmb3JtYXRBc3NlcnRpb25SZXN1bHRzKHJlcyksXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAoRGF0ZS5ub3coKSAtIHN0YXJ0KSAvIDEwMDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd29ya2VycG9vbC53b3JrZXJFbWl0KHtcbiAgICAgICAgICAgICAgcmVhc29uOiBEaWFnbm9zdGljUmVhc29uLlRFU1RfU1VDQ0VTUyxcbiAgICAgICAgICAgICAgdGVzdE5hbWU6IGAke3Rlc3RDYXNlTmFtZX1gLFxuICAgICAgICAgICAgICBtZXNzYWdlOiByZXMgPyBmb3JtYXRBc3NlcnRpb25SZXN1bHRzKHJlcykgOiAnTk8gQVNTRVJUSU9OUycsXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAoRGF0ZS5ub3coKSAtIHN0YXJ0KSAvIDEwMDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZW1pdCB0aGUgZGVzdHJveSBtZXNzYWdlIGFmdGVyIGV2ZXJ5IHJ1blxuICAgICAgICAgIC8vIHNvIHRoYXQgaXQncyB2aXNpYmxlIHRvIHRoZSB1c2VyXG4gICAgICAgICAgd29ya2VycG9vbC53b3JrZXJFbWl0KGRlc3Ryb3lNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgd2F0Y2hlci5vbigncmVhZHknLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoe30pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB7IHByb21pc2U6IHdhaXRlciwgcmVzb2x2ZSB9ID0gcHJvbWlzZVdpdGhSZXNvbHZlcnM8bnVtYmVyIHwgbnVsbD4oKTtcblxuICAgIGF3YWl0IHRoaXMuY2RrLndhdGNoKHdhdGNoQXJncywge1xuICAgICAgLy8gaWYgYC12YCAob3IgYWJvdmUpIGlzIHBhc3NlZCB0aGVuIHN0cmVhbSB0aGUgbG9nc1xuICAgICAgb25TdGRvdXQ6IChtZXNzYWdlKSA9PiB7XG4gICAgICAgIGlmICh2ZXJib3NpdHkgPiAwKSB7XG4gICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBpZiBgLXZgIChvciBhYm92ZSkgaXMgcGFzc2VkIHRoZW4gc3RyZWFtIHRoZSBsb2dzXG4gICAgICBvblN0ZGVycjogKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgaWYgKHZlcmJvc2l0eSA+IDApIHtcbiAgICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uQ2xvc2U6IGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXYXRjaCBleGl0ZWQgd2l0aCBlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHdhdGNoZXIuY2xvc2UoKTtcbiAgICAgICAgcmVzb2x2ZShjb2RlKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBhd2FpdCB3YWl0ZXI7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBhIGludGVnIHRlc3QgY2FzZSBkZXBsb3ltZW50LCBpbmNsdWRpbmdcbiAgICogcGVyZm9ybWluZyB0aGUgdXBkYXRlIHdvcmtmbG93XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGRlcGxveShcbiAgICBkZXBsb3lBcmdzOiBjZGsuRGVwbG95T3B0aW9ucyxcbiAgICB1cGRhdGVXb3JrZmxvd0VuYWJsZWQ6IGJvb2xlYW4sXG4gICAgdGVzdENhc2VOYW1lOiBzdHJpbmcsXG4gICAgYWxsb3dEZWxldGVGYWlsdXJlczogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxBc3NlcnRpb25SZXN1bHRzIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgYWN0dWFsVGVzdENhc2UgPSAoYXdhaXQgdGhpcy5hY3R1YWxUZXN0U3VpdGUoKSkudGVzdFN1aXRlW3Rlc3RDYXNlTmFtZV07XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhY3R1YWxUZXN0Q2FzZS5ob29rcz8ucHJlRGVwbG95KSB7XG4gICAgICAgIGFjdHVhbFRlc3RDYXNlLmhvb2tzLnByZURlcGxveS5mb3JFYWNoKGNtZCA9PiB7XG4gICAgICAgICAgZXhlYyhjaHVua3MoY21kKSwge1xuICAgICAgICAgICAgY3dkOiBwYXRoLmRpcm5hbWUodGhpcy5zbmFwc2hvdERpciksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIHVwZGF0ZSB3b3JrZmxvdyBpcyBub3QgZGlzYWJsZWQsIGZpcnN0XG4gICAgICAvLyBwZXJmb3JtIGEgZGVwbG95bWVudCB3aXRoIHRoZSBleGlzdGluZyBzbmFwc2hvdFxuICAgICAgLy8gdGhlbiBwZXJmb3JtIGEgZGVwbG95bWVudCAod2hpY2ggd2lsbCBiZSBhIHN0YWNrIHVwZGF0ZSlcbiAgICAgIC8vIHdpdGggdGhlIGN1cnJlbnQgaW50ZWdyYXRpb24gdGVzdFxuICAgICAgLy8gV2UgYWxzbyBvbmx5IHdhbnQgdG8gcnVuIHRoZSB1cGRhdGUgd29ya2Zsb3cgaWYgdGhlcmUgaXMgYW4gZXhpc3RpbmdcbiAgICAgIC8vIHNuYXBzaG90IChvdGhlcndpc2UgdGhlcmUgaXMgbm90aGluZyB0byB1cGRhdGUpXG4gICAgICBjb25zdCBleHBlY3RlZFRlc3RTdWl0ZSA9IGF3YWl0IHRoaXMuZXhwZWN0ZWRUZXN0U3VpdGUoKTtcbiAgICAgIGlmICh1cGRhdGVXb3JrZmxvd0VuYWJsZWQgJiYgdGhpcy5oYXNTbmFwc2hvdCgpICYmXG4gICAgICAgIChleHBlY3RlZFRlc3RTdWl0ZSAmJiB0ZXN0Q2FzZU5hbWUgaW4gZXhwZWN0ZWRUZXN0U3VpdGU/LnRlc3RTdWl0ZSkpIHtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBzbmFwc2hvdCBpcyB0aGUgbGF0ZXN0IGZyb20gJ29yaWdpbidcbiAgICAgICAgdGhpcy5jaGVja291dFNuYXBzaG90KCk7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkVGVzdENhc2UgPSBleHBlY3RlZFRlc3RTdWl0ZS50ZXN0U3VpdGVbdGVzdENhc2VOYW1lXTtcbiAgICAgICAgYXdhaXQgdGhpcy5jZGsuZGVwbG95KHtcbiAgICAgICAgICAuLi5kZXBsb3lBcmdzLFxuICAgICAgICAgIHN0YWNrczogZXhwZWN0ZWRUZXN0Q2FzZS5zdGFja3MsXG4gICAgICAgICAgLi4uZXhwZWN0ZWRUZXN0Q2FzZT8uY2RrQ29tbWFuZE9wdGlvbnM/LmRlcGxveT8uYXJncyxcbiAgICAgICAgICBjb250ZXh0OiB0aGlzLmdldENvbnRleHQoZXhwZWN0ZWRUZXN0Q2FzZT8uY2RrQ29tbWFuZE9wdGlvbnM/LmRlcGxveT8uYXJncz8uY29udGV4dCksXG4gICAgICAgICAgYXBwOiBwYXRoLnJlbGF0aXZlKHRoaXMuZGlyZWN0b3J5LCB0aGlzLnNuYXBzaG90RGlyKSxcbiAgICAgICAgICBsb29rdXBzOiBleHBlY3RlZFRlc3RTdWl0ZT8uZW5hYmxlTG9va3VwcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBub3cgZGVwbG95IHRoZSBcImFjdHVhbFwiIHRlc3QuXG4gICAgICAvLyBUaGlzIGlzIHRoZSBzdGFjayB1cGRhdGUgaWYgdGhlIHVwZGF0ZSB3b3JrZmxvdyByYW4gYWJvdmUuXG4gICAgICBjb25zdCBhY3R1YWxEZXBsb3lSZXN1bHQgPSBhd2FpdCB0aGlzLmNkay5kZXBsb3koe1xuICAgICAgICAuLi5kZXBsb3lBcmdzLFxuICAgICAgICBsb29rdXBzOiAoYXdhaXQgdGhpcy5hY3R1YWxUZXN0U3VpdGUoKSkuZW5hYmxlTG9va3VwcyxcbiAgICAgICAgc3RhY2tzOiBbXG4gICAgICAgICAgLi4uYWN0dWFsVGVzdENhc2Uuc3RhY2tzLFxuICAgICAgICBdLFxuICAgICAgICBvdXRwdXQ6IHBhdGgucmVsYXRpdmUodGhpcy5kaXJlY3RvcnksIHRoaXMuY2RrT3V0RGlyKSxcbiAgICAgICAgLi4uYWN0dWFsVGVzdENhc2U/LmNka0NvbW1hbmRPcHRpb25zPy5kZXBsb3k/LmFyZ3MsXG4gICAgICAgIGNvbnRleHQ6IHRoaXMuZ2V0Q29udGV4dChhY3R1YWxUZXN0Q2FzZT8uY2RrQ29tbWFuZE9wdGlvbnM/LmRlcGxveT8uYXJncz8uY29udGV4dCksXG4gICAgICAgIGFwcDogdGhpcy5jZGtBcHAsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGFjdHVhbERlcGxveVJlc3VsdC5kZWxldGVGYWlsdXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGRldGFpbHMgPSBhY3R1YWxEZXBsb3lSZXN1bHQuZGVsZXRlRmFpbHVyZXNcbiAgICAgICAgICAubWFwKGYgPT4gYCAgLSAke2YubG9naWNhbFJlc291cmNlSWR9ICgke2YucmVzb3VyY2VUeXBlfSk6ICR7Zi5yZWFzb259YClcbiAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICAgIGAke2FjdHVhbERlcGxveVJlc3VsdC5kZWxldGVGYWlsdXJlcy5sZW5ndGh9IHJlc291cmNlKHMpIGZhaWxlZCB0byBkZWxldGUgZHVyaW5nIHN0YWNrIHVwZGF0ZTpcXG4ke2RldGFpbHN9XFxuYCArXG4gICAgICAgICAgJ1RoZXNlIHJlc291cmNlcyBhcmUgbm8gbG9uZ2VyIG1hbmFnZWQgYnkgQ2xvdWRGb3JtYXRpb24gYnV0IHN0aWxsIGV4aXN0IGFuZCBtYXkgaW5jdXIgY2hhcmdlcy4nO1xuICAgICAgICBpZiAoYWxsb3dEZWxldGVGYWlsdXJlcykge1xuICAgICAgICAgIGxvZ2dlci53YXJuaW5nKG1lc3NhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGFzc2VydGlvbnNcbiAgICAgIC8vIGRlcGxveSB0aGUgYXNzZXJ0aW9uIHN0YWNrIGFzIHdlbGxcbiAgICAgIC8vIFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgYWJvdmUgZGVwbG95bWVudCBiZWNhdXNlIHdlIHdhbnQgdG9cbiAgICAgIC8vIHNldCBgcm9sbGJhY2s6IGZhbHNlYC4gVGhpcyBhbGxvd3MgdGhlIGFzc2VydGlvbiBzdGFjayB0byBkZXBsb3kgYWxsIHRoZVxuICAgICAgLy8gYXNzZXJ0aW9ucyBpbnN0ZWFkIG9mIGZhaWxpbmcgYXQgdGhlIGZpcnN0IGZhaWxlZCBhc3NlcnRpb25cbiAgICAgIC8vIGNvbWJpbmluZyBpdCB3aXRoIHRoZSBhYm92ZSBkZXBsb3ltZW50IHdvdWxkIHByZXZlbnQgYW55IHJlcGxhY2VtZW50IHVwZGF0ZXNcbiAgICAgIGlmIChhY3R1YWxUZXN0Q2FzZS5hc3NlcnRpb25TdGFjaykge1xuICAgICAgICBhd2FpdCB0aGlzLmNkay5kZXBsb3koe1xuICAgICAgICAgIC4uLmRlcGxveUFyZ3MsXG4gICAgICAgICAgbG9va3VwczogKGF3YWl0IHRoaXMuYWN0dWFsVGVzdFN1aXRlKCkpLmVuYWJsZUxvb2t1cHMsXG4gICAgICAgICAgc3RhY2tzOiBbXG4gICAgICAgICAgICBhY3R1YWxUZXN0Q2FzZS5hc3NlcnRpb25TdGFjayxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJvbGxiYWNrOiBmYWxzZSxcbiAgICAgICAgICBvdXRwdXQ6IHBhdGgucmVsYXRpdmUodGhpcy5kaXJlY3RvcnksIHRoaXMuY2RrT3V0RGlyKSxcbiAgICAgICAgICAuLi5hY3R1YWxUZXN0Q2FzZT8uY2RrQ29tbWFuZE9wdGlvbnM/LmRlcGxveT8uYXJncyxcbiAgICAgICAgICBvdXRwdXRzRmlsZTogcGF0aC5yZWxhdGl2ZSh0aGlzLmRpcmVjdG9yeSwgcGF0aC5qb2luKHRoaXMuY2RrT3V0RGlyLCAnYXNzZXJ0aW9uLXJlc3VsdHMuanNvbicpKSxcbiAgICAgICAgICBjb250ZXh0OiB0aGlzLmdldENvbnRleHQoYWN0dWFsVGVzdENhc2U/LmNka0NvbW1hbmRPcHRpb25zPy5kZXBsb3k/LmFyZ3M/LmNvbnRleHQpLFxuICAgICAgICAgIGFwcDogdGhpcy5jZGtBcHAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWN0dWFsVGVzdENhc2UuaG9va3M/LnBvc3REZXBsb3kpIHtcbiAgICAgICAgYWN0dWFsVGVzdENhc2UuaG9va3MucG9zdERlcGxveS5mb3JFYWNoKGNtZCA9PiB7XG4gICAgICAgICAgZXhlYyhjaHVua3MoY21kKSwge1xuICAgICAgICAgICAgY3dkOiBwYXRoLmRpcm5hbWUodGhpcy5zbmFwc2hvdERpciksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYWN0dWFsVGVzdENhc2UuYXNzZXJ0aW9uU3RhY2sgJiYgYWN0dWFsVGVzdENhc2UuYXNzZXJ0aW9uU3RhY2tOYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBc3NlcnRpb25SZXN1bHRzKFxuICAgICAgICAgIHBhdGguam9pbih0aGlzLmNka091dERpciwgJ2Fzc2VydGlvbi1yZXN1bHRzLmpzb24nKSxcbiAgICAgICAgICBhY3R1YWxUZXN0Q2FzZS5hc3NlcnRpb25TdGFja05hbWUsXG4gICAgICAgICAgYWN0dWFsVGVzdENhc2UuYXNzZXJ0aW9uU3RhY2ssXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5wYXJzZUVycm9yKGUsXG4gICAgICAgIGFjdHVhbFRlc3RDYXNlLmNka0NvbW1hbmRPcHRpb25zPy5kZXBsb3k/LmV4cGVjdEVycm9yID8/IGZhbHNlLFxuICAgICAgICBhY3R1YWxUZXN0Q2FzZS5jZGtDb21tYW5kT3B0aW9ucz8uZGVwbG95Py5leHBlY3RlZE1lc3NhZ2UsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyB0aGUgb3V0cHV0c0ZpbGUgd2hpY2ggY29udGFpbnMgdGhlIGFzc2VydGlvbnMgcmVzdWx0cyBhcyBzdGFja1xuICAgKiBvdXRwdXRzXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NBc3NlcnRpb25SZXN1bHRzKGZpbGU6IHN0cmluZywgYXNzZXJ0aW9uU3RhY2tOYW1lOiBzdHJpbmcsIGFzc2VydGlvblN0YWNrSWQ6IHN0cmluZyk6IEFzc2VydGlvblJlc3VsdHMgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlc3VsdHM6IEFzc2VydGlvblJlc3VsdHMgPSB7fTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhmaWxlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0czogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH0gPSBmcy5yZWFkSlNPTlN5bmMoZmlsZSk7XG5cbiAgICAgICAgaWYgKGFzc2VydGlvblN0YWNrTmFtZSBpbiBvdXRwdXRzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBbYXNzZXJ0aW9uSWQsIHJlc3VsdF0gb2YgT2JqZWN0LmVudHJpZXMob3V0cHV0c1thc3NlcnRpb25TdGFja05hbWVdKSkge1xuICAgICAgICAgICAgaWYgKGFzc2VydGlvbklkLnN0YXJ0c1dpdGgoJ0Fzc2VydGlvblJlc3VsdHMnKSkge1xuICAgICAgICAgICAgICBjb25zdCBhc3NlcnRpb25SZXN1bHQ6IEFzc2VydGlvblJlc3VsdCA9IEpTT04ucGFyc2UocmVzdWx0LnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKSk7XG4gICAgICAgICAgICAgIGlmIChhc3NlcnRpb25SZXN1bHQuc3RhdHVzID09PSAnZmFpbCcgfHwgYXNzZXJ0aW9uUmVzdWx0LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0c1thc3NlcnRpb25JZF0gPSBhc3NlcnRpb25SZXN1bHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gaWYgdGhlcmUgYXJlIG91dHB1dHMsIGJ1dCB0aGV5IGNhbm5vdCBiZSBwcm9jZXNzZWQsIHRoZW4gdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgdGVzdCBmYWlsc1xuICAgICAgICByZXN1bHRzW2Fzc2VydGlvblN0YWNrSWRdID0ge1xuICAgICAgICAgIHN0YXR1czogJ2ZhaWwnLFxuICAgICAgICAgIG1lc3NhZ2U6IGBlcnJvciBwcm9jZXNzaW5nIGFzc2VydGlvbiByZXN1bHRzOiAke2V9YCxcbiAgICAgICAgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgb3V0cHV0cyBmaWxlIHNvIGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBzbmFwc2hvdFxuICAgICAgICAvLyBpdCB3aWxsIGNvbnRhaW4gZW52IHNwZWNpZmljIGluZm9ybWF0aW9uIGZyb20gdmFsdWVzXG4gICAgICAgIC8vIHJlc29sdmVkIGF0IGRlcGxveSB0aW1lXG4gICAgICAgIGZzLnVubGlua1N5bmMoZmlsZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXN1bHRzKS5sZW5ndGggPiAwID8gcmVzdWx0cyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gZXJyb3IgbWVzc2FnZSByZXR1cm5lZCBmcm9tIGEgQ0RLIGNvbW1hbmRcbiAgICovXG4gIHByaXZhdGUgcGFyc2VFcnJvcihlOiB1bmtub3duLCBleHBlY3RFcnJvcjogYm9vbGVhbiwgZXhwZWN0ZWRNZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgaWYgKGV4cGVjdEVycm9yKSB7XG4gICAgICBpZiAoZXhwZWN0ZWRNZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAoZSBhcyBFcnJvcikubWVzc2FnZTtcbiAgICAgICAgaWYgKCFtZXNzYWdlLm1hdGNoKGV4cGVjdGVkTWVzc2FnZSkpIHtcbiAgICAgICAgICB0aHJvdyAoZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -160,6 +160,21 @@ export interface IntegTestOptions {
160
160
  * @default - no additional CA bundle
161
161
  */
162
162
  readonly caBundlePath?: string;
163
+ /**
164
+ * ARN of the IAM role for CloudFormation to assume during deploy/destroy
165
+ *
166
+ * @default - use the bootstrap cfn-exec role
167
+ */
168
+ readonly roleArn?: string;
169
+ /**
170
+ * Whether to allow resources that fail to delete during a stack update.
171
+ *
172
+ * When false, the test will fail if CloudFormation skips deleting a resource
173
+ * during a stack update. When true, only a warning is printed.
174
+ *
175
+ * @default false
176
+ */
177
+ readonly allowDeleteFailures?: boolean;
163
178
  }
164
179
  /**
165
180
  * Represents possible reasons for a diagnostic
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["common.ts"],"names":[],"mappings":"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"}
@@ -127,4 +127,4 @@ function formatError(error) {
127
127
  }
128
128
  return `${name}: ${message}`;
129
129
  }
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXVSQSxvQ0FNQztBQU1ELHdEQUlDO0FBS0Qsb0NBK0JDO0FBU0Qsc0NBUUM7QUFFRCxrQ0FTQztBQXZXRCwrQkFBOEI7QUFFOUIsK0JBQStCO0FBQy9CLG9DQUFvQztBQXVMcEM7O0dBRUc7QUFDSCxJQUFZLGdCQStDWDtBQS9DRCxXQUFZLGdCQUFnQjtJQUMxQjs7O09BR0c7SUFDSCwrQ0FBMkIsQ0FBQTtJQUUzQjs7T0FFRztJQUNILCtDQUEyQixDQUFBO0lBRTNCOztPQUVHO0lBQ0gsNkNBQXlCLENBQUE7SUFFekI7O09BRUc7SUFDSCxpREFBNkIsQ0FBQTtJQUU3Qjs7O09BR0c7SUFDSCx1REFBbUMsQ0FBQTtJQUVuQzs7T0FFRztJQUNILHFEQUFpQyxDQUFBO0lBRWpDOztPQUVHO0lBQ0gseURBQXFDLENBQUE7SUFFckM7O09BRUc7SUFDSCxpREFBNkIsQ0FBQTtJQUU3Qjs7T0FFRztJQUNILHlEQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUEvQ1csZ0JBQWdCLGdDQUFoQixnQkFBZ0IsUUErQzNCO0FBMkNELFNBQWdCLFlBQVksQ0FBQyxLQUFhLEVBQUUsTUFBYztJQUN4RCxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0csQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hILENBQUM7QUFDSCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsT0FBeUI7SUFDOUQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBQSxhQUFNLEVBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDdEgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FBQyxVQUFzQjtJQUNqRCxRQUFRLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixLQUFLLGdCQUFnQixDQUFDLGdCQUFnQjtZQUNwQyxNQUFNLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakcsTUFBTTtRQUNSLEtBQUssZ0JBQWdCLENBQUMsWUFBWTtZQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDLDRCQUE0QixFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekcsTUFBTTtRQUNSLEtBQUssZ0JBQWdCLENBQUMsV0FBVztZQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0YsTUFBTTtRQUNSLEtBQUssZ0JBQWdCLENBQUMsZUFBZTtZQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkksTUFBTTtRQUNSLEtBQUssZ0JBQWdCLENBQUMsWUFBWTtZQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekksTUFBTTtRQUNSLEtBQUssZ0JBQWdCLENBQUMsY0FBYyxDQUFDO1FBQ3JDLEtBQUssZ0JBQWdCLENBQUMsVUFBVTtZQUM5QixNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkksTUFBTTtRQUNSLEtBQUssZ0JBQWdCLENBQUMsV0FBVztZQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkksTUFBTTtRQUNSLEtBQUssZ0JBQWdCLENBQUMsZ0JBQWdCO1lBQ3BDLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2SSxNQUFNO0lBQ1YsQ0FBQztJQUNELEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxDQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFdBQVcsQ0FBQyxPQUFlLEVBQUUsS0FBSyxHQUFHLENBQUM7SUFDN0MsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRCxTQUFnQixhQUFhLENBQUMsU0FBc0I7SUFDbEQsTUFBTSxLQUFLLEdBQUc7UUFDWixJQUFJO1FBQ0osZUFBZSxTQUFTLENBQUMsSUFBSSxPQUFPO1FBQ3BDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7S0FDakYsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsU0FBZ0IsV0FBVyxDQUFDLEtBQVU7SUFDcEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUM7SUFDbkMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEIsT0FBTyxHQUFHLElBQUksS0FBSyxPQUFPLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEYsQ0FBQztJQUVELE9BQU8sR0FBRyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZUltcGFjdCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgdHlwZSB7IEludGVnVGVzdEluZm8gfSBmcm9tICcuLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuXG4vKipcbiAqIFRoZSBhZ2dyZWdhdGUgcmVzdWx0cyBmcm9tIHJ1bm5pbmcgYXNzZXJ0aW9ucyBvbiBhIHRlc3QgY2FzZVxuICovXG5leHBvcnQgdHlwZSBBc3NlcnRpb25SZXN1bHRzID0geyBbaWQ6IHN0cmluZ106IEFzc2VydGlvblJlc3VsdCB9O1xuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgYW4gaW5kaXZpZHVhbCBhc3NlcnRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3NlcnRpb25SZXN1bHQge1xuICAvKipcbiAgICogVGhlIGFzc2VydGlvbiBtZXNzYWdlLiBJZiB0aGUgYXNzZXJ0aW9uIGZhaWxlZCwgdGhpcyB3aWxsXG4gICAqIGluY2x1ZGUgdGhlIHJlYXNvbi5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYXNzZXJ0aW9uIHN1Y2NlZWRlZCBvciBmYWlsZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogJ3N1Y2Nlc3MnIHwgJ2ZhaWwnO1xufVxuXG4vKipcbiAqIENvbmZpZyBmb3IgYW4gaW50ZWdyYXRpb24gdGVzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnVGVzdFdvcmtlckNvbmZpZyBleHRlbmRzIEludGVnVGVzdEluZm8ge1xuICAvKipcbiAgICogQSBsaXN0IG9mIGFueSBkZXN0cnVjdGl2ZSBjaGFuZ2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBkZXN0cnVjdGl2ZUNoYW5nZXM/OiBEZXN0cnVjdGl2ZUNoYW5nZVtdO1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIG9uIGFueSBkZXN0cnVjdGl2ZSBjaGFuZ2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdHJ1Y3RpdmVDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGxvZ2ljYWxJZCBvZiB0aGUgcmVzb3VyY2Ugd2l0aCBhIGRlc3RydWN0aXZlIGNoYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9naWNhbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdGFjayB0aGF0IGNvbnRhaW5zIHRoZSBkZXN0cnVjdGl2ZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1wYWN0IG9mIHRoZSBkZXN0cnVjdGl2ZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IGltcGFjdDogUmVzb3VyY2VJbXBhY3Q7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBpbnRlZ3JhdGlvbiB0ZXN0cyBtZXRyaWNzIGZvciBhIGdpdmVuIHdvcmtlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnUnVubmVyTWV0cmljcyB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIHRoZSB0ZXN0IHdhcyBydW4gaW5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgZHVyYXRpb24gb2YgdGhlIHdvcmtlci5cbiAgICogVGhpcyB3aWxsIGJlIHRoZSBzdW0gb2YgYWxsIGluZGl2aWR1YWwgdGVzdCBkdXJhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGR1cmF0aW9uOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIHRoZSBkdXJhdGlvbiBvZiBpbmRpdmlkdWFsIHRlc3RzIHRoYXQgdGhlXG4gICAqIHdvcmtlciBleGVjdXRlZC5cbiAgICpcbiAgICogTWFwIG9mIHRlc3ROYW1lIHRvIGR1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM6IHsgW3Rlc3ROYW1lOiBzdHJpbmddOiBudW1iZXIgfTtcblxuICAvKipcbiAgICogVGhlIHByb2ZpbGUgdGhhdCB3YXMgdXNlZCB0byBydW4gdGhlIHRlc3RcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IHByb2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU25hcHNob3RWZXJpZmljYXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFJldGFpbiBmYWlsZWQgc25hcHNob3QgY29tcGFyaXNvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJldGFpbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFZlcmJvc2UgbW9kZVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyYm9zZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCByZXN1bHRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdCYXRjaFJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgZmFpbGVkIHRlc3RzXG4gICAqL1xuICByZWFkb25seSBmYWlsZWRUZXN0czogSW50ZWdUZXN0SW5mb1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIEludGVncmF0aW9uIHRlc3QgbWV0cmljcy4gRWFjaCBlbnRyeSBpbiB0aGVcbiAgICogbGlzdCByZXByZXNlbnRzIG1ldHJpY3MgZnJvbSBhIHNpbmdsZSB3b3JrZXIgKGFjY291bnQgKyByZWdpb24pLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzW107XG59XG5cbi8qKlxuICogQ29tbW9uIG9wdGlvbnMgZm9yIHJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBpbnRlZ3JhdGlvbiB0ZXN0cyB0byBydW5cbiAgICogaW4gdGhpcyBiYXRjaFxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBkZXN0cm95IHRoZSBzdGFja3MgYXQgdGhlXG4gICAqIGVuZCBvZiB0aGUgdGVzdFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjbGVhbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhpcyBpcyBzZXQgdG8gYHRydWVgIHRoZSBzbmFwc2hvdCB3aWxsXG4gICAqIGJlIGNyZWF0ZWQgX3dpdGhvdXRfIHJ1bm5pbmcgdGhlIGludGVncmF0aW9uIHRlc3RcbiAgICogVGhlIHJlc3VsdGluZyBzbmFwc2hvdCBTSE9VTEQgTk9UIGJlIGNoZWNrZWQgaW5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBsZXZlbCBvZiB2ZXJib3NpdHkgZm9yIGxvZ2dpbmcuXG4gICAqIEhpZ2hlciBudW1iZXIgbWVhbnMgbW9yZSBvdXRwdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHJlYWRvbmx5IHZlcmJvc2l0eT86IG51bWJlcjtcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBzdGFjayB1cGRhdGUgd29ya2Zsb3cgd2lsbCBiZSBkaXNhYmxlZFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVXb3JrZmxvdz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHRydWUgaWYgcnVubmluZyBpbiB3YXRjaCBtb2RlXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB3YXRjaD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVzZSB0aGUgaW5kaWNhdGVkIHByb3h5XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcHJveHlcbiAgICovXG4gIHJlYWRvbmx5IHByb3h5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIENBIGNlcnRpZmljYXRlIHRvIHVzZSB3aGVuIHZhbGlkYXRpbmcgSFRUUFMgcmVxdWVzdHNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIENBIGJ1bmRsZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FCdW5kbGVQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgcG9zc2libGUgcmVhc29ucyBmb3IgYSBkaWFnbm9zdGljXG4gKi9cbmV4cG9ydCBlbnVtIERpYWdub3N0aWNSZWFzb24ge1xuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIHRlc3QgZmFpbGVkIGJlY2F1c2UgdGhlcmVcbiAgICogaXMgbm90IGV4aXN0aW5nIHNuYXBzaG90XG4gICAqL1xuICBOT19TTkFQU0hPVCA9ICdOT19TTkFQU0hPVCcsXG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlZ3JhdGlvbiB0ZXN0IGZhaWxlZFxuICAgKi9cbiAgVEVTVF9GQUlMRUQgPSAnVEVTVF9GQUlMRUQnLFxuXG4gIC8qKlxuICAgKiBUaGVyZSB3YXMgYW4gZXJyb3IgcnVubmluZyB0aGUgaW50ZWdyYXRpb24gdGVzdFxuICAgKi9cbiAgVEVTVF9FUlJPUiA9ICdURVNUX0VSUk9SJyxcblxuICAvKipcbiAgICogQSBub24tZmFpbGluZyB3YXJuaW5nIGZyb20gdGhlIGludGVncmF0aW9uIHRlc3QgcnVuXG4gICAqL1xuICBURVNUX1dBUk5JTkcgPSAnVEVTVF9XQVJOSU5HJyxcblxuICAvKipcbiAgICogVGhlIHNuYXBzaG90IHRlc3QgZmFpbGVkIGJlY2F1c2UgdGhlIGFjdHVhbFxuICAgKiBzbmFwc2hvdCB3YXMgZGlmZmVyZW50IHRoYW4gdGhlIGV4cGVjdGVkIHNuYXBzaG90XG4gICAqL1xuICBTTkFQU0hPVF9GQUlMRUQgPSAnU05BUFNIT1RfRkFJTEVEJyxcblxuICAvKipcbiAgICogVGhlIHNuYXBzaG90IHRlc3QgZmFpbGVkIGJlY2F1c2UgdGhlcmUgd2FzIGFuIGVycm9yIGV4ZWN1dGluZyBpdFxuICAgKi9cbiAgU05BUFNIT1RfRVJST1IgPSAnU05BUFNIT1RfRVJST1InLFxuXG4gIC8qKlxuICAgKiBUaGUgc25hcHNob3QgdGVzdCBzdWNjZWVkZWRcbiAgICovXG4gIFNOQVBTSE9UX1NVQ0NFU1MgPSAnU05BUFNIT1RfU1VDQ0VTUycsXG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlZ3JhdGlvbiB0ZXN0IHN1Y2NlZWRlZFxuICAgKi9cbiAgVEVTVF9TVUNDRVNTID0gJ1RFU1RfU1VDQ0VTUycsXG5cbiAgLyoqXG4gICAqIFRoZSBhc3NlcnRpb24gZmFpbGVkXG4gICAqL1xuICBBU1NFUlRJT05fRkFJTEVEID0gJ0FTU0VSVElPTl9GQUlMRUQnLFxufVxuXG4vKipcbiAqIEludGVncmF0aW9uIHRlc3QgZGlhZ25vc3RpY3NcbiAqIFRoaXMgaXMgdXNlZCB0byByZXBvcnQgYmFjayB0aGUgc3RhdHVzIG9mIGVhY2ggdGVzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpYWdub3N0aWMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRlc3RcbiAgICovXG4gIHJlYWRvbmx5IHRlc3ROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkaWFnbm9zdGljIG1lc3NhZ2VcbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWUgaXQgdG9vayB0byBydW4gdGhlIHRlc3RcbiAgICovXG4gIHJlYWRvbmx5IGR1cmF0aW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVhc29uIGZvciB0aGUgZGlhZ25vc3RpY1xuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBEaWFnbm9zdGljUmVhc29uO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG1lc3NhZ2VzIHRvIHByaW50XG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsTWVzc2FnZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgdGhhdCB3ZXJlIHVzZWQgZm9yIHRoZSBpbnRlZyB0ZXN0XG4gICAqL1xuICByZWFkb25seSBjb25maWc/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRTdW1tYXJ5KHRvdGFsOiBudW1iZXIsIGZhaWxlZDogbnVtYmVyKTogdm9pZCB7XG4gIGlmIChmYWlsZWQgPiAwKSB7XG4gICAgbG9nZ2VyLnByaW50KCclczogICAgJXMgJXMsICVzIHRvdGFsJywgY2hhbGsuYm9sZCgnVGVzdHMnKSwgY2hhbGsucmVkKGZhaWxlZCksIGNoYWxrLnJlZCgnZmFpbGVkJyksIHRvdGFsKTtcbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIucHJpbnQoJyVzOiAgICAlcyAlcywgJXMgdG90YWwnLCBjaGFsay5ib2xkKCdUZXN0cycpLCBjaGFsay5ncmVlbih0b3RhbCksIGNoYWxrLmdyZWVuKCdwYXNzZWQnKSwgdG90YWwpO1xuICB9XG59XG5cbi8qKlxuICogRm9ybWF0IHRoZSBhc3NlcnRpb24gcmVzdWx0cyBzbyB0aGF0IHRoZSByZXN1bHRzIGNhbiBiZVxuICogcHJpbnRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QXNzZXJ0aW9uUmVzdWx0cyhyZXN1bHRzOiBBc3NlcnRpb25SZXN1bHRzKTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdHMpXG4gICAgLm1hcCgoW2lkLCByZXN1bHRdKSA9PiBmb3JtYXQoJyVzJXMnLCBpZCwgcmVzdWx0LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnID8gYCAtICR7cmVzdWx0LnN0YXR1c31gIDogYFxcbiR7cmVzdWx0Lm1lc3NhZ2V9YCkpXG4gICAgLmpvaW4oJ1xcbiAgICAgICcpO1xufVxuXG4vKipcbiAqIFByaW50IG91dCB0aGUgcmVzdWx0cyBmcm9tIHRlc3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludFJlc3VsdHMoZGlhZ25vc3RpYzogRGlhZ25vc3RpYyk6IHZvaWQge1xuICBzd2l0Y2ggKGRpYWdub3N0aWMucmVhc29uKSB7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX1NVQ0NFU1M6XG4gICAgICBsb2dnZXIuc3VjY2VzcygnICBVTkNIQU5HRUQgICVzICVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uVEVTVF9TVUNDRVNTOlxuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJyAgU1VDQ0VTUyAgICAlcyAlc1xcbiAgICAgICcsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLk5PX1NOQVBTSE9UOlxuICAgICAgbG9nZ2VyLmVycm9yKCcgIE5FVyAgICAgICAgJXMgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5TTkFQU0hPVF9GQUlMRUQ6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgQ0hBTkdFRCAgICAlcyAlc1xcbiVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSwgaW5kZW50TGluZXMoZGlhZ25vc3RpYy5tZXNzYWdlLCA2KSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uVEVTVF9XQVJOSU5HOlxuICAgICAgbG9nZ2VyLndhcm5pbmcoJyAgV0FSTiAgICAgICAlcyAlc1xcbiVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSwgaW5kZW50TGluZXMoZGlhZ25vc3RpYy5tZXNzYWdlLCA2KSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uU05BUFNIT1RfRVJST1I6XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlRFU1RfRVJST1I6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgRVJST1IgICAgICAlcyAlc1xcbiVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSwgaW5kZW50TGluZXMoZGlhZ25vc3RpYy5tZXNzYWdlLCA2KSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uVEVTVF9GQUlMRUQ6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgRkFJTEVEICAgICAlcyAlc1xcbiVzJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSwgaW5kZW50TGluZXMoZGlhZ25vc3RpYy5tZXNzYWdlLCA2KSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uQVNTRVJUSU9OX0ZBSUxFRDpcbiAgICAgIGxvZ2dlci5lcnJvcignICBBU1NFUlQgICAgICVzICVzXFxuJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBpbmRlbnRMaW5lcyhkaWFnbm9zdGljLm1lc3NhZ2UsIDYpKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGZvciAoY29uc3QgYWRkbCBvZiBkaWFnbm9zdGljLmFkZGl0aW9uYWxNZXNzYWdlcyA/PyBbXSkge1xuICAgIGxvZ2dlci5wcmludChgICAgICAgJHthZGRsfWApO1xuICB9XG59XG5cbi8qKlxuICogVGFrZXMgYSBtdWx0aWxpbmUgc3RyaW5nIGFuZCBpbmRlbnRzIGV2ZXJ5IGxpbmUgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2Ygc3BhY2VzLlxuICovXG5mdW5jdGlvbiBpbmRlbnRMaW5lcyhtZXNzYWdlOiBzdHJpbmcsIGNvdW50ID0gMik6IHN0cmluZyB7XG4gIHJldHVybiBtZXNzYWdlLnNwbGl0KCdcXG4nKS5tYXAobGluZSA9PiAnICcucmVwZWF0KGNvdW50KSArIGxpbmUpLmpvaW4oJ1xcbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRMYWdnYXJkcyh0ZXN0TmFtZXM6IFNldDxzdHJpbmc+KSB7XG4gIGNvbnN0IHBhcnRzID0gW1xuICAgICcgICcsXG4gICAgYFdhaXRpbmcgZm9yICR7dGVzdE5hbWVzLnNpemV9IG1vcmVgLFxuICAgIHRlc3ROYW1lcy5zaXplIDwgMTAgPyBbJygnLCBBcnJheS5mcm9tKHRlc3ROYW1lcykuam9pbignLCAnKSwgJyknXS5qb2luKCcnKSA6ICcnLFxuICBdO1xuXG4gIGxvZ2dlci5wcmludChjaGFsay5ncmV5KHBhcnRzLmZpbHRlcih4ID0+IHgpLmpvaW4oJyAnKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RXJyb3IoZXJyb3I6IGFueSk6IHN0cmluZyB7XG4gIGNvbnN0IG5hbWUgPSBlcnJvci5uYW1lIHx8ICdFcnJvcic7XG4gIGNvbnN0IG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlIHx8IFN0cmluZyhlcnJvcik7XG5cbiAgaWYgKGVycm9yLmNhdXNlKSB7XG4gICAgcmV0dXJuIGAke25hbWV9OiAke21lc3NhZ2V9XFxuJHtjaGFsay5ncmF5KCdDYXVzZTogJyArIGZvcm1hdEVycm9yKGVycm9yLmNhdXNlKSl9YDtcbiAgfVxuXG4gIHJldHVybiBgJHtuYW1lfTogJHttZXNzYWdlfWA7XG59XG4iXX0=
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdTQSxvQ0FNQztBQU1ELHdEQUlDO0FBS0Qsb0NBK0JDO0FBU0Qsc0NBUUM7QUFFRCxrQ0FTQztBQXhYRCwrQkFBOEI7QUFFOUIsK0JBQStCO0FBQy9CLG9DQUFvQztBQXdNcEM7O0dBRUc7QUFDSCxJQUFZLGdCQStDWDtBQS9DRCxXQUFZLGdCQUFnQjtJQUMxQjs7O09BR0c7SUFDSCwrQ0FBMkIsQ0FBQTtJQUUzQjs7T0FFRztJQUNILCtDQUEyQixDQUFBO0lBRTNCOztPQUVHO0lBQ0gsNkNBQXlCLENBQUE7SUFFekI7O09BRUc7SUFDSCxpREFBNkIsQ0FBQTtJQUU3Qjs7O09BR0c7SUFDSCx1REFBbUMsQ0FBQTtJQUVuQzs7T0FFRztJQUNILHFEQUFpQyxDQUFBO0lBRWpDOztPQUVHO0lBQ0gseURBQXFDLENBQUE7SUFFckM7O09BRUc7SUFDSCxpREFBNkIsQ0FBQTtJQUU3Qjs7T0FFRztJQUNILHlEQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUEvQ1csZ0JBQWdCLGdDQUFoQixnQkFBZ0IsUUErQzNCO0FBMkNELFNBQWdCLFlBQVksQ0FBQyxLQUFhLEVBQUUsTUFBYztJQUN4RCxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0csQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hILENBQUM7QUFDSCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsT0FBeUI7SUFDOUQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUMzQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBQSxhQUFNLEVBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDdEgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FBQyxVQUFzQjtJQUNqRCxRQUFRLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixLQUFLLGdCQUFnQixDQUFDLGdCQUFnQjtZQUNwQyxNQUFNLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakcsTUFBTTtRQUNSLEtBQUssZ0JBQWdCLENBQUMsWUFBWTtZQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDLDRCQUE0QixFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekcsTUFBTTtRQUNSLEtBQUssZ0JBQWdCLENBQUMsV0FBVztZQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0YsTUFBTTtRQUNSLEtBQUssZ0JBQWdCLENBQUMsZUFBZTtZQUNuQyxNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkksTUFBTTtRQUNSLEtBQUssZ0JBQWdCLENBQUMsWUFBWTtZQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekksTUFBTTtRQUNSLEtBQUssZ0JBQWdCLENBQUMsY0FBYyxDQUFDO1FBQ3JDLEtBQUssZ0JBQWdCLENBQUMsVUFBVTtZQUM5QixNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkksTUFBTTtRQUNSLEtBQUssZ0JBQWdCLENBQUMsV0FBVztZQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkksTUFBTTtRQUNSLEtBQUssZ0JBQWdCLENBQUMsZ0JBQWdCO1lBQ3BDLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2SSxNQUFNO0lBQ1YsQ0FBQztJQUNELEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxDQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLFdBQVcsQ0FBQyxPQUFlLEVBQUUsS0FBSyxHQUFHLENBQUM7SUFDN0MsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRCxTQUFnQixhQUFhLENBQUMsU0FBc0I7SUFDbEQsTUFBTSxLQUFLLEdBQUc7UUFDWixJQUFJO1FBQ0osZUFBZSxTQUFTLENBQUMsSUFBSSxPQUFPO1FBQ3BDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7S0FDakYsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsU0FBZ0IsV0FBVyxDQUFDLEtBQVU7SUFDcEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUM7SUFDbkMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEIsT0FBTyxHQUFHLElBQUksS0FBSyxPQUFPLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEYsQ0FBQztJQUVELE9BQU8sR0FBRyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZUltcGFjdCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgdHlwZSB7IEludGVnVGVzdEluZm8gfSBmcm9tICcuLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuXG4vKipcbiAqIFRoZSBhZ2dyZWdhdGUgcmVzdWx0cyBmcm9tIHJ1bm5pbmcgYXNzZXJ0aW9ucyBvbiBhIHRlc3QgY2FzZVxuICovXG5leHBvcnQgdHlwZSBBc3NlcnRpb25SZXN1bHRzID0geyBbaWQ6IHN0cmluZ106IEFzc2VydGlvblJlc3VsdCB9O1xuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgYW4gaW5kaXZpZHVhbCBhc3NlcnRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3NlcnRpb25SZXN1bHQge1xuICAvKipcbiAgICogVGhlIGFzc2VydGlvbiBtZXNzYWdlLiBJZiB0aGUgYXNzZXJ0aW9uIGZhaWxlZCwgdGhpcyB3aWxsXG4gICAqIGluY2x1ZGUgdGhlIHJlYXNvbi5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYXNzZXJ0aW9uIHN1Y2NlZWRlZCBvciBmYWlsZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogJ3N1Y2Nlc3MnIHwgJ2ZhaWwnO1xufVxuXG4vKipcbiAqIENvbmZpZyBmb3IgYW4gaW50ZWdyYXRpb24gdGVzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnVGVzdFdvcmtlckNvbmZpZyBleHRlbmRzIEludGVnVGVzdEluZm8ge1xuICAvKipcbiAgICogQSBsaXN0IG9mIGFueSBkZXN0cnVjdGl2ZSBjaGFuZ2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBkZXN0cnVjdGl2ZUNoYW5nZXM/OiBEZXN0cnVjdGl2ZUNoYW5nZVtdO1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIG9uIGFueSBkZXN0cnVjdGl2ZSBjaGFuZ2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdHJ1Y3RpdmVDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGxvZ2ljYWxJZCBvZiB0aGUgcmVzb3VyY2Ugd2l0aCBhIGRlc3RydWN0aXZlIGNoYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgbG9naWNhbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzdGFjayB0aGF0IGNvbnRhaW5zIHRoZSBkZXN0cnVjdGl2ZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1wYWN0IG9mIHRoZSBkZXN0cnVjdGl2ZSBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IGltcGFjdDogUmVzb3VyY2VJbXBhY3Q7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBpbnRlZ3JhdGlvbiB0ZXN0cyBtZXRyaWNzIGZvciBhIGdpdmVuIHdvcmtlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVnUnVubmVyTWV0cmljcyB7XG4gIC8qKlxuICAgKiBUaGUgcmVnaW9uIHRoZSB0ZXN0IHdhcyBydW4gaW5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdG90YWwgZHVyYXRpb24gb2YgdGhlIHdvcmtlci5cbiAgICogVGhpcyB3aWxsIGJlIHRoZSBzdW0gb2YgYWxsIGluZGl2aWR1YWwgdGVzdCBkdXJhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGR1cmF0aW9uOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIHRoZSBkdXJhdGlvbiBvZiBpbmRpdmlkdWFsIHRlc3RzIHRoYXQgdGhlXG4gICAqIHdvcmtlciBleGVjdXRlZC5cbiAgICpcbiAgICogTWFwIG9mIHRlc3ROYW1lIHRvIGR1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM6IHsgW3Rlc3ROYW1lOiBzdHJpbmddOiBudW1iZXIgfTtcblxuICAvKipcbiAgICogVGhlIHByb2ZpbGUgdGhhdCB3YXMgdXNlZCB0byBydW4gdGhlIHRlc3RcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IHByb2ZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU25hcHNob3RWZXJpZmljYXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFJldGFpbiBmYWlsZWQgc25hcHNob3QgY29tcGFyaXNvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJldGFpbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFZlcmJvc2UgbW9kZVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyYm9zZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCByZXN1bHRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdCYXRjaFJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgZmFpbGVkIHRlc3RzXG4gICAqL1xuICByZWFkb25seSBmYWlsZWRUZXN0czogSW50ZWdUZXN0SW5mb1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIEludGVncmF0aW9uIHRlc3QgbWV0cmljcy4gRWFjaCBlbnRyeSBpbiB0aGVcbiAgICogbGlzdCByZXByZXNlbnRzIG1ldHJpY3MgZnJvbSBhIHNpbmdsZSB3b3JrZXIgKGFjY291bnQgKyByZWdpb24pLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzW107XG59XG5cbi8qKlxuICogQ29tbW9uIG9wdGlvbnMgZm9yIHJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ1Rlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBpbnRlZ3JhdGlvbiB0ZXN0cyB0byBydW5cbiAgICogaW4gdGhpcyBiYXRjaFxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdHM6IEludGVnVGVzdFdvcmtlckNvbmZpZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBkZXN0cm95IHRoZSBzdGFja3MgYXQgdGhlXG4gICAqIGVuZCBvZiB0aGUgdGVzdFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjbGVhbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhpcyBpcyBzZXQgdG8gYHRydWVgIHRoZSBzbmFwc2hvdCB3aWxsXG4gICAqIGJlIGNyZWF0ZWQgX3dpdGhvdXRfIHJ1bm5pbmcgdGhlIGludGVncmF0aW9uIHRlc3RcbiAgICogVGhlIHJlc3VsdGluZyBzbmFwc2hvdCBTSE9VTEQgTk9UIGJlIGNoZWNrZWQgaW5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBsZXZlbCBvZiB2ZXJib3NpdHkgZm9yIGxvZ2dpbmcuXG4gICAqIEhpZ2hlciBudW1iZXIgbWVhbnMgbW9yZSBvdXRwdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHJlYWRvbmx5IHZlcmJvc2l0eT86IG51bWJlcjtcblxuICAvKipcbiAgICogSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBzdGFjayB1cGRhdGUgd29ya2Zsb3cgd2lsbCBiZSBkaXNhYmxlZFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVXb3JrZmxvdz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHRydWUgaWYgcnVubmluZyBpbiB3YXRjaCBtb2RlXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB3YXRjaD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVzZSB0aGUgaW5kaWNhdGVkIHByb3h5XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcHJveHlcbiAgICovXG4gIHJlYWRvbmx5IHByb3h5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIENBIGNlcnRpZmljYXRlIHRvIHVzZSB3aGVuIHZhbGlkYXRpbmcgSFRUUFMgcmVxdWVzdHNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIENBIGJ1bmRsZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FCdW5kbGVQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUk4gb2YgdGhlIElBTSByb2xlIGZvciBDbG91ZEZvcm1hdGlvbiB0byBhc3N1bWUgZHVyaW5nIGRlcGxveS9kZXN0cm95XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdXNlIHRoZSBib290c3RyYXAgY2ZuLWV4ZWMgcm9sZVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyByZXNvdXJjZXMgdGhhdCBmYWlsIHRvIGRlbGV0ZSBkdXJpbmcgYSBzdGFjayB1cGRhdGUuXG4gICAqXG4gICAqIFdoZW4gZmFsc2UsIHRoZSB0ZXN0IHdpbGwgZmFpbCBpZiBDbG91ZEZvcm1hdGlvbiBza2lwcyBkZWxldGluZyBhIHJlc291cmNlXG4gICAqIGR1cmluZyBhIHN0YWNrIHVwZGF0ZS4gV2hlbiB0cnVlLCBvbmx5IGEgd2FybmluZyBpcyBwcmludGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dEZWxldGVGYWlsdXJlcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBwb3NzaWJsZSByZWFzb25zIGZvciBhIGRpYWdub3N0aWNcbiAqL1xuZXhwb3J0IGVudW0gRGlhZ25vc3RpY1JlYXNvbiB7XG4gIC8qKlxuICAgKiBUaGUgaW50ZWdyYXRpb24gdGVzdCBmYWlsZWQgYmVjYXVzZSB0aGVyZVxuICAgKiBpcyBub3QgZXhpc3Rpbmcgc25hcHNob3RcbiAgICovXG4gIE5PX1NOQVBTSE9UID0gJ05PX1NOQVBTSE9UJyxcblxuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIHRlc3QgZmFpbGVkXG4gICAqL1xuICBURVNUX0ZBSUxFRCA9ICdURVNUX0ZBSUxFRCcsXG5cbiAgLyoqXG4gICAqIFRoZXJlIHdhcyBhbiBlcnJvciBydW5uaW5nIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0XG4gICAqL1xuICBURVNUX0VSUk9SID0gJ1RFU1RfRVJST1InLFxuXG4gIC8qKlxuICAgKiBBIG5vbi1mYWlsaW5nIHdhcm5pbmcgZnJvbSB0aGUgaW50ZWdyYXRpb24gdGVzdCBydW5cbiAgICovXG4gIFRFU1RfV0FSTklORyA9ICdURVNUX1dBUk5JTkcnLFxuXG4gIC8qKlxuICAgKiBUaGUgc25hcHNob3QgdGVzdCBmYWlsZWQgYmVjYXVzZSB0aGUgYWN0dWFsXG4gICAqIHNuYXBzaG90IHdhcyBkaWZmZXJlbnQgdGhhbiB0aGUgZXhwZWN0ZWQgc25hcHNob3RcbiAgICovXG4gIFNOQVBTSE9UX0ZBSUxFRCA9ICdTTkFQU0hPVF9GQUlMRUQnLFxuXG4gIC8qKlxuICAgKiBUaGUgc25hcHNob3QgdGVzdCBmYWlsZWQgYmVjYXVzZSB0aGVyZSB3YXMgYW4gZXJyb3IgZXhlY3V0aW5nIGl0XG4gICAqL1xuICBTTkFQU0hPVF9FUlJPUiA9ICdTTkFQU0hPVF9FUlJPUicsXG5cbiAgLyoqXG4gICAqIFRoZSBzbmFwc2hvdCB0ZXN0IHN1Y2NlZWRlZFxuICAgKi9cbiAgU05BUFNIT1RfU1VDQ0VTUyA9ICdTTkFQU0hPVF9TVUNDRVNTJyxcblxuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIHRlc3Qgc3VjY2VlZGVkXG4gICAqL1xuICBURVNUX1NVQ0NFU1MgPSAnVEVTVF9TVUNDRVNTJyxcblxuICAvKipcbiAgICogVGhlIGFzc2VydGlvbiBmYWlsZWRcbiAgICovXG4gIEFTU0VSVElPTl9GQUlMRUQgPSAnQVNTRVJUSU9OX0ZBSUxFRCcsXG59XG5cbi8qKlxuICogSW50ZWdyYXRpb24gdGVzdCBkaWFnbm9zdGljc1xuICogVGhpcyBpcyB1c2VkIHRvIHJlcG9ydCBiYWNrIHRoZSBzdGF0dXMgb2YgZWFjaCB0ZXN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlhZ25vc3RpYyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHN0YWNrXG4gICAqL1xuICByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpYWdub3N0aWMgbWVzc2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBpdCB0b29rIHRvIHJ1biB0aGUgdGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgZHVyYXRpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSByZWFzb24gZm9yIHRoZSBkaWFnbm9zdGljXG4gICAqL1xuICByZWFkb25seSByZWFzb246IERpYWdub3N0aWNSZWFzb247XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgbWVzc2FnZXMgdG8gcHJpbnRcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxNZXNzYWdlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZWxldmFudCBjb25maWcgb3B0aW9ucyB0aGF0IHdlcmUgdXNlZCBmb3IgdGhlIGludGVnIHRlc3RcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludFN1bW1hcnkodG90YWw6IG51bWJlciwgZmFpbGVkOiBudW1iZXIpOiB2b2lkIHtcbiAgaWYgKGZhaWxlZCA+IDApIHtcbiAgICBsb2dnZXIucHJpbnQoJyVzOiAgICAlcyAlcywgJXMgdG90YWwnLCBjaGFsay5ib2xkKCdUZXN0cycpLCBjaGFsay5yZWQoZmFpbGVkKSwgY2hhbGsucmVkKCdmYWlsZWQnKSwgdG90YWwpO1xuICB9IGVsc2Uge1xuICAgIGxvZ2dlci5wcmludCgnJXM6ICAgICVzICVzLCAlcyB0b3RhbCcsIGNoYWxrLmJvbGQoJ1Rlc3RzJyksIGNoYWxrLmdyZWVuKHRvdGFsKSwgY2hhbGsuZ3JlZW4oJ3Bhc3NlZCcpLCB0b3RhbCk7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3JtYXQgdGhlIGFzc2VydGlvbiByZXN1bHRzIHNvIHRoYXQgdGhlIHJlc3VsdHMgY2FuIGJlXG4gKiBwcmludGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRBc3NlcnRpb25SZXN1bHRzKHJlc3VsdHM6IEFzc2VydGlvblJlc3VsdHMpOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0cylcbiAgICAubWFwKChbaWQsIHJlc3VsdF0pID0+IGZvcm1hdCgnJXMlcycsIGlkLCByZXN1bHQuc3RhdHVzID09PSAnc3VjY2VzcycgPyBgIC0gJHtyZXN1bHQuc3RhdHVzfWAgOiBgXFxuJHtyZXN1bHQubWVzc2FnZX1gKSlcbiAgICAuam9pbignXFxuICAgICAgJyk7XG59XG5cbi8qKlxuICogUHJpbnQgb3V0IHRoZSByZXN1bHRzIGZyb20gdGVzdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW50UmVzdWx0cyhkaWFnbm9zdGljOiBEaWFnbm9zdGljKTogdm9pZCB7XG4gIHN3aXRjaCAoZGlhZ25vc3RpYy5yZWFzb24pIHtcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uU05BUFNIT1RfU1VDQ0VTUzpcbiAgICAgIGxvZ2dlci5zdWNjZXNzKCcgIFVOQ0hBTkdFRCAgJXMgJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5URVNUX1NVQ0NFU1M6XG4gICAgICBsb2dnZXIuc3VjY2VzcygnICBTVUNDRVNTICAgICVzICVzXFxuICAgICAgJywgZGlhZ25vc3RpYy50ZXN0TmFtZSwgY2hhbGsuZ3JheShgJHtkaWFnbm9zdGljLmR1cmF0aW9ufXNgKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uTk9fU05BUFNIT1Q6XG4gICAgICBsb2dnZXIuZXJyb3IoJyAgTkVXICAgICAgICAlcyAlcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX0ZBSUxFRDpcbiAgICAgIGxvZ2dlci5lcnJvcignICBDSEFOR0VEICAgICVzICVzXFxuJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBpbmRlbnRMaW5lcyhkaWFnbm9zdGljLm1lc3NhZ2UsIDYpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5URVNUX1dBUk5JTkc6XG4gICAgICBsb2dnZXIud2FybmluZygnICBXQVJOICAgICAgICVzICVzXFxuJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBpbmRlbnRMaW5lcyhkaWFnbm9zdGljLm1lc3NhZ2UsIDYpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5TTkFQU0hPVF9FUlJPUjpcbiAgICBjYXNlIERpYWdub3N0aWNSZWFzb24uVEVTVF9FUlJPUjpcbiAgICAgIGxvZ2dlci5lcnJvcignICBFUlJPUiAgICAgICVzICVzXFxuJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBpbmRlbnRMaW5lcyhkaWFnbm9zdGljLm1lc3NhZ2UsIDYpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5URVNUX0ZBSUxFRDpcbiAgICAgIGxvZ2dlci5lcnJvcignICBGQUlMRUQgICAgICVzICVzXFxuJXMnLCBkaWFnbm9zdGljLnRlc3ROYW1lLCBjaGFsay5ncmF5KGAke2RpYWdub3N0aWMuZHVyYXRpb259c2ApLCBpbmRlbnRMaW5lcyhkaWFnbm9zdGljLm1lc3NhZ2UsIDYpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRGlhZ25vc3RpY1JlYXNvbi5BU1NFUlRJT05fRkFJTEVEOlxuICAgICAgbG9nZ2VyLmVycm9yKCcgIEFTU0VSVCAgICAgJXMgJXNcXG4lcycsIGRpYWdub3N0aWMudGVzdE5hbWUsIGNoYWxrLmdyYXkoYCR7ZGlhZ25vc3RpYy5kdXJhdGlvbn1zYCksIGluZGVudExpbmVzKGRpYWdub3N0aWMubWVzc2FnZSwgNikpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgZm9yIChjb25zdCBhZGRsIG9mIGRpYWdub3N0aWMuYWRkaXRpb25hbE1lc3NhZ2VzID8/IFtdKSB7XG4gICAgbG9nZ2VyLnByaW50KGAgICAgICAke2FkZGx9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBhIG11bHRpbGluZSBzdHJpbmcgYW5kIGluZGVudHMgZXZlcnkgbGluZSB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBzcGFjZXMuXG4gKi9cbmZ1bmN0aW9uIGluZGVudExpbmVzKG1lc3NhZ2U6IHN0cmluZywgY291bnQgPSAyKTogc3RyaW5nIHtcbiAgcmV0dXJuIG1lc3NhZ2Uuc3BsaXQoJ1xcbicpLm1hcChsaW5lID0+ICcgJy5yZXBlYXQoY291bnQpICsgbGluZSkuam9pbignXFxuJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludExhZ2dhcmRzKHRlc3ROYW1lczogU2V0PHN0cmluZz4pIHtcbiAgY29uc3QgcGFydHMgPSBbXG4gICAgJyAgJyxcbiAgICBgV2FpdGluZyBmb3IgJHt0ZXN0TmFtZXMuc2l6ZX0gbW9yZWAsXG4gICAgdGVzdE5hbWVzLnNpemUgPCAxMCA/IFsnKCcsIEFycmF5LmZyb20odGVzdE5hbWVzKS5qb2luKCcsICcpLCAnKSddLmpvaW4oJycpIDogJycsXG4gIF07XG5cbiAgbG9nZ2VyLnByaW50KGNoYWxrLmdyZXkocGFydHMuZmlsdGVyKHggPT4geCkuam9pbignICcpKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRFcnJvcihlcnJvcjogYW55KTogc3RyaW5nIHtcbiAgY29uc3QgbmFtZSA9IGVycm9yLm5hbWUgfHwgJ0Vycm9yJztcbiAgY29uc3QgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKTtcblxuICBpZiAoZXJyb3IuY2F1c2UpIHtcbiAgICByZXR1cm4gYCR7bmFtZX06ICR7bWVzc2FnZX1cXG4ke2NoYWxrLmdyYXkoJ0NhdXNlOiAnICsgZm9ybWF0RXJyb3IoZXJyb3IuY2F1c2UpKX1gO1xuICB9XG5cbiAgcmV0dXJuIGAke25hbWV9OiAke21lc3NhZ2V9YDtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"extract_worker.d.ts","sourceRoot":"","sources":["extract_worker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,2BAA2B,EAAc,MAAM,WAAW,CAAC;AAEhG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CA4EtG;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B/E;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,GAAE,2BAAgC,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CA4D7I"}
1
+ {"version":3,"file":"extract_worker.d.ts","sourceRoot":"","sources":["extract_worker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,KAAK,EAAE,qBAAqB,EAAE,2BAA2B,EAAc,MAAM,WAAW,CAAC;AAEhG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CA8EtG;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B/E;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,GAAE,2BAAgC,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CA4D7I"}
@@ -48,6 +48,8 @@ async function integTestWorker(request) {
48
48
  dryRun: request.dryRun,
49
49
  updateWorkflow: request.updateWorkflow,
50
50
  verbosity,
51
+ roleArn: request.roleArn,
52
+ allowDeleteFailures: request.allowDeleteFailures,
51
53
  });
52
54
  if (results && Object.values(results).some(result => result.status === 'fail')) {
53
55
  failures.push(testInfo);
@@ -113,6 +115,7 @@ async function watchTestWorker(options) {
113
115
  await runner.watchIntegTest({
114
116
  testCaseName,
115
117
  verbosity,
118
+ roleArn: options.roleArn,
116
119
  });
117
120
  }
118
121
  }
@@ -189,4 +192,4 @@ workerpool.worker({
189
192
  integTestWorker,
190
193
  watchTestWorker,
191
194
  });
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFjdF93b3JrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleHRyYWN0X3dvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWlCQSwwQ0E0RUM7QUFFRCwwQ0EwQkM7QUFRRCxnREE0REM7QUE3TEQseUNBQXlDO0FBQ3pDLHlDQUFvRTtBQUVwRSxzRUFBMkQ7QUFFM0Qsc0NBQWtGO0FBSWxGOzs7Ozs7O0dBT0c7QUFDSSxLQUFLLFVBQVUsZUFBZSxDQUFDLE9BQThCO0lBQ2xFLE1BQU0sUUFBUSxHQUFvQixFQUFFLENBQUM7SUFDckMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7SUFFekMsS0FBSyxNQUFNLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBSSw2QkFBUyxDQUFDO1lBQ3pCLEdBQUcsUUFBUTtZQUNYLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztTQUNyQixDQUFDLENBQUMsQ0FBQyxvQkFBb0I7UUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXpCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLElBQUksd0JBQWUsQ0FBQztnQkFDakMsSUFBSTtnQkFDSixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0JBQ3hCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtnQkFDdEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2dCQUNwQixZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7Z0JBQ2xDLEdBQUcsRUFBRTtvQkFDSCxVQUFVLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksUUFBUTtpQkFDL0M7Z0JBQ0QsVUFBVSxFQUFFLFNBQVMsSUFBSSxDQUFDO2FBQzNCLEVBQUUsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFFaEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFekMsSUFBSSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDN0QsQ0FBQztZQUNELEtBQUssTUFBTSxZQUFZLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxJQUFJLENBQUM7b0JBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7d0JBQzVDLFlBQVk7d0JBQ1osS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO3dCQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07d0JBQ3RCLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYzt3QkFDdEMsU0FBUztxQkFDVixDQUFDLENBQUM7b0JBQ0gsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQy9FLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3hCLFVBQVUsQ0FBQyxVQUFVLENBQUM7NEJBQ3BCLE1BQU0sRUFBRSx5QkFBZ0IsQ0FBQyxnQkFBZ0I7NEJBQ3pDLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksWUFBWSxLQUFLLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRzs0QkFDckYsT0FBTyxFQUFFLElBQUEsK0JBQXNCLEVBQUMsT0FBTyxDQUFDOzRCQUN4QyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSTt5QkFDdEMsQ0FBQyxDQUFDO29CQUNMLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixVQUFVLENBQUMsVUFBVSxDQUFDOzRCQUNwQixNQUFNLEVBQUUseUJBQWdCLENBQUMsWUFBWTs0QkFDckMsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxZQUFZLEVBQUU7NEJBQzlDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUEsK0JBQXNCLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWU7NEJBQ3BFLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJO3lCQUN0QyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztnQkFDSCxDQUFDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1gsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDeEIsVUFBVSxDQUFDLFVBQVUsQ0FBQzt3QkFDcEIsTUFBTSxFQUFFLHlCQUFnQixDQUFDLFdBQVc7d0JBQ3BDLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksWUFBWSxLQUFLLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRzt3QkFDckYsT0FBTyxFQUFFLDRCQUE0QixJQUFBLG9CQUFXLEVBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ3JELFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJO3FCQUN0QyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEIsVUFBVSxDQUFDLFVBQVUsQ0FBQztnQkFDcEIsTUFBTSxFQUFFLHlCQUFnQixDQUFDLFVBQVU7Z0JBQ25DLFFBQVEsRUFBRSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHO2dCQUN2RSxPQUFPLEVBQUUsa0NBQWtDLElBQUEsb0JBQVcsRUFBQyxDQUFDLENBQUMsRUFBRTtnQkFDM0QsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUk7YUFDdEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRU0sS0FBSyxVQUFVLGVBQWUsQ0FBQyxPQUEwQjtJQUM5RCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztJQUN6QyxNQUFNLElBQUksR0FBRyxJQUFJLDZCQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBSSx3QkFBZSxDQUFDO1FBQ2pDLElBQUk7UUFDSixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7UUFDbEMsR0FBRyxFQUFFO1lBQ0gsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLFFBQVE7U0FDL0M7UUFDRCxVQUFVLEVBQUUsU0FBUyxJQUFJLENBQUM7S0FDM0IsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFekMsSUFBSSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQ0QsS0FBSyxNQUFNLFlBQVksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDOUMsTUFBTSxNQUFNLENBQUMsY0FBYyxDQUFDO1lBQzFCLFlBQVk7WUFDWixTQUFTO1NBQ1YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxRQUF1QixFQUFFLFVBQXVDLEVBQUU7SUFDekcsTUFBTSxXQUFXLEdBQUcsSUFBSSxLQUFLLEVBQXlCLENBQUM7SUFDdkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksNkJBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztJQUV0RSxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQzVCLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDcEIsTUFBTSxFQUFFLHlCQUFnQixDQUFDLFlBQVk7WUFDckMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE9BQU8sRUFBRSxpQ0FBaUM7WUFDMUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUk7U0FDdEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRVgsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSw0QkFBbUIsQ0FBQztZQUNyQyxJQUFJO1lBQ0osVUFBVSxFQUFFLE9BQU8sQ0FBQyxPQUFPLElBQUksS0FBSztTQUNyQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDMUIsVUFBVSxDQUFDLFVBQVUsQ0FBQztnQkFDcEIsTUFBTSxFQUFFLHlCQUFnQixDQUFDLFdBQVc7Z0JBQ3BDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJO2FBQ3RDLENBQUMsQ0FBQztZQUNILFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvRSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO29CQUN0RCxHQUFHLFVBQVU7b0JBQ2IsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUk7aUJBQ3hCLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixXQUFXLENBQUMsSUFBSSxDQUFDO29CQUNmLEdBQUcsSUFBSSxDQUFDLElBQUk7b0JBQ1osa0JBQWtCO2lCQUNuQixDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sVUFBVSxDQUFDLFVBQVUsQ0FBQztvQkFDcEIsTUFBTSxFQUFFLHlCQUFnQixDQUFDLGdCQUFnQjtvQkFDekMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixPQUFPLEVBQUUsU0FBUztvQkFDbEIsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUk7aUJBQ3hCLENBQUMsQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1FBQ2hCLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDcEIsT0FBTyxFQUFFLElBQUEsb0JBQVcsRUFBQyxDQUFDLENBQUM7WUFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE1BQU0sRUFBRSx5QkFBZ0IsQ0FBQyxjQUFjO1lBQ3ZDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJO1NBQ3hCLENBQUMsQ0FBQztJQUNuQixDQUFDO1lBQVMsQ0FBQztRQUNULFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDaEIsa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZixlQUFlO0NBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHdvcmtlcnBvb2wgZnJvbSAnd29ya2VycG9vbCc7XG5pbXBvcnQgeyBJbnRlZ1NuYXBzaG90UnVubmVyLCBJbnRlZ1Rlc3RSdW5uZXIgfSBmcm9tICcuLi8uLi9ydW5uZXInO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1Rlc3RJbmZvIH0gZnJvbSAnLi4vLi4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IEludGVnVGVzdCB9IGZyb20gJy4uLy4uL3J1bm5lci9pbnRlZ3JhdGlvbi10ZXN0cyc7XG5pbXBvcnQgdHlwZSB7IEludGVnVGVzdFdvcmtlckNvbmZpZywgU25hcHNob3RWZXJpZmljYXRpb25PcHRpb25zLCBEaWFnbm9zdGljIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IERpYWdub3N0aWNSZWFzb24sIGZvcm1hdEFzc2VydGlvblJlc3VsdHMsIGZvcm1hdEVycm9yIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB0eXBlIHsgSW50ZWdUZXN0QmF0Y2hSZXF1ZXN0IH0gZnJvbSAnLi4vaW50ZWctdGVzdC13b3JrZXInO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1dhdGNoT3B0aW9ucyB9IGZyb20gJy4uL2ludGVnLXdhdGNoLXdvcmtlcic7XG5cbi8qKlxuICogUnVucyBhIHNpbmdsZSBpbnRlZ3JhdGlvbiB0ZXN0IGJhdGNoIHJlcXVlc3QuXG4gKiBJZiB0aGUgdGVzdCBkb2VzIG5vdCBoYXZlIGFuIGV4aXN0aW5nIHNuYXBzaG90LFxuICogdGhpcyB3aWxsIGZpcnN0IGdlbmVyYXRlIGEgc25hcHNob3QgYW5kIHRoZW4gZXhlY3V0ZVxuICogdGhlIGludGVncmF0aW9uIHRlc3RzLlxuICpcbiAqIElmIHRoZSB0ZXN0cyBzdWNjZWVkIGl0IHdpbGwgdGhlbiBzYXZlIHRoZSBzbmFwc2hvdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW50ZWdUZXN0V29ya2VyKHJlcXVlc3Q6IEludGVnVGVzdEJhdGNoUmVxdWVzdCk6IFByb21pc2U8SW50ZWdUZXN0V29ya2VyQ29uZmlnW10+IHtcbiAgY29uc3QgZmFpbHVyZXM6IEludGVnVGVzdEluZm9bXSA9IFtdO1xuICBjb25zdCB2ZXJib3NpdHkgPSByZXF1ZXN0LnZlcmJvc2l0eSA/PyAwO1xuXG4gIGZvciAoY29uc3QgdGVzdEluZm8gb2YgcmVxdWVzdC50ZXN0cykge1xuICAgIGNvbnN0IHRlc3QgPSBuZXcgSW50ZWdUZXN0KHtcbiAgICAgIC4uLnRlc3RJbmZvLFxuICAgICAgd2F0Y2g6IHJlcXVlc3Qud2F0Y2gsXG4gICAgfSk7IC8vIEh5ZHJhdGUgZnJvbSBkYXRhXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBJbnRlZ1Rlc3RSdW5uZXIoe1xuICAgICAgICB0ZXN0LFxuICAgICAgICBwcm9maWxlOiByZXF1ZXN0LnByb2ZpbGUsXG4gICAgICAgIHJlZ2lvbjogcmVxdWVzdC5yZWdpb24sXG4gICAgICAgIHByb3h5OiByZXF1ZXN0LnByb3h5LFxuICAgICAgICBjYUJ1bmRsZVBhdGg6IHJlcXVlc3QuY2FCdW5kbGVQYXRoLFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICBDREtfRE9DS0VSOiBwcm9jZXNzLmVudi5DREtfRE9DS0VSID8/ICdkb2NrZXInLFxuICAgICAgICB9LFxuICAgICAgICBzaG93T3V0cHV0OiB2ZXJib3NpdHkgPj0gMixcbiAgICAgIH0sIHRlc3RJbmZvLmRlc3RydWN0aXZlQ2hhbmdlcyk7XG5cbiAgICAgIGNvbnN0IHRlc3RzID0gYXdhaXQgcnVubmVyLmFjdHVhbFRlc3RzKCk7XG5cbiAgICAgIGlmICghdGVzdHMgfHwgT2JqZWN0LmtleXModGVzdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHRlc3RzIGRlZmluZWQgZm9yICR7cnVubmVyLnRlc3ROYW1lfWApO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCB0ZXN0Q2FzZU5hbWUgb2YgT2JqZWN0LmtleXModGVzdHMpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJ1bm5lci5ydW5JbnRlZ1Rlc3RDYXNlKHtcbiAgICAgICAgICAgIHRlc3RDYXNlTmFtZSxcbiAgICAgICAgICAgIGNsZWFuOiByZXF1ZXN0LmNsZWFuLFxuICAgICAgICAgICAgZHJ5UnVuOiByZXF1ZXN0LmRyeVJ1bixcbiAgICAgICAgICAgIHVwZGF0ZVdvcmtmbG93OiByZXF1ZXN0LnVwZGF0ZVdvcmtmbG93LFxuICAgICAgICAgICAgdmVyYm9zaXR5LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChyZXN1bHRzICYmIE9iamVjdC52YWx1ZXMocmVzdWx0cykuc29tZShyZXN1bHQgPT4gcmVzdWx0LnN0YXR1cyA9PT0gJ2ZhaWwnKSkge1xuICAgICAgICAgICAgZmFpbHVyZXMucHVzaCh0ZXN0SW5mbyk7XG4gICAgICAgICAgICB3b3JrZXJwb29sLndvcmtlckVtaXQoe1xuICAgICAgICAgICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uQVNTRVJUSU9OX0ZBSUxFRCxcbiAgICAgICAgICAgICAgdGVzdE5hbWU6IGAke3J1bm5lci50ZXN0TmFtZX0tJHt0ZXN0Q2FzZU5hbWV9ICgke3JlcXVlc3QucHJvZmlsZX0vJHtyZXF1ZXN0LnJlZ2lvbn0pYCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogZm9ybWF0QXNzZXJ0aW9uUmVzdWx0cyhyZXN1bHRzKSxcbiAgICAgICAgICAgICAgZHVyYXRpb246IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3b3JrZXJwb29sLndvcmtlckVtaXQoe1xuICAgICAgICAgICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uVEVTVF9TVUNDRVNTLFxuICAgICAgICAgICAgICB0ZXN0TmFtZTogYCR7cnVubmVyLnRlc3ROYW1lfS0ke3Rlc3RDYXNlTmFtZX1gLFxuICAgICAgICAgICAgICBtZXNzYWdlOiByZXN1bHRzID8gZm9ybWF0QXNzZXJ0aW9uUmVzdWx0cyhyZXN1bHRzKSA6ICdOTyBBU1NFUlRJT05TJyxcbiAgICAgICAgICAgICAgZHVyYXRpb246IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGZhaWx1cmVzLnB1c2godGVzdEluZm8pO1xuICAgICAgICAgIHdvcmtlcnBvb2wud29ya2VyRW1pdCh7XG4gICAgICAgICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uVEVTVF9GQUlMRUQsXG4gICAgICAgICAgICB0ZXN0TmFtZTogYCR7cnVubmVyLnRlc3ROYW1lfS0ke3Rlc3RDYXNlTmFtZX0gKCR7cmVxdWVzdC5wcm9maWxlfS8ke3JlcXVlc3QucmVnaW9ufSlgLFxuICAgICAgICAgICAgbWVzc2FnZTogYEludGVncmF0aW9uIHRlc3QgZmFpbGVkOiAke2Zvcm1hdEVycm9yKGUpfWAsXG4gICAgICAgICAgICBkdXJhdGlvbjogKERhdGUubm93KCkgLSBzdGFydCkgLyAxMDAwLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZmFpbHVyZXMucHVzaCh0ZXN0SW5mbyk7XG4gICAgICB3b3JrZXJwb29sLndvcmtlckVtaXQoe1xuICAgICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uVEVTVF9FUlJPUixcbiAgICAgICAgdGVzdE5hbWU6IGAke3Rlc3RJbmZvLmZpbGVOYW1lfSAoJHtyZXF1ZXN0LnByb2ZpbGV9LyR7cmVxdWVzdC5yZWdpb259KWAsXG4gICAgICAgIG1lc3NhZ2U6IGBFcnJvciBkdXJpbmcgaW50ZWdyYXRpb24gdGVzdDogJHtmb3JtYXRFcnJvcihlKX1gLFxuICAgICAgICBkdXJhdGlvbjogKERhdGUubm93KCkgLSBzdGFydCkgLyAxMDAwLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhaWx1cmVzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2F0Y2hUZXN0V29ya2VyKG9wdGlvbnM6IEludGVnV2F0Y2hPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHZlcmJvc2l0eSA9IG9wdGlvbnMudmVyYm9zaXR5ID8/IDA7XG4gIGNvbnN0IHRlc3QgPSBuZXcgSW50ZWdUZXN0KG9wdGlvbnMpO1xuICBjb25zdCBydW5uZXIgPSBuZXcgSW50ZWdUZXN0UnVubmVyKHtcbiAgICB0ZXN0LFxuICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgIHByb3h5OiBvcHRpb25zLnByb3h5LFxuICAgIGNhQnVuZGxlUGF0aDogb3B0aW9ucy5jYUJ1bmRsZVBhdGgsXG4gICAgZW52OiB7XG4gICAgICBDREtfRE9DS0VSOiBwcm9jZXNzLmVudi5DREtfRE9DS0VSID8/ICdkb2NrZXInLFxuICAgIH0sXG4gICAgc2hvd091dHB1dDogdmVyYm9zaXR5ID49IDIsXG4gIH0pO1xuICBydW5uZXIuY3JlYXRlQ2RrQ29udGV4dEpzb24oKTtcbiAgY29uc3QgdGVzdHMgPSBhd2FpdCBydW5uZXIuYWN0dWFsVGVzdHMoKTtcblxuICBpZiAoIXRlc3RzIHx8IE9iamVjdC5rZXlzKHRlc3RzKS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHRlc3RzIGRlZmluZWQgZm9yICR7cnVubmVyLnRlc3ROYW1lfWApO1xuICB9XG4gIGZvciAoY29uc3QgdGVzdENhc2VOYW1lIG9mIE9iamVjdC5rZXlzKHRlc3RzKSkge1xuICAgIGF3YWl0IHJ1bm5lci53YXRjaEludGVnVGVzdCh7XG4gICAgICB0ZXN0Q2FzZU5hbWUsXG4gICAgICB2ZXJib3NpdHksXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIGEgc2luZ2xlIHNuYXBzaG90IHRlc3QgYmF0Y2ggcmVxdWVzdC5cbiAqIEZvciBlYWNoIGludGVncmF0aW9uIHRlc3QgdGhpcyB3aWxsIGNoZWNrIHRvIHNlZVxuICogaWYgdGhlcmUgaXMgYW4gZXhpc3Rpbmcgc25hcHNob3QsIGFuZCBpZiB0aGVyZSBpcyB3aWxsXG4gKiBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNoYW5nZXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNuYXBzaG90VGVzdFdvcmtlcih0ZXN0SW5mbzogSW50ZWdUZXN0SW5mbywgb3B0aW9uczogU25hcHNob3RWZXJpZmljYXRpb25PcHRpb25zID0ge30pOiBQcm9taXNlPEludGVnVGVzdFdvcmtlckNvbmZpZ1tdPiB7XG4gIGNvbnN0IGZhaWxlZFRlc3RzID0gbmV3IEFycmF5PEludGVnVGVzdFdvcmtlckNvbmZpZz4oKTtcbiAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICBjb25zdCB0ZXN0ID0gbmV3IEludGVnVGVzdCh0ZXN0SW5mbyk7IC8vIEh5ZHJhdGUgdGhlIGRhdGEgcmVjb3JkIGFnYWluXG5cbiAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICB3b3JrZXJwb29sLndvcmtlckVtaXQoe1xuICAgICAgcmVhc29uOiBEaWFnbm9zdGljUmVhc29uLlRFU1RfV0FSTklORyxcbiAgICAgIHRlc3ROYW1lOiB0ZXN0LnRlc3ROYW1lLFxuICAgICAgbWVzc2FnZTogJ1Rlc3QgaXMgdGFraW5nIGEgdmVyeSBsb25nIHRpbWUnLFxuICAgICAgZHVyYXRpb246IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMCxcbiAgICB9KTtcbiAgfSwgNjBfMDAwKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBJbnRlZ1NuYXBzaG90UnVubmVyKHtcbiAgICAgIHRlc3QsXG4gICAgICBzaG93T3V0cHV0OiBvcHRpb25zLnZlcmJvc2UgPz8gZmFsc2UsXG4gICAgfSk7XG4gICAgaWYgKCFydW5uZXIuaGFzU25hcHNob3QoKSkge1xuICAgICAgd29ya2VycG9vbC53b3JrZXJFbWl0KHtcbiAgICAgICAgcmVhc29uOiBEaWFnbm9zdGljUmVhc29uLk5PX1NOQVBTSE9ULFxuICAgICAgICB0ZXN0TmFtZTogdGVzdC50ZXN0TmFtZSxcbiAgICAgICAgbWVzc2FnZTogJ05vIFNuYXBzaG90JyxcbiAgICAgICAgZHVyYXRpb246IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMCxcbiAgICAgIH0pO1xuICAgICAgZmFpbGVkVGVzdHMucHVzaCh0ZXN0LmluZm8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IGRpYWdub3N0aWNzLCBkZXN0cnVjdGl2ZUNoYW5nZXMgfSA9IGF3YWl0IHJ1bm5lci50ZXN0U25hcHNob3Qob3B0aW9ucyk7XG4gICAgICBpZiAoZGlhZ25vc3RpY3MubGVuZ3RoID4gMCkge1xuICAgICAgICBkaWFnbm9zdGljcy5mb3JFYWNoKGRpYWdub3N0aWMgPT4gd29ya2VycG9vbC53b3JrZXJFbWl0KHtcbiAgICAgICAgICAuLi5kaWFnbm9zdGljLFxuICAgICAgICAgIGR1cmF0aW9uOiAoRGF0ZS5ub3coKSAtIHN0YXJ0KSAvIDEwMDAsXG4gICAgICAgIH0gYXMgRGlhZ25vc3RpYykpO1xuICAgICAgICBmYWlsZWRUZXN0cy5wdXNoKHtcbiAgICAgICAgICAuLi50ZXN0LmluZm8sXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVDaGFuZ2VzLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdvcmtlcnBvb2wud29ya2VyRW1pdCh7XG4gICAgICAgICAgcmVhc29uOiBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX1NVQ0NFU1MsXG4gICAgICAgICAgdGVzdE5hbWU6IHRlc3QudGVzdE5hbWUsXG4gICAgICAgICAgbWVzc2FnZTogJ1N1Y2Nlc3MnLFxuICAgICAgICAgIGR1cmF0aW9uOiAoRGF0ZS5ub3coKSAtIHN0YXJ0KSAvIDEwMDAsXG4gICAgICAgIH0gYXMgRGlhZ25vc3RpYyk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBmYWlsZWRUZXN0cy5wdXNoKHRlc3QuaW5mbyk7XG4gICAgd29ya2VycG9vbC53b3JrZXJFbWl0KHtcbiAgICAgIG1lc3NhZ2U6IGZvcm1hdEVycm9yKGUpLFxuICAgICAgdGVzdE5hbWU6IHRlc3QudGVzdE5hbWUsXG4gICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uU05BUFNIT1RfRVJST1IsXG4gICAgICBkdXJhdGlvbjogKERhdGUubm93KCkgLSBzdGFydCkgLyAxMDAwLFxuICAgIH0gYXMgRGlhZ25vc3RpYyk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgfVxuXG4gIHJldHVybiBmYWlsZWRUZXN0cztcbn1cblxud29ya2VycG9vbC53b3JrZXIoe1xuICBzbmFwc2hvdFRlc3RXb3JrZXIsXG4gIGludGVnVGVzdFdvcmtlcixcbiAgd2F0Y2hUZXN0V29ya2VyLFxufSk7XG4iXX0=
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFjdF93b3JrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleHRyYWN0X3dvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWlCQSwwQ0E4RUM7QUFFRCwwQ0EyQkM7QUFRRCxnREE0REM7QUFoTUQseUNBQXlDO0FBQ3pDLHlDQUFvRTtBQUVwRSxzRUFBMkQ7QUFFM0Qsc0NBQWtGO0FBSWxGOzs7Ozs7O0dBT0c7QUFDSSxLQUFLLFVBQVUsZUFBZSxDQUFDLE9BQThCO0lBQ2xFLE1BQU0sUUFBUSxHQUFvQixFQUFFLENBQUM7SUFDckMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7SUFFekMsS0FBSyxNQUFNLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBSSw2QkFBUyxDQUFDO1lBQ3pCLEdBQUcsUUFBUTtZQUNYLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztTQUNyQixDQUFDLENBQUMsQ0FBQyxvQkFBb0I7UUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXpCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLElBQUksd0JBQWUsQ0FBQztnQkFDakMsSUFBSTtnQkFDSixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0JBQ3hCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtnQkFDdEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2dCQUNwQixZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7Z0JBQ2xDLEdBQUcsRUFBRTtvQkFDSCxVQUFVLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksUUFBUTtpQkFDL0M7Z0JBQ0QsVUFBVSxFQUFFLFNBQVMsSUFBSSxDQUFDO2FBQzNCLEVBQUUsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFFaEMsTUFBTSxLQUFLLEdBQUcsTUFB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QUFDO1FBQ2hCLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDcEIsT0FBTyxFQUFFLElBQUEsb0JBQVcsRUFBQyxDQUFDLENBQUM7WUFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE1BQU0sRUFBRSx5QkFBZ0IsQ0FBQyxjQUFjO1lBQ3ZDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJO1NBQ3hCLENBQUMsQ0FBQztJQUNuQixDQUFDO1lBQVMsQ0FBQztRQUNULFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDaEIsa0JBQWtCO0lBQ2xCLGVBQWU7SUFDZixlQUFlO0NBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHdvcmtlcnBvb2wgZnJvbSAnd29ya2VycG9vbCc7XG5pbXBvcnQgeyBJbnRlZ1NuYXBzaG90UnVubmVyLCBJbnRlZ1Rlc3RSdW5uZXIgfSBmcm9tICcuLi8uLi9ydW5uZXInO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1Rlc3RJbmZvIH0gZnJvbSAnLi4vLi4vcnVubmVyL2ludGVncmF0aW9uLXRlc3RzJztcbmltcG9ydCB7IEludGVnVGVzdCB9IGZyb20gJy4uLy4uL3J1bm5lci9pbnRlZ3JhdGlvbi10ZXN0cyc7XG5pbXBvcnQgdHlwZSB7IEludGVnVGVzdFdvcmtlckNvbmZpZywgU25hcHNob3RWZXJpZmljYXRpb25PcHRpb25zLCBEaWFnbm9zdGljIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IERpYWdub3N0aWNSZWFzb24sIGZvcm1hdEFzc2VydGlvblJlc3VsdHMsIGZvcm1hdEVycm9yIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB0eXBlIHsgSW50ZWdUZXN0QmF0Y2hSZXF1ZXN0IH0gZnJvbSAnLi4vaW50ZWctdGVzdC13b3JrZXInO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1dhdGNoT3B0aW9ucyB9IGZyb20gJy4uL2ludGVnLXdhdGNoLXdvcmtlcic7XG5cbi8qKlxuICogUnVucyBhIHNpbmdsZSBpbnRlZ3JhdGlvbiB0ZXN0IGJhdGNoIHJlcXVlc3QuXG4gKiBJZiB0aGUgdGVzdCBkb2VzIG5vdCBoYXZlIGFuIGV4aXN0aW5nIHNuYXBzaG90LFxuICogdGhpcyB3aWxsIGZpcnN0IGdlbmVyYXRlIGEgc25hcHNob3QgYW5kIHRoZW4gZXhlY3V0ZVxuICogdGhlIGludGVncmF0aW9uIHRlc3RzLlxuICpcbiAqIElmIHRoZSB0ZXN0cyBzdWNjZWVkIGl0IHdpbGwgdGhlbiBzYXZlIHRoZSBzbmFwc2hvdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW50ZWdUZXN0V29ya2VyKHJlcXVlc3Q6IEludGVnVGVzdEJhdGNoUmVxdWVzdCk6IFByb21pc2U8SW50ZWdUZXN0V29ya2VyQ29uZmlnW10+IHtcbiAgY29uc3QgZmFpbHVyZXM6IEludGVnVGVzdEluZm9bXSA9IFtdO1xuICBjb25zdCB2ZXJib3NpdHkgPSByZXF1ZXN0LnZlcmJvc2l0eSA/PyAwO1xuXG4gIGZvciAoY29uc3QgdGVzdEluZm8gb2YgcmVxdWVzdC50ZXN0cykge1xuICAgIGNvbnN0IHRlc3QgPSBuZXcgSW50ZWdUZXN0KHtcbiAgICAgIC4uLnRlc3RJbmZvLFxuICAgICAgd2F0Y2g6IHJlcXVlc3Qud2F0Y2gsXG4gICAgfSk7IC8vIEh5ZHJhdGUgZnJvbSBkYXRhXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBJbnRlZ1Rlc3RSdW5uZXIoe1xuICAgICAgICB0ZXN0LFxuICAgICAgICBwcm9maWxlOiByZXF1ZXN0LnByb2ZpbGUsXG4gICAgICAgIHJlZ2lvbjogcmVxdWVzdC5yZWdpb24sXG4gICAgICAgIHByb3h5OiByZXF1ZXN0LnByb3h5LFxuICAgICAgICBjYUJ1bmRsZVBhdGg6IHJlcXVlc3QuY2FCdW5kbGVQYXRoLFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICBDREtfRE9DS0VSOiBwcm9jZXNzLmVudi5DREtfRE9DS0VSID8/ICdkb2NrZXInLFxuICAgICAgICB9LFxuICAgICAgICBzaG93T3V0cHV0OiB2ZXJib3NpdHkgPj0gMixcbiAgICAgIH0sIHRlc3RJbmZvLmRlc3RydWN0aXZlQ2hhbmdlcyk7XG5cbiAgICAgIGNvbnN0IHRlc3RzID0gYXdhaXQgcnVubmVyLmFjdHVhbFRlc3RzKCk7XG5cbiAgICAgIGlmICghdGVzdHMgfHwgT2JqZWN0LmtleXModGVzdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHRlc3RzIGRlZmluZWQgZm9yICR7cnVubmVyLnRlc3ROYW1lfWApO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCB0ZXN0Q2FzZU5hbWUgb2YgT2JqZWN0LmtleXModGVzdHMpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJ1bm5lci5ydW5JbnRlZ1Rlc3RDYXNlKHtcbiAgICAgICAgICAgIHRlc3RDYXNlTmFtZSxcbiAgICAgICAgICAgIGNsZWFuOiByZXF1ZXN0LmNsZWFuLFxuICAgICAgICAgICAgZHJ5UnVuOiByZXF1ZXN0LmRyeVJ1bixcbiAgICAgICAgICAgIHVwZGF0ZVdvcmtmbG93OiByZXF1ZXN0LnVwZGF0ZVdvcmtmbG93LFxuICAgICAgICAgICAgdmVyYm9zaXR5LFxuICAgICAgICAgICAgcm9sZUFybjogcmVxdWVzdC5yb2xlQXJuLFxuICAgICAgICAgICAgYWxsb3dEZWxldGVGYWlsdXJlczogcmVxdWVzdC5hbGxvd0RlbGV0ZUZhaWx1cmVzLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChyZXN1bHRzICYmIE9iamVjdC52YWx1ZXMocmVzdWx0cykuc29tZShyZXN1bHQgPT4gcmVzdWx0LnN0YXR1cyA9PT0gJ2ZhaWwnKSkge1xuICAgICAgICAgICAgZmFpbHVyZXMucHVzaCh0ZXN0SW5mbyk7XG4gICAgICAgICAgICB3b3JrZXJwb29sLndvcmtlckVtaXQoe1xuICAgICAgICAgICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uQVNTRVJUSU9OX0ZBSUxFRCxcbiAgICAgICAgICAgICAgdGVzdE5hbWU6IGAke3J1bm5lci50ZXN0TmFtZX0tJHt0ZXN0Q2FzZU5hbWV9ICgke3JlcXVlc3QucHJvZmlsZX0vJHtyZXF1ZXN0LnJlZ2lvbn0pYCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogZm9ybWF0QXNzZXJ0aW9uUmVzdWx0cyhyZXN1bHRzKSxcbiAgICAgICAgICAgICAgZHVyYXRpb246IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3b3JrZXJwb29sLndvcmtlckVtaXQoe1xuICAgICAgICAgICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uVEVTVF9TVUNDRVNTLFxuICAgICAgICAgICAgICB0ZXN0TmFtZTogYCR7cnVubmVyLnRlc3ROYW1lfS0ke3Rlc3RDYXNlTmFtZX1gLFxuICAgICAgICAgICAgICBtZXNzYWdlOiByZXN1bHRzID8gZm9ybWF0QXNzZXJ0aW9uUmVzdWx0cyhyZXN1bHRzKSA6ICdOTyBBU1NFUlRJT05TJyxcbiAgICAgICAgICAgICAgZHVyYXRpb246IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGZhaWx1cmVzLnB1c2godGVzdEluZm8pO1xuICAgICAgICAgIHdvcmtlcnBvb2wud29ya2VyRW1pdCh7XG4gICAgICAgICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uVEVTVF9GQUlMRUQsXG4gICAgICAgICAgICB0ZXN0TmFtZTogYCR7cnVubmVyLnRlc3ROYW1lfS0ke3Rlc3RDYXNlTmFtZX0gKCR7cmVxdWVzdC5wcm9maWxlfS8ke3JlcXVlc3QucmVnaW9ufSlgLFxuICAgICAgICAgICAgbWVzc2FnZTogYEludGVncmF0aW9uIHRlc3QgZmFpbGVkOiAke2Zvcm1hdEVycm9yKGUpfWAsXG4gICAgICAgICAgICBkdXJhdGlvbjogKERhdGUubm93KCkgLSBzdGFydCkgLyAxMDAwLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZmFpbHVyZXMucHVzaCh0ZXN0SW5mbyk7XG4gICAgICB3b3JrZXJwb29sLndvcmtlckVtaXQoe1xuICAgICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uVEVTVF9FUlJPUixcbiAgICAgICAgdGVzdE5hbWU6IGAke3Rlc3RJbmZvLmZpbGVOYW1lfSAoJHtyZXF1ZXN0LnByb2ZpbGV9LyR7cmVxdWVzdC5yZWdpb259KWAsXG4gICAgICAgIG1lc3NhZ2U6IGBFcnJvciBkdXJpbmcgaW50ZWdyYXRpb24gdGVzdDogJHtmb3JtYXRFcnJvcihlKX1gLFxuICAgICAgICBkdXJhdGlvbjogKERhdGUubm93KCkgLSBzdGFydCkgLyAxMDAwLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhaWx1cmVzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2F0Y2hUZXN0V29ya2VyKG9wdGlvbnM6IEludGVnV2F0Y2hPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHZlcmJvc2l0eSA9IG9wdGlvbnMudmVyYm9zaXR5ID8/IDA7XG4gIGNvbnN0IHRlc3QgPSBuZXcgSW50ZWdUZXN0KG9wdGlvbnMpO1xuICBjb25zdCBydW5uZXIgPSBuZXcgSW50ZWdUZXN0UnVubmVyKHtcbiAgICB0ZXN0LFxuICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgIHByb3h5OiBvcHRpb25zLnByb3h5LFxuICAgIGNhQnVuZGxlUGF0aDogb3B0aW9ucy5jYUJ1bmRsZVBhdGgsXG4gICAgZW52OiB7XG4gICAgICBDREtfRE9DS0VSOiBwcm9jZXNzLmVudi5DREtfRE9DS0VSID8/ICdkb2NrZXInLFxuICAgIH0sXG4gICAgc2hvd091dHB1dDogdmVyYm9zaXR5ID49IDIsXG4gIH0pO1xuICBydW5uZXIuY3JlYXRlQ2RrQ29udGV4dEpzb24oKTtcbiAgY29uc3QgdGVzdHMgPSBhd2FpdCBydW5uZXIuYWN0dWFsVGVzdHMoKTtcblxuICBpZiAoIXRlc3RzIHx8IE9iamVjdC5rZXlzKHRlc3RzKS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHRlc3RzIGRlZmluZWQgZm9yICR7cnVubmVyLnRlc3ROYW1lfWApO1xuICB9XG4gIGZvciAoY29uc3QgdGVzdENhc2VOYW1lIG9mIE9iamVjdC5rZXlzKHRlc3RzKSkge1xuICAgIGF3YWl0IHJ1bm5lci53YXRjaEludGVnVGVzdCh7XG4gICAgICB0ZXN0Q2FzZU5hbWUsXG4gICAgICB2ZXJib3NpdHksXG4gICAgICByb2xlQXJuOiBvcHRpb25zLnJvbGVBcm4sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIGEgc2luZ2xlIHNuYXBzaG90IHRlc3QgYmF0Y2ggcmVxdWVzdC5cbiAqIEZvciBlYWNoIGludGVncmF0aW9uIHRlc3QgdGhpcyB3aWxsIGNoZWNrIHRvIHNlZVxuICogaWYgdGhlcmUgaXMgYW4gZXhpc3Rpbmcgc25hcHNob3QsIGFuZCBpZiB0aGVyZSBpcyB3aWxsXG4gKiBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGNoYW5nZXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNuYXBzaG90VGVzdFdvcmtlcih0ZXN0SW5mbzogSW50ZWdUZXN0SW5mbywgb3B0aW9uczogU25hcHNob3RWZXJpZmljYXRpb25PcHRpb25zID0ge30pOiBQcm9taXNlPEludGVnVGVzdFdvcmtlckNvbmZpZ1tdPiB7XG4gIGNvbnN0IGZhaWxlZFRlc3RzID0gbmV3IEFycmF5PEludGVnVGVzdFdvcmtlckNvbmZpZz4oKTtcbiAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICBjb25zdCB0ZXN0ID0gbmV3IEludGVnVGVzdCh0ZXN0SW5mbyk7IC8vIEh5ZHJhdGUgdGhlIGRhdGEgcmVjb3JkIGFnYWluXG5cbiAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICB3b3JrZXJwb29sLndvcmtlckVtaXQoe1xuICAgICAgcmVhc29uOiBEaWFnbm9zdGljUmVhc29uLlRFU1RfV0FSTklORyxcbiAgICAgIHRlc3ROYW1lOiB0ZXN0LnRlc3ROYW1lLFxuICAgICAgbWVzc2FnZTogJ1Rlc3QgaXMgdGFraW5nIGEgdmVyeSBsb25nIHRpbWUnLFxuICAgICAgZHVyYXRpb246IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMCxcbiAgICB9KTtcbiAgfSwgNjBfMDAwKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBJbnRlZ1NuYXBzaG90UnVubmVyKHtcbiAgICAgIHRlc3QsXG4gICAgICBzaG93T3V0cHV0OiBvcHRpb25zLnZlcmJvc2UgPz8gZmFsc2UsXG4gICAgfSk7XG4gICAgaWYgKCFydW5uZXIuaGFzU25hcHNob3QoKSkge1xuICAgICAgd29ya2VycG9vbC53b3JrZXJFbWl0KHtcbiAgICAgICAgcmVhc29uOiBEaWFnbm9zdGljUmVhc29uLk5PX1NOQVBTSE9ULFxuICAgICAgICB0ZXN0TmFtZTogdGVzdC50ZXN0TmFtZSxcbiAgICAgICAgbWVzc2FnZTogJ05vIFNuYXBzaG90JyxcbiAgICAgICAgZHVyYXRpb246IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMCxcbiAgICAgIH0pO1xuICAgICAgZmFpbGVkVGVzdHMucHVzaCh0ZXN0LmluZm8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IGRpYWdub3N0aWNzLCBkZXN0cnVjdGl2ZUNoYW5nZXMgfSA9IGF3YWl0IHJ1bm5lci50ZXN0U25hcHNob3Qob3B0aW9ucyk7XG4gICAgICBpZiAoZGlhZ25vc3RpY3MubGVuZ3RoID4gMCkge1xuICAgICAgICBkaWFnbm9zdGljcy5mb3JFYWNoKGRpYWdub3N0aWMgPT4gd29ya2VycG9vbC53b3JrZXJFbWl0KHtcbiAgICAgICAgICAuLi5kaWFnbm9zdGljLFxuICAgICAgICAgIGR1cmF0aW9uOiAoRGF0ZS5ub3coKSAtIHN0YXJ0KSAvIDEwMDAsXG4gICAgICAgIH0gYXMgRGlhZ25vc3RpYykpO1xuICAgICAgICBmYWlsZWRUZXN0cy5wdXNoKHtcbiAgICAgICAgICAuLi50ZXN0LmluZm8sXG4gICAgICAgICAgZGVzdHJ1Y3RpdmVDaGFuZ2VzLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdvcmtlcnBvb2wud29ya2VyRW1pdCh7XG4gICAgICAgICAgcmVhc29uOiBEaWFnbm9zdGljUmVhc29uLlNOQVBTSE9UX1NVQ0NFU1MsXG4gICAgICAgICAgdGVzdE5hbWU6IHRlc3QudGVzdE5hbWUsXG4gICAgICAgICAgbWVzc2FnZTogJ1N1Y2Nlc3MnLFxuICAgICAgICAgIGR1cmF0aW9uOiAoRGF0ZS5ub3coKSAtIHN0YXJ0KSAvIDEwMDAsXG4gICAgICAgIH0gYXMgRGlhZ25vc3RpYyk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBmYWlsZWRUZXN0cy5wdXNoKHRlc3QuaW5mbyk7XG4gICAgd29ya2VycG9vbC53b3JrZXJFbWl0KHtcbiAgICAgIG1lc3NhZ2U6IGZvcm1hdEVycm9yKGUpLFxuICAgICAgdGVzdE5hbWU6IHRlc3QudGVzdE5hbWUsXG4gICAgICByZWFzb246IERpYWdub3N0aWNSZWFzb24uU05BUFNIT1RfRVJST1IsXG4gICAgICBkdXJhdGlvbjogKERhdGUubm93KCkgLSBzdGFydCkgLyAxMDAwLFxuICAgIH0gYXMgRGlhZ25vc3RpYyk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgfVxuXG4gIHJldHVybiBmYWlsZWRUZXN0cztcbn1cblxud29ya2VycG9vbC53b3JrZXIoe1xuICBzbmFwc2hvdFRlc3RXb3JrZXIsXG4gIGludGVnVGVzdFdvcmtlcixcbiAgd2F0Y2hUZXN0V29ya2VyLFxufSk7XG4iXX0=