sliftutils 1.7.121 → 1.7.122

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 (64) hide show
  1. package/dist/treeSummary.ts.cache +2 -2
  2. package/index.d.ts +74 -7
  3. package/misc/dist/environment.ts.cache +2 -2
  4. package/misc/dist/getSecret.ts.cache +2 -2
  5. package/misc/dist/strings.ts.cache +2 -2
  6. package/misc/dist/zip.ts.cache +2 -2
  7. package/misc/https/dist/certs.ts.cache +2 -2
  8. package/misc/https/dist/persistentLocalStorage.ts.cache +2 -2
  9. package/package.json +2 -2
  10. package/render-utils/dist/observer.tsx.cache +2 -2
  11. package/storage/BulkDatabase2/BulkDatabase2.d.ts +14 -2
  12. package/storage/BulkDatabase2/BulkDatabase2.ts +15 -2
  13. package/storage/BulkDatabase2/BulkDatabaseBase.d.ts +57 -5
  14. package/storage/BulkDatabase2/BulkDatabaseBase.ts +288 -137
  15. package/storage/BulkDatabase2/LoadedIndex.d.ts +1 -0
  16. package/storage/BulkDatabase2/LoadedIndex.ts +2 -1
  17. package/storage/BulkDatabase2/blockCache.ts +6 -1
  18. package/storage/BulkDatabase2/dist/BulkDatabaseBase.ts.cache +257 -162
  19. package/storage/BulkDatabase2/dist/LoadedIndex.ts.cache +2 -2
  20. package/storage/BulkDatabase2/dist/blockCache.ts.cache +8 -3
  21. package/storage/BulkDatabase2/dist/syncClient.ts.cache +30 -4
  22. package/storage/BulkDatabase2/syncClient.d.ts +2 -0
  23. package/storage/BulkDatabase2/syncClient.ts +27 -2
  24. package/storage/PrivateFileSystemStorage.ts +43 -6
  25. package/storage/dist/ArchivesDisk.ts.cache +2 -2
  26. package/storage/dist/FileFolderAPI.tsx.cache +2 -2
  27. package/storage/dist/IArchives.ts.cache +2 -2
  28. package/storage/dist/IndexedDBFileFolderAPI.ts.cache +2 -2
  29. package/storage/dist/JSONStorage.ts.cache +2 -2
  30. package/storage/dist/PendingManager.tsx.cache +2 -2
  31. package/storage/dist/PrivateFileSystemStorage.ts.cache +43 -8
  32. package/storage/dist/StreamingLogs.ts.cache +2 -2
  33. package/storage/dist/TransactionFile.ts.cache +2 -2
  34. package/storage/dist/TransactionStorage.ts.cache +2 -2
  35. package/storage/dist/backblaze.ts.cache +2 -2
  36. package/storage/dist/fileSystemPointer.ts.cache +2 -2
  37. package/storage/dist/remoteFileStorage.ts.cache +2 -2
  38. package/storage/remoteStorage/dist/ArchivesDelayed.ts.cache +2 -2
  39. package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +2 -2
  40. package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +2 -2
  41. package/storage/remoteStorage/dist/accessStats.ts.cache +2 -2
  42. package/storage/remoteStorage/dist/blobStore.ts.cache +2 -2
  43. package/storage/remoteStorage/dist/bucketDisk.ts.cache +2 -2
  44. package/storage/remoteStorage/dist/certTrustModal.tsx.cache +2 -2
  45. package/storage/remoteStorage/dist/chainStartup.ts.cache +2 -2
  46. package/storage/remoteStorage/dist/cliArgs.ts.cache +2 -2
  47. package/storage/remoteStorage/dist/createArchives.ts.cache +2 -2
  48. package/storage/remoteStorage/dist/deployTakeover.ts.cache +2 -2
  49. package/storage/remoteStorage/dist/intermediateManagement.ts.cache +2 -2
  50. package/storage/remoteStorage/dist/intermediateSources.ts.cache +2 -2
  51. package/storage/remoteStorage/dist/remoteConfig.ts.cache +2 -2
  52. package/storage/remoteStorage/dist/serverConfig.ts.cache +2 -2
  53. package/storage/remoteStorage/dist/sourceWrapper.ts.cache +2 -2
  54. package/storage/remoteStorage/dist/sourcesList.ts.cache +2 -2
  55. package/storage/remoteStorage/dist/storageClientController.ts.cache +2 -2
  56. package/storage/remoteStorage/dist/storageController.ts.cache +2 -2
  57. package/storage/remoteStorage/dist/storageLogs.ts.cache +2 -2
  58. package/storage/remoteStorage/dist/storageServerState.ts.cache +2 -2
  59. package/storage/remoteStorage/dist/storeConfig.ts.cache +2 -2
  60. package/storage/remoteStorage/dist/storePlan.ts.cache +2 -2
  61. package/storage/remoteStorage/dist/storeSources.ts.cache +2 -2
  62. package/storage/remoteStorage/dist/storeSync.ts.cache +2 -2
  63. package/storage/remoteStorage/dist/validation.ts.cache +2 -2
  64. package/yarn.lock +4 -4
@@ -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.JSONStorage = void 0;
4
4
  class JSONStorage {
@@ -39,4 +39,4 @@ class JSONStorage {
39
39
  }
40
40
  exports.JSONStorage = JSONStorage;
41
41
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSlNPTlN0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJKU09OU3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxNQUFhLFdBQVc7SUFDcEIsWUFBb0IsT0FBeUI7UUFBekIsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7SUFBSSxDQUFDO0lBQzNDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBVztRQUN4QixJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxJQUFJLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0UsQ0FBQztJQUNMLENBQUM7SUFDTSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFRO1FBQ2xDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNNLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBVztRQUMzQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDTSxLQUFLLENBQUMsT0FBTztRQUNoQixPQUFPLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBQ00sS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFXO1FBQzVCLE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBR00sV0FBVyxDQUFDLFFBQW9COztRQUNuQyxNQUFBLE1BQUEsSUFBSSxDQUFDLE9BQU8sRUFBQyxXQUFXLG1EQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNkLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO0NBQ0o7QUFsQ0Qsa0NBa0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVN0b3JhZ2UgfSBmcm9tIFwiLi9JU3RvcmFnZVwiO1xuXG5leHBvcnQgY2xhc3MgSlNPTlN0b3JhZ2U8VD4gaW1wbGVtZW50cyBJU3RvcmFnZTxUPiB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yYWdlOiBJU3RvcmFnZTxCdWZmZXI+KSB7IH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGxldCBidWZmZXIgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KGtleSk7XG4gICAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoYnVmZmVyLnRvU3RyaW5nKCkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBwYXJzZSBKU09OIGZvciBrZXk6ICR7a2V5fWAsIGJ1ZmZlci50b1N0cmluZygpLCBlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KGtleSwgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkodmFsdWUpKSk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyByZW1vdmUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnJlbW92ZShrZXkpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0S2V5cygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0S2V5cygpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5mbyhrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zdG9yYWdlLmdldEluZm8oa2V5KTtcbiAgICB9XG5cblxuICAgIHB1YmxpYyB3YXRjaFJlc3luYyhjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0b3JhZ2Uud2F0Y2hSZXN5bmM/LihjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlc2V0KCkge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2UucmVzZXQoKTtcbiAgICB9XG59Il19
42
- /* _JS_SOURCE_HASH = "f03428270acaeee0f8ce5c36431ab07129e822c838b99d45a1a085eb16bfaf86"; */
42
+ /* _JS_SOURCE_HASH = "7a9cf8297fe980da38910179b8b66f49e41f098183e7244868f5e4b41487096a"; */
@@ -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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
3
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
4
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -70,4 +70,4 @@ exports.PendingDisplay = PendingDisplay = __decorate([
70
70
  observer_1.observer
71
71
  ], PendingDisplay);
72
72
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVuZGluZ01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJQZW5kaW5nTWFuYWdlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDO0FBRXBDLG1EQUE0RDtBQUM1RCwrQkFBa0M7QUFDbEMsb0RBQTRCO0FBQzVCLDZDQUFrQztBQUNsQyx1REFBb0Q7QUFDcEQsa0VBQW1FO0FBRW5FLElBQUksVUFBVSxHQUFHLElBQUEsaUJBQVUsRUFBQztJQUN4QixPQUFPLEVBQUUsRUFBaUM7Q0FDN0MsQ0FBQyxDQUFDO0FBQ0gsSUFBSSxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7QUFFaEQsSUFBSSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7QUFFN0MsOEJBQThCO0FBQzlCLFNBQWdCLFVBQVUsQ0FBQyxLQUFhLEVBQUUsT0FBZTtJQUNyRCxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqQyxLQUFLLGNBQWMsRUFBRSxDQUFDO0FBQzFCLENBQUM7QUFIRCxnQ0FHQztBQUVELFNBQWdCLFVBQVU7SUFDdEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFGRCxnQ0FFQztBQUVELHlLQUF5SztBQUN6SyxNQUFNLGNBQWMsR0FBRyxJQUFBLHVCQUFnQixFQUFDLEdBQUcsRUFBRSxTQUFTLGNBQWM7SUFDaEUsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXhDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNYLElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDVixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO2dCQUNwQyxJQUFJLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQztvQkFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwSixDQUFDO2dCQUNELGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsQ0FBQztZQUNELE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNKLDZDQUE2QztZQUM3QyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUN4QyxDQUFDO0lBQ0wsQ0FBQztJQUNELFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6QixDQUFDLENBQUMsQ0FBQztBQUdJLElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWUsU0FBUSxnQkFBTSxDQUFDLFNBQVM7SUFDaEQsTUFBTTtRQUNGLDZEQUE2RDtRQUM3RCxPQUFPLHdDQUFLLFNBQVMsRUFBRSxpQkFBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FDMUMsd0NBQUssU0FBUyxFQUFFLGlCQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRixLQUFLOztZQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQ2pDLENBQ1QsQ0FBQyxDQUNBLENBQUM7SUFDWCxDQUFDO0NBQ0osQ0FBQTtBQVhZLHdDQUFjO3lCQUFkLGNBQWM7SUFEMUIsbUJBQVE7R0FDSSxjQUFjLENBVzFCIiwic291cmNlc0NvbnRlbnQiOlsicHJvY2Vzcy5lbnYuTk9ERV9FTlYgPSBcInByb2R1Y3Rpb25cIjtcblxuaW1wb3J0IHsgdGhyb3R0bGVGdW5jdGlvbiB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCB7IG9ic2VydmFibGUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHByZWFjdCBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjc3MgfSBmcm9tIFwidHlwZXNhZmVjc3NcIjtcbmltcG9ydCB7IG9ic2VydmVyIH0gZnJvbSBcIi4uL3JlbmRlci11dGlscy9vYnNlcnZlclwiO1xuaW1wb3J0IHsgZm9ybWF0VGltZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2Zvcm1hdHRpbmcvZm9ybWF0XCI7XG5cbmxldCB3YXRjaFN0YXRlID0gb2JzZXJ2YWJsZSh7XG4gICAgcGVuZGluZzoge30gYXMgeyBbZ3JvdXA6IHN0cmluZ106IHN0cmluZyB9XG59KTtcbmxldCBwZW5kaW5nTGFzdFNldHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG5sZXQgcGVuZGluZ0NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuLy8gXCJcIiBjbGVhcnMgdGhlIHBlbmRpbmcgdmFsdWVcbmV4cG9ydCBmdW5jdGlvbiBzZXRQZW5kaW5nKGdyb3VwOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHBlbmRpbmdDYWNoZS5zZXQoZ3JvdXAsIG1lc3NhZ2UpO1xuICAgIHZvaWQgc2V0UGVuZGluZ0Jhc2UoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1BlbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHdhdGNoU3RhdGUucGVuZGluZykubGVuZ3RoID4gMDtcbn1cblxuLy8gTk9URTogVGhpcyBub3Qgb25seSBwcmV2ZW50cyByZW5kZXIgb3ZlcmxvYWQsIGJ1dCBhbHNvIG1lYW5zIGFueSBwZW5kaW5nIHRoYXQgYXJlIDwgdGhpcyBkZWxheSBkb24ndCBzaG93IHVwICh3aGljaCBpcyB1c2VmdWwgdG8gcmVkdWNlIHVubmVjZXNzYXJ5IHBlbmRpbmcgbWVzc2FnZXMpLlxuY29uc3Qgc2V0UGVuZGluZ0Jhc2UgPSB0aHJvdHRsZUZ1bmN0aW9uKDUwMCwgZnVuY3Rpb24gc2V0UGVuZGluZ0Jhc2UoKSB7XG4gICAgZm9yIChsZXQgW2dyb3VwLCBtZXNzYWdlXSBvZiBwZW5kaW5nQ2FjaGUpIHtcblxuICAgICAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGxldCBsYXN0U2V0ID0gcGVuZGluZ0xhc3RTZXRzLmdldChncm91cCk7XG4gICAgICAgICAgICBpZiAobGFzdFNldCkge1xuICAgICAgICAgICAgICAgIGxldCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBsYXN0U2V0O1xuICAgICAgICAgICAgICAgIGlmIChkdXJhdGlvbiA+IDUwMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRmluaXNoZWQgc2xvdyB0YXNrIGFmdGVyICR7Zm9ybWF0VGltZShkdXJhdGlvbil9OiAke0pTT04uc3RyaW5naWZ5KGdyb3VwKX0sIGxhc3QgaXMgJHtKU09OLnN0cmluZ2lmeSh3YXRjaFN0YXRlLnBlbmRpbmdbZ3JvdXBdKX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGVuZGluZ0xhc3RTZXRzLmRlbGV0ZShncm91cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgd2F0Y2hTdGF0ZS5wZW5kaW5nW2dyb3VwXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2V0UGVuZGluZ1wiLCBncm91cCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBpZiAoIShncm91cCBpbiB3YXRjaFN0YXRlLnBlbmRpbmcpKSB7XG4gICAgICAgICAgICAgICAgcGVuZGluZ0xhc3RTZXRzLnNldChncm91cCwgRGF0ZS5ub3coKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3YXRjaFN0YXRlLnBlbmRpbmdbZ3JvdXBdID0gbWVzc2FnZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwZW5kaW5nQ2FjaGUuY2xlYXIoKTtcbn0pO1xuXG5Ab2JzZXJ2ZXJcbmV4cG9ydCBjbGFzcyBQZW5kaW5nRGlzcGxheSBleHRlbmRzIHByZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgLy8gU2luZ2xlIGxpbmUsIGdpdmluZyBlcXVhbCBzcGFjZSwgYW5kIGVsbGlwc2lzIGZvciBvdmVyZmxvd1xuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2Nzcy5oYm94KDEwKX0+XG4gICAgICAgICAgICB7T2JqZWN0LmtleXMod2F0Y2hTdGF0ZS5wZW5kaW5nKS5tYXAoZ3JvdXAgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuY2VudGVyLnRleHRPdmVyZmxvdyhcImVsbGlwc2lzXCIpLmJvcmRlcihcIjFweCBzb2xpZCBibGFja1wiKS5wYWQyKDYsIDIpfT5cbiAgICAgICAgICAgICAgICAgICAge2dyb3VwfToge3dhdGNoU3RhdGUucGVuZGluZ1tncm91cF19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+O1xuICAgIH1cbn0iXX0=
73
- /* _JS_SOURCE_HASH = "6f964fe2d67ead5a148c0cd1928308c38b1b3fa5ee2adca22b8b70648f83cd44"; */
73
+ /* _JS_SOURCE_HASH = "996761e332800c2e1a6c41718c030620fbc3e18bc8a35683dbc3562e7c6e74ba"; */
@@ -1,6 +1,15 @@
1
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.PrivateFileSystemStorage = void 0;
4
+ const batching_1 = require("socket-function/src/batching");
5
+ const WRITE_CONFLICT_RETRIES = 5;
6
+ const WRITE_CONFLICT_DELAY = 100;
7
+ // Serializes writes to the same file within this process, so two overlapping set calls can never hold a writable on the same file at once. Keyed by full path, as separate instances are commonly created for the same root.
8
+ let writeChains = new Map();
9
+ // OPFS rejects a write when the file changed between resolving the handle and finishing the write (another tab, or an overlapping write we don't control). We always write the file in full, so re-resolving the handle and writing again is correct.
10
+ function isStaleHandleError(error) {
11
+ return String((error === null || error === void 0 ? void 0 : error.stack) || error).includes("InvalidStateError");
12
+ }
4
13
  class PrivateFileSystemStorage {
5
14
  constructor(path) {
6
15
  this.path = path;
@@ -120,12 +129,38 @@ class PrivateFileSystemStorage {
120
129
  return Buffer.from(arrayBuffer);
121
130
  }
122
131
  async set(key, value) {
123
- await this.ensureInitialized();
124
- const { dir, name } = await this.resolveKey(key, true);
125
- const fileHandle = await dir.getFileHandle(name, { create: true });
126
- const writable = await fileHandle.createWritable();
127
- await writable.write(value);
128
- await writable.close();
132
+ const write = async () => {
133
+ for (let attempt = 1; attempt <= WRITE_CONFLICT_RETRIES; attempt++) {
134
+ try {
135
+ await this.ensureInitialized();
136
+ const { dir, name } = await this.resolveKey(key, true);
137
+ const fileHandle = await dir.getFileHandle(name, { create: true });
138
+ const writable = await fileHandle.createWritable();
139
+ await writable.write(value);
140
+ await writable.close();
141
+ return;
142
+ }
143
+ catch (error) {
144
+ if (!isStaleHandleError(error) || attempt === WRITE_CONFLICT_RETRIES) {
145
+ throw error;
146
+ }
147
+ console.warn(`Write of ${this.path}/${key} conflicted with another writer, retrying (attempt ${attempt} of ${WRITE_CONFLICT_RETRIES}):`, String((error === null || error === void 0 ? void 0 : error.stack) || error));
148
+ await (0, batching_1.delay)(WRITE_CONFLICT_DELAY);
149
+ }
150
+ }
151
+ };
152
+ const chainKey = `${this.path}/${key}`;
153
+ const previous = writeChains.get(chainKey) || Promise.resolve();
154
+ const current = previous.catch(() => { }).then(write);
155
+ writeChains.set(chainKey, current);
156
+ try {
157
+ await current;
158
+ }
159
+ finally {
160
+ if (writeChains.get(chainKey) === current) {
161
+ writeChains.delete(chainKey);
162
+ }
163
+ }
129
164
  }
130
165
  async append(key, value) {
131
166
  const existingContent = await this.get(key);
@@ -183,5 +218,5 @@ class PrivateFileSystemStorage {
183
218
  }
184
219
  }
185
220
  exports.PrivateFileSystemStorage = PrivateFileSystemStorage;
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJpdmF0ZUZpbGVTeXN0ZW1TdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiUHJpdmF0ZUZpbGVTeXN0ZW1TdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLE1BQWEsd0JBQXdCO0lBR2pDLFlBQW9CLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO0lBQUksQ0FBQztJQUU3QixLQUFLLENBQUMsaUJBQWlCOztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxDQUFBLE1BQUEsU0FBUyxDQUFDLE9BQU8sMENBQUUsWUFBWSxDQUFBLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1lBQ3BGLENBQUM7WUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsOEtBQThLLENBQUMsQ0FBQztZQUNwTSxDQUFDO1lBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDN0QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRU8sS0FBSyxDQUFDLGVBQWU7UUFDekIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUM7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUN0RCxPQUFPLElBQUksQ0FBQyxDQUFDLHFCQUFxQjtZQUN0QyxDQUFDO1lBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFD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QUFZO1NBQ2xDLENBQUM7SUFDTixDQUFDO0lBQ00sS0FBSyxDQUFDLEtBQUs7UUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNKO0FBeE1ELDREQXdNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElTdG9yYWdlUmF3IH0gZnJvbSBcIi4vSVN0b3JhZ2VcIjtcblxuZXhwb3J0IGNsYXNzIFByaXZhdGVGaWxlU3lzdGVtU3RvcmFnZSBpbXBsZW1lbnRzIElTdG9yYWdlUmF3IHtcbiAgICBwcml2YXRlIHJvb3RIYW5kbGU6IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhdGg6IHN0cmluZykgeyB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGVuc3VyZUluaXRpYWxpemVkKCk6IFByb21pc2U8RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZT4ge1xuICAgICAgICBpZiAoIXRoaXMucm9vdEhhbmRsZSkge1xuICAgICAgICAgICAgaWYgKCFuYXZpZ2F0b3Iuc3RvcmFnZT8uZ2V0RGlyZWN0b3J5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJpdmF0ZSBGaWxlIFN5c3RlbSBBY2Nlc3MgQVBJIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxvY2F0aW9uLnByb3RvY29sID09PSBcImZpbGU6XCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByaXZhdGUgRmlsZSBTeXN0ZW0gQVBJIGlzIGRpc2FsbG93ZWQgaW4gZmlsZTovLyB0eXBlIGxvY2F0aW9ucy4gRWl0aGVyIHVzZSB0aGUgRmlsZSBTeXN0ZW0gQVBJICh0aGUgdXNlIGdpdmVzIHlvdSBhY2Nlc3MgdG8gdGhlaXIgZmlsZSBzeXN0ZW0pLCBvciBob3N0IG9uIGFuIGFjdHVhbCBkb21haW5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucm9vdEhhbmRsZSA9IGF3YWl0IG5hdmlnYXRvci5zdG9yYWdlLmdldERpcmVjdG9yeSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3RIYW5kbGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBkaXJlY3RvcnlFeGlzdHMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5wYXRoIHx8IHRoaXMucGF0aCA9PT0gXCJcIiB8fCB0aGlzLnBhdGggPT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFJvb3QgYWx3YXlzIGV4aXN0c1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihwYXJ0ID0+IHBhcnQubGVuZ3RoID4gMCk7XG4gICAgICAgICAgICBsZXQgY3VycmVudEhhbmRsZSA9IHJvb3Q7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXRoUGFydHMpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50SGFuZGxlID0gYXdhaXQgY3VycmVudEhhbmRsZS5nZXREaXJlY3RvcnlIYW5kbGUocGFydCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldERpcmVjdG9yeUhhbmRsZShjcmVhdGVQYXRoOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZT4ge1xuICAgICAgICBjb25zdCByb290ID0gYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuXG4gICAgICAgIGlmICghdGhpcy5wYXRoIHx8IHRoaXMucGF0aCA9PT0gXCJcIiB8fCB0aGlzLnBhdGggPT09IFwiL1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcm9vdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHRoaXMucGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKHBhcnQgPT4gcGFydC5sZW5ndGggPiAwKTtcbiAgICAgICAgbGV0IGN1cnJlbnRIYW5kbGUgPSByb290O1xuXG4gICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXRoUGFydHMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEhhbmRsZSA9IGF3YWl0IGN1cnJlbnRIYW5kbGUuZ2V0RGlyZWN0b3J5SGFuZGxlKHBhcnQsIHsgY3JlYXRlOiBjcmVhdGVQYXRoIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNyZWF0ZVBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXJlY3Rvcnkgbm90IGZvdW5kOiAke3RoaXMucGF0aH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3VycmVudEhhbmRsZTtcbiAgICB9XG5cbiAgICAvLyBLZXlzIG1heSBjb250YWluIFwiL1wiIChuZXN0ZWQgcGF0aHMpLiBPUEZTIGhhbmRsZXMgcmVqZWN0IHNlcGFyYXRvcnMgaW4gbmFtZXMsIHNvIHdlXG4gICAgLy8gd2Fsay9jcmVhdGUgdGhlIGludGVybWVkaWF0ZSBkaXJlY3RvcmllcyBhbmQgcmV0dXJuIHRoZSBsZWFmIGRpcmVjdG9yeSArIGZpbGUgbmFtZS5cbiAgICBwcml2YXRlIGFzeW5jIHJlc29sdmVLZXkoa2V5OiBzdHJpbmcsIGNyZWF0ZTogYm9vbGVhbik6IFByb21pc2U8eyBkaXI6IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGU7IG5hbWU6IHN0cmluZyB9PiB7XG4gICAgICAgIGxldCBkaXIgPSBhd2FpdCB0aGlzLmdldERpcmVjdG9yeUhhbmRsZShjcmVhdGUpO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGtleS5zcGxpdChcIi9cIikuZmlsdGVyKHBhcnQgPT4gcGFydC5sZW5ndGggPiAwKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHBhcnRzLnBvcCgpO1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbXB0eSBrZXk6ICR7SlNPTi5zdHJpbmdpZnkoa2V5KX1gKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgICAgICAgIGRpciA9IGF3YWl0IGRpci5nZXREaXJlY3RvcnlIYW5kbGUocGFydCwgeyBjcmVhdGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZGlyLCBuYW1lIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRGaWxlSGFuZGxlKGtleTogc3RyaW5nLCBjcmVhdGU6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8RmlsZVN5c3RlbUZpbGVIYW5kbGUgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgICAgICBpZiAoY3JlYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRpciwgbmFtZSB9ID0gYXdhaXQgdGhpcy5yZXNvbHZlS2V5KGtleSwgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZGlyLmdldEZpbGVIYW5kbGUobmFtZSwgeyBjcmVhdGU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGlyLCBuYW1lIH0gPSBhd2FpdCB0aGlzLnJlc29sdmVLZXkoa2V5LCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZGlyLmdldEZpbGVIYW5kbGUobmFtZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmaWxlRXhpc3RzKGtleTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiAhIShhd2FpdCB0aGlzLmdldEZpbGVIYW5kbGUoa2V5LCBmYWxzZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICAvLyBDaGVjayBpZiBmaWxlIGV4aXN0cyBmaXJzdCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBlcnJvcnNcbiAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5maWxlRXhpc3RzKGtleSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVIYW5kbGUgPSBhd2FpdCB0aGlzLmdldEZpbGVIYW5kbGUoa2V5LCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIWZpbGVIYW5kbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZmlsZUhhbmRsZS5nZXRGaWxlKCk7XG4gICAgICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKTtcbiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlcik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYEVycm9yIHJlYWRpbmcgZmlsZSAke2tleX06YCwgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRSYW5nZShrZXk6IHN0cmluZywgY29uZmlnOiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0pOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCBmaWxlSGFuZGxlID0gYXdhaXQgdGhpcy5nZXRGaWxlSGFuZGxlKGtleSwgZmFsc2UpO1xuICAgICAgICBpZiAoIWZpbGVIYW5kbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZmlsZUhhbmRsZS5nZXRGaWxlKCk7XG4gICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgZmlsZS5zbGljZShjb25maWcuc3RhcnQsIGNvbmZpZy5lbmQpLmFycmF5QnVmZmVyKCk7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgICAgIGNvbnN0IHsgZGlyLCBuYW1lIH0gPSBhd2FpdCB0aGlzLnJlc29sdmVLZXkoa2V5LCB0cnVlKTtcbiAgICAgICAgY29uc3QgZmlsZUhhbmRsZSA9IGF3YWl0IGRpci5nZXRGaWxlSGFuZGxlKG5hbWUsIHsgY3JlYXRlOiB0cnVlIH0pO1xuICAgICAgICBjb25zdCB3cml0YWJsZSA9IGF3YWl0IGZpbGVIYW5kbGUuY3JlYXRlV3JpdGFibGUoKTtcbiAgICAgICAgYXdhaXQgd3JpdGFibGUud3JpdGUodmFsdWUpO1xuICAgICAgICBhd2FpdCB3cml0YWJsZS5jbG9zZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhcHBlbmQoa2V5OiBzdHJpbmcsIHZhbHVlOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdDb250ZW50ID0gYXdhaXQgdGhpcy5nZXQoa2V5KTtcbiAgICAgICAgbGV0IG5ld0NvbnRlbnQ6IEJ1ZmZlcjtcbiAgICAgICAgaWYgKGV4aXN0aW5nQ29udGVudCkge1xuICAgICAgICAgICAgbmV3Q29udGVudCA9IEJ1ZmZlci5jb25jYXQoW2V4aXN0aW5nQ29udGVudCwgdmFsdWVdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0NvbnRlbnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnNldChrZXksIG5ld0NvbnRlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZW1vdmUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgZmlsZSBleGlzdHMgZmlyc3QgdG8gYXZvaWQgdW5uZWNlc3NhcnkgZXJyb3JzXG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuZmlsZUV4aXN0cyhrZXkpKSkge1xuICAgICAgICAgICAgcmV0dXJuOyAvLyBGaWxlIGRvZXNuJ3QgZXhpc3QsIG5vdGhpbmcgdG8gcmVtb3ZlXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGRpciwgbmFtZSB9ID0gYXdhaXQgdGhpcy5yZXNvbHZlS2V5KGtleSwgZmFsc2UpO1xuICAgICAgICBhd2FpdCBkaXIucmVtb3ZlRW50cnkobmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEtleXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICAvLyBDaGVjayBpZiBkaXJlY3RvcnkgZXhpc3RzIGZpcnN0IHRvIGF2b2lkIHVubmVjZXNzYXJ5IGVycm9yc1xuICAgICAgICBpZiAoIShhd2FpdCB0aGlzLmRpcmVjdG9yeUV4aXN0cygpKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlySGFuZGxlID0gYXdhaXQgdGhpcy5nZXREaXJlY3RvcnlIYW5kbGUoZmFsc2UpO1xuICAgICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBjb25zdCB3YWxrID0gYXN5bmMgKGRpcjogRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSwgcHJlZml4OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgYXN5bmMgaXRlcmF0b3IgcHJvdG9jb2wgZm9yIEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGVcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgW25hbWUsIGhhbmRsZV0gb2YgKGRpciBhcyBhbnkpLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUua2luZCA9PT0gXCJmaWxlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKHByZWZpeCArIG5hbWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlLmtpbmQgPT09IFwiZGlyZWN0b3J5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgd2FsayhoYW5kbGUsIHByZWZpeCArIG5hbWUgKyBcIi9cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCB3YWxrKGRpckhhbmRsZSwgXCJcIik7XG4gICAgICAgIHJldHVybiBrZXlzLnNvcnQoKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldEluZm8oa2V5OiBzdHJpbmcpOiBQcm9taXNlPHVuZGVmaW5lZCB8IHtcbiAgICAgICAgc2l6ZTogbnVtYmVyO1xuICAgICAgICBsYXN0TW9kaWZpZWQ6IG51bWJlcjtcbiAgICB9PiB7XG4gICAgICAgIGxldCBmaWxlSGFuZGxlID0gYXdhaXQgdGhpcy5nZXRGaWxlSGFuZGxlKGtleSwgZmFsc2UpO1xuICAgICAgICBpZiAoIWZpbGVIYW5kbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpbGUgPSBhd2FpdCBmaWxlSGFuZGxlLmdldEZpbGUoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNpemU6IGZpbGUuc2l6ZSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyByZXNldCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xuICAgIH1cbn0iXX0=
187
- /* _JS_SOURCE_HASH = "d36140aa01c59609e7b32f01e6afca9fd5be1f57c25820dea2bf3779303d78c0"; */
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJpdmF0ZUZpbGVTeXN0ZW1TdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiUHJpdmF0ZUZpbGVTeXN0ZW1TdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUFxRDtBQUdyRCxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUNqQyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUVqQyw2TkFBNk47QUFDN04sSUFBSSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7QUFFdEQsc1BBQXNQO0FBQ3RQLFNBQVMsa0JBQWtCLENBQUMsS0FBYztJQUN0QyxPQUFPLE1BQU0sQ0FBQyxDQUFDLEtBQWUsYUFBZixLQUFLLHVCQUFMLEtBQUssQ0FBWSxLQUFLLEtBQUksS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELE1BQWEsd0JBQXdCO0lBR2pDLFlBQW9CLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO0lBQUksQ0FBQztJQUU3QixLQUFLLENBQUMsaUJBQWlCOztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxDQUFBLE1BQUEsU0FBUyxDQUFDLE9BQU8sMENBQUUsWUFBWSxDQUFBLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1lBQ3BGLENBQUM7WUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsOEtBQThLLENBQUMsQ0FBQztZQUNwTSxDQUFDO1lBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDN0QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFD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QztZQUNMLENBQUM7UUFDTCxDQUFDLENBQUM7UUFDRixNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNNLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBVztRQUk1QixJQUFJLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNkLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxJQUFJLElBQUksR0FBRyxNQUFNLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0QyxPQUFPO1lBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ2xDLENBQUM7SUFDTixDQUFDO0lBQ00sS0FBSyxDQUFDLEtBQUs7UUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNKO0FBak9ELDREQWlPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlbGF5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvYmF0Y2hpbmdcIjtcbmltcG9ydCB7IElTdG9yYWdlUmF3IH0gZnJvbSBcIi4vSVN0b3JhZ2VcIjtcblxuY29uc3QgV1JJVEVfQ09ORkxJQ1RfUkVUUklFUyA9IDU7XG5jb25zdCBXUklURV9DT05GTElDVF9ERUxBWSA9IDEwMDtcblxuLy8gU2VyaWFsaXplcyB3cml0ZXMgdG8gdGhlIHNhbWUgZmlsZSB3aXRoaW4gdGhpcyBwcm9jZXNzLCBzbyB0d28gb3ZlcmxhcHBpbmcgc2V0IGNhbGxzIGNhbiBuZXZlciBob2xkIGEgd3JpdGFibGUgb24gdGhlIHNhbWUgZmlsZSBhdCBvbmNlLiBLZXllZCBieSBmdWxsIHBhdGgsIGFzIHNlcGFyYXRlIGluc3RhbmNlcyBhcmUgY29tbW9ubHkgY3JlYXRlZCBmb3IgdGhlIHNhbWUgcm9vdC5cbmxldCB3cml0ZUNoYWlucyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHVua25vd24+PigpO1xuXG4vLyBPUEZTIHJlamVjdHMgYSB3cml0ZSB3aGVuIHRoZSBmaWxlIGNoYW5nZWQgYmV0d2VlbiByZXNvbHZpbmcgdGhlIGhhbmRsZSBhbmQgZmluaXNoaW5nIHRoZSB3cml0ZSAoYW5vdGhlciB0YWIsIG9yIGFuIG92ZXJsYXBwaW5nIHdyaXRlIHdlIGRvbid0IGNvbnRyb2wpLiBXZSBhbHdheXMgd3JpdGUgdGhlIGZpbGUgaW4gZnVsbCwgc28gcmUtcmVzb2x2aW5nIHRoZSBoYW5kbGUgYW5kIHdyaXRpbmcgYWdhaW4gaXMgY29ycmVjdC5cbmZ1bmN0aW9uIGlzU3RhbGVIYW5kbGVFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTdHJpbmcoKGVycm9yIGFzIEVycm9yKT8uc3RhY2sgfHwgZXJyb3IpLmluY2x1ZGVzKFwiSW52YWxpZFN0YXRlRXJyb3JcIik7XG59XG5cbmV4cG9ydCBjbGFzcyBQcml2YXRlRmlsZVN5c3RlbVN0b3JhZ2UgaW1wbGVtZW50cyBJU3RvcmFnZVJhdyB7XG4gICAgcHJpdmF0ZSByb290SGFuZGxlOiBGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXRoOiBzdHJpbmcpIHsgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBlbnN1cmVJbml0aWFsaXplZCgpOiBQcm9taXNlPEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGU+IHtcbiAgICAgICAgaWYgKCF0aGlzLnJvb3RIYW5kbGUpIHtcbiAgICAgICAgICAgIGlmICghbmF2aWdhdG9yLnN0b3JhZ2U/LmdldERpcmVjdG9yeSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlByaXZhdGUgRmlsZSBTeXN0ZW0gQWNjZXNzIEFQSSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsb2NhdGlvbi5wcm90b2NvbCA9PT0gXCJmaWxlOlwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcml2YXRlIEZpbGUgU3lzdGVtIEFQSSBpcyBkaXNhbGxvd2VkIGluIGZpbGU6Ly8gdHlwZSBsb2NhdGlvbnMuIEVpdGhlciB1c2UgdGhlIEZpbGUgU3lzdGVtIEFQSSAodGhlIHVzZSBnaXZlcyB5b3UgYWNjZXNzIHRvIHRoZWlyIGZpbGUgc3lzdGVtKSwgb3IgaG9zdCBvbiBhbiBhY3R1YWwgZG9tYWluYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJvb3RIYW5kbGUgPSBhd2FpdCBuYXZpZ2F0b3Iuc3RvcmFnZS5nZXREaXJlY3RvcnkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yb290SGFuZGxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZGlyZWN0b3J5RXhpc3RzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCByb290ID0gYXdhaXQgdGhpcy5lbnN1cmVJbml0aWFsaXplZCgpO1xuICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMucGF0aCB8fCB0aGlzLnBhdGggPT09IFwiXCIgfHwgdGhpcy5wYXRoID09PSBcIi9cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBSb290IGFsd2F5cyBleGlzdHNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGF0aFBhcnRzID0gdGhpcy5wYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIocGFydCA9PiBwYXJ0Lmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRIYW5kbGUgPSByb290O1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGF0aFBhcnRzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEhhbmRsZSA9IGF3YWl0IGN1cnJlbnRIYW5kbGUuZ2V0RGlyZWN0b3J5SGFuZGxlKHBhcnQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXREaXJlY3RvcnlIYW5kbGUoY3JlYXRlUGF0aDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGU+IHtcbiAgICAgICAgY29uc3Qgcm9vdCA9IGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcblxuICAgICAgICBpZiAoIXRoaXMucGF0aCB8fCB0aGlzLnBhdGggPT09IFwiXCIgfHwgdGhpcy5wYXRoID09PSBcIi9cIikge1xuICAgICAgICAgICAgcmV0dXJuIHJvb3Q7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihwYXJ0ID0+IHBhcnQubGVuZ3RoID4gMCk7XG4gICAgICAgIGxldCBjdXJyZW50SGFuZGxlID0gcm9vdDtcblxuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGF0aFBhcnRzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRIYW5kbGUgPSBhd2FpdCBjdXJyZW50SGFuZGxlLmdldERpcmVjdG9yeUhhbmRsZShwYXJ0LCB7IGNyZWF0ZTogY3JlYXRlUGF0aCB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjcmVhdGVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGlyZWN0b3J5IG5vdCBmb3VuZDogJHt0aGlzLnBhdGh9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRIYW5kbGU7XG4gICAgfVxuXG4gICAgLy8gS2V5cyBtYXkgY29udGFpbiBcIi9cIiAobmVzdGVkIHBhdGhzKS4gT1BGUyBoYW5kbGVzIHJlamVjdCBzZXBhcmF0b3JzIGluIG5hbWVzLCBzbyB3ZVxuICAgIC8vIHdhbGsvY3JlYXRlIHRoZSBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMgYW5kIHJldHVybiB0aGUgbGVhZiBkaXJlY3RvcnkgKyBmaWxlIG5hbWUuXG4gICAgcHJpdmF0ZSBhc3luYyByZXNvbHZlS2V5KGtleTogc3RyaW5nLCBjcmVhdGU6IGJvb2xlYW4pOiBQcm9taXNlPHsgZGlyOiBGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlOyBuYW1lOiBzdHJpbmcgfT4ge1xuICAgICAgICBsZXQgZGlyID0gYXdhaXQgdGhpcy5nZXREaXJlY3RvcnlIYW5kbGUoY3JlYXRlKTtcbiAgICAgICAgY29uc3QgcGFydHMgPSBrZXkuc3BsaXQoXCIvXCIpLmZpbHRlcihwYXJ0ID0+IHBhcnQubGVuZ3RoID4gMCk7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBwYXJ0cy5wb3AoKTtcbiAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZW1wdHkga2V5OiAke0pTT04uc3RyaW5naWZ5KGtleSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICAgICAgICBkaXIgPSBhd2FpdCBkaXIuZ2V0RGlyZWN0b3J5SGFuZGxlKHBhcnQsIHsgY3JlYXRlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRpciwgbmFtZSB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0RmlsZUhhbmRsZShrZXk6IHN0cmluZywgY3JlYXRlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPEZpbGVTeXN0ZW1GaWxlSGFuZGxlIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcbiAgICAgICAgaWYgKGNyZWF0ZSkge1xuICAgICAgICAgICAgY29uc3QgeyBkaXIsIG5hbWUgfSA9IGF3YWl0IHRoaXMucmVzb2x2ZUtleShrZXksIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGRpci5nZXRGaWxlSGFuZGxlKG5hbWUsIHsgY3JlYXRlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IGRpciwgbmFtZSB9ID0gYXdhaXQgdGhpcy5yZXNvbHZlS2V5KGtleSwgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGRpci5nZXRGaWxlSGFuZGxlKG5hbWUpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmlsZUV4aXN0cyhrZXk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gISEoYXdhaXQgdGhpcy5nZXRGaWxlSGFuZGxlKGtleSwgZmFsc2UpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgZmlsZSBleGlzdHMgZmlyc3QgdG8gYXZvaWQgdW5uZWNlc3NhcnkgZXJyb3JzXG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuZmlsZUV4aXN0cyhrZXkpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlSGFuZGxlID0gYXdhaXQgdGhpcy5nZXRGaWxlSGFuZGxlKGtleSwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKCFmaWxlSGFuZGxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGZpbGVIYW5kbGUuZ2V0RmlsZSgpO1xuICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCBmaWxlLmFycmF5QnVmZmVyKCk7XG4gICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYXJyYXlCdWZmZXIpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBFcnJvciByZWFkaW5nIGZpbGUgJHtrZXl9OmAsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0UmFuZ2Uoa2V5OiBzdHJpbmcsIGNvbmZpZzogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9KTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgZmlsZUhhbmRsZSA9IGF3YWl0IHRoaXMuZ2V0RmlsZUhhbmRsZShrZXksIGZhbHNlKTtcbiAgICAgICAgaWYgKCFmaWxlSGFuZGxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGZpbGVIYW5kbGUuZ2V0RmlsZSgpO1xuICAgICAgICBjb25zdCBhcnJheUJ1ZmZlciA9IGF3YWl0IGZpbGUuc2xpY2UoY29uZmlnLnN0YXJ0LCBjb25maWcuZW5kKS5hcnJheUJ1ZmZlcigpO1xuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgd3JpdGUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBXUklURV9DT05GTElDVF9SRVRSSUVTOyBhdHRlbXB0KyspIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUluaXRpYWxpemVkKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZGlyLCBuYW1lIH0gPSBhd2FpdCB0aGlzLnJlc29sdmVLZXkoa2V5LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZUhhbmRsZSA9IGF3YWl0IGRpci5nZXRGaWxlSGFuZGxlKG5hbWUsIHsgY3JlYXRlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3cml0YWJsZSA9IGF3YWl0IGZpbGVIYW5kbGUuY3JlYXRlV3JpdGFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgd3JpdGFibGUud3JpdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB3cml0YWJsZS5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1N0YWxlSGFuZGxlRXJyb3IoZXJyb3IpIHx8IGF0dGVtcHQgPT09IFdSSVRFX0NPTkZMSUNUX1JFVFJJRVMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgV3JpdGUgb2YgJHt0aGlzLnBhdGh9LyR7a2V5fSBjb25mbGljdGVkIHdpdGggYW5vdGhlciB3cml0ZXIsIHJldHJ5aW5nIChhdHRlbXB0ICR7YXR0ZW1wdH0gb2YgJHtXUklURV9DT05GTElDVF9SRVRSSUVTfSk6YCwgU3RyaW5nKChlcnJvciBhcyBFcnJvcik/LnN0YWNrIHx8IGVycm9yKSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5KFdSSVRFX0NPTkZMSUNUX0RFTEFZKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY2hhaW5LZXkgPSBgJHt0aGlzLnBhdGh9LyR7a2V5fWA7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gd3JpdGVDaGFpbnMuZ2V0KGNoYWluS2V5KSB8fCBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHByZXZpb3VzLmNhdGNoKCgpID0+IHsgfSkudGhlbih3cml0ZSk7XG4gICAgICAgIHdyaXRlQ2hhaW5zLnNldChjaGFpbktleSwgY3VycmVudCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBjdXJyZW50O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKHdyaXRlQ2hhaW5zLmdldChjaGFpbktleSkgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICB3cml0ZUNoYWlucy5kZWxldGUoY2hhaW5LZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGFwcGVuZChrZXk6IHN0cmluZywgdmFsdWU6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBleGlzdGluZ0NvbnRlbnQgPSBhd2FpdCB0aGlzLmdldChrZXkpO1xuICAgICAgICBsZXQgbmV3Q29udGVudDogQnVmZmVyO1xuICAgICAgICBpZiAoZXhpc3RpbmdDb250ZW50KSB7XG4gICAgICAgICAgICBuZXdDb250ZW50ID0gQnVmZmVyLmNvbmNhdChbZXhpc3RpbmdDb250ZW50LCB2YWx1ZV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3Q29udGVudCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0KGtleSwgbmV3Q29udGVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBDaGVjayBpZiBmaWxlIGV4aXN0cyBmaXJzdCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBlcnJvcnNcbiAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5maWxlRXhpc3RzKGtleSkpKSB7XG4gICAgICAgICAgICByZXR1cm47IC8vIEZpbGUgZG9lc24ndCBleGlzdCwgbm90aGluZyB0byByZW1vdmVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgZGlyLCBuYW1lIH0gPSBhd2FpdCB0aGlzLnJlc29sdmVLZXkoa2V5LCBmYWxzZSk7XG4gICAgICAgIGF3YWl0IGRpci5yZW1vdmVFbnRyeShuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0S2V5cygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIC8vIENoZWNrIGlmIGRpcmVjdG9yeSBleGlzdHMgZmlyc3QgdG8gYXZvaWQgdW5uZWNlc3NhcnkgZXJyb3JzXG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuZGlyZWN0b3J5RXhpc3RzKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaXJIYW5kbGUgPSBhd2FpdCB0aGlzLmdldERpcmVjdG9yeUhhbmRsZShmYWxzZSk7XG4gICAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IHdhbGsgPSBhc3luYyAoZGlyOiBGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlLCBwcmVmaXg6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIHRoZSBhc3luYyBpdGVyYXRvciBwcm90b2NvbCBmb3IgRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZVxuICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBbbmFtZSwgaGFuZGxlXSBvZiAoZGlyIGFzIGFueSkuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5raW5kID09PSBcImZpbGVcIikge1xuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2gocHJlZml4ICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoYW5kbGUua2luZCA9PT0gXCJkaXJlY3RvcnlcIikge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB3YWxrKGhhbmRsZSwgcHJlZml4ICsgbmFtZSArIFwiL1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHdhbGsoZGlySGFuZGxlLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIGtleXMuc29ydCgpO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5mbyhrZXk6IHN0cmluZyk6IFByb21pc2U8dW5kZWZpbmVkIHwge1xuICAgICAgICBzaXplOiBudW1iZXI7XG4gICAgICAgIGxhc3RNb2RpZmllZDogbnVtYmVyO1xuICAgIH0+IHtcbiAgICAgICAgbGV0IGZpbGVIYW5kbGUgPSBhd2FpdCB0aGlzLmdldEZpbGVIYW5kbGUoa2V5LCBmYWxzZSk7XG4gICAgICAgIGlmICghZmlsZUhhbmRsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZmlsZSA9IGF3YWl0IGZpbGVIYW5kbGUuZ2V0RmlsZSgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBmaWxlLmxhc3RNb2RpZmllZCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIHJlc2V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxufSJdfQ==
222
+ /* _JS_SOURCE_HASH = "d48d77b8abb9d34713bc4fea1980d744ec120d119496a16a6c55cbc3af0f65fb"; */
@@ -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
  };
@@ -396,4 +396,4 @@ class StreamingLogs {
396
396
  }
397
397
  exports.StreamingLogs = StreamingLogs;
398
398
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyZWFtaW5nTG9ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIlN0cmVhbWluZ0xvZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QixtREFBZ0Q7QUFDaEQscURBQWtEO0FBRWxELGdpQkFBZ2lCO0FBRWhpQix1RUFBdUU7QUFDdkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLDBEQUEwRDtBQUMxRCxNQUFNLGNBQWMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN6Qyx5RUFBeUU7QUFDekUsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDbEQsaUpBQWlKO0FBQ2pKLE1BQU0sd0JBQXdCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEQsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNoRCx3TEFBd0w7QUFDeEwsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzFDLHFHQUFxRztBQUNyRyxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQztBQUVsQyxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztBQUNsQyxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUM7QUFpQ3BDLFNBQVMsZ0JBQWdCLENBQUMsSUFBWTtJQUNsQyxzU0FBc1M7SUFDdFMsSUFBSSxLQUFLLEdBQUcseUhBQXlILENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pKLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDN0IsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1Qix1RkFBdUY7SUFDdkYsSUFBSSxVQUFVLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FB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QUUsQ0FBQztZQUNWLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzlCLENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixLQUFLLDZCQUE2QixPQUFPLGtCQUFrQixZQUFZLFlBQVksS0FBSyxlQUFlLENBQUMsQ0FBQztJQUN4SyxDQUFDO0lBRU0sT0FBTztRQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUF2UUQsc0NBdVFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHNvcnQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBMWjQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9sejQvTFo0XCI7XG5cbi8vIEdlbmVyaWMgYXBwZW5kLW9ubHkgSlNPTi1saW5lcyBsb2dnaW5nIG92ZXIgYSBmb2xkZXIuIEV2ZXJ5IHByb2Nlc3Mgc3RyZWFtcyB0byBpdHMgT1dOIGZpbGUgKG5hbWVkIGJ5IHBpZCArIHByb2Nlc3Mgc3RhcnQgdGltZSArIHRocmVhZCBpZCwgd2hpY2ggdG9nZXRoZXIgaWRlbnRpZnkgYSBwcm9jZXNzIGluY2FybmF0aW9uKSwgcm90YXRpbmcgdG8gYSBuZXcgZmlsZSBhdCBhIHNpemUgbGltaXQgYW5kIExaNC1jb21wcmVzc2luZyB0aGUgZmluaXNoZWQgb25lLiBFdmVyeSBwcm9jZXNzIHVzaW5nIHRoZSBmb2xkZXIgYWxzbyBNQUlOVEFJTlMgaXQgb24gYSByYW5kb21pemVkIGludGVydmFsOiBkZWFkIHByb2Nlc3NlcycgZmlsZXMgYXJlIGNvbXByZXNzZWQgZm9yIHRoZW0sIGR1cGxpY2F0ZSBjb21wcmVzc2lvbnMgYXJlIHJlc29sdmVkLCBhbmQgdGhlIG9sZGVzdCBmaWxlcyBhcmUgZGVsZXRlZCBvbmNlIHRoZSBmb2xkZXIgb3V0Z3Jvd3MgaXRzIGJ5dGUgYnVkZ2V0LiBJbnN0YW50aWF0ZSBvbmUgcGVyIGZvbGRlciBhbmQgY2FsbCBsb2coKS5cblxuLy8gQXBwZW5kcyBhcmUgY29hbGVzY2VkIGZvciB0aGlzIGxvbmc7IGEgY3Jhc2ggbG9zZXMgYXQgbW9zdCB0aGlzIG11Y2hcbmNvbnN0IEZMVVNIX0RFTEFZID0gNTAwMDtcbi8vIEEgZmlsZSByZWFjaGluZyB0aGlzIHNpemUgaXMgcm90YXRlZCBvdXQgYW5kIGNvbXByZXNzZWRcbmNvbnN0IE1BWF9GSUxFX0JZVEVTID0gMTAwICogMTAyNCAqIDEwMjQ7XG4vLyBUaGUgZm9sZGVyJ3MgdG90YWwgYnVkZ2V0OyBvbmNlIGV4Y2VlZGVkLCB0aGUgb2xkZXN0IGZpbGVzIGFyZSBkZWxldGVkXG5jb25zdCBUT1RBTF9MSU1JVF9CWVRFUyA9IDMwICogMTAyNCAqIDEwMjQgKiAxMDI0O1xuLy8gTWFpbnRlbmFuY2UgcnVucyBhdCBhIHJhbmRvbSBwb2ludCBpbiB0aGlzIHJhbmdlLCBzbyB0aGUgcHJvY2Vzc2VzIHNoYXJpbmcgdGhlIGZvbGRlciBkcmlmdCBhcGFydCBpbnN0ZWFkIG9mIHN0ZXBwaW5nIG9uIGVhY2ggb3RoZXIgZXZlcnkgcGFzc1xuY29uc3QgTUFJTlRFTkFOQ0VfTUlOX0lOVEVSVkFMID0gMzAgKiA2MCAqIDEwMDA7XG5jb25zdCBNQUlOVEVOQU5DRV9NQVhfSU5URVJWQUwgPSA2MCAqIDYwICogMTAwMDtcbi8vIEEgcGlkIGlzIG9ubHkgdGhlIHNhbWUgUFJPQ0VTUyBpZiBpdHMgc3RhcnQgdGltZSBtYXRjaGVzIHRoZSBmaWxlIG5hbWUncyAtIHdpdGhpbiB0aGlzIG11Y2gsIGJlY2F1c2Ugb3VyIG93biBzdGFydCB0aW1lIGlzIGRlcml2ZWQgZnJvbSBwcm9jZXNzLnVwdGltZSBhbmQgdGhlIE9TJ3MgaXMgcmVhZCBvZmYgL3Byb2NcbmNvbnN0IFBST0NFU1NfU1RBUlRfVE9MRVJBTkNFID0gNjAgKiAxMDAwO1xuLy8gSWYgZmx1c2hpbmcgZmFpbHMgcGVyc2lzdGVudGx5IChkaXNrIGdvbmUpLCBwZW5kaW5nIGVudHJpZXMgYXJlIGNhcHBlZCByYXRoZXIgdGhhbiBncm93aW5nIGZvcmV2ZXJcbmNvbnN0IE1BWF9QRU5ESU5HX0VOVFJJRVMgPSAxMDAwMDtcblxuY29uc3QgVU5DT01QUkVTU0VEX0VYVCA9IFwiLmpzb25sXCI7XG5jb25zdCBDT01QUkVTU0VEX0VYVCA9IFwiLmpzb25sLmx6NFwiO1xuXG4vKiogRXZlcnl0aGluZyBhIGxvZyBmaWxlJ3MgTkFNRSBzYXlzIGFib3V0IGl0IChwbHVzIGl0cyBvbi1kaXNrIHNpemUpLiBUaW1lcyBib3VuZCB0aGUgZW50cmllcyByb3VnaGx5OiBmcm9tIGlzIHdoZW4gaXRzIHByb2Nlc3Mgc3RhcnRlZCB3cml0aW5nIGl0LCB0byBpcyB3aGVuIGl0IHdhcyBjb21wcmVzc2VkLiAqL1xuZXhwb3J0IHR5cGUgTG9nRmlsZUluZm8gPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIC8qKiBCeXRlcyBvbiBkaXNrIChjb21wcmVzc2VkIGJ5dGVzIGZvciBjb21wcmVzc2VkIGZpbGVzKSAqL1xuICAgIHNpemU6IG51bWJlcjtcbiAgICBwaWQ6IG51bWJlcjtcbiAgICBwcm9jZXNzU3RhcnRUaW1lOiBudW1iZXI7XG4gICAgdGhyZWFkSWQ6IHN0cmluZztcbiAgICAvKiogV2hlbiB0aGUgcHJvY2VzcyBzdGFydGVkIHdyaXRpbmcgdGhpcyBmaWxlICovXG4gICAgc3RhcnRUaW1lOiBudW1iZXI7XG4gICAgLyoqIFdoZW4gdGhlIGZpbGUgd2FzIGNvbXByZXNzZWQgLSBhYnNlbnQgd2hpbGUgaXQgaXMgc3RpbGwgYmVpbmcgc3RyZWFtZWQgdG8gKi9cbiAgICBlbmRUaW1lPzogbnVtYmVyO1xuICAgIC8qKiBIb3cgbWFueSBlbnRyaWVzIGl0IGhvbGRzIC0gb25seSBjb3VudGVkIGF0IGNvbXByZXNzaW9uLCBzbyBhYnNlbnQgb24gbGl2ZSBmaWxlcyAqL1xuICAgIGVudHJ5Q291bnQ/OiBudW1iZXI7XG4gICAgY29tcHJlc3NlZDogYm9vbGVhbjtcbiAgICAvKiogV2hldGhlciB0aGUgd3JpdGluZyBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlIChhbHdheXMgZmFsc2UgZm9yIGNvbXByZXNzZWQgZmlsZXMpICovXG4gICAgYWN0aXZlOiBib29sZWFuO1xufTtcblxudHlwZSBQYXJzZWROYW1lID0ge1xuICAgIHBpZDogbnVtYmVyO1xuICAgIHByb2Nlc3NTdGFydFRpbWU6IG51bWJlcjtcbiAgICB0aHJlYWRJZDogc3RyaW5nO1xuICAgIHN0YXJ0VGltZTogbnVtYmVyO1xuICAgIGVuZFRpbWU/OiBudW1iZXI7XG4gICAgZW50cnlDb3VudD86IG51bWJlcjtcbiAgICBjb21wcmVzc2VkOiBib29sZWFuO1xuICAgIC8qKiBUaGUgcGFydCBpZGVudGlmeWluZyB0aGUgT1JJR0lOQUwgc3RyZWFtIChwaWQrYm9ybit0aHJlYWQrZnJvbSkgLSB3aGF0IGR1cGxpY2F0ZSBjb21wcmVzc2lvbnMgc2hhcmUgKi9cbiAgICBvcmlnaW5LZXk6IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIHBhcnNlTG9nRmlsZU5hbWUobmFtZTogc3RyaW5nKTogUGFyc2VkTmFtZSB8IHVuZGVmaW5lZCB7XG4gICAgLy8gVGhlIHRpbWUgZmllbGRzIGFjY2VwdCBhIGZyYWN0aW9uYWwgcGFydDogaG9zdHMgdGhhdCBzaGltIERhdGUubm93IHRvIGEgdHJ1ZS10aW1lIGNsb2NrIHJldHVybiBmcmFjdGlvbmFsIG1pbGxpc2Vjb25kcywgYW5kIGZpbGVzIHdyaXR0ZW4gYmVmb3JlIHRoZSB3cml0ZXIgcm91bmRlZCB0aGVtIGFyZSBhbHJlYWR5IG9uIGRpc2sgZXZlcnl3aGVyZSAtIHRoZXkgbXVzdCBzdGF5IGxpc3RhYmxlIChhbmQgbWFpbnRhaW5hYmxlLCBvciB0aGV5IHdvdWxkIG5ldmVyIGJlIGNvbXByZXNzZWQgb3IgY2xlYW5lZCkuXG4gICAgbGV0IG1hdGNoID0gL15waWQoXFxkKylfYm9ybihcXGQrKV90aHJlYWQoW1xcdy1dKz8pX2Zyb20oXFxkKyg/OlxcLlxcZCspPykoPzpfdG8oXFxkKyg/OlxcLlxcZCspPylfY291bnQoXFxkKylfaWQoW2EtejAtOV0rKSk/XFwuanNvbmwoXFwubHo0KT8kLy5leGVjKG5hbWUpO1xuICAgIGlmICghbWF0Y2gpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgbGV0IGNvbXByZXNzZWQgPSAhIW1hdGNoWzhdO1xuICAgIC8vIEEgY29tcHJlc3NlZCBmaWxlIHdpdGhvdXQgaXRzIGNvbXByZXNzaW9uIGZpZWxkcyAob3IgdGhlIHJldmVyc2UpIGlzIG5vdCBvbmUgb2Ygb3Vyc1xuICAgIGlmIChjb21wcmVzc2VkICE9PSAobWF0Y2hbNV0gIT09IHVuZGVmaW5lZCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcGlkOiArbWF0Y2hbMV0sXG4gICAgICAgIHByb2Nlc3NTdGFydFRpbWU6ICttYXRjaFsyXSxcbiAgICAgICAgdGhyZWFkSWQ6IG1hdGNoWzNdLFxuICAgICAgICBzdGFydFRpbWU6ICttYXRjaFs0XSxcbiAgICAgICAgZW5kVGltZTogbWF0Y2hbNV0gIT09IHVuZGVmaW5lZCAmJiArbWF0Y2hbNV0gfHwgdW5kZWZpbmVkLFxuICAgICAgICBlbnRyeUNvdW50OiBtYXRjaFs2XSAhPT0gdW5kZWZpbmVkICYmICttYXRjaFs2XSB8fCB1bmRlZmluZWQsXG4gICAgICAgIGNvbXByZXNzZWQsXG4gICAgICAgIG9yaWdpbktleTogYHBpZCR7bWF0Y2hbMV19X2Jvcm4ke21hdGNoWzJdfV90aHJlYWQke21hdGNoWzNdfV9mcm9tJHttYXRjaFs0XX1gLFxuICAgIH07XG59XG5cbi8qKiBXaGV0aGVyIHRoZSBwaWQgaXMgYWxpdmUgQU5EIGlzIHRoZSBzYW1lIHByb2Nlc3MgaW5jYXJuYXRpb24gdGhlIGZpbGUgbmFtZSBkZXNjcmliZWQuIE9uIExpbnV4IC9wcm9jIGdpdmVzIHRoZSByZWFsIHN0YXJ0IHRpbWU7IGVsc2V3aGVyZSBhIGxpdmUgcGlkIGlzIGNvbnNlcnZhdGl2ZWx5IHRyZWF0ZWQgYXMgdGhlIHNhbWUgcHJvY2VzcyAobmV2ZXIgY29tcHJlc3MgdW5kZXIgYSBydW5uaW5nIHByb2Nlc3MpLiAqL1xuYXN5bmMgZnVuY3Rpb24gaXNQcm9jZXNzQWxpdmUocGlkOiBudW1iZXIsIHByb2Nlc3NTdGFydFRpbWU6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICAgIHByb2Nlc3Mua2lsbChwaWQsIDApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGxldCBzdGF0ID0gYXdhaXQgZnMucHJvbWlzZXMuc3RhdChgL3Byb2MvJHtwaWR9YCk7XG4gICAgICAgIHJldHVybiBNYXRoLmFicyhzdGF0LmN0aW1lTXMgLSBwcm9jZXNzU3RhcnRUaW1lKSA8IFBST0NFU1NfU1RBUlRfVE9MRVJBTkNFO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogQSBzZWFyY2hlciBvdmVyIG9uZSBsb2cgZmlsZSAoYXMgcmVhZEZpbGVDb21wcmVzc2VkIHJldHVybnMgaXQgLSBhbHdheXMgTFo0KSB0aGF0IG5ldmVyIGRlY29kZXNcbiAqIHRoZSB3aG9sZSB0aGluZzogSlNPTiBlc2NhcGVzIGxpbmUgYnJlYWtzIGluc2lkZSBzdHJpbmdzLCBzbyB0aGUgb25seSBBQ1RVQUwgbGluZSBicmVha3MgaW4gdGhlXG4gKiBmaWxlIGFyZSB0aGUgc2VwYXJhdG9ycyBiZXR3ZWVuIGxvZyBzdGF0ZW1lbnRzIC0gYSBwbGFpbiBzdWJzdHJpbmcgc2VhcmNoIG92ZXIgdGhlIHJhdyB0ZXh0LFxuICogYm91bmRlZCBvdXQgdG8gdGhlIHN1cnJvdW5kaW5nIGxpbmUgYnJlYWtzLCBmaW5kcyBleGFjdGx5IHRoZSBtYXRjaGluZyBzdGF0ZW1lbnRzLCBhbmQgb25seSBUSE9TRVxuICogYXJlIGRlY29kZWQgYW5kIHJldHVybmVkIGFzIG9iamVjdHMuIEV2ZXJ5IHNlYXJjaCBzdHJpbmcgbXVzdCBhcHBlYXIgaW4gYSBzdGF0ZW1lbnQncyByYXcgSlNPTiBmb3JcbiAqIGl0IHRvIG1hdGNoIChzbyBzZWFyY2ggZm9yIHZhbHVlcyBhcyB0aGV5IGFyZSBlbmNvZGVkIC0gZS5nLiBxdW90ZWQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9nU2VhcmNoZXIoZGF0YTogQnVmZmVyKTogKHNlYXJjaGVzOiBzdHJpbmdbXSkgPT4gdW5rbm93bltdIHtcbiAgICBsZXQgdGV4dCA9IExaNC5kZWNvbXByZXNzKGRhdGEpLnRvU3RyaW5nKFwidXRmOFwiKTtcbiAgICByZXR1cm4gc2VhcmNoZXMgPT4ge1xuICAgICAgICBpZiAoIXNlYXJjaGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlIGF0IGxlYXN0IG9uZSBzZWFyY2ggc3RyaW5nIChhbiBlbXB0eSBzZWFyY2ggd291bGQganVzdCBiZSBkZWNvZGVMb2dGaWxlKWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbnRyaWVzOiB1bmtub3duW10gPSBbXTtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGxldCBmb3VuZCA9IHRleHQuaW5kZXhPZihzZWFyY2hlc1swXSwgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKGZvdW5kID09PSAtMSkgYnJlYWs7XG4gICAgICAgICAgICBsZXQgbGluZVN0YXJ0ID0gdGV4dC5sYXN0SW5kZXhPZihcIlxcblwiLCBmb3VuZCkgKyAxO1xuICAgICAgICAgICAgbGV0IGxpbmVFbmQgPSB0ZXh0LmluZGV4T2YoXCJcXG5cIiwgZm91bmQpO1xuICAgICAgICAgICAgaWYgKGxpbmVFbmQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbGluZUVuZCA9IHRleHQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUGFzdCB0aGlzIGxpbmUgZWl0aGVyIHdheSwgc28gc2V2ZXJhbCBtYXRjaGVzIGluc2lkZSBvbmUgc3RhdGVtZW50IHJldHVybiBpdCBvbmNlXG4gICAgICAgICAgICBpbmRleCA9IGxpbmVFbmQgKyAxO1xuICAgICAgICAgICAgbGV0IGxpbmUgPSB0ZXh0LnNsaWNlKGxpbmVTdGFydCwgbGluZUVuZCk7XG4gICAgICAgICAgICBsZXQgbWF0Y2hlc0FsbCA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGxldCBvdGhlciBvZiBzZWFyY2hlcy5zbGljZSgxKSkge1xuICAgICAgICAgICAgICAgIGlmICghbGluZS5pbmNsdWRlcyhvdGhlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlc0FsbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW1hdGNoZXNBbGwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goSlNPTi5wYXJzZShsaW5lKSk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAvLyBBIHRvcm4gZmluYWwgbGluZSAodGhlIHdyaXRlciBjcmFzaGVkIG1pZC1hcHBlbmQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfTtcbn1cblxuLyoqIERlY29kZXMgYSBsb2cgZmlsZSdzIGJ5dGVzIChhcyByZWFkRmlsZUNvbXByZXNzZWQgcmV0dXJucyB0aGVtIC0gYWx3YXlzIExaNCkgYmFjayBpbnRvIHRoZSBsb2dnZWQgb2JqZWN0cy4gQSB0b3JuIGZpbmFsIGxpbmUgKHRoZSB3cml0ZXIgY3Jhc2hlZCBtaWQtYXBwZW5kKSBpcyBza2lwcGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUxvZ0ZpbGUoZGF0YTogQnVmZmVyKTogdW5rbm93bltdIHtcbiAgICBsZXQgdGV4dCA9IExaNC5kZWNvbXByZXNzKGRhdGEpLnRvU3RyaW5nKFwidXRmOFwiKTtcbiAgICBsZXQgZW50cmllczogdW5rbm93bltdID0gW107XG4gICAgZm9yIChsZXQgbGluZSBvZiB0ZXh0LnNwbGl0KFwiXFxuXCIpKSB7XG4gICAgICAgIGlmICghbGluZSkgY29udGludWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goSlNPTi5wYXJzZShsaW5lKSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG59XG5cbmV4cG9ydCBjbGFzcyBTdHJlYW1pbmdMb2dzIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzoge1xuICAgICAgICBmb2xkZXI6IHN0cmluZztcbiAgICAgICAgLyoqIEluY2x1ZGVkIGluIGV2ZXJ5IGZpbGUgbmFtZSAtIHNlZSBtaXNjL2h0dHBzL2NlcnRzLnRzIGdldE93blRocmVhZElkLiBQcm9jZXNzZXMgd2l0aG91dCBvbmUgd3JpdGUgXCJub25lXCIuICovXG4gICAgICAgIHRocmVhZElkPzogc3RyaW5nO1xuICAgICAgICBtYXhGaWxlQnl0ZXM/OiBudW1iZXI7XG4gICAgICAgIHRvdGFsTGltaXRCeXRlcz86IG51bWJlcjtcbiAgICB9KSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVNYWludGVuYW5jZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1N0YXJ0VGltZSA9IE1hdGgucm91bmQoRGF0ZS5ub3coKSAtIHByb2Nlc3MudXB0aW1lKCkgKiAxMDAwKTtcbiAgICBwcml2YXRlIHRocmVhZElkID0gKHRoaXMuY29uZmlnLnRocmVhZElkIHx8IFwibm9uZVwiKS5yZXBsYWNlKC9bXlxcdy1dL2csIFwiX1wiKTtcbiAgICBwcml2YXRlIHBlbmRpbmc6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBmbHVzaFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIG1haW50ZW5hbmNlVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuICAgIC8vIFNlcmlhbGl6ZXMgZXZlcnl0aGluZyB0aGF0IHRvdWNoZXMgdGhlIGN1cnJlbnQgZmlsZSwgc28gYXBwZW5kcywgcm90YXRpb24sIGFuZCBpbi1tZW1vcnkgY29tcHJlc3Npb24gb2YgdGhlIGxpdmUgZmlsZSBuZXZlciBpbnRlcmxlYXZlXG4gICAgcHJpdmF0ZSB3cml0ZUNoYWluOiBQcm9taXNlPHZvaWQ+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgcHJpdmF0ZSBjdXJyZW50UGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgY3VycmVudEJ5dGVzID0gMDtcbiAgICBwcml2YXRlIGRpc3Bvc2VkID0gZmFsc2U7XG5cbiAgICAvKiogUXVldWVzIG9uZSBlbnRyeSAoYW55dGhpbmcgSlNPTi1zZXJpYWxpemFibGUpLiBOZXZlciB0aHJvd3MgLSBsb2dnaW5nIG11c3Qgbm90IHRha2UgZG93biB0aGUgY2FsbGVyLiAqL1xuICAgIHB1YmxpYyBsb2coZW50cnk6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmcubGVuZ3RoID49IE1BWF9QRU5ESU5HX0VOVFJJRVMpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgZGlzayBpcyBicm9rZW4gKGZsdXNoZXMgYXJlIGZhaWxpbmcpIC0gZHJvcHBpbmcgdGhlIG9sZGVzdCBiZWF0cyBncm93aW5nIGZvcmV2ZXJcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmcuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGVuZGluZy5wdXNoKEpTT04uc3RyaW5naWZ5KGVudHJ5KSk7XG4gICAgICAgICAgICB0aGlzLnNjaGVkdWxlRmx1c2goKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBDb3VsZCBub3QgcXVldWUgYSBsb2cgZW50cnkgKCR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9KWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY2hlZHVsZUZsdXNoKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mbHVzaFRpbWVyICE9PSB1bmRlZmluZWQgfHwgdGhpcy5kaXNwb3NlZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmZsdXNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmx1c2hUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHZvaWQgdGhpcy5mbHVzaCgpLmNhdGNoKChlOiBFcnJvcikgPT4gY29uc29sZS53YXJuKGBGbHVzaGluZyBsb2dzIGluICR7dGhpcy5jb25maWcuZm9sZGVyfSBmYWlsZWQ6ICR7ZS5zdGFjayA/PyBlfWApKTtcbiAgICAgICAgfSwgRkxVU0hfREVMQVkpO1xuICAgICAgICAodGhpcy5mbHVzaFRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH0pLnVucmVmPy4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLndyaXRlQ2hhaW4udGhlbigoKSA9PiB0aGlzLndyaXRlUGVuZGluZygpKTtcbiAgICAgICAgLy8gVGhlIGNoYWluIG9ubHkgc2VyaWFsaXplczsgYSBmYWlsdXJlIGJlbG9uZ3MgdG8gdGhlIGNhbGxlciB0aGF0IGFza2VkIGZvciB0aGlzIGZsdXNoLCBub3QgZXZlcnkgb25lIGFmdGVyIGl0XG4gICAgICAgIHRoaXMud3JpdGVDaGFpbiA9IHJlc3VsdC5jYXRjaCgoKSA9PiB7IH0pO1xuICAgICAgICBhd2FpdCByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB3cml0ZVBlbmRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5wZW5kaW5nLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICBsZXQgbGluZXMgPSB0aGlzLnBlbmRpbmc7XG4gICAgICAgIHRoaXMucGVuZGluZyA9IFtdO1xuICAgICAgICBsZXQgZGF0YSA9IGxpbmVzLmpvaW4oXCJcXG5cIikgKyBcIlxcblwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRQYXRoKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMubWtkaXIodGhpcy5jb25maWcuZm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAvLyBSb3VuZGVkLCBhcyBhIHNoaW1tZWQgRGF0ZS5ub3cgY2FuIHJldHVybiBmcmFjdGlvbmFsIG1pbGxpc2Vjb25kcywgYW5kIGEgXCIuXCIgaW4gdGhlIG5hbWUgYnJlYWtzIG5hbWUgcGFyc2luZyBmb3IgYW55IHJlYWRlciB3aXRob3V0IHRoZSBmcmFjdGlvbmFsLXRvbGVyYW50IHJlZ2V4XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGF0aCA9IHBhdGguam9pbih0aGlzLmNvbmZpZy5mb2xkZXIsIGBwaWQke3Byb2Nlc3MucGlkfV9ib3JuJHt0aGlzLnByb2Nlc3NTdGFydFRpbWV9X3RocmVhZCR7dGhpcy50aHJlYWRJZH1fZnJvbSR7TWF0aC5yb3VuZChEYXRlLm5vdygpKX0ke1VOQ09NUFJFU1NFRF9FWFR9YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Qnl0ZXMgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMuYXBwZW5kRmlsZSh0aGlzLmN1cnJlbnRQYXRoLCBkYXRhKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEJ5dGVzICs9IEJ1ZmZlci5ieXRlTGVuZ3RoKGRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBsaW5lcy5jb25jYXQodGhpcy5wZW5kaW5nKTtcbiAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVGbHVzaCgpO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Qnl0ZXMgPj0gKHRoaXMuY29uZmlnLm1heEZpbGVCeXRlcyB8fCBNQVhfRklMRV9CWVRFUykpIHtcbiAgICAgICAgICAgIGxldCBmaW5pc2hlZCA9IHRoaXMuY3VycmVudFBhdGg7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Qnl0ZXMgPSAwO1xuICAgICAgICAgICAgdm9pZCB0aGlzLmNvbXByZXNzRmlsZShmaW5pc2hlZCkuY2F0Y2goKGU6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gTGVmdCB1bmNvbXByZXNzZWQ6IG1haW50ZW5hbmNlIChvdXJzIGFmdGVyIGRlYXRoLCBvciBhbnkgcGVlcidzKSBjb21wcmVzc2VzIGl0IGxhdGVyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBDb21wcmVzc2luZyByb3RhdGVkIGxvZyAke2ZpbmlzaGVkfSBmYWlsZWQ6ICR7ZS5zdGFjayA/PyBlfWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wcmVzc2VzIG9uZSBmaW5pc2hlZCBsb2cgZmlsZTogTFo0IGludG8gYSB0ZW1wIFNVQkZPTERFUiAobmV2ZXIgYSB0ZW1wIG5hbWUgaW4gdGhlIGxvZ1xuICAgICAqIGZvbGRlciBpdHNlbGYgLSBhIGNyYXNoZWQgd3JpdGUgbXVzdCBub3QgbGVhdmUgYSBjb3JydXB0IGZpbGUgd2hlcmUgdGhlIG1haW50ZW5hbmNlIHNjYW5zIGFyZSksXG4gICAgICogcmVuYW1lZCBpbnRvIHBsYWNlIChzYW1lIGRyaXZlLCBzbyB0aGUgcmVuYW1lIGlzIGF0b21pYyksIHZlcmlmaWVkLCBhbmQgb25seSBUSEVOIGlzIHRoZVxuICAgICAqIG9yaWdpbmFsIGRlbGV0ZWQgLSBhdCBubyBwb2ludCBpcyB0aGUgZGF0YSBpbiBmZXdlciB0aGFuIG9uZSBjb21wbGV0ZSBmaWxlLlxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgY29tcHJlc3NGaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IG5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKTtcbiAgICAgICAgbGV0IHBhcnNlZCA9IHBhcnNlTG9nRmlsZU5hbWUobmFtZSk7XG4gICAgICAgIGlmICghcGFyc2VkIHx8IHBhcnNlZC5jb21wcmVzc2VkKSByZXR1cm47XG4gICAgICAgIGxldCByYXcgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShmaWxlUGF0aCk7XG4gICAgICAgIGxldCBlbnRyeUNvdW50ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChyYXdbaV0gPT09IDEwKSBlbnRyeUNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvbXByZXNzZWQgPSBMWjQuY29tcHJlc3MocmF3KTtcbiAgICAgICAgbGV0IGlkID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApO1xuICAgICAgICBsZXQgZmluYWxOYW1lID0gYCR7cGFyc2VkLm9yaWdpbktleX1fdG8ke01hdGgucm91bmQoRGF0ZS5ub3coKSl9X2NvdW50JHtlbnRyeUNvdW50fV9pZCR7aWR9JHtDT01QUkVTU0VEX0VYVH1gO1xuICAgICAgICBsZXQgdGVtcERpciA9IHBhdGguam9pbih0aGlzLmNvbmZpZy5mb2xkZXIsIFwiLnRtcFwiKTtcbiAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMubWtkaXIodGVtcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIGxldCB0ZW1wUGF0aCA9IHBhdGguam9pbih0ZW1wRGlyLCBmaW5hbE5hbWUpO1xuICAgICAgICBsZXQgZmluYWxQYXRoID0gcGF0aC5qb2luKHRoaXMuY29uZmlnLmZvbGRlciwgZmluYWxOYW1lKTtcbiAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMud3JpdGVGaWxlKHRlbXBQYXRoLCBjb21wcmVzc2VkKTtcbiAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMucmVuYW1lKHRlbXBQYXRoLCBmaW5hbFBhdGgpO1xuICAgICAgICAvLyBQYXJhbm9pYSBiZWZvcmUgZGVsZXRpbmcgdGhlIG9ubHkgb3RoZXIgY29weVxuICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy5zdGF0KGZpbmFsUGF0aCk7XG4gICAgICAgIGF3YWl0IGZzLnByb21pc2VzLnVubGluayhmaWxlUGF0aCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBDb21wcmVzc2VkIGxvZyAke25hbWV9IC0+ICR7ZmluYWxOYW1lfSAoJHtyYXcubGVuZ3RofSAtPiAke2NvbXByZXNzZWQubGVuZ3RofSBieXRlcywgJHtlbnRyeUNvdW50fSBlbnRyaWVzKWApO1xuICAgIH1cblxuICAgIC8vIOKUgOKUgCBsaXN0aW5nIC8gcmVhZGluZyDilIDilIBcblxuICAgIHB1YmxpYyBhc3luYyBsaXN0RmlsZXMoKTogUHJvbWlzZTxMb2dGaWxlSW5mb1tdPiB7XG4gICAgICAgIGxldCBuYW1lczogc3RyaW5nW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuYW1lcyA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRkaXIodGhpcy5jb25maWcuZm9sZGVyKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKChlIGFzIHsgY29kZT86IHN0cmluZyB9KS5jb2RlID09PSBcIkVOT0VOVFwiKSByZXR1cm4gW107XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaWxlczogTG9nRmlsZUluZm9bXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBuYW1lIG9mIG5hbWVzKSB7XG4gICAgICAgICAgICBsZXQgcGFyc2VkID0gcGFyc2VMb2dGaWxlTmFtZShuYW1lKTtcbiAgICAgICAgICAgIGlmICghcGFyc2VkKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCBzdGF0ID0gYXdhaXQgZnMucHJvbWlzZXMuc3RhdChwYXRoLmpvaW4odGhpcy5jb25maWcuZm9sZGVyLCBuYW1lKSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIGlmICghc3RhdCkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgYWN0aXZlID0gIXBhcnNlZC5jb21wcmVzc2VkICYmIGF3YWl0IGlzUHJvY2Vzc0FsaXZlKHBhcnNlZC5waWQsIHBhcnNlZC5wcm9jZXNzU3RhcnRUaW1lKTtcbiAgICAgICAgICAgIGZpbGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgc2l6ZTogc3RhdC5zaXplLFxuICAgICAgICAgICAgICAgIHBpZDogcGFyc2VkLnBpZCxcbiAgICAgICAgICAgICAgICBwcm9jZXNzU3RhcnRUaW1lOiBwYXJzZWQucHJvY2Vzc1N0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICB0aHJlYWRJZDogcGFyc2VkLnRocmVhZElkLFxuICAgICAgICAgICAgICAgIHN0YXJ0VGltZTogcGFyc2VkLnN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICBlbmRUaW1lOiBwYXJzZWQuZW5kVGltZSxcbiAgICAgICAgICAgICAgICBlbnRyeUNvdW50OiBwYXJzZWQuZW50cnlDb3VudCxcbiAgICAgICAgICAgICAgICBjb21wcmVzc2VkOiBwYXJzZWQuY29tcHJlc3NlZCxcbiAgICAgICAgICAgICAgICBhY3RpdmUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzb3J0KGZpbGVzLCB4ID0+IHguc3RhcnRUaW1lKTtcbiAgICAgICAgcmV0dXJuIGZpbGVzO1xuICAgIH1cblxuICAgIC8qKiBPbmUgZmlsZSdzIGJ5dGVzLCBBTFdBWVMgTFo0LWNvbXByZXNzZWQ6IGNvbXByZXNzZWQgZmlsZXMgYXJlIHNlbnQgYXMtaXMsIGEgc3RpbGwtc3RyZWFtaW5nIGZpbGUgaXMgZmx1c2hlZCBhbmQgY29tcHJlc3NlZCBpbiBtZW1vcnkgKHNtYWxsZXIgb3ZlciB0aGUgbmV0d29yazsgZGVjb2RlTG9nRmlsZSBoYW5kbGVzIGJvdGggaWRlbnRpY2FsbHkpLiAqL1xuICAgIHB1YmxpYyBhc3luYyByZWFkRmlsZUNvbXByZXNzZWQobmFtZTogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgbGV0IHBhcnNlZCA9IHBhcnNlTG9nRmlsZU5hbWUobmFtZSk7XG4gICAgICAgIGlmICghcGFyc2VkIHx8IG5hbWUuaW5jbHVkZXMoXCIvXCIpIHx8IG5hbWUuaW5jbHVkZXMoXCJcXFxcXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBhIGxvZyBmaWxlIG5hbWU6ICR7SlNPTi5zdHJpbmdpZnkobmFtZS5zbGljZSgwLCAyMDApKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jb25maWcuZm9sZGVyLCBuYW1lKTtcbiAgICAgICAgaWYgKHBhcnNlZC5jb21wcmVzc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUoZmlsZVBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZsdXNoIHNvIG91ciBvd24gbGl2ZSBmaWxlIGluY2x1ZGVzIGV2ZXJ5dGhpbmcgbG9nZ2VkIHVwIHRvIG5vd1xuICAgICAgICBhd2FpdCB0aGlzLmZsdXNoKCk7XG4gICAgICAgIHJldHVybiBMWjQuY29tcHJlc3MoYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUoZmlsZVBhdGgpKTtcbiAgICB9XG5cbiAgICAvLyDilIDilIAgbWFpbnRlbmFuY2Ug4pSA4pSAXG5cbiAgICBwcml2YXRlIHNjaGVkdWxlTWFpbnRlbmFuY2UoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc3Bvc2VkKSByZXR1cm47XG4gICAgICAgIGxldCB3YWl0ID0gTUFJTlRFTkFOQ0VfTUlOX0lOVEVSVkFMICsgTWF0aC5yYW5kb20oKSAqIChNQUlOVEVOQU5DRV9NQVhfSU5URVJWQUwgLSBNQUlOVEVOQU5DRV9NSU5fSU5URVJWQUwpO1xuICAgICAgICB0aGlzLm1haW50ZW5hbmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHZvaWQgdGhpcy5ydW5NYWludGVuYW5jZSgpLmNhdGNoKChlOiBFcnJvcikgPT4gY29uc29sZS53YXJuKGBMb2cgbWFpbnRlbmFuY2Ugb2YgJHt0aGlzLmNvbmZpZy5mb2xkZXJ9IGZhaWxlZDogJHtlLnN0YWNrID8/IGV9YCkpLmZpbmFsbHkoKCkgPT4gdGhpcy5zY2hlZHVsZU1haW50ZW5hbmNlKCkpO1xuICAgICAgICB9LCB3YWl0KTtcbiAgICAgICAgKHRoaXMubWFpbnRlbmFuY2VUaW1lciBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hhcmVkIHVwa2VlcCBvZiB0aGUgZm9sZGVyIC0gZXZlcnkgcHJvY2VzcyB1c2luZyBpdCBydW5zIHRoaXMsIHNvIG5vdGhpbmcgZGVwZW5kcyBvbiBhbnkgb25lXG4gICAgICogcHJvY2VzcyBzdXJ2aXZpbmc6IGRlYWQgcHJvY2Vzc2VzJyB1bmNvbXByZXNzZWQgZmlsZXMgYXJlIGNvbXByZXNzZWQgZm9yIHRoZW07IGR1cGxpY2F0ZVxuICAgICAqIGNvbXByZXNzaW9ucyBvZiBvbmUgc3RyZWFtICh0d28gbWFpbnRhaW5lcnMgcmFjaW5nKSBhcmUgcmVzb2x2ZWQgYnkga2VlcGluZyB0aGUgT0xERVNUIGNvcHk7XG4gICAgICogYW4gdW5jb21wcmVzc2VkIG9yaWdpbmFsIHdob3NlIGNvbXByZXNzaW9uIGFscmVhZHkgZXhpc3RzIGlzIGRlbGV0ZWQgKGl0cyBjb21wcmVzc29yIGRpZWRcbiAgICAgKiBiZXR3ZWVuIHJlbmFtZSBhbmQgdW5saW5rKTsgYW5kIHRoZSBmb2xkZXIncyB0b3RhbCBzaXplIGlzIGJyb3VnaHQgdW5kZXIgaXRzIGJ1ZGdldCBieVxuICAgICAqIGRlbGV0aW5nIHRoZSBvbGRlc3QgZmlsZXMuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIHJ1bk1haW50ZW5hbmNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgbmFtZXM6IHN0cmluZ1tdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmFtZXMgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkZGlyKHRoaXMuY29uZmlnLmZvbGRlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmICgoZSBhcyB7IGNvZGU/OiBzdHJpbmcgfSkuY29kZSA9PT0gXCJFTk9FTlRcIikgcmV0dXJuO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGFyc2VkQnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIFBhcnNlZE5hbWU+KCk7XG4gICAgICAgIGZvciAobGV0IG5hbWUgb2YgbmFtZXMpIHtcbiAgICAgICAgICAgIGxldCBwYXJzZWQgPSBwYXJzZUxvZ0ZpbGVOYW1lKG5hbWUpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZCkgcGFyc2VkQnlOYW1lLnNldChuYW1lLCBwYXJzZWQpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb21wcmVzc2VkT3JpZ2lucyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgICAgICAgZm9yIChsZXQgW25hbWUsIHBhcnNlZF0gb2YgcGFyc2VkQnlOYW1lKSB7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZC5jb21wcmVzc2VkKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCBsaXN0ID0gY29tcHJlc3NlZE9yaWdpbnMuZ2V0KHBhcnNlZC5vcmlnaW5LZXkpO1xuICAgICAgICAgICAgaWYgKCFsaXN0KSB7XG4gICAgICAgICAgICAgICAgbGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbXByZXNzZWRPcmlnaW5zLnNldChwYXJzZWQub3JpZ2luS2V5LCBsaXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpc3QucHVzaChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEdXBsaWNhdGUgY29tcHJlc3Npb25zOiBrZWVwIHRoZSBvbGRlc3QgKGZpcnN0IHdyaXR0ZW4pLCBkZWxldGUgdGhlIHJlc3RcbiAgICAgICAgZm9yIChsZXQgW29yaWdpbiwgbGlzdF0gb2YgY29tcHJlc3NlZE9yaWdpbnMpIHtcbiAgICAgICAgICAgIGlmIChsaXN0Lmxlbmd0aCA8IDIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgc29ydChsaXN0LCBuYW1lID0+IHBhcnNlZEJ5TmFtZS5nZXQobmFtZSk/LmVuZFRpbWUgfHwgMCk7XG4gICAgICAgICAgICBmb3IgKGxldCBkdXBsaWNhdGUgb2YgbGlzdC5zbGljZSgxKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBEZWxldGluZyBkdXBsaWNhdGUgY29tcHJlc3NlZCBsb2cgJHtkdXBsaWNhdGV9IChhbm90aGVyIG1haW50YWluZXIgY29tcHJlc3NlZCAke29yaWdpbn0gZmlyc3QsIGtlZXBpbmcgJHtsaXN0WzBdfSlgKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5wcm9taXNlcy51bmxpbmsocGF0aC5qb2luKHRoaXMuY29uZmlnLmZvbGRlciwgZHVwbGljYXRlKSkuY2F0Y2goKCkgPT4geyB9KTtcbiAgICAgICAgICAgICAgICBwYXJzZWRCeU5hbWUuZGVsZXRlKGR1cGxpY2F0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgW25hbWUsIHBhcnNlZF0gb2YgcGFyc2VkQnlOYW1lKSB7XG4gICAgICAgICAgICBpZiAocGFyc2VkLmNvbXByZXNzZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IGZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMuY29uZmlnLmZvbGRlciwgbmFtZSk7XG4gICAgICAgICAgICBpZiAoZmlsZVBhdGggPT09IHRoaXMuY3VycmVudFBhdGgpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKGNvbXByZXNzZWRPcmlnaW5zLmhhcyhwYXJzZWQub3JpZ2luS2V5KSkge1xuICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgY29tcHJlc3NlZCBieSBzb21lb25lIHdob3NlIGNsZWFudXAgZGllZCBiZXR3ZWVuIHJlbmFtZSBhbmQgdW5saW5rXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYERlbGV0aW5nIHVuY29tcHJlc3NlZCBsb2cgJHtuYW1lfTogaXRzIGNvbXByZXNzZWQgdmVyc2lvbiBhbHJlYWR5IGV4aXN0c2ApO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLnByb21pc2VzLnVubGluayhmaWxlUGF0aCkuY2F0Y2goKCkgPT4geyB9KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEEgbGl2ZSBwcm9jZXNzIG93bnMgaXRzIHVuY29tcHJlc3NlZCBmaWxlOyBvbmx5IGEgREVBRCBwcm9jZXNzJ3MgZmlsZXMgYXJlIGNvbXByZXNzZWQgZm9yIGl0IChvdXIgb3duIHBpZCBhbHdheXMgcmVhZHMgYXMgYWxpdmUsIHdoaWNoIGNvcnJlY3RseSBwcm90ZWN0cyBvdXIgY3VycmVudCBmaWxlIC0gb3VyIHJvdGF0ZWQgbGVmdG92ZXJzIHdlcmUgZXhjbHVkZWQgYWJvdmUgb25seSBpZiBjdXJyZW50LCBzbyBjb21wcmVzcyB0aG9zZSB0b28pXG4gICAgICAgICAgICBpZiAocGFyc2VkLnBpZCAhPT0gcHJvY2Vzcy5waWQgJiYgYXdhaXQgaXNQcm9jZXNzQWxpdmUocGFyc2VkLnBpZCwgcGFyc2VkLnByb2Nlc3NTdGFydFRpbWUpKSBjb250aW51ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21wcmVzc0ZpbGUoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgQ29tcHJlc3NpbmcgZGVhZCBwcm9jZXNzJ3MgbG9nICR7bmFtZX0gZmFpbGVkICh0aGUgbmV4dCBtYWludGVuYW5jZSBwYXNzIHJldHJpZXMpOiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuZW5mb3JjZVRvdGFsTGltaXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGVuZm9yY2VUb3RhbExpbWl0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgbGltaXQgPSB0aGlzLmNvbmZpZy50b3RhbExpbWl0Qnl0ZXMgfHwgVE9UQUxfTElNSVRfQllURVM7XG4gICAgICAgIGxldCBmaWxlcyA9IGF3YWl0IHRoaXMubGlzdEZpbGVzKCk7XG4gICAgICAgIGxldCB0b3RhbCA9IGZpbGVzLnJlZHVjZSgoc3VtLCB4KSA9PiBzdW0gKyB4LnNpemUsIDApO1xuICAgICAgICBpZiAodG90YWwgPD0gbGltaXQpIHJldHVybjtcbiAgICAgICAgLy8gT2xkZXN0IGZpcnN0LCBieSB0aGUgZW5kIG9mIHdoYXQgdGhleSBjb3ZlcjsgbGl2ZSBmaWxlcyBsYXN0ICh0aGV5IGFyZSB0aGUgbmV3ZXN0IGRhdGEgYnkgZGVmaW5pdGlvbilcbiAgICAgICAgbGV0IGRlbGV0YWJsZSA9IGZpbGVzLmZpbHRlcih4ID0+ICF4LmFjdGl2ZSk7XG4gICAgICAgIHNvcnQoZGVsZXRhYmxlLCB4ID0+IHguZW5kVGltZSB8fCB4LnN0YXJ0VGltZSk7XG4gICAgICAgIGxldCBkZWxldGVkID0gMDtcbiAgICAgICAgbGV0IGRlbGV0ZWRCeXRlcyA9IDA7XG4gICAgICAgIGZvciAobGV0IGZpbGUgb2YgZGVsZXRhYmxlKSB7XG4gICAgICAgICAgICBpZiAodG90YWwgPD0gbGltaXQpIGJyZWFrO1xuICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMudW5saW5rKHBhdGguam9pbih0aGlzLmNvbmZpZy5mb2xkZXIsIGZpbGUubmFtZSkpLmNhdGNoKCgpID0+IHsgfSk7XG4gICAgICAgICAgICB0b3RhbCAtPSBmaWxlLnNpemU7XG4gICAgICAgICAgICBkZWxldGVkKys7XG4gICAgICAgICAgICBkZWxldGVkQnl0ZXMgKz0gZmlsZS5zaXplO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2dzIGluICR7dGhpcy5jb25maWcuZm9sZGVyfSBvdXRncmV3IHRoZWlyICR7bGltaXR9IGJ5dGUgYnVkZ2V0OiBkZWxldGVkIHRoZSAke2RlbGV0ZWR9IG9sZGVzdCBmaWxlcyAoJHtkZWxldGVkQnl0ZXN9IGJ5dGVzKSwgJHt0b3RhbH0gYnl0ZXMgcmVtYWluYCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcG9zZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5mbHVzaFRpbWVyKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5mbHVzaFRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tYWludGVuYW5jZVRpbWVyKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tYWludGVuYW5jZVRpbWVyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
399
- /* _JS_SOURCE_HASH = "6d43504dad0fff83e9a9064918d232e38b5e1d4eae13b22e483b29392aa70d7e"; */
399
+ /* _JS_SOURCE_HASH = "e469b5a680d38d12efd2071191e27c81bcbebfb6ac34330bdf9686d27e2b89da"; */
@@ -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
  };
@@ -252,4 +252,4 @@ class TransactionFile {
252
252
  }
253
253
  exports.TransactionFile = TransactionFile;
254
254
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25GaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiVHJhbnNhY3Rpb25GaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDRDQUFvQjtBQUNwQixnREFBd0I7QUFDeEIseURBQW1EO0FBRW5ELG9iQUFvYjtBQUNwYixFQUFFO0FBQ0Ysb0tBQW9LO0FBRXBLLCtJQUErSTtBQUMvSSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIsOEZBQThGO0FBQzlGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLHNMQUFzTDtBQUN0TCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUM7QUF5QnhCLE1BQWEsZUFBZTtJQUN4QixZQUFvQixRQUFnQjtRQUFoQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBRTVCLFdBQU0sR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztRQUN4QyxZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7UUFDckQsNEdBQTRHO1FBQ3BHLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixZQUFPLEdBQWEsRUFBRSxDQUFDO1FBRS9CLGdHQUFnRztRQUN4RixlQUFVLEdBQWtCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV0RCw4RkFBOEY7UUFDdkYsU0FBSSxHQUFHLElBQUEsY0FBSSxFQUFDLEtBQUssSUFBSSxFQUFFO1lBQzFCLElBQUksSUFBWSxDQUFDO1lBQ2pCLElBQUksQ0FBQztnQkFDRCxJQUFJLEdBQUcsTUFBTSxZQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNULElBQUssQ0FBdUIsQ0FBQyxJQUFJLEtBQUssUUFBUTtvQkFBRSxPQUFPO2dCQUN2RCxNQUFNLENBQUMsQ0FBQztZQUNaLENBQUM7WUFDRCxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDaEIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsSUFBSTtvQkFBRSxTQUFTO2dCQUNwQixJQUFJLE1BQWdDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQztvQkFDRCxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQWlCLENBQUM7Z0JBQzlDLENBQUM7Z0JBQUMsV0FBTSxDQUFDO29CQUNMLG9NQUFvTTtvQkFDcE0sT0FBTyxFQUFFLENBQUM7b0JBQ1YsU0FBUztnQkFDYixDQUFDO2dCQUNELE9BQU8sRUFBRSxDQUFDO2dCQUNWLHlIQUF5SDtnQkFDekgsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7cUJBQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLENBQUM7cUJBQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkQsQ0FBQztxQkFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDO1lBQ0wsQ0FBQztZQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDO1lBQzFCLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8seUJBQXlCLElBQUksQ0FBQyxRQUFRLGtCQUFrQixPQUFPLHFCQUFxQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksZUFBZSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDLENBQUM7WUFDL0ssQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBNkhLLGNBQVMsR0FBRyxJQUFBLGNBQUksRUFBQyxLQUFLLElBQUksRUFBRTtZQUNoQyxNQUFNLFlBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFoTHFDLENBQUM7SUFtRHpDLGdKQUFnSjtJQUN6SSxHQUFHLENBQUMsR0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCw4S0FBOEs7SUFDdkssVUFBVSxDQUFDLEdBQVc7UUFDekIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0Qsa0hBQWtIO0lBQzNHLE1BQU0sQ0FBQyxHQUFXOztRQUNyQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDM0IsT0FBTyxDQUFBLE1BQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLDBDQUFFLElBQUksS0FBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxJQUFXLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFXLFdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM3QixDQUFDO0lBQ0QscU5BQXFOO0lBQzlNLE9BQU87UUFDVixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUNELDBKQUEwSjtJQUNuSixjQUFjO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsd09BQXdPO0lBQ2pPLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBUSxFQUFFLElBQVk7UUFDMUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMzQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQseU9BQXlPO0lBQ2xPLE1BQU0sQ0FBQyxHQUFXLEVBQUUsSUFBWTtRQUNuQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsS0FBSyxFQUFFLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxJQUFJLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNwRixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxxUUFBcVE7SUFDOVAsTUFBTSxDQUFDLEdBQVcsRUFBRSxJQUFZO1FBQ25DLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLEtBQUssS0FBSyxTQUFTO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCwySUFBMkk7SUFDcEksU0FBUyxDQUFDLEdBQVc7UUFDeEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsS0FBSyxLQUFLLFNBQVM7WUFBRSxPQUFPO1FBQ3hELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxzUEFBc1A7SUFDL08sS0FBSyxDQUFDLEdBQVc7UUFDcEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztRQUN0QyxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU87UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELHFsQkFBcWxCO0lBQzdrQixRQUFRLENBQUMsR0FBVyxFQUFFLEtBQVEsRUFBRSxJQUFZLEVBQUUsU0FBaUI7UUFDbkUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDakQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxHQUFXLEVBQUUsSUFBWSxFQUFFLFNBQWlCLEVBQUUsS0FBUyxFQUFFLFNBQWtCO1FBQzNGLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFCLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDN0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxNQUFvQjtRQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sYUFBYTs7UUFDakIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVM7WUFBRSxPQUFPO1FBQzFDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztZQUM1QixLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFRLEVBQUUsRUFBRSxXQUFDLE9BQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksQ0FBQyxRQUFRLFlBQVksTUFBQSxDQUFDLENBQUMsS0FBSyxtQ0FBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDO1FBQzlHLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNoQixNQUFBLE1BQUMsSUFBSSxDQUFDLFVBQXFDLEVBQUMsS0FBSyxrREFBSSxDQUFDO0lBQzFELENBQUM7SUFFRCwwR0FBMEc7SUFDbkcsS0FBSyxDQUFDLEtBQUs7UUFDZCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN0RCxrS0FBa0s7UUFDbEssSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sTUFBTSxDQUFDO0lBQ2pCLENBQUM7SUFNTyxLQUFLLENBQUMsS0FBSztRQUNmLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQzFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLE9BQU87UUFDWCxDQUFDO1FBQ0QsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ2pDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDO1lBQ0QsTUFBTSxZQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDVCxvSUFBb0k7WUFDcEksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsTUFBTSxDQUFDLENBQUM7UUFDWixDQUFDO0lBQ0wsQ0FBQztJQUVELG9KQUFvSjtJQUM1SSxLQUFLLENBQUMsT0FBTztRQUNqQixJQUFJLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUF5QixDQUFDLENBQUMsQ0FBQztRQUNuRyxDQUFDO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLFNBQVMsRUFBeUIsQ0FBQyxDQUFDLENBQUM7WUFDekksQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBeUIsQ0FBQyxDQUFDLENBQUM7WUFDN0YsQ0FBQztRQUNMLENBQUM7UUFDRCxtTkFBbU47UUFDbk4sSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNsQyxJQUFJLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLGFBQWEsQ0FBQztRQUM3QyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2QixNQUFNLFlBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLG9HQUFvRztRQUNwRyxNQUFNLFlBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3ZELE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVcsb0JBQW9CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxlQUFlLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQztRQUN2SSxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMvQixDQUFDO0NBQ0o7QUFuT0QsMENBbU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5cbi8vIEEgcGVyc2lzdGVudCBNYXAgdGhhdCBrbm93cyBhYm91dCB0aW1lIGFuZCBhYm91dCBkZWxldGlvbnMuIEV2ZXJ5IHZhbHVlIGNhcnJpZXMgdGhlIHRpbWUgaXQgd2FzIHdyaXR0ZW4sIHNvIGEgd3JpdGUgdGhhdCBhcnJpdmVzIG91dCBvZiBvcmRlciBpcyBzaW1wbHkgbm90IGFwcGxpZWQgLSB0aGUgbWFwIGNhbm5vdCBiZSBtYWRlIHRvIGdvIGJhY2t3YXJkcy4gQSBkZWxldGVkIGtleSBrZWVwcyBpdHMgdGltZSB0b28sIGFzIGEgdG9tYnN0b25lIGluIGEgc2Vjb25kIG1hcCwgc28gXCJ3YXMgdGhpcyBkZWxldGVkLCBhbmQgd2hlblwiIGlzIGFzIGNoZWFwIHRvIGFzayBhcyBcImRvZXMgdGhpcyBleGlzdFwiLCBhbmQgZXhwaXJpbmcgb2xkIHRvbWJzdG9uZXMgaXMgYSB3YWxrIG9mIHRoZSB0b21ic3RvbmVzIGFsb25lIHJhdGhlciB0aGFuIG9mIGV2ZXJ5dGhpbmcuXG4vL1xuLy8gT24gZGlzayBpdCBpcyBvbmUgYXBwZW5kLW9ubHkgbG9nIG9mIHRoZSBzZXRzLCBkZWxldGVzIGFuZCBwdXJnZXMgdGhhdCBwcm9kdWNlZCBib3RoIG1hcHMsIHJld3JpdHRlbiBmcm9tIHRoZW0gd2hlbmV2ZXIgaXQgaGFzIGdyb3duIHRvIHNldmVyYWwgdGltZXMgdGhlaXIgc2l6ZS5cblxuLy8gVGhlIGxvZyBpcyByZXdyaXR0ZW4gb25jZSBpdCBob2xkcyB0aGlzIG1hbnkgdGltZXMgbW9yZSByZWNvcmRzIHRoYW4gdGhlcmUgYXJlIGtleXMgKGEgbG9nIG9mIDMgcmVjb3JkcyBwZXIgc3Vydml2aW5nIGtleSBpcyBtb3N0bHkgaGlzdG9yeSlcbmNvbnN0IENPTVBBQ1RfUkFUSU8gPSAzO1xuLy8gLi4uYnV0IG5ldmVyIGZvciBhIHNtYWxsIGxvZywgd2hlcmUgdGhlIHJld3JpdGUgd291bGQgY29zdCBtb3JlIHRoYW4gdGhlIGhpc3RvcnkgaXQgcmVtb3Zlc1xuY29uc3QgTUlOX0NPTVBBQ1RfUkVDT1JEUyA9IDEwMDA7XG4vLyBBcHBlbmRzIGFyZSBjb2FsZXNjZWQgZm9yIHRoaXMgbG9uZy4gQSBjcmFzaCBsb3NlcyBhdCBtb3N0IHRoaXMgbXVjaCAtIHRoZSBjYWxsZXJzIG9mIHRoaXMgY2xhc3MgdHJlYXQgdGhlaXIgZGF0YSBhcyByZWNvbnN0cnVjdGlibGUgLSBhbmQgdGhlIGFsdGVybmF0aXZlIGlzIGEgZmlsZSB3cml0ZSBwZXIgc2V0LlxuY29uc3QgRkxVU0hfREVMQVkgPSA1MDA7XG5cbi8qKiBBIGxpdmUgdmFsdWU6IHdoYXQgd2FzIHN0b3JlZCwgd2hlbiBpdCB3YXMgd3JpdHRlbiAodGhlIGNhbGxlcidzIG9yZGVyaW5nKSwgYW5kIHdoZW4gd2UgbGFzdCBjaGFuZ2VkIGl0IChvdXJzKS4gKi9cbmV4cG9ydCB0eXBlIExvZ0VudHJ5PFQ+ID0geyB2YWx1ZTogVDsgdGltZTogbnVtYmVyOyBjaGFuZ2VkQXQ6IG51bWJlciB9O1xuLyoqIEEgZGVsZXRlZCBrZXk6IHdoZW4gaXQgd2FzIGRlbGV0ZWQsIGFuZCB3aGVuIHdlIGxlYXJuZWQuIFdoZW4gdGhlIGtleSBoYWQgYSBsaXZlIHZhbHVlIGF0IGRlbGV0aW9uIHRpbWUgaXQgaXMgTUFSS0VEIHJhdGhlciB0aGFuIGdvbmUgLSB0aGUgdmFsdWUgKGFuZCBpdHMgb3JpZ2luYWwgd3JpdGUgdGltZSkgcmlkZXMgYWxvbmcsIHNvIHRoZSB1bmRlcmx5aW5nIGRhdGEgY2FuIHN0aWxsIGJlIHJlYWQgYW5kIHRoZSBkZWxldGlvbiBjYW4gYmUgdW5kb25lIChzZWUgdW5tYXJrKSB1bnRpbCB0aGUgaGlzdG9yeSBpcyBkcm9wcGVkIChzZWUgZHJvcFZhbHVlKS4gKi9cbmV4cG9ydCB0eXBlIExvZ1RvbWJzdG9uZTxUPiA9IHsgdGltZTogbnVtYmVyOyBjaGFuZ2VkQXQ6IG51bWJlcjsgdmFsdWU/OiBUOyB2YWx1ZVRpbWU/OiBudW1iZXIgfTtcblxuLy8gT25lIGxpbmUgb2YgdGhlIGxvZywgd2l0aCBzaW5nbGUtbGV0dGVyIGZpZWxkIG5hbWVzIGJlY2F1c2UgdGhlcmUgaXMgb25lIHJlY29yZCBwZXIgc2V0L2RlbGV0ZS9wdXJnZSBldmVyIG1hZGUgYW5kIHRoZSBmaWVsZCBuYW1lcyBhcmUgbW9zdCBvZiBhIHJlY29yZCdzIG92ZXJoZWFkLiBKU09OLnN0cmluZ2lmeSBlc2NhcGVzIG5ld2xpbmVzIGluc2lkZSBrZXlzIGFuZCB2YWx1ZXMsIHNvIGEgcmVjb3JkIGNhbiBuZXZlciBjb250YWluIHRoZSBzZXBhcmF0b3IuXG50eXBlIExvZ1JlY29yZDxUPiA9IHtcbiAgICAvLyBrZXlcbiAgICBrOiBzdHJpbmc7XG4gICAgLy8gdGltZSwgbGFzdE1vZGlmaWVkIHRpbWUgb2YgdGhlIGZpbGUsIG9yIHRoZSBkZWxldGUgdGltZSwgb3IgdGhlIHB1cmdlIHRpbWVcbiAgICB0OiBudW1iZXI7XG4gICAgLy8gdmFsdWVcbiAgICB2PzogVDtcbiAgICAvLyBkZWxldGVkLCB0aGUgZmlsZSBvbiBkaXNrIGlzIGRlbGV0ZWQsIHByZXNlcnZlZCB3aGVuIHdlIGNvbXBhY3RcbiAgICBkPzogMTtcbiAgICAvLyBtYXJrZWQgZm9yIGRlbGV0aW9uOiBkZWxldGVkLCBidXQgdGhlIHZhbHVlICh2KSBhbmQgaXRzIG9yaWdpbmFsIHdyaXRlIHRpbWUgKHcpIGFyZSBrZXB0LCBzbyB0aGUgZGF0YSBpcyBzdGlsbCByZWFkYWJsZSBhbmQgcmVzdG9yYWJsZS4gUHJlc2VydmVkIHdoZW4gd2UgY29tcGFjdC5cbiAgICBtPzogMTtcbiAgICAvLyB3cml0ZVRpbWUsIHRoZSBvcmlnaW5hbCB3cml0ZSB0aW1lIG9mIGEgbWFya2VkLWZvci1kZWxldGlvbiB2YWx1ZSAodCBpcyB0aGUgREVMRVRFIHRpbWUgb24gdGhvc2UgcmVjb3JkcylcbiAgICB3PzogbnVtYmVyO1xuICAgIC8vIHB1cmdlZCwgdGhlIGZpbGUgb24gZGlzayBpcyBkZWxldGVkLCBub3QgcHJlc2VydmVkIHdoZW4gd2UgY29tcGFjdFxuICAgIHA/OiAxO1xufTtcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uRmlsZTxUPiB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBmaWxlUGF0aDogc3RyaW5nKSB7IH1cblxuICAgIHByaXZhdGUgdmFsdWVzID0gbmV3IE1hcDxzdHJpbmcsIExvZ0VudHJ5PFQ+PigpO1xuICAgIHByaXZhdGUgZGVsZXRlZCA9IG5ldyBNYXA8c3RyaW5nLCBMb2dUb21ic3RvbmU8VD4+KCk7XG4gICAgLy8gUmVjb3JkcyB0aGUgbG9nIGhvbGRzICh3cml0dGVuIHBsdXMgcGVuZGluZykgLSB3aGF0IGNvbXBhY3Rpb24gaXMgZGVjaWRlZCBhZ2FpbnN0LCBOT1QgdGhlIG51bWJlciBvZiBrZXlzXG4gICAgcHJpdmF0ZSBsb2dSZWNvcmRzID0gMDtcbiAgICBwcml2YXRlIHBlbmRpbmc6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBmbHVzaFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgICAvLyBTZXJpYWxpemVzIGV2ZXJ5dGhpbmcgdGhhdCB0b3VjaGVzIHRoZSBmaWxlLCBzbyBhbiBhcHBlbmQgY2FuIG5ldmVyIGludGVybGVhdmUgd2l0aCBhIHJld3JpdGVcbiAgICBwcml2YXRlIHdyaXRlQ2hhaW46IFByb21pc2U8dm9pZD4gPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIC8qKiBSZWFkcyB0aGUgbG9nIGFuZCByZXBsYXlzIGl0IGludG8gbWVtb3J5LiBFdmVyeSBvdGhlciBtZXRob2QgYXNzdW1lcyB0aGlzIGhhcyBmaW5pc2hlZC4gKi9cbiAgICBwdWJsaWMgbG9hZCA9IGxhenkoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgZGF0YTogc3RyaW5nO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKHRoaXMuZmlsZVBhdGgsIFwidXRmOFwiKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKChlIGFzIHsgY29kZT86IHN0cmluZyB9KS5jb2RlID09PSBcIkVOT0VOVFwiKSByZXR1cm47XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhcHBsaWVkID0gMDtcbiAgICAgICAgbGV0IGRhbWFnZWQgPSAwO1xuICAgICAgICBmb3IgKGxldCBsaW5lIG9mIGRhdGEuc3BsaXQoXCJcXG5cIikpIHtcbiAgICAgICAgICAgIGlmICghbGluZSkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgcmVjb3JkOiBMb2dSZWNvcmQ8VD4gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlY29yZCA9IEpTT04ucGFyc2UobGluZSkgYXMgTG9nUmVjb3JkPFQ+O1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gQSBjcmFzaCBtaWQtYXBwZW5kIGxlYXZlcyBhIHRvcm4gZmluYWwgbGluZTsgYW55dGhpbmcgZWFybGllciBtZWFucyByZWFsIGRhbWFnZS4gRWl0aGVyIHdheSB0aGUgcmVzdCBvZiB0aGUgbG9nIGlzIHN0aWxsIHdvcnRoIGhhdmluZyAtIHRoaXMgaXMgYW4gaW5kZXgsIGFuZCBzY2FubmluZyByZWJ1aWxkcyB3aGF0ZXZlciB3ZSBsb3NlLlxuICAgICAgICAgICAgICAgIGRhbWFnZWQrKztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFwcGxpZWQrKztcbiAgICAgICAgICAgIC8vIFJlcGxheWVkIHRocm91Z2ggdGhlIHNhbWUgb3JkZXJpbmcgcnVsZXMgdGhhdCBwcm9kdWNlZCBpdCwgc28gYSBsb2cgd3JpdHRlbiBvdXQgb2Ygb3JkZXIgc3RpbGwgbGFuZHMgb24gdGhlIHNhbWUgc3RhdGVcbiAgICAgICAgICAgIGlmIChyZWNvcmQucCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzLmRlbGV0ZShyZWNvcmQuayk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVkLmRlbGV0ZShyZWNvcmQuayk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC5tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseURlbGV0ZShyZWNvcmQuaywgcmVjb3JkLnQsIHJlY29yZC50LCByZWNvcmQudiwgcmVjb3JkLncpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlEZWxldGUocmVjb3JkLmssIHJlY29yZC50LCByZWNvcmQudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC52ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5U2V0KHJlY29yZC5rLCByZWNvcmQudiwgcmVjb3JkLnQsIHJlY29yZC50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZ1JlY29yZHMgPSBhcHBsaWVkO1xuICAgICAgICBpZiAoZGFtYWdlZCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHtkYW1hZ2VkfSBkYW1hZ2VkIHJlY29yZChzKSBpbiAke3RoaXMuZmlsZVBhdGh9IHdlcmUgc2tpcHBlZDsgJHthcHBsaWVkfSBhcHBsaWVkLCBsZWF2aW5nICR7dGhpcy52YWx1ZXMuc2l6ZX0gdmFsdWVzIGFuZCAke3RoaXMuZGVsZXRlZC5zaXplfSB0b21ic3RvbmVzYCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKiBUaGUgbGl2ZSB2YWx1ZSwgb3IgdW5kZWZpbmVkIHdoZW4gdGhlIGtleSBkb2VzIG5vdCBleGlzdCBoZXJlIChkZWxldGVkIGluY2x1ZGVkIC0gYSBkZWxldGlvbiBpcyBhbiBhYnNlbmNlLCBzZWUgZ2V0RGVsZXRlZCBmb3IgaXRzIHRpbWUpLiAqL1xuICAgIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcpOiBMb2dFbnRyeTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5nZXQoa2V5KTtcbiAgICB9XG4gICAgLyoqIFdoZW4gdGhlIGtleSB3YXMgZGVsZXRlZCwgaWYgaXQgd2FzICh2YWx1ZSBpbmNsdWRlZCB3aGVuIHRoZSBkZWxldGlvbiBpcyBzdGlsbCBtYXJrZWQgLSBzZWUgTG9nVG9tYnN0b25lKS4gQWJzZW50IGJvdGggaGVyZSBhbmQgaW4gZ2V0IG1lYW5zIHdlIGhhdmUgbmV2ZXIgaGVhcmQgb2YgaXQuICovXG4gICAgcHVibGljIGdldERlbGV0ZWQoa2V5OiBzdHJpbmcpOiBMb2dUb21ic3RvbmU8VD4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVkLmdldChrZXkpO1xuICAgIH1cbiAgICAvKiogVGhlIHRpbWUgdGhlIGtleSBsYXN0IGNoYW5nZWQgZWl0aGVyIHdheSwgb3IgMCBpZiB3ZSBoYXZlIG5ldmVyIGhlYXJkIG9mIGl0IC0gd2hhdCBhIG5ldyB3cml0ZSBoYXMgdG8gYmVhdC4gKi9cbiAgICBwdWJsaWMgdGltZU9mKGtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGxpdmUgPSB0aGlzLnZhbHVlcy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGxpdmUpIHJldHVybiBsaXZlLnRpbWU7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZWQuZ2V0KGtleSk/LnRpbWUgfHwgMDtcbiAgICB9XG5cbiAgICAvKiogTygxKSwgYW5kIGNvdW50cyBvbmx5IHdoYXQgZXhpc3RzLiAqL1xuICAgIHB1YmxpYyBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMuc2l6ZTtcbiAgICB9XG4gICAgcHVibGljIGdldCBkZWxldGVkU2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVkLnNpemU7XG4gICAgfVxuICAgIC8qKiBMaXZlIHZhbHVlcyBvbmx5LiBMaXZlLCBpbiBpbnNlcnRpb24gb3JkZXIgLSBkZWxldGluZyBkdXJpbmcgaXRlcmF0aW9uIGlzIHNhZmUgKEpTIHNraXBzIGVudHJpZXMgcmVtb3ZlZCBiZWZvcmUgdGhleSBhcmUgcmVhY2hlZCksIHdoaWNoIGlzIHdoYXQgdGhlIHBhc3NlcyB0aGF0IHdhbGsgZXZlcnl0aGluZyBhbmQgcHJ1bmUgYXMgdGhleSBnbyByZWx5IG9uLiAqL1xuICAgIHB1YmxpYyBlbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W3N0cmluZywgTG9nRW50cnk8VD5dPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5lbnRyaWVzKCk7XG4gICAgfVxuICAgIC8qKiBUaGUgdG9tYnN0b25lcywgd2hpY2ggaXMgYSBtdWNoIHNtYWxsZXIgd2FsayB0aGFuIHRoZSB2YWx1ZXMgLSBzbyBleHBpcmluZyB0aGVtLCBvciBsaXN0aW5nIHdoYXQgd2FzIGRlbGV0ZWQgc2luY2Ugc29tZSB0aW1lLCBjb3N0cyB3aGF0IGl0IHNob3VsZC4gKi9cbiAgICBwdWJsaWMgZGVsZXRlZEVudHJpZXMoKTogSXRlcmFibGVJdGVyYXRvcjxbc3RyaW5nLCBMb2dUb21ic3RvbmU8VD5dPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZWQuZW50cmllcygpO1xuICAgIH1cblxuICAgIC8qKiBTdG9yZXMgYSB2YWx1ZSBhcyBvZiBgdGltZWAgKHJvdW5kZWQgdG8gd2hvbGUgbWlsbGlzZWNvbmRzIC0gc2VlIGFwcGx5U2V0KS4gUmV0dXJucyBmYWxzZSB3aGVuIHNvbWV0aGluZyBhdCBsZWFzdCBhcyBuZXcgaXMgYWxyZWFkeSBoZXJlLCBpbiB3aGljaCBjYXNlIG5vdGhpbmcgY2hhbmdlZCAtIGFuIG91dC1vZi1vcmRlciB3cml0ZSBpcyBub3QgYW4gZXJyb3IsIGl0IGlzIGp1c3QgbGF0ZS4gKi9cbiAgICBwdWJsaWMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogVCwgdGltZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHRpbWUgPSBNYXRoLnJvdW5kKHRpbWUpO1xuICAgICAgICBpZiAoIXRoaXMuYXBwbHlTZXQoa2V5LCB2YWx1ZSwgdGltZSwgRGF0ZS5ub3coKSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpcy5hcHBlbmQoeyBrOiBrZXksIHQ6IHRpbWUsIHY6IHZhbHVlIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogRGVsZXRlcyBhcyBvZiBgdGltZWAsIGtlZXBpbmcgdGhlIHRvbWJzdG9uZS4gQSBrZXkgdGhhdCBoYWQgYSBsaXZlIHZhbHVlIGtlZXBzIGl0IGluIHRoZSB0b21ic3RvbmUgYXMgTUFSS0VEIGZvciBkZWxldGlvbiAocmVhZGFibGUgYW5kIHJlc3RvcmFibGUgdW50aWwgZHJvcFZhbHVlKS4gUmV0dXJucyBmYWxzZSB3aGVuIHNvbWV0aGluZyBhdCBsZWFzdCBhcyBuZXcgaXMgYWxyZWFkeSBoZXJlLiAqL1xuICAgIHB1YmxpYyBkZWxldGUoa2V5OiBzdHJpbmcsIHRpbWU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICB0aW1lID0gTWF0aC5yb3VuZCh0aW1lKTtcbiAgICAgICAgbGV0IGxpdmUgPSB0aGlzLnZhbHVlcy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCF0aGlzLmFwcGx5RGVsZXRlKGtleSwgdGltZSwgRGF0ZS5ub3coKSwgbGl2ZT8udmFsdWUsIGxpdmU/LnRpbWUpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChsaXZlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCh7IGs6IGtleSwgdDogdGltZSwgbTogMSwgdjogbGl2ZS52YWx1ZSwgdzogbGl2ZS50aW1lIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoeyBrOiBrZXksIHQ6IHRpbWUsIGQ6IDEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqIFVuZG9lcyBhIG1hcmtlZCBkZWxldGlvbjogdGhlIGtlcHQgdmFsdWUgYmVjb21lcyBsaXZlIGFnYWluLCBhcyBvZiBgdGltZWAgKGEgZnJlc2ggdGltZSwgc28gdGhlIHJlc3RvcmUgb3V0cmFua3MgdGhlIGRlbGV0aW9uIGV2ZXJ5d2hlcmUgaXQgcHJvcGFnYXRlZCkuIFJldHVybnMgZmFsc2Ugd2hlbiB0aGVyZSBpcyBubyBtYXJrZWQgdmFsdWUgdG8gcmVzdG9yZSwgb3Igc29tZXRoaW5nIGF0IGxlYXN0IGFzIG5ldyBpcyBhbHJlYWR5IGhlcmUuICovXG4gICAgcHVibGljIHVubWFyayhrZXk6IHN0cmluZywgdGltZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHRpbWUgPSBNYXRoLnJvdW5kKHRpbWUpO1xuICAgICAgICBsZXQgdG9tYnN0b25lID0gdGhpcy5kZWxldGVkLmdldChrZXkpO1xuICAgICAgICBpZiAoIXRvbWJzdG9uZSB8fCB0b21ic3RvbmUudmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMuYXBwbHlTZXQoa2V5LCB0b21ic3RvbmUudmFsdWUsIHRpbWUsIERhdGUubm93KCkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuYXBwZW5kKHsgazoga2V5LCB0OiB0aW1lLCB2OiB0b21ic3RvbmUudmFsdWUgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBEcm9wcyBhIG1hcmtlZCBkZWxldGlvbidzIGtlcHQgdmFsdWUgKGl0cyBoaXN0b3J5IGhhcyBiZWVuIHBoeXNpY2FsbHkgcmVtb3ZlZCksIGxlYXZpbmcgYSBwbGFpbiB0b21ic3RvbmUgd2l0aCB0aGUgc2FtZSBkZWxldGUgdGltZS4gKi9cbiAgICBwdWJsaWMgZHJvcFZhbHVlKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGxldCB0b21ic3RvbmUgPSB0aGlzLmRlbGV0ZWQuZ2V0KGtleSk7XG4gICAgICAgIGlmICghdG9tYnN0b25lIHx8IHRvbWJzdG9uZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICAgIHRoaXMuZGVsZXRlZC5zZXQoa2V5LCB7IHRpbWU6IHRvbWJzdG9uZS50aW1lLCBjaGFuZ2VkQXQ6IERhdGUubm93KCkgfSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKHsgazoga2V5LCB0OiB0b21ic3RvbmUudGltZSwgZDogMSB9KTtcbiAgICB9XG5cbiAgICAvKiogRm9yZ2V0cyB0aGUga2V5IGVudGlyZWx5LCB0b21ic3RvbmUgaW5jbHVkZWQgLSBmb3IgYSB0b21ic3RvbmUgb2xkIGVub3VnaCB0aGF0IG5vYm9keSBuZWVkcyB0byBoZWFyIGFib3V0IHRoZSBkZWxldGlvbiBhbnkgbW9yZSwgYW5kIGZvciBhbiBlbnRyeSB0aGF0IHR1cm5lZCBvdXQgbmV2ZXIgdG8gaGF2ZSBleGlzdGVkLiBOb3QgYSBkZWxldGlvbjogaXQgbGVhdmVzIG5vdGhpbmcgYmVoaW5kIHRvIHByb3BhZ2F0ZS4gKi9cbiAgICBwdWJsaWMgcHVyZ2Uoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbGV0IGhhZCA9IHRoaXMudmFsdWVzLmRlbGV0ZShrZXkpO1xuICAgICAgICBoYWQgPSB0aGlzLmRlbGV0ZWQuZGVsZXRlKGtleSkgfHwgaGFkO1xuICAgICAgICBpZiAoIWhhZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmFwcGVuZCh7IGs6IGtleSwgdDogTWF0aC5yb3VuZChEYXRlLm5vdygpKSwgcDogMSB9KTtcbiAgICB9XG5cbiAgICAvLyBUaW1lcyBhcmUgUk9VTkRFRCB0byB3aG9sZSBtaWxsaXNlY29uZHMgb24gZXZlcnkgcGF0aCBpbnRvIHRoZSBtYXBzIChsb2FkIHJlcGxheXMgdGhyb3VnaCBoZXJlIHRvbywgc28gZnJhY3Rpb25hbCB0aW1lcyBwZXJzaXN0ZWQgYnkgb2xkZXIgY29kZSBoZWFsIG9uIHN0YXJ0dXApLiBEaXNrIG10aW1lcyBjYXJyeSBmcmFjdGlvbmFsIG1pbGxpc2Vjb25kcyBidXQgdXRpbWVzIHJvdW5kLXRyaXBzIG9ubHkgd2hvbGUgb25lcywgc28gYSBmcmFjdGlvbmFsIHRpbWUgY2FuIG5ldmVyIGJlIHJlcHJvZHVjZWQgYnkgcHJvcGFnYXRpb24gLSBldmVyeSBjb3B5IG9mIHRoZSB2YWx1ZSB3b3VsZCBjb21wYXJlIFwib2xkZXJcIiB0aGFuIHRoZSBvcmlnaW5hbCBmb3JldmVyLCBhbmQgdGhlIHNhbWUgd3JpdGUgd291bGQgYmUgcmUtcHVzaGVkIGFuZCByZS1jb3BpZWQgZXZlcnkgcm91bmQuIFJvdW5kIHJhdGhlciB0aGFuIGZsb29yLCB0byBtYXRjaCBBcmNoaXZlc0Rpc2sgKHNlZSBpdHMgZ2V0Mik6IHV0aW1lcyBnb2VzIHRocm91Z2ggYSBzZWNvbmRzIGRvdWJsZSBhbmQgY2FuIGxhbmQgYSBoYWlyIGJlbG93IHRoZSBzdGFtcGVkIG1pbGxpc2Vjb25kLlxuICAgIHByaXZhdGUgYXBwbHlTZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBULCB0aW1lOiBudW1iZXIsIGNoYW5nZWRBdDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHRpbWUgPSBNYXRoLnJvdW5kKHRpbWUpO1xuICAgICAgICBjaGFuZ2VkQXQgPSBNYXRoLnJvdW5kKGNoYW5nZWRBdCk7XG4gICAgICAgIGlmICh0aW1lIDwgdGhpcy50aW1lT2Yoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB0aGlzLmRlbGV0ZWQuZGVsZXRlKGtleSk7XG4gICAgICAgIHRoaXMudmFsdWVzLnNldChrZXksIHsgdmFsdWUsIHRpbWUsIGNoYW5nZWRBdCB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseURlbGV0ZShrZXk6IHN0cmluZywgdGltZTogbnVtYmVyLCBjaGFuZ2VkQXQ6IG51bWJlciwgdmFsdWU/OiBULCB2YWx1ZVRpbWU/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgdGltZSA9IE1hdGgucm91bmQodGltZSk7XG4gICAgICAgIGNoYW5nZWRBdCA9IE1hdGgucm91bmQoY2hhbmdlZEF0KTtcbiAgICAgICAgaWYgKHZhbHVlVGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YWx1ZVRpbWUgPSBNYXRoLnJvdW5kKHZhbHVlVGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWUgPCB0aGlzLnRpbWVPZihrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMudmFsdWVzLmRlbGV0ZShrZXkpO1xuICAgICAgICB0aGlzLmRlbGV0ZWQuc2V0KGtleSwgeyB0aW1lLCBjaGFuZ2VkQXQsIHZhbHVlLCB2YWx1ZVRpbWUgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwZW5kKHJlY29yZDogTG9nUmVjb3JkPFQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMucGVuZGluZy5wdXNoKEpTT04uc3RyaW5naWZ5KHJlY29yZCkpO1xuICAgICAgICB0aGlzLmxvZ1JlY29yZHMrKztcbiAgICAgICAgdGhpcy5zY2hlZHVsZUZsdXNoKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY2hlZHVsZUZsdXNoKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mbHVzaFRpbWVyICE9PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5mbHVzaFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZsdXNoVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB2b2lkIHRoaXMuZmx1c2goKS5jYXRjaCgoZTogRXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoYEZsdXNoaW5nICR7dGhpcy5maWxlUGF0aH0gZmFpbGVkOiAke2Uuc3RhY2sgPz8gZX1gKSk7XG4gICAgICAgIH0sIEZMVVNIX0RFTEFZKTtcbiAgICAgICAgKHRoaXMuZmx1c2hUaW1lciBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG4gICAgfVxuXG4gICAgLyoqIFdyaXRlcyBldmVyeXRoaW5nIHBlbmRpbmcgKHJld3JpdGluZyB0aGUgbG9nIGZpcnN0IGlmIGl0IGhhcyBncm93biB0b28gZmFyIHBhc3Qgd2hhdCBpdCBkZXNjcmliZXMpLiAqL1xuICAgIHB1YmxpYyBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMud3JpdGVDaGFpbi50aGVuKCgpID0+IHRoaXMud3JpdGUoKSk7XG4gICAgICAgIC8vIFRoZSBjaGFpbiBvbmx5IGV4aXN0cyB0byBzZXJpYWxpemUgd3JpdGVzLCBzbyBpdCBtdXN0IG5vdCBzdGF5IHJlamVjdGVkOiBhIGZhaWx1cmUgYmVsb25ncyB0byB0aGUgY2FsbGVyIHRoYXQgYXNrZWQgZm9yIHRoaXMgZmx1c2gsIG5vdCB0byBldmVyeSBmbHVzaCBhZnRlciBpdFxuICAgICAgICB0aGlzLndyaXRlQ2hhaW4gPSByZXN1bHQuY2F0Y2goKCkgPT4geyB9KTtcbiAgICAgICAgYXdhaXQgcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlyZWN0b3J5ID0gbGF6eShhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGZzLnByb21pc2VzLm1rZGlyKHBhdGguZGlybmFtZSh0aGlzLmZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIGFzeW5jIHdyaXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5sb2dSZWNvcmRzID4gTWF0aC5tYXgoTUlOX0NPTVBBQ1RfUkVDT1JEUywgKHRoaXMudmFsdWVzLnNpemUgKyB0aGlzLmRlbGV0ZWQuc2l6ZSkgKiBDT01QQUNUX1JBVElPKSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21wYWN0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5hcHBlbmRQZW5kaW5nKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBhcHBlbmRQZW5kaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMucGVuZGluZy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgbGV0IHJlY29yZHMgPSB0aGlzLnBlbmRpbmc7XG4gICAgICAgIHRoaXMucGVuZGluZyA9IFtdO1xuICAgICAgICBhd2FpdCB0aGlzLmRpcmVjdG9yeSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMuYXBwZW5kRmlsZSh0aGlzLmZpbGVQYXRoLCByZWNvcmRzLmpvaW4oXCJcXG5cIikgKyBcIlxcblwiKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gUHV0IHRoZW0gYmFjayByYXRoZXIgdGhhbiBsb3NlIHRoZW06IHRoZSB2YWx1ZXMgYXJlIHN0aWxsIGluIG1lbW9yeSwgc28gYWxsIHRoYXQgaXMgYXQgcmlzayBpcyBoYXZpbmcgdG8gcmVidWlsZCB0aGVtIGJ5IHNjYW5uaW5nXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSByZWNvcmRzLmNvbmNhdCh0aGlzLnBlbmRpbmcpO1xuICAgICAgICAgICAgdGhpcy5zY2hlZHVsZUZsdXNoKCk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV3cml0ZXMgdGhlIGxvZyBhcyB0aGUgY3VycmVudCBjb250ZW50cyBvZiBib3RoIG1hcHMuIFRoZXkgYXJlIHRoZSB0cnV0aCAtIHRoZSBsb2cgb25seSBleGlzdHMgdG8gcmVidWlsZCB0aGVtIC0gc28gdGhlIHNuYXBzaG90IElTIHRoZSBuZXcgbG9nLlxuICAgIHByaXZhdGUgYXN5bmMgY29tcGFjdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHJlY29yZHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAobGV0IFtrZXksIGVudHJ5XSBvZiB0aGlzLnZhbHVlcykge1xuICAgICAgICAgICAgcmVjb3Jkcy5wdXNoKEpTT04uc3RyaW5naWZ5KHsgazoga2V5LCB0OiBlbnRyeS50aW1lLCB2OiBlbnRyeS52YWx1ZSB9IHNhdGlzZmllcyBMb2dSZWNvcmQ8VD4pKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBba2V5LCB0b21ic3RvbmVdIG9mIHRoaXMuZGVsZXRlZCkge1xuICAgICAgICAgICAgaWYgKHRvbWJzdG9uZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVjb3Jkcy5wdXNoKEpTT04uc3RyaW5naWZ5KHsgazoga2V5LCB0OiB0b21ic3RvbmUudGltZSwgbTogMSwgdjogdG9tYnN0b25lLnZhbHVlLCB3OiB0b21ic3RvbmUudmFsdWVUaW1lIH0gc2F0aXNmaWVzIExvZ1JlY29yZDxUPikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWNvcmRzLnB1c2goSlNPTi5zdHJpbmdpZnkoeyBrOiBrZXksIHQ6IHRvbWJzdG9uZS50aW1lLCBkOiAxIH0gc2F0aXNmaWVzIExvZ1JlY29yZDxUPikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENsZWFyZWQgd2l0aCB0aGUgc25hcHNob3Q6IGV2ZXJ5IHBlbmRpbmcgcmVjb3JkIGlzIGFscmVhZHkgcmVmbGVjdGVkIGluIHRoZSBtYXBzLCBzbyB0aGUgc25hcHNob3QgY29udGFpbnMgaXQuIEFueXRoaW5nIGFwcGVuZGVkIGZyb20gaGVyZSBvbiBpcyBOT1QgaW4gdGhlIHNuYXBzaG90LCBhbmQgbGFuZHMgaW4gdGhlIG5ldyBsb2cgYWZ0ZXIgdGhlIHJlbmFtZS5cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gW107XG4gICAgICAgIGxldCBzdGFydGVkV2l0aCA9IHRoaXMubG9nUmVjb3JkcztcbiAgICAgICAgbGV0IHRlbXBQYXRoID0gYCR7dGhpcy5maWxlUGF0aH0uY29tcGFjdGluZ2A7XG4gICAgICAgIGF3YWl0IHRoaXMuZGlyZWN0b3J5KCk7XG4gICAgICAgIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZSh0ZW1wUGF0aCwgcmVjb3Jkcy5sZW5ndGggJiYgYCR7cmVjb3Jkcy5qb2luKFwiXFxuXCIpfVxcbmAgfHwgXCJcIik7XG4gICAgICAgIC8vIFJlcGxhY2VzIHRoZSBvbGQgbG9nIGluIG9uZSBzdGVwLCBzbyBhIGNyYXNoIGxlYXZlcyBlaXRoZXIgdGhlIHdob2xlIG9sZCBsb2cgb3IgdGhlIHdob2xlIG5ldyBvbmVcbiAgICAgICAgYXdhaXQgZnMucHJvbWlzZXMucmVuYW1lKHRlbXBQYXRoLCB0aGlzLmZpbGVQYXRoKTtcbiAgICAgICAgdGhpcy5sb2dSZWNvcmRzID0gcmVjb3Jkcy5sZW5ndGggKyB0aGlzLnBlbmRpbmcubGVuZ3RoO1xuICAgICAgICBjb25zb2xlLmxvZyhgUmV3cm90ZSAke3RoaXMuZmlsZVBhdGh9OiAke3N0YXJ0ZWRXaXRofSBsb2cgcmVjb3JkcyBmb3IgJHt0aGlzLnZhbHVlcy5zaXplfSB2YWx1ZXMgYW5kICR7dGhpcy5kZWxldGVkLnNpemV9IHRvbWJzdG9uZXNgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBlbmRQZW5kaW5nKCk7XG4gICAgfVxufVxuIl19
255
- /* _JS_SOURCE_HASH = "1473d3fc1595229d40e30289b677b52306cd586602494c718fe6bb9d8525c35b"; */
255
+ /* _JS_SOURCE_HASH = "486c49e162e79d8a7f9efcfb6e329d66add50298027f9b02f626298237eae8ff"; */
@@ -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.TransactionStorage = void 0;
4
4
  const misc_1 = require("socket-function/src/misc");
@@ -544,4 +544,4 @@ class TransactionStorage {
544
544
  exports.TransactionStorage = TransactionStorage;
545
545
  TransactionStorage.allStorage = [];
546
546
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25TdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiVHJhbnNhY3Rpb25TdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUEwRztBQUUxRyxxQ0FBa0M7QUFDbEMsMkRBQWtFO0FBQ2xFLGtFQUFpRjtBQUNqRixxREFBOEM7QUFDOUMscURBQWdEO0FBRWhELDJEQUErRDtBQUUvRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF1QkU7QUFFRixNQUFNLG1CQUFtQixHQUFHLG1CQUFZLEdBQUcsQ0FBQyxDQUFDO0FBRTdDLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEMsTUFBTSxpQkFBaUIsR0FBRyxtQkFBWSxHQUFHLEVBQUUsQ0FBQztBQUU1QyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBRTVDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEUsNkRBQTZEO0FBQzdELE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQztBQWN4QixNQUFNLGVBQWUsR0FBRyxJQUFBLHNCQUFXLEVBQUMsS0FBSyxFQUFFLEdBQXdCLEVBQUUsRUFBRTtJQUNuRSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQzNCLE1BQU0sS0FBSyxH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QUFDLFdBQU0sQ0FBQyxDQUFDLENBQUM7WUFFWCxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7WUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztBQS9oQkwsZ0RBZ2lCQztBQXJoQmtCLDZCQUFVLEdBQXlCLEVBQUUsQUFBM0IsQ0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9taXNlT2JqLCBjb21wYXJlQXJyYXksIHNvcnQsIHRocm90dGxlRnVuY3Rpb24sIHRpbWVJbk1pbnV0ZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCB7IElTdG9yYWdlLCBJU3RvcmFnZVJhdyB9IGZyb20gXCIuL0lTdG9yYWdlXCI7XG5pbXBvcnQgeyBaaXAgfSBmcm9tIFwiLi4vbWlzYy96aXBcIjtcbmltcG9ydCB7IGRlbGF5LCBydW5JblNlcmlhbCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2JhdGNoaW5nXCI7XG5pbXBvcnQgeyBmb3JtYXROdW1iZXIsIGZvcm1hdFRpbWUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9mb3JtYXR0aW5nL2Zvcm1hdFwiO1xuaW1wb3J0IHsgc2V0UGVuZGluZyB9IGZyb20gXCIuL1BlbmRpbmdNYW5hZ2VyXCI7XG5pbXBvcnQgeyBpc0luQnVpbGQgfSBmcm9tIFwiLi4vbWlzYy9lbnZpcm9ubWVudFwiO1xuaW1wb3J0IHsgaXNOb2RlIH0gZnJvbSBcInR5cGVzYWZlY3NzXCI7XG5pbXBvcnQgeyBydW5JbmZpbml0ZVBvbGwgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9iYXRjaGluZ1wiO1xuXG4vKlxuLy8gU3BlYzpcbi8vICAgICAgLSBaaXAgaW5kaXZpZHVhbCBsYXJnZSB2YWx1ZXNcbi8vICAgICAgLSBTdG9yZXMgYSB0cmFuc2FjdGlvbiBsb2dcbi8vICAgICAgICAgIC0gVHJhbnNhY3Rpb24gbG9nIGhhcyBhIGhlYWRlciwgd2hpY2ggaXMgSlNPTiwgZm9yIHRoaW5ncyBzdWNoIGFzIFwiemlwcGVkXCJcbi8vICAgICAgICAgIC0gVHJhbnNhY3Rpb24gbG9nIHVzZXMgbGVuZ3RoIHByZWZpeGVkIHZhbHVlcywgd2l0aCBhIHNwZWNpYWwgOCBieXRlcyB0byBkZW5vdGUgdGhlIGVuZCwgYW5kIDggZm9yIHRoZSBzdGFydC5cbi8vICAgICAgICAgIC0gV2hlbiB0cmFuc2FjdGlvbiBsb2cgaXMgaXRlcmF0ZWQgb24sIGlmIHRoZSBieXRlcyBhdCB0aGUgZW5kICh1c2luZyB0aGUgbGVuZ3RoIHByZWZpeCkgZG9uJ3QgbWF0Y2ggdGhlIGVuZCBieXRlcyBPUiB0aGUgc3RhcnQgYnl0ZXMgYXJlIHdyb25nLCB3ZSBza2lwIHRoZSBzdGFydCBieXRlcywgYW5kIGl0ZXJhdGluZyB1bnRpbCB3ZSBmaW5kIG5ldyBzdGFydCBieXRlcyB0aGF0IG1hdGNoIG91ciBzcGVjaWFsIGJ5dGVzLiBUaGVuIHdlIHRyeSB0byByZWFkIHRoZXNlIHZhbHVlcy5cbi8vICAgICAgICAgIC0gRWFjaCB0cmFuc2FjdGlvbiBlbnRyeSBoYXMgYSBieXRlIGZvciBmbGFncywgb25lIGJpdCB3aGljaCBkZW5vdGVzIGlmIHRoZSB2YWx1ZSBpcyB6aXBwZWQgb3Igbm90LlxuLy8gICAgICAtIENvbXByZXNzZXMgdGhlIGxvZyBhZnRlciB0aGVyZSBhcmUgM1ggZW50cmllcyB0aGFuIGtleXMgKGFuZCA+IDEwMClcbi8vICAgICAgICAgIC0gQm90aCBkZWR1cGUga2V5cywgYW5kIHppcFxuLy8gICAgICAtIEFzc3VtZXMgYWxsIGZpbGVzIGluIHJhd1N0b3JhZ2UgZW5kaW5nIHdpdGggLnR4IGFyZSB0cmFuc2FjdGlvbiBsb2dzXG4vLyAgICAgIC0gTmFtZXMgZmlsZXMgbGlrZSBgJHtnZW5lcmF0aW9ufS50eGBcbi8vICAgICAgICAgIC0gV2hlbiBjb21wcmVzc2luZywgd2UgaW5jcmVtZW50IHRoZSBnZW5lcmF0aW9uLCBhbmQgd3JpdGUgdG8gYSBuZXcgZmlsZSwgYW5kIGRlbGV0ZSBhbnkgZ2VuZXJhdGlvbnMgdGhhdCBhcmUgb2xkZXIgdGhhbiB0aGUgbmV3IG9uZVxuLy8gICAgICAgICAgLSBPbiByZWFkaW5nLCB3ZSByZWFkIGZyb20gYWxsIGdlbmVyYXRpb24gZmlsZXMgdGhhdCBleGlzdCwgaW4gY2FzZSBzb21lIGFyZSBjb3JydXB0ZWRcbi8vICAgICAgLSBPbiBsb2FkLCBsb2FkcyBpbiBhbGwgdHJhbnNhY3Rpb24gbG9ncywgYW5kIHN0b3JlcyBhbGwgdmFsdWVzIGluIGEgTWFwPHN0cmluZywgQnVmZmVyPlxuLy8gICAgICAtIE9uIHdyaXRlcyBpbW1lZGlhdGVseSB1cGRhdGVzIHRoZSBpbiBtZW1vcnkgTWFwLCBhbmQgdGhlbiB3cml0ZXMgdG8gdGhlIHRyYW5zYWN0aW9uIGxvZ1xuLy8gICAgICAtIENhY2hlcyB0aGUgbGFzdCB0cmFuc2FjdGlvbiBmaWxlIG5hbWUgaW4gbWVtb3J5XG4vLyAgICAgIC0gTWFrZXMgc3VyZSBhbGwgZmlsZSBzeXN0ZW0gd3JpdGVzIChidXQgbm90IE1hcCB1cGRhdGVzKSBhcmUgZG9uZSB3aXRoIGZpbGVMb2NrU2VjdGlvbiwgc28gdGhleSBuZXZlciBvdmVybGFwLlxuLy8gICAgICAtIEJ1ZmZlcnMgcGVuZGluZyBhcHBlbmRzIGluIG1lbW9yeSwgc28gdGhleSBjYW4gd3JpdHRlbiBhbGwgYXQgb25jZSAoYWZ0ZXIgdGhlIGZpcnN0IG9uZSBpcyBibG9ja2luZyBpbiBmaWxlTG9ja1NlY3Rpb24pLlxuXG5VUERBVEUgbm93IHdlIHVzZSBjaHVua3MsIGJlY2F1c2UgYXBwZW5kIGlzIHRvbyBzbG93LlxuXG5JTVBPUlRBTlQhIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB3cml0ZXJzLCB3ZSBjbG9iYmVyIHdyaXRlcyBmcm9tIG90aGVyIHdyaXRlcnMgd2hlbiB3ZSBjb21wcmVzc1xuKi9cblxuY29uc3QgRElTS19DSEVDS19JTlRFUlZBTCA9IHRpbWVJbk1pbnV0ZSAqIDU7XG5cbmNvbnN0IEZJTEVfQ0hVTktfU0laRSA9IDEwMjQgKiAxMDI0O1xuY29uc3QgRklMRV9NQVhfTElGRVRJTUUgPSB0aW1lSW5NaW51dGUgKiAzMDtcblxuY29uc3QgRklMRV9aSVBfVEhSRVNIT0xEID0gMTYgKiAxMDI0ICogMTAyNDtcblxuY29uc3QgU1RBUlRfQllURVMgPSBCdWZmZXIuZnJvbShbMjM2LCA0OSwgMTEyLCAxMjEsIDI3LCAxMjcsIDIyNywgNjNdKTtcbmNvbnN0IEVORF9CWVRFUyA9IEJ1ZmZlci5mcm9tKFsyMjAsIDExMSwgMjQzLCAyMDIsIDIwMCwgNzksIDIxMywgNjNdKTtcbi8vIERlbGF5IHdyaXRlcywgc28gd2UgYmF0Y2ggYmV0dGVyLCBhbmQgdGhyYXNoIHRoZSBkaXNrIGxlc3NcbmNvbnN0IFdSSVRFX0RFTEFZID0gNTAwO1xuXG5pbnRlcmZhY2UgVHJhbnNhY3Rpb25FbnRyeSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgICAvLyBOT1RFOiBXZSBkaXNhYmxlZCBwZXItZW50cnkgemlwcGluZy4gRWl0aGVyIHVzZSBhIHJhdyBjb2xsZWN0aW9uIHNvIHlvdSBkb24ndCBoYXZlIHRvIGxvYWQgYWxsIG9mIHRoZW0gaW50byBtZW1vcnkgb3Igc2hhcmQgeW91ciBjb2xsZWN0aW9uLiBaaXBwaW5nIGlzIG9ubHkgYSBiYW5kLWFpZCBzb2x1dGlvbiBmb3IgbWVtb3J5IGlzc3Vlcy4gQUxTTywgaXQgbWFrZXMgbG9hZGluZyBzbG93ZXIsIHdoaWNoIG1ha2VzIGFsbCBvdGhlciBhcHBsaWNhdGlvbnMgdGhhdCBkb24ndCBuZWVkIHppcHBpbmcgd29yc2UuXG4gICAgaXNaaXBwZWQ6IGJvb2xlYW47XG4gICAgdGltZTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgVHJhbnNhY3Rpb25IZWFkZXIge1xuICAgIHppcHBlZDogYm9vbGVhbjtcbn1cblxuY29uc3QgZmlsZUxvY2tTZWN0aW9uID0gcnVuSW5TZXJpYWwoYXN5bmMgKGZuYzogKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4ge1xuICAgIGF3YWl0IGZuYygpO1xufSk7XG5cbmNvbnN0IENIVU5LX0VYVCA9IFwiLmNodW5rXCI7XG5jb25zdCBvdXJJZCA9IERhdGUubm93KCkgKyBNYXRoLnJhbmRvbSgpO1xubGV0IHNlcU51bSA9IDA7XG5cbmZ1bmN0aW9uIGdldE5leHRDaHVua1BhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7RGF0ZS5ub3coKX1fJHtzZXFOdW0rK31fJHtvdXJJZH0uY2h1bmtgO1xufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25TdG9yYWdlIGltcGxlbWVudHMgSVN0b3JhZ2U8QnVmZmVyPiB7XG4gICAgcHVibGljIGNhY2hlOiBNYXA8c3RyaW5nLCBUcmFuc2FjdGlvbkVudHJ5PiA9IG5ldyBNYXAoKTtcbiAgICAvLyBNYXBzIGZpbGUgbmFtZSB0byBvdXIgbGFzdCBrbm93biB3cml0ZSB0aW1lc3RhbXBcbiAgICBwcml2YXRlIGRpc2tGaWxlczogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIGN1cnJlbnRDaHVuazoge1xuICAgICAgICBwYXRoOiBzdHJpbmc7XG4gICAgICAgIHNpemU6IG51bWJlcjtcbiAgICAgICAgdGltZUNyZWF0ZWQ6IG51bWJlcjtcbiAgICB9IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgZW50cnlDb3VudCA9IDA7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhbGxTdG9yYWdlOiBUcmFuc2FjdGlvblN0b3JhZ2VbXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmF3U3RvcmFnZTogSVN0b3JhZ2VSYXcsXG4gICAgICAgIHByaXZhdGUgZGVidWdOYW1lOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgd3JpdGVEZWxheSA9IFdSSVRFX0RFTEFZLFxuICAgICAgICAvLyBXaGVuIHNldCwgd2UgcG9sbCB0aGUgdW5kZXJseWluZyBzdG9yYWdlIGFuZCByZWxvYWQgaWYgYW5vdGhlciBwcm9jZXNzL3RhYiB3cml0ZXMgbmV3IGNodW5rIGZpbGVzLiBPZmYgYnkgZGVmYXVsdCwgYXMgaXQgY29zdHMgYSBwZXJpb2RpYyBkaXNrIHNjYW4gYW5kIG1vc3QgY29sbGVjdGlvbnMgYXJlIG9ubHkgd3JpdHRlbiBieSBhIHNpbmdsZSBwcm9jZXNzLlxuICAgICAgICBwcml2YXRlIHJlc3luY0Zyb21EaXNrID0gZmFsc2VcbiAgICApIHtcbiAgICAgICAgVHJhbnNhY3Rpb25TdG9yYWdlLmFsbFN0b3JhZ2UucHVzaCh0aGlzKTtcbiAgICAgICAgLy8gVkVSWSB1c2VmdWwgZm9yIGRlYnVnZ2luZy5cbiAgICAgICAgKGdsb2JhbFRoaXMgYXMgYW55KVtgdHgke3RoaXMuZGVidWdOYW1lfWBdID0gdGhpcztcbiAgICB9XG4gICAgLy8gSGVscHMgZ2V0IHJpZCBvZiBwYXJzZSBlcnJvcnMgd2hpY2ggY29uc3RhbnRseSBsb2cuIEFsc28sIHVzZXMgbGVzcyBzcGFjZVxuICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgY29tcHJlc3NBbGwoKSB7XG4gICAgICAgIGF3YWl0IGZpbGVMb2NrU2VjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBzdG9yYWdlIG9mIFRyYW5zYWN0aW9uU3RvcmFnZS5hbGxTdG9yYWdlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgc3RvcmFnZS5jb21wcmVzc1RyYW5zYWN0aW9uTG9nKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc3luY0NhbGxiYWNrczogKCgpID0+IHZvaWQpW10gPSBbXTtcbiAgICBwdWJsaWMgd2F0Y2hSZXN5bmMoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXN5bmNDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0OiBQcm9taXNlPHVua25vd24+IHwgdW5kZWZpbmVkID0gdGhpcy5sb2FkQWxsVHJhbnNhY3Rpb25zKHRydWUpO1xuXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50Q2h1bmsoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENodW5rICYmIHRoaXMuY3VycmVudENodW5rLnRpbWVDcmVhdGVkIDwgRGF0ZS5ub3coKSAtIEZJTEVfTUFYX0xJRkVUSU1FKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDaHVuayA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudENodW5rKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDaHVuayA9IHtcbiAgICAgICAgICAgICAgICBwYXRoOiBnZXROZXh0Q2h1bmtQYXRoKCksXG4gICAgICAgICAgICAgICAgc2l6ZTogMCxcbiAgICAgICAgICAgICAgICB0aW1lQ3JlYXRlZDogRGF0ZS5ub3coKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFRpbWVzdGFtcCB3aWxsIGJlIHVwZGF0ZWQgYWZ0ZXIgYWN0dWFsIHdyaXRlXG4gICAgICAgICAgICB0aGlzLmRpc2tGaWxlcy5zZXQodGhpcy5jdXJyZW50Q2h1bmsucGF0aCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudENodW5rLnBhdGg7XG4gICAgfVxuICAgIHByaXZhdGUgdXBkYXRlRGlza0ZpbGVUaW1lc3RhbXAoZmlsZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlza0ZpbGVzLnNldChmaWxlLCBEYXRlLm5vdygpKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBvbkFkZFRvQ2h1bmsoc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50Q2h1bmspIHJldHVybjtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2h1bmsuc2l6ZSArPSBzaXplO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2h1bmsuc2l6ZSA+PSBGSUxFX0NIVU5LX1NJWkUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENodW5rID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaXNaaXBwZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVHJhbnNhY3Rpb25zIHNob3VsZCBiZSB1bnppcHBlZCBvbiBmaWxlIHJlYWR5LCBzbyB0aGlzIHN0YXRlIHNob3VsZCBiZSBpbXBvc3NpYmxlLiBLZXk6ICR7a2V5fWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5pbml0KSBhd2FpdCB0aGlzLmluaXQ7XG5cbiAgICAgICAgLy8gVGltZSBpcyBzZXQgb24gZGlzayB3cml0ZSwgYXMgRGF0ZS5ub3coKSBpcyB0b28gc2xvd1xuICAgICAgICBsZXQgZW50cnk6IFRyYW5zYWN0aW9uRW50cnkgPSB7IGtleSwgdmFsdWUsIGlzWmlwcGVkOiBmYWxzZSwgdGltZTogMCB9O1xuICAgICAgICB0aGlzLmNhY2hlLnNldChrZXksIGVudHJ5KTtcblxuICAgICAgICBhd2FpdCB0aGlzLnB1c2hBcHBlbmQoZW50cnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZW1vdmUoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuaW5pdCkgYXdhaXQgdGhpcy5pbml0O1xuICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMucHVzaEFwcGVuZCh7IGtleSwgdmFsdWU6IHVuZGVmaW5lZCwgaXNaaXBwZWQ6IGZhbHNlLCB0aW1lOiAwIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRJbmZvKGtleTogc3RyaW5nKTogUHJvbWlzZTx7IHNpemU6IG51bWJlcjsgbGFzdE1vZGlmaWVkOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCF2YWx1ZT8udmFsdWUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7IHNpemU6IHZhbHVlLnZhbHVlLmxlbmd0aCwgbGFzdE1vZGlmaWVkOiB2YWx1ZS50aW1lIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwZW5kaW5nQXBwZW5kczogVHJhbnNhY3Rpb25FbnRyeVtdID0gW107XG4gICAgcHJpdmF0ZSBleHRyYUFwcGVuZHMgPSAwO1xuICAgIHByaXZhdGUgcGVuZGluZ1dyaXRlOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkO1xuICAgIGFzeW5jIHB1c2hBcHBlbmQoZW50cnk6IFRyYW5zYWN0aW9uRW50cnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5lbnRyeUNvdW50Kys7XG4gICAgICAgIHRoaXMucGVuZGluZ0FwcGVuZHMucHVzaChlbnRyeSk7XG4gICAgICAgIHZvaWQgdGhpcy51cGRhdGVQZW5kaW5nQXBwZW5kcygpO1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nV3JpdGUpIHJldHVybiB0aGlzLnBlbmRpbmdXcml0ZTtcbiAgICAgICAgdGhpcy5wZW5kaW5nV3JpdGUgPSBmaWxlTG9ja1NlY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gRGVsYXkgdG8gYWxsb3cgYmF0Y2hpbmcsIGFuZCBkZWR1cGluZ1xuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRoaXMud3JpdGVEZWxheSkpO1xuICAgICAgICAgICAgbGV0IGN1ckFwcGVuZHMgPSB0aGlzLnBlbmRpbmdBcHBlbmRzO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQXBwZW5kcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nV3JpdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGFwcGVuZHNEZWR1cGVkOiBNYXA8c3RyaW5nLCBUcmFuc2FjdGlvbkVudHJ5PiA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGN1ckFwcGVuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kc0RlZHVwZWQuc2V0KGVudHJ5LmtleSwgZW50cnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJBcHBlbmRzID0gQXJyYXkuZnJvbShhcHBlbmRzRGVkdXBlZC52YWx1ZXMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmV4dHJhQXBwZW5kcyArPSBjdXJBcHBlbmRzLmxlbmd0aDtcbiAgICAgICAgICAgIHZvaWQgdGhpcy51cGRhdGVQZW5kaW5nQXBwZW5kcygpO1xuICAgICAgICAgICAgaWYgKGN1ckFwcGVuZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGN1ckFwcGVuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cnkudGltZSA9IHRpbWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IG5ld1N1bSA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmZlcnM6IEJ1ZmZlcltdID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBjdXJBcHBlbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBidWZmZXIgPSB0aGlzLnNlcmlhbGl6ZVRyYW5zYWN0aW9uRW50cnkoZW50cnkpO1xuICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3VtICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IG5ld0NodW5rcyA9IHRoaXMuY2h1bmtCdWZmZXJzKGJ1ZmZlcnMpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNodW5rIG9mIG5ld0NodW5rcykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsZSA9IHRoaXMuZ2V0Q3VycmVudENodW5rKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYXdhaXQgdGhpcy5yYXdTdG9yYWdlLmdldChmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHsgaGVhZGVyLCBoZWFkZXJCdWZmZXIgfSA9IHRoaXMuZ2V0SGVhZGVyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmF3U3RvcmFnZS5zZXQoZmlsZSwgaGVhZGVyQnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGNodW5rLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yYXdTdG9yYWdlLmFwcGVuZChmaWxlLCBjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNrRmlsZVRpbWVzdGFtcChmaWxlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkFkZFRvQ2h1bmsoY29udGVudC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29tcHJlc3NUcmFuc2FjdGlvbkxvZygpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4dHJhQXBwZW5kcyAtPSBjdXJBcHBlbmRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB2b2lkIHRoaXMudXBkYXRlUGVuZGluZ0FwcGVuZHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMucGVuZGluZ1dyaXRlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUGVuZGluZ0FwcGVuZHMgPSB0aHJvdHRsZUZ1bmN0aW9uKDEwMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgYXBwZW5kQ291bnQgPSB0aGlzLnBlbmRpbmdBcHBlbmRzLmxlbmd0aCArIHRoaXMuZXh0cmFBcHBlbmRzO1xuICAgICAgICBsZXQgZ3JvdXAgPSBgVHJhbnNhY3Rpb24gKCR7dGhpcy5kZWJ1Z05hbWV9KWA7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBVcGRhdGUgcGVuZGluZyBhcHBlbmRzICR7Z3JvdXB9OiAke2FwcGVuZENvdW50fWApO1xuICAgICAgICBpZiAoIWFwcGVuZENvdW50KSB7XG4gICAgICAgICAgICBzZXRQZW5kaW5nKGdyb3VwLCBcIlwiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXRQZW5kaW5nKGdyb3VwLCBgUGVuZGluZyBhcHBlbmRzOiAke2FwcGVuZENvdW50fWApO1xuICAgIH0pO1xuXG4gICAgcHVibGljIGFzeW5jIGdldEtleXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBpZiAodGhpcy5pbml0KSBhd2FpdCB0aGlzLmluaXQ7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY2FjaGUua2V5cygpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2hlY2tEaXNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5pbml0KSBhd2FpdCB0aGlzLmluaXQ7XG4gICAgICAgIGNvbnN0IGFueUNoYW5nZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsZXQga2V5cyA9IGF3YWl0IHRoaXMucmF3U3RvcmFnZS5nZXRLZXlzKCk7XG4gICAgICAgICAgICBsZXQgZGlza0ZpbGVzID0ga2V5cy5maWx0ZXIoa2V5ID0+IGtleS5lbmRzV2l0aChDSFVOS19FWFQpKTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGFueSBrbm93biBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQgZXh0ZXJuYWxseSAoZGlzayB0aW1lc3RhbXAgbmV3ZXIgdGhhbiBvdXJzKVxuICAgICAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBkaXNrRmlsZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgb3VyVGltZXN0YW1wID0gdGhpcy5kaXNrRmlsZXMuZ2V0KGZpbGUpO1xuICAgICAgICAgICAgICAgIGlmIChvdXJUaW1lc3RhbXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGluZm8gPSBhd2FpdCB0aGlzLnJhd1N0b3JhZ2UuZ2V0SW5mbyhmaWxlKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5mbyAmJiBpbmZvLmxhc3RNb2RpZmllZCA+IG91clRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICAgIGlmICghYXdhaXQgYW55Q2hhbmdlcygpKSByZXR1cm47XG5cbiAgICAgICAgYXdhaXQgZmlsZUxvY2tTZWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmICghYXdhaXQgYW55Q2hhbmdlcygpKSByZXR1cm47XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgbmV3IGNoYW5nZXMgaW4gY29sbGVjdGlvbiBmcm9tIG90aGVyIHRhYi4gTG9hZGluZyB0aGVtIG5vdy4gJHt0aGlzLmRlYnVnTmFtZX1gKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEFsbFRyYW5zYWN0aW9ucygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIC8vIE5PVEU6IFRoaXMgaXMgZWl0aGVyIGNhbGxlZCBpbiBpbml0ICh3aGljaCBibG9ja3MgYWxsIG90aGVyIGNhbGxzKSwgb3IgaW5zaWRlIG9mIHRoZSBnbG9iYWwgZmlsZSBsb2NrLCBzbyBpdCBpcyBzYWZlIHRvIGxvYWQuXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkQWxsVHJhbnNhY3Rpb25zKGluaXRpYWxMb2FkPzogYm9vbGVhbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgaWYgKGlzSW5CdWlsZCgpKSByZXR1cm4gW107XG5cbiAgICAgICAgaWYgKGluaXRpYWxMb2FkICYmIHRoaXMucmVzeW5jRnJvbURpc2spIHtcbiAgICAgICAgICAgIHJ1bkluZmluaXRlUG9sbChESVNLX0NIRUNLX0lOVEVSVkFMLCAoKSA9PiB0aGlzLmNoZWNrRGlzaygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IHRoaXMucmF3U3RvcmFnZS5nZXRLZXlzKCk7XG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uRmlsZXMgPSBrZXlzLmZpbHRlcihrZXkgPT4ga2V5LmVuZHNXaXRoKENIVU5LX0VYVCkpO1xuICAgICAgICAvLyBQb3B1bGF0ZSBkaXNrRmlsZXMgd2l0aCBhY3R1YWwgdGltZXN0YW1wcyBmcm9tIGRpc2tcbiAgICAgICAgdGhpcy5kaXNrRmlsZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAobGV0IGZpbGUgb2YgdHJhbnNhY3Rpb25GaWxlcykge1xuICAgICAgICAgICAgbGV0IGluZm8gPSBhd2FpdCB0aGlzLnJhd1N0b3JhZ2UuZ2V0SW5mbyhmaWxlKTtcbiAgICAgICAgICAgIHRoaXMuZGlza0ZpbGVzLnNldChmaWxlLCBpbmZvPy5sYXN0TW9kaWZpZWQgPz8gRGF0ZS5ub3coKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2l6ZSA9IHsgdmFsdWU6IDAgfTtcbiAgICAgICAgbGV0IGVudHJ5TGlzdDogVHJhbnNhY3Rpb25FbnRyeVtdW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZmlsZSBvZiB0cmFuc2FjdGlvbkZpbGVzKSB7XG4gICAgICAgICAgICBlbnRyeUxpc3QucHVzaChhd2FpdCB0aGlzLnBhcnNlVHJhbnNhY3Rpb25GaWxlKGZpbGUsIHNpemUpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZW50cmllcyA9IGVudHJ5TGlzdC5mbGF0KCk7XG4gICAgICAgIHRoaXMuYXBwbHlUcmFuc2FjdGlvbkVudHJpZXMoZW50cmllcywgaW5pdGlhbExvYWQpO1xuXG4gICAgICAgIHRpbWUgPSBEYXRlLm5vdygpIC0gdGltZTtcbiAgICAgICAgaWYgKHRpbWUgPiA1MCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYExvYWRlZCAke3RoaXMuZGVidWdOYW1lfSBpbiAke2Zvcm1hdFRpbWUodGltZSl9LCAke2Zvcm1hdE51bWJlcih0aGlzLmNhY2hlLnNpemUpfSBrZXlzLCBmcm9tICR7Zm9ybWF0TnVtYmVyKHRyYW5zYWN0aW9uRmlsZXMubGVuZ3RoKX0gZmlsZXMsIGVudHJpZXMgJHtmb3JtYXROdW1iZXIoZW50cmllcy5sZW5ndGgpfSwgdG90YWwgc2l6ZSAke2Zvcm1hdE51bWJlcihzaXplLnZhbHVlKX1CYCwgdHJhbnNhY3Rpb25GaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluaXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0cmFuc2FjdGlvbkZpbGVzO1xuICAgIH1cblxuICAgIC8vIE9OTFkgY2FsbCB0aGlzIGluc2lkZSBvZiBsb2FkQWxsVHJhbnNhY3Rpb25zXG4gICAgcHJpdmF0ZSBhc3luYyBwYXJzZVRyYW5zYWN0aW9uRmlsZShmaWxlbmFtZTogc3RyaW5nLCBzaXplOiB7IHZhbHVlOiBudW1iZXIgfSk6IFByb21pc2U8VHJhbnNhY3Rpb25FbnRyeVtdPiB7XG4gICAgICAgIGNvbnN0IGZ1bGxGaWxlID0gYXdhaXQgdGhpcy5yYXdTdG9yYWdlLmdldChmaWxlbmFtZSk7XG4gICAgICAgIGlmICghZnVsbEZpbGUpIHJldHVybiBbXTtcbiAgICAgICAgaWYgKGZ1bGxGaWxlLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoYFRyYW5zYWN0aW9uIGluICR7dGhpcy5kZWJ1Z05hbWV9IGZpbGUgJHtmaWxlbmFtZX0gaXMgdG9vIHNtYWxsLCBza2lwcGluZ2ApO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHNpemUudmFsdWUgKz0gZnVsbEZpbGUubGVuZ3RoO1xuICAgICAgICBsZXQgaGVhZGVyU2l6ZSA9IGZ1bGxGaWxlLnJlYWRVSW50MzJMRSgwKTtcbiAgICAgICAgbGV0IGhlYWRlckJ1ZmZlciA9IGZ1bGxGaWxlLnNsaWNlKDQsIDQgKyBoZWFkZXJTaXplKTtcbiAgICAgICAgbGV0IGhlYWRlcjogVHJhbnNhY3Rpb25IZWFkZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBoZWFkZXIgPSBKU09OLnBhcnNlKGhlYWRlckJ1ZmZlci50b1N0cmluZygpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHBhcnNlIGhlYWRlciBvZiB0cmFuc2FjdGlvbiBmaWxlIGluICR7dGhpcy5kZWJ1Z05hbWV9LCAke2ZpbGVuYW1lfWApO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb250ZW50ID0gZnVsbEZpbGUuc2xpY2UoNCArIGhlYWRlclNpemUpO1xuICAgICAgICBpZiAoaGVhZGVyLnppcHBlZCkge1xuICAgICAgICAgICAgY29udGVudCA9IGF3YWl0IFppcC5ndW56aXAoY29udGVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgbGV0IGVudHJpZXM6IFRyYW5zYWN0aW9uRW50cnlbXSA9IFtdO1xuICAgICAgICB3aGlsZSAob2Zmc2V0IDwgY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICghY29udGVudC5zbGljZShvZmZzZXQsIG9mZnNldCArIFNUQVJUX0JZVEVTLmxlbmd0aCkuZXF1YWxzKFNUQVJUX0JZVEVTKSkge1xuICAgICAgICAgICAgICAgIGxldCBzID0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHdoaWxlIChvZmZzZXQgPCBjb250ZW50Lmxlbmd0aCAmJiAhY29udGVudC5zbGljZShvZmZzZXQsIG9mZnNldCArIFNUQVJUX0JZVEVTLmxlbmd0aCkuZXF1YWxzKFNUQVJUX0JZVEVTKSkge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGxlbiA9IG9mZnNldCAtIHM7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBGb3VuZCBiYWQgYnl0ZXMgaW4gJHtmaWxlbmFtZX0sIHNraXBwaW5nICR7bGVufSBieXRlcyBhdCBvZmZzZXQgJHtzfS4gVG90YWwgZmlsZSBieXRlcyAke2NvbnRlbnQubGVuZ3RofSwgcmVhZCAke2VudHJpZXMubGVuZ3RofSBlbnRyaWVzYCk7XG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBjb250ZW50Lmxlbmd0aCkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZW50cnlPYmo6IHsgZW50cnk6IFRyYW5zYWN0aW9uRW50cnksIG9mZnNldDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGVudHJ5T2JqID0gdGhpcy5yZWFkVHJhbnNhY3Rpb25FbnRyeShjb250ZW50LCBvZmZzZXQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICAgICAgaWYgKGUubWVzc2FnZS5pbmNsdWRlcyhcIlJlYWQgcGFzdCBlbmQgb2YgYnVmZmVyXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAxO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZW50cnlPYmopIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byByZWFkIHRyYW5zYWN0aW9uIGVudHJ5IGluIGluICR7dGhpcy5kZWJ1Z05hbWV9LCBmaWxlICR7ZmlsZW5hbWV9IGF0IG9mZnNldCAke29mZnNldH0sIHNraXBwaW5nIGJhZCBieXRlcywgcmVhZGluZyByZW1haW5kZXIgb2YgZmlsZWApO1xuICAgICAgICAgICAgICAgIG9mZnNldCsrO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmVudHJ5Q291bnQrKztcbiAgICAgICAgICAgIGxldCB7IGVudHJ5IH0gPSBlbnRyeU9iajtcbiAgICAgICAgICAgIG9mZnNldCA9IGVudHJ5T2JqLm9mZnNldDtcbiAgICAgICAgICAgIGVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgfVxuICAgIHByaXZhdGUgYXBwbHlUcmFuc2FjdGlvbkVudHJpZXMoZW50cmllczogVHJhbnNhY3Rpb25FbnRyeVtdLCBpbml0aWFsTG9hZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgbGV0IHBlbmRpbmdXcml0ZVRpbWVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLnBlbmRpbmdBcHBlbmRzKSB7XG4gICAgICAgICAgICBsZXQgcHJldlRpbWUgPSBwZW5kaW5nV3JpdGVUaW1lcy5nZXQoZW50cnkua2V5KTtcbiAgICAgICAgICAgIGlmIChwcmV2VGltZSAmJiBwcmV2VGltZSA+IGVudHJ5LnRpbWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBlbmRpbmdXcml0ZVRpbWVzLnNldChlbnRyeS5rZXksIGVudHJ5LnRpbWUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsYXRlc3QgPSBuZXcgTWFwPHN0cmluZywgVHJhbnNhY3Rpb25FbnRyeT4oKTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICBsZXQgcGVuZGluZ1RpbWUgPSBwZW5kaW5nV3JpdGVUaW1lcy5nZXQoZW50cnkua2V5KTtcbiAgICAgICAgICAgIGlmIChwZW5kaW5nVGltZSAmJiBwZW5kaW5nVGltZSA+IGVudHJ5LnRpbWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwcmV2ID0gbGF0ZXN0LmdldChlbnRyeS5rZXkpO1xuICAgICAgICAgICAgaWYgKHByZXYgJiYgcHJldi50aW1lID4gZW50cnkudGltZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGF0ZXN0LnNldChlbnRyeS5rZXksIGVudHJ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhbnlDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGVudHJ5IG9mIGxhdGVzdC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FjaGUuaGFzKGVudHJ5LmtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGFueUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGVudHJ5LmtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghYW55Q2hhbmdlZCAmJiAhaW5pdGlhbExvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gdGhpcy5jYWNoZS5nZXQoZW50cnkua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhcHJldi52YWx1ZSAhPT0gISFlbnRyeS52YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldi52YWx1ZSAmJiBlbnRyeS52YWx1ZSAmJiAhcHJldi52YWx1ZS5lcXVhbHMoZW50cnkudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGFueUNoYW5nZWQgPSBoYXNDaGFuZ2VkKCkgfHwgYW55Q2hhbmdlZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlLnNldChlbnRyeS5rZXksIGVudHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhbnlDaGFuZ2VkICYmICFpbml0aWFsTG9hZCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBUcmFuc2FjdGlvbiBzdG9yYWdlICR7dGhpcy5kZWJ1Z05hbWV9IGNoYW5nZWQgb24gZGlzaywgdHJpZ2dlcmluZyBmdWxsIGRvd25sb2FkIGZyb20gZGlza2ApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLnJlc3luY0NhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkVHJhbnNhY3Rpb25FbnRyeShidWZmZXI6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIpOiB7XG4gICAgICAgIGVudHJ5OiBUcmFuc2FjdGlvbkVudHJ5O1xuICAgICAgICBvZmZzZXQ6IG51bWJlcjtcbiAgICB9IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgZnVuY3Rpb24gcmVhZFNsaWNlKGNvdW50OiBudW1iZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNsaWNlID0gYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgY291bnQpO1xuICAgICAgICAgICAgaWYgKHNsaWNlLmxlbmd0aCA8IGNvdW50KSB0aHJvdyBuZXcgRXJyb3IoYFJlYWQgcGFzdCBlbmQgb2YgYnVmZmVyIGF0IG9mZnNldCAke29mZnNldH0vJHtidWZmZXIubGVuZ3RofWApO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGNvdW50O1xuICAgICAgICAgICAgcmV0dXJuIHNsaWNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVhZFNsaWNlKFNUQVJUX0JZVEVTLmxlbmd0aCkuZXF1YWxzKFNUQVJUX0JZVEVTKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCBrZXlMZW5ndGggPSByZWFkU2xpY2UoNCkucmVhZFVJbnQzMkxFKDApO1xuICAgICAgICBjb25zdCB2YWx1ZUxlbmd0aCA9IHJlYWRTbGljZSg0KS5yZWFkVUludDMyTEUoMCk7XG4gICAgICAgIGNvbnN0IHRpbWUgPSByZWFkU2xpY2UoOCkucmVhZERvdWJsZUxFKDApO1xuICAgICAgICBjb25zdCBmbGFncyA9IHJlYWRTbGljZSgxKS5yZWFkVUludDgoMCk7XG5cbiAgICAgICAgY29uc3Qga2V5ID0gcmVhZFNsaWNlKGtleUxlbmd0aCkudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHZhbHVlID0gcmVhZFNsaWNlKHZhbHVlTGVuZ3RoKTtcblxuICAgICAgICBpZiAoIXJlYWRTbGljZShFTkRfQllURVMubGVuZ3RoKS5lcXVhbHMoRU5EX0JZVEVTKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBsZXQgaXNaaXBwZWQgPSAoZmxhZ3MgJiAxKSA9PT0gMTtcbiAgICAgICAgbGV0IGlzRGVsZXRlID0gKGZsYWdzICYgMikgPT09IDI7XG5cbiAgICAgICAgaWYgKGlzWmlwcGVkKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFppcC5ndW56aXBTeW5jKHZhbHVlKTtcbiAgICAgICAgICAgIGlzWmlwcGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZW50cnk6IFRyYW5zYWN0aW9uRW50cnkgPSB7IGtleSwgdmFsdWUsIGlzWmlwcGVkLCB0aW1lIH07XG4gICAgICAgIGlmIChpc0RlbGV0ZSkge1xuICAgICAgICAgICAgZW50cnkudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZW50cnksIG9mZnNldCB9O1xuICAgIH1cblxuICAgIC8vIFRPRE86IE1ha2UgdGhpcyBkaXJlY3RseSBnbyBmcm9tIFRyYW5zYWN0aW9uRW50cnlbXSB0byBCdWZmZXIsIGJ5IHByZS1hbGxvY2F0aW5nLCBzbyBpdCBpcyBtb3JlIGVmZmljaWVudFxuICAgIHByaXZhdGUgc2VyaWFsaXplVHJhbnNhY3Rpb25FbnRyeShlbnRyeTogVHJhbnNhY3Rpb25FbnRyeSk6IEJ1ZmZlciB7XG4gICAgICAgIGxldCBrZXlCdWZmZXIgPSBCdWZmZXIuZnJvbShlbnRyeS5rZXkpO1xuICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoXG4gICAgICAgICAgICBTVEFSVF9CWVRFUy5sZW5ndGggKyA0ICsgNCArIDggKyAxICsga2V5QnVmZmVyLmxlbmd0aCArIChlbnRyeS52YWx1ZT8ubGVuZ3RoIHx8IDApICsgRU5EX0JZVEVTLmxlbmd0aFxuICAgICAgICApO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcblxuICAgICAgICBTVEFSVF9CWVRFUy5jb3B5KGJ1ZmZlciwgb2Zmc2V0KTtcbiAgICAgICAgb2Zmc2V0ICs9IFNUQVJUX0JZVEVTLmxlbmd0aDtcblxuICAgICAgICBidWZmZXIud3JpdGVVSW50MzJMRShrZXlCdWZmZXIubGVuZ3RoLCBvZmZzZXQpO1xuICAgICAgICBvZmZzZXQgKz0gNDtcblxuICAgICAgICBidWZmZXIud3JpdGVVSW50MzJMRShlbnRyeS52YWx1ZSA/IGVudHJ5LnZhbHVlLmxlbmd0aCA6IDAsIG9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSA0O1xuXG4gICAgICAgIGJ1ZmZlci53cml0ZURvdWJsZUxFKGVudHJ5LnRpbWUsIG9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSA4O1xuXG4gICAgICAgIGxldCBmbGFncyA9IDA7XG4gICAgICAgIGlmIChlbnRyeS5pc1ppcHBlZCkgZmxhZ3MgfD0gMTtcbiAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09PSB1bmRlZmluZWQpIGZsYWdzIHw9IDI7XG4gICAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KGZsYWdzLCBvZmZzZXQpO1xuICAgICAgICBvZmZzZXQgKz0gMTtcblxuICAgICAgICBrZXlCdWZmZXIuY29weShidWZmZXIsIG9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSBrZXlCdWZmZXIubGVuZ3RoO1xuXG4gICAgICAgIGlmIChlbnRyeS52YWx1ZSkge1xuICAgICAgICAgICAgZW50cnkudmFsdWUuY29weShidWZmZXIsIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gZW50cnkudmFsdWUubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgRU5EX0JZVEVTLmNvcHkoYnVmZmVyLCBvZmZzZXQpO1xuICAgICAgICBvZmZzZXQgKz0gRU5EX0JZVEVTLmxlbmd0aDtcblxuICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SGVhZGVyKHppcDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBoZWFkZXI6IFRyYW5zYWN0aW9uSGVhZGVyID0geyB6aXBwZWQ6IHppcCB9O1xuICAgICAgICBsZXQgaGVhZGVyQnVmZmVyID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoaGVhZGVyKSk7XG4gICAgICAgIGxldCBoZWFkZXJTaXplID0gQnVmZmVyLmFsbG9jKDQpO1xuICAgICAgICBoZWFkZXJTaXplLndyaXRlVUludDMyTEUoaGVhZGVyQnVmZmVyLmxlbmd0aCwgMCk7XG4gICAgICAgIHJldHVybiB7IGhlYWRlciwgaGVhZGVyQnVmZmVyOiBCdWZmZXIuY29uY2F0KFtoZWFkZXJTaXplLCBoZWFkZXJCdWZmZXJdKSB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY2h1bmtCdWZmZXJzKGJ1ZmZlcnM6IEJ1ZmZlcltdKSB7XG4gICAgICAgIGxldCBuZXdDaHVua3M6IHtcbiAgICAgICAgICAgIGJ1ZmZlcnM6IEJ1ZmZlcltdO1xuICAgICAgICAgICAgc2l6ZTogbnVtYmVyO1xuICAgICAgICB9W10gPSBbXTtcbiAgICAgICAgbmV3Q2h1bmtzLnB1c2goeyBidWZmZXJzOiBbXSwgc2l6ZTogMCB9KTtcbiAgICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuICAgICAgICAgICAgaWYgKG5ld0NodW5rc1tuZXdDaHVua3MubGVuZ3RoIC0gMV0uc2l6ZSArIGJ1ZmZlci5sZW5ndGggPj0gRklMRV9DSFVOS19TSVpFKSB7XG4gICAgICAgICAgICAgICAgbmV3Q2h1bmtzLnB1c2goeyBidWZmZXJzOiBbXSwgc2l6ZTogMCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0NodW5rc1tuZXdDaHVua3MubGVuZ3RoIC0gMV0uYnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgICBuZXdDaHVua3NbbmV3Q2h1bmtzLmxlbmd0aCAtIDFdLnNpemUgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3Q2h1bmtzLm1hcCh4ID0+ICh7IGJ1ZmZlcjogQnVmZmVyLmNvbmNhdCh4LmJ1ZmZlcnMpLCBzaXplOiB4LnNpemUgfSkpO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBjb21wcmVzc2luZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgYXN5bmMgY29tcHJlc3NUcmFuc2FjdGlvbkxvZyhmb3JjZT86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuY29tcHJlc3NpbmcpIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuY29tcHJlc3NpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICBsZXQgZXhpc3RpbmdEaXNrRW50cmllcyA9IGF3YWl0IHRoaXMucmF3U3RvcmFnZS5nZXRLZXlzKCk7XG4gICAgICAgICAgICBleGlzdGluZ0Rpc2tFbnRyaWVzID0gZXhpc3RpbmdEaXNrRW50cmllcy5maWx0ZXIoeCA9PiB4LmVuZHNXaXRoKENIVU5LX0VYVCkpO1xuICAgICAgICAgICAgbGV0IGNvbXByZXNzTm93ID0gZm9yY2UgfHwgKFxuICAgICAgICAgICAgICAgIHRoaXMuZW50cnlDb3VudCA+IDEwMCAmJiB0aGlzLmVudHJ5Q291bnQgPiB0aGlzLmNhY2hlLnNpemUgKiAzXG4gICAgICAgICAgICAgICAgLy8gTk9URTogVGhpcyBjb21wcmVzcyBjaGVjayBicmVha3MgZG93biBpZiB3ZSBvbmx5IGhhdmUgdmVyeSBsYXJnZSB2YWx1ZXMsIGJ1dC4uLiB0aG9zZSBkb24ndCB3b3JrIEFOWVdBWVMgKGl0IGlzIGJldHRlciB0byB1c2Ugb25lIGZpbGUgcGVyIHZhbHVlIGluc3RlYWQpLlxuICAgICAgICAgICAgICAgIC8vICAtIE1heWJlIHdlIHNob3VsZCB0aHJvdywgb3IgYXQgbGVhc3Qgd2Fybiwgb24gc2V0cyBvZiB2YWx1ZSA+IDFNQixcbiAgICAgICAgICAgICAgICAvLyAgICAgIGF0IHdoaWNoIHBvaW50IHRoZXkgc2hvdWxkIGp1c3QgdXNlIGEgZmlsZSBwZXIgdmFsdWVcbiAgICAgICAgICAgICAgICB8fCBleGlzdGluZ0Rpc2tFbnRyaWVzLmxlbmd0aCA+IE1hdGgubWF4KDEwLCBNYXRoLmNlaWwodGhpcy5lbnRyeUNvdW50IC8gMTAwMCkpXG4gICAgICAgICAgICAgICAgfHwgZXhpc3RpbmdEaXNrRW50cmllcy5sZW5ndGggPiAxMDAwICogMTBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIWNvbXByZXNzTm93KSByZXR1cm47XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgQ29tcHJlc3NpbmcgJHt0aGlzLmRlYnVnTmFtZX0gdHJhbnNhY3Rpb24gbG9nLCAke3RoaXMuZW50cnlDb3VudH0gZW50cmllcywgJHt0aGlzLmNhY2hlLnNpemV9IGtleXNgKTtcblxuICAgICAgICAgICAgLy8gTG9hZCBvZmYgZGlzaywgaW4gY2FzZSB0aGVyZSBhcmUgb3RoZXIgd3JpdGVzLiBXZSBzdGlsbCByYWNlIHdpdGggdGhlbSwgYnV0IGF0IGxlYXN0IHRoaXMgcmVkdWNlcyB0aGUgcmFjZSBjb25kaXRpb24gY29uc2lkZXJhYmx5XG4gICAgICAgICAgICBleGlzdGluZ0Rpc2tFbnRyaWVzID0gYXdhaXQgdGhpcy5sb2FkQWxsVHJhbnNhY3Rpb25zKCk7XG5cbiAgICAgICAgICAgIHRoaXMuZW50cnlDb3VudCA9IHRoaXMuY2FjaGUuc2l6ZTtcblxuXG4gICAgICAgICAgICBsZXQgYnVmZmVyczogQnVmZmVyW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5jYWNoZS52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgIGxldCBidWZmZXIgPSB0aGlzLnNlcmlhbGl6ZVRyYW5zYWN0aW9uRW50cnkoZW50cnkpO1xuICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgbmV3Q2h1bmtzID0gdGhpcy5jaHVua0J1ZmZlcnMoYnVmZmVycyk7XG5cbiAgICAgICAgICAgIGxldCBuZXdGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGNodW5rIG9mIG5ld0NodW5rcykge1xuICAgICAgICAgICAgICAgIC8vIERvbid0IHVzZSB0aGUgcHJldmlvdXMgY3VycmVudCBjaHVuayBmb3IgdGhlIG5ldyBmaWxlLiBBbHNvIGNsZWFyIGl0IGFmdGVyd2FyZHMgc28gaXQncyBub3QgcmV1c2VkIGZvciBhbnkgZnV0dXJlIHJpZ2h0cy4gXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2h1bmsgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbGV0IGZpbGUgPSB0aGlzLmdldEN1cnJlbnRDaHVuaygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENodW5rID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIG5ld0ZpbGVzLnB1c2goZmlsZSk7XG4gICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBjaHVuay5idWZmZXI7XG4gICAgICAgICAgICAgICAgbGV0IHsgaGVhZGVyLCBoZWFkZXJCdWZmZXIgfSA9IHRoaXMuZ2V0SGVhZGVyKFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50Lmxlbmd0aCA+PSBGSUxFX1pJUF9USFJFU0hPTERcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChoZWFkZXIuemlwcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBhd2FpdCBaaXAuZ3ppcChjb250ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW2hlYWRlckJ1ZmZlciwgY29udGVudF0pO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmF3U3RvcmFnZS5zZXQoZmlsZSwgYnVmZmVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURpc2tGaWxlVGltZXN0YW1wKGZpbGUpO1xuICAgICAgICAgICAgICAgIGxldCB2ZXJpZmllZCA9IGF3YWl0IHRoaXMucmF3U3RvcmFnZS5nZXQoZmlsZSk7XG4gICAgICAgICAgICAgICAgaWYgKCF2ZXJpZmllZD8uZXF1YWxzKGJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHZlcmlmeSB0cmFuc2FjdGlvbiBmaWxlICR7ZmlsZX0gaW4gJHt0aGlzLmRlYnVnTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gdmVyaWZ5IHRyYW5zYWN0aW9uIGZpbGUgJHtmaWxlfSBpbiAke3RoaXMuZGVidWdOYW1lfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgT05MWSB0aW1lIHdlIGNhbiBkZWxldGUgb2xkIGZpbGVzLCBhcyB3ZSBrbm93IGZvciBzdXJlIHRoZSBuZXcgZmlsZSBoYXMgYWxsIG9mIG91ciBkYXRhLiBBbnkgZnV0dXJlIHJlYWRlcnMgd29uJ3Qga25vdyB0aGlzLCB1bmxlc3MgdGhleSB3cml0ZSBpdCB0aGVtc2VsdmVzIChvciB1bmxlc3MgdGhleSBhdWRpdCBpdCBhZ2FpbnN0IHRoZSBvdGhlciBnZW5lcmF0aW9ucywgd2hpY2ggaXMgYW5ub3lpbmcpLlxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGV4aXN0aW5nRGlza0VudHJpZXMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJhd1N0b3JhZ2UucmVtb3ZlKGZpbGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlza0ZpbGVzLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuY29tcHJlc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZXNldCgpIHtcbiAgICAgICAgYXdhaXQgZmlsZUxvY2tTZWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGxldCBleGlzdGluZ0Rpc2tFbnRyaWVzID0gYXdhaXQgdGhpcy5yYXdTdG9yYWdlLmdldEtleXMoKTtcbiAgICAgICAgICAgIGV4aXN0aW5nRGlza0VudHJpZXMgPSBleGlzdGluZ0Rpc2tFbnRyaWVzLmZpbHRlcih4ID0+IHguZW5kc1dpdGgoQ0hVTktfRVhUKSk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGV4aXN0aW5nRGlza0VudHJpZXMubWFwKHggPT4gdGhpcy5yYXdTdG9yYWdlLnJlbW92ZSh4KSkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7IH1cblxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQXBwZW5kcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5kaXNrRmlsZXMuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENodW5rID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5lbnRyeUNvdW50ID0gMDtcbiAgICAgICAgfSk7XG4gICAgfVxufSJdfQ==
547
- /* _JS_SOURCE_HASH = "4243396e51240c3f63dfe0fd7207c3a864fb73cf06f7acadabf9c6175dbda2ba"; */
547
+ /* _JS_SOURCE_HASH = "d3e36cc62c47500f4ba9918b90652351548b609e3829d8077a2c42e47bd0a214"; */