sliftutils 1.7.44 → 1.7.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/index.d.ts +2 -0
  2. package/misc/dist/environment.ts.cache +2 -2
  3. package/misc/dist/getSecret.ts.cache +2 -2
  4. package/misc/dist/strings.ts.cache +2 -2
  5. package/misc/dist/zip.ts.cache +2 -2
  6. package/misc/https/dist/certs.ts.cache +2 -2
  7. package/misc/https/dist/hostServer.ts.cache +3 -3
  8. package/misc/https/dist/persistentLocalStorage.ts.cache +2 -2
  9. package/misc/https/hostServer.ts +3 -0
  10. package/package.json +1 -1
  11. package/render-utils/dist/observer.tsx.cache +2 -2
  12. package/storage/BulkDatabase2/dist/BulkDatabaseBase.ts.cache +2 -2
  13. package/storage/BulkDatabase2/dist/BulkDatabaseFormat.ts.cache +2 -2
  14. package/storage/BulkDatabase2/dist/BulkDatabaseMerge.ts.cache +2 -2
  15. package/storage/BulkDatabase2/dist/BulkDatabaseReader.ts.cache +2 -2
  16. package/storage/BulkDatabase2/dist/LoadedIndex.ts.cache +2 -2
  17. package/storage/BulkDatabase2/dist/WriteOverlay.ts.cache +2 -2
  18. package/storage/BulkDatabase2/dist/blockCache.ts.cache +2 -2
  19. package/storage/BulkDatabase2/dist/mergeLock.ts.cache +2 -2
  20. package/storage/BulkDatabase2/dist/mergeMarkers.ts.cache +2 -2
  21. package/storage/BulkDatabase2/dist/streamLog.ts.cache +2 -2
  22. package/storage/BulkDatabase2/dist/syncClient.ts.cache +2 -2
  23. package/storage/dist/ArchivesDisk.ts.cache +2 -2
  24. package/storage/dist/FileFolderAPI.tsx.cache +2 -2
  25. package/storage/dist/IArchives.ts.cache +2 -2
  26. package/storage/dist/IndexedDBFileFolderAPI.ts.cache +2 -2
  27. package/storage/dist/JSONStorage.ts.cache +2 -2
  28. package/storage/dist/PendingManager.tsx.cache +2 -2
  29. package/storage/dist/TransactionStorage.ts.cache +2 -2
  30. package/storage/dist/fileSystemPointer.ts.cache +2 -2
  31. package/storage/dist/remoteFileStorage.ts.cache +2 -2
  32. package/storage/remoteStorage/createArchives.d.ts +2 -0
  33. package/storage/remoteStorage/createArchives.ts +16 -4
  34. package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +2 -2
  35. package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +2 -2
  36. package/storage/remoteStorage/dist/blobStore.ts.cache +2 -2
  37. package/storage/remoteStorage/dist/cliArgs.ts.cache +2 -2
  38. package/storage/remoteStorage/dist/createArchives.ts.cache +20 -9
  39. package/storage/remoteStorage/dist/deployTakeover.ts.cache +2 -2
  40. package/storage/remoteStorage/dist/intermediateSources.ts.cache +2 -2
  41. package/storage/remoteStorage/dist/remoteConfig.ts.cache +2 -2
  42. package/storage/remoteStorage/dist/sourceWrapper.ts.cache +2 -2
  43. package/storage/remoteStorage/dist/storageClientController.ts.cache +2 -2
  44. package/storage/remoteStorage/dist/storageController.ts.cache +2 -2
  45. package/storage/remoteStorage/dist/storageServerState.ts.cache +2 -2
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
3
  //exports.getBucketInfo = exports.clearServerWriteStats = exports.activateServerBucket = exports.listServerActiveBucketKeys = exports.getServerActiveBucket = exports.listServerBuckets = exports.createArchives = exports.ArchivesChain = exports.createApiArchives = exports.getBucketBaseUrl = exports.parseBackblazeUrl = exports.parseHostedUrl = void 0;
4
4
  const misc_1 = require("socket-function/src/misc");
@@ -702,19 +702,30 @@ class ArchivesChain {
702
702
  }
703
703
  }
704
704
  async getURL(path) {
705
+ let urls = await this.getURLs(path);
706
+ if (!urls.length) {
707
+ throw new Error(`No public source covering route ${(0, remoteConfig_1.getRoute)(path)} to build a URL from for ${this.getDebugName()}`);
708
+ }
709
+ return urls[0];
710
+ }
711
+ /** Every URL that could serve this path, in source order. Empty when no public source covers the path's route. */
712
+ async getURLs(path) {
713
+ var _a;
705
714
  let state = await this.getState();
706
715
  let route = (0, remoteConfig_1.getRoute)(path);
716
+ let providers = [];
707
717
  for (let source of state.sources) {
708
- if (source.config.public === false)
718
+ if (!((_a = source.config.public) !== null && _a !== void 0 ? _a : true))
709
719
  continue;
710
720
  if (!(0, remoteConfig_1.routeContains)(source.config.route, route))
711
721
  continue;
712
- if (source.url)
713
- return await source.url.getURL(path);
714
- if (source.api)
715
- return await source.api.getURL(path);
722
+ let provider = source.url || source.api;
723
+ if (!provider)
724
+ continue;
725
+ providers.push(provider);
716
726
  }
717
- throw new Error(`No public source covering route ${route} to build a URL from for ${this.getDebugName()}`);
727
+ let urls = await Promise.all(providers.map(provider => provider.getURL(path)));
728
+ return [...new Set(urls)];
718
729
  }
719
730
  dispose() {
720
731
  var _a;
@@ -786,5 +797,5 @@ async function getBucketInfo(config) {
786
797
  return await remote.getConfig();
787
798
  }
788
799
  exports.getBucketInfo = getBucketInfo;
789
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQXJjaGl2ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGVBcmNoaXZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBd0Q7QUFDeEQsMkRBQXFEO0FBQ3JELDRDQUlzQjtBQUN0QixpREFJd0I7QUFDeEIsK0RBQW1FO0FBQ25FLG1FQUFnRTtBQUNoRSxxREFBd0Y7QUFDeEYsdUVBQW1FO0FBQ25FLDRDQUFpRDtBQUNqRCw2REFBNEg7QUFDNUgsMkRBQXlGO0FBQ3pGLG1EQUFrRztBQUVsRyxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzNDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQyxNQUFNLGlDQUFpQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDcEQsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUUvQyxxTkFBcU47QUFDck4sK0NBQXFGO0FBQTVFLDhHQUFBLGNBQWMsT0FBQTtBQUFFLGlIQUFBLGlCQUFpQixPQUFBO0FBQUUsZ0hBQUEsZ0JBQWdCLE9BQUE7QUFFNUQsU0FBZ0IsaUJBQWlCLENBQUMsTUFBc0M7SUFDcEUsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSw2QkFBaUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFBLGdDQUFpQixFQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3RMLENBQUM7SUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFBLDZCQUFj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RCxzREFFQztBQUVNLEtBQUssVUFBVSxhQUFhLENBQUMsTUFBdUI7SUFDdkQsSUFBSSxNQUFNLEdBQUcsSUFBSSwrQkFBYyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0UsT0FBTyxNQUFNLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNwQyxDQUFDO0FBSEQsc0NBR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc05vZGUsIHNvcnQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2JhdGNoaW5nXCI7XG5pbXBvcnQge1xuICAgIElBcmNoaXZlcywgUmVtb3RlQ29uZmlnLCBSZW1vdGVDb25maWdCYXNlLCBIb3N0ZWRDb25maWcsIEJhY2tibGF6ZUNvbmZpZyxcbiAgICBBcmNoaXZlRmlsZUluZm8sIEFyY2hpdmVzQ29uZmlnLCBBcmNoaXZlc1N5bmNTdGF0dXMsIFNUT1JBR0VfV1JPTkdfVkFMSURfV0lORE9XLFxuICAgIFNUT1JBR0VfV1JPTkdfUk9VVEUsIEZVTExfUk9VVEUsIFZBUklBQkxFX1NIQVJELFxufSBmcm9tIFwiLi4vSUFyY2hpdmVzXCI7XG5pbXBvcnQge1xuICAgIFJPVVRJTkdfRklMRSwgZ2V0Q29uZmlnVmVyc2lvbiwgcGFyc2VIb3N0ZWRVcmwsIHBhcnNlQmFja2JsYXplVXJsLFxuICAgIG5vcm1hbGl6ZVJlbW90ZUNvbmZpZywgbm9ybWFsaXplU291cmNlLCBzZXJpYWxpemVSZW1vdGVDb25maWcsXG4gICAgZ2V0Um91dGUsIHJvdXRlQ29udGFpbnMsIHBhcnNlVmFyaWFibGVSb3V0ZSxcbn0gZnJvbSBcIi4vcmVtb3RlQ29uZmlnXCI7XG5pbXBvcnQgeyByZXNvbHZlSW50ZXJtZWRpYXRlU291cmNlcyB9IGZyb20gXCIuL2ludGVybWVkaWF0ZVNvdXJjZXNcIjtcbmltcG9ydCB7IFNvY2tldEZ1bmN0aW9uIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9Tb2NrZXRGdW5jdGlvblwiO1xuaW1wb3J0IHsgQXJjaGl2ZXNSZW1vdGUsIHBhcnNlU3RvcmFnZVVybCwgYXV0aGVudGljYXRlU3RvcmFnZSB9IGZyb20gXCIuL0FyY2hpdmVzUmVtb3RlXCI7XG5pbXBvcnQgeyBvblNlcnZlclJvdXRpbmdDaGFuZ2VkIH0gZnJvbSBcIi4vc3RvcmFnZUNsaWVudENvbnRyb2xsZXJcIjtcbmltcG9ydCB7IEFyY2hpdmVzQmFja2JsYXplIH0gZnJvbSBcIi4uL2JhY2tibGF6ZVwiO1xuaW1wb3J0IHsgZ2V0U3RvcmFnZVNlcnZlckNvbmZpZ09wdGlvbmFsLCBnZXRMb2NhbEFyY2hpdmVzLCBTZXJ2ZXJCdWNrZXRJbmZvLCBBY3RpdmVCdWNrZXRJbmZvIH0gZnJvbSBcIi4vc3RvcmFnZVNlcnZlclN0YXRlXCI7XG5pbXBvcnQgeyBSZW1vdGVTdG9yYWdlQ29udHJvbGxlciwgU1RPUkFHRV9OT1RfQVVUSEVOVElDQVRFRCB9IGZyb20gXCIuL3N0b3JhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBTb3VyY2VXcmFwcGVyLCBSRVRSWV9TVEFSVF9ERUxBWSwgUkVUUllfTUFYX0RFTEFZLCBSRVRSWV9HUk9XVEggfSBmcm9tIFwiLi9zb3VyY2VXcmFwcGVyXCI7XG5cbmNvbnN0IENPTkZJR19QT0xMX0lOVEVSVkFMID0gNSAqIDYwICogMTAwMDtcbmNvbnN0IFdST05HX1RBUkdFVF9CT1VOREFSWV9XSU5ET1cgPSAzMCAqIDEwMDA7XG5jb25zdCBXUk9OR19UQVJHRVRfQk9VTkRBUllfUkVUUllfREVMQVkgPSAxNSAqIDEwMDA7XG5jb25zdCBDT05GSUdfUkVGUkVTSF9USFJPVFRMRSA9IDMwICogMTAwMDtcbmNvbnN0IEFWQUlMQUJJTElUWV9SRUNIRUNLX1RIUk9UVExFID0gNSAqIDEwMDA7XG5cbi8qKiBUaGUgYWRkcmVzcywgcG9ydCwgYWNjb3VudCwgYW5kIGJ1Y2tldCBuYW1lIGEgYnVja2V0IHJvdXRpbmcgVVJMIGFkZHJlc3Nlcy4gVGhyb3dzIHdoZW4gdGhlIFVSTCBpc24ndCBhIGhvc3RlZCBidWNrZXQgcm91dGluZyBVUkwgKGh0dHBzOi8vaG9zdDpwb3J0L2ZpbGUvPGFjY291bnQ+LzxidWNrZXROYW1lPi9zdG9yYWdlL3N0b3JhZ2Vyb3V0aW5nLmpzb24pLiAqL1xuZXhwb3J0IHsgcGFyc2VIb3N0ZWRVcmwsIHBhcnNlQmFja2JsYXplVXJsLCBnZXRCdWNrZXRCYXNlVXJsIH0gZnJvbSBcIi4vcmVtb3RlQ29uZmlnXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBcGlBcmNoaXZlcyhzb3VyY2U6IEhvc3RlZENvbmZpZyB8IEJhY2tibGF6ZUNvbmZpZyk6IElBcmNoaXZlcyB7XG4gICAgaWYgKHNvdXJjZS50eXBlID09PSBcImJhY2tibGF6ZVwiKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJjaGl2ZXNCYWNrYmxhemUoeyBidWNrZXROYW1lOiBwYXJzZUJhY2tibGF6ZVVybChzb3VyY2UudXJsKS5idWNrZXROYW1lLCBwdWJsaWM6IHNvdXJjZS5wdWJsaWMsIGltbXV0YWJsZTogc291cmNlLmltbXV0YWJsZSwgYWxsb3dlZE9yaWdpbnM6IHNvdXJjZS5hbGxvd2VkT3JpZ2lucyB9KTtcbiAgICB9XG4gICAgbGV0IHBhcnNlZCA9IHBhcnNlSG9zdGVkVXJsKHNvdXJjZS51cmwpO1xuICAgIGxldCBzZXJ2ZXIgPSBpc05vZGUoKSAmJiBnZXRTdG9yYWdlU2VydmVyQ29uZmlnT3B0aW9uYWwoKSB8fCB1bmRlZmluZWQ7XG4gICAgaWYgKHNlcnZlciAmJiBwYXJzZWQuYWRkcmVzcyA9PT0gc2VydmVyLmRvbWFpbiAmJiBwYXJzZWQucG9ydCA9PT0gc2VydmVyLnBvcnQpIHtcbiAgICAgICAgcmV0dXJuIGdldExvY2FsQXJjaGl2ZXMocGFyc2VkLmFjY291bnQsIHBhcnNlZC5idWNrZXROYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBcmNoaXZlc1JlbW90ZSh7IHVybDogc291cmNlLnVybCwgd2FpdEZvckFjY2VzczogZmFsc2UgfSk7XG59XG5cbnR5cGUgQ2hhaW5TdGF0ZSA9IHtcbiAgICBjb25maWc6IFJlbW90ZUNvbmZpZztcbiAgICBzb3VyY2VzOiBTb3VyY2VXcmFwcGVyW107XG59O1xuXG5mdW5jdGlvbiBjb25maWdXaW5kb3dDdXJyZW50KGNvbmZpZzogSG9zdGVkQ29uZmlnIHwgQmFja2JsYXplQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgbGV0IG5vdyA9IERhdGUubm93KCk7XG4gICAgbGV0IFtzdGFydCwgZW5kXSA9IGNvbmZpZy52YWxpZFdpbmRvdztcbiAgICByZXR1cm4gc3RhcnQgPD0gbm93ICYmIG5vdyA8IGVuZDtcbn1cblxuZnVuY3Rpb24gY29uZmlnQWNjZXB0c1dyaXRlcyhjb25maWc6IEhvc3RlZENvbmZpZyB8IEJhY2tibGF6ZUNvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb25maWdXaW5kb3dDdXJyZW50KGNvbmZpZyk7XG59XG5cbmV4cG9ydCBjbGFzcyBBcmNoaXZlc0NoYWluIGltcGxlbWVudHMgSUFyY2hpdmVzIHtcbiAgICBwcml2YXRlIGNvbmZpZ3VyZWQ6IFJlbW90ZUNvbmZpZztcbiAgICBwcml2YXRlIGFjdGl2ZUNvbmZpZzogUmVtb3RlQ29uZmlnO1xuICAgIHByaXZhdGUgc3RhdGVQcm9taXNlOiBQcm9taXNlPENoYWluU3RhdGU+IHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgaW5pdFJldHJ5RGVsYXkgPSBSRVRSWV9TVEFSVF9ERUxBWTtcbiAgICBwcml2YXRlIGluaXRSZXRyeVRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIHBvbGxUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgZGlzcG9zZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlUm91dGluZ1B1c2g6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZzogUmVtb3RlQ29uZmlnIHwgUmVtb3RlQ29uZmlnQmFzZSkge1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZWQgPSBub3JtYWxpemVSZW1vdGVDb25maWcoY29uZmlnKTtcbiAgICAgICAgdGhpcy5hY3RpdmVDb25maWcgPSB0aGlzLmNvbmZpZ3VyZWQ7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVSb3V0aW5nUHVzaCA9IG9uU2VydmVyUm91dGluZ0NoYW5nZWQoKCkgPT4ge1xuICAgICAgICAgICAgdm9pZCB0aGlzLnJlZnJlc2hBY3RpdmVDb25maWcoKS5jYXRjaCgoZTogRXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoYENvbmZpZyByZWZyZXNoIGZhaWxlZCBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfTogJHtlLnN0YWNrID8/IGV9YCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVidWdOYW1lKCkge1xuICAgICAgICBsZXQgdXJscyA9IHRoaXMuYWN0aXZlQ29uZmlnLnNvdXJjZXMubWFwKHggPT4gdHlwZW9mIHggPT09IFwic3RyaW5nXCIgJiYgeCB8fCAoeCBhcyBIb3N0ZWRDb25maWcgfCBCYWNrYmxhemVDb25maWcpLnVybCk7XG4gICAgICAgIHJldHVybiBgY2hhaW4gJHt1cmxzLmpvaW4oXCIsIFwiKX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3RhdGUoKTogUHJvbWlzZTxDaGFpblN0YXRlPiB7XG4gICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBBcmNoaXZlc0NoYWluICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0gaGFzIGJlZW4gZGlzcG9zZWRgKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlUHJvbWlzZSkge1xuICAgICAgICAgICAgbGV0IHByb21pc2UgPSB0aGlzLmluaXQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVQcm9taXNlID0gcHJvbWlzZTtcbiAgICAgICAgICAgIHByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0UmV0cnlEZWxheSA9IFJFVFJZX1NUQVJUX0RFTEFZO1xuICAgICAgICAgICAgfSwgKGU6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlzcG9zZWQgfHwgdGhpcy5pbml0UmV0cnlUaW1lcikgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFN0b3JhZ2UgaW5pdCBmYWlsZWQgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0sIHJldHJ5aW5nIGluICR7TWF0aC5yb3VuZCh0aGlzLmluaXRSZXRyeURlbGF5IC8gMTAwMCl9cy4gJHtlLnN0YWNrID8/IGV9YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0UmV0cnlUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRSZXRyeVRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXNwb3NlZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZVByb21pc2UgPT09IHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RhdGUoKS5jYXRjaCgoKSA9PiB7IH0pO1xuICAgICAgICAgICAgICAgIH0sIHRoaXMuaW5pdFJldHJ5RGVsYXkpO1xuICAgICAgICAgICAgICAgICh0aGlzLmluaXRSZXRyeVRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH0pLnVucmVmPy4oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRSZXRyeURlbGF5ID0gTWF0aC5taW4oUkVUUllfTUFYX0RFTEFZLCB0aGlzLmluaXRSZXRyeURlbGF5ICogUkVUUllfR1JPV1RIKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlUHJvbWlzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXQoKTogUHJvbWlzZTxDaGFpblN0YXRlPiB7XG4gICAgICAgIGxldCBjb25maWdzID0gdGhpcy5jb25maWd1cmVkLnNvdXJjZXMubWFwKG5vcm1hbGl6ZVNvdXJjZSk7XG4gICAgICAgIGxldCBmZXRjaGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoY29uZmlncy5tYXAoYXN5bmMgc291cmNlQ29uZmlnID0+IHtcbiAgICAgICAgICAgIGxldCBwcm9iZSA9IGF3YWl0IFNvdXJjZVdyYXBwZXIuY3JlYXRlKHNvdXJjZUNvbmZpZywgeyBiYWNrZ3JvdW5kOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBleGlzdGluZyA9IGF3YWl0IHByb2JlLnJlYWRSb3V0aW5nQ29uZmlnKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcHJvYmUsIHNvdXJjZUNvbmZpZywgcmVzcG9uZGVkOiB0cnVlLCBsYXRlbmN5OiBEYXRlLm5vdygpIC0gc3RhcnQsIGV4aXN0aW5nLCBlcnJvcjogXCJcIiB9O1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHByb2JlLCBzb3VyY2VDb25maWcsIHJlc3BvbmRlZDogZmFsc2UsIGxhdGVuY3k6IDAsIGV4aXN0aW5nOiB1bmRlZmluZWQsIGVycm9yOiBgJHtzb3VyY2VDb25maWcudXJsfTogJHsoZSBhcyBFcnJvcikuc3RhY2sgPz8gZX1gIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9IGZldGNoZXMuZmluZCh4ID0+IHgucmVzcG9uZGVkKTtcbiAgICAgICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBpbml0aWFsaXplIHN0b3JhZ2UgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX06IG5vIHNvdXJjZSBhbnN3ZXJlZC4gJHtmZXRjaGVzLm1hcCh4ID0+IHguZXJyb3IpLmpvaW4oXCIgfCBcIil9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZXhpc3RpbmcgPSBmb3VuZC5leGlzdGluZztcbiAgICAgICAgICAgIGxldCBhY3RpdmUgPSB0aGlzLmNvbmZpZ3VyZWQ7XG4gICAgICAgICAgICBsZXQgbmVlZHNXcml0ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZ2V0Q29uZmlnVmVyc2lvbihleGlzdGluZykgPj0gZ2V0Q29uZmlnVmVyc2lvbih0aGlzLmNvbmZpZ3VyZWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZ1ZlcnNpb24oZXhpc3RpbmcpID09PSBnZXRDb25maWdWZXJzaW9uKHRoaXMuY29uZmlndXJlZCkgJiYgSlNPTi5zdHJpbmdpZnkoZXhpc3RpbmcpICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZ3VyZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEFyY2hpdmVzIGNvbmZpZ3VyYXRpb24gdXBkYXRlZCB3aXRob3V0IHVwZGF0aW5nIHRoZSB2ZXJzaW9uLCBmb3IgJHtmb3VuZC5zb3VyY2VDb25maWcudXJsfS4gVXBkYXRlcyB3aWxsIGJlIGlnbm9yZWQgdW50aWwgeW91IGluY3JlYXNlIHRoZSB2ZXJzaW9uLiBVc2luZzogJHtKU09OLnN0cmluZ2lmeShleGlzdGluZyl9LCBpZ25vcmluZzogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZ3VyZWQpfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY3RpdmUgPSBleGlzdGluZztcbiAgICAgICAgICAgICAgICBuZWVkc1dyaXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmVlZHNXcml0ZSkge1xuICAgICAgICAgICAgICAgIGxldCBiZXN0OiBSZW1vdGVDb25maWcgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbGV0IGNvbmZsaWN0VXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZmV0Y2ggb2YgZmV0Y2hlcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3RvcmVkID0gZmV0Y2guZXhpc3Rpbmc7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3RvcmVkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFiZXN0IHx8IGdldENvbmZpZ1ZlcnNpb24oc3RvcmVkKSA+IGdldENvbmZpZ1ZlcnNpb24oYmVzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3QgPSBzdG9yZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZ1ZlcnNpb24oc3RvcmVkKSA9PT0gZ2V0Q29uZmlnVmVyc2lvbih0aGlzLmNvbmZpZ3VyZWQpICYmIEpTT04uc3RyaW5naWZ5KHN0b3JlZCkgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlndXJlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0VXJsID0gZmV0Y2guc291cmNlQ29uZmlnLnVybDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYmVzdCAmJiBnZXRDb25maWdWZXJzaW9uKGJlc3QpID49IGdldENvbmZpZ1ZlcnNpb24odGhpcy5jb25maWd1cmVkKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmxpY3RVcmwgJiYgZ2V0Q29uZmlnVmVyc2lvbihiZXN0KSA9PT0gZ2V0Q29uZmlnVmVyc2lvbih0aGlzLmNvbmZpZ3VyZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBBcmNoaXZlcyBjb25maWd1cmF0aW9uIHVwZGF0ZWQgd2l0aG91dCB1cGRhdGluZyB0aGUgdmVyc2lvbiwgZm9yICR7Y29uZmxpY3RVcmx9LiBVcGRhdGVzIHdpbGwgYmUgaWdub3JlZCB1bnRpbCB5b3UgaW5jcmVhc2UgdGhlIHZlcnNpb24uIFVzaW5nOiAke0pTT04uc3RyaW5naWZ5KGJlc3QpfSwgaWdub3Jpbmc6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWd1cmVkKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhY3RpdmUgPSBiZXN0O1xuICAgICAgICAgICAgICAgICAgICBuZWVkc1dyaXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHNvdXJjZXMgPSBhd2FpdCB0aGlzLmJ1aWxkU291cmNlcyhhY3RpdmUpO1xuICAgICAgICAgICAgaWYgKG5lZWRzV3JpdGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWlzc2luZzogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhd2FpdCBzb3VyY2UuaGFzV3JpdGVBY2Nlc3MoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmcucHVzaChzb3VyY2UuY29uZmlnLnVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmcucHVzaChgJHtzb3VyY2UuY29uZmlnLnVybH0gKGNoZWNrIGZhaWxlZDogJHsoZSBhcyBFcnJvcikuc3RhY2sgPz8gZX0pYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYE5vdCB3cml0aW5nIHRoZSBzdG9yYWdlIHJvdXRpbmcgY29uZmlnIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9ICh2ZXJzaW9uICR7Z2V0Q29uZmlnVmVyc2lvbih0aGlzLmNvbmZpZ3VyZWQpfSk6IG5vIHdyaXRlIGFjY2VzcyB0byAke21pc3Npbmcuam9pbihcIiwgXCIpfS4gJHtleGlzdGluZyAmJiBgUnVubmluZyBvbiB0aGUgc3RvcmVkIGNvbmZpZyAodmVyc2lvbiAke2dldENvbmZpZ1ZlcnNpb24oZXhpc3RpbmcpfSkgaW5zdGVhZC5gIHx8IGBObyBzdG9yZWQgY29uZmlnIGV4aXN0cywgc28gdGhlIGJ1Y2tldCBjYW5ub3QgYmUgY3JlYXRlZCB1bnRpbCB3cml0ZSBhY2Nlc3MgaXMgZ3JhbnRlZC5gfWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGV4aXN0aW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UuZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcyA9IGF3YWl0IHRoaXMuYnVpbGRTb3VyY2VzKGFjdGl2ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJvdXRpbmdEYXRhID0gc2VyaWFsaXplUmVtb3RlQ29uZmlnKHRoaXMuY29uZmlndXJlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcm91dGluZ1dyaXRlVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3JpdHRlblVybHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXR0ZW5VcmxzLmhhcyhzb3VyY2UuY29uZmlnLnVybCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXR0ZW5VcmxzLmFkZChzb3VyY2UuY29uZmlnLnVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgU3RvcmFnZSByb3V0aW5nIGNvbmZpZyBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfSBpcyBvdXQgb2YgZGF0ZSAoc3RvcmVkIHZlcnNpb24gJHtleGlzdGluZyAmJiBnZXRDb25maWdWZXJzaW9uKGV4aXN0aW5nKSB8fCBcIm5vbmVcIn0sIG91cnMgJHtnZXRDb25maWdWZXJzaW9uKHRoaXMuY29uZmlndXJlZCl9KTogd3JpdGluZyBvdXJzIHRvIGFsbCAke3dyaXR0ZW5VcmxzLnNpemV9IG5vZGVzICh3cml0ZSB0aW1lICR7bmV3IERhdGUocm91dGluZ1dyaXRlVGltZSkudG9JU09TdHJpbmcoKX0pOiAke1suLi53cml0dGVuVXJsc10uam9pbihcIiwgXCIpfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdHRlblVybHMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXR0ZW5VcmxzLmhhcyhzb3VyY2UuY29uZmlnLnVybCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXR0ZW5VcmxzLmFkZChzb3VyY2UuY29uZmlnLnVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc291cmNlLndyaXRlKGFyY2hpdmVzID0+IGFyY2hpdmVzLnNldChST1VUSU5HX0ZJTEUsIHJvdXRpbmdEYXRhLCB7IGxhc3RNb2RpZmllZDogcm91dGluZ1dyaXRlVGltZSB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFdyb3RlIHN0b3JhZ2Ugcm91dGluZyBjb25maWcgdmVyc2lvbiAke2dldENvbmZpZ1ZlcnNpb24odGhpcy5jb25maWd1cmVkKX0gdG8gJHtzb3VyY2UuY29uZmlnLnVybH1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UuZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZldGNoID0gZmV0Y2hlcy5maW5kKHggPT4geC5yZXNwb25kZWQgJiYgeC5zb3VyY2VDb25maWcudXJsID09PSBzb3VyY2UuY29uZmlnLnVybCk7XG4gICAgICAgICAgICAgICAgaWYgKGZldGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5zZWVkTGF0ZW5jeShmZXRjaC5sYXRlbmN5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNvbmZpZyA9IGFjdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRDb25maWdQb2xsKCk7XG4gICAgICAgICAgICByZXR1cm4geyBjb25maWc6IGFjdGl2ZSwgc291cmNlcyB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgZm9yIChsZXQgZmV0Y2ggb2YgZmV0Y2hlcykge1xuICAgICAgICAgICAgICAgIGZldGNoLnByb2JlLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY3JlYXRlQ2hhaW5Tb3VyY2Uoc291cmNlQ29uZmlnOiBIb3N0ZWRDb25maWcgfCBCYWNrYmxhemVDb25maWcpOiBQcm9taXNlPFNvdXJjZVdyYXBwZXI+IHtcbiAgICAgICAgbGV0IHNvdXJjZSA9IGF3YWl0IFNvdXJjZVdyYXBwZXIuY3JlYXRlKHNvdXJjZUNvbmZpZyk7XG4gICAgICAgIHNvdXJjZS5zdGFydFBpbmdpbmcoKTtcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGJ1aWxkU291cmNlcyhjb25maWc6IFJlbW90ZUNvbmZpZyk6IFByb21pc2U8U291cmNlV3JhcHBlcltdPiB7XG4gICAgICAgIGxldCBzb3VyY2VzOiBTb3VyY2VXcmFwcGVyW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgc291cmNlQ29uZmlnIG9mIGNvbmZpZy5zb3VyY2VzLm1hcChub3JtYWxpemVTb3VyY2UpKSB7XG4gICAgICAgICAgICBzb3VyY2VzLnB1c2goYXdhaXQgdGhpcy5jcmVhdGVDaGFpblNvdXJjZShzb3VyY2VDb25maWcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc291cmNlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0Q29uZmlnUG9sbCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucG9sbFRpbWVyIHx8IHRoaXMuZGlzcG9zZWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5wb2xsVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICB2b2lkIHRoaXMucmVmcmVzaEFjdGl2ZUNvbmZpZygpLmNhdGNoKChlOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENoZWNraW5nIGZvciBhIG5ldyBzdG9yYWdlIHJvdXRpbmcgY29uZmlnIGZhaWxlZCBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfTogJHtlLnN0YWNrID8/IGV9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgQ09ORklHX1BPTExfSU5URVJWQUwpO1xuICAgICAgICAodGhpcy5wb2xsVGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgIH1cblxuICAgIC8vIERlZHVwbGljYXRlcyBjb25jdXJyZW50IHJlZnJlc2hlcyAodGhlIHBvbGwgdGltZXIgYW5kIHdyb25nLXRhcmdldCB3cml0ZSByZXRyaWVzIHNoYXJlIHRoaXMpXG4gICAgcHJpdmF0ZSBjb25maWdSZWZyZXNoSW5GbGlnaHQ6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSByZWZyZXNoQWN0aXZlQ29uZmlnKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnUmVmcmVzaEluRmxpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1JlZnJlc2hJbkZsaWdodCA9IHRoaXMuY2hlY2tGb3JOZXdDb25maWcoKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ1JlZnJlc2hJbkZsaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ1JlZnJlc2hJbkZsaWdodDtcbiAgICB9XG5cbiAgICAvLyBUaGUgbGF0ZXN0IGNvbmZpZywgYXMgdGhlIHNlcnZlciBJTlRFUlBSRVRTIGl0OiBnZXRDb25maWcgY2FycmllcyBpbi1tZW1vcnkgb3ZlcmxheXMgKGRlcGxveVxuICAgIHByaXZhdGUgYXN5bmMgZmV0Y2hMYXRlc3RDb25maWcoc3RhdGU6IENoYWluU3RhdGUpOiBQcm9taXNlPFJlbW90ZUNvbmZpZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc3RhdGUuc291cmNlcykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgbGF0ZXN0ID0gYXdhaXQgc291cmNlLnJlYWRSb3V0aW5nQ29uZmlnKCk7XG4gICAgICAgICAgICAgICAgaWYgKGxhdGVzdCkgcmV0dXJuIG5vcm1hbGl6ZVJlbW90ZUNvbmZpZyhsYXRlc3QpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGAke3NvdXJjZS5jb25maWcudXJsfTogJHsoZSBhcyBFcnJvcikuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gc3RhdGUuc291cmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc3RvcmFnZSBzb3VyY2UgY291bGQgZ2l2ZSB1cyB0aGUgcm91dGluZyBjb25maWcgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX06ICR7ZXJyb3JzLmpvaW4oXCIgfCBcIil9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrRm9yTmV3Q29uZmlnKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5kaXNwb3NlZCB8fCAhdGhpcy5zdGF0ZVByb21pc2UpIHJldHVybjtcbiAgICAgICAgbGV0IHN0YXRlOiBDaGFpblN0YXRlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3RhdGUgPSBhd2FpdCB0aGlzLnN0YXRlUHJvbWlzZTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxhdGVzdCA9IGF3YWl0IHRoaXMuZmV0Y2hMYXRlc3RDb25maWcoc3RhdGUpO1xuICAgICAgICBpZiAoIWxhdGVzdCkgcmV0dXJuO1xuICAgICAgICBhd2FpdCB0aGlzLmFkb3B0TmV3Q29uZmlnKHN0YXRlLCBsYXRlc3QpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYWRvcHROZXdDb25maWcoc3RhdGU6IENoYWluU3RhdGUsIGxhdGVzdDogUmVtb3RlQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShsYXRlc3QpID09PSBKU09OLnN0cmluZ2lmeShzdGF0ZS5jb25maWcpKSByZXR1cm47XG4gICAgICAgIGxldCByZWNlaXZlZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgbGV0IG9ubHlJbnRlcm1lZGlhdGVzQ2hhbmdlZCA9IEpTT04uc3RyaW5naWZ5KHJlc29sdmVJbnRlcm1lZGlhdGVTb3VyY2VzKGxhdGVzdCkpID09PSBKU09OLnN0cmluZ2lmeShyZXNvbHZlSW50ZXJtZWRpYXRlU291cmNlcyhzdGF0ZS5jb25maWcpKTtcbiAgICAgICAgaWYgKG9ubHlJbnRlcm1lZGlhdGVzQ2hhbmdlZCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFN0b3JhZ2Ugcm91dGluZyBzd2l0Y2hvdmVyIHdpbmRvd3MgY2hhbmdlZCAodmVyc2lvbiAke2dldENvbmZpZ1ZlcnNpb24oc3RhdGUuY29uZmlnKX0gLT4gJHtnZXRDb25maWdWZXJzaW9uKGxhdGVzdCl9KSwgcmVjZWl2ZWQgJHtyZWNlaXZlZH0sIHJlYnVpbGRpbmcgc291cmNlcy4gTmV3IGNvbmZpZzogJHtKU09OLnN0cmluZ2lmeShsYXRlc3QpfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFN0b3JhZ2Ugcm91dGluZyBjb25maWcgY2hhbmdlZCAodmVyc2lvbiAke2dldENvbmZpZ1ZlcnNpb24oc3RhdGUuY29uZmlnKX0gLT4gJHtnZXRDb25maWdWZXJzaW9uKGxhdGVzdCl9KSwgcmVjZWl2ZWQgJHtyZWNlaXZlZH0sIHJlYnVpbGRpbmcgc291cmNlcy4gTmV3IGNvbmZpZzogJHtKU09OLnN0cmluZ2lmeShsYXRlc3QpfWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdHJpcHBlZEtleSA9IChjb25maWc6IEhvc3RlZENvbmZpZyB8IEJhY2tibGF6ZUNvbmZpZykgPT4gSlNPTi5zdHJpbmdpZnkoeyAuLi5jb25maWcsIHZhbGlkV2luZG93OiB1bmRlZmluZWQgfSk7XG4gICAgICAgIGxldCBvbGRCeUNvbmZpZyA9IG5ldyBNYXA8c3RyaW5nLCBTb3VyY2VXcmFwcGVyW10+KCk7XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gc3RyaXBwZWRLZXkoc291cmNlLmNvbmZpZyk7XG4gICAgICAgICAgICBsZXQgbGlzdCA9IG9sZEJ5Q29uZmlnLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKCFsaXN0KSB7XG4gICAgICAgICAgICAgICAgbGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgIG9sZEJ5Q29uZmlnLnNldChrZXksIGxpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGlzdC5wdXNoKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNvdXJjZXM6IFNvdXJjZVdyYXBwZXJbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBzb3VyY2VDb25maWcgb2YgbGF0ZXN0LnNvdXJjZXMubWFwKG5vcm1hbGl6ZVNvdXJjZSkpIHtcbiAgICAgICAgICAgIGxldCBvbGQgPSBvbGRCeUNvbmZpZy5nZXQoc3RyaXBwZWRLZXkoc291cmNlQ29uZmlnKSk/LnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAob2xkKSB7XG4gICAgICAgICAgICAgICAgb2xkLnVwZGF0ZVZhbGlkV2luZG93KHNvdXJjZUNvbmZpZy52YWxpZFdpbmRvdyk7XG4gICAgICAgICAgICAgICAgc291cmNlcy5wdXNoKG9sZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNvdXJjZXMucHVzaChhd2FpdCB0aGlzLmNyZWF0ZUNoYWluU291cmNlKHNvdXJjZUNvbmZpZykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGxlZnRvdmVycyBvZiBvbGRCeUNvbmZpZy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgbGVmdG92ZXIgb2YgbGVmdG92ZXJzKSB7XG4gICAgICAgICAgICAgICAgbGVmdG92ZXIuZGlzcG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlQ29uZmlnID0gbGF0ZXN0O1xuICAgICAgICB0aGlzLnN0YXRlUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh7IGNvbmZpZzogbGF0ZXN0LCBzb3VyY2VzIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbGFzdEF2YWlsYWJpbGl0eVJlY2hlY2sgPSAwO1xuICAgIHByaXZhdGUgYXZhaWxhYmlsaXR5UmVjaGVja0luRmxpZ2h0OiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgcmVjaGVja0F2YWlsYWJpbGl0eSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuYXZhaWxhYmlsaXR5UmVjaGVja0luRmxpZ2h0KSByZXR1cm4gdGhpcy5hdmFpbGFiaWxpdHlSZWNoZWNrSW5GbGlnaHQ7XG4gICAgICAgIGlmIChEYXRlLm5vdygpIC0gdGhpcy5sYXN0QXZhaWxhYmlsaXR5UmVjaGVjayA8IEFWQUlMQUJJTElUWV9SRUNIRUNLX1RIUk9UVExFKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIHRoaXMubGFzdEF2YWlsYWJpbGl0eVJlY2hlY2sgPSBEYXRlLm5vdygpO1xuICAgICAgICB0aGlzLmF2YWlsYWJpbGl0eVJlY2hlY2tJbkZsaWdodCA9IHRoaXMucmVjaGVja0F2YWlsYWJpbGl0eU5vdygpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hdmFpbGFiaWxpdHlSZWNoZWNrSW5GbGlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5hdmFpbGFiaWxpdHlSZWNoZWNrSW5GbGlnaHQ7XG4gICAgfVxuICAgIHByaXZhdGUgYXN5bmMgcmVjaGVja0F2YWlsYWJpbGl0eU5vdygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuZGlzcG9zZWQgfHwgIXRoaXMuc3RhdGVQcm9taXNlKSByZXR1cm47XG4gICAgICAgIGxldCBzdGF0ZTogQ2hhaW5TdGF0ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN0YXRlID0gYXdhaXQgdGhpcy5zdGF0ZVByb21pc2U7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGBFdmVyeSBzdG9yYWdlIHNvdXJjZSBmYWlsZWQgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX07IHJlLWNvbnRhY3RpbmcgYWxsICR7c3RhdGUuc291cmNlcy5sZW5ndGh9IHNvdXJjZXMgKHJvdXRpbmcgcmUtcmVhZCArIGNvbm5lY3Rpb24gcmUtYXR0ZW1wdClgKTtcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChzdGF0ZS5zb3VyY2VzLm1hcChhc3luYyBzb3VyY2UgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgc291cmNlLnJlYWRSb3V0aW5nQ29uZmlnKCk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIGxldCBsYXRlc3QgPSByZXN1bHRzLmZpbmQoeCA9PiB4KTtcbiAgICAgICAgaWYgKCFsYXRlc3QpIHJldHVybjtcbiAgICAgICAgYXdhaXQgdGhpcy5hZG9wdE5ld0NvbmZpZyhzdGF0ZSwgbGF0ZXN0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJ1bjxUPihzdGF0ZTogQ2hhaW5TdGF0ZSwgY29uZmlnOiB7IGFwaU9ubHk/OiBib29sZWFuOyB3cml0ZT86IGJvb2xlYW47IHJvdXRlPzogbnVtYmVyIH0sIHJ1bjogKGFyY2hpdmVzOiBJQXJjaGl2ZXMpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgaWYgKGNvbmZpZy53cml0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucnVuV3JpdGUoY29uZmlnLnJvdXRlLCBydW4pO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZWNoZWNrZWRBdmFpbGFiaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc3RhdGUuc291cmNlcykge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcucm91dGUgIT09IHVuZGVmaW5lZCAmJiAhcm91dGVDb250YWlucyhzb3VyY2UuY29uZmlnLnJvdXRlLCBjb25maWcucm91dGUpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZ1dpbmRvd0N1cnJlbnQoc291cmNlLmNvbmZpZykpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuYXBpT25seSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFwaSA9IHNvdXJjZS5hcGk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGAke3NvdXJjZS5jb25maWcudXJsfSBoYXMgVVJMLW9ubHkgYWNjZXNzLCB3aGljaCBjYW5ub3Qgc2VydmUgdGhpcyBvcGVyYXRpb25gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBydW4oYXBpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgc291cmNlLnJlYWQocnVuKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuaXNDb25uZWN0ZWQoKSkgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLm5vdGVGYWlsdXJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKFN0cmluZygoZSBhcyBFcnJvcikuc3RhY2sgPz8gZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVjaGVja2VkQXZhaWxhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgcmVjaGVja2VkQXZhaWxhYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlY2hlY2tBdmFpbGFiaWxpdHkoKTtcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQWxsIHNvdXJjZXMgZmFpbGVkIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9JHtjb25maWcucm91dGUgIT09IHVuZGVmaW5lZCAmJiBgIChyb3V0ZSAke2NvbmZpZy5yb3V0ZX0pYCB8fCBcIlwifTogJHtlcnJvcnMuam9pbihcIiB8IFwiKSB8fCBcIm5vIHNvdXJjZXMgYXZhaWxhYmxlXCJ9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJ1bldyaXRlPFQ+KHJvdXRlOiBudW1iZXIgfCB1bmRlZmluZWQsIHJ1bjogKGFyY2hpdmVzOiBJQXJjaGl2ZXMpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgbGV0IHJldHJpZWRXcm9uZ1dpbmRvdyA9IGZhbHNlO1xuICAgICAgICBsZXQgcmV0cmllZFdyb25nUm91dGUgPSBmYWxzZTtcbiAgICAgICAgbGV0IHJlY2hlY2tlZEF2YWlsYWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5nZXRTdGF0ZSgpO1xuICAgICAgICAgICAgbGV0IHRhcmdldCA9IHN0YXRlLnNvdXJjZXMuZmluZCh4ID0+IGNvbmZpZ0FjY2VwdHNXcml0ZXMoeC5jb25maWcpICYmIChyb3V0ZSA9PT0gdW5kZWZpbmVkIHx8IHJvdXRlQ29udGFpbnMoeC5jb25maWcucm91dGUsIHJvdXRlKSkpO1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlY2hlY2tlZEF2YWlsYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICByZWNoZWNrZWRBdmFpbGFiaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlY2hlY2tBdmFpbGFiaWxpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc291cmNlIGFjY2VwdHMgd3JpdGVzIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9JHtyb3V0ZSAhPT0gdW5kZWZpbmVkICYmIGAgKHJvdXRlICR7cm91dGV9KWAgfHwgXCJcIn0gKGV2ZXJ5IHNvdXJjZSBpcyBvdXRzaWRlIGl0cyB2YWxpZCB3aW5kb3cgb3Igb3V0c2lkZSB0aGUga2V5J3Mgcm91dGUpYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0YXJnZXQud3JpdGUocnVuKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9IFN0cmluZygoZSBhcyBFcnJvcikuc3RhY2sgPz8gZSk7XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoU1RPUkFHRV9XUk9OR19WQUxJRF9XSU5ET1cpICYmICFyZXRyaWVkV3JvbmdXaW5kb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0cmllZFdyb25nV2luZG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcmVwYXJlV3JvbmdUYXJnZXRSZXRyeShzdGF0ZSwgXCJ3aW5kb3dcIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhTVE9SQUdFX1dST05HX1JPVVRFKSAmJiAhcmV0cmllZFdyb25nUm91dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0cmllZFdyb25nUm91dGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmVXcm9uZ1RhcmdldFJldHJ5KHN0YXRlLCBcInJvdXRlXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQubm90ZUZhaWx1cmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWNoZWNrZWRBdmFpbGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2hlY2tlZEF2YWlsYWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlY2hlY2tBdmFpbGFiaWxpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxhc3RDb25maWdSZWZyZXNoID0gMDtcbiAgICBwcml2YXRlIGFzeW5jIHByZXBhcmVXcm9uZ1RhcmdldFJldHJ5KHN0YXRlOiBDaGFpblN0YXRlLCBraW5kOiBcIndpbmRvd1wiIHwgXCJyb3V0ZVwiKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChraW5kID09PSBcIndpbmRvd1wiKSB7XG4gICAgICAgICAgICBsZXQgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGxldCBuZWFyQm91bmRhcnkgPSBzdGF0ZS5zb3VyY2VzLnNvbWUoc291cmNlID0+IHNvdXJjZS5jb25maWcudmFsaWRXaW5kb3cuc29tZSh0ID0+IHQgPiAwICYmIHQgPCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiAmJiBNYXRoLmFicyh0IC0gbm93KSA8PSBXUk9OR19UQVJHRVRfQk9VTkRBUllfV0lORE9XKSk7XG4gICAgICAgICAgICBpZiAobmVhckJvdW5kYXJ5KSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFdyaXRlIHJlamVjdGVkIGJ5ICR7dGhpcy5nZXREZWJ1Z05hbWUoKX06IHJhY2VkIGEgdmFsaWQgd2luZG93IGJvdW5kYXJ5OyB3YWl0aW5nICR7V1JPTkdfVEFSR0VUX0JPVU5EQVJZX1JFVFJZX0RFTEFZIC8gMTAwMH1zIGFuZCByZXRyeWluZ2ApO1xuICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5KFdST05HX1RBUkdFVF9CT1VOREFSWV9SRVRSWV9ERUxBWSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChEYXRlLm5vdygpIC0gdGhpcy5sYXN0Q29uZmlnUmVmcmVzaCA8IENPTkZJR19SRUZSRVNIX1RIUk9UVExFKSByZXR1cm47XG4gICAgICAgIHRoaXMubGFzdENvbmZpZ1JlZnJlc2ggPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zb2xlLmxvZyhgV3JpdGUgcmVqZWN0ZWQgYnkgJHt0aGlzLmdldERlYnVnTmFtZSgpfSAod3JvbmcgJHtraW5kfSk6IG91ciBjb25maWcgaXMgc3RhbGUgKGxpa2VseSBhIGRlcGxveSBzd2l0Y2hvdmVyKTsgcmVmcmVzaGluZyBpdCBhbmQgcmV0cnlpbmdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQWN0aXZlQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0PFQ+KGNvbmZpZzogeyBhcGlPbmx5PzogYm9vbGVhbjsgd3JpdGU/OiBib29sZWFuOyByb3V0ZT86IG51bWJlciB9LCBydW46IChhcmNoaXZlczogSUFyY2hpdmVzKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucnVuKHN0YXRlLCBjb25maWcsIHJ1bik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHdhaXRpbmdGb3JBY2Nlc3MoKTogUHJvbWlzZTx7IGxpbms6IHN0cmluZzsgbWFjaGluZUlkOiBzdHJpbmc7IGlwOiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmdldFN0YXRlKCk7XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICBpZiAoc291cmNlLmFwaSBpbnN0YW5jZW9mIEFyY2hpdmVzUmVtb3RlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHdhaXRpbmcgPSBhd2FpdCBzb3VyY2UuYXBpLndhaXRpbmdGb3JBY2Nlc3MoKTtcbiAgICAgICAgICAgICAgICBpZiAod2FpdGluZykgcmV0dXJuIHdhaXRpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0KGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IHsgcmFuZ2U/OiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0gfSk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldDIoZmlsZU5hbWUsIGNvbmZpZyk7XG4gICAgICAgIHJldHVybiByZXN1bHQgJiYgcmVzdWx0LmRhdGEgfHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0MihmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiB7IHJhbmdlPzogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9IH0pOiBQcm9taXNlPHsgZGF0YTogQnVmZmVyOyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7IHJvdXRlOiBnZXRSb3V0ZShmaWxlTmFtZSkgfSwgYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuZ2V0MihmaWxlTmFtZSwgY29uZmlnKSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRJbmZvKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcXVlc3QoeyByb3V0ZTogZ2V0Um91dGUoZmlsZU5hbWUpIH0sIGFyY2hpdmVzID0+IGFyY2hpdmVzLmdldEluZm8oZmlsZU5hbWUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdENvdmVyaW5nU291cmNlcyhzdGF0ZTogQ2hhaW5TdGF0ZSwgZXhjbHVkZWQ6IFNldDxTb3VyY2VXcmFwcGVyPik6IFNvdXJjZVdyYXBwZXJbXSB7XG4gICAgICAgIGxldCBjYW5kaWRhdGVzID0gc3RhdGUuc291cmNlcy5maWx0ZXIoeCA9PiBjb25maWdXaW5kb3dDdXJyZW50KHguY29uZmlnKSAmJiB4LmFwaSAmJiAhZXhjbHVkZWQuaGFzKHgpKTtcbiAgICAgICAgbGV0IGNob3NlbjogU291cmNlV3JhcHBlcltdID0gW107XG4gICAgICAgIGxldCBjb3ZlcmVkID0gMDtcbiAgICAgICAgd2hpbGUgKGNvdmVyZWQgPCAxKSB7XG4gICAgICAgICAgICBsZXQgYmVzdDogU291cmNlV3JhcHBlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBiZXN0RW5kID0gY292ZXJlZDtcbiAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IFtzdGFydCwgZW5kXSA9IHNvdXJjZS5jb25maWcucm91dGUgfHwgRlVMTF9ST1VURTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPiBjb3ZlcmVkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoZW5kID4gYmVzdEVuZCkge1xuICAgICAgICAgICAgICAgICAgICBiZXN0RW5kID0gZW5kO1xuICAgICAgICAgICAgICAgICAgICBiZXN0ID0gc291cmNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYmVzdCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvdmVyIHRoZSBmdWxsIHJvdXRlIHNwYWNlIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9OiB0aGUgYXZhaWxhYmxlIHNvdXJjZXMgb25seSBjb3ZlciB1cCB0byAke2NvdmVyZWR9IChzb21lIHNoYXJkcyBhcmUgZG93biBvciBVUkwtb25seSlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNob3Nlbi5wdXNoKGJlc3QpO1xuICAgICAgICAgICAgY292ZXJlZCA9IGJlc3RFbmQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNob3NlbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJ1bk9uQ292ZXJpbmc8VD4ocnVuOiAoYXJjaGl2ZXM6IElBcmNoaXZlcykgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VFtdPiB7XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgbGV0IGV4Y2x1ZGVkID0gbmV3IFNldDxTb3VyY2VXcmFwcGVyPigpO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgbGV0IGNvdmVyaW5nID0gdGhpcy5zZWxlY3RDb3ZlcmluZ1NvdXJjZXMoc3RhdGUsIGV4Y2x1ZGVkKTtcbiAgICAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY292ZXJpbmcubWFwKGFzeW5jIHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGFwaSA9IHNvdXJjZS5hcGk7XG4gICAgICAgICAgICAgICAgaWYgKCFhcGkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3NvdXJjZS5jb25maWcudXJsfSBoYXMgVVJMLW9ubHkgYWNjZXNzLCB3aGljaCBjYW5ub3Qgc2VydmUgdGhpcyBvcGVyYXRpb25gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGF3YWl0IHJ1bihhcGkpIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmlzQ29ubmVjdGVkKCkpIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5ub3RlRmFpbHVyZSgpO1xuICAgICAgICAgICAgICAgICAgICBleGNsdWRlZC5hZGQoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0cy5ldmVyeSh4ID0+IHgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKHggPT4gKHggYXMgeyB2YWx1ZTogVCB9KS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZChwcmVmaXg6IHN0cmluZywgY29uZmlnPzogeyBzaGFsbG93PzogYm9vbGVhbjsgdHlwZTogXCJmaWxlc1wiIHwgXCJmb2xkZXJzXCIgfSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmZpbmRJbmZvKHByZWZpeCwgY29uZmlnKSkubWFwKHggPT4geC5wYXRoKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGZpbmRJbmZvKHByZWZpeDogc3RyaW5nLCBjb25maWc/OiB7IHNoYWxsb3c/OiBib29sZWFuOyB0eXBlOiBcImZpbGVzXCIgfCBcImZvbGRlcnNcIiB9KTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IHRoaXMucnVuT25Db3ZlcmluZyhhcmNoaXZlcyA9PiBhcmNoaXZlcy5maW5kSW5mbyhwcmVmaXgsIGNvbmZpZykpO1xuICAgICAgICBsZXQgYnlQYXRoID0gbmV3IE1hcDxzdHJpbmcsIEFyY2hpdmVGaWxlSW5mbz4oKTtcbiAgICAgICAgZm9yIChsZXQgbGlzdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBmaWxlIG9mIGxpc3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXhpc3RpbmcgPSBieVBhdGguZ2V0KGZpbGUucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZyB8fCBmaWxlLmNyZWF0ZVRpbWUgPiBleGlzdGluZy5jcmVhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ5UGF0aC5zZXQoZmlsZS5wYXRoLCBmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1lcmdlZCA9IFsuLi5ieVBhdGgudmFsdWVzKCldO1xuICAgICAgICBzb3J0KG1lcmdlZCwgeCA9PiB4LnBhdGgpO1xuICAgICAgICByZXR1cm4gbWVyZ2VkO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q2hhbmdlc0FmdGVyKHRpbWU6IG51bWJlcik6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+IHtcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLnJ1bk9uQ292ZXJpbmcoYXN5bmMgYXJjaGl2ZXMgPT4ge1xuICAgICAgICAgICAgaWYgKCFhcmNoaXZlcy5nZXRDaGFuZ2VzQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YXJjaGl2ZXMuZ2V0RGVidWdOYW1lKCl9IGRvZXMgbm90IHN1cHBvcnQgZ2V0Q2hhbmdlc0FmdGVyYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgYXJjaGl2ZXMuZ2V0Q2hhbmdlc0FmdGVyKHRpbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGJ5UGF0aCA9IG5ldyBNYXA8c3RyaW5nLCBBcmNoaXZlRmlsZUluZm8+KCk7XG4gICAgICAgIGZvciAobGV0IGxpc3Qgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBsaXN0KSB7XG4gICAgICAgICAgICAgICAgbGV0IGV4aXN0aW5nID0gYnlQYXRoLmdldChmaWxlLnBhdGgpO1xuICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmcgfHwgZmlsZS5jcmVhdGVUaW1lID4gZXhpc3RpbmcuY3JlYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICBieVBhdGguc2V0KGZpbGUucGF0aCwgZmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBtZXJnZWQgPSBbLi4uYnlQYXRoLnZhbHVlcygpXTtcbiAgICAgICAgc29ydChtZXJnZWQsIHggPT4geC5wYXRoKTtcbiAgICAgICAgcmV0dXJuIG1lcmdlZDtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldFN5bmNTdGF0dXMoKTogUHJvbWlzZTxBcmNoaXZlc1N5bmNTdGF0dXM+IHtcbiAgICAgICAgbGV0IHN0YXR1c2VzID0gYXdhaXQgdGhpcy5ydW5PbkNvdmVyaW5nKGFzeW5jIGFyY2hpdmVzID0+IHtcbiAgICAgICAgICAgIGlmICghYXJjaGl2ZXMuZ2V0U3luY1N0YXR1cykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHthcmNoaXZlcy5nZXREZWJ1Z05hbWUoKX0gZG9lcyBub3Qgc3VwcG9ydCBnZXRTeW5jU3RhdHVzYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgYXJjaGl2ZXMuZ2V0U3luY1N0YXR1cygpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFsbFNjYW5zQ29tcGxldGU6IHN0YXR1c2VzLmV2ZXJ5KHggPT4geC5hbGxTY2Fuc0NvbXBsZXRlKSxcbiAgICAgICAgICAgIGluZGV4U2l6ZTogc3RhdHVzZXMucmVkdWNlKChzdW0sIHgpID0+IHN1bSArIHguaW5kZXhTaXplLCAwKSxcbiAgICAgICAgICAgIHNvdXJjZXM6IHN0YXR1c2VzLmZsYXRNYXAoeCA9PiB4LnNvdXJjZXMpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnKCk6IFByb21pc2U8QXJjaGl2ZXNDb25maWc+IHtcbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5nZXRTdGF0ZSgpO1xuICAgICAgICBpZiAoIXN0YXRlLnNvdXJjZXMuc29tZSh4ID0+IHguYXBpKSkgcmV0dXJuIHsgcmVtb3RlQ29uZmlnOiBzdGF0ZS5jb25maWcgfTtcbiAgICAgICAgbGV0IGNvbmZpZyA9IGF3YWl0IHRoaXMucnVuKHN0YXRlLCB7IGFwaU9ubHk6IHRydWUgfSwgYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuZ2V0Q29uZmlnKCkpO1xuICAgICAgICByZXR1cm4geyAuLi5jb25maWcsIHJlbW90ZUNvbmZpZzogc3RhdGUuY29uZmlnIH07XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBoYXNXcml0ZUFjY2VzcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5nZXRTdGF0ZSgpO1xuICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc3RhdGUuc291cmNlcykge1xuICAgICAgICAgICAgaWYgKCFjb25maWdBY2NlcHRzV3JpdGVzKHNvdXJjZS5jb25maWcpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghYXdhaXQgc291cmNlLmhhc1dyaXRlQWNjZXNzKCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0KGZpbGVOYW1lOiBzdHJpbmcsIGRhdGE6IEJ1ZmZlciwgY29uZmlnPzogeyBsYXN0TW9kaWZpZWQ/OiBudW1iZXIgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmIChmaWxlTmFtZSA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXRSb3V0aW5nQ29uZmlnKGRhdGEsIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKFZBUklBQkxFX1NIQVJEKSAmJiBwYXJzZVZhcmlhYmxlUm91dGUoZmlsZU5hbWUpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNldFZhcmlhYmxlU2hhcmQoZmlsZU5hbWUsIGRhdGEsIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KHsgd3JpdGU6IHRydWUsIHJvdXRlOiBnZXRSb3V0ZShmaWxlTmFtZSkgfSwgYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuc2V0KGZpbGVOYW1lLCBkYXRhLCBjb25maWcpKTtcbiAgICAgICAgcmV0dXJuIGZpbGVOYW1lO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2V0Um91dGluZ0NvbmZpZyhkYXRhOiBCdWZmZXIsIGNvbmZpZz86IHsgbGFzdE1vZGlmaWVkPzogbnVtYmVyIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmdldFN0YXRlKCk7XG4gICAgICAgIGxldCB3cml0ZVRpbWUgPSBjb25maWc/Lmxhc3RNb2RpZmllZCB8fCBEYXRlLm5vdygpO1xuICAgICAgICBsZXQgd3JpdHRlbjogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgbGV0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgY29uc29sZS5sb2coYFdyaXRpbmcgc3RvcmFnZSByb3V0aW5nIGNvbmZpZyBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfSB0byBldmVyeSBub2RlICh3cml0ZSB0aW1lICR7bmV3IERhdGUod3JpdGVUaW1lKS50b0lTT1N0cmluZygpfSk6ICR7ZGF0YS50b1N0cmluZyhcInV0ZjhcIikuc2xpY2UoMCwgMjAwMCl9YCk7XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICBpZiAoc2Vlbi5oYXMoc291cmNlLmNvbmZpZy51cmwpKSBjb250aW51ZTtcbiAgICAgICAgICAgIHNlZW4uYWRkKHNvdXJjZS5jb25maWcudXJsKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgc291cmNlLndyaXRlKGFyY2hpdmVzID0+IGFyY2hpdmVzLnNldChST1VUSU5HX0ZJTEUsIGRhdGEsIHsgbGFzdE1vZGlmaWVkOiB3cml0ZVRpbWUgfSkpO1xuICAgICAgICAgICAgICAgIHdyaXR0ZW4ucHVzaChzb3VyY2UuY29uZmlnLnVybCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFdyb3RlIHRoZSBzdG9yYWdlIHJvdXRpbmcgY29uZmlnIHRvICR7c291cmNlLmNvbmZpZy51cmx9YCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYCR7c291cmNlLmNvbmZpZy51cmx9OiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEFjdGl2ZUNvbmZpZygpO1xuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdG9yYWdlIHJvdXRpbmcgY29uZmlnIHdyaXRlIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9IGZhaWxlZCBvbiAke2Vycm9ycy5sZW5ndGh9IG9mICR7c2Vlbi5zaXplfSBub2RlcyAoc3VjY2VlZGVkIG9uOiAke3dyaXR0ZW4uam9pbihcIiwgXCIpIHx8IFwibm9uZVwifSk6ICR7ZXJyb3JzLmpvaW4oXCIgfCBcIil9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJPVVRJTkdfRklMRTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGRlbChmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdCh7IHdyaXRlOiB0cnVlLCByb3V0ZTogZ2V0Um91dGUoZmlsZU5hbWUpIH0sIGFyY2hpdmVzID0+IGFyY2hpdmVzLmRlbChmaWxlTmFtZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2V0VmFyaWFibGVTaGFyZChrZXk6IHN0cmluZywgZGF0YTogQnVmZmVyLCBjb25maWc/OiB7IGxhc3RNb2RpZmllZD86IG51bWJlciB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgbGV0IHJlY2hlY2tlZEF2YWlsYWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5nZXRTdGF0ZSgpO1xuICAgICAgICAgICAgbGV0IHRhcmdldHNCeVJvdXRlID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZVdyYXBwZXI+KCk7XG4gICAgICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc3RhdGUuc291cmNlcykge1xuICAgICAgICAgICAgICAgIGlmICghY29uZmlnQWNjZXB0c1dyaXRlcyhzb3VyY2UuY29uZmlnKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgbGV0IHJvdXRlS2V5ID0gSlNPTi5zdHJpbmdpZnkoc291cmNlLmNvbmZpZy5yb3V0ZSB8fCBGVUxMX1JPVVRFKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldHNCeVJvdXRlLmhhcyhyb3V0ZUtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c0J5Um91dGUuc2V0KHJvdXRlS2V5LCBzb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB0YXJnZXRzID0gWy4uLnRhcmdldHNCeVJvdXRlLnZhbHVlcygpXTtcbiAgICAgICAgICAgIHNvcnQodGFyZ2V0cywgeCA9PiB4LmdldExhdGVuY3koKSk7XG4gICAgICAgICAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgW3N0YXJ0LCBlbmRdID0gdGFyZ2V0LmNvbmZpZy5yb3V0ZSB8fCBGVUxMX1JPVVRFO1xuICAgICAgICAgICAgICAgIGxldCBmdWxsS2V5ID0ga2V5LnJlcGxhY2UoVkFSSUFCTEVfU0hBUkQsIFZBUklBQkxFX1NIQVJEICsgXCJfXCIgKyAoc3RhcnQgKyBNYXRoLnJhbmRvbSgpICogKGVuZCAtIHN0YXJ0KSkpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRhcmdldC53cml0ZShhcmNoaXZlcyA9PiBhcmNoaXZlcy5zZXQoZnVsbEtleSwgZGF0YSwgY29uZmlnKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdWxsS2V5O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5pc0Nvbm5lY3RlZCgpKSB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQubm90ZUZhaWx1cmUoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFZhcmlhYmxlLXNoYXJkIHdyaXRlIHRhcmdldCAke3RhcmdldC5nZXREZWJ1Z05hbWUoKX0gaXMgZG93bjsgbW92aW5nIHRvIHRoZSBuZXh0LWxvd2VzdC1sYXRlbmN5IHNoYXJkYCk7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKFN0cmluZygoZSBhcyBFcnJvcikuc3RhY2sgPz8gZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVjaGVja2VkQXZhaWxhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgcmVjaGVja2VkQXZhaWxhYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlY2hlY2tBdmFpbGFiaWxpdHkoKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXZlcnkgdmFyaWFibGUtc2hhcmQgd3JpdGUgdGFyZ2V0IGZhaWxlZCBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfTogJHtlcnJvcnMuam9pbihcIiB8IFwiKSB8fCBcIm5vIHNvdXJjZXMgYWNjZXB0IHdyaXRlc1wifWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldExhcmdlRmlsZShjb25maWc6IHsgcGF0aDogc3RyaW5nOyBnZXROZXh0RGF0YSgpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoY29uZmlnLnBhdGguaW5jbHVkZXMoVkFSSUFCTEVfU0hBUkQpICYmIHBhcnNlVmFyaWFibGVSb3V0ZShjb25maWcucGF0aCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzZXRMYXJnZUZpbGUgZG9lcyBub3Qgc3VwcG9ydCBWQVJJQUJMRV9TSEFSRCBrZXlzICh0aGVyZSBpcyBubyB3YXkgdG8gcmV0dXJuIHRoZSBtYXRlcmlhbGl6ZWQga2V5KTsgd3JpdGUgdGhlIGZpbGUgd2l0aCBzZXQsIG9yIG1hdGVyaWFsaXplIHRoZSBrZXkgeW91cnNlbGYuIEtleTogJHtKU09OLnN0cmluZ2lmeShjb25maWcucGF0aCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJvdXRlID0gZ2V0Um91dGUoY29uZmlnLnBhdGgpO1xuICAgICAgICBsZXQgcmVjaGVja2VkQXZhaWxhYmlsaXR5ID0gZmFsc2U7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmdldFN0YXRlKCk7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gc3RhdGUuc291cmNlcy5maW5kKHggPT4gY29uZmlnQWNjZXB0c1dyaXRlcyh4LmNvbmZpZykgJiYgcm91dGVDb250YWlucyh4LmNvbmZpZy5yb3V0ZSwgcm91dGUpKTtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWNoZWNrZWRBdmFpbGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVjaGVja2VkQXZhaWxhYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWNoZWNrQXZhaWxhYmlsaXR5KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNvdXJjZSBhY2NlcHRzIHdyaXRlcyBmb3Igc2V0TGFyZ2VGaWxlIG9uICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0gKHJvdXRlICR7cm91dGV9KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0YXJnZXQud3JpdGUoYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuc2V0TGFyZ2VGaWxlKGNvbmZpZykpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldC5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5ub3RlRmFpbHVyZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFVSTChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmdldFN0YXRlKCk7XG4gICAgICAgIGxldCByb3V0ZSA9IGdldFJvdXRlKHBhdGgpO1xuICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc3RhdGUuc291cmNlcykge1xuICAgICAgICAgICAgaWYgKHNvdXJjZS5jb25maWcucHVibGljID09PSBmYWxzZSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIXJvdXRlQ29udGFpbnMoc291cmNlLmNvbmZpZy5yb3V0ZSwgcm91dGUpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChzb3VyY2UudXJsKSByZXR1cm4gYXdhaXQgc291cmNlLnVybC5nZXRVUkwocGF0aCk7XG4gICAgICAgICAgICBpZiAoc291cmNlLmFwaSkgcmV0dXJuIGF3YWl0IHNvdXJjZS5hcGkuZ2V0VVJMKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcHVibGljIHNvdXJjZSBjb3ZlcmluZyByb3V0ZSAke3JvdXRlfSB0byBidWlsZCBhIFVSTCBmcm9tIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlUm91dGluZ1B1c2g/LigpO1xuICAgICAgICBpZiAodGhpcy5wb2xsVGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5wb2xsVGltZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluaXRSZXRyeVRpbWVyKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5pbml0UmV0cnlUaW1lcik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0YXRlUHJvbWlzZSA9IHRoaXMuc3RhdGVQcm9taXNlO1xuICAgICAgICBpZiAoc3RhdGVQcm9taXNlKSB7XG4gICAgICAgICAgICB2b2lkIHN0YXRlUHJvbWlzZS50aGVuKHN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc3RhdGUuc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2UuZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sICgpID0+IHsgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBcmNoaXZlcyhjb25maWc6IFJlbW90ZUNvbmZpZyB8IFJlbW90ZUNvbmZpZ0Jhc2UpOiBBcmNoaXZlc0NoYWluIHtcbiAgICByZXR1cm4gbmV3IEFyY2hpdmVzQ2hhaW4oY29uZmlnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2FsbFNlcnZlcjxUPih1cmw6IHN0cmluZywgcnVuOiAoY29udHJvbGxlcjogdHlwZW9mIFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyLm5vZGVzW3N0cmluZ10pID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICBTb2NrZXRGdW5jdGlvbi5FTkFCTEVfQ0xJRU5UX01PREUgPSB0cnVlO1xuICAgIGxldCBwYXJzZWQgPSBwYXJzZVN0b3JhZ2VVcmwodXJsKTtcbiAgICBsZXQgbm9kZUlkID0gU29ja2V0RnVuY3Rpb24uY29ubmVjdCh7IGFkZHJlc3M6IHBhcnNlZC5hZGRyZXNzLCBwb3J0OiBwYXJzZWQucG9ydCB9KTtcbiAgICBsZXQgY29udHJvbGxlciA9IFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyLm5vZGVzW25vZGVJZF07XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJ1bihjb250cm9sbGVyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICghU3RyaW5nKChlIGFzIEVycm9yKS5zdGFjayA/PyBlKS5pbmNsdWRlcyhTVE9SQUdFX05PVF9BVVRIRU5USUNBVEVEKSkgdGhyb3cgZTtcbiAgICAgICAgYXdhaXQgYXV0aGVudGljYXRlU3RvcmFnZSh7IGFkZHJlc3M6IHBhcnNlZC5hZGRyZXNzLCBwb3J0OiBwYXJzZWQucG9ydCwgbm9kZUlkIH0pO1xuICAgICAgICByZXR1cm4gYXdhaXQgcnVuKGNvbnRyb2xsZXIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RTZXJ2ZXJCdWNrZXRzKGNvbmZpZzogeyB1cmw6IHN0cmluZzsgYWNjb3VudDogc3RyaW5nIH0pOiBQcm9taXNlPFNlcnZlckJ1Y2tldEluZm9bXT4ge1xuICAgIHJldHVybiBhd2FpdCBjYWxsU2VydmVyKGNvbmZpZy51cmwsIGNvbnRyb2xsZXIgPT4gY29udHJvbGxlci5saXN0QnVja2V0cyhjb25maWcuYWNjb3VudCkpO1xufVxuXG4vKiogVGhlIGxpdmUsIGluLW1lbW9yeSBzdGF0ZSBvZiBvbmUgYnVja2V0IG9uIGEgc2VydmVyIChyb3V0aW5nIGNvbmZpZyBpbmNsdWRlZCksIG9yIGEgc3RyaW5nIHNheWluZyB3aHkgaXQgaXMgdW5hdmFpbGFibGUuIENoZWFwIC0gaXQgbmV2ZXIgdG91Y2hlcyB0aGUgc2VydmVyJ3MgZGlzayAtIGJ1dCBvbmx5IHdvcmtzIHdoaWxlIHRoYXQgYnVja2V0IGlzIGxvYWRlZCB0aGVyZS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTZXJ2ZXJBY3RpdmVCdWNrZXQoY29uZmlnOiB7IHVybDogc3RyaW5nOyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9KTogUHJvbWlzZTxBY3RpdmVCdWNrZXRJbmZvIHwgc3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IGNhbGxTZXJ2ZXIoY29uZmlnLnVybCwgY29udHJvbGxlciA9PiBjb250cm9sbGVyLmdldEFjdGl2ZUJ1Y2tldChjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUpKTtcbn1cblxuLyoqIFRoZSBidWNrZXRzIGEgc2VydmVyIGN1cnJlbnRseSBoYXMgbG9hZGVkLiBBZG1pbiBvbmx5LCBzbyBpbiBwcmFjdGljZSB0aGlzIGlzIG91ciBvd24gbWFjaGluZSdzIG90aGVyIHByb2Nlc3MgLSBhIGRlcGxveSBzdWNjZXNzb3IgYXNraW5nIGl0cyBwcmVkZWNlc3NvciB3aGF0IGlzIGFjdHVhbGx5IGluIHVzZS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0U2VydmVyQWN0aXZlQnVja2V0S2V5cyhjb25maWc6IHsgdXJsOiBzdHJpbmcgfSk6IFByb21pc2U8eyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9W10+IHtcbiAgICByZXR1cm4gYXdhaXQgY2FsbFNlcnZlcihjb25maWcudXJsLCBjb250cm9sbGVyID0+IGNvbnRyb2xsZXIuYWRtaW5MaXN0QWN0aXZlQnVja2V0cygpKTtcbn1cblxuLyoqIFRlbGxzIGEgc2VydmVyIHRvIGxvYWQgb25lIG9mIGl0cyBidWNrZXRzIGludG8gbWVtb3J5IChzdGFydGluZyBpdHMgc3luY2hyb25pemF0aW9uKSBhbmQgcmV0dXJucyBpdHMgbGl2ZSBzdGF0ZSwgb3IgYSBzdHJpbmcgc2F5aW5nIHdoeSBpdCBjb3VsZCBub3QgYmUgbG9hZGVkLiBPbmx5IHRvdWNoZXMgdGhhdCBzZXJ2ZXIgLSBub3RoaW5nIGlzIHdyaXR0ZW4gYW5kIG5vIG90aGVyIHNvdXJjZSBpcyBjb250YWN0ZWQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVTZXJ2ZXJCdWNrZXQoY29uZmlnOiB7IHVybDogc3RyaW5nOyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZyB9KTogUHJvbWlzZTxBY3RpdmVCdWNrZXRJbmZvIHwgc3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IGNhbGxTZXJ2ZXIoY29uZmlnLnVybCwgY29udHJvbGxlciA9PiBjb250cm9sbGVyLmFjdGl2YXRlQnVja2V0KGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSkpO1xufVxuXG4vKiogWmVyb2VzIHRoZSB3cml0ZSBzdGF0aXN0aWNzIGxpc3RTZXJ2ZXJCdWNrZXRzIHJlcG9ydHMsIGZvciBldmVyeSBidWNrZXQgaW4gdGhlIGFjY291bnQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYXJTZXJ2ZXJXcml0ZVN0YXRzKGNvbmZpZzogeyB1cmw6IHN0cmluZzsgYWNjb3VudDogc3RyaW5nIH0pOiBQcm9taXNlPHsgY2xlYXJlZEJ1Y2tldHM6IG51bWJlciB9PiB7XG4gICAgcmV0dXJuIGF3YWl0IGNhbGxTZXJ2ZXIoY29uZmlnLnVybCwgY29udHJvbGxlciA9PiBjb250cm9sbGVyLmNsZWFyV3JpdGVTdGF0cyhjb25maWcuYWNjb3VudCkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QnVja2V0SW5mbyhjb25maWc6IHsgdXJsOiBzdHJpbmcgfSk6IFByb21pc2U8QXJjaGl2ZXNDb25maWc+IHtcbiAgICBsZXQgcmVtb3RlID0gbmV3IEFyY2hpdmVzUmVtb3RlKHsgdXJsOiBjb25maWcudXJsLCB3YWl0Rm9yQWNjZXNzOiBmYWxzZSB9KTtcbiAgICByZXR1cm4gYXdhaXQgcmVtb3RlLmdldENvbmZpZygpO1xufVxuIl19
790
- /* _JS_SOURCE_HASH = "a39e2afa2633773f50196f9d2a18c42d96bcd5313424476730e8fb797cd640ab"; */
800
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQXJjaGl2ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGVBcmNoaXZlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBd0Q7QUFDeEQsMkRBQXFEO0FBQ3JELDRDQUlzQjtBQUN0QixpREFJd0I7QUFDeEIsK0RBQW1FO0FBQ25FLG1FQUFnRTtBQUNoRSxxREFBd0Y7QUFDeEYsdUVBQW1FO0FBQ25FLDRDQUFpRDtBQUNqRCw2REFBNEg7QUFDNUgsMkRBQXlGO0FBQ3pGLG1EQUFrRztBQUVsRyxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzNDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMvQyxNQUFNLGlDQUFpQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDcEQsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUUvQyxxTkFBcU47QUFDck4sK0NBQXFGO0FBQTVFLDhHQUFBLGNBQWMsT0FBQTtBQUFFLGlIQUFBLGlCQUFpQixPQUFBO0FBQUUsZ0hBQUEsZ0JBQWdCLE9BQUE7QUFFNUQsU0FBZ0IsaUJBQWlCLENBQUMsTUFBc0M7SUFDcEUsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSw2QkFBaUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFBLGdDQUFpQixFQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3RMLENBQUM7SUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFBLDZCQUFj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QkFBc0IsRUFBRSxDQUFDLENBQUM7QUFDM0YsQ0FBQztBQUZELGdFQUVDO0FBRUQsc1BBQXNQO0FBQy9PLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxNQUE0RDtJQUNuRyxPQUFPLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDcEgsQ0FBQztBQUZELG9EQUVDO0FBRUQsOEZBQThGO0FBQ3ZGLEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxNQUF3QztJQUNoRixPQUFPLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2xHLENBQUM7QUFGRCxzREFFQztBQUVNLEtBQUssVUFBVSxhQUFhLENBQUMsTUFBdUI7SUFDdkQsSUFBSSxNQUFNLEdBQUcsSUFBSSwrQkFBYyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0UsT0FBTyxNQUFNLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNwQyxDQUFDO0FBSEQsc0NBR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc05vZGUsIHNvcnQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2JhdGNoaW5nXCI7XG5pbXBvcnQge1xuICAgIElBcmNoaXZlcywgUmVtb3RlQ29uZmlnLCBSZW1vdGVDb25maWdCYXNlLCBIb3N0ZWRDb25maWcsIEJhY2tibGF6ZUNvbmZpZyxcbiAgICBBcmNoaXZlRmlsZUluZm8sIEFyY2hpdmVzQ29uZmlnLCBBcmNoaXZlc1N5bmNTdGF0dXMsIFNUT1JBR0VfV1JPTkdfVkFMSURfV0lORE9XLFxuICAgIFNUT1JBR0VfV1JPTkdfUk9VVEUsIEZVTExfUk9VVEUsIFZBUklBQkxFX1NIQVJELFxufSBmcm9tIFwiLi4vSUFyY2hpdmVzXCI7XG5pbXBvcnQge1xuICAgIFJPVVRJTkdfRklMRSwgZ2V0Q29uZmlnVmVyc2lvbiwgcGFyc2VIb3N0ZWRVcmwsIHBhcnNlQmFja2JsYXplVXJsLFxuICAgIG5vcm1hbGl6ZVJlbW90ZUNvbmZpZywgbm9ybWFsaXplU291cmNlLCBzZXJpYWxpemVSZW1vdGVDb25maWcsXG4gICAgZ2V0Um91dGUsIHJvdXRlQ29udGFpbnMsIHBhcnNlVmFyaWFibGVSb3V0ZSxcbn0gZnJvbSBcIi4vcmVtb3RlQ29uZmlnXCI7XG5pbXBvcnQgeyByZXNvbHZlSW50ZXJtZWRpYXRlU291cmNlcyB9IGZyb20gXCIuL2ludGVybWVkaWF0ZVNvdXJjZXNcIjtcbmltcG9ydCB7IFNvY2tldEZ1bmN0aW9uIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9Tb2NrZXRGdW5jdGlvblwiO1xuaW1wb3J0IHsgQXJjaGl2ZXNSZW1vdGUsIHBhcnNlU3RvcmFnZVVybCwgYXV0aGVudGljYXRlU3RvcmFnZSB9IGZyb20gXCIuL0FyY2hpdmVzUmVtb3RlXCI7XG5pbXBvcnQgeyBvblNlcnZlclJvdXRpbmdDaGFuZ2VkIH0gZnJvbSBcIi4vc3RvcmFnZUNsaWVudENvbnRyb2xsZXJcIjtcbmltcG9ydCB7IEFyY2hpdmVzQmFja2JsYXplIH0gZnJvbSBcIi4uL2JhY2tibGF6ZVwiO1xuaW1wb3J0IHsgZ2V0U3RvcmFnZVNlcnZlckNvbmZpZ09wdGlvbmFsLCBnZXRMb2NhbEFyY2hpdmVzLCBTZXJ2ZXJCdWNrZXRJbmZvLCBBY3RpdmVCdWNrZXRJbmZvIH0gZnJvbSBcIi4vc3RvcmFnZVNlcnZlclN0YXRlXCI7XG5pbXBvcnQgeyBSZW1vdGVTdG9yYWdlQ29udHJvbGxlciwgU1RPUkFHRV9OT1RfQVVUSEVOVElDQVRFRCB9IGZyb20gXCIuL3N0b3JhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBTb3VyY2VXcmFwcGVyLCBSRVRSWV9TVEFSVF9ERUxBWSwgUkVUUllfTUFYX0RFTEFZLCBSRVRSWV9HUk9XVEggfSBmcm9tIFwiLi9zb3VyY2VXcmFwcGVyXCI7XG5cbmNvbnN0IENPTkZJR19QT0xMX0lOVEVSVkFMID0gNSAqIDYwICogMTAwMDtcbmNvbnN0IFdST05HX1RBUkdFVF9CT1VOREFSWV9XSU5ET1cgPSAzMCAqIDEwMDA7XG5jb25zdCBXUk9OR19UQVJHRVRfQk9VTkRBUllfUkVUUllfREVMQVkgPSAxNSAqIDEwMDA7XG5jb25zdCBDT05GSUdfUkVGUkVTSF9USFJPVFRMRSA9IDMwICogMTAwMDtcbmNvbnN0IEFWQUlMQUJJTElUWV9SRUNIRUNLX1RIUk9UVExFID0gNSAqIDEwMDA7XG5cbi8qKiBUaGUgYWRkcmVzcywgcG9ydCwgYWNjb3VudCwgYW5kIGJ1Y2tldCBuYW1lIGEgYnVja2V0IHJvdXRpbmcgVVJMIGFkZHJlc3Nlcy4gVGhyb3dzIHdoZW4gdGhlIFVSTCBpc24ndCBhIGhvc3RlZCBidWNrZXQgcm91dGluZyBVUkwgKGh0dHBzOi8vaG9zdDpwb3J0L2ZpbGUvPGFjY291bnQ+LzxidWNrZXROYW1lPi9zdG9yYWdlL3N0b3JhZ2Vyb3V0aW5nLmpzb24pLiAqL1xuZXhwb3J0IHsgcGFyc2VIb3N0ZWRVcmwsIHBhcnNlQmFja2JsYXplVXJsLCBnZXRCdWNrZXRCYXNlVXJsIH0gZnJvbSBcIi4vcmVtb3RlQ29uZmlnXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBcGlBcmNoaXZlcyhzb3VyY2U6IEhvc3RlZENvbmZpZyB8IEJhY2tibGF6ZUNvbmZpZyk6IElBcmNoaXZlcyB7XG4gICAgaWYgKHNvdXJjZS50eXBlID09PSBcImJhY2tibGF6ZVwiKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJjaGl2ZXNCYWNrYmxhemUoeyBidWNrZXROYW1lOiBwYXJzZUJhY2tibGF6ZVVybChzb3VyY2UudXJsKS5idWNrZXROYW1lLCBwdWJsaWM6IHNvdXJjZS5wdWJsaWMsIGltbXV0YWJsZTogc291cmNlLmltbXV0YWJsZSwgYWxsb3dlZE9yaWdpbnM6IHNvdXJjZS5hbGxvd2VkT3JpZ2lucyB9KTtcbiAgICB9XG4gICAgbGV0IHBhcnNlZCA9IHBhcnNlSG9zdGVkVXJsKHNvdXJjZS51cmwpO1xuICAgIGxldCBzZXJ2ZXIgPSBpc05vZGUoKSAmJiBnZXRTdG9yYWdlU2VydmVyQ29uZmlnT3B0aW9uYWwoKSB8fCB1bmRlZmluZWQ7XG4gICAgaWYgKHNlcnZlciAmJiBwYXJzZWQuYWRkcmVzcyA9PT0gc2VydmVyLmRvbWFpbiAmJiBwYXJzZWQucG9ydCA9PT0gc2VydmVyLnBvcnQpIHtcbiAgICAgICAgcmV0dXJuIGdldExvY2FsQXJjaGl2ZXMocGFyc2VkLmFjY291bnQsIHBhcnNlZC5idWNrZXROYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBcmNoaXZlc1JlbW90ZSh7IHVybDogc291cmNlLnVybCwgd2FpdEZvckFjY2VzczogZmFsc2UgfSk7XG59XG5cbnR5cGUgQ2hhaW5TdGF0ZSA9IHtcbiAgICBjb25maWc6IFJlbW90ZUNvbmZpZztcbiAgICBzb3VyY2VzOiBTb3VyY2VXcmFwcGVyW107XG59O1xuXG5mdW5jdGlvbiBjb25maWdXaW5kb3dDdXJyZW50KGNvbmZpZzogSG9zdGVkQ29uZmlnIHwgQmFja2JsYXplQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgbGV0IG5vdyA9IERhdGUubm93KCk7XG4gICAgbGV0IFtzdGFydCwgZW5kXSA9IGNvbmZpZy52YWxpZFdpbmRvdztcbiAgICByZXR1cm4gc3RhcnQgPD0gbm93ICYmIG5vdyA8IGVuZDtcbn1cblxuZnVuY3Rpb24gY29uZmlnQWNjZXB0c1dyaXRlcyhjb25maWc6IEhvc3RlZENvbmZpZyB8IEJhY2tibGF6ZUNvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb25maWdXaW5kb3dDdXJyZW50KGNvbmZpZyk7XG59XG5cbmV4cG9ydCBjbGFzcyBBcmNoaXZlc0NoYWluIGltcGxlbWVudHMgSUFyY2hpdmVzIHtcbiAgICBwcml2YXRlIGNvbmZpZ3VyZWQ6IFJlbW90ZUNvbmZpZztcbiAgICBwcml2YXRlIGFjdGl2ZUNvbmZpZzogUmVtb3RlQ29uZmlnO1xuICAgIHByaXZhdGUgc3RhdGVQcm9taXNlOiBQcm9taXNlPENoYWluU3RhdGU+IHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgaW5pdFJldHJ5RGVsYXkgPSBSRVRSWV9TVEFSVF9ERUxBWTtcbiAgICBwcml2YXRlIGluaXRSZXRyeVRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIHBvbGxUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgZGlzcG9zZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlUm91dGluZ1B1c2g6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZzogUmVtb3RlQ29uZmlnIHwgUmVtb3RlQ29uZmlnQmFzZSkge1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZWQgPSBub3JtYWxpemVSZW1vdGVDb25maWcoY29uZmlnKTtcbiAgICAgICAgdGhpcy5hY3RpdmVDb25maWcgPSB0aGlzLmNvbmZpZ3VyZWQ7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVSb3V0aW5nUHVzaCA9IG9uU2VydmVyUm91dGluZ0NoYW5nZWQoKCkgPT4ge1xuICAgICAgICAgICAgdm9pZCB0aGlzLnJlZnJlc2hBY3RpdmVDb25maWcoKS5jYXRjaCgoZTogRXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoYENvbmZpZyByZWZyZXNoIGZhaWxlZCBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfTogJHtlLnN0YWNrID8/IGV9YCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVidWdOYW1lKCkge1xuICAgICAgICBsZXQgdXJscyA9IHRoaXMuYWN0aXZlQ29uZmlnLnNvdXJjZXMubWFwKHggPT4gdHlwZW9mIHggPT09IFwic3RyaW5nXCIgJiYgeCB8fCAoeCBhcyBIb3N0ZWRDb25maWcgfCBCYWNrYmxhemVDb25maWcpLnVybCk7XG4gICAgICAgIHJldHVybiBgY2hhaW4gJHt1cmxzLmpvaW4oXCIsIFwiKX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3RhdGUoKTogUHJvbWlzZTxDaGFpblN0YXRlPiB7XG4gICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBBcmNoaXZlc0NoYWluICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0gaGFzIGJlZW4gZGlzcG9zZWRgKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlUHJvbWlzZSkge1xuICAgICAgICAgICAgbGV0IHByb21pc2UgPSB0aGlzLmluaXQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVQcm9taXNlID0gcHJvbWlzZTtcbiAgICAgICAgICAgIHByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0UmV0cnlEZWxheSA9IFJFVFJZX1NUQVJUX0RFTEFZO1xuICAgICAgICAgICAgfSwgKGU6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlzcG9zZWQgfHwgdGhpcy5pbml0UmV0cnlUaW1lcikgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFN0b3JhZ2UgaW5pdCBmYWlsZWQgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0sIHJldHJ5aW5nIGluICR7TWF0aC5yb3VuZCh0aGlzLmluaXRSZXRyeURlbGF5IC8gMTAwMCl9cy4gJHtlLnN0YWNrID8/IGV9YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0UmV0cnlUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRSZXRyeVRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kaXNwb3NlZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZVByb21pc2UgPT09IHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RhdGUoKS5jYXRjaCgoKSA9PiB7IH0pO1xuICAgICAgICAgICAgICAgIH0sIHRoaXMuaW5pdFJldHJ5RGVsYXkpO1xuICAgICAgICAgICAgICAgICh0aGlzLmluaXRSZXRyeVRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH0pLnVucmVmPy4oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRSZXRyeURlbGF5ID0gTWF0aC5taW4oUkVUUllfTUFYX0RFTEFZLCB0aGlzLmluaXRSZXRyeURlbGF5ICogUkVUUllfR1JPV1RIKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlUHJvbWlzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXQoKTogUHJvbWlzZTxDaGFpblN0YXRlPiB7XG4gICAgICAgIGxldCBjb25maWdzID0gdGhpcy5jb25maWd1cmVkLnNvdXJjZXMubWFwKG5vcm1hbGl6ZVNvdXJjZSk7XG4gICAgICAgIGxldCBmZXRjaGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoY29uZmlncy5tYXAoYXN5bmMgc291cmNlQ29uZmlnID0+IHtcbiAgICAgICAgICAgIGxldCBwcm9iZSA9IGF3YWl0IFNvdXJjZVdyYXBwZXIuY3JlYXRlKHNvdXJjZUNvbmZpZywgeyBiYWNrZ3JvdW5kOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBleGlzdGluZyA9IGF3YWl0IHByb2JlLnJlYWRSb3V0aW5nQ29uZmlnKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcHJvYmUsIHNvdXJjZUNvbmZpZywgcmVzcG9uZGVkOiB0cnVlLCBsYXRlbmN5OiBEYXRlLm5vdygpIC0gc3RhcnQsIGV4aXN0aW5nLCBlcnJvcjogXCJcIiB9O1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHByb2JlLCBzb3VyY2VDb25maWcsIHJlc3BvbmRlZDogZmFsc2UsIGxhdGVuY3k6IDAsIGV4aXN0aW5nOiB1bmRlZmluZWQsIGVycm9yOiBgJHtzb3VyY2VDb25maWcudXJsfTogJHsoZSBhcyBFcnJvcikuc3RhY2sgPz8gZX1gIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9IGZldGNoZXMuZmluZCh4ID0+IHgucmVzcG9uZGVkKTtcbiAgICAgICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBpbml0aWFsaXplIHN0b3JhZ2UgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX06IG5vIHNvdXJjZSBhbnN3ZXJlZC4gJHtmZXRjaGVzLm1hcCh4ID0+IHguZXJyb3IpLmpvaW4oXCIgfCBcIil9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZXhpc3RpbmcgPSBmb3VuZC5leGlzdGluZztcbiAgICAgICAgICAgIGxldCBhY3RpdmUgPSB0aGlzLmNvbmZpZ3VyZWQ7XG4gICAgICAgICAgICBsZXQgbmVlZHNXcml0ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZ2V0Q29uZmlnVmVyc2lvbihleGlzdGluZykgPj0gZ2V0Q29uZmlnVmVyc2lvbih0aGlzLmNvbmZpZ3VyZWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZ1ZlcnNpb24oZXhpc3RpbmcpID09PSBnZXRDb25maWdWZXJzaW9uKHRoaXMuY29uZmlndXJlZCkgJiYgSlNPTi5zdHJpbmdpZnkoZXhpc3RpbmcpICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZ3VyZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEFyY2hpdmVzIGNvbmZpZ3VyYXRpb24gdXBkYXRlZCB3aXRob3V0IHVwZGF0aW5nIHRoZSB2ZXJzaW9uLCBmb3IgJHtmb3VuZC5zb3VyY2VDb25maWcudXJsfS4gVXBkYXRlcyB3aWxsIGJlIGlnbm9yZWQgdW50aWwgeW91IGluY3JlYXNlIHRoZSB2ZXJzaW9uLiBVc2luZzogJHtKU09OLnN0cmluZ2lmeShleGlzdGluZyl9LCBpZ25vcmluZzogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZ3VyZWQpfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY3RpdmUgPSBleGlzdGluZztcbiAgICAgICAgICAgICAgICBuZWVkc1dyaXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmVlZHNXcml0ZSkge1xuICAgICAgICAgICAgICAgIGxldCBiZXN0OiBSZW1vdGVDb25maWcgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbGV0IGNvbmZsaWN0VXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZmV0Y2ggb2YgZmV0Y2hlcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3RvcmVkID0gZmV0Y2guZXhpc3Rpbmc7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3RvcmVkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFiZXN0IHx8IGdldENvbmZpZ1ZlcnNpb24oc3RvcmVkKSA+IGdldENvbmZpZ1ZlcnNpb24oYmVzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3QgPSBzdG9yZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZ1ZlcnNpb24oc3RvcmVkKSA9PT0gZ2V0Q29uZmlnVmVyc2lvbih0aGlzLmNvbmZpZ3VyZWQpICYmIEpTT04uc3RyaW5naWZ5KHN0b3JlZCkgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlndXJlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0VXJsID0gZmV0Y2guc291cmNlQ29uZmlnLnVybDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYmVzdCAmJiBnZXRDb25maWdWZXJzaW9uKGJlc3QpID49IGdldENvbmZpZ1ZlcnNpb24odGhpcy5jb25maWd1cmVkKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmxpY3RVcmwgJiYgZ2V0Q29uZmlnVmVyc2lvbihiZXN0KSA9PT0gZ2V0Q29uZmlnVmVyc2lvbih0aGlzLmNvbmZpZ3VyZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBBcmNoaXZlcyBjb25maWd1cmF0aW9uIHVwZGF0ZWQgd2l0aG91dCB1cGRhdGluZyB0aGUgdmVyc2lvbiwgZm9yICR7Y29uZmxpY3RVcmx9LiBVcGRhdGVzIHdpbGwgYmUgaWdub3JlZCB1bnRpbCB5b3UgaW5jcmVhc2UgdGhlIHZlcnNpb24uIFVzaW5nOiAke0pTT04uc3RyaW5naWZ5KGJlc3QpfSwgaWdub3Jpbmc6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWd1cmVkKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhY3RpdmUgPSBiZXN0O1xuICAgICAgICAgICAgICAgICAgICBuZWVkc1dyaXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHNvdXJjZXMgPSBhd2FpdCB0aGlzLmJ1aWxkU291cmNlcyhhY3RpdmUpO1xuICAgICAgICAgICAgaWYgKG5lZWRzV3JpdGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWlzc2luZzogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhd2FpdCBzb3VyY2UuaGFzV3JpdGVBY2Nlc3MoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmcucHVzaChzb3VyY2UuY29uZmlnLnVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmcucHVzaChgJHtzb3VyY2UuY29uZmlnLnVybH0gKGNoZWNrIGZhaWxlZDogJHsoZSBhcyBFcnJvcikuc3RhY2sgPz8gZX0pYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYE5vdCB3cml0aW5nIHRoZSBzdG9yYWdlIHJvdXRpbmcgY29uZmlnIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9ICh2ZXJzaW9uICR7Z2V0Q29uZmlnVmVyc2lvbih0aGlzLmNvbmZpZ3VyZWQpfSk6IG5vIHdyaXRlIGFjY2VzcyB0byAke21pc3Npbmcuam9pbihcIiwgXCIpfS4gJHtleGlzdGluZyAmJiBgUnVubmluZyBvbiB0aGUgc3RvcmVkIGNvbmZpZyAodmVyc2lvbiAke2dldENvbmZpZ1ZlcnNpb24oZXhpc3RpbmcpfSkgaW5zdGVhZC5gIHx8IGBObyBzdG9yZWQgY29uZmlnIGV4aXN0cywgc28gdGhlIGJ1Y2tldCBjYW5ub3QgYmUgY3JlYXRlZCB1bnRpbCB3cml0ZSBhY2Nlc3MgaXMgZ3JhbnRlZC5gfWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGV4aXN0aW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UuZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcyA9IGF3YWl0IHRoaXMuYnVpbGRTb3VyY2VzKGFjdGl2ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJvdXRpbmdEYXRhID0gc2VyaWFsaXplUmVtb3RlQ29uZmlnKHRoaXMuY29uZmlndXJlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcm91dGluZ1dyaXRlVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3JpdHRlblVybHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXR0ZW5VcmxzLmhhcyhzb3VyY2UuY29uZmlnLnVybCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXR0ZW5VcmxzLmFkZChzb3VyY2UuY29uZmlnLnVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgU3RvcmFnZSByb3V0aW5nIGNvbmZpZyBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfSBpcyBvdXQgb2YgZGF0ZSAoc3RvcmVkIHZlcnNpb24gJHtleGlzdGluZyAmJiBnZXRDb25maWdWZXJzaW9uKGV4aXN0aW5nKSB8fCBcIm5vbmVcIn0sIG91cnMgJHtnZXRDb25maWdWZXJzaW9uKHRoaXMuY29uZmlndXJlZCl9KTogd3JpdGluZyBvdXJzIHRvIGFsbCAke3dyaXR0ZW5VcmxzLnNpemV9IG5vZGVzICh3cml0ZSB0aW1lICR7bmV3IERhdGUocm91dGluZ1dyaXRlVGltZSkudG9JU09TdHJpbmcoKX0pOiAke1suLi53cml0dGVuVXJsc10uam9pbihcIiwgXCIpfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdHRlblVybHMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXR0ZW5VcmxzLmhhcyhzb3VyY2UuY29uZmlnLnVybCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXR0ZW5VcmxzLmFkZChzb3VyY2UuY29uZmlnLnVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc291cmNlLndyaXRlKGFyY2hpdmVzID0+IGFyY2hpdmVzLnNldChST1VUSU5HX0ZJTEUsIHJvdXRpbmdEYXRhLCB7IGxhc3RNb2RpZmllZDogcm91dGluZ1dyaXRlVGltZSB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFdyb3RlIHN0b3JhZ2Ugcm91dGluZyBjb25maWcgdmVyc2lvbiAke2dldENvbmZpZ1ZlcnNpb24odGhpcy5jb25maWd1cmVkKX0gdG8gJHtzb3VyY2UuY29uZmlnLnVybH1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UuZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZldGNoID0gZmV0Y2hlcy5maW5kKHggPT4geC5yZXNwb25kZWQgJiYgeC5zb3VyY2VDb25maWcudXJsID09PSBzb3VyY2UuY29uZmlnLnVybCk7XG4gICAgICAgICAgICAgICAgaWYgKGZldGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5zZWVkTGF0ZW5jeShmZXRjaC5sYXRlbmN5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNvbmZpZyA9IGFjdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRDb25maWdQb2xsKCk7XG4gICAgICAgICAgICByZXR1cm4geyBjb25maWc6IGFjdGl2ZSwgc291cmNlcyB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgZm9yIChsZXQgZmV0Y2ggb2YgZmV0Y2hlcykge1xuICAgICAgICAgICAgICAgIGZldGNoLnByb2JlLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY3JlYXRlQ2hhaW5Tb3VyY2Uoc291cmNlQ29uZmlnOiBIb3N0ZWRDb25maWcgfCBCYWNrYmxhemVDb25maWcpOiBQcm9taXNlPFNvdXJjZVdyYXBwZXI+IHtcbiAgICAgICAgbGV0IHNvdXJjZSA9IGF3YWl0IFNvdXJjZVdyYXBwZXIuY3JlYXRlKHNvdXJjZUNvbmZpZyk7XG4gICAgICAgIHNvdXJjZS5zdGFydFBpbmdpbmcoKTtcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGJ1aWxkU291cmNlcyhjb25maWc6IFJlbW90ZUNvbmZpZyk6IFByb21pc2U8U291cmNlV3JhcHBlcltdPiB7XG4gICAgICAgIGxldCBzb3VyY2VzOiBTb3VyY2VXcmFwcGVyW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgc291cmNlQ29uZmlnIG9mIGNvbmZpZy5zb3VyY2VzLm1hcChub3JtYWxpemVTb3VyY2UpKSB7XG4gICAgICAgICAgICBzb3VyY2VzLnB1c2goYXdhaXQgdGhpcy5jcmVhdGVDaGFpblNvdXJjZShzb3VyY2VDb25maWcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc291cmNlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0Q29uZmlnUG9sbCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucG9sbFRpbWVyIHx8IHRoaXMuZGlzcG9zZWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5wb2xsVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICB2b2lkIHRoaXMucmVmcmVzaEFjdGl2ZUNvbmZpZygpLmNhdGNoKChlOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENoZWNraW5nIGZvciBhIG5ldyBzdG9yYWdlIHJvdXRpbmcgY29uZmlnIGZhaWxlZCBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfTogJHtlLnN0YWNrID8/IGV9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgQ09ORklHX1BPTExfSU5URVJWQUwpO1xuICAgICAgICAodGhpcy5wb2xsVGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgIH1cblxuICAgIC8vIERlZHVwbGljYXRlcyBjb25jdXJyZW50IHJlZnJlc2hlcyAodGhlIHBvbGwgdGltZXIgYW5kIHdyb25nLXRhcmdldCB3cml0ZSByZXRyaWVzIHNoYXJlIHRoaXMpXG4gICAgcHJpdmF0ZSBjb25maWdSZWZyZXNoSW5GbGlnaHQ6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSByZWZyZXNoQWN0aXZlQ29uZmlnKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnUmVmcmVzaEluRmxpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1JlZnJlc2hJbkZsaWdodCA9IHRoaXMuY2hlY2tGb3JOZXdDb25maWcoKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ1JlZnJlc2hJbkZsaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZ1JlZnJlc2hJbkZsaWdodDtcbiAgICB9XG5cbiAgICAvLyBUaGUgbGF0ZXN0IGNvbmZpZywgYXMgdGhlIHNlcnZlciBJTlRFUlBSRVRTIGl0OiBnZXRDb25maWcgY2FycmllcyBpbi1tZW1vcnkgb3ZlcmxheXMgKGRlcGxveVxuICAgIHByaXZhdGUgYXN5bmMgZmV0Y2hMYXRlc3RDb25maWcoc3RhdGU6IENoYWluU3RhdGUpOiBQcm9taXNlPFJlbW90ZUNvbmZpZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc3RhdGUuc291cmNlcykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgbGF0ZXN0ID0gYXdhaXQgc291cmNlLnJlYWRSb3V0aW5nQ29uZmlnKCk7XG4gICAgICAgICAgICAgICAgaWYgKGxhdGVzdCkgcmV0dXJuIG5vcm1hbGl6ZVJlbW90ZUNvbmZpZyhsYXRlc3QpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGAke3NvdXJjZS5jb25maWcudXJsfTogJHsoZSBhcyBFcnJvcikuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gc3RhdGUuc291cmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc3RvcmFnZSBzb3VyY2UgY291bGQgZ2l2ZSB1cyB0aGUgcm91dGluZyBjb25maWcgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX06ICR7ZXJyb3JzLmpvaW4oXCIgfCBcIil9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrRm9yTmV3Q29uZmlnKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5kaXNwb3NlZCB8fCAhdGhpcy5zdGF0ZVByb21pc2UpIHJldHVybjtcbiAgICAgICAgbGV0IHN0YXRlOiBDaGFpblN0YXRlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3RhdGUgPSBhd2FpdCB0aGlzLnN0YXRlUHJvbWlzZTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxhdGVzdCA9IGF3YWl0IHRoaXMuZmV0Y2hMYXRlc3RDb25maWcoc3RhdGUpO1xuICAgICAgICBpZiAoIWxhdGVzdCkgcmV0dXJuO1xuICAgICAgICBhd2FpdCB0aGlzLmFkb3B0TmV3Q29uZmlnKHN0YXRlLCBsYXRlc3QpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYWRvcHROZXdDb25maWcoc3RhdGU6IENoYWluU3RhdGUsIGxhdGVzdDogUmVtb3RlQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShsYXRlc3QpID09PSBKU09OLnN0cmluZ2lmeShzdGF0ZS5jb25maWcpKSByZXR1cm47XG4gICAgICAgIGxldCByZWNlaXZlZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgbGV0IG9ubHlJbnRlcm1lZGlhdGVzQ2hhbmdlZCA9IEpTT04uc3RyaW5naWZ5KHJlc29sdmVJbnRlcm1lZGlhdGVTb3VyY2VzKGxhdGVzdCkpID09PSBKU09OLnN0cmluZ2lmeShyZXNvbHZlSW50ZXJtZWRpYXRlU291cmNlcyhzdGF0ZS5jb25maWcpKTtcbiAgICAgICAgaWYgKG9ubHlJbnRlcm1lZGlhdGVzQ2hhbmdlZCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFN0b3JhZ2Ugcm91dGluZyBzd2l0Y2hvdmVyIHdpbmRvd3MgY2hhbmdlZCAodmVyc2lvbiAke2dldENvbmZpZ1ZlcnNpb24oc3RhdGUuY29uZmlnKX0gLT4gJHtnZXRDb25maWdWZXJzaW9uKGxhdGVzdCl9KSwgcmVjZWl2ZWQgJHtyZWNlaXZlZH0sIHJlYnVpbGRpbmcgc291cmNlcy4gTmV3IGNvbmZpZzogJHtKU09OLnN0cmluZ2lmeShsYXRlc3QpfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFN0b3JhZ2Ugcm91dGluZyBjb25maWcgY2hhbmdlZCAodmVyc2lvbiAke2dldENvbmZpZ1ZlcnNpb24oc3RhdGUuY29uZmlnKX0gLT4gJHtnZXRDb25maWdWZXJzaW9uKGxhdGVzdCl9KSwgcmVjZWl2ZWQgJHtyZWNlaXZlZH0sIHJlYnVpbGRpbmcgc291cmNlcy4gTmV3IGNvbmZpZzogJHtKU09OLnN0cmluZ2lmeShsYXRlc3QpfWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdHJpcHBlZEtleSA9IChjb25maWc6IEhvc3RlZENvbmZpZyB8IEJhY2tibGF6ZUNvbmZpZykgPT4gSlNPTi5zdHJpbmdpZnkoeyAuLi5jb25maWcsIHZhbGlkV2luZG93OiB1bmRlZmluZWQgfSk7XG4gICAgICAgIGxldCBvbGRCeUNvbmZpZyA9IG5ldyBNYXA8c3RyaW5nLCBTb3VyY2VXcmFwcGVyW10+KCk7XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gc3RyaXBwZWRLZXkoc291cmNlLmNvbmZpZyk7XG4gICAgICAgICAgICBsZXQgbGlzdCA9IG9sZEJ5Q29uZmlnLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKCFsaXN0KSB7XG4gICAgICAgICAgICAgICAgbGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgIG9sZEJ5Q29uZmlnLnNldChrZXksIGxpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGlzdC5wdXNoKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNvdXJjZXM6IFNvdXJjZVdyYXBwZXJbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBzb3VyY2VDb25maWcgb2YgbGF0ZXN0LnNvdXJjZXMubWFwKG5vcm1hbGl6ZVNvdXJjZSkpIHtcbiAgICAgICAgICAgIGxldCBvbGQgPSBvbGRCeUNvbmZpZy5nZXQoc3RyaXBwZWRLZXkoc291cmNlQ29uZmlnKSk/LnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAob2xkKSB7XG4gICAgICAgICAgICAgICAgb2xkLnVwZGF0ZVZhbGlkV2luZG93KHNvdXJjZUNvbmZpZy52YWxpZFdpbmRvdyk7XG4gICAgICAgICAgICAgICAgc291cmNlcy5wdXNoKG9sZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNvdXJjZXMucHVzaChhd2FpdCB0aGlzLmNyZWF0ZUNoYWluU291cmNlKHNvdXJjZUNvbmZpZykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGxlZnRvdmVycyBvZiBvbGRCeUNvbmZpZy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgbGVmdG92ZXIgb2YgbGVmdG92ZXJzKSB7XG4gICAgICAgICAgICAgICAgbGVmdG92ZXIuZGlzcG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlQ29uZmlnID0gbGF0ZXN0O1xuICAgICAgICB0aGlzLnN0YXRlUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh7IGNvbmZpZzogbGF0ZXN0LCBzb3VyY2VzIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbGFzdEF2YWlsYWJpbGl0eVJlY2hlY2sgPSAwO1xuICAgIHByaXZhdGUgYXZhaWxhYmlsaXR5UmVjaGVja0luRmxpZ2h0OiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgcmVjaGVja0F2YWlsYWJpbGl0eSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuYXZhaWxhYmlsaXR5UmVjaGVja0luRmxpZ2h0KSByZXR1cm4gdGhpcy5hdmFpbGFiaWxpdHlSZWNoZWNrSW5GbGlnaHQ7XG4gICAgICAgIGlmIChEYXRlLm5vdygpIC0gdGhpcy5sYXN0QXZhaWxhYmlsaXR5UmVjaGVjayA8IEFWQUlMQUJJTElUWV9SRUNIRUNLX1RIUk9UVExFKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIHRoaXMubGFzdEF2YWlsYWJpbGl0eVJlY2hlY2sgPSBEYXRlLm5vdygpO1xuICAgICAgICB0aGlzLmF2YWlsYWJpbGl0eVJlY2hlY2tJbkZsaWdodCA9IHRoaXMucmVjaGVja0F2YWlsYWJpbGl0eU5vdygpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hdmFpbGFiaWxpdHlSZWNoZWNrSW5GbGlnaHQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5hdmFpbGFiaWxpdHlSZWNoZWNrSW5GbGlnaHQ7XG4gICAgfVxuICAgIHByaXZhdGUgYXN5bmMgcmVjaGVja0F2YWlsYWJpbGl0eU5vdygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuZGlzcG9zZWQgfHwgIXRoaXMuc3RhdGVQcm9taXNlKSByZXR1cm47XG4gICAgICAgIGxldCBzdGF0ZTogQ2hhaW5TdGF0ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN0YXRlID0gYXdhaXQgdGhpcy5zdGF0ZVByb21pc2U7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGBFdmVyeSBzdG9yYWdlIHNvdXJjZSBmYWlsZWQgZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX07IHJlLWNvbnRhY3RpbmcgYWxsICR7c3RhdGUuc291cmNlcy5sZW5ndGh9IHNvdXJjZXMgKHJvdXRpbmcgcmUtcmVhZCArIGNvbm5lY3Rpb24gcmUtYXR0ZW1wdClgKTtcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChzdGF0ZS5zb3VyY2VzLm1hcChhc3luYyBzb3VyY2UgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgc291cmNlLnJlYWRSb3V0aW5nQ29uZmlnKCk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIGxldCBsYXRlc3QgPSByZXN1bHRzLmZpbmQoeCA9PiB4KTtcbiAgICAgICAgaWYgKCFsYXRlc3QpIHJldHVybjtcbiAgICAgICAgYXdhaXQgdGhpcy5hZG9wdE5ld0NvbmZpZyhzdGF0ZSwgbGF0ZXN0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJ1bjxUPihzdGF0ZTogQ2hhaW5TdGF0ZSwgY29uZmlnOiB7IGFwaU9ubHk/OiBib29sZWFuOyB3cml0ZT86IGJvb2xlYW47IHJvdXRlPzogbnVtYmVyIH0sIHJ1bjogKGFyY2hpdmVzOiBJQXJjaGl2ZXMpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgaWYgKGNvbmZpZy53cml0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucnVuV3JpdGUoY29uZmlnLnJvdXRlLCBydW4pO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZWNoZWNrZWRBdmFpbGFiaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGxldCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc3RhdGUuc291cmNlcykge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcucm91dGUgIT09IHVuZGVmaW5lZCAmJiAhcm91dGVDb250YWlucyhzb3VyY2UuY29uZmlnLnJvdXRlLCBjb25maWcucm91dGUpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZ1dpbmRvd0N1cnJlbnQoc291cmNlLmNvbmZpZykpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuYXBpT25seSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFwaSA9IHNvdXJjZS5hcGk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGAke3NvdXJjZS5jb25maWcudXJsfSBoYXMgVVJMLW9ubHkgYWNjZXNzLCB3aGljaCBjYW5ub3Qgc2VydmUgdGhpcyBvcGVyYXRpb25gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBydW4oYXBpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgc291cmNlLnJlYWQocnVuKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuaXNDb25uZWN0ZWQoKSkgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLm5vdGVGYWlsdXJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKFN0cmluZygoZSBhcyBFcnJvcikuc3RhY2sgPz8gZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVjaGVja2VkQXZhaWxhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgcmVjaGVja2VkQXZhaWxhYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlY2hlY2tBdmFpbGFiaWxpdHkoKTtcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQWxsIHNvdXJjZXMgZmFpbGVkIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9JHtjb25maWcucm91dGUgIT09IHVuZGVmaW5lZCAmJiBgIChyb3V0ZSAke2NvbmZpZy5yb3V0ZX0pYCB8fCBcIlwifTogJHtlcnJvcnMuam9pbihcIiB8IFwiKSB8fCBcIm5vIHNvdXJjZXMgYXZhaWxhYmxlXCJ9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJ1bldyaXRlPFQ+KHJvdXRlOiBudW1iZXIgfCB1bmRlZmluZWQsIHJ1bjogKGFyY2hpdmVzOiBJQXJjaGl2ZXMpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgbGV0IHJldHJpZWRXcm9uZ1dpbmRvdyA9IGZhbHNlO1xuICAgICAgICBsZXQgcmV0cmllZFdyb25nUm91dGUgPSBmYWxzZTtcbiAgICAgICAgbGV0IHJlY2hlY2tlZEF2YWlsYWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5nZXRTdGF0ZSgpO1xuICAgICAgICAgICAgbGV0IHRhcmdldCA9IHN0YXRlLnNvdXJjZXMuZmluZCh4ID0+IGNvbmZpZ0FjY2VwdHNXcml0ZXMoeC5jb25maWcpICYmIChyb3V0ZSA9PT0gdW5kZWZpbmVkIHx8IHJvdXRlQ29udGFpbnMoeC5jb25maWcucm91dGUsIHJvdXRlKSkpO1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlY2hlY2tlZEF2YWlsYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICByZWNoZWNrZWRBdmFpbGFiaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlY2hlY2tBdmFpbGFiaWxpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc291cmNlIGFjY2VwdHMgd3JpdGVzIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9JHtyb3V0ZSAhPT0gdW5kZWZpbmVkICYmIGAgKHJvdXRlICR7cm91dGV9KWAgfHwgXCJcIn0gKGV2ZXJ5IHNvdXJjZSBpcyBvdXRzaWRlIGl0cyB2YWxpZCB3aW5kb3cgb3Igb3V0c2lkZSB0aGUga2V5J3Mgcm91dGUpYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0YXJnZXQud3JpdGUocnVuKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9IFN0cmluZygoZSBhcyBFcnJvcikuc3RhY2sgPz8gZSk7XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoU1RPUkFHRV9XUk9OR19WQUxJRF9XSU5ET1cpICYmICFyZXRyaWVkV3JvbmdXaW5kb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0cmllZFdyb25nV2luZG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcmVwYXJlV3JvbmdUYXJnZXRSZXRyeShzdGF0ZSwgXCJ3aW5kb3dcIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcyhTVE9SQUdFX1dST05HX1JPVVRFKSAmJiAhcmV0cmllZFdyb25nUm91dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0cmllZFdyb25nUm91dGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmVXcm9uZ1RhcmdldFJldHJ5KHN0YXRlLCBcInJvdXRlXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQubm90ZUZhaWx1cmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWNoZWNrZWRBdmFpbGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2hlY2tlZEF2YWlsYWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlY2hlY2tBdmFpbGFiaWxpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxhc3RDb25maWdSZWZyZXNoID0gMDtcbiAgICBwcml2YXRlIGFzeW5jIHByZXBhcmVXcm9uZ1RhcmdldFJldHJ5KHN0YXRlOiBDaGFpblN0YXRlLCBraW5kOiBcIndpbmRvd1wiIHwgXCJyb3V0ZVwiKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChraW5kID09PSBcIndpbmRvd1wiKSB7XG4gICAgICAgICAgICBsZXQgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGxldCBuZWFyQm91bmRhcnkgPSBzdGF0ZS5zb3VyY2VzLnNvbWUoc291cmNlID0+IHNvdXJjZS5jb25maWcudmFsaWRXaW5kb3cuc29tZSh0ID0+IHQgPiAwICYmIHQgPCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiAmJiBNYXRoLmFicyh0IC0gbm93KSA8PSBXUk9OR19UQVJHRVRfQk9VTkRBUllfV0lORE9XKSk7XG4gICAgICAgICAgICBpZiAobmVhckJvdW5kYXJ5KSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFdyaXRlIHJlamVjdGVkIGJ5ICR7dGhpcy5nZXREZWJ1Z05hbWUoKX06IHJhY2VkIGEgdmFsaWQgd2luZG93IGJvdW5kYXJ5OyB3YWl0aW5nICR7V1JPTkdfVEFSR0VUX0JPVU5EQVJZX1JFVFJZX0RFTEFZIC8gMTAwMH1zIGFuZCByZXRyeWluZ2ApO1xuICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5KFdST05HX1RBUkdFVF9CT1VOREFSWV9SRVRSWV9ERUxBWSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChEYXRlLm5vdygpIC0gdGhpcy5sYXN0Q29uZmlnUmVmcmVzaCA8IENPTkZJR19SRUZSRVNIX1RIUk9UVExFKSByZXR1cm47XG4gICAgICAgIHRoaXMubGFzdENvbmZpZ1JlZnJlc2ggPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zb2xlLmxvZyhgV3JpdGUgcmVqZWN0ZWQgYnkgJHt0aGlzLmdldERlYnVnTmFtZSgpfSAod3JvbmcgJHtraW5kfSk6IG91ciBjb25maWcgaXMgc3RhbGUgKGxpa2VseSBhIGRlcGxveSBzd2l0Y2hvdmVyKTsgcmVmcmVzaGluZyBpdCBhbmQgcmV0cnlpbmdgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQWN0aXZlQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0PFQ+KGNvbmZpZzogeyBhcGlPbmx5PzogYm9vbGVhbjsgd3JpdGU/OiBib29sZWFuOyByb3V0ZT86IG51bWJlciB9LCBydW46IChhcmNoaXZlczogSUFyY2hpdmVzKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucnVuKHN0YXRlLCBjb25maWcsIHJ1bik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHdhaXRpbmdGb3JBY2Nlc3MoKTogUHJvbWlzZTx7IGxpbms6IHN0cmluZzsgbWFjaGluZUlkOiBzdHJpbmc7IGlwOiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmdldFN0YXRlKCk7XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICBpZiAoc291cmNlLmFwaSBpbnN0YW5jZW9mIEFyY2hpdmVzUmVtb3RlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHdhaXRpbmcgPSBhd2FpdCBzb3VyY2UuYXBpLndhaXRpbmdGb3JBY2Nlc3MoKTtcbiAgICAgICAgICAgICAgICBpZiAod2FpdGluZykgcmV0dXJuIHdhaXRpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0KGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IHsgcmFuZ2U/OiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0gfSk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldDIoZmlsZU5hbWUsIGNvbmZpZyk7XG4gICAgICAgIHJldHVybiByZXN1bHQgJiYgcmVzdWx0LmRhdGEgfHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0MihmaWxlTmFtZTogc3RyaW5nLCBjb25maWc/OiB7IHJhbmdlPzogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9IH0pOiBQcm9taXNlPHsgZGF0YTogQnVmZmVyOyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVxdWVzdCh7IHJvdXRlOiBnZXRSb3V0ZShmaWxlTmFtZSkgfSwgYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuZ2V0MihmaWxlTmFtZSwgY29uZmlnKSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXRJbmZvKGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcXVlc3QoeyByb3V0ZTogZ2V0Um91dGUoZmlsZU5hbWUpIH0sIGFyY2hpdmVzID0+IGFyY2hpdmVzLmdldEluZm8oZmlsZU5hbWUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdENvdmVyaW5nU291cmNlcyhzdGF0ZTogQ2hhaW5TdGF0ZSwgZXhjbHVkZWQ6IFNldDxTb3VyY2VXcmFwcGVyPik6IFNvdXJjZVdyYXBwZXJbXSB7XG4gICAgICAgIGxldCBjYW5kaWRhdGVzID0gc3RhdGUuc291cmNlcy5maWx0ZXIoeCA9PiBjb25maWdXaW5kb3dDdXJyZW50KHguY29uZmlnKSAmJiB4LmFwaSAmJiAhZXhjbHVkZWQuaGFzKHgpKTtcbiAgICAgICAgbGV0IGNob3NlbjogU291cmNlV3JhcHBlcltdID0gW107XG4gICAgICAgIGxldCBjb3ZlcmVkID0gMDtcbiAgICAgICAgd2hpbGUgKGNvdmVyZWQgPCAxKSB7XG4gICAgICAgICAgICBsZXQgYmVzdDogU291cmNlV3JhcHBlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBiZXN0RW5kID0gY292ZXJlZDtcbiAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IFtzdGFydCwgZW5kXSA9IHNvdXJjZS5jb25maWcucm91dGUgfHwgRlVMTF9ST1VURTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPiBjb3ZlcmVkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoZW5kID4gYmVzdEVuZCkge1xuICAgICAgICAgICAgICAgICAgICBiZXN0RW5kID0gZW5kO1xuICAgICAgICAgICAgICAgICAgICBiZXN0ID0gc291cmNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYmVzdCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvdmVyIHRoZSBmdWxsIHJvdXRlIHNwYWNlIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9OiB0aGUgYXZhaWxhYmxlIHNvdXJjZXMgb25seSBjb3ZlciB1cCB0byAke2NvdmVyZWR9IChzb21lIHNoYXJkcyBhcmUgZG93biBvciBVUkwtb25seSlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNob3Nlbi5wdXNoKGJlc3QpO1xuICAgICAgICAgICAgY292ZXJlZCA9IGJlc3RFbmQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNob3NlbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJ1bk9uQ292ZXJpbmc8VD4ocnVuOiAoYXJjaGl2ZXM6IElBcmNoaXZlcykgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VFtdPiB7XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgbGV0IGV4Y2x1ZGVkID0gbmV3IFNldDxTb3VyY2VXcmFwcGVyPigpO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgbGV0IGNvdmVyaW5nID0gdGhpcy5zZWxlY3RDb3ZlcmluZ1NvdXJjZXMoc3RhdGUsIGV4Y2x1ZGVkKTtcbiAgICAgICAgICAgIGxldCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY292ZXJpbmcubWFwKGFzeW5jIHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGFwaSA9IHNvdXJjZS5hcGk7XG4gICAgICAgICAgICAgICAgaWYgKCFhcGkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3NvdXJjZS5jb25maWcudXJsfSBoYXMgVVJMLW9ubHkgYWNjZXNzLCB3aGljaCBjYW5ub3Qgc2VydmUgdGhpcyBvcGVyYXRpb25gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGF3YWl0IHJ1bihhcGkpIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmlzQ29ubmVjdGVkKCkpIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5ub3RlRmFpbHVyZSgpO1xuICAgICAgICAgICAgICAgICAgICBleGNsdWRlZC5hZGQoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0cy5ldmVyeSh4ID0+IHgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKHggPT4gKHggYXMgeyB2YWx1ZTogVCB9KS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZChwcmVmaXg6IHN0cmluZywgY29uZmlnPzogeyBzaGFsbG93PzogYm9vbGVhbjsgdHlwZTogXCJmaWxlc1wiIHwgXCJmb2xkZXJzXCIgfSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmZpbmRJbmZvKHByZWZpeCwgY29uZmlnKSkubWFwKHggPT4geC5wYXRoKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGZpbmRJbmZvKHByZWZpeDogc3RyaW5nLCBjb25maWc/OiB7IHNoYWxsb3c/OiBib29sZWFuOyB0eXBlOiBcImZpbGVzXCIgfCBcImZvbGRlcnNcIiB9KTogUHJvbWlzZTxBcmNoaXZlRmlsZUluZm9bXT4ge1xuICAgICAgICBsZXQgcmVzdWx0cyA9IGF3YWl0IHRoaXMucnVuT25Db3ZlcmluZyhhcmNoaXZlcyA9PiBhcmNoaXZlcy5maW5kSW5mbyhwcmVmaXgsIGNvbmZpZykpO1xuICAgICAgICBsZXQgYnlQYXRoID0gbmV3IE1hcDxzdHJpbmcsIEFyY2hpdmVGaWxlSW5mbz4oKTtcbiAgICAgICAgZm9yIChsZXQgbGlzdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBmaWxlIG9mIGxpc3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXhpc3RpbmcgPSBieVBhdGguZ2V0KGZpbGUucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZyB8fCBmaWxlLmNyZWF0ZVRpbWUgPiBleGlzdGluZy5jcmVhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ5UGF0aC5zZXQoZmlsZS5wYXRoLCBmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1lcmdlZCA9IFsuLi5ieVBhdGgudmFsdWVzKCldO1xuICAgICAgICBzb3J0KG1lcmdlZCwgeCA9PiB4LnBhdGgpO1xuICAgICAgICByZXR1cm4gbWVyZ2VkO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q2hhbmdlc0FmdGVyKHRpbWU6IG51bWJlcik6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+IHtcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLnJ1bk9uQ292ZXJpbmcoYXN5bmMgYXJjaGl2ZXMgPT4ge1xuICAgICAgICAgICAgaWYgKCFhcmNoaXZlcy5nZXRDaGFuZ2VzQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YXJjaGl2ZXMuZ2V0RGVidWdOYW1lKCl9IGRvZXMgbm90IHN1cHBvcnQgZ2V0Q2hhbmdlc0FmdGVyYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgYXJjaGl2ZXMuZ2V0Q2hhbmdlc0FmdGVyKHRpbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGJ5UGF0aCA9IG5ldyBNYXA8c3RyaW5nLCBBcmNoaXZlRmlsZUluZm8+KCk7XG4gICAgICAgIGZvciAobGV0IGxpc3Qgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBsaXN0KSB7XG4gICAgICAgICAgICAgICAgbGV0IGV4aXN0aW5nID0gYnlQYXRoLmdldChmaWxlLnBhdGgpO1xuICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmcgfHwgZmlsZS5jcmVhdGVUaW1lID4gZXhpc3RpbmcuY3JlYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICBieVBhdGguc2V0KGZpbGUucGF0aCwgZmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBtZXJnZWQgPSBbLi4uYnlQYXRoLnZhbHVlcygpXTtcbiAgICAgICAgc29ydChtZXJnZWQsIHggPT4geC5wYXRoKTtcbiAgICAgICAgcmV0dXJuIG1lcmdlZDtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldFN5bmNTdGF0dXMoKTogUHJvbWlzZTxBcmNoaXZlc1N5bmNTdGF0dXM+IHtcbiAgICAgICAgbGV0IHN0YXR1c2VzID0gYXdhaXQgdGhpcy5ydW5PbkNvdmVyaW5nKGFzeW5jIGFyY2hpdmVzID0+IHtcbiAgICAgICAgICAgIGlmICghYXJjaGl2ZXMuZ2V0U3luY1N0YXR1cykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHthcmNoaXZlcy5nZXREZWJ1Z05hbWUoKX0gZG9lcyBub3Qgc3VwcG9ydCBnZXRTeW5jU3RhdHVzYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgYXJjaGl2ZXMuZ2V0U3luY1N0YXR1cygpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFsbFNjYW5zQ29tcGxldGU6IHN0YXR1c2VzLmV2ZXJ5KHggPT4geC5hbGxTY2Fuc0NvbXBsZXRlKSxcbiAgICAgICAgICAgIGluZGV4U2l6ZTogc3RhdHVzZXMucmVkdWNlKChzdW0sIHgpID0+IHN1bSArIHguaW5kZXhTaXplLCAwKSxcbiAgICAgICAgICAgIHNvdXJjZXM6IHN0YXR1c2VzLmZsYXRNYXAoeCA9PiB4LnNvdXJjZXMpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnKCk6IFByb21pc2U8QXJjaGl2ZXNDb25maWc+IHtcbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5nZXRTdGF0ZSgpO1xuICAgICAgICBpZiAoIXN0YXRlLnNvdXJjZXMuc29tZSh4ID0+IHguYXBpKSkgcmV0dXJuIHsgcmVtb3RlQ29uZmlnOiBzdGF0ZS5jb25maWcgfTtcbiAgICAgICAgbGV0IGNvbmZpZyA9IGF3YWl0IHRoaXMucnVuKHN0YXRlLCB7IGFwaU9ubHk6IHRydWUgfSwgYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuZ2V0Q29uZmlnKCkpO1xuICAgICAgICByZXR1cm4geyAuLi5jb25maWcsIHJlbW90ZUNvbmZpZzogc3RhdGUuY29uZmlnIH07XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBoYXNXcml0ZUFjY2VzcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5nZXRTdGF0ZSgpO1xuICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc3RhdGUuc291cmNlcykge1xuICAgICAgICAgICAgaWYgKCFjb25maWdBY2NlcHRzV3JpdGVzKHNvdXJjZS5jb25maWcpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghYXdhaXQgc291cmNlLmhhc1dyaXRlQWNjZXNzKCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0KGZpbGVOYW1lOiBzdHJpbmcsIGRhdGE6IEJ1ZmZlciwgY29uZmlnPzogeyBsYXN0TW9kaWZpZWQ/OiBudW1iZXIgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmIChmaWxlTmFtZSA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXRSb3V0aW5nQ29uZmlnKGRhdGEsIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGVOYW1lLmluY2x1ZGVzKFZBUklBQkxFX1NIQVJEKSAmJiBwYXJzZVZhcmlhYmxlUm91dGUoZmlsZU5hbWUpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNldFZhcmlhYmxlU2hhcmQoZmlsZU5hbWUsIGRhdGEsIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KHsgd3JpdGU6IHRydWUsIHJvdXRlOiBnZXRSb3V0ZShmaWxlTmFtZSkgfSwgYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuc2V0KGZpbGVOYW1lLCBkYXRhLCBjb25maWcpKTtcbiAgICAgICAgcmV0dXJuIGZpbGVOYW1lO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2V0Um91dGluZ0NvbmZpZyhkYXRhOiBCdWZmZXIsIGNvbmZpZz86IHsgbGFzdE1vZGlmaWVkPzogbnVtYmVyIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmdldFN0YXRlKCk7XG4gICAgICAgIGxldCB3cml0ZVRpbWUgPSBjb25maWc/Lmxhc3RNb2RpZmllZCB8fCBEYXRlLm5vdygpO1xuICAgICAgICBsZXQgd3JpdHRlbjogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgbGV0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgbGV0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgY29uc29sZS5sb2coYFdyaXRpbmcgc3RvcmFnZSByb3V0aW5nIGNvbmZpZyBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfSB0byBldmVyeSBub2RlICh3cml0ZSB0aW1lICR7bmV3IERhdGUod3JpdGVUaW1lKS50b0lTT1N0cmluZygpfSk6ICR7ZGF0YS50b1N0cmluZyhcInV0ZjhcIikuc2xpY2UoMCwgMjAwMCl9YCk7XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICBpZiAoc2Vlbi5oYXMoc291cmNlLmNvbmZpZy51cmwpKSBjb250aW51ZTtcbiAgICAgICAgICAgIHNlZW4uYWRkKHNvdXJjZS5jb25maWcudXJsKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgc291cmNlLndyaXRlKGFyY2hpdmVzID0+IGFyY2hpdmVzLnNldChST1VUSU5HX0ZJTEUsIGRhdGEsIHsgbGFzdE1vZGlmaWVkOiB3cml0ZVRpbWUgfSkpO1xuICAgICAgICAgICAgICAgIHdyaXR0ZW4ucHVzaChzb3VyY2UuY29uZmlnLnVybCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFdyb3RlIHRoZSBzdG9yYWdlIHJvdXRpbmcgY29uZmlnIHRvICR7c291cmNlLmNvbmZpZy51cmx9YCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goYCR7c291cmNlLmNvbmZpZy51cmx9OiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEFjdGl2ZUNvbmZpZygpO1xuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdG9yYWdlIHJvdXRpbmcgY29uZmlnIHdyaXRlIGZvciAke3RoaXMuZ2V0RGVidWdOYW1lKCl9IGZhaWxlZCBvbiAke2Vycm9ycy5sZW5ndGh9IG9mICR7c2Vlbi5zaXplfSBub2RlcyAoc3VjY2VlZGVkIG9uOiAke3dyaXR0ZW4uam9pbihcIiwgXCIpIHx8IFwibm9uZVwifSk6ICR7ZXJyb3JzLmpvaW4oXCIgfCBcIil9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJPVVRJTkdfRklMRTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGRlbChmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdCh7IHdyaXRlOiB0cnVlLCByb3V0ZTogZ2V0Um91dGUoZmlsZU5hbWUpIH0sIGFyY2hpdmVzID0+IGFyY2hpdmVzLmRlbChmaWxlTmFtZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2V0VmFyaWFibGVTaGFyZChrZXk6IHN0cmluZywgZGF0YTogQnVmZmVyLCBjb25maWc/OiB7IGxhc3RNb2RpZmllZD86IG51bWJlciB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgbGV0IHJlY2hlY2tlZEF2YWlsYWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgdGhpcy5nZXRTdGF0ZSgpO1xuICAgICAgICAgICAgbGV0IHRhcmdldHNCeVJvdXRlID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZVdyYXBwZXI+KCk7XG4gICAgICAgICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc3RhdGUuc291cmNlcykge1xuICAgICAgICAgICAgICAgIGlmICghY29uZmlnQWNjZXB0c1dyaXRlcyhzb3VyY2UuY29uZmlnKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgbGV0IHJvdXRlS2V5ID0gSlNPTi5zdHJpbmdpZnkoc291cmNlLmNvbmZpZy5yb3V0ZSB8fCBGVUxMX1JPVVRFKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldHNCeVJvdXRlLmhhcyhyb3V0ZUtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c0J5Um91dGUuc2V0KHJvdXRlS2V5LCBzb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB0YXJnZXRzID0gWy4uLnRhcmdldHNCeVJvdXRlLnZhbHVlcygpXTtcbiAgICAgICAgICAgIHNvcnQodGFyZ2V0cywgeCA9PiB4LmdldExhdGVuY3koKSk7XG4gICAgICAgICAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgW3N0YXJ0LCBlbmRdID0gdGFyZ2V0LmNvbmZpZy5yb3V0ZSB8fCBGVUxMX1JPVVRFO1xuICAgICAgICAgICAgICAgIGxldCBmdWxsS2V5ID0ga2V5LnJlcGxhY2UoVkFSSUFCTEVfU0hBUkQsIFZBUklBQkxFX1NIQVJEICsgXCJfXCIgKyAoc3RhcnQgKyBNYXRoLnJhbmRvbSgpICogKGVuZCAtIHN0YXJ0KSkpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRhcmdldC53cml0ZShhcmNoaXZlcyA9PiBhcmNoaXZlcy5zZXQoZnVsbEtleSwgZGF0YSwgY29uZmlnKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdWxsS2V5O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5pc0Nvbm5lY3RlZCgpKSB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQubm90ZUZhaWx1cmUoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFZhcmlhYmxlLXNoYXJkIHdyaXRlIHRhcmdldCAke3RhcmdldC5nZXREZWJ1Z05hbWUoKX0gaXMgZG93bjsgbW92aW5nIHRvIHRoZSBuZXh0LWxvd2VzdC1sYXRlbmN5IHNoYXJkYCk7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKFN0cmluZygoZSBhcyBFcnJvcikuc3RhY2sgPz8gZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVjaGVja2VkQXZhaWxhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgcmVjaGVja2VkQXZhaWxhYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlY2hlY2tBdmFpbGFiaWxpdHkoKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXZlcnkgdmFyaWFibGUtc2hhcmQgd3JpdGUgdGFyZ2V0IGZhaWxlZCBmb3IgJHt0aGlzLmdldERlYnVnTmFtZSgpfTogJHtlcnJvcnMuam9pbihcIiB8IFwiKSB8fCBcIm5vIHNvdXJjZXMgYWNjZXB0IHdyaXRlc1wifWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldExhcmdlRmlsZShjb25maWc6IHsgcGF0aDogc3RyaW5nOyBnZXROZXh0RGF0YSgpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoY29uZmlnLnBhdGguaW5jbHVkZXMoVkFSSUFCTEVfU0hBUkQpICYmIHBhcnNlVmFyaWFibGVSb3V0ZShjb25maWcucGF0aCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzZXRMYXJnZUZpbGUgZG9lcyBub3Qgc3VwcG9ydCBWQVJJQUJMRV9TSEFSRCBrZXlzICh0aGVyZSBpcyBubyB3YXkgdG8gcmV0dXJuIHRoZSBtYXRlcmlhbGl6ZWQga2V5KTsgd3JpdGUgdGhlIGZpbGUgd2l0aCBzZXQsIG9yIG1hdGVyaWFsaXplIHRoZSBrZXkgeW91cnNlbGYuIEtleTogJHtKU09OLnN0cmluZ2lmeShjb25maWcucGF0aCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJvdXRlID0gZ2V0Um91dGUoY29uZmlnLnBhdGgpO1xuICAgICAgICBsZXQgcmVjaGVja2VkQXZhaWxhYmlsaXR5ID0gZmFsc2U7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBhd2FpdCB0aGlzLmdldFN0YXRlKCk7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gc3RhdGUuc291cmNlcy5maW5kKHggPT4gY29uZmlnQWNjZXB0c1dyaXRlcyh4LmNvbmZpZykgJiYgcm91dGVDb250YWlucyh4LmNvbmZpZy5yb3V0ZSwgcm91dGUpKTtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWNoZWNrZWRBdmFpbGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVjaGVja2VkQXZhaWxhYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWNoZWNrQXZhaWxhYmlsaXR5KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNvdXJjZSBhY2NlcHRzIHdyaXRlcyBmb3Igc2V0TGFyZ2VGaWxlIG9uICR7dGhpcy5nZXREZWJ1Z05hbWUoKX0gKHJvdXRlICR7cm91dGV9KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0YXJnZXQud3JpdGUoYXJjaGl2ZXMgPT4gYXJjaGl2ZXMuc2V0TGFyZ2VGaWxlKGNvbmZpZykpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldC5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5ub3RlRmFpbHVyZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFVSTChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBsZXQgdXJscyA9IGF3YWl0IHRoaXMuZ2V0VVJMcyhwYXRoKTtcbiAgICAgICAgaWYgKCF1cmxzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBwdWJsaWMgc291cmNlIGNvdmVyaW5nIHJvdXRlICR7Z2V0Um91dGUocGF0aCl9IHRvIGJ1aWxkIGEgVVJMIGZyb20gZm9yICR7dGhpcy5nZXREZWJ1Z05hbWUoKX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsc1swXTtcbiAgICB9XG5cbiAgICAvKiogRXZlcnkgVVJMIHRoYXQgY291bGQgc2VydmUgdGhpcyBwYXRoLCBpbiBzb3VyY2Ugb3JkZXIuIEVtcHR5IHdoZW4gbm8gcHVibGljIHNvdXJjZSBjb3ZlcnMgdGhlIHBhdGgncyByb3V0ZS4gKi9cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VVJMcyhwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGxldCBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAgICAgbGV0IHJvdXRlID0gZ2V0Um91dGUocGF0aCk7XG4gICAgICAgIGxldCBwcm92aWRlcnM6IElBcmNoaXZlc1tdID0gW107XG4gICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICBpZiAoIShzb3VyY2UuY29uZmlnLnB1YmxpYyA/PyB0cnVlKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIXJvdXRlQ29udGFpbnMoc291cmNlLmNvbmZpZy5yb3V0ZSwgcm91dGUpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCBwcm92aWRlciA9IHNvdXJjZS51cmwgfHwgc291cmNlLmFwaTtcbiAgICAgICAgICAgIGlmICghcHJvdmlkZXIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcHJvdmlkZXJzLnB1c2gocHJvdmlkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCB1cmxzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvdmlkZXJzLm1hcChwcm92aWRlciA9PiBwcm92aWRlci5nZXRVUkwocGF0aCkpKTtcbiAgICAgICAgcmV0dXJuIFsuLi5uZXcgU2V0KHVybHMpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNwb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVSb3V0aW5nUHVzaD8uKCk7XG4gICAgICAgIGlmICh0aGlzLnBvbGxUaW1lcikge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBvbGxUaW1lcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5pdFJldHJ5VGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmluaXRSZXRyeVRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RhdGVQcm9taXNlID0gdGhpcy5zdGF0ZVByb21pc2U7XG4gICAgICAgIGlmIChzdGF0ZVByb21pc2UpIHtcbiAgICAgICAgICAgIHZvaWQgc3RhdGVQcm9taXNlLnRoZW4oc3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZSBvZiBzdGF0ZS5zb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgKCkgPT4geyB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFyY2hpdmVzKGNvbmZpZzogUmVtb3RlQ29uZmlnIHwgUmVtb3RlQ29uZmlnQmFzZSk6IEFyY2hpdmVzQ2hhaW4ge1xuICAgIHJldHVybiBuZXcgQXJjaGl2ZXNDaGFpbihjb25maWcpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjYWxsU2VydmVyPFQ+KHVybDogc3RyaW5nLCBydW46IChjb250cm9sbGVyOiB0eXBlb2YgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIubm9kZXNbc3RyaW5nXSkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIFNvY2tldEZ1bmN0aW9uLkVOQUJMRV9DTElFTlRfTU9ERSA9IHRydWU7XG4gICAgbGV0IHBhcnNlZCA9IHBhcnNlU3RvcmFnZVVybCh1cmwpO1xuICAgIGxldCBub2RlSWQgPSBTb2NrZXRGdW5jdGlvbi5jb25uZWN0KHsgYWRkcmVzczogcGFyc2VkLmFkZHJlc3MsIHBvcnQ6IHBhcnNlZC5wb3J0IH0pO1xuICAgIGxldCBjb250cm9sbGVyID0gUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIubm9kZXNbbm9kZUlkXTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcnVuKGNvbnRyb2xsZXIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKCFTdHJpbmcoKGUgYXMgRXJyb3IpLnN0YWNrID8/IGUpLmluY2x1ZGVzKFNUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURUQpKSB0aHJvdyBlO1xuICAgICAgICBhd2FpdCBhdXRoZW50aWNhdGVTdG9yYWdlKHsgYWRkcmVzczogcGFyc2VkLmFkZHJlc3MsIHBvcnQ6IHBhcnNlZC5wb3J0LCBub2RlSWQgfSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBydW4oY29udHJvbGxlcik7XG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFNlcnZlckJ1Y2tldHMoY29uZmlnOiB7IHVybDogc3RyaW5nOyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8U2VydmVyQnVja2V0SW5mb1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IGNhbGxTZXJ2ZXIoY29uZmlnLnVybCwgY29udHJvbGxlciA9PiBjb250cm9sbGVyLmxpc3RCdWNrZXRzKGNvbmZpZy5hY2NvdW50KSk7XG59XG5cbi8qKiBUaGUgbGl2ZSwgaW4tbWVtb3J5IHN0YXRlIG9mIG9uZSBidWNrZXQgb24gYSBzZXJ2ZXIgKHJvdXRpbmcgY29uZmlnIGluY2x1ZGVkKSwgb3IgYSBzdHJpbmcgc2F5aW5nIHdoeSBpdCBpcyB1bmF2YWlsYWJsZS4gQ2hlYXAgLSBpdCBuZXZlciB0b3VjaGVzIHRoZSBzZXJ2ZXIncyBkaXNrIC0gYnV0IG9ubHkgd29ya3Mgd2hpbGUgdGhhdCBidWNrZXQgaXMgbG9hZGVkIHRoZXJlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNlcnZlckFjdGl2ZUJ1Y2tldChjb25maWc6IHsgdXJsOiBzdHJpbmc7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFjdGl2ZUJ1Y2tldEluZm8gfCBzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgY2FsbFNlcnZlcihjb25maWcudXJsLCBjb250cm9sbGVyID0+IGNvbnRyb2xsZXIuZ2V0QWN0aXZlQnVja2V0KGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSkpO1xufVxuXG4vKiogVGhlIGJ1Y2tldHMgYSBzZXJ2ZXIgY3VycmVudGx5IGhhcyBsb2FkZWQuIEFkbWluIG9ubHksIHNvIGluIHByYWN0aWNlIHRoaXMgaXMgb3VyIG93biBtYWNoaW5lJ3Mgb3RoZXIgcHJvY2VzcyAtIGEgZGVwbG95IHN1Y2Nlc3NvciBhc2tpbmcgaXRzIHByZWRlY2Vzc29yIHdoYXQgaXMgYWN0dWFsbHkgaW4gdXNlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RTZXJ2ZXJBY3RpdmVCdWNrZXRLZXlzKGNvbmZpZzogeyB1cmw6IHN0cmluZyB9KTogUHJvbWlzZTx7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH1bXT4ge1xuICAgIHJldHVybiBhd2FpdCBjYWxsU2VydmVyKGNvbmZpZy51cmwsIGNvbnRyb2xsZXIgPT4gY29udHJvbGxlci5hZG1pbkxpc3RBY3RpdmVCdWNrZXRzKCkpO1xufVxuXG4vKiogVGVsbHMgYSBzZXJ2ZXIgdG8gbG9hZCBvbmUgb2YgaXRzIGJ1Y2tldHMgaW50byBtZW1vcnkgKHN0YXJ0aW5nIGl0cyBzeW5jaHJvbml6YXRpb24pIGFuZCByZXR1cm5zIGl0cyBsaXZlIHN0YXRlLCBvciBhIHN0cmluZyBzYXlpbmcgd2h5IGl0IGNvdWxkIG5vdCBiZSBsb2FkZWQuIE9ubHkgdG91Y2hlcyB0aGF0IHNlcnZlciAtIG5vdGhpbmcgaXMgd3JpdHRlbiBhbmQgbm8gb3RoZXIgc291cmNlIGlzIGNvbnRhY3RlZC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3RpdmF0ZVNlcnZlckJ1Y2tldChjb25maWc6IHsgdXJsOiBzdHJpbmc7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFjdGl2ZUJ1Y2tldEluZm8gfCBzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgY2FsbFNlcnZlcihjb25maWcudXJsLCBjb250cm9sbGVyID0+IGNvbnRyb2xsZXIuYWN0aXZhdGVCdWNrZXQoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKSk7XG59XG5cbi8qKiBaZXJvZXMgdGhlIHdyaXRlIHN0YXRpc3RpY3MgbGlzdFNlcnZlckJ1Y2tldHMgcmVwb3J0cywgZm9yIGV2ZXJ5IGJ1Y2tldCBpbiB0aGUgYWNjb3VudC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhclNlcnZlcldyaXRlU3RhdHMoY29uZmlnOiB7IHVybDogc3RyaW5nOyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8eyBjbGVhcmVkQnVja2V0czogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4gYXdhaXQgY2FsbFNlcnZlcihjb25maWcudXJsLCBjb250cm9sbGVyID0+IGNvbnRyb2xsZXIuY2xlYXJXcml0ZVN0YXRzKGNvbmZpZy5hY2NvdW50KSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCdWNrZXRJbmZvKGNvbmZpZzogeyB1cmw6IHN0cmluZyB9KTogUHJvbWlzZTxBcmNoaXZlc0NvbmZpZz4ge1xuICAgIGxldCByZW1vdGUgPSBuZXcgQXJjaGl2ZXNSZW1vdGUoeyB1cmw6IGNvbmZpZy51cmwsIHdhaXRGb3JBY2Nlc3M6IGZhbHNlIH0pO1xuICAgIHJldHVybiBhd2FpdCByZW1vdGUuZ2V0Q29uZmlnKCk7XG59XG4iXX0=
801
+ /* _JS_SOURCE_HASH = "a72622c2aa25d387867345bd88a7c0f6b973e2d3077a60031cd0770a9f1528a8"; */
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
4
4
  };
@@ -133,4 +133,4 @@ function getMainPortAcquireDelay() {
133
133
  }
134
134
  exports.getMainPortAcquireDelay = getMainPortAcquireDelay;
135
135
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95VGFrZW92ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkZXBsb3lUYWtlb3Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLDZEQUFvRTtBQUVwRSxNQUFNLDhCQUE4QixHQUFHLDBCQUEwQixDQUFDO0FBQ2xFLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQyxNQUFNLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDeEMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDbEQsTUFBTSxlQUFlLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdkMsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQVl0QyxJQUFJLFFBQW9DLENBQUM7QUFFekMsU0FBUyxHQUFHLENBQUMsSUFBWTtJQUNyQixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFTLFNBQVM7SUFDZCxPQUFPLFFBQVEsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xDLENBQUM7QUFFRCxTQUFTLGlCQUFpQjtJQUN0QixPQUFPLGNBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkUsQ0FBQztBQUVELEtBQUssVUFBVSxtQkFBbUI7O0lBQzlCLElBQUksTUFBTSxHQUFH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QUFDO0lBQ0QsT0FBTyxrQkFBa0IsQ0FBQztBQUM5QixDQUFDO0FBUEQsMERBT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgc3RhcnRJbnRlcm1lZGlhdGVNYWludGVuYW5jZSB9IGZyb20gXCIuL3N0b3JhZ2VTZXJ2ZXJTdGF0ZVwiO1xuXG5jb25zdCBQQVJBTUVURVJTX1RJTUVMSU5FX0ZJTEVfUkVHRVggPSAvXihcXGQrKS1wYXJhbWV0ZXJzXFwuanNvbiQvO1xuY29uc3QgREVQTE9ZX0RFVEVDVF9SRVRSWV9ERUxBWSA9IDUgKiAxMDAwO1xuY29uc3QgREVQTE9ZX0RFVEVDVF9USU1FT1VUID0gMzAgKiAxMDAwO1xuY29uc3QgRVhJVF9MT0dfRkxVU0hfREVMQVkgPSA1ICogMTAwMDtcbmNvbnN0IERFUExPWV9SRUxFQVNFX01BVENIX1dJTkRPVyA9IDUgKiA2MCAqIDEwMDA7XG5jb25zdCBBTFRfUE9SVF9MSU5HRVIgPSAzMCAqIDYwICogMTAwMDtcbmNvbnN0IEFDUVVJUkVfU0xPV19ERUxBWSA9IDMwICogMTAwMDtcbmNvbnN0IEFDUVVJUkVfRkFTVF9ERUxBWSA9IDEwMDA7XG5jb25zdCBBQ1FVSVJFX0ZBU1RfV0lORE9XID0gNjAgKiAxMDAwO1xuXG50eXBlIFRpbWVsaW5lRW50cnkgPSB7XG4gICAgcGFyYW1ldGVyczogeyByZWxlYXNlVGltZT86IG51bWJlcjsgb3ZlcmxhcFRpbWU/OiBudW1iZXIgfTtcbn07XG5cbnR5cGUgRGVwbG95VGFrZW92ZXIgPSB7XG4gICAgcmVsZWFzZVRpbWU6IG51bWJlcjtcbiAgICBvdmVybGFwVGltZTogbnVtYmVyO1xuICAgIGFsdFBvcnQ/OiBudW1iZXI7XG59O1xuXG5sZXQgdGFrZW92ZXI6IERlcGxveVRha2VvdmVyIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc28odGltZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IERhdGUodGltZSkudG9JU09TdHJpbmcoKTtcbn1cblxuZnVuY3Rpb24gbG9nUHJlZml4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBbcGlkICR7cHJvY2Vzcy5waWR9XWA7XG59XG5cbmZ1bmN0aW9uIGdldFRpbWVsaW5lRm9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGguZGlybmFtZShwcm9jZXNzLmN3ZCgpKS5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIikgKyBcIi9cIjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZFRpbWVsaW5lRW50cmllcygpOiBQcm9taXNlPFRpbWVsaW5lRW50cnlbXT4ge1xuICAgIGxldCBmb2xkZXIgPSBnZXRUaW1lbGluZUZvbGRlcigpO1xuICAgIGxldCBmaWxlczogc3RyaW5nW107XG4gICAgdHJ5IHtcbiAgICAgICAgZmlsZXMgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkZGlyKGZvbGRlcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYCR7bG9nUHJlZml4KCl9IENvdWxkIG5vdCByZWFkIHRoZSBkZXBsb3kgdGltZWxpbmUgZm9sZGVyICR7Zm9sZGVyfTogJHsoZSBhcyBFcnJvcikuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBsZXQgZW50cmllczogVGltZWxpbmVFbnRyeVtdID0gW107XG4gICAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBpZiAoIVBBUkFNRVRFUlNfVElNRUxJTkVfRklMRV9SRUdFWC50ZXN0KGZpbGUpKSBjb250aW51ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGVudHJpZXMucHVzaChKU09OLnBhcnNlKGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKGZvbGRlciArIGZpbGUsIFwidXRmOFwiKSkgYXMgVGltZWxpbmVFbnRyeSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgJHtsb2dQcmVmaXgoKX0gQ291bGQgbm90IHJlYWQgZGVwbG95IHRpbWVsaW5lIGZpbGUgJHtmb2xkZXIgKyBmaWxlfTogJHsoZSBhcyBFcnJvcikuc3RhY2sgPz8gZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbn1cblxuZnVuY3Rpb24gZmluZE91clJlbGVhc2UoZW50cmllczogVGltZWxpbmVFbnRyeVtdLCBub3c6IG51bWJlcik6IERlcGxveVRha2VvdmVyIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgYmVzdDogRGVwbG95VGFrZW92ZXIgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBsZXQgcmVsZWFzZVRpbWUgPSBlbnRyeS5wYXJhbWV0ZXJzLnJlbGVhc2VUaW1lO1xuICAgICAgICBpZiAocmVsZWFzZVRpbWUgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICAgIGxldCBvdmVybGFwVGltZSA9IGVudHJ5LnBhcmFtZXRlcnMub3ZlcmxhcFRpbWUgfHwgMDtcbiAgICAgICAgaWYgKHJlbGVhc2VUaW1lID4gbm93ICsgREVQTE9ZX1JFTEVBU0VfTUFUQ0hfV0lORE9XKSBjb250aW51ZTtcbiAgICAgICAgaWYgKG5vdyA+IHJlbGVhc2VUaW1lICsgb3ZlcmxhcFRpbWUgKyBERVBMT1lfUkVMRUFTRV9NQVRDSF9XSU5ET1cpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoYmVzdCAmJiBiZXN0LnJlbGVhc2VUaW1lID49IHJlbGVhc2VUaW1lKSBjb250aW51ZTtcbiAgICAgICAgYmVzdCA9IHsgcmVsZWFzZVRpbWUsIG92ZXJsYXBUaW1lIH07XG4gICAgfVxuICAgIHJldHVybiBiZXN0O1xufVxuXG4vKiogQ2FsbGVkIHdoZW4gdGhlIG1haW4gcG9ydCBpcyBhbHJlYWR5IGluIHVzZSwgd2hpY2ggb24gYSBoZWFsdGh5IG1hY2hpbmUgb25seSBoYXBwZW5zIHdoaWxlIG91ciBwcmVkZWNlc3NvciBpcyBzdGlsbCBydW5uaW5nIGEgZGVwbG95IG92ZXJsYXAuIENvbmZpcm1zIHRoYXQgYWdhaW5zdCB0aGUgZGVwbG95IHRpbWVsaW5lOyBpZiBubyBkZXBsb3kgaXMgaW4gcHJvZ3Jlc3Mgd2UgYXJlIGluIGEgYmFkIHN0YXRlIChzb21lb25lIGVsc2UgaG9sZHMgb3VyIHBvcnQpIGFuZCB0aGUgcHJvY2VzcyBtdXN0IG5vdCBrZWVwIHJ1bm5pbmcuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGV0ZWN0RGVwbG95VGFrZW92ZXIoKTogUHJvbWlzZTxEZXBsb3lUYWtlb3Zlcj4ge1xuICAgIGNvbnNvbGUud2FybihgJHtsb2dQcmVmaXgoKX0gT3VyIG1haW4gcG9ydCBpcyBpbiB1c2UsIHdoaWNoIHNob3VsZCBvbmx5IGhhcHBlbiB3aGlsZSBhIGRlcGxveSBvdmVybGFwIGlzIHJ1bm5pbmcgLSBjaGVja2luZyB0aGUgZGVwbG95IHRpbWVsaW5lIGluICR7Z2V0VGltZWxpbmVGb2xkZXIoKX0gZm9yIHRoZSByZWxlYXNlIHdlIGFyZSBwYXJ0IG9mYCk7XG4gICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgYXR0ZW1wdCsrO1xuICAgICAgICBsZXQgZW50cmllcyA9IGF3YWl0IHJlYWRUaW1lbGluZUVudHJpZXMoKTtcbiAgICAgICAgbGV0IGZvdW5kID0gZmluZE91clJlbGVhc2UoZW50cmllcywgRGF0ZS5ub3coKSk7XG4gICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgdGFrZW92ZXIgPSBmb3VuZDtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgJHtsb2dQcmVmaXgoKX0gRGVwbG95IHRha2VvdmVyIGNvbmZpcm1lZCBvbiBhdHRlbXB0ICR7YXR0ZW1wdH06IHJlbGVhc2UgYXQgJHtpc28oZm91bmQucmVsZWFzZVRpbWUpfSwgb3ZlcmxhcCAke2ZvdW5kLm92ZXJsYXBUaW1lfW1zLCBzbyBvdXIgcHJlZGVjZXNzb3IgaG9sZHMgdGhlIG1haW4gcG9ydCB1bnRpbCAke2lzbyhmb3VuZC5yZWxlYXNlVGltZSArIGZvdW5kLm92ZXJsYXBUaW1lKX0uIFdlIGFyZSB0aGUgc3VjY2Vzc29yLmApO1xuICAgICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbGFwc2VkID0gRGF0ZS5ub3coKSAtIHN0YXJ0O1xuICAgICAgICBpZiAoZWxhcHNlZCA+PSBERVBMT1lfREVURUNUX1RJTUVPVVQpIHtcbiAgICAgICAgICAgIC8vIE5vdCBhIGRlcGxveSwgc28gc29tZXRoaW5nIGVsc2UgaG9sZHMgb3VyIHBvcnQgYW5kIG5vdGhpbmcgd2UgZG8gZnJvbSBoZXJlIGlzIGNvcnJlY3QuIEV4aXQsIGdpdmluZyB0aGUgbG9nIHRpbWUgdG8gcmVhY2ggdGhlIGRpc2sgZmlyc3QgLSB0aGUgbWVzc2FnZSBpcyB0aGUgb25seSB0aGluZyB0aGF0IGV4cGxhaW5zIHRoZSBleGl0LlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHtsb2dQcmVmaXgoKX0gT3VyIG1haW4gcG9ydCBpcyBpbiB1c2UsIGJ1dCB0aGUgZGVwbG95IHRpbWVsaW5lIGluICR7Z2V0VGltZWxpbmVGb2xkZXIoKX0gc2hvd2VkIG5vIHJlbGVhc2UgaW4gcHJvZ3Jlc3MgYWNyb3NzICR7YXR0ZW1wdH0gY2hlY2tzIG92ZXIgJHtlbGFwc2VkfW1zLiBTb21ldGhpbmcgZWxzZSBpcyBob2xkaW5nIG91ciBwb3J0LCBzbyB0aGlzIHByb2Nlc3MgaXMgaW4gYSBiYWQgc3RhdGUuIEV4aXRpbmcgaW4gJHtFWElUX0xPR19GTFVTSF9ERUxBWX1tcy5gKTtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBFWElUX0xPR19GTFVTSF9ERUxBWSkpO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUud2FybihgJHtsb2dQcmVmaXgoKX0gTm8gcmVsZWFzZSBpbiBwcm9ncmVzcyBpbiB0aGUgZGVwbG95IHRpbWVsaW5lIHlldCAoYXR0ZW1wdCAke2F0dGVtcHR9LCAke2VsYXBzZWR9bXMgb2YgJHtERVBMT1lfREVURUNUX1RJTUVPVVR9bXMpOyByZXRyeWluZyBpbiAke0RFUExPWV9ERVRFQ1RfUkVUUllfREVMQVl9bXNgKTtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIERFUExPWV9ERVRFQ1RfUkVUUllfREVMQVkpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbHRQb3J0KHBvcnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGFrZW92ZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbiBhbHRlcm5hdGUgcG9ydCAoJHtwb3J0fSkgd2FzIHRha2VuIHdpdGhvdXQgYSBkZXRlY3RlZCBkZXBsb3kgdGFrZW92ZXIgLSBkZXRlY3REZXBsb3lUYWtlb3ZlciBtdXN0IHJ1biBmaXJzdGApO1xuICAgIH1cbiAgICB0YWtlb3Zlci5hbHRQb3J0ID0gcG9ydDtcbiAgICBjb25zb2xlLndhcm4oYCR7bG9nUHJlZml4KCl9IExpc3RlbmluZyBvbiBhbHRlcm5hdGUgcG9ydCAke3BvcnR9OiB3cml0ZXMgcm91dGUgaGVyZSB1bnRpbCAke2lzbyhnZXRJbnRlcm1lZGlhdGVFbmQoKSl9LCBhbmQgd2Uga2VlcCBsaXN0ZW5pbmcgdW50aWwgJHtpc28oZ2V0QWx0UG9ydExpc3RlbkVuZCgpKX1gKTtcbiAgICBzdGFydEludGVybWVkaWF0ZU1haW50ZW5hbmNlKCk7XG59XG5cbi8qKiBUaGUgd2luZG93IGluIHdoaWNoIHdyaXRlcyBiZWxvbmcgdG8gb3VyIGFsdGVybmF0ZSBwb3J0OiBmcm9tIHRoZSByZWxlYXNlIHVudGlsIG91ciBwcmVkZWNlc3NvciBpcyBraWxsZWQgYW5kIHdlIHRha2UgdGhlIG1haW4gcG9ydC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWtlb3ZlckludGVybWVkaWF0ZSgpOiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyOyBhbHRQb3J0OiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0YWtlb3Zlcj8uYWx0UG9ydCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4geyBzdGFydDogdGFrZW92ZXIucmVsZWFzZVRpbWUsIGVuZDogZ2V0SW50ZXJtZWRpYXRlRW5kKCksIGFsdFBvcnQ6IHRha2VvdmVyLmFsdFBvcnQgfTtcbn1cblxuZnVuY3Rpb24gZ2V0SW50ZXJtZWRpYXRlRW5kKCk6IG51bWJlciB7XG4gICAgaWYgKCF0YWtlb3ZlcikgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHRha2VvdmVyLnJlbGVhc2VUaW1lICsgdGFrZW92ZXIub3ZlcmxhcFRpbWU7XG59XG5cbi8qKiBXZSBuZXZlciBzdG9wIGxpc3RlbmluZyBvbiB0aGUgYWx0ZXJuYXRlIHBvcnQgd2hpbGUgaXRzIHdpbmRvdyBpcyBzdGlsbCB2YWxpZCwgYW5kIGhvbGQgaXQgd2VsbCBwYXN0IHRoYXQgZm9yIGNsaWVudHMgdGhhdCBoYXZlIG5vdCBjYXVnaHQgdXAgeWV0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFsdFBvcnRMaXN0ZW5FbmQoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRha2VvdmVyKSByZXR1cm4gMDtcbiAgICByZXR1cm4gTWF0aC5tYXgodGFrZW92ZXIucmVsZWFzZVRpbWUgKyB0YWtlb3Zlci5vdmVybGFwVGltZSAqIDIsIGdldEludGVybWVkaWF0ZUVuZCgpICsgQUxUX1BPUlRfTElOR0VSKTtcbn1cblxuLyoqIEhvdyBsb25nIHRvIHdhaXQgYmV0d2VlbiBtYWluLXBvcnQgYWNxdWlzaXRpb24gYXR0ZW1wdHM6IHRpZ2h0IGFyb3VuZCBvdXIgcHJlZGVjZXNzb3IncyBzY2hlZHVsZWQgZGVhdGggKHdoZW4gdGhlIHBvcnQgYWN0dWFsbHkgZnJlZXMpLCByZWxheGVkIG90aGVyd2lzZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWluUG9ydEFjcXVpcmVEZWxheSgpOiBudW1iZXIge1xuICAgIGlmICghdGFrZW92ZXIpIHJldHVybiBBQ1FVSVJFX1NMT1dfREVMQVk7XG4gICAgbGV0IHByZWRlY2Vzc29yRW5kID0gdGFrZW92ZXIucmVsZWFzZVRpbWUgKyB0YWtlb3Zlci5vdmVybGFwVGltZTtcbiAgICBpZiAoRGF0ZS5ub3coKSA+PSBwcmVkZWNlc3NvckVuZCAtIEFDUVVJUkVfRkFTVF9XSU5ET1cpIHtcbiAgICAgICAgcmV0dXJuIEFDUVVJUkVfRkFTVF9ERUxBWTtcbiAgICB9XG4gICAgcmV0dXJuIEFDUVVJUkVfU0xPV19ERUxBWTtcbn1cbiJdfQ==
136
- /* _JS_SOURCE_HASH = "55498f754f2342144b72e975063afcc91504193e84e77a62ca539d005d722e00"; */
136
+ /* _JS_SOURCE_HASH = "37d82e2855ca9adc3f9800ade92dcfffd8c34d96357499debb846309fa643e7b"; */
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
3
  //exports.findSplitUrl = exports.expireIntermediateSources = exports.injectIntermediateSource = exports.resolveIntermediateSources = exports.hasIntermediateSources = exports.getIntermediateSources = exports.nextIntermediateVersion = exports.INTERMEDIATE_EXPIRE_GRACE = void 0;
4
4
  exports.INTERMEDIATE_EXPIRE_GRACE = 15 * 60 * 1000;
@@ -116,4 +116,4 @@ function findSplitUrl(config, intermediate) {
116
116
  }
117
117
  exports.findSplitUrl = findSplitUrl;
118
118
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJtZWRpYXRlU291cmNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImludGVybWVkaWF0ZVNvdXJjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRWEsUUFBQSx5QkFBeUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN4RCxNQUFNLDZCQUE2QixHQUFHLE9BQVMsQ0FBQztBQUVoRCwyUkFBMlI7QUFDM1IsU0FBZ0IsdUJBQXVCLENBQUMsT0FBZTtJQUNuRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLDZCQUE2QixDQUFDO0lBQzdELElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2QsSUFBSSxHQUFHLENBQUMsR0FBRyw2QkFBNkIsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsT0FBTyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQzFCLENBQUM7QUFORCwwREFNQztBQUlELFNBQVMsY0FBYyxDQUFDLE1BQXdCO0lBQzVDLE9BQU8sT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDO0FBQ3RDLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUF3QjtJQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQzNDLE9BQU8sRUFBRSxHQUFHLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3RGLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxNQUFvQjtJQUNqQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsU0FBZ0Isc0JBQXNCLENB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SUFBSSxJQUFJLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUNqQyxNQUFNLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxFQUFFO1lBQ3RDLFFBQVEsRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHO1lBQ2hELGVBQWUsRUFBRSxJQUFJLENBQUMsR0FBRztZQUN6QixLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDMUIsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1NBQzNCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBZkQsOERBZUM7QUFFRCx3RkFBd0Y7QUFDeEYsU0FBZ0IsWUFBWSxDQUFDLE1BQW9CLEVBQUUsWUFBMEI7SUFDekUsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDO0lBQzVDLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQTZCLENBQUM7SUFDdkssT0FBTyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsR0FBRyxDQUFDO0FBQzFCLENBQUM7QUFKRCxvQ0FJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbW90ZUNvbmZpZywgUmVtb3RlQ29uZmlnQmFzZSwgSG9zdGVkQ29uZmlnLCBCYWNrYmxhemVDb25maWcgfSBmcm9tIFwiLi4vSUFyY2hpdmVzXCI7XG5cbmV4cG9ydCBjb25zdCBJTlRFUk1FRElBVEVfRVhQSVJFX0dSQUNFID0gMTUgKiA2MCAqIDEwMDA7XG5jb25zdCBJTlRFUk1FRElBVEVfVkVSU0lPTl9GUkFDVElPTiA9IDFfMDAwXzAwMDtcblxuLyoqIEFkZGluZyBvciByZW1vdmluZyBpbnRlcm1lZGlhdGVzIGlzIGEgcmVhbCBjb25maWcgdXBkYXRlLCBzbyBpdCB0YWtlcyBhIHJlYWwgdmVyc2lvbiBpbmNyZW1lbnQgLSBidXQgYSBwcm9wb3J0aW9uYWwgb25lLCBzbyBpdCBzdGF5cyBmYXIgYmVsb3cgd2hhdGV2ZXIgdGhlIGF1dGhvcidzIG5leHQgdmVyc2lvbiB3b3VsZCBiZSAod2hldGhlciB0aGV5IGNvdW50IDEsIDIsIDMgb3IgdXNlIHRpbWVzdGFtcHMpLCBhbmQgYSBtaWxsaW9uIG9mIHRoZW0gc3RpbGwgZml0IHVuZGVyIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRJbnRlcm1lZGlhdGVWZXJzaW9uKHZlcnNpb246IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHN0ZXAgPSBNYXRoLmFicyh2ZXJzaW9uKSAvIElOVEVSTUVESUFURV9WRVJTSU9OX0ZSQUNUSU9OO1xuICAgIGlmICghKHN0ZXAgPiAwKSkge1xuICAgICAgICBzdGVwID0gMSAvIElOVEVSTUVESUFURV9WRVJTSU9OX0ZSQUNUSU9OO1xuICAgIH1cbiAgICByZXR1cm4gdmVyc2lvbiArIHN0ZXA7XG59XG5cbnR5cGUgT2JqZWN0U291cmNlID0gSG9zdGVkQ29uZmlnIHwgQmFja2JsYXplQ29uZmlnO1xuXG5mdW5jdGlvbiBpc09iamVjdFNvdXJjZShzb3VyY2U6IFJlbW90ZUNvbmZpZ0Jhc2UpOiBzb3VyY2UgaXMgT2JqZWN0U291cmNlIHtcbiAgICByZXR1cm4gdHlwZW9mIHNvdXJjZSAhPT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gY2xvbmVTb3VyY2Uoc291cmNlOiBSZW1vdGVDb25maWdCYXNlKTogUmVtb3RlQ29uZmlnQmFzZSB7XG4gICAgaWYgKCFpc09iamVjdFNvdXJjZShzb3VyY2UpKSByZXR1cm4gc291cmNlO1xuICAgIHJldHVybiB7IC4uLnNvdXJjZSwgdmFsaWRXaW5kb3c6IFtzb3VyY2UudmFsaWRXaW5kb3dbMF0sIHNvdXJjZS52YWxpZFdpbmRvd1sxXV0gfTtcbn1cblxuZnVuY3Rpb24gam9pbktleShzb3VyY2U6IE9iamVjdFNvdXJjZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgLi4uc291cmNlLCB2YWxpZFdpbmRvdzogdW5kZWZpbmVkIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJtZWRpYXRlU291cmNlcyhjb25maWc6IFJlbW90ZUNvbmZpZyk6IE9iamVjdFNvdXJjZVtdIHtcbiAgICByZXR1cm4gY29uZmlnLnNvdXJjZXMuZmlsdGVyKHggPT4gaXNPYmplY3RTb3VyY2UoeCkgJiYgeC5pbnRlcm1lZGlhdGUpIGFzIE9iamVjdFNvdXJjZVtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzSW50ZXJtZWRpYXRlU291cmNlcyhjb25maWc6IFJlbW90ZUNvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb25maWcuc291cmNlcy5zb21lKHggPT4gaXNPYmplY3RTb3VyY2UoeCkgJiYgeC5pbnRlcm1lZGlhdGUpO1xufVxuXG4vKiogUmVtb3ZlcyBldmVyeSBpbnRlcm1lZGlhdGUgZW50cnkgYW5kIHJlam9pbnMgdGhlIHdpbmRvd3MgaXQgc3BsaXQsIGdpdmluZyBiYWNrIHRoZSB1bmRlcmx5aW5nIGNvbmZpZ3VyYXRpb24uIFR3byBjb25maWdzIHRoYXQgcmVzb2x2ZSBlcXVhbCBkaWZmZXIgb25seSBieSBpbnRlcm1lZGlhdGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbnRlcm1lZGlhdGVTb3VyY2VzKGNvbmZpZzogUmVtb3RlQ29uZmlnKTogUmVtb3RlQ29uZmlnIHtcbiAgICBpZiAoIWhhc0ludGVybWVkaWF0ZVNvdXJjZXMoY29uZmlnKSkgcmV0dXJuIGNvbmZpZztcbiAgICBsZXQgcmVtb3ZlZCA9IGdldEludGVybWVkaWF0ZVNvdXJjZXMoY29uZmlnKTtcbiAgICBsZXQgc291cmNlcyA9IGNvbmZpZy5zb3VyY2VzLmZpbHRlcih4ID0+ICFpc09iamVjdFNvdXJjZSh4KSB8fCAheC5pbnRlcm1lZGlhdGUpLm1hcChjbG9uZVNvdXJjZSk7XG4gICAgZm9yIChsZXQgZ2FwIG9mIHJlbW92ZWQpIHtcbiAgICAgICAgbGV0IFtnYXBTdGFydCwgZ2FwRW5kXSA9IGdhcC52YWxpZFdpbmRvdztcbiAgICAgICAgbGV0IGJlZm9yZSA9IHNvdXJjZXMuZmluZCh4ID0+IGlzT2JqZWN0U291cmNlKHgpICYmIHgudmFsaWRXaW5kb3dbMV0gPT09IGdhcFN0YXJ0KSBhcyBPYmplY3RTb3VyY2UgfCB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBhZnRlciA9IHNvdXJjZXMuZmluZCh4ID0+IGlzT2JqZWN0U291cmNlKHgpICYmIHgudmFsaWRXaW5kb3dbMF0gPT09IGdhcEVuZCkgYXMgT2JqZWN0U291cmNlIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoYmVmb3JlICYmIGFmdGVyICYmIGpvaW5LZXkoYmVmb3JlKSA9PT0gam9pbktleShhZnRlcikpIHtcbiAgICAgICAgICAgIGJlZm9yZS52YWxpZFdpbmRvdyA9IFtiZWZvcmUudmFsaWRXaW5kb3dbMF0sIGFmdGVyLnZhbGlkV2luZG93WzFdXTtcbiAgICAgICAgICAgIHNvdXJjZXMuc3BsaWNlKHNvdXJjZXMuaW5kZXhPZihhZnRlciksIDEpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJlZm9yZSkge1xuICAgICAgICAgICAgYmVmb3JlLnZhbGlkV2luZG93ID0gW2JlZm9yZS52YWxpZFdpbmRvd1swXSwgZ2FwRW5kXTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhZnRlcikge1xuICAgICAgICAgICAgYWZ0ZXIudmFsaWRXaW5kb3cgPSBbZ2FwU3RhcnQsIGFmdGVyLnZhbGlkV2luZG93WzFdXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyB2ZXJzaW9uOiBjb25maWcudmVyc2lvbiwgc291cmNlcyB9O1xufVxuXG4vKiogU3BsaXRzIGV2ZXJ5IHNvdXJjZSBhdCBzcGxpdFVybCBjb3ZlcmluZyBbc3RhcnQsIGVuZCkgc28gdGhhdCBtaWRkbGUgd2luZG93IHBvaW50cyBhdCBpbnRlcm1lZGlhdGVVcmwgaW5zdGVhZCwgZmxhZ2dlZCBhcyBpbnRlcm1lZGlhdGUuIElkZW1wb3RlbnQ6IGEgY29uZmlnIHRoYXQgYWxyZWFkeSBjb250YWlucyB0aGUgZXhhY3QgaW50ZXJtZWRpYXRlIGNvbWVzIGJhY2sgdW5jaGFuZ2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEludGVybWVkaWF0ZVNvdXJjZShjb25maWc6IFJlbW90ZUNvbmZpZywgaW5qZWN0OiB7IHNwbGl0VXJsOiBzdHJpbmc7IGludGVybWVkaWF0ZVVybDogc3RyaW5nOyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9KTogUmVtb3RlQ29uZmlnIHtcbiAgICBsZXQgeyBzcGxpdFVybCwgaW50ZXJtZWRpYXRlVXJsLCBzdGFydCwgZW5kIH0gPSBpbmplY3Q7XG4gICAgaWYgKHN0YXJ0ID49IGVuZCkgcmV0dXJuIGNvbmZpZztcbiAgICBpZiAoY29uZmlnLnNvdXJjZXMuc29tZSh4ID0+IGlzT2JqZWN0U291cmNlKHgpICYmIHguaW50ZXJtZWRpYXRlICYmIHgudXJsID09PSBpbnRlcm1lZGlhdGVVcmwgJiYgeC52YWxpZFdpbmRvd1swXSA9PT0gc3RhcnQgJiYgeC52YWxpZFdpbmRvd1sxXSA9PT0gZW5kKSkge1xuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgICBsZXQgc291cmNlczogUmVtb3RlQ29uZmlnQmFzZVtdID0gW107XG4gICAgZm9yIChsZXQgc291cmNlIG9mIGNvbmZpZy5zb3VyY2VzKSB7XG4gICAgICAgIGlmICghaXNPYmplY3RTb3VyY2Uoc291cmNlKSB8fCBzb3VyY2UudXJsICE9PSBzcGxpdFVybCB8fCBzb3VyY2UuaW50ZXJtZWRpYXRlKSB7XG4gICAgICAgICAgICBzb3VyY2VzLnB1c2goY2xvbmVTb3VyY2Uoc291cmNlKSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgW3dpbmRvd1N0YXJ0LCB3aW5kb3dFbmRdID0gc291cmNlLnZhbGlkV2luZG93O1xuICAgICAgICBpZiAod2luZG93RW5kIDw9IHN0YXJ0IHx8IHdpbmRvd1N0YXJ0ID49IGVuZCkge1xuICAgICAgICAgICAgc291cmNlcy5wdXNoKGNsb25lU291cmNlKHNvdXJjZSkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1pZGRsZVN0YXJ0ID0gTWF0aC5tYXgod2luZG93U3RhcnQsIHN0YXJ0KTtcbiAgICAgICAgbGV0IG1pZGRsZUVuZCA9IE1hdGgubWluKHdpbmRvd0VuZCwgZW5kKTtcbiAgICAgICAgaWYgKG1pZGRsZVN0YXJ0ID4gd2luZG93U3RhcnQpIHtcbiAgICAgICAgICAgIHNvdXJjZXMucHVzaCh7IC4uLnNvdXJjZSwgdmFsaWRXaW5kb3c6IFt3aW5kb3dTdGFydCwgbWlkZGxlU3RhcnRdIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNvdXJjZXMucHVzaCh7IC4uLnNvdXJjZSwgdXJsOiBpbnRlcm1lZGlhdGVVcmwsIHZhbGlkV2luZG93OiBbbWlkZGxlU3RhcnQsIG1pZGRsZUVuZF0sIGludGVybWVkaWF0ZTogdHJ1ZSB9KTtcbiAgICAgICAgaWYgKHdpbmRvd0VuZCA+IG1pZGRsZUVuZCkge1xuICAgICAgICAgICAgc291cmNlcy5wdXNoKHsgLi4uc291cmNlLCB2YWxpZFdpbmRvdzogW21pZGRsZUVuZCwgd2luZG93RW5kXSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyB2ZXJzaW9uOiBjb25maWcudmVyc2lvbiwgc291cmNlcyB9O1xufVxuXG4vKiogSW50ZXJtZWRpYXRlcyB3aG9zZSB3aW5kb3cgZW5kZWQgbW9yZSB0aGFuIElOVEVSTUVESUFURV9FWFBJUkVfR1JBQ0UgYWdvIGFyZSByZW1vdmVkLCBhbmQgdGhlIHdpbmRvd3MgdGhleSBzcGxpdCBhcmUgcmVqb2luZWQuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwaXJlSW50ZXJtZWRpYXRlU291cmNlcyhjb25maWc6IFJlbW90ZUNvbmZpZywgbm93OiBudW1iZXIpOiBSZW1vdGVDb25maWcge1xuICAgIGxldCBleHBpcmVkID0gZ2V0SW50ZXJtZWRpYXRlU291cmNlcyhjb25maWcpLmZpbHRlcih4ID0+IHgudmFsaWRXaW5kb3dbMV0gKyBJTlRFUk1FRElBVEVfRVhQSVJFX0dSQUNFIDwgbm93KTtcbiAgICBpZiAoIWV4cGlyZWQubGVuZ3RoKSByZXR1cm4gY29uZmlnO1xuICAgIGxldCBrZXB0SW50ZXJtZWRpYXRlcyA9IGdldEludGVybWVkaWF0ZVNvdXJjZXMoY29uZmlnKS5maWx0ZXIoeCA9PiAhZXhwaXJlZC5pbmNsdWRlcyh4KSk7XG4gICAgbGV0IHJlc29sdmVkID0gcmVzb2x2ZUludGVybWVkaWF0ZVNvdXJjZXMoY29uZmlnKTtcbiAgICBsZXQgcmVzdWx0ID0gcmVzb2x2ZWQ7XG4gICAgZm9yIChsZXQga2VlcCBvZiBrZXB0SW50ZXJtZWRpYXRlcykge1xuICAgICAgICByZXN1bHQgPSBpbmplY3RJbnRlcm1lZGlhdGVTb3VyY2UocmVzdWx0LCB7XG4gICAgICAgICAgICBzcGxpdFVybDogZmluZFNwbGl0VXJsKGNvbmZpZywga2VlcCkgfHwga2VlcC51cmwsXG4gICAgICAgICAgICBpbnRlcm1lZGlhdGVVcmw6IGtlZXAudXJsLFxuICAgICAgICAgICAgc3RhcnQ6IGtlZXAudmFsaWRXaW5kb3dbMF0sXG4gICAgICAgICAgICBlbmQ6IGtlZXAudmFsaWRXaW5kb3dbMV0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogVGhlIHVybCBvZiB0aGUgZW50cnkgYW4gaW50ZXJtZWRpYXRlIHdhcyBzcGxpdCBvdXQgb2YgLSB0aGUgbmVpZ2hib3VyIGl0IHRvdWNoZXMuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFNwbGl0VXJsKGNvbmZpZzogUmVtb3RlQ29uZmlnLCBpbnRlcm1lZGlhdGU6IE9iamVjdFNvdXJjZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IFtzdGFydCwgZW5kXSA9IGludGVybWVkaWF0ZS52YWxpZFdpbmRvdztcbiAgICBsZXQgbmVpZ2hib3VyID0gY29uZmlnLnNvdXJjZXMuZmluZCh4ID0+IGlzT2JqZWN0U291cmNlKHgpICYmICF4LmludGVybWVkaWF0ZSAmJiAoeC52YWxpZFdpbmRvd1sxXSA9PT0gc3RhcnQgfHwgeC52YWxpZFdpbmRvd1swXSA9PT0gZW5kKSkgYXMgT2JqZWN0U291cmNlIHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBuZWlnaGJvdXI/LnVybDtcbn1cbiJdfQ==
119
- /* _JS_SOURCE_HASH = "09530ab946371c523e615e86161ca5c7281438805a330d7f0e340e75a91f9b7c"; */
119
+ /* _JS_SOURCE_HASH = "a964e0a6a3feacb4ae1c41095dd57421af2049110286a3c0dd9d7ee374479521"; */