sliftutils 1.7.99 → 1.7.101
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/index.d.ts +74 -3
- package/package.json +1 -1
- package/storage/ArchivesDisk.d.ts +2 -1
- package/storage/ArchivesDisk.ts +9 -3
- package/storage/IArchives.d.ts +8 -0
- package/storage/IArchives.ts +8 -0
- package/storage/LogMap.d.ts +1 -1
- package/storage/TransactionFile.d.ts +56 -0
- package/storage/{LogMap.ts → TransactionFile.ts} +7 -4
- package/storage/backblaze.ts +4 -1
- package/storage/dist/ArchivesDisk.ts.cache +11 -5
- package/storage/dist/IArchives.ts.cache +2 -2
- package/storage/dist/TransactionFile.ts.cache +212 -0
- package/storage/dist/backblaze.ts.cache +6 -3
- package/storage/remoteStorage/ArchivesRemote.ts +21 -2
- package/storage/remoteStorage/blobStore.d.ts +2 -1
- package/storage/remoteStorage/blobStore.ts +7 -7
- package/storage/remoteStorage/createArchives.ts +26 -9
- package/storage/remoteStorage/dist/ArchivesRemote.ts.cache +27 -5
- package/storage/remoteStorage/dist/blobStore.ts.cache +5 -5
- package/storage/remoteStorage/dist/createArchives.ts.cache +26 -9
- package/storage/remoteStorage/dist/storageController.ts.cache +4 -3
- package/storage/remoteStorage/dist/storeSync.ts.cache +71 -21
- package/storage/remoteStorage/spec.md +1 -1
- package/storage/remoteStorage/storageController.d.ts +1 -0
- package/storage/remoteStorage/storageController.ts +3 -2
- package/storage/remoteStorage/storeSync.ts +64 -19
|
@@ -328,13 +328,14 @@ class RemoteStorageControllerBase {
|
|
|
328
328
|
largeUploadInfo.set(id, { ...write, account: config.account, bucketName: config.bucketName, storeName: config.sourceConfig.name });
|
|
329
329
|
return id;
|
|
330
330
|
}
|
|
331
|
+
/** offset makes the part write positional (see ArchivesDisk.appendLargeUpload), which is what lets the client RETRY a failed part - a re-sent part lands on the same bytes instead of appending twice. */
|
|
331
332
|
async uploadPart(config) {
|
|
332
333
|
(0, serverConfig_1.assertWritesAllowed)();
|
|
333
334
|
let info = largeUploadInfo.get(config.uploadId);
|
|
334
335
|
if (!info)
|
|
335
336
|
throw new Error(`Unknown large upload ${config.uploadId}`);
|
|
336
337
|
(0, accessStats_2.trackAccess)({ account: info.account, operation: "uploadPart", path: `${info.bucketName}/${info.path}`, size: config.data.length });
|
|
337
|
-
await (0, storageServerState_1.getStore)(info.account, info.bucketName, info.storeName).appendLargeUpload({ id: config.uploadId, data: Buffer.from(config.data) });
|
|
338
|
+
await (0, storageServerState_1.getStore)(info.account, info.bucketName, info.storeName).appendLargeUpload({ id: config.uploadId, data: Buffer.from(config.data), offset: config.offset });
|
|
338
339
|
}
|
|
339
340
|
async finishLargeFile(config) {
|
|
340
341
|
(0, serverConfig_1.assertWritesAllowed)();
|
|
@@ -585,5 +586,5 @@ exports.RemoteStorageController = SocketFunction_1.SocketFunction.register(expor
|
|
|
585
586
|
noClientHooks: true,
|
|
586
587
|
noDefaultHooks: true,
|
|
587
588
|
}));
|
|
588
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZUNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdG9yYWdlQ29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxtRUFBZ0U7QUFFaEUsNkRBQTREO0FBQzVELHlFQUFrRztBQUNsRyxpRUFBbUU7QUFDbkUsaUZBQThFO0FBQzlFLG1EQUF3RDtBQUN4RCxrREFBa0k7QUFDbEksNENBQW1JO0FBQ25JLGlEQUF1RTtBQUN2RSw2REFLOEI7QUFDOUIsK0NBQTREO0FBQzVELGlEQUFvRztBQUVwRyw2Q0FBb0Q7QUFDcEQsdUVBQW9FO0FBQ3BFLCtDQUE4SjtBQUM5Siw2Q0FBaUY7QUFHcEUsUUFBQSx5QkFBeUIsR0FBRyxrQ0FBa0MsQ0FBQztBQUMvRCxRQUFBLG9CQUFvQixHQUFHLHNCQUFzQixDQUFDO0FBQzlDLFFBQUEseUJBQXlCLEdBQUcsMkNBQTJDLENBQUM7QUFDeEUsUUFBQSxxQkFBcUIsR0FBRyx1Q0FBdUMsQ0FBQztBQUU3RSxNQUFNLGdCQUFnQixHQUFHLG1CQUFZLEdBQUcsRUFBRSxDQUFDO0FBQzNDLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDaEMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUFpQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0FBRTNDLHdaQUF3WjtBQUN4WixNQUFNLGFBQWEsR0FBOEI7SUFDN0MsR0FBRyxFQUFFLHlCQUF5QixFQUFFLElBQUksRUFBRSxpQ0FBaUM7SUFDdkUsR0FBRyxFQUFFLDJCQUEyQixFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxXQUFXO0lBQzNHLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxJQUFJ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Q0FBQyxFQUFFO0lBQzFDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFO0lBQ3JDLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFO0lBQzFDLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFO0lBQzFDLFNBQVMsRUFBRSxFQUFFO0NBQ2hCLENBQUMsRUFDRixHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ0gsYUFBYSxFQUFFLElBQUk7SUFDbkIsY0FBYyxFQUFFLElBQUk7Q0FDdkIsQ0FBQyxDQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTb2NrZXRGdW5jdGlvbiB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vU29ja2V0RnVuY3Rpb25cIjtcbmltcG9ydCB7IFNvY2tldEZ1bmN0aW9uSG9vayB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vU29ja2V0RnVuY3Rpb25UeXBlc1wiO1xuaW1wb3J0IHsgZ2V0Tm9kZUlkSVAgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9ub2RlQ2FjaGVcIjtcbmltcG9ydCB7IHNldEhUVFBSZXN1bHRIZWFkZXJzLCBnZXRDdXJyZW50SFRUUFJlcXVlc3QgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWxsSFRUUEhhbmRsZXJcIjtcbmltcG9ydCB7IHBlcmZvcm1Mb2NhbENhbGwgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9jYWxsTWFuYWdlclwiO1xuaW1wb3J0IHsgUmVxdWlyZUNvbnRyb2xsZXIgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3JlcXVpcmUvUmVxdWlyZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IHRpbWVJbk1pbnV0ZSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcbmltcG9ydCB7IGdldENvbW1vbk5hbWUsIGdldFB1YmxpY0lkZW50aWZpZXIsIGdldE93bk1hY2hpbmVJZCwgdmVyaWZ5LCB2ZXJpZnlNYWNoaW5lSWRGb3JQdWJsaWNLZXkgfSBmcm9tIFwiLi4vLi4vbWlzYy9odHRwcy9jZXJ0c1wiO1xuaW1wb3J0IHsgQXJjaGl2ZUZpbGVJbmZvLCBBcmNoaXZlc0NvbmZpZywgQXJjaGl2ZXNTeW5jU3RhdHVzLCBGaW5kQ29uZmlnLCBTb3VyY2VDb25maWcsIElNTVVUQUJMRV9DQUNIRV9USU1FIH0gZnJvbSBcIi4uL0lBcmNoaXZlc1wiO1xuaW1wb3J0IHsgUk9VVElOR19GSUxFLCBnZXRSb3V0ZSwgcm91dGVDb250YWlucyB9IGZyb20gXCIuL3JlbW90ZUNvbmZpZ1wiO1xuaW1wb3J0IHtcbiAgICBmaW5kQnVja2V0U3RvcmUsIGdldFN0b3JlLCBnZXRCdWNrZXRTdG9yZXMsIHJlYWRCdWNrZXRJbnRlcm5hbCwgd3JpdGVSb3V0aW5nQ29uZmlnLFxuICAgIGdldEJ1Y2tldEFyY2hpdmVzQ29uZmlnLCBidWNrZXRTeW5jU3RhdHVzLCBkZWJ1Z0J1Y2tldEluZGV4VG90YWxzLCBBY3RpdmVCdWNrZXRJbmZvLFxuICAgIGRlYnVnTGlzdEFjY291bnRCdWNrZXRzLCBTZXJ2ZXJCdWNrZXRJbmZvLFxuICAgIGRlYnVnR2V0QWN0aXZlQnVja2V0LCBhY3RpdmF0ZUJ1Y2tldCwgZ2V0QWN0aXZlQnVja2V0S2V5cyxcbn0gZnJvbSBcIi4vc3RvcmFnZVNlcnZlclN0YXRlXCI7XG5pbXBvcnQgeyBkZWJ1Z0NsZWFyQWNjb3VudFdyaXRlU3RhdHMgfSBmcm9tIFwiLi9hY2Nlc3NTdGF0c1wiO1xuaW1wb3J0IHsgZ2V0U3RvcmFnZVNlcnZlckNvbmZpZywgZ2V0VHJ1c3QsIGdldFJlcXVlc3RzLCBhc3NlcnRXcml0ZXNBbGxvd2VkIH0gZnJvbSBcIi4vc2VydmVyQ29uZmlnXCI7XG5pbXBvcnQgeyBCbG9iU3RvcmUgfSBmcm9tIFwiLi9ibG9iU3RvcmVcIjtcbmltcG9ydCB7IGdldFJvdXRpbmdGaWxlUmVzdWx0IH0gZnJvbSBcIi4vYnVja2V0RGlza1wiO1xuaW1wb3J0IHsgU3RvcmFnZUNsaWVudENvbnRyb2xsZXIgfSBmcm9tIFwiLi9zdG9yYWdlQ2xpZW50Q29udHJvbGxlclwiO1xuaW1wb3J0IHsgdHJhY2tBY2Nlc3MsIHRyYWNrQWNjZXNzQ2FsbCwgZ2V0QWNjZXNzVG90YWxzLCByZWFkQWNjZXNzU3VtbWFyaWVzLCBjbGVhckFjY291bnRBY2Nlc3NTdGF0cywgQWNjZXNzVG90YWxzLCBBY2Nlc3NTdW1tYXJ5U3RhdGUgfSBmcm9tIFwiLi9hY2Nlc3NTdGF0c1wiO1xuaW1wb3J0IHsgYXNzZXJ0VmFsaWROYW1lLCBhc3NlcnRWYWxpZFBhdGgsIGFzc2VydFZhbGlkQXJncyB9IGZyb20gXCIuL3ZhbGlkYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgU3VtbWFyeUVudHJ5IH0gZnJvbSBcIi4uLy4uL3RyZWVTdW1tYXJ5XCI7XG5cbmV4cG9ydCBjb25zdCBSRU1PVEVfU1RPUkFHRV9DTEFTU19HVUlEID0gXCJSZW1vdGVTdG9yYWdlQ29udHJvbGxlci1iN2U0MmE5MVwiO1xuZXhwb3J0IGNvbnN0IFNUT1JBR0VfQVVUSF9QVVJQT1NFID0gXCJyZW1vdGVTdG9yYWdlLWF1dGgtMVwiO1xuZXhwb3J0IGNvbnN0IFNUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURUQgPSBcIlJFTU9URV9TVE9SQUdFX05PVF9BVVRIRU5USUNBVEVEX2NmMmY3YjFlXCI7XG5leHBvcnQgY29uc3QgU1RPUkFHRV9BQ0NFU1NfREVOSUVEID0gXCJSRU1PVEVfU1RPUkFHRV9BQ0NFU1NfREVOSUVEXzlkODFhNGMwXCI7XG5cbmNvbnN0IEFVVEhfVElNRV9XSU5ET1cgPSB0aW1lSW5NaW51dGUgKiAxMDtcbmNvbnN0IEFDQ0VTU19DSEVDS19TTE9XX1RJTUUgPSA1MDtcbmNvbnN0IE1BWF9TRVNTSU9OUyA9IDEwMCAqIDEwMDA7XG5jb25zdCBNQVhfUkVRVUVTVFNfUEVSX0lQID0gNTA7XG5cbmV4cG9ydCB0eXBlIEF1dGhUb2tlbkRhdGEgPSB7XG4gICAgcHVycG9zZTogc3RyaW5nO1xuICAgIHRpbWU6IG51bWJlcjtcbiAgICBzZXJ2ZXI6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBBdXRoVG9rZW4gPSB7XG4gICAgY2VydFBlbTogc3RyaW5nO1xuICAgIHNpZ25hdHVyZTogc3RyaW5nO1xuICAgIGRhdGE6IEF1dGhUb2tlbkRhdGE7XG59O1xuZXhwb3J0IHR5cGUgQWNjZXNzUmVxdWVzdCA9IHtcbiAgICByZXF1ZXN0SWQ6IHN0cmluZztcbiAgICBhY2NvdW50OiBzdHJpbmc7XG4gICAgbWFjaGluZUlkOiBzdHJpbmc7XG4gICAgaXA6IHN0cmluZztcbiAgICB0aW1lOiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgVHJ1c3RSZWNvcmQgPSB7XG4gICAgYWNjb3VudDogc3RyaW5nO1xuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xuICAgIGlwOiBzdHJpbmc7XG4gICAgdGltZTogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIEFjY2Vzc1N0YXRlID0ge1xuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xuICAgIGlwOiBzdHJpbmc7XG4gICAgaGFzQWNjZXNzOiBib29sZWFuO1xuICAgIGdyYW50QWNjZXNzQ29tbWFuZD86IHN0cmluZztcbiAgICB0cnVzdGVkTWFjaGluZXM/OiBUcnVzdFJlY29yZFtdO1xufTtcblxuY29uc3Qgc2Vzc2lvbnMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4vLyBXZSBtdXN0IG5ldmVyIHNlcnZlIGFueXRoaW5nIHRoYXQgY2FuIGJlIGV2YWx1YXRlZCBhcyBjb2RlIChodG1sLCBqcyAtIGFuZCBzdmcsIHdoaWNoIGNhbiBlbWJlZCA8c2NyaXB0PiBhbmQgcnVucyBpdCB3aGVuIHZpc2l0ZWQgYXMgYSBkb2N1bWVudCkuIE90aGVyd2lzZSBhIHVzZXIgY291bGQgaG9zdCBhIGZpbGUgYW5kLCBieSB2aXNpdGluZyBpdCwgcnVuIGl0IG9uIG91ciBkb21haW4gLSBnaXZpbmcgdGhlbSBhY2Nlc3MgdG8gYWxsIG9mIG91ciBrZXlzIGFuZCBjb29raWVzLiBQREYgc3RheXM6IGJyb3dzZXIgUERGIHZpZXdlcnMgcnVuIGFueSBlbWJlZGRlZCBQREYgc2NyaXB0aW5nIGluIGEgc2FuZGJveCB3aXRoIG5vIGFjY2VzcyB0byB0aGUgc2VydmluZyBvcmlnaW4ncyBjb29raWVzIG9yIERPTS5cbmNvbnN0IENPTlRFTlRfVFlQRVM6IHsgW2V4dDogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgY3NzOiBcInRleHQvY3NzOyBjaGFyc2V0PXV0Zi04XCIsIGpzb246IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLFxuICAgIHR4dDogXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCIsIHBuZzogXCJpbWFnZS9wbmdcIiwganBnOiBcImltYWdlL2pwZWdcIiwganBlZzogXCJpbWFnZS9qcGVnXCIsIGdpZjogXCJpbWFnZS9naWZcIixcbiAgICB3ZWJwOiBcImltYWdlL3dlYnBcIiwgbXA0OiBcInZpZGVvL21wNFwiLCB3ZWJtOiBcInZpZGVvL3dlYm1cIixcbiAgICBtcDM6IFwiYXVkaW8vbXBlZ1wiLCB3YXY6IFwiYXVkaW8vd2F2XCIsIHBkZjogXCJhcHBsaWNhdGlvbi9wZGZcIixcbn07XG5cbmNvbnN0IGNvbm5lY3RlZENsaWVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbmZ1bmN0aW9uIHRyYWNrQ2FsbGVyKCk6IHZvaWQge1xuICAgIGxldCBub2RlSWQgPSBTb2NrZXRGdW5jdGlvbi5nZXRDYWxsZXIoKS5ub2RlSWQ7XG4gICAgaWYgKGNvbm5lY3RlZENsaWVudHMuaGFzKG5vZGVJZCkpIHJldHVybjtcbiAgICBjb25uZWN0ZWRDbGllbnRzLmFkZChub2RlSWQpO1xuICAgIFNvY2tldEZ1bmN0aW9uLm9uTmV4dERpc2Nvbm5lY3Qobm9kZUlkLCAoKSA9PiB7XG4gICAgICAgIGNvbm5lY3RlZENsaWVudHMuZGVsZXRlKG5vZGVJZCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicm9hZGNhc3RSb3V0aW5nQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhgQnJvYWRjYXN0aW5nIHJvdXRpbmcgY29uZmlnIGNoYW5nZSB0byAke2Nvbm5lY3RlZENsaWVudHMuc2l6ZX0gY29ubmVjdGVkIGNsaWVudHNgKTtcbiAgICBmb3IgKGxldCBub2RlSWQgb2YgWy4uLmNvbm5lY3RlZENsaWVudHNdKSB7XG4gICAgICAgIHZvaWQgU3RvcmFnZUNsaWVudENvbnRyb2xsZXIubm9kZXNbbm9kZUlkXS5yb3V0aW5nQ29uZmlnQ2hhbmdlZCgpLmNhdGNoKCgpID0+IHsgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRDYWxsZXJNYWNoaW5lSWQoKTogc3RyaW5nIHtcbiAgICBsZXQgY2FsbGVyID0gU29ja2V0RnVuY3Rpb24uZ2V0Q2FsbGVyKCk7XG4gICAgbGV0IG1hY2hpbmVJZCA9IHNlc3Npb25zLmdldChjYWxsZXIubm9kZUlkKTtcbiAgICBpZiAoIW1hY2hpbmVJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7U1RPUkFHRV9OT1RfQVVUSEVOVElDQVRFRH0gQ2FsbCBhdXRoZW50aWNhdGUgZmlyc3QgKGNvbm5lY3Rpb24gJHtjYWxsZXIubm9kZUlkfSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hY2hpbmVJZDtcbn1cbmZ1bmN0aW9uIGdldENhbGxlcklQKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldE5vZGVJZElQKFNvY2tldEZ1bmN0aW9uLmdldENhbGxlcigpLm5vZGVJZCk7XG59XG5mdW5jdGlvbiBpc0FkbWluKG1hY2hpbmVJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1hY2hpbmVJZCA9PT0gZ2V0T3duTWFjaGluZUlkKGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcoKS5yb290RG9tYWluKTtcbn1cbmZ1bmN0aW9uIHJlcXVpcmVBZG1pbigpOiBzdHJpbmcge1xuICAgIGxldCBtYWNoaW5lSWQgPSBnZXRDYWxsZXJNYWNoaW5lSWQoKTtcbiAgICBpZiAoIWlzQWRtaW4obWFjaGluZUlkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7U1RPUkFHRV9BQ0NFU1NfREVOSUVEfSBBZG1pbiBjb21tYW5kcyBtdXN0IGJlIHJ1biBmcm9tIHRoZSBzdG9yYWdlIG1hY2hpbmUgaXRzZWxmIChjYWxsZXIgbWFjaGluZSAke21hY2hpbmVJZH0pYCk7XG4gICAgfVxuICAgIHJldHVybiBtYWNoaW5lSWQ7XG59XG5hc3luYyBmdW5jdGlvbiByZXF1aXJlQWNjZXNzKGFjY291bnQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgYXNzZXJ0VmFsaWROYW1lKGFjY291bnQsIFwiYWNjb3VudFwiKTtcbiAgICBsZXQgbWFjaGluZUlkID0gZ2V0Q2FsbGVyTWFjaGluZUlkKCk7XG4gICAgaWYgKGlzQWRtaW4obWFjaGluZUlkKSkgcmV0dXJuIG1hY2hpbmVJZDtcbiAgICBsZXQgdHJ1c3QgPSBhd2FpdCBnZXRUcnVzdCgpO1xuICAgIGxldCB0cnVzdGVkID0gYXdhaXQgdHJ1c3QuZ2V0KGAke2FjY291bnR9fCR7bWFjaGluZUlkfWApO1xuICAgIGlmICghdHJ1c3RlZCkge1xuICAgICAgICBsZXQgeyBkb21haW4sIHBvcnQgfSA9IGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcoKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1NUT1JBR0VfQUNDRVNTX0RFTklFRH0gTWFjaGluZSAke21hY2hpbmVJZH0gaGFzIG5vIGFjY2VzcyB0byBhY2NvdW50ICR7SlNPTi5zdHJpbmdpZnkoYWNjb3VudCl9LiBWaXNpdCBodHRwczovLyR7ZG9tYWlufToke3BvcnR9LyR7YWNjb3VudH0gZm9yIGFjY2VzcyBpbnN0cnVjdGlvbnMuYCk7XG4gICAgfVxuICAgIHJldHVybiBtYWNoaW5lSWQ7XG59XG5cbmZ1bmN0aW9uIGdldEdyYW50QWNjZXNzQ29tbWFuZChyZXF1ZXN0SWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHsgc3NoVGFyZ2V0LCBzZXJ2ZXJDb21tYW5kIH0gPSBnZXRTdG9yYWdlU2VydmVyQ29uZmlnKCk7XG4gICAgcmV0dXJuIGBzc2ggJHtzc2hUYXJnZXR9ICcke3NlcnZlckNvbW1hbmR9IC0tcmVxdWVzdElkICR7cmVxdWVzdElkfSdgO1xufVxuXG5jbGFzcyBSZW1vdGVTdG9yYWdlQ29udHJvbGxlckJhc2Uge1xuICAgIGFzeW5jIHBpbmcoKTogUHJvbWlzZTx7fT4ge1xuICAgICAgICB0cmFja0NhbGxlcigpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgYXN5bmMgYXV0aGVudGljYXRlKHRva2VuOiBBdXRoVG9rZW4pOiBQcm9taXNlPHsgbWFjaGluZUlkOiBzdHJpbmc7IGlwOiBzdHJpbmcgfT4ge1xuICAgICAgICBsZXQgeyBkb21haW4sIHBvcnQgfSA9IGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcoKTtcbiAgICAgICAgbGV0IGNhbGxlciA9IFNvY2tldEZ1bmN0aW9uLmdldENhbGxlcigpO1xuICAgICAgICB2ZXJpZnkodG9rZW4uY2VydFBlbSwgdG9rZW4uc2lnbmF0dXJlLCB0b2tlbi5kYXRhKTtcbiAgICAgICAgbGV0IHsgcHVycG9zZSwgdGltZSwgc2VydmVyIH0gPSB0b2tlbi5kYXRhO1xuICAgICAgICBpZiAocHVycG9zZSAhPT0gU1RPUkFHRV9BVVRIX1BVUlBPU0UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXV0aCB0b2tlbiBwdXJwb3NlIGlzICR7SlNPTi5zdHJpbmdpZnkocHVycG9zZSl9LCBleHBlY3RlZCAke0pTT04uc3RyaW5naWZ5KFNUT1JBR0VfQVVUSF9QVVJQT1NFKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTWF0aC5hYnMoRGF0ZS5ub3coKSAtIHRpbWUpID4gQVVUSF9USU1FX1dJTkRPVykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdXRoIHRva2VuIHRpbWUgaXMgdG9vIGZhciBmcm9tIHRoZSBzZXJ2ZXIgdGltZSAodG9rZW4gJHt0aW1lfSwgc2VydmVyICR7RGF0ZS5ub3coKX0sIGFsbG93ZWQgZHJpZnQgJHtBVVRIX1RJTUVfV0lORE9XfW1zKWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0b2tlbkRvbWFpbiA9IHNlcnZlci5zcGxpdChcIjpcIilbMF07XG4gICAgICAgIGlmICh0b2tlbkRvbWFpbiAhPT0gZG9tYWluKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1dGggdG9rZW4gaXMgZm9yIHNlcnZlciAke0pTT04uc3RyaW5naWZ5KHNlcnZlcil9LCBidXQgdGhpcyBzZXJ2ZXIgaXMgJHtKU09OLnN0cmluZ2lmeShgJHtkb21haW59OiR7cG9ydH1gKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWFjaGluZUlkID0gZ2V0Q29tbW9uTmFtZSh0b2tlbi5jZXJ0UGVtKS5zcGxpdChcIi5cIilbMF07XG4gICAgICAgIGlmICghdmVyaWZ5TWFjaGluZUlkRm9yUHVibGljS2V5KHsgbWFjaGluZUlkLCBwdWJsaWNLZXk6IGdldFB1YmxpY0lkZW50aWZpZXIodG9rZW4uY2VydFBlbSkgfSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgY29tbW9uIG5hbWUgJHtKU09OLnN0cmluZ2lmeShnZXRDb21tb25OYW1lKHRva2VuLmNlcnRQZW0pKX0gZG9lcyBub3QgbWF0Y2ggaXRzIHB1YmxpYyBrZXlgKTtcbiAgICAgICAgfVxuICAgICAgICBzZXNzaW9ucy5zZXQoY2FsbGVyLm5vZGVJZCwgbWFjaGluZUlkKTtcbiAgICAgICAgd2hpbGUgKHNlc3Npb25zLnNpemUgPiBNQVhfU0VTU0lPTlMpIHtcbiAgICAgICAgICAgIGxldCBvbGRlc3QgPSBzZXNzaW9ucy5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgICAgICAgaWYgKG9sZGVzdCA9PT0gdW5kZWZpbmVkKSBicmVhaztcbiAgICAgICAgICAgIHNlc3Npb25zLmRlbGV0ZShvbGRlc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG1hY2hpbmVJZCwgaXA6IGdldENhbGxlcklQKCkgfTtcbiAgICB9XG5cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgcmVxdWVzdEFjY2Vzcyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nIH0pOiBQcm9taXNlPHsgbWFjaGluZUlkOiBzdHJpbmc7IGlwOiBzdHJpbmc7IHJlcXVlc3RJZDogc3RyaW5nOyBncmFudEFjY2Vzc0NvbW1hbmQ6IHN0cmluZyB9PiB7XG4gICAgICAgIGxldCBhY2NvdW50ID0gY29uZmlnLmFjY291bnQ7XG4gICAgICAgIGxldCBtYWNoaW5lSWQgPSBnZXRDYWxsZXJNYWNoaW5lSWQoKTtcbiAgICAgICAgbGV0IGlwID0gZ2V0Q2FsbGVySVAoKTtcbiAgICAgICAgbGV0IHJlcXVlc3RzU3RvcmFnZSA9IGF3YWl0IGdldFJlcXVlc3RzKCk7XG4gICAgICAgIGxldCByZXF1ZXN0cyA9IGF3YWl0IHJlcXVlc3RzU3RvcmFnZS5nZXQoaXApIHx8IFtdO1xuICAgICAgICBsZXQgZXhpc3RpbmcgPSByZXF1ZXN0cy5maW5kKHggPT4geC5hY2NvdW50ID09PSBhY2NvdW50ICYmIHgubWFjaGluZUlkID09PSBtYWNoaW5lSWQpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgIGV4aXN0aW5nLnRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhpc3RpbmcgPSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxMCksXG4gICAgICAgICAgICAgICAgYWNjb3VudCxcbiAgICAgICAgICAgICAgICBtYWNoaW5lSWQsXG4gICAgICAgICAgICAgICAgaXAsXG4gICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXF1ZXN0cy5wdXNoKGV4aXN0aW5nKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAocmVxdWVzdHMubGVuZ3RoID4gTUFYX1JFUVVFU1RTX1BFUl9JUCkgcmVxdWVzdHMuc2hpZnQoKTtcbiAgICAgICAgYXdhaXQgcmVxdWVzdHNTdG9yYWdlLnNldChpcCwgcmVxdWVzdHMpO1xuICAgICAgICByZXR1cm4geyBtYWNoaW5lSWQsIGlwLCByZXF1ZXN0SWQ6IGV4aXN0aW5nLnJlcXVlc3RJZCwgZ3JhbnRBY2Nlc3NDb21tYW5kOiBnZXRHcmFudEFjY2Vzc0NvbW1hbmQoZXhpc3RpbmcucmVxdWVzdElkKSB9O1xuICAgIH1cblxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRBY2Nlc3NTdGF0ZShjb25maWc6IHsgYWNjb3VudDogc3RyaW5nIH0pOiBQcm9taXNlPEFjY2Vzc1N0YXRlPiB7XG4gICAgICAgIGxldCBhY2NvdW50ID0gY29uZmlnLmFjY291bnQ7XG4gICAgICAgIGxldCBtYWNoaW5lSWQgPSBnZXRDYWxsZXJNYWNoaW5lSWQoKTtcbiAgICAgICAgbGV0IGlwID0gZ2V0Q2FsbGVySVAoKTtcbiAgICAgICAgbGV0IHRydXN0ID0gYXdhaXQgZ2V0VHJ1c3QoKTtcbiAgICAgICAgbGV0IGhhc0FjY2VzcyA9IGlzQWRtaW4obWFjaGluZUlkKSB8fCAhIWF3YWl0IHRydXN0LmdldChgJHthY2NvdW50fXwke21hY2hpbmVJZH1gKTtcbiAgICAgICAgbGV0IHJlc3VsdDogQWNjZXNzU3RhdGUgPSB7IG1hY2hpbmVJZCwgaXAsIGhhc0FjY2VzcyB9O1xuICAgICAgICBpZiAoIWhhc0FjY2Vzcykge1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RzID0gYXdhaXQgZ2V0UmVxdWVzdHMoKTtcbiAgICAgICAgICAgIGxldCBvd25SZXF1ZXN0ID0gKGF3YWl0IHJlcXVlc3RzLmdldChpcCkgfHwgW10pLmZpbmQoeCA9PiB4LmFjY291bnQgPT09IGFjY291bnQgJiYgeC5tYWNoaW5lSWQgPT09IG1hY2hpbmVJZCk7XG4gICAgICAgICAgICBpZiAob3duUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5ncmFudEFjY2Vzc0NvbW1hbmQgPSBnZXRHcmFudEFjY2Vzc0NvbW1hbmQob3duUmVxdWVzdC5yZXF1ZXN0SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0cnVzdGVkTWFjaGluZXM6IFRydXN0UmVjb3JkW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGF3YWl0IHRydXN0LmdldEtleXMoKSkge1xuICAgICAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgJHthY2NvdW50fXxgKSkgY29udGludWU7XG4gICAgICAgICAgICBsZXQgcmVjb3JkID0gYXdhaXQgdHJ1c3QuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAocmVjb3JkKSB0cnVzdGVkTWFjaGluZXMucHVzaChyZWNvcmQpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC50cnVzdGVkTWFjaGluZXMgPSB0cnVzdGVkTWFjaGluZXM7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYXN5bmMgbGlzdFJlcXVlc3RzRm9ySVAoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgaXA6IHN0cmluZyB9KTogUHJvbWlzZTxBY2Nlc3NSZXF1ZXN0W10+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RzID0gYXdhaXQgZ2V0UmVxdWVzdHMoKTtcbiAgICAgICAgcmV0dXJuIChhd2FpdCByZXF1ZXN0cy5nZXQoY29uZmlnLmlwKSB8fCBbXSkuZmlsdGVyKHggPT4geC5hY2NvdW50ID09PSBjb25maWcuYWNjb3VudCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ3JhbnRBY2Nlc3MoY29uZmlnOiB7IHJlcXVlc3RJZDogc3RyaW5nIH0pOiBQcm9taXNlPFRydXN0UmVjb3JkPiB7XG4gICAgICAgIGxldCByZXF1ZXN0SWQgPSBjb25maWcucmVxdWVzdElkO1xuICAgICAgICBsZXQgY2FsbGVyTWFjaGluZUlkID0gZ2V0Q2FsbGVyTWFjaGluZUlkKCk7XG4gICAgICAgIGxldCB0cnVzdCA9IGF3YWl0IGdldFRydXN0KCk7XG4gICAgICAgIGxldCByZXF1ZXN0cyA9IGF3YWl0IGdldFJlcXVlc3RzKCk7XG4gICAgICAgIGZvciAobGV0IGlwIG9mIGF3YWl0IHJlcXVlc3RzLmdldEtleXMoKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgcmVxdWVzdCBvZiBhd2FpdCByZXF1ZXN0cy5nZXQoaXApIHx8IFtdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QucmVxdWVzdElkICE9PSByZXF1ZXN0SWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmICghaXNBZG1pbihjYWxsZXJNYWNoaW5lSWQpICYmICFhd2FpdCB0cnVzdC5nZXQoYCR7cmVxdWVzdC5hY2NvdW50fXwke2NhbGxlck1hY2hpbmVJZH1gKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7U1RPUkFHRV9BQ0NFU1NfREVOSUVEfSBNYWNoaW5lICR7Y2FsbGVyTWFjaGluZUlkfSBoYXMgbm8gYWNjZXNzIHRvIGFjY291bnQgJHtKU09OLnN0cmluZ2lmeShyZXF1ZXN0LmFjY291bnQpfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgcmVjb3JkOiBUcnVzdFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudDogcmVxdWVzdC5hY2NvdW50LFxuICAgICAgICAgICAgICAgICAgICBtYWNoaW5lSWQ6IHJlcXVlc3QubWFjaGluZUlkLFxuICAgICAgICAgICAgICAgICAgICBpcDogcmVxdWVzdC5pcCxcbiAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGF3YWl0IHRydXN0LnNldChgJHtyZXF1ZXN0LmFjY291bnR9fCR7cmVxdWVzdC5tYWNoaW5lSWR9YCwgcmVjb3JkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjb3JkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gYWNjZXNzIHJlcXVlc3QgZm91bmQgd2l0aCBpZCAke0pTT04uc3RyaW5naWZ5KHJlcXVlc3RJZCl9LiBJdCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gZ3JhbnRlZCBvciBleHBpcmVkLmApO1xuICAgIH1cblxuICAgIC8qKiBBZG1pbiAoc28gb25seSB0aGlzIG1hY2hpbmUncyBvd24gcHJvY2Vzc2VzIGNhbiBjYWxsIGl0KTogdGhlIGJ1Y2tldHMgdGhpcyBwcm9jZXNzIGhhcyBsb2FkZWQuIEEgZGVwbG95IHN1Y2Nlc3NvciBhc2tzIGl0cyBwcmVkZWNlc3NvciBmb3IgdGhpcywgc28gaXQgYWN0aXZhdGVzIGV4YWN0bHkgdGhlIGJ1Y2tldHMgdGhhdCBhcmUgaW4gdXNlIGluc3RlYWQgb2YgZXZlcnkgYnVja2V0IG9uIGRpc2suICovXG4gICAgYXN5bmMgYWRtaW5MaXN0QWN0aXZlQnVja2V0cygpOiBQcm9taXNlPHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmcgfVtdPiB7XG4gICAgICAgIHJldHVybiBnZXRBY3RpdmVCdWNrZXRLZXlzKCk7XG4gICAgfVxuICAgIGFzeW5jIGFkbWluTGlzdFJlcXVlc3RzKGNvbmZpZzogeyBpcDogc3RyaW5nIH0pOiBQcm9taXNlPEFjY2Vzc1JlcXVlc3RbXT4ge1xuICAgICAgICBsZXQgcmVxdWVzdHMgPSBhd2FpdCBnZXRSZXF1ZXN0cygpO1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVxdWVzdHMuZ2V0KGNvbmZpZy5pcCkgfHwgW107XG4gICAgfVxuICAgIGFzeW5jIGFkbWluR3JhbnRBY2Nlc3MoY29uZmlnOiB7IHJlcXVlc3RJZDogc3RyaW5nIH0pOiBQcm9taXNlPFRydXN0UmVjb3JkPiB7XG4gICAgICAgIGxldCByZXF1ZXN0SWQgPSBjb25maWcucmVxdWVzdElkO1xuICAgICAgICBsZXQgdHJ1c3QgPSBhd2FpdCBnZXRUcnVzdCgpO1xuICAgICAgICBsZXQgcmVxdWVzdHMgPSBhd2FpdCBnZXRSZXF1ZXN0cygpO1xuICAgICAgICBmb3IgKGxldCBpcCBvZiBhd2FpdCByZXF1ZXN0cy5nZXRLZXlzKCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHJlcXVlc3Qgb2YgYXdhaXQgcmVxdWVzdHMuZ2V0KGlwKSB8fCBbXSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnJlcXVlc3RJZCAhPT0gcmVxdWVzdElkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBsZXQgcmVjb3JkOiBUcnVzdFJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgYWNjb3VudDogcmVxdWVzdC5hY2NvdW50LFxuICAgICAgICAgICAgICAgICAgICBtYWNoaW5lSWQ6IHJlcXVlc3QubWFjaGluZUlkLFxuICAgICAgICAgICAgICAgICAgICBpcDogcmVxdWVzdC5pcCxcbiAgICAgICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGF3YWl0IHRydXN0LnNldChgJHtyZXF1ZXN0LmFjY291bnR9fCR7cmVxdWVzdC5tYWNoaW5lSWR9YCwgcmVjb3JkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjb3JkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gYWNjZXNzIHJlcXVlc3QgZm91bmQgd2l0aCBpZCAke0pTT04uc3RyaW5naWZ5KHJlcXVlc3RJZCl9LiBJdCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gZ3JhbnRlZCBvciBleHBpcmVkLmApO1xuICAgIH1cblxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBAdHJhY2tBY2Nlc3NDYWxsKFwiZ2V0XCIpXG4gICAgYXN5bmMgZ2V0Mihjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWc7IHJhbmdlPzogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9OyBpbnRlcm5hbD86IGJvb2xlYW47IGluY2x1ZGVUb21ic3RvbmVzPzogYm9vbGVhbiB9KTogUHJvbWlzZTx7IGRhdGE6IEJ1ZmZlcjsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGlmIChjb25maWcucGF0aCA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICAvLyBUaGUgcm91dGluZyBmaWxlIGxpdmVzIG91dHNpZGUgZXZlcnkgc3RvcmUgYW5kIGV2ZW4gb3V0c2lkZSB0aGUgYnVja2V0IChpdCBpcyB3aGF0IENSRUFURVMgaXQpLCBzbyBpdCBpcyByZWFkIHN0cmFpZ2h0IG9mZiB0aGUgZGlzayAtIGFic2VudCBtZWFucyB1bmRlZmluZWQsIGV4YWN0bHkgbGlrZSBhbnkgZmlsZSByZWFkXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZ2V0Um91dGluZ0ZpbGVSZXN1bHQoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLmludGVybmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVhZEJ1Y2tldEludGVybmFsKGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgd2l0aFN0b3JlKGNvbmZpZywgc3RvcmUgPT4gc3RvcmUuZ2V0Mihjb25maWcpKTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIEB0cmFja0FjY2Vzc0NhbGwoXCJzZXRcIilcbiAgICBhc3luYyBzZXQoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGRhdGE6IEJ1ZmZlcjsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWc7IGxhc3RNb2RpZmllZD86IG51bWJlcjsgZm9yY2VTZXRJbW11dGFibGU/OiBib29sZWFuOyBpbnRlcm5hbD86IGJvb2xlYW4gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhc3NlcnRXcml0ZXNBbGxvd2VkKCk7XG4gICAgICAgIC8vIENvcGllZCBiZWNhdXNlIHRoZSB3aXJlIGhhbmRzIHVzIGEgcGxhaW4gVWludDhBcnJheSB2aWV3LCBub3QgYSByZWFsIEJ1ZmZlclxuICAgICAgICBsZXQgZGF0YSA9IEJ1ZmZlci5mcm9tKGNvbmZpZy5kYXRhKTtcbiAgICAgICAgaWYgKGNvbmZpZy5wYXRoID09PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgIC8vIFRoZSBzdG9yZSB0aGUgY2FsbGVyIHNlbGVjdGVkIG93bnMgdGhpcyBmaWxlOiBpdCBhcHBsaWVzIGl0LCBlbmZvcmNlcyB0aGUgdmVyc2lvbiBydWxlLCBhbmQgaXRzIHBlZXJzIHB1bGwgaXQgZnJvbSB0aGVyZVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHdyaXRlUm91dGluZ0NvbmZpZyhjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUsIGNvbmZpZy5zb3VyY2VDb25maWcubmFtZSwgZGF0YSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5zZXQoeyAuLi5jb25maWcsIGRhdGEgfSkpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgQHRyYWNrQWNjZXNzQ2FsbChcImRlbFwiKVxuICAgIGFzeW5jIGRlbChjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWc7IGxhc3RNb2RpZmllZD86IG51bWJlcjsgaW50ZXJuYWw/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGVzQWxsb3dlZCgpO1xuICAgICAgICBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5kZWwoY29uZmlnKSk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBAdHJhY2tBY2Nlc3NDYWxsKFwibW92ZVwiKVxuICAgIGFzeW5jIG1vdmUoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBmcm9tUGF0aDogc3RyaW5nOyB0b1BhdGg6IHN0cmluZzsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWcgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhc3NlcnRXcml0ZXNBbGxvd2VkKCk7XG4gICAgICAgIC8vIGFzc2VydFZhbGlkQXJncyBvbmx5IGtub3dzIHRoZSB3ZWxsLWtub3duIGBwYXRoYCBmaWVsZCwgc28gdGhlIHR3byBwYXRocyBvZiBhIG1vdmUgYXJlIHZhbGlkYXRlZCBoZXJlXG4gICAgICAgIGFzc2VydFZhbGlkUGF0aChjb25maWcuZnJvbVBhdGgpO1xuICAgICAgICBhc3NlcnRWYWxpZFBhdGgoY29uZmlnLnRvUGF0aCk7XG4gICAgICAgIGF3YWl0IHdpdGhTdG9yZShjb25maWcsIHN0b3JlID0+IHN0b3JlLm1vdmUoY29uZmlnKSk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBAdHJhY2tBY2Nlc3NDYWxsKFwiZ2V0SW5mb1wiKVxuICAgIGFzeW5jIGdldEluZm8oY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnOyBpbmNsdWRlVG9tYnN0b25lcz86IGJvb2xlYW4gfSk6IFByb21pc2U8eyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKGNvbmZpZy5wYXRoID09PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBnZXRSb3V0aW5nRmlsZVJlc3VsdChjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAmJiB7IHdyaXRlVGltZTogcmVzdWx0LndyaXRlVGltZSwgc2l6ZTogcmVzdWx0LnNpemUgfSB8fCB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yZShjb25maWcsIHN0b3JlID0+IHN0b3JlLmdldEluZm8oY29uZmlnKSk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBAdHJhY2tBY2Nlc3NDYWxsKFwiZmluZEluZm9cIilcbiAgICBhc3luYyBmaW5kSW5mbyhjb25maWc6IEZpbmRDb25maWcgJiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwcmVmaXg6IHN0cmluZzsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWcgfSk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yZShjb25maWcsIHN0b3JlID0+IHN0b3JlLmZpbmRJbmZvKGNvbmZpZykpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgQHRyYWNrQWNjZXNzQ2FsbChcImdldENoYW5nZXNBZnRlclwiKVxuICAgIGFzeW5jIGdldENoYW5nZXNBZnRlcjIoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZzsgdGltZTogbnVtYmVyOyByb3V0ZXM/OiBbbnVtYmVyLCBudW1iZXJdW10gfSk6IFByb21pc2U8QXJjaGl2ZUZpbGVJbmZvW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yZShjb25maWcsIHN0b3JlID0+IHN0b3JlLmdldENoYW5nZXNBZnRlcjIoY29uZmlnKSk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRBcmNoaXZlc0NvbmZpZyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmcgfSk6IFByb21pc2U8QXJjaGl2ZXNDb25maWc+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdldEJ1Y2tldEFyY2hpdmVzQ29uZmlnKGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBsaXN0QnVja2V0cyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nIH0pOiBQcm9taXNlPFNlcnZlckJ1Y2tldEluZm9bXT4ge1xuICAgICAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGRlYnVnTGlzdEFjY291bnRCdWNrZXRzKGNvbmZpZy5hY2NvdW50KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIFRoZSBhY2Nlc3MgaG9vayAoYW5kIHRoZSBzdG9yYWdlIGl0IGluaXRpYWxpemVzKSBydW5zIGJlZm9yZSB0aGlzLCBzbyBhIGxhcmdlIGdhcCBiZXR3ZWVuIHRoaXMgYW5kIHRoZSBjYWxsZXIncyB0aW1pbmcgaXMgdGhlIGhvb2tcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBsaXN0QnVja2V0cygke2NvbmZpZy5hY2NvdW50fSkgY2FsbCBib2R5IHRvb2sgJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogVGhlIGxpdmUsIGluLW1lbW9yeSBzdGF0ZSBvZiBvbmUgYnVja2V0LCBvciBhIHN0cmluZyBzYXlpbmcgd2h5IGl0IGlzIHVuYXZhaWxhYmxlLiBBbnN3ZXJlZCB3aXRob3V0IHRvdWNoaW5nIHRoZSBkaXNrLCBzbyBpdCBpcyBjaGVhcCAtIGJ1dCBvbmx5IHdvcmtzIHdoaWxlIHRoZSBidWNrZXQgaXMgbG9hZGVkIGhlcmUuICovXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGdldEFjdGl2ZUJ1Y2tldChjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmcgfSk6IFByb21pc2U8QWN0aXZlQnVja2V0SW5mbyB8IHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgZGVidWdHZXRBY3RpdmVCdWNrZXQoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICB9XG4gICAgLyoqIExvYWRzIGEgYnVja2V0IHRoYXQgZXhpc3RzIG9uIHRoaXMgc2VydmVyIGludG8gbWVtb3J5IChzdGFydGluZyBpdHMgc3luY2hyb25pemF0aW9uKSBhbmQgcmV0dXJucyBpdHMgbGl2ZSBzdGF0ZSwgb3IgYSBzdHJpbmcgc2F5aW5nIHdoeSBpdCBjb3VsZCBub3QgYmUgbG9hZGVkLiAqL1xuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBhY3RpdmF0ZUJ1Y2tldChjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmcgfSk6IFByb21pc2U8QWN0aXZlQnVja2V0SW5mbyB8IHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgYWN0aXZhdGVCdWNrZXQoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICB9XG4gICAgLyoqIFplcm9lcyB0aGUgd3JpdGUgc3RhdGlzdGljcyBsaXN0QnVja2V0cyByZXBvcnRzIGFuZCB0aGUgaW4tbWVtb3J5IGFjY2VzcyBzdGF0aXN0aWNzLCBmb3IgZXZlcnkgYnVja2V0IGluIHRoZSBhY2NvdW50LiAqL1xuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBjbGVhcldyaXRlU3RhdHMoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZyB9KTogUHJvbWlzZTx7IGNsZWFyZWRCdWNrZXRzOiBudW1iZXIgfT4ge1xuICAgICAgICBjbGVhckFjY291bnRBY2Nlc3NTdGF0cyhjb25maWcuYWNjb3VudCk7XG4gICAgICAgIHJldHVybiB7IGNsZWFyZWRCdWNrZXRzOiBkZWJ1Z0NsZWFyQWNjb3VudFdyaXRlU3RhdHMoY29uZmlnLmFjY291bnQpIH07XG4gICAgfVxuICAgIC8qKiBJbi1tZW1vcnkgdG90YWxzIHBlciBvcGVyYXRpb24gdHlwZSBzaW5jZSBzdGFydHVwIChvciB0aGUgbGFzdCBjbGVhcldyaXRlU3RhdHMpLiAqL1xuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRBY2Nlc3NTdGF0cyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nIH0pOiBQcm9taXNlPEFjY2Vzc1RvdGFscz4ge1xuICAgICAgICByZXR1cm4gZ2V0QWNjZXNzVG90YWxzKGNvbmZpZy5hY2NvdW50KTtcbiAgICB9XG4gICAgLyoqIEEgcGF0aCBicmVha2Rvd24gb2Ygb25lIG9wZXJhdGlvbidzIGFjY2Vzc2VzIChvcGVyYXRpb24gbmFtZXMgY29tZSBmcm9tIGdldEFjY2Vzc1N0YXRzKS4gbWF4Q291bnQgaXMgcGFzc2VkIHN0cmFpZ2h0IHRvIFRyZWVTdW1tYXJ5LmdldFN1bW1hcmllcy4gd2VpZ2h0QnlTaXplIGlzIGlnbm9yZWQgZm9yIGNvdW50LW9ubHkgb3BlcmF0aW9ucywgd2hpY2ggcmV0dXJuIHRoZWlyIGNvdW50IGJyZWFrZG93bi4gKi9cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgZ2V0QWNjZXNzU3VtbWFyaWVzKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IG9wZXJhdGlvbjogc3RyaW5nOyBtYXhDb3VudDogbnVtYmVyOyB3ZWlnaHRCeVNpemU/OiBib29sZWFuIH0pOiBQcm9taXNlPFN1bW1hcnlFbnRyeTxBY2Nlc3NTdW1tYXJ5U3RhdGU+W10+IHtcbiAgICAgICAgcmV0dXJuIHJlYWRBY2Nlc3NTdW1tYXJpZXMoY29uZmlnKTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGdldEluZGV4SW5mbyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmcgfSk6IFByb21pc2U8eyBmaWxlQ291bnQ6IG51bWJlcjsgYnl0ZUNvdW50OiBudW1iZXI7IHNvdXJjZXM6IHsgZGVidWdOYW1lOiBzdHJpbmc7IGZpbGVDb3VudDogbnVtYmVyOyBieXRlQ291bnQ6IG51bWJlciB9W10gfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgZGVidWdCdWNrZXRJbmRleFRvdGFscyhjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgZ2V0U3luY1N0YXR1cyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmcgfSk6IFByb21pc2U8QXJjaGl2ZXNTeW5jU3RhdHVzPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBidWNrZXRTeW5jU3RhdHVzKGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSk7XG4gICAgfVxuXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIHN0YXJ0TGFyZ2VGaWxlKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZzsgbGFzdE1vZGlmaWVkPzogbnVtYmVyOyBmb3JjZVNldEltbXV0YWJsZT86IGJvb2xlYW47IG5vQ2hlY2tzPzogYm9vbGVhbjsgaW50ZXJuYWw/OiBib29sZWFuIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBhc3NlcnRXcml0ZXNBbGxvd2VkKCk7XG4gICAgICAgIGxldCBzdG9yZSA9IGZpbmRCdWNrZXRTdG9yZShjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUsIGNvbmZpZy5zb3VyY2VDb25maWcpO1xuICAgICAgICAvLyBUaGUgc3RvcmUgdmFsaWRhdGVzIHRoZSB3cml0ZSBoZXJlLCBiZWZvcmUgYW55IGJ5dGVzIG1vdmUgKHNlZSBCbG9iU3RvcmUuc3RhcnRMYXJnZVVwbG9hZCkgLSBhIGxhcmdlIGZpbGUgaXMgYSBzZXQsIGFuZCBpdHMgU2V0Q29uZmlnIGRlY2lkZXMgd2hldGhlciBpdCBpcyBldmVuIGFsbG93ZWRcbiAgICAgICAgbGV0IHdyaXRlID0geyBwYXRoOiBjb25maWcucGF0aCwgbGFzdE1vZGlmaWVkOiBjb25maWcubGFzdE1vZGlmaWVkLCBmb3JjZVNldEltbXV0YWJsZTogY29uZmlnLmZvcmNlU2V0SW1tdXRhYmxlLCBub0NoZWNrczogY29uZmlnLm5vQ2hlY2tzLCBpbnRlcm5hbDogY29uZmlnLmludGVybmFsIH07XG4gICAgICAgIGxldCBpZCA9IGF3YWl0IHN0b3JlLnN0YXJ0TGFyZ2VVcGxvYWQod3JpdGUpO1xuICAgICAgICAvLyBUaGUgc3RvcmUgbmFtZSBwaW5zIHRoZSB1cGxvYWQncyBwYXJ0cyBhbmQgZmluaXNoIHRvIHRoZSBzYW1lIHN0b3JlIHRoZSBzdGFydCBwaWNrZWQgKGluLWZsaWdodCB1cGxvYWRzIHN1cnZpdmUgYSBidWNrZXQgcmVidWlsZDogdGhlIHBhcnQgZGF0YSBsaXZlcyBpbiB0aGF0IHN0b3JlJ3MgZm9sZGVyLCB3aGljaCBhIHJlYnVpbHQgc3RvcmUgc3RpbGwgb3BlbnMpXG4gICAgICAgIGxhcmdlVXBsb2FkSW5mby5zZXQoaWQsIHsgLi4ud3JpdGUsIGFjY291bnQ6IGNvbmZpZy5hY2NvdW50LCBidWNrZXROYW1lOiBjb25maWcuYnVja2V0TmFtZSwgc3RvcmVOYW1lOiBjb25maWcuc291cmNlQ29uZmlnLm5hbWUgfSk7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gICAgYXN5bmMgdXBsb2FkUGFydChjb25maWc6IHsgdXBsb2FkSWQ6IHN0cmluZzsgZGF0YTogQnVmZmVyIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGVzQWxsb3dlZCgpO1xuICAgICAgICBsZXQgaW5mbyA9IGxhcmdlVXBsb2FkSW5mby5nZXQoY29uZmlnLnVwbG9hZElkKTtcbiAgICAgICAgaWYgKCFpbmZvKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbGFyZ2UgdXBsb2FkICR7Y29uZmlnLnVwbG9hZElkfWApO1xuICAgICAgICB0cmFja0FjY2Vzcyh7IGFjY291bnQ6IGluZm8uYWNjb3VudCwgb3BlcmF0aW9uOiBcInVwbG9hZFBhcnRcIiwgcGF0aDogYCR7aW5mby5idWNrZXROYW1lfS8ke2luZm8ucGF0aH1gLCBzaXplOiBjb25maWcuZGF0YS5sZW5ndGggfSk7XG4gICAgICAgIGF3YWl0IGdldFN0b3JlKGluZm8uYWNjb3VudCwgaW5mby5idWNrZXROYW1lLCBpbmZvLnN0b3JlTmFtZSkuYXBwZW5kTGFyZ2VVcGxvYWQoeyBpZDogY29uZmlnLnVwbG9hZElkLCBkYXRhOiBCdWZmZXIuZnJvbShjb25maWcuZGF0YSkgfSk7XG4gICAgfVxuICAgIGFzeW5jIGZpbmlzaExhcmdlRmlsZShjb25maWc6IHsgdXBsb2FkSWQ6IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgbGV0IGluZm8gPSBsYXJnZVVwbG9hZEluZm8uZ2V0KGNvbmZpZy51cGxvYWRJZCk7XG4gICAgICAgIGlmICghaW5mbykgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxhcmdlIHVwbG9hZCAke2NvbmZpZy51cGxvYWRJZH1gKTtcbiAgICAgICAgbGFyZ2VVcGxvYWRJbmZvLmRlbGV0ZShjb25maWcudXBsb2FkSWQpO1xuICAgICAgICBhd2FpdCBnZXRTdG9yZShpbmZvLmFjY291bnQsIGluZm8uYnVja2V0TmFtZSwgaW5mby5zdG9yZU5hbWUpLmZpbmlzaExhcmdlVXBsb2FkKHsgaWQ6IGNvbmZpZy51cGxvYWRJZCwgcGF0aDogaW5mby5wYXRoLCBsYXN0TW9kaWZpZWQ6IGluZm8ubGFzdE1vZGlmaWVkLCBmb3JjZVNldEltbXV0YWJsZTogaW5mby5mb3JjZVNldEltbXV0YWJsZSwgbm9DaGVja3M6IGluZm8ubm9DaGVja3MsIGludGVybmFsOiBpbmZvLmludGVybmFsIH0pO1xuICAgIH1cbiAgICAvKiogQmVzdC1lZmZvcnQgY2xlYW51cDogYW4gdW5rbm93biB1cGxvYWQgaGFzIG5vdGhpbmcgbGVmdCB0byBjYW5jZWwuICovXG4gICAgYXN5bmMgY2FuY2VsTGFyZ2VGaWxlKGNvbmZpZzogeyB1cGxvYWRJZDogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IGluZm8gPSBsYXJnZVVwbG9hZEluZm8uZ2V0KGNvbmZpZy51cGxvYWRJZCk7XG4gICAgICAgIGlmICghaW5mbykgcmV0dXJuO1xuICAgICAgICBsYXJnZVVwbG9hZEluZm8uZGVsZXRlKGNvbmZpZy51cGxvYWRJZCk7XG4gICAgICAgIGF3YWl0IGdldFN0b3JlKGluZm8uYWNjb3VudCwgaW5mby5idWNrZXROYW1lLCBpbmZvLnN0b3JlTmFtZSkuY2FuY2VsTGFyZ2VVcGxvYWQoeyBpZDogY29uZmlnLnVwbG9hZElkIH0pO1xuICAgIH1cblxuICAgIC8vIElNUE9SVEFOVDogV2UgY2FuIG5ldmVyIGV4cG9zZSBlbnVtZXJhdGlvbiAobGlzdGluZywgcHJlZml4IHNlYXJjaCwgY2hhbmdlcyBmZWVkcykgb3ZlciB0aGlzIHB1YmxpYyBIVFRQIGVuZHBvaW50IC0gb25seSBleGFjdC1rZXkgcmVhZHMuIEVudW1lcmF0aW9uIHdvdWxkIGJlIGEgbWFzc2l2ZSBzZWN1cml0eSByaXNrIChwdWJsaWMgYnVja2V0cyByZWx5IG9uIHVuZ3Vlc3NhYmxlIGtleXMgc3RheWluZyB1bmd1ZXNzYWJsZSksIGFuZCBjb3VsZCBhbHNvIGNyYXNoIHRoZSBjbGllbnQgYnkgc2VuZGluZyB0aGVtIHRvbyBtdWNoIGRhdGEuIExpc3RpbmdzIGV4aXN0IG9ubHkgb24gdGhlIGF1dGhlbnRpY2F0ZWQgQVBJIChmaW5kSW5mbyBldGMsIGJlaGluZCBhY2NvdW50QWNjZXNzKS5cbiAgICBhc3luYyBodHRwRW50cnkoY29uZmlnPzogeyByZXF1aXJlQ2FsbHM/OiBzdHJpbmdbXTsgY2FjaGVUaW1lPzogbnVtYmVyIH0pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICBsZXQgY2FsbGVyID0gU29ja2V0RnVuY3Rpb24uZ2V0Q2FsbGVyKCk7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gZ2V0Q3VycmVudEhUVFBSZXF1ZXN0KCk7XG4gICAgICAgIGxldCBwYXRobmFtZSA9IG5ldyBVUkwocmVxdWVzdD8udXJsIHx8IFwiL1wiLCBcImh0dHBzOi8vbG9jYWxob3N0XCIpLnBhdGhuYW1lO1xuICAgICAgICBpZiAoIXBhdGhuYW1lLnN0YXJ0c1dpdGgoXCIvZmlsZS9cIikpIHtcbiAgICAgICAgICAgIGxldCBodG1sID0gYXdhaXQgcGVyZm9ybUxvY2FsQ2FsbCh7XG4gICAgICAgICAgICAgICAgY2FsbGVyLFxuICAgICAgICAgICAgICAgIGNhbGw6IHsgbm9kZUlkOiBjYWxsZXIubm9kZUlkLCBjbGFzc0d1aWQ6IFJlcXVpcmVDb250cm9sbGVyLl9jbGFzc0d1aWQsIGZ1bmN0aW9uTmFtZTogXCJyZXF1aXJlSFRNTFwiLCBhcmdzOiBbY29uZmlnXSB9LFxuICAgICAgICAgICAgfSkgYXMgQnVmZmVyO1xuICAgICAgICAgICAgLy8gV2l0aG91dCB0aGlzIHRoZSBhY2Nlc3MgcGFnZSBpcyBzZXJ2ZWQgd2l0aCBubyBjb250ZW50IHR5cGUsIGFuZCBhIGJyb3dzZXIgdGhhdCBpcyB0b2xkIG5vdCB0byBzbmlmZiBzaW1wbHkgd2lsbCBub3QgcmVuZGVyIGl0XG4gICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMoaHRtbCwgeyBcIkNvbnRlbnQtVHlwZVwiOiBcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwYXJ0cyA9IHBhdGhuYW1lLnNwbGl0KFwiL1wiKS5maWx0ZXIoeCA9PiB4KS5tYXAoZGVjb2RlVVJJQ29tcG9uZW50KTtcbiAgICAgICAgbGV0IGFjY291bnQgPSBwYXJ0c1sxXTtcbiAgICAgICAgbGV0IGJ1Y2tldE5hbWUgPSBwYXJ0c1syXTtcbiAgICAgICAgbGV0IGZpbGVQYXRoID0gcGFydHMuc2xpY2UoMykuam9pbihcIi9cIik7XG4gICAgICAgIGlmICghYWNjb3VudCB8fCAhYnVja2V0TmFtZSB8fCAhZmlsZVBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyBzdGF0dXM6IFwiNDA0XCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0VmFsaWROYW1lKGFjY291bnQsIFwiYWNjb3VudFwiKTtcbiAgICAgICAgYXNzZXJ0VmFsaWROYW1lKGJ1Y2tldE5hbWUsIFwiYnVja2V0IG5hbWVcIik7XG4gICAgICAgIGFzc2VydFZhbGlkUGF0aChmaWxlUGF0aCk7XG4gICAgICAgIGxldCBidWNrZXRTdG9yZXMgPSBhd2FpdCBnZXRCdWNrZXRTdG9yZXMoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgICAgIGlmICghYnVja2V0U3RvcmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IHN0YXR1czogXCI0MDRcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFYWNoIHN0b3JlJ3MgcG9saWN5IGNvbWVzIGZyb20gaXRzIG93biBjb25maWcsIHdoaWNoIGl0IGhhcyBvbmx5IHJlYWQgb25jZSBpbml0IHJhblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChidWNrZXRTdG9yZXMubWFwKHggPT4geC5zdG9yZS5pbml0KCkpKTtcbiAgICAgICAgbGV0IHBvbGljaWVzID0gYnVja2V0U3RvcmVzLm1hcCh4ID0+ICh7IHN0b3JlOiB4LnN0b3JlLCBwb2xpY3k6IHguc3RvcmUuc3RvcmVDb25maWcuY3VycmVudCgpIH0pKTtcbiAgICAgICAgaWYgKCFwb2xpY2llcy5zb21lKHggPT4geC5wb2xpY3kucHVibGljKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCdWNrZXQgJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9IGlzIG5vdCBwdWJsaWMsIHNvIGl0cyBmaWxlcyBjYW5ub3QgYmUgcmVhZCBvdmVyIHBsYWluIFVSTHNgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbm9ueW1vdXMgVVJMIHJlYWRzIGNhcnJ5IG5vIHNvdXJjZSBzZWxlY3Rpb24gLSB0aGUgZmlsZSdzIHJvdXRlIHBpY2tzIHRoZSBzdG9yZSwgYW5kIGEgcm91dGUgbm8gc3RvcmUgaGVyZSBjb3ZlcnMgaXMgc2ltcGx5IG5vdCBmb3VuZCAodGhlIHJvdXRpbmcgZmlsZSBpdHNlbGYgbGl2ZXMgb3V0c2lkZSBldmVyeSBzdG9yZSlcbiAgICAgICAgbGV0IGh0dHBTdG9yZTogQmxvYlN0b3JlIHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgaW1tdXRhYmxlID0gZmFsc2U7XG4gICAgICAgIGxldCBpbmZvOiB7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGZpbGVQYXRoICE9PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgIGxldCByb3V0ZSA9IGdldFJvdXRlKGZpbGVQYXRoKTtcbiAgICAgICAgICAgIGxldCBzZXJ2aW5nID0gcG9saWNpZXMuZmluZCh4ID0+IHgucG9saWN5LnB1YmxpYyAmJiByb3V0ZUNvbnRhaW5zKHgucG9saWN5LnJvdXRlLCByb3V0ZSkpO1xuICAgICAgICAgICAgaHR0cFN0b3JlID0gc2VydmluZz8uc3RvcmU7XG4gICAgICAgICAgICBpbW11dGFibGUgPSAhIXNlcnZpbmc/LnBvbGljeS5pbW11dGFibGU7XG4gICAgICAgICAgICBpbmZvID0gaHR0cFN0b3JlICYmIGF3YWl0IGh0dHBTdG9yZS5nZXRJbmZvKHsgcGF0aDogZmlsZVBhdGggfSkgfHwgdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5mbyA9IGF3YWl0IGdldFJvdXRpbmdGaWxlUmVzdWx0KGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW5mbyB8fCAhaW5mby5zaXplKSB7XG4gICAgICAgICAgICB0cmFja0FjY2Vzcyh7IGFjY291bnQsIG9wZXJhdGlvbjogXCJodHRwR2V0XCIsIHBhdGg6IGAke2J1Y2tldE5hbWV9LyR7ZmlsZVBhdGh9YCwgc2l6ZTogMCB9KTtcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyBzdGF0dXM6IFwiNDA0XCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGV4dCA9IGZpbGVQYXRoLnNwbGl0KFwiLlwiKS5wb3AoKSB8fCBcIlwiO1xuICAgICAgICBsZXQgaGVhZGVyczogeyBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IENPTlRFTlRfVFlQRVNbZXh0LnRvTG93ZXJDYXNlKCldIHx8IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsXG4gICAgICAgICAgICBcIkxhc3QtTW9kaWZpZWRcIjogbmV3IERhdGUoaW5mby53cml0ZVRpbWUpLnRvVVRDU3RyaW5nKCksXG4gICAgICAgICAgICBcIkFjY2VwdC1SYW5nZXNcIjogXCJieXRlc1wiLFxuICAgICAgICB9O1xuICAgICAgICAvLyBUaGUgc2VydmluZyBzdG9yZSdzIG93biBwb2xpY3kgLSBhbmQgbmV2ZXIgZm9yIHRoZSByb3V0aW5nIGZpbGUsIHdoaWNoIGNoYW5naW5nIGlzIHRoZSB3aG9sZSBwb2ludCBvZlxuICAgICAgICBpZiAoaW1tdXRhYmxlKSB7XG4gICAgICAgICAgICBoZWFkZXJzW1wiQ2FjaGUtQ29udHJvbFwiXSA9IGBtYXgtYWdlPSR7SU1NVVRBQkxFX0NBQ0hFX1RJTUUgLyAxMDAwfWA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlmTW9kaWZpZWRTaW5jZSA9IHJlcXVlc3Q/LmhlYWRlcnNbXCJpZi1tb2RpZmllZC1zaW5jZVwiXTtcbiAgICAgICAgaWYgKHR5cGVvZiBpZk1vZGlmaWVkU2luY2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGxldCBzaW5jZSA9IG5ldyBEYXRlKGlmTW9kaWZpZWRTaW5jZSkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgaWYgKHNpbmNlICYmIE1hdGguZmxvb3IoaW5mby53cml0ZVRpbWUgLyAxMDAwKSAqIDEwMDAgPD0gc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMoQnVmZmVyLmZyb20oXCJcIiksIHsgLi4uaGVhZGVycywgc3RhdHVzOiBcIjMwNFwiIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByYW5nZTogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9IHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcmFuZ2VIZWFkZXIgPSByZXF1ZXN0Py5oZWFkZXJzW1wicmFuZ2VcIl07XG4gICAgICAgIGlmICh0eXBlb2YgcmFuZ2VIZWFkZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGxldCBtYXRjaCA9IC9eYnl0ZXM9KFxcZCopLShcXGQqKSQvLmV4ZWMocmFuZ2VIZWFkZXIudHJpbSgpKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCAmJiAobWF0Y2hbMV0gfHwgbWF0Y2hbMl0pKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgbGV0IGVuZEluY2x1c2l2ZSA9IGluZm8uc2l6ZSAtIDE7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaFsxXSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IE1hdGgubWF4KDAsIGluZm8uc2l6ZSAtICttYXRjaFsyXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSArbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kSW5jbHVzaXZlID0gTWF0aC5taW4oK21hdGNoWzJdLCBpbmZvLnNpemUgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gaW5mby5zaXplIHx8IHN0YXJ0ID4gZW5kSW5jbHVzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyAuLi5oZWFkZXJzLCBcIkNvbnRlbnQtUmFuZ2VcIjogYGJ5dGVzICovJHtpbmZvLnNpemV9YCwgc3RhdHVzOiBcIjQxNlwiIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByYW5nZSA9IHsgc3RhcnQsIGVuZDogZW5kSW5jbHVzaXZlICsgMSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQ6IHsgZGF0YTogQnVmZmVyOyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChodHRwU3RvcmUpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGh0dHBTdG9yZS5nZXQyKHsgcGF0aDogZmlsZVBhdGgsIHJhbmdlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgZ2V0Um91dGluZ0ZpbGVSZXN1bHQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0geyAuLi5yZXN1bHQsIGRhdGE6IHJlc3VsdC5kYXRhLnN1YmFycmF5KE1hdGgubWluKHJhbmdlLnN0YXJ0LCByZXN1bHQuZGF0YS5sZW5ndGgpLCBNYXRoLm1pbihyYW5nZS5lbmQsIHJlc3VsdC5kYXRhLmxlbmd0aCkpIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJhY2tBY2Nlc3MoeyBhY2NvdW50LCBvcGVyYXRpb246IFwiaHR0cEdldFwiLCBwYXRoOiBgJHtidWNrZXROYW1lfS8ke2ZpbGVQYXRofWAsIHNpemU6IHJlc3VsdCAmJiByZXN1bHQuZGF0YS5sZW5ndGggfHwgMCB9KTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyBzdGF0dXM6IFwiNDA0XCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMocmVzdWx0LmRhdGEsIHsgLi4uaGVhZGVycywgXCJDb250ZW50LVJhbmdlXCI6IGBieXRlcyAke3JhbmdlLnN0YXJ0fS0ke3JhbmdlLmVuZCAtIDF9LyR7aW5mby5zaXplfWAsIHN0YXR1czogXCIyMDZcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMocmVzdWx0LmRhdGEsIGhlYWRlcnMpO1xuICAgIH1cbn1cblxuLyoqIFRoZSBvbmUgcmVzb2x1dGlvbiBldmVyeSBkYXRhIGNhbGwgZG9lczogdGhlIGNsaWVudCdzIHNlbGVjdGVkIHNvdXJjZUNvbmZpZyBOQU1FUyBleGFjdGx5IG9uZSBzdG9yZSAoY3JlYXRlZCBvbiBmaXJzdCB1c2UpLCBhbmQgZm4gcnVucyBvbiBpdC4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdpdGhTdG9yZTxUPihjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnIH0sIGZuOiAoc3RvcmU6IEJsb2JTdG9yZSkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBhd2FpdCBmbihmaW5kQnVja2V0U3RvcmUoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lLCBjb25maWcuc291cmNlQ29uZmlnKSk7XG59XG5cbmNvbnN0IGxhcmdlVXBsb2FkSW5mbyA9IG5ldyBNYXA8c3RyaW5nLCB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGxhc3RNb2RpZmllZD86IG51bWJlcjsgZm9yY2VTZXRJbW11dGFibGU/OiBib29sZWFuOyBub0NoZWNrcz86IGJvb2xlYW47IGludGVybmFsPzogYm9vbGVhbjsgc3RvcmVOYW1lOiBzdHJpbmcgfT4oKTtcblxuY29uc3QgYWNjb3VudEFjY2VzczogU29ja2V0RnVuY3Rpb25Ib29rID0gYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBjb25maWcgPSBjb250ZXh0LmNhbGwuYXJnc1swXSBhcyB7IGFjY291bnQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICBhd2FpdCByZXF1aXJlQWNjZXNzKFN0cmluZyhjb25maWc/LmFjY291bnQpKTtcbiAgICBsZXQgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gICAgaWYgKGR1cmF0aW9uID4gQUNDRVNTX0NIRUNLX1NMT1dfVElNRSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQWNjZXNzIGNoZWNrIGZvciAke2NvbnRleHQuY2FsbC5mdW5jdGlvbk5hbWV9IHRvb2sgJHtkdXJhdGlvbn1tc2ApO1xuICAgIH1cbn07XG5jb25zdCB1cGxvYWRBY2Nlc3M6IFNvY2tldEZ1bmN0aW9uSG9vayA9IGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgbGV0IGNvbmZpZyA9IGNvbnRleHQuY2FsbC5hcmdzWzBdIGFzIHsgdXBsb2FkSWQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgaW5mbyA9IGxhcmdlVXBsb2FkSW5mby5nZXQoU3RyaW5nKGNvbmZpZz8udXBsb2FkSWQpKTtcbiAgICBpZiAoIWluZm8pIHJldHVybjtcbiAgICBhd2FpdCByZXF1aXJlQWNjZXNzKGluZm8uYWNjb3VudCk7XG59O1xuY29uc3QgYWRtaW5BY2Nlc3M6IFNvY2tldEZ1bmN0aW9uSG9vayA9IGFzeW5jICgpID0+IHtcbiAgICByZXF1aXJlQWRtaW4oKTtcbn07XG5cbmV4cG9ydCBjb25zdCBSZW1vdGVTdG9yYWdlQ29udHJvbGxlciA9IFNvY2tldEZ1bmN0aW9uLnJlZ2lzdGVyKFxuICAgIFJFTU9URV9TVE9SQUdFX0NMQVNTX0dVSUQsXG4gICAgbmV3IFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyQmFzZSgpLFxuICAgICgpID0+ICh7XG4gICAgICAgIHBpbmc6IHt9LFxuICAgICAgICBhdXRoZW50aWNhdGU6IHt9LFxuICAgICAgICByZXF1ZXN0QWNjZXNzOiB7fSxcbiAgICAgICAgZ2V0QWNjZXNzU3RhdGU6IHt9LFxuICAgICAgICBsaXN0UmVxdWVzdHNGb3JJUDogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdyYW50QWNjZXNzOiB7fSxcbiAgICAgICAgYWRtaW5MaXN0UmVxdWVzdHM6IHsgaG9va3M6IFthZG1pbkFjY2Vzc10gfSxcbiAgICAgICAgYWRtaW5MaXN0QWN0aXZlQnVja2V0czogeyBob29rczogW2FkbWluQWNjZXNzXSB9LFxuICAgICAgICBhZG1pbkdyYW50QWNjZXNzOiB7IGhvb2tzOiBbYWRtaW5BY2Nlc3NdIH0sXG4gICAgICAgIGdldDI6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBzZXQ6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBkZWw6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBtb3ZlOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0SW5mbzogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGZpbmRJbmZvOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0Q2hhbmdlc0FmdGVyMjogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldEFyY2hpdmVzQ29uZmlnOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0SW5kZXhJbmZvOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgbGlzdEJ1Y2tldHM6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRBY3RpdmVCdWNrZXQ6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBhY3RpdmF0ZUJ1Y2tldDogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGNsZWFyV3JpdGVTdGF0czogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldEFjY2Vzc1N0YXRzOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0QWNjZXNzU3VtbWFyaWVzOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0U3luY1N0YXR1czogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIHN0YXJ0TGFyZ2VGaWxlOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgdXBsb2FkUGFydDogeyBob29rczogW3VwbG9hZEFjY2Vzc10gfSxcbiAgICAgICAgZmluaXNoTGFyZ2VGaWxlOiB7IGhvb2tzOiBbdXBsb2FkQWNjZXNzXSB9LFxuICAgICAgICBjYW5jZWxMYXJnZUZpbGU6IHsgaG9va3M6IFt1cGxvYWRBY2Nlc3NdIH0sXG4gICAgICAgIGh0dHBFbnRyeToge30sXG4gICAgfSksXG4gICAgKCkgPT4gKHtcbiAgICAgICAgbm9DbGllbnRIb29rczogdHJ1ZSxcbiAgICAgICAgbm9EZWZhdWx0SG9va3M6IHRydWUsXG4gICAgfSlcbik7XG4iXX0=
|
|
589
|
-
/* _JS_SOURCE_HASH = "
|
|
589
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZUNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdG9yYWdlQ29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxtRUFBZ0U7QUFFaEUsNkRBQTREO0FBQzVELHlFQUFrRztBQUNsRyxpRUFBbUU7QUFDbkUsaUZBQThFO0FBQzlFLG1EQUF3RDtBQUN4RCxrREFBa0k7QUFDbEksNENBQW1JO0FBQ25JLGlEQUF1RTtBQUN2RSw2REFLOEI7QUFDOUIsK0NBQTREO0FBQzVELGlEQUFvRztBQUVwRyw2Q0FBb0Q7QUFDcEQsdUVBQW9FO0FBQ3BFLCtDQUE4SjtBQUM5Siw2Q0FBaUY7QUFHcEUsUUFBQSx5QkFBeUIsR0FBRyxrQ0FBa0MsQ0FBQztBQUMvRCxRQUFBLG9CQUFvQixHQUFHLHNCQUFzQixDQUFDO0FBQzlDLFFBQUEseUJBQXlCLEdBQUcsMkNBQTJDLENBQUM7QUFDeEUsUUFBQSxxQkFBcUIsR0FBRyx1Q0FBdUMsQ0FBQztBQUU3RSxNQUFNLGdCQUFnQixHQUFHLG1CQUFZLEdBQUcsRUFBRSxDQUFDO0FBQzNDLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDaEMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUFpQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0FBRTNDLHdaQUF3WjtBQUN4WixNQUFNLGFBQWEsR0FBOEI7SUFDN0MsR0FBRyxFQUFFLHlCQUF5QixFQUFFLElBQUksRUFBRSxpQ0FBaUM7SUFDdkUsR0FBRyxFQUFFLDJCQUEyQixFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxXQUFXO0lBQzNHLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxJQUFJ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RTtJQUN6QyxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRTtJQUMxQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRTtJQUNyQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRTtJQUMxQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRTtJQUMxQyxTQUFTLEVBQUUsRUFBRTtDQUNoQixDQUFDLEVBQ0YsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNILGFBQWEsRUFBRSxJQUFJO0lBQ25CLGNBQWMsRUFBRSxJQUFJO0NBQ3ZCLENBQUMsQ0FDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU29ja2V0RnVuY3Rpb24gfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uXCI7XG5pbXBvcnQgeyBTb2NrZXRGdW5jdGlvbkhvb2sgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL1NvY2tldEZ1bmN0aW9uVHlwZXNcIjtcbmltcG9ydCB7IGdldE5vZGVJZElQIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvbm9kZUNhY2hlXCI7XG5pbXBvcnQgeyBzZXRIVFRQUmVzdWx0SGVhZGVycywgZ2V0Q3VycmVudEhUVFBSZXF1ZXN0IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FsbEhUVFBIYW5kbGVyXCI7XG5pbXBvcnQgeyBwZXJmb3JtTG9jYWxDYWxsIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FsbE1hbmFnZXJcIjtcbmltcG9ydCB7IFJlcXVpcmVDb250cm9sbGVyIH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9yZXF1aXJlL1JlcXVpcmVDb250cm9sbGVyXCI7XG5pbXBvcnQgeyB0aW1lSW5NaW51dGUgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9taXNjXCI7XG5pbXBvcnQgeyBnZXRDb21tb25OYW1lLCBnZXRQdWJsaWNJZGVudGlmaWVyLCBnZXRPd25NYWNoaW5lSWQsIHZlcmlmeSwgdmVyaWZ5TWFjaGluZUlkRm9yUHVibGljS2V5IH0gZnJvbSBcIi4uLy4uL21pc2MvaHR0cHMvY2VydHNcIjtcbmltcG9ydCB7IEFyY2hpdmVGaWxlSW5mbywgQXJjaGl2ZXNDb25maWcsIEFyY2hpdmVzU3luY1N0YXR1cywgRmluZENvbmZpZywgU291cmNlQ29uZmlnLCBJTU1VVEFCTEVfQ0FDSEVfVElNRSB9IGZyb20gXCIuLi9JQXJjaGl2ZXNcIjtcbmltcG9ydCB7IFJPVVRJTkdfRklMRSwgZ2V0Um91dGUsIHJvdXRlQ29udGFpbnMgfSBmcm9tIFwiLi9yZW1vdGVDb25maWdcIjtcbmltcG9ydCB7XG4gICAgZmluZEJ1Y2tldFN0b3JlLCBnZXRTdG9yZSwgZ2V0QnVja2V0U3RvcmVzLCByZWFkQnVja2V0SW50ZXJuYWwsIHdyaXRlUm91dGluZ0NvbmZpZyxcbiAgICBnZXRCdWNrZXRBcmNoaXZlc0NvbmZpZywgYnVja2V0U3luY1N0YXR1cywgZGVidWdCdWNrZXRJbmRleFRvdGFscywgQWN0aXZlQnVja2V0SW5mbyxcbiAgICBkZWJ1Z0xpc3RBY2NvdW50QnVja2V0cywgU2VydmVyQnVja2V0SW5mbyxcbiAgICBkZWJ1Z0dldEFjdGl2ZUJ1Y2tldCwgYWN0aXZhdGVCdWNrZXQsIGdldEFjdGl2ZUJ1Y2tldEtleXMsXG59IGZyb20gXCIuL3N0b3JhZ2VTZXJ2ZXJTdGF0ZVwiO1xuaW1wb3J0IHsgZGVidWdDbGVhckFjY291bnRXcml0ZVN0YXRzIH0gZnJvbSBcIi4vYWNjZXNzU3RhdHNcIjtcbmltcG9ydCB7IGdldFN0b3JhZ2VTZXJ2ZXJDb25maWcsIGdldFRydXN0LCBnZXRSZXF1ZXN0cywgYXNzZXJ0V3JpdGVzQWxsb3dlZCB9IGZyb20gXCIuL3NlcnZlckNvbmZpZ1wiO1xuaW1wb3J0IHsgQmxvYlN0b3JlIH0gZnJvbSBcIi4vYmxvYlN0b3JlXCI7XG5pbXBvcnQgeyBnZXRSb3V0aW5nRmlsZVJlc3VsdCB9IGZyb20gXCIuL2J1Y2tldERpc2tcIjtcbmltcG9ydCB7IFN0b3JhZ2VDbGllbnRDb250cm9sbGVyIH0gZnJvbSBcIi4vc3RvcmFnZUNsaWVudENvbnRyb2xsZXJcIjtcbmltcG9ydCB7IHRyYWNrQWNjZXNzLCB0cmFja0FjY2Vzc0NhbGwsIGdldEFjY2Vzc1RvdGFscywgcmVhZEFjY2Vzc1N1bW1hcmllcywgY2xlYXJBY2NvdW50QWNjZXNzU3RhdHMsIEFjY2Vzc1RvdGFscywgQWNjZXNzU3VtbWFyeVN0YXRlIH0gZnJvbSBcIi4vYWNjZXNzU3RhdHNcIjtcbmltcG9ydCB7IGFzc2VydFZhbGlkTmFtZSwgYXNzZXJ0VmFsaWRQYXRoLCBhc3NlcnRWYWxpZEFyZ3MgfSBmcm9tIFwiLi92YWxpZGF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFN1bW1hcnlFbnRyeSB9IGZyb20gXCIuLi8uLi90cmVlU3VtbWFyeVwiO1xuXG5leHBvcnQgY29uc3QgUkVNT1RFX1NUT1JBR0VfQ0xBU1NfR1VJRCA9IFwiUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXItYjdlNDJhOTFcIjtcbmV4cG9ydCBjb25zdCBTVE9SQUdFX0FVVEhfUFVSUE9TRSA9IFwicmVtb3RlU3RvcmFnZS1hdXRoLTFcIjtcbmV4cG9ydCBjb25zdCBTVE9SQUdFX05PVF9BVVRIRU5USUNBVEVEID0gXCJSRU1PVEVfU1RPUkFHRV9OT1RfQVVUSEVOVElDQVRFRF9jZjJmN2IxZVwiO1xuZXhwb3J0IGNvbnN0IFNUT1JBR0VfQUNDRVNTX0RFTklFRCA9IFwiUkVNT1RFX1NUT1JBR0VfQUNDRVNTX0RFTklFRF85ZDgxYTRjMFwiO1xuXG5jb25zdCBBVVRIX1RJTUVfV0lORE9XID0gdGltZUluTWludXRlICogMTA7XG5jb25zdCBBQ0NFU1NfQ0hFQ0tfU0xPV19USU1FID0gNTA7XG5jb25zdCBNQVhfU0VTU0lPTlMgPSAxMDAgKiAxMDAwO1xuY29uc3QgTUFYX1JFUVVFU1RTX1BFUl9JUCA9IDUwO1xuXG5leHBvcnQgdHlwZSBBdXRoVG9rZW5EYXRhID0ge1xuICAgIHB1cnBvc2U6IHN0cmluZztcbiAgICB0aW1lOiBudW1iZXI7XG4gICAgc2VydmVyOiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgQXV0aFRva2VuID0ge1xuICAgIGNlcnRQZW06IHN0cmluZztcbiAgICBzaWduYXR1cmU6IHN0cmluZztcbiAgICBkYXRhOiBBdXRoVG9rZW5EYXRhO1xufTtcbmV4cG9ydCB0eXBlIEFjY2Vzc1JlcXVlc3QgPSB7XG4gICAgcmVxdWVzdElkOiBzdHJpbmc7XG4gICAgYWNjb3VudDogc3RyaW5nO1xuICAgIG1hY2hpbmVJZDogc3RyaW5nO1xuICAgIGlwOiBzdHJpbmc7XG4gICAgdGltZTogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIFRydXN0UmVjb3JkID0ge1xuICAgIGFjY291bnQ6IHN0cmluZztcbiAgICBtYWNoaW5lSWQ6IHN0cmluZztcbiAgICBpcDogc3RyaW5nO1xuICAgIHRpbWU6IG51bWJlcjtcbn07XG5leHBvcnQgdHlwZSBBY2Nlc3NTdGF0ZSA9IHtcbiAgICBtYWNoaW5lSWQ6IHN0cmluZztcbiAgICBpcDogc3RyaW5nO1xuICAgIGhhc0FjY2VzczogYm9vbGVhbjtcbiAgICBncmFudEFjY2Vzc0NvbW1hbmQ/OiBzdHJpbmc7XG4gICAgdHJ1c3RlZE1hY2hpbmVzPzogVHJ1c3RSZWNvcmRbXTtcbn07XG5cbmNvbnN0IHNlc3Npb25zID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuLy8gV2UgbXVzdCBuZXZlciBzZXJ2ZSBhbnl0aGluZyB0aGF0IGNhbiBiZSBldmFsdWF0ZWQgYXMgY29kZSAoaHRtbCwganMgLSBhbmQgc3ZnLCB3aGljaCBjYW4gZW1iZWQgPHNjcmlwdD4gYW5kIHJ1bnMgaXQgd2hlbiB2aXNpdGVkIGFzIGEgZG9jdW1lbnQpLiBPdGhlcndpc2UgYSB1c2VyIGNvdWxkIGhvc3QgYSBmaWxlIGFuZCwgYnkgdmlzaXRpbmcgaXQsIHJ1biBpdCBvbiBvdXIgZG9tYWluIC0gZ2l2aW5nIHRoZW0gYWNjZXNzIHRvIGFsbCBvZiBvdXIga2V5cyBhbmQgY29va2llcy4gUERGIHN0YXlzOiBicm93c2VyIFBERiB2aWV3ZXJzIHJ1biBhbnkgZW1iZWRkZWQgUERGIHNjcmlwdGluZyBpbiBhIHNhbmRib3ggd2l0aCBubyBhY2Nlc3MgdG8gdGhlIHNlcnZpbmcgb3JpZ2luJ3MgY29va2llcyBvciBET00uXG5jb25zdCBDT05URU5UX1RZUEVTOiB7IFtleHQ6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIGNzczogXCJ0ZXh0L2NzczsgY2hhcnNldD11dGYtOFwiLCBqc29uOiBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIixcbiAgICB0eHQ6IFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiLCBwbmc6IFwiaW1hZ2UvcG5nXCIsIGpwZzogXCJpbWFnZS9qcGVnXCIsIGpwZWc6IFwiaW1hZ2UvanBlZ1wiLCBnaWY6IFwiaW1hZ2UvZ2lmXCIsXG4gICAgd2VicDogXCJpbWFnZS93ZWJwXCIsIG1wNDogXCJ2aWRlby9tcDRcIiwgd2VibTogXCJ2aWRlby93ZWJtXCIsXG4gICAgbXAzOiBcImF1ZGlvL21wZWdcIiwgd2F2OiBcImF1ZGlvL3dhdlwiLCBwZGY6IFwiYXBwbGljYXRpb24vcGRmXCIsXG59O1xuXG5jb25zdCBjb25uZWN0ZWRDbGllbnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5mdW5jdGlvbiB0cmFja0NhbGxlcigpOiB2b2lkIHtcbiAgICBsZXQgbm9kZUlkID0gU29ja2V0RnVuY3Rpb24uZ2V0Q2FsbGVyKCkubm9kZUlkO1xuICAgIGlmIChjb25uZWN0ZWRDbGllbnRzLmhhcyhub2RlSWQpKSByZXR1cm47XG4gICAgY29ubmVjdGVkQ2xpZW50cy5hZGQobm9kZUlkKTtcbiAgICBTb2NrZXRGdW5jdGlvbi5vbk5leHREaXNjb25uZWN0KG5vZGVJZCwgKCkgPT4ge1xuICAgICAgICBjb25uZWN0ZWRDbGllbnRzLmRlbGV0ZShub2RlSWQpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJvYWRjYXN0Um91dGluZ0NoYW5nZWQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coYEJyb2FkY2FzdGluZyByb3V0aW5nIGNvbmZpZyBjaGFuZ2UgdG8gJHtjb25uZWN0ZWRDbGllbnRzLnNpemV9IGNvbm5lY3RlZCBjbGllbnRzYCk7XG4gICAgZm9yIChsZXQgbm9kZUlkIG9mIFsuLi5jb25uZWN0ZWRDbGllbnRzXSkge1xuICAgICAgICB2b2lkIFN0b3JhZ2VDbGllbnRDb250cm9sbGVyLm5vZGVzW25vZGVJZF0ucm91dGluZ0NvbmZpZ0NoYW5nZWQoKS5jYXRjaCgoKSA9PiB7IH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q2FsbGVyTWFjaGluZUlkKCk6IHN0cmluZyB7XG4gICAgbGV0IGNhbGxlciA9IFNvY2tldEZ1bmN0aW9uLmdldENhbGxlcigpO1xuICAgIGxldCBtYWNoaW5lSWQgPSBzZXNzaW9ucy5nZXQoY2FsbGVyLm5vZGVJZCk7XG4gICAgaWYgKCFtYWNoaW5lSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1NUT1JBR0VfTk9UX0FVVEhFTlRJQ0FURUR9IENhbGwgYXV0aGVudGljYXRlIGZpcnN0IChjb25uZWN0aW9uICR7Y2FsbGVyLm5vZGVJZH0pYCk7XG4gICAgfVxuICAgIHJldHVybiBtYWNoaW5lSWQ7XG59XG5mdW5jdGlvbiBnZXRDYWxsZXJJUCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXROb2RlSWRJUChTb2NrZXRGdW5jdGlvbi5nZXRDYWxsZXIoKS5ub2RlSWQpO1xufVxuZnVuY3Rpb24gaXNBZG1pbihtYWNoaW5lSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtYWNoaW5lSWQgPT09IGdldE93bk1hY2hpbmVJZChnZXRTdG9yYWdlU2VydmVyQ29uZmlnKCkucm9vdERvbWFpbik7XG59XG5mdW5jdGlvbiByZXF1aXJlQWRtaW4oKTogc3RyaW5nIHtcbiAgICBsZXQgbWFjaGluZUlkID0gZ2V0Q2FsbGVyTWFjaGluZUlkKCk7XG4gICAgaWYgKCFpc0FkbWluKG1hY2hpbmVJZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1NUT1JBR0VfQUNDRVNTX0RFTklFRH0gQWRtaW4gY29tbWFuZHMgbXVzdCBiZSBydW4gZnJvbSB0aGUgc3RvcmFnZSBtYWNoaW5lIGl0c2VsZiAoY2FsbGVyIG1hY2hpbmUgJHttYWNoaW5lSWR9KWApO1xuICAgIH1cbiAgICByZXR1cm4gbWFjaGluZUlkO1xufVxuYXN5bmMgZnVuY3Rpb24gcmVxdWlyZUFjY2VzcyhhY2NvdW50OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGFzc2VydFZhbGlkTmFtZShhY2NvdW50LCBcImFjY291bnRcIik7XG4gICAgbGV0IG1hY2hpbmVJZCA9IGdldENhbGxlck1hY2hpbmVJZCgpO1xuICAgIGlmIChpc0FkbWluKG1hY2hpbmVJZCkpIHJldHVybiBtYWNoaW5lSWQ7XG4gICAgbGV0IHRydXN0ID0gYXdhaXQgZ2V0VHJ1c3QoKTtcbiAgICBsZXQgdHJ1c3RlZCA9IGF3YWl0IHRydXN0LmdldChgJHthY2NvdW50fXwke21hY2hpbmVJZH1gKTtcbiAgICBpZiAoIXRydXN0ZWQpIHtcbiAgICAgICAgbGV0IHsgZG9tYWluLCBwb3J0IH0gPSBnZXRTdG9yYWdlU2VydmVyQ29uZmlnKCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtTVE9SQUdFX0FDQ0VTU19ERU5JRUR9IE1hY2hpbmUgJHttYWNoaW5lSWR9IGhhcyBubyBhY2Nlc3MgdG8gYWNjb3VudCAke0pTT04uc3RyaW5naWZ5KGFjY291bnQpfS4gVmlzaXQgaHR0cHM6Ly8ke2RvbWFpbn06JHtwb3J0fS8ke2FjY291bnR9IGZvciBhY2Nlc3MgaW5zdHJ1Y3Rpb25zLmApO1xuICAgIH1cbiAgICByZXR1cm4gbWFjaGluZUlkO1xufVxuXG5mdW5jdGlvbiBnZXRHcmFudEFjY2Vzc0NvbW1hbmQocmVxdWVzdElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCB7IHNzaFRhcmdldCwgc2VydmVyQ29tbWFuZCB9ID0gZ2V0U3RvcmFnZVNlcnZlckNvbmZpZygpO1xuICAgIHJldHVybiBgc3NoICR7c3NoVGFyZ2V0fSAnJHtzZXJ2ZXJDb21tYW5kfSAtLXJlcXVlc3RJZCAke3JlcXVlc3RJZH0nYDtcbn1cblxuY2xhc3MgUmVtb3RlU3RvcmFnZUNvbnRyb2xsZXJCYXNlIHtcbiAgICBhc3luYyBwaW5nKCk6IFByb21pc2U8e30+IHtcbiAgICAgICAgdHJhY2tDYWxsZXIoKTtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGFzeW5jIGF1dGhlbnRpY2F0ZSh0b2tlbjogQXV0aFRva2VuKTogUHJvbWlzZTx7IG1hY2hpbmVJZDogc3RyaW5nOyBpcDogc3RyaW5nIH0+IHtcbiAgICAgICAgbGV0IHsgZG9tYWluLCBwb3J0IH0gPSBnZXRTdG9yYWdlU2VydmVyQ29uZmlnKCk7XG4gICAgICAgIGxldCBjYWxsZXIgPSBTb2NrZXRGdW5jdGlvbi5nZXRDYWxsZXIoKTtcbiAgICAgICAgdmVyaWZ5KHRva2VuLmNlcnRQZW0sIHRva2VuLnNpZ25hdHVyZSwgdG9rZW4uZGF0YSk7XG4gICAgICAgIGxldCB7IHB1cnBvc2UsIHRpbWUsIHNlcnZlciB9ID0gdG9rZW4uZGF0YTtcbiAgICAgICAgaWYgKHB1cnBvc2UgIT09IFNUT1JBR0VfQVVUSF9QVVJQT1NFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEF1dGggdG9rZW4gcHVycG9zZSBpcyAke0pTT04uc3RyaW5naWZ5KHB1cnBvc2UpfSwgZXhwZWN0ZWQgJHtKU09OLnN0cmluZ2lmeShTVE9SQUdFX0FVVEhfUFVSUE9TRSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKERhdGUubm93KCkgLSB0aW1lKSA+IEFVVEhfVElNRV9XSU5ET1cpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXV0aCB0b2tlbiB0aW1lIGlzIHRvbyBmYXIgZnJvbSB0aGUgc2VydmVyIHRpbWUgKHRva2VuICR7dGltZX0sIHNlcnZlciAke0RhdGUubm93KCl9LCBhbGxvd2VkIGRyaWZ0ICR7QVVUSF9USU1FX1dJTkRPV31tcylgKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdG9rZW5Eb21haW4gPSBzZXJ2ZXIuc3BsaXQoXCI6XCIpWzBdO1xuICAgICAgICBpZiAodG9rZW5Eb21haW4gIT09IGRvbWFpbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdXRoIHRva2VuIGlzIGZvciBzZXJ2ZXIgJHtKU09OLnN0cmluZ2lmeShzZXJ2ZXIpfSwgYnV0IHRoaXMgc2VydmVyIGlzICR7SlNPTi5zdHJpbmdpZnkoYCR7ZG9tYWlufToke3BvcnR9YCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1hY2hpbmVJZCA9IGdldENvbW1vbk5hbWUodG9rZW4uY2VydFBlbSkuc3BsaXQoXCIuXCIpWzBdO1xuICAgICAgICBpZiAoIXZlcmlmeU1hY2hpbmVJZEZvclB1YmxpY0tleSh7IG1hY2hpbmVJZCwgcHVibGljS2V5OiBnZXRQdWJsaWNJZGVudGlmaWVyKHRva2VuLmNlcnRQZW0pIH0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENlcnRpZmljYXRlIGNvbW1vbiBuYW1lICR7SlNPTi5zdHJpbmdpZnkoZ2V0Q29tbW9uTmFtZSh0b2tlbi5jZXJ0UGVtKSl9IGRvZXMgbm90IG1hdGNoIGl0cyBwdWJsaWMga2V5YCk7XG4gICAgICAgIH1cbiAgICAgICAgc2Vzc2lvbnMuc2V0KGNhbGxlci5ub2RlSWQsIG1hY2hpbmVJZCk7XG4gICAgICAgIHdoaWxlIChzZXNzaW9ucy5zaXplID4gTUFYX1NFU1NJT05TKSB7XG4gICAgICAgICAgICBsZXQgb2xkZXN0ID0gc2Vzc2lvbnMua2V5cygpLm5leHQoKS52YWx1ZTtcbiAgICAgICAgICAgIGlmIChvbGRlc3QgPT09IHVuZGVmaW5lZCkgYnJlYWs7XG4gICAgICAgICAgICBzZXNzaW9ucy5kZWxldGUob2xkZXN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBtYWNoaW5lSWQsIGlwOiBnZXRDYWxsZXJJUCgpIH07XG4gICAgfVxuXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIHJlcXVlc3RBY2Nlc3MoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZyB9KTogUHJvbWlzZTx7IG1hY2hpbmVJZDogc3RyaW5nOyBpcDogc3RyaW5nOyByZXF1ZXN0SWQ6IHN0cmluZzsgZ3JhbnRBY2Nlc3NDb21tYW5kOiBzdHJpbmcgfT4ge1xuICAgICAgICBsZXQgYWNjb3VudCA9IGNvbmZpZy5hY2NvdW50O1xuICAgICAgICBsZXQgbWFjaGluZUlkID0gZ2V0Q2FsbGVyTWFjaGluZUlkKCk7XG4gICAgICAgIGxldCBpcCA9IGdldENhbGxlcklQKCk7XG4gICAgICAgIGxldCByZXF1ZXN0c1N0b3JhZ2UgPSBhd2FpdCBnZXRSZXF1ZXN0cygpO1xuICAgICAgICBsZXQgcmVxdWVzdHMgPSBhd2FpdCByZXF1ZXN0c1N0b3JhZ2UuZ2V0KGlwKSB8fCBbXTtcbiAgICAgICAgbGV0IGV4aXN0aW5nID0gcmVxdWVzdHMuZmluZCh4ID0+IHguYWNjb3VudCA9PT0gYWNjb3VudCAmJiB4Lm1hY2hpbmVJZCA9PT0gbWFjaGluZUlkKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgICBleGlzdGluZy50aW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4aXN0aW5nID0ge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApLFxuICAgICAgICAgICAgICAgIGFjY291bnQsXG4gICAgICAgICAgICAgICAgbWFjaGluZUlkLFxuICAgICAgICAgICAgICAgIGlwLFxuICAgICAgICAgICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVxdWVzdHMucHVzaChleGlzdGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHJlcXVlc3RzLmxlbmd0aCA+IE1BWF9SRVFVRVNUU19QRVJfSVApIHJlcXVlc3RzLnNoaWZ0KCk7XG4gICAgICAgIGF3YWl0IHJlcXVlc3RzU3RvcmFnZS5zZXQoaXAsIHJlcXVlc3RzKTtcbiAgICAgICAgcmV0dXJuIHsgbWFjaGluZUlkLCBpcCwgcmVxdWVzdElkOiBleGlzdGluZy5yZXF1ZXN0SWQsIGdyYW50QWNjZXNzQ29tbWFuZDogZ2V0R3JhbnRBY2Nlc3NDb21tYW5kKGV4aXN0aW5nLnJlcXVlc3RJZCkgfTtcbiAgICB9XG5cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgZ2V0QWNjZXNzU3RhdGUoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZyB9KTogUHJvbWlzZTxBY2Nlc3NTdGF0ZT4ge1xuICAgICAgICBsZXQgYWNjb3VudCA9IGNvbmZpZy5hY2NvdW50O1xuICAgICAgICBsZXQgbWFjaGluZUlkID0gZ2V0Q2FsbGVyTWFjaGluZUlkKCk7XG4gICAgICAgIGxldCBpcCA9IGdldENhbGxlcklQKCk7XG4gICAgICAgIGxldCB0cnVzdCA9IGF3YWl0IGdldFRydXN0KCk7XG4gICAgICAgIGxldCBoYXNBY2Nlc3MgPSBpc0FkbWluKG1hY2hpbmVJZCkgfHwgISFhd2FpdCB0cnVzdC5nZXQoYCR7YWNjb3VudH18JHttYWNoaW5lSWR9YCk7XG4gICAgICAgIGxldCByZXN1bHQ6IEFjY2Vzc1N0YXRlID0geyBtYWNoaW5lSWQsIGlwLCBoYXNBY2Nlc3MgfTtcbiAgICAgICAgaWYgKCFoYXNBY2Nlc3MpIHtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0cyA9IGF3YWl0IGdldFJlcXVlc3RzKCk7XG4gICAgICAgICAgICBsZXQgb3duUmVxdWVzdCA9IChhd2FpdCByZXF1ZXN0cy5nZXQoaXApIHx8IFtdKS5maW5kKHggPT4geC5hY2NvdW50ID09PSBhY2NvdW50ICYmIHgubWFjaGluZUlkID09PSBtYWNoaW5lSWQpO1xuICAgICAgICAgICAgaWYgKG93blJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuZ3JhbnRBY2Nlc3NDb21tYW5kID0gZ2V0R3JhbnRBY2Nlc3NDb21tYW5kKG93blJlcXVlc3QucmVxdWVzdElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdHJ1c3RlZE1hY2hpbmVzOiBUcnVzdFJlY29yZFtdID0gW107XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBhd2FpdCB0cnVzdC5nZXRLZXlzKCkpIHtcbiAgICAgICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYCR7YWNjb3VudH18YCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IHJlY29yZCA9IGF3YWl0IHRydXN0LmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKHJlY29yZCkgdHJ1c3RlZE1hY2hpbmVzLnB1c2gocmVjb3JkKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQudHJ1c3RlZE1hY2hpbmVzID0gdHJ1c3RlZE1hY2hpbmVzO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFzeW5jIGxpc3RSZXF1ZXN0c0ZvcklQKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGlwOiBzdHJpbmcgfSk6IFByb21pc2U8QWNjZXNzUmVxdWVzdFtdPiB7XG4gICAgICAgIGxldCByZXF1ZXN0cyA9IGF3YWl0IGdldFJlcXVlc3RzKCk7XG4gICAgICAgIHJldHVybiAoYXdhaXQgcmVxdWVzdHMuZ2V0KGNvbmZpZy5pcCkgfHwgW10pLmZpbHRlcih4ID0+IHguYWNjb3VudCA9PT0gY29uZmlnLmFjY291bnQpO1xuICAgIH1cblxuICAgIGFzeW5jIGdyYW50QWNjZXNzKGNvbmZpZzogeyByZXF1ZXN0SWQ6IHN0cmluZyB9KTogUHJvbWlzZTxUcnVzdFJlY29yZD4ge1xuICAgICAgICBsZXQgcmVxdWVzdElkID0gY29uZmlnLnJlcXVlc3RJZDtcbiAgICAgICAgbGV0IGNhbGxlck1hY2hpbmVJZCA9IGdldENhbGxlck1hY2hpbmVJZCgpO1xuICAgICAgICBsZXQgdHJ1c3QgPSBhd2FpdCBnZXRUcnVzdCgpO1xuICAgICAgICBsZXQgcmVxdWVzdHMgPSBhd2FpdCBnZXRSZXF1ZXN0cygpO1xuICAgICAgICBmb3IgKGxldCBpcCBvZiBhd2FpdCByZXF1ZXN0cy5nZXRLZXlzKCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHJlcXVlc3Qgb2YgYXdhaXQgcmVxdWVzdHMuZ2V0KGlwKSB8fCBbXSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnJlcXVlc3RJZCAhPT0gcmVxdWVzdElkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzQWRtaW4oY2FsbGVyTWFjaGluZUlkKSAmJiAhYXdhaXQgdHJ1c3QuZ2V0KGAke3JlcXVlc3QuYWNjb3VudH18JHtjYWxsZXJNYWNoaW5lSWR9YCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1NUT1JBR0VfQUNDRVNTX0RFTklFRH0gTWFjaGluZSAke2NhbGxlck1hY2hpbmVJZH0gaGFzIG5vIGFjY2VzcyB0byBhY2NvdW50ICR7SlNPTi5zdHJpbmdpZnkocmVxdWVzdC5hY2NvdW50KX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHJlY29yZDogVHJ1c3RSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnQ6IHJlcXVlc3QuYWNjb3VudCxcbiAgICAgICAgICAgICAgICAgICAgbWFjaGluZUlkOiByZXF1ZXN0Lm1hY2hpbmVJZCxcbiAgICAgICAgICAgICAgICAgICAgaXA6IHJlcXVlc3QuaXAsXG4gICAgICAgICAgICAgICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0cnVzdC5zZXQoYCR7cmVxdWVzdC5hY2NvdW50fXwke3JlcXVlc3QubWFjaGluZUlkfWAsIHJlY29yZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGFjY2VzcyByZXF1ZXN0IGZvdW5kIHdpdGggaWQgJHtKU09OLnN0cmluZ2lmeShyZXF1ZXN0SWQpfS4gSXQgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGdyYW50ZWQgb3IgZXhwaXJlZC5gKTtcbiAgICB9XG5cbiAgICAvKiogQWRtaW4gKHNvIG9ubHkgdGhpcyBtYWNoaW5lJ3Mgb3duIHByb2Nlc3NlcyBjYW4gY2FsbCBpdCk6IHRoZSBidWNrZXRzIHRoaXMgcHJvY2VzcyBoYXMgbG9hZGVkLiBBIGRlcGxveSBzdWNjZXNzb3IgYXNrcyBpdHMgcHJlZGVjZXNzb3IgZm9yIHRoaXMsIHNvIGl0IGFjdGl2YXRlcyBleGFjdGx5IHRoZSBidWNrZXRzIHRoYXQgYXJlIGluIHVzZSBpbnN0ZWFkIG9mIGV2ZXJ5IGJ1Y2tldCBvbiBkaXNrLiAqL1xuICAgIGFzeW5jIGFkbWluTGlzdEFjdGl2ZUJ1Y2tldHMoKTogUHJvbWlzZTx7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH1bXT4ge1xuICAgICAgICByZXR1cm4gZ2V0QWN0aXZlQnVja2V0S2V5cygpO1xuICAgIH1cbiAgICBhc3luYyBhZG1pbkxpc3RSZXF1ZXN0cyhjb25maWc6IHsgaXA6IHN0cmluZyB9KTogUHJvbWlzZTxBY2Nlc3NSZXF1ZXN0W10+IHtcbiAgICAgICAgbGV0IHJlcXVlc3RzID0gYXdhaXQgZ2V0UmVxdWVzdHMoKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlcXVlc3RzLmdldChjb25maWcuaXApIHx8IFtdO1xuICAgIH1cbiAgICBhc3luYyBhZG1pbkdyYW50QWNjZXNzKGNvbmZpZzogeyByZXF1ZXN0SWQ6IHN0cmluZyB9KTogUHJvbWlzZTxUcnVzdFJlY29yZD4ge1xuICAgICAgICBsZXQgcmVxdWVzdElkID0gY29uZmlnLnJlcXVlc3RJZDtcbiAgICAgICAgbGV0IHRydXN0ID0gYXdhaXQgZ2V0VHJ1c3QoKTtcbiAgICAgICAgbGV0IHJlcXVlc3RzID0gYXdhaXQgZ2V0UmVxdWVzdHMoKTtcbiAgICAgICAgZm9yIChsZXQgaXAgb2YgYXdhaXQgcmVxdWVzdHMuZ2V0S2V5cygpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCByZXF1ZXN0IG9mIGF3YWl0IHJlcXVlc3RzLmdldChpcCkgfHwgW10pIHtcbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5yZXF1ZXN0SWQgIT09IHJlcXVlc3RJZCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgbGV0IHJlY29yZDogVHJ1c3RSZWNvcmQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnQ6IHJlcXVlc3QuYWNjb3VudCxcbiAgICAgICAgICAgICAgICAgICAgbWFjaGluZUlkOiByZXF1ZXN0Lm1hY2hpbmVJZCxcbiAgICAgICAgICAgICAgICAgICAgaXA6IHJlcXVlc3QuaXAsXG4gICAgICAgICAgICAgICAgICAgIHRpbWU6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0cnVzdC5zZXQoYCR7cmVxdWVzdC5hY2NvdW50fXwke3JlcXVlc3QubWFjaGluZUlkfWAsIHJlY29yZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGFjY2VzcyByZXF1ZXN0IGZvdW5kIHdpdGggaWQgJHtKU09OLnN0cmluZ2lmeShyZXF1ZXN0SWQpfS4gSXQgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGdyYW50ZWQgb3IgZXhwaXJlZC5gKTtcbiAgICB9XG5cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgQHRyYWNrQWNjZXNzQ2FsbChcImdldFwiKVxuICAgIGFzeW5jIGdldDIoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnOyByYW5nZT86IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfTsgaW50ZXJuYWw/OiBib29sZWFuOyBpbmNsdWRlVG9tYnN0b25lcz86IGJvb2xlYW4gfSk6IFByb21pc2U8eyBkYXRhOiBCdWZmZXI7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBpZiAoY29uZmlnLnBhdGggPT09IFJPVVRJTkdfRklMRSkge1xuICAgICAgICAgICAgLy8gVGhlIHJvdXRpbmcgZmlsZSBsaXZlcyBvdXRzaWRlIGV2ZXJ5IHN0b3JlIGFuZCBldmVuIG91dHNpZGUgdGhlIGJ1Y2tldCAoaXQgaXMgd2hhdCBDUkVBVEVTIGl0KSwgc28gaXQgaXMgcmVhZCBzdHJhaWdodCBvZmYgdGhlIGRpc2sgLSBhYnNlbnQgbWVhbnMgdW5kZWZpbmVkLCBleGFjdGx5IGxpa2UgYW55IGZpbGUgcmVhZFxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGdldFJvdXRpbmdGaWxlUmVzdWx0KGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5pbnRlcm5hbCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlYWRCdWNrZXRJbnRlcm5hbChjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUsIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHdpdGhTdG9yZShjb25maWcsIHN0b3JlID0+IHN0b3JlLmdldDIoY29uZmlnKSk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBAdHJhY2tBY2Nlc3NDYWxsKFwic2V0XCIpXG4gICAgYXN5bmMgc2V0KGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBkYXRhOiBCdWZmZXI7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnOyBsYXN0TW9kaWZpZWQ/OiBudW1iZXI7IGZvcmNlU2V0SW1tdXRhYmxlPzogYm9vbGVhbjsgaW50ZXJuYWw/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGVzQWxsb3dlZCgpO1xuICAgICAgICAvLyBDb3BpZWQgYmVjYXVzZSB0aGUgd2lyZSBoYW5kcyB1cyBhIHBsYWluIFVpbnQ4QXJyYXkgdmlldywgbm90IGEgcmVhbCBCdWZmZXJcbiAgICAgICAgbGV0IGRhdGEgPSBCdWZmZXIuZnJvbShjb25maWcuZGF0YSk7XG4gICAgICAgIGlmIChjb25maWcucGF0aCA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICAvLyBUaGUgc3RvcmUgdGhlIGNhbGxlciBzZWxlY3RlZCBvd25zIHRoaXMgZmlsZTogaXQgYXBwbGllcyBpdCwgZW5mb3JjZXMgdGhlIHZlcnNpb24gcnVsZSwgYW5kIGl0cyBwZWVycyBwdWxsIGl0IGZyb20gdGhlcmVcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB3cml0ZVJvdXRpbmdDb25maWcoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lLCBjb25maWcuc291cmNlQ29uZmlnLm5hbWUsIGRhdGEsIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgd2l0aFN0b3JlKGNvbmZpZywgc3RvcmUgPT4gc3RvcmUuc2V0KHsgLi4uY29uZmlnLCBkYXRhIH0pKTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIEB0cmFja0FjY2Vzc0NhbGwoXCJkZWxcIilcbiAgICBhc3luYyBkZWwoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnOyBsYXN0TW9kaWZpZWQ/OiBudW1iZXI7IGludGVybmFsPzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgYXdhaXQgd2l0aFN0b3JlKGNvbmZpZywgc3RvcmUgPT4gc3RvcmUuZGVsKGNvbmZpZykpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgQHRyYWNrQWNjZXNzQ2FsbChcIm1vdmVcIilcbiAgICBhc3luYyBtb3ZlKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgZnJvbVBhdGg6IHN0cmluZzsgdG9QYXRoOiBzdHJpbmc7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGVzQWxsb3dlZCgpO1xuICAgICAgICAvLyBhc3NlcnRWYWxpZEFyZ3Mgb25seSBrbm93cyB0aGUgd2VsbC1rbm93biBgcGF0aGAgZmllbGQsIHNvIHRoZSB0d28gcGF0aHMgb2YgYSBtb3ZlIGFyZSB2YWxpZGF0ZWQgaGVyZVxuICAgICAgICBhc3NlcnRWYWxpZFBhdGgoY29uZmlnLmZyb21QYXRoKTtcbiAgICAgICAgYXNzZXJ0VmFsaWRQYXRoKGNvbmZpZy50b1BhdGgpO1xuICAgICAgICBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5tb3ZlKGNvbmZpZykpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgQHRyYWNrQWNjZXNzQ2FsbChcImdldEluZm9cIilcbiAgICBhc3luYyBnZXRJbmZvKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBzb3VyY2VDb25maWc6IFNvdXJjZUNvbmZpZzsgaW5jbHVkZVRvbWJzdG9uZXM/OiBib29sZWFuIH0pOiBQcm9taXNlPHsgd3JpdGVUaW1lOiBudW1iZXI7IHNpemU6IG51bWJlciB9IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGlmIChjb25maWcucGF0aCA9PT0gUk9VVElOR19GSUxFKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgZ2V0Um91dGluZ0ZpbGVSZXN1bHQoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgJiYgeyB3cml0ZVRpbWU6IHJlc3VsdC53cml0ZVRpbWUsIHNpemU6IHJlc3VsdC5zaXplIH0gfHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5nZXRJbmZvKGNvbmZpZykpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgQHRyYWNrQWNjZXNzQ2FsbChcImZpbmRJbmZvXCIpXG4gICAgYXN5bmMgZmluZEluZm8oY29uZmlnOiBGaW5kQ29uZmlnICYgeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgcHJlZml4OiBzdHJpbmc7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnIH0pOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5maW5kSW5mbyhjb25maWcpKTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIEB0cmFja0FjY2Vzc0NhbGwoXCJnZXRDaGFuZ2VzQWZ0ZXJcIilcbiAgICBhc3luYyBnZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmc7IGJ1Y2tldE5hbWU6IHN0cmluZzsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWc7IHRpbWU6IG51bWJlcjsgcm91dGVzPzogW251bWJlciwgbnVtYmVyXVtdIH0pOiBQcm9taXNlPEFyY2hpdmVGaWxlSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3aXRoU3RvcmUoY29uZmlnLCBzdG9yZSA9PiBzdG9yZS5nZXRDaGFuZ2VzQWZ0ZXIyKGNvbmZpZykpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgZ2V0QXJjaGl2ZXNDb25maWcoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFyY2hpdmVzQ29uZmlnPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBnZXRCdWNrZXRBcmNoaXZlc0NvbmZpZyhjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUpO1xuICAgIH1cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgbGlzdEJ1Y2tldHMoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZyB9KTogUHJvbWlzZTxTZXJ2ZXJCdWNrZXRJbmZvW10+IHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBkZWJ1Z0xpc3RBY2NvdW50QnVja2V0cyhjb25maWcuYWNjb3VudCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAvLyBUaGUgYWNjZXNzIGhvb2sgKGFuZCB0aGUgc3RvcmFnZSBpdCBpbml0aWFsaXplcykgcnVucyBiZWZvcmUgdGhpcywgc28gYSBsYXJnZSBnYXAgYmV0d2VlbiB0aGlzIGFuZCB0aGUgY2FsbGVyJ3MgdGltaW5nIGlzIHRoZSBob29rXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgbGlzdEJ1Y2tldHMoJHtjb25maWcuYWNjb3VudH0pIGNhbGwgYm9keSB0b29rICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIFRoZSBsaXZlLCBpbi1tZW1vcnkgc3RhdGUgb2Ygb25lIGJ1Y2tldCwgb3IgYSBzdHJpbmcgc2F5aW5nIHdoeSBpdCBpcyB1bmF2YWlsYWJsZS4gQW5zd2VyZWQgd2l0aG91dCB0b3VjaGluZyB0aGUgZGlzaywgc28gaXQgaXMgY2hlYXAgLSBidXQgb25seSB3b3JrcyB3aGlsZSB0aGUgYnVja2V0IGlzIGxvYWRlZCBoZXJlLiAqL1xuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRBY3RpdmVCdWNrZXQoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFjdGl2ZUJ1Y2tldEluZm8gfCBzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGRlYnVnR2V0QWN0aXZlQnVja2V0KGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSk7XG4gICAgfVxuICAgIC8qKiBMb2FkcyBhIGJ1Y2tldCB0aGF0IGV4aXN0cyBvbiB0aGlzIHNlcnZlciBpbnRvIG1lbW9yeSAoc3RhcnRpbmcgaXRzIHN5bmNocm9uaXphdGlvbikgYW5kIHJldHVybnMgaXRzIGxpdmUgc3RhdGUsIG9yIGEgc3RyaW5nIHNheWluZyB3aHkgaXQgY291bGQgbm90IGJlIGxvYWRlZC4gKi9cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgYWN0aXZhdGVCdWNrZXQoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFjdGl2ZUJ1Y2tldEluZm8gfCBzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGFjdGl2YXRlQnVja2V0KGNvbmZpZy5hY2NvdW50LCBjb25maWcuYnVja2V0TmFtZSk7XG4gICAgfVxuICAgIC8qKiBaZXJvZXMgdGhlIHdyaXRlIHN0YXRpc3RpY3MgbGlzdEJ1Y2tldHMgcmVwb3J0cyBhbmQgdGhlIGluLW1lbW9yeSBhY2Nlc3Mgc3RhdGlzdGljcywgZm9yIGV2ZXJ5IGJ1Y2tldCBpbiB0aGUgYWNjb3VudC4gKi9cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgY2xlYXJXcml0ZVN0YXRzKGNvbmZpZzogeyBhY2NvdW50OiBzdHJpbmcgfSk6IFByb21pc2U8eyBjbGVhcmVkQnVja2V0czogbnVtYmVyIH0+IHtcbiAgICAgICAgY2xlYXJBY2NvdW50QWNjZXNzU3RhdHMoY29uZmlnLmFjY291bnQpO1xuICAgICAgICByZXR1cm4geyBjbGVhcmVkQnVja2V0czogZGVidWdDbGVhckFjY291bnRXcml0ZVN0YXRzKGNvbmZpZy5hY2NvdW50KSB9O1xuICAgIH1cbiAgICAvKiogSW4tbWVtb3J5IHRvdGFscyBwZXIgb3BlcmF0aW9uIHR5cGUgc2luY2Ugc3RhcnR1cCAob3IgdGhlIGxhc3QgY2xlYXJXcml0ZVN0YXRzKS4gKi9cbiAgICBAYXNzZXJ0VmFsaWRBcmdzXG4gICAgYXN5bmMgZ2V0QWNjZXNzU3RhdHMoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZyB9KTogUHJvbWlzZTxBY2Nlc3NUb3RhbHM+IHtcbiAgICAgICAgcmV0dXJuIGdldEFjY2Vzc1RvdGFscyhjb25maWcuYWNjb3VudCk7XG4gICAgfVxuICAgIC8qKiBBIHBhdGggYnJlYWtkb3duIG9mIG9uZSBvcGVyYXRpb24ncyBhY2Nlc3NlcyAob3BlcmF0aW9uIG5hbWVzIGNvbWUgZnJvbSBnZXRBY2Nlc3NTdGF0cykuIG1heENvdW50IGlzIHBhc3NlZCBzdHJhaWdodCB0byBUcmVlU3VtbWFyeS5nZXRTdW1tYXJpZXMuIHdlaWdodEJ5U2l6ZSBpcyBpZ25vcmVkIGZvciBjb3VudC1vbmx5IG9wZXJhdGlvbnMsIHdoaWNoIHJldHVybiB0aGVpciBjb3VudCBicmVha2Rvd24uICovXG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGdldEFjY2Vzc1N1bW1hcmllcyhjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBvcGVyYXRpb246IHN0cmluZzsgbWF4Q291bnQ6IG51bWJlcjsgd2VpZ2h0QnlTaXplPzogYm9vbGVhbiB9KTogUHJvbWlzZTxTdW1tYXJ5RW50cnk8QWNjZXNzU3VtbWFyeVN0YXRlPltdPiB7XG4gICAgICAgIHJldHVybiByZWFkQWNjZXNzU3VtbWFyaWVzKGNvbmZpZyk7XG4gICAgfVxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBnZXRJbmRleEluZm8oY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPHsgZmlsZUNvdW50OiBudW1iZXI7IGJ5dGVDb3VudDogbnVtYmVyOyBzb3VyY2VzOiB7IGRlYnVnTmFtZTogc3RyaW5nOyBmaWxlQ291bnQ6IG51bWJlcjsgYnl0ZUNvdW50OiBudW1iZXIgfVtdIH0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGRlYnVnQnVja2V0SW5kZXhUb3RhbHMoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lKTtcbiAgICB9XG4gICAgQGFzc2VydFZhbGlkQXJnc1xuICAgIGFzeW5jIGdldFN5bmNTdGF0dXMoY29uZmlnOiB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nIH0pOiBQcm9taXNlPEFyY2hpdmVzU3luY1N0YXR1cz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgYnVja2V0U3luY1N0YXR1cyhjb25maWcuYWNjb3VudCwgY29uZmlnLmJ1Y2tldE5hbWUpO1xuICAgIH1cblxuICAgIEBhc3NlcnRWYWxpZEFyZ3NcbiAgICBhc3luYyBzdGFydExhcmdlRmlsZShjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgc291cmNlQ29uZmlnOiBTb3VyY2VDb25maWc7IGxhc3RNb2RpZmllZD86IG51bWJlcjsgZm9yY2VTZXRJbW11dGFibGU/OiBib29sZWFuOyBub0NoZWNrcz86IGJvb2xlYW47IGludGVybmFsPzogYm9vbGVhbiB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGVzQWxsb3dlZCgpO1xuICAgICAgICBsZXQgc3RvcmUgPSBmaW5kQnVja2V0U3RvcmUoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lLCBjb25maWcuc291cmNlQ29uZmlnKTtcbiAgICAgICAgLy8gVGhlIHN0b3JlIHZhbGlkYXRlcyB0aGUgd3JpdGUgaGVyZSwgYmVmb3JlIGFueSBieXRlcyBtb3ZlIChzZWUgQmxvYlN0b3JlLnN0YXJ0TGFyZ2VVcGxvYWQpIC0gYSBsYXJnZSBmaWxlIGlzIGEgc2V0LCBhbmQgaXRzIFNldENvbmZpZyBkZWNpZGVzIHdoZXRoZXIgaXQgaXMgZXZlbiBhbGxvd2VkXG4gICAgICAgIGxldCB3cml0ZSA9IHsgcGF0aDogY29uZmlnLnBhdGgsIGxhc3RNb2RpZmllZDogY29uZmlnLmxhc3RNb2RpZmllZCwgZm9yY2VTZXRJbW11dGFibGU6IGNvbmZpZy5mb3JjZVNldEltbXV0YWJsZSwgbm9DaGVja3M6IGNvbmZpZy5ub0NoZWNrcywgaW50ZXJuYWw6IGNvbmZpZy5pbnRlcm5hbCB9O1xuICAgICAgICBsZXQgaWQgPSBhd2FpdCBzdG9yZS5zdGFydExhcmdlVXBsb2FkKHdyaXRlKTtcbiAgICAgICAgLy8gVGhlIHN0b3JlIG5hbWUgcGlucyB0aGUgdXBsb2FkJ3MgcGFydHMgYW5kIGZpbmlzaCB0byB0aGUgc2FtZSBzdG9yZSB0aGUgc3RhcnQgcGlja2VkIChpbi1mbGlnaHQgdXBsb2FkcyBzdXJ2aXZlIGEgYnVja2V0IHJlYnVpbGQ6IHRoZSBwYXJ0IGRhdGEgbGl2ZXMgaW4gdGhhdCBzdG9yZSdzIGZvbGRlciwgd2hpY2ggYSByZWJ1aWx0IHN0b3JlIHN0aWxsIG9wZW5zKVxuICAgICAgICBsYXJnZVVwbG9hZEluZm8uc2V0KGlkLCB7IC4uLndyaXRlLCBhY2NvdW50OiBjb25maWcuYWNjb3VudCwgYnVja2V0TmFtZTogY29uZmlnLmJ1Y2tldE5hbWUsIHN0b3JlTmFtZTogY29uZmlnLnNvdXJjZUNvbmZpZy5uYW1lIH0pO1xuICAgICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICAgIC8qKiBvZmZzZXQgbWFrZXMgdGhlIHBhcnQgd3JpdGUgcG9zaXRpb25hbCAoc2VlIEFyY2hpdmVzRGlzay5hcHBlbmRMYXJnZVVwbG9hZCksIHdoaWNoIGlzIHdoYXQgbGV0cyB0aGUgY2xpZW50IFJFVFJZIGEgZmFpbGVkIHBhcnQgLSBhIHJlLXNlbnQgcGFydCBsYW5kcyBvbiB0aGUgc2FtZSBieXRlcyBpbnN0ZWFkIG9mIGFwcGVuZGluZyB0d2ljZS4gKi9cbiAgICBhc3luYyB1cGxvYWRQYXJ0KGNvbmZpZzogeyB1cGxvYWRJZDogc3RyaW5nOyBkYXRhOiBCdWZmZXI7IG9mZnNldD86IG51bWJlciB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgbGV0IGluZm8gPSBsYXJnZVVwbG9hZEluZm8uZ2V0KGNvbmZpZy51cGxvYWRJZCk7XG4gICAgICAgIGlmICghaW5mbykgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxhcmdlIHVwbG9hZCAke2NvbmZpZy51cGxvYWRJZH1gKTtcbiAgICAgICAgdHJhY2tBY2Nlc3MoeyBhY2NvdW50OiBpbmZvLmFjY291bnQsIG9wZXJhdGlvbjogXCJ1cGxvYWRQYXJ0XCIsIHBhdGg6IGAke2luZm8uYnVja2V0TmFtZX0vJHtpbmZvLnBhdGh9YCwgc2l6ZTogY29uZmlnLmRhdGEubGVuZ3RoIH0pO1xuICAgICAgICBhd2FpdCBnZXRTdG9yZShpbmZvLmFjY291bnQsIGluZm8uYnVja2V0TmFtZSwgaW5mby5zdG9yZU5hbWUpLmFwcGVuZExhcmdlVXBsb2FkKHsgaWQ6IGNvbmZpZy51cGxvYWRJZCwgZGF0YTogQnVmZmVyLmZyb20oY29uZmlnLmRhdGEpLCBvZmZzZXQ6IGNvbmZpZy5vZmZzZXQgfSk7XG4gICAgfVxuICAgIGFzeW5jIGZpbmlzaExhcmdlRmlsZShjb25maWc6IHsgdXBsb2FkSWQ6IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGFzc2VydFdyaXRlc0FsbG93ZWQoKTtcbiAgICAgICAgbGV0IGluZm8gPSBsYXJnZVVwbG9hZEluZm8uZ2V0KGNvbmZpZy51cGxvYWRJZCk7XG4gICAgICAgIGlmICghaW5mbykgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxhcmdlIHVwbG9hZCAke2NvbmZpZy51cGxvYWRJZH1gKTtcbiAgICAgICAgbGFyZ2VVcGxvYWRJbmZvLmRlbGV0ZShjb25maWcudXBsb2FkSWQpO1xuICAgICAgICBhd2FpdCBnZXRTdG9yZShpbmZvLmFjY291bnQsIGluZm8uYnVja2V0TmFtZSwgaW5mby5zdG9yZU5hbWUpLmZpbmlzaExhcmdlVXBsb2FkKHsgaWQ6IGNvbmZpZy51cGxvYWRJZCwgcGF0aDogaW5mby5wYXRoLCBsYXN0TW9kaWZpZWQ6IGluZm8ubGFzdE1vZGlmaWVkLCBmb3JjZVNldEltbXV0YWJsZTogaW5mby5mb3JjZVNldEltbXV0YWJsZSwgbm9DaGVja3M6IGluZm8ubm9DaGVja3MsIGludGVybmFsOiBpbmZvLmludGVybmFsIH0pO1xuICAgIH1cbiAgICAvKiogQmVzdC1lZmZvcnQgY2xlYW51cDogYW4gdW5rbm93biB1cGxvYWQgaGFzIG5vdGhpbmcgbGVmdCB0byBjYW5jZWwuICovXG4gICAgYXN5bmMgY2FuY2VsTGFyZ2VGaWxlKGNvbmZpZzogeyB1cGxvYWRJZDogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IGluZm8gPSBsYXJnZVVwbG9hZEluZm8uZ2V0KGNvbmZpZy51cGxvYWRJZCk7XG4gICAgICAgIGlmICghaW5mbykgcmV0dXJuO1xuICAgICAgICBsYXJnZVVwbG9hZEluZm8uZGVsZXRlKGNvbmZpZy51cGxvYWRJZCk7XG4gICAgICAgIGF3YWl0IGdldFN0b3JlKGluZm8uYWNjb3VudCwgaW5mby5idWNrZXROYW1lLCBpbmZvLnN0b3JlTmFtZSkuY2FuY2VsTGFyZ2VVcGxvYWQoeyBpZDogY29uZmlnLnVwbG9hZElkIH0pO1xuICAgIH1cblxuICAgIC8vIElNUE9SVEFOVDogV2UgY2FuIG5ldmVyIGV4cG9zZSBlbnVtZXJhdGlvbiAobGlzdGluZywgcHJlZml4IHNlYXJjaCwgY2hhbmdlcyBmZWVkcykgb3ZlciB0aGlzIHB1YmxpYyBIVFRQIGVuZHBvaW50IC0gb25seSBleGFjdC1rZXkgcmVhZHMuIEVudW1lcmF0aW9uIHdvdWxkIGJlIGEgbWFzc2l2ZSBzZWN1cml0eSByaXNrIChwdWJsaWMgYnVja2V0cyByZWx5IG9uIHVuZ3Vlc3NhYmxlIGtleXMgc3RheWluZyB1bmd1ZXNzYWJsZSksIGFuZCBjb3VsZCBhbHNvIGNyYXNoIHRoZSBjbGllbnQgYnkgc2VuZGluZyB0aGVtIHRvbyBtdWNoIGRhdGEuIExpc3RpbmdzIGV4aXN0IG9ubHkgb24gdGhlIGF1dGhlbnRpY2F0ZWQgQVBJIChmaW5kSW5mbyBldGMsIGJlaGluZCBhY2NvdW50QWNjZXNzKS5cbiAgICBhc3luYyBodHRwRW50cnkoY29uZmlnPzogeyByZXF1aXJlQ2FsbHM/OiBzdHJpbmdbXTsgY2FjaGVUaW1lPzogbnVtYmVyIH0pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICBsZXQgY2FsbGVyID0gU29ja2V0RnVuY3Rpb24uZ2V0Q2FsbGVyKCk7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gZ2V0Q3VycmVudEhUVFBSZXF1ZXN0KCk7XG4gICAgICAgIGxldCBwYXRobmFtZSA9IG5ldyBVUkwocmVxdWVzdD8udXJsIHx8IFwiL1wiLCBcImh0dHBzOi8vbG9jYWxob3N0XCIpLnBhdGhuYW1lO1xuICAgICAgICBpZiAoIXBhdGhuYW1lLnN0YXJ0c1dpdGgoXCIvZmlsZS9cIikpIHtcbiAgICAgICAgICAgIGxldCBodG1sID0gYXdhaXQgcGVyZm9ybUxvY2FsQ2FsbCh7XG4gICAgICAgICAgICAgICAgY2FsbGVyLFxuICAgICAgICAgICAgICAgIGNhbGw6IHsgbm9kZUlkOiBjYWxsZXIubm9kZUlkLCBjbGFzc0d1aWQ6IFJlcXVpcmVDb250cm9sbGVyLl9jbGFzc0d1aWQsIGZ1bmN0aW9uTmFtZTogXCJyZXF1aXJlSFRNTFwiLCBhcmdzOiBbY29uZmlnXSB9LFxuICAgICAgICAgICAgfSkgYXMgQnVmZmVyO1xuICAgICAgICAgICAgLy8gV2l0aG91dCB0aGlzIHRoZSBhY2Nlc3MgcGFnZSBpcyBzZXJ2ZWQgd2l0aCBubyBjb250ZW50IHR5cGUsIGFuZCBhIGJyb3dzZXIgdGhhdCBpcyB0b2xkIG5vdCB0byBzbmlmZiBzaW1wbHkgd2lsbCBub3QgcmVuZGVyIGl0XG4gICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMoaHRtbCwgeyBcIkNvbnRlbnQtVHlwZVwiOiBcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwYXJ0cyA9IHBhdGhuYW1lLnNwbGl0KFwiL1wiKS5maWx0ZXIoeCA9PiB4KS5tYXAoZGVjb2RlVVJJQ29tcG9uZW50KTtcbiAgICAgICAgbGV0IGFjY291bnQgPSBwYXJ0c1sxXTtcbiAgICAgICAgbGV0IGJ1Y2tldE5hbWUgPSBwYXJ0c1syXTtcbiAgICAgICAgbGV0IGZpbGVQYXRoID0gcGFydHMuc2xpY2UoMykuam9pbihcIi9cIik7XG4gICAgICAgIGlmICghYWNjb3VudCB8fCAhYnVja2V0TmFtZSB8fCAhZmlsZVBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyBzdGF0dXM6IFwiNDA0XCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0VmFsaWROYW1lKGFjY291bnQsIFwiYWNjb3VudFwiKTtcbiAgICAgICAgYXNzZXJ0VmFsaWROYW1lKGJ1Y2tldE5hbWUsIFwiYnVja2V0IG5hbWVcIik7XG4gICAgICAgIGFzc2VydFZhbGlkUGF0aChmaWxlUGF0aCk7XG4gICAgICAgIGxldCBidWNrZXRTdG9yZXMgPSBhd2FpdCBnZXRCdWNrZXRTdG9yZXMoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgICAgIGlmICghYnVja2V0U3RvcmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHNldEhUVFBSZXN1bHRIZWFkZXJzKEJ1ZmZlci5mcm9tKFwiXCIpLCB7IHN0YXR1czogXCI0MDRcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFYWNoIHN0b3JlJ3MgcG9saWN5IGNvbWVzIGZyb20gaXRzIG93biBjb25maWcsIHdoaWNoIGl0IGhhcyBvbmx5IHJlYWQgb25jZSBpbml0IHJhblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChidWNrZXRTdG9yZXMubWFwKHggPT4geC5zdG9yZS5pbml0KCkpKTtcbiAgICAgICAgbGV0IHBvbGljaWVzID0gYnVja2V0U3RvcmVzLm1hcCh4ID0+ICh7IHN0b3JlOiB4LnN0b3JlLCBwb2xpY3k6IHguc3RvcmUuc3RvcmVDb25maWcuY3VycmVudCgpIH0pKTtcbiAgICAgICAgaWYgKCFwb2xpY2llcy5zb21lKHggPT4geC5wb2xpY3kucHVibGljKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCdWNrZXQgJHthY2NvdW50fS8ke2J1Y2tldE5hbWV9IGlzIG5vdCBwdWJsaWMsIHNvIGl0cyBmaWxlcyBjYW5ub3QgYmUgcmVhZCBvdmVyIHBsYWluIFVSTHNgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbm9ueW1vdXMgVVJMIHJlYWRzIGNhcnJ5IG5vIHNvdXJjZSBzZWxlY3Rpb24gLSB0aGUgZmlsZSdzIHJvdXRlIHBpY2tzIHRoZSBzdG9yZSwgYW5kIGEgcm91dGUgbm8gc3RvcmUgaGVyZSBjb3ZlcnMgaXMgc2ltcGx5IG5vdCBmb3VuZCAodGhlIHJvdXRpbmcgZmlsZSBpdHNlbGYgbGl2ZXMgb3V0c2lkZSBldmVyeSBzdG9yZSlcbiAgICAgICAgbGV0IGh0dHBTdG9yZTogQmxvYlN0b3JlIHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgaW1tdXRhYmxlID0gZmFsc2U7XG4gICAgICAgIGxldCBpbmZvOiB7IHdyaXRlVGltZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGZpbGVQYXRoICE9PSBST1VUSU5HX0ZJTEUpIHtcbiAgICAgICAgICAgIGxldCByb3V0ZSA9IGdldFJvdXRlKGZpbGVQYXRoKTtcbiAgICAgICAgICAgIGxldCBzZXJ2aW5nID0gcG9saWNpZXMuZmluZCh4ID0+IHgucG9saWN5LnB1YmxpYyAmJiByb3V0ZUNvbnRhaW5zKHgucG9saWN5LnJvdXRlLCByb3V0ZSkpO1xuICAgICAgICAgICAgaHR0cFN0b3JlID0gc2VydmluZz8uc3RvcmU7XG4gICAgICAgICAgICBpbW11dGFibGUgPSAhIXNlcnZpbmc/LnBvbGljeS5pbW11dGFibGU7XG4gICAgICAgICAgICBpbmZvID0gaHR0cFN0b3JlICYmIGF3YWl0IGh0dHBTdG9yZS5nZXRJbmZvKHsgcGF0aDogZmlsZVBhdGggfSkgfHwgdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5mbyA9IGF3YWl0IGdldFJvdXRpbmdGaWxlUmVzdWx0KGFjY291bnQsIGJ1Y2tldE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW5mbyB8fCAhaW5mby5zaXplKSB7XG4gICAgICAgICAgICB0cmFja0FjY2Vzcyh7IGFjY291bnQsIG9wZXJhdGlvbjogXCJodHRwR2V0XCIsIHBhdGg6IGAke2J1Y2tldE5hbWV9LyR7ZmlsZVBhdGh9YCwgc2l6ZTogMCB9KTtcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyBzdGF0dXM6IFwiNDA0XCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGV4dCA9IGZpbGVQYXRoLnNwbGl0KFwiLlwiKS5wb3AoKSB8fCBcIlwiO1xuICAgICAgICBsZXQgaGVhZGVyczogeyBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IENPTlRFTlRfVFlQRVNbZXh0LnRvTG93ZXJDYXNlKCldIHx8IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIsXG4gICAgICAgICAgICBcIkxhc3QtTW9kaWZpZWRcIjogbmV3IERhdGUoaW5mby53cml0ZVRpbWUpLnRvVVRDU3RyaW5nKCksXG4gICAgICAgICAgICBcIkFjY2VwdC1SYW5nZXNcIjogXCJieXRlc1wiLFxuICAgICAgICB9O1xuICAgICAgICAvLyBUaGUgc2VydmluZyBzdG9yZSdzIG93biBwb2xpY3kgLSBhbmQgbmV2ZXIgZm9yIHRoZSByb3V0aW5nIGZpbGUsIHdoaWNoIGNoYW5naW5nIGlzIHRoZSB3aG9sZSBwb2ludCBvZlxuICAgICAgICBpZiAoaW1tdXRhYmxlKSB7XG4gICAgICAgICAgICBoZWFkZXJzW1wiQ2FjaGUtQ29udHJvbFwiXSA9IGBtYXgtYWdlPSR7SU1NVVRBQkxFX0NBQ0hFX1RJTUUgLyAxMDAwfWA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlmTW9kaWZpZWRTaW5jZSA9IHJlcXVlc3Q/LmhlYWRlcnNbXCJpZi1tb2RpZmllZC1zaW5jZVwiXTtcbiAgICAgICAgaWYgKHR5cGVvZiBpZk1vZGlmaWVkU2luY2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGxldCBzaW5jZSA9IG5ldyBEYXRlKGlmTW9kaWZpZWRTaW5jZSkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgaWYgKHNpbmNlICYmIE1hdGguZmxvb3IoaW5mby53cml0ZVRpbWUgLyAxMDAwKSAqIDEwMDAgPD0gc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMoQnVmZmVyLmZyb20oXCJcIiksIHsgLi4uaGVhZGVycywgc3RhdHVzOiBcIjMwNFwiIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByYW5nZTogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9IHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcmFuZ2VIZWFkZXIgPSByZXF1ZXN0Py5oZWFkZXJzW1wicmFuZ2VcIl07XG4gICAgICAgIGlmICh0eXBlb2YgcmFuZ2VIZWFkZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGxldCBtYXRjaCA9IC9eYnl0ZXM9KFxcZCopLShcXGQqKSQvLmV4ZWMocmFuZ2VIZWFkZXIudHJpbSgpKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCAmJiAobWF0Y2hbMV0gfHwgbWF0Y2hbMl0pKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgbGV0IGVuZEluY2x1c2l2ZSA9IGluZm8uc2l6ZSAtIDE7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaFsxXSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IE1hdGgubWF4KDAsIGluZm8uc2l6ZSAtICttYXRjaFsyXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSArbWF0Y2hbMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFsyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kSW5jbHVzaXZlID0gTWF0aC5taW4oK21hdGNoWzJdLCBpbmZvLnNpemUgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gaW5mby5zaXplIHx8IHN0YXJ0ID4gZW5kSW5jbHVzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyAuLi5oZWFkZXJzLCBcIkNvbnRlbnQtUmFuZ2VcIjogYGJ5dGVzICovJHtpbmZvLnNpemV9YCwgc3RhdHVzOiBcIjQxNlwiIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByYW5nZSA9IHsgc3RhcnQsIGVuZDogZW5kSW5jbHVzaXZlICsgMSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQ6IHsgZGF0YTogQnVmZmVyOyB3cml0ZVRpbWU6IG51bWJlcjsgc2l6ZTogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChodHRwU3RvcmUpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGh0dHBTdG9yZS5nZXQyKHsgcGF0aDogZmlsZVBhdGgsIHJhbmdlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgZ2V0Um91dGluZ0ZpbGVSZXN1bHQoYWNjb3VudCwgYnVja2V0TmFtZSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0geyAuLi5yZXN1bHQsIGRhdGE6IHJlc3VsdC5kYXRhLnN1YmFycmF5KE1hdGgubWluKHJhbmdlLnN0YXJ0LCByZXN1bHQuZGF0YS5sZW5ndGgpLCBNYXRoLm1pbihyYW5nZS5lbmQsIHJlc3VsdC5kYXRhLmxlbmd0aCkpIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJhY2tBY2Nlc3MoeyBhY2NvdW50LCBvcGVyYXRpb246IFwiaHR0cEdldFwiLCBwYXRoOiBgJHtidWNrZXROYW1lfS8ke2ZpbGVQYXRofWAsIHNpemU6IHJlc3VsdCAmJiByZXN1bHQuZGF0YS5sZW5ndGggfHwgMCB9KTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRIVFRQUmVzdWx0SGVhZGVycyhCdWZmZXIuZnJvbShcIlwiKSwgeyBzdGF0dXM6IFwiNDA0XCIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMocmVzdWx0LmRhdGEsIHsgLi4uaGVhZGVycywgXCJDb250ZW50LVJhbmdlXCI6IGBieXRlcyAke3JhbmdlLnN0YXJ0fS0ke3JhbmdlLmVuZCAtIDF9LyR7aW5mby5zaXplfWAsIHN0YXR1czogXCIyMDZcIiB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SFRUUFJlc3VsdEhlYWRlcnMocmVzdWx0LmRhdGEsIGhlYWRlcnMpO1xuICAgIH1cbn1cblxuLyoqIFRoZSBvbmUgcmVzb2x1dGlvbiBldmVyeSBkYXRhIGNhbGwgZG9lczogdGhlIGNsaWVudCdzIHNlbGVjdGVkIHNvdXJjZUNvbmZpZyBOQU1FUyBleGFjdGx5IG9uZSBzdG9yZSAoY3JlYXRlZCBvbiBmaXJzdCB1c2UpLCBhbmQgZm4gcnVucyBvbiBpdC4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdpdGhTdG9yZTxUPihjb25maWc6IHsgYWNjb3VudDogc3RyaW5nOyBidWNrZXROYW1lOiBzdHJpbmc7IHNvdXJjZUNvbmZpZzogU291cmNlQ29uZmlnIH0sIGZuOiAoc3RvcmU6IEJsb2JTdG9yZSkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBhd2FpdCBmbihmaW5kQnVja2V0U3RvcmUoY29uZmlnLmFjY291bnQsIGNvbmZpZy5idWNrZXROYW1lLCBjb25maWcuc291cmNlQ29uZmlnKSk7XG59XG5cbmNvbnN0IGxhcmdlVXBsb2FkSW5mbyA9IG5ldyBNYXA8c3RyaW5nLCB7IGFjY291bnQ6IHN0cmluZzsgYnVja2V0TmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGxhc3RNb2RpZmllZD86IG51bWJlcjsgZm9yY2VTZXRJbW11dGFibGU/OiBib29sZWFuOyBub0NoZWNrcz86IGJvb2xlYW47IGludGVybmFsPzogYm9vbGVhbjsgc3RvcmVOYW1lOiBzdHJpbmcgfT4oKTtcblxuY29uc3QgYWNjb3VudEFjY2VzczogU29ja2V0RnVuY3Rpb25Ib29rID0gYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBjb25maWcgPSBjb250ZXh0LmNhbGwuYXJnc1swXSBhcyB7IGFjY291bnQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICBhd2FpdCByZXF1aXJlQWNjZXNzKFN0cmluZyhjb25maWc/LmFjY291bnQpKTtcbiAgICBsZXQgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gICAgaWYgKGR1cmF0aW9uID4gQUNDRVNTX0NIRUNLX1NMT1dfVElNRSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgQWNjZXNzIGNoZWNrIGZvciAke2NvbnRleHQuY2FsbC5mdW5jdGlvbk5hbWV9IHRvb2sgJHtkdXJhdGlvbn1tc2ApO1xuICAgIH1cbn07XG5jb25zdCB1cGxvYWRBY2Nlc3M6IFNvY2tldEZ1bmN0aW9uSG9vayA9IGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgbGV0IGNvbmZpZyA9IGNvbnRleHQuY2FsbC5hcmdzWzBdIGFzIHsgdXBsb2FkSWQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgaW5mbyA9IGxhcmdlVXBsb2FkSW5mby5nZXQoU3RyaW5nKGNvbmZpZz8udXBsb2FkSWQpKTtcbiAgICBpZiAoIWluZm8pIHJldHVybjtcbiAgICBhd2FpdCByZXF1aXJlQWNjZXNzKGluZm8uYWNjb3VudCk7XG59O1xuY29uc3QgYWRtaW5BY2Nlc3M6IFNvY2tldEZ1bmN0aW9uSG9vayA9IGFzeW5jICgpID0+IHtcbiAgICByZXF1aXJlQWRtaW4oKTtcbn07XG5cbmV4cG9ydCBjb25zdCBSZW1vdGVTdG9yYWdlQ29udHJvbGxlciA9IFNvY2tldEZ1bmN0aW9uLnJlZ2lzdGVyKFxuICAgIFJFTU9URV9TVE9SQUdFX0NMQVNTX0dVSUQsXG4gICAgbmV3IFJlbW90ZVN0b3JhZ2VDb250cm9sbGVyQmFzZSgpLFxuICAgICgpID0+ICh7XG4gICAgICAgIHBpbmc6IHt9LFxuICAgICAgICBhdXRoZW50aWNhdGU6IHt9LFxuICAgICAgICByZXF1ZXN0QWNjZXNzOiB7fSxcbiAgICAgICAgZ2V0QWNjZXNzU3RhdGU6IHt9LFxuICAgICAgICBsaXN0UmVxdWVzdHNGb3JJUDogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdyYW50QWNjZXNzOiB7fSxcbiAgICAgICAgYWRtaW5MaXN0UmVxdWVzdHM6IHsgaG9va3M6IFthZG1pbkFjY2Vzc10gfSxcbiAgICAgICAgYWRtaW5MaXN0QWN0aXZlQnVja2V0czogeyBob29rczogW2FkbWluQWNjZXNzXSB9LFxuICAgICAgICBhZG1pbkdyYW50QWNjZXNzOiB7IGhvb2tzOiBbYWRtaW5BY2Nlc3NdIH0sXG4gICAgICAgIGdldDI6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBzZXQ6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBkZWw6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBtb3ZlOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0SW5mbzogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGZpbmRJbmZvOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0Q2hhbmdlc0FmdGVyMjogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldEFyY2hpdmVzQ29uZmlnOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0SW5kZXhJbmZvOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgbGlzdEJ1Y2tldHM6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBnZXRBY3RpdmVCdWNrZXQ6IHsgaG9va3M6IFthY2NvdW50QWNjZXNzXSB9LFxuICAgICAgICBhY3RpdmF0ZUJ1Y2tldDogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGNsZWFyV3JpdGVTdGF0czogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIGdldEFjY2Vzc1N0YXRzOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0QWNjZXNzU3VtbWFyaWVzOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgZ2V0U3luY1N0YXR1czogeyBob29rczogW2FjY291bnRBY2Nlc3NdIH0sXG4gICAgICAgIHN0YXJ0TGFyZ2VGaWxlOiB7IGhvb2tzOiBbYWNjb3VudEFjY2Vzc10gfSxcbiAgICAgICAgdXBsb2FkUGFydDogeyBob29rczogW3VwbG9hZEFjY2Vzc10gfSxcbiAgICAgICAgZmluaXNoTGFyZ2VGaWxlOiB7IGhvb2tzOiBbdXBsb2FkQWNjZXNzXSB9LFxuICAgICAgICBjYW5jZWxMYXJnZUZpbGU6IHsgaG9va3M6IFt1cGxvYWRBY2Nlc3NdIH0sXG4gICAgICAgIGh0dHBFbnRyeToge30sXG4gICAgfSksXG4gICAgKCkgPT4gKHtcbiAgICAgICAgbm9DbGllbnRIb29rczogdHJ1ZSxcbiAgICAgICAgbm9EZWZhdWx0SG9va3M6IHRydWUsXG4gICAgfSlcbik7XG4iXX0=
|
|
590
|
+
/* _JS_SOURCE_HASH = "f9cab02161fcfd01e1aadee5dccdd0d0e6b91e75e0bfcff1d2e8e2ad407b8c61"; */
|