experimental-agent 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{adapter-DmlMKodR.d.mts → adapter-txsF6hou.d.mts} +1 -0
- package/dist/{adapter-DmlMKodR.d.ts → adapter-txsF6hou.d.ts} +1 -0
- package/dist/{chunk-355UN6NT.mjs → chunk-CCWLV27N.mjs} +2 -2
- package/dist/{chunk-6MS4CGEZ.mjs → chunk-D35AQN7O.mjs} +5 -5
- package/dist/{client-panIugEx.d.mts → client-B2ohNvwc.d.mts} +3 -3
- package/dist/{client-Cd-79N5B.d.ts → client-BbQZtxca.d.ts} +3 -3
- package/dist/{entry-CciSxlDK.d.mts → entry-BUiucCNp.d.mts} +1 -1
- package/dist/{entry-MCzvxs7U.d.ts → entry-ok9EBUS3.d.ts} +1 -1
- package/dist/index.d.mts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +77 -80
- package/dist/index.mjs +74 -77
- package/dist/lifecycle-workflow-steps.d.mts +2 -2
- package/dist/lifecycle-workflow-steps.d.ts +2 -2
- package/dist/lifecycle-workflow.d.mts +2 -2
- package/dist/lifecycle-workflow.d.ts +2 -2
- package/dist/next/loader.js +2 -2
- package/dist/next/loader.mjs +1 -1
- package/dist/next.js +2 -2
- package/dist/next.mjs +1 -1
- package/dist/react.d.mts +4 -4
- package/dist/react.d.ts +4 -4
- package/dist/sandbox.d.mts +3 -3
- package/dist/sandbox.d.ts +3 -3
- package/dist/sandbox.js +5 -5
- package/dist/sandbox.mjs +1 -1
- package/dist/{steps-DnvPkAtl.d.ts → steps-BOKeU8X3.d.ts} +2 -1
- package/dist/{steps-DWQYXexO.d.mts → steps-Mi3sjYbD.d.mts} +2 -1
- package/dist/storage.d.mts +2 -2
- package/dist/storage.d.ts +2 -2
- package/dist/{vercel-LJEWLD4T.mjs → vercel-BOGHAFI4.mjs} +1 -1
- package/package.json +1 -1
package/dist/sandbox.js
CHANGED
|
@@ -983,10 +983,10 @@ function vercelSandbox(defaults) {
|
|
|
983
983
|
return {
|
|
984
984
|
type: "vercel",
|
|
985
985
|
defaults,
|
|
986
|
-
async create({ agent, setup, record, signal: _signal, log }) {
|
|
986
|
+
async create({ cwd: createCwd, agent, setup, record, signal: _signal, log }) {
|
|
987
987
|
const storage = agent.storage;
|
|
988
988
|
const config = setup.config ?? {};
|
|
989
|
-
const cwd = config.cwd;
|
|
989
|
+
const cwd = config.cwd ?? createCwd ?? void 0;
|
|
990
990
|
const resources = config.resources ?? { vcpus: DEFAULT_VCPUS };
|
|
991
991
|
const ports = config.ports;
|
|
992
992
|
const networkPolicy = config.networkPolicy ?? setup.networkPolicy ?? void 0;
|
|
@@ -1061,13 +1061,13 @@ function vercelSandbox(defaults) {
|
|
|
1061
1061
|
metadata: { sandboxId: sdk.sandboxId }
|
|
1062
1062
|
};
|
|
1063
1063
|
},
|
|
1064
|
-
async connect({ metadata }) {
|
|
1064
|
+
async connect({ metadata, cwd }) {
|
|
1065
1065
|
const SandboxSDK = await loadSandboxSDK2();
|
|
1066
1066
|
const sdk = await SandboxSDK.get({
|
|
1067
1067
|
sandboxId: metadata.sandboxId,
|
|
1068
1068
|
...getTestCredentials2()
|
|
1069
1069
|
});
|
|
1070
|
-
return new VercelSandboxInstance(sdk);
|
|
1070
|
+
return new VercelSandboxInstance(sdk, cwd ?? void 0);
|
|
1071
1071
|
}
|
|
1072
1072
|
};
|
|
1073
1073
|
}
|
|
@@ -1077,4 +1077,4 @@ function vercelSandbox(defaults) {
|
|
|
1077
1077
|
localSandbox,
|
|
1078
1078
|
vercelSandbox
|
|
1079
1079
|
});
|
|
1080
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3NhbmRib3gvZW50cnkudHMiLCAiLi4vc3JjL3NhbmRib3gvYmluZGluZ3MvZG9ja2VyLnRzIiwgIi4uL3NyYy9zYW5kYm94L2JpbmRpbmdzL2xvY2FsLnRzIiwgIi4uL3NyYy9zYW5kYm94L2JpbmRpbmdzL3ZlcmNlbC50cyIsICIuLi9zcmMvc2FuZGJveC9iaW5kaW5ncy92ZXJjZWwtbGlmZWN5Y2xlL3dvcmtmbG93LnRzIiwgIi4uL3NyYy91dGlscy9sb2dnZXIudHMiLCAiLi4vc3JjL3NhbmRib3gvYmluZGluZ3MvdmVyY2VsLWxpZmVjeWNsZS9zdGVwcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IHR5cGUge1xuICBFeGVjUmVzdWx0LFxuICBTYW5kYm94QWdlbnRSZWYsXG4gIFNhbmRib3hCaW5kaW5nLFxuICBTYW5kYm94SW5zdGFuY2UsXG4gIFNhbmRib3hTZXR1cEZpZWxkcyxcbiAgVXBsb2FkYWJsZUZpbGUsXG59IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCB7IGRvY2tlclNhbmRib3ggfSBmcm9tIFwiLi9iaW5kaW5ncy9kb2NrZXJcIjtcbmV4cG9ydCB7IGxvY2FsU2FuZGJveCB9IGZyb20gXCIuL2JpbmRpbmdzL2xvY2FsXCI7XG5leHBvcnQgeyB2ZXJjZWxTYW5kYm94IH0gZnJvbSBcIi4vYmluZGluZ3MvdmVyY2VsXCI7XG4iLCAiaW1wb3J0IHsgdWxpZCB9IGZyb20gXCJ1bGlkXCI7XG5pbXBvcnQgdHlwZSB7IEV4ZWNSZXN1bHQsIFNhbmRib3hCaW5kaW5nLCBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuXG5leHBvcnQgdHlwZSBEb2NrZXJCaW5kaW5nQ29uZmlnID0ge1xuICBjd2Q/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBEb2NrZXJCaW5kaW5nTWV0YWRhdGEgPSB7XG4gIHNhbmRib3hOYW1lOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFJ1biBhIGBkb2NrZXIgc2FuZGJveGAgQ0xJIGNvbW1hbmQgYW5kIHJldHVybiBpdHMgb3V0cHV0LlxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjRG9ja2VyKFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgb3B0cz86IHsgdGltZW91dE1zPzogbnVtYmVyOyBzaWduYWw/OiBBYm9ydFNpZ25hbCB9XG4pOiBQcm9taXNlPHsgc3Rkb3V0OiBzdHJpbmc7IHN0ZGVycjogc3RyaW5nOyBleGl0Q29kZTogbnVtYmVyIH0+IHtcbiAgY29uc3QgeyBzcGF3biB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oXCJkb2NrZXJcIiwgW1wic2FuZGJveFwiLCAuLi5hcmdzXSwge1xuICAgICAgc2lnbmFsOiBvcHRzPy5zaWduYWwsXG4gICAgfSk7XG5cbiAgICBsZXQgc3Rkb3V0ID0gXCJcIjtcbiAgICBsZXQgc3RkZXJyID0gXCJcIjtcblxuICAgIGNoaWxkLnN0ZG91dC5vbihcImRhdGFcIiwgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgc3Rkb3V0ICs9IGRhdGEudG9TdHJpbmcoKTtcbiAgICB9KTtcbiAgICBjaGlsZC5zdGRlcnIub24oXCJkYXRhXCIsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIHN0ZGVyciArPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSBvcHRzPy50aW1lb3V0TXNcbiAgICAgID8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY2hpbGQua2lsbChcIlNJR1RFUk1cIik7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgZG9ja2VyIHNhbmRib3ggJHthcmdzWzBdfSB0aW1lZCBvdXRgKSk7XG4gICAgICAgIH0sIG9wdHMudGltZW91dE1zKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjaGlsZC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgIGlmICh0aW1lb3V0SWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9KTtcblxuICAgIGNoaWxkLm9uKFwiY2xvc2VcIiwgKGNvZGUpID0+IHtcbiAgICAgIGlmICh0aW1lb3V0SWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiBjb2RlID8/IDAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRyYWNrIHdoaWNoIHNhbmRib3hlcyBoYXZlIGJlZW4gdmVyaWZpZWQgdG8gZXhpc3QgaW4gdGhpcyBwcm9jZXNzLlxuICogTWFwcyBzYW5kYm94IG5hbWUgLT4gUHJvbWlzZSBzbyBjb25jdXJyZW50IGNhbGxlcnMgd2FpdCBvbiB0aGUgc2FtZSBjaGVjay5cbiAqL1xuY29uc3QgZW5zdXJlUHJvbWlzZXMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTx2b2lkPj4oKTtcblxuLyoqXG4gKiBTYW5kYm94ZXMgdGhhdCB0aGlzIHByb2Nlc3MgaGFzIHVzZWQuIFN0b3BwZWQgb24gcHJvY2VzcyBleGl0LlxuICovXG5jb25zdCBhY3RpdmVTYW5kYm94ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxubGV0IGNsZWFudXBSZWdpc3RlcmVkID0gZmFsc2U7XG5sZXQgX2V4ZWNTeW5jOiB0eXBlb2YgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpLmV4ZWNTeW5jIHwgbnVsbCA9IG51bGw7XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyQ2xlYW51cCgpIHtcbiAgaWYgKGNsZWFudXBSZWdpc3RlcmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNsZWFudXBSZWdpc3RlcmVkID0gdHJ1ZTtcblxuICAvLyBQcmUtbG9hZCBleGVjU3luYyBzbyB0aGUgc3luY2hyb25vdXMgZXhpdCBoYW5kbGVyIGNhbiB1c2UgaXQuXG4gIGNvbnN0IGNwID0gYXdhaXQgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpO1xuICBfZXhlY1N5bmMgPSBjcC5leGVjU3luYztcblxuICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgIGlmICghX2V4ZWNTeW5jKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBBcnJheS5mcm9tKGFjdGl2ZVNhbmRib3hlcykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIF9leGVjU3luYyhgZG9ja2VyIHNhbmRib3ggc3RvcCAke25hbWV9YCwge1xuICAgICAgICAgIHRpbWVvdXQ6IDEwXzAwMCxcbiAgICAgICAgICBzdGRpbzogXCJwaXBlXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEJlc3QtZWZmb3J0IFx1MjAxNCBzYW5kYm94IG1heSBhbHJlYWR5IGJlIHN0b3BwZWRcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcHJvY2Vzcy5vbihcImV4aXRcIiwgY2xlYW51cCk7XG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgKCkgPT4ge1xuICAgIGNsZWFudXAoKTtcbiAgICBwcm9jZXNzLmV4aXQoMTMwKTtcbiAgfSk7XG4gIHByb2Nlc3Mub24oXCJTSUdURVJNXCIsICgpID0+IHtcbiAgICBjbGVhbnVwKCk7XG4gICAgcHJvY2Vzcy5leGl0KDE0Myk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEVuc3VyZSBhIERvY2tlciBzYW5kYm94IGV4aXN0cyBmb3IgdGhlIGdpdmVuIG5hbWUuXG4gKiBJZiBpdCBhbHJlYWR5IGV4aXN0cyAoZnJvbSBhIHByZXZpb3VzIHByb2Nlc3MpLCByZXVzZXMgaXQuXG4gKiBJZiBpdCBkb2Vzbid0IGV4aXN0LCBjcmVhdGVzIGl0LlxuICovXG5hc3luYyBmdW5jdGlvbiBlbnN1cmVTYW5kYm94KHNhbmRib3hOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZXhpc3RpbmcgPSBlbnN1cmVQcm9taXNlcy5nZXQoc2FuZGJveE5hbWUpO1xuICBpZiAoZXhpc3RpbmcpIHtcbiAgICByZXR1cm4gZXhpc3Rpbmc7XG4gIH1cblxuICBjb25zdCBwcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBscyA9IGF3YWl0IGV4ZWNEb2NrZXIoW1wibHNcIiwgXCItcVwiXSwgeyB0aW1lb3V0TXM6IDEwXzAwMCB9KTtcbiAgICBjb25zdCBleGlzdGluZ05hbWVzID1cbiAgICAgIGxzLmV4aXRDb2RlID09PSAwXG4gICAgICAgID8gbHMuc3Rkb3V0XG4gICAgICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgICAgIC5tYXAoKHMpID0+IHMudHJpbSgpKVxuICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICA6IFtdO1xuXG4gICAgaWYgKGV4aXN0aW5nTmFtZXMuaW5jbHVkZXMoc2FuZGJveE5hbWUpKSB7XG4gICAgICBhY3RpdmVTYW5kYm94ZXMuYWRkKHNhbmRib3hOYW1lKTtcbiAgICAgIHJlZ2lzdGVyQ2xlYW51cCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGggPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG4gICAgY29uc3Qgb3MgPSBhd2FpdCBpbXBvcnQoXCJub2RlOm9zXCIpO1xuICAgIGNvbnN0IGZzID0gYXdhaXQgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKTtcblxuICAgIGNvbnN0IHdvcmtzcGFjZURpciA9IHBhdGguam9pbihcbiAgICAgIG9zLnRtcGRpcigpLFxuICAgICAgXCJhZ2VudC1kb2NrZXItc2FuZGJveFwiLFxuICAgICAgc2FuZGJveE5hbWVcbiAgICApO1xuICAgIGF3YWl0IGZzLm1rZGlyKHdvcmtzcGFjZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBjb25zdCBjcmVhdGUgPSBhd2FpdCBleGVjRG9ja2VyKFxuICAgICAgW1wiY3JlYXRlXCIsIFwiLS1uYW1lXCIsIHNhbmRib3hOYW1lLCBcInNoZWxsXCIsIHdvcmtzcGFjZURpcl0sXG4gICAgICB7IHRpbWVvdXRNczogNjBfMDAwIH1cbiAgICApO1xuXG4gICAgaWYgKGNyZWF0ZS5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgaWYgKGNyZWF0ZS5zdGRlcnIuaW5jbHVkZXMoXCJhbHJlYWR5IGV4aXN0c1wiKSkge1xuICAgICAgICBhY3RpdmVTYW5kYm94ZXMuYWRkKHNhbmRib3hOYW1lKTtcbiAgICAgICAgcmVnaXN0ZXJDbGVhbnVwKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBjcmVhdGUgZG9ja2VyIHNhbmRib3ggXCIke3NhbmRib3hOYW1lfVwiOiAke2NyZWF0ZS5zdGRlcnJ9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBhY3RpdmVTYW5kYm94ZXMuYWRkKHNhbmRib3hOYW1lKTtcbiAgICByZWdpc3RlckNsZWFudXAoKTtcbiAgfSkoKTtcblxuICBlbnN1cmVQcm9taXNlcy5zZXQoc2FuZGJveE5hbWUsIHByb21pc2UpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgcHJvbWlzZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVuc3VyZVByb21pc2VzLmRlbGV0ZShzYW5kYm94TmFtZSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG5jb25zdCBERUZBVUxUX0RPQ0tFUl9DV0QgPSBcIi9ob21lL2FnZW50L3dvcmtzcGFjZVwiO1xuXG5jbGFzcyBEb2NrZXJTYW5kYm94SW5zdGFuY2UgaW1wbGVtZW50cyBTYW5kYm94SW5zdGFuY2Uge1xuICByZWFkb25seSBjd2Q6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzYW5kYm94TmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NlcyA9IG5ldyBNYXA8XG4gICAgc3RyaW5nLFxuICAgIGltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKS5DaGlsZFByb2Nlc3NcbiAgPigpO1xuXG4gIGNvbnN0cnVjdG9yKHNhbmRib3hOYW1lOiBzdHJpbmcsIGN3ZD86IHN0cmluZykge1xuICAgIHRoaXMuc2FuZGJveE5hbWUgPSBzYW5kYm94TmFtZTtcbiAgICB0aGlzLmN3ZCA9IGN3ZCA/PyBERUZBVUxUX0RPQ0tFUl9DV0Q7XG4gIH1cblxuICBhc3luYyBleGVjKG9wdHM6IHtcbiAgICBjb21tYW5kOiBzdHJpbmc7XG4gICAgYXJncz86IHN0cmluZ1tdO1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHN1ZG8/OiBib29sZWFuO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxFeGVjUmVzdWx0PiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcblxuICAgIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKTtcbiAgICBjb25zdCBjb21tYW5kSWQgPSBgY29tbWFuZF8ke3VsaWQoKX1gO1xuICAgIGNvbnN0IGVudkZsYWdzID0gb3B0cy5lbnZcbiAgICAgID8gT2JqZWN0LmVudHJpZXMob3B0cy5lbnYpLmZsYXRNYXAoKFtrLCB2XSkgPT4gW1wiLWVcIiwgYCR7a309JHt2fWBdKVxuICAgICAgOiBbXTtcbiAgICBjb25zdCBjd2RGbGFncyA9IG9wdHMuY3dkID8gW1wiLXdcIiwgb3B0cy5jd2RdIDogW107XG4gICAgbGV0IGJhc2VDbWQ6IHN0cmluZ1tdO1xuICAgIGlmIChvcHRzLnN1ZG8pIHtcbiAgICAgIGJhc2VDbWQgPSBbXCJzdWRvXCIsIG9wdHMuY29tbWFuZCwgLi4uKG9wdHMuYXJncyA/PyBbXSldO1xuICAgIH0gZWxzZSBpZiAob3B0cy5hcmdzKSB7XG4gICAgICBiYXNlQ21kID0gW29wdHMuY29tbWFuZCwgLi4ub3B0cy5hcmdzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZUNtZCA9IFtvcHRzLmNvbW1hbmRdO1xuICAgIH1cbiAgICBjb25zdCBmdWxsQ21kID0gYmFzZUNtZDtcblxuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oXG4gICAgICBcImRvY2tlclwiLFxuICAgICAgW1xuICAgICAgICBcInNhbmRib3hcIixcbiAgICAgICAgXCJleGVjXCIsXG4gICAgICAgIC4uLmVudkZsYWdzLFxuICAgICAgICAuLi5jd2RGbGFncyxcbiAgICAgICAgdGhpcy5zYW5kYm94TmFtZSxcbiAgICAgICAgLi4uZnVsbENtZCxcbiAgICAgIF0sXG4gICAgICB7IHNpZ25hbDogb3B0cy5zaWduYWwgfVxuICAgICk7XG5cbiAgICB0aGlzLnByb2Nlc3Nlcy5zZXQoY29tbWFuZElkLCBjaGlsZCk7XG5cbiAgICBsZXQgc3Rkb3V0ID0gXCJcIjtcbiAgICBsZXQgc3RkZXJyID0gXCJcIjtcbiAgICBjb25zdCBsb2dRdWV1ZTogeyBzdHJlYW06IFwic3Rkb3V0XCIgfCBcInN0ZGVyclwiOyBkYXRhOiBzdHJpbmcgfVtdID0gW107XG4gICAgbGV0IGxvZ1Jlc29sdmU6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBjbG9zZWQgPSBmYWxzZTtcblxuICAgIGNoaWxkLnN0ZG91dC5vbihcImRhdGFcIiwgKGRhdGE6IHN0cmluZyB8IEJ1ZmZlcikgPT4ge1xuICAgICAgY29uc3Qgc3RyID0gU3RyaW5nKGRhdGEpO1xuICAgICAgc3Rkb3V0ICs9IHN0cjtcbiAgICAgIGxvZ1F1ZXVlLnB1c2goeyBzdHJlYW06IFwic3Rkb3V0XCIsIGRhdGE6IHN0ciB9KTtcbiAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgIH0pO1xuXG4gICAgY2hpbGQuc3RkZXJyLm9uKFwiZGF0YVwiLCAoZGF0YTogc3RyaW5nIHwgQnVmZmVyKSA9PiB7XG4gICAgICBjb25zdCBzdHIgPSBTdHJpbmcoZGF0YSk7XG4gICAgICBzdGRlcnIgKz0gc3RyO1xuICAgICAgbG9nUXVldWUucHVzaCh7IHN0cmVhbTogXCJzdGRlcnJcIiwgZGF0YTogc3RyIH0pO1xuICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBuZXcgUHJvbWlzZTx7XG4gICAgICBzdGRvdXQ6IHN0cmluZztcbiAgICAgIHN0ZGVycjogc3RyaW5nO1xuICAgICAgZXhpdENvZGU6IG51bWJlcjtcbiAgICB9PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjaGlsZC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZXMuZGVsZXRlKGNvbW1hbmRJZCk7XG4gICAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0pO1xuXG4gICAgICBjaGlsZC5vbihcImNsb3NlXCIsIChjb2RlOiBudW1iZXIgfCBudWxsKSA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VzLmRlbGV0ZShjb21tYW5kSWQpO1xuICAgICAgICBjbG9zZWQgPSB0cnVlO1xuICAgICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICAgICAgcmVzb2x2ZSh7IHN0ZG91dCwgc3RkZXJyLCBleGl0Q29kZTogY29kZSA/PyAwIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiogbG9ncygpOiBBc3luY0l0ZXJhYmxlPHtcbiAgICAgIHN0cmVhbTogXCJzdGRvdXRcIiB8IFwic3RkZXJyXCI7XG4gICAgICBkYXRhOiBzdHJpbmc7XG4gICAgfT4ge1xuICAgICAgd2hpbGUgKCFjbG9zZWQgfHwgbG9nUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IGxvZ1F1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHlpZWxkIGVudHJ5O1xuICAgICAgICB9IGVsc2UgaWYgKCFjbG9zZWQpIHtcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgICAgICAgbG9nUmVzb2x2ZSA9IHI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbG9nUmVzb2x2ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBjb21tYW5kSWQsIGxvZ3MsIHJlc3VsdCB9O1xuICB9XG5cbiAgYXN5bmMgcmVhZEZpbGUob3B0czoge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8QnVmZmVyIHwgbnVsbD4ge1xuICAgIGF3YWl0IGVuc3VyZVNhbmRib3godGhpcy5zYW5kYm94TmFtZSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjRG9ja2VyKFxuICAgICAgW1xuICAgICAgICBcImV4ZWNcIixcbiAgICAgICAgdGhpcy5zYW5kYm94TmFtZSxcbiAgICAgICAgXCJiYXNoXCIsXG4gICAgICAgIFwiLWNcIixcbiAgICAgICAgYGJhc2U2NCAnJHtvcHRzLnBhdGgucmVwbGFjZSgvJy9nLCBcIidcXFxcJydcIil9J2AsXG4gICAgICBdLFxuICAgICAgeyB0aW1lb3V0TXM6IDMwXzAwMCwgc2lnbmFsOiBvcHRzLnNpZ25hbCB9XG4gICAgKTtcblxuICAgIGlmIChyZXN1bHQuZXhpdENvZGUgIT09IDApIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmVzdWx0LnN0ZGVyci5pbmNsdWRlcyhcIk5vIHN1Y2ggZmlsZVwiKSB8fFxuICAgICAgICByZXN1bHQuc3RkZXJyLmluY2x1ZGVzKFwiRU5PRU5UXCIpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlYWRGaWxlIGZhaWxlZDogJHtyZXN1bHQuc3RkZXJyfWApO1xuICAgIH1cblxuICAgIHJldHVybiBCdWZmZXIuZnJvbShyZXN1bHQuc3Rkb3V0LnRyaW0oKSwgXCJiYXNlNjRcIik7XG4gIH1cblxuICBhc3luYyB3cml0ZUZpbGVzKG9wdHM6IHtcbiAgICBmaWxlczogeyBwYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB8IEJ1ZmZlciB9W107XG4gICAgZGVzdFBhdGg6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGVuc3VyZVNhbmRib3godGhpcy5zYW5kYm94TmFtZSk7XG5cbiAgICBmb3IgKGNvbnN0IGZpbGUgb2Ygb3B0cy5maWxlcykge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBvcHRzLmRlc3RQYXRoXG4gICAgICAgID8gYCR7b3B0cy5kZXN0UGF0aH0vJHtmaWxlLnBhdGh9YFxuICAgICAgICA6IGZpbGUucGF0aDtcblxuICAgICAgLy8gRW5zdXJlIHBhcmVudCBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBjb25zdCBwYXJlbnREaXIgPSBmdWxsUGF0aC5zdWJzdHJpbmcoMCwgZnVsbFBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcbiAgICAgIGlmIChwYXJlbnREaXIpIHtcbiAgICAgICAgYXdhaXQgZXhlY0RvY2tlcihbXCJleGVjXCIsIHRoaXMuc2FuZGJveE5hbWUsIFwibWtkaXJcIiwgXCItcFwiLCBwYXJlbnREaXJdLCB7XG4gICAgICAgICAgc2lnbmFsOiBvcHRzLnNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdyaXRlIHZpYSBiYXNlNjQgdG8gaGFuZGxlIGJvdGggdGV4dCBhbmQgYmluYXJ5IGNvbnRlbnRcbiAgICAgIGNvbnN0IGI2NCA9XG4gICAgICAgIHR5cGVvZiBmaWxlLmNvbnRlbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICA/IEJ1ZmZlci5mcm9tKGZpbGUuY29udGVudCkudG9TdHJpbmcoXCJiYXNlNjRcIilcbiAgICAgICAgICA6IGZpbGUuY29udGVudC50b1N0cmluZyhcImJhc2U2NFwiKTtcblxuICAgICAgYXdhaXQgZXhlY0RvY2tlcihcbiAgICAgICAgW1xuICAgICAgICAgIFwiZXhlY1wiLFxuICAgICAgICAgIHRoaXMuc2FuZGJveE5hbWUsXG4gICAgICAgICAgXCJiYXNoXCIsXG4gICAgICAgICAgXCItY1wiLFxuICAgICAgICAgIGBlY2hvICcke2I2NH0nIHwgYmFzZTY0IC1kID4gJyR7ZnVsbFBhdGgucmVwbGFjZSgvJy9nLCBcIidcXFxcJydcIil9J2AsXG4gICAgICAgIF0sXG4gICAgICAgIHsgc2lnbmFsOiBvcHRzLnNpZ25hbCB9XG4gICAgICApO1xuXG4gICAgICBpZiAoZmlsZS5wYXRoLmVuZHNXaXRoKFwiLnNoXCIpKSB7XG4gICAgICAgIGF3YWl0IGV4ZWNEb2NrZXIoW1wiZXhlY1wiLCB0aGlzLnNhbmRib3hOYW1lLCBcImNobW9kXCIsIFwiK3hcIiwgZnVsbFBhdGhdLCB7XG4gICAgICAgICAgc2lnbmFsOiBvcHRzLnNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBnZXREb21haW4ob3B0czoge1xuICAgIHBvcnQ6IG51bWJlcjtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGBodHRwOi8vbG9jYWxob3N0OiR7b3B0cy5wb3J0fWA7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIGtpbGwob3B0czogeyBjb21tYW5kSWQ6IHN0cmluZzsgc2lnbmFsPzogQWJvcnRTaWduYWwgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNoaWxkID0gdGhpcy5wcm9jZXNzZXMuZ2V0KG9wdHMuY29tbWFuZElkKTtcbiAgICBpZiAoY2hpbGQpIHtcbiAgICAgIGNoaWxkLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzZXMuZGVsZXRlKG9wdHMuY29tbWFuZElkKTtcbiAgICB9XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIGdldFN0YXR1cygpOiBQcm9taXNlPFxuICAgIFwicGVuZGluZ1wiIHwgXCJydW5uaW5nXCIgfCBcInN0b3BwaW5nXCIgfCBcInN0b3BwZWRcIiB8IFwiZmFpbGVkXCJcbiAgPiB7XG4gICAgLy8gZG9ja2VyIHNhbmRib3ggQ0xJIGRvZXNuJ3QgZXhwb3NlIHN0YXR1cyBcdTIwMTQgYXNzdW1lIHJ1bm5pbmcgaWYgZW5zdXJlZFxuICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGVuc3VyZVNhbmRib3godGhpcy5zYW5kYm94TmFtZSk7XG4gIH1cblxuICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGV4ZWNEb2NrZXIoW1wic3RvcFwiLCB0aGlzLnNhbmRib3hOYW1lXSwgeyB0aW1lb3V0TXM6IDMwXzAwMCB9KTtcbiAgICBhY3RpdmVTYW5kYm94ZXMuZGVsZXRlKHRoaXMuc2FuZGJveE5hbWUpO1xuICAgIGVuc3VyZVByb21pc2VzLmRlbGV0ZSh0aGlzLnNhbmRib3hOYW1lKTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgc25hcHNob3QoKTogUHJvbWlzZTx7IHNuYXBzaG90SWQ6IHN0cmluZyB9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic25hcHNob3QgaXMgbm90IHN1cHBvcnRlZCBmb3IgZG9ja2VyIHNhbmRib3hlc1wiKTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgdXBkYXRlTmV0d29ya1BvbGljeSgpOiBQcm9taXNlPG5ldmVyPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJ1cGRhdGVOZXR3b3JrUG9saWN5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRvY2tlciBzYW5kYm94ZXNcIlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvY2tlclNhbmRib3goXG4gIGRlZmF1bHRzPzogUGFydGlhbDxpbXBvcnQoXCIuLi9hZGFwdGVyXCIpLlNhbmRib3hTZXR1cEZpZWxkcz4gJiB7XG4gICAgcnVuPzogKHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICBjb25maWc/OiBEb2NrZXJCaW5kaW5nQ29uZmlnO1xuICB9XG4pOiBTYW5kYm94QmluZGluZzxcImRvY2tlclwiLCBEb2NrZXJCaW5kaW5nQ29uZmlnLCBEb2NrZXJCaW5kaW5nTWV0YWRhdGE+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImRvY2tlclwiLFxuICAgIGRlZmF1bHRzLFxuICAgIGFzeW5jIGNyZWF0ZShvcHRzKSB7XG4gICAgICBjb25zdCBzYW5kYm94TmFtZSA9IGBhZ2VudC0ke3VsaWQoKX1gO1xuICAgICAgY29uc3QgY3dkID0gb3B0cy5zZXR1cD8uY29uZmlnPy5jd2Q7XG5cbiAgICAgIGF3YWl0IGVuc3VyZVNhbmRib3goc2FuZGJveE5hbWUpO1xuXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBEb2NrZXJTYW5kYm94SW5zdGFuY2Uoc2FuZGJveE5hbWUsIGN3ZCk7XG5cbiAgICAgIGlmIChvcHRzLnNldHVwPy5ydW4pIHtcbiAgICAgICAgYXdhaXQgb3B0cy5zZXR1cC5ydW4oaW5zdGFuY2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgbWV0YWRhdGE6IHsgc2FuZGJveE5hbWUgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgICBhc3luYyBjb25uZWN0KG9wdHMpIHtcbiAgICAgIHJldHVybiBuZXcgRG9ja2VyU2FuZGJveEluc3RhbmNlKG9wdHMubWV0YWRhdGEuc2FuZGJveE5hbWUpO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgdWxpZCB9IGZyb20gXCJ1bGlkXCI7XG5pbXBvcnQgdHlwZSB7IEV4ZWNSZXN1bHQsIFNhbmRib3hCaW5kaW5nLCBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuXG5leHBvcnQgdHlwZSBMb2NhbEJpbmRpbmdDb25maWcgPSB7XG4gIGN3ZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIExvY2FsQmluZGluZ01ldGFkYXRhID0ge1xuICBiYXNlUGF0aDogc3RyaW5nO1xuICBwaWQ6IG51bWJlcjtcbn07XG5cbmNsYXNzIExvY2FsU2FuZGJveEluc3RhbmNlIGltcGxlbWVudHMgU2FuZGJveEluc3RhbmNlIHtcbiAgcmVhZG9ubHkgY3dkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZVBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9jZXNzZXMgPSBuZXcgTWFwPFxuICAgIHN0cmluZyxcbiAgICBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIikuQ2hpbGRQcm9jZXNzXG4gID4oKTtcblxuICBjb25zdHJ1Y3RvcihiYXNlUGF0aDogc3RyaW5nKSB7XG4gICAgdGhpcy5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuICAgIHRoaXMuY3dkID0gYmFzZVBhdGg7XG4gIH1cblxuICBhc3luYyBleGVjKG9wdHM6IHtcbiAgICBjb21tYW5kOiBzdHJpbmc7XG4gICAgYXJncz86IHN0cmluZ1tdO1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHN1ZG8/OiBib29sZWFuO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxFeGVjUmVzdWx0PiB7XG4gICAgY29uc3QgeyBzcGF3biB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpO1xuICAgIGNvbnN0IHBhdGggPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG4gICAgY29uc3QgY29tbWFuZElkID0gYGNvbW1hbmRfJHt1bGlkKCl9YDtcblxuICAgIGNvbnN0IGZpbmFsQ21kID0gb3B0cy5zdWRvID8gXCJzdWRvXCIgOiBvcHRzLmNvbW1hbmQ7XG4gICAgY29uc3QgZmluYWxBcmdzID0gb3B0cy5zdWRvXG4gICAgICA/IFtvcHRzLmNvbW1hbmQsIC4uLihvcHRzLmFyZ3MgPz8gW10pXVxuICAgICAgOiAob3B0cy5hcmdzID8/IFtdKTtcblxuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oZmluYWxDbWQsIGZpbmFsQXJncywge1xuICAgICAgY3dkOiBvcHRzLmN3ZCA/IHBhdGgucmVzb2x2ZSh0aGlzLmJhc2VQYXRoLCBvcHRzLmN3ZCkgOiB0aGlzLmJhc2VQYXRoLFxuICAgICAgZW52OiBvcHRzLmVudiA/IHsgLi4ucHJvY2Vzcy5lbnYsIC4uLm9wdHMuZW52IH0gOiB1bmRlZmluZWQsXG4gICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9jZXNzZXMuc2V0KGNvbW1hbmRJZCwgY2hpbGQpO1xuXG4gICAgbGV0IHN0ZG91dCA9IFwiXCI7XG4gICAgbGV0IHN0ZGVyciA9IFwiXCI7XG4gICAgY29uc3QgbG9nUXVldWU6IHsgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjsgZGF0YTogc3RyaW5nIH1bXSA9IFtdO1xuICAgIGxldCBsb2dSZXNvbHZlOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgY2xvc2VkID0gZmFsc2U7XG5cbiAgICBjaGlsZC5zdGRvdXQub24oXCJkYXRhXCIsIChkYXRhOiBzdHJpbmcgfCBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IHN0ciA9IFN0cmluZyhkYXRhKTtcbiAgICAgIHN0ZG91dCArPSBzdHI7XG4gICAgICBsb2dRdWV1ZS5wdXNoKHsgc3RyZWFtOiBcInN0ZG91dFwiLCBkYXRhOiBzdHIgfSk7XG4gICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICB9KTtcblxuICAgIGNoaWxkLnN0ZGVyci5vbihcImRhdGFcIiwgKGRhdGE6IHN0cmluZyB8IEJ1ZmZlcikgPT4ge1xuICAgICAgY29uc3Qgc3RyID0gU3RyaW5nKGRhdGEpO1xuICAgICAgc3RkZXJyICs9IHN0cjtcbiAgICAgIGxvZ1F1ZXVlLnB1c2goeyBzdHJlYW06IFwic3RkZXJyXCIsIGRhdGE6IHN0ciB9KTtcbiAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFByb21pc2U8e1xuICAgICAgc3Rkb3V0OiBzdHJpbmc7XG4gICAgICBzdGRlcnI6IHN0cmluZztcbiAgICAgIGV4aXRDb2RlOiBudW1iZXI7XG4gICAgfT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VzLmRlbGV0ZShjb21tYW5kSWQpO1xuICAgICAgICBjbG9zZWQgPSB0cnVlO1xuICAgICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGQub24oXCJjbG9zZVwiLCAoY29kZTogbnVtYmVyIHwgbnVsbCkgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUoY29tbWFuZElkKTtcbiAgICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgICAgIHJlc29sdmUoeyBzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGU6IGNvZGUgPz8gMCB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24qIGxvZ3MoKTogQXN5bmNJdGVyYWJsZTx7XG4gICAgICBzdHJlYW06IFwic3Rkb3V0XCIgfCBcInN0ZGVyclwiO1xuICAgICAgZGF0YTogc3RyaW5nO1xuICAgIH0+IHtcbiAgICAgIHdoaWxlICghY2xvc2VkIHx8IGxvZ1F1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSBsb2dRdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB5aWVsZCBlbnRyeTtcbiAgICAgICAgfSBlbHNlIGlmICghY2xvc2VkKSB7XG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICAgICAgICAgIGxvZ1Jlc29sdmUgPSByO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxvZ1Jlc29sdmUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29tbWFuZElkLCBsb2dzLCByZXN1bHQgfTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRGaWxlKG9wdHM6IHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEJ1ZmZlciB8IG51bGw+IHtcbiAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLmJhc2VQYXRoLCBvcHRzLnBhdGgpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZnMucmVhZEZpbGUoZnVsbFBhdGgpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGlmIChcbiAgICAgICAgZSBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICAgIFwiY29kZVwiIGluIGUgJiZcbiAgICAgICAgKGUgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlID09PSBcIkVOT0VOVFwiXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHdyaXRlRmlsZXMob3B0czoge1xuICAgIGZpbGVzOiB7IHBhdGg6IHN0cmluZzsgY29udGVudDogc3RyaW5nIHwgQnVmZmVyIH1bXTtcbiAgICBkZXN0UGF0aDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZnMgPSBhd2FpdCBpbXBvcnQoXCJub2RlOmZzL3Byb21pc2VzXCIpO1xuICAgIGNvbnN0IHBhdGhNb2QgPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIG9wdHMuZmlsZXMpIHtcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aE1vZC5yZXNvbHZlKHRoaXMuYmFzZVBhdGgsIG9wdHMuZGVzdFBhdGgsIGZpbGUucGF0aCk7XG4gICAgICBhd2FpdCBmcy5ta2RpcihwYXRoTW9kLmRpcm5hbWUoZnVsbFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShmdWxsUGF0aCwgZmlsZS5jb250ZW50KTtcbiAgICAgIGlmIChmaWxlLnBhdGguZW5kc1dpdGgoXCIuc2hcIikpIHtcbiAgICAgICAgYXdhaXQgZnMuY2htb2QoZnVsbFBhdGgsIDBvNzU1KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIGdldERvbWFpbihvcHRzOiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtvcHRzLnBvcnR9YDtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMga2lsbChvcHRzOiB7IGNvbW1hbmRJZDogc3RyaW5nOyBzaWduYWw/OiBBYm9ydFNpZ25hbCB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2hpbGQgPSB0aGlzLnByb2Nlc3Nlcy5nZXQob3B0cy5jb21tYW5kSWQpO1xuICAgIGlmIChjaGlsZCkge1xuICAgICAgY2hpbGQua2lsbChcIlNJR1RFUk1cIik7XG4gICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUob3B0cy5jb21tYW5kSWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgZ2V0U3RhdHVzKCk6IFByb21pc2U8XCJydW5uaW5nXCI+IHtcbiAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBuby1vcDogbG9jYWwgc2FuZGJveCBpcyBhbHdheXMgc3RhcnRlZFxuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcInN0b3AgaXMgbm90IHN1cHBvcnRlZCBmb3IgbG9jYWwgc2FuZGJveGVzXCIpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBzbmFwc2hvdCgpOiBQcm9taXNlPHsgc25hcHNob3RJZDogc3RyaW5nIH0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJzbmFwc2hvdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBsb2NhbCBzYW5kYm94ZXNcIik7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIHVwZGF0ZU5ldHdvcmtQb2xpY3koKTogUHJvbWlzZTxuZXZlcj4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcInVwZGF0ZU5ldHdvcmtQb2xpY3kgaXMgbm90IHN1cHBvcnRlZCBmb3IgbG9jYWwgc2FuZGJveGVzXCIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NhbFNhbmRib3goXG4gIGRlZmF1bHRzPzogUGFydGlhbDxpbXBvcnQoXCIuLi9hZGFwdGVyXCIpLlNhbmRib3hTZXR1cEZpZWxkcz4gJiB7XG4gICAgcnVuPzogKHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICBjb25maWc/OiBMb2NhbEJpbmRpbmdDb25maWc7XG4gIH1cbik6IFNhbmRib3hCaW5kaW5nPFwibG9jYWxcIiwgTG9jYWxCaW5kaW5nQ29uZmlnLCBMb2NhbEJpbmRpbmdNZXRhZGF0YT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwibG9jYWxcIixcbiAgICBkZWZhdWx0cyxcbiAgICBhc3luYyBjcmVhdGUob3B0cykge1xuICAgICAgY29uc3QgYmFzZVBhdGggPSBvcHRzLnNldHVwLmNvbmZpZz8uY3dkID8/IHByb2Nlc3MuY3dkKCk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBMb2NhbFNhbmRib3hJbnN0YW5jZShiYXNlUGF0aCk7XG5cbiAgICAgIGlmIChvcHRzLnNldHVwPy5ydW4pIHtcbiAgICAgICAgYXdhaXQgb3B0cy5zZXR1cC5ydW4oaW5zdGFuY2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgbWV0YWRhdGE6IHsgYmFzZVBhdGgsIHBpZDogcHJvY2Vzcy5waWQgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgICBhc3luYyBjb25uZWN0KG9wdHMpIHtcbiAgICAgIGNvbnN0IGJhc2VQYXRoID0gb3B0cy5tZXRhZGF0YS5iYXNlUGF0aDtcbiAgICAgIHJldHVybiBuZXcgTG9jYWxTYW5kYm94SW5zdGFuY2UoYmFzZVBhdGgpO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgc3RhcnQgYXMgc3RhcnRXb3JrZmxvdyB9IGZyb20gXCJ3b3JrZmxvdy9hcGlcIjtcbmltcG9ydCB0eXBlIHsgU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9zdG9yYWdlXCI7XG5pbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gXCIuLi8uLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB0eXBlIHsgRXhlY1Jlc3VsdCwgU2FuZGJveEJpbmRpbmcsIFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IExpZmVjeWNsZUNvbmZpZyB9IGZyb20gXCIuL3ZlcmNlbC1saWZlY3ljbGUvc3RlcHNcIjtcbmltcG9ydCB7IHNhbmRib3hMaWZlY3ljbGVXb3JrZmxvdyB9IGZyb20gXCIuL3ZlcmNlbC1saWZlY3ljbGUvd29ya2Zsb3dcIjtcblxuYXN5bmMgZnVuY3Rpb24gbG9hZFNhbmRib3hTREsoKSB7XG4gIHJldHVybiAoYXdhaXQgaW1wb3J0KFwiQHZlcmNlbC9zYW5kYm94XCIpKS5TYW5kYm94O1xufVxuXG5jb25zdCBNQVhfVElNRU9VVF9NUyA9IDUgKiA2MCAqIDYwICogMTAwMDsgLy8gNSBob3Vyc1xuY29uc3QgSE9NRV9ESVIgPSBcIi9ob21lL3ZlcmNlbC1zYW5kYm94XCI7XG5jb25zdCBERUZBVUxUX1ZDUFVTID0gMjtcblxuZXhwb3J0IHR5cGUgVmVyY2VsQmluZGluZ0NvbmZpZyA9IHtcbiAgY3dkPzogc3RyaW5nO1xuICByZXNvdXJjZXM/OiB7IHZjcHVzOiBudW1iZXIgfTtcbiAgcG9ydHM/OiBudW1iZXJbXTtcbiAgbmV0d29ya1BvbGljeT86IGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKS5OZXR3b3JrUG9saWN5O1xuICBzbmFwc2hvdElkPzogc3RyaW5nO1xuICBsaWZlY3ljbGU/OiBMaWZlY3ljbGVDb25maWc7XG59O1xuXG5leHBvcnQgdHlwZSBWZXJjZWxCaW5kaW5nTWV0YWRhdGEgPSB7XG4gIHNhbmRib3hJZDogc3RyaW5nO1xufTtcblxudHlwZSBDcmVhdGVTYW5kYm94T3B0cyA9IHtcbiAgcmVzb3VyY2VzOiB7IHZjcHVzOiBudW1iZXIgfTtcbiAgcG9ydHM/OiBudW1iZXJbXTtcbiAgbmV0d29ya1BvbGljeT86IGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKS5OZXR3b3JrUG9saWN5O1xuICBzbmFwc2hvdElkPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gaXNTYW5kYm94R29uZUVycm9yKGU6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCEoZSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1cyA9XG4gICAgKGUgYXMgeyByZXNwb25zZT86IHsgc3RhdHVzPzogbnVtYmVyIH0gfSkucmVzcG9uc2U/LnN0YXR1cyA/P1xuICAgIChlIGFzIHsgY2F1c2U/OiB7IHJlc3BvbnNlPzogeyBzdGF0dXM/OiBudW1iZXIgfSB9IH0pLmNhdXNlPy5yZXNwb25zZVxuICAgICAgPy5zdGF0dXM7XG5cbiAgaWYgKHN0YXR1cyA9PT0gNDEwIHx8IHN0YXR1cyA9PT0gNDIyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBtc2cgPSBlLm1lc3NhZ2UgfHwgU3RyaW5nKGUpO1xuICByZXR1cm4gKFxuICAgIG1zZy5pbmNsdWRlcyhcIkV4cGVjdGVkIGEgc3RyZWFtIG9mIGNvbW1hbmQgZGF0YVwiKSB8fFxuICAgIG1zZy5pbmNsdWRlcyhcIkV4cGVjdGVkIGEgc3RyZWFtIG9mIGxvZ3NcIilcbiAgKTtcbn1cblxuY29uc3QgZ2V0VGVzdENyZWRlbnRpYWxzID0gKCkgPT5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiXG4gICAgPyB7XG4gICAgICAgIHRva2VuOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9UT0tFTixcbiAgICAgICAgdGVhbUlkOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9URUFNX0lELFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2Nlc3MuZW52LlRFU1RfVkVSQ0VMX1BST0pFQ1RfSUQsXG4gICAgICB9XG4gICAgOiB7fTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlU2RrKHtcbiAgcmVzb3VyY2VzLFxuICBwb3J0cyxcbiAgbmV0d29ya1BvbGljeSxcbiAgc25hcHNob3RJZCxcbn06IENyZWF0ZVNhbmRib3hPcHRzKSB7XG4gIGNvbnN0IFNhbmRib3hTREsgPSBhd2FpdCBsb2FkU2FuZGJveFNESygpO1xuICBjb25zdCBiYXNlID0ge1xuICAgIHJlc291cmNlcyxcbiAgICB0aW1lb3V0OiBNQVhfVElNRU9VVF9NUyxcbiAgICAuLi4ocG9ydHMgPyB7IHBvcnRzIH0gOiB7fSksXG4gICAgLi4uKG5ldHdvcmtQb2xpY3kgPyB7IG5ldHdvcmtQb2xpY3kgfSA6IHt9KSxcbiAgICAuLi5nZXRUZXN0Q3JlZGVudGlhbHMoKSxcbiAgfTtcblxuICBpZiAoc25hcHNob3RJZCkge1xuICAgIHJldHVybiBTYW5kYm94U0RLLmNyZWF0ZSh7XG4gICAgICAuLi5iYXNlLFxuICAgICAgc291cmNlOiB7IHR5cGU6IFwic25hcHNob3RcIiBhcyBjb25zdCwgc25hcHNob3RJZCB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIFNhbmRib3hTREsuY3JlYXRlKGJhc2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVTZXR1cFNuYXBzaG90KHtcbiAgc2FuZGJveE9wdHMsXG4gIHJ1bixcbiAgc3RvcmFnZSxcbiAgc25hcHNob3RWZXJzaW9uLFxuICBsb2csXG59OiB7XG4gIHNhbmRib3hPcHRzOiBDcmVhdGVTYW5kYm94T3B0cztcbiAgcnVuOiAoc2FuZGJveDogU2FuZGJveEluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBzdG9yYWdlOiBTdG9yYWdlO1xuICBzbmFwc2hvdFZlcnNpb246IHN0cmluZztcbiAgbG9nOiBMb2dnZXI7XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCB0ZW1wU2RrOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZVNkaz4+IHwgbnVsbCA9IG51bGw7XG4gIHRyeSB7XG4gICAgdGVtcFNkayA9IGF3YWl0IGNyZWF0ZVNkayhzYW5kYm94T3B0cyk7XG4gICAgY29uc3QgdGVtcEluc3RhbmNlID0gbmV3IFZlcmNlbFNhbmRib3hJbnN0YW5jZSh0ZW1wU2RrKTtcbiAgICBhd2FpdCBydW4odGVtcEluc3RhbmNlKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRlbXBTZGsuc25hcHNob3QoKTtcbiAgICBhd2FpdCBzdG9yYWdlLnNldHVwLnNldChzbmFwc2hvdFZlcnNpb24sIHtcbiAgICAgIHZlcnNpb246IHNuYXBzaG90VmVyc2lvbixcbiAgICAgIHNuYXBzaG90SWQ6IHNuYXBzaG90LnNuYXBzaG90SWQsXG4gICAgICBjcmVhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICBsYXN0VXNlZEF0OiBudWxsLFxuICAgIH0pO1xuICAgIGF3YWl0IHRlbXBTZGsuc3RvcCgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nLmVycm9yKFwiZmFpbGVkIHRvIGNyZWF0ZSBzZXR1cCBzbmFwc2hvdFwiLCB7XG4gICAgICBzbmFwc2hvdFZlcnNpb24sXG4gICAgICBjYXVzZTogZXJyb3IsXG4gICAgfSk7XG4gICAgaWYgKHRlbXBTZGspIHtcbiAgICAgIGF3YWl0IHRlbXBTZGsuc3RvcCgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFZlcmNlbFNhbmRib3hJbnN0YW5jZSBpbXBsZW1lbnRzIFNhbmRib3hJbnN0YW5jZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2RrOiBpbXBvcnQoXCJAdmVyY2VsL3NhbmRib3hcIikuU2FuZGJveDtcbiAgcmVhZG9ubHkgY3dkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2RrOiBpbXBvcnQoXCJAdmVyY2VsL3NhbmRib3hcIikuU2FuZGJveCwgY3dkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5zZGsgPSBzZGs7XG4gICAgdGhpcy5jd2QgPSBjd2QgPz8gSE9NRV9ESVI7XG4gIH1cblxuICBhc3luYyBleGVjKHtcbiAgICBjb21tYW5kLFxuICAgIGFyZ3MsXG4gICAgY3dkLFxuICAgIGVudixcbiAgICBzdWRvLFxuICAgIHNpZ25hbCxcbiAgfToge1xuICAgIGNvbW1hbmQ6IHN0cmluZztcbiAgICBhcmdzPzogc3RyaW5nW107XG4gICAgY3dkPzogc3RyaW5nO1xuICAgIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgc3Vkbz86IGJvb2xlYW47XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEV4ZWNSZXN1bHQ+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB0aGlzLnNkay5ydW5Db21tYW5kKHtcbiAgICAgIGNtZDogY29tbWFuZCxcbiAgICAgIGFyZ3MsXG4gICAgICBjd2Q6IGN3ZCA/PyB0aGlzLmN3ZCxcbiAgICAgIGVudixcbiAgICAgIHN1ZG8sXG4gICAgICBzaWduYWwsXG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuICAgIGNvbnN0IGxvZ0J1ZmZlcjogeyBzdHJlYW06IFwic3Rkb3V0XCIgfCBcInN0ZGVyclwiOyBkYXRhOiBzdHJpbmcgfVtdID0gW107XG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICByZXNvbHZlOiBudWxsIGFzICgoKSA9PiB2b2lkKSB8IG51bGwsXG4gICAgICBjb25zdW1lZDogZmFsc2UsXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnN1bWVMb2dzID0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2Ygb3V0cHV0LmxvZ3MoKSkge1xuICAgICAgICAgIGlmIChlbnRyeS5zdHJlYW0gPT09IFwic3Rkb3V0XCIpIHtcbiAgICAgICAgICAgIHN0ZG91dCArPSBlbnRyeS5kYXRhO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGRlcnIgKz0gZW50cnkuZGF0YTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2dCdWZmZXIucHVzaChlbnRyeSk7XG4gICAgICAgICAgc3RhdGUucmVzb2x2ZT8uKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTYW5kYm94IG1heSBoYXZlIGJlZW4gc3RvcHBlZCBcdTIwMTQgbG9ncyBlbmRwb2ludCByZXR1cm5zIDQyMlxuICAgICAgfVxuICAgICAgc3RhdGUuY29uc3VtZWQgPSB0cnVlO1xuICAgICAgc3RhdGUucmVzb2x2ZT8uKCk7XG4gICAgfSkoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBsb2dzKCk6IEFzeW5jSXRlcmFibGU8e1xuICAgICAgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjtcbiAgICAgIGRhdGE6IHN0cmluZztcbiAgICB9PiB7XG4gICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgd2hpbGUgKCFzdGF0ZS5jb25zdW1lZCB8fCBpbmRleCA8IGxvZ0J1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGluZGV4IDwgbG9nQnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgIHlpZWxkIGxvZ0J1ZmZlcltpbmRleCsrXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgICAgICAgc3RhdGUucmVzb2x2ZSA9IHI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc3RhdGUucmVzb2x2ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjb25zdW1lTG9ncy50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpbmlzaGVkID0gYXdhaXQgb3V0cHV0LndhaXQoKTtcbiAgICAgICAgcmV0dXJuIHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiBmaW5pc2hlZC5leGl0Q29kZSB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaXNTYW5kYm94R29uZUVycm9yKGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiAxIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7IGNvbW1hbmRJZDogb3V0cHV0LmNtZElkLCBsb2dzLCByZXN1bHQgfTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRGaWxlKHtcbiAgICBwYXRoOiBmaWxlUGF0aCxcbiAgfToge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8QnVmZmVyIHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZGsucmVhZEZpbGVUb0J1ZmZlcih7IHBhdGg6IGZpbGVQYXRoLCBjd2Q6IHRoaXMuY3dkIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgd3JpdGVGaWxlcyh7XG4gICAgZmlsZXMsXG4gICAgZGVzdFBhdGgsXG4gIH06IHtcbiAgICBmaWxlczogeyBwYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB8IEJ1ZmZlciB9W107XG4gICAgZGVzdFBhdGg6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICAgIGNvbnN0IG5hdGl2ZUZpbGVzID0gZmlsZXMubWFwKChmaWxlKSA9PiB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucG9zaXguam9pbihkZXN0UGF0aCwgZmlsZS5wYXRoKTtcbiAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IHBhdGgucG9zaXguaXNBYnNvbHV0ZShmaWxlUGF0aClcbiAgICAgICAgPyBmaWxlUGF0aFxuICAgICAgICA6IHBhdGgucG9zaXguam9pbih0aGlzLmN3ZCwgZmlsZVBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogYWJzb2x1dGVQYXRoLFxuICAgICAgICBjb250ZW50OlxuICAgICAgICAgIHR5cGVvZiBmaWxlLmNvbnRlbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgID8gQnVmZmVyLmZyb20oZmlsZS5jb250ZW50KVxuICAgICAgICAgICAgOiBmaWxlLmNvbnRlbnQsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5zZGsud3JpdGVGaWxlcyhuYXRpdmVGaWxlcyk7XG5cbiAgICBjb25zdCBzaGVsbFNjcmlwdHMgPSBuYXRpdmVGaWxlcy5maWx0ZXIoKGYpID0+IGYucGF0aC5lbmRzV2l0aChcIi5zaFwiKSk7XG4gICAgaWYgKHNoZWxsU2NyaXB0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWMoe1xuICAgICAgICBjb21tYW5kOiBcImNobW9kXCIsXG4gICAgICAgIGFyZ3M6IFtcIit4XCIsIC4uLnNoZWxsU2NyaXB0cy5tYXAoKGYpID0+IGYucGF0aCldLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCByZXN1bHQucmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IHN5bmNocm9ub3VzIFNESyBjYWxsXG4gIGFzeW5jIGdldERvbWFpbih7XG4gICAgcG9ydCxcbiAgfToge1xuICAgIHBvcnQ6IG51bWJlcjtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc2RrLmRvbWFpbihwb3J0KTtcbiAgfVxuXG4gIGFzeW5jIGtpbGwoe1xuICAgIGNvbW1hbmRJZCxcbiAgfToge1xuICAgIGNvbW1hbmRJZDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY21kID0gYXdhaXQgdGhpcy5zZGsuZ2V0Q29tbWFuZChjb21tYW5kSWQpO1xuICAgIGF3YWl0IGNtZC5raWxsKCk7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiBzeW5jaHJvbm91cyBTREsgZ2V0dGVyXG4gIGFzeW5jIGdldFN0YXR1cygpOiBQcm9taXNlPFxuICAgIFwicGVuZGluZ1wiIHwgXCJydW5uaW5nXCIgfCBcInN0b3BwaW5nXCIgfCBcInN0b3BwZWRcIiB8IFwiZmFpbGVkXCJcbiAgPiB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5zZGsuc3RhdHVzO1xuICAgIC8vIE1hcCBTREstb25seSBzdGF0dXNlcyB0byBvdXIgaW50ZXJmYWNlJ3MgdW5pb25cbiAgICBpZiAoc3RhdHVzID09PSBcInNuYXBzaG90dGluZ1wiKSB7XG4gICAgICByZXR1cm4gXCJzdG9wcGluZ1wiO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID09PSBcImFib3J0ZWRcIikge1xuICAgICAgcmV0dXJuIFwiZmFpbGVkXCI7XG4gICAgfVxuICAgIHJldHVybiBzdGF0dXM7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUaGUgVmVyY2VsIFNESyBkb2Vzbid0IGhhdmUgYSByZXN1bWUgbWV0aG9kLlxuICAgIC8vIFJ1biBhIG5vLW9wIGNvbW1hbmQgdG8gdmVyaWZ5IHRoZSBzYW5kYm94IGlzIHJlYWNoYWJsZS5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWMoeyBjb21tYW5kOiBcInRydWVcIiB9KTtcbiAgICBhd2FpdCByZXN1bHQucmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNkay5zdG9wKCk7XG4gIH1cblxuICBhc3luYyBzbmFwc2hvdCgpOiBQcm9taXNlPHsgc25hcHNob3RJZDogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBzbmFwID0gYXdhaXQgdGhpcy5zZGsuc25hcHNob3QoKTtcbiAgICByZXR1cm4geyBzbmFwc2hvdElkOiBzbmFwLnNuYXBzaG90SWQgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZU5ldHdvcmtQb2xpY3koe1xuICAgIHBvbGljeSxcbiAgfToge1xuICAgIHBvbGljeTogaW1wb3J0KFwiQHZlcmNlbC9zYW5kYm94XCIpLk5ldHdvcmtQb2xpY3k7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKS5OZXR3b3JrUG9saWN5PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2RrLnVwZGF0ZU5ldHdvcmtQb2xpY3kocG9saWN5KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmVyY2VsU2FuZGJveChcbiAgZGVmYXVsdHM/OiBQYXJ0aWFsPGltcG9ydChcIi4uL2FkYXB0ZXJcIikuU2FuZGJveFNldHVwRmllbGRzPiAmIHtcbiAgICBydW4/OiAoc2FuZGJveDogU2FuZGJveEluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIGNvbmZpZz86IFZlcmNlbEJpbmRpbmdDb25maWc7XG4gIH1cbik6IFNhbmRib3hCaW5kaW5nPFwidmVyY2VsXCIsIFZlcmNlbEJpbmRpbmdDb25maWcsIFZlcmNlbEJpbmRpbmdNZXRhZGF0YT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwidmVyY2VsXCIsXG4gICAgZGVmYXVsdHMsXG4gICAgYXN5bmMgY3JlYXRlKHsgYWdlbnQsIHNldHVwLCByZWNvcmQsIHNpZ25hbDogX3NpZ25hbCwgbG9nIH0pIHtcbiAgICAgIGNvbnN0IHN0b3JhZ2UgPSBhZ2VudC5zdG9yYWdlO1xuICAgICAgY29uc3QgY29uZmlnID0gc2V0dXAuY29uZmlnID8/IHt9O1xuICAgICAgY29uc3QgY3dkID0gY29uZmlnLmN3ZDtcbiAgICAgIGNvbnN0IHJlc291cmNlcyA9IGNvbmZpZy5yZXNvdXJjZXMgPz8geyB2Y3B1czogREVGQVVMVF9WQ1BVUyB9O1xuICAgICAgY29uc3QgcG9ydHMgPSBjb25maWcucG9ydHM7XG4gICAgICBjb25zdCBuZXR3b3JrUG9saWN5ID1cbiAgICAgICAgY29uZmlnLm5ldHdvcmtQb2xpY3kgPz8gc2V0dXAubmV0d29ya1BvbGljeSA/PyB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IHNhbmRib3hPcHRzOiBDcmVhdGVTYW5kYm94T3B0cyA9IHtcbiAgICAgICAgcmVzb3VyY2VzLFxuICAgICAgICBwb3J0cyxcbiAgICAgICAgbmV0d29ya1BvbGljeSxcbiAgICAgICAgc25hcHNob3RJZDogY29uZmlnLnNuYXBzaG90SWQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBfc3RhcnRMaWZlY3ljbGUgPSAodmVyY2VsU2FuZGJveElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCFyZWNvcmQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRXb3JrZmxvdyhzYW5kYm94TGlmZWN5Y2xlV29ya2Zsb3csIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnB1dDoge1xuICAgICAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICAgICAgc2FuZGJveElkOiByZWNvcmQuaWQsXG4gICAgICAgICAgICAgIHZlcmNlbFNhbmRib3hJZCxcbiAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcubGlmZWN5Y2xlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgIGxvZy5lcnJvcihcImZhaWxlZCB0byBzdGFydCBsaWZlY3ljbGUgd29ya2Zsb3dcIiwgeyBjYXVzZTogZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBpZiAoc2V0dXAudmVyc2lvbikge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHN0b3JhZ2Uuc2V0dXAuZ2V0KHNldHVwLnZlcnNpb24pO1xuICAgICAgICBpZiAoZXhpc3Rpbmc/LnNuYXBzaG90SWQpIHtcbiAgICAgICAgICBjb25zdCBzZGsgPSBhd2FpdCBjcmVhdGVTZGsoe1xuICAgICAgICAgICAgLi4uc2FuZGJveE9wdHMsXG4gICAgICAgICAgICBzbmFwc2hvdElkOiBleGlzdGluZy5zbmFwc2hvdElkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFZlcmNlbFNhbmRib3hJbnN0YW5jZShzZGssIGN3ZCk7XG5cbiAgICAgICAgICBzdG9yYWdlLnNldHVwXG4gICAgICAgICAgICAuc2V0KHNldHVwLnZlcnNpb24sIHtcbiAgICAgICAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgICAgICAgIHZlcnNpb246IHNldHVwLnZlcnNpb24sXG4gICAgICAgICAgICAgIGxhc3RVc2VkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICBtZXRhZGF0YTogeyBzYW5kYm94SWQ6IHNkay5zYW5kYm94SWQgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzZXR1cC5ydW4pIHtcbiAgICAgICAgaWYgKCFzZXR1cC52ZXJzaW9uKSB7XG4gICAgICAgICAgbG9nLmVycm9yKFwic2V0dXAucnVuIHByb3ZpZGVkIHdpdGhvdXQgc2V0dXAudmVyc2lvblwiLCB7IHNldHVwIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHVwLnJ1biBwcm92aWRlZCB3aXRob3V0IHNldHVwLnZlcnNpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlU2V0dXBTbmFwc2hvdCh7XG4gICAgICAgICAgc2FuZGJveE9wdHMsXG4gICAgICAgICAgcnVuOiBzZXR1cC5ydW4sXG4gICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICBzbmFwc2hvdFZlcnNpb246IHNldHVwLnZlcnNpb24sXG4gICAgICAgICAgbG9nLFxuICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICBsb2cuZXJyb3IoXCJiYWNrZ3JvdW5kIHNldHVwIHNuYXBzaG90IGZhaWxlZFwiLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc2RrID0gYXdhaXQgY3JlYXRlU2RrKHNhbmRib3hPcHRzKTtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgVmVyY2VsU2FuZGJveEluc3RhbmNlKHNkaywgY3dkKTtcbiAgICAgICAgYXdhaXQgc2V0dXAucnVuKGluc3RhbmNlKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7IHNhbmRib3hJZDogc2RrLnNhbmRib3hJZCB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZGsgPSBhd2FpdCBjcmVhdGVTZGsoc2FuZGJveE9wdHMpO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgVmVyY2VsU2FuZGJveEluc3RhbmNlKHNkaywgY3dkKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIG1ldGFkYXRhOiB7IHNhbmRib3hJZDogc2RrLnNhbmRib3hJZCB9LFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY29ubmVjdCh7IG1ldGFkYXRhIH0pIHtcbiAgICAgIGNvbnN0IFNhbmRib3hTREsgPSBhd2FpdCBsb2FkU2FuZGJveFNESygpO1xuICAgICAgY29uc3Qgc2RrID0gYXdhaXQgU2FuZGJveFNESy5nZXQoe1xuICAgICAgICBzYW5kYm94SWQ6IG1ldGFkYXRhLnNhbmRib3hJZCxcbiAgICAgICAgLi4uZ2V0VGVzdENyZWRlbnRpYWxzKCksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgVmVyY2VsU2FuZGJveEluc3RhbmNlKHNkayk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBzbGVlcCB9IGZyb20gXCJ3b3JrZmxvd1wiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2xvZ2dlclwiO1xuaW1wb3J0IHsgY2hlY2tBbmRTbmFwc2hvdFN0ZXAsIHR5cGUgTGlmZWN5Y2xlSW5wdXQgfSBmcm9tIFwiLi9zdGVwc1wiO1xuXG5leHBvcnQgdHlwZSB7IExpZmVjeWNsZUlucHV0IH07XG5cbmNvbnN0IERFRkFVTFRfUE9MTF9NUyA9IDIgKiA2MCAqIDEwMDA7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYW5kYm94TGlmZWN5Y2xlV29ya2Zsb3coe1xuICBpbnB1dCxcbn06IHtcbiAgaW5wdXQ6IExpZmVjeWNsZUlucHV0O1xufSkge1xuICBcInVzZSB3b3JrZmxvd1wiO1xuXG4gIGxldCBuZXh0UG9sbE1zID0gaW5wdXQuY29uZmlnPy5wb2xsSW50ZXJ2YWxNcyA/PyBERUZBVUxUX1BPTExfTVM7XG4gIGNvbnN0IGxvZyA9IGNyZWF0ZUxvZ2dlcih7XG4gICAgY29uZmlnOiB7IC4uLmlucHV0LmFnZW50Lm9wdGlvbnMubG9nZ2luZywgbmFtZTogaW5wdXQuYWdlbnQubmFtZSB9LFxuICAgIHN1YnN5c3RlbTogXCJzYW5kYm94OmxpZmVjeWNsZVwiLFxuICAgIGNvbnRleHQ6IHsgc2FuZGJveElkOiBpbnB1dC5zYW5kYm94SWQgfSxcbiAgfSk7XG5cbiAgbG9nLmluZm8oXCJsaWZlY3ljbGUgd29ya2Zsb3cgc3RhcnRlZFwiLCB7XG4gICAgc2FuZGJveElkOiBpbnB1dC5zYW5kYm94SWQsXG4gICAgdmVyY2VsU2FuZGJveElkOiBpbnB1dC52ZXJjZWxTYW5kYm94SWQsXG4gICAgcG9sbE1zOiBuZXh0UG9sbE1zLFxuICB9KTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGF3YWl0IHNsZWVwKG5leHRQb2xsTXMpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hlY2tBbmRTbmFwc2hvdFN0ZXAoaW5wdXQpO1xuXG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBsb2cuZXJyb3IoXCJsaWZlY3ljbGUgc3RlcCBmYWlsZWRcIiwge1xuICAgICAgICBzYW5kYm94SWQ6IGlucHV0LnNhbmRib3hJZCxcbiAgICAgICAgZXJyb3I6IHJlc3VsdC5tZXNzYWdlLFxuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0LmFjdGlvbiA9PT0gXCJleGl0XCIpIHtcbiAgICAgIGxvZy5pbmZvKFwibGlmZWN5Y2xlIHdvcmtmbG93IGV4aXRpbmdcIiwge1xuICAgICAgICBzYW5kYm94SWQ6IGlucHV0LnNhbmRib3hJZCxcbiAgICAgICAgcmVhc29uOiByZXN1bHQucmVhc29uLFxuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBuZXh0UG9sbE1zID0gcmVzdWx0Lm5leHRQb2xsTXM7XG4gIH1cbn1cbiIsICJleHBvcnQgdHlwZSBMb2dMZXZlbCA9IFwiaW5mb1wiIHwgXCJ3YXJuXCIgfCBcImVycm9yXCIgfCBcInNpbGVudFwiO1xuXG5jb25zdCBMT0dfTEVWRUxfUFJJT1JJVFk6IFJlY29yZDxMb2dMZXZlbCwgbnVtYmVyPiA9IHtcbiAgaW5mbzogMCxcbiAgd2FybjogMSxcbiAgZXJyb3I6IDIsXG4gIHNpbGVudDogMyxcbn07XG5cbmV4cG9ydCB0eXBlIExvZ0NvbnRleHQgPSB7XG4gIHNlc3Npb25JZD86IHN0cmluZztcbiAgbWVzc2FnZUlkPzogc3RyaW5nO1xuICBzYW5kYm94SWQ/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBMb2dnaW5nQ29uZmlnID0ge1xuICBsZXZlbD86IExvZ0xldmVsO1xuICAvKipcbiAgICogVG9wLWxldmVsIGxhYmVsIGZvciBhbGwgbG9nIGxpbmVzLlxuICAgKiBAZGVmYXVsdCBcImFnZW50XCJcbiAgICogQGV4YW1wbGUgXCJteS1hcHBcIiBcdTIxOTIgW215LWFwcDpkZWZhdWx0OndvcmtmbG93XVxuICAgKi9cbiAgcHJlZml4Pzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gZ2V0TGV2ZWwoY29uZmlnOiBMb2dnaW5nQ29uZmlnKTogTG9nTGV2ZWwge1xuICByZXR1cm4gY29uZmlnLmxldmVsID8/IFwid2FyblwiO1xufVxuXG5mdW5jdGlvbiBnZXRQcmVmaXgoY29uZmlnOiBMb2dnaW5nQ29uZmlnKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNvbmZpZy5wcmVmaXggPz8gXCJhZ2VudFwiO1xufVxuXG5mdW5jdGlvbiBzaG91bGRMb2coY29uZmlnOiBMb2dnaW5nQ29uZmlnLCBsZXZlbDogTG9nTGV2ZWwpOiBib29sZWFuIHtcbiAgcmV0dXJuIExPR19MRVZFTF9QUklPUklUWVtsZXZlbF0gPj0gTE9HX0xFVkVMX1BSSU9SSVRZW2dldExldmVsKGNvbmZpZyldO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRUYWcoY29uZmlnOiBMb2dnaW5nQ29uZmlnLCBzdWJzeXN0ZW06IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgWyR7Z2V0UHJlZml4KGNvbmZpZyl9OiR7Y29uZmlnLm5hbWV9OiR7c3Vic3lzdGVtfV1gO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXRhKFxuICBjb250ZXh0OiBMb2dDb250ZXh0LFxuICBleHRyYT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1lcmdlZCA9IHsgLi4uY29udGV4dCwgLi4uZXh0cmEgfTtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKG1lcmdlZCkuZmlsdGVyKFxuICAgIChbLCB2XSkgPT4gdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGxcbiAgKTtcbiAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpO1xufVxuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIHtcbiAgcmVhZG9ubHkgc3Vic3lzdGVtOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBMb2dnaW5nQ29uZmlnO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQ6IExvZ0NvbnRleHQ7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIHN1YnN5c3RlbSxcbiAgICBjb25maWcsXG4gICAgY29udGV4dCxcbiAgfToge1xuICAgIHN1YnN5c3RlbTogc3RyaW5nO1xuICAgIGNvbmZpZzogTG9nZ2luZ0NvbmZpZztcbiAgICBjb250ZXh0PzogTG9nQ29udGV4dDtcbiAgfSkge1xuICAgIHRoaXMuc3Vic3lzdGVtID0gc3Vic3lzdGVtO1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQgPz8ge307XG4gIH1cblxuICBjaGlsZCh7XG4gICAgc3Vic3lzdGVtLFxuICAgIGNvbnRleHQsXG4gIH06IHtcbiAgICBzdWJzeXN0ZW0/OiBzdHJpbmc7XG4gICAgY29udGV4dD86IExvZ0NvbnRleHQ7XG4gIH0pOiBMb2dnZXIge1xuICAgIHJldHVybiBuZXcgTG9nZ2VyKHtcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICBzdWJzeXN0ZW06IHN1YnN5c3RlbSA/IGAke3RoaXMuc3Vic3lzdGVtfToke3N1YnN5c3RlbX1gIDogdGhpcy5zdWJzeXN0ZW0sXG4gICAgICBjb250ZXh0OiB7IC4uLnRoaXMuY29udGV4dCwgLi4uY29udGV4dCB9LFxuICAgIH0pO1xuICB9XG5cbiAgd2l0aENvbnRleHQoY29udGV4dDogTG9nQ29udGV4dCk6IExvZ2dlciB7XG4gICAgcmV0dXJuIG5ldyBMb2dnZXIoe1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIHN1YnN5c3RlbTogdGhpcy5zdWJzeXN0ZW0sXG4gICAgICBjb250ZXh0OiB7IC4uLnRoaXMuY29udGV4dCwgLi4uY29udGV4dCB9LFxuICAgIH0pO1xuICB9XG5cbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIGlmICghc2hvdWxkTG9nKHRoaXMuY29uZmlnLCBcImluZm9cIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZCA9IGZvcm1hdERhdGEodGhpcy5jb250ZXh0LCBkYXRhKTtcbiAgICBpZiAoZCkge1xuICAgICAgY29uc29sZS5pbmZvKGZvcm1hdFRhZyh0aGlzLmNvbmZpZywgdGhpcy5zdWJzeXN0ZW0pLCBtZXNzYWdlLCBkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5pbmZvKGZvcm1hdFRhZyh0aGlzLmNvbmZpZywgdGhpcy5zdWJzeXN0ZW0pLCBtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKCFzaG91bGRMb2codGhpcy5jb25maWcsIFwid2FyblwiKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkID0gZm9ybWF0RGF0YSh0aGlzLmNvbnRleHQsIGRhdGEpO1xuICAgIGlmIChkKSB7XG4gICAgICBjb25zb2xlLndhcm4oZm9ybWF0VGFnKHRoaXMuY29uZmlnLCB0aGlzLnN1YnN5c3RlbSksIG1lc3NhZ2UsIGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oZm9ybWF0VGFnKHRoaXMuY29uZmlnLCB0aGlzLnN1YnN5c3RlbSksIG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKCFzaG91bGRMb2codGhpcy5jb25maWcsIFwiZXJyb3JcIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZCA9IGZvcm1hdERhdGEodGhpcy5jb250ZXh0LCBkYXRhKTtcbiAgICBpZiAoZCkge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRUYWcodGhpcy5jb25maWcsIHRoaXMuc3Vic3lzdGVtKSwgbWVzc2FnZSwgZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0VGFnKHRoaXMuY29uZmlnLCB0aGlzLnN1YnN5c3RlbSksIG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsIGxvZ3MgdGhlIGVsYXBzZWQgdGltZSBhdCBpbmZvIGxldmVsLlxuICAgKiBQYXNzIGBsb2dPblN0YXJ0OiB0cnVlYCB0byBhbHNvIGxvZyB3aGVuIHRoZSB0aW1lciBiZWdpbnMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IGRvbmUgPSBsb2cudGltZShcInNhbmRib3ggc2V0dXBcIiwgeyBzYW5kYm94SWQgfSwgeyBsb2dPblN0YXJ0OiB0cnVlIH0pO1xuICAgKiBhd2FpdCBzZXR1cCgpO1xuICAgKiBkb25lKCk7IC8vIHN0YXJ0OiBbYWdlbnQ6ZGVmYXVsdDpzYW5kYm94XSBzYW5kYm94IHNldHVwIHsgc2FuZGJveElkOiAnLi4uJyB9XG4gICAqICAgICAgICAgLy8gZW5kOiAgIFthZ2VudDpkZWZhdWx0OnNhbmRib3hdIHNhbmRib3ggc2V0dXAgeyBzYW5kYm94SWQ6ICcuLi4nLCBkdXJhdGlvbk1zOiAxMjMgfVxuICAgKi9cbiAgdGltZShcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIG9wdHM/OiB7IGxvZ09uU3RhcnQ/OiBib29sZWFuIH1cbiAgKTogKGVuZERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdm9pZCB7XG4gICAgaWYgKG9wdHM/LmxvZ09uU3RhcnQpIHtcbiAgICAgIHRoaXMuaW5mbyhgW3N0YXJ0XSAke21lc3NhZ2V9YCwgZGF0YSk7XG4gICAgfVxuICAgIGNvbnN0IHQwID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4gKGVuZERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgdGhpcy5pbmZvKG9wdHM/LmxvZ09uU3RhcnQgPyBgW2VuZF0gJHttZXNzYWdlfWAgOiBtZXNzYWdlLCB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIC4uLmVuZERhdGEsXG4gICAgICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSB0MCxcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxvZ2dlcih7XG4gIGNvbmZpZyxcbiAgc3Vic3lzdGVtLFxuICBjb250ZXh0LFxufToge1xuICBjb25maWc6IExvZ2dpbmdDb25maWc7XG4gIHN1YnN5c3RlbTogc3RyaW5nO1xuICBjb250ZXh0PzogTG9nQ29udGV4dDtcbn0pOiBMb2dnZXIge1xuICByZXR1cm4gbmV3IExvZ2dlcih7IGNvbmZpZywgc3Vic3lzdGVtLCBjb250ZXh0IH0pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgU2FuZGJveCBhcyBWZXJjZWxTYW5kYm94U0RLIH0gZnJvbSBcIkB2ZXJjZWwvc2FuZGJveFwiO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2xvZ2dlclwiO1xuaW1wb3J0IHR5cGUgeyBTYW5kYm94QWdlbnRSZWYgfSBmcm9tIFwiLi4vLi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBWZXJjZWxCaW5kaW5nTWV0YWRhdGEgfSBmcm9tIFwiLi4vdmVyY2VsXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRTYW5kYm94U0RLKCk6IFByb21pc2U8dHlwZW9mIFZlcmNlbFNhbmRib3hTREs+IHtcbiAgcmV0dXJuIChhd2FpdCBpbXBvcnQoXCJAdmVyY2VsL3NhbmRib3hcIikpLlNhbmRib3g7XG59XG5cbmNvbnN0IERFRkFVTFRfUE9MTF9JTlRFUlZBTF9NUyA9IDIgKiA2MCAqIDEwMDA7XG5jb25zdCBERUZBVUxUX0lETEVfVElNRU9VVF9NUyA9IDUgKiA2MCAqIDEwMDA7XG5jb25zdCBTTkFQU0hPVF9CRUZPUkVfVElNRU9VVF9NUyA9IDEwICogNjAgKiAxMDAwO1xuXG5jb25zdCBnZXRUZXN0Q3JlZGVudGlhbHMgPSAoKSA9PlxuICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCJcbiAgICA/IHtcbiAgICAgICAgdG9rZW46IHByb2Nlc3MuZW52LlRFU1RfVkVSQ0VMX1RPS0VOLFxuICAgICAgICB0ZWFtSWQ6IHByb2Nlc3MuZW52LlRFU1RfVkVSQ0VMX1RFQU1fSUQsXG4gICAgICAgIHByb2plY3RJZDogcHJvY2Vzcy5lbnYuVEVTVF9WRVJDRUxfUFJPSkVDVF9JRCxcbiAgICAgIH1cbiAgICA6IHt9O1xuXG5leHBvcnQgdHlwZSBMaWZlY3ljbGVTdGVwUmVzdWx0ID1cbiAgfCB7IGFjdGlvbjogXCJjb250aW51ZVwiOyBuZXh0UG9sbE1zOiBudW1iZXIgfVxuICB8IHtcbiAgICAgIGFjdGlvbjogXCJleGl0XCI7XG4gICAgICByZWFzb246IFwic2FuZGJveElkX2NoYW5nZWRcIiB8IFwiaWRsZVwiIHwgXCJ0aW1lb3V0XCIgfCBcIm5vdF9mb3VuZFwiO1xuICAgIH07XG5cbmV4cG9ydCB0eXBlIExpZmVjeWNsZUNvbmZpZyA9IHtcbiAgcG9sbEludGVydmFsTXM/OiBudW1iZXI7XG4gIHN0b3BBZnRlckluYWN0aXZlTXM/OiBudW1iZXI7XG4gIHNuYXBzaG90QmVmb3JlVGltZW91dE1zPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgTGlmZWN5Y2xlSW5wdXQgPSB7XG4gIGFnZW50OiBTYW5kYm94QWdlbnRSZWY7XG4gIHNhbmRib3hJZDogc3RyaW5nO1xuICB2ZXJjZWxTYW5kYm94SWQ6IHN0cmluZztcbiAgY29uZmlnPzogTGlmZWN5Y2xlQ29uZmlnO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrQW5kU25hcHNob3RTdGVwKFxuICBpbnB1dDogTGlmZWN5Y2xlSW5wdXRcbik6IFByb21pc2U8RXJyb3IgfCBMaWZlY3ljbGVTdGVwUmVzdWx0PiB7XG4gIFwidXNlIHN0ZXBcIjtcblxuICBjb25zdCBzdG9yYWdlID0gaW5wdXQuYWdlbnQuc3RvcmFnZTtcbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICBjb25maWc6IHsgLi4uaW5wdXQuYWdlbnQub3B0aW9ucy5sb2dnaW5nLCBuYW1lOiBpbnB1dC5hZ2VudC5uYW1lIH0sXG4gICAgc3Vic3lzdGVtOiBcInNhbmRib3g6bGlmZWN5Y2xlXCIsXG4gICAgY29udGV4dDogeyBzYW5kYm94SWQ6IGlucHV0LnNhbmRib3hJZCB9LFxuICB9KTtcblxuICBsb2cuaW5mbyhcImxpZmVjeWNsZSBjaGVjayBzdGFydGVkXCIsIHtcbiAgICB2ZXJjZWxTYW5kYm94SWQ6IGlucHV0LnZlcmNlbFNhbmRib3hJZCxcbiAgfSk7XG5cbiAgY29uc3QgcmVjb3JkID0gYXdhaXQgc3RvcmFnZS5zYW5kYm94LmdldChpbnB1dC5zYW5kYm94SWQpO1xuICBpZiAoIXJlY29yZCkge1xuICAgIGxvZy53YXJuKFwic2FuZGJveCByZWNvcmQgbm90IGZvdW5kLCBleGl0aW5nIGxpZmVjeWNsZVwiKTtcbiAgICByZXR1cm4geyBhY3Rpb246IFwiZXhpdFwiLCByZWFzb246IFwibm90X2ZvdW5kXCIgfTtcbiAgfVxuXG4gIGNvbnN0IG1ldGFkYXRhID0gcmVjb3JkLnNldHVwPy5tZXRhZGF0YSBhcyBWZXJjZWxCaW5kaW5nTWV0YWRhdGEgfCBudWxsO1xuICBjb25zdCBjdXJyZW50U2FuZGJveElkID0gbWV0YWRhdGE/LnNhbmRib3hJZCA/PyBudWxsO1xuXG4gIGlmIChjdXJyZW50U2FuZGJveElkICE9PSBpbnB1dC52ZXJjZWxTYW5kYm94SWQpIHtcbiAgICBsb2cuaW5mbyhcInNhbmRib3ggSUQgY2hhbmdlZCwgZXhpdGluZyBsaWZlY3ljbGVcIiwge1xuICAgICAgZXhwZWN0ZWQ6IGlucHV0LnZlcmNlbFNhbmRib3hJZCxcbiAgICAgIGFjdHVhbDogY3VycmVudFNhbmRib3hJZCxcbiAgICB9KTtcbiAgICByZXR1cm4geyBhY3Rpb246IFwiZXhpdFwiLCByZWFzb246IFwic2FuZGJveElkX2NoYW5nZWRcIiB9O1xuICB9XG5cbiAgaWYgKCFjdXJyZW50U2FuZGJveElkKSB7XG4gICAgbG9nLndhcm4oXCJubyBjdXJyZW50IHNhbmRib3ggSUQgaW4gbWV0YWRhdGEsIGV4aXRpbmcgbGlmZWN5Y2xlXCIpO1xuICAgIHJldHVybiB7IGFjdGlvbjogXCJleGl0XCIsIHJlYXNvbjogXCJub3RfZm91bmRcIiB9O1xuICB9XG5cbiAgY29uc3QgcG9sbEludGVydmFsTXMgPVxuICAgIGlucHV0LmNvbmZpZz8ucG9sbEludGVydmFsTXMgPz8gREVGQVVMVF9QT0xMX0lOVEVSVkFMX01TO1xuICBjb25zdCBpZGxlVGltZW91dE1zID1cbiAgICBpbnB1dC5jb25maWc/LnN0b3BBZnRlckluYWN0aXZlTXMgPz8gREVGQVVMVF9JRExFX1RJTUVPVVRfTVM7XG4gIGNvbnN0IHNuYXBzaG90QmVmb3JlVGltZW91dE1zID1cbiAgICBpbnB1dC5jb25maWc/LnNuYXBzaG90QmVmb3JlVGltZW91dE1zID8/IFNOQVBTSE9UX0JFRk9SRV9USU1FT1VUX01TO1xuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGxhc3RBY3Rpdml0eSA9IHJlY29yZC5sYXN0QWN0aXZlQXQgPz8gcmVjb3JkLmNyZWF0ZWRBdCA/PyBub3c7XG4gIGNvbnN0IGlkbGVEdXJhdGlvbiA9IG5vdyAtIGxhc3RBY3Rpdml0eTtcbiAgY29uc3Qgc2hvdWxkU25hcHNob3REdWVUb0lkbGUgPSBpZGxlRHVyYXRpb24gPiBpZGxlVGltZW91dE1zO1xuXG4gIGxldCBzaG91bGRTbmFwc2hvdER1ZVRvVGltZW91dCA9IGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0IFNhbmRib3hTREsgPSBhd2FpdCBsb2FkU2FuZGJveFNESygpO1xuICAgIGNvbnN0IHNhbmRib3ggPSBhd2FpdCBTYW5kYm94U0RLLmdldCh7XG4gICAgICBzYW5kYm94SWQ6IGN1cnJlbnRTYW5kYm94SWQsXG4gICAgICAuLi5nZXRUZXN0Q3JlZGVudGlhbHMoKSxcbiAgICB9KTtcbiAgICBpZiAoc2FuZGJveC50aW1lb3V0IDwgc25hcHNob3RCZWZvcmVUaW1lb3V0TXMpIHtcbiAgICAgIHNob3VsZFNuYXBzaG90RHVlVG9UaW1lb3V0ID0gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIGxvZy53YXJuKFwiZmFpbGVkIHRvIGdldCBzYW5kYm94IGZyb20gU0RLLCBleGl0aW5nIGxpZmVjeWNsZVwiLCB7XG4gICAgICB2ZXJjZWxTYW5kYm94SWQ6IGN1cnJlbnRTYW5kYm94SWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uOiBcIm5vdF9mb3VuZFwiIH07XG4gIH1cblxuICBpZiAoc2hvdWxkU25hcHNob3REdWVUb0lkbGUgfHwgc2hvdWxkU25hcHNob3REdWVUb1RpbWVvdXQpIHtcbiAgICBjb25zdCByZWFzb24gPSBzaG91bGRTbmFwc2hvdER1ZVRvSWRsZSA/IFwiaWRsZVwiIDogXCJ0aW1lb3V0XCI7XG4gICAgbG9nLmluZm8oXCJzbmFwc2hvdHRpbmcgc2FuZGJveCBiZWZvcmUgZXhpdFwiLCB7XG4gICAgICByZWFzb24sXG4gICAgICBpZGxlRHVyYXRpb25NczogaWRsZUR1cmF0aW9uLFxuICAgICAgdmVyY2VsU2FuZGJveElkOiBjdXJyZW50U2FuZGJveElkLFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFNhbmRib3hTREsgPSBhd2FpdCBsb2FkU2FuZGJveFNESygpO1xuICAgICAgY29uc3Qgc2FuZGJveCA9IGF3YWl0IFNhbmRib3hTREsuZ2V0KHtcbiAgICAgICAgc2FuZGJveElkOiBjdXJyZW50U2FuZGJveElkLFxuICAgICAgICAuLi5nZXRUZXN0Q3JlZGVudGlhbHMoKSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCBzYW5kYm94LnNuYXBzaG90KCk7XG4gICAgICBsb2cuaW5mbyhcInNuYXBzaG90IGNyZWF0ZWRcIiwgeyBzbmFwc2hvdElkOiBzbmFwc2hvdC5zbmFwc2hvdElkIH0pO1xuXG4gICAgICBhd2FpdCBzdG9yYWdlLnNhbmRib3gudXBkYXRlKGlucHV0LnNhbmRib3hJZCwge1xuICAgICAgICBzZXR1cDoge1xuICAgICAgICAgIC4uLnJlY29yZC5zZXR1cCxcbiAgICAgICAgICBtZXRhZGF0YTogeyBzYW5kYm94SWQ6IG51bGwsIHNuYXBzaG90SWQ6IHNuYXBzaG90LnNuYXBzaG90SWQgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgbG9nLmluZm8oXCJzYW5kYm94IHJlY29yZCB1cGRhdGVkIHdpdGggc25hcHNob3RcIik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yKFwiZmFpbGVkIHRvIHNuYXBzaG90IHNhbmRib3hcIiwgeyBjYXVzZTogZSB9KTtcbiAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgRXJyb3IgPyBlIDogbmV3IEVycm9yKFN0cmluZyhlKSk7XG4gICAgfVxuICAgIHJldHVybiB7IGFjdGlvbjogXCJleGl0XCIsIHJlYXNvbiB9O1xuICB9XG5cbiAgbG9nLmluZm8oXCJzYW5kYm94IHN0aWxsIGFjdGl2ZSwgY29udGludWluZyBsaWZlY3ljbGVcIiwge1xuICAgIGlkbGVEdXJhdGlvbk1zOiBpZGxlRHVyYXRpb24sXG4gICAgbmV4dFBvbGxNczogcG9sbEludGVydmFsTXMsXG4gIH0pO1xuICByZXR1cm4geyBhY3Rpb246IFwiY29udGludWVcIiwgbmV4dFBvbGxNczogcG9sbEludGVydmFsTXMgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNBQSxrQkFBcUI7QUFjckIsZUFBZSxXQUNiLE1BQ0EsTUFDK0Q7QUFDL0QsUUFBTSxFQUFFLE1BQU0sSUFBSSxNQUFNLE9BQU8sZUFBb0I7QUFDbkQsU0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdEMsVUFBTSxRQUFRLE1BQU0sVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUc7QUFBQSxNQUNsRCxRQUFRLE1BQU07QUFBQSxJQUNoQixDQUFDO0FBRUQsUUFBSSxTQUFTO0FBQ2IsUUFBSSxTQUFTO0FBRWIsVUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFNBQWlCO0FBQ3hDLGdCQUFVLEtBQUssU0FBUztBQUFBLElBQzFCLENBQUM7QUFDRCxVQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsU0FBaUI7QUFDeEMsZ0JBQVUsS0FBSyxTQUFTO0FBQUEsSUFDMUIsQ0FBQztBQUVELFVBQU0sWUFBWSxNQUFNLFlBQ3BCLFdBQVcsTUFBTTtBQUNmLFlBQU0sS0FBSyxTQUFTO0FBQ3BCLGFBQU8sSUFBSSxNQUFNLGtCQUFrQixLQUFLLENBQUMsQ0FBQyxZQUFZLENBQUM7QUFBQSxJQUN6RCxHQUFHLEtBQUssU0FBUyxJQUNqQjtBQUVKLFVBQU0sR0FBRyxTQUFTLENBQUMsUUFBUTtBQUN6QixVQUFJLFdBQVc7QUFDYixxQkFBYSxT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QSxZQUNsQixHQUFHO0FBQUEsWUFDSCxTQUFTLE1BQU07QUFBQSxZQUNmLFlBQVksS0FBSyxJQUFJO0FBQUEsVUFDdkIsQ0FBQyxFQUNBLE1BQU0sTUFBTSxNQUFTO0FBRXhCLGlCQUFPO0FBQUEsWUFDTCxVQUFBQztBQUFBLFlBQ0EsVUFBVSxFQUFFLFdBQVdELEtBQUksVUFBVTtBQUFBLFVBQ3ZDO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLE1BQU0sS0FBSztBQUNiLFlBQUksQ0FBQyxNQUFNLFNBQVM7QUFDbEIsY0FBSSxNQUFNLDRDQUE0QyxFQUFFLE1BQU0sQ0FBQztBQUMvRCxnQkFBTSxJQUFJLE1BQU0sMENBQTBDO0FBQUEsUUFDNUQ7QUFDQSw0QkFBb0I7QUFBQSxVQUNsQjtBQUFBLFVBQ0EsS0FBSyxNQUFNO0FBQUEsVUFDWDtBQUFBLFVBQ0EsaUJBQWlCLE1BQU07QUFBQSxVQUN2QjtBQUFBLFFBQ0YsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxVQUFVO0FBQ2xCLGNBQUksTUFBTSxvQ0FBb0MsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUFBLFFBQ2hFLENBQUM7QUFFRCxjQUFNQSxPQUFNLE1BQU0sVUFBVSxXQUFXO0FBQ3ZDLGNBQU1DLFlBQVcsSUFBSSxzQkFBc0JELE1BQUssR0FBRztBQUNuRCxjQUFNLE1BQU0sSUFBSUMsU0FBUTtBQUV4QixlQUFPO0FBQUEsVUFDTCxVQUFBQTtBQUFBLFVBQ0EsVUFBVSxFQUFFLFdBQVdELEtBQUksVUFBVTtBQUFBLFFBQ3ZDO0FBQUEsTUFDRjtBQUVBLFlBQU0sTUFBTSxNQUFNLFVBQVUsV0FBVztBQUN2QyxZQUFNLFdBQVcsSUFBSSxzQkFBc0IsS0FBSyxHQUFHO0FBRW5ELGFBQU87QUFBQSxRQUNMO0FBQUEsUUFDQSxVQUFVLEVBQUUsV0FBVyxJQUFJLFVBQVU7QUFBQSxNQUN2QztBQUFBLElBQ0Y7QUFBQSxJQUVBLE1BQU0sUUFBUSxFQUFFLFNBQVMsR0FBRztBQUMxQixZQUFNLGFBQWEsTUFBTUgsZ0JBQWU7QUFDeEMsWUFBTSxNQUFNLE1BQU0sV0FBVyxJQUFJO0FBQUEsUUFDL0IsV0FBVyxTQUFTO0FBQUEsUUFDcEIsR0FBR0Msb0JBQW1CO0FBQUEsTUFDeEIsQ0FBQztBQUNELGFBQU8sSUFBSSxzQkFBc0IsR0FBRztBQUFBLElBQ3RDO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogWyJpbXBvcnRfdWxpZCIsICJsb2FkU2FuZGJveFNESyIsICJnZXRUZXN0Q3JlZGVudGlhbHMiLCAic3RhcnRXb3JrZmxvdyIsICJzZGsiLCAiaW5zdGFuY2UiXQp9Cg==
|
|
1080
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3NhbmRib3gvZW50cnkudHMiLCAiLi4vc3JjL3NhbmRib3gvYmluZGluZ3MvZG9ja2VyLnRzIiwgIi4uL3NyYy9zYW5kYm94L2JpbmRpbmdzL2xvY2FsLnRzIiwgIi4uL3NyYy9zYW5kYm94L2JpbmRpbmdzL3ZlcmNlbC50cyIsICIuLi9zcmMvc2FuZGJveC9iaW5kaW5ncy92ZXJjZWwtbGlmZWN5Y2xlL3dvcmtmbG93LnRzIiwgIi4uL3NyYy91dGlscy9sb2dnZXIudHMiLCAiLi4vc3JjL3NhbmRib3gvYmluZGluZ3MvdmVyY2VsLWxpZmVjeWNsZS9zdGVwcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IHR5cGUge1xuICBFeGVjUmVzdWx0LFxuICBTYW5kYm94QWdlbnRSZWYsXG4gIFNhbmRib3hCaW5kaW5nLFxuICBTYW5kYm94SW5zdGFuY2UsXG4gIFNhbmRib3hTZXR1cEZpZWxkcyxcbiAgVXBsb2FkYWJsZUZpbGUsXG59IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCB7IGRvY2tlclNhbmRib3ggfSBmcm9tIFwiLi9iaW5kaW5ncy9kb2NrZXJcIjtcbmV4cG9ydCB7IGxvY2FsU2FuZGJveCB9IGZyb20gXCIuL2JpbmRpbmdzL2xvY2FsXCI7XG5leHBvcnQgeyB2ZXJjZWxTYW5kYm94IH0gZnJvbSBcIi4vYmluZGluZ3MvdmVyY2VsXCI7XG4iLCAiaW1wb3J0IHsgdWxpZCB9IGZyb20gXCJ1bGlkXCI7XG5pbXBvcnQgdHlwZSB7IEV4ZWNSZXN1bHQsIFNhbmRib3hCaW5kaW5nLCBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuXG5leHBvcnQgdHlwZSBEb2NrZXJCaW5kaW5nQ29uZmlnID0ge1xuICBjd2Q/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBEb2NrZXJCaW5kaW5nTWV0YWRhdGEgPSB7XG4gIHNhbmRib3hOYW1lOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFJ1biBhIGBkb2NrZXIgc2FuZGJveGAgQ0xJIGNvbW1hbmQgYW5kIHJldHVybiBpdHMgb3V0cHV0LlxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjRG9ja2VyKFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgb3B0cz86IHsgdGltZW91dE1zPzogbnVtYmVyOyBzaWduYWw/OiBBYm9ydFNpZ25hbCB9XG4pOiBQcm9taXNlPHsgc3Rkb3V0OiBzdHJpbmc7IHN0ZGVycjogc3RyaW5nOyBleGl0Q29kZTogbnVtYmVyIH0+IHtcbiAgY29uc3QgeyBzcGF3biB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oXCJkb2NrZXJcIiwgW1wic2FuZGJveFwiLCAuLi5hcmdzXSwge1xuICAgICAgc2lnbmFsOiBvcHRzPy5zaWduYWwsXG4gICAgfSk7XG5cbiAgICBsZXQgc3Rkb3V0ID0gXCJcIjtcbiAgICBsZXQgc3RkZXJyID0gXCJcIjtcblxuICAgIGNoaWxkLnN0ZG91dC5vbihcImRhdGFcIiwgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgc3Rkb3V0ICs9IGRhdGEudG9TdHJpbmcoKTtcbiAgICB9KTtcbiAgICBjaGlsZC5zdGRlcnIub24oXCJkYXRhXCIsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIHN0ZGVyciArPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSBvcHRzPy50aW1lb3V0TXNcbiAgICAgID8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY2hpbGQua2lsbChcIlNJR1RFUk1cIik7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgZG9ja2VyIHNhbmRib3ggJHthcmdzWzBdfSB0aW1lZCBvdXRgKSk7XG4gICAgICAgIH0sIG9wdHMudGltZW91dE1zKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjaGlsZC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgIGlmICh0aW1lb3V0SWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9KTtcblxuICAgIGNoaWxkLm9uKFwiY2xvc2VcIiwgKGNvZGUpID0+IHtcbiAgICAgIGlmICh0aW1lb3V0SWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiBjb2RlID8/IDAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRyYWNrIHdoaWNoIHNhbmRib3hlcyBoYXZlIGJlZW4gdmVyaWZpZWQgdG8gZXhpc3QgaW4gdGhpcyBwcm9jZXNzLlxuICogTWFwcyBzYW5kYm94IG5hbWUgLT4gUHJvbWlzZSBzbyBjb25jdXJyZW50IGNhbGxlcnMgd2FpdCBvbiB0aGUgc2FtZSBjaGVjay5cbiAqL1xuY29uc3QgZW5zdXJlUHJvbWlzZXMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTx2b2lkPj4oKTtcblxuLyoqXG4gKiBTYW5kYm94ZXMgdGhhdCB0aGlzIHByb2Nlc3MgaGFzIHVzZWQuIFN0b3BwZWQgb24gcHJvY2VzcyBleGl0LlxuICovXG5jb25zdCBhY3RpdmVTYW5kYm94ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxubGV0IGNsZWFudXBSZWdpc3RlcmVkID0gZmFsc2U7XG5sZXQgX2V4ZWNTeW5jOiB0eXBlb2YgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpLmV4ZWNTeW5jIHwgbnVsbCA9IG51bGw7XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyQ2xlYW51cCgpIHtcbiAgaWYgKGNsZWFudXBSZWdpc3RlcmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNsZWFudXBSZWdpc3RlcmVkID0gdHJ1ZTtcblxuICAvLyBQcmUtbG9hZCBleGVjU3luYyBzbyB0aGUgc3luY2hyb25vdXMgZXhpdCBoYW5kbGVyIGNhbiB1c2UgaXQuXG4gIGNvbnN0IGNwID0gYXdhaXQgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpO1xuICBfZXhlY1N5bmMgPSBjcC5leGVjU3luYztcblxuICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgIGlmICghX2V4ZWNTeW5jKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBBcnJheS5mcm9tKGFjdGl2ZVNhbmRib3hlcykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIF9leGVjU3luYyhgZG9ja2VyIHNhbmRib3ggc3RvcCAke25hbWV9YCwge1xuICAgICAgICAgIHRpbWVvdXQ6IDEwXzAwMCxcbiAgICAgICAgICBzdGRpbzogXCJwaXBlXCIsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEJlc3QtZWZmb3J0IFx1MjAxNCBzYW5kYm94IG1heSBhbHJlYWR5IGJlIHN0b3BwZWRcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcHJvY2Vzcy5vbihcImV4aXRcIiwgY2xlYW51cCk7XG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgKCkgPT4ge1xuICAgIGNsZWFudXAoKTtcbiAgICBwcm9jZXNzLmV4aXQoMTMwKTtcbiAgfSk7XG4gIHByb2Nlc3Mub24oXCJTSUdURVJNXCIsICgpID0+IHtcbiAgICBjbGVhbnVwKCk7XG4gICAgcHJvY2Vzcy5leGl0KDE0Myk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEVuc3VyZSBhIERvY2tlciBzYW5kYm94IGV4aXN0cyBmb3IgdGhlIGdpdmVuIG5hbWUuXG4gKiBJZiBpdCBhbHJlYWR5IGV4aXN0cyAoZnJvbSBhIHByZXZpb3VzIHByb2Nlc3MpLCByZXVzZXMgaXQuXG4gKiBJZiBpdCBkb2Vzbid0IGV4aXN0LCBjcmVhdGVzIGl0LlxuICovXG5hc3luYyBmdW5jdGlvbiBlbnN1cmVTYW5kYm94KHNhbmRib3hOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZXhpc3RpbmcgPSBlbnN1cmVQcm9taXNlcy5nZXQoc2FuZGJveE5hbWUpO1xuICBpZiAoZXhpc3RpbmcpIHtcbiAgICByZXR1cm4gZXhpc3Rpbmc7XG4gIH1cblxuICBjb25zdCBwcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBscyA9IGF3YWl0IGV4ZWNEb2NrZXIoW1wibHNcIiwgXCItcVwiXSwgeyB0aW1lb3V0TXM6IDEwXzAwMCB9KTtcbiAgICBjb25zdCBleGlzdGluZ05hbWVzID1cbiAgICAgIGxzLmV4aXRDb2RlID09PSAwXG4gICAgICAgID8gbHMuc3Rkb3V0XG4gICAgICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgICAgIC5tYXAoKHMpID0+IHMudHJpbSgpKVxuICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICA6IFtdO1xuXG4gICAgaWYgKGV4aXN0aW5nTmFtZXMuaW5jbHVkZXMoc2FuZGJveE5hbWUpKSB7XG4gICAgICBhY3RpdmVTYW5kYm94ZXMuYWRkKHNhbmRib3hOYW1lKTtcbiAgICAgIHJlZ2lzdGVyQ2xlYW51cCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGggPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG4gICAgY29uc3Qgb3MgPSBhd2FpdCBpbXBvcnQoXCJub2RlOm9zXCIpO1xuICAgIGNvbnN0IGZzID0gYXdhaXQgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKTtcblxuICAgIGNvbnN0IHdvcmtzcGFjZURpciA9IHBhdGguam9pbihcbiAgICAgIG9zLnRtcGRpcigpLFxuICAgICAgXCJhZ2VudC1kb2NrZXItc2FuZGJveFwiLFxuICAgICAgc2FuZGJveE5hbWVcbiAgICApO1xuICAgIGF3YWl0IGZzLm1rZGlyKHdvcmtzcGFjZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBjb25zdCBjcmVhdGUgPSBhd2FpdCBleGVjRG9ja2VyKFxuICAgICAgW1wiY3JlYXRlXCIsIFwiLS1uYW1lXCIsIHNhbmRib3hOYW1lLCBcInNoZWxsXCIsIHdvcmtzcGFjZURpcl0sXG4gICAgICB7IHRpbWVvdXRNczogNjBfMDAwIH1cbiAgICApO1xuXG4gICAgaWYgKGNyZWF0ZS5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgaWYgKGNyZWF0ZS5zdGRlcnIuaW5jbHVkZXMoXCJhbHJlYWR5IGV4aXN0c1wiKSkge1xuICAgICAgICBhY3RpdmVTYW5kYm94ZXMuYWRkKHNhbmRib3hOYW1lKTtcbiAgICAgICAgcmVnaXN0ZXJDbGVhbnVwKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBjcmVhdGUgZG9ja2VyIHNhbmRib3ggXCIke3NhbmRib3hOYW1lfVwiOiAke2NyZWF0ZS5zdGRlcnJ9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBhY3RpdmVTYW5kYm94ZXMuYWRkKHNhbmRib3hOYW1lKTtcbiAgICByZWdpc3RlckNsZWFudXAoKTtcbiAgfSkoKTtcblxuICBlbnN1cmVQcm9taXNlcy5zZXQoc2FuZGJveE5hbWUsIHByb21pc2UpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgcHJvbWlzZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVuc3VyZVByb21pc2VzLmRlbGV0ZShzYW5kYm94TmFtZSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG5jb25zdCBERUZBVUxUX0RPQ0tFUl9DV0QgPSBcIi9ob21lL2FnZW50L3dvcmtzcGFjZVwiO1xuXG5jbGFzcyBEb2NrZXJTYW5kYm94SW5zdGFuY2UgaW1wbGVtZW50cyBTYW5kYm94SW5zdGFuY2Uge1xuICByZWFkb25seSBjd2Q6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzYW5kYm94TmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NlcyA9IG5ldyBNYXA8XG4gICAgc3RyaW5nLFxuICAgIGltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKS5DaGlsZFByb2Nlc3NcbiAgPigpO1xuXG4gIGNvbnN0cnVjdG9yKHNhbmRib3hOYW1lOiBzdHJpbmcsIGN3ZD86IHN0cmluZykge1xuICAgIHRoaXMuc2FuZGJveE5hbWUgPSBzYW5kYm94TmFtZTtcbiAgICB0aGlzLmN3ZCA9IGN3ZCA/PyBERUZBVUxUX0RPQ0tFUl9DV0Q7XG4gIH1cblxuICBhc3luYyBleGVjKG9wdHM6IHtcbiAgICBjb21tYW5kOiBzdHJpbmc7XG4gICAgYXJncz86IHN0cmluZ1tdO1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHN1ZG8/OiBib29sZWFuO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxFeGVjUmVzdWx0PiB7XG4gICAgYXdhaXQgZW5zdXJlU2FuZGJveCh0aGlzLnNhbmRib3hOYW1lKTtcblxuICAgIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiKTtcbiAgICBjb25zdCBjb21tYW5kSWQgPSBgY29tbWFuZF8ke3VsaWQoKX1gO1xuICAgIGNvbnN0IGVudkZsYWdzID0gb3B0cy5lbnZcbiAgICAgID8gT2JqZWN0LmVudHJpZXMob3B0cy5lbnYpLmZsYXRNYXAoKFtrLCB2XSkgPT4gW1wiLWVcIiwgYCR7a309JHt2fWBdKVxuICAgICAgOiBbXTtcbiAgICBjb25zdCBjd2RGbGFncyA9IG9wdHMuY3dkID8gW1wiLXdcIiwgb3B0cy5jd2RdIDogW107XG4gICAgbGV0IGJhc2VDbWQ6IHN0cmluZ1tdO1xuICAgIGlmIChvcHRzLnN1ZG8pIHtcbiAgICAgIGJhc2VDbWQgPSBbXCJzdWRvXCIsIG9wdHMuY29tbWFuZCwgLi4uKG9wdHMuYXJncyA/PyBbXSldO1xuICAgIH0gZWxzZSBpZiAob3B0cy5hcmdzKSB7XG4gICAgICBiYXNlQ21kID0gW29wdHMuY29tbWFuZCwgLi4ub3B0cy5hcmdzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZUNtZCA9IFtvcHRzLmNvbW1hbmRdO1xuICAgIH1cbiAgICBjb25zdCBmdWxsQ21kID0gYmFzZUNtZDtcblxuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oXG4gICAgICBcImRvY2tlclwiLFxuICAgICAgW1xuICAgICAgICBcInNhbmRib3hcIixcbiAgICAgICAgXCJleGVjXCIsXG4gICAgICAgIC4uLmVudkZsYWdzLFxuICAgICAgICAuLi5jd2RGbGFncyxcbiAgICAgICAgdGhpcy5zYW5kYm94TmFtZSxcbiAgICAgICAgLi4uZnVsbENtZCxcbiAgICAgIF0sXG4gICAgICB7IHNpZ25hbDogb3B0cy5zaWduYWwgfVxuICAgICk7XG5cbiAgICB0aGlzLnByb2Nlc3Nlcy5zZXQoY29tbWFuZElkLCBjaGlsZCk7XG5cbiAgICBsZXQgc3Rkb3V0ID0gXCJcIjtcbiAgICBsZXQgc3RkZXJyID0gXCJcIjtcbiAgICBjb25zdCBsb2dRdWV1ZTogeyBzdHJlYW06IFwic3Rkb3V0XCIgfCBcInN0ZGVyclwiOyBkYXRhOiBzdHJpbmcgfVtdID0gW107XG4gICAgbGV0IGxvZ1Jlc29sdmU6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBjbG9zZWQgPSBmYWxzZTtcblxuICAgIGNoaWxkLnN0ZG91dC5vbihcImRhdGFcIiwgKGRhdGE6IHN0cmluZyB8IEJ1ZmZlcikgPT4ge1xuICAgICAgY29uc3Qgc3RyID0gU3RyaW5nKGRhdGEpO1xuICAgICAgc3Rkb3V0ICs9IHN0cjtcbiAgICAgIGxvZ1F1ZXVlLnB1c2goeyBzdHJlYW06IFwic3Rkb3V0XCIsIGRhdGE6IHN0ciB9KTtcbiAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgIH0pO1xuXG4gICAgY2hpbGQuc3RkZXJyLm9uKFwiZGF0YVwiLCAoZGF0YTogc3RyaW5nIHwgQnVmZmVyKSA9PiB7XG4gICAgICBjb25zdCBzdHIgPSBTdHJpbmcoZGF0YSk7XG4gICAgICBzdGRlcnIgKz0gc3RyO1xuICAgICAgbG9nUXVldWUucHVzaCh7IHN0cmVhbTogXCJzdGRlcnJcIiwgZGF0YTogc3RyIH0pO1xuICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBuZXcgUHJvbWlzZTx7XG4gICAgICBzdGRvdXQ6IHN0cmluZztcbiAgICAgIHN0ZGVycjogc3RyaW5nO1xuICAgICAgZXhpdENvZGU6IG51bWJlcjtcbiAgICB9PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjaGlsZC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzZXMuZGVsZXRlKGNvbW1hbmRJZCk7XG4gICAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0pO1xuXG4gICAgICBjaGlsZC5vbihcImNsb3NlXCIsIChjb2RlOiBudW1iZXIgfCBudWxsKSA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VzLmRlbGV0ZShjb21tYW5kSWQpO1xuICAgICAgICBjbG9zZWQgPSB0cnVlO1xuICAgICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICAgICAgcmVzb2x2ZSh7IHN0ZG91dCwgc3RkZXJyLCBleGl0Q29kZTogY29kZSA/PyAwIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiogbG9ncygpOiBBc3luY0l0ZXJhYmxlPHtcbiAgICAgIHN0cmVhbTogXCJzdGRvdXRcIiB8IFwic3RkZXJyXCI7XG4gICAgICBkYXRhOiBzdHJpbmc7XG4gICAgfT4ge1xuICAgICAgd2hpbGUgKCFjbG9zZWQgfHwgbG9nUXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IGxvZ1F1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHlpZWxkIGVudHJ5O1xuICAgICAgICB9IGVsc2UgaWYgKCFjbG9zZWQpIHtcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgICAgICAgbG9nUmVzb2x2ZSA9IHI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbG9nUmVzb2x2ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBjb21tYW5kSWQsIGxvZ3MsIHJlc3VsdCB9O1xuICB9XG5cbiAgYXN5bmMgcmVhZEZpbGUob3B0czoge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8QnVmZmVyIHwgbnVsbD4ge1xuICAgIGF3YWl0IGVuc3VyZVNhbmRib3godGhpcy5zYW5kYm94TmFtZSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjRG9ja2VyKFxuICAgICAgW1xuICAgICAgICBcImV4ZWNcIixcbiAgICAgICAgdGhpcy5zYW5kYm94TmFtZSxcbiAgICAgICAgXCJiYXNoXCIsXG4gICAgICAgIFwiLWNcIixcbiAgICAgICAgYGJhc2U2NCAnJHtvcHRzLnBhdGgucmVwbGFjZSgvJy9nLCBcIidcXFxcJydcIil9J2AsXG4gICAgICBdLFxuICAgICAgeyB0aW1lb3V0TXM6IDMwXzAwMCwgc2lnbmFsOiBvcHRzLnNpZ25hbCB9XG4gICAgKTtcblxuICAgIGlmIChyZXN1bHQuZXhpdENvZGUgIT09IDApIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmVzdWx0LnN0ZGVyci5pbmNsdWRlcyhcIk5vIHN1Y2ggZmlsZVwiKSB8fFxuICAgICAgICByZXN1bHQuc3RkZXJyLmluY2x1ZGVzKFwiRU5PRU5UXCIpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlYWRGaWxlIGZhaWxlZDogJHtyZXN1bHQuc3RkZXJyfWApO1xuICAgIH1cblxuICAgIHJldHVybiBCdWZmZXIuZnJvbShyZXN1bHQuc3Rkb3V0LnRyaW0oKSwgXCJiYXNlNjRcIik7XG4gIH1cblxuICBhc3luYyB3cml0ZUZpbGVzKG9wdHM6IHtcbiAgICBmaWxlczogeyBwYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB8IEJ1ZmZlciB9W107XG4gICAgZGVzdFBhdGg6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGVuc3VyZVNhbmRib3godGhpcy5zYW5kYm94TmFtZSk7XG5cbiAgICBmb3IgKGNvbnN0IGZpbGUgb2Ygb3B0cy5maWxlcykge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBvcHRzLmRlc3RQYXRoXG4gICAgICAgID8gYCR7b3B0cy5kZXN0UGF0aH0vJHtmaWxlLnBhdGh9YFxuICAgICAgICA6IGZpbGUucGF0aDtcblxuICAgICAgLy8gRW5zdXJlIHBhcmVudCBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBjb25zdCBwYXJlbnREaXIgPSBmdWxsUGF0aC5zdWJzdHJpbmcoMCwgZnVsbFBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcbiAgICAgIGlmIChwYXJlbnREaXIpIHtcbiAgICAgICAgYXdhaXQgZXhlY0RvY2tlcihbXCJleGVjXCIsIHRoaXMuc2FuZGJveE5hbWUsIFwibWtkaXJcIiwgXCItcFwiLCBwYXJlbnREaXJdLCB7XG4gICAgICAgICAgc2lnbmFsOiBvcHRzLnNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdyaXRlIHZpYSBiYXNlNjQgdG8gaGFuZGxlIGJvdGggdGV4dCBhbmQgYmluYXJ5IGNvbnRlbnRcbiAgICAgIGNvbnN0IGI2NCA9XG4gICAgICAgIHR5cGVvZiBmaWxlLmNvbnRlbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICA/IEJ1ZmZlci5mcm9tKGZpbGUuY29udGVudCkudG9TdHJpbmcoXCJiYXNlNjRcIilcbiAgICAgICAgICA6IGZpbGUuY29udGVudC50b1N0cmluZyhcImJhc2U2NFwiKTtcblxuICAgICAgYXdhaXQgZXhlY0RvY2tlcihcbiAgICAgICAgW1xuICAgICAgICAgIFwiZXhlY1wiLFxuICAgICAgICAgIHRoaXMuc2FuZGJveE5hbWUsXG4gICAgICAgICAgXCJiYXNoXCIsXG4gICAgICAgICAgXCItY1wiLFxuICAgICAgICAgIGBlY2hvICcke2I2NH0nIHwgYmFzZTY0IC1kID4gJyR7ZnVsbFBhdGgucmVwbGFjZSgvJy9nLCBcIidcXFxcJydcIil9J2AsXG4gICAgICAgIF0sXG4gICAgICAgIHsgc2lnbmFsOiBvcHRzLnNpZ25hbCB9XG4gICAgICApO1xuXG4gICAgICBpZiAoZmlsZS5wYXRoLmVuZHNXaXRoKFwiLnNoXCIpKSB7XG4gICAgICAgIGF3YWl0IGV4ZWNEb2NrZXIoW1wiZXhlY1wiLCB0aGlzLnNhbmRib3hOYW1lLCBcImNobW9kXCIsIFwiK3hcIiwgZnVsbFBhdGhdLCB7XG4gICAgICAgICAgc2lnbmFsOiBvcHRzLnNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBnZXREb21haW4ob3B0czoge1xuICAgIHBvcnQ6IG51bWJlcjtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGBodHRwOi8vbG9jYWxob3N0OiR7b3B0cy5wb3J0fWA7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIGtpbGwob3B0czogeyBjb21tYW5kSWQ6IHN0cmluZzsgc2lnbmFsPzogQWJvcnRTaWduYWwgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNoaWxkID0gdGhpcy5wcm9jZXNzZXMuZ2V0KG9wdHMuY29tbWFuZElkKTtcbiAgICBpZiAoY2hpbGQpIHtcbiAgICAgIGNoaWxkLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzZXMuZGVsZXRlKG9wdHMuY29tbWFuZElkKTtcbiAgICB9XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIGdldFN0YXR1cygpOiBQcm9taXNlPFxuICAgIFwicGVuZGluZ1wiIHwgXCJydW5uaW5nXCIgfCBcInN0b3BwaW5nXCIgfCBcInN0b3BwZWRcIiB8IFwiZmFpbGVkXCJcbiAgPiB7XG4gICAgLy8gZG9ja2VyIHNhbmRib3ggQ0xJIGRvZXNuJ3QgZXhwb3NlIHN0YXR1cyBcdTIwMTQgYXNzdW1lIHJ1bm5pbmcgaWYgZW5zdXJlZFxuICAgIHJldHVybiBcInJ1bm5pbmdcIjtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGVuc3VyZVNhbmRib3godGhpcy5zYW5kYm94TmFtZSk7XG4gIH1cblxuICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGV4ZWNEb2NrZXIoW1wic3RvcFwiLCB0aGlzLnNhbmRib3hOYW1lXSwgeyB0aW1lb3V0TXM6IDMwXzAwMCB9KTtcbiAgICBhY3RpdmVTYW5kYm94ZXMuZGVsZXRlKHRoaXMuc2FuZGJveE5hbWUpO1xuICAgIGVuc3VyZVByb21pc2VzLmRlbGV0ZSh0aGlzLnNhbmRib3hOYW1lKTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgc25hcHNob3QoKTogUHJvbWlzZTx7IHNuYXBzaG90SWQ6IHN0cmluZyB9PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic25hcHNob3QgaXMgbm90IHN1cHBvcnRlZCBmb3IgZG9ja2VyIHNhbmRib3hlc1wiKTtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgdXBkYXRlTmV0d29ya1BvbGljeSgpOiBQcm9taXNlPG5ldmVyPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJ1cGRhdGVOZXR3b3JrUG9saWN5IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGRvY2tlciBzYW5kYm94ZXNcIlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvY2tlclNhbmRib3goXG4gIGRlZmF1bHRzPzogUGFydGlhbDxpbXBvcnQoXCIuLi9hZGFwdGVyXCIpLlNhbmRib3hTZXR1cEZpZWxkcz4gJiB7XG4gICAgcnVuPzogKHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICBjb25maWc/OiBEb2NrZXJCaW5kaW5nQ29uZmlnO1xuICB9XG4pOiBTYW5kYm94QmluZGluZzxcImRvY2tlclwiLCBEb2NrZXJCaW5kaW5nQ29uZmlnLCBEb2NrZXJCaW5kaW5nTWV0YWRhdGE+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImRvY2tlclwiLFxuICAgIGRlZmF1bHRzLFxuICAgIGFzeW5jIGNyZWF0ZShvcHRzKSB7XG4gICAgICBjb25zdCBzYW5kYm94TmFtZSA9IGBhZ2VudC0ke3VsaWQoKX1gO1xuICAgICAgY29uc3QgY3dkID0gb3B0cy5zZXR1cD8uY29uZmlnPy5jd2Q7XG5cbiAgICAgIGF3YWl0IGVuc3VyZVNhbmRib3goc2FuZGJveE5hbWUpO1xuXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBEb2NrZXJTYW5kYm94SW5zdGFuY2Uoc2FuZGJveE5hbWUsIGN3ZCk7XG5cbiAgICAgIGlmIChvcHRzLnNldHVwPy5ydW4pIHtcbiAgICAgICAgYXdhaXQgb3B0cy5zZXR1cC5ydW4oaW5zdGFuY2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgbWV0YWRhdGE6IHsgc2FuZGJveE5hbWUgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgICBhc3luYyBjb25uZWN0KG9wdHMpIHtcbiAgICAgIHJldHVybiBuZXcgRG9ja2VyU2FuZGJveEluc3RhbmNlKG9wdHMubWV0YWRhdGEuc2FuZGJveE5hbWUpO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgdWxpZCB9IGZyb20gXCJ1bGlkXCI7XG5pbXBvcnQgdHlwZSB7IEV4ZWNSZXN1bHQsIFNhbmRib3hCaW5kaW5nLCBTYW5kYm94SW5zdGFuY2UgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuXG5leHBvcnQgdHlwZSBMb2NhbEJpbmRpbmdDb25maWcgPSB7XG4gIGN3ZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIExvY2FsQmluZGluZ01ldGFkYXRhID0ge1xuICBiYXNlUGF0aDogc3RyaW5nO1xuICBwaWQ6IG51bWJlcjtcbn07XG5cbmNsYXNzIExvY2FsU2FuZGJveEluc3RhbmNlIGltcGxlbWVudHMgU2FuZGJveEluc3RhbmNlIHtcbiAgcmVhZG9ubHkgY3dkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZVBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9jZXNzZXMgPSBuZXcgTWFwPFxuICAgIHN0cmluZyxcbiAgICBpbXBvcnQoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIikuQ2hpbGRQcm9jZXNzXG4gID4oKTtcblxuICBjb25zdHJ1Y3RvcihiYXNlUGF0aDogc3RyaW5nKSB7XG4gICAgdGhpcy5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuICAgIHRoaXMuY3dkID0gYmFzZVBhdGg7XG4gIH1cblxuICBhc3luYyBleGVjKG9wdHM6IHtcbiAgICBjb21tYW5kOiBzdHJpbmc7XG4gICAgYXJncz86IHN0cmluZ1tdO1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHN1ZG8/OiBib29sZWFuO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxFeGVjUmVzdWx0PiB7XG4gICAgY29uc3QgeyBzcGF3biB9ID0gYXdhaXQgaW1wb3J0KFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpO1xuICAgIGNvbnN0IHBhdGggPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG4gICAgY29uc3QgY29tbWFuZElkID0gYGNvbW1hbmRfJHt1bGlkKCl9YDtcblxuICAgIGNvbnN0IGZpbmFsQ21kID0gb3B0cy5zdWRvID8gXCJzdWRvXCIgOiBvcHRzLmNvbW1hbmQ7XG4gICAgY29uc3QgZmluYWxBcmdzID0gb3B0cy5zdWRvXG4gICAgICA/IFtvcHRzLmNvbW1hbmQsIC4uLihvcHRzLmFyZ3MgPz8gW10pXVxuICAgICAgOiAob3B0cy5hcmdzID8/IFtdKTtcblxuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oZmluYWxDbWQsIGZpbmFsQXJncywge1xuICAgICAgY3dkOiBvcHRzLmN3ZCA/IHBhdGgucmVzb2x2ZSh0aGlzLmJhc2VQYXRoLCBvcHRzLmN3ZCkgOiB0aGlzLmJhc2VQYXRoLFxuICAgICAgZW52OiBvcHRzLmVudiA/IHsgLi4ucHJvY2Vzcy5lbnYsIC4uLm9wdHMuZW52IH0gOiB1bmRlZmluZWQsXG4gICAgICBzaWduYWw6IG9wdHMuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9jZXNzZXMuc2V0KGNvbW1hbmRJZCwgY2hpbGQpO1xuXG4gICAgbGV0IHN0ZG91dCA9IFwiXCI7XG4gICAgbGV0IHN0ZGVyciA9IFwiXCI7XG4gICAgY29uc3QgbG9nUXVldWU6IHsgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjsgZGF0YTogc3RyaW5nIH1bXSA9IFtdO1xuICAgIGxldCBsb2dSZXNvbHZlOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgY2xvc2VkID0gZmFsc2U7XG5cbiAgICBjaGlsZC5zdGRvdXQub24oXCJkYXRhXCIsIChkYXRhOiBzdHJpbmcgfCBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IHN0ciA9IFN0cmluZyhkYXRhKTtcbiAgICAgIHN0ZG91dCArPSBzdHI7XG4gICAgICBsb2dRdWV1ZS5wdXNoKHsgc3RyZWFtOiBcInN0ZG91dFwiLCBkYXRhOiBzdHIgfSk7XG4gICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICB9KTtcblxuICAgIGNoaWxkLnN0ZGVyci5vbihcImRhdGFcIiwgKGRhdGE6IHN0cmluZyB8IEJ1ZmZlcikgPT4ge1xuICAgICAgY29uc3Qgc3RyID0gU3RyaW5nKGRhdGEpO1xuICAgICAgc3RkZXJyICs9IHN0cjtcbiAgICAgIGxvZ1F1ZXVlLnB1c2goeyBzdHJlYW06IFwic3RkZXJyXCIsIGRhdGE6IHN0ciB9KTtcbiAgICAgIGxvZ1Jlc29sdmU/LigpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFByb21pc2U8e1xuICAgICAgc3Rkb3V0OiBzdHJpbmc7XG4gICAgICBzdGRlcnI6IHN0cmluZztcbiAgICAgIGV4aXRDb2RlOiBudW1iZXI7XG4gICAgfT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VzLmRlbGV0ZShjb21tYW5kSWQpO1xuICAgICAgICBjbG9zZWQgPSB0cnVlO1xuICAgICAgICBsb2dSZXNvbHZlPy4oKTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGQub24oXCJjbG9zZVwiLCAoY29kZTogbnVtYmVyIHwgbnVsbCkgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUoY29tbWFuZElkKTtcbiAgICAgICAgY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgbG9nUmVzb2x2ZT8uKCk7XG4gICAgICAgIHJlc29sdmUoeyBzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGU6IGNvZGUgPz8gMCB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24qIGxvZ3MoKTogQXN5bmNJdGVyYWJsZTx7XG4gICAgICBzdHJlYW06IFwic3Rkb3V0XCIgfCBcInN0ZGVyclwiO1xuICAgICAgZGF0YTogc3RyaW5nO1xuICAgIH0+IHtcbiAgICAgIHdoaWxlICghY2xvc2VkIHx8IGxvZ1F1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSBsb2dRdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB5aWVsZCBlbnRyeTtcbiAgICAgICAgfSBlbHNlIGlmICghY2xvc2VkKSB7XG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHIpID0+IHtcbiAgICAgICAgICAgIGxvZ1Jlc29sdmUgPSByO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGxvZ1Jlc29sdmUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29tbWFuZElkLCBsb2dzLCByZXN1bHQgfTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRGaWxlKG9wdHM6IHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEJ1ZmZlciB8IG51bGw+IHtcbiAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydChcIm5vZGU6ZnMvcHJvbWlzZXNcIik7XG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IGltcG9ydChcIm5vZGU6cGF0aFwiKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLmJhc2VQYXRoLCBvcHRzLnBhdGgpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZnMucmVhZEZpbGUoZnVsbFBhdGgpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGlmIChcbiAgICAgICAgZSBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICAgIFwiY29kZVwiIGluIGUgJiZcbiAgICAgICAgKGUgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlID09PSBcIkVOT0VOVFwiXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHdyaXRlRmlsZXMob3B0czoge1xuICAgIGZpbGVzOiB7IHBhdGg6IHN0cmluZzsgY29udGVudDogc3RyaW5nIHwgQnVmZmVyIH1bXTtcbiAgICBkZXN0UGF0aDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZnMgPSBhd2FpdCBpbXBvcnQoXCJub2RlOmZzL3Byb21pc2VzXCIpO1xuICAgIGNvbnN0IHBhdGhNb2QgPSBhd2FpdCBpbXBvcnQoXCJub2RlOnBhdGhcIik7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIG9wdHMuZmlsZXMpIHtcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aE1vZC5yZXNvbHZlKHRoaXMuYmFzZVBhdGgsIG9wdHMuZGVzdFBhdGgsIGZpbGUucGF0aCk7XG4gICAgICBhd2FpdCBmcy5ta2RpcihwYXRoTW9kLmRpcm5hbWUoZnVsbFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShmdWxsUGF0aCwgZmlsZS5jb250ZW50KTtcbiAgICAgIGlmIChmaWxlLnBhdGguZW5kc1dpdGgoXCIuc2hcIikpIHtcbiAgICAgICAgYXdhaXQgZnMuY2htb2QoZnVsbFBhdGgsIDBvNzU1KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIGdldERvbWFpbihvcHRzOiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtvcHRzLnBvcnR9YDtcbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMga2lsbChvcHRzOiB7IGNvbW1hbmRJZDogc3RyaW5nOyBzaWduYWw/OiBBYm9ydFNpZ25hbCB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2hpbGQgPSB0aGlzLnByb2Nlc3Nlcy5nZXQob3B0cy5jb21tYW5kSWQpO1xuICAgIGlmIChjaGlsZCkge1xuICAgICAgY2hpbGQua2lsbChcIlNJR1RFUk1cIik7XG4gICAgICB0aGlzLnByb2Nlc3Nlcy5kZWxldGUob3B0cy5jb21tYW5kSWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgYXN5bmMgZ2V0U3RhdHVzKCk6IFByb21pc2U8XCJydW5uaW5nXCI+IHtcbiAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBuby1vcDogbG9jYWwgc2FuZGJveCBpcyBhbHdheXMgc3RhcnRlZFxuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcInN0b3AgaXMgbm90IHN1cHBvcnRlZCBmb3IgbG9jYWwgc2FuZGJveGVzXCIpO1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy91c2VBd2FpdDogLlxuICBhc3luYyBzbmFwc2hvdCgpOiBQcm9taXNlPHsgc25hcHNob3RJZDogc3RyaW5nIH0+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJzbmFwc2hvdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBsb2NhbCBzYW5kYm94ZXNcIik7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiAuXG4gIGFzeW5jIHVwZGF0ZU5ldHdvcmtQb2xpY3koKTogUHJvbWlzZTxuZXZlcj4ge1xuICAgIHRocm93IG5ldyBFcnJvcihcInVwZGF0ZU5ldHdvcmtQb2xpY3kgaXMgbm90IHN1cHBvcnRlZCBmb3IgbG9jYWwgc2FuZGJveGVzXCIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NhbFNhbmRib3goXG4gIGRlZmF1bHRzPzogUGFydGlhbDxpbXBvcnQoXCIuLi9hZGFwdGVyXCIpLlNhbmRib3hTZXR1cEZpZWxkcz4gJiB7XG4gICAgcnVuPzogKHNhbmRib3g6IFNhbmRib3hJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICBjb25maWc/OiBMb2NhbEJpbmRpbmdDb25maWc7XG4gIH1cbik6IFNhbmRib3hCaW5kaW5nPFwibG9jYWxcIiwgTG9jYWxCaW5kaW5nQ29uZmlnLCBMb2NhbEJpbmRpbmdNZXRhZGF0YT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwibG9jYWxcIixcbiAgICBkZWZhdWx0cyxcbiAgICBhc3luYyBjcmVhdGUob3B0cykge1xuICAgICAgY29uc3QgYmFzZVBhdGggPSBvcHRzLnNldHVwLmNvbmZpZz8uY3dkID8/IHByb2Nlc3MuY3dkKCk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBMb2NhbFNhbmRib3hJbnN0YW5jZShiYXNlUGF0aCk7XG5cbiAgICAgIGlmIChvcHRzLnNldHVwPy5ydW4pIHtcbiAgICAgICAgYXdhaXQgb3B0cy5zZXR1cC5ydW4oaW5zdGFuY2UpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgbWV0YWRhdGE6IHsgYmFzZVBhdGgsIHBpZDogcHJvY2Vzcy5waWQgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IC5cbiAgICBhc3luYyBjb25uZWN0KG9wdHMpIHtcbiAgICAgIGNvbnN0IGJhc2VQYXRoID0gb3B0cy5tZXRhZGF0YS5iYXNlUGF0aDtcbiAgICAgIHJldHVybiBuZXcgTG9jYWxTYW5kYm94SW5zdGFuY2UoYmFzZVBhdGgpO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgc3RhcnQgYXMgc3RhcnRXb3JrZmxvdyB9IGZyb20gXCJ3b3JrZmxvdy9hcGlcIjtcbmltcG9ydCB0eXBlIHsgU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9zdG9yYWdlXCI7XG5pbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gXCIuLi8uLi91dGlscy9sb2dnZXJcIjtcbmltcG9ydCB0eXBlIHsgRXhlY1Jlc3VsdCwgU2FuZGJveEJpbmRpbmcsIFNhbmRib3hJbnN0YW5jZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IExpZmVjeWNsZUNvbmZpZyB9IGZyb20gXCIuL3ZlcmNlbC1saWZlY3ljbGUvc3RlcHNcIjtcbmltcG9ydCB7IHNhbmRib3hMaWZlY3ljbGVXb3JrZmxvdyB9IGZyb20gXCIuL3ZlcmNlbC1saWZlY3ljbGUvd29ya2Zsb3dcIjtcblxuYXN5bmMgZnVuY3Rpb24gbG9hZFNhbmRib3hTREsoKSB7XG4gIHJldHVybiAoYXdhaXQgaW1wb3J0KFwiQHZlcmNlbC9zYW5kYm94XCIpKS5TYW5kYm94O1xufVxuXG5jb25zdCBNQVhfVElNRU9VVF9NUyA9IDUgKiA2MCAqIDYwICogMTAwMDsgLy8gNSBob3Vyc1xuY29uc3QgSE9NRV9ESVIgPSBcIi9ob21lL3ZlcmNlbC1zYW5kYm94XCI7XG5jb25zdCBERUZBVUxUX1ZDUFVTID0gMjtcblxuZXhwb3J0IHR5cGUgVmVyY2VsQmluZGluZ0NvbmZpZyA9IHtcbiAgY3dkPzogc3RyaW5nO1xuICByZXNvdXJjZXM/OiB7IHZjcHVzOiBudW1iZXIgfTtcbiAgcG9ydHM/OiBudW1iZXJbXTtcbiAgbmV0d29ya1BvbGljeT86IGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKS5OZXR3b3JrUG9saWN5O1xuICBzbmFwc2hvdElkPzogc3RyaW5nO1xuICBsaWZlY3ljbGU/OiBMaWZlY3ljbGVDb25maWc7XG59O1xuXG5leHBvcnQgdHlwZSBWZXJjZWxCaW5kaW5nTWV0YWRhdGEgPSB7XG4gIHNhbmRib3hJZDogc3RyaW5nO1xufTtcblxudHlwZSBDcmVhdGVTYW5kYm94T3B0cyA9IHtcbiAgcmVzb3VyY2VzOiB7IHZjcHVzOiBudW1iZXIgfTtcbiAgcG9ydHM/OiBudW1iZXJbXTtcbiAgbmV0d29ya1BvbGljeT86IGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKS5OZXR3b3JrUG9saWN5O1xuICBzbmFwc2hvdElkPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gaXNTYW5kYm94R29uZUVycm9yKGU6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCEoZSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1cyA9XG4gICAgKGUgYXMgeyByZXNwb25zZT86IHsgc3RhdHVzPzogbnVtYmVyIH0gfSkucmVzcG9uc2U/LnN0YXR1cyA/P1xuICAgIChlIGFzIHsgY2F1c2U/OiB7IHJlc3BvbnNlPzogeyBzdGF0dXM/OiBudW1iZXIgfSB9IH0pLmNhdXNlPy5yZXNwb25zZVxuICAgICAgPy5zdGF0dXM7XG5cbiAgaWYgKHN0YXR1cyA9PT0gNDEwIHx8IHN0YXR1cyA9PT0gNDIyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBtc2cgPSBlLm1lc3NhZ2UgfHwgU3RyaW5nKGUpO1xuICByZXR1cm4gKFxuICAgIG1zZy5pbmNsdWRlcyhcIkV4cGVjdGVkIGEgc3RyZWFtIG9mIGNvbW1hbmQgZGF0YVwiKSB8fFxuICAgIG1zZy5pbmNsdWRlcyhcIkV4cGVjdGVkIGEgc3RyZWFtIG9mIGxvZ3NcIilcbiAgKTtcbn1cblxuY29uc3QgZ2V0VGVzdENyZWRlbnRpYWxzID0gKCkgPT5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiXG4gICAgPyB7XG4gICAgICAgIHRva2VuOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9UT0tFTixcbiAgICAgICAgdGVhbUlkOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9URUFNX0lELFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2Nlc3MuZW52LlRFU1RfVkVSQ0VMX1BST0pFQ1RfSUQsXG4gICAgICB9XG4gICAgOiB7fTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlU2RrKHtcbiAgcmVzb3VyY2VzLFxuICBwb3J0cyxcbiAgbmV0d29ya1BvbGljeSxcbiAgc25hcHNob3RJZCxcbn06IENyZWF0ZVNhbmRib3hPcHRzKSB7XG4gIGNvbnN0IFNhbmRib3hTREsgPSBhd2FpdCBsb2FkU2FuZGJveFNESygpO1xuICBjb25zdCBiYXNlID0ge1xuICAgIHJlc291cmNlcyxcbiAgICB0aW1lb3V0OiBNQVhfVElNRU9VVF9NUyxcbiAgICAuLi4ocG9ydHMgPyB7IHBvcnRzIH0gOiB7fSksXG4gICAgLi4uKG5ldHdvcmtQb2xpY3kgPyB7IG5ldHdvcmtQb2xpY3kgfSA6IHt9KSxcbiAgICAuLi5nZXRUZXN0Q3JlZGVudGlhbHMoKSxcbiAgfTtcblxuICBpZiAoc25hcHNob3RJZCkge1xuICAgIHJldHVybiBTYW5kYm94U0RLLmNyZWF0ZSh7XG4gICAgICAuLi5iYXNlLFxuICAgICAgc291cmNlOiB7IHR5cGU6IFwic25hcHNob3RcIiBhcyBjb25zdCwgc25hcHNob3RJZCB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIFNhbmRib3hTREsuY3JlYXRlKGJhc2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVTZXR1cFNuYXBzaG90KHtcbiAgc2FuZGJveE9wdHMsXG4gIHJ1bixcbiAgc3RvcmFnZSxcbiAgc25hcHNob3RWZXJzaW9uLFxuICBsb2csXG59OiB7XG4gIHNhbmRib3hPcHRzOiBDcmVhdGVTYW5kYm94T3B0cztcbiAgcnVuOiAoc2FuZGJveDogU2FuZGJveEluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBzdG9yYWdlOiBTdG9yYWdlO1xuICBzbmFwc2hvdFZlcnNpb246IHN0cmluZztcbiAgbG9nOiBMb2dnZXI7XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCB0ZW1wU2RrOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZVNkaz4+IHwgbnVsbCA9IG51bGw7XG4gIHRyeSB7XG4gICAgdGVtcFNkayA9IGF3YWl0IGNyZWF0ZVNkayhzYW5kYm94T3B0cyk7XG4gICAgY29uc3QgdGVtcEluc3RhbmNlID0gbmV3IFZlcmNlbFNhbmRib3hJbnN0YW5jZSh0ZW1wU2RrKTtcbiAgICBhd2FpdCBydW4odGVtcEluc3RhbmNlKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRlbXBTZGsuc25hcHNob3QoKTtcbiAgICBhd2FpdCBzdG9yYWdlLnNldHVwLnNldChzbmFwc2hvdFZlcnNpb24sIHtcbiAgICAgIHZlcnNpb246IHNuYXBzaG90VmVyc2lvbixcbiAgICAgIHNuYXBzaG90SWQ6IHNuYXBzaG90LnNuYXBzaG90SWQsXG4gICAgICBjcmVhdGVkQXQ6IERhdGUubm93KCksXG4gICAgICBsYXN0VXNlZEF0OiBudWxsLFxuICAgIH0pO1xuICAgIGF3YWl0IHRlbXBTZGsuc3RvcCgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nLmVycm9yKFwiZmFpbGVkIHRvIGNyZWF0ZSBzZXR1cCBzbmFwc2hvdFwiLCB7XG4gICAgICBzbmFwc2hvdFZlcnNpb24sXG4gICAgICBjYXVzZTogZXJyb3IsXG4gICAgfSk7XG4gICAgaWYgKHRlbXBTZGspIHtcbiAgICAgIGF3YWl0IHRlbXBTZGsuc3RvcCgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFZlcmNlbFNhbmRib3hJbnN0YW5jZSBpbXBsZW1lbnRzIFNhbmRib3hJbnN0YW5jZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2RrOiBpbXBvcnQoXCJAdmVyY2VsL3NhbmRib3hcIikuU2FuZGJveDtcbiAgcmVhZG9ubHkgY3dkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2RrOiBpbXBvcnQoXCJAdmVyY2VsL3NhbmRib3hcIikuU2FuZGJveCwgY3dkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5zZGsgPSBzZGs7XG4gICAgdGhpcy5jd2QgPSBjd2QgPz8gSE9NRV9ESVI7XG4gIH1cblxuICBhc3luYyBleGVjKHtcbiAgICBjb21tYW5kLFxuICAgIGFyZ3MsXG4gICAgY3dkLFxuICAgIGVudixcbiAgICBzdWRvLFxuICAgIHNpZ25hbCxcbiAgfToge1xuICAgIGNvbW1hbmQ6IHN0cmluZztcbiAgICBhcmdzPzogc3RyaW5nW107XG4gICAgY3dkPzogc3RyaW5nO1xuICAgIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgc3Vkbz86IGJvb2xlYW47XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPEV4ZWNSZXN1bHQ+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB0aGlzLnNkay5ydW5Db21tYW5kKHtcbiAgICAgIGNtZDogY29tbWFuZCxcbiAgICAgIGFyZ3MsXG4gICAgICBjd2Q6IGN3ZCA/PyB0aGlzLmN3ZCxcbiAgICAgIGVudixcbiAgICAgIHN1ZG8sXG4gICAgICBzaWduYWwsXG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGxldCBzdGRvdXQgPSBcIlwiO1xuICAgIGxldCBzdGRlcnIgPSBcIlwiO1xuICAgIGNvbnN0IGxvZ0J1ZmZlcjogeyBzdHJlYW06IFwic3Rkb3V0XCIgfCBcInN0ZGVyclwiOyBkYXRhOiBzdHJpbmcgfVtdID0gW107XG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICByZXNvbHZlOiBudWxsIGFzICgoKSA9PiB2b2lkKSB8IG51bGwsXG4gICAgICBjb25zdW1lZDogZmFsc2UsXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnN1bWVMb2dzID0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgZW50cnkgb2Ygb3V0cHV0LmxvZ3MoKSkge1xuICAgICAgICAgIGlmIChlbnRyeS5zdHJlYW0gPT09IFwic3Rkb3V0XCIpIHtcbiAgICAgICAgICAgIHN0ZG91dCArPSBlbnRyeS5kYXRhO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGRlcnIgKz0gZW50cnkuZGF0YTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2dCdWZmZXIucHVzaChlbnRyeSk7XG4gICAgICAgICAgc3RhdGUucmVzb2x2ZT8uKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTYW5kYm94IG1heSBoYXZlIGJlZW4gc3RvcHBlZCBcdTIwMTQgbG9ncyBlbmRwb2ludCByZXR1cm5zIDQyMlxuICAgICAgfVxuICAgICAgc3RhdGUuY29uc3VtZWQgPSB0cnVlO1xuICAgICAgc3RhdGUucmVzb2x2ZT8uKCk7XG4gICAgfSkoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBsb2dzKCk6IEFzeW5jSXRlcmFibGU8e1xuICAgICAgc3RyZWFtOiBcInN0ZG91dFwiIHwgXCJzdGRlcnJcIjtcbiAgICAgIGRhdGE6IHN0cmluZztcbiAgICB9PiB7XG4gICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgd2hpbGUgKCFzdGF0ZS5jb25zdW1lZCB8fCBpbmRleCA8IGxvZ0J1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGluZGV4IDwgbG9nQnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgIHlpZWxkIGxvZ0J1ZmZlcltpbmRleCsrXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocikgPT4ge1xuICAgICAgICAgICAgc3RhdGUucmVzb2x2ZSA9IHI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc3RhdGUucmVzb2x2ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjb25zdW1lTG9ncy50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpbmlzaGVkID0gYXdhaXQgb3V0cHV0LndhaXQoKTtcbiAgICAgICAgcmV0dXJuIHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiBmaW5pc2hlZC5leGl0Q29kZSB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaXNTYW5kYm94R29uZUVycm9yKGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHsgc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlOiAxIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7IGNvbW1hbmRJZDogb3V0cHV0LmNtZElkLCBsb2dzLCByZXN1bHQgfTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRGaWxlKHtcbiAgICBwYXRoOiBmaWxlUGF0aCxcbiAgfToge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8QnVmZmVyIHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZGsucmVhZEZpbGVUb0J1ZmZlcih7IHBhdGg6IGZpbGVQYXRoLCBjd2Q6IHRoaXMuY3dkIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgd3JpdGVGaWxlcyh7XG4gICAgZmlsZXMsXG4gICAgZGVzdFBhdGgsXG4gIH06IHtcbiAgICBmaWxlczogeyBwYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB8IEJ1ZmZlciB9W107XG4gICAgZGVzdFBhdGg6IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICAgIGNvbnN0IG5hdGl2ZUZpbGVzID0gZmlsZXMubWFwKChmaWxlKSA9PiB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucG9zaXguam9pbihkZXN0UGF0aCwgZmlsZS5wYXRoKTtcbiAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IHBhdGgucG9zaXguaXNBYnNvbHV0ZShmaWxlUGF0aClcbiAgICAgICAgPyBmaWxlUGF0aFxuICAgICAgICA6IHBhdGgucG9zaXguam9pbih0aGlzLmN3ZCwgZmlsZVBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogYWJzb2x1dGVQYXRoLFxuICAgICAgICBjb250ZW50OlxuICAgICAgICAgIHR5cGVvZiBmaWxlLmNvbnRlbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgID8gQnVmZmVyLmZyb20oZmlsZS5jb250ZW50KVxuICAgICAgICAgICAgOiBmaWxlLmNvbnRlbnQsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5zZGsud3JpdGVGaWxlcyhuYXRpdmVGaWxlcyk7XG5cbiAgICBjb25zdCBzaGVsbFNjcmlwdHMgPSBuYXRpdmVGaWxlcy5maWx0ZXIoKGYpID0+IGYucGF0aC5lbmRzV2l0aChcIi5zaFwiKSk7XG4gICAgaWYgKHNoZWxsU2NyaXB0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWMoe1xuICAgICAgICBjb21tYW5kOiBcImNobW9kXCIsXG4gICAgICAgIGFyZ3M6IFtcIit4XCIsIC4uLnNoZWxsU2NyaXB0cy5tYXAoKGYpID0+IGYucGF0aCldLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCByZXN1bHQucmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvdXNlQXdhaXQ6IHN5bmNocm9ub3VzIFNESyBjYWxsXG4gIGFzeW5jIGdldERvbWFpbih7XG4gICAgcG9ydCxcbiAgfToge1xuICAgIHBvcnQ6IG51bWJlcjtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc2RrLmRvbWFpbihwb3J0KTtcbiAgfVxuXG4gIGFzeW5jIGtpbGwoe1xuICAgIGNvbW1hbmRJZCxcbiAgfToge1xuICAgIGNvbW1hbmRJZDogc3RyaW5nO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY21kID0gYXdhaXQgdGhpcy5zZGsuZ2V0Q29tbWFuZChjb21tYW5kSWQpO1xuICAgIGF3YWl0IGNtZC5raWxsKCk7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL3VzZUF3YWl0OiBzeW5jaHJvbm91cyBTREsgZ2V0dGVyXG4gIGFzeW5jIGdldFN0YXR1cygpOiBQcm9taXNlPFxuICAgIFwicGVuZGluZ1wiIHwgXCJydW5uaW5nXCIgfCBcInN0b3BwaW5nXCIgfCBcInN0b3BwZWRcIiB8IFwiZmFpbGVkXCJcbiAgPiB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5zZGsuc3RhdHVzO1xuICAgIC8vIE1hcCBTREstb25seSBzdGF0dXNlcyB0byBvdXIgaW50ZXJmYWNlJ3MgdW5pb25cbiAgICBpZiAoc3RhdHVzID09PSBcInNuYXBzaG90dGluZ1wiKSB7XG4gICAgICByZXR1cm4gXCJzdG9wcGluZ1wiO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID09PSBcImFib3J0ZWRcIikge1xuICAgICAgcmV0dXJuIFwiZmFpbGVkXCI7XG4gICAgfVxuICAgIHJldHVybiBzdGF0dXM7XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUaGUgVmVyY2VsIFNESyBkb2Vzbid0IGhhdmUgYSByZXN1bWUgbWV0aG9kLlxuICAgIC8vIFJ1biBhIG5vLW9wIGNvbW1hbmQgdG8gdmVyaWZ5IHRoZSBzYW5kYm94IGlzIHJlYWNoYWJsZS5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWMoeyBjb21tYW5kOiBcInRydWVcIiB9KTtcbiAgICBhd2FpdCByZXN1bHQucmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNkay5zdG9wKCk7XG4gIH1cblxuICBhc3luYyBzbmFwc2hvdCgpOiBQcm9taXNlPHsgc25hcHNob3RJZDogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBzbmFwID0gYXdhaXQgdGhpcy5zZGsuc25hcHNob3QoKTtcbiAgICByZXR1cm4geyBzbmFwc2hvdElkOiBzbmFwLnNuYXBzaG90SWQgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZU5ldHdvcmtQb2xpY3koe1xuICAgIHBvbGljeSxcbiAgfToge1xuICAgIHBvbGljeTogaW1wb3J0KFwiQHZlcmNlbC9zYW5kYm94XCIpLk5ldHdvcmtQb2xpY3k7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKS5OZXR3b3JrUG9saWN5PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2RrLnVwZGF0ZU5ldHdvcmtQb2xpY3kocG9saWN5KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmVyY2VsU2FuZGJveChcbiAgZGVmYXVsdHM/OiBQYXJ0aWFsPGltcG9ydChcIi4uL2FkYXB0ZXJcIikuU2FuZGJveFNldHVwRmllbGRzPiAmIHtcbiAgICBydW4/OiAoc2FuZGJveDogU2FuZGJveEluc3RhbmNlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIGNvbmZpZz86IFZlcmNlbEJpbmRpbmdDb25maWc7XG4gIH1cbik6IFNhbmRib3hCaW5kaW5nPFwidmVyY2VsXCIsIFZlcmNlbEJpbmRpbmdDb25maWcsIFZlcmNlbEJpbmRpbmdNZXRhZGF0YT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwidmVyY2VsXCIsXG4gICAgZGVmYXVsdHMsXG4gICAgYXN5bmMgY3JlYXRlKHsgY3dkOiBjcmVhdGVDd2QsIGFnZW50LCBzZXR1cCwgcmVjb3JkLCBzaWduYWw6IF9zaWduYWwsIGxvZyB9KSB7XG4gICAgICBjb25zdCBzdG9yYWdlID0gYWdlbnQuc3RvcmFnZTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHNldHVwLmNvbmZpZyA/PyB7fTtcbiAgICAgIGNvbnN0IGN3ZCA9IGNvbmZpZy5jd2QgPz8gY3JlYXRlQ3dkID8/IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlc291cmNlcyA9IGNvbmZpZy5yZXNvdXJjZXMgPz8geyB2Y3B1czogREVGQVVMVF9WQ1BVUyB9O1xuICAgICAgY29uc3QgcG9ydHMgPSBjb25maWcucG9ydHM7XG4gICAgICBjb25zdCBuZXR3b3JrUG9saWN5ID1cbiAgICAgICAgY29uZmlnLm5ldHdvcmtQb2xpY3kgPz8gc2V0dXAubmV0d29ya1BvbGljeSA/PyB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IHNhbmRib3hPcHRzOiBDcmVhdGVTYW5kYm94T3B0cyA9IHtcbiAgICAgICAgcmVzb3VyY2VzLFxuICAgICAgICBwb3J0cyxcbiAgICAgICAgbmV0d29ya1BvbGljeSxcbiAgICAgICAgc25hcHNob3RJZDogY29uZmlnLnNuYXBzaG90SWQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBfc3RhcnRMaWZlY3ljbGUgPSAodmVyY2VsU2FuZGJveElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCFyZWNvcmQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRXb3JrZmxvdyhzYW5kYm94TGlmZWN5Y2xlV29ya2Zsb3csIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnB1dDoge1xuICAgICAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICAgICAgc2FuZGJveElkOiByZWNvcmQuaWQsXG4gICAgICAgICAgICAgIHZlcmNlbFNhbmRib3hJZCxcbiAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcubGlmZWN5Y2xlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgIGxvZy5lcnJvcihcImZhaWxlZCB0byBzdGFydCBsaWZlY3ljbGUgd29ya2Zsb3dcIiwgeyBjYXVzZTogZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBpZiAoc2V0dXAudmVyc2lvbikge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHN0b3JhZ2Uuc2V0dXAuZ2V0KHNldHVwLnZlcnNpb24pO1xuICAgICAgICBpZiAoZXhpc3Rpbmc/LnNuYXBzaG90SWQpIHtcbiAgICAgICAgICBjb25zdCBzZGsgPSBhd2FpdCBjcmVhdGVTZGsoe1xuICAgICAgICAgICAgLi4uc2FuZGJveE9wdHMsXG4gICAgICAgICAgICBzbmFwc2hvdElkOiBleGlzdGluZy5zbmFwc2hvdElkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFZlcmNlbFNhbmRib3hJbnN0YW5jZShzZGssIGN3ZCk7XG5cbiAgICAgICAgICBzdG9yYWdlLnNldHVwXG4gICAgICAgICAgICAuc2V0KHNldHVwLnZlcnNpb24sIHtcbiAgICAgICAgICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAgICAgICAgIHZlcnNpb246IHNldHVwLnZlcnNpb24sXG4gICAgICAgICAgICAgIGxhc3RVc2VkQXQ6IERhdGUubm93KCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICBtZXRhZGF0YTogeyBzYW5kYm94SWQ6IHNkay5zYW5kYm94SWQgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzZXR1cC5ydW4pIHtcbiAgICAgICAgaWYgKCFzZXR1cC52ZXJzaW9uKSB7XG4gICAgICAgICAgbG9nLmVycm9yKFwic2V0dXAucnVuIHByb3ZpZGVkIHdpdGhvdXQgc2V0dXAudmVyc2lvblwiLCB7IHNldHVwIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHVwLnJ1biBwcm92aWRlZCB3aXRob3V0IHNldHVwLnZlcnNpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlU2V0dXBTbmFwc2hvdCh7XG4gICAgICAgICAgc2FuZGJveE9wdHMsXG4gICAgICAgICAgcnVuOiBzZXR1cC5ydW4sXG4gICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICBzbmFwc2hvdFZlcnNpb246IHNldHVwLnZlcnNpb24sXG4gICAgICAgICAgbG9nLFxuICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICBsb2cuZXJyb3IoXCJiYWNrZ3JvdW5kIHNldHVwIHNuYXBzaG90IGZhaWxlZFwiLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc2RrID0gYXdhaXQgY3JlYXRlU2RrKHNhbmRib3hPcHRzKTtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgVmVyY2VsU2FuZGJveEluc3RhbmNlKHNkaywgY3dkKTtcbiAgICAgICAgYXdhaXQgc2V0dXAucnVuKGluc3RhbmNlKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIG1ldGFkYXRhOiB7IHNhbmRib3hJZDogc2RrLnNhbmRib3hJZCB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZGsgPSBhd2FpdCBjcmVhdGVTZGsoc2FuZGJveE9wdHMpO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgVmVyY2VsU2FuZGJveEluc3RhbmNlKHNkaywgY3dkKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIG1ldGFkYXRhOiB7IHNhbmRib3hJZDogc2RrLnNhbmRib3hJZCB9LFxuICAgICAgfTtcbiAgICB9LFxuXG4gICAgYXN5bmMgY29ubmVjdCh7IG1ldGFkYXRhLCBjd2QgfSkge1xuICAgICAgY29uc3QgU2FuZGJveFNESyA9IGF3YWl0IGxvYWRTYW5kYm94U0RLKCk7XG4gICAgICBjb25zdCBzZGsgPSBhd2FpdCBTYW5kYm94U0RLLmdldCh7XG4gICAgICAgIHNhbmRib3hJZDogbWV0YWRhdGEuc2FuZGJveElkLFxuICAgICAgICAuLi5nZXRUZXN0Q3JlZGVudGlhbHMoKSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBWZXJjZWxTYW5kYm94SW5zdGFuY2Uoc2RrLCBjd2QgPz8gdW5kZWZpbmVkKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IHNsZWVwIH0gZnJvbSBcIndvcmtmbG93XCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQgeyBjaGVja0FuZFNuYXBzaG90U3RlcCwgdHlwZSBMaWZlY3ljbGVJbnB1dCB9IGZyb20gXCIuL3N0ZXBzXCI7XG5cbmV4cG9ydCB0eXBlIHsgTGlmZWN5Y2xlSW5wdXQgfTtcblxuY29uc3QgREVGQVVMVF9QT0xMX01TID0gMiAqIDYwICogMTAwMDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhbmRib3hMaWZlY3ljbGVXb3JrZmxvdyh7XG4gIGlucHV0LFxufToge1xuICBpbnB1dDogTGlmZWN5Y2xlSW5wdXQ7XG59KSB7XG4gIFwidXNlIHdvcmtmbG93XCI7XG5cbiAgbGV0IG5leHRQb2xsTXMgPSBpbnB1dC5jb25maWc/LnBvbGxJbnRlcnZhbE1zID8/IERFRkFVTFRfUE9MTF9NUztcbiAgY29uc3QgbG9nID0gY3JlYXRlTG9nZ2VyKHtcbiAgICBjb25maWc6IHsgLi4uaW5wdXQuYWdlbnQub3B0aW9ucy5sb2dnaW5nLCBuYW1lOiBpbnB1dC5hZ2VudC5uYW1lIH0sXG4gICAgc3Vic3lzdGVtOiBcInNhbmRib3g6bGlmZWN5Y2xlXCIsXG4gICAgY29udGV4dDogeyBzYW5kYm94SWQ6IGlucHV0LnNhbmRib3hJZCB9LFxuICB9KTtcblxuICBsb2cuaW5mbyhcImxpZmVjeWNsZSB3b3JrZmxvdyBzdGFydGVkXCIsIHtcbiAgICBzYW5kYm94SWQ6IGlucHV0LnNhbmRib3hJZCxcbiAgICB2ZXJjZWxTYW5kYm94SWQ6IGlucHV0LnZlcmNlbFNhbmRib3hJZCxcbiAgICBwb2xsTXM6IG5leHRQb2xsTXMsXG4gIH0pO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgYXdhaXQgc2xlZXAobmV4dFBvbGxNcyk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja0FuZFNuYXBzaG90U3RlcChpbnB1dCk7XG5cbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGxvZy5lcnJvcihcImxpZmVjeWNsZSBzdGVwIGZhaWxlZFwiLCB7XG4gICAgICAgIHNhbmRib3hJZDogaW5wdXQuc2FuZGJveElkLFxuICAgICAgICBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuYWN0aW9uID09PSBcImV4aXRcIikge1xuICAgICAgbG9nLmluZm8oXCJsaWZlY3ljbGUgd29ya2Zsb3cgZXhpdGluZ1wiLCB7XG4gICAgICAgIHNhbmRib3hJZDogaW5wdXQuc2FuZGJveElkLFxuICAgICAgICByZWFzb246IHJlc3VsdC5yZWFzb24sXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG5leHRQb2xsTXMgPSByZXN1bHQubmV4dFBvbGxNcztcbiAgfVxufVxuIiwgImV4cG9ydCB0eXBlIExvZ0xldmVsID0gXCJpbmZvXCIgfCBcIndhcm5cIiB8IFwiZXJyb3JcIiB8IFwic2lsZW50XCI7XG5cbmNvbnN0IExPR19MRVZFTF9QUklPUklUWTogUmVjb3JkPExvZ0xldmVsLCBudW1iZXI+ID0ge1xuICBpbmZvOiAwLFxuICB3YXJuOiAxLFxuICBlcnJvcjogMixcbiAgc2lsZW50OiAzLFxufTtcblxuZXhwb3J0IHR5cGUgTG9nQ29udGV4dCA9IHtcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBtZXNzYWdlSWQ/OiBzdHJpbmc7XG4gIHNhbmRib3hJZD86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIExvZ2dpbmdDb25maWcgPSB7XG4gIGxldmVsPzogTG9nTGV2ZWw7XG4gIC8qKlxuICAgKiBUb3AtbGV2ZWwgbGFiZWwgZm9yIGFsbCBsb2cgbGluZXMuXG4gICAqIEBkZWZhdWx0IFwiYWdlbnRcIlxuICAgKiBAZXhhbXBsZSBcIm15LWFwcFwiIFx1MjE5MiBbbXktYXBwOmRlZmF1bHQ6d29ya2Zsb3ddXG4gICAqL1xuICBwcmVmaXg/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBnZXRMZXZlbChjb25maWc6IExvZ2dpbmdDb25maWcpOiBMb2dMZXZlbCB7XG4gIHJldHVybiBjb25maWcubGV2ZWwgPz8gXCJ3YXJuXCI7XG59XG5cbmZ1bmN0aW9uIGdldFByZWZpeChjb25maWc6IExvZ2dpbmdDb25maWcpOiBzdHJpbmcge1xuICByZXR1cm4gY29uZmlnLnByZWZpeCA/PyBcImFnZW50XCI7XG59XG5cbmZ1bmN0aW9uIHNob3VsZExvZyhjb25maWc6IExvZ2dpbmdDb25maWcsIGxldmVsOiBMb2dMZXZlbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gTE9HX0xFVkVMX1BSSU9SSVRZW2xldmVsXSA+PSBMT0dfTEVWRUxfUFJJT1JJVFlbZ2V0TGV2ZWwoY29uZmlnKV07XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRhZyhjb25maWc6IExvZ2dpbmdDb25maWcsIHN1YnN5c3RlbTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBbJHtnZXRQcmVmaXgoY29uZmlnKX06JHtjb25maWcubmFtZX06JHtzdWJzeXN0ZW19XWA7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERhdGEoXG4gIGNvbnRleHQ6IExvZ0NvbnRleHQsXG4gIGV4dHJhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWVyZ2VkID0geyAuLi5jb250ZXh0LCAuLi5leHRyYSB9O1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMobWVyZ2VkKS5maWx0ZXIoXG4gICAgKFssIHZdKSA9PiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbFxuICApO1xuICBpZiAoZW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcyk7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dnZXIge1xuICByZWFkb25seSBzdWJzeXN0ZW06IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IExvZ2dpbmdDb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dDogTG9nQ29udGV4dDtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgc3Vic3lzdGVtLFxuICAgIGNvbmZpZyxcbiAgICBjb250ZXh0LFxuICB9OiB7XG4gICAgc3Vic3lzdGVtOiBzdHJpbmc7XG4gICAgY29uZmlnOiBMb2dnaW5nQ29uZmlnO1xuICAgIGNvbnRleHQ/OiBMb2dDb250ZXh0O1xuICB9KSB7XG4gICAgdGhpcy5zdWJzeXN0ZW0gPSBzdWJzeXN0ZW07XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dCA/PyB7fTtcbiAgfVxuXG4gIGNoaWxkKHtcbiAgICBzdWJzeXN0ZW0sXG4gICAgY29udGV4dCxcbiAgfToge1xuICAgIHN1YnN5c3RlbT86IHN0cmluZztcbiAgICBjb250ZXh0PzogTG9nQ29udGV4dDtcbiAgfSk6IExvZ2dlciB7XG4gICAgcmV0dXJuIG5ldyBMb2dnZXIoe1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIHN1YnN5c3RlbTogc3Vic3lzdGVtID8gYCR7dGhpcy5zdWJzeXN0ZW19OiR7c3Vic3lzdGVtfWAgOiB0aGlzLnN1YnN5c3RlbSxcbiAgICAgIGNvbnRleHQ6IHsgLi4udGhpcy5jb250ZXh0LCAuLi5jb250ZXh0IH0sXG4gICAgfSk7XG4gIH1cblxuICB3aXRoQ29udGV4dChjb250ZXh0OiBMb2dDb250ZXh0KTogTG9nZ2VyIHtcbiAgICByZXR1cm4gbmV3IExvZ2dlcih7XG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgc3Vic3lzdGVtOiB0aGlzLnN1YnN5c3RlbSxcbiAgICAgIGNvbnRleHQ6IHsgLi4udGhpcy5jb250ZXh0LCAuLi5jb250ZXh0IH0sXG4gICAgfSk7XG4gIH1cblxuICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKCFzaG91bGRMb2codGhpcy5jb25maWcsIFwiaW5mb1wiKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkID0gZm9ybWF0RGF0YSh0aGlzLmNvbnRleHQsIGRhdGEpO1xuICAgIGlmIChkKSB7XG4gICAgICBjb25zb2xlLmluZm8oZm9ybWF0VGFnKHRoaXMuY29uZmlnLCB0aGlzLnN1YnN5c3RlbSksIG1lc3NhZ2UsIGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmluZm8oZm9ybWF0VGFnKHRoaXMuY29uZmlnLCB0aGlzLnN1YnN5c3RlbSksIG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHdhcm4obWVzc2FnZTogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBpZiAoIXNob3VsZExvZyh0aGlzLmNvbmZpZywgXCJ3YXJuXCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGQgPSBmb3JtYXREYXRhKHRoaXMuY29udGV4dCwgZGF0YSk7XG4gICAgaWYgKGQpIHtcbiAgICAgIGNvbnNvbGUud2Fybihmb3JtYXRUYWcodGhpcy5jb25maWcsIHRoaXMuc3Vic3lzdGVtKSwgbWVzc2FnZSwgZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2Fybihmb3JtYXRUYWcodGhpcy5jb25maWcsIHRoaXMuc3Vic3lzdGVtKSwgbWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBpZiAoIXNob3VsZExvZyh0aGlzLmNvbmZpZywgXCJlcnJvclwiKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkID0gZm9ybWF0RGF0YSh0aGlzLmNvbnRleHQsIGRhdGEpO1xuICAgIGlmIChkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGZvcm1hdFRhZyh0aGlzLmNvbmZpZywgdGhpcy5zdWJzeXN0ZW0pLCBtZXNzYWdlLCBkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihmb3JtYXRUYWcodGhpcy5jb25maWcsIHRoaXMuc3Vic3lzdGVtKSwgbWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCwgbG9ncyB0aGUgZWxhcHNlZCB0aW1lIGF0IGluZm8gbGV2ZWwuXG4gICAqIFBhc3MgYGxvZ09uU3RhcnQ6IHRydWVgIHRvIGFsc28gbG9nIHdoZW4gdGhlIHRpbWVyIGJlZ2lucy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgZG9uZSA9IGxvZy50aW1lKFwic2FuZGJveCBzZXR1cFwiLCB7IHNhbmRib3hJZCB9LCB7IGxvZ09uU3RhcnQ6IHRydWUgfSk7XG4gICAqIGF3YWl0IHNldHVwKCk7XG4gICAqIGRvbmUoKTsgLy8gc3RhcnQ6IFthZ2VudDpkZWZhdWx0OnNhbmRib3hdIHNhbmRib3ggc2V0dXAgeyBzYW5kYm94SWQ6ICcuLi4nIH1cbiAgICogICAgICAgICAvLyBlbmQ6ICAgW2FnZW50OmRlZmF1bHQ6c2FuZGJveF0gc2FuZGJveCBzZXR1cCB7IHNhbmRib3hJZDogJy4uLicsIGR1cmF0aW9uTXM6IDEyMyB9XG4gICAqL1xuICB0aW1lKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgb3B0cz86IHsgbG9nT25TdGFydD86IGJvb2xlYW4gfVxuICApOiAoZW5kRGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkIHtcbiAgICBpZiAob3B0cz8ubG9nT25TdGFydCkge1xuICAgICAgdGhpcy5pbmZvKGBbc3RhcnRdICR7bWVzc2FnZX1gLCBkYXRhKTtcbiAgICB9XG4gICAgY29uc3QgdDAgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiAoZW5kRGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgICB0aGlzLmluZm8ob3B0cz8ubG9nT25TdGFydCA/IGBbZW5kXSAke21lc3NhZ2V9YCA6IG1lc3NhZ2UsIHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgLi4uZW5kRGF0YSxcbiAgICAgICAgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHQwLFxuICAgICAgfSk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTG9nZ2VyKHtcbiAgY29uZmlnLFxuICBzdWJzeXN0ZW0sXG4gIGNvbnRleHQsXG59OiB7XG4gIGNvbmZpZzogTG9nZ2luZ0NvbmZpZztcbiAgc3Vic3lzdGVtOiBzdHJpbmc7XG4gIGNvbnRleHQ/OiBMb2dDb250ZXh0O1xufSk6IExvZ2dlciB7XG4gIHJldHVybiBuZXcgTG9nZ2VyKHsgY29uZmlnLCBzdWJzeXN0ZW0sIGNvbnRleHQgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTYW5kYm94IGFzIFZlcmNlbFNhbmRib3hTREsgfSBmcm9tIFwiQHZlcmNlbC9zYW5kYm94XCI7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvbG9nZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFNhbmRib3hBZ2VudFJlZiB9IGZyb20gXCIuLi8uLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFZlcmNlbEJpbmRpbmdNZXRhZGF0YSB9IGZyb20gXCIuLi92ZXJjZWxcIjtcblxuYXN5bmMgZnVuY3Rpb24gbG9hZFNhbmRib3hTREsoKTogUHJvbWlzZTx0eXBlb2YgVmVyY2VsU2FuZGJveFNESz4ge1xuICByZXR1cm4gKGF3YWl0IGltcG9ydChcIkB2ZXJjZWwvc2FuZGJveFwiKSkuU2FuZGJveDtcbn1cblxuY29uc3QgREVGQVVMVF9QT0xMX0lOVEVSVkFMX01TID0gMiAqIDYwICogMTAwMDtcbmNvbnN0IERFRkFVTFRfSURMRV9USU1FT1VUX01TID0gNSAqIDYwICogMTAwMDtcbmNvbnN0IFNOQVBTSE9UX0JFRk9SRV9USU1FT1VUX01TID0gMTAgKiA2MCAqIDEwMDA7XG5cbmNvbnN0IGdldFRlc3RDcmVkZW50aWFscyA9ICgpID0+XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInRlc3RcIlxuICAgID8ge1xuICAgICAgICB0b2tlbjogcHJvY2Vzcy5lbnYuVEVTVF9WRVJDRUxfVE9LRU4sXG4gICAgICAgIHRlYW1JZDogcHJvY2Vzcy5lbnYuVEVTVF9WRVJDRUxfVEVBTV9JRCxcbiAgICAgICAgcHJvamVjdElkOiBwcm9jZXNzLmVudi5URVNUX1ZFUkNFTF9QUk9KRUNUX0lELFxuICAgICAgfVxuICAgIDoge307XG5cbmV4cG9ydCB0eXBlIExpZmVjeWNsZVN0ZXBSZXN1bHQgPVxuICB8IHsgYWN0aW9uOiBcImNvbnRpbnVlXCI7IG5leHRQb2xsTXM6IG51bWJlciB9XG4gIHwge1xuICAgICAgYWN0aW9uOiBcImV4aXRcIjtcbiAgICAgIHJlYXNvbjogXCJzYW5kYm94SWRfY2hhbmdlZFwiIHwgXCJpZGxlXCIgfCBcInRpbWVvdXRcIiB8IFwibm90X2ZvdW5kXCI7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgTGlmZWN5Y2xlQ29uZmlnID0ge1xuICBwb2xsSW50ZXJ2YWxNcz86IG51bWJlcjtcbiAgc3RvcEFmdGVySW5hY3RpdmVNcz86IG51bWJlcjtcbiAgc25hcHNob3RCZWZvcmVUaW1lb3V0TXM/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBMaWZlY3ljbGVJbnB1dCA9IHtcbiAgYWdlbnQ6IFNhbmRib3hBZ2VudFJlZjtcbiAgc2FuZGJveElkOiBzdHJpbmc7XG4gIHZlcmNlbFNhbmRib3hJZDogc3RyaW5nO1xuICBjb25maWc/OiBMaWZlY3ljbGVDb25maWc7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tBbmRTbmFwc2hvdFN0ZXAoXG4gIGlucHV0OiBMaWZlY3ljbGVJbnB1dFxuKTogUHJvbWlzZTxFcnJvciB8IExpZmVjeWNsZVN0ZXBSZXN1bHQ+IHtcbiAgXCJ1c2Ugc3RlcFwiO1xuXG4gIGNvbnN0IHN0b3JhZ2UgPSBpbnB1dC5hZ2VudC5zdG9yYWdlO1xuICBjb25zdCBsb2cgPSBjcmVhdGVMb2dnZXIoe1xuICAgIGNvbmZpZzogeyAuLi5pbnB1dC5hZ2VudC5vcHRpb25zLmxvZ2dpbmcsIG5hbWU6IGlucHV0LmFnZW50Lm5hbWUgfSxcbiAgICBzdWJzeXN0ZW06IFwic2FuZGJveDpsaWZlY3ljbGVcIixcbiAgICBjb250ZXh0OiB7IHNhbmRib3hJZDogaW5wdXQuc2FuZGJveElkIH0sXG4gIH0pO1xuXG4gIGxvZy5pbmZvKFwibGlmZWN5Y2xlIGNoZWNrIHN0YXJ0ZWRcIiwge1xuICAgIHZlcmNlbFNhbmRib3hJZDogaW5wdXQudmVyY2VsU2FuZGJveElkLFxuICB9KTtcblxuICBjb25zdCByZWNvcmQgPSBhd2FpdCBzdG9yYWdlLnNhbmRib3guZ2V0KGlucHV0LnNhbmRib3hJZCk7XG4gIGlmICghcmVjb3JkKSB7XG4gICAgbG9nLndhcm4oXCJzYW5kYm94IHJlY29yZCBub3QgZm91bmQsIGV4aXRpbmcgbGlmZWN5Y2xlXCIpO1xuICAgIHJldHVybiB7IGFjdGlvbjogXCJleGl0XCIsIHJlYXNvbjogXCJub3RfZm91bmRcIiB9O1xuICB9XG5cbiAgY29uc3QgbWV0YWRhdGEgPSByZWNvcmQuc2V0dXA/Lm1ldGFkYXRhIGFzIFZlcmNlbEJpbmRpbmdNZXRhZGF0YSB8IG51bGw7XG4gIGNvbnN0IGN1cnJlbnRTYW5kYm94SWQgPSBtZXRhZGF0YT8uc2FuZGJveElkID8/IG51bGw7XG5cbiAgaWYgKGN1cnJlbnRTYW5kYm94SWQgIT09IGlucHV0LnZlcmNlbFNhbmRib3hJZCkge1xuICAgIGxvZy5pbmZvKFwic2FuZGJveCBJRCBjaGFuZ2VkLCBleGl0aW5nIGxpZmVjeWNsZVwiLCB7XG4gICAgICBleHBlY3RlZDogaW5wdXQudmVyY2VsU2FuZGJveElkLFxuICAgICAgYWN0dWFsOiBjdXJyZW50U2FuZGJveElkLFxuICAgIH0pO1xuICAgIHJldHVybiB7IGFjdGlvbjogXCJleGl0XCIsIHJlYXNvbjogXCJzYW5kYm94SWRfY2hhbmdlZFwiIH07XG4gIH1cblxuICBpZiAoIWN1cnJlbnRTYW5kYm94SWQpIHtcbiAgICBsb2cud2FybihcIm5vIGN1cnJlbnQgc2FuZGJveCBJRCBpbiBtZXRhZGF0YSwgZXhpdGluZyBsaWZlY3ljbGVcIik7XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uOiBcIm5vdF9mb3VuZFwiIH07XG4gIH1cblxuICBjb25zdCBwb2xsSW50ZXJ2YWxNcyA9XG4gICAgaW5wdXQuY29uZmlnPy5wb2xsSW50ZXJ2YWxNcyA/PyBERUZBVUxUX1BPTExfSU5URVJWQUxfTVM7XG4gIGNvbnN0IGlkbGVUaW1lb3V0TXMgPVxuICAgIGlucHV0LmNvbmZpZz8uc3RvcEFmdGVySW5hY3RpdmVNcyA/PyBERUZBVUxUX0lETEVfVElNRU9VVF9NUztcbiAgY29uc3Qgc25hcHNob3RCZWZvcmVUaW1lb3V0TXMgPVxuICAgIGlucHV0LmNvbmZpZz8uc25hcHNob3RCZWZvcmVUaW1lb3V0TXMgPz8gU05BUFNIT1RfQkVGT1JFX1RJTUVPVVRfTVM7XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgbGFzdEFjdGl2aXR5ID0gcmVjb3JkLmxhc3RBY3RpdmVBdCA/PyByZWNvcmQuY3JlYXRlZEF0ID8/IG5vdztcbiAgY29uc3QgaWRsZUR1cmF0aW9uID0gbm93IC0gbGFzdEFjdGl2aXR5O1xuICBjb25zdCBzaG91bGRTbmFwc2hvdER1ZVRvSWRsZSA9IGlkbGVEdXJhdGlvbiA+IGlkbGVUaW1lb3V0TXM7XG5cbiAgbGV0IHNob3VsZFNuYXBzaG90RHVlVG9UaW1lb3V0ID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgU2FuZGJveFNESyA9IGF3YWl0IGxvYWRTYW5kYm94U0RLKCk7XG4gICAgY29uc3Qgc2FuZGJveCA9IGF3YWl0IFNhbmRib3hTREsuZ2V0KHtcbiAgICAgIHNhbmRib3hJZDogY3VycmVudFNhbmRib3hJZCxcbiAgICAgIC4uLmdldFRlc3RDcmVkZW50aWFscygpLFxuICAgIH0pO1xuICAgIGlmIChzYW5kYm94LnRpbWVvdXQgPCBzbmFwc2hvdEJlZm9yZVRpbWVvdXRNcykge1xuICAgICAgc2hvdWxkU25hcHNob3REdWVUb1RpbWVvdXQgPSB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgbG9nLndhcm4oXCJmYWlsZWQgdG8gZ2V0IHNhbmRib3ggZnJvbSBTREssIGV4aXRpbmcgbGlmZWN5Y2xlXCIsIHtcbiAgICAgIHZlcmNlbFNhbmRib3hJZDogY3VycmVudFNhbmRib3hJZCxcbiAgICB9KTtcbiAgICByZXR1cm4geyBhY3Rpb246IFwiZXhpdFwiLCByZWFzb246IFwibm90X2ZvdW5kXCIgfTtcbiAgfVxuXG4gIGlmIChzaG91bGRTbmFwc2hvdER1ZVRvSWRsZSB8fCBzaG91bGRTbmFwc2hvdER1ZVRvVGltZW91dCkge1xuICAgIGNvbnN0IHJlYXNvbiA9IHNob3VsZFNuYXBzaG90RHVlVG9JZGxlID8gXCJpZGxlXCIgOiBcInRpbWVvdXRcIjtcbiAgICBsb2cuaW5mbyhcInNuYXBzaG90dGluZyBzYW5kYm94IGJlZm9yZSBleGl0XCIsIHtcbiAgICAgIHJlYXNvbixcbiAgICAgIGlkbGVEdXJhdGlvbk1zOiBpZGxlRHVyYXRpb24sXG4gICAgICB2ZXJjZWxTYW5kYm94SWQ6IGN1cnJlbnRTYW5kYm94SWQsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgU2FuZGJveFNESyA9IGF3YWl0IGxvYWRTYW5kYm94U0RLKCk7XG4gICAgICBjb25zdCBzYW5kYm94ID0gYXdhaXQgU2FuZGJveFNESy5nZXQoe1xuICAgICAgICBzYW5kYm94SWQ6IGN1cnJlbnRTYW5kYm94SWQsXG4gICAgICAgIC4uLmdldFRlc3RDcmVkZW50aWFscygpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHNhbmRib3guc25hcHNob3QoKTtcbiAgICAgIGxvZy5pbmZvKFwic25hcHNob3QgY3JlYXRlZFwiLCB7IHNuYXBzaG90SWQ6IHNuYXBzaG90LnNuYXBzaG90SWQgfSk7XG5cbiAgICAgIGF3YWl0IHN0b3JhZ2Uuc2FuZGJveC51cGRhdGUoaW5wdXQuc2FuZGJveElkLCB7XG4gICAgICAgIHNldHVwOiB7XG4gICAgICAgICAgLi4ucmVjb3JkLnNldHVwLFxuICAgICAgICAgIG1ldGFkYXRhOiB7IHNhbmRib3hJZDogbnVsbCwgc25hcHNob3RJZDogc25hcHNob3Quc25hcHNob3RJZCB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBsb2cuaW5mbyhcInNhbmRib3ggcmVjb3JkIHVwZGF0ZWQgd2l0aCBzbmFwc2hvdFwiKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3IoXCJmYWlsZWQgdG8gc25hcHNob3Qgc2FuZGJveFwiLCB7IGNhdXNlOiBlIH0pO1xuICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciA/IGUgOiBuZXcgRXJyb3IoU3RyaW5nKGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYWN0aW9uOiBcImV4aXRcIiwgcmVhc29uIH07XG4gIH1cblxuICBsb2cuaW5mbyhcInNhbmRib3ggc3RpbGwgYWN0aXZlLCBjb250aW51aW5nIGxpZmVjeWNsZVwiLCB7XG4gICAgaWRsZUR1cmF0aW9uTXM6IGlkbGVEdXJhdGlvbixcbiAgICBuZXh0UG9sbE1zOiBwb2xsSW50ZXJ2YWxNcyxcbiAgfSk7XG4gIHJldHVybiB7IGFjdGlvbjogXCJjb250aW51ZVwiLCBuZXh0UG9sbE1zOiBwb2xsSW50ZXJ2YWxNcyB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBLGtCQUFxQjtBQWNyQixlQUFlLFdBQ2IsTUFDQSxNQUMrRDtBQUMvRCxRQUFNLEVBQUUsTUFBTSxJQUFJLE1BQU0sT0FBTyxlQUFvQjtBQUNuRCxTQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN0QyxVQUFNLFFBQVEsTUFBTSxVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRztBQUFBLE1BQ2xELFFBQVEsTUFBTTtBQUFBLElBQ2hCLENBQUM7QUFFRCxRQUFJLFNBQVM7QUFDYixRQUFJLFNBQVM7QUFFYixVQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsU0FBaUI7QUFDeEMsZ0JBQVUsS0FBSyxTQUFTO0FBQUEsSUFDMUIsQ0FBQztBQUNELFVBQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxTQUFpQjtBQUN4QyxnQkFBVSxLQUFLLFNBQVM7QUFBQSxJQUMxQixDQUFDO0FBRUQsVUFBTSxZQUFZLE1BQU0sWUFDcEIsV0FBVyxNQUFNO0FBQ2YsWUFBTSxLQUFLLFNBQVM7QUFDcEIsYUFBTyxJQUFJLE1BQU0sa0JBQWtCLEtBQUssQ0FBQyxDQUFDLFlBQVksQ0FBQztBQUFBLElBQ3pELEdBQUcsS0FBSyxTQUFT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QUN2QixDQUFDO0FBQ0QsZ0JBQU1DLFlBQVcsSUFBSSxzQkFBc0JELE1BQUssR0FBRztBQUVuRCxrQkFBUSxNQUNMLElBQUksTUFBTSxTQUFTO0FBQUEsWUFDbEIsR0FBRztBQUFBLFlBQ0gsU0FBUyxNQUFNO0FBQUEsWUFDZixZQUFZLEtBQUssSUFBSTtBQUFBLFVBQ3ZCLENBQUMsRUFDQSxNQUFNLE1BQU0sTUFBUztBQUV4QixpQkFBTztBQUFBLFlBQ0wsVUFBQUM7QUFBQSxZQUNBLFVBQVUsRUFBRSxXQUFXRCxLQUFJLFVBQVU7QUFBQSxVQUN2QztBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBRUEsVUFBSSxNQUFNLEtBQUs7QUFDYixZQUFJLENBQUMsTUFBTSxTQUFTO0FBQ2xCLGNBQUksTUFBTSw0Q0FBNEMsRUFBRSxNQUFNLENBQUM7QUFDL0QsZ0JBQU0sSUFBSSxNQUFNLDBDQUEwQztBQUFBLFFBQzVEO0FBQ0EsNEJBQW9CO0FBQUEsVUFDbEI7QUFBQSxVQUNBLEtBQUssTUFBTTtBQUFBLFVBQ1g7QUFBQSxVQUNBLGlCQUFpQixNQUFNO0FBQUEsVUFDdkI7QUFBQSxRQUNGLENBQUMsRUFBRSxNQUFNLENBQUMsVUFBVTtBQUNsQixjQUFJLE1BQU0sb0NBQW9DLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFBQSxRQUNoRSxDQUFDO0FBRUQsY0FBTUEsT0FBTSxNQUFNLFVBQVUsV0FBVztBQUN2QyxjQUFNQyxZQUFXLElBQUksc0JBQXNCRCxNQUFLLEdBQUc7QUFDbkQsY0FBTSxNQUFNLElBQUlDLFNBQVE7QUFFeEIsZUFBTztBQUFBLFVBQ0wsVUFBQUE7QUFBQSxVQUNBLFVBQVUsRUFBRSxXQUFXRCxLQUFJLFVBQVU7QUFBQSxRQUN2QztBQUFBLE1BQ0Y7QUFFQSxZQUFNLE1BQU0sTUFBTSxVQUFVLFdBQVc7QUFDdkMsWUFBTSxXQUFXLElBQUksc0JBQXNCLEtBQUssR0FBRztBQUVuRCxhQUFPO0FBQUEsUUFDTDtBQUFBLFFBQ0EsVUFBVSxFQUFFLFdBQVcsSUFBSSxVQUFVO0FBQUEsTUFDdkM7QUFBQSxJQUNGO0FBQUEsSUFFQSxNQUFNLFFBQVEsRUFBRSxVQUFVLElBQUksR0FBRztBQUMvQixZQUFNLGFBQWEsTUFBTUgsZ0JBQWU7QUFDeEMsWUFBTSxNQUFNLE1BQU0sV0FBVyxJQUFJO0FBQUEsUUFDL0IsV0FBVyxTQUFTO0FBQUEsUUFDcEIsR0FBR0Msb0JBQW1CO0FBQUEsTUFDeEIsQ0FBQztBQUNELGFBQU8sSUFBSSxzQkFBc0IsS0FBSyxPQUFPLE1BQVM7QUFBQSxJQUN4RDtBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFsiaW1wb3J0X3VsaWQiLCAibG9hZFNhbmRib3hTREsiLCAiZ2V0VGVzdENyZWRlbnRpYWxzIiwgInN0YXJ0V29ya2Zsb3ciLCAic2RrIiwgImluc3RhbmNlIl0KfQo=
|
package/dist/sandbox.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _vercel_sandbox from '@vercel/sandbox';
|
|
2
|
-
import { b as Sandbox, f as Storage } from './adapter-
|
|
2
|
+
import { b as Sandbox, f as Storage } from './adapter-txsF6hou.js';
|
|
3
3
|
|
|
4
4
|
type LogLevel = "info" | "warn" | "error" | "silent";
|
|
5
5
|
type LogContext = {
|
|
@@ -148,6 +148,7 @@ type SandboxBinding<TType extends string = string, TConfig = any, TMetadata = an
|
|
|
148
148
|
connect(opts: {
|
|
149
149
|
agent: SandboxAgentRef;
|
|
150
150
|
metadata: TMetadata;
|
|
151
|
+
cwd?: string | null;
|
|
151
152
|
signal?: AbortSignal;
|
|
152
153
|
log: Logger;
|
|
153
154
|
}): Promise<SandboxInstance>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _vercel_sandbox from '@vercel/sandbox';
|
|
2
|
-
import { b as Sandbox, f as Storage } from './adapter-
|
|
2
|
+
import { b as Sandbox, f as Storage } from './adapter-txsF6hou.mjs';
|
|
3
3
|
|
|
4
4
|
type LogLevel = "info" | "warn" | "error" | "silent";
|
|
5
5
|
type LogContext = {
|
|
@@ -148,6 +148,7 @@ type SandboxBinding<TType extends string = string, TConfig = any, TMetadata = an
|
|
|
148
148
|
connect(opts: {
|
|
149
149
|
agent: SandboxAgentRef;
|
|
150
150
|
metadata: TMetadata;
|
|
151
|
+
cwd?: string | null;
|
|
151
152
|
signal?: AbortSignal;
|
|
152
153
|
log: Logger;
|
|
153
154
|
}): Promise<SandboxInstance>;
|
package/dist/storage.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as StorageHandlers } from './adapter-
|
|
2
|
-
export { G as GenerationOptions, M as Message, a as MessageUsage, P as Part, b as Sandbox, c as Session, d as Setup, e as SetupSnapshot, f as Storage, g as StorageCall, h as StorageStep, i as StorageStepFunction, t as toStorage } from './adapter-
|
|
1
|
+
import { S as StorageHandlers } from './adapter-txsF6hou.mjs';
|
|
2
|
+
export { G as GenerationOptions, M as Message, a as MessageUsage, P as Part, b as Sandbox, c as Session, d as Setup, e as SetupSnapshot, f as Storage, g as StorageCall, h as StorageStep, i as StorageStepFunction, t as toStorage } from './adapter-txsF6hou.mjs';
|
|
3
3
|
import '@workflow/serde';
|
|
4
4
|
import '@vercel/sandbox';
|
|
5
5
|
import 'ai';
|
package/dist/storage.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as StorageHandlers } from './adapter-
|
|
2
|
-
export { G as GenerationOptions, M as Message, a as MessageUsage, P as Part, b as Sandbox, c as Session, d as Setup, e as SetupSnapshot, f as Storage, g as StorageCall, h as StorageStep, i as StorageStepFunction, t as toStorage } from './adapter-
|
|
1
|
+
import { S as StorageHandlers } from './adapter-txsF6hou.js';
|
|
2
|
+
export { G as GenerationOptions, M as Message, a as MessageUsage, P as Part, b as Sandbox, c as Session, d as Setup, e as SetupSnapshot, f as Storage, g as StorageCall, h as StorageStep, i as StorageStepFunction, t as toStorage } from './adapter-txsF6hou.js';
|
|
3
3
|
import '@workflow/serde';
|
|
4
4
|
import '@vercel/sandbox';
|
|
5
5
|
import 'ai';
|