construct-hub 0.4.412 → 0.4.413

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.
@@ -352,6 +352,7 @@ function getRelevantVersionInfos(changes, metrics, denyList, licenseList, knownV
352
352
  // Parse all the dates to ensure they are comparable
353
353
  .map(([version, isoDate]) => [version, new Date(isoDate)]);
354
354
  metrics.putMetric("PackageVersionCount" /* MetricName.PACKAGE_VERSION_COUNT */, packageVersionUpdates.length, aws_embedded_metrics_1.Unit.Count);
355
+ const unpublishedVersions = [];
355
356
  for (const [version, modified] of packageVersionUpdates) {
356
357
  const knownKey = `${change.doc.name}@${version}`;
357
358
  const known = knownVersions.get(knownKey);
@@ -359,7 +360,7 @@ function getRelevantVersionInfos(changes, metrics, denyList, licenseList, knownV
359
360
  const infos = change.doc.versions[version];
360
361
  if (infos == null) {
361
362
  // Could be the version in question was un-published.
362
- console.log(`[${change.seq}] Could not find info for "${change.doc.name}@${version}". Was it un-published?`);
363
+ unpublishedVersions.push(knownKey);
363
364
  }
364
365
  else if (isConstructLibrary(infos)) {
365
366
  // skip if this package is denied
@@ -384,6 +385,9 @@ function getRelevantVersionInfos(changes, metrics, denyList, licenseList, knownV
384
385
  // Else this is not a construct library, so we'll just ignore it...
385
386
  }
386
387
  }
388
+ if (unpublishedVersions.length > 0) {
389
+ console.log(`[${change.seq}] Could not find info for the following versions. Were they un-published?\n${unpublishedVersions.join(',\n')}`);
390
+ }
387
391
  }
388
392
  return result;
389
393
  /**
@@ -438,4 +442,4 @@ function objFromDateMap(xs) {
438
442
  function dateMapFromObj(xs) {
439
443
  return new Map(Object.entries(xs).map(([k, v]) => [k, new Date(v)]));
440
444
  }
441
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtLWpzLWZvbGxvd2VyLmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYWNrYWdlLXNvdXJjZXMvbnBtanMvbnBtLWpzLWZvbGxvd2VyLmxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTRFQSwwQkE0SkM7QUF4T0QsbUNBQW1DO0FBQ25DLDBEQUF1RDtBQUN2RCxrREFLNEI7QUFLNUIsK0RBSzhCO0FBRTlCLHlEQUF1RDtBQUN2RCxpRUFBaUU7QUFDakUsdUVBS21DO0FBQ25DLCtFQUE2RTtBQUU3RSx1RkFBOEU7QUFDOUUsMEZBQW9GO0FBQ3BGLDhFQUdnRDtBQUNoRCx3R0FBd0Y7QUFDeEYsOEVBQW9FO0FBQ3BFLGlFQUFpRTtBQUNqRSxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBRXBFLE1BQU0sa0JBQWtCLEdBQXdCLElBQUksR0FBRyxDQUFDO0lBQ3RELEtBQUs7SUFDTCxTQUFTO0lBQ1QsUUFBUTtJQUNSLE9BQU87SUFDUCxPQUFPO0NBQ1IsQ0FBQyxDQUFDO0FBQ0gsTUFBTSx3QkFBd0IsR0FBRyw4QkFBOEIsQ0FBQztBQUVoRTs7Ozs7R0FLRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUVoRSxvQ0FBb0M7QUFDcEMsb0NBQWEsQ0FBQyxTQUFTLEdBQUcsMkNBQWlCLENBQUM7QUFFNUMscURBQXFEO0FBQ3JELGlFQUFpRTtBQUNqRSxJQUFBLHNDQUFrQixFQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLGlFQUFpRTtBQUNqRSxJQUFBLHNDQUFrQixFQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRXBDOzs7Ozs7Ozs7R0FTRztBQUNJLEtBQUssVUFBVSxPQUFPLENBQUMsS0FBcUIsRUFBRSxPQUFnQjtJQUNuRSxPQUFPLENBQUMsR0FBRyxDQUFD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LENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQ3JELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQ3JCLEVBQW1DO0lBRW5DLE9BQU8sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvbnNvbGUgZnJvbSAnY29uc29sZSc7XG5pbXBvcnQgeyBJbnZva2VDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWxhbWJkYSc7XG5pbXBvcnQge1xuICBHZXRPYmplY3RDb21tYW5kLFxuICBOb1N1Y2hLZXksXG4gIFB1dE9iamVjdENvbW1hbmQsXG4gIFB1dE9iamVjdENvbW1hbmRJbnB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB0eXBlIHtcbiAgTm9kZUpzUnVudGltZVN0cmVhbWluZ0Jsb2JQYXlsb2FkT3V0cHV0VHlwZXMsXG4gIFN0cmVhbWluZ0Jsb2JQYXlsb2FkSW5wdXRUeXBlcyxcbn0gZnJvbSAnQHNtaXRoeS90eXBlcyc7XG5pbXBvcnQge1xuICBtZXRyaWNTY29wZSxcbiAgQ29uZmlndXJhdGlvbixcbiAgTWV0cmljc0xvZ2dlcixcbiAgVW5pdCxcbn0gZnJvbSAnYXdzLWVtYmVkZGVkLW1ldHJpY3MnO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0LCBTY2hlZHVsZWRFdmVudCB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgY2FwdHVyZUhUVFBzR2xvYmFsIH0gZnJvbSAnYXdzLXhyYXktc2RrLWNvcmUnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmltcG9ydCB7XG4gIE1ldHJpY05hbWUsXG4gIE1BUktFUl9GSUxFX05BTUUsXG4gIE1FVFJJQ1NfTkFNRVNQQUNFLFxuICBLTk9XTl9WRVJTSU9OU19GSUxFX05BTUUsXG59IGZyb20gJy4vY29uc3RhbnRzLmxhbWJkYS1zaGFyZWQnO1xuaW1wb3J0IHsgQ291Y2hDaGFuZ2VzLCBEYXRhYmFzZUNoYW5nZSB9IGZyb20gJy4vY291Y2gtY2hhbmdlcy5sYW1iZGEtc2hhcmVkJztcbmltcG9ydCB7IFBhY2thZ2VWZXJzaW9uIH0gZnJvbSAnLi9zdGFnZS1hbmQtbm90aWZ5LmxhbWJkYSc7XG5pbXBvcnQgeyBEZW55TGlzdENsaWVudCB9IGZyb20gJy4uLy4uL2JhY2tlbmQvZGVueS1saXN0L2NsaWVudC5sYW1iZGEtc2hhcmVkJztcbmltcG9ydCB7IExpY2Vuc2VMaXN0Q2xpZW50IH0gZnJvbSAnLi4vLi4vYmFja2VuZC9saWNlbnNlLWxpc3QvY2xpZW50LmxhbWJkYS1zaGFyZWQnO1xuaW1wb3J0IHtcbiAgTEFNQkRBX0NMSUVOVCxcbiAgUzNfQ0xJRU5ULFxufSBmcm9tICcuLi8uLi9iYWNrZW5kL3NoYXJlZC9hd3MubGFtYmRhLXNoYXJlZCc7XG5pbXBvcnQgeyBkZWNvbXByZXNzQ29udGVudCB9IGZyb20gJy4uLy4uL2JhY2tlbmQvc2hhcmVkL2NvbXByZXNzLWNvbnRlbnQubGFtYmRhLXNoYXJlZCc7XG5pbXBvcnQgeyByZXF1aXJlRW52IH0gZnJvbSAnLi4vLi4vYmFja2VuZC9zaGFyZWQvZW52LmxhbWJkYS1zaGFyZWQnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IG5vcm1hbGl6ZU5QTU1ldGFkYXRhID0gcmVxdWlyZSgnbm9ybWFsaXplLXJlZ2lzdHJ5LW1ldGFkYXRhJyk7XG5cbmNvbnN0IENPTlNUUlVDVF9LRVlXT1JEUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAnY2RrJyxcbiAgJ2F3cy1jZGsnLFxuICAnYXdzY2RrJyxcbiAgJ2NkazhzJyxcbiAgJ2Nka3RmJyxcbl0pO1xuY29uc3QgTlBNX1JFUExJQ0FfUkVHSVNUUllfVVJMID0gJ2h0dHBzOi8vcmVwbGljYXRlLm5wbWpzLmNvbS8nO1xuXG4vKipcbiAqIFRoZSByZWxlYXNlIGRhdGUgb2YgYGF3cy1jZGtAMC44LjBgLiBBbnl0aGluZyBlYXJsaWVyIHRoYW4gdGhpcyBiYXNpY2FsbHkgaXNcbiAqIG5vdCBhIHJlbGV2YW50IHBhY2thZ2UsIGFzIGl0IGNhbm5vdCBwb3NzaWJseSBiZSBhIGNvbnN0cnVjdHMtYmFzZWQgcGFja2FnZS5cbiAqIFRoaXMgaXMgdXNlZCB0byBmYXN0LWZvcndhcmQgb3ZlciBib3Jpbmcgc3R1ZmYgd2hlbiB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzXG4gKiByZXNldC5cbiAqL1xuY29uc3QgREFXTl9PRl9DT05TVFJVQ1RTID0gbmV3IERhdGUoJzIwMTgtMDctMzFUMTM6NDM6MDQuNjE1WicpO1xuXG4vLyBDb25maWd1cmUgZW1iZWRkZWQgbWV0cmljcyBmb3JtYXRcbkNvbmZpZ3VyYXRpb24ubmFtZXNwYWNlID0gTUVUUklDU19OQU1FU1BBQ0U7XG5cbi8vIE1ha2Ugc3VyZSBYLVJheSB0cmFjZXMgd2lsbCBpbmNsdWRlIEhUVFAocykgY2FsbHMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY2FwdHVyZUhUVFBzR2xvYmFsKHJlcXVpcmUoJ2h0dHBzJykpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNhcHR1cmVIVFRQc0dsb2JhbChyZXF1aXJlKCdodHRwJykpO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gdHJpZ2dlcnMgb24gYSBmaXhlZCBzY2hlZHVsZSBhbmQgcmVhZHMgYSBzdHJlYW0gb2YgY2hhbmdlcyBmcm9tIG5wbWpzIGNvdWNoZGIgX2NoYW5nZXMgZW5kcG9pbnQuXG4gKiBVcG9uIGludm9jYXRpb24gdGhlIGZ1bmN0aW9uIHN0YXJ0cyByZWFkaW5nIGZyb20gYSBzZXF1ZW5jZSBzdG9yZWQgaW4gYW4gczMgb2JqZWN0IC0gdGhlIGBtYXJrZXJgLlxuICogSWYgdGhlIG1hcmtlciBmYWlscyB0byBsb2FkIChvciBkbyBub3QgZXhpc3QpLCB0aGUgc3RyZWFtIHdpbGwgc3RhcnQgZnJvbSBgbm93YCAtIHRoZSBsYXRlc3QgY2hhbmdlLlxuICogRm9yIGVhY2ggY2hhbmdlOlxuICogIC0gdGhlIHBhY2thZ2UgdmVyc2lvbiB0YXJiYWxsIHdpbGwgYmUgY29waWVkIGZyb20gdGhlIG5wbSByZWdpc3RyeSB0byBhIHN0YXRpbmcgYnVja2V0LlxuICogIC0gYSBtZXNzYWdlIHdpbGwgYmUgc2VudCB0byBhbiBzcXMgcXVldWVcbiAqIG5wbSByZWdpc3RyeSBBUEkgZG9jczogaHR0cHM6Ly9naXRodWIuY29tL25wbS9yZWdpc3RyeS9ibG9iL21hc3Rlci9kb2NzL1JFR0lTVFJZLUFQSS5tZFxuICogQHBhcmFtIGNvbnRleHQgYSBMYW1iZGEgZXhlY3V0aW9uIGNvbnRleHRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQ6IFNjaGVkdWxlZEV2ZW50LCBjb250ZXh0OiBDb250ZXh0KSB7XG4gIGNvbnNvbGUubG9nKGBFdmVudDogJHtKU09OLnN0cmluZ2lmeShldmVudCwgbnVsbCwgMil9YCk7XG5cbiAgY29uc3Qgc3RhZ2luZ0J1Y2tldCA9IHJlcXVpcmVFbnYoJ0JVQ0tFVF9OQU1FJyk7XG4gIGNvbnN0IHN0YWdpbmdGdW5jdGlvbiA9IHJlcXVpcmVFbnYoJ0ZVTkNUSU9OX05BTUUnKTtcblxuICBjb25zdCBkZW55TGlzdCA9IGF3YWl0IERlbnlMaXN0Q2xpZW50Lm5ld0NsaWVudCgpO1xuICBjb25zdCBsaWNlbnNlTGlzdCA9IGF3YWl0IExpY2Vuc2VMaXN0Q2xpZW50Lm5ld0NsaWVudCgpO1xuXG4gIGNvbnN0IG5wbSA9IG5ldyBDb3VjaENoYW5nZXMoTlBNX1JFUExJQ0FfUkVHSVNUUllfVVJMLCAncmVnaXN0cnkvX2NoYW5nZXMnKTtcblxuICBjb25zdCB7XG4gICAgbWFya2VyOiBpbml0aWFsTWFya2VyLFxuICAgIGtub3duVmVyc2lvbnMsXG4gICAgZGlkTG9hZFZlcnNpb25zRnJvbUxlZ2FjeSxcbiAgfSA9IGF3YWl0IGxvYWRGb2xsb3dlclBvc2l0aW9uKHN0YWdpbmdCdWNrZXQsIG5wbSk7XG5cbiAgLy8gSWYgd2UgbG9hZGVkIGZyb20gdGhlIG9sZCBsb2NhdGlvbiwgd3JpdGUgdG8gdGhlIG5ld1xuICBsZXQgd3JpdGVLbm93blZlcnNpb25zRmlsZSA9IGRpZExvYWRWZXJzaW9uc0Zyb21MZWdhY3k7XG5cbiAgLy8gVGhlIGxhc3Qgd3JpdHRlbiBtYXJrZXIgc2VxIGlkLlxuICBsZXQgdXBkYXRlZE1hcmtlciA9IGluaXRpYWxNYXJrZXI7XG5cbiAgLy8gVGhlIHNsb3dlc3QgYmF0Y2ggcHJvY2Vzc2luZyB0aW1lIHNvIGZhciAoc3RhcnRzIGF0IDMwIHNlY29uZHMpLiBUaGlzIGlzIGhvdyBtdWNoIHRpbWUgc2hvdWxkXG4gIC8vIGJlIGxlZnQgYmVmb3JlIHRpbWVvdXQgaWYgYSBuZXcgYmF0Y2ggaXMgdG8gYmUgZmV0Y2hlZC5cbiAgbGV0IG1heEJhdGNoUHJvY2Vzc2luZ1RpbWUgPSAzMF8wMDA7XG4gIC8vIFdoZXRoZXIgd2Ugc2hvdWxkIGNvbnRpbnVlIHJlYWRpbmcgbW9yZSBpdGVtcyBvciBub3QuLi4gVGhpcyBpcyBzZXQgdG8gZmFsc2Ugd2hlbiB0aGUgY3VycmVudFxuICAvLyBsYXRlc3QgY2hhbmdlIGlzIHJlYWNoZWQgKGkuZTogbmV4dCBwYWdlIG9mIGNoYW5nZXMgaXMgZW1wdHkpLlxuICBsZXQgc2hvdWxkQ29udGludWUgPSB0cnVlO1xuXG4gIGRvIHtcbiAgICBhd2FpdCBtZXRyaWNTY29wZSgobWV0cmljcykgPT4gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ1BvbGxpbmcgY2hhbmdlcyBmcm9tIG5wbSByZXBsaWNhJyk7XG4gICAgICBjb25zdCBjaGFuZ2VzID0gYXdhaXQgbnBtLmNoYW5nZXModXBkYXRlZE1hcmtlcik7XG5cbiAgICAgIC8vIENsZWFyIGF1dG9tYXRpY2FsbHkgc2V0IGRpbWVuc2lvbnMgLSB3ZSBkb24ndCBuZWVkIHRoZW0gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzbGFicy9hd3MtZW1iZWRkZWQtbWV0cmljcy1ub2RlL2lzc3Vlcy83MylcbiAgICAgIG1ldHJpY3Muc2V0RGltZW5zaW9ucyh7fSk7XG5cbiAgICAgIC8vIFJlY29yZGluZyBjdXJyZW50IHNlcSByYW5nZSBhbmQgdXBkYXRpbmcgdGhlIGB1cGRhdGVkTWFya2VyYC5cbiAgICAgIG1ldHJpY3Muc2V0UHJvcGVydHkoJ1N0YXJ0U2VxJywgdXBkYXRlZE1hcmtlcik7XG4gICAgICB1cGRhdGVkTWFya2VyID0gTnVtYmVyKGNoYW5nZXMubGFzdF9zZXEpO1xuICAgICAgbWV0cmljcy5zZXRQcm9wZXJ0eSgnRW5kU2VxJywgdXBkYXRlZE1hcmtlcik7XG5cbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJhdGNoID0gY2hhbmdlcy5hY3Rpb25hYmxlUmVzdWx0cyBhcyByZWFkb25seSBDaGFuZ2VbXTtcblxuICAgICAgICAvLyBUaGUgbW9zdCByZWNlbnQgXCJtb2RpZmllZFwiIHRpbWVzdGFtcCBvYnNlcnZlZCBpbiB0aGUgYmF0Y2guXG4gICAgICAgIGxldCBsYXN0TW9kaWZpZWQ6IERhdGUgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIEVtaXQgbnBtLmpzIHJlcGxpY2F0aW9uIGxhZ1xuICAgICAgICBmb3IgKGNvbnN0IHsgZG9jIH0gb2YgYmF0Y2gpIHtcbiAgICAgICAgICBpZiAoZG9jPy50aW1lPy5tb2RpZmllZCkge1xuICAgICAgICAgICAgY29uc3QgbW9kaWZpZWQgPSBuZXcgRGF0ZShkb2MudGltZS5tb2RpZmllZCk7XG4gICAgICAgICAgICBtZXRyaWNzLnB1dE1ldHJpYyhcbiAgICAgICAgICAgICAgTWV0cmljTmFtZS5OUE1KU19DSEFOR0VfQUdFLFxuICAgICAgICAgICAgICBzdGFydFRpbWUgLSBtb2RpZmllZC5nZXRUaW1lKCksXG4gICAgICAgICAgICAgIFVuaXQuTWlsbGlzZWNvbmRzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGxhc3RNb2RpZmllZCA9PSBudWxsIHx8IGxhc3RNb2RpZmllZCA8IG1vZGlmaWVkKSB7XG4gICAgICAgICAgICAgIGxhc3RNb2RpZmllZCA9IG1vZGlmaWVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBSZWNlaXZlZCBhIGJhdGNoIG9mICR7Y2hhbmdlcy50b3RhbENvdW50fSBlbGVtZW50KHMpLCAke2JhdGNoLmxlbmd0aH0gYWZ0ZXIgZmlsdGVyaW5nYFxuICAgICAgICApO1xuICAgICAgICBtZXRyaWNzLnB1dE1ldHJpYyhNZXRyaWNOYW1lLkNIQU5HRV9DT1VOVCwgYmF0Y2gubGVuZ3RoLCBVbml0LkNvdW50KTtcblxuICAgICAgICBpZiAobGFzdE1vZGlmaWVkICYmIGxhc3RNb2RpZmllZCA8IERBV05fT0ZfQ09OU1RSVUNUUykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYFNraXBwaW5nIGJhdGNoIGFzIHRoZSBsYXRlc3QgbW9kaWZpY2F0aW9uIGlzICR7bGFzdE1vZGlmaWVkfSwgd2hpY2ggaXMgcHJlLUNvbnN0cnVjdHNgXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VzLnRvdGFsQ291bnQgPT09IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnUmVjZWl2ZWQgMCBjaGFuZ2VzLCBjYXVnaHQgdXAgdG8gXCJub3dcIiwgZXhpdGluZy4uLicpO1xuICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT2J0YWluIHRoZSBtb2RpZmllZCBwYWNrYWdlIHZlcnNpb24gZnJvbSB0aGUgdXBkYXRlIGV2ZW50LCBhbmQgZmlsdGVyXG4gICAgICAgICAgLy8gb3V0IHBhY2thZ2VzIHRoYXQgYXJlIG5vdCBvZiBpbnRlcmVzdCB0byB1cyAobm90IGNvbnN0cnVjdCBsaWJyYXJpZXMpLlxuICAgICAgICAgIGNvbnN0IHZlcnNpb25JbmZvcyA9IGdldFJlbGV2YW50VmVyc2lvbkluZm9zKFxuICAgICAgICAgICAgYmF0Y2gsXG4gICAgICAgICAgICBtZXRyaWNzLFxuICAgICAgICAgICAgZGVueUxpc3QsXG4gICAgICAgICAgICBsaWNlbnNlTGlzdCxcbiAgICAgICAgICAgIGtub3duVmVyc2lvbnNcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYElkZW50aWZpZWQgJHt2ZXJzaW9uSW5mb3MubGVuZ3RofSByZWxldmFudCBwYWNrYWdlIHZlcnNpb24gdXBkYXRlKHMpYFxuICAgICAgICAgICk7XG4gICAgICAgICAgbWV0cmljcy5wdXRNZXRyaWMoXG4gICAgICAgICAgICBNZXRyaWNOYW1lLlJFTEVWQU5UX1BBQ0tBR0VfVkVSU0lPTlMsXG4gICAgICAgICAgICB2ZXJzaW9uSW5mb3MubGVuZ3RoLFxuICAgICAgICAgICAgVW5pdC5Db3VudFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHZlcnNpb25JbmZvcywgd2UgYWxyZWFkeSBhZGRlZCB0aGVtIHRvIHRoZSBrbm93blZlcnNpb25zIG1hcCBhbmQgd2Ugc2hvdWxkIHNhdmUgaXQgYWdhaW5cbiAgICAgICAgICB3cml0ZUtub3duVmVyc2lvbnNGaWxlIHx8PSB2ZXJzaW9uSW5mb3MubGVuZ3RoID4gMDtcblxuICAgICAgICAgIC8vIFByb2Nlc3MgYWxsIHJlbWFpbmluZyB1cGRhdGVzXG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICB2ZXJzaW9uSW5mb3MubWFwKGFzeW5jICh7IGluZm9zLCBtb2RpZmllZCwgc2VxIH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW52b2tlQXJnczogUGFja2FnZVZlcnNpb24gPSB7XG4gICAgICAgICAgICAgICAgaW50ZWdyaXR5OiBpbmZvcy5kaXN0LnNoYXN1bSxcbiAgICAgICAgICAgICAgICBtb2RpZmllZDogbW9kaWZpZWQudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBuYW1lOiBpbmZvcy5uYW1lLFxuICAgICAgICAgICAgICAgIHNlcTogc2VxPy50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHRhcmJhbGxVcmw6IGluZm9zLmRpc3QudGFyYmFsbCxcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBpbmZvcy52ZXJzaW9uLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAvLyBcIkZpcmUtYW5kLWZvcmdldFwiIGludm9jYXRpb24gaGVyZS5cbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYFNlbmRpbmcgJHtpbnZva2VBcmdzLnRhcmJhbGxVcmx9IGZvciBzdGFnaW5nYCk7XG4gICAgICAgICAgICAgIGF3YWl0IExBTUJEQV9DTElFTlQuc2VuZChcbiAgICAgICAgICAgICAgICBuZXcgSW52b2tlQ29tbWFuZCh7XG4gICAgICAgICAgICAgICAgICBGdW5jdGlvbk5hbWU6IHN0YWdpbmdGdW5jdGlvbixcbiAgICAgICAgICAgICAgICAgIEludm9jYXRpb25UeXBlOiAnRXZlbnQnLFxuICAgICAgICAgICAgICAgICAgUGF5bG9hZDogQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoaW52b2tlQXJncykpLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIC8vIFJlY29yZCB0aGF0IHRoaXMgaXMgbm93IGEgXCJrbm93blwiIHZlcnNpb24gKG5vIG5lZWQgdG8gcmUtZGlzY292ZXIpXG4gICAgICAgICAgICAgIGtub3duVmVyc2lvbnMuc2V0KGAke2luZm9zLm5hbWV9QCR7aW5mb3MudmVyc2lvbn1gLCBtb2RpZmllZCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGluZyB0aGUgUzMgc3RvcmVkIG1hcmtlciB3aXRoIHRoZSBuZXcgc2VxIGlkIGFuZCBrbm93biB2ZXJzaW9ucyBjb25jdXJyZW50bHlcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIC8vIGFsd2F5cyBzYXZlIHRoZSB0cmFuc2FjdGlvbiBtYXJrZXJcbiAgICAgICAgICBzYXZlTGFzdFRyYW5zYWN0aW9uTWFya2VyKGNvbnRleHQsIHN0YWdpbmdCdWNrZXQsIHVwZGF0ZWRNYXJrZXIpLFxuICAgICAgICAgIC8vIGNvbmRpdGlvbmFsbHkgc2F2ZSBrbm93biB2ZXJzaW9uc1xuICAgICAgICAgIC4uLih3cml0ZUtub3duVmVyc2lvbnNGaWxlXG4gICAgICAgICAgICA/IFtzYXZlTGFzdEtub3duVmVyc2lvbnMoY29udGV4dCwgc3RhZ2luZ0J1Y2tldCwga25vd25WZXJzaW9ucyldXG4gICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgXSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBtZXRyaWNzLnB1dE1ldHJpYyhNZXRyaWNOYW1lLkxBU1RfU0VRLCB1cGRhdGVkTWFya2VyLCBVbml0Lk5vbmUpO1xuICAgICAgICBtZXRyaWNzLnB1dE1ldHJpYyhcbiAgICAgICAgICBNZXRyaWNOYW1lLkJBVENIX1BST0NFU1NJTkdfVElNRSxcbiAgICAgICAgICBEYXRlLm5vdygpIC0gc3RhcnRUaW1lLFxuICAgICAgICAgIFVuaXQuTWlsbGlzZWNvbmRzXG4gICAgICAgICk7XG4gICAgICAgIG1ldHJpY3MucHV0TWV0cmljKFxuICAgICAgICAgIE1ldHJpY05hbWUuUkVNQUlOSU5HX1RJTUUsXG4gICAgICAgICAgY29udGV4dC5nZXRSZW1haW5pbmdUaW1lSW5NaWxsaXMoKSxcbiAgICAgICAgICBVbml0Lk1pbGxpc2Vjb25kc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pKCk7XG4gIH0gd2hpbGUgKFxuICAgIHNob3VsZENvbnRpbnVlICYmXG4gICAgY29udGV4dC5nZXRSZW1haW5pbmdUaW1lSW5NaWxsaXMoKSA+PSBtYXhCYXRjaFByb2Nlc3NpbmdUaW1lXG4gICk7XG5cbiAgY29uc29sZS5sb2coJ0FsbCBkb25lIGhlcmUsIHdlIGhhdmUgc3VjY2VzcyEnKTtcblxuICByZXR1cm4geyBpbml0aWFsTWFya2VyLCB1cGRhdGVkTWFya2VyIH07XG59XG5cbi8vI3JlZ2lvbiBMYXN0IGtub3duIHZlcnNpb25zIGFuZCBtYXJrZXJcbi8qKlxuICogQ29tbW9uIGZ1bmN0aW9uIHRvIGxvYWQgZGF0YSBmcm9tIGFuIFMzIGZpbGUgd2l0aCBlcnJvciBoYW5kbGluZ1xuICpcbiAqIEBwYXJhbSBzdGFnaW5nQnVja2V0IFRoZSBTMyBidWNrZXQgbmFtZVxuICogQHBhcmFtIGtleSBUaGUgZmlsZSBrZXkgaW4gdGhlIGJ1Y2tldFxuICogQHBhcmFtIHdhcm5pbmdNZXNzYWdlIE1lc3NhZ2UgdG8gbG9nIHdoZW4gZmlsZSBkb2Vzbid0IGV4aXN0XG4gKiBAcmV0dXJucyBUaGUgZGVjb21wcmVzc2VkIGZpbGUgY29udGVudCBhcyBzdHJpbmcsIG9yIG51bGwgaWYgZmlsZSBkb2Vzbid0IGV4aXN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRDb250ZW50RnJvbVMzKFxuICBzdGFnaW5nQnVja2V0OiBzdHJpbmcsXG4gIGtleTogc3RyaW5nLFxuICB3YXJuaW5nTWVzc2FnZTogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFMzX0NMSUVOVC5zZW5kKFxuICAgICAgbmV3IEdldE9iamVjdENvbW1hbmQoe1xuICAgICAgICBCdWNrZXQ6IHN0YWdpbmdCdWNrZXQsXG4gICAgICAgIEtleToga2V5LFxuICAgICAgfSlcbiAgICApO1xuICAgIGlmICghcmVzcG9uc2UuQm9keSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXNwb25zZSBCb2R5IGZvciAke2tleX0gaXMgZW1wdHlgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGRlY29tcHJlc3NDb250ZW50KFxuICAgICAgcmVzcG9uc2UuQm9keSBhcyBOb2RlSnNSdW50aW1lU3RyZWFtaW5nQmxvYlBheWxvYWRPdXRwdXRUeXBlcyxcbiAgICAgIHJlc3BvbnNlLkNvbnRlbnRFbmNvZGluZ1xuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb1N1Y2hLZXkgfHwgZXJyb3IubmFtZSA9PT0gJ05vU3VjaEtleScpIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nTWVzc2FnZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gcmUtdGhyb3cgdW5leHBlY3RlZCBlcnJvcnNcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkRm9sbG93ZXJQb3NpdGlvbihcbiAgc3RhZ2luZ0J1Y2tldDogc3RyaW5nLFxuICByZWdpc3RyeTogQ291Y2hDaGFuZ2VzXG4pOiBQcm9taXNlPHtcbiAgbWFya2VyOiBudW1iZXI7XG4gIGtub3duVmVyc2lvbnM6IE1hcDxzdHJpbmcsIERhdGU+O1xuICBkaWRMb2FkVmVyc2lvbnNGcm9tTGVnYWN5OiBib29sZWFuO1xufT4ge1xuICBjb25zdCBbbWFya2VyRmlsZSwga25vd25WZXJzaW9uc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgbG9hZExhc3RUcmFuc2FjdGlvbk1hcmtlcihzdGFnaW5nQnVja2V0LCByZWdpc3RyeSksXG4gICAgbG9hZExhc3RLbm93blZlcnNpb25zKHN0YWdpbmdCdWNrZXQpLFxuICBdKTtcblxuICBpZiAoIWtub3duVmVyc2lvbnMpIHtcbiAgICAvLyBGb3IgbGVnYWN5IHJlYXNvbnMsIGtub3duVmVyc2lvbnMgY291bGQgY29tZSBmcm9tIHRoZSB0cmFuc2FjdGlvbiBtYXJrZXIgZmlsZVxuICAgIC8vIElmIGl0IGRvZXMsIHRoZW4gd2UgdGFrZSB0aGF0IGFzIGtub3duVmVyc2lvbnMgYnV0IHdpbGwgbWlncmF0ZSBrbm93blZlcnNpb25zXG4gICAgLy8gdG8gdGhlIG1vZGVybiBmaWxlIGxvY2F0aW9uXG4gICAgcmV0dXJuIHtcbiAgICAgIG1hcmtlcjogbWFya2VyRmlsZS5tYXJrZXIsXG4gICAgICBrbm93blZlcnNpb25zOiBtYXJrZXJGaWxlLmtub3duVmVyc2lvbnMgPz8gbmV3IE1hcCgpLFxuICAgICAgZGlkTG9hZFZlcnNpb25zRnJvbUxlZ2FjeTogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYXJrZXI6IG1hcmtlckZpbGUubWFya2VyLFxuICAgIGtub3duVmVyc2lvbnMsXG4gICAgZGlkTG9hZFZlcnNpb25zRnJvbUxlZ2FjeTogZmFsc2UsXG4gIH07XG59XG5cbi8qKlxuICogTG9hZHMgdGhlIGxhc3Qga25vd24gdmVyc2lvbnMgZnJvbSBTMy5cbiAqXG4gKiBAcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGxhc3Qga25vd24gdmVyc2lvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRMYXN0S25vd25WZXJzaW9ucyhcbiAgc3RhZ2luZ0J1Y2tldDogc3RyaW5nXG4pOiBQcm9taXNlPE1hcDxzdHJpbmcsIERhdGU+IHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHdhcm5pbmdNZXNzYWdlID0gYEtub3duIHZlcnNpb25zIG9iamVjdCAoczM6Ly8ke3N0YWdpbmdCdWNrZXR9LyR7S05PV05fVkVSU0lPTlNfRklMRV9OQU1FfSkgZG9lcyBub3QgZXhpc3QsIHN0YXJ0aW5nIGZyb20gc2NyYXRjaGA7XG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBsb2FkQ29udGVudEZyb21TMyhcbiAgICBzdGFnaW5nQnVja2V0LFxuICAgIEtOT1dOX1ZFUlNJT05TX0ZJTEVfTkFNRSxcbiAgICB3YXJuaW5nTWVzc2FnZVxuICApO1xuXG4gIC8vIEtub3duIFZlcnNpb25zIGRvZXMgbm90IGV4aXN0LCBzdGFydGluZyBmcm9tIHNjcmF0Y2hcbiAgaWYgKGNvbnRlbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gS25vd24gVmVyc2lvbnMgZXhpc3RzLCBnZW5lcmF0aW5nIG1hcCBmcm9tIHRoZSBkYXRhXG4gIGNvbnN0IGNvbnRlbnRzT2JqOiBLbm93blZlcnNpb25zRmlsZVNjaGVtYSA9IEpTT04ucGFyc2UoY29udGVudCk7XG5cbiAgY29uc29sZS5sb2coYExvYWRlZCBsYXN0IGtub3duIHZlcnNpb25zIGRhdGFgKTtcblxuICByZXR1cm4gZGF0ZU1hcEZyb21PYmooY29udGVudHNPYmoua25vd25WZXJzaW9ucyk7XG59XG5cbi8qKlxuICogTG9hZHMgdGhlIGxhc3QgdHJhbnNhY3Rpb24gbWFya2VyIGZyb20gUzMuXG4gKlxuICogQHBhcmFtIHJlZ2lzdHJ5IGEgTmFubyBkYXRhYmFzZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBOcG1qcy5jb20gQ291Y2hEQiBpbnN0YW5jZS5cbiAqXG4gKiBAcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGxhc3QgdHJhbnNhY3Rpb24gbWFya2VyLlxuICovXG5hc3luYyBmdW5jdGlvbiBsb2FkTGFzdFRyYW5zYWN0aW9uTWFya2VyKFxuICBzdGFnaW5nQnVja2V0OiBzdHJpbmcsXG4gIHJlZ2lzdHJ5OiBDb3VjaENoYW5nZXNcbik6IFByb21pc2U8eyBtYXJrZXI6IG51bWJlcjsga25vd25WZXJzaW9ucz86IE1hcDxzdHJpbmcsIERhdGU+IH0+IHtcbiAgY29uc3Qgd2FybmluZ01lc3NhZ2UgPSBgTWFya2VyIG9iamVjdCAoczM6Ly8ke3N0YWdpbmdCdWNrZXR9LyR7TUFSS0VSX0ZJTEVfTkFNRX0pIGRvZXMgbm90IGV4aXN0LCBzdGFydGluZyBmcm9tIHNjcmF0Y2hgO1xuICBjb25zdCBjb250ZW50ID0gYXdhaXQgbG9hZENvbnRlbnRGcm9tUzMoXG4gICAgc3RhZ2luZ0J1Y2tldCxcbiAgICBNQVJLRVJfRklMRV9OQU1FLFxuICAgIHdhcm5pbmdNZXNzYWdlXG4gICk7XG5cbiAgLy8gTGFzdCB0cmFuc2FjdGlvbiBtYXJrZXIgZG9lcyBub3QgZXhpc3RcbiAgaWYgKGNvbnRlbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4geyBtYXJrZXI6IDAgfTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZEZpbGU6IE1hcmtlckZpbGVTY2hlbWEgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIGxldCBtYXJrZXI6IG51bWJlcjtcbiAgbGV0IGtub3duVmVyc2lvbnM6IE1hcDxzdHJpbmcsIERhdGU+IHwgdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHBhcnNlZEZpbGUgPT09ICdudW1iZXInKSB7XG4gICAgbWFya2VyID0gcGFyc2VkRmlsZTtcbiAgfSBlbHNlIHtcbiAgICBtYXJrZXIgPSBOdW1iZXIocGFyc2VkRmlsZS5tYXJrZXIpO1xuICAgIGtub3duVmVyc2lvbnMgPSBwYXJzZWRGaWxlLmtub3duVmVyc2lvbnNcbiAgICAgID8gZGF0ZU1hcEZyb21PYmoocGFyc2VkRmlsZS5rbm93blZlcnNpb25zKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBhbWF6b25xLWlnbm9yZS1uZXh0LWxpbmVcbiAgY29uc29sZS5sb2coYFJlYWQgbGFzdCB0cmFuc2FjdGlvbiBtYXJrZXI6ICR7bWFya2VyfWApO1xuXG4gIGNvbnN0IGRiVXBkYXRlU2VxID0gTnVtYmVyKChhd2FpdCByZWdpc3RyeS5pbmZvKCkpLnVwZGF0ZV9zZXEpO1xuICBpZiAoZGJVcGRhdGVTZXEgPCBtYXJrZXIpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgQ3VycmVudCBEQiB1cGRhdGVfc2VxICgke2RiVXBkYXRlU2VxfSkgaXMgbG93ZXIgdGhhbiBtYXJrZXIgKENvdWNoREIgaW5zdGFuY2Ugd2FzIGxpa2VseSByZXBsYWNlZCksIHJlc2V0dGluZyB0byAwIWBcbiAgICApO1xuICAgIHJldHVybiB7IG1hcmtlcjogMCB9O1xuICB9XG5cbiAgcmV0dXJuIHsgbWFya2VyLCBrbm93blZlcnNpb25zIH07XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgbGFzdCBrbm93biB2ZXJzaW9ucyBpbiBTMy5cbiAqXG4gKiBAcGFyYW0ga25vd25WZXJzaW9ucyB0aGUgbWFwIG9mIHBhY2thZ2UgbmFtZSArIHZlcnNpb24gdG8gbGFzdCBtb2RpZmllZCB0aW1lc3RhbXAgb2YgcGFja2FnZXMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkLlxuICovXG5hc3luYyBmdW5jdGlvbiBzYXZlTGFzdEtub3duVmVyc2lvbnMoXG4gIGNvbnRleHQ6IENvbnRleHQsXG4gIHN0YWdpbmdCdWNrZXQ6IHN0cmluZyxcbiAga25vd25WZXJzaW9uczogTWFwPHN0cmluZywgRGF0ZT5cbikge1xuICBjb25zdCBjb250ZW50c09iajogS25vd25WZXJzaW9uc0ZpbGVTY2hlbWEgPSB7XG4gICAga25vd25WZXJzaW9uczogb2JqRnJvbURhdGVNYXAoa25vd25WZXJzaW9ucyksXG4gIH07XG5cbiAgY29uc29sZS5sb2coYEtub3duIHZlcnNpb25zIGNoYW5nZWQsIHVwZGF0aW5nLi4uYCk7XG4gIGF3YWl0IHB1dE9iamVjdChcbiAgICBjb250ZXh0LFxuICAgIHN0YWdpbmdCdWNrZXQsXG4gICAgS05PV05fVkVSU0lPTlNfRklMRV9OQU1FLFxuICAgIEpTT04uc3RyaW5naWZ5KGNvbnRlbnRzT2JqLCB1bmRlZmluZWQsIDIpLFxuICAgIHtcbiAgICAgIENvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgfVxuICApO1xuICBjb25zb2xlLmxvZygnU3VjY2Vzc2Z1bGx5IHVwZGF0ZWQga25vd24gdmVyc2lvbnMnKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBsYXN0IHRyYW5zYWN0aW9uIG1hcmtlciBpbiBTMy5cbiAqXG4gKiBAcGFyYW0gbWFya2VyIHRoZSBsYXN0IHRyYW5zYWN0aW9uIG1hcmtlciB2YWx1ZVxuICovXG5hc3luYyBmdW5jdGlvbiBzYXZlTGFzdFRyYW5zYWN0aW9uTWFya2VyKFxuICBjb250ZXh0OiBDb250ZXh0LFxuICBzdGFnaW5nQnVja2V0OiBzdHJpbmcsXG4gIG1hcmtlcjogbnVtYmVyXG4pIHtcbiAgY29uc3QgY29udGVudHMgPSBKU09OLnN0cmluZ2lmeSh7IG1hcmtlciB9KTtcbiAgY29uc29sZS5sb2coYFVwZGF0aW5nIGxhc3QgdHJhbnNhY3Rpb24gbWFya2VyIHRvICR7bWFya2VyfWApO1xuICBhd2FpdCBwdXRPYmplY3QoY29udGV4dCwgc3RhZ2luZ0J1Y2tldCwgTUFSS0VSX0ZJTEVfTkFNRSwgY29udGVudHMsIHtcbiAgICBDb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICB9KTtcbiAgY29uc29sZS5sb2coJ1N1Y2Nlc3NmdWxseSB1cGRhdGVkIG1hcmtlcicpO1xufVxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiBBc3luY2hyb25vdXMgUHJpbWl0aXZlc1xuLyoqXG4gKiBQdXRzIGFuIG9iamVjdCBpbiB0aGUgc3RhZ2luZyBidWNrZXQsIHdpdGggc3RhbmRhcmRpemVkIG9iamVjdCBtZXRhZGF0YS5cbiAqXG4gKiBAcGFyYW0ga2V5ICB0aGUga2V5IGZvciB0aGUgb2JqZWN0IHRvIGJlIHB1dC5cbiAqIEBwYXJhbSBib2R5IHRoZSBib2R5IG9mIHRoZSBvYmplY3QgdG8gYmUgcHV0LlxuICogQHBhcmFtIG9wdHMgYW55IG90aGVyIG9wdGlvbnMgdG8gdXNlIHdoZW4gc2VuZGluZyB0aGUgUzMgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBTMyByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBwdXRPYmplY3QoXG4gIGNvbnRleHQ6IENvbnRleHQsXG4gIGJ1Y2tldDogc3RyaW5nLFxuICBrZXk6IHN0cmluZyxcbiAgYm9keTogU3RyZWFtaW5nQmxvYlBheWxvYWRJbnB1dFR5cGVzLFxuICBvcHRzOiBPbWl0PFB1dE9iamVjdENvbW1hbmRJbnB1dCwgJ0J1Y2tldCcgfCAnS2V5JyB8ICdCb2R5Jz4gPSB7fVxuKSB7XG4gIHJldHVybiBTM19DTElFTlQuc2VuZChcbiAgICBuZXcgUHV0T2JqZWN0Q29tbWFuZCh7XG4gICAgICBCdWNrZXQ6IGJ1Y2tldCxcbiAgICAgIEtleToga2V5LFxuICAgICAgQm9keTogYm9keSxcbiAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICdMYW1iZGEtTG9nLUdyb3VwJzogY29udGV4dC5sb2dHcm91cE5hbWUsXG4gICAgICAgICdMYW1iZGEtTG9nLVN0cmVhbSc6IGNvbnRleHQubG9nU3RyZWFtTmFtZSxcbiAgICAgICAgJ0xhbWJkYS1SdW4tSWQnOiBjb250ZXh0LmF3c1JlcXVlc3RJZCxcbiAgICAgICAgLi4ub3B0cy5NZXRhZGF0YSxcbiAgICAgIH0sXG4gICAgICAuLi5vcHRzLFxuICAgIH0pXG4gICk7XG59XG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBPYnRhaW5zIHRoZSBgVmVyc2lvbkluZm9gIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZGlmaWVkIHZlcnNpb24ocykgaW4gdGhlXG4gKiBwcm92aWRlZCBgQ2hhbmdlYCBvYmplY3RzLCBlbnN1cmVzIHRoZXkgYXJlIHJlbGV2YW50IChjb25zdHJ1Y3QgbGlicmFyaWVzKSxcbiAqIGFuZCByZXR1cm5zIHRob3NlIG9ubHkuXG4gKlxuICogQHBhcmFtIGNoYW5nZXMgdGhlIGNoYW5nZXMgdG8gYmUgcHJvY2Vzc2VkLlxuICogQHBhcmFtIG1ldHJpY3MgdGhlIG1ldHJpY3MgbG9nZ2VyIHRvIHVzZS5cbiAqIEBwYXJhbSBkZW55TGlzdCBkZW55IGxpc3QgY2xpZW50XG4gKlxuICogQHJldHVybnMgYSBsaXN0IG9mIGBWZXJzaW9uSW5mb2Agb2JqZWN0c1xuICovXG5mdW5jdGlvbiBnZXRSZWxldmFudFZlcnNpb25JbmZvcyhcbiAgY2hhbmdlczogcmVhZG9ubHkgQ2hhbmdlW10sXG4gIG1ldHJpY3M6IE1ldHJpY3NMb2dnZXIsXG4gIGRlbnlMaXN0OiBEZW55TGlzdENsaWVudCxcbiAgbGljZW5zZUxpc3Q6IExpY2Vuc2VMaXN0Q2xpZW50LFxuICBrbm93blZlcnNpb25zOiBNYXA8c3RyaW5nLCBEYXRlPlxuKTogcmVhZG9ubHkgVXBkYXRlZFZlcnNpb25bXSB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxVcGRhdGVkVmVyc2lvbj4oKTtcblxuICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgZWxlbWVudHMgdGhhdCBkb24ndCBoYXZlIGEgXCJuYW1lXCIgaW4gdGhlIGRvY3VtZW50LCBhc1xuICAgIC8vIHRoZXNlIGFyZSBzY2hlbWFzLCB3aGljaCBhcmUgbm90IHJlbGV2YW50IHRvIG91ciBidXNpbmVzcyBoZXJlLlxuICAgIGlmIChjaGFuZ2UuZG9jLm5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFske2NoYW5nZS5zZXF9XSBDaGFuZ2VkIGRvY3VtZW50IGNvbnRhaW5zIG5vICduYW1lJzogJHtjaGFuZ2UuaWR9YFxuICAgICAgKTtcbiAgICAgIG1ldHJpY3MucHV0TWV0cmljKE1ldHJpY05hbWUuVU5QUk9DRVNTQUJMRV9FTlRJVFksIDEsIFVuaXQuQ291bnQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gVGhlIG5vcm1hbGl6ZSBmdW5jdGlvbiBjaGFuZ2UgdGhlIG9iamVjdCBpbiBwbGFjZSwgaWYgdGhlIGRvYyBvYmplY3QgaXMgaW52YWxpZCBpdCB3aWxsIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAobm9ybWFsaXplTlBNTWV0YWRhdGEoY2hhbmdlLmRvYykgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFske2NoYW5nZS5zZXF9XSBDaGFuZ2VkIGRvY3VtZW50IGludmFsaWQsIG5wbSBub3JtYWxpemUgcmV0dXJuZWQgdW5kZWZpbmVkOiAke2NoYW5nZS5pZH1gXG4gICAgICApO1xuICAgICAgbWV0cmljcy5wdXRNZXRyaWMoTWV0cmljTmFtZS5VTlBST0NFU1NBQkxFX0VOVElUWSwgMSwgVW5pdC5Db3VudCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBTb21ldGltZXMsIHRoZXJlIGFyZSBubyB2ZXJzaW9ucyBpbiB0aGUgZG9jdW1lbnQuIFdlIHNraXAgdGhvc2UuXG4gICAgaWYgKGNoYW5nZS5kb2MudmVyc2lvbnMgPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFske2NoYW5nZS5zZXF9XSBDaGFuZ2VkIGRvY3VtZW50IGNvbnRhaW5zIG5vICd2ZXJzaW9ucyc6ICR7Y2hhbmdlLmlkfWBcbiAgICAgICk7XG4gICAgICBtZXRyaWNzLnB1dE1ldHJpYyhNZXRyaWNOYW1lLlVOUFJPQ0VTU0FCTEVfRU5USVRZLCAxLCBVbml0LkNvdW50KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIFNvbWV0aW1lcywgdGhlcmUgaXMgbm8gJ3RpbWUnIGVudHJ5IGluIHRoZSBkb2N1bWVudC4gV2Ugc2tpcCB0aG9zZS5cbiAgICBpZiAoY2hhbmdlLmRvYy50aW1lID09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBbJHtjaGFuZ2Uuc2VxfV0gQ2hhbmdlZCBkb2N1bWVudCBjb250YWlucyBubyAndGltZSc6ICR7Y2hhbmdlLmlkfWBcbiAgICAgICk7XG4gICAgICBtZXRyaWNzLnB1dE1ldHJpYyhNZXRyaWNOYW1lLlVOUFJPQ0VTU0FCTEVfRU5USVRZLCAxLCBVbml0LkNvdW50KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgbGFzdCBtb2RpZmljYXRpb24gZGF0ZSBmcm9tIHRoZSBjaGFuZ2VcbiAgICBjb25zdCBwYWNrYWdlVmVyc2lvblVwZGF0ZXMgPSBPYmplY3QuZW50cmllcyhjaGFuZ2UuZG9jLnRpbWUpXG4gICAgICAvLyBJZ25vcmUgdGhlIFwiY3JlYXRlZFwiIGFuZCBcIm1vZGlmaWVkXCIga2V5cyBoZXJlXG4gICAgICAuZmlsdGVyKChba2V5XSkgPT4ga2V5ICE9PSAnY3JlYXRlZCcgJiYga2V5ICE9PSAnbW9kaWZpZWQnKVxuICAgICAgLy8gUGFyc2UgYWxsIHRoZSBkYXRlcyB0byBlbnN1cmUgdGhleSBhcmUgY29tcGFyYWJsZVxuICAgICAgLm1hcCgoW3ZlcnNpb24sIGlzb0RhdGVdKSA9PiBbdmVyc2lvbiwgbmV3IERhdGUoaXNvRGF0ZSldIGFzIGNvbnN0KTtcbiAgICBtZXRyaWNzLnB1dE1ldHJpYyhcbiAgICAgIE1ldHJpY05hbWUuUEFDS0FHRV9WRVJTSU9OX0NPVU5ULFxuICAgICAgcGFja2FnZVZlcnNpb25VcGRhdGVzLmxlbmd0aCxcbiAgICAgIFVuaXQuQ291bnRcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBbdmVyc2lvbiwgbW9kaWZpZWRdIG9mIHBhY2thZ2VWZXJzaW9uVXBkYXRlcykge1xuICAgICAgY29uc3Qga25vd25LZXkgPSBgJHtjaGFuZ2UuZG9jLm5hbWV9QCR7dmVyc2lvbn1gO1xuICAgICAgY29uc3Qga25vd24gPSBrbm93blZlcnNpb25zLmdldChrbm93bktleSk7XG4gICAgICBpZiAoa25vd24gPT0gbnVsbCB8fCBrbm93biA8IG1vZGlmaWVkKSB7XG4gICAgICAgIGNvbnN0IGluZm9zID0gY2hhbmdlLmRvYy52ZXJzaW9uc1t2ZXJzaW9uXTtcbiAgICAgICAgaWYgKGluZm9zID09IG51bGwpIHtcbiAgICAgICAgICAvLyBDb3VsZCBiZSB0aGUgdmVyc2lvbiBpbiBxdWVzdGlvbiB3YXMgdW4tcHVibGlzaGVkLlxuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYFske2NoYW5nZS5zZXF9XSBDb3VsZCBub3QgZmluZCBpbmZvIGZvciBcIiR7Y2hhbmdlLmRvYy5uYW1lfUAke3ZlcnNpb259XCIuIFdhcyBpdCB1bi1wdWJsaXNoZWQ/YFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDb25zdHJ1Y3RMaWJyYXJ5KGluZm9zKSkge1xuICAgICAgICAgIC8vIHNraXAgaWYgdGhpcyBwYWNrYWdlIGlzIGRlbmllZFxuICAgICAgICAgIGNvbnN0IGRlbmllZCA9IGRlbnlMaXN0Lmxvb2t1cChpbmZvcy5uYW1lLCBpbmZvcy52ZXJzaW9uKTtcbiAgICAgICAgICBpZiAoZGVuaWVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgYFske2NoYW5nZS5zZXF9XSBQYWNrYWdlIGRlbmllZDogJHtKU09OLnN0cmluZ2lmeShkZW5pZWQpfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBrbm93blZlcnNpb25zLnNldChrbm93bktleSwgbW9kaWZpZWQpO1xuICAgICAgICAgICAgbWV0cmljcy5wdXRNZXRyaWMoTWV0cmljTmFtZS5ERU5ZX0xJU1RFRF9DT1VOVCwgMSwgVW5pdC5Db3VudCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXRyaWNzLnB1dE1ldHJpYyhcbiAgICAgICAgICAgIE1ldHJpY05hbWUuUEFDS0FHRV9WRVJTSU9OX0FHRSxcbiAgICAgICAgICAgIERhdGUubm93KCkgLSBtb2RpZmllZC5nZXRUaW1lKCksXG4gICAgICAgICAgICBVbml0Lk1pbGxpc2Vjb25kc1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9XG4gICAgICAgICAgICBsaWNlbnNlTGlzdC5sb29rdXAoaW5mb3MubGljZW5zZSA/PyAnVU5MSUNFTlNFRCcpICE9IG51bGw7XG4gICAgICAgICAgbWV0cmljcy5wdXRNZXRyaWMoXG4gICAgICAgICAgICBNZXRyaWNOYW1lLklORUxJR0lCTEVfTElDRU5TRSxcbiAgICAgICAgICAgIGlzRWxpZ2libGUgPyAwIDogMSxcbiAgICAgICAgICAgIFVuaXQuQ291bnRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpc0VsaWdpYmxlKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7IGluZm9zLCBtb2RpZmllZCwgc2VxOiBjaGFuZ2Uuc2VxIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgYFske2NoYW5nZS5zZXF9XSBQYWNrYWdlIFwiJHtcbiAgICAgICAgICAgICAgICBjaGFuZ2UuZG9jLm5hbWVcbiAgICAgICAgICAgICAgfUAke3ZlcnNpb259XCIgZG9lcyBub3QgdXNlIGFsbG93LWxpc3RlZCBsaWNlbnNlOiAke1xuICAgICAgICAgICAgICAgIGluZm9zLmxpY2Vuc2UgPz8gJ1VOTElDRU5TRUQnXG4gICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAga25vd25WZXJzaW9ucy5zZXQoa25vd25LZXksIG1vZGlmaWVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRWxzZSB0aGlzIGlzIG5vdCBhIGNvbnN0cnVjdCBsaWJyYXJ5LCBzbyB3ZSdsbCBqdXN0IGlnbm9yZSBpdC4uLlxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xuXG4gIC8qKlxuICAgKiBUaGlzIGRldGVybWluZXMgd2hldGhlciBhIHBhY2thZ2UgaXMgXCJpbnRlcmVzdGluZ1wiIHRvIENvbnN0cnVjdEh1YiBvciBub3QuIFRoaXMgaXMgcmVsYXRlZCBidXRcbiAgICogbm90IG5lY2Vzc2FyaWx5IGlkZW50aWNhbCB0byB0aGUgbG9naWMgaW4gdGhlIGluZ2VzdGlvbiBwcm9jZXNzIHRoYXQgYW5ub3RhdGVzIHBhY2thZ2UgbWV0YWRhdGFcbiAgICogd2l0aCBhIGNvbnN0cnVjdCBmcmFtZXdvcmsgbmFtZSArIHZlcnNpb24gKHRob3NlIGNvdWxkIHVsdGltYXRlbHkgYmUgcmUtZmFjdG9yZWQgdG8gc2hhcmUgbW9yZVxuICAgKiBvZiB0aGUgbG9naWMvaGV1cmlzdGljcywgdGhvdWdoKS5cbiAgICpcbiAgICogQ29uY3JldGVseSwgaXQgY2hlY2tzIGZvciBhIGxpc3Qgb2Yga25vd24gXCJvZmZpY2lhbFwiIHBhY2thZ2VzIGZvciB2YXJpb3VzIGNvbnN0cnVjdCBmcmFtZXdvcmtzLFxuICAgKiBhbmQgcGFja2FnZXMgdGhhdCBoYXZlIGEgZGVwZW5kZW5jeSBvbiBzdWNoIGEgcGFja2FnZS4gSXQgYWxzbyBoYXMgYSBrZXl3b3JkcyBhbGxvdy1saXN0IGFzIGFcbiAgICogZmFsbC1iYWNrICh0aGUgY3VycmVudCBkZXBlbmRlbmN5LWJhc2VkIGxvZ2ljIGRvZXMgbm90IGNvbnNpZGVyIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzIGFuZFxuICAgKiBtaWdodCBoZW5jZSBtaXNzIGNlcnRhaW4gcmFyZSB1c2UtY2FzZXMsIHdoaWNoIGtleXdvcmRzIHdvdWxkIHJlc2N1ZSkuXG4gICAqL1xuICBmdW5jdGlvbiBpc0NvbnN0cnVjdExpYnJhcnkoaW5mb3M6IFZlcnNpb25JbmZvKTogYm9vbGVhbiB7XG4gICAgaWYgKGluZm9zLmpzaWkgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBUaGUgXCJjb25zdHJ1Y3RzXCIgcGFja2FnZSBpcyBhIHNpZ24gb2YgYSBjb25zdHJ1Y3RzIGxpYnJhcnlcbiAgICByZXR1cm4gKFxuICAgICAgaXNDb25zdHJ1Y3RGcmFtZXdvcmtQYWNrYWdlKGluZm9zLm5hbWUpIHx8XG4gICAgICAvLyBSZWN1cnNpdmVseSBhcHBseSBvbiBkZXBlbmRlbmNpZXNcbiAgICAgIE9iamVjdC5rZXlzKGluZm9zLmRlcGVuZGVuY2llcyA/PyB7fSkuc29tZShpc0NvbnN0cnVjdEZyYW1ld29ya1BhY2thZ2UpIHx8XG4gICAgICBPYmplY3Qua2V5cyhpbmZvcy5kZXZEZXBlbmRlbmNpZXMgPz8ge30pLnNvbWUoXG4gICAgICAgIGlzQ29uc3RydWN0RnJhbWV3b3JrUGFja2FnZVxuICAgICAgKSB8fFxuICAgICAgT2JqZWN0LmtleXMoaW5mb3MucGVlckRlcGVuZGVuY2llcyA/PyB7fSkuc29tZShcbiAgICAgICAgaXNDb25zdHJ1Y3RGcmFtZXdvcmtQYWNrYWdlXG4gICAgICApIHx8XG4gICAgICAvLyBLZXl3b3JkLWJhc2VkIGZhbGxiYWNrXG4gICAgICBpbmZvcy5rZXl3b3Jkcz8uc29tZSgoa3cpID0+IENPTlNUUlVDVF9LRVlXT1JEUy5oYXMoa3cpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUGFja2FnZSBpcyBvbmUgb2YgdGhlIGtub3duIGNvbnN0cnVjdCBmcmFtZXdvcmsncyBmaXJzdCBwYXJ0eSBwYWNrYWdlczpcbiAgICogLSBAYXdzLWNkay8qXG4gICAqIC0gQGNka3RmLypcbiAgICogLSBjZGs4cyBvciBjZGs4cy1wbHVzXG4gICAqL1xuICBmdW5jdGlvbiBpc0NvbnN0cnVjdEZyYW1ld29ya1BhY2thZ2UobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gSU1QT1JUQU5UIE5PVEU6IFByZWZpeCBtYXRjaGluZyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBAc2NvcGUvIG5hbWVzLlxuXG4gICAgLy8gVGhlIGxvdy1sZXZlbCBjb25zdHJ1Y3RzIHBhY2thZ2VcbiAgICByZXR1cm4gKFxuICAgICAgbmFtZSA9PT0gJ2NvbnN0cnVjdHMnIHx8XG4gICAgICAvLyBBV1MgQ0RLIFBhY2thZ2VzXG4gICAgICBuYW1lID09PSAnYXdzLWNkay1saWInIHx8XG4gICAgICBuYW1lID09PSAnbW9ub2NkaycgfHxcbiAgICAgIG5hbWUuc3RhcnRzV2l0aCgnQGF3cy1jZGsvJykgfHxcbiAgICAgIC8vIENESzhzIHBhY2thZ2VzXG4gICAgICBuYW1lID09PSAnY2RrOHMnIHx8XG4gICAgICAvXmNkazhzLXBsdXMoPzotKD86MTd8MjB8MjF8MjIpKT8kLy50ZXN0KG5hbWUpIHx8XG4gICAgICAvLyBDREtUZiBwYWNrYWdlc1xuICAgICAgbmFtZSA9PT0gJ2Nka3RmJyB8fFxuICAgICAgbmFtZS5zdGFydHNXaXRoKCdAY2RrdGYvJylcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9iakZyb21EYXRlTWFwKHhzOiBNYXA8c3RyaW5nLCBEYXRlPik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIEFycmF5LmZyb20oeHMpLm1hcCgoW2ssIHZdKSA9PiBbaywgdi50b0lTT1N0cmluZygpXSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZGF0ZU1hcEZyb21PYmooXG4gIHhzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+XG4pOiBNYXA8c3RyaW5nLCBEYXRlPiB7XG4gIHJldHVybiBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKHhzKS5tYXAoKFtrLCB2XSkgPT4gW2ssIG5ldyBEYXRlKHYpXSkpO1xufVxuXG4vKipcbiAqIFRoZSBzY2hlbWUgb2YgYSBwYWNrYWdlIHZlcnNpb24gaW4gdGhlIHVwZGF0ZS4gSW5jbHVkZXMgdGhlIHBhY2thZ2UuanNvbiBrZXlzLCBhcyB3ZWxsIGFzIHNvbWUgYWRkaXRpb25hbCBucG0gbWV0YWRhdGFcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25wbS9yZWdpc3RyeS9ibG9iL21hc3Rlci9kb2NzL1JFR0lTVFJZLUFQSS5tZCN2ZXJzaW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbkluZm8ge1xuICByZWFkb25seSBkZXBlbmRlbmNpZXM/OiB7IHJlYWRvbmx5IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcmVhZG9ubHkgZGV2RGVwZW5kZW5jaWVzPzogeyByZWFkb25seSBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHJlYWRvbmx5IHBlZXJEZXBlbmRlbmNpZXM/OiB7IHJlYWRvbmx5IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcmVhZG9ubHkganNpaTogdW5rbm93bjtcbiAgcmVhZG9ubHkgbGljZW5zZT86IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICByZWFkb25seSBrZXl3b3Jkczogc3RyaW5nW107XG4gIHJlYWRvbmx5IGRpc3Q6IHtcbiAgICByZWFkb25seSBzaGFzdW06IHN0cmluZztcbiAgICByZWFkb25seSB0YXJiYWxsOiBzdHJpbmc7XG4gIH07XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFVwZGF0ZWRWZXJzaW9uIHtcbiAgLyoqXG4gICAqIFRoZSBgVmVyc2lvbkluZm9gIGZvciB0aGUgbW9kaWZpZWQgcGFja2FnZSB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5mb3M6IFZlcnNpb25JbmZvO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBhdCB3aGljaCB0aGUgYFZlcnNpb25JbmZvYCB3YXMgbGFzdCBtb2RpZmllZC5cbiAgICovXG4gIHJlYWRvbmx5IG1vZGlmaWVkOiBEYXRlO1xuXG4gIC8qKlxuICAgKiBUaGUgQ291Y2hEQiB0cmFuc2FjdGlvbiBudW1iZXIgZm9yIHRoZSB1cGRhdGUuXG4gICAqL1xuICByZWFkb25seSBzZXE/OiBzdHJpbmcgfCBudW1iZXI7XG59XG5cbi8qKlxuICogV2UgYXJlIGFjY291bnRpbmcgZm9yIGEgZ29vZCBiaXQgb2YgbGVnYWN5IGRhdGEgbW9kZWxpbmcgaGVyZVxuICpcbiAqIFRoZSBmaWxlIGNhbiBiZSBhIGp1c3QgYSBudW1iZXIsIG9yIGEgY29tYmluYXRpb24gb2YgYSBzZXF1ZW5jZSBudW1iZXIgKHdoaWNoXG4gKiBpcyBwb3RlbnRpYWxseSBlbmNvZGVkIGFzIGEgc3RyaW5nKSBhbmQgYSBzZXQgb2Yga25vd24gdmVyc2lvbnMgYW5kIHRoZSBkYXRlc1xuICogd2UgZmlyc3Qgc2F3IHRoZW0uIFRoZSBkYXRlIGNhbiBiZSBlbmNvZGVkIGFzIGFuIElTTyBzdHJpbmcsIG9yIGEgdGltZXN0YW1wXG4gKiBudW1iZXIuXG4gKi9cbnR5cGUgTWFya2VyRmlsZVNjaGVtYSA9XG4gIHwgbnVtYmVyXG4gIHwge1xuICAgICAgbWFya2VyOiBudW1iZXIgfCBzdHJpbmc7XG4gICAgICBrbm93blZlcnNpb25zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPjtcbiAgICB9O1xuXG5pbnRlcmZhY2UgS25vd25WZXJzaW9uc0ZpbGVTY2hlbWEge1xuICBrbm93blZlcnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5pbnRlcmZhY2UgRG9jdW1lbnQge1xuICAvKipcbiAgICogYSBMaXN0IG9mIGFsbCBWZXJzaW9uIG9iamVjdHMgZm9yIHRoZSBwYWNrYWdlXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uczogeyBba2V5OiBzdHJpbmddOiBWZXJzaW9uSW5mbyB8IHVuZGVmaW5lZCB9O1xuXG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSdzIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZG9jdW1lbnQuIFRoZSB2YWx1ZXMgYXJlIElTTy04NjAxIGVuY29kZWRcbiAgICogdGltZXN0YW1wcy5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWU6IHtcbiAgICByZWFkb25seSBjcmVhdGVkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgbW9kaWZpZWQ6IHN0cmluZztcbiAgICByZWFkb25seSBbdmVyc2lvbjogc3RyaW5nXTogc3RyaW5nO1xuICB9O1xuXG4gIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbmludGVyZmFjZSBDaGFuZ2UgZXh0ZW5kcyBEYXRhYmFzZUNoYW5nZSB7XG4gIHJlYWRvbmx5IGRvYzogRG9jdW1lbnQ7XG59XG4iXX0=
445
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtLWpzLWZvbGxvd2VyLmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYWNrYWdlLXNvdXJjZXMvbnBtanMvbnBtLWpzLWZvbGxvd2VyLmxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTRFQSwwQkE0SkM7QUF4T0QsbUNBQW1DO0FBQ25DLDBEQUF1RDtBQUN2RCxrREFLNEI7QUFLNUIsK0RBSzhCO0FBRTlCLHlEQUF1RDtBQUN2RCxpRUFBaUU7QUFDakUsdUVBS21DO0FBQ25DLCtFQUE2RTtBQUU3RSx1RkFBOEU7QUFDOUUsMEZBQW9GO0FBQ3BGLDhFQUdnRDtBQUNoRCx3R0FBd0Y7QUFDeEYsOEVBQW9FO0FBQ3BFLGlFQUFpRTtBQUNqRSxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBRXBFLE1BQU0sa0JBQWtCLEdBQXdCLElBQUksR0FBRyxDQUFDO0lBQ3RELEtBQUs7SUFDTCxTQUFTO0lBQ1QsUUFBUTtJQUNSLE9BQU87SUFDUCxPQUFPO0NBQ1IsQ0FBQyxDQUFDO0FBQ0gsTUFBTSx3QkFBd0IsR0FBRyw4QkFBOEIsQ0FBQztBQUVoRTs7Ozs7R0FLRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUVoRSxvQ0FBb0M7QUFDcEMsb0NBQWEsQ0FBQyxTQUFTLEdBQUcsMkNBQWlCLENBQUM7QUFFNUMscURBQXFEO0FBQ3JELGlFQUFpRTtBQUNqRSxJQUFBLHNDQUFrQixFQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLGlFQUFpRTtBQUNqRSxJQUFBLHNDQUFrQixFQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRXBDOzs7Ozs7Ozs7R0FTRztBQUNJLEtBQUssVUFBVSxPQUFPLENBQUMsS0FBcUIsRUFBRSxPQUFnQjtJQUNuRSxPQUFPLENBQUMsR0FBRyxDQUFD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LENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUMzQixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxFQUFxQjtJQUMzQyxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQ3JELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQ3JCLEVBQW1DO0lBRW5DLE9BQU8sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvbnNvbGUgZnJvbSAnY29uc29sZSc7XG5pbXBvcnQgeyBJbnZva2VDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWxhbWJkYSc7XG5pbXBvcnQge1xuICBHZXRPYmplY3RDb21tYW5kLFxuICBOb1N1Y2hLZXksXG4gIFB1dE9iamVjdENvbW1hbmQsXG4gIFB1dE9iamVjdENvbW1hbmRJbnB1dCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB0eXBlIHtcbiAgTm9kZUpzUnVudGltZVN0cmVhbWluZ0Jsb2JQYXlsb2FkT3V0cHV0VHlwZXMsXG4gIFN0cmVhbWluZ0Jsb2JQYXlsb2FkSW5wdXRUeXBlcyxcbn0gZnJvbSAnQHNtaXRoeS90eXBlcyc7XG5pbXBvcnQge1xuICBtZXRyaWNTY29wZSxcbiAgQ29uZmlndXJhdGlvbixcbiAgTWV0cmljc0xvZ2dlcixcbiAgVW5pdCxcbn0gZnJvbSAnYXdzLWVtYmVkZGVkLW1ldHJpY3MnO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0LCBTY2hlZHVsZWRFdmVudCB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgY2FwdHVyZUhUVFBzR2xvYmFsIH0gZnJvbSAnYXdzLXhyYXktc2RrLWNvcmUnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmltcG9ydCB7XG4gIE1ldHJpY05hbWUsXG4gIE1BUktFUl9GSUxFX05BTUUsXG4gIE1FVFJJQ1NfTkFNRVNQQUNFLFxuICBLTk9XTl9WRVJTSU9OU19GSUxFX05BTUUsXG59IGZyb20gJy4vY29uc3RhbnRzLmxhbWJkYS1zaGFyZWQnO1xuaW1wb3J0IHsgQ291Y2hDaGFuZ2VzLCBEYXRhYmFzZUNoYW5nZSB9IGZyb20gJy4vY291Y2gtY2hhbmdlcy5sYW1iZGEtc2hhcmVkJztcbmltcG9ydCB7IFBhY2thZ2VWZXJzaW9uIH0gZnJvbSAnLi9zdGFnZS1hbmQtbm90aWZ5LmxhbWJkYSc7XG5pbXBvcnQgeyBEZW55TGlzdENsaWVudCB9IGZyb20gJy4uLy4uL2JhY2tlbmQvZGVueS1saXN0L2NsaWVudC5sYW1iZGEtc2hhcmVkJztcbmltcG9ydCB7IExpY2Vuc2VMaXN0Q2xpZW50IH0gZnJvbSAnLi4vLi4vYmFja2VuZC9saWNlbnNlLWxpc3QvY2xpZW50LmxhbWJkYS1zaGFyZWQnO1xuaW1wb3J0IHtcbiAgTEFNQkRBX0NMSUVOVCxcbiAgUzNfQ0xJRU5ULFxufSBmcm9tICcuLi8uLi9iYWNrZW5kL3NoYXJlZC9hd3MubGFtYmRhLXNoYXJlZCc7XG5pbXBvcnQgeyBkZWNvbXByZXNzQ29udGVudCB9IGZyb20gJy4uLy4uL2JhY2tlbmQvc2hhcmVkL2NvbXByZXNzLWNvbnRlbnQubGFtYmRhLXNoYXJlZCc7XG5pbXBvcnQgeyByZXF1aXJlRW52IH0gZnJvbSAnLi4vLi4vYmFja2VuZC9zaGFyZWQvZW52LmxhbWJkYS1zaGFyZWQnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IG5vcm1hbGl6ZU5QTU1ldGFkYXRhID0gcmVxdWlyZSgnbm9ybWFsaXplLXJlZ2lzdHJ5LW1ldGFkYXRhJyk7XG5cbmNvbnN0IENPTlNUUlVDVF9LRVlXT1JEUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAnY2RrJyxcbiAgJ2F3cy1jZGsnLFxuICAnYXdzY2RrJyxcbiAgJ2NkazhzJyxcbiAgJ2Nka3RmJyxcbl0pO1xuY29uc3QgTlBNX1JFUExJQ0FfUkVHSVNUUllfVVJMID0gJ2h0dHBzOi8vcmVwbGljYXRlLm5wbWpzLmNvbS8nO1xuXG4vKipcbiAqIFRoZSByZWxlYXNlIGRhdGUgb2YgYGF3cy1jZGtAMC44LjBgLiBBbnl0aGluZyBlYXJsaWVyIHRoYW4gdGhpcyBiYXNpY2FsbHkgaXNcbiAqIG5vdCBhIHJlbGV2YW50IHBhY2thZ2UsIGFzIGl0IGNhbm5vdCBwb3NzaWJseSBiZSBhIGNvbnN0cnVjdHMtYmFzZWQgcGFja2FnZS5cbiAqIFRoaXMgaXMgdXNlZCB0byBmYXN0LWZvcndhcmQgb3ZlciBib3Jpbmcgc3R1ZmYgd2hlbiB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzXG4gKiByZXNldC5cbiAqL1xuY29uc3QgREFXTl9PRl9DT05TVFJVQ1RTID0gbmV3IERhdGUoJzIwMTgtMDctMzFUMTM6NDM6MDQuNjE1WicpO1xuXG4vLyBDb25maWd1cmUgZW1iZWRkZWQgbWV0cmljcyBmb3JtYXRcbkNvbmZpZ3VyYXRpb24ubmFtZXNwYWNlID0gTUVUUklDU19OQU1FU1BBQ0U7XG5cbi8vIE1ha2Ugc3VyZSBYLVJheSB0cmFjZXMgd2lsbCBpbmNsdWRlIEhUVFAocykgY2FsbHMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY2FwdHVyZUhUVFBzR2xvYmFsKHJlcXVpcmUoJ2h0dHBzJykpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNhcHR1cmVIVFRQc0dsb2JhbChyZXF1aXJlKCdodHRwJykpO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gdHJpZ2dlcnMgb24gYSBmaXhlZCBzY2hlZHVsZSBhbmQgcmVhZHMgYSBzdHJlYW0gb2YgY2hhbmdlcyBmcm9tIG5wbWpzIGNvdWNoZGIgX2NoYW5nZXMgZW5kcG9pbnQuXG4gKiBVcG9uIGludm9jYXRpb24gdGhlIGZ1bmN0aW9uIHN0YXJ0cyByZWFkaW5nIGZyb20gYSBzZXF1ZW5jZSBzdG9yZWQgaW4gYW4gczMgb2JqZWN0IC0gdGhlIGBtYXJrZXJgLlxuICogSWYgdGhlIG1hcmtlciBmYWlscyB0byBsb2FkIChvciBkbyBub3QgZXhpc3QpLCB0aGUgc3RyZWFtIHdpbGwgc3RhcnQgZnJvbSBgbm93YCAtIHRoZSBsYXRlc3QgY2hhbmdlLlxuICogRm9yIGVhY2ggY2hhbmdlOlxuICogIC0gdGhlIHBhY2thZ2UgdmVyc2lvbiB0YXJiYWxsIHdpbGwgYmUgY29waWVkIGZyb20gdGhlIG5wbSByZWdpc3RyeSB0byBhIHN0YXRpbmcgYnVja2V0LlxuICogIC0gYSBtZXNzYWdlIHdpbGwgYmUgc2VudCB0byBhbiBzcXMgcXVldWVcbiAqIG5wbSByZWdpc3RyeSBBUEkgZG9jczogaHR0cHM6Ly9naXRodWIuY29tL25wbS9yZWdpc3RyeS9ibG9iL21hc3Rlci9kb2NzL1JFR0lTVFJZLUFQSS5tZFxuICogQHBhcmFtIGNvbnRleHQgYSBMYW1iZGEgZXhlY3V0aW9uIGNvbnRleHRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQ6IFNjaGVkdWxlZEV2ZW50LCBjb250ZXh0OiBDb250ZXh0KSB7XG4gIGNvbnNvbGUubG9nKGBFdmVudDogJHtKU09OLnN0cmluZ2lmeShldmVudCwgbnVsbCwgMil9YCk7XG5cbiAgY29uc3Qgc3RhZ2luZ0J1Y2tldCA9IHJlcXVpcmVFbnYoJ0JVQ0tFVF9OQU1FJyk7XG4gIGNvbnN0IHN0YWdpbmdGdW5jdGlvbiA9IHJlcXVpcmVFbnYoJ0ZVTkNUSU9OX05BTUUnKTtcblxuICBjb25zdCBkZW55TGlzdCA9IGF3YWl0IERlbnlMaXN0Q2xpZW50Lm5ld0NsaWVudCgpO1xuICBjb25zdCBsaWNlbnNlTGlzdCA9IGF3YWl0IExpY2Vuc2VMaXN0Q2xpZW50Lm5ld0NsaWVudCgpO1xuXG4gIGNvbnN0IG5wbSA9IG5ldyBDb3VjaENoYW5nZXMoTlBNX1JFUExJQ0FfUkVHSVNUUllfVVJMLCAncmVnaXN0cnkvX2NoYW5nZXMnKTtcblxuICBjb25zdCB7XG4gICAgbWFya2VyOiBpbml0aWFsTWFya2VyLFxuICAgIGtub3duVmVyc2lvbnMsXG4gICAgZGlkTG9hZFZlcnNpb25zRnJvbUxlZ2FjeSxcbiAgfSA9IGF3YWl0IGxvYWRGb2xsb3dlclBvc2l0aW9uKHN0YWdpbmdCdWNrZXQsIG5wbSk7XG5cbiAgLy8gSWYgd2UgbG9hZGVkIGZyb20gdGhlIG9sZCBsb2NhdGlvbiwgd3JpdGUgdG8gdGhlIG5ld1xuICBsZXQgd3JpdGVLbm93blZlcnNpb25zRmlsZSA9IGRpZExvYWRWZXJzaW9uc0Zyb21MZWdhY3k7XG5cbiAgLy8gVGhlIGxhc3Qgd3JpdHRlbiBtYXJrZXIgc2VxIGlkLlxuICBsZXQgdXBkYXRlZE1hcmtlciA9IGluaXRpYWxNYXJrZXI7XG5cbiAgLy8gVGhlIHNsb3dlc3QgYmF0Y2ggcHJvY2Vzc2luZyB0aW1lIHNvIGZhciAoc3RhcnRzIGF0IDMwIHNlY29uZHMpLiBUaGlzIGlzIGhvdyBtdWNoIHRpbWUgc2hvdWxkXG4gIC8vIGJlIGxlZnQgYmVmb3JlIHRpbWVvdXQgaWYgYSBuZXcgYmF0Y2ggaXMgdG8gYmUgZmV0Y2hlZC5cbiAgbGV0IG1heEJhdGNoUHJvY2Vzc2luZ1RpbWUgPSAzMF8wMDA7XG4gIC8vIFdoZXRoZXIgd2Ugc2hvdWxkIGNvbnRpbnVlIHJlYWRpbmcgbW9yZSBpdGVtcyBvciBub3QuLi4gVGhpcyBpcyBzZXQgdG8gZmFsc2Ugd2hlbiB0aGUgY3VycmVudFxuICAvLyBsYXRlc3QgY2hhbmdlIGlzIHJlYWNoZWQgKGkuZTogbmV4dCBwYWdlIG9mIGNoYW5nZXMgaXMgZW1wdHkpLlxuICBsZXQgc2hvdWxkQ29udGludWUgPSB0cnVlO1xuXG4gIGRvIHtcbiAgICBhd2FpdCBtZXRyaWNTY29wZSgobWV0cmljcykgPT4gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ1BvbGxpbmcgY2hhbmdlcyBmcm9tIG5wbSByZXBsaWNhJyk7XG4gICAgICBjb25zdCBjaGFuZ2VzID0gYXdhaXQgbnBtLmNoYW5nZXModXBkYXRlZE1hcmtlcik7XG5cbiAgICAgIC8vIENsZWFyIGF1dG9tYXRpY2FsbHkgc2V0IGRpbWVuc2lvbnMgLSB3ZSBkb24ndCBuZWVkIHRoZW0gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzbGFicy9hd3MtZW1iZWRkZWQtbWV0cmljcy1ub2RlL2lzc3Vlcy83MylcbiAgICAgIG1ldHJpY3Muc2V0RGltZW5zaW9ucyh7fSk7XG5cbiAgICAgIC8vIFJlY29yZGluZyBjdXJyZW50IHNlcSByYW5nZSBhbmQgdXBkYXRpbmcgdGhlIGB1cGRhdGVkTWFya2VyYC5cbiAgICAgIG1ldHJpY3Muc2V0UHJvcGVydHkoJ1N0YXJ0U2VxJywgdXBkYXRlZE1hcmtlcik7XG4gICAgICB1cGRhdGVkTWFya2VyID0gTnVtYmVyKGNoYW5nZXMubGFzdF9zZXEpO1xuICAgICAgbWV0cmljcy5zZXRQcm9wZXJ0eSgnRW5kU2VxJywgdXBkYXRlZE1hcmtlcik7XG5cbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJhdGNoID0gY2hhbmdlcy5hY3Rpb25hYmxlUmVzdWx0cyBhcyByZWFkb25seSBDaGFuZ2VbXTtcblxuICAgICAgICAvLyBUaGUgbW9zdCByZWNlbnQgXCJtb2RpZmllZFwiIHRpbWVzdGFtcCBvYnNlcnZlZCBpbiB0aGUgYmF0Y2guXG4gICAgICAgIGxldCBsYXN0TW9kaWZpZWQ6IERhdGUgfCB1bmRlZmluZWQ7XG4gICAgICAgIC8vIEVtaXQgbnBtLmpzIHJlcGxpY2F0aW9uIGxhZ1xuICAgICAgICBmb3IgKGNvbnN0IHsgZG9jIH0gb2YgYmF0Y2gpIHtcbiAgICAgICAgICBpZiAoZG9jPy50aW1lPy5tb2RpZmllZCkge1xuICAgICAgICAgICAgY29uc3QgbW9kaWZpZWQgPSBuZXcgRGF0ZShkb2MudGltZS5tb2RpZmllZCk7XG4gICAgICAgICAgICBtZXRyaWNzLnB1dE1ldHJpYyhcbiAgICAgICAgICAgICAgTWV0cmljTmFtZS5OUE1KU19DSEFOR0VfQUdFLFxuICAgICAgICAgICAgICBzdGFydFRpbWUgLSBtb2RpZmllZC5nZXRUaW1lKCksXG4gICAgICAgICAgICAgIFVuaXQuTWlsbGlzZWNvbmRzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGxhc3RNb2RpZmllZCA9PSBudWxsIHx8IGxhc3RNb2RpZmllZCA8IG1vZGlmaWVkKSB7XG4gICAgICAgICAgICAgIGxhc3RNb2RpZmllZCA9IG1vZGlmaWVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBSZWNlaXZlZCBhIGJhdGNoIG9mICR7Y2hhbmdlcy50b3RhbENvdW50fSBlbGVtZW50KHMpLCAke2JhdGNoLmxlbmd0aH0gYWZ0ZXIgZmlsdGVyaW5nYFxuICAgICAgICApO1xuICAgICAgICBtZXRyaWNzLnB1dE1ldHJpYyhNZXRyaWNOYW1lLkNIQU5HRV9DT1VOVCwgYmF0Y2gubGVuZ3RoLCBVbml0LkNvdW50KTtcblxuICAgICAgICBpZiAobGFzdE1vZGlmaWVkICYmIGxhc3RNb2RpZmllZCA8IERBV05fT0ZfQ09OU1RSVUNUUykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYFNraXBwaW5nIGJhdGNoIGFzIHRoZSBsYXRlc3QgbW9kaWZpY2F0aW9uIGlzICR7bGFzdE1vZGlmaWVkfSwgd2hpY2ggaXMgcHJlLUNvbnN0cnVjdHNgXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VzLnRvdGFsQ291bnQgPT09IDApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnUmVjZWl2ZWQgMCBjaGFuZ2VzLCBjYXVnaHQgdXAgdG8gXCJub3dcIiwgZXhpdGluZy4uLicpO1xuICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT2J0YWluIHRoZSBtb2RpZmllZCBwYWNrYWdlIHZlcnNpb24gZnJvbSB0aGUgdXBkYXRlIGV2ZW50LCBhbmQgZmlsdGVyXG4gICAgICAgICAgLy8gb3V0IHBhY2thZ2VzIHRoYXQgYXJlIG5vdCBvZiBpbnRlcmVzdCB0byB1cyAobm90IGNvbnN0cnVjdCBsaWJyYXJpZXMpLlxuICAgICAgICAgIGNvbnN0IHZlcnNpb25JbmZvcyA9IGdldFJlbGV2YW50VmVyc2lvbkluZm9zKFxuICAgICAgICAgICAgYmF0Y2gsXG4gICAgICAgICAgICBtZXRyaWNzLFxuICAgICAgICAgICAgZGVueUxpc3QsXG4gICAgICAgICAgICBsaWNlbnNlTGlzdCxcbiAgICAgICAgICAgIGtub3duVmVyc2lvbnNcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYElkZW50aWZpZWQgJHt2ZXJzaW9uSW5mb3MubGVuZ3RofSByZWxldmFudCBwYWNrYWdlIHZlcnNpb24gdXBkYXRlKHMpYFxuICAgICAgICAgICk7XG4gICAgICAgICAgbWV0cmljcy5wdXRNZXRyaWMoXG4gICAgICAgICAgICBNZXRyaWNOYW1lLlJFTEVWQU5UX1BBQ0tBR0VfVkVSU0lPTlMsXG4gICAgICAgICAgICB2ZXJzaW9uSW5mb3MubGVuZ3RoLFxuICAgICAgICAgICAgVW5pdC5Db3VudFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHZlcnNpb25JbmZvcywgd2UgYWxyZWFkeSBhZGRlZCB0aGVtIHRvIHRoZSBrbm93blZlcnNpb25zIG1hcCBhbmQgd2Ugc2hvdWxkIHNhdmUgaXQgYWdhaW5cbiAgICAgICAgICB3cml0ZUtub3duVmVyc2lvbnNGaWxlIHx8PSB2ZXJzaW9uSW5mb3MubGVuZ3RoID4gMDtcblxuICAgICAgICAgIC8vIFByb2Nlc3MgYWxsIHJlbWFpbmluZyB1cGRhdGVzXG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICB2ZXJzaW9uSW5mb3MubWFwKGFzeW5jICh7IGluZm9zLCBtb2RpZmllZCwgc2VxIH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW52b2tlQXJnczogUGFja2FnZVZlcnNpb24gPSB7XG4gICAgICAgICAgICAgICAgaW50ZWdyaXR5OiBpbmZvcy5kaXN0LnNoYXN1bSxcbiAgICAgICAgICAgICAgICBtb2RpZmllZDogbW9kaWZpZWQudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBuYW1lOiBpbmZvcy5uYW1lLFxuICAgICAgICAgICAgICAgIHNlcTogc2VxPy50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHRhcmJhbGxVcmw6IGluZm9zLmRpc3QudGFyYmFsbCxcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBpbmZvcy52ZXJzaW9uLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAvLyBcIkZpcmUtYW5kLWZvcmdldFwiIGludm9jYXRpb24gaGVyZS5cbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYFNlbmRpbmcgJHtpbnZva2VBcmdzLnRhcmJhbGxVcmx9IGZvciBzdGFnaW5nYCk7XG4gICAgICAgICAgICAgIGF3YWl0IExBTUJEQV9DTElFTlQuc2VuZChcbiAgICAgICAgICAgICAgICBuZXcgSW52b2tlQ29tbWFuZCh7XG4gICAgICAgICAgICAgICAgICBGdW5jdGlvbk5hbWU6IHN0YWdpbmdGdW5jdGlvbixcbiAgICAgICAgICAgICAgICAgIEludm9jYXRpb25UeXBlOiAnRXZlbnQnLFxuICAgICAgICAgICAgICAgICAgUGF5bG9hZDogQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoaW52b2tlQXJncykpLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIC8vIFJlY29yZCB0aGF0IHRoaXMgaXMgbm93IGEgXCJrbm93blwiIHZlcnNpb24gKG5vIG5lZWQgdG8gcmUtZGlzY292ZXIpXG4gICAgICAgICAgICAgIGtub3duVmVyc2lvbnMuc2V0KGAke2luZm9zLm5hbWV9QCR7aW5mb3MudmVyc2lvbn1gLCBtb2RpZmllZCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGluZyB0aGUgUzMgc3RvcmVkIG1hcmtlciB3aXRoIHRoZSBuZXcgc2VxIGlkIGFuZCBrbm93biB2ZXJzaW9ucyBjb25jdXJyZW50bHlcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIC8vIGFsd2F5cyBzYXZlIHRoZSB0cmFuc2FjdGlvbiBtYXJrZXJcbiAgICAgICAgICBzYXZlTGFzdFRyYW5zYWN0aW9uTWFya2VyKGNvbnRleHQsIHN0YWdpbmdCdWNrZXQsIHVwZGF0ZWRNYXJrZXIpLFxuICAgICAgICAgIC8vIGNvbmRpdGlvbmFsbHkgc2F2ZSBrbm93biB2ZXJzaW9uc1xuICAgICAgICAgIC4uLih3cml0ZUtub3duVmVyc2lvbnNGaWxlXG4gICAgICAgICAgICA/IFtzYXZlTGFzdEtub3duVmVyc2lvbnMoY29udGV4dCwgc3RhZ2luZ0J1Y2tldCwga25vd25WZXJzaW9ucyldXG4gICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgXSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBtZXRyaWNzLnB1dE1ldHJpYyhNZXRyaWNOYW1lLkxBU1RfU0VRLCB1cGRhdGVkTWFya2VyLCBVbml0Lk5vbmUpO1xuICAgICAgICBtZXRyaWNzLnB1dE1ldHJpYyhcbiAgICAgICAgICBNZXRyaWNOYW1lLkJBVENIX1BST0NFU1NJTkdfVElNRSxcbiAgICAgICAgICBEYXRlLm5vdygpIC0gc3RhcnRUaW1lLFxuICAgICAgICAgIFVuaXQuTWlsbGlzZWNvbmRzXG4gICAgICAgICk7XG4gICAgICAgIG1ldHJpY3MucHV0TWV0cmljKFxuICAgICAgICAgIE1ldHJpY05hbWUuUkVNQUlOSU5HX1RJTUUsXG4gICAgICAgICAgY29udGV4dC5nZXRSZW1haW5pbmdUaW1lSW5NaWxsaXMoKSxcbiAgICAgICAgICBVbml0Lk1pbGxpc2Vjb25kc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pKCk7XG4gIH0gd2hpbGUgKFxuICAgIHNob3VsZENvbnRpbnVlICYmXG4gICAgY29udGV4dC5nZXRSZW1haW5pbmdUaW1lSW5NaWxsaXMoKSA+PSBtYXhCYXRjaFByb2Nlc3NpbmdUaW1lXG4gICk7XG5cbiAgY29uc29sZS5sb2coJ0FsbCBkb25lIGhlcmUsIHdlIGhhdmUgc3VjY2VzcyEnKTtcblxuICByZXR1cm4geyBpbml0aWFsTWFya2VyLCB1cGRhdGVkTWFya2VyIH07XG59XG5cbi8vI3JlZ2lvbiBMYXN0IGtub3duIHZlcnNpb25zIGFuZCBtYXJrZXJcbi8qKlxuICogQ29tbW9uIGZ1bmN0aW9uIHRvIGxvYWQgZGF0YSBmcm9tIGFuIFMzIGZpbGUgd2l0aCBlcnJvciBoYW5kbGluZ1xuICpcbiAqIEBwYXJhbSBzdGFnaW5nQnVja2V0IFRoZSBTMyBidWNrZXQgbmFtZVxuICogQHBhcmFtIGtleSBUaGUgZmlsZSBrZXkgaW4gdGhlIGJ1Y2tldFxuICogQHBhcmFtIHdhcm5pbmdNZXNzYWdlIE1lc3NhZ2UgdG8gbG9nIHdoZW4gZmlsZSBkb2Vzbid0IGV4aXN0XG4gKiBAcmV0dXJucyBUaGUgZGVjb21wcmVzc2VkIGZpbGUgY29udGVudCBhcyBzdHJpbmcsIG9yIG51bGwgaWYgZmlsZSBkb2Vzbid0IGV4aXN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRDb250ZW50RnJvbVMzKFxuICBzdGFnaW5nQnVja2V0OiBzdHJpbmcsXG4gIGtleTogc3RyaW5nLFxuICB3YXJuaW5nTWVzc2FnZTogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFMzX0NMSUVOVC5zZW5kKFxuICAgICAgbmV3IEdldE9iamVjdENvbW1hbmQoe1xuICAgICAgICBCdWNrZXQ6IHN0YWdpbmdCdWNrZXQsXG4gICAgICAgIEtleToga2V5LFxuICAgICAgfSlcbiAgICApO1xuICAgIGlmICghcmVzcG9uc2UuQm9keSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXNwb25zZSBCb2R5IGZvciAke2tleX0gaXMgZW1wdHlgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IGRlY29tcHJlc3NDb250ZW50KFxuICAgICAgcmVzcG9uc2UuQm9keSBhcyBOb2RlSnNSdW50aW1lU3RyZWFtaW5nQmxvYlBheWxvYWRPdXRwdXRUeXBlcyxcbiAgICAgIHJlc3BvbnNlLkNvbnRlbnRFbmNvZGluZ1xuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb1N1Y2hLZXkgfHwgZXJyb3IubmFtZSA9PT0gJ05vU3VjaEtleScpIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nTWVzc2FnZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gcmUtdGhyb3cgdW5leHBlY3RlZCBlcnJvcnNcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkRm9sbG93ZXJQb3NpdGlvbihcbiAgc3RhZ2luZ0J1Y2tldDogc3RyaW5nLFxuICByZWdpc3RyeTogQ291Y2hDaGFuZ2VzXG4pOiBQcm9taXNlPHtcbiAgbWFya2VyOiBudW1iZXI7XG4gIGtub3duVmVyc2lvbnM6IE1hcDxzdHJpbmcsIERhdGU+O1xuICBkaWRMb2FkVmVyc2lvbnNGcm9tTGVnYWN5OiBib29sZWFuO1xufT4ge1xuICBjb25zdCBbbWFya2VyRmlsZSwga25vd25WZXJzaW9uc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgbG9hZExhc3RUcmFuc2FjdGlvbk1hcmtlcihzdGFnaW5nQnVja2V0LCByZWdpc3RyeSksXG4gICAgbG9hZExhc3RLbm93blZlcnNpb25zKHN0YWdpbmdCdWNrZXQpLFxuICBdKTtcblxuICBpZiAoIWtub3duVmVyc2lvbnMpIHtcbiAgICAvLyBGb3IgbGVnYWN5IHJlYXNvbnMsIGtub3duVmVyc2lvbnMgY291bGQgY29tZSBmcm9tIHRoZSB0cmFuc2FjdGlvbiBtYXJrZXIgZmlsZVxuICAgIC8vIElmIGl0IGRvZXMsIHRoZW4gd2UgdGFrZSB0aGF0IGFzIGtub3duVmVyc2lvbnMgYnV0IHdpbGwgbWlncmF0ZSBrbm93blZlcnNpb25zXG4gICAgLy8gdG8gdGhlIG1vZGVybiBmaWxlIGxvY2F0aW9uXG4gICAgcmV0dXJuIHtcbiAgICAgIG1hcmtlcjogbWFya2VyRmlsZS5tYXJrZXIsXG4gICAgICBrbm93blZlcnNpb25zOiBtYXJrZXJGaWxlLmtub3duVmVyc2lvbnMgPz8gbmV3IE1hcCgpLFxuICAgICAgZGlkTG9hZFZlcnNpb25zRnJvbUxlZ2FjeTogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYXJrZXI6IG1hcmtlckZpbGUubWFya2VyLFxuICAgIGtub3duVmVyc2lvbnMsXG4gICAgZGlkTG9hZFZlcnNpb25zRnJvbUxlZ2FjeTogZmFsc2UsXG4gIH07XG59XG5cbi8qKlxuICogTG9hZHMgdGhlIGxhc3Qga25vd24gdmVyc2lvbnMgZnJvbSBTMy5cbiAqXG4gKiBAcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGxhc3Qga25vd24gdmVyc2lvbnMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRMYXN0S25vd25WZXJzaW9ucyhcbiAgc3RhZ2luZ0J1Y2tldDogc3RyaW5nXG4pOiBQcm9taXNlPE1hcDxzdHJpbmcsIERhdGU+IHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHdhcm5pbmdNZXNzYWdlID0gYEtub3duIHZlcnNpb25zIG9iamVjdCAoczM6Ly8ke3N0YWdpbmdCdWNrZXR9LyR7S05PV05fVkVSU0lPTlNfRklMRV9OQU1FfSkgZG9lcyBub3QgZXhpc3QsIHN0YXJ0aW5nIGZyb20gc2NyYXRjaGA7XG4gIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBsb2FkQ29udGVudEZyb21TMyhcbiAgICBzdGFnaW5nQnVja2V0LFxuICAgIEtOT1dOX1ZFUlNJT05TX0ZJTEVfTkFNRSxcbiAgICB3YXJuaW5nTWVzc2FnZVxuICApO1xuXG4gIC8vIEtub3duIFZlcnNpb25zIGRvZXMgbm90IGV4aXN0LCBzdGFydGluZyBmcm9tIHNjcmF0Y2hcbiAgaWYgKGNvbnRlbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gS25vd24gVmVyc2lvbnMgZXhpc3RzLCBnZW5lcmF0aW5nIG1hcCBmcm9tIHRoZSBkYXRhXG4gIGNvbnN0IGNvbnRlbnRzT2JqOiBLbm93blZlcnNpb25zRmlsZVNjaGVtYSA9IEpTT04ucGFyc2UoY29udGVudCk7XG5cbiAgY29uc29sZS5sb2coYExvYWRlZCBsYXN0IGtub3duIHZlcnNpb25zIGRhdGFgKTtcblxuICByZXR1cm4gZGF0ZU1hcEZyb21PYmooY29udGVudHNPYmoua25vd25WZXJzaW9ucyk7XG59XG5cbi8qKlxuICogTG9hZHMgdGhlIGxhc3QgdHJhbnNhY3Rpb24gbWFya2VyIGZyb20gUzMuXG4gKlxuICogQHBhcmFtIHJlZ2lzdHJ5IGEgTmFubyBkYXRhYmFzZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBOcG1qcy5jb20gQ291Y2hEQiBpbnN0YW5jZS5cbiAqXG4gKiBAcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGxhc3QgdHJhbnNhY3Rpb24gbWFya2VyLlxuICovXG5hc3luYyBmdW5jdGlvbiBsb2FkTGFzdFRyYW5zYWN0aW9uTWFya2VyKFxuICBzdGFnaW5nQnVja2V0OiBzdHJpbmcsXG4gIHJlZ2lzdHJ5OiBDb3VjaENoYW5nZXNcbik6IFByb21pc2U8eyBtYXJrZXI6IG51bWJlcjsga25vd25WZXJzaW9ucz86IE1hcDxzdHJpbmcsIERhdGU+IH0+IHtcbiAgY29uc3Qgd2FybmluZ01lc3NhZ2UgPSBgTWFya2VyIG9iamVjdCAoczM6Ly8ke3N0YWdpbmdCdWNrZXR9LyR7TUFSS0VSX0ZJTEVfTkFNRX0pIGRvZXMgbm90IGV4aXN0LCBzdGFydGluZyBmcm9tIHNjcmF0Y2hgO1xuICBjb25zdCBjb250ZW50ID0gYXdhaXQgbG9hZENvbnRlbnRGcm9tUzMoXG4gICAgc3RhZ2luZ0J1Y2tldCxcbiAgICBNQVJLRVJfRklMRV9OQU1FLFxuICAgIHdhcm5pbmdNZXNzYWdlXG4gICk7XG5cbiAgLy8gTGFzdCB0cmFuc2FjdGlvbiBtYXJrZXIgZG9lcyBub3QgZXhpc3RcbiAgaWYgKGNvbnRlbnQgPT09IG51bGwpIHtcbiAgICByZXR1cm4geyBtYXJrZXI6IDAgfTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZEZpbGU6IE1hcmtlckZpbGVTY2hlbWEgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuXG4gIGxldCBtYXJrZXI6IG51bWJlcjtcbiAgbGV0IGtub3duVmVyc2lvbnM6IE1hcDxzdHJpbmcsIERhdGU+IHwgdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHBhcnNlZEZpbGUgPT09ICdudW1iZXInKSB7XG4gICAgbWFya2VyID0gcGFyc2VkRmlsZTtcbiAgfSBlbHNlIHtcbiAgICBtYXJrZXIgPSBOdW1iZXIocGFyc2VkRmlsZS5tYXJrZXIpO1xuICAgIGtub3duVmVyc2lvbnMgPSBwYXJzZWRGaWxlLmtub3duVmVyc2lvbnNcbiAgICAgID8gZGF0ZU1hcEZyb21PYmoocGFyc2VkRmlsZS5rbm93blZlcnNpb25zKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBhbWF6b25xLWlnbm9yZS1uZXh0LWxpbmVcbiAgY29uc29sZS5sb2coYFJlYWQgbGFzdCB0cmFuc2FjdGlvbiBtYXJrZXI6ICR7bWFya2VyfWApO1xuXG4gIGNvbnN0IGRiVXBkYXRlU2VxID0gTnVtYmVyKChhd2FpdCByZWdpc3RyeS5pbmZvKCkpLnVwZGF0ZV9zZXEpO1xuICBpZiAoZGJVcGRhdGVTZXEgPCBtYXJrZXIpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgQ3VycmVudCBEQiB1cGRhdGVfc2VxICgke2RiVXBkYXRlU2VxfSkgaXMgbG93ZXIgdGhhbiBtYXJrZXIgKENvdWNoREIgaW5zdGFuY2Ugd2FzIGxpa2VseSByZXBsYWNlZCksIHJlc2V0dGluZyB0byAwIWBcbiAgICApO1xuICAgIHJldHVybiB7IG1hcmtlcjogMCB9O1xuICB9XG5cbiAgcmV0dXJuIHsgbWFya2VyLCBrbm93blZlcnNpb25zIH07XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgbGFzdCBrbm93biB2ZXJzaW9ucyBpbiBTMy5cbiAqXG4gKiBAcGFyYW0ga25vd25WZXJzaW9ucyB0aGUgbWFwIG9mIHBhY2thZ2UgbmFtZSArIHZlcnNpb24gdG8gbGFzdCBtb2RpZmllZCB0aW1lc3RhbXAgb2YgcGFja2FnZXMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkLlxuICovXG5hc3luYyBmdW5jdGlvbiBzYXZlTGFzdEtub3duVmVyc2lvbnMoXG4gIGNvbnRleHQ6IENvbnRleHQsXG4gIHN0YWdpbmdCdWNrZXQ6IHN0cmluZyxcbiAga25vd25WZXJzaW9uczogTWFwPHN0cmluZywgRGF0ZT5cbikge1xuICBjb25zdCBjb250ZW50c09iajogS25vd25WZXJzaW9uc0ZpbGVTY2hlbWEgPSB7XG4gICAga25vd25WZXJzaW9uczogb2JqRnJvbURhdGVNYXAoa25vd25WZXJzaW9ucyksXG4gIH07XG5cbiAgY29uc29sZS5sb2coYEtub3duIHZlcnNpb25zIGNoYW5nZWQsIHVwZGF0aW5nLi4uYCk7XG4gIGF3YWl0IHB1dE9iamVjdChcbiAgICBjb250ZXh0LFxuICAgIHN0YWdpbmdCdWNrZXQsXG4gICAgS05PV05fVkVSU0lPTlNfRklMRV9OQU1FLFxuICAgIEpTT04uc3RyaW5naWZ5KGNvbnRlbnRzT2JqLCB1bmRlZmluZWQsIDIpLFxuICAgIHtcbiAgICAgIENvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgfVxuICApO1xuICBjb25zb2xlLmxvZygnU3VjY2Vzc2Z1bGx5IHVwZGF0ZWQga25vd24gdmVyc2lvbnMnKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBsYXN0IHRyYW5zYWN0aW9uIG1hcmtlciBpbiBTMy5cbiAqXG4gKiBAcGFyYW0gbWFya2VyIHRoZSBsYXN0IHRyYW5zYWN0aW9uIG1hcmtlciB2YWx1ZVxuICovXG5hc3luYyBmdW5jdGlvbiBzYXZlTGFzdFRyYW5zYWN0aW9uTWFya2VyKFxuICBjb250ZXh0OiBDb250ZXh0LFxuICBzdGFnaW5nQnVja2V0OiBzdHJpbmcsXG4gIG1hcmtlcjogbnVtYmVyXG4pIHtcbiAgY29uc3QgY29udGVudHMgPSBKU09OLnN0cmluZ2lmeSh7IG1hcmtlciB9KTtcbiAgY29uc29sZS5sb2coYFVwZGF0aW5nIGxhc3QgdHJhbnNhY3Rpb24gbWFya2VyIHRvICR7bWFya2VyfWApO1xuICBhd2FpdCBwdXRPYmplY3QoY29udGV4dCwgc3RhZ2luZ0J1Y2tldCwgTUFSS0VSX0ZJTEVfTkFNRSwgY29udGVudHMsIHtcbiAgICBDb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICB9KTtcbiAgY29uc29sZS5sb2coJ1N1Y2Nlc3NmdWxseSB1cGRhdGVkIG1hcmtlcicpO1xufVxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiBBc3luY2hyb25vdXMgUHJpbWl0aXZlc1xuLyoqXG4gKiBQdXRzIGFuIG9iamVjdCBpbiB0aGUgc3RhZ2luZyBidWNrZXQsIHdpdGggc3RhbmRhcmRpemVkIG9iamVjdCBtZXRhZGF0YS5cbiAqXG4gKiBAcGFyYW0ga2V5ICB0aGUga2V5IGZvciB0aGUgb2JqZWN0IHRvIGJlIHB1dC5cbiAqIEBwYXJhbSBib2R5IHRoZSBib2R5IG9mIHRoZSBvYmplY3QgdG8gYmUgcHV0LlxuICogQHBhcmFtIG9wdHMgYW55IG90aGVyIG9wdGlvbnMgdG8gdXNlIHdoZW4gc2VuZGluZyB0aGUgUzMgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBTMyByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBwdXRPYmplY3QoXG4gIGNvbnRleHQ6IENvbnRleHQsXG4gIGJ1Y2tldDogc3RyaW5nLFxuICBrZXk6IHN0cmluZyxcbiAgYm9keTogU3RyZWFtaW5nQmxvYlBheWxvYWRJbnB1dFR5cGVzLFxuICBvcHRzOiBPbWl0PFB1dE9iamVjdENvbW1hbmRJbnB1dCwgJ0J1Y2tldCcgfCAnS2V5JyB8ICdCb2R5Jz4gPSB7fVxuKSB7XG4gIHJldHVybiBTM19DTElFTlQuc2VuZChcbiAgICBuZXcgUHV0T2JqZWN0Q29tbWFuZCh7XG4gICAgICBCdWNrZXQ6IGJ1Y2tldCxcbiAgICAgIEtleToga2V5LFxuICAgICAgQm9keTogYm9keSxcbiAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICdMYW1iZGEtTG9nLUdyb3VwJzogY29udGV4dC5sb2dHcm91cE5hbWUsXG4gICAgICAgICdMYW1iZGEtTG9nLVN0cmVhbSc6IGNvbnRleHQubG9nU3RyZWFtTmFtZSxcbiAgICAgICAgJ0xhbWJkYS1SdW4tSWQnOiBjb250ZXh0LmF3c1JlcXVlc3RJZCxcbiAgICAgICAgLi4ub3B0cy5NZXRhZGF0YSxcbiAgICAgIH0sXG4gICAgICAuLi5vcHRzLFxuICAgIH0pXG4gICk7XG59XG4vLyNlbmRyZWdpb25cblxuLyoqXG4gKiBPYnRhaW5zIHRoZSBgVmVyc2lvbkluZm9gIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZGlmaWVkIHZlcnNpb24ocykgaW4gdGhlXG4gKiBwcm92aWRlZCBgQ2hhbmdlYCBvYmplY3RzLCBlbnN1cmVzIHRoZXkgYXJlIHJlbGV2YW50IChjb25zdHJ1Y3QgbGlicmFyaWVzKSxcbiAqIGFuZCByZXR1cm5zIHRob3NlIG9ubHkuXG4gKlxuICogQHBhcmFtIGNoYW5nZXMgdGhlIGNoYW5nZXMgdG8gYmUgcHJvY2Vzc2VkLlxuICogQHBhcmFtIG1ldHJpY3MgdGhlIG1ldHJpY3MgbG9nZ2VyIHRvIHVzZS5cbiAqIEBwYXJhbSBkZW55TGlzdCBkZW55IGxpc3QgY2xpZW50XG4gKlxuICogQHJldHVybnMgYSBsaXN0IG9mIGBWZXJzaW9uSW5mb2Agb2JqZWN0c1xuICovXG5mdW5jdGlvbiBnZXRSZWxldmFudFZlcnNpb25JbmZvcyhcbiAgY2hhbmdlczogcmVhZG9ubHkgQ2hhbmdlW10sXG4gIG1ldHJpY3M6IE1ldHJpY3NMb2dnZXIsXG4gIGRlbnlMaXN0OiBEZW55TGlzdENsaWVudCxcbiAgbGljZW5zZUxpc3Q6IExpY2Vuc2VMaXN0Q2xpZW50LFxuICBrbm93blZlcnNpb25zOiBNYXA8c3RyaW5nLCBEYXRlPlxuKTogcmVhZG9ubHkgVXBkYXRlZFZlcnNpb25bXSB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxVcGRhdGVkVmVyc2lvbj4oKTtcblxuICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgZWxlbWVudHMgdGhhdCBkb24ndCBoYXZlIGEgXCJuYW1lXCIgaW4gdGhlIGRvY3VtZW50LCBhc1xuICAgIC8vIHRoZXNlIGFyZSBzY2hlbWFzLCB3aGljaCBhcmUgbm90IHJlbGV2YW50IHRvIG91ciBidXNpbmVzcyBoZXJlLlxuICAgIGlmIChjaGFuZ2UuZG9jLm5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFske2NoYW5nZS5zZXF9XSBDaGFuZ2VkIGRvY3VtZW50IGNvbnRhaW5zIG5vICduYW1lJzogJHtjaGFuZ2UuaWR9YFxuICAgICAgKTtcbiAgICAgIG1ldHJpY3MucHV0TWV0cmljKE1ldHJpY05hbWUuVU5QUk9DRVNTQUJMRV9FTlRJVFksIDEsIFVuaXQuQ291bnQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gVGhlIG5vcm1hbGl6ZSBmdW5jdGlvbiBjaGFuZ2UgdGhlIG9iamVjdCBpbiBwbGFjZSwgaWYgdGhlIGRvYyBvYmplY3QgaXMgaW52YWxpZCBpdCB3aWxsIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAobm9ybWFsaXplTlBNTWV0YWRhdGEoY2hhbmdlLmRvYykgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFske2NoYW5nZS5zZXF9XSBDaGFuZ2VkIGRvY3VtZW50IGludmFsaWQsIG5wbSBub3JtYWxpemUgcmV0dXJuZWQgdW5kZWZpbmVkOiAke2NoYW5nZS5pZH1gXG4gICAgICApO1xuICAgICAgbWV0cmljcy5wdXRNZXRyaWMoTWV0cmljTmFtZS5VTlBST0NFU1NBQkxFX0VOVElUWSwgMSwgVW5pdC5Db3VudCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBTb21ldGltZXMsIHRoZXJlIGFyZSBubyB2ZXJzaW9ucyBpbiB0aGUgZG9jdW1lbnQuIFdlIHNraXAgdGhvc2UuXG4gICAgaWYgKGNoYW5nZS5kb2MudmVyc2lvbnMgPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFske2NoYW5nZS5zZXF9XSBDaGFuZ2VkIGRvY3VtZW50IGNvbnRhaW5zIG5vICd2ZXJzaW9ucyc6ICR7Y2hhbmdlLmlkfWBcbiAgICAgICk7XG4gICAgICBtZXRyaWNzLnB1dE1ldHJpYyhNZXRyaWNOYW1lLlVOUFJPQ0VTU0FCTEVfRU5USVRZLCAxLCBVbml0LkNvdW50KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIFNvbWV0aW1lcywgdGhlcmUgaXMgbm8gJ3RpbWUnIGVudHJ5IGluIHRoZSBkb2N1bWVudC4gV2Ugc2tpcCB0aG9zZS5cbiAgICBpZiAoY2hhbmdlLmRvYy50aW1lID09IG51bGwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBbJHtjaGFuZ2Uuc2VxfV0gQ2hhbmdlZCBkb2N1bWVudCBjb250YWlucyBubyAndGltZSc6ICR7Y2hhbmdlLmlkfWBcbiAgICAgICk7XG4gICAgICBtZXRyaWNzLnB1dE1ldHJpYyhNZXRyaWNOYW1lLlVOUFJPQ0VTU0FCTEVfRU5USVRZLCAxLCBVbml0LkNvdW50KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgbGFzdCBtb2RpZmljYXRpb24gZGF0ZSBmcm9tIHRoZSBjaGFuZ2VcbiAgICBjb25zdCBwYWNrYWdlVmVyc2lvblVwZGF0ZXMgPSBPYmplY3QuZW50cmllcyhjaGFuZ2UuZG9jLnRpbWUpXG4gICAgICAvLyBJZ25vcmUgdGhlIFwiY3JlYXRlZFwiIGFuZCBcIm1vZGlmaWVkXCIga2V5cyBoZXJlXG4gICAgICAuZmlsdGVyKChba2V5XSkgPT4ga2V5ICE9PSAnY3JlYXRlZCcgJiYga2V5ICE9PSAnbW9kaWZpZWQnKVxuICAgICAgLy8gUGFyc2UgYWxsIHRoZSBkYXRlcyB0byBlbnN1cmUgdGhleSBhcmUgY29tcGFyYWJsZVxuICAgICAgLm1hcCgoW3ZlcnNpb24sIGlzb0RhdGVdKSA9PiBbdmVyc2lvbiwgbmV3IERhdGUoaXNvRGF0ZSldIGFzIGNvbnN0KTtcbiAgICBtZXRyaWNzLnB1dE1ldHJpYyhcbiAgICAgIE1ldHJpY05hbWUuUEFDS0FHRV9WRVJTSU9OX0NPVU5ULFxuICAgICAgcGFja2FnZVZlcnNpb25VcGRhdGVzLmxlbmd0aCxcbiAgICAgIFVuaXQuQ291bnRcbiAgICApO1xuXG4gICAgY29uc3QgdW5wdWJsaXNoZWRWZXJzaW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFt2ZXJzaW9uLCBtb2RpZmllZF0gb2YgcGFja2FnZVZlcnNpb25VcGRhdGVzKSB7XG4gICAgICBjb25zdCBrbm93bktleSA9IGAke2NoYW5nZS5kb2MubmFtZX1AJHt2ZXJzaW9ufWA7XG4gICAgICBjb25zdCBrbm93biA9IGtub3duVmVyc2lvbnMuZ2V0KGtub3duS2V5KTtcbiAgICAgIGlmIChrbm93biA9PSBudWxsIHx8IGtub3duIDwgbW9kaWZpZWQpIHtcbiAgICAgICAgY29uc3QgaW5mb3MgPSBjaGFuZ2UuZG9jLnZlcnNpb25zW3ZlcnNpb25dO1xuICAgICAgICBpZiAoaW5mb3MgPT0gbnVsbCkge1xuICAgICAgICAgIC8vIENvdWxkIGJlIHRoZSB2ZXJzaW9uIGluIHF1ZXN0aW9uIHdhcyB1bi1wdWJsaXNoZWQuXG4gICAgICAgICAgdW5wdWJsaXNoZWRWZXJzaW9ucy5wdXNoKGtub3duS2V5KTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0NvbnN0cnVjdExpYnJhcnkoaW5mb3MpKSB7XG4gICAgICAgICAgLy8gc2tpcCBpZiB0aGlzIHBhY2thZ2UgaXMgZGVuaWVkXG4gICAgICAgICAgY29uc3QgZGVuaWVkID0gZGVueUxpc3QubG9va3VwKGluZm9zLm5hbWUsIGluZm9zLnZlcnNpb24pO1xuICAgICAgICAgIGlmIChkZW5pZWQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICBgWyR7Y2hhbmdlLnNlcX1dIFBhY2thZ2UgZGVuaWVkOiAke0pTT04uc3RyaW5naWZ5KGRlbmllZCl9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGtub3duVmVyc2lvbnMuc2V0KGtub3duS2V5LCBtb2RpZmllZCk7XG4gICAgICAgICAgICBtZXRyaWNzLnB1dE1ldHJpYyhNZXRyaWNOYW1lLkRFTllfTElTVEVEX0NPVU5ULCAxLCBVbml0LkNvdW50KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1ldHJpY3MucHV0TWV0cmljKFxuICAgICAgICAgICAgTWV0cmljTmFtZS5QQUNLQUdFX1ZFUlNJT05fQUdFLFxuICAgICAgICAgICAgRGF0ZS5ub3coKSAtIG1vZGlmaWVkLmdldFRpbWUoKSxcbiAgICAgICAgICAgIFVuaXQuTWlsbGlzZWNvbmRzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBpc0VsaWdpYmxlID1cbiAgICAgICAgICAgIGxpY2Vuc2VMaXN0Lmxvb2t1cChpbmZvcy5saWNlbnNlID8/ICdVTkxJQ0VOU0VEJykgIT0gbnVsbDtcbiAgICAgICAgICBtZXRyaWNzLnB1dE1ldHJpYyhcbiAgICAgICAgICAgIE1ldHJpY05hbWUuSU5FTElHSUJMRV9MSUNFTlNFLFxuICAgICAgICAgICAgaXNFbGlnaWJsZSA/IDAgOiAxLFxuICAgICAgICAgICAgVW5pdC5Db3VudFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGlzRWxpZ2libGUpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHsgaW5mb3MsIG1vZGlmaWVkLCBzZXE6IGNoYW5nZS5zZXEgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICBgWyR7Y2hhbmdlLnNlcX1dIFBhY2thZ2UgXCIke1xuICAgICAgICAgICAgICAgIGNoYW5nZS5kb2MubmFtZVxuICAgICAgICAgICAgICB9QCR7dmVyc2lvbn1cIiBkb2VzIG5vdCB1c2UgYWxsb3ctbGlzdGVkIGxpY2Vuc2U6ICR7XG4gICAgICAgICAgICAgICAgaW5mb3MubGljZW5zZSA/PyAnVU5MSUNFTlNFRCdcbiAgICAgICAgICAgICAgfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBrbm93blZlcnNpb25zLnNldChrbm93bktleSwgbW9kaWZpZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBFbHNlIHRoaXMgaXMgbm90IGEgY29uc3RydWN0IGxpYnJhcnksIHNvIHdlJ2xsIGp1c3QgaWdub3JlIGl0Li4uXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVucHVibGlzaGVkVmVyc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBbJHtcbiAgICAgICAgICBjaGFuZ2Uuc2VxXG4gICAgICAgIH1dIENvdWxkIG5vdCBmaW5kIGluZm8gZm9yIHRoZSBmb2xsb3dpbmcgdmVyc2lvbnMuIFdlcmUgdGhleSB1bi1wdWJsaXNoZWQ/XFxuJHt1bnB1Ymxpc2hlZFZlcnNpb25zLmpvaW4oXG4gICAgICAgICAgJyxcXG4nXG4gICAgICAgICl9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcblxuICAvKipcbiAgICogVGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgYSBwYWNrYWdlIGlzIFwiaW50ZXJlc3RpbmdcIiB0byBDb25zdHJ1Y3RIdWIgb3Igbm90LiBUaGlzIGlzIHJlbGF0ZWQgYnV0XG4gICAqIG5vdCBuZWNlc3NhcmlseSBpZGVudGljYWwgdG8gdGhlIGxvZ2ljIGluIHRoZSBpbmdlc3Rpb24gcHJvY2VzcyB0aGF0IGFubm90YXRlcyBwYWNrYWdlIG1ldGFkYXRhXG4gICAqIHdpdGggYSBjb25zdHJ1Y3QgZnJhbWV3b3JrIG5hbWUgKyB2ZXJzaW9uICh0aG9zZSBjb3VsZCB1bHRpbWF0ZWx5IGJlIHJlLWZhY3RvcmVkIHRvIHNoYXJlIG1vcmVcbiAgICogb2YgdGhlIGxvZ2ljL2hldXJpc3RpY3MsIHRob3VnaCkuXG4gICAqXG4gICAqIENvbmNyZXRlbHksIGl0IGNoZWNrcyBmb3IgYSBsaXN0IG9mIGtub3duIFwib2ZmaWNpYWxcIiBwYWNrYWdlcyBmb3IgdmFyaW91cyBjb25zdHJ1Y3QgZnJhbWV3b3JrcyxcbiAgICogYW5kIHBhY2thZ2VzIHRoYXQgaGF2ZSBhIGRlcGVuZGVuY3kgb24gc3VjaCBhIHBhY2thZ2UuIEl0IGFsc28gaGFzIGEga2V5d29yZHMgYWxsb3ctbGlzdCBhcyBhXG4gICAqIGZhbGwtYmFjayAodGhlIGN1cnJlbnQgZGVwZW5kZW5jeS1iYXNlZCBsb2dpYyBkb2VzIG5vdCBjb25zaWRlciB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBhbmRcbiAgICogbWlnaHQgaGVuY2UgbWlzcyBjZXJ0YWluIHJhcmUgdXNlLWNhc2VzLCB3aGljaCBrZXl3b3JkcyB3b3VsZCByZXNjdWUpLlxuICAgKi9cbiAgZnVuY3Rpb24gaXNDb25zdHJ1Y3RMaWJyYXJ5KGluZm9zOiBWZXJzaW9uSW5mbyk6IGJvb2xlYW4ge1xuICAgIGlmIChpbmZvcy5qc2lpID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gVGhlIFwiY29uc3RydWN0c1wiIHBhY2thZ2UgaXMgYSBzaWduIG9mIGEgY29uc3RydWN0cyBsaWJyYXJ5XG4gICAgcmV0dXJuIChcbiAgICAgIGlzQ29uc3RydWN0RnJhbWV3b3JrUGFja2FnZShpbmZvcy5uYW1lKSB8fFxuICAgICAgLy8gUmVjdXJzaXZlbHkgYXBwbHkgb24gZGVwZW5kZW5jaWVzXG4gICAgICBPYmplY3Qua2V5cyhpbmZvcy5kZXBlbmRlbmNpZXMgPz8ge30pLnNvbWUoaXNDb25zdHJ1Y3RGcmFtZXdvcmtQYWNrYWdlKSB8fFxuICAgICAgT2JqZWN0LmtleXMoaW5mb3MuZGV2RGVwZW5kZW5jaWVzID8/IHt9KS5zb21lKFxuICAgICAgICBpc0NvbnN0cnVjdEZyYW1ld29ya1BhY2thZ2VcbiAgICAgICkgfHxcbiAgICAgIE9iamVjdC5rZXlzKGluZm9zLnBlZXJEZXBlbmRlbmNpZXMgPz8ge30pLnNvbWUoXG4gICAgICAgIGlzQ29uc3RydWN0RnJhbWV3b3JrUGFja2FnZVxuICAgICAgKSB8fFxuICAgICAgLy8gS2V5d29yZC1iYXNlZCBmYWxsYmFja1xuICAgICAgaW5mb3Mua2V5d29yZHM/LnNvbWUoKGt3KSA9PiBDT05TVFJVQ1RfS0VZV09SRFMuaGFzKGt3KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhY2thZ2UgaXMgb25lIG9mIHRoZSBrbm93biBjb25zdHJ1Y3QgZnJhbWV3b3JrJ3MgZmlyc3QgcGFydHkgcGFja2FnZXM6XG4gICAqIC0gQGF3cy1jZGsvKlxuICAgKiAtIEBjZGt0Zi8qXG4gICAqIC0gY2RrOHMgb3IgY2RrOHMtcGx1c1xuICAgKi9cbiAgZnVuY3Rpb24gaXNDb25zdHJ1Y3RGcmFtZXdvcmtQYWNrYWdlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIElNUE9SVEFOVCBOT1RFOiBQcmVmaXggbWF0Y2hpbmcgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgQHNjb3BlLyBuYW1lcy5cblxuICAgIC8vIFRoZSBsb3ctbGV2ZWwgY29uc3RydWN0cyBwYWNrYWdlXG4gICAgcmV0dXJuIChcbiAgICAgIG5hbWUgPT09ICdjb25zdHJ1Y3RzJyB8fFxuICAgICAgLy8gQVdTIENESyBQYWNrYWdlc1xuICAgICAgbmFtZSA9PT0gJ2F3cy1jZGstbGliJyB8fFxuICAgICAgbmFtZSA9PT0gJ21vbm9jZGsnIHx8XG4gICAgICBuYW1lLnN0YXJ0c1dpdGgoJ0Bhd3MtY2RrLycpIHx8XG4gICAgICAvLyBDREs4cyBwYWNrYWdlc1xuICAgICAgbmFtZSA9PT0gJ2NkazhzJyB8fFxuICAgICAgL15jZGs4cy1wbHVzKD86LSg/OjE3fDIwfDIxfDIyKSk/JC8udGVzdChuYW1lKSB8fFxuICAgICAgLy8gQ0RLVGYgcGFja2FnZXNcbiAgICAgIG5hbWUgPT09ICdjZGt0ZicgfHxcbiAgICAgIG5hbWUuc3RhcnRzV2l0aCgnQGNka3RmLycpXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvYmpGcm9tRGF0ZU1hcCh4czogTWFwPHN0cmluZywgRGF0ZT4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBBcnJheS5mcm9tKHhzKS5tYXAoKFtrLCB2XSkgPT4gW2ssIHYudG9JU09TdHJpbmcoKV0pXG4gICk7XG59XG5cbmZ1bmN0aW9uIGRhdGVNYXBGcm9tT2JqKFxuICB4czogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxuKTogTWFwPHN0cmluZywgRGF0ZT4ge1xuICByZXR1cm4gbmV3IE1hcChPYmplY3QuZW50cmllcyh4cykubWFwKChbaywgdl0pID0+IFtrLCBuZXcgRGF0ZSh2KV0pKTtcbn1cblxuLyoqXG4gKiBUaGUgc2NoZW1lIG9mIGEgcGFja2FnZSB2ZXJzaW9uIGluIHRoZSB1cGRhdGUuIEluY2x1ZGVzIHRoZSBwYWNrYWdlLmpzb24ga2V5cywgYXMgd2VsbCBhcyBzb21lIGFkZGl0aW9uYWwgbnBtIG1ldGFkYXRhXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ucG0vcmVnaXN0cnkvYmxvYi9tYXN0ZXIvZG9jcy9SRUdJU1RSWS1BUEkubWQjdmVyc2lvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25JbmZvIHtcbiAgcmVhZG9ubHkgZGVwZW5kZW5jaWVzPzogeyByZWFkb25seSBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHJlYWRvbmx5IGRldkRlcGVuZGVuY2llcz86IHsgcmVhZG9ubHkgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICByZWFkb25seSBwZWVyRGVwZW5kZW5jaWVzPzogeyByZWFkb25seSBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHJlYWRvbmx5IGpzaWk6IHVua25vd247XG4gIHJlYWRvbmx5IGxpY2Vuc2U/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgcmVhZG9ubHkga2V5d29yZHM6IHN0cmluZ1tdO1xuICByZWFkb25seSBkaXN0OiB7XG4gICAgcmVhZG9ubHkgc2hhc3VtOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgdGFyYmFsbDogc3RyaW5nO1xuICB9O1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBVcGRhdGVkVmVyc2lvbiB7XG4gIC8qKlxuICAgKiBUaGUgYFZlcnNpb25JbmZvYCBmb3IgdGhlIG1vZGlmaWVkIHBhY2thZ2UgdmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IGluZm9zOiBWZXJzaW9uSW5mbztcblxuICAvKipcbiAgICogVGhlIHRpbWUgYXQgd2hpY2ggdGhlIGBWZXJzaW9uSW5mb2Agd2FzIGxhc3QgbW9kaWZpZWQuXG4gICAqL1xuICByZWFkb25seSBtb2RpZmllZDogRGF0ZTtcblxuICAvKipcbiAgICogVGhlIENvdWNoREIgdHJhbnNhY3Rpb24gbnVtYmVyIGZvciB0aGUgdXBkYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VxPzogc3RyaW5nIHwgbnVtYmVyO1xufVxuXG4vKipcbiAqIFdlIGFyZSBhY2NvdW50aW5nIGZvciBhIGdvb2QgYml0IG9mIGxlZ2FjeSBkYXRhIG1vZGVsaW5nIGhlcmVcbiAqXG4gKiBUaGUgZmlsZSBjYW4gYmUgYSBqdXN0IGEgbnVtYmVyLCBvciBhIGNvbWJpbmF0aW9uIG9mIGEgc2VxdWVuY2UgbnVtYmVyICh3aGljaFxuICogaXMgcG90ZW50aWFsbHkgZW5jb2RlZCBhcyBhIHN0cmluZykgYW5kIGEgc2V0IG9mIGtub3duIHZlcnNpb25zIGFuZCB0aGUgZGF0ZXNcbiAqIHdlIGZpcnN0IHNhdyB0aGVtLiBUaGUgZGF0ZSBjYW4gYmUgZW5jb2RlZCBhcyBhbiBJU08gc3RyaW5nLCBvciBhIHRpbWVzdGFtcFxuICogbnVtYmVyLlxuICovXG50eXBlIE1hcmtlckZpbGVTY2hlbWEgPVxuICB8IG51bWJlclxuICB8IHtcbiAgICAgIG1hcmtlcjogbnVtYmVyIHwgc3RyaW5nO1xuICAgICAga25vd25WZXJzaW9ucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj47XG4gICAgfTtcblxuaW50ZXJmYWNlIEtub3duVmVyc2lvbnNGaWxlU2NoZW1hIHtcbiAga25vd25WZXJzaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuaW50ZXJmYWNlIERvY3VtZW50IHtcbiAgLyoqXG4gICAqIGEgTGlzdCBvZiBhbGwgVmVyc2lvbiBvYmplY3RzIGZvciB0aGUgcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbnM6IHsgW2tleTogc3RyaW5nXTogVmVyc2lvbkluZm8gfCB1bmRlZmluZWQgfTtcblxuICAvKipcbiAgICogVGhlIHBhY2thZ2UncyBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXBzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRvY3VtZW50LiBUaGUgdmFsdWVzIGFyZSBJU08tODYwMSBlbmNvZGVkXG4gICAqIHRpbWVzdGFtcHMuXG4gICAqL1xuICByZWFkb25seSB0aW1lOiB7XG4gICAgcmVhZG9ubHkgY3JlYXRlZDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IG1vZGlmaWVkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgW3ZlcnNpb246IHN0cmluZ106IHN0cmluZztcbiAgfTtcblxuICByZWFkb25seSBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5pbnRlcmZhY2UgQ2hhbmdlIGV4dGVuZHMgRGF0YWJhc2VDaGFuZ2Uge1xuICByZWFkb25seSBkb2M6IERvY3VtZW50O1xufVxuIl19
@@ -549,7 +549,7 @@ class NpmJs {
549
549
  }
550
550
  exports.NpmJs = NpmJs;
551
551
  _a = JSII_RTTI_SYMBOL_1;
552
- NpmJs[_a] = { fqn: "construct-hub.sources.NpmJs", version: "0.4.412" };
552
+ NpmJs[_a] = { fqn: "construct-hub.sources.NpmJs", version: "0.4.413" };
553
553
  /**
554
554
  * How often 'rate' goes into 'duration' (rounded up)
555
555
  */
@@ -50,7 +50,7 @@ class TagCondition {
50
50
  }
51
51
  exports.TagCondition = TagCondition;
52
52
  _a = JSII_RTTI_SYMBOL_1;
53
- TagCondition[_a] = { fqn: "construct-hub.TagCondition", version: "0.4.412" };
53
+ TagCondition[_a] = { fqn: "construct-hub.TagCondition", version: "0.4.413" };
54
54
  /**
55
55
  * Logic operators for performing specific conditional logic.
56
56
  */
@@ -130,7 +130,7 @@ class TagConditionField {
130
130
  }
131
131
  exports.TagConditionField = TagConditionField;
132
132
  _b = JSII_RTTI_SYMBOL_1;
133
- TagConditionField[_b] = { fqn: "construct-hub.TagConditionField", version: "0.4.412" };
133
+ TagConditionField[_b] = { fqn: "construct-hub.TagConditionField", version: "0.4.413" };
134
134
  /**
135
135
  * Target the README of the package to dictate whether a tag is relevant.
136
136
  */
@@ -147,5 +147,5 @@ class TagConditionReadme {
147
147
  }
148
148
  exports.TagConditionReadme = TagConditionReadme;
149
149
  _c = JSII_RTTI_SYMBOL_1;
150
- TagConditionReadme[_c] = { fqn: "construct-hub.TagConditionReadme", version: "0.4.412" };
150
+ TagConditionReadme[_c] = { fqn: "construct-hub.TagConditionReadme", version: "0.4.413" };
151
151
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFja2FnZS10YWcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUE4RUEsSUFBWSxrQkFHWDtBQUhELFdBQVksa0JBQWtCO0lBQzVCLG1EQUE2QixDQUFBO0lBQzdCLHVDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFIVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQUc3QjtBQXNCRDs7R0FFRztBQUNILE1BQXNCLFlBQVk7SUFDaEM7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQXFCO1FBQ2pDLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFxQjtRQUNoQyxPQUFPLElBQUksaUJBQWlCLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFxQjtRQUNqQyxPQUFPLElBQUksaUJBQWlCLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFjO1FBQzVCLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsTUFBTTtRQUNYLE9BQU8sSUFBSSxrQkFBa0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7O0FBdkNILG9DQTBDQzs7O0FBRUQ7O0dBRUc7QUFDSCxJQUFZLHFCQU9YO0FBUEQsV0FBWSxxQkFBcUI7SUFDL0Isb0NBQVcsQ0FBQTtJQUNYLGtDQUFTLENB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b20gJy4uL3BhY2thZ2UtdGFnLWdyb3VwJztcblxuaW50ZXJmYWNlIFBhY2thZ2VUYWdQcmVzZW50YXRpb25CYXNlIHtcbiAgLyoqXG4gICAqIFRoZSBsYWJlbCBmb3IgdGhlIHRhZyBiZWluZyBhcHBsaWVkXG4gICAqL1xuICByZWFkb25seSBsYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaGV4IHZhbHVlIHN0cmluZyBmb3IgdGhlIGNvbG9yIG9mIHRoZSB0YWcgd2hlbiBkaXNwbGF5ZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbG9yPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtleXdvcmQgZXh0ZW5kcyBQYWNrYWdlVGFnUHJlc2VudGF0aW9uQmFzZSB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIEhpZ2hsaWdodCBleHRlbmRzIFBhY2thZ2VUYWdQcmVzZW50YXRpb25CYXNlIHtcbiAgLyoqXG4gICAqIEljb24gZGlzcGxheWVkIG5leHQgdG8gaGlnaGxpZ2h0IG9uIHBhY2thZ2UgY2FyZFxuICAgKi9cbiAgcmVhZG9ubHkgaWNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hGaWx0ZXIge1xuICAvKipcbiAgICogRGlzcGxheSBuYW1lIGZvciBmaWx0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXk6IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiBncm91cCB0byBpbmNsdWRlIGZpbHRlciBpblxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGdyb3VwYCBpbnN0ZWFkXG4gICAqL1xuICByZWFkb25seSBncm91cEJ5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYWNrYWdlVGFnR3JvdXAgdG8gaW5jbHVkZSBmaWx0ZXIgaW5cbiAgICovXG4gIHJlYWRvbmx5IGdyb3VwPzogUGFja2FnZVRhZ0dyb3VwO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2VUYWdCYXNlIHtcbiAgLyoqXG4gICAqIElkZW50aWZpZXIgZm9yIHRhZywgdXNlZCBmb3Igc2VhcmNoLiBNdXN0IGJlIHVuaXF1ZSBhbW9uZ3N0IHRhZ3MuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciBoaWdsaWdodGluZyB0YWcgb24gcGFja2FnZSBjYXJkXG4gICAqIEBkZWZhdWx0IGRvbid0IGhpZ2hsaWdodCB0YWdcbiAgICovXG4gIHJlYWRvbmx5IGhpZ2hsaWdodD86IEhpZ2hsaWdodDtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3Igc2hvd2luZyB0YWcgYXMga2V5d29yZFxuICAgKiBAZGVmYXVsdCBkb24ndCBzaG93IHRhZyBpbiBrZXl3b3JkIGxpc3RcbiAgICovXG4gIHJlYWRvbmx5IGtleXdvcmQ/OiBLZXl3b3JkO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciBzaG93aW5nIHRhZyBhcyBzZWFyY2ggZmlsdGVyXG4gICAqIEBkZWZhdWx0IGRvbid0IHNob3cgdGFnIGluIHNlYXJjaCBmaWx0ZXJzXG4gICAqL1xuICByZWFkb25seSBzZWFyY2hGaWx0ZXI/OiBTZWFyY2hGaWx0ZXI7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgYXBwbHlpbmcgY3VzdG9tIHRhZ3MgdG8gcmVsZXZhbnQgcGFja2FnZXMuIEN1c3RvbSB0YWdzIGFyZVxuICogZGlzcGxheWVkIG9uIHRoZSBwYWNrYWdlIGRldGFpbHMgcGFnZSwgYW5kIGNhbiBiZSB1c2VkIGZvciBzZWFyY2hpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFja2FnZVRhZyBleHRlbmRzIFBhY2thZ2VUYWdCYXNlIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgbG9naWMgdGhhdCBkaWN0YXRlcyB3aGV0aGVyIHRoZVxuICAgKiBwYWNrYWdlIGhhcyB0aGUgdGFnIGFwcGxpZWQuXG4gICAqL1xuICByZWFkb25seSBjb25kaXRpb246IFRhZ0NvbmRpdGlvbjtcbn1cblxuZXhwb3J0IGVudW0gVGFnQ29uZGl0aW9uU291cmNlIHtcbiAgUEFDS0FHRV9KU09OID0gJ1BBQ0tBR0VfSlNPTicsXG4gIFJFQURNRSA9ICdSRUFETUUnLFxufVxuXG4vKipcbiAqIFNlcmlhbGl6ZWQgY29uZmlnIGZvciBhIHRhZyBjb25kaXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWdDb25kaXRpb25Db25maWcge1xuICByZWFkb25seSB0eXBlOiBUYWdDb25kaXRpb25Mb2dpY1R5cGU7XG4gIHJlYWRvbmx5IHNvdXJjZT86IFRhZ0NvbmRpdGlvblNvdXJjZTtcbiAgcmVhZG9ubHkga2V5Pzogc3RyaW5nW107XG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuICByZWFkb25seSBvcHRpb25zPzogeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgcmVhZG9ubHkgY2hpbGRyZW4/OiBUYWdDb25kaXRpb25Db25maWdbXTtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVkIHRhZyBkZWNsYXJhdGlvbiB0byBiZSBwYXNzZWQgdG8gbGFtYmRhcyB2aWEgZW52aXJvbm1lbnRcbiAqIHZhcmlhYmxlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWNrYWdlVGFnQ29uZmlnIGV4dGVuZHMgUGFja2FnZVRhZ0Jhc2Uge1xuICByZWFkb25seSBjb25kaXRpb246IFRhZ0NvbmRpdGlvbkNvbmZpZztcbn1cblxuLyoqXG4gKiBDb25kaXRpb24gZm9yIGFwcGx5aW5nIGEgY3VzdG9tIHRhZyB0byBhIHBhY2thZ2UuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUYWdDb25kaXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlIGFuICYmIGNvbmRpdGlvbiB3aGljaCBhcHBsaWVzIG9ubHkgd2hlbiBhbGwgY29uZGl0aW9uIGFyZ3VtZW50cyBhcmVcbiAgICogdHJ1ZS5cbiAgICovXG4gIHN0YXRpYyBhbmQoLi4uY29uZHM6IFRhZ0NvbmRpdGlvbltdKTogVGFnQ29uZGl0aW9uIHtcbiAgICByZXR1cm4gbmV3IFRhZ0NvbmRpdGlvbkxvZ2ljKFRhZ0NvbmRpdGlvbkxvZ2ljVHlwZS5BTkQsIGNvbmRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gfHwgY29uZGl0aW9uIHdoaWNoIGFwcGxpZXMgaWYgYW55IG9mIHRoZSBjb25kaXRpb24gYXJndW1lbnRzIGFyZVxuICAgKiB0cnVlLlxuICAgKi9cbiAgc3RhdGljIG9yKC4uLmNvbmRzOiBUYWdDb25kaXRpb25bXSk6IFRhZ0NvbmRpdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBUYWdDb25kaXRpb25Mb2dpYyhUYWdDb25kaXRpb25Mb2dpY1R5cGUuT1IsIGNvbmRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSAhIGNvbmRpdGlvbiB3aGljaCBhcHBsaWVzIGlmIHRoZSBjb25kaXRpb24gYXJndW1lbnQgaXMgZmFsc2VcbiAgICovXG4gIHN0YXRpYyBub3QoLi4uY29uZHM6IFRhZ0NvbmRpdGlvbltdKTogVGFnQ29uZGl0aW9uIHtcbiAgICByZXR1cm4gbmV3IFRhZ0NvbmRpdGlvbkxvZ2ljKFRhZ0NvbmRpdGlvbkxvZ2ljVHlwZS5OT1QsIGNvbmRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYXJnZXQgYSBmaWVsZCB3aXRoaW4gdGhlIGBwYWNrYWdlLmpzb25gIHRvIGFzc2VydCBhZ2FpbnN0LiBOZXN0ZWQgZmllbGRzXG4gICAqIGNhbiBiZSBhY2Nlc3NlZCBieSBwYXNzaW5nIG11bHRpcGxlIGtleXMuXG4gICAqIGBUYWdDb25kaXRpb24uZmllbGQoJ2tleTEnLCAna2V5MicpYCB3aWxsIGFjY2Vzc1xuICAgKiBgcGFja2FnZUpzb24/LmtleTE/LmtleTJgLlxuICAgKi9cbiAgc3RhdGljIGZpZWxkKC4uLmtleXM6IHN0cmluZ1tdKTogVGFnQ29uZGl0aW9uRmllbGQge1xuICAgIHJldHVybiBuZXcgVGFnQ29uZGl0aW9uRmllbGQoa2V5cyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY29uZGl0aW9uIHdpdGggbG9naWMgdGFyZ2V0aW5nIHRoZSBSRUFETUUgb2YgdGhlIHBhY2thZ2UuXG4gICAqL1xuICBzdGF0aWMgcmVhZG1lKCk6IFRhZ0NvbmRpdGlvblJlYWRtZSB7XG4gICAgcmV0dXJuIG5ldyBUYWdDb25kaXRpb25SZWFkbWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCBiaW5kKCk6IFRhZ0NvbmRpdGlvbkNvbmZpZztcbn1cblxuLyoqXG4gKiBMb2dpYyBvcGVyYXRvcnMgZm9yIHBlcmZvcm1pbmcgc3BlY2lmaWMgY29uZGl0aW9uYWwgbG9naWMuXG4gKi9cbmV4cG9ydCBlbnVtIFRhZ0NvbmRpdGlvbkxvZ2ljVHlwZSB7XG4gIEFORCA9ICdBTkQnLFxuICBPUiA9ICdPUicsXG4gIE5PVCA9ICdOT1QnLFxuICBFUVVBTFMgPSAnRVFVQUxTJyxcbiAgSU5DTFVERVMgPSAnSU5DTFVERVMnLFxuICBTVEFSVFNfV0lUSCA9ICdTVEFSVFNfV0lUSCcsXG59XG5cbmNsYXNzIFRhZ0NvbmRpdGlvbkxvZ2ljIGV4dGVuZHMgVGFnQ29uZGl0aW9uIHtcbiAgcHVibGljIHJlYWRvbmx5IGlzTG9naWMgPSB0cnVlO1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0eXBlOiBUYWdDb25kaXRpb25Mb2dpY1R5cGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGlsZHJlbjogVGFnQ29uZGl0aW9uW11cbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBiaW5kKCk6IFRhZ0NvbmRpdGlvbkNvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLm1hcCgoY29uZCkgPT4gY29uZC5iaW5kKCkpLFxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgVGFnQ29uZGl0aW9uUHJlZGljYXRlIGV4dGVuZHMgVGFnQ29uZGl0aW9uIHtcbiAgcHVibGljIHJlYWRvbmx5IGlzUHJlZGljYXRlID0gdHJ1ZTtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHlwZTogVGFnQ29uZGl0aW9uTG9naWNUeXBlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc291cmNlPzogVGFnQ29uZGl0aW9uU291cmNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkga2V5Pzogc3RyaW5nW10sXG4gICAgcHJpdmF0ZSByZWFkb25seSB2YWx1ZT86IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM/OiBUYWdDb25kaXRpb25JbmNsdWRlc09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBiaW5kKCk6IFRhZ0NvbmRpdGlvbkNvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICBrZXk6IHRoaXMua2V5LFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFRhcmdldCBhIGZpZWxkIHRvIHVzZSBpbiBsb2dpYyB0byBkaWN0YXRlIHdoZXRoZXIgYSB0YWcgaXMgcmVsZXZhbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBUYWdDb25kaXRpb25GaWVsZCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZpZWxkOiBzdHJpbmdbXSkge31cblxuICAvKipcbiAgICogQ3JlYXRlIGEgPT09IGNvbmRpdGlvbiB3aGljaCBhcHBsaWVzIGlmIHRoZSBzcGVjaWZpZWQgZmllbGQgd2l0aGluIHRoZVxuICAgKiBwYWNrYWdlJ3MgcGFja2FnZS5qc29uIGlzIGVxdWFsIHRvIHRoZSBwYXNzZWQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgZXEodmFsdWU6IGFueSk6IFRhZ0NvbmRpdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBUYWdDb25kaXRpb25QcmVkaWNhdGUoXG4gICAgICBUYWdDb25kaXRpb25Mb2dpY1R5cGUuRVFVQUxTLFxuICAgICAgVGFnQ29uZGl0aW9uU291cmNlLlBBQ0tBR0VfSlNPTixcbiAgICAgIHRoaXMuZmllbGQsXG4gICAgICB2YWx1ZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYGZpZWxkLmluY2x1ZGVzKHZhbHVlKWAgY29uZGl0aW9uIHdoaWNoIGFwcGxpZXMgaWYgdGhlIHNwZWNpZmllZFxuICAgKiBmaWVsZCB3aXRoaW4gdGhlIHBhY2thZ2UncyBwYWNrYWdlLmpzb24gaW5jbHVkZXMgdGhlIHZhbHVlLiBUaGlzIHdvcmtzIGZvclxuICAgKiBhcnJheXMgb3Igc3RyaW5ncy5cbiAgICovXG4gIHB1YmxpYyBpbmNsdWRlcyhcbiAgICB2YWx1ZTogYW55LFxuICAgIG9wdGlvbnM6IFRhZ0NvbmRpdGlvbkluY2x1ZGVzT3B0aW9ucyA9IHt9XG4gICk6IFRhZ0NvbmRpdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBUYWdDb25kaXRpb25QcmVkaWNhdGUoXG4gICAgICBUYWdDb25kaXRpb25Mb2dpY1R5cGUuSU5DTFVERVMsXG4gICAgICBUYWdDb25kaXRpb25Tb3VyY2UuUEFDS0FHRV9KU09OLFxuICAgICAgdGhpcy5maWVsZCxcbiAgICAgIHZhbHVlLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYGZpZWxkLnN0YXJ0c1dpdGgodmFsdWUpYCBjb25kaXRpb24gd2hpY2ggYXBwbGllcyBpZiB0aGUgc3BlY2lmaWVkXG4gICAqIGZpZWxkIHdpdGhpbiB0aGUgcGFja2FnZSdzIHBhY2thZ2UuanNvbiBiZWdpbnMgd2l0aCB0aGUgdmFsdWUuIFRoaXMgd29ya3NcbiAgICogb25seSBmb3Igc3RyaW5nIHZhbHVlcy5cbiAgICovXG4gIHB1YmxpYyBzdGFydHNXaXRoKHZhbHVlOiBzdHJpbmcpOiBUYWdDb25kaXRpb24ge1xuICAgIHJldHVybiBuZXcgVGFnQ29uZGl0aW9uUHJlZGljYXRlKFxuICAgICAgVGFnQ29uZGl0aW9uTG9naWNUeXBlLlNUQVJUU19XSVRILFxuICAgICAgVGFnQ29uZGl0aW9uU291cmNlLlBBQ0tBR0VfSlNPTixcbiAgICAgIHRoaXMuZmllbGQsXG4gICAgICB2YWx1ZVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBUYXJnZXQgdGhlIFJFQURNRSBvZiB0aGUgcGFja2FnZSB0byBkaWN0YXRlIHdoZXRoZXIgYSB0YWcgaXMgcmVsZXZhbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBUYWdDb25kaXRpb25SZWFkbWUge1xuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBgcmVhZG1lLmluY2x1ZGVzKHZhbHVlKWAgY29uZGl0aW9uIHdoaWNoIGFwcGxpZXMgaWYgdGhlIFJFQURNRVxuICAgKiBpbmNsdWRlcyB0aGUgc3BlY2lmaWVkIHN0cmluZy5cbiAgICovXG4gIHB1YmxpYyBpbmNsdWRlcyhcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IFRhZ0NvbmRpdGlvbkluY2x1ZGVzT3B0aW9ucyA9IHt9XG4gICk6IFRhZ0NvbmRpdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBUYWdDb25kaXRpb25QcmVkaWNhdGUoXG4gICAgICBUYWdDb25kaXRpb25Mb2dpY1R5cGUuSU5DTFVERVMsXG4gICAgICBUYWdDb25kaXRpb25Tb3VyY2UuUkVBRE1FLFxuICAgICAgdW5kZWZpbmVkLCAvLyBubyBrZXlcbiAgICAgIHZhbHVlLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgaW5jbHVkZXNgIG9wZXJhdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZ0NvbmRpdGlvbkluY2x1ZGVzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgbXVzdCBhcHBlYXIgYXQgbGVhc3QgdGhpcyBtYW55IHRpbWVzLlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSBhdExlYXN0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTdHJpbmcgbWF0Y2hlcyBtdXN0IG1hdGNoIHRoZSBjYXNpbmcgb2YgdGhlIG9yaWdpbmFsIHN0cmluZy4gVGhpcyBvcHRpb25cbiAgICogaXMgaWdub3JlZCBpZiB0aGUgdmFsdWUgd2UgYXJlIGNoZWNraW5nIGlzIGFuIGFycmF5LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG59XG4iXX0=
@@ -13,7 +13,7 @@ class FilterType {
13
13
  }
14
14
  exports.FilterType = FilterType;
15
15
  _a = JSII_RTTI_SYMBOL_1;
16
- FilterType[_a] = { fqn: "construct-hub.FilterType", version: "0.4.412" };
16
+ FilterType[_a] = { fqn: "construct-hub.FilterType", version: "0.4.413" };
17
17
  class FilterTypeRadio extends FilterType {
18
18
  bind() {
19
19
  return { type: 'radio' };
@@ -45,5 +45,5 @@ class PackageTagGroup {
45
45
  }
46
46
  exports.PackageTagGroup = PackageTagGroup;
47
47
  _b = JSII_RTTI_SYMBOL_1;
48
- PackageTagGroup[_b] = { fqn: "construct-hub.PackageTagGroup", version: "0.4.412" };
48
+ PackageTagGroup[_b] = { fqn: "construct-hub.PackageTagGroup", version: "0.4.413" };
49
49
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFja2FnZS10YWctZ3JvdXAvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFJQSxNQUFzQixVQUFVO0lBQzlCLE1BQU0sQ0FBQyxRQUFRO1FBQ2IsT0FBTyxJQUFJLGtCQUFrQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLO1FBQ1YsT0FBTyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQy9CLENBQUM7O0FBUEgsZ0NBVUM7OztBQUVELE1BQU0sZUFBZ0IsU0FBUSxVQUFVO0lBQy9CLElBQUk7UUFDVCxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDRjtBQUVELE1BQU0sa0JBQW1CLFNBQVEsVUFBVTtJQUNsQyxJQUFJO1FBQ1QsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUF3QkQ7O0dBRUc7QUFDSCxNQUFhLGVBQWU7SUFLMUIsWUFBNEIsRUFBVSxFQUFFLEtBQTRCO1FBQXhDLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDcEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxFQUFFLE9BQU8sQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxFQUFFLFVBQVUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDN0UsQ0FBQztJQUVNLElBQUk7UUFDVCxPQUFPO1lBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDNUIsQ0FBQztJQUNKLENBQUM7O0FBbEJILDBDQW1CQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyVHlwZVZhbHVlIHtcbiAgcmVhZG9ubHkgdHlwZTogJ2NoZWNrYm94JyB8ICdyYWRpbyc7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGaWx0ZXJUeXBlIHtcbiAgc3RhdGljIGNoZWNrYm94KCk6IEZpbHRlclR5cGUge1xuICAgIHJldHVybiBuZXcgRmlsdGVyVHlwZUNoZWNrYm94KCk7XG4gIH1cblxuICBzdGF0aWMgcmFkaW8oKTogRmlsdGVyVHlwZSB7XG4gICAgcmV0dXJuIG5ldyBGaWx0ZXJUeXBlUmFkaW8oKTtcbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCBiaW5kKCk6IEZpbHRlclR5cGVWYWx1ZTtcbn1cblxuY2xhc3MgRmlsdGVyVHlwZVJhZGlvIGV4dGVuZHMgRmlsdGVyVHlwZSB7XG4gIHB1YmxpYyBiaW5kKCk6IEZpbHRlclR5cGVWYWx1ZSB7XG4gICAgcmV0dXJuIHsgdHlwZTogJ3JhZGlvJyB9O1xuICB9XG59XG5cbmNsYXNzIEZpbHRlclR5cGVDaGVja2JveCBleHRlbmRzIEZpbHRlclR5cGUge1xuICBwdWJsaWMgYmluZCgpOiBGaWx0ZXJUeXBlVmFsdWUge1xuICAgIHJldHVybiB7IHR5cGU6ICdjaGVja2JveCcgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2VUYWdHcm91cFByb3BzIHtcbiAgLyoqXG4gICAqIEdyb3VwIGxhYmVsIHRvIGRpc3BsYXkuIEZhbGxzIGJhY2sgdG8gaWQgaWYgbm90IHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBsYWJlbD86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIG1lc3NhZ2UgdG8gc2hvdyB3aXRoaW4gYSB0b29sdGlwIG5leHQgdG8gdGhlIGZpbHRlciBsYWJlbFxuICAgKi9cbiAgcmVhZG9ubHkgdG9vbHRpcD86IHN0cmluZztcbiAgLyoqXG4gICAqIEFsbG93cyB0byBzcGVjaWZ5IHRoZSBncm91cCBmaWx0ZXIgdHlwZS4gRGVmYXVsdHMgdG8gY2hlY2tib3ggaWYgbm90IHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyVHlwZT86IEZpbHRlclR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFja2FnZVRhZ0dyb3VwQ29uZmlnIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbGFiZWw/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRvb2x0aXA/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZpbHRlclR5cGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVmaW5lcyBhIGN1c3RvbSBwYWNrYWdlIHRhZyBncm91cFxuICovXG5leHBvcnQgY2xhc3MgUGFja2FnZVRhZ0dyb3VwIHtcbiAgcHVibGljIHJlYWRvbmx5IGxhYmVsPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdG9vbHRpcD86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlclR5cGU/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmcsIHByb3BzPzogUGFja2FnZVRhZ0dyb3VwUHJvcHMpIHtcbiAgICB0aGlzLmxhYmVsID0gcHJvcHM/LmxhYmVsO1xuICAgIHRoaXMudG9vbHRpcCA9IHByb3BzPy50b29sdGlwO1xuICAgIHRoaXMuZmlsdGVyVHlwZSA9IChwcm9wcz8uZmlsdGVyVHlwZSA/PyBGaWx0ZXJUeXBlLmNoZWNrYm94KCkpLmJpbmQoKS50eXBlO1xuICB9XG5cbiAgcHVibGljIGJpbmQoKTogUGFja2FnZVRhZ0dyb3VwQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBsYWJlbDogdGhpcy5sYWJlbCxcbiAgICAgIHRvb2x0aXA6IHRoaXMudG9vbHRpcCxcbiAgICAgIGZpbHRlclR5cGU6IHRoaXMuZmlsdGVyVHlwZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -31,5 +31,5 @@ class PreloadFile {
31
31
  }
32
32
  exports.PreloadFile = PreloadFile;
33
33
  _a = JSII_RTTI_SYMBOL_1;
34
- PreloadFile[_a] = { fqn: "construct-hub.PreloadFile", version: "0.4.412" };
34
+ PreloadFile[_a] = { fqn: "construct-hub.PreloadFile", version: "0.4.413" };
35
35
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJlbG9hZC1maWxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkJBQWtDO0FBRWxDOzs7R0FHRztBQUNILE1BQWEsV0FBVztJQUN0Qjs7T0FFRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBWTtRQUMxQixNQUFNLElBQUksR0FBRyxJQUFBLGlCQUFZLEVBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdkQsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQVk7UUFDMUIsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsWUFBNkIsSUFBWTtRQUFaLFNBQUksR0FBSixJQUFJLENBQVE7SUFBRyxDQUFDO0lBRXRDLElBQUk7UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQzs7QUFwQkgsa0NBcUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBqYXZhc2NyaXB0IGZpbGUgdG8gbG9hZCBiZWZvcmUgdGhlIHdlYmFwcC5cbiAqIFRoaXMgY2FuIGFsbG93IG9wZXJhdG9ycyB0byBhZGQgdGhlaXIgb3duIGNsaWVudCBtb25pdG9ycyBvciBhbmFseXRpY3MgaWYgdGhleSB3aXNoXG4gKi9cbmV4cG9ydCBjbGFzcyBQcmVsb2FkRmlsZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgUHJlbG9hZEZpbGUgaW5zdGFuY2UgZnJvbSBhIGZpbGVwYXRoIHRvIGxvYWRcbiAgICovXG4gIHN0YXRpYyBmcm9tRmlsZShwYXRoOiBzdHJpbmcpOiBQcmVsb2FkRmlsZSB7XG4gICAgY29uc3QgZGF0YSA9IHJlYWRGaWxlU3luYyhwYXRoLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgIHJldHVybiBuZXcgUHJlbG9hZEZpbGUoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFByZWxvYWRGaWxlIGluc3RhbmNlIGRpcmVjdGx5IGZyb20gc291cmNlIGNvZGVcbiAgICovXG4gIHN0YXRpYyBmcm9tQ29kZShjb2RlOiBzdHJpbmcpOiBQcmVsb2FkRmlsZSB7XG4gICAgcmV0dXJuIG5ldyBQcmVsb2FkRmlsZShjb2RlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGF0YTogc3RyaW5nKSB7fVxuXG4gIHB1YmxpYyBiaW5kKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxufVxuIl19
package/lib/s3/storage.js CHANGED
@@ -52,6 +52,6 @@ class S3StorageFactory extends constructs_1.Construct {
52
52
  }
53
53
  exports.S3StorageFactory = S3StorageFactory;
54
54
  _a = JSII_RTTI_SYMBOL_1;
55
- S3StorageFactory[_a] = { fqn: "construct-hub.S3StorageFactory", version: "0.4.412" };
55
+ S3StorageFactory[_a] = { fqn: "construct-hub.S3StorageFactory", version: "0.4.413" };
56
56
  S3StorageFactory.UID = 'S3StorageFactory';
57
57
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zMy9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQXFEO0FBQ3JELHlDQUF5QztBQUN6QywyQ0FBdUM7QUFjdkM7O0dBRUc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLHNCQUFTO0lBQzdDOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUN2QixLQUFnQixFQUNoQixRQUErQixFQUFFO1FBRWpDLE1BQU0sS0FBSyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBcUIsQ0FBQztJQUN4RSxDQUFDO0lBTUQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsUUFBK0IsRUFBRTtRQUVqQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxTQUFTLENBQ2QsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQXNCO1FBRXRCLFNBQVMsV0FBVyxDQUFDLE1BQWlCO1lBQ3BDLE1BQU0sU0FBUyxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMvRCxrQkFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRTNDLElBQUksdUJBQVMsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7Z0JBQ3RDLFdBQVcsRUFBRSxZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUMzQyxLQUFLLEVBQUUsb0JBQW9CLE1BQU0sQ0FBQyxVQUFVLFNBQVMsU0FBUyxDQUFDLFVBQVUsRUFBRTthQUM1RSxDQUFDLENBQUM7WUFDSCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFaEQsNkVBQTZFO1FBQzdFLGtGQUFrRjtRQUNsRix5QkFBeUI7UUFDekIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXRDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDbEQsQ0FBQzs7QUE1REgsNENBNkRDOzs7QUEzQ3lCLG9CQUFHLEdBQUcsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIFN0YWNrLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGBTM1N0b3JhZ2VGYWN0b3J5YFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFMzU3RvcmFnZUZhY3RvcnlQcm9wcyB7XG4gIC8qKlxuICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBmYWN0b3J5IHdpbGwgcmV0dXJuIHRoZSBmYWlsb3ZlciBidWNrZXRzIGluc3RlYWQgb2YgdGhlIHByaW1hcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmYWlsb3Zlcj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ3JlYXRlIHMzIHN0b3JhZ2UgcmVzb3VyY2VzLlxuICovXG5leHBvcnQgY2xhc3MgUzNTdG9yYWdlRmFjdG9yeSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBvciBjcmVhdGUgdGhlIHN0b3JhZ2UgZmFjdG9yeSBmb3IgdGhlIGN1cnJlbnQgc2NvcGUuXG4gICAqXG4gICAqIFRoaXMgaXMgc3RhY2sgc2luZ2xldG9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRPckNyZWF0ZShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIHByb3BzOiBTM1N0b3JhZ2VGYWN0b3J5UHJvcHMgPSB7fVxuICApOiBTM1N0b3JhZ2VGYWN0b3J5IHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgICBjb25zdCBmYWN0b3J5ID0gc3RhY2subm9kZS50cnlGaW5kQ2hpbGQoUzNTdG9yYWdlRmFjdG9yeS5VSUQpO1xuICAgIGlmICghZmFjdG9yeSkge1xuICAgICAgcmV0dXJuIG5ldyBTM1N0b3JhZ2VGYWN0b3J5KHN0YWNrLCBTM1N0b3JhZ2VGYWN0b3J5LlVJRCwgcHJvcHMpO1xuICAgIH1cbiAgICByZXR1cm4gc3RhY2subm9kZS5maW5kQ2hpbGQoUzNTdG9yYWdlRmFjdG9yeS5VSUQpIGFzIFMzU3RvcmFnZUZhY3Rvcnk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBVSUQgPSAnUzNTdG9yYWdlRmFjdG9yeSc7XG5cbiAgcHJpdmF0ZSBmYWlsb3ZlckFjdGl2ZTogYm9vbGVhbjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogUzNTdG9yYWdlRmFjdG9yeVByb3BzID0ge31cbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmZhaWxvdmVyQWN0aXZlID0gcHJvcHMuZmFpbG92ZXIgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGJ1Y2tldCBpbiBhIHN0b3JhZ2UgY29uZmlnIGF3YXJlIG1hbm5lci5cbiAgICpcbiAgICogQHJldHVybnMgczMuQnVja2V0XG4gICAqL1xuICBwdWJsaWMgbmV3QnVja2V0KFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wcz86IHMzLkJ1Y2tldFByb3BzXG4gICk6IHMzLkJ1Y2tldCB7XG4gICAgZnVuY3Rpb24gZmFpbG92ZXJGb3IoYnVja2V0OiBzMy5CdWNrZXQpOiBzMy5CdWNrZXQge1xuICAgICAgY29uc3QgX2ZhaWxvdmVyID0gbmV3IHMzLkJ1Y2tldChzY29wZSwgYEZhaWxvdmVyJHtpZH1gLCBwcm9wcyk7XG4gICAgICBUYWdzLm9mKF9mYWlsb3ZlcikuYWRkKCdmYWlsb3ZlcicsICd0cnVlJyk7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQoc2NvcGUsICdTbmFwc2hvdENvbW1hbmQnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgU25hcHNob3QgJHtidWNrZXQubm9kZS5wYXRofWAsXG4gICAgICAgIHZhbHVlOiBgYXdzIHMzIHN5bmMgczM6Ly8ke2J1Y2tldC5idWNrZXROYW1lfSBzMzovLyR7X2ZhaWxvdmVyLmJ1Y2tldE5hbWV9YCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF9mYWlsb3ZlcjtcbiAgICB9XG5cbiAgICBjb25zdCBwcmltYXJ5ID0gbmV3IHMzLkJ1Y2tldChzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIC8vIG5vdGUgdGhhdCB3ZSBjcmVhdGUgdGhlIGZhaWxvdmVyIGJ1Y2tldCBldmVuIGlmIHdlIGRvbid0IGN1cnJlbnRseSB1c2UgaXQuXG4gICAgLy8gdGhpcyBpcyBiZWNhdXNlIGNvbmRpdGlvbmluZyBidWNrZXQgY3JlYXRpb24gd2lsbCBldmVudHVhbGx5IGZhaWwgc2luY2UgYnVja2V0c1xuICAgIC8vIGFyZSBub3JtYWxseSByZXRhaW5lZC5cbiAgICBjb25zdCBmYWlsb3ZlciA9IGZhaWxvdmVyRm9yKHByaW1hcnkpO1xuXG4gICAgcmV0dXJuIHRoaXMuZmFpbG92ZXJBY3RpdmUgPyBmYWlsb3ZlciA6IHByaW1hcnk7XG4gIH1cbn1cbiJdfQ==
@@ -269,7 +269,7 @@ class SpdxLicense {
269
269
  }
270
270
  exports.SpdxLicense = SpdxLicense;
271
271
  _a = JSII_RTTI_SYMBOL_1;
272
- SpdxLicense[_a] = { fqn: "construct-hub.SpdxLicense", version: "0.4.412" };
272
+ SpdxLicense[_a] = { fqn: "construct-hub.SpdxLicense", version: "0.4.413" };
273
273
  SpdxLicense._ALL = new Map();
274
274
  //#region Individual SPDX Licenses
275
275
  /**
package/package.json CHANGED
@@ -209,7 +209,7 @@
209
209
  "publishConfig": {
210
210
  "access": "public"
211
211
  },
212
- "version": "0.4.412",
212
+ "version": "0.4.413",
213
213
  "jest": {
214
214
  "coverageProvider": "v8",
215
215
  "maxConcurrency": 2,