sliftutils 1.7.83 → 1.7.84
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.
- package/dist/treeSummary.ts.cache +2 -2
- package/index.d.ts +1 -1
- package/misc/dist/environment.ts.cache +2 -2
- package/misc/dist/getSecret.ts.cache +2 -2
- package/misc/dist/strings.ts.cache +2 -2
- package/misc/dist/zip.ts.cache +2 -2
- package/misc/https/dist/certs.ts.cache +2 -2
- package/misc/https/dist/persistentLocalStorage.ts.cache +2 -2
- package/package.json +2 -2
- package/storage/BulkDatabase2/dist/BulkDatabaseBase.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/BulkDatabaseFormat.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/BulkDatabaseMerge.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/BulkDatabaseReader.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/LoadedIndex.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/WriteOverlay.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/blockCache.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/mergeLock.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/mergeMarkers.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/streamLog.ts.cache +2 -2
- package/storage/BulkDatabase2/dist/syncClient.ts.cache +2 -2
- package/storage/dist/ArchivesDisk.ts.cache +2 -2
- package/storage/dist/FileFolderAPI.tsx.cache +2 -2
- package/storage/dist/IArchives.ts.cache +2 -2
- package/storage/dist/IndexedDBFileFolderAPI.ts.cache +2 -2
- package/storage/dist/JSONStorage.ts.cache +2 -2
- package/storage/dist/PendingManager.tsx.cache +2 -2
- package/storage/dist/TransactionStorage.ts.cache +2 -2
- package/storage/dist/backblaze.ts.cache +2 -2
- package/storage/dist/fileSystemPointer.ts.cache +2 -2
- package/storage/dist/remoteFileStorage.ts.cache +2 -2
- package/storage/remoteStorage/accessStats.d.ts +1 -1
- package/storage/remoteStorage/accessStats.ts +5 -8
- package/storage/remoteStorage/createArchives.ts +19 -9
- package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +2 -2
- package/storage/remoteStorage/dist/ArchivesUrl.ts.cache +2 -2
- package/storage/remoteStorage/dist/accessStats.ts.cache +8 -12
- package/storage/remoteStorage/dist/blobStore.ts.cache +2 -2
- package/storage/remoteStorage/dist/bucketDisk.ts.cache +2 -2
- package/storage/remoteStorage/dist/cliArgs.ts.cache +2 -2
- package/storage/remoteStorage/dist/createArchives.ts.cache +20 -11
- package/storage/remoteStorage/dist/deployTakeover.ts.cache +2 -2
- package/storage/remoteStorage/dist/intermediateSources.ts.cache +2 -2
- package/storage/remoteStorage/dist/remoteConfig.ts.cache +2 -2
- package/storage/remoteStorage/dist/serverConfig.ts.cache +2 -2
- package/storage/remoteStorage/dist/sourceWrapper.ts.cache +5 -4
- package/storage/remoteStorage/dist/sourcesList.ts.cache +2 -2
- package/storage/remoteStorage/dist/storageClientController.ts.cache +2 -2
- package/storage/remoteStorage/dist/storageController.ts.cache +2 -2
- package/storage/remoteStorage/dist/storageServerState.ts.cache +2 -2
- package/storage/remoteStorage/dist/storePlan.ts.cache +2 -2
- package/storage/remoteStorage/dist/validation.ts.cache +2 -2
- package/storage/remoteStorage/sourceWrapper.ts +2 -1
- 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.getFileStorageIndexDB = void 0;
|
|
4
4
|
const caching_1 = require("socket-function/src/caching");
|
|
@@ -145,4 +145,4 @@ exports.getFileStorageIndexDB = (0, caching_1.lazy)(async () => {
|
|
|
145
145
|
return new VirtualFileStorage(db, "/");
|
|
146
146
|
});
|
|
147
147
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5kZXhlZERCRmlsZUZvbGRlckFQSS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkluZGV4ZWREQkZpbGVGb2xkZXJBUEkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseURBQW1EO0FBSW5ELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQztBQUM5QixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUM7QUFDM0IsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBT3JCLE1BQU0sa0JBQWtCO0lBR3BCLFlBQ0ksRUFBZSxFQUNDLEVBQVU7UUFBVixPQUFFLEdBQUYsRUFBRSxDQUFRO1FBOEc5QixtQ0FBbUM7UUFDbkMsV0FBTSxHQUFHO1lBQ0wsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFXLEVBQW9CLEVBQUU7Z0JBQzVDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztnQkFDdkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3RELE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDM0IsQ0FBQztZQUVELFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBVyxFQUF3QixFQUFFO2dCQUNwRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7Z0JBQ3BDLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFFRCxhQUFhLEVBQUUsS0FBSyxFQUFFLEdBQVcsRUFBaUIsRUFBRTtnQkFDaEQsSUFBSSxNQUFNLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUNsRSxNQUFNLE1BQU0sQ0FBQyxL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Q0FBQyxNQUFNLENBQUM7WUFDckQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDNUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDTCxDQUFDLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsYXp5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FjaGluZ1wiO1xuaW1wb3J0IHsgSVN0b3JhZ2VSYXcgfSBmcm9tIFwiLi9JU3RvcmFnZVwiO1xuaW1wb3J0IHsgRmlsZVN0b3JhZ2UgfSBmcm9tIFwiLi9GaWxlRm9sZGVyQVBJXCI7XG5cbmNvbnN0IERCX05BTUUgPSBcIkZpbGVTdG9yYWdlXCI7XG5jb25zdCBTVE9SRV9OQU1FID0gXCJmaWxlc1wiO1xuY29uc3QgREJfVkVSU0lPTiA9IDE7XG5cbmludGVyZmFjZSBGaWxlUmVjb3JkIHtcbiAgICBkYXRhOiBCdWZmZXI7XG4gICAgbGFzdE1vZGlmaWVkOiBudW1iZXI7XG59XG5cbmNsYXNzIFZpcnR1YWxGaWxlU3RvcmFnZSBpbXBsZW1lbnRzIEZpbGVTdG9yYWdlIHtcbiAgICBwcml2YXRlIGRiOiBJREJEYXRhYmFzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBkYjogSURCRGF0YWJhc2UsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nXG4gICAgKSB7XG4gICAgICAgIGlmICghZGIpIGRlYnVnZ2VyO1xuICAgICAgICB0aGlzLmRiID0gZGI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdG9yZShtb2RlOiBJREJUcmFuc2FjdGlvbk1vZGUgPSBcInJlYWRvbmx5XCIpIHtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRiLnRyYW5zYWN0aW9uKFNUT1JFX05BTUUsIG1vZGUpO1xuICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoU1RPUkVfTkFNRSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXF1ZXN0PFQ+KHJlcXVlc3Q6IElEQlJlcXVlc3Q8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZShyZXF1ZXN0LnJlc3VsdCk7XG4gICAgICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgLy8gSVN0b3JhZ2VSYXcgaW1wbGVtZW50YXRpb25cbiAgICBhc3luYyBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCBzdG9yZSA9IHRoaXMuZ2V0U3RvcmUoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0PEZpbGVSZWNvcmQgfCB1bmRlZmluZWQ+KHN0b3JlLmdldCh0aGlzLmlkICsga2V5KSk7XG4gICAgICAgIGxldCBiYWRCdWZmZXIgPSByZXN1bHQ/LmRhdGE7XG4gICAgICAgIGlmIChiYWRCdWZmZXIpIGJhZEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJhZEJ1ZmZlcik7XG4gICAgICAgIHJldHVybiBiYWRCdWZmZXI7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmFuZ2Uoa2V5OiBzdHJpbmcsIGNvbmZpZzogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9KTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgZnVsbEJ1ZmZlciA9IGF3YWl0IHRoaXMuZ2V0KGtleSk7XG4gICAgICAgIGlmICghZnVsbEJ1ZmZlcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGZ1bGxCdWZmZXIuc3ViYXJyYXkoY29uZmlnLnN0YXJ0LCBjb25maWcuZW5kKTtcbiAgICB9XG5cbiAgICBhc3luYyBhcHBlbmQoa2V5OiBzdHJpbmcsIHZhbHVlOiBCdWZmZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgc3RvcmUgPSB0aGlzLmdldFN0b3JlKFwicmVhZHdyaXRlXCIpO1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHRoaXMuaWQgKyBrZXk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5yZXF1ZXN0PEZpbGVSZWNvcmQgfCB1bmRlZmluZWQ+KHN0b3JlLmdldChmdWxsUGF0aCkpO1xuXG4gICAgICAgIGNvbnN0IG5ld1JlY29yZDogRmlsZVJlY29yZCA9IHtcbiAgICAgICAgICAgIGRhdGE6IGV4aXN0aW5nXG4gICAgICAgICAgICAgICAgPyBCdWZmZXIuY29uY2F0KFtleGlzdGluZy5kYXRhLCB2YWx1ZV0pXG4gICAgICAgICAgICAgICAgOiB2YWx1ZSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZDogRGF0ZS5ub3coKVxuICAgICAgICB9O1xuXG4gICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdChzdG9yZS5wdXQobmV3UmVjb3JkLCBmdWxsUGF0aCkpO1xuICAgIH1cblxuICAgIGFzeW5jIHNldChrZXk6IHN0cmluZywgdmFsdWU6IEJ1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBzdG9yZSA9IHRoaXMuZ2V0U3RvcmUoXCJyZWFkd3JpdGVcIik7XG4gICAgICAgIGNvbnN0IHJlY29yZDogRmlsZVJlY29yZCA9IHtcbiAgICAgICAgICAgIGRhdGE6IHZhbHVlLFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBEYXRlLm5vdygpXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdChzdG9yZS5wdXQocmVjb3JkLCB0aGlzLmlkICsga2V5KSk7XG4gICAgfVxuXG4gICAgYXN5bmMgcmVtb3ZlKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHN0b3JlID0gdGhpcy5nZXRTdG9yZShcInJlYWR3cml0ZVwiKTtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KHN0b3JlLmRlbGV0ZSh0aGlzLmlkICsga2V5KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRLZXlzV2l0aFByZWZpeChwcmVmaXg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3Qgc3RvcmUgPSB0aGlzLmdldFN0b3JlKCk7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gSURCS2V5UmFuZ2UuYm91bmQocHJlZml4LCBwcmVmaXggKyBcIlxcdWZmZmZcIiwgZmFsc2UsIHRydWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IHN0b3JlLm9wZW5DdXJzb3IocmFuZ2UpO1xuXG4gICAgICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvcik7XG4gICAgICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3IgPSByZXF1ZXN0LnJlc3VsdDtcbiAgICAgICAgICAgICAgICBpZiAoY3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBuZXdLZXkgPSBjdXJzb3Iua2V5IGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgbmV3S2V5ID0gbmV3S2V5LnNsaWNlKHRoaXMuaWQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKG5ld0tleSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoa2V5cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0S2V5cygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGxldCBrZXlzID0gYXdhaXQgdGhpcy5nZXRLZXlzV2l0aFByZWZpeCh0aGlzLmlkKTtcbiAgICAgICAgcmV0dXJuIGtleXMuZmlsdGVyKHggPT4gIXguaW5jbHVkZXMoXCIvXCIpKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRJbmZvKGtleTogc3RyaW5nKTogUHJvbWlzZTx7IHNpemU6IG51bWJlcjsgbGFzdE1vZGlmaWVkOiBudW1iZXI7IH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3Qgc3RvcmUgPSB0aGlzLmdldFN0b3JlKCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdDxGaWxlUmVjb3JkIHwgdW5kZWZpbmVkPihzdG9yZS5nZXQodGhpcy5pZCArIGtleSkpO1xuXG4gICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaXplOiByZXN1bHQuZGF0YS5sZW5ndGgsXG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHJlc3VsdC5sYXN0TW9kaWZpZWRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYyByZXNldCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IGtleXMgPSBhd2FpdCB0aGlzLmdldEtleXNXaXRoUHJlZml4KHRoaXMuaWQpO1xuICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmUoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5lc3RlZEZpbGVTdG9yYWdlIGltcGxlbWVudGF0aW9uXG4gICAgZm9sZGVyID0ge1xuICAgICAgICBoYXNLZXk6IGFzeW5jIChrZXk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9sZGVyUGF0aCA9IHRoaXMuaWQgKyBrZXkgKyBcIi9cIjtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCB0aGlzLmdldEtleXNXaXRoUHJlZml4KGZvbGRlclBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIGtleXMubGVuZ3RoID4gMDtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRTdG9yYWdlOiBhc3luYyAoa2V5OiBzdHJpbmcpOiBQcm9taXNlPEZpbGVTdG9yYWdlPiA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdQYXRoID0gdGhpcy5pZCArIGtleSArIFwiL1wiO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBWaXJ0dWFsRmlsZVN0b3JhZ2UodGhpcy5kYiwgbmV3UGF0aCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlU3RvcmFnZTogYXN5bmMgKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgICBsZXQgbmVzdGVkID0gbmV3IFZpcnR1YWxGaWxlU3RvcmFnZSh0aGlzLmRiLCB0aGlzLmlkICsga2V5ICsgXCIvXCIpO1xuICAgICAgICAgICAgYXdhaXQgbmVzdGVkLnJlc2V0KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0S2V5czogYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nW10+ID0+IHtcbiAgICAgICAgICAgIGxldCBrZXlzID0gYXdhaXQgdGhpcy5nZXRLZXlzV2l0aFByZWZpeCh0aGlzLmlkKTtcbiAgICAgICAgICAgIGxldCBmb2xkZXJLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgICAgIGlmICgha2V5LmluY2x1ZGVzKFwiL1wiKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnRzID0ga2V5LnNwbGl0KFwiL1wiKTtcbiAgICAgICAgICAgICAgICBmb2xkZXJLZXlzLmFkZChwYXJ0c1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShmb2xkZXJLZXlzKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGaWxlU3RvcmFnZUluZGV4REIgPSBsYXp5KGFzeW5jICgpOiBQcm9taXNlPEZpbGVTdG9yYWdlPiA9PiB7XG4gICAgY29uc3QgZGIgPSBhd2FpdCBuZXcgUHJvbWlzZTxJREJEYXRhYmFzZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oREJfTkFNRSwgREJfVkVSU0lPTik7XG5cbiAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuXG4gICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYiA9IChldmVudC50YXJnZXQgYXMgSURCT3BlbkRCUmVxdWVzdCkucmVzdWx0O1xuICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKFNUT1JFX05BTUUpKSB7XG4gICAgICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoU1RPUkVfTkFNRSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFZpcnR1YWxGaWxlU3RvcmFnZShkYiwgXCIvXCIpO1xufSk7Il19
|
|
148
|
-
/* _JS_SOURCE_HASH = "
|
|
148
|
+
/* _JS_SOURCE_HASH = "f375f0d5b5dc5c7a444768190f00b186c2e98df5aeb0fcd88db18e769960452a"; */
|
|
@@ -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 = "
|
|
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 = "
|
|
73
|
+
/* _JS_SOURCE_HASH = "996761e332800c2e1a6c41718c030620fbc3e18bc8a35683dbc3562e7c6e74ba"; */
|
|
@@ -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 = "
|
|
547
|
+
/* _JS_SOURCE_HASH = "d3e36cc62c47500f4ba9918b90652351548b609e3829d8077a2c42e47bd0a214"; */
|
|
@@ -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
|
};
|
|
@@ -854,4 +854,4 @@ exports.getArchivesBackblazePublic = (0, caching_1.cache)((domain) => {
|
|
|
854
854
|
});
|
|
855
855
|
});
|
|
856
856
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2JsYXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYmFja2JsYXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHlEQUEwRDtBQUcxRCxtREFBa0Y7QUFDbEYsMkRBQXFEO0FBQ3JELGtFQUFpRjtBQUNqRix3RUFBZ0Y7QUFFaEYsOENBQXNCO0FBQ3RCLGlEQUE4QztBQUM5QyxxREFBNEU7QUFDNUUsMkNBQTJOO0FBQzNOLCtEQUE2RDtBQU83RCxJQUFJLGNBQWMsR0FBRyxJQUFBLGNBQUksRUFBQyxLQUFLLElBQTZCLEVBQUU7SUFDMUQsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFBLHFCQUFTLEVBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUMvRCxJQUFJLEdBQUcsR0FBRyxNQUFNLElBQUEscUJBQVMsRUFBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQzNELE9BQU87UUFDSCxnQkFBZ0IsRUFBRSxLQUFLO1FBQ3ZCLGNBQWMsRUFBRSxHQUFHO0tBQ3RCLENBQUM7QUFDTixDQUFDLENBQUMsQ0FBQztBQUNILDZNQUE2TTtBQUM3TSxNQUFNLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDeEMsaU1BQWlNO0FBQ2pNLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFbkQsK0tBQStLO0FBQy9LLFNBQVMsd0JBQXdCLENBQUMsUUFBMkI7SUFDekQsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRCxJQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JELElBQUksS0FBSyxHQUFHLFlBQVksSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELElBQUks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YWNoaW5nXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBpc05vZGUsIHNvcnQsIHRpbWVJbkhvdXIsIHRpbWVJbk1pbnV0ZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvYmF0Y2hpbmdcIjtcbmltcG9ydCB7IGZvcm1hdE51bWJlciwgZm9ybWF0VGltZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2Zvcm1hdHRpbmcvZm9ybWF0XCI7XG5pbXBvcnQgeyBibHVlLCBncmVlbiwgbWFnZW50YSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2Zvcm1hdHRpbmcvbG9nQ29sb3JzXCI7XG5pbXBvcnQgZGVidWdicmVhayBmcm9tIFwiZGVidWdicmVha1wiO1xuaW1wb3J0IGRucyBmcm9tIFwiZG5zXCI7XG5pbXBvcnQgeyBnZXRTZWNyZXQgfSBmcm9tIFwiLi4vbWlzYy9nZXRTZWNyZXRcIjtcbmltcG9ydCB7IGh0dHBzUmVxdWVzdCwgSHR0cHNSZXNwb25zZUluZm8gfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9odHRwc1wiO1xuaW1wb3J0IHsgSUFyY2hpdmVzLCBBcmNoaXZlc0NvbmZpZywgQ2hhbmdlc0FmdGVyQ29uZmlnLCBBcmNoaXZlRmlsZUluZm8sIERlbENvbmZpZywgRmluZENvbmZpZywgR2V0Q29uZmlnLCBHZXRJbmZvQ29uZmlnLCBTZXRDb25maWcsIGFzc2VydFZhbGlkTGFzdE1vZGlmaWVkLCBidWZmZXJDaHVua1N0cmVhbSwgSU1NVVRBQkxFX0NBQ0hFX1RJTUUgfSBmcm9tIFwiLi9JQXJjaGl2ZXNcIjtcbmltcG9ydCB7IGZpbHRlckNoYW5nZXMgfSBmcm9tIFwiLi9yZW1vdGVTdG9yYWdlL3JlbW90ZUNvbmZpZ1wiO1xuXG50eXBlIEJhY2tibGF6ZUNyZWRzID0ge1xuICAgIGFwcGxpY2F0aW9uS2V5SWQ6IHN0cmluZztcbiAgICBhcHBsaWNhdGlvbktleTogc3RyaW5nO1xufTtcblxubGV0IGJhY2tibGF6ZUNyZWRzID0gbGF6eShhc3luYyAoKTogUHJvbWlzZTxCYWNrYmxhemVDcmVkcz4gPT4ge1xuICAgIGxldCBrZXlJZCA9IGF3YWl0IGdldFNlY3JldChcImJhY2tibGF6ZS5qc29uLmFwcGxpY2F0aW9uS2V5SWRcIik7XG4gICAgbGV0IGtleSA9IGF3YWl0IGdldFNlY3JldChcImJhY2tibGF6ZS5qc29uLmFwcGxpY2F0aW9uS2V5XCIpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFwcGxpY2F0aW9uS2V5SWQ6IGtleUlkLFxuICAgICAgICBhcHBsaWNhdGlvbktleToga2V5LFxuICAgIH07XG59KTtcbi8vIEIyJ3MgbWluaW11bSBtYXhBZ2VTZWNvbmRzIGlzIDYwIC0gYW55dGhpbmcgbG93ZXIgZ2V0cyBidW1wZWQgdG8gNjAgc2VydmVyLXNpZGUsIHNvIGEgc21hbGxlciBkZWZhdWx0IHdvdWxkIG5ldmVyIG1hdGNoIHdoYXQgdGhlIGJ1Y2tldCBhY3R1YWxseSBzdG9yZXMgYW5kIHdlIHdvdWxkIHJld3JpdGUgaXRzIHNldHRpbmdzIG9uIGV2ZXJ5IHN0YXJ0dXBcbmNvbnN0IE1JTl9CVUNLRVRfQ0FDSEVfVElNRSA9IDYwICogMTAwMDtcbi8vIEJhY2tibGF6ZSByZXF1aXJlcyA1TUIgY2h1bmtzIGZvciBsYXJnZSBmaWxlcywgYnV0IGxhcmdlciBpcyBtb3JlIGVmZmljaWVudCBmb3IgdXMgKGFuZCB0aGVpciBcImxhc3QgcGFydFwiIHNpemUgY2hlY2sgbWlzYmVoYXZlcyBvbiByZXRyaWVzLCB3aGljaCBjaHVua3MgdGhpcyBiaWcgc2lkZXN0ZXAgLSBzZWUgc2V0TGFyZ2VGaWxlKVxuY29uc3QgTEFSR0VfRklMRV9NSU5fQ0hVTktfU0laRSA9IDMyICogMTAyNCAqIDEwMjQ7XG5cbi8vIEEgQjIgZG93bmxvYWQvSEVBRCByZXNwb25zZSdzIGhlYWRlcnMgY2FycnkgdGhlIGZpbGUncyBtZXRhZGF0YS4gY29udGVudC1yYW5nZSdzIHRvdGFsIHdpbnMgb3ZlciBjb250ZW50LWxlbmd0aCBmb3IgcmFuZ2VkIHJlc3BvbnNlcyAod2hpY2ggb25seSByZXBvcnQgdGhlIHNsaWNlJ3MgbGVuZ3RoKS5cbmZ1bmN0aW9uIHBhcnNlRmlsZU1ldGFkYXRhSGVhZGVycyhyZXNwb25zZTogSHR0cHNSZXNwb25zZUluZm8pOiB7IHNpemU6IG51bWJlcjsgdXBsb2FkVGltZXN0YW1wOiBudW1iZXIgfSB7XG4gICAgbGV0IHNpemUgPSBOdW1iZXIocmVzcG9uc2UuaGVhZGVyc1tcImNvbnRlbnQtbGVuZ3RoXCJdIHx8IDApO1xuICAgIGxldCBjb250ZW50UmFuZ2UgPSByZXNwb25zZS5oZWFkZXJzW1wiY29udGVudC1yYW5nZVwiXTtcbiAgICBsZXQgdG90YWwgPSBjb250ZW50UmFuZ2UgJiYgTnVtYmVyKGNvbnRlbnRSYW5nZS5zcGxpdChcIi9cIilbMV0pO1xuICAgIGlmICh0b3RhbCAmJiBOdW1iZXIuaXNGaW5pdGUodG90YWwpKSB7XG4gICAgICAgIHNpemUgPSB0b3RhbDtcbiAgICB9XG4gICAgcmV0dXJuIHsgc2l6ZSwgdXBsb2FkVGltZXN0YW1wOiBOdW1iZXIocmVzcG9uc2UuaGVhZGVyc1tcIngtYnotdXBsb2FkLXRpbWVzdGFtcFwiXSB8fCAwKSB9O1xufVxuXG5jb25zdCBnZXRBUEkgPSBsYXp5KGFzeW5jICgpID0+IHtcbiAgICBsZXQgY3JlZHMgPSBhd2FpdCBiYWNrYmxhemVDcmVkcygpO1xuXG4gICAgLy8gTk9URTogT24gZXJyb3JzLCBvdXIgcmV0cnkgY29kZSByZXNldHMgdGhpcyBsYXp5LCBzbyB3ZSBETyBnZXQgbmV3IGF1dGhvcml6ZSB3aGVuIG5lZWRlZC5cbiAgICAvLyBUT0RPOiBNYXliZSB3ZSBzaG91bGQgZ2V0IG5ldyBhdXRob3JpemF0aW9uIHBlcmlvZGljYWxseSBhdCB3ZWxsP1xuICAgIGxldCBhdXRob3JpemVSYXcgPSBhd2FpdCBodHRwc1JlcXVlc3QoXCJodHRwczovL2FwaS5iYWNrYmxhemViMi5jb20vYjJhcGkvdjIvYjJfYXV0aG9yaXplX2FjY291bnRcIiwgdW5kZWZpbmVkLCBcIkdFVFwiLCB1bmRlZmluZWQsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogXCJCYXNpYyBcIiArIEJ1ZmZlci5mcm9tKGNyZWRzLmFwcGxpY2F0aW9uS2V5SWQgKyBcIjpcIiArIGNyZWRzLmFwcGxpY2F0aW9uS2V5KS50b1N0cmluZyhcImJhc2U2NFwiKSxcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IGF1dGggPSBKU09OLnBhcnNlKGF1dGhvcml6ZVJhdy50b1N0cmluZygpKSBhcyB7XG4gICAgICAgIGFjY291bnRJZDogc3RyaW5nO1xuICAgICAgICBhdXRob3JpemF0aW9uVG9rZW46IHN0cmluZztcbiAgICAgICAgYXBpVXJsOiBzdHJpbmc7XG4gICAgICAgIGRvd25sb2FkVXJsOiBzdHJpbmc7XG4gICAgICAgIGFsbG93ZWQ6IHtcbiAgICAgICAgICAgIGJ1Y2tldElkOiBzdHJpbmc7XG4gICAgICAgICAgICBidWNrZXROYW1lOiBzdHJpbmc7XG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IHN0cmluZ1tdO1xuICAgICAgICAgICAgbmFtZVByZWZpeDogc3RyaW5nO1xuICAgICAgICB9W107XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUIyRnVuY3Rpb248QXJnLCBSZXN1bHQ+KG5hbWU6IHN0cmluZywgdHlwZTogXCJQT1NUXCIgfCBcIkdFVFwiLCBub0FjY291bnRJZD86IFwibm9BY2NvdW50SWRcIik6IChhcmc6IEFyZykgPT4gUHJvbWlzZTxSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIGFzeW5jIChhcmc6IEFyZykgPT4ge1xuICAgICAgICAgICAgaWYgKCFub0FjY291bnRJZCkge1xuICAgICAgICAgICAgICAgIGFyZyA9IHsgYWNjb3VudElkOiBhdXRoLmFjY291bnRJZCwgLi4uYXJnIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBhdXRoLmFwaVVybCArIFwiL2IyYXBpL3YyL1wiICsgbmFtZTtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgaHR0cHNSZXF1ZXN0KHVybCwgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoYXJnKSksIHR5cGUsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBhdXRoLmF1dGhvcml6YXRpb25Ub2tlbixcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJlc3VsdC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgaW4gJHtuYW1lfSwgYXJnICR7SlNPTi5zdHJpbmdpZnkoYXJnKS5zbGljZSgwLCAxMDAwKX06ICR7ZS5zdGFja31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBjcmVhdGVCdWNrZXQgPSBjcmVhdGVCMkZ1bmN0aW9uPHtcbiAgICAgICAgYnVja2V0TmFtZTogc3RyaW5nO1xuICAgICAgICBidWNrZXRUeXBlOiBcImFsbFByaXZhdGVcIiB8IFwiYWxsUHVibGljXCI7XG4gICAgICAgIGxpZmVjeWNsZVJ1bGVzPzogYW55W107XG4gICAgICAgIGNvcnNSdWxlcz86IHVua25vd25bXTtcbiAgICAgICAgYnVja2V0SW5mbz86IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgICAgIH07XG4gICAgfSwge1xuICAgICAgICBhY2NvdW50SWQ6IHN0cmluZztcbiAgICAgICAgYnVja2V0SWQ6IHN0cmluZztcbiAgICAgICAgYnVja2V0TmFtZTogc3RyaW5nO1xuICAgICAgICBidWNrZXRUeXBlOiBcImFsbFByaXZhdGVcIiB8IFwiYWxsUHVibGljXCI7XG4gICAgICAgIGJ1Y2tldEluZm86IHtcbiAgICAgICAgICAgIGxpZmVjeWNsZVJ1bGVzOiBhbnlbXTtcbiAgICAgICAgfTtcbiAgICAgICAgY29yc1J1bGVzOiBhbnlbXTtcbiAgICAgICAgbGlmZWN5Y2xlUnVsZXM6IGFueVtdO1xuICAgICAgICByZXZpc2lvbjogbnVtYmVyO1xuICAgIH0+KFwiYjJfY3JlYXRlX2J1Y2tldFwiLCBcIlBPU1RcIik7XG5cbiAgICBjb25zdCB1cGRhdGVCdWNrZXQgPSBjcmVhdGVCMkZ1bmN0aW9uPHtcbiAgICAgICAgYWNjb3VudElkOiBzdHJpbmc7XG4gICAgICAgIGJ1Y2tldElkOiBzdHJpbmc7XG4gICAgICAgIGJ1Y2tldFR5cGU/OiBcImFsbFByaXZhdGVcIiB8IFwiYWxsUHVibGljXCI7XG4gICAgICAgIGxpZmVjeWNsZVJ1bGVzPzogYW55W107XG4gICAgICAgIGJ1Y2tldEluZm8/OiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgICAgICB9O1xuICAgICAgICBjb3JzUnVsZXM/OiB1bmtub3duW107XG4gICAgfSwge1xuICAgICAgICBhY2NvdW50SWQ6IHN0cmluZztcbiAgICAgICAgYnVja2V0SWQ6IHN0cmluZztcbiAgICAgICAgYnVja2V0TmFtZTogc3RyaW5nO1xuICAgICAgICBidWNrZXRUeXBlOiBcImFsbFByaXZhdGVcIiB8IFwiYWxsUHVibGljXCI7XG4gICAgICAgIGJ1Y2tldEluZm86IHtcbiAgICAgICAgICAgIGxpZmVjeWNsZVJ1bGVzOiBhbnlbXTtcbiAgICAgICAgfTtcbiAgICAgICAgY29yc1J1bGVzOiBhbnlbXTtcbiAgICAgICAgbGlmZWN5Y2xlUnVsZXM6IGFueVtdO1xuICAgICAgICByZXZpc2lvbjogbnVtYmVyO1xuICAgIH0+KFwiYjJfdXBkYXRlX2J1Y2tldFwiLCBcIlBPU1RcIik7XG5cbiAgICAvLyBodHRwczovL3d3dy5iYWNrYmxhemUuY29tL2FwaWRvY3MvYjItdXBkYXRlLWJ1Y2tldFxuICAgIC8vICBUT0RPOiBiMl91cGRhdGVfYnVja2V0LCBzbyB3ZSBjYW4gdXBkYXRlIENPUlMsIGV0Y1xuXG4gICAgY29uc3QgbGlzdEJ1Y2tldHMgPSBjcmVhdGVCMkZ1bmN0aW9uPHtcbiAgICAgICAgYnVja2V0TmFtZT86IHN0cmluZztcbiAgICB9LCB7XG4gICAgICAgIGJ1Y2tldHM6IHtcbiAgICAgICAgICAgIGFjY291bnRJZDogc3RyaW5nO1xuICAgICAgICAgICAgYnVja2V0SWQ6IHN0cmluZztcbiAgICAgICAgICAgIGJ1Y2tldE5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIGJ1Y2tldFR5cGU6IFwiYWxsUHJpdmF0ZVwiIHwgXCJhbGxQdWJsaWNcIjtcbiAgICAgICAgICAgIGJ1Y2tldEluZm86IHtcbiAgICAgICAgICAgICAgICBsaWZlY3ljbGVSdWxlczogYW55W107XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29yc1J1bGVzOiBhbnlbXTtcbiAgICAgICAgICAgIGxpZmVjeWNsZVJ1bGVzOiBhbnlbXTtcbiAgICAgICAgICAgIHJldmlzaW9uOiBudW1iZXI7XG4gICAgICAgIH1bXTtcbiAgICB9PihcImIyX2xpc3RfYnVja2V0c1wiLCBcIlBPU1RcIik7XG5cbiAgICBmdW5jdGlvbiBlbmNvZGVQYXRoKHBhdGg6IHN0cmluZykge1xuICAgICAgICAvLyBQcmVzZXJ2ZSBzbGFzaGVzLCBidXQgZW5jb2RlIGV2ZXJ5dGhpbmcgZWxzZVxuICAgICAgICBwYXRoID0gcGF0aC5zcGxpdChcIi9cIikubWFwKGVuY29kZVVSSUNvbXBvbmVudCkuam9pbihcIi9cIik7XG4gICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSBwYXRoID0gXCIlMkZcIiArIHBhdGguc2xpY2UoMSk7XG4gICAgICAgIGlmIChwYXRoLmVuZHNXaXRoKFwiL1wiKSkgcGF0aCA9IHBhdGguc2xpY2UoMCwgLTEpICsgXCIlMkZcIjtcbiAgICAgICAgLy8gTk9URTogRm9yIHNvbWUgcmVhc29uLCB0aGlzIHdvbid0IHJlbmRlciBpbiB0aGUgd2ViIFVJIGNvcnJlY3RseS4gQlVULCBpdCdsbFxuICAgICAgICAvLyAgd29yayBnZXQgZ2V0L3NldCBhbmQgZmluZFxuICAgICAgICAvLyAgLSBBTFNPLCBpdCBzZWVtcyB0byBhZGQgZHVwbGljYXRlIGZpbGVzPyBUaGlzIG1pZ2h0IGFsc28gYmUgYSB3ZWIgVUkgdGhpbmcuIEl0IHNlZW1zIHRvIHdvcmsgdGhvdWdoLlxuICAgICAgICB3aGlsZSAocGF0aC5pbmNsdWRlcyhcIi8vXCIpKSB7XG4gICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlQWxsKFwiLy9cIiwgXCIvJTJGXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkRmlsZUJ5TmFtZShjb25maWc6IHtcbiAgICAgICAgYnVja2V0TmFtZTogc3RyaW5nO1xuICAgICAgICBmaWxlTmFtZTogc3RyaW5nO1xuICAgICAgICByYW5nZT86IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXI7IH07XG4gICAgICAgIC8vIENhcHR1cmVzIHRoZSByZXNwb25zZSBoZWFkZXJzLCB3aGljaCBjYXJyeSB0aGUgZmlsZSdzIG1ldGFkYXRhICh4LWJ6LXVwbG9hZC10aW1lc3RhbXAsIGNvbnRlbnQtbGVuZ3RoIC8gY29udGVudC1yYW5nZSkgLSBzbyBjYWxsZXJzIHRoYXQgbmVlZCBpdCBkb24ndCBwYXkgYSBzZWNvbmQgQVBJIGNhbGxcbiAgICAgICAgb3V0UmVzcG9uc2U/OiBIdHRwc1Jlc3BvbnNlSW5mbztcbiAgICB9KSB7XG4gICAgICAgIGxldCBmaWxlTmFtZSA9IGVuY29kZVBhdGgoY29uZmlnLmZpbGVOYW1lKTtcblxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgaHR0cHNSZXF1ZXN0KGF1dGguYXBpVXJsICsgXCIvZmlsZS9cIiArIGNvbmZpZy5idWNrZXROYW1lICsgXCIvXCIgKyBmaWxlTmFtZSwgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgYWNjb3VudElkOiBhdXRoLmFjY291bnRJZCxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJhcnJheWJ1ZmZlclwiLFxuICAgICAgICB9KSksIFwiR0VUXCIsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgaGVhZGVyczogT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHtcbiAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBhdXRoLmF1dGhvcml6YXRpb25Ub2tlbixcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICBSYW5nZTogY29uZmlnLnJhbmdlID8gYGJ5dGVzPSR7Y29uZmlnLnJhbmdlLnN0YXJ0fS0ke2NvbmZpZy5yYW5nZS5lbmQgLSAxfWAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KS5maWx0ZXIoeCA9PiB4WzFdICE9PSB1bmRlZmluZWQpKSxcbiAgICAgICAgICAgIG91dFJlc3BvbnNlOiBjb25maWcub3V0UmVzcG9uc2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKiBBIGZpbGUncyBtZXRhZGF0YSBieSBuYW1lLCB3aXRob3V0IHRoZSBib2R5OiBIRUFEIG9uIHRoZSBkb3dubG9hZCBVUkwsIHdoaWNoIGlzIGEgY2xhc3MgQiAoZG93bmxvYWQtcHJpY2VkKSB0cmFuc2FjdGlvbiAtIGIyX2xpc3RfZmlsZV9uYW1lcyBpcyBjbGFzcyBDIGF0IDEweCB0aGUgcHJpY2UsIGFuZCBiMl9nZXRfZmlsZV9pbmZvIG5lZWRzIGEgZmlsZUlkIHdlIGRvbid0IGhhdmUuIFJldHVybnMgdW5kZWZpbmVkIGZvciBtaXNzaW5nIChvciBoaWRkZW4pIGZpbGVzLiAqL1xuICAgIGFzeW5jIGZ1bmN0aW9uIGhlYWRGaWxlQnlOYW1lKGNvbmZpZzogeyBidWNrZXROYW1lOiBzdHJpbmc7IGZpbGVOYW1lOiBzdHJpbmcgfSk6IFByb21pc2U8eyBzaXplOiBudW1iZXI7IHVwbG9hZFRpbWVzdGFtcDogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gZW5jb2RlUGF0aChjb25maWcuZmlsZU5hbWUpO1xuICAgICAgICBsZXQgcmVzcG9uc2U6IEh0dHBzUmVzcG9uc2VJbmZvID0geyBoZWFkZXJzOiB7fSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgaHR0cHNSZXF1ZXN0KGF1dGguYXBpVXJsICsgXCIvZmlsZS9cIiArIGNvbmZpZy5idWNrZXROYW1lICsgXCIvXCIgKyBmaWxlTmFtZSwgdW5kZWZpbmVkLCBcIkhFQURcIiwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBhdXRoLmF1dGhvcml6YXRpb25Ub2tlbiB9LFxuICAgICAgICAgICAgICAgIG91dFJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gNDA0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgLy8gSEVBRCByZXNwb25zZXMgaGF2ZSBubyBib2R5LCBzbyB0aGUgZXhwaXJlZF9hdXRoX3Rva2VuIG1hcmtlciBhcGlSZXRyeUxvZ2ljIG1hdGNoZXMgb24gbmV2ZXIgYXBwZWFycyAtIHJlLWFkZCBpdCBzbyBhbiBleHBpcmVkIHRva2VuIHN0aWxsIHJlZnJlc2hlcyBhbmQgcmV0cmllc1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPT09IDQwMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgXCJleHBpcmVkX2F1dGhfdG9rZW5cIiBIRUFEICR7Y29uZmlnLmJ1Y2tldE5hbWV9LyR7Y29uZmlnLmZpbGVOYW1lfSBnb3QgYSA0MDE6ICR7KGUgYXMgRXJyb3IpLnN0YWNrID8/IGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZUZpbGVNZXRhZGF0YUhlYWRlcnMocmVzcG9uc2UpO1xuICAgIH1cblxuICAgIC8vIE9oLi4uIGFwcGFyZW50bHksIHdlIGNhbid0IHJldXNlIHRoZXNlPyBIdWguLi5cbiAgICBjb25zdCBnZXRVcGxvYWRVUkwgPSAoYXN5bmMgKGJ1Y2tldElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiBnZXRVcGxvYWRVUkwuY2xlYXIoYnVja2V0SWQpLCB0aW1lSW5Ib3VyICogMSk7XG4gICAgICAgIGxldCBnZXRVcGxvYWRVcmxSYXcgPSBhd2FpdCBodHRwc1JlcXVlc3QoYXV0aC5hcGlVcmwgKyBcIi9iMmFwaS92Mi9iMl9nZXRfdXBsb2FkX3VybD9idWNrZXRJZD1cIiArIGJ1Y2tldElkLCB1bmRlZmluZWQsIFwiR0VUXCIsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGF1dGguYXV0aG9yaXphdGlvblRva2VuLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShnZXRVcGxvYWRVcmxSYXcudG9TdHJpbmcoKSkgYXMge1xuICAgICAgICAgICAgYnVja2V0SWQ6IHN0cmluZztcbiAgICAgICAgICAgIHVwbG9hZFVybDogc3RyaW5nO1xuICAgICAgICAgICAgYXV0aG9yaXphdGlvblRva2VuOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiB1cGxvYWRGaWxlKGNvbmZpZzoge1xuICAgICAgICBidWNrZXRJZDogc3RyaW5nO1xuICAgICAgICBmaWxlTmFtZTogc3RyaW5nO1xuICAgICAgICBkYXRhOiBCdWZmZXI7XG4gICAgfSkge1xuICAgICAgICBsZXQgZ2V0VXBsb2FkVXJsID0gYXdhaXQgZ2V0VXBsb2FkVVJMKGNvbmZpZy5idWNrZXRJZCk7XG5cbiAgICAgICAgYXdhaXQgaHR0cHNSZXF1ZXN0KGdldFVwbG9hZFVybC51cGxvYWRVcmwsIGNvbmZpZy5kYXRhLCBcIlBPU1RcIiwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogZ2V0VXBsb2FkVXJsLmF1dGhvcml6YXRpb25Ub2tlbixcbiAgICAgICAgICAgICAgICBcIlgtQnotRmlsZS1OYW1lXCI6IGVuY29kZVBhdGgoY29uZmlnLmZpbGVOYW1lKSxcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImIyL3gtYXV0b1wiLFxuICAgICAgICAgICAgICAgIFwiWC1Cei1Db250ZW50LVNoYTFcIjogXCJkb19ub3RfdmVyaWZ5XCIsXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LUxlbmd0aFwiOiBjb25maWcuZGF0YS5sZW5ndGggKyBcIlwiLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBoaWRlRmlsZSA9IGNyZWF0ZUIyRnVuY3Rpb248e1xuICAgICAgICBidWNrZXRJZDogc3RyaW5nO1xuICAgICAgICBmaWxlTmFtZTogc3RyaW5nO1xuICAgIH0sIHt9PihcImIyX2hpZGVfZmlsZVwiLCBcIlBPU1RcIiwgXCJub0FjY291bnRJZFwiKTtcblxuICAgIGNvbnN0IGdldEZpbGVJbmZvID0gY3JlYXRlQjJGdW5jdGlvbjx7XG4gICAgICAgIGJ1Y2tldE5hbWU6IHN0cmluZztcbiAgICAgICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgfSwge1xuICAgICAgICBmaWxlSWQ6IHN0cmluZztcbiAgICAgICAgZmlsZU5hbWU6IHN0cmluZztcbiAgICAgICAgYWNjb3VudElkOiBzdHJpbmc7XG4gICAgICAgIGJ1Y2tldElkOiBzdHJpbmc7XG4gICAgICAgIGNvbnRlbnRMZW5ndGg6IG51bWJlcjtcbiAgICAgICAgY29udGVudFNoYTE6IHN0cmluZztcbiAgICAgICAgY29udGVudFR5cGU6IHN0cmluZztcbiAgICAgICAgZmlsZUluZm86IHtcbiAgICAgICAgICAgIHNyY19sYXN0X21vZGlmaWVkX21pbGxpczogbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgICBhY3Rpb246IHN0cmluZztcbiAgICAgICAgdXBsb2FkVGltZXN0YW1wOiBudW1iZXI7XG4gICAgfT4oXCJiMl9nZXRfZmlsZV9pbmZvXCIsIFwiUE9TVFwiLCBcIm5vQWNjb3VudElkXCIpO1xuXG4gICAgY29uc3QgbGlzdEZpbGVOYW1lcyA9IGNyZWF0ZUIyRnVuY3Rpb248e1xuICAgICAgICBidWNrZXRJZDogc3RyaW5nO1xuICAgICAgICBwcmVmaXg6IHN0cmluZztcbiAgICAgICAgc3RhcnRGaWxlTmFtZT86IHN0cmluZztcbiAgICAgICAgbWF4RmlsZUNvdW50PzogbnVtYmVyO1xuICAgICAgICBkZWxpbWl0ZXI/OiBzdHJpbmc7XG4gICAgfSwge1xuICAgICAgICBmaWxlczoge1xuICAgICAgICAgICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgICAgICAgICBmaWxlTmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgYWNjb3VudElkOiBzdHJpbmc7XG4gICAgICAgICAgICBidWNrZXRJZDogc3RyaW5nO1xuICAgICAgICAgICAgY29udGVudExlbmd0aDogbnVtYmVyO1xuICAgICAgICAgICAgY29udGVudFNoYTE6IHN0cmluZztcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gICAgICAgICAgICBmaWxlSW5mbzoge1xuICAgICAgICAgICAgICAgIHNyY19sYXN0X21vZGlmaWVkX21pbGxpczogbnVtYmVyO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFjdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAgdXBsb2FkVGltZXN0YW1wOiBudW1iZXI7XG4gICAgICAgIH1bXTtcbiAgICAgICAgbmV4dEZpbGVOYW1lOiBzdHJpbmc7XG4gICAgfT4oXCJiMl9saXN0X2ZpbGVfbmFtZXNcIiwgXCJQT1NUXCIsIFwibm9BY2NvdW50SWRcIik7XG5cbiAgICBjb25zdCBjb3B5RmlsZSA9IGNyZWF0ZUIyRnVuY3Rpb248e1xuICAgICAgICBzb3VyY2VGaWxlSWQ6IHN0cmluZztcbiAgICAgICAgZmlsZU5hbWU6IHN0cmluZztcbiAgICAgICAgZGVzdGluYXRpb25CdWNrZXRJZDogc3RyaW5nO1xuICAgIH0sIHt9PihcImIyX2NvcHlfZmlsZVwiLCBcIlBPU1RcIiwgXCJub0FjY291bnRJZFwiKTtcblxuICAgIGNvbnN0IHN0YXJ0TGFyZ2VGaWxlID0gY3JlYXRlQjJGdW5jdGlvbjx7XG4gICAgICAgIGJ1Y2tldElkOiBzdHJpbmc7XG4gICAgICAgIGZpbGVOYW1lOiBzdHJpbmc7XG4gICAgICAgIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gICAgICAgIGZpbGVJbmZvOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIH0sIHtcbiAgICAgICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgICAgIGZpbGVOYW1lOiBzdHJpbmc7XG4gICAgICAgIGFjY291bnRJZDogc3RyaW5nO1xuICAgICAgICBidWNrZXRJZDogc3RyaW5nO1xuICAgICAgICBjb250ZW50VHlwZTogc3RyaW5nO1xuICAgICAgICBmaWxlSW5mbzogYW55O1xuICAgICAgICB1cGxvYWRUaW1lc3RhbXA6IG51bWJlcjtcbiAgICB9PihcImIyX3N0YXJ0X2xhcmdlX2ZpbGVcIiwgXCJQT1NUXCIsIFwibm9BY2NvdW50SWRcIik7XG5cbiAgICAvLyBBcHBhcmVudGx5IHdlIGNhbid0IHJldXNlIHRoZXNlP1xuICAgIGNvbnN0IGdldFVwbG9hZFBhcnRVUkwgPSAoYXN5bmMgKGZpbGVJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGxldCB1cGxvYWRQYXJ0UmF3ID0gYXdhaXQgaHR0cHNSZXF1ZXN0KGF1dGguYXBpVXJsICsgXCIvYjJhcGkvdjIvYjJfZ2V0X3VwbG9hZF9wYXJ0X3VybD9maWxlSWQ9XCIgKyBmaWxlSWQsIHVuZGVmaW5lZCwgXCJHRVRcIiwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYXV0aC5hdXRob3JpemF0aW9uVG9rZW4sXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh1cGxvYWRQYXJ0UmF3LnRvU3RyaW5nKCkpIGFzIHtcbiAgICAgICAgICAgIGZpbGVJZDogc3RyaW5nO1xuICAgICAgICAgICAgcGFydE51bWJlcjogbnVtYmVyO1xuICAgICAgICAgICAgdXBsb2FkVXJsOiBzdHJpbmc7XG4gICAgICAgICAgICBhdXRob3JpemF0aW9uVG9rZW46IHN0cmluZztcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICBhc3luYyBmdW5jdGlvbiB1cGxvYWRQYXJ0KGNvbmZpZzoge1xuICAgICAgICBmaWxlSWQ6IHN0cmluZztcbiAgICAgICAgcGFydE51bWJlcjogbnVtYmVyO1xuICAgICAgICBkYXRhOiBCdWZmZXI7XG4gICAgICAgIHNoYTE6IHN0cmluZztcbiAgICB9KTogUHJvbWlzZTx7XG4gICAgICAgIGZpbGVJZDogc3RyaW5nO1xuICAgICAgICBwYXJ0TnVtYmVyOiBudW1iZXI7XG4gICAgICAgIGNvbnRlbnRMZW5ndGg6IG51bWJlcjtcbiAgICAgICAgY29udGVudFNoYTE6IHN0cmluZztcbiAgICB9PiB7XG4gICAgICAgIGxldCB1cGxvYWRQYXJ0ID0gYXdhaXQgZ2V0VXBsb2FkUGFydFVSTChjb25maWcuZmlsZUlkKTtcblxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgaHR0cHNSZXF1ZXN0KHVwbG9hZFBhcnQudXBsb2FkVXJsLCBjb25maWcuZGF0YSwgXCJQT1NUXCIsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IHVwbG9hZFBhcnQuYXV0aG9yaXphdGlvblRva2VuLFxuICAgICAgICAgICAgICAgIFwiWC1Cei1QYXJ0LU51bWJlclwiOiBjb25maWcucGFydE51bWJlciArIFwiXCIsXG4gICAgICAgICAgICAgICAgXCJYLUJ6LUNvbnRlbnQtU2hhMVwiOiBjb25maWcuc2hhMSxcbiAgICAgICAgICAgICAgICBcIkNvbnRlbnQtTGVuZ3RoXCI6IGNvbmZpZy5kYXRhLmxlbmd0aCArIFwiXCIsXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJlc3VsdC50b1N0cmluZygpKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hMYXJnZUZpbGUgPSBjcmVhdGVCMkZ1bmN0aW9uPHtcbiAgICAgICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgICAgIHBhcnRTaGExQXJyYXk6IHN0cmluZ1tdO1xuICAgIH0sIHtcbiAgICAgICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgICAgIGZpbGVOYW1lOiBzdHJpbmc7XG4gICAgICAgIGFjY291bnRJZDogc3RyaW5nO1xuICAgICAgICBidWNrZXRJZDogc3RyaW5nO1xuICAgICAgICBjb250ZW50TGVuZ3RoOiBudW1iZXI7XG4gICAgICAgIGNvbnRlbnRTaGExOiBzdHJpbmc7XG4gICAgICAgIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gICAgICAgIGZpbGVJbmZvOiBhbnk7XG4gICAgICAgIHVwbG9hZFRpbWVzdGFtcDogbnVtYmVyO1xuICAgIH0+KFwiYjJfZmluaXNoX2xhcmdlX2ZpbGVcIiwgXCJQT1NUXCIsIFwibm9BY2NvdW50SWRcIik7XG5cbiAgICBjb25zdCBjYW5jZWxMYXJnZUZpbGUgPSBjcmVhdGVCMkZ1bmN0aW9uPHtcbiAgICAgICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgfSwge30+KFwiYjJfY2FuY2VsX2xhcmdlX2ZpbGVcIiwgXCJQT1NUXCIsIFwibm9BY2NvdW50SWRcIik7XG5cbiAgICBjb25zdCBnZXREb3dubG9hZEF1dGhvcml6YXRpb24gPSBjcmVhdGVCMkZ1bmN0aW9uPHtcbiAgICAgICAgYnVja2V0SWQ6IHN0cmluZztcbiAgICAgICAgZmlsZU5hbWVQcmVmaXg6IHN0cmluZztcbiAgICAgICAgdmFsaWREdXJhdGlvbkluU2Vjb25kczogbnVtYmVyO1xuICAgICAgICBiMkNvbnRlbnREaXNwb3NpdGlvbj86IHN0cmluZztcbiAgICAgICAgYjJDb250ZW50TGFuZ3VhZ2U/OiBzdHJpbmc7XG4gICAgICAgIGIyRXhwaXJlcz86IHN0cmluZztcbiAgICAgICAgYjJDYWNoZUNvbnRyb2w/OiBzdHJpbmc7XG4gICAgICAgIGIyQ29udGVudEVuY29kaW5nPzogc3RyaW5nO1xuICAgICAgICBiMkNvbnRlbnRUeXBlPzogc3RyaW5nO1xuICAgIH0sIHtcbiAgICAgICAgYnVja2V0SWQ6IHN0cmluZztcbiAgICAgICAgZmlsZU5hbWVQcmVmaXg6IHN0cmluZztcbiAgICAgICAgYXV0aG9yaXphdGlvblRva2VuOiBzdHJpbmc7XG4gICAgfT4oXCJiMl9nZXRfZG93bmxvYWRfYXV0aG9yaXphdGlvblwiLCBcIlBPU1RcIiwgXCJub0FjY291bnRJZFwiKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldERvd25sb2FkVVJMKHBhdGg6IHN0cmluZykge1xuICAgICAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIHBhdGggPSBcIi9cIiArIHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF1dGguZG93bmxvYWRVcmwgKyBwYXRoO1xuICAgIH1cblxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY3JlYXRlQnVja2V0LFxuICAgICAgICB1cGRhdGVCdWNrZXQsXG4gICAgICAgIGxpc3RCdWNrZXRzLFxuICAgICAgICBkb3dubG9hZEZpbGVCeU5hbWUsXG4gICAgICAgIGhlYWRGaWxlQnlOYW1lLFxuICAgICAgICB1cGxvYWRGaWxlLFxuICAgICAgICBoaWRlRmlsZSxcbiAgICAgICAgZ2V0RmlsZUluZm8sXG4gICAgICAgIGxpc3RGaWxlTmFtZXMsXG4gICAgICAgIGNvcHlGaWxlLFxuICAgICAgICBzdGFydExhcmdlRmlsZSxcbiAgICAgICAgdXBsb2FkUGFydCxcbiAgICAgICAgZmluaXNoTGFyZ2VGaWxlLFxuICAgICAgICBjYW5jZWxMYXJnZUZpbGUsXG4gICAgICAgIGdldERvd25sb2FkQXV0aG9yaXphdGlvbixcbiAgICAgICAgZ2V0RG93bmxvYWRVUkwsXG4gICAgICAgIGFwaVVybDogYXV0aC5hcGlVcmwsXG4gICAgICAgIGFsbG93ZWQ6IGF1dGguYWxsb3dlZCxcbiAgICB9O1xufSk7XG5cbnR5cGUgQjJBcGkgPSAodHlwZW9mIGdldEFQSSkgZXh0ZW5kcyAoKSA9PiBQcm9taXNlPGluZmVyIFQ+ID8gVCA6IG5ldmVyO1xuXG5cbmV4cG9ydCBjbGFzcyBBcmNoaXZlc0JhY2tibGF6ZSBpbXBsZW1lbnRzIElBcmNoaXZlcyB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiB7XG4gICAgICAgIGJ1Y2tldE5hbWU6IHN0cmluZztcbiAgICAgICAgcHVibGljPzogYm9vbGVhbjtcbiAgICAgICAgaW1tdXRhYmxlPzogYm9vbGVhbjtcbiAgICAgICAgY2FjaGVUaW1lPzogbnVtYmVyO1xuICAgICAgICBhbGxvd2VkT3JpZ2lucz86IHN0cmluZ1tdO1xuICAgIH0pIHtcbiAgICAgICAgLy8gR2V0IHRoZSBhcGksIHRvIHNldHVwIGNvcnNcbiAgICAgICAgdm9pZCB0aGlzLmdldEJ1Y2tldEFQSSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVja2V0TmFtZSA9IHRoaXMuY29uZmlnLmJ1Y2tldE5hbWUucmVwbGFjZUFsbCgvW15cXHdcXGRdL2csIFwiLVwiKTtcbiAgICBwcml2YXRlIGJ1Y2tldElkID0gXCJcIjtcblxuICAgIHByaXZhdGUgbG9nZ2luZyA9IGZhbHNlO1xuICAgIHB1YmxpYyBlbmFibGVMb2dnaW5nKCkge1xuICAgICAgICB0aGlzLmxvZ2dpbmcgPSB0cnVlO1xuICAgIH1cbiAgICBwcml2YXRlIGxvZyh0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvZ2dpbmcpIHJldHVybjtcbiAgICAgICAgY29uc29sZS5sb2codGV4dCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERlYnVnTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiYmFja2JsYXplIFwiICsgdGhpcy5jb25maWcuYnVja2V0TmFtZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJ1Y2tldEFQSSA9IGxhenkoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgYXBpID0gYXdhaXQgZ2V0QVBJKCk7XG5cbiAgICAgICAgbGV0IGNhY2hlVGltZSA9IE1hdGgubWF4KHRoaXMuY29uZmlnLmNhY2hlVGltZSA/PyAwLCBNSU5fQlVDS0VUX0NBQ0hFX1RJTUUpO1xuICAgICAgICBpZiAodGhpcy5jb25maWcuaW1tdXRhYmxlKSB7XG4gICAgICAgICAgICBjYWNoZVRpbWUgPSBJTU1VVEFCTEVfQ0FDSEVfVElNRTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFMV0FZUyBzZXQgYWNjZXNzIGNvbnRyb2wsIGFzIHdlIGNhbiBtYWtlIHVybHMgZm9yIHByaXZhdGUgYnVja2V0cyB3aXRoIGdldERvd25sb2FkQXV0aG9yaXphdGlvblxuICAgICAgICBsZXQgZGVzaXJlZENvcnNSdWxlcyA9IFt7XG4gICAgICAgICAgICBjb3JzUnVsZU5hbWU6IFwiYWxsb3dBbGxcIixcbiAgICAgICAgICAgIGFsbG93ZWRPcmlnaW5zOiB0aGlzLmNvbmZpZy5hbGxvd2VkT3JpZ2lucyA/PyBbXCJodHRwc1wiXSxcbiAgICAgICAgICAgIGFsbG93ZWRPcGVyYXRpb25zOiBbXCJiMl9kb3dubG9hZF9maWxlX2J5X2lkXCIsIFwiYjJfZG93bmxvYWRfZmlsZV9ieV9uYW1lXCJdLFxuICAgICAgICAgICAgYWxsb3dlZEhlYWRlcnM6IFtcInJhbmdlXCJdLFxuICAgICAgICAgICAgZXhwb3NlSGVhZGVyczogW1wieC1iei1jb250ZW50LXNoYTFcIl0sXG4gICAgICAgICAgICBtYXhBZ2VTZWNvbmRzOiBjYWNoZVRpbWUgLyAxMDAwLFxuICAgICAgICB9XTtcbiAgICAgICAgbGV0IGJ1Y2tldEluZm86IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICAgIGlmIChjYWNoZVRpbWUpIHtcbiAgICAgICAgICAgIGJ1Y2tldEluZm9bXCJjYWNoZS1jb250cm9sXCJdID0gYG1heC1hZ2U9JHtjYWNoZVRpbWUgLyAxMDAwfWA7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGxldCBleGlzdHMgPSBmYWxzZTtcbiAgICAgICAgbGV0IHJldHJpZXMgPSAwO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBhcGkuY3JlYXRlQnVja2V0KHtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0TmFtZTogdGhpcy5idWNrZXROYW1lLFxuICAgICAgICAgICAgICAgICAgICBidWNrZXRUeXBlOiB0aGlzLmNvbmZpZy5wdWJsaWMgPyBcImFsbFB1YmxpY1wiIDogXCJhbGxQcml2YXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGxpZmVjeWNsZVJ1bGVzOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXlzRnJvbVVwbG9hZGluZ1RvSGlkaW5nXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBLZWVwIGZpbGVzIGZvciA3IGRheXMsIHdoaWNoIHNob3VsZCBiZSBlbm91Z2ggdGltZSB0byByZWNvdmVyIGFjY2lkZW50YWwgaGlkaW5nLlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXlzRnJvbUhpZGluZ1RvRGVsZXRpbmdcIjogNyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlsZU5hbWVQcmVmaXhcIjogXCJcIlxuICAgICAgICAgICAgICAgICAgICB9XSxcbiAgICAgICAgICAgICAgICAgICAgY29yc1J1bGVzOiBkZXNpcmVkQ29yc1J1bGVzLFxuICAgICAgICAgICAgICAgICAgICBidWNrZXRJbmZvXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWUuc3RhY2suaW5jbHVkZXMoYFwiZHVwbGljYXRlX2J1Y2tldF9uYW1lXCJgKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmV0cmllcyA8IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEJhY2tibGF6ZSBjcmVhdGUgYnVja2V0IGZhaWxlZCwgcmV0cnlpbmcgaW4gNXM6ICR7ZS5zdGFja31gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5KDUwMDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0cmllcysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGJ1Y2tldExpc3QgPSBhd2FpdCBhcGkubGlzdEJ1Y2tldHMoe1xuICAgICAgICAgICAgYnVja2V0TmFtZTogdGhpcy5idWNrZXROYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGJ1Y2tldExpc3QuYnVja2V0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQnVja2V0IG5hbWUgXCIke3RoaXMuYnVja2V0TmFtZX1cIiBpcyBiZWluZyB1c2VkIGJ5IHNvbWVvbmUgZWxzZS4gQnVja2V0IG5hbWVzIGhhdmUgdG8gYmUgZ2xvYmFsbHkgdW5pcXVlLiBUcnkgYSBkaWZmZXJlbnQgbmFtZSB1bnRpbCB5b3UgZmluZCBhIGZyZWUgb25lLmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVja2V0SWQgPSBidWNrZXRMaXN0LmJ1Y2tldHNbMF0uYnVja2V0SWQ7XG5cbiAgICAgICAgaWYgKGV4aXN0cykge1xuICAgICAgICAgICAgbGV0IGJ1Y2tldCA9IGJ1Y2tldExpc3QuYnVja2V0c1swXTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZShvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gICAgICAgICAgICAgICAgbGV0IGt2cHMgPSBPYmplY3QuZW50cmllcyhvYmopO1xuICAgICAgICAgICAgICAgIHNvcnQoa3ZwcywgeCA9PiB4WzBdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGt2cHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gb3JkZXJJbmRlcGVuZGVudEVxdWFsKGxoczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJoczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplKGxocykpID09PSBKU09OLnN0cmluZ2lmeShub3JtYWxpemUocmhzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBvcmRlckluZGVwZW5kZW50RXF1YWxBcnJheShsaHM6IHVua25vd25bXSwgcmhzOiB1bmtub3duW10pIHtcbiAgICAgICAgICAgICAgICBpZiAobGhzLmxlbmd0aCAhPT0gcmhzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghb3JkZXJJbmRlcGVuZGVudEVxdWFsKGxoc1tpXSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcmhzW2ldIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjb3JzQ2hhbmdlZCA9ICFvcmRlckluZGVwZW5kZW50RXF1YWxBcnJheShidWNrZXQuY29yc1J1bGVzLCBkZXNpcmVkQ29yc1J1bGVzKTtcbiAgICAgICAgICAgIGxldCBpbmZvQ2hhbmdlZCA9ICFvcmRlckluZGVwZW5kZW50RXF1YWwoYnVja2V0LmJ1Y2tldEluZm8sIGJ1Y2tldEluZm8pO1xuICAgICAgICAgICAgaWYgKGNvcnNDaGFuZ2VkIHx8IGluZm9DaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cobWFnZW50YShgVXBkYXRpbmcgYnVja2V0IHNldHRpbmdzIGZvciAke3RoaXMuYnVja2V0TmFtZX0gKGNvcnNSdWxlcyAke2NvcnNDaGFuZ2VkICYmIFwiY2hhbmdlZFwiIHx8IFwidW5jaGFuZ2VkXCJ9LCBidWNrZXRJbmZvICR7aW5mb0NoYW5nZWQgJiYgXCJjaGFuZ2VkXCIgfHwgXCJ1bmNoYW5nZWRcIn0pOiBjb3JzUnVsZXMgJHtKU09OLnN0cmluZ2lmeShidWNrZXQuY29yc1J1bGVzKX0gLT4gJHtKU09OLnN0cmluZ2lmeShkZXNpcmVkQ29yc1J1bGVzKX0sIGJ1Y2tldEluZm8gJHtKU09OLnN0cmluZ2lmeShidWNrZXQuYnVja2V0SW5mbyl9IC0+ICR7SlNPTi5zdHJpbmdpZnkoYnVja2V0SW5mbyl9YCkpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGFwaS51cGRhdGVCdWNrZXQoe1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50SWQ6IGJ1Y2tldC5hY2NvdW50SWQsXG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldElkOiBidWNrZXQuYnVja2V0SWQsXG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldFR5cGU6IGJ1Y2tldC5idWNrZXRUeXBlLFxuICAgICAgICAgICAgICAgICAgICBsaWZlY3ljbGVSdWxlczogYnVja2V0LmxpZmVjeWNsZVJ1bGVzLFxuICAgICAgICAgICAgICAgICAgICBjb3JzUnVsZXM6IGRlc2lyZWRDb3JzUnVsZXMsXG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldEluZm86IGJ1Y2tldEluZm8sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwaTtcbiAgICB9KTtcblxuICAgIHByaXZhdGUgY3VycmVudFJlc2V0OiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkO1xuXG4gICAgLy8gS2VlcCB0cmFjayBvZiB3aGVuIHdlIGxhc3QgcmVzZXQgYmVjYXVzZSBvZiBhIDUwM1xuICAgIHByaXZhdGUgbGFzdDUwM1Jlc2V0ID0gMDtcbiAgICAvLyBJTVBPUlRBTlQhIFdlIG11c3QgYWx3YXlzIENBVENIIEFST1VORCB0aGUgYXBpUmV0cnlMb2dpYywgTkVWRVIgaW5zaWRlIG9mIGZuYy4gT3RoZXJ3aXNlIHdlIHdvbid0IGJlIGFibGUgdG8gcmVjcmVhdGUgdGhlIGF1dGggdG9rZW4uIGBjb250ZXh0YCBpcyBhIHNob3J0IGxhYmVsICh2ZXJiICsgZmlsZSBwYXRoKSBpbmNsdWRlZCBpbiBldmVyeSByZXRyeS9lcnJvciBsb2cgc28gYSBzdHVjayBzaWxlbnQtcmV0cnkgbG9vcCBpcyBpZGVudGlmaWFibGUgZnJvbSB0aGUgbG9ncy5cbiAgICBwcml2YXRlIGFzeW5jIGFwaVJldHJ5TG9naWM8VD4oXG4gICAgICAgIGNvbnRleHQ6IHN0cmluZyxcbiAgICAgICAgZm5jOiAoYXBpOiBCMkFwaSkgPT4gUHJvbWlzZTxUPixcbiAgICAgICAgcmV0cmllcyA9IDNcbiAgICApOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgbGV0IGFwaTogQjJBcGkgfCB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhcGkgPSBhd2FpdCB0aGlzLmdldEJ1Y2tldEFQSSgpO1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZuYyhhcGkpO1xuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgaWYgKHJldHJpZXMgPD0gMCkgdGhyb3cgZXJyO1xuXG4gICAgICAgICAgICAvLyBJZiBpdCdzIGEgNTAzIGFuZCBpdCdzIGJlZW4gYSBtaW51dGUgc2luY2Ugd2UgbGFzdCByZXNldCwgdGhlbiBXYWl0IGFuZCByZXNldC5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoZXJyLnN0YWNrLmluY2x1ZGVzKGBcInN0YXR1c1wiOiA1MDNgKVxuICAgICAgICAgICAgICAgICAgICB8fCBlcnIuc3RhY2suaW5jbHVkZXMoYFwic2VydmljZV91bmF2YWlsYWJsZVwiYClcbiAgICAgICAgICAgICAgICAgICAgfHwgZXJyLnN0YWNrLmluY2x1ZGVzKGBcImludGVybmFsX2Vycm9yXCJgKVxuICAgICAgICAgICAgICAgICAgICB8fCBlcnIuc3RhY2suaW5jbHVkZXMoYEVOT0JVRlNgKVxuICAgICAgICAgICAgICAgICkgJiYgRGF0ZS5ub3coKSAtIHRoaXMubGFzdDUwM1Jlc2V0ID4gNjAgKiAxMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gQmFja2JsYXplIGlzIHNvIGZsYWt5IHRoYXQgd2UncmUganVzdCBnb2luZyB0byB3YXJuIGhlcmUuXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBbJHtjb250ZXh0fV0gQmFja2JsYXplIGVycm9yLCB3YWl0aW5nIGFuZCByZXNldHRpbmc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2coYFske2NvbnRleHR9XSBCYWNrYmxhemUgZXJyb3IsIHdhaXRpbmcgYW5kIHJlc2V0dGluZzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRSZXNldCA9IHRoaXMuY3VycmVudFJlc2V0IHx8IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGRlbGF5KDEwICogMTAwMCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGNoZWNrIGFnYWluIGluIGNhc2UsIGFuZCBpbiB0aGUgdmVyeSBsaWtlbHkgY2FzZSB0aGF0IHRoaXMgaXMgYmVpbmcgcnVuIGluIHBhcmFsbGVsLCB3ZSBvbmx5IHdhbnQgdG8gcmVzZXQgb25jZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKERhdGUubm93KCkgLSB0aGlzLmxhc3Q1MDNSZXNldCA+IDYwICogMTAwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2coYFske2NvbnRleHR9XSBSZXNldHRpbmcgZ2V0QVBJIGFuZCBnZXRCdWNrZXRBUEk6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3Q1MDNSZXNldCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRBUEkucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QnVja2V0QVBJLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSgpLmZpbmFsbHkoKCkgPT4gdGhpcy5jdXJyZW50UmVzZXQgPSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY3VycmVudFJlc2V0O1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwaVJldHJ5TG9naWMoY29udGV4dCwgZm5jLCByZXRyaWVzIC0gMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBlcnJvciBpcyB0aGF0IHRoZSBhdXRob3JpemF0aW9uIHRva2VuIGlzIGludmFsaWQsIHJlc2V0IGdldEJ1Y2tldEFQSSBhbmQgZ2V0QVBJIElmIHRoZSBlcnJvciBpcyB0aGF0IHRoZSBidWNrZXQgaXNuJ3QgZm91bmQsIHJlc2V0IGdldEJ1Y2tldEFQSVxuICAgICAgICAgICAgaWYgKGVyci5zdGFjay5pbmNsdWRlcyhgXCJleHBpcmVkX2F1dGhfdG9rZW5cImApKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2coYFske2NvbnRleHR9XSBBdXRob3JpemF0aW9uIHRva2VuIGV4cGlyZWRgKTtcbiAgICAgICAgICAgICAgICBnZXRBUEkucmVzZXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJ1Y2tldEFQSS5yZXNldCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwaVJldHJ5TG9naWMoY29udGV4dCwgZm5jLCByZXRyaWVzIC0gMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlcnIuc3RhY2suaW5jbHVkZXMoYG5vIHRvbWVzIGF2YWlsYWJsZWApXG4gICAgICAgICAgICAgICAgfHwgZXJyLnN0YWNrLmluY2x1ZGVzKGBFVElNRURPVVRgKVxuICAgICAgICAgICAgICAgIHx8IGVyci5zdGFjay5pbmNsdWRlcyhgc29ja2V0IGhhbmcgdXBgKVxuICAgICAgICAgICAgICAgIC8vIEVoLi4uIHRoaXMgbWlnaHQgYmUgYmFkLCBidXQuLi4gSSB0aGluayB3ZSBqdXN0IGdldCByYW5kb20gNDAwIGVycm9ycy4gSWYgdGhpcyBzcGFtcyBlcnJvcnMsIHdlIGNhbiByZW1vdmUgdGhpcyBsaW5lLlxuICAgICAgICAgICAgICAgIHx8IGVyci5zdGFjay5pbmNsdWRlcyhgNDAwIEJhZCBSZXF1ZXN0YClcbiAgICAgICAgICAgICAgICB8fCBlcnIuc3RhY2suaW5jbHVkZXMoYGdldGFkZHJpbmZvIEVOT1RGT1VORGApXG4gICAgICAgICAgICAgICAgfHwgZXJyLnN0YWNrLmluY2x1ZGVzKGBFQ09OTlJFU0VUYClcbiAgICAgICAgICAgICAgICB8fCBlcnIuc3RhY2suaW5jbHVkZXMoYEVDT05OUkVGVVNFRGApXG4gICAgICAgICAgICAgICAgfHwgZXJyLnN0YWNrLmluY2x1ZGVzKGBFTk9CVUZTYClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgWyR7Y29udGV4dH1dIFJldHJ5aW5nIGluIDVzOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgIHRoaXMubG9nKGBbJHtjb250ZXh0fV0gJHtlcnIubWVzc2FnZX0gcmV0cnlpbmcgaW4gNXNgKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBkZWxheSg1MDAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcGlSZXRyeUxvZ2ljKGNvbnRleHQsIGZuYywgcmV0cmllcyAtIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXJyLnN0YWNrLmluY2x1ZGVzKGBnZXRhZGRyaW5mbyBFTk9URk9VTkRgKSkge1xuICAgICAgICAgICAgICAgIGlmIChhcGkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybE9iaiA9IG5ldyBVUkwoYXBpLmFwaVVybCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBob3N0bmFtZSA9IHVybE9iai5ob3N0bmFtZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxvb2t1cEFkZHJlc3NlcyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG5zLmxvb2t1cChob3N0bmFtZSwgKGVyciwgYWRkcmVzc2VzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShhZGRyZXNzZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzb2x2ZUFkZHJlc3NlcyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG5zLnJlc29sdmU0KGhvc3RuYW1lLCAoZXJyLCBhZGRyZXNzZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGFkZHJlc3Nlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFske2NvbnRleHR9XSBnZXRhZGRyaW5mbyBFTk9URk9VTkQgJHtob3N0bmFtZX1gLCB7IGxvb2t1cEFkZHJlc3NlcywgcmVzb2x2ZUFkZHJlc3NlcywgYXBpVXJsOiBhcGkuYXBpVXJsLCBmdWxsRXJyb3I6IGVyci5zdGFjayB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXQoZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogR2V0Q29uZmlnKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0MihmaWxlTmFtZSwgY29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQuZGF0YSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBnZXQyKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IEdldENvbmZpZyk6IFByb21pc2U8eyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBsZXQgZG93bmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgY29uc3QgZG93bmxvYWRQb2xsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZG93bmxvYWRpbmcpIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZyhgQmFja2JsYXplIGRvd25sb2FkIGluIHByb2dyZXNzICR7ZmlsZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChkb3dubG9hZFBvbGwsIDUwMDApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZG93bmxvYWRQb2xsLCA1MDAwKTtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLmFwaVJldHJ5TG9naWMoYGdldCAke2ZpbGVOYW1lfWAsIGFzeW5jIChhcGkpOiBQcm9taXNlPHsgZGF0YTogQnVmZmVyOyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+ID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmFuZ2UgPSBjb25maWc/LnJhbmdlO1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgY2xhbXAgbmVlZHMgdGhlIGZpbGUncyBzaXplIChhbmQgZ2l2ZXMgdXMgaXRzIG1ldGFkYXRhIGZvciBmcmVlKS4gVGhlIHRvbWJzdG9uZSBmbGFnIGZvcndhcmRzOiB3aXRob3V0IGl0IGEgZGVsZXRlZCBmaWxlJ3MgaW5mbyBpcyBoaWRkZW4sIHNvIHRoZSByYW5nZWQgcmVhZCByZXBvcnRzIGFic2VudCB0b28uXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWxlSW5mbyA9IGF3YWl0IHRoaXMuZ2V0SW5mbyhmaWxlTmFtZSwgeyBpbmNsdWRlVG9tYnN0b25lczogY29uZmlnPy5pbmNsdWRlVG9tYnN0b25lcyB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWxlSW5mbykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJhbmdlU3RhcnQgPSByYW5nZS5zdGFydDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJhbmdlRW5kID0gTWF0aC5taW4ocmFuZ2UuZW5kLCBmaWxlSW5mby5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogSSB0aGluayBpZiB3ZSByZXF1ZXN0IG5vdGhpbmcsIGl0IGNvbmZ1c2VzIEJhY2tibGF6ZSBhbmQgZW5kcyB1cCBnaXZpbmcgdXMgdGhlIGVudGlyZSBmaWxlLlxuICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2VFbmQgPD0gcmFuZ2VTdGFydCkgcmV0dXJuIHsgZGF0YTogQnVmZmVyLmFsbG9jKDApLCB3cml0ZVRpbWU6IGZpbGVJbmZvLndyaXRlVGltZSwgc2l6ZTogZmlsZUluZm8uc2l6ZSB9O1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IGFwaS5kb3dubG9hZEZpbGVCeU5hbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0TmFtZTogdGhpcy5idWNrZXROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZTogeyBzdGFydDogcmFuZ2VTdGFydCwgZW5kOiByYW5nZUVuZCB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3RoICE9PSByYW5nZUVuZCAtIHJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEJhY2tibGF6ZSByYW5nZSBkb3dubG9hZCByZXR1cm5lZCB0aGUgd3JvbmcgbnVtYmVyIG9mIGJ5dGVzLiBUcmllZCB0byBnZXQgJHtyYW5nZVN0YXJ0fS0ke3JhbmdlRW5kfSwgYnV0IHJlY2VpdmVkICR7cmFuZ2VTdGFydH0tJHtyYW5nZVN0YXJ0ICsgZGF0YS5sZW5ndGh9LiBGb3IgZmlsZTogJHtmaWxlTmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCB3cml0ZVRpbWU6IGZpbGVJbmZvLndyaXRlVGltZSwgc2l6ZTogZmlsZUluZm8uc2l6ZSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUaGUgZG93bmxvYWQncyBvd24gcmVzcG9uc2UgaGVhZGVycyBjYXJyeSB0aGUgbWV0YWRhdGEsIHNvIGEgZnVsbCByZWFkIGlzIGEgc2luZ2xlIEFQSSBjYWxsXG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlOiBIdHRwc1Jlc3BvbnNlSW5mbyA9IHsgaGVhZGVyczoge30gfTtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGF3YWl0IGFwaS5kb3dubG9hZEZpbGVCeU5hbWUoe1xuICAgICAgICAgICAgICAgICAgICBidWNrZXROYW1lOiB0aGlzLmJ1Y2tldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBvdXRSZXNwb25zZTogcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gQmFja2JsYXplIHN0b3JlcyB0aGlzIHN5c3RlbSdzIGRlbGV0aW9ucyBhcyBSRUFMIGVtcHR5IGZpbGVzIChpdHMgaGlkZSB3b3VsZCBtYWtlIHRoZW0gaW52aXNpYmxlIHRvIHNjYW5zKSwgc28gYW4gZW1wdHkgZG93bmxvYWQgSVMgYSB0b21ic3RvbmUgLSBhYnNlbnQsIHVubGVzcyB0aGUgY2FsbGVyIGFza2VkIHRvIHNlZSB0b21ic3RvbmVzXG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhLmxlbmd0aCAmJiAhY29uZmlnPy5pbmNsdWRlVG9tYnN0b25lcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZyhgYmFja2JsYXplIGZpbGUgaXMgYSB0b21ic3RvbmUgKGRlbGV0ZWQpICR7ZmlsZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBtZXRhID0gcGFyc2VGaWxlTWV0YWRhdGFIZWFkZXJzKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCB3cml0ZVRpbWU6IG1ldGEudXBsb2FkVGltZXN0YW1wLCBzaXplOiBkYXRhLmxlbmd0aCB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCB0aW1lU3RyID0gZm9ybWF0VGltZShEYXRlLm5vdygpIC0gdGltZSk7XG4gICAgICAgICAgICBsZXQgcmF0ZVN0ciA9IGZvcm1hdE51bWJlcihyZXN1bHQuZGF0YS5sZW5ndGggLyAoRGF0ZS5ub3coKSAtIHRpbWUpICogMTAwMCkgKyBcIkIvc1wiO1xuICAgICAgICAgICAgdGhpcy5sb2coYGJhY2tibGF6ZSBkb3dubG9hZCAoJHtmb3JtYXROdW1iZXIocmVzdWx0LmRhdGEubGVuZ3RoKX1CJHtjb25maWc/LnJhbmdlICYmIGAsICR7Zm9ybWF0TnVtYmVyKGNvbmZpZy5yYW5nZS5zdGFydCl9IC0gJHtmb3JtYXROdW1iZXIoY29uZmlnLnJhbmdlLmVuZCl9YCB8fCBcIlwifSkgaW4gJHt0aW1lU3RyfSAoJHtyYXRlU3RyfSwgJHtmaWxlTmFtZX0pYCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBPbmx5IGdlbnVpbmUgYWJzZW5jZSBtYXkgYmVjb21lIHVuZGVmaW5lZDogY2FsbGVycyB0cmVhdCB1bmRlZmluZWQgYXMgYXV0aG9yaXRhdGl2ZSBcInRoZSBidWNrZXQgZG9lcyBub3QgaG9sZCB0aGlzIGZpbGVcIiAoQmxvYlN0b3JlIGV2ZW4gZGVsZXRlcyBpbmRleCBlbnRyaWVzIG92ZXIgaXQpLCBzbyBhIHRyYW5zaWVudCBmYWlsdXJlICg1MDMsIGF1dGgsIHRpbWVvdXQpIG11c3QgdGhyb3cgaW5zdGVhZCBvZiBtYXNxdWVyYWRpbmcgYXMgYSBtaXNzaW5nIGZpbGVcbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0gU3RyaW5nKChlIGFzIEVycm9yKS5zdGFjayA/PyBlKTtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKGBcIm5vdF9mb3VuZFwiYCkgfHwgbWVzc2FnZS5pbmNsdWRlcyhgZmlsZV9ub3RfZm91bmRgKSB8fCBtZXNzYWdlLmluY2x1ZGVzKGBub3QgZm91bmRgKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nKGBiYWNrYmxhemUgZmlsZSBkb2VzIG5vdCBleGlzdCAke2ZpbGVOYW1lfWApO1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnKCk6IFByb21pc2U8QXJjaGl2ZXNDb25maWc+IHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgaGFzV3JpdGVBY2Nlc3MoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgYXBpID0gYXdhaXQgZ2V0QVBJKCk7XG4gICAgICAgICAgICAvLyBCMiB2MiBkb2N1bWVudHMgYWxsb3dlZCBhcyBhIHNpbmdsZSBvYmplY3Q7IG91ciB0eXBlIHNheXMgYSBsaXN0IC0gaGFuZGxlIGJvdGhcbiAgICAgICAgICAgIGxldCBhbGxvd2VkUmF3ID0gYXBpLmFsbG93ZWQgYXMgdW5rbm93bjtcbiAgICAgICAgICAgIGxldCBhbGxvd2VkTGlzdCA9IChBcnJheS5pc0FycmF5KGFsbG93ZWRSYXcpICYmIGFsbG93ZWRSYXcgfHwgW2FsbG93ZWRSYXddKSBhcyB0eXBlb2YgYXBpLmFsbG93ZWQ7XG4gICAgICAgICAgICByZXR1cm4gYWxsb3dlZExpc3Quc29tZShhbGxvd2VkID0+XG4gICAgICAgICAgICAgICAgYWxsb3dlZC5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoXCJ3cml0ZUZpbGVzXCIpXG4gICAgICAgICAgICAgICAgJiYgKCFhbGxvd2VkLmJ1Y2tldE5hbWUgfHwgYWxsb3dlZC5idWNrZXROYW1lID09PSB0aGlzLmJ1Y2tldE5hbWUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBObyAvIGludmFsaWQgY3JlZGVudGlhbHNcbiAgICAgICAgICAgIHRoaXMubG9nKGBiYWNrYmxhemUgaGFzV3JpdGVBY2Nlc3MgY2hlY2sgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5zdGFjayA/PyBlfWApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBzZXQoZmlsZU5hbWU6IHN0cmluZywgZGF0YTogQnVmZmVyLCBjb25maWc/OiBTZXRDb25maWcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBpZiAoIWRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNldCB3YXMgY2FsbGVkIHdpdGggYW4gZW1wdHkgYnVmZmVyIGZvciAke0pTT04uc3RyaW5naWZ5KGZpbGVOYW1lKX0gb24gJHt0aGlzLmdldERlYnVnTmFtZSgpfTogYW4gZW1wdHkgZmlsZSBJUyBhIGRlbGV0aW9uIGluIHRoaXMgc3lzdGVtIGFuZCB3b3VsZCByZWFkIGJhY2sgYXMgbWlzc2luZyAtIGNhbGwgZGVsIGluc3RlYWRgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnPy5mb3JjZVNldEltbXV0YWJsZSAmJiAhY29uZmlnLmxhc3RNb2RpZmllZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBmb3JjZVNldEltbXV0YWJsZSByZXF1aXJlcyBsYXN0TW9kaWZpZWQgKHN5bmNocm9uaXphdGlvbiB3cml0ZXMgYXJlIG9yZGVyZWQgYnkgdGhlaXIgd3JpdGUgdGltZSksIHdyaXRpbmcgJHtmaWxlTmFtZX0gdG8gJHt0aGlzLmdldERlYnVnTmFtZSgpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWc/Lmxhc3RNb2RpZmllZCkge1xuICAgICAgICAgICAgYXNzZXJ0VmFsaWRMYXN0TW9kaWZpZWQoY29uZmlnLmxhc3RNb2RpZmllZCk7XG4gICAgICAgICAgICAvLyBUaGlzIGNvbXBhcmlzb24gZGVsaWJlcmF0ZWx5IElHTk9SRVMgbm9DaGVja3M6IGJhY2tibGF6ZSBoYXMgbm8gc2VydmVyIG9mIG91cnMgdG8gZW5mb3JjZSBvbmx5LXRha2UtdGhlLWxhdGVzdCAodW5saWtlIGhvc3RlZCB0YXJnZXRzLCB3aGVyZSB0aGUgcmVjZWl2aW5nIHN0b3JlIHJlLWNoZWNrcyksIHNvIHRoaXMgY29tcGFyaXNvbiBJUyB0aGUgb3JkZXJpbmcgZ3VhcmQuIFNraXBwaW5nIGl0IGxldHMgYSBzdGFsZSBwdXNoIGxhbmQgb3ZlciBhIG5ld2VyIHZhbHVlIG9yIHRvbWJzdG9uZSAtIGFuZCBiZWNhdXNlIGIyIHN0YW1wcyBpdHMgb3duIHVwbG9hZCB0aW1lcywgdGhlIHN0YWxlIGRhdGEgdGhlbiBiZWNvbWVzIHRoZSBuZXdlc3QtdGltZXN0YW1wZWQgY29weSBpbiB0aGUgd2hvbGUgc3lzdGVtLCByZXN1cnJlY3RpbmcgZ2xvYmFsbHkgdGhyb3VnaCBldmVyeW9uZSdzIHNjYW5zLiBpbmNsdWRlVG9tYnN0b25lczogYSBkZWxldGlvbiBvbiBiMiBpcyBhIHJlYWwgc2l6ZS0wIGZpbGUgYW5kIG11c3Qgd2luIHRoaXMgY29tcGFyaXNvbiB0b28uXG4gICAgICAgICAgICBsZXQgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLmdldEluZm8oZmlsZU5hbWUsIHsgaW5jbHVkZVRvbWJzdG9uZXM6IHRydWUgfSk7XG4gICAgICAgICAgICAvLyBBbiBvbGRlciB3cml0ZSBuZXZlciBvdmVyd3JpdGVzIGEgbmV3ZXIgb25lIChzZWUgSUFyY2hpdmVzLnNldCkuIEIyIHN0YW1wcyBpdHMgb3duIHVwbG9hZCB0aW1lLCBzbyB0aGUgZXhhY3QgbGFzdE1vZGlmaWVkIGlzIG5vdCBwcmVzZXJ2ZWQgb24gdGhlIHN0b3JlZCBmaWxlLlxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGNvbmZpZy5sYXN0TW9kaWZpZWQgPCBleGlzdGluZy53cml0ZVRpbWUpIHJldHVybiBmaWxlTmFtZTtcbiAgICAgICAgICAgIC8vIEltbXV0YWJpbGl0eSB3aW5zOiBhIHN5bmNocm9uaXphdGlvbiBwdXNoIG5ldmVyIG92ZXJ3cml0ZXMgYW4gZXhpc3RpbmcgcGF0aCBvbiBhbiBpbW11dGFibGUgYnVja2V0IChzZWUgU2V0Q29uZmlnLmZvcmNlU2V0SW1tdXRhYmxlKVxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGNvbmZpZy5mb3JjZVNldEltbXV0YWJsZSAmJiB0aGlzLmNvbmZpZy5pbW11dGFibGUpIHJldHVybiBmaWxlTmFtZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBCaWcgYnVmZmVycyBzdHJlYW0gdGhyb3VnaCB0aGUgbGFyZ2UtZmlsZSBBUEk6IGEgZmFpbGVkIHBhcnQgcmV0cmllcyBhbG9uZSBpbnN0ZWFkIG9mIHJlc3RhcnRpbmcgdGhlIHdob2xlIHVwbG9hZC4gVGhlIHRocmVzaG9sZCBNVVNUIHN0YXkgYXQgdHdvIGZ1bGwgY2h1bmtzIC0gYmVsb3cgdGhhdCBzZXRMYXJnZUZpbGUgZmFsbHMgYmFjayB0byBwbGFpbiBzZXQsIHdoaWNoIHdvdWxkIHJlY3Vyc2UgcmlnaHQgYmFjayBoZXJlLlxuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPj0gTEFSR0VfRklMRV9NSU5fQ0hVTktfU0laRSAqIDIpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0TGFyZ2VGaWxlKHsgcGF0aDogZmlsZU5hbWUsIGxhc3RNb2RpZmllZDogY29uZmlnPy5sYXN0TW9kaWZpZWQsIGdldE5leHREYXRhOiBidWZmZXJDaHVua1N0cmVhbShkYXRhKSB9KTtcbiAgICAgICAgICAgIHJldHVybiBmaWxlTmFtZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZyhgYmFja2JsYXplIHVwbG9hZCAoJHtmb3JtYXROdW1iZXIoZGF0YS5sZW5ndGgpfUIpICR7ZmlsZU5hbWV9YCk7XG4gICAgICAgIGxldCBmID0gZmlsZU5hbWU7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBpUmV0cnlMb2dpYyhgdXBsb2FkRmlsZSAke2ZpbGVOYW1lfWAsIGFzeW5jIChhcGkpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGFwaS51cGxvYWRGaWxlKHsgYnVja2V0SWQ6IHRoaXMuYnVja2V0SWQsIGZpbGVOYW1lLCBkYXRhOiBkYXRhLCB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghY29uZmlnPy5ub0NoZWNrcykge1xuICAgICAgICAgICAgbGV0IGV4aXN0c0NoZWNrcyA9IDMwO1xuICAgICAgICAgICAgd2hpbGUgKGV4aXN0c0NoZWNrcyA+IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgZXhpc3RzID0gYXdhaXQgdGhpcy5nZXRJbmZvKGZpbGVOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RzKSBicmVhaztcbiAgICAgICAgICAgICAgICBhd2FpdCBkZWxheSgxMDAwKTtcbiAgICAgICAgICAgICAgICBleGlzdHNDaGVja3MtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChleGlzdHNDaGVja3MgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgZXhpc3RzID0gYXdhaXQgdGhpcy5nZXRJbmZvKGZpbGVOYW1lKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEZpbGUgJHtmaWxlTmFtZX0vJHtmfSB3YXMgdXBsb2FkZWQsIGJ1dCBjb3VsZCBub3QgYmUgZm91bmQgYWZ0ZXJ3YXJkcy4gSG9wZWZ1bGx5IGl0IHdhcyBqdXN0IGRlbGV0ZWQsIHZlcnkgcXVpY2tseT8gSWYgYmFja2JsYXplIGlzIHRha2luZyB0b28gbG9uZyBmb3IgZmlsZXMgdG8gcHJvcGFnYXRlLCB0aGVuIHdlIG1pZ2h0IHJ1biBpbnRvIGlzc3VlcyB3aXRoIHRoZSBkYXRhYmFzZSBhdG9taWNpdHkuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbGVOYW1lO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgZGVsKGZpbGVOYW1lOiBzdHJpbmcsIGNvbmZpZz86IERlbENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoY29uZmlnPy5sYXN0TW9kaWZpZWQpIHtcbiAgICAgICAgICAgIC8vIEEgc3luY2hyb25pemVkIGRlbGV0aW9uOiBiMidzIGhpZGUgcmVtb3ZlcyB0aGUgZmlsZSBmcm9tIGxpc3RpbmdzIGVudGlyZWx5LCBzbyBwZWVycyBzY2FubmluZyB0aGUgYnVja2V0IGNvdWxkIG5ldmVyIGxlYXJuIG9mIGl0LiBJbnN0ZWFkIHRoZSB0b21ic3RvbmUgaXMgc3RvcmVkIGFzIGEgUkVBTCBlbXB0eSBmaWxlIChhbiBlbXB0eSBmaWxlIElTIGEgbWlzc2luZyBmaWxlKSwgd2hpY2ggbGlzdGluZ3Mgc2hvdyBhbmQgc2NhbnMgaW5nZXN0IGFzIGEgZGVsZXRpb24uIChiMiBzdGFtcHMgaXRzIG93biB1cGxvYWQgdGltZSwgc28gdGhlIGV4YWN0IGRlbGV0aW9uIHRpbWUgaXMgbm90IHByZXNlcnZlZCBoZXJlIC0gc2FtZSBhcyBldmVyeSBiMiB3cml0ZS4pXG4gICAgICAgICAgICAvLyBUaGUgY29tcGFyaXNvbiBpZ25vcmVzIG5vQ2hlY2tzIGZvciB0aGUgc2FtZSByZWFzb24gYXMgaW4gc2V0OiBvbiBiMiBpdCBJUyB0aGUgb3JkZXJpbmcgZ3VhcmRcbiAgICAgICAgICAgIGxldCBleGlzdGluZyA9IGF3YWl0IHRoaXMuZ2V0SW5mbyhmaWxlTmFtZSwgeyBpbmNsdWRlVG9tYnN0b25lczogdHJ1ZSB9KTtcbiAgICAgICAgICAgIGlmIChleGlzdGluZyAmJiBjb25maWcubGFzdE1vZGlmaWVkIDwgZXhpc3Rpbmcud3JpdGVUaW1lKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLmxvZyhgYmFja2JsYXplIHRvbWJzdG9uZSB1cGxvYWQgJHtmaWxlTmFtZX1gKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYXBpUmV0cnlMb2dpYyhgZGVsICR7ZmlsZU5hbWV9YCwgYXN5bmMgKGFwaSkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IGFwaS51cGxvYWRGaWxlKHsgYnVja2V0SWQ6IHRoaXMuYnVja2V0SWQsIGZpbGVOYW1lLCBkYXRhOiBCdWZmZXIuYWxsb2MoMCkgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZyhgYmFja2JsYXplIGRlbGV0ZSAke2ZpbGVOYW1lfWApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hcGlSZXRyeUxvZ2ljKGBoaWRlRmlsZSAke2ZpbGVOYW1lfWAsIGFzeW5jIChhcGkpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBhcGkuaGlkZUZpbGUoeyBidWNrZXRJZDogdGhpcy5idWNrZXRJZCwgZmlsZU5hbWU6IGZpbGVOYW1lIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgdGhpcy5sb2coYGJhY2tibGF6ZSBlcnJvciBpbiBoaWRlLCBwb3NzaWJseSBhbHJlYWR5IGhpZGRlbiAke2ZpbGVOYW1lfVxcbiR7ZS5zdGFja31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5PVEU6IERlbGV0aW9uIFNFRU1TIHRvIHdvcmsuIFRoaXMgRE9FUyBicmVhayBpZiB3ZSBkZWxldGUgYSBmaWxlIHdoaWNoIGtlZXBzIGJlaW5nIHJlY3JlYXRlZCwgZXgsIHRoZSBoZWFydGJlYXQuIGxldCBleGlzdHNDaGVja3MgPSAxMDsgd2hpbGUgKGV4aXN0c0NoZWNrcyA+IDApIHsgbGV0IGV4aXN0cyA9IGF3YWl0IHRoaXMuZ2V0SW5mbyhmaWxlTmFtZSk7IGlmICghZXhpc3RzKSBicmVhazsgYXdhaXQgZGVsYXkoMTAwMCk7IGV4aXN0c0NoZWNrcy0tOyB9IGlmIChleGlzdHNDaGVja3MgPT09IDApIHsgbGV0IGV4aXN0cyA9IGF3YWl0IHRoaXMuZ2V0SW5mbyhmaWxlTmFtZSk7IGRldkRlYnVnYnJlYWsoKTsgY29uc29sZS53YXJuKGBGaWxlICR7ZmlsZU5hbWV9IHdhcyBkZWxldGVkLCBidXQgd2FzIHN0aWxsIGZvdW5kIGFmdGVyd2FyZHNgKTsgZXhpc3RzID0gYXdhaXQgdGhpcy5nZXRJbmZvKGZpbGVOYW1lKTsgfVxuICAgIH1cblxuICAgIC8vIGxhc3RNb2RpZmllZCBpcyBhY2NlcHRlZCBidXQgY2Fubm90IGJlIGhvbm9yZWQgLSBiMiBzdGFtcHMgaXRzIG93biB1cGxvYWRUaW1lc3RhbXAsIHdoaWNoIGlzIHdoYXQgb3VyIGdldEluZm8vZmluZEluZm8gcmVwb3J0IGFzIHRoZSB3cml0ZSB0aW1lXG4gICAgcHVibGljIGFzeW5jIHNldExhcmdlRmlsZShjb25maWc6IHsgcGF0aDogc3RyaW5nOyBsYXN0TW9kaWZpZWQ/OiBudW1iZXI7IGdldE5leHREYXRhKCk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPjsgfSk6IFByb21pc2U8dm9pZD4ge1xuXG4gICAgICAgIGxldCBvbkVycm9yOiAoKCkgPT4gUHJvbWlzZTx2b2lkPilbXSA9IFtdO1xuICAgICAgICBsZXQgdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgeyBwYXRoIH0gPSBjb25maWc7XG4gICAgICAgICAgICBsZXQgZGF0YVF1ZXVlOiBCdWZmZXJbXSA9IFtdO1xuICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gZ2V0TmV4dERhdGEoKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVF1ZXVlLmxlbmd0aCkgcmV0dXJuIGRhdGFRdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIC8vIEdldCBidWZmZXJzIHVudGlsIHdlIGdldCA1TUIsIE9SLCBlbmQuIEJhY2tibGF6ZSByZXF1aXJlcyB0aGlzIGZvciBsYXJnZSBmaWxlcy5cbiAgICAgICAgICAgICAgICBsZXQgdG90YWxCeXRlcyA9IDA7XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZmZlcnM6IEJ1ZmZlcltdID0gW107XG4gICAgICAgICAgICAgICAgd2hpbGUgKHRvdGFsQnl0ZXMgPCBMQVJHRV9GSUxFX01JTl9DSFVOS19TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgY29uZmlnLmdldE5leHREYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsQnl0ZXMgKz0gZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFidWZmZXJzLmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZmZXJzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGZpbGVOYW1lID0gcGF0aDtcbiAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgZ2V0TmV4dERhdGEoKTtcbiAgICAgICAgICAgIGlmICghZGF0YT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzZXRMYXJnZUZpbGUgcHJvZHVjZWQgbm8gZGF0YSBmb3IgJHtKU09OLnN0cmluZ2lmeShjb25maWcucGF0aCl9IG9uICR7dGhpcy5nZXREZWJ1Z05hbWUoKX06IGFuIGVtcHR5IGZpbGUgSVMgYSBkZWxldGlvbiBpbiB0aGlzIHN5c3RlbSAtIGNhbGwgZGVsIHRvIGRlbGV0ZSwgbmV2ZXIgd3JpdGUgZW1wdHkgZmlsZXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEJhY2tibGF6ZSBkaXNhbGxvd3Mgb3Zlcmx5IHNtYWxsIGZpbGVzXG4gICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPCBMQVJHRV9GSUxFX01JTl9DSFVOS19TSVpFKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXQoZmlsZU5hbWUsIGRhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEJhY2tibGF6ZSBkaXNhbGxvd3MgbGVzcyB0aGFuIDIgY2h1bmtzXG4gICAgICAgICAgICBsZXQgc2Vjb25kRGF0YSA9IGF3YWl0IGdldE5leHREYXRhKCk7XG4gICAgICAgICAgICBpZiAoIXNlY29uZERhdGE/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0KGZpbGVOYW1lLCBkYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBTFNPLCBpZiB0aGVyZSBhcmUgdHdvIGNodW5rcywgYnV0IG9uZSBpcyB0b28gc21hbGwsIGNvbWJpbmUgaXQuIFRoaXMgaGVscHMgYWxsb3cgdXMgbmV2ZXIgc2VuZCBzbWFsbCBjaHVua3MuXG4gICAgICAgICAgICBpZiAoc2Vjb25kRGF0YS5sZW5ndGggPCBMQVJHRV9GSUxFX01JTl9DSFVOS19TSVpFKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXQoZmlsZU5hbWUsIEJ1ZmZlci5jb25jYXQoW2RhdGEsIHNlY29uZERhdGFdKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb2coYFVwbG9hZGluZyBsYXJnZSBmaWxlICR7Y29uZmlnLnBhdGh9YCk7XG4gICAgICAgICAgICBkYXRhUXVldWUudW5zaGlmdChkYXRhLCBzZWNvbmREYXRhKTtcblxuXG4gICAgICAgICAgICBsZXQgdXBsb2FkSW5mbyA9IGF3YWl0IHRoaXMuYXBpUmV0cnlMb2dpYyhgc3RhcnRMYXJnZUZpbGUgJHtmaWxlTmFtZX1gLCBhc3luYyAoYXBpKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGFwaS5zdGFydExhcmdlRmlsZSh7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldElkOiB0aGlzLmJ1Y2tldElkLFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImIyL3gtYXV0b1wiLFxuICAgICAgICAgICAgICAgICAgICBmaWxlSW5mbzoge30sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG9uRXJyb3IucHVzaChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hcGlSZXRyeUxvZ2ljKGBjYW5jZWxMYXJnZUZpbGUgJHtmaWxlTmFtZX1gLCBhc3luYyAoYXBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGFwaS5jYW5jZWxMYXJnZUZpbGUoeyBmaWxlSWQ6IHVwbG9hZEluZm8uZmlsZUlkIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IExPR19JTlRFUlZBTCA9IHRpbWVJbk1pbnV0ZTtcbiAgICAgICAgICAgIGxldCBuZXh0TG9nVGltZSA9IERhdGUubm93KCkgKyBMT0dfSU5URVJWQUw7XG5cbiAgICAgICAgICAgIGxldCBwYXJ0TnVtYmVyID0gMTtcbiAgICAgICAgICAgIGxldCBwYXJ0U2hhMUFycmF5OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgbGV0IHRvdGFsQnl0ZXMgPSAwO1xuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gYXdhaXQgZ2V0TmV4dERhdGEoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGEpIGJyZWFrO1xuICAgICAgICAgICAgICAgIC8vIFNvLi4uIGlmIHRoZSBuZXh0IGNodW5rIGlzIHRoZSBsYXN0IG9uZSwgY29tYmluZSBpdCB3aXRoIHRoZSBjdXJyZW50IG9uZS4gVGhpcyBwcmV2ZW50cyBBTlkgdXBsb2FkcyBmcm9tIGJlaW5nIDwgdGhlIHRocmVzaG9sZCwgYXMgYXBwYXJlbnRseSB0aGUgXCJsYXN0IHBhcnRcIiBjaGVjayBpbiBiYWNrYmxhemUgZmFpbHMgd2hlbiB3ZSBoYXZlIHRvIHJldHJ5IGFuIHVwbG9hZCAoZHVlIHRvIFwibm8gdG9tZXMgYXZhaWxhYmxlXCIpLiBXZWxsIGl0IGNhbid0IGZhaWwgaWYgZXZlbiB0aGUgbGFzdCBwYXJ0IGlzID4gNU1CLCBub3cgY2FuIGl0ISBCVVQsIG9ubHkgaWYgdGhpcyBpc24ndCB0aGUgZmlyc3QgY2h1bmssIG90aGVyd2lzZSB3ZSBtaWdodCB0cnkgdG8gc2VuZCBhIHNpbmdsZSBjaHVuaywgd2hpY2ggd2UgY2FuJ3QgZG8uXG4gICAgICAgICAgICAgICAgaWYgKHBhcnRTaGExQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWF5YmVMYXN0RGF0YSA9IGF3YWl0IGdldE5leHREYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXliZUxhc3REYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF5YmVMYXN0RGF0YS5sZW5ndGggPCBMQVJHRV9GSUxFX01JTl9DSFVOS19TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyB0aGUgbGFzdCBvbmUsIHNvIGNvbnN1bWUgaXQgbm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEJ1ZmZlci5jb25jYXQoW2RhdGEsIG1heWJlTGFzdERhdGFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBub3QgdGhlIGxhc3Qgb25lLiBQdXQgaXQgYmFjaywgaW4gY2FzZSB0aGUgb25lIEFGVEVSIGlzIHRoZSBsYXN0IG9uZSwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvIG1lcmdlIG1heWJlTGFzdERhdGEgd2l0aCB0aGUgbmV4dCBuZXh0IGRhdGEuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVF1ZXVlLnVuc2hpZnQobWF5YmVMYXN0RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHNoYTEgPSByZXF1aXJlKFwiY3J5cHRvXCIpLmNyZWF0ZUhhc2goXCJzaGExXCIpO1xuICAgICAgICAgICAgICAgIHNoYTEudXBkYXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgIGxldCBzaGExSGV4ID0gc2hhMS5kaWdlc3QoXCJoZXhcIik7XG4gICAgICAgICAgICAgICAgcGFydFNoYTFBcnJheS5wdXNoKHNoYTFIZXgpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYXBpUmV0cnlMb2dpYyhgdXBsb2FkUGFydCMke3BhcnROdW1iZXJ9ICR7ZmlsZU5hbWV9YCwgYXN5bmMgKGFwaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGEpIHRocm93IG5ldyBFcnJvcihcIkltcG9zc2libGUsIGRhdGEgaXMgdW5kZWZpbmVkXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB0aW1lU3RyID0gZm9ybWF0VGltZShEYXRlLm5vdygpIC0gdGltZSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCByYXRlU3RyID0gZm9ybWF0TnVtYmVyKHRvdGFsQnl0ZXMgLyAoRGF0ZS5ub3coKSAtIHRpbWUpICogMTAwMCkgKyBcIkIvc1wiO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZyhgVXBsb2FkaW5nIGxhcmdlIGZpbGUgcGFydCAke3BhcnROdW1iZXJ9LCB1cGxvYWRlZCAke2JsdWUoZm9ybWF0TnVtYmVyKHRvdGFsQnl0ZXMpICsgXCJCXCIpfSBpbiAke2JsdWUodGltZVN0cil9ICgke2JsdWUocmF0ZVN0cil9KS4gJHtjb25maWcucGF0aH1gKTtcbiAgICAgICAgICAgICAgICAgICAgdG90YWxCeXRlcyArPSBkYXRhLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhcGkudXBsb2FkUGFydCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlSWQ6IHVwbG9hZEluZm8uZmlsZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydE51bWJlcjogcGFydE51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGExOiBzaGExSGV4LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBwYXJ0TnVtYmVyKys7XG5cbiAgICAgICAgICAgICAgICBpZiAoRGF0ZS5ub3coKSA+IG5leHRMb2dUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRMb2dUaW1lID0gRGF0ZS5ub3coKSArIExPR19JTlRFUlZBTDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpbWVTdHIgPSBmb3JtYXRUaW1lKERhdGUubm93KCkgLSB0aW1lKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJhdGVTdHIgPSBmb3JtYXROdW1iZXIodG90YWxCeXRlcyAvIChEYXRlLm5vdygpIC0gdGltZSkgKiAxMDAwKSArIFwiQi9zXCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTdGlsbCB1cGxvYWRpbmcgbGFyZ2UgZmlsZSBhdCAke0RhdGUubm93KCl9LiBVcGxvYWRlZCAke2Zvcm1hdE51bWJlcih0b3RhbEJ5dGVzKX1CIGluICR7dGltZVN0cn0gKCR7cmF0ZVN0cn0pLiAke2NvbmZpZy5wYXRofWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9nKGBGaW5pc2hlZCB1cGxvYWRpbmcgbGFyZ2UgZmlsZSB1cGxvYWRlZCAke2dyZWVuKGZvcm1hdE51bWJlcih0b3RhbEJ5dGVzKSl9QmApO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFwaVJldHJ5TG9naWMoYGZpbmlzaExhcmdlRmlsZSAke2ZpbGVOYW1lfWAsIGFzeW5jIChhcGkpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBhcGkuZmluaXNoTGFyZ2VGaWxlKHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZUlkOiB1cGxvYWRJbmZvLmZpbGVJZCxcbiAgICAgICAgICAgICAgICAgICAgcGFydFNoYTFBcnJheTogcGFydFNoYTFBcnJheSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGMgb2Ygb25FcnJvcikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGMoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGR1cmluZyBlcnJvciBjbGVhbi4gSWdub3JpbmcsIHdlIHdpbGwgcmV0aHJvdyB0aGUgb3JpZ2luYWwgZXJyb3IsIHBhdGggJHtjb25maWcucGF0aH1gLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgaW4gc2V0TGFyZ2VGaWxlIGZvciAke2NvbmZpZy5wYXRofTogJHtlLnN0YWNrfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEluZm8oZmlsZU5hbWU6IHN0cmluZywgY29uZmlnPzogR2V0SW5mb0NvbmZpZyk6IFByb21pc2U8eyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyOyB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFwaVJldHJ5TG9naWMoYGdldEluZm8gJHtmaWxlTmFtZX1gLCBhc3luYyAoYXBpKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBmaWxlID0gYXdhaXQgYXBpLmhlYWRGaWxlQnlOYW1lKHsgYnVja2V0TmFtZTogdGhpcy5idWNrZXROYW1lLCBmaWxlTmFtZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbGUgfHwgIWZpbGUuc2l6ZSAmJiAhY29uZmlnPy5pbmNsdWRlVG9tYnN0b25lcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZyhgQmFja2JsYXplIGZpbGUgbm90IGV4aXN0cyAke2ZpbGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmxvZyhgQmFja2JsYXplIGZpbGUgZXhpc3RzICR7ZmlsZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVUaW1lOiBmaWxlLnVwbG9hZFRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5zdGFjay5pbmNsdWRlcyhgZmlsZV9ub3RfZm91bmRgKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZyhgQmFja2JsYXplIGZpbGUgbm90IGV4aXN0cyAke2ZpbGVOYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBGb3IgZXhhbXBsZSBmaW5kRmlsZU5hbWVzKFwiaXBzL1wiKVxuICAgIHB1YmxpYyBhc3luYyBmaW5kKHByZWZpeDogc3RyaW5nLCBjb25maWc/OiBGaW5kQ29uZmlnKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5maW5kSW5mbyhwcmVmaXgsIGNvbmZpZyk7XG4gICAgICAgIHJldHVybiByZXN1bHQubWFwKHggPT4geC5wYXRoKTtcbiAgICB9XG4gICAgcHVibGljIGFzeW5jIGdldENoYW5nZXNBZnRlcjIoY29uZmlnOiBDaGFuZ2VzQWZ0ZXJDb25maWcpOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIC8vIE5vIG5hdGl2ZSBjaGFuZ2UgZmVlZCAoYjIgc3VwcG9ydHMgbmVpdGhlciB0aW1lIG5vciByb3V0ZSBmaWx0ZXJpbmcpIC0gYSBmdWxsIGxpc3RpbmcgZmlsdGVyZWQgaW4gbWVtb3J5XG4gICAgICAgIHJldHVybiBmaWx0ZXJDaGFuZ2VzKGF3YWl0IHRoaXMuZmluZEluZm8oXCJcIiksIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRJbmZvKHByZWZpeDogc3RyaW5nLCBjb25maWc/OiBGaW5kQ29uZmlnKTogUHJvbWlzZTx7IHBhdGg6IHN0cmluZzsgY3JlYXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXI7IH1bXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hcGlSZXRyeUxvZ2ljKGBmaW5kSW5mbyAke3ByZWZpeH1gLCBhc3luYyAoYXBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZz8uc2hhbGxvdyAmJiBjb25maWc/LnR5cGUgPT09IFwiZm9sZGVyc1wiKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFsbEZpbGVzID0gYXdhaXQgdGhpcy5maW5kSW5mbyhwcmVmaXgpO1xuICAgICAgICAgICAgICAgIGxldCBhbGxGb2xkZXJzID0gbmV3IE1hcDxzdHJpbmcsIHsgcGF0aDogc3RyaW5nOyBjcmVhdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9PigpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHsgcGF0aCwgY3JlYXRlVGltZSwgc2l6ZSB9IG9mIGFsbEZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmb2xkZXIgPSBwYXRoLnNwbGl0KFwiL1wiKS5zbGljZSgwLCAtMSkuam9pbihcIi9cIik7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm9sZGVyKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgYWxsRm9sZGVycy5zZXQoZm9sZGVyLCB7IHBhdGg6IGZvbGRlciwgY3JlYXRlVGltZSwgc2l6ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oYWxsRm9sZGVycy52YWx1ZXMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZmlsZXMgPSBuZXcgTWFwPHN0cmluZywgeyBwYXRoOiBzdHJpbmc7IGNyZWF0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyOyB9PigpO1xuICAgICAgICAgICAgbGV0IHN0YXJ0RmlsZU5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXBpLmxpc3RGaWxlTmFtZXMoe1xuICAgICAgICAgICAgICAgICAgICBidWNrZXRJZDogdGhpcy5idWNrZXRJZCxcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBwcmVmaXgsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1heEZpbGVDb3VudDogMTAwMCxcbiAgICAgICAgICAgICAgICAgICAgZGVsaW1pdGVyOiBjb25maWc/LnNoYWxsb3cgPyBcIi9cIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBmaWxlIG9mIHJlc3VsdC5maWxlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZS5hY3Rpb24gPT09IFwidXBsb2FkXCIgJiYgY29uZmlnPy50eXBlICE9PSBcImZvbGRlcnNcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMuc2V0KGZpbGUuZmlsZU5hbWUsIHsgcGF0aDogZmlsZS5maWxlTmFtZSwgY3JlYXRlVGltZTogZmlsZS51cGxvYWRUaW1lc3RhbXAsIHNpemU6IGZpbGUuY29udGVudExlbmd0aCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxlLmFjdGlvbiA9PT0gXCJmb2xkZXJcIiAmJiBjb25maWc/LnR5cGUgPT09IFwiZm9sZGVyc1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9sZGVyID0gZmlsZS5maWxlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb2xkZXIuZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVyID0gZm9sZGVyLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLnNldChmb2xkZXIsIHsgcGF0aDogZm9sZGVyLCBjcmVhdGVUaW1lOiBmaWxlLnVwbG9hZFRpbWVzdGFtcCwgc2l6ZTogZmlsZS5jb250ZW50TGVuZ3RoIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RhcnRGaWxlTmFtZSA9IHJlc3VsdC5uZXh0RmlsZU5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKCFzdGFydEZpbGVOYW1lKSBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKGZpbGVzLnZhbHVlcygpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGFzc2VydFBhdGhWYWxpZChwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGJ5dGVzID0gQnVmZmVyLmZyb20ocGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgICBpZiAoYnl0ZXMubGVuZ3RoID4gMTAwMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoIHRvbyBsb25nOiAke3BhdGgubGVuZ3RofSBjaGFyYWN0ZXJzID4gMTAwMCBjaGFyYWN0ZXJzLiBQYXRoOiAke3BhdGh9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbW92ZShjb25maWc6IHtcbiAgICAgICAgcGF0aDogc3RyaW5nO1xuICAgICAgICB0YXJnZXQ6IElBcmNoaXZlcztcbiAgICAgICAgdGFyZ2V0UGF0aDogc3RyaW5nO1xuICAgICAgICBjb3B5SW5zdGVhZD86IGJvb2xlYW47XG4gICAgfSkge1xuICAgICAgICBsZXQgeyBwYXRoLCB0YXJnZXQsIHRhcmdldFBhdGggfSA9IGNvbmZpZztcbiAgICAgICAgLy8gQSBzZWxmIG1vdmUgc2hvdWxkIE5PT1AgKGFuZCBkZWZpbml0ZWx5IG5vdCBjb3B5LCBhbmQgdGhlbiBkZWxldGUgaXRzZWxmISlcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gdGhpcyAmJiBwYXRoID09PSB0YXJnZXRQYXRoKSB7XG4gICAgICAgICAgICB0aGlzLmxvZyhgQmFja2JsYXplIG1vdmUgcGF0aCB0byBpdHNlbGYuIFNraXBwaW5nIG1vdmUsIGFzIHRoZXJlIGlzIG5vIHdvcmsgdG8gZG8uICR7cGF0aH1gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQXJjaGl2ZXNCYWNrYmxhemUpIHtcbiAgICAgICAgICAgIGxldCB0YXJnZXRCdWNrZXRJZCA9IHRhcmdldC5idWNrZXRJZDtcbiAgICAgICAgICAgIGlmICh0YXJnZXRCdWNrZXRJZCA9PT0gdGhpcy5idWNrZXRJZCAmJiBwYXRoID09PSB0YXJnZXRQYXRoKSByZXR1cm47XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFwaVJldHJ5TG9naWMoYG1vdmUgJHtwYXRofSAtPiAke3RhcmdldFBhdGh9YCwgYXN5bmMgKGFwaSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFVnaC4uLiBsaXN0aW5nIHRoZSBmaWxlIG5hbWUgc3Vja3MsIGJ1dC4uLiBJIGd1ZXNzIGl0J3Mgc3RpbGwgYmV0dGVyIHRoYW4gZG93bmxvYWRpbmcgYW5kIHJlLXVwbG9hZGluZyB0aGUgZW50aXJlIGZpbGUuXG4gICAgICAgICAgICAgICAgbGV0IGluZm8gPSBhd2FpdCBhcGkubGlzdEZpbGVOYW1lcyh7IGJ1Y2tldElkOiB0aGlzLmJ1Y2tldElkLCBwcmVmaXg6IHBhdGgsIG1heEZpbGVDb3VudDogMTAgfSk7XG4gICAgICAgICAgICAgICAgbGV0IGZpbGUgPSBpbmZvLmZpbGVzLmZpbmQoeCA9PiB4LmZpbGVOYW1lID09PSBwYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbGUpIHRocm93IG5ldyBFcnJvcihgRmlsZSBub3QgZm91bmQgdG8gbW92ZTogJHtwYXRofWApO1xuICAgICAgICAgICAgICAgIGF3YWl0IGFwaS5jb3B5RmlsZSh7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGVJZDogZmlsZS5maWxlSWQsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiB0YXJnZXRQYXRoLFxuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldElkOiB0YXJnZXRCdWNrZXRJZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldChwYXRoKTtcbiAgICAgICAgICAgIGlmICghZGF0YSkgdGhyb3cgbmV3IEVycm9yKGBGaWxlIG5vdCBmb3VuZCB0byBtb3ZlOiAke3BhdGh9YCk7XG4gICAgICAgICAgICBhd2FpdCB0YXJnZXQuc2V0KHRhcmdldFBhdGgsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb25maWcuY29weUluc3RlYWQpIHtcbiAgICAgICAgICAgIGxldCBleGlzdHMgPSBhd2FpdCB0aGlzLmdldEluZm8odGFyZ2V0UGF0aCk7XG4gICAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZpbGUgbm90IGZvdW5kIGFmdGVyIG1vdmUuIExlYXZpbmcgQk9USCBmaWxlcy4gJHt0YXJnZXRQYXRofSB3YXMgbm90IGZvdW5kLiBCZWluZyBtb3ZlZCBmcm9tICR7cGF0aH1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWwocGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY29weShjb25maWc6IHtcbiAgICAgICAgcGF0aDogc3RyaW5nO1xuICAgICAgICB0YXJnZXQ6IElBcmNoaXZlcztcbiAgICAgICAgdGFyZ2V0UGF0aDogc3RyaW5nO1xuICAgIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW92ZSh7IC4uLmNvbmZpZywgY29weUluc3RlYWQ6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFVSTChwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYXBpUmV0cnlMb2dpYyhgZ2V0VVJMICR7cGF0aH1gLCBhc3luYyAoYXBpKSA9PiB7XG4gICAgICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGFwaS5nZXREb3dubG9hZFVSTChcImZpbGUvXCIgKyB0aGlzLmJ1Y2tldE5hbWUgKyBcIi9cIiArIHBhdGgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RG93bmxvYWRBdXRob3JpemF0aW9uKGNvbmZpZzoge1xuICAgICAgICBmaWxlTmFtZVByZWZpeD86IHN0cmluZztcbiAgICAgICAgdmFsaWREdXJhdGlvbkluU2Vjb25kczogbnVtYmVyO1xuICAgICAgICBiMkNvbnRlbnREaXNwb3NpdGlvbj86IHN0cmluZztcbiAgICAgICAgYjJDb250ZW50TGFuZ3VhZ2U/OiBzdHJpbmc7XG4gICAgICAgIGIyRXhwaXJlcz86IHN0cmluZztcbiAgICAgICAgYjJDYWNoZUNvbnRyb2w/OiBzdHJpbmc7XG4gICAgICAgIGIyQ29udGVudEVuY29kaW5nPzogc3RyaW5nO1xuICAgICAgICBiMkNvbnRlbnRUeXBlPzogc3RyaW5nO1xuICAgIH0pOiBQcm9taXNlPHtcbiAgICAgICAgYnVja2V0SWQ6IHN0cmluZztcbiAgICAgICAgZmlsZU5hbWVQcmVmaXg6IHN0cmluZztcbiAgICAgICAgYXV0aG9yaXphdGlvblRva2VuOiBzdHJpbmc7XG4gICAgfT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5hcGlSZXRyeUxvZ2ljKGBnZXREb3dubG9hZEF1dGhvcml6YXRpb24gJHtjb25maWcuZmlsZU5hbWVQcmVmaXggPz8gXCJcIn1gLCBhc3luYyAoYXBpKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgYXBpLmdldERvd25sb2FkQXV0aG9yaXphdGlvbih7XG4gICAgICAgICAgICAgICAgYnVja2V0SWQ6IHRoaXMuYnVja2V0SWQsXG4gICAgICAgICAgICAgICAgZmlsZU5hbWVQcmVmaXg6IGNvbmZpZy5maWxlTmFtZVByZWZpeCA/PyBcIlwiLFxuICAgICAgICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qXG5OYW1lcyBzaG91bGQgYmUgYSBVVEYtOCBzdHJpbmcgdXAgdG8gMTAyNCBieXRlcyB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uczpcbiAgICBDaGFyYWN0ZXIgY29kZXMgYmVsb3cgMzIgYXJlIG5vdCBhbGxvd2VkLlxuICAgIERFTCBjaGFyYWN0ZXJzICgxMjcpIGFyZSBub3QgYWxsb3dlZC5cbiAgICBCYWNrc2xhc2hlcyBhcmUgbm90IGFsbG93ZWQuXG4gICAgRmlsZSBuYW1lcyBjYW5ub3Qgc3RhcnQgd2l0aCAvLCBlbmQgd2l0aCAvLCBvciBjb250YWluIC8vLlxuKi9cblxuXG5leHBvcnQgY29uc3QgZ2V0QXJjaGl2ZXNCYWNrYmxhemUgPSBjYWNoZSgoZG9tYWluOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gbmV3IEFyY2hpdmVzQmFja2JsYXplKHsgYnVja2V0TmFtZTogZG9tYWluIH0pO1xufSk7XG5leHBvcnQgY29uc3QgZ2V0QXJjaGl2ZXNCYWNrYmxhemVQcml2YXRlSW1tdXRhYmxlID0gY2FjaGUoKGRvbWFpbjogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBBcmNoaXZlc0JhY2tibGF6ZSh7XG4gICAgICAgIGJ1Y2tldE5hbWU6IGRvbWFpbiArIFwiLXByaXZhdGUtaW1tdXRhYmxlXCIsXG4gICAgICAgIGltbXV0YWJsZTogdHJ1ZVxuICAgIH0pO1xufSk7XG5leHBvcnQgY29uc3QgZ2V0QXJjaGl2ZXNCYWNrYmxhemVQdWJsaWNJbW11dGFibGUgPSBjYWNoZSgoZG9tYWluOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gbmV3IEFyY2hpdmVzQmFja2JsYXplKHtcbiAgICAgICAgYnVja2V0TmFtZTogZG9tYWluICsgXCItcHVibGljLWltbXV0YWJsZVwiLFxuICAgICAgICBwdWJsaWM6IHRydWUsXG4gICAgICAgIGltbXV0YWJsZTogdHJ1ZSxcbiAgICAgICAgYWxsb3dlZE9yaWdpbnM6IFtgaHR0cHM6Ly8ke2RvbWFpbn1gLCBgaHR0cHM6Ly8xMjctMC0wLTEuJHtkb21haW59OjcwMDdgXSxcbiAgICB9KTtcbn0pO1xuXG4vLyBOT1RFOiBDYWNoZSBieSBhIG1pbnV0ZS4gVGhpcyBtaWdodCBiZSBhIGJhZCBpZGVhLCBidXQuLi4gdXN1YWxseSB3aG9sZSByZWFzb24gZm9yIHB1YmxpYyBpcyBmb3IgY2xvdWRmbGFyZSBjYWNoaW5nIChhcyBvdGhlcndpc2Ugd2UgY2FuIGp1c3QgYWNjZXNzIGl0IHRocm91Z2ggYSBzZXJ2ZXIpLCBvciBmb3IgbGFyZ2UgZmlsZXMgKHdoaWNoIHNob3VsZCBiZSBjYWNoZWQgYW55d2F5cywgYW5kIHByb2JhYmx5IGV2ZW4gdXNlIGltbXV0YWJsZSBjYWNoaW5nKS5cbmV4cG9ydCBjb25zdCBnZXRBcmNoaXZlc0JhY2tibGF6ZVB1YmxpYyA9IGNhY2hlKChkb21haW46IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBuZXcgQXJjaGl2ZXNCYWNrYmxhemUoe1xuICAgICAgICBidWNrZXROYW1lOiBkb21haW4gKyBcIi1wdWJsaWNcIixcbiAgICAgICAgcHVibGljOiB0cnVlLFxuICAgICAgICBjYWNoZVRpbWU6IHRpbWVJbk1pbnV0ZSxcbiAgICAgICAgYWxsb3dlZE9yaWdpbnM6IFtgaHR0cHM6Ly8ke2RvbWFpbn1gLCBgaHR0cHM6Ly8xMjctMC0wLTEuJHtkb21haW59OjcwMDdgXSxcbiAgICB9KTtcbn0pOyJdfQ==
|
|
857
|
-
/* _JS_SOURCE_HASH = "
|
|
857
|
+
/* _JS_SOURCE_HASH = "a4013b5a7bf79409719899d03cea617cd735a5fdbe047e7cd7e1f0539a94d707"; */
|
|
@@ -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.getFileSystemPointer = exports.findGrantedPointerHandle = exports.deleteFileSystemPointer = exports.storeFileSystemPointer = void 0;
|
|
4
4
|
const caching_1 = require("socket-function/src/caching");
|
|
@@ -104,4 +104,4 @@ async function getFileSystemPointer(config) {
|
|
|
104
104
|
}
|
|
105
105
|
exports.getFileSystemPointer = getFileSystemPointer;
|
|
106
106
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZVN5c3RlbVBvaW50ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaWxlU3lzdGVtUG9pbnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5REFBbUQ7QUFDbkQsbURBQWtEO0FBRWxELE1BQU0sZUFBZSxHQUFHLHFCQUFxQixDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUEsY0FBSSxFQUFDLEtBQUssSUFBSSxFQUFFO0lBQ3ZCLElBQUksRUFBRSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsMERBQTBELEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkYsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7UUFDdEMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQztBQUNILEtBQUssVUFBVSxjQUFjO0lBQ3pCLElBQUksUUFBUSxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUM7SUFDMUIsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNoQyxPQUFPLFFBQVEsQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMzRixDQUFDO0FBQ0QsS0FBSyxVQUFVLEtBQUssQ0FBQyxHQUFXLEVBQUUsS0FBdUQ7SUFDckYsSUFBSSxXQUFXLEdBQUcsTUFBTSxjQUFjLEVBQUUsQ0FBQztJQUN6QyxJQUFJLENBQUMsV0FBVztRQUFFLE9BQU87SUFDekIsSUFBSSxHQUFH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QUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPO0lBQ3BCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE9BQU87UUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsWUFBWTtZQUMvQixJQUFJLFFBQVEsR0FBRyxNQUFPLE1BQWMsQ0FBQyxlQUFlLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNyRSxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsTUFBTyxNQUFjLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxhQUFaLFlBQVksY0FBWixZQUFZLEdBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1RSxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDO0FBckJELG9EQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxhenkgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWNoaW5nXCI7XG5pbXBvcnQgeyBuZXh0SWQgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5cbmNvbnN0IG9iamVjdFN0b3JlTmFtZSA9IFwiZmlsZVN5c3RlbVBvaW50ZXJEQlwiO1xuY29uc3QgZGIgPSBsYXp5KGFzeW5jICgpID0+IHtcbiAgICBsZXQgZGIgPSBpbmRleGVkREIub3BlbihcImZpbGVTeXN0ZW1Qb2ludGVyREJfZjI5OGU5NjItYmQ4YS00NmI5LTgwOTgtMjVkYjYzM2Y0ZWQzXCIsIDEpO1xuICAgIGRiLmFkZEV2ZW50TGlzdGVuZXIoXCJ1cGdyYWRlbmVlZGVkXCIsICgpID0+IHtcbiAgICAgICAgZGIucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFtZSwge30pO1xuICAgIH0pO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZGIuYWRkRXZlbnRMaXN0ZW5lcihcInN1Y2Nlc3NcIiwgcmVzb2x2ZSkpO1xuICAgIHJldHVybiBkYi5yZXN1bHQ7XG59KTtcbmFzeW5jIGZ1bmN0aW9uIGdldFRyYW5zYWN0aW9uKCkge1xuICAgIGxldCBkYXRhYmFzZSA9IGF3YWl0IGRiKCk7XG4gICAgaWYgKCFkYXRhYmFzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZGF0YWJhc2UudHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVOYW1lLCBcInJlYWR3cml0ZVwiKS5vYmplY3RTdG9yZShvYmplY3RTdG9yZU5hbWUpO1xufVxuYXN5bmMgZnVuY3Rpb24gd3JpdGUoa2V5OiBzdHJpbmcsIHZhbHVlOiBGaWxlU3lzdGVtRmlsZUhhbmRsZSB8IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUpIHtcbiAgICBsZXQgdHJhbnNhY3Rpb24gPSBhd2FpdCBnZXRUcmFuc2FjdGlvbigpO1xuICAgIGlmICghdHJhbnNhY3Rpb24pIHJldHVybjtcbiAgICBsZXQgcmVxID0gdHJhbnNhY3Rpb24ucHV0KHZhbHVlLCBrZXkpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcmVxLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWNjZXNzXCIsIHJlc29sdmUpO1xuICAgICAgICByZXEuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgfSk7XG59XG5hc3luYyBmdW5jdGlvbiByZWFkKGtleTogc3RyaW5nKTogUHJvbWlzZTxGaWxlU3lzdGVtRmlsZUhhbmRsZSB8IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUgfCB1bmRlZmluZWQ+IHtcbiAgICBsZXQgdHJhbnNhY3Rpb24gPSBhd2FpdCBnZXRUcmFuc2FjdGlvbigpO1xuICAgIGlmICghdHJhbnNhY3Rpb24pIHJldHVybjtcbiAgICBsZXQgcmVxID0gdHJhbnNhY3Rpb24uZ2V0KGtleSk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXEuYWRkRXZlbnRMaXN0ZW5lcihcInN1Y2Nlc3NcIiwgcmVzb2x2ZSk7XG4gICAgICAgIHJlcS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVxLnJlc3VsdDtcbn1cblxuZXhwb3J0IHR5cGUgRmlsZVN5c3RlbVBvaW50ZXIgPSBzdHJpbmc7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RvcmVGaWxlU3lzdGVtUG9pbnRlcihjb25maWc6IHtcbiAgICBtb2RlOiBcInJlYWRcIiB8IFwicmVhZHdyaXRlXCI7XG4gICAgaGFuZGxlOiBGaWxlU3lzdGVtRmlsZUhhbmRsZSB8IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGU7XG59KTogUHJvbWlzZTxGaWxlU3lzdGVtUG9pbnRlcj4ge1xuICAgIGF3YWl0IChjb25maWcuaGFuZGxlIGFzIGFueSkucmVxdWVzdFBlcm1pc3Npb24oeyBtb2RlOiBjb25maWcubW9kZSB9KTtcbiAgICBsZXQga2V5ID0gbmV4dElkKCkgKyBcIl9cIiArIGNvbmZpZy5tb2RlO1xuICAgIGF3YWl0IHdyaXRlKGtleSwgY29uZmlnLmhhbmRsZSk7XG4gICAgcmV0dXJuIGtleTtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVGaWxlU3lzdGVtUG9pbnRlcihwb2ludGVyOiBGaWxlU3lzdGVtUG9pbnRlcikge1xuICAgIGxldCB0cmFuc2FjdGlvbiA9IGF3YWl0IGdldFRyYW5zYWN0aW9uKCk7XG4gICAgaWYgKCF0cmFuc2FjdGlvbikgcmV0dXJuO1xuICAgIGxldCByZXEgPSB0cmFuc2FjdGlvbi5kZWxldGUocG9pbnRlcik7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXEuYWRkRXZlbnRMaXN0ZW5lcihcInN1Y2Nlc3NcIiwgcmVzb2x2ZSk7XG4gICAgICAgIHJlcS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICB9KTtcbn1cblxuLy8gRW51bWVyYXRlcyBldmVyeSBzdG9yZWQgcG9pbnRlciBoYW5kbGUgd2hvc2UgcGVybWlzc2lvbiBpcyBhbHJlYWR5IGdyYW50ZWQgZm9yIGBtb2RlYCwgbmV3ZXN0IGZpcnN0IChwb2ludGVyIGtleXMgc3RhcnQgd2l0aCBEYXRlLm5vdygpLCB3aGljaCBzb3J0cyBsZXhpY29ncmFwaGljYWxseSkuIENhbGxhYmxlIGZyb20gYSBXZWIgV29ya2VyIOKAlCB1bmxpa2UgZ2V0RmlsZVN5c3RlbVBvaW50ZXIncyBvblVzZXJBY3RpdmF0aW9uIGZsb3csIHRoaXMgb25seSB1c2VzIHF1ZXJ5UGVybWlzc2lvbiwgd2hpY2ggZG9lcyBOT1QgcmVxdWlyZSB1c2VyIGFjdGl2YXRpb24uXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZEdyYW50ZWRQb2ludGVySGFuZGxlKG1vZGU6IFwicmVhZFwiIHwgXCJyZWFkd3JpdGVcIik6IFByb21pc2U8RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBkYXRhYmFzZSA9IGF3YWl0IGRiKCk7XG4gICAgaWYgKCFkYXRhYmFzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBsZXQgc3RvcmUgPSBkYXRhYmFzZS50cmFuc2FjdGlvbihvYmplY3RTdG9yZU5hbWUsIFwicmVhZG9ubHlcIikub2JqZWN0U3RvcmUob2JqZWN0U3RvcmVOYW1lKTtcbiAgICBsZXQga2V5c1JlcSA9IHN0b3JlLmdldEFsbEtleXMoKTtcbiAgICBsZXQgdmFsdWVzUmVxID0gc3RvcmUuZ2V0QWxsKCk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBrZXlzUmVxLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWNjZXNzXCIsIHJlc29sdmUpO1xuICAgICAgICBrZXlzUmVxLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCByZWplY3QpO1xuICAgIH0pO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdmFsdWVzUmVxLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWNjZXNzXCIsIHJlc29sdmUpO1xuICAgICAgICB2YWx1ZXNSZXEuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgfSk7XG4gICAgbGV0IGtleXMgPSBrZXlzUmVxLnJlc3VsdCBhcyBzdHJpbmdbXTtcbiAgICBsZXQgdmFsdWVzID0gdmFsdWVzUmVxLnJlc3VsdCBhcyAoRmlsZVN5c3RlbUZpbGVIYW5kbGUgfCBGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlKVtdO1xuICAgIGxldCBlbnRyaWVzID0ga2V5cy5tYXAoKGtleSwgaSkgPT4gKHsga2V5LCB2YWx1ZTogdmFsdWVzW2ldLCB0aW1lOiAra2V5LnNwbGl0KFwiX1wiKVswXSB8fCAwIH0pKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYi50aW1lIC0gYS50aW1lKTtcbiAgICBmb3IgKGxldCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGlmIChlbnRyeS52YWx1ZS5raW5kICE9PSBcImRpcmVjdG9yeVwiKSBjb250aW51ZTtcbiAgICAgICAgbGV0IHN0YXRlID0gYXdhaXQgKGVudHJ5LnZhbHVlIGFzIGFueSkucXVlcnlQZXJtaXNzaW9uKHsgbW9kZSB9KTtcbiAgICAgICAgaWYgKHN0YXRlID09PSBcImdyYW50ZWRcIikgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RmlsZVN5c3RlbVBvaW50ZXIoY29uZmlnOiB7XG4gICAgcG9pbnRlcjogRmlsZVN5c3RlbVBvaW50ZXI7XG59KTogUHJvbWlzZTx7XG4gICAgLy8gTk9URTogV2UgaGF2ZSB0byBjYWxsIHJlcXVlc3RQZXJtaXNzaW9uLCBzby4uLiB1c2VyIGFjdGl2YXRpb24gaXMgcmVxdWlyZWQgKGFzIGluLFxuICAgIC8vICB0aGlzIG5lZWQgdG8gYmUgY2FsbGVkIGluc2lkZSBvZiBhIGJ1dHRvbikuXG4gICAgLy8gSU1QT1JUQU5UISBJbiBzb21lIGNpcmN1bXN0YW5jZXMgdXNlciBhY3RpdmF0aW9uIGlzIG5vdCByZXF1aXJlZCAod2l0aCBtdWx0aXBsZSB0YWJzLCBhbmQgcG90ZW50aWFsbHkgd2l0aCBodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2Jsb2cvcGVyc2lzdGVudC1wZXJtaXNzaW9ucy1mb3ItdGhlLWZpbGUtc3lzdGVtLWFjY2Vzcy1hcGkpLCBzby4uLiB0cnlpbmcgdG8gY2FsbCBvblVzZXJBY3RpdmF0aW9uIGltbW1lZGlhdGVseSBpcyBhIGdvb2QgaWRlYSAoYWx0aG91Z2ggaXQgbWlnaHQgdGhyb3cpLlxuICAgIG9uVXNlckFjdGl2YXRpb24obW9kZU92ZXJyaWRlPzogXCJyZWFkXCIgfCBcInJlYWR3cml0ZVwiKTogUHJvbWlzZTxGaWxlU3lzdGVtRmlsZUhhbmRsZSB8IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGU+XG59IHwgdW5kZWZpbmVkXG4+IHtcbiAgICBjb25zdCBoYW5kbGUgPSBhd2FpdCByZWFkKGNvbmZpZy5wb2ludGVyKTtcbiAgICBpZiAoIWhhbmRsZSkgcmV0dXJuO1xuICAgIGxldCBtb2RlID0gY29uZmlnLnBvaW50ZXIuc3BsaXQoXCJfXCIpLmF0KC0xKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhc3luYyBvblVzZXJBY3RpdmF0aW9uKG1vZGVPdmVycmlkZSkge1xuICAgICAgICAgICAgbGV0IHRlc3RNb2RlID0gYXdhaXQgKGhhbmRsZSBhcyBhbnkpLnF1ZXJ5UGVybWlzc2lvbih7IG1vZGU6IG1vZGUgfSk7XG4gICAgICAgICAgICBpZiAodGVzdE1vZGUgIT09IG1vZGUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCAoaGFuZGxlIGFzIGFueSkucmVxdWVzdFBlcm1pc3Npb24oeyBtb2RlOiBtb2RlT3ZlcnJpZGUgPz8gbW9kZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBoYW5kbGU7XG4gICAgICAgIH1cbiAgICB9O1xufSJdfQ==
|
|
107
|
-
/* _JS_SOURCE_HASH = "
|
|
107
|
+
/* _JS_SOURCE_HASH = "5b1826d0226e44d46f66b62f35662bac3249e8fcc29abaa50adc7de02c44b21a"; */
|