sliftutils 1.7.71 → 1.7.72

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 (91) hide show
  1. package/dist/treeSummary.ts.cache +2 -2
  2. package/index.d.ts +505 -257
  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/hostServer.ts.cache +5 -2
  9. package/misc/https/dist/persistentLocalStorage.ts.cache +2 -2
  10. package/package.json +1 -1
  11. package/render-utils/dist/observer.tsx.cache +2 -2
  12. package/spec.txt +10 -0
  13. package/storage/ArchivesDisk.d.ts +4 -13
  14. package/storage/ArchivesDisk.ts +6 -4
  15. package/storage/BulkDatabase2/dist/BulkDatabaseBase.ts.cache +2 -2
  16. package/storage/BulkDatabase2/dist/BulkDatabaseFormat.ts.cache +2 -2
  17. package/storage/BulkDatabase2/dist/BulkDatabaseMerge.ts.cache +2 -2
  18. package/storage/BulkDatabase2/dist/BulkDatabaseReader.ts.cache +2 -2
  19. package/storage/BulkDatabase2/dist/LoadedIndex.ts.cache +2 -2
  20. package/storage/BulkDatabase2/dist/WriteOverlay.ts.cache +2 -2
  21. package/storage/BulkDatabase2/dist/blockCache.ts.cache +2 -2
  22. package/storage/BulkDatabase2/dist/mergeLock.ts.cache +2 -2
  23. package/storage/BulkDatabase2/dist/mergeMarkers.ts.cache +2 -2
  24. package/storage/BulkDatabase2/dist/streamLog.ts.cache +2 -2
  25. package/storage/BulkDatabase2/dist/syncClient.ts.cache +2 -2
  26. package/storage/IArchives.d.ts +14 -10
  27. package/storage/IArchives.ts +16 -4
  28. package/storage/backblaze.d.ts +3 -9
  29. package/storage/backblaze.ts +22 -19
  30. package/storage/dist/ArchivesDisk.ts.cache +6 -3
  31. package/storage/dist/FileFolderAPI.tsx.cache +2 -2
  32. package/storage/dist/IArchives.ts.cache +18 -4
  33. package/storage/dist/IndexedDBFileFolderAPI.ts.cache +2 -2
  34. package/storage/dist/JSONStorage.ts.cache +2 -2
  35. package/storage/dist/PendingManager.tsx.cache +2 -2
  36. package/storage/dist/TransactionStorage.ts.cache +2 -2
  37. package/storage/dist/backblaze.ts.cache +36 -27
  38. package/storage/dist/fileSystemPointer.ts.cache +2 -2
  39. package/storage/dist/remoteFileStorage.ts.cache +2 -2
  40. package/storage/remoteStorage/ArchivesRemote.d.ts +5 -9
  41. package/storage/remoteStorage/ArchivesRemote.ts +25 -20
  42. package/storage/remoteStorage/ArchivesUrl.d.ts +3 -9
  43. package/storage/remoteStorage/ArchivesUrl.ts +7 -5
  44. package/storage/remoteStorage/accessPage.tsx +4 -4
  45. package/storage/remoteStorage/accessStats.d.ts +2 -0
  46. package/storage/remoteStorage/accessStats.ts +32 -0
  47. package/storage/remoteStorage/blobStore.d.ts +193 -88
  48. package/storage/remoteStorage/blobStore.ts +535 -400
  49. package/storage/remoteStorage/bucketDisk.d.ts +18 -0
  50. package/storage/remoteStorage/bucketDisk.ts +66 -0
  51. package/storage/remoteStorage/createArchives.d.ts +4 -10
  52. package/storage/remoteStorage/createArchives.ts +101 -62
  53. package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +29 -20
  54. package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +8 -5
  55. package/storage/remoteStorage/dist/accessPage.tsx.cache +6 -6
  56. package/storage/remoteStorage/dist/accessStats.ts.cache +39 -4
  57. package/storage/remoteStorage/dist/blobStore.ts.cache +517 -375
  58. package/storage/remoteStorage/dist/bucketDisk.ts.cache +72 -0
  59. package/storage/remoteStorage/dist/cliArgs.ts.cache +2 -2
  60. package/storage/remoteStorage/dist/createArchives.ts.cache +112 -58
  61. package/storage/remoteStorage/dist/deployTakeover.ts.cache +2 -2
  62. package/storage/remoteStorage/dist/intermediateSources.ts.cache +13 -13
  63. package/storage/remoteStorage/dist/remoteConfig.ts.cache +19 -3
  64. package/storage/remoteStorage/dist/serverConfig.ts.cache +116 -0
  65. package/storage/remoteStorage/dist/sourceWrapper.ts.cache +7 -6
  66. package/storage/remoteStorage/dist/sourcesList.ts.cache +6 -3
  67. package/storage/remoteStorage/dist/storageClientController.ts.cache +2 -2
  68. package/storage/remoteStorage/dist/storageController.ts.cache +224 -191
  69. package/storage/remoteStorage/dist/storageServer.ts.cache +9 -9
  70. package/storage/remoteStorage/dist/storageServerState.ts.cache +330 -567
  71. package/storage/remoteStorage/dist/storePlan.ts.cache +149 -0
  72. package/storage/remoteStorage/dist/validation.ts.cache +40 -0
  73. package/storage/remoteStorage/grantAccessCli.ts +1 -1
  74. package/storage/remoteStorage/intermediateSources.d.ts +3 -5
  75. package/storage/remoteStorage/intermediateSources.ts +14 -16
  76. package/storage/remoteStorage/remoteConfig.d.ts +2 -2
  77. package/storage/remoteStorage/remoteConfig.ts +19 -3
  78. package/storage/remoteStorage/serverConfig.d.ts +27 -0
  79. package/storage/remoteStorage/serverConfig.ts +109 -0
  80. package/storage/remoteStorage/sourceWrapper.d.ts +3 -3
  81. package/storage/remoteStorage/sourceWrapper.ts +7 -6
  82. package/storage/remoteStorage/sourcesList.ts +3 -0
  83. package/storage/remoteStorage/storageController.d.ts +118 -36
  84. package/storage/remoteStorage/storageController.ts +166 -168
  85. package/storage/remoteStorage/storageServer.ts +1 -1
  86. package/storage/remoteStorage/storageServerState.d.ts +52 -63
  87. package/storage/remoteStorage/storageServerState.ts +340 -584
  88. package/storage/remoteStorage/storePlan.d.ts +34 -0
  89. package/storage/remoteStorage/storePlan.ts +166 -0
  90. package/storage/remoteStorage/validation.d.ts +4 -0
  91. package/storage/remoteStorage/validation.ts +31 -0
@@ -13,7 +13,7 @@ const networking_1 = require("socket-function/src/networking");
13
13
  const RequireController_1 = require("socket-function/require/RequireController");
14
14
  const hostServer_1 = require("../../misc/https/hostServer");
15
15
  const storageController_1 = require("./storageController");
16
- const storageServerState_1 = require("./storageServerState");
16
+ const serverConfig_1 = require("./serverConfig");
17
17
  const deployTakeover_1 = require("./deployTakeover");
18
18
  const ArchivesRemote_1 = require("./ArchivesRemote");
19
19
  // Import browser code, so it is allowed to be required by the client
@@ -31,7 +31,7 @@ async function checkDiskSpace(config) {
31
31
  let free = Number(stats.bavail) * Number(stats.bsize);
32
32
  let hardLimit = threshold * HARD_REJECT_FRACTION;
33
33
  if (free >= threshold) {
34
- (0, storageServerState_1.setWritesRejectedReason)(undefined);
34
+ (0, serverConfig_1.setWritesRejectedReason)(undefined);
35
35
  return;
36
36
  }
37
37
  let under = threshold - free;
@@ -40,12 +40,12 @@ async function checkDiskSpace(config) {
40
40
  + ` (warn threshold ${formatBytes(threshold)}, ${formatBytes(under)} under;`
41
41
  + ` hard-reject threshold ${formatBytes(hardLimit)}${rejecting ? ", REACHED — write ops now rejected" : ""}).`);
42
42
  if (rejecting) {
43
- (0, storageServerState_1.setWritesRejectedReason)(`Storage server is out of disk space: only ${formatBytes(free)} free on ${folder}`
43
+ (0, serverConfig_1.setWritesRejectedReason)(`Storage server is out of disk space: only ${formatBytes(free)} free on ${folder}`
44
44
  + ` (hard-reject threshold ${formatBytes(hardLimit)}, warn threshold ${formatBytes(threshold)}).`
45
45
  + ` Write operations (create/append/new bucket) are rejected; reads, findInfo, and deletes still work — please free space.`);
46
46
  }
47
47
  else {
48
- (0, storageServerState_1.setWritesRejectedReason)(undefined);
48
+ (0, serverConfig_1.setWritesRejectedReason)(undefined);
49
49
  }
50
50
  }
51
51
  // Full path to the grantAccess CLI bootstrap that lives next to this file. The SSH command shown on the access page invokes it via `node <path> ...` (found through __dirname so consumers don't have to know where our source lives).
@@ -65,7 +65,7 @@ async function hostStorageServer(config) {
65
65
  }
66
66
  await promises_1.default.mkdir(folder, { recursive: true });
67
67
  let lowSpaceThreshold = (_a = config.lowSpaceThresholdBytes) !== null && _a !== void 0 ? _a : DEFAULT_LOW_SPACE_THRESHOLD_BYTES;
68
- (0, storageServerState_1.setStorageServerConfig)({
68
+ (0, serverConfig_1.setStorageServerConfig)({
69
69
  domain,
70
70
  port,
71
71
  rootDomain,
@@ -102,12 +102,12 @@ async function hostStorageServer(config) {
102
102
  var _a, _b;
103
103
  if (isMainPort)
104
104
  return;
105
- (0, storageServerState_1.addExtraListenPort)(listeningPort);
105
+ (0, serverConfig_1.addExtraListenPort)(listeningPort);
106
106
  (0, deployTakeover_1.setAltPort)(listeningPort);
107
107
  let listenEnd = (0, deployTakeover_1.getAltPortListenEnd)();
108
108
  let timer = setTimeout(() => {
109
109
  console.log(`Alternate port ${listeningPort} reached its end of life at ${new Date(listenEnd).toISOString()}; it no longer counts as one of our addresses (the socket itself stays bound, as the main-port relay forwards into it)`);
110
- (0, storageServerState_1.removeExtraListenPort)(listeningPort);
110
+ (0, serverConfig_1.removeExtraListenPort)(listeningPort);
111
111
  }, Math.max(0, listenEnd - Date.now()));
112
112
  (_b = (_a = timer).unref) === null || _b === void 0 ? void 0 : _b.call(_a);
113
113
  },
@@ -115,5 +115,5 @@ async function hostStorageServer(config) {
115
115
  });
116
116
  }
117
117
  exports.hostStorageServer = hostStorageServer;
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZVNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0b3JhZ2VTZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDO0FBRXBDLDRDQUFvQjtBQUNwQixnREFBd0I7QUFDeEIsMkRBQThCO0FBQzlCLG1FQUFnRTtBQUNoRSwrREFBK0Q7QUFDL0QsaUZBQThFO0FBQzlFLDREQUF5RDtBQUN6RCwyREFBOEQ7QUFDOUQsNkRBQWtJO0FBQ2xJLHFEQUFrSDtBQUNsSCxxREFBbUQ7QUFDbkQscUVBQXFFO0FBQ3JFLHdCQUFzQjtBQUV0QixNQUFNLGlDQUFpQyxHQUFHLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3pELE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDcEQsd0xBQXdMO0FBQ3hMLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBYWpDLFNBQVMsV0FBVyxDQUFDLEtBQWE7SUFDOUIsT0FBTyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNuRCxDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUE2QztJQUN2RSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUNuQyxJQUFJLEtBQUssR0FBRyxNQUFNLGtCQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxJQUFJLFNBQVMsR0FBRyxTQUFTLEdBQUcsb0JBQW9CLENBQUM7SUFDakQsSUFBSSxJQUFJLElB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QixNQUFNLElBQUEscUNBQW9CLEdBQUUsQ0FBQztZQUNqQyxDQUFDO1lBQ0QsV0FBVyxFQUFFLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxFQUFFOztnQkFDdkMsSUFBSSxVQUFVO29CQUFFLE9BQU87Z0JBQ3ZCLElBQUEsdUNBQWtCLEVBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2xDLElBQUEsMkJBQVUsRUFBQyxhQUFhLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxTQUFTLEdBQUcsSUFBQSxvQ0FBbUIsR0FBRSxDQUFDO2dCQUN0QyxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixhQUFhLCtCQUErQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsd0hBQXdILENBQUMsQ0FBQztvQkFDck8sSUFBQSwwQ0FBcUIsRUFBQyxhQUFhLENBQUMsQ0FBQztnQkFDekMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxNQUFBLE1BQUMsS0FBZ0MsRUFBQyxLQUFLLGtEQUFJLENBQUM7WUFDaEQsQ0FBQztTQUNKO0tBQ0osQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQTdERCw4Q0E2REMiLCJzb3VyY2VzQ29udGVudCI6WyJwcm9jZXNzLmVudi5OT0RFX0VOViA9IFwicHJvZHVjdGlvblwiO1xuXG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IGZzcCBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IFNvY2tldEZ1bmN0aW9uIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9Tb2NrZXRGdW5jdGlvblwiO1xuaW1wb3J0IHsgZ2V0RXh0ZXJuYWxJUCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL25ldHdvcmtpbmdcIjtcbmltcG9ydCB7IFJlcXVpcmVDb250cm9sbGVyIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9yZXF1aXJlL1JlcXVpcmVDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBob3N0U2VydmVyIH0gZnJvbSBcIi4uLy4uL21pc2MvaHR0cHMvaG9zdFNlcnZlclwiO1xuaW1wb3J0IHsgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIgfSBmcm9tIFwiLi9zdG9yYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgc2V0U3RvcmFnZVNlcnZlckNvbmZpZywgc2V0V3JpdGVzUmVqZWN0ZWRSZWFzb24sIGFkZEV4dHJhTGlzdGVuUG9ydCwgcmVtb3ZlRXh0cmFMaXN0ZW5Qb3J0IH0gZnJvbSBcIi4vc3RvcmFnZVNlcnZlclN0YXRlXCI7XG5pbXBvcnQgeyBkZXRlY3REZXBsb3lUYWtlb3Zlciwgc2V0QWx0UG9ydCwgZ2V0QWx0UG9ydExpc3RlbkVuZCwgZ2V0TWFpblBvcnRBY3F1aXJlRGVsYXkgfSBmcm9tIFwiLi9kZXBsb3lUYWtlb3ZlclwiO1xuaW1wb3J0IHsgcGFyc2VTdG9yYWdlVXJsIH0gZnJvbSBcIi4vQXJjaGl2ZXNSZW1vdGVcIjtcbi8vIEltcG9ydCBicm93c2VyIGNvZGUsIHNvIGl0IGlzIGFsbG93ZWQgdG8gYmUgcmVxdWlyZWQgYnkgdGhlIGNsaWVudFxuaW1wb3J0IFwiLi9hY2Nlc3NQYWdlXCI7XG5cbmNvbnN0IERFRkFVTFRfTE9XX1NQQUNFX1RIUkVTSE9MRF9CWVRFUyA9IDI1ICogMTAyNCAqKiAzO1xuY29uc3QgRElTS19TUEFDRV9DSEVDS19JTlRFUlZBTF9NUyA9IDE1ICogNjAgKiAxMDAwO1xuLy8gQmVsb3cgdGhpcyBmcmFjdGlvbiBvZiB0aGUgd2FybiB0aHJlc2hvbGQsIHdlIHN0YXJ0IHJlamVjdGluZyB3cml0ZXMgc28gdGhlIHNlcnZlciBpdHNlbGYgZG9lc24ndCB0aXAgdGhlIG1hY2hpbmUgaW50byBpbnN0YWJpbGl0eS4gUmVhZHMvZGVsZXRlcyBzdGlsbCB3b3JrIHNvIHVzZXJzIGNhbiBmcmVlIHNwYWNlLlxuY29uc3QgSEFSRF9SRUpFQ1RfRlJBQ1RJT04gPSAwLjE7XG5cbi8vIFRoZSByZW1vdGUgc3RvcmFnZSBzZXJ2ZXIsIGFzIGEgbGlicmFyeSBmdW5jdGlvbjogY29uc3VtZXJzIGNhbGwgaG9zdFN0b3JhZ2VTZXJ2ZXIoKSBmcm9tIHRoZWlyIG93biBwcm9jZXNzIHRvIHN0YXJ0IGhvc3RpbmcgKG9yIHVzZSB0aGUgc3RvcmFnZXNlcnZlciBiaW4sIHNlZSBzdG9yYWdlU2VydmVyQ2xpLnRzKS4gVGhlIGdyYW50QWNjZXNzLmpzIGJvb3RzdHJhcCAobmV4dCB0byB0aGlzIGZpbGUpIGlzIHdoYXQgdGhlIGFjY2VzcyBwYWdlJ3Mgc2hvd24gU1NIIGNvbW1hbmQgcG9pbnRzIGF0LlxuXG5leHBvcnQgdHlwZSBIb3N0U3RvcmFnZVNlcnZlckNvbmZpZyA9IHtcbiAgICAvLyBGdWxsIFVSTCBvZiB0aGlzIHN0b3JhZ2Ugc2VydmVyLCBlLmcuIFwiaHR0cHM6Ly8xLTItMy00LmV4YW1wbGUuY29tOjQ0NDRcIi4gVGhlIHN1YmRvbWFpbiBtdXN0IGJlIGFuIGlwIGRvbWFpbiAtIHRoaXMgbWFjaGluZSdzIGV4dGVybmFsIElQIHdpdGggZGFzaGVzLCBvciAxMjctMC0wLTEgZm9yIGxvY2FsIHRlc3RpbmcgKHNlZSB0aGUgdmFsaWRhdGlvbiBpbiBob3N0U3RvcmFnZVNlcnZlcikuIFRoZSBkb21haW4gYW5kIHBvcnQgYXJlIGV4dHJhY3RlZCBmcm9tIGl0IChidWNrZXQgcm91dGluZyBVUkxzIGNsaWVudHMgdXNlIGxvb2sgbGlrZVxuICAgIC8vIGh0dHBzOi8vMS0yLTMtNC5leGFtcGxlLmNvbTo0NDQ0L2ZpbGUvPGFjY291bnQ+LzxidWNrZXROYW1lPi9zdG9yYWdlL3N0b3JhZ2Vyb3V0aW5nLmpzb24pLlxuICAgIHVybDogc3RyaW5nO1xuICAgIGZvbGRlcjogc3RyaW5nO1xuICAgIC8vIFdoZW4gZnJlZSBzcGFjZSBvbiB0aGUgZm9sZGVyJ3MgZHJpdmUgZHJvcHMgYmVsb3cgdGhpcyBtYW55IGJ5dGVzLCB0aGUgc2VydmVyIGNvbnNvbGUuZXJyb3JzIGV2ZXJ5IDE1IG1pbnV0ZXMuIEJlbG93IDEwJSBvZiBpdCwgdGhlIHNlcnZlciBhbHNvIHJlamVjdHMgd3JpdGUgb3BlcmF0aW9ucyAoY3JlYXRpbmcgZmlsZXMsIGxhcmdlIHVwbG9hZHMsIG5ldyBidWNrZXRzKSDigJQgcmVhZHMsIGZpbmRJbmZvLCBhbmQgZGVsZXRlcyBzdGlsbCB3b3JrIHNvIHRoZSB1c2VyIGNhbiBmcmVlIHNwYWNlLiBEZWZhdWx0IDI1IEdpQi5cbiAgICBsb3dTcGFjZVRocmVzaG9sZEJ5dGVzPzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAkeyhieXRlcyAvIDEwMjQgKiogMykudG9GaXhlZCgyKX0gR2lCYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hlY2tEaXNrU3BhY2UoY29uZmlnOiB7IGZvbGRlcjogc3RyaW5nOyB0aHJlc2hvbGQ6IG51bWJlciB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IHsgZm9sZGVyLCB0aHJlc2hvbGQgfSA9IGNvbmZpZztcbiAgICBsZXQgc3RhdHMgPSBhd2FpdCBmc3Auc3RhdGZzKGZvbGRlcik7XG4gICAgbGV0IGZyZWUgPSBOdW1iZXIoc3RhdHMuYmF2YWlsKSAqIE51bWJlcihzdGF0cy5ic2l6ZSk7XG4gICAgbGV0IGhhcmRMaW1pdCA9IHRocmVzaG9sZCAqIEhBUkRfUkVKRUNUX0ZSQUNUSU9OO1xuICAgIGlmIChmcmVlID49IHRocmVzaG9sZCkge1xuICAgICAgICBzZXRXcml0ZXNSZWplY3RlZFJlYXNvbih1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB1bmRlciA9IHRocmVzaG9sZCAtIGZyZWU7XG4gICAgbGV0IHJlamVjdGluZyA9IGZyZWUgPCBoYXJkTGltaXQ7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFN0b3JhZ2UgZm9sZGVyICR7Zm9sZGVyfSBpcyBsb3cgb24gZGlzazogJHtmb3JtYXRCeXRlcyhmcmVlKX0gZnJlZWBcbiAgICAgICAgKyBgICh3YXJuIHRocmVzaG9sZCAke2Zvcm1hdEJ5dGVzKHRocmVzaG9sZCl9LCAke2Zvcm1hdEJ5dGVzKHVuZGVyKX0gdW5kZXI7YFxuICAgICAgICArIGAgaGFyZC1yZWplY3QgdGhyZXNob2xkICR7Zm9ybWF0Qnl0ZXMoaGFyZExpbWl0KX0ke3JlamVjdGluZyA/IFwiLCBSRUFDSEVEIOKAlCB3cml0ZSBvcHMgbm93IHJlamVjdGVkXCIgOiBcIlwifSkuYFxuICAgICk7XG4gICAgaWYgKHJlamVjdGluZykge1xuICAgICAgICBzZXRXcml0ZXNSZWplY3RlZFJlYXNvbihcbiAgICAgICAgICAgIGBTdG9yYWdlIHNlcnZlciBpcyBvdXQgb2YgZGlzayBzcGFjZTogb25seSAke2Zvcm1hdEJ5dGVzKGZyZWUpfSBmcmVlIG9uICR7Zm9sZGVyfWBcbiAgICAgICAgICAgICsgYCAoaGFyZC1yZWplY3QgdGhyZXNob2xkICR7Zm9ybWF0Qnl0ZXMoaGFyZExpbWl0KX0sIHdhcm4gdGhyZXNob2xkICR7Zm9ybWF0Qnl0ZXModGhyZXNob2xkKX0pLmBcbiAgICAgICAgICAgICsgYCBXcml0ZSBvcGVyYXRpb25zIChjcmVhdGUvYXBwZW5kL25ldyBidWNrZXQpIGFyZSByZWplY3RlZDsgcmVhZHMsIGZpbmRJbmZvLCBhbmQgZGVsZXRlcyBzdGlsbCB3b3JrIOKAlCBwbGVhc2UgZnJlZSBzcGFjZS5gXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2V0V3JpdGVzUmVqZWN0ZWRSZWFzb24odW5kZWZpbmVkKTtcbiAgICB9XG59XG5cbi8vIEZ1bGwgcGF0aCB0byB0aGUgZ3JhbnRBY2Nlc3MgQ0xJIGJvb3RzdHJhcCB0aGF0IGxpdmVzIG5leHQgdG8gdGhpcyBmaWxlLiBUaGUgU1NIIGNvbW1hbmQgc2hvd24gb24gdGhlIGFjY2VzcyBwYWdlIGludm9rZXMgaXQgdmlhIGBub2RlIDxwYXRoPiAuLi5gIChmb3VuZCB0aHJvdWdoIF9fZGlybmFtZSBzbyBjb25zdW1lcnMgZG9uJ3QgaGF2ZSB0byBrbm93IHdoZXJlIG91ciBzb3VyY2UgbGl2ZXMpLlxuZnVuY3Rpb24gZ2V0R3JhbnRBY2Nlc3NDbGlQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiZ3JhbnRBY2Nlc3MuanNcIik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBob3N0U3RvcmFnZVNlcnZlcihjb25maWc6IEhvc3RTdG9yYWdlU2VydmVyQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IHsgdXJsLCBmb2xkZXIgfSA9IGNvbmZpZztcbiAgICBsZXQgeyBhZGRyZXNzOiBkb21haW4sIHBvcnQgfSA9IHBhcnNlU3RvcmFnZVVybCh1cmwpO1xuICAgIGxldCByb290RG9tYWluID0gZG9tYWluLnNwbGl0KFwiLlwiKS5zbGljZSgtMikuam9pbihcIi5cIik7XG4gICAgbGV0IGV4dGVybmFsSVAgPSAoYXdhaXQgZ2V0RXh0ZXJuYWxJUCgpKS50cmltKCk7XG4gICAgLy8gVGhlIHN1YmRvbWFpbiBtdXN0IGJlIGFuIGlwIGRvbWFpbjogdGhlIGRvbWFpbidzIEEgcmVjb3JkIHBvaW50cyBhdCBleGFjdGx5IG9uZSBtYWNoaW5lLCBzbyBhIGR5bmFtaWMgbmFtZSB3b3VsZCBsZXQgdGhlIHNhbWUgc2NyaXB0IHJ1biBvbiB0d28gc2VydmVycyBhbmQgc2lsZW50bHkgZmlnaHQgb3ZlciBpdC4gRW5jb2RpbmcgdGhlIElQIG1ha2VzIHRoYXQgbWlzdGFrZSBmYWlsIGxvdWRseSAtIHRoZSB3cm9uZyBtYWNoaW5lJ3MgZG9tYWluIGp1c3QgZG9lc24ndCBtYXRjaC5cbiAgICBsZXQgYWxsb3dlZERvbWFpbnMgPSBbYDEyNy0wLTAtMS4ke3Jvb3REb21haW59YCwgYCR7ZXh0ZXJuYWxJUC5yZXBsYWNlQWxsKFwiLlwiLCBcIi1cIil9LiR7cm9vdERvbWFpbn1gXTtcbiAgICBpZiAoIWFsbG93ZWREb21haW5zLmluY2x1ZGVzKGRvbWFpbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc3RvcmFnZSBzZXJ2ZXIgZG9tYWluIGlzIGJhc2VkIG9uIHRoZSBtYWNoaW5lJ3MgSVAgKHRoZSBzdWJkb21haW4gaXMgdGhlIElQIHdpdGggZG90cyByZXBsYWNlZCBieSBkYXNoZXMpLiBFeHBlY3RlZCAke2FsbG93ZWREb21haW5zLmpvaW4oXCIgb3IgXCIpfSwgd2FzICR7ZG9tYWlufS4gWW91ciBleHRlcm5hbCBJUCBpcyAke2V4dGVybmFsSVB9LmApO1xuICAgIH1cbiAgICBhd2FpdCBmc3AubWtkaXIoZm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBsZXQgbG93U3BhY2VUaHJlc2hvbGQgPSBjb25maWcubG93U3BhY2VUaHJlc2hvbGRCeXRlcyA/PyBERUZBVUxUX0xPV19TUEFDRV9USFJFU0hPTERfQllURVM7XG4gICAgc2V0U3RvcmFnZVNlcnZlckNvbmZpZyh7XG4gICAgICAgIGRvbWFpbixcbiAgICAgICAgcG9ydCxcbiAgICAgICAgcm9vdERvbWFpbixcbiAgICAgICAgc3NoVGFyZ2V0OiBgJHtvcy51c2VySW5mbygpLnVzZXJuYW1lfUAke2V4dGVybmFsSVB9YCxcbiAgICAgICAgc2VydmVyQ29tbWFuZDogYG5vZGUgJHtnZXRHcmFudEFjY2Vzc0NsaVBhdGgoKX0gLS11cmwgJHt1cmx9YCxcbiAgICAgICAgZm9sZGVyOiBwYXRoLnJlc29sdmUoZm9sZGVyKSxcbiAgICB9KTtcblxuICAgIFJlcXVpcmVDb250cm9sbGVyLmFsbG93QWxsTm9kZU1vZHVsZXMoKTtcbiAgICBTb2NrZXRGdW5jdGlvbi5leHBvc2UoUmVxdWlyZUNvbnRyb2xsZXIpO1xuICAgIFNvY2tldEZ1bmN0aW9uLmV4cG9zZShSZW1vdGVTdG9yYWdlQ29udHJvbGxlcik7XG4gICAgLy8gRXZlcnkgSFRUUCBwYXRoIGdvZXMgdGhyb3VnaCBodHRwRW50cnk6IC9maWxlLzxhY2NvdW50Pi88YnVja2V0TmFtZT4vLi4uIHNlcnZlcyBwdWJsaWMgYnVja2V0IGZpbGVzLCBldmVyeXRoaW5nIGVsc2Ugc2VydmVzIHRoZSBhY2Nlc3MgcGFnZSAodGhlIHBhdGggaXMgdGhlIGFjY291bnQgbmFtZSwgc2VlIGFjY2Vzc1BhZ2UudHN4KS4gQSBmdWxsIFVSTCwgc28gdGhlIHBhZ2UgcmVzb2x2ZXMgbW9kdWxlcyBmcm9tIHRoZSBvcmlnaW4gcm9vdCBldmVuIHdoZW4gc2VydmVkIGF0IC9hY2NvdW50TmFtZSAoYSByZWxhdGl2ZSByZXF1aXJlIHdvdWxkIHJlc29sdmUgaW5zaWRlIHRoZSBhY2NvdW50IHBhdGgpLlxuICAgIC8vIFRoZSBtb2R1bGUgcGF0aCBpcyByZXNvbHZlZCBzZXJ2ZXItc2lkZSBhZ2FpbnN0IGl0cyB3b3JraW5nIGRpcmVjdG9yeSwgd2hpY2ggaXMgdGhlIEhPU1QgYXBwbGljYXRpb24ncyBmb2xkZXIgLSBzbyBpdCBpcyBjb21wdXRlZCBmcm9tIHdoZXJlIHRoaXMgZmlsZSBhY3R1YWxseSBpcywgaW5zdGVhZCBvZiBhc3N1bWluZyB0aGUgc3RvcmFnZSBzZXJ2ZXIgcnVucyBmcm9tIGluc2lkZSBzbGlmdHV0aWxzIChpbiBhIGhvc3QgYXBwIGl0IGxpdmVzIHVuZGVyIG5vZGVfbW9kdWxlcy9zbGlmdHV0aWxzKS5cbiAgICBsZXQgYWNjZXNzUGFnZVBhdGggPSBcIi4vXCIgKyBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiYWNjZXNzUGFnZS50c3hcIikpLnJlcGxhY2VBbGwoXCJcXFxcXCIsIFwiL1wiKTtcbiAgICBTb2NrZXRGdW5jdGlvbi5zZXREZWZhdWx0SFRUUENhbGwoUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIsIFwiaHR0cEVudHJ5XCIsIHtcbiAgICAgICAgcmVxdWlyZUNhbGxzOiBbYGh0dHBzOi8vJHtkb21haW59OiR7cG9ydH0vJHthY2Nlc3NQYWdlUGF0aH1gXSxcbiAgICB9KTtcblxuICAgIC8vIEluaXRpYWwgY2hlY2sgc28gYSBzZXJ2ZXIgc3RhcnRpbmcgdW5kZXItbGltaXQgaW1tZWRpYXRlbHkgcmVqZWN0cyB3cml0ZXM7IHRoZW4ga2VlcCBjaGVja2luZyBldmVyeSAxNSBtaW51dGVzIHNvIHJlY292ZXJ5IChmcmVlZCBkaXNrIHNwYWNlKSBpcyBwaWNrZWQgdXAgYXV0b21hdGljYWxseS5cbiAgICBhd2FpdCBjaGVja0Rpc2tTcGFjZSh7IGZvbGRlciwgdGhyZXNob2xkOiBsb3dTcGFjZVRocmVzaG9sZCB9KTtcbiAgICBsZXQgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHZvaWQgY2hlY2tEaXNrU3BhY2UoeyBmb2xkZXIsIHRocmVzaG9sZDogbG93U3BhY2VUaHJlc2hvbGQgfSlcbiAgICAgICAgICAgIC5jYXRjaChlID0+IGNvbnNvbGUuZXJyb3IoYERpc2sgc3BhY2UgY2hlY2sgZmFpbGVkIGZvciAke2ZvbGRlcn06YCwgZSkpO1xuICAgIH0sIERJU0tfU1BBQ0VfQ0hFQ0tfSU5URVJWQUxfTVMpO1xuICAgIChpbnRlcnZhbCBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG5cbiAgICBhd2FpdCBob3N0U2VydmVyKHtcbiAgICAgICAgZG9tYWluLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXRETlNSZWNvcmQ6IHRydWUsXG4gICAgICAgIHBvcnRGYWxsYmFjazoge1xuICAgICAgICAgICAgZ2V0QWNxdWlyZURlbGF5OiBnZXRNYWluUG9ydEFjcXVpcmVEZWxheSxcbiAgICAgICAgICAgIG9uUG9ydEluVXNlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZGV0ZWN0RGVwbG95VGFrZW92ZXIoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkxpc3RlbmluZzogKGxpc3RlbmluZ1BvcnQsIGlzTWFpblBvcnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUG9ydCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGFkZEV4dHJhTGlzdGVuUG9ydChsaXN0ZW5pbmdQb3J0KTtcbiAgICAgICAgICAgICAgICBzZXRBbHRQb3J0KGxpc3RlbmluZ1BvcnQpO1xuICAgICAgICAgICAgICAgIGxldCBsaXN0ZW5FbmQgPSBnZXRBbHRQb3J0TGlzdGVuRW5kKCk7XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBBbHRlcm5hdGUgcG9ydCAke2xpc3RlbmluZ1BvcnR9IHJlYWNoZWQgaXRzIGVuZCBvZiBsaWZlIGF0ICR7bmV3IERhdGUobGlzdGVuRW5kKS50b0lTT1N0cmluZygpfTsgaXQgbm8gbG9uZ2VyIGNvdW50cyBhcyBvbmUgb2Ygb3VyIGFkZHJlc3NlcyAodGhlIHNvY2tldCBpdHNlbGYgc3RheXMgYm91bmQsIGFzIHRoZSBtYWluLXBvcnQgcmVsYXkgZm9yd2FyZHMgaW50byBpdClgKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXh0cmFMaXN0ZW5Qb3J0KGxpc3RlbmluZ1BvcnQpO1xuICAgICAgICAgICAgICAgIH0sIE1hdGgubWF4KDAsIGxpc3RlbkVuZCAtIERhdGUubm93KCkpKTtcbiAgICAgICAgICAgICAgICAodGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbiJdfQ==
119
- /* _JS_SOURCE_HASH = "f6732d9539cedc9892af30d03d30045493e253ed65b6f197412ec4aaabaa2dcf"; */
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZVNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0b3JhZ2VTZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDO0FBRXBDLDRDQUFvQjtBQUNwQixnREFBd0I7QUFDeEIsMkRBQThCO0FBQzlCLG1FQUFnRTtBQUNoRSwrREFBK0Q7QUFDL0QsaUZBQThFO0FBQzlFLDREQUF5RDtBQUN6RCwyREFBOEQ7QUFDOUQsaURBQTRIO0FBQzVILHFEQUFrSDtBQUNsSCxxREFBbUQ7QUFDbkQscUVBQXFFO0FBQ3JFLHdCQUFzQjtBQUV0QixNQUFNLGlDQUFpQyxHQUFHLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3pELE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDcEQsd0xBQXdMO0FBQ3hMLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBYWpDLFNBQVMsV0FBVyxDQUFDLEtBQWE7SUFDOUIsT0FBTyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNuRCxDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxNQUE2QztJQUN2RSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUNuQyxJQUFJLEtBQUssR0FBRyxNQUFNLGtCQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxJQUFJLFNBQVMsR0FBRyxTQUFTLEdBQUcsb0JBQW9CLENBQUM7SUFDakQsSUFBSSxJQUFJLElB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QixNQUFNLElBQUEscUNBQW9CLEdBQUUsQ0FBQztZQUNqQyxDQUFDO1lBQ0QsV0FBVyxFQUFFLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxFQUFFOztnQkFDdkMsSUFBSSxVQUFVO29CQUFFLE9BQU87Z0JBQ3ZCLElBQUEsaUNBQWtCLEVBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2xDLElBQUEsMkJBQVUsRUFBQyxhQUFhLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxTQUFTLEdBQUcsSUFBQSxvQ0FBbUIsR0FBRSxDQUFDO2dCQUN0QyxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixhQUFhLCtCQUErQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsd0hBQXdILENBQUMsQ0FBQztvQkFDck8sSUFBQSxvQ0FBcUIsRUFBQyxhQUFhLENBQUMsQ0FBQztnQkFDekMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxNQUFBLE1BQUMsS0FBZ0MsRUFBQyxLQUFLLGtEQUFJLENBQUM7WUFDaEQsQ0FBQztTQUNKO0tBQ0osQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQTdERCw4Q0E2REMiLCJzb3VyY2VzQ29udGVudCI6WyJwcm9jZXNzLmVudi5OT0RFX0VOViA9IFwicHJvZHVjdGlvblwiO1xuXG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IGZzcCBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IFNvY2tldEZ1bmN0aW9uIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9Tb2NrZXRGdW5jdGlvblwiO1xuaW1wb3J0IHsgZ2V0RXh0ZXJuYWxJUCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL25ldHdvcmtpbmdcIjtcbmltcG9ydCB7IFJlcXVpcmVDb250cm9sbGVyIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9yZXF1aXJlL1JlcXVpcmVDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBob3N0U2VydmVyIH0gZnJvbSBcIi4uLy4uL21pc2MvaHR0cHMvaG9zdFNlcnZlclwiO1xuaW1wb3J0IHsgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIgfSBmcm9tIFwiLi9zdG9yYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgc2V0U3RvcmFnZVNlcnZlckNvbmZpZywgc2V0V3JpdGVzUmVqZWN0ZWRSZWFzb24sIGFkZEV4dHJhTGlzdGVuUG9ydCwgcmVtb3ZlRXh0cmFMaXN0ZW5Qb3J0IH0gZnJvbSBcIi4vc2VydmVyQ29uZmlnXCI7XG5pbXBvcnQgeyBkZXRlY3REZXBsb3lUYWtlb3Zlciwgc2V0QWx0UG9ydCwgZ2V0QWx0UG9ydExpc3RlbkVuZCwgZ2V0TWFpblBvcnRBY3F1aXJlRGVsYXkgfSBmcm9tIFwiLi9kZXBsb3lUYWtlb3ZlclwiO1xuaW1wb3J0IHsgcGFyc2VTdG9yYWdlVXJsIH0gZnJvbSBcIi4vQXJjaGl2ZXNSZW1vdGVcIjtcbi8vIEltcG9ydCBicm93c2VyIGNvZGUsIHNvIGl0IGlzIGFsbG93ZWQgdG8gYmUgcmVxdWlyZWQgYnkgdGhlIGNsaWVudFxuaW1wb3J0IFwiLi9hY2Nlc3NQYWdlXCI7XG5cbmNvbnN0IERFRkFVTFRfTE9XX1NQQUNFX1RIUkVTSE9MRF9CWVRFUyA9IDI1ICogMTAyNCAqKiAzO1xuY29uc3QgRElTS19TUEFDRV9DSEVDS19JTlRFUlZBTF9NUyA9IDE1ICogNjAgKiAxMDAwO1xuLy8gQmVsb3cgdGhpcyBmcmFjdGlvbiBvZiB0aGUgd2FybiB0aHJlc2hvbGQsIHdlIHN0YXJ0IHJlamVjdGluZyB3cml0ZXMgc28gdGhlIHNlcnZlciBpdHNlbGYgZG9lc24ndCB0aXAgdGhlIG1hY2hpbmUgaW50byBpbnN0YWJpbGl0eS4gUmVhZHMvZGVsZXRlcyBzdGlsbCB3b3JrIHNvIHVzZXJzIGNhbiBmcmVlIHNwYWNlLlxuY29uc3QgSEFSRF9SRUpFQ1RfRlJBQ1RJT04gPSAwLjE7XG5cbi8vIFRoZSByZW1vdGUgc3RvcmFnZSBzZXJ2ZXIsIGFzIGEgbGlicmFyeSBmdW5jdGlvbjogY29uc3VtZXJzIGNhbGwgaG9zdFN0b3JhZ2VTZXJ2ZXIoKSBmcm9tIHRoZWlyIG93biBwcm9jZXNzIHRvIHN0YXJ0IGhvc3RpbmcgKG9yIHVzZSB0aGUgc3RvcmFnZXNlcnZlciBiaW4sIHNlZSBzdG9yYWdlU2VydmVyQ2xpLnRzKS4gVGhlIGdyYW50QWNjZXNzLmpzIGJvb3RzdHJhcCAobmV4dCB0byB0aGlzIGZpbGUpIGlzIHdoYXQgdGhlIGFjY2VzcyBwYWdlJ3Mgc2hvd24gU1NIIGNvbW1hbmQgcG9pbnRzIGF0LlxuXG5leHBvcnQgdHlwZSBIb3N0U3RvcmFnZVNlcnZlckNvbmZpZyA9IHtcbiAgICAvLyBGdWxsIFVSTCBvZiB0aGlzIHN0b3JhZ2Ugc2VydmVyLCBlLmcuIFwiaHR0cHM6Ly8xLTItMy00LmV4YW1wbGUuY29tOjQ0NDRcIi4gVGhlIHN1YmRvbWFpbiBtdXN0IGJlIGFuIGlwIGRvbWFpbiAtIHRoaXMgbWFjaGluZSdzIGV4dGVybmFsIElQIHdpdGggZGFzaGVzLCBvciAxMjctMC0wLTEgZm9yIGxvY2FsIHRlc3RpbmcgKHNlZSB0aGUgdmFsaWRhdGlvbiBpbiBob3N0U3RvcmFnZVNlcnZlcikuIFRoZSBkb21haW4gYW5kIHBvcnQgYXJlIGV4dHJhY3RlZCBmcm9tIGl0IChidWNrZXQgcm91dGluZyBVUkxzIGNsaWVudHMgdXNlIGxvb2sgbGlrZVxuICAgIC8vIGh0dHBzOi8vMS0yLTMtNC5leGFtcGxlLmNvbTo0NDQ0L2ZpbGUvPGFjY291bnQ+LzxidWNrZXROYW1lPi9zdG9yYWdlL3N0b3JhZ2Vyb3V0aW5nLmpzb24pLlxuICAgIHVybDogc3RyaW5nO1xuICAgIGZvbGRlcjogc3RyaW5nO1xuICAgIC8vIFdoZW4gZnJlZSBzcGFjZSBvbiB0aGUgZm9sZGVyJ3MgZHJpdmUgZHJvcHMgYmVsb3cgdGhpcyBtYW55IGJ5dGVzLCB0aGUgc2VydmVyIGNvbnNvbGUuZXJyb3JzIGV2ZXJ5IDE1IG1pbnV0ZXMuIEJlbG93IDEwJSBvZiBpdCwgdGhlIHNlcnZlciBhbHNvIHJlamVjdHMgd3JpdGUgb3BlcmF0aW9ucyAoY3JlYXRpbmcgZmlsZXMsIGxhcmdlIHVwbG9hZHMsIG5ldyBidWNrZXRzKSDigJQgcmVhZHMsIGZpbmRJbmZvLCBhbmQgZGVsZXRlcyBzdGlsbCB3b3JrIHNvIHRoZSB1c2VyIGNhbiBmcmVlIHNwYWNlLiBEZWZhdWx0IDI1IEdpQi5cbiAgICBsb3dTcGFjZVRocmVzaG9sZEJ5dGVzPzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAkeyhieXRlcyAvIDEwMjQgKiogMykudG9GaXhlZCgyKX0gR2lCYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hlY2tEaXNrU3BhY2UoY29uZmlnOiB7IGZvbGRlcjogc3RyaW5nOyB0aHJlc2hvbGQ6IG51bWJlciB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IHsgZm9sZGVyLCB0aHJlc2hvbGQgfSA9IGNvbmZpZztcbiAgICBsZXQgc3RhdHMgPSBhd2FpdCBmc3Auc3RhdGZzKGZvbGRlcik7XG4gICAgbGV0IGZyZWUgPSBOdW1iZXIoc3RhdHMuYmF2YWlsKSAqIE51bWJlcihzdGF0cy5ic2l6ZSk7XG4gICAgbGV0IGhhcmRMaW1pdCA9IHRocmVzaG9sZCAqIEhBUkRfUkVKRUNUX0ZSQUNUSU9OO1xuICAgIGlmIChmcmVlID49IHRocmVzaG9sZCkge1xuICAgICAgICBzZXRXcml0ZXNSZWplY3RlZFJlYXNvbih1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB1bmRlciA9IHRocmVzaG9sZCAtIGZyZWU7XG4gICAgbGV0IHJlamVjdGluZyA9IGZyZWUgPCBoYXJkTGltaXQ7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYFN0b3JhZ2UgZm9sZGVyICR7Zm9sZGVyfSBpcyBsb3cgb24gZGlzazogJHtmb3JtYXRCeXRlcyhmcmVlKX0gZnJlZWBcbiAgICAgICAgKyBgICh3YXJuIHRocmVzaG9sZCAke2Zvcm1hdEJ5dGVzKHRocmVzaG9sZCl9LCAke2Zvcm1hdEJ5dGVzKHVuZGVyKX0gdW5kZXI7YFxuICAgICAgICArIGAgaGFyZC1yZWplY3QgdGhyZXNob2xkICR7Zm9ybWF0Qnl0ZXMoaGFyZExpbWl0KX0ke3JlamVjdGluZyA/IFwiLCBSRUFDSEVEIOKAlCB3cml0ZSBvcHMgbm93IHJlamVjdGVkXCIgOiBcIlwifSkuYFxuICAgICk7XG4gICAgaWYgKHJlamVjdGluZykge1xuICAgICAgICBzZXRXcml0ZXNSZWplY3RlZFJlYXNvbihcbiAgICAgICAgICAgIGBTdG9yYWdlIHNlcnZlciBpcyBvdXQgb2YgZGlzayBzcGFjZTogb25seSAke2Zvcm1hdEJ5dGVzKGZyZWUpfSBmcmVlIG9uICR7Zm9sZGVyfWBcbiAgICAgICAgICAgICsgYCAoaGFyZC1yZWplY3QgdGhyZXNob2xkICR7Zm9ybWF0Qnl0ZXMoaGFyZExpbWl0KX0sIHdhcm4gdGhyZXNob2xkICR7Zm9ybWF0Qnl0ZXModGhyZXNob2xkKX0pLmBcbiAgICAgICAgICAgICsgYCBXcml0ZSBvcGVyYXRpb25zIChjcmVhdGUvYXBwZW5kL25ldyBidWNrZXQpIGFyZSByZWplY3RlZDsgcmVhZHMsIGZpbmRJbmZvLCBhbmQgZGVsZXRlcyBzdGlsbCB3b3JrIOKAlCBwbGVhc2UgZnJlZSBzcGFjZS5gXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2V0V3JpdGVzUmVqZWN0ZWRSZWFzb24odW5kZWZpbmVkKTtcbiAgICB9XG59XG5cbi8vIEZ1bGwgcGF0aCB0byB0aGUgZ3JhbnRBY2Nlc3MgQ0xJIGJvb3RzdHJhcCB0aGF0IGxpdmVzIG5leHQgdG8gdGhpcyBmaWxlLiBUaGUgU1NIIGNvbW1hbmQgc2hvd24gb24gdGhlIGFjY2VzcyBwYWdlIGludm9rZXMgaXQgdmlhIGBub2RlIDxwYXRoPiAuLi5gIChmb3VuZCB0aHJvdWdoIF9fZGlybmFtZSBzbyBjb25zdW1lcnMgZG9uJ3QgaGF2ZSB0byBrbm93IHdoZXJlIG91ciBzb3VyY2UgbGl2ZXMpLlxuZnVuY3Rpb24gZ2V0R3JhbnRBY2Nlc3NDbGlQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiZ3JhbnRBY2Nlc3MuanNcIik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBob3N0U3RvcmFnZVNlcnZlcihjb25maWc6IEhvc3RTdG9yYWdlU2VydmVyQ29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IHsgdXJsLCBmb2xkZXIgfSA9IGNvbmZpZztcbiAgICBsZXQgeyBhZGRyZXNzOiBkb21haW4sIHBvcnQgfSA9IHBhcnNlU3RvcmFnZVVybCh1cmwpO1xuICAgIGxldCByb290RG9tYWluID0gZG9tYWluLnNwbGl0KFwiLlwiKS5zbGljZSgtMikuam9pbihcIi5cIik7XG4gICAgbGV0IGV4dGVybmFsSVAgPSAoYXdhaXQgZ2V0RXh0ZXJuYWxJUCgpKS50cmltKCk7XG4gICAgLy8gVGhlIHN1YmRvbWFpbiBtdXN0IGJlIGFuIGlwIGRvbWFpbjogdGhlIGRvbWFpbidzIEEgcmVjb3JkIHBvaW50cyBhdCBleGFjdGx5IG9uZSBtYWNoaW5lLCBzbyBhIGR5bmFtaWMgbmFtZSB3b3VsZCBsZXQgdGhlIHNhbWUgc2NyaXB0IHJ1biBvbiB0d28gc2VydmVycyBhbmQgc2lsZW50bHkgZmlnaHQgb3ZlciBpdC4gRW5jb2RpbmcgdGhlIElQIG1ha2VzIHRoYXQgbWlzdGFrZSBmYWlsIGxvdWRseSAtIHRoZSB3cm9uZyBtYWNoaW5lJ3MgZG9tYWluIGp1c3QgZG9lc24ndCBtYXRjaC5cbiAgICBsZXQgYWxsb3dlZERvbWFpbnMgPSBbYDEyNy0wLTAtMS4ke3Jvb3REb21haW59YCwgYCR7ZXh0ZXJuYWxJUC5yZXBsYWNlQWxsKFwiLlwiLCBcIi1cIil9LiR7cm9vdERvbWFpbn1gXTtcbiAgICBpZiAoIWFsbG93ZWREb21haW5zLmluY2x1ZGVzKGRvbWFpbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc3RvcmFnZSBzZXJ2ZXIgZG9tYWluIGlzIGJhc2VkIG9uIHRoZSBtYWNoaW5lJ3MgSVAgKHRoZSBzdWJkb21haW4gaXMgdGhlIElQIHdpdGggZG90cyByZXBsYWNlZCBieSBkYXNoZXMpLiBFeHBlY3RlZCAke2FsbG93ZWREb21haW5zLmpvaW4oXCIgb3IgXCIpfSwgd2FzICR7ZG9tYWlufS4gWW91ciBleHRlcm5hbCBJUCBpcyAke2V4dGVybmFsSVB9LmApO1xuICAgIH1cbiAgICBhd2FpdCBmc3AubWtkaXIoZm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBsZXQgbG93U3BhY2VUaHJlc2hvbGQgPSBjb25maWcubG93U3BhY2VUaHJlc2hvbGRCeXRlcyA/PyBERUZBVUxUX0xPV19TUEFDRV9USFJFU0hPTERfQllURVM7XG4gICAgc2V0U3RvcmFnZVNlcnZlckNvbmZpZyh7XG4gICAgICAgIGRvbWFpbixcbiAgICAgICAgcG9ydCxcbiAgICAgICAgcm9vdERvbWFpbixcbiAgICAgICAgc3NoVGFyZ2V0OiBgJHtvcy51c2VySW5mbygpLnVzZXJuYW1lfUAke2V4dGVybmFsSVB9YCxcbiAgICAgICAgc2VydmVyQ29tbWFuZDogYG5vZGUgJHtnZXRHcmFudEFjY2Vzc0NsaVBhdGgoKX0gLS11cmwgJHt1cmx9YCxcbiAgICAgICAgZm9sZGVyOiBwYXRoLnJlc29sdmUoZm9sZGVyKSxcbiAgICB9KTtcblxuICAgIFJlcXVpcmVDb250cm9sbGVyLmFsbG93QWxsTm9kZU1vZHVsZXMoKTtcbiAgICBTb2NrZXRGdW5jdGlvbi5leHBvc2UoUmVxdWlyZUNvbnRyb2xsZXIpO1xuICAgIFNvY2tldEZ1bmN0aW9uLmV4cG9zZShSZW1vdGVTdG9yYWdlQ29udHJvbGxlcik7XG4gICAgLy8gRXZlcnkgSFRUUCBwYXRoIGdvZXMgdGhyb3VnaCBodHRwRW50cnk6IC9maWxlLzxhY2NvdW50Pi88YnVja2V0TmFtZT4vLi4uIHNlcnZlcyBwdWJsaWMgYnVja2V0IGZpbGVzLCBldmVyeXRoaW5nIGVsc2Ugc2VydmVzIHRoZSBhY2Nlc3MgcGFnZSAodGhlIHBhdGggaXMgdGhlIGFjY291bnQgbmFtZSwgc2VlIGFjY2Vzc1BhZ2UudHN4KS4gQSBmdWxsIFVSTCwgc28gdGhlIHBhZ2UgcmVzb2x2ZXMgbW9kdWxlcyBmcm9tIHRoZSBvcmlnaW4gcm9vdCBldmVuIHdoZW4gc2VydmVkIGF0IC9hY2NvdW50TmFtZSAoYSByZWxhdGl2ZSByZXF1aXJlIHdvdWxkIHJlc29sdmUgaW5zaWRlIHRoZSBhY2NvdW50IHBhdGgpLlxuICAgIC8vIFRoZSBtb2R1bGUgcGF0aCBpcyByZXNvbHZlZCBzZXJ2ZXItc2lkZSBhZ2FpbnN0IGl0cyB3b3JraW5nIGRpcmVjdG9yeSwgd2hpY2ggaXMgdGhlIEhPU1QgYXBwbGljYXRpb24ncyBmb2xkZXIgLSBzbyBpdCBpcyBjb21wdXRlZCBmcm9tIHdoZXJlIHRoaXMgZmlsZSBhY3R1YWxseSBpcywgaW5zdGVhZCBvZiBhc3N1bWluZyB0aGUgc3RvcmFnZSBzZXJ2ZXIgcnVucyBmcm9tIGluc2lkZSBzbGlmdHV0aWxzIChpbiBhIGhvc3QgYXBwIGl0IGxpdmVzIHVuZGVyIG5vZGVfbW9kdWxlcy9zbGlmdHV0aWxzKS5cbiAgICBsZXQgYWNjZXNzUGFnZVBhdGggPSBcIi4vXCIgKyBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiYWNjZXNzUGFnZS50c3hcIikpLnJlcGxhY2VBbGwoXCJcXFxcXCIsIFwiL1wiKTtcbiAgICBTb2NrZXRGdW5jdGlvbi5zZXREZWZhdWx0SFRUUENhbGwoUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXIsIFwiaHR0cEVudHJ5XCIsIHtcbiAgICAgICAgcmVxdWlyZUNhbGxzOiBbYGh0dHBzOi8vJHtkb21haW59OiR7cG9ydH0vJHthY2Nlc3NQYWdlUGF0aH1gXSxcbiAgICB9KTtcblxuICAgIC8vIEluaXRpYWwgY2hlY2sgc28gYSBzZXJ2ZXIgc3RhcnRpbmcgdW5kZXItbGltaXQgaW1tZWRpYXRlbHkgcmVqZWN0cyB3cml0ZXM7IHRoZW4ga2VlcCBjaGVja2luZyBldmVyeSAxNSBtaW51dGVzIHNvIHJlY292ZXJ5IChmcmVlZCBkaXNrIHNwYWNlKSBpcyBwaWNrZWQgdXAgYXV0b21hdGljYWxseS5cbiAgICBhd2FpdCBjaGVja0Rpc2tTcGFjZSh7IGZvbGRlciwgdGhyZXNob2xkOiBsb3dTcGFjZVRocmVzaG9sZCB9KTtcbiAgICBsZXQgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHZvaWQgY2hlY2tEaXNrU3BhY2UoeyBmb2xkZXIsIHRocmVzaG9sZDogbG93U3BhY2VUaHJlc2hvbGQgfSlcbiAgICAgICAgICAgIC5jYXRjaChlID0+IGNvbnNvbGUuZXJyb3IoYERpc2sgc3BhY2UgY2hlY2sgZmFpbGVkIGZvciAke2ZvbGRlcn06YCwgZSkpO1xuICAgIH0sIERJU0tfU1BBQ0VfQ0hFQ0tfSU5URVJWQUxfTVMpO1xuICAgIChpbnRlcnZhbCBhcyB7IHVucmVmPzogKCkgPT4gdm9pZCB9KS51bnJlZj8uKCk7XG5cbiAgICBhd2FpdCBob3N0U2VydmVyKHtcbiAgICAgICAgZG9tYWluLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXRETlNSZWNvcmQ6IHRydWUsXG4gICAgICAgIHBvcnRGYWxsYmFjazoge1xuICAgICAgICAgICAgZ2V0QWNxdWlyZURlbGF5OiBnZXRNYWluUG9ydEFjcXVpcmVEZWxheSxcbiAgICAgICAgICAgIG9uUG9ydEluVXNlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZGV0ZWN0RGVwbG95VGFrZW92ZXIoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkxpc3RlbmluZzogKGxpc3RlbmluZ1BvcnQsIGlzTWFpblBvcnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUG9ydCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGFkZEV4dHJhTGlzdGVuUG9ydChsaXN0ZW5pbmdQb3J0KTtcbiAgICAgICAgICAgICAgICBzZXRBbHRQb3J0KGxpc3RlbmluZ1BvcnQpO1xuICAgICAgICAgICAgICAgIGxldCBsaXN0ZW5FbmQgPSBnZXRBbHRQb3J0TGlzdGVuRW5kKCk7XG4gICAgICAgICAgICAgICAgbGV0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBBbHRlcm5hdGUgcG9ydCAke2xpc3RlbmluZ1BvcnR9IHJlYWNoZWQgaXRzIGVuZCBvZiBsaWZlIGF0ICR7bmV3IERhdGUobGlzdGVuRW5kKS50b0lTT1N0cmluZygpfTsgaXQgbm8gbG9uZ2VyIGNvdW50cyBhcyBvbmUgb2Ygb3VyIGFkZHJlc3NlcyAodGhlIHNvY2tldCBpdHNlbGYgc3RheXMgYm91bmQsIGFzIHRoZSBtYWluLXBvcnQgcmVsYXkgZm9yd2FyZHMgaW50byBpdClgKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXh0cmFMaXN0ZW5Qb3J0KGxpc3RlbmluZ1BvcnQpO1xuICAgICAgICAgICAgICAgIH0sIE1hdGgubWF4KDAsIGxpc3RlbkVuZCAtIERhdGUubm93KCkpKTtcbiAgICAgICAgICAgICAgICAodGltZXIgYXMgeyB1bnJlZj86ICgpID0+IHZvaWQgfSkudW5yZWY/LigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbiJdfQ==
119
+ /* _JS_SOURCE_HASH = "83117826c86c99fc2e93c16a8a182374c940690834d995f183d16d928eb6de5c"; */