@nlabs/lex 1.54.3 → 1.55.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/lib/Button.stories.js +1 -1
- package/lib/commands/clean/clean.js +1 -1
- package/lib/commands/config/config.js +1 -1
- package/lib/commands/copy/copy.js +1 -1
- package/lib/commands/create/create.js +1 -1
- package/lib/commands/dev/dev.js +1 -1
- package/lib/commands/init/init.js +1 -1
- package/lib/commands/link/link.js +1 -1
- package/lib/commands/lint/lint.js +1 -1
- package/lib/commands/serverless/serverless.js +17 -6
- package/lib/commands/storybook/storybook.js +1 -1
- package/lib/commands/versions/versions.js +1 -1
- package/lib/create/changelog.js +1 -1
- package/lib/utils/aiService.js +1 -1
- package/lib/utils/app.js +1 -1
- package/package.json +3 -15
|
@@ -65,6 +65,20 @@ const fetchPublicIp = (forceRefresh = false)=>new Promise((resolve)=>{
|
|
|
65
65
|
resolve(ip);
|
|
66
66
|
}).catch(()=>resolve(undefined));
|
|
67
67
|
});
|
|
68
|
+
const resolvePublicIpForDisplay = async (forceRefresh = false)=>{
|
|
69
|
+
const timeoutMs = 1500;
|
|
70
|
+
const timeoutPromise = new Promise((resolve)=>{
|
|
71
|
+
setTimeout(()=>resolve(undefined), timeoutMs);
|
|
72
|
+
});
|
|
73
|
+
try {
|
|
74
|
+
return await Promise.race([
|
|
75
|
+
fetchPublicIp(forceRefresh),
|
|
76
|
+
timeoutPromise
|
|
77
|
+
]);
|
|
78
|
+
} catch {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
68
82
|
const displayServerStatus = (httpPort, httpsPort, wsPort, host, quiet, publicIp)=>{
|
|
69
83
|
if (quiet) {
|
|
70
84
|
return;
|
|
@@ -784,11 +798,8 @@ export const serverless = async (cmd, callback = ()=>({}))=>{
|
|
|
784
798
|
// Start Express server
|
|
785
799
|
const server = expressApp.listen(httpPort, host, ()=>{
|
|
786
800
|
spinner.succeed('Serverless development server started.');
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
if (publicIp) {
|
|
790
|
-
displayServerStatus(httpPort, finalConfig.custom['serverless-offline'].httpsPort, wsPort, host, quiet, publicIp);
|
|
791
|
-
}
|
|
801
|
+
void resolvePublicIpForDisplay(usePublicIp).then((publicIp)=>{
|
|
802
|
+
displayServerStatus(httpPort, finalConfig.custom['serverless-offline'].httpsPort, wsPort, host, quiet, publicIp);
|
|
792
803
|
});
|
|
793
804
|
});
|
|
794
805
|
// Handle Express server errors
|
|
@@ -820,4 +831,4 @@ export const serverless = async (cmd, callback = ()=>({}))=>{
|
|
|
820
831
|
}
|
|
821
832
|
};
|
|
822
833
|
|
|
823
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zZXJ2ZXJsZXNzL3NlcnZlcmxlc3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBib3hlbiBmcm9tICdib3hlbic7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQge3JlYWRGaWxlU3luYywgZXhpc3RzU3luYywgbWtkaXJTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2hvbWVkaXJ9IGZyb20gJ29zJztcbmltcG9ydCB7cmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZSwgam9pbiwgaXNBYnNvbHV0ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge3BhdGhUb0ZpbGVVUkx9IGZyb20gJ3VybCc7XG5pbXBvcnQge1dlYlNvY2tldFNlcnZlcn0gZnJvbSAnd3MnO1xuXG5pbXBvcnQge0xleENvbmZpZywgZ2V0UGFja2FnZURpcn0gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lciwgcmVtb3ZlRmlsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJsZXNzT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuICByZWFkb25seSBodHRwUG9ydD86IG51bWJlcjtcbiAgcmVhZG9ubHkgaHR0cHNQb3J0PzogbnVtYmVyO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlbW92ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRlc3Q/OiBib29sZWFuO1xuICByZWFkb25seSB1c2VQdWJsaWNJcD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IHN0cmluZztcbiAgcmVhZG9ubHkgd3NQb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBTZXJ2ZXJsZXNzQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpPT4gdm9pZDtcblxuaW50ZXJmYWNlIFB1YmxpY0lwQ2FjaGUge1xuICBpcDogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFNlcnZlcmxlc3NIYW5kbGVyIHtcbiAgcmVhZG9ubHkgaGFuZGxlcjogc3RyaW5nO1xuICByZWFkb25seSBldmVudHM/OiBBcnJheTx7XG4gICAgcmVhZG9ubHkgaHR0cD86IHtcbiAgICAgIHJlYWRvbmx5IGNvcnM/OiBib29sZWFuO1xuICAgICAgcmVhZG9ubHkgbWV0aG9kPzogc3RyaW5nO1xuICAgICAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcbiAgICB9O1xuICAgIHJlYWRvbmx5IHdlYnNvY2tldD86IHtcbiAgICAgIHJlYWRvbmx5IHJvdXRlPzogc3RyaW5nO1xuICAgIH07XG4gIH0+O1xufVxuXG5pbnRlcmZhY2UgU2VydmVybGVzc0NvbmZpZyB7XG4gIHJlYWRvbmx5IGN1c3RvbT86IHtcbiAgICByZWFkb25seSAnc2VydmVybGVzcy1vZmZsaW5lJz86IHtcbiAgICAgIHJlYWRvbmx5IGNvcnM/OiBib29sZWFuO1xuICAgICAgcmVhZG9ubHkgaG9zdD86IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IGh0dHBQb3J0PzogbnVtYmVyO1xuICAgICAgcmVhZG9ubHkgaHR0cHNQb3J0PzogbnVtYmVyO1xuICAgICAgcmVhZG9ubHkgd3NQb3J0PzogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIHJlYWRvbmx5IGZ1bmN0aW9ucz86IFJlY29yZDxzdHJpbmcsIFNlcnZlcmxlc3NIYW5kbGVyPjtcbn1cblxuY29uc3QgZ2V0Q2FjaGVEaXIgPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY2FjaGVEaXIgPSBqb2luKGhvbWVkaXIoKSwgJy5sZXgtY2FjaGUnKTtcbiAgaWYoIWV4aXN0c1N5bmMoY2FjaGVEaXIpKSB7XG4gICAgbWtkaXJTeW5jKGNhY2hlRGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gIH1cbiAgcmV0dXJuIGNhY2hlRGlyO1xufTtcblxuY29uc3QgZ2V0Q2FjaGVQYXRoID0gKCk6IHN0cmluZyA9PiBqb2luKGdldENhY2hlRGlyKCksICdwdWJsaWMtaXAuanNvbicpO1xuXG5jb25zdCByZWFkUHVibGljSXBDYWNoZSA9ICgpOiBQdWJsaWNJcENhY2hlIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGNhY2hlUGF0aCA9IGdldENhY2hlUGF0aCgpO1xuICBpZighZXhpc3RzU3luYyhjYWNoZVBhdGgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNhY2hlRGF0YSA9IHJlYWRGaWxlU3luYyhjYWNoZVBhdGgsICd1dGY4Jyk7XG4gICAgY29uc3QgY2FjaGU6IFB1YmxpY0lwQ2FjaGUgPSBKU09OLnBhcnNlKGNhY2hlRGF0YSk7XG5cbiAgICAvLyBDaGVjayBpZiBjYWNoZSBpcyBvbGRlciB0aGFuIDEgd2Vla1xuICAgIGNvbnN0IG9uZVdlZWtNcyA9IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xuICAgIGlmKERhdGUubm93KCkgLSBjYWNoZS50aW1lc3RhbXAgPiBvbmVXZWVrTXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjYWNoZTtcbiAgfSBjYXRjaHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuY29uc3Qgd3JpdGVQdWJsaWNJcENhY2hlID0gKGlwOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgY29uc3QgY2FjaGVQYXRoID0gZ2V0Q2FjaGVQYXRoKCk7XG4gIGNvbnN0IGNhY2hlOiBQdWJsaWNJcENhY2hlID0ge1xuICAgIGlwLFxuICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuICB9O1xuICB3cml0ZUZpbGVTeW5jKGNhY2hlUGF0aCwgSlNPTi5zdHJpbmdpZnkoY2FjaGUsIG51bGwsIDIpKTtcbn07XG5cbmNvbnN0IGZldGNoUHVibGljSXAgPSAoZm9yY2VSZWZyZXNoOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgaWYoIWZvcmNlUmVmcmVzaCkge1xuICAgIGNvbnN0IGNhY2hlZCA9IHJlYWRQdWJsaWNJcENhY2hlKCk7XG4gICAgaWYoY2FjaGVkKSB7XG4gICAgICByZXNvbHZlKGNhY2hlZC5pcCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLy8gVXNlIGZldGNoIGluc3RlYWQgb2YgaHR0cHNcbiAgZmV0Y2goJ2h0dHBzOi8vYXBpLmlwaWZ5Lm9yZycpXG4gICAgLnRoZW4oKHJlcykgPT4gcmVzLnRleHQoKSlcbiAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgaXAgPSBkYXRhLnRyaW0oKTtcbiAgICAgIGlmKGlwKSB7XG4gICAgICAgIHdyaXRlUHVibGljSXBDYWNoZShpcCk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKGlwKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCkpO1xufSk7XG5cbmNvbnN0IGRpc3BsYXlTZXJ2ZXJTdGF0dXMgPSAoXG4gIGh0dHBQb3J0OiBudW1iZXIsXG4gIGh0dHBzUG9ydDogbnVtYmVyLFxuICB3c1BvcnQ6IG51bWJlcixcbiAgaG9zdDogc3RyaW5nLFxuICBxdWlldDogYm9vbGVhbixcbiAgcHVibGljSXA/OiBzdHJpbmdcbikgPT4ge1xuICBpZihxdWlldCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGh0dHBVcmwgPSBgaHR0cDovLyR7aG9zdH06JHtodHRwUG9ydH1gO1xuICBjb25zdCBodHRwc1VybCA9IGBodHRwczovLyR7aG9zdH06JHtodHRwc1BvcnR9YDtcbiAgY29uc3Qgd3NVcmwgPSBgd3M6Ly8ke2hvc3R9OiR7d3NQb3J0fWA7XG4gIGNvbnN0IHdzc1VybCA9IGB3c3M6Ly8ke2hvc3R9OiR7d3NQb3J0fWA7XG5cbiAgbGV0IHVybExpbmVzID0gYCR7Y2hhbGsuZ3JlZW4oJ0hUVFA6Jyl9ICAgICAgJHtjaGFsay51bmRlcmxpbmUoaHR0cFVybCl9XFxuYDtcbiAgdXJsTGluZXMgKz0gYCR7Y2hhbGsuZ3JlZW4oJ0hUVFBTOicpfSAgICAgJHtjaGFsay51bmRlcmxpbmUoaHR0cHNVcmwpfVxcbmA7XG4gIHVybExpbmVzICs9IGAke2NoYWxrLmdyZWVuKCdXZWJTb2NrZXQ6Jyl9ICR7Y2hhbGsudW5kZXJsaW5lKHdzVXJsKX1cXG5gO1xuICB1cmxMaW5lcyArPSBgJHtjaGFsay5ncmVlbignV1NTOicpfSAgICAgICAke2NoYWxrLnVuZGVybGluZSh3c3NVcmwpfVxcbmA7XG5cbiAgaWYocHVibGljSXApIHtcbiAgICB1cmxMaW5lcyArPSBgXFxuJHtjaGFsay5ncmVlbignUHVibGljOicpfSAgICAke2NoYWxrLnVuZGVybGluZShgaHR0cDovLyR7cHVibGljSXB9OiR7aHR0cFBvcnR9YCl9XFxuYDtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1c0JveCA9IGJveGVuKFxuICAgIGAke2NoYWxrLmN5YW4uYm9sZCgn8J+agCBTZXJ2ZXJsZXNzIERldmVsb3BtZW50IFNlcnZlciBSdW5uaW5nJyl9XFxuXFxuJHt1cmxMaW5lc31cXG5gICtcbiAgICBgJHtjaGFsay55ZWxsb3coJ1ByZXNzIEN0cmwrQyB0byBzdG9wIHRoZSBzZXJ2ZXInKX1gLFxuICAgIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyMxYTFhMWEnLFxuICAgICAgYm9yZGVyQ29sb3I6ICdjeWFuJyxcbiAgICAgIGJvcmRlclN0eWxlOiAncm91bmQnLFxuICAgICAgbWFyZ2luOiAxLFxuICAgICAgcGFkZGluZzogMVxuICAgIH1cbiAgKTtcblxuICBjb25zb2xlLmxvZyhgXFxuJHtzdGF0dXNCb3h9XFxuYCk7XG59O1xuXG5jb25zdCBsb2FkSGFuZGxlciA9IGFzeW5jIChoYW5kbGVyUGF0aDogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gUGFyc2luZyBoYW5kbGVyIHBhdGg6ICR7aGFuZGxlclBhdGh9YCk7XG5cbiAgICAvLyBQYXJzZSBBV1MgTGFtYmRhIGhhbmRsZXIgZm9ybWF0OiBcInBhdGgvdG8vZmlsZS5leHBvcnROYW1lXCIgb3IgXCJmaWxlLmV4cG9ydE5hbWVcIlxuICAgIC8vIEV4YW1wbGVzOiBcImluZGV4LmhhbmRsZXJcIiwgXCJoYW5kbGVycy9hcGkuaGFuZGxlclwiLCBcInNyYy9pbmRleC5kZWZhdWx0XCJcbiAgICBjb25zdCBoYW5kbGVyUGFydHMgPSBoYW5kbGVyUGF0aC5zcGxpdCgnLicpO1xuICAgIGNvbnNvbGUubG9nKCdbU2VydmVybGVzc10gSGFuZGxlciBwYXJ0cyBhZnRlciBzcGxpdDonLCBoYW5kbGVyUGFydHMpO1xuXG4gICAgbGV0IGZpbGVQYXRoOiBzdHJpbmc7XG4gICAgbGV0IGV4cG9ydE5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYoaGFuZGxlclBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEFXUyBMYW1iZGEgZm9ybWF0OiBcImZpbGUuZXhwb3J0TmFtZVwiXG4gICAgICAvLyBUYWtlIHRoZSBsYXN0IHBhcnQgYXMgZXhwb3J0IG5hbWUsIHJlc3QgYXMgZmlsZSBwYXRoXG4gICAgICAvLyBIYW5kbGUgY2FzZXMgbGlrZSBcImluZGV4LmhhbmRsZXJcIiAtPiBmaWxlOiBcImluZGV4XCIsIGV4cG9ydDogXCJoYW5kbGVyXCJcbiAgICAgIC8vIE9yIFwiaGFuZGxlcnMvYXBpLmhhbmRsZXJcIiAtPiBmaWxlOiBcImhhbmRsZXJzL2FwaVwiLCBleHBvcnQ6IFwiaGFuZGxlclwiXG4gICAgICBleHBvcnROYW1lID0gaGFuZGxlclBhcnRzW2hhbmRsZXJQYXJ0cy5sZW5ndGggLSAxXSB8fCBudWxsO1xuICAgICAgZmlsZVBhdGggPSBoYW5kbGVyUGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oJy4nKTtcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gUGFyc2VkIEFXUyBMYW1iZGEgZm9ybWF0IC0gZmlsZVBhdGg6IFwiJHtmaWxlUGF0aH1cIiwgZXhwb3J0TmFtZTogXCIke2V4cG9ydE5hbWV9XCJgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2ltcGxlIGZvcm1hdDoganVzdCB0aGUgZmlsZSBwYXRoXG4gICAgICBmaWxlUGF0aCA9IGhhbmRsZXJQYXRoO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBTaW1wbGUgZm9ybWF0IC0gZmlsZVBhdGg6IFwiJHtmaWxlUGF0aH1cImApO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSBmaWxlUGF0aCBkb2Vzbid0IGhhdmUgdGhlIGV4cG9ydCBuYW1lIGluIGl0XG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJy5oYW5kbGVyJykgfHwgZmlsZVBhdGguaW5jbHVkZXMoJy5kZWZhdWx0JykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBXQVJOSU5HOiBmaWxlUGF0aCBzdGlsbCBjb250YWlucyBleHBvcnQgbmFtZSEgZmlsZVBhdGg6IFwiJHtmaWxlUGF0aH1cImApO1xuICAgICAgLy8gVHJ5IHRvIGZpeCBpdCAtIHJlbW92ZSB0aGUgbGFzdCBwYXJ0IGlmIGl0IGxvb2tzIGxpa2UgYW4gZXhwb3J0IG5hbWVcbiAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IGZpbGVQYXRoLnNwbGl0KCcuJyk7XG4gICAgICBpZihwYXRoUGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zdCBsYXN0UGFydCA9IHBhdGhQYXJ0c1twYXRoUGFydHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmKFsnaGFuZGxlcicsICdkZWZhdWx0JywgJ2luZGV4J10uaW5jbHVkZXMobGFzdFBhcnQpICYmICFleHBvcnROYW1lKSB7XG4gICAgICAgICAgZXhwb3J0TmFtZSA9IGxhc3RQYXJ0O1xuICAgICAgICAgIGZpbGVQYXRoID0gcGF0aFBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKCcuJyk7XG4gICAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBGaXhlZCAtIGZpbGVQYXRoOiBcIiR7ZmlsZVBhdGh9XCIsIGV4cG9ydE5hbWU6IFwiJHtleHBvcnROYW1lfVwiYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYm90aCByZWxhdGl2ZSBwYXRocyBhbmQgYWJzb2x1dGUgcGF0aHNcbiAgICBsZXQgZnVsbFBhdGg6IHN0cmluZztcbiAgICBpZihpc0Fic29sdXRlKGZpbGVQYXRoKSkge1xuICAgICAgZnVsbFBhdGggPSBmaWxlUGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgZnVsbFBhdGggPSBwYXRoUmVzb2x2ZShvdXRwdXREaXIsIGZpbGVQYXRoKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBSZXNvbHZlZCBmdWxsUGF0aCAoYmVmb3JlIGV4dGVuc2lvbnMpOiAke2Z1bGxQYXRofWApO1xuXG4gICAgLy8gVHJ5IGRpZmZlcmVudCBleHRlbnNpb25zIGlmIGZpbGUgZG9lc24ndCBleGlzdFxuICAgIGlmKCFleGlzdHNTeW5jKGZ1bGxQYXRoKSkge1xuICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IFsnLmpzJywgJy5tanMnLCAnLmNqcyddO1xuICAgICAgY29uc3QgcGF0aFdpdGhvdXRFeHQgPSBmdWxsUGF0aC5yZXBsYWNlKC9cXC4oanN8bWpzfGNqcykkLywgJycpO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBUcnlpbmcgZXh0ZW5zaW9ucy4gQmFzZSBwYXRoOiAke3BhdGhXaXRob3V0RXh0fWApO1xuICAgICAgZm9yKGNvbnN0IGV4dCBvZiBleHRlbnNpb25zKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZVBhdGggPSBwYXRoV2l0aG91dEV4dCArIGV4dDtcbiAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBDaGVja2luZzogJHtjYW5kaWRhdGVQYXRofSAoZXhpc3RzOiAke2V4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCl9KWApO1xuICAgICAgICBpZihleGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpKSB7XG4gICAgICAgICAgZnVsbFBhdGggPSBjYW5kaWRhdGVQYXRoO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gRm91bmQgZmlsZSB3aXRoIGV4dGVuc2lvbjogJHtmdWxsUGF0aH1gKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEZpbGUgZXhpc3RzIHdpdGhvdXQgdHJ5aW5nIGV4dGVuc2lvbnM6ICR7ZnVsbFBhdGh9YCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBGaW5hbCBmdWxsUGF0aDogJHtmdWxsUGF0aH1gKTtcbiAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEV4cG9ydCBuYW1lOiAke2V4cG9ydE5hbWUgfHwgJ2RlZmF1bHQvaGFuZGxlcid9YCk7XG4gICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBGaWxlIGV4aXN0czogJHtleGlzdHNTeW5jKGZ1bGxQYXRoKX1gKTtcblxuICAgIGlmKCFleGlzdHNTeW5jKGZ1bGxQYXRoKSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEhhbmRsZXIgZmlsZSBub3QgZm91bmQ6ICR7ZnVsbFBhdGh9YCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gT3V0cHV0IGRpcmVjdG9yeTogJHtvdXRwdXREaXJ9YCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gSGFuZGxlciBwYXRoIGZyb20gY29uZmlnOiAke2hhbmRsZXJQYXRofWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIYW5kbGVyIGZpbGUgbm90IGZvdW5kOiAke2Z1bGxQYXRofWApO1xuICAgIH1cblxuICAgIC8vIER5bmFtaWMgaW1wb3J0IG9mIHRoZSBoYW5kbGVyIHdpdGggYmV0dGVyIGVycm9yIGhhbmRsaW5nXG4gICAgLy8gQWRkIC5qcyBleHRlbnNpb24gaWYgaW1wb3J0aW5nIFR5cGVTY3JpcHQgY29tcGlsZWQgb3V0cHV0XG4gICAgY29uc3QgaW1wb3J0UGF0aCA9IGZ1bGxQYXRoLmVuZHNXaXRoKCcudHMnKSA/IGZ1bGxQYXRoLnJlcGxhY2UoL1xcLnRzJC8sICcuanMnKSA6IGZ1bGxQYXRoO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENvbnZlcnQgdG8gZmlsZTovLyBVUkwgZm9yIEVTIG1vZHVsZSBpbXBvcnRzIChyZXF1aXJlZCBmb3IgYWJzb2x1dGUgcGF0aHMpXG4gICAgICAvLyBVc2UgcGF0aFRvRmlsZVVSTCB0byBlbnN1cmUgcHJvcGVyIGZpbGU6Ly8gVVJMIGZvcm1hdFxuICAgICAgY29uc3QgaW1wb3J0VXJsID0gcGF0aFRvRmlsZVVSTChpbXBvcnRQYXRoKS5ocmVmO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBJbXBvcnRpbmcgaGFuZGxlciBmcm9tOiAke2ltcG9ydFVybH1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gRmlsZSBwYXRoOiAke2ltcG9ydFBhdGh9YCk7XG5cbiAgICAgIC8vIFVzZSBpbXBvcnQoKSB3aXRoIHRoZSBmaWxlIFVSTFxuICAgICAgLy8gTm90ZTogSWYgdGhlIGhhbmRsZXIgZmlsZSBoYXMgaW1wb3J0IGVycm9ycyAobGlrZSBtaXNzaW5nIGRlcGVuZGVuY2llcyksXG4gICAgICAvLyB0aG9zZSB3aWxsIHN1cmZhY2UgaGVyZSwgYnV0IHRoYXQncyBhIGhhbmRsZXIgY29kZSBpc3N1ZSwgbm90IGEgbG9hZGVyIGlzc3VlXG4gICAgICBjb25zdCBoYW5kbGVyTW9kdWxlID0gYXdhaXQgaW1wb3J0KGltcG9ydFVybCk7XG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEhhbmRsZXIgbW9kdWxlIGxvYWRlZCBzdWNjZXNzZnVsbHkuIEV4cG9ydHM6ICR7T2JqZWN0LmtleXMoaGFuZGxlck1vZHVsZSkuam9pbignLCAnKX1gKTtcblxuICAgICAgLy8gR2V0IHRoZSBoYW5kbGVyIGJhc2VkIG9uIGV4cG9ydCBuYW1lIG9yIHRyeSBkZWZhdWx0c1xuICAgICAgbGV0IGhhbmRsZXI6IGFueTtcbiAgICAgIGlmKGV4cG9ydE5hbWUpIHtcbiAgICAgICAgaGFuZGxlciA9IGhhbmRsZXJNb2R1bGVbZXhwb3J0TmFtZV07XG4gICAgICAgIGlmKCFoYW5kbGVyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEV4cG9ydCBcIiR7ZXhwb3J0TmFtZX1cIiBub3QgZm91bmQgaW4gbW9kdWxlLiBBdmFpbGFibGUgZXhwb3J0czogJHtPYmplY3Qua2V5cyhoYW5kbGVyTW9kdWxlKS5qb2luKCcsICcpfWApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUcnkgZGVmYXVsdCwgaGFuZGxlciwgb3IgdGhlIG1vZHVsZSBpdHNlbGZcbiAgICAgICAgaGFuZGxlciA9IGhhbmRsZXJNb2R1bGUuZGVmYXVsdCB8fCBoYW5kbGVyTW9kdWxlLmhhbmRsZXIgfHwgaGFuZGxlck1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIGZvdW5kOiAke3R5cGVvZiBoYW5kbGVyfSwgaXNGdW5jdGlvbjogJHt0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJ31gKTtcblxuICAgICAgaWYodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEhhbmRsZXIgaXMgbm90IGEgZnVuY3Rpb24uIFR5cGU6ICR7dHlwZW9mIGhhbmRsZXJ9LCBWYWx1ZTpgLCBoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoYW5kbGVyO1xuICAgIH0gY2F0Y2goaW1wb3J0RXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEltcG9ydCBlcnJvciBmb3IgaGFuZGxlciAke2hhbmRsZXJQYXRofTpgLCBpbXBvcnRFcnJvci5tZXNzYWdlKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTZXJ2ZXJsZXNzXSBJbXBvcnQgZXJyb3Igc3RhY2s6JywgaW1wb3J0RXJyb3Iuc3RhY2spO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgZGVwZW5kZW5jeSByZXNvbHV0aW9uIGVycm9yIChjb21tb24gd2l0aCBFUyBtb2R1bGVzKVxuICAgICAgaWYoaW1wb3J0RXJyb3IubWVzc2FnZSAmJiBpbXBvcnRFcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdDYW5ub3QgZmluZCBtb2R1bGUnKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gVGhpcyBhcHBlYXJzIHRvIGJlIGEgZGVwZW5kZW5jeSByZXNvbHV0aW9uIGVycm9yLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gVGhlIGhhbmRsZXIgZmlsZSBleGlzdHMsIGJ1dCBvbmUgb2YgaXRzIGltcG9ydHMgaXMgZmFpbGluZy4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIENoZWNrIHRoYXQgYWxsIGRlcGVuZGVuY2llcyBpbiB0aGUgaGFuZGxlciBmaWxlIGFyZSBwcm9wZXJseSBpbnN0YWxsZWQuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIGZpbGU6ICR7aW1wb3J0UGF0aH1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIE1ha2Ugc3VyZSB0aGUgaGFuZGxlciBhbmQgaXRzIGRlcGVuZGVuY2llcyBhcmUgY29tcGlsZWQgY29ycmVjdGx5LicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3I6IGFueSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBFcnJvciBsb2FkaW5nIGhhbmRsZXIgJHtoYW5kbGVyUGF0aH06YCwgZXJyb3IubWVzc2FnZSk7XG4gICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIEVycm9yIHN0YWNrOicsIGVycm9yLnN0YWNrKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuY29uc3QgY2FwdHVyZUNvbnNvbGVMb2dzID0gKGhhbmRsZXI6IChldmVudDogYW55LCBjb250ZXh0OiBhbnkpPT4gUHJvbWlzZTxhbnk+LCBxdWlldDogYm9vbGVhbikgPT4ge1xuICBpZihxdWlldCkge1xuICAgIHJldHVybiBoYW5kbGVyO1xuICB9XG5cbiAgcmV0dXJuIGFzeW5jIChldmVudDogYW55LCBjb250ZXh0OiBhbnkpID0+IHtcbiAgICAvLyBDYXB0dXJlIGNvbnNvbGUubG9nLCBjb25zb2xlLmVycm9yLCBldGMuXG4gICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlTG9nID0gY29uc29sZS5sb2c7XG4gICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZVdhcm4gPSBjb25zb2xlLndhcm47XG4gICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlSW5mbyA9IGNvbnNvbGUuaW5mbztcblxuICAgIGNvbnN0IGxvZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zb2xlLmxvZyA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgbG9ncy5wdXNoKGBbTE9HXSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgb3JpZ2luYWxDb25zb2xlTG9nKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICBjb25zb2xlLmVycm9yID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICBsb2dzLnB1c2goYFtFUlJPUl0gJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICAgIG9yaWdpbmFsQ29uc29sZUVycm9yKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICBjb25zb2xlLndhcm4gPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgIGxvZ3MucHVzaChgW1dBUk5dICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgICBvcmlnaW5hbENvbnNvbGVXYXJuKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICBjb25zb2xlLmluZm8gPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgIGxvZ3MucHVzaChgW0lORk9dICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgICBvcmlnaW5hbENvbnNvbGVJbmZvKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlcihldmVudCwgY29udGV4dCk7XG5cbiAgICAgIC8vIE91dHB1dCBjYXB0dXJlZCBsb2dzXG4gICAgICBpZihsb2dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnLS0tIEhhbmRsZXIgQ29uc29sZSBPdXRwdXQgLS0tJykpO1xuICAgICAgICBsb2dzLmZvckVhY2goKGxvZykgPT4gY29uc29sZS5sb2coY2hhbGsuZ3JheShsb2cpKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJy0tLSBFbmQgSGFuZGxlciBDb25zb2xlIE91dHB1dCAtLS0nKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgY29uc29sZSBtZXRob2RzXG4gICAgICBjb25zb2xlLmxvZyA9IG9yaWdpbmFsQ29uc29sZUxvZztcbiAgICAgIGNvbnNvbGUuZXJyb3IgPSBvcmlnaW5hbENvbnNvbGVFcnJvcjtcbiAgICAgIGNvbnNvbGUud2FybiA9IG9yaWdpbmFsQ29uc29sZVdhcm47XG4gICAgICBjb25zb2xlLmluZm8gPSBvcmlnaW5hbENvbnNvbGVJbmZvO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGNyZWF0ZUV4cHJlc3NTZXJ2ZXIgPSBhc3luYyAoXG4gIGNvbmZpZzogU2VydmVybGVzc0NvbmZpZyxcbiAgb3V0cHV0RGlyOiBzdHJpbmcsXG4gIGh0dHBQb3J0OiBudW1iZXIsXG4gIGhvc3Q6IHN0cmluZyxcbiAgcXVpZXQ6IGJvb2xlYW4sXG4gIGRlYnVnOiBib29sZWFuXG4pID0+IHtcbiAgY29uc3QgYXBwID0gZXhwcmVzcygpO1xuXG4gIC8vIEVuYWJsZSBDT1JTXG4gIGFwcC51c2UoKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgJyonKTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJywgJ0dFVCwgUE9TVCwgUFVULCBERUxFVEUsIFBBVENILCBPUFRJT05TJyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsICcqJyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLCAndHJ1ZScpO1xuXG4gICAgaWYocmVxLm1ldGhvZCA9PT0gJ09QVElPTlMnKSB7XG4gICAgICByZXMuc2VuZFN0YXR1cygyMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0KCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBQYXJzZSBKU09OIGJvZGllc1xuICBhcHAudXNlKGV4cHJlc3MuanNvbigpKTtcblxuICAvLyBMb2FkIEdyYXBoUUwgaGFuZGxlclxuICBjb25zdCBsb2FkR3JhcGhRTFNjaGVtYSA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVHJ5IHRvIGZpbmQgYSBHcmFwaFFMIGhhbmRsZXJcbiAgICAgIGxldCBncmFwaHFsSGFuZGxlciA9IG51bGw7XG5cbiAgICAgIGlmKGNvbmZpZy5mdW5jdGlvbnMpIHtcbiAgICAgICAgZm9yKGNvbnN0IFtmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQ29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuZnVuY3Rpb25zKSkge1xuICAgICAgICAgIGlmKGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgZm9yKGNvbnN0IGV2ZW50IG9mIGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgICBpZihldmVudC5odHRwICYmIGV2ZW50Lmh0dHAucGF0aCkge1xuICAgICAgICAgICAgICAgIC8vIExvb2sgZm9yIEdyYXBoUUwgZW5kcG9pbnRzXG4gICAgICAgICAgICAgICAgaWYoZXZlbnQuaHR0cC5wYXRoID09PSAnL3B1YmxpYycgfHwgZXZlbnQuaHR0cC5wYXRoID09PSAnL2dyYXBocWwnKSB7XG4gICAgICAgICAgICAgICAgICBncmFwaHFsSGFuZGxlciA9IGF3YWl0IGxvYWRIYW5kbGVyKGZ1bmN0aW9uQ29uZmlnLmhhbmRsZXIsIG91dHB1dERpcik7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZ3JhcGhxbEhhbmRsZXIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihncmFwaHFsSGFuZGxlcikge1xuICAgICAgICBsb2coJ0ZvdW5kIEdyYXBoUUwgaGFuZGxlcicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICByZXR1cm4gZ3JhcGhxbEhhbmRsZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYEVycm9yIGxvYWRpbmcgR3JhcGhRTCBoYW5kbGVyOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIC8vIFNldCB1cCBHcmFwaFFMIGhhbmRsZXIgZm9yIEdyYXBoUUwgcmVxdWVzdHNcbiAgdHJ5IHtcbiAgICBjb25zdCBncmFwaHFsSGFuZGxlciA9IGF3YWl0IGxvYWRHcmFwaFFMU2NoZW1hKCk7XG4gICAgaWYoZ3JhcGhxbEhhbmRsZXIpIHtcbiAgICAgIC8vIEZpbmQgdGhlIEdyYXBoUUwgcGF0aCBmcm9tIHRoZSBzZXJ2ZXJsZXNzIGNvbmZpZ1xuICAgICAgbGV0IGdyYXBocWxQYXRoID0gJy9ncmFwaHFsJzsgLy8gZGVmYXVsdCBmYWxsYmFja1xuXG4gICAgICBpZihjb25maWcuZnVuY3Rpb25zKSB7XG4gICAgICAgIGZvcihjb25zdCBbX2Z1bmN0aW9uTmFtZSwgZnVuY3Rpb25Db25maWddIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZy5mdW5jdGlvbnMpKSB7XG4gICAgICAgICAgaWYoZnVuY3Rpb25Db25maWcuZXZlbnRzKSB7XG4gICAgICAgICAgICBmb3IoY29uc3QgZXZlbnQgb2YgZnVuY3Rpb25Db25maWcuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIGlmKGV2ZW50Py5odHRwPy5wYXRoKSB7XG4gICAgICAgICAgICAgICAgZ3JhcGhxbFBhdGggPSBldmVudC5odHRwLnBhdGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZ3JhcGhxbFBhdGggIT09ICcvZ3JhcGhxbCcpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXQgdXAgR3JhcGhRTCBlbmRwb2ludCB3aXRoIGVuaGFuY2VkIGNvbnNvbGUubG9nIGNhcHR1cmVcbiAgICAgIGFwcC51c2UoZ3JhcGhxbFBhdGgsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICAvLyBHcmFwaFFMIERlYnVnIExvZ2dpbmdcbiAgICAgICAgaWYoZGVidWcgJiYgcmVxLmJvZHkgJiYgcmVxLmJvZHkucXVlcnkpIHtcbiAgICAgICAgICBsb2coJ/CflI0gR3JhcGhRTCBEZWJ1ZyBNb2RlOiBBbmFseXppbmcgcmVxdWVzdC4uLicsICdpbmZvJywgZmFsc2UpO1xuICAgICAgICAgIGxvZyhg8J+TnSBHcmFwaFFMIFF1ZXJ5OiAke3JlcS5ib2R5LnF1ZXJ5fWAsICdpbmZvJywgZmFsc2UpO1xuICAgICAgICAgIGlmKHJlcS5ib2R5LnZhcmlhYmxlcykge1xuICAgICAgICAgICAgbG9nKGDwn5OKIEdyYXBoUUwgVmFyaWFibGVzOiAke0pTT04uc3RyaW5naWZ5KHJlcS5ib2R5LnZhcmlhYmxlcywgbnVsbCwgMil9YCwgJ2luZm8nLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHJlcS5ib2R5Lm9wZXJhdGlvbk5hbWUpIHtcbiAgICAgICAgICAgIGxvZyhg8J+Pt++4jyAgR3JhcGhRTCBPcGVyYXRpb246ICR7cmVxLmJvZHkub3BlcmF0aW9uTmFtZX1gLCAnaW5mbycsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbmhhbmNlZCBjb25zb2xlLmxvZyBjYXB0dXJlXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZUxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgICBjb25zdCBsb2dzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGNvbnNvbGUubG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICBjb25zdCBsb2dNZXNzYWdlID0gYXJncy5tYXAoKGFyZykgPT5cbiAgICAgICAgICAgICh0eXBlb2YgYXJnID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGFyZywgbnVsbCwgMikgOiBTdHJpbmcoYXJnKSlcbiAgICAgICAgICApLmpvaW4oJyAnKTtcbiAgICAgICAgICBsb2dzLnB1c2gobG9nTWVzc2FnZSk7XG4gICAgICAgICAgb3JpZ2luYWxDb25zb2xlTG9nKGBbR3JhcGhRTF0gJHtsb2dNZXNzYWdlfWApO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIENyZWF0ZSBjb250ZXh0IGZvciB0aGUgaGFuZGxlclxuICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgIGF3c1JlcXVlc3RJZDogJ3Rlc3QtcmVxdWVzdC1pZCcsXG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiAnZ3JhcGhxbCcsXG4gICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiAnJExBVEVTVCcsXG4gICAgICAgICAgZ2V0UmVtYWluaW5nVGltZUluTWlsbGlzOiAoKSA9PiAzMDAwMCxcbiAgICAgICAgICBpbnZva2VkRnVuY3Rpb25Bcm46ICdhcm46YXdzOmxhbWJkYTp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmZ1bmN0aW9uOmdyYXBocWwnLFxuICAgICAgICAgIGxvZ0dyb3VwTmFtZTogJy9hd3MvbGFtYmRhL2dyYXBocWwnLFxuICAgICAgICAgIGxvZ1N0cmVhbU5hbWU6ICd0ZXN0LWxvZy1zdHJlYW0nLFxuICAgICAgICAgIHJlcSxcbiAgICAgICAgICByZXNcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBXcmFwIGhhbmRsZXIgd2l0aCBjb25zb2xlIGxvZyBjYXB0dXJlXG4gICAgICAgIGNvbnN0IHdyYXBwZWRIYW5kbGVyID0gY2FwdHVyZUNvbnNvbGVMb2dzKGdyYXBocWxIYW5kbGVyLCBxdWlldCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBDYWxsIHRoZSBoYW5kbGVyIHdpdGggR3JhcGhRTCBwYXJhbWV0ZXJzXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JhcHBlZEhhbmRsZXIoe1xuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxLmJvZHkpLFxuICAgICAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsXG4gICAgICAgICAgICBodHRwTWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBwYXRoOiBncmFwaHFsUGF0aCxcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nUGFyYW1ldGVyczoge31cbiAgICAgICAgICB9LCBjb250ZXh0KTtcblxuICAgICAgICAgIC8vIFJlc3RvcmUgY29uc29sZS5sb2dcbiAgICAgICAgICBjb25zb2xlLmxvZyA9IG9yaWdpbmFsQ29uc29sZUxvZztcblxuICAgICAgICAgIC8vIEhhbmRsZSB0aGUgcmVzdWx0XG4gICAgICAgICAgaWYocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICByZXMuc3RhdHVzKHJlc3VsdC5zdGF0dXNDb2RlKTtcbiAgICAgICAgICAgIGlmKHJlc3VsdC5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3VsdC5oZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKGtleSwgU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzLnNlbmQocmVzdWx0LmJvZHkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMuanNvbihyZXN1bHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIC8vIFJlc3RvcmUgY29uc29sZS5sb2dcbiAgICAgICAgICBjb25zb2xlLmxvZyA9IG9yaWdpbmFsQ29uc29sZUxvZztcbiAgICAgICAgICBsb2coYEdyYXBoUUwgaGFuZGxlciBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIGZhbHNlKTtcbiAgICAgICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7ZXJyb3I6IGVycm9yLm1lc3NhZ2V9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGxvZyhgR3JhcGhRTCBlbmRwb2ludCBhdmFpbGFibGUgYXQgaHR0cDovLyR7aG9zdH06JHtodHRwUG9ydH0ke2dyYXBocWxQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgRXJyb3Igc2V0dGluZyB1cCBHcmFwaFFMOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICB9XG5cbiAgLy8gRmFsbGJhY2sgZm9yIG5vbi1HcmFwaFFMIHJvdXRlcyAtIGhhbmRsZSBhbGwgcmVtYWluaW5nIHJvdXRlc1xuICBhcHAudXNlKCcvJywgYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IHJlcS51cmwgfHwgJy8nO1xuICAgICAgY29uc3QgbWV0aG9kID0gcmVxLm1ldGhvZCB8fCAnR0VUJztcbiAgICAgIGNvbnN0IHBhdGhuYW1lID0gcmVxLnBhdGggfHwgdXJsLnNwbGl0KCc/JylbMF07IC8vIEV4dHJhY3QgcGF0aG5hbWUgd2l0aG91dCBxdWVyeSBzdHJpbmdcblxuICAgICAgLy8gQWx3YXlzIGxvZyByZXF1ZXN0cyAobm90IGFmZmVjdGVkIGJ5IHF1aWV0IGZsYWcgZm9yIGRlYnVnZ2luZylcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gJHttZXRob2R9ICR7dXJsfSAocGF0aG5hbWU6ICR7cGF0aG5hbWV9KWApO1xuXG4gICAgICAvLyBGaW5kIG1hdGNoaW5nIGZ1bmN0aW9uXG4gICAgICBsZXQgbWF0Y2hlZEZ1bmN0aW9uID0gbnVsbDtcblxuICAgICAgaWYoY29uZmlnLmZ1bmN0aW9ucykge1xuICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWVzID0gT2JqZWN0LmtleXMoY29uZmlnLmZ1bmN0aW9ucyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gQXZhaWxhYmxlIGZ1bmN0aW9uczogJHtmdW5jdGlvbk5hbWVzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbU2VydmVybGVzc10gQ29uZmlnIGZ1bmN0aW9uczonLCBKU09OLnN0cmluZ2lmeShjb25maWcuZnVuY3Rpb25zLCBudWxsLCAyKSk7XG5cbiAgICAgICAgZm9yKGNvbnN0IFtmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQ29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuZnVuY3Rpb25zKSkge1xuICAgICAgICAgIGlmKGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgZm9yKGNvbnN0IGV2ZW50IG9mIGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgICBpZihldmVudC5odHRwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRQYXRoID0gZXZlbnQuaHR0cC5wYXRoIHx8ICcvJztcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudE1ldGhvZCA9IChldmVudC5odHRwLm1ldGhvZCB8fCAnR0VUJykudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0TWV0aG9kID0gbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIENoZWNraW5nIGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfTogcGF0aD1cIiR7ZXZlbnRQYXRofVwiLCBtZXRob2Q9XCIke2V2ZW50TWV0aG9kfVwiIGFnYWluc3QgcGF0aG5hbWU9XCIke3BhdGhuYW1lfVwiLCBtZXRob2Q9XCIke3JlcXVlc3RNZXRob2R9XCJgKTtcblxuICAgICAgICAgICAgICAgIC8vIEltcHJvdmVkIHBhdGggbWF0Y2hpbmcgLSBjb21wYXJlIHBhdGhuYW1lIHdpdGhvdXQgcXVlcnkgc3RyaW5nXG4gICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplIHBhdGhzIChyZW1vdmUgdHJhaWxpbmcgc2xhc2hlcyBmb3IgY29tcGFyaXNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRXZlbnRQYXRoID0gZXZlbnRQYXRoLnJlcGxhY2UoL1xcLyQvLCAnJykgfHwgJy8nO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRobmFtZSA9IHBhdGhuYW1lLnJlcGxhY2UoL1xcLyQvLCAnJykgfHwgJy8nO1xuXG4gICAgICAgICAgICAgICAgaWYobm9ybWFsaXplZEV2ZW50UGF0aCA9PT0gbm9ybWFsaXplZFBhdGhuYW1lICYmIGV2ZW50TWV0aG9kID09PSByZXF1ZXN0TWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgICBtYXRjaGVkRnVuY3Rpb24gPSBmdW5jdGlvbk5hbWU7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIOKckyBNYXRjaGVkIGZ1bmN0aW9uOiAke21hdGNoZWRGdW5jdGlvbn1gKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZihtYXRjaGVkRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tTZXJ2ZXJsZXNzXSBObyBmdW5jdGlvbnMgZm91bmQgaW4gY29uZmlnJyk7XG4gICAgICB9XG5cbiAgICAgIGlmKG1hdGNoZWRGdW5jdGlvbiAmJiBjb25maWcuZnVuY3Rpb25zW21hdGNoZWRGdW5jdGlvbl0pIHtcbiAgICAgICAgLy8gUmVzb2x2ZSBoYW5kbGVyIHBhdGggcmVsYXRpdmUgdG8gb3V0cHV0IGRpcmVjdG9yeVxuICAgICAgICBjb25zdCBoYW5kbGVyUGF0aCA9IGNvbmZpZy5mdW5jdGlvbnNbbWF0Y2hlZEZ1bmN0aW9uXS5oYW5kbGVyO1xuICAgICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIExvYWRpbmcgaGFuZGxlcjogJHtoYW5kbGVyUGF0aH0gZnJvbSBvdXRwdXREaXI6ICR7b3V0cHV0RGlyfWApO1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gYXdhaXQgbG9hZEhhbmRsZXIoaGFuZGxlclBhdGgsIG91dHB1dERpcik7XG5cbiAgICAgICAgaWYoaGFuZGxlcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gSGFuZGxlciBsb2FkZWQgc3VjY2Vzc2Z1bGx5LCB0eXBlOiAke3R5cGVvZiBoYW5kbGVyfWApO1xuICAgICAgICAgIGNvbnN0IHdyYXBwZWRIYW5kbGVyID0gY2FwdHVyZUNvbnNvbGVMb2dzKGhhbmRsZXIsIHF1aWV0KTtcblxuICAgICAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICAgICAgYm9keTogcmVxLmJvZHksXG4gICAgICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVycyxcbiAgICAgICAgICAgIGh0dHBNZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgIHBhdGg6IHVybCxcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nUGFyYW1ldGVyczogcmVxLnF1ZXJ5XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICBhd3NSZXF1ZXN0SWQ6ICd0ZXN0LXJlcXVlc3QtaWQnLFxuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBtYXRjaGVkRnVuY3Rpb24sXG4gICAgICAgICAgICBmdW5jdGlvblZlcnNpb246ICckTEFURVNUJyxcbiAgICAgICAgICAgIGdldFJlbWFpbmluZ1RpbWVJbk1pbGxpczogKCkgPT4gMzAwMDAsXG4gICAgICAgICAgICBpbnZva2VkRnVuY3Rpb25Bcm46IGBhcm46YXdzOmxhbWJkYTp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmZ1bmN0aW9uOiR7bWF0Y2hlZEZ1bmN0aW9ufWAsXG4gICAgICAgICAgICBsb2dHcm91cE5hbWU6IGAvYXdzL2xhbWJkYS8ke21hdGNoZWRGdW5jdGlvbn1gLFxuICAgICAgICAgICAgbG9nU3RyZWFtTmFtZTogJ3Rlc3QtbG9nLXN0cmVhbScsXG4gICAgICAgICAgICBtZW1vcnlMaW1pdEluTUI6ICcxMjgnXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW1NlcnZlcmxlc3NdIENhbGxpbmcgaGFuZGxlciB3aXRoIGV2ZW50OicsIEpTT04uc3RyaW5naWZ5KGV2ZW50LCBudWxsLCAyKSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3cmFwcGVkSGFuZGxlcihldmVudCwgY29udGV4dCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW1NlcnZlcmxlc3NdIEhhbmRsZXIgcmV0dXJuZWQ6JywgSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKSk7XG5cbiAgICAgICAgICAgIGlmKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQuc3RhdHVzQ29kZSkge1xuICAgICAgICAgICAgICByZXMuc3RhdHVzKHJlc3VsdC5zdGF0dXNDb2RlKTtcbiAgICAgICAgICAgICAgaWYocmVzdWx0LmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHQuaGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKGtleSwgU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzLnNlbmQocmVzdWx0LmJvZHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzLmpzb24ocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTZXJ2ZXJsZXNzXSBIYW5kbGVyIGVycm9yOicsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIEhhbmRsZXIgZXJyb3Igc3RhY2s6JywgZXJyb3Iuc3RhY2spO1xuICAgICAgICAgICAgbG9nKGBIYW5kbGVyIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgZmFsc2UpO1xuICAgICAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe2Vycm9yOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIG5vdCBmb3VuZCBmb3IgZnVuY3Rpb246ICR7bWF0Y2hlZEZ1bmN0aW9ufWApO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIHBhdGg6ICR7aGFuZGxlclBhdGh9LCBPdXRwdXQgZGlyOiAke291dHB1dERpcn1gKTtcbiAgICAgICAgICByZXMuc3RhdHVzKDQwNCkuanNvbih7ZXJyb3I6ICdIYW5kbGVyIG5vdCBmb3VuZCd9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEZ1bmN0aW9uIG5vdCBmb3VuZCBmb3IgcGF0aG5hbWU6ICR7cGF0aG5hbWV9LCBtZXRob2Q6ICR7bWV0aG9kfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gQXZhaWxhYmxlIGZ1bmN0aW9uczogJHtjb25maWcuZnVuY3Rpb25zID8gT2JqZWN0LmtleXMoY29uZmlnLmZ1bmN0aW9ucykuam9pbignLCAnKSA6ICdub25lJ31gKTtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oe2Vycm9yOiAnRnVuY3Rpb24gbm90IGZvdW5kJ30pO1xuICAgICAgfVxuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgUm91dGUgaGFuZGxpbmcgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBmYWxzZSk7XG4gICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7ZXJyb3I6IGVycm9yLm1lc3NhZ2V9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBhcHA7XG59O1xuXG5jb25zdCBjcmVhdGVXZWJTb2NrZXRTZXJ2ZXIgPSAoXG4gIGNvbmZpZzogU2VydmVybGVzc0NvbmZpZyxcbiAgb3V0cHV0RGlyOiBzdHJpbmcsXG4gIHdzUG9ydDogbnVtYmVyLFxuICBxdWlldDogYm9vbGVhbixcbiAgZGVidWc6IGJvb2xlYW5cbikgPT4ge1xuICBjb25zdCB3c3MgPSBuZXcgV2ViU29ja2V0U2VydmVyKHtwb3J0OiB3c1BvcnR9KTtcblxuICB3c3Mub24oJ2Nvbm5lY3Rpb24nLCBhc3luYyAod3MsIHJlcSkgPT4ge1xuICAgIGxvZyhgV2ViU29ja2V0IGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQ6ICR7cmVxLnVybH1gLCAnaW5mbycsIGZhbHNlKTtcblxuICAgIHdzLm9uKCdtZXNzYWdlJywgYXN5bmMgKG1lc3NhZ2UpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKG1lc3NhZ2UudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgLy8gRmluZCBtYXRjaGluZyBXZWJTb2NrZXQgZnVuY3Rpb25cbiAgICAgICAgbGV0IG1hdGNoZWRGdW5jdGlvbiA9IG51bGw7XG5cbiAgICAgICAgaWYoY29uZmlnLmZ1bmN0aW9ucykge1xuICAgICAgICAgIGZvcihjb25zdCBbZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmZ1bmN0aW9ucykpIHtcbiAgICAgICAgICAgIGlmKGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgICBmb3IoY29uc3QgZXZlbnQgb2YgZnVuY3Rpb25Db25maWcuZXZlbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYoZXZlbnQud2Vic29ja2V0KSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByb3V0ZSA9IGV2ZW50LndlYnNvY2tldC5yb3V0ZSB8fCAnJGNvbm5lY3QnO1xuICAgICAgICAgICAgICAgICAgaWYocm91dGUgPT09ICckZGVmYXVsdCcgfHwgcm91dGUgPT09IGRhdGEuYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZWRGdW5jdGlvbiA9IGZ1bmN0aW9uTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihtYXRjaGVkRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYobWF0Y2hlZEZ1bmN0aW9uICYmIGNvbmZpZy5mdW5jdGlvbnNbbWF0Y2hlZEZ1bmN0aW9uXSkge1xuICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBhd2FpdCBsb2FkSGFuZGxlcihjb25maWcuZnVuY3Rpb25zW21hdGNoZWRGdW5jdGlvbl0uaGFuZGxlciwgb3V0cHV0RGlyKTtcblxuICAgICAgICAgIGlmKGhhbmRsZXIpIHtcbiAgICAgICAgICAgIC8vIFdyYXAgaGFuZGxlciB3aXRoIGNvbnNvbGUgbG9nIGNhcHR1cmVcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRIYW5kbGVyID0gY2FwdHVyZUNvbnNvbGVMb2dzKGhhbmRsZXIsIHF1aWV0KTtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICAgICAgICBib2R5OiBkYXRhLmJvZHkgfHwgbnVsbCxcbiAgICAgICAgICAgICAgcmVxdWVzdENvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICBhcGlHYXRld2F5OiB7XG4gICAgICAgICAgICAgICAgICBlbmRwb2ludDogYHdzOi8vbG9jYWxob3N0OiR7d3NQb3J0fWBcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25JZDogJ3Rlc3QtY29ubmVjdGlvbi1pZCcsXG4gICAgICAgICAgICAgICAgcm91dGVLZXk6IGRhdGEuYWN0aW9uIHx8ICckZGVmYXVsdCdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgYXdzUmVxdWVzdElkOiAndGVzdC1yZXF1ZXN0LWlkJyxcbiAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBtYXRjaGVkRnVuY3Rpb24sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogJyRMQVRFU1QnLFxuICAgICAgICAgICAgICBnZXRSZW1haW5pbmdUaW1lSW5NaWxsaXM6ICgpID0+IDMwMDAwLFxuICAgICAgICAgICAgICBpbnZva2VkRnVuY3Rpb25Bcm46IGBhcm46YXdzOmxhbWJkYTp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmZ1bmN0aW9uOiR7bWF0Y2hlZEZ1bmN0aW9ufWAsXG4gICAgICAgICAgICAgIGxvZ0dyb3VwTmFtZTogYC9hd3MvbGFtYmRhLyR7bWF0Y2hlZEZ1bmN0aW9ufWAsXG4gICAgICAgICAgICAgIGxvZ1N0cmVhbU5hbWU6ICd0ZXN0LWxvZy1zdHJlYW0nLFxuICAgICAgICAgICAgICBtZW1vcnlMaW1pdEluTUI6ICcxMjgnXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3cmFwcGVkSGFuZGxlcihldmVudCwgY29udGV4dCk7XG5cbiAgICAgICAgICAgIC8vIEhhbmRsZSBMYW1iZGEgcmVzcG9uc2UgZm9ybWF0IGZvciBXZWJTb2NrZXRcbiAgICAgICAgICAgIGlmKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQuc3RhdHVzQ29kZSkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgTGFtYmRhIHJlc3BvbnNlIG9iamVjdCwgZXh0cmFjdCB0aGUgYm9keVxuICAgICAgICAgICAgICBjb25zdCBib2R5ID0gcmVzdWx0LmJvZHkgfHwgJyc7XG4gICAgICAgICAgICAgIHdzLnNlbmQoYm9keSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgZGlyZWN0IHJlc3BvbnNlLCBzdHJpbmdpZnkgaXRcbiAgICAgICAgICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeShyZXN1bHQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeSh7ZXJyb3I6ICdIYW5kbGVyIG5vdCBmb3VuZCd9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdzLnNlbmQoSlNPTi5zdHJpbmdpZnkoe2Vycm9yOiAnV2ViU29ja2V0IGZ1bmN0aW9uIG5vdCBmb3VuZCd9KSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgbG9nKGBXZWJTb2NrZXQgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBmYWxzZSk7XG4gICAgICAgIHdzLnNlbmQoSlNPTi5zdHJpbmdpZnkoe2Vycm9yOiBlcnJvci5tZXNzYWdlfSkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgd3Mub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgbG9nKCdXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZWQnLCAnaW5mbycsIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHdzcztcbn07XG5cbmNvbnN0IGxvYWRFbnZGaWxlID0gKGVudlBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPT4ge1xuICBjb25zdCBlbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgaWYoIWV4aXN0c1N5bmMoZW52UGF0aCkpIHtcbiAgICByZXR1cm4gZW52VmFycztcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZW52Q29udGVudCA9IHJlYWRGaWxlU3luYyhlbnZQYXRoLCAndXRmOCcpO1xuICAgIGNvbnN0IGxpbmVzID0gZW52Q29udGVudC5zcGxpdCgnXFxuJyk7XG5cbiAgICBmb3IoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgY29uc3QgdHJpbW1lZExpbmUgPSBsaW5lLnRyaW0oKTtcblxuICAgICAgLy8gU2tpcCBlbXB0eSBsaW5lcyBhbmQgY29tbWVudHNcbiAgICAgIGlmKCF0cmltbWVkTGluZSB8fCB0cmltbWVkTGluZS5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFBhcnNlIEtFWT12YWx1ZSBmb3JtYXRcbiAgICAgIGNvbnN0IGVxdWFsSW5kZXggPSB0cmltbWVkTGluZS5pbmRleE9mKCc9Jyk7XG4gICAgICBpZihlcXVhbEluZGV4ID4gMCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0cmltbWVkTGluZS5zdWJzdHJpbmcoMCwgZXF1YWxJbmRleCkudHJpbSgpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRyaW1tZWRMaW5lLnN1YnN0cmluZyhlcXVhbEluZGV4ICsgMSkudHJpbSgpO1xuXG4gICAgICAgIC8vIFJlbW92ZSBxdW90ZXMgaWYgcHJlc2VudFxuICAgICAgICBjb25zdCBjbGVhblZhbHVlID0gdmFsdWUucmVwbGFjZSgvXltcIiddfFtcIiddJC9nLCAnJyk7XG5cbiAgICAgICAgaWYoa2V5KSB7XG4gICAgICAgICAgZW52VmFyc1trZXldID0gY2xlYW5WYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgV2FybmluZzogQ291bGQgbm90IGxvYWQgLmVudiBmaWxlIGF0ICR7ZW52UGF0aH06ICR7ZXJyb3IubWVzc2FnZX1gLCAnd2FybicsIGZhbHNlKTtcbiAgfVxuXG4gIHJldHVybiBlbnZWYXJzO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlcnZlcmxlc3MgPSBhc3luYyAoXG4gIGNtZDogU2VydmVybGVzc09wdGlvbnMsXG4gIGNhbGxiYWNrOiBTZXJ2ZXJsZXNzQ2FsbGJhY2sgPSAoKSA9PiAoe30pXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7XG4gICAgY2xpTmFtZSA9ICdMZXgnLFxuICAgIGNvbmZpZyxcbiAgICBkZWJ1ZyA9IGZhbHNlLFxuICAgIGhvc3Q6IGNsaUhvc3QsXG4gICAgaHR0cFBvcnQ6IGNsaUh0dHBQb3J0LFxuICAgIGh0dHBzUG9ydDogY2xpSHR0cHNQb3J0LFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgcmVtb3ZlID0gZmFsc2UsXG4gICAgdGVzdCA9IGZhbHNlLFxuICAgIHVzZVB1YmxpY0lwLFxuICAgIHZhcmlhYmxlcyxcbiAgICB3c1BvcnQ6IGNsaVdzUG9ydFxuICB9ID0gY21kO1xuXG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICBsb2coYCR7Y2xpTmFtZX0gc3RhcnRpbmcgc2VydmVybGVzcyBkZXZlbG9wbWVudCBzZXJ2ZXIuLi5gLCAnaW5mbycsIHF1aWV0KTtcblxuICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcoY21kKTtcblxuICBjb25zdCB7b3V0cHV0RnVsbFBhdGh9ID0gTGV4Q29uZmlnLmNvbmZpZztcblxuICAvLyBMb2FkIGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tIC5lbnYgZmlsZXNcbiAgY29uc3QgZW52UGF0aHMgPSBbXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy5lbnYnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLmVudi5sb2NhbCcpLFxuICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuZW52LmRldmVsb3BtZW50JylcbiAgXTtcblxuICBsZXQgZW52VmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIC8vIExvYWQgZnJvbSAuZW52IGZpbGVzIGluIG9yZGVyIChsYXRlciBmaWxlcyBvdmVycmlkZSBlYXJsaWVyIG9uZXMpXG4gIGZvcihjb25zdCBlbnZQYXRoIG9mIGVudlBhdGhzKSB7XG4gICAgY29uc3QgZmlsZUVudlZhcnMgPSBsb2FkRW52RmlsZShlbnZQYXRoKTtcbiAgICBpZihPYmplY3Qua2V5cyhmaWxlRW52VmFycykubGVuZ3RoID4gMCkge1xuICAgICAgbG9nKGBMb2FkZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb206ICR7ZW52UGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gICAgZW52VmFycyA9IHsuLi5lbnZWYXJzLCAuLi5maWxlRW52VmFyc307XG4gIH1cblxuICAvLyBTdGFydCB3aXRoIGRlZmF1bHQgTk9ERV9FTlYgYW5kIGxvYWRlZCAuZW52IHZhcmlhYmxlc1xuICBsZXQgdmFyaWFibGVzT2JqOiBvYmplY3QgPSB7Tk9ERV9FTlY6ICdkZXZlbG9wbWVudCcsIC4uLmVudlZhcnN9O1xuXG4gIC8vIE92ZXJyaWRlIHdpdGggY29tbWFuZCBsaW5lIHZhcmlhYmxlcyBpZiBwcm92aWRlZFxuICBpZih2YXJpYWJsZXMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2xpVmFycyA9IEpTT04ucGFyc2UodmFyaWFibGVzKTtcbiAgICAgIHZhcmlhYmxlc09iaiA9IHsuLi52YXJpYWJsZXNPYmosIC4uLmNsaVZhcnN9O1xuICAgIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVudmlyb25tZW50IHZhcmlhYmxlcyBvcHRpb24gaXMgbm90IGEgdmFsaWQgSlNPTiBvYmplY3QuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzLmVudiA9IHsuLi5wcm9jZXNzLmVudiwgLi4udmFyaWFibGVzT2JqfTtcblxuICAvLyBJZiBpbiB0ZXN0IG1vZGUsIGV4aXQgZWFybHkgYWZ0ZXIgbG9hZGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgaWYodGVzdCkge1xuICAgIGxvZygnVGVzdCBtb2RlOiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgbG9hZGVkLCBleGl0aW5nJywgJ2luZm8nLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMCk7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZihyZW1vdmUpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdDbGVhbmluZyBvdXRwdXQgZGlyZWN0b3J5Li4uJyk7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMob3V0cHV0RnVsbFBhdGggfHwgJycpO1xuICAgIHNwaW5uZXIuc3VjY2VlZCgnU3VjY2Vzc2Z1bGx5IGNsZWFuZWQgb3V0cHV0IGRpcmVjdG9yeSEnKTtcbiAgfVxuXG4gIC8vIExvYWQgc2VydmVybGVzcyBjb25maWd1cmF0aW9uXG4gIGxldCBzZXJ2ZXJsZXNzQ29uZmlnOiBTZXJ2ZXJsZXNzQ29uZmlnID0ge307XG5cbiAgdHJ5IHtcbiAgICAvLyBVc2UgZ2V0UGFja2FnZURpciB0byBoYW5kbGUgbnBtIHdvcmtzcGFjZXMgY29ycmVjdGx5XG4gICAgY29uc3QgcGFja2FnZURpciA9IGdldFBhY2thZ2VEaXIoKTtcblxuICAgIC8vIFRyeSBtdWx0aXBsZSBjb25maWcgZmlsZSBmb3JtYXRzXG4gICAgY29uc3QgY29uZmlnRm9ybWF0cyA9IGNvbmZpZyA/IFtjb25maWddIDogW1xuICAgICAgcGF0aFJlc29sdmUocGFja2FnZURpciwgJ2xleC5jb25maWcubWpzJyksXG4gICAgICBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAnbGV4LmNvbmZpZy5qcycpLFxuICAgICAgcGF0aFJlc29sdmUocGFja2FnZURpciwgJ2xleC5jb25maWcuY2pzJyksXG4gICAgICBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAnbGV4LmNvbmZpZy50cycpXG4gICAgXTtcblxuICAgIGxldCBjb25maWdQYXRoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBmb3IoY29uc3QgY2FuZGlkYXRlUGF0aCBvZiBjb25maWdGb3JtYXRzKSB7XG4gICAgICBpZihleGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpKSB7XG4gICAgICAgIGNvbmZpZ1BhdGggPSBjYW5kaWRhdGVQYXRoO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihjb25maWdQYXRoKSB7XG4gICAgICBsb2coYExvYWRpbmcgc2VydmVybGVzcyBjb25maWcgZnJvbTogJHtjb25maWdQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgY29uc3QgY29uZmlnTW9kdWxlID0gYXdhaXQgaW1wb3J0KGNvbmZpZ1BhdGgpO1xuICAgICAgc2VydmVybGVzc0NvbmZpZyA9IGNvbmZpZ01vZHVsZS5kZWZhdWx0Py5zZXJ2ZXJsZXNzIHx8IGNvbmZpZ01vZHVsZS5zZXJ2ZXJsZXNzIHx8IHt9O1xuICAgICAgbG9nKCdTZXJ2ZXJsZXNzIGNvbmZpZyBsb2FkZWQgc3VjY2Vzc2Z1bGx5JywgJ2luZm8nLCBxdWlldCk7XG4gICAgICBjb25zdCBmdW5jdGlvbk5hbWVzID0gT2JqZWN0LmtleXMoc2VydmVybGVzc0NvbmZpZy5mdW5jdGlvbnMgfHwge30pO1xuICAgICAgbG9nKGBMb2FkZWQgZnVuY3Rpb25zOiAke2Z1bmN0aW9uTmFtZXMubGVuZ3RoID4gMCA/IGZ1bmN0aW9uTmFtZXMuam9pbignLCAnKSA6ICdub25lJ31gLCAnaW5mbycsIHF1aWV0KTtcblxuICAgICAgLy8gRGVidWc6IFByaW50IGZ1bGwgY29uZmlnIGlmIGRlYnVnIG1vZGVcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgRnVsbCBzZXJ2ZXJsZXNzIGNvbmZpZzogJHtKU09OLnN0cmluZ2lmeShzZXJ2ZXJsZXNzQ29uZmlnLCBudWxsLCAyKX1gLCAnaW5mbycsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9nKGBObyBzZXJ2ZXJsZXNzIGNvbmZpZyBmb3VuZC4gVHJpZWQ6ICR7Y29uZmlnRm9ybWF0cy5qb2luKCcsICcpfWAsICd3YXJuJywgcXVpZXQpO1xuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgRXJyb3IgbG9hZGluZyBzZXJ2ZXJsZXNzIGNvbmZpZzogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBpZihkZWJ1Zykge1xuICAgICAgbG9nKGBDb25maWcgZXJyb3Igc3RhY2s6ICR7ZXJyb3Iuc3RhY2t9YCwgJ2Vycm9yJywgZmFsc2UpO1xuICAgIH1cbiAgICAvLyBEb24ndCBleGl0LCBjb250aW51ZSB3aXRoIGVtcHR5IGNvbmZpZ1xuICB9XG5cbiAgLy8gTWVyZ2UgY29uZmlnIHdpdGggY29tbWFuZCBsaW5lIG9wdGlvbnNcbiAgLy8gRGV0ZXJtaW5lIGVmZmVjdGl2ZSBob3N0L3BvcnRzIHdpdGggY29ycmVjdCBwcmVjZWRlbmNlOiBDTEkgPiBjb25maWcgPiBkZWZhdWx0c1xuICBjb25zdCBjb25maWdPZmZsaW5lID0gc2VydmVybGVzc0NvbmZpZy5jdXN0b20/Llsnc2VydmVybGVzcy1vZmZsaW5lJ10gfHwge307XG4gIGNvbnN0IGVmZmVjdGl2ZUhvc3QgPSAoY2xpSG9zdCA/PyBjb25maWdPZmZsaW5lLmhvc3QgPz8gJ2xvY2FsaG9zdCcpIGFzIHN0cmluZztcbiAgY29uc3QgdG9OdW1iZXIgPSAodjogYW55LCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICBpZih2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbCB8fCB2ID09PSAnJykge1xuICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgIH1cblxuICAgIGNvbnN0IG4gPSB0eXBlb2YgdiA9PT0gJ251bWJlcicgPyB2IDogcGFyc2VJbnQoU3RyaW5nKHYpKTtcbiAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG4pID8gbiA6IGZhbGxiYWNrO1xuICB9O1xuICBjb25zdCBlZmZlY3RpdmVIdHRwUG9ydCA9IHRvTnVtYmVyKGNsaUh0dHBQb3J0ID8/IGNvbmZpZ09mZmxpbmUuaHR0cFBvcnQsIDUwMDApO1xuICBjb25zdCBlZmZlY3RpdmVIdHRwc1BvcnQgPSB0b051bWJlcihjbGlIdHRwc1BvcnQgPz8gY29uZmlnT2ZmbGluZS5odHRwc1BvcnQsIDUwMDEpO1xuICBjb25zdCBlZmZlY3RpdmVXc1BvcnQgPSB0b051bWJlcihjbGlXc1BvcnQgPz8gY29uZmlnT2ZmbGluZS53c1BvcnQsIDUwMDIpO1xuXG4gIGNvbnN0IGZpbmFsQ29uZmlnOiBTZXJ2ZXJsZXNzQ29uZmlnID0ge1xuICAgIC4uLnNlcnZlcmxlc3NDb25maWcsXG4gICAgY3VzdG9tOiB7XG4gICAgICAnc2VydmVybGVzcy1vZmZsaW5lJzoge1xuICAgICAgICBjb3JzOiBzZXJ2ZXJsZXNzQ29uZmlnLmN1c3RvbT8uWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXT8uY29ycyAhPT0gZmFsc2UsXG4gICAgICAgIGhvc3Q6IGVmZmVjdGl2ZUhvc3QsXG4gICAgICAgIGh0dHBQb3J0OiBlZmZlY3RpdmVIdHRwUG9ydCxcbiAgICAgICAgaHR0cHNQb3J0OiBlZmZlY3RpdmVIdHRwc1BvcnQsXG4gICAgICAgIHdzUG9ydDogZWZmZWN0aXZlV3NQb3J0XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG91dHB1dERpciA9IG91dHB1dEZ1bGxQYXRoIHx8ICdsaWInO1xuICBsb2coYFVzaW5nIG91dHB1dCBkaXJlY3Rvcnk6ICR7b3V0cHV0RGlyfWAsICdpbmZvJywgcXVpZXQpO1xuXG4gIHRyeSB7XG4gICAgc3Bpbm5lci5zdGFydCgnU3RhcnRpbmcgc2VydmVybGVzcyBkZXZlbG9wbWVudCBzZXJ2ZXIuLi4nKTtcblxuICAgIGNvbnN0IGh0dHBQb3J0ID0gZmluYWxDb25maWcuY3VzdG9tIVsnc2VydmVybGVzcy1vZmZsaW5lJ10hLmh0dHBQb3J0ITtcbiAgICBjb25zdCB3c1BvcnQgPSBmaW5hbENvbmZpZy5jdXN0b20hWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSEud3NQb3J0ITtcbiAgICBjb25zdCBob3N0ID0gZmluYWxDb25maWcuY3VzdG9tIVsnc2VydmVybGVzcy1vZmZsaW5lJ10hLmhvc3QhO1xuXG4gICAgbG9nKGBDcmVhdGluZyBIVFRQIHNlcnZlciBvbiAke2hvc3R9OiR7aHR0cFBvcnR9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgbG9nKGBDcmVhdGluZyBXZWJTb2NrZXQgc2VydmVyIG9uIHBvcnQgJHt3c1BvcnR9YCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAvLyBDcmVhdGUgRXhwcmVzcyBzZXJ2ZXJcbiAgICBjb25zdCBleHByZXNzQXBwID0gYXdhaXQgY3JlYXRlRXhwcmVzc1NlcnZlcihcbiAgICAgIGZpbmFsQ29uZmlnLFxuICAgICAgb3V0cHV0RGlyLFxuICAgICAgaHR0cFBvcnQsXG4gICAgICBob3N0LFxuICAgICAgcXVpZXQsXG4gICAgICBkZWJ1Z1xuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgV2ViU29ja2V0IHNlcnZlclxuICAgIGNvbnN0IHdzU2VydmVyID0gY3JlYXRlV2ViU29ja2V0U2VydmVyKFxuICAgICAgZmluYWxDb25maWcsXG4gICAgICBvdXRwdXREaXIsXG4gICAgICB3c1BvcnQsXG4gICAgICBxdWlldCxcbiAgICAgIGRlYnVnXG4gICAgKTtcblxuICAgIC8vIEhhbmRsZSBzZXJ2ZXIgZXJyb3JzXG4gICAgd3NTZXJ2ZXIub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICBsb2coYFdlYlNvY2tldCBzZXJ2ZXIgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBzdGFydCBXZWJTb2NrZXQgc2VydmVyLicpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG5cbiAgICAvLyBTdGFydCBFeHByZXNzIHNlcnZlclxuICAgIGNvbnN0IHNlcnZlciA9IGV4cHJlc3NBcHAubGlzdGVuKGh0dHBQb3J0LCBob3N0LCAoKSA9PiB7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ1NlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyIHN0YXJ0ZWQuJyk7XG5cbiAgICAgIGRpc3BsYXlTZXJ2ZXJTdGF0dXMoXG4gICAgICAgIGh0dHBQb3J0LFxuICAgICAgICBmaW5hbENvbmZpZy5jdXN0b20hWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSEuaHR0cHNQb3J0ISxcbiAgICAgICAgd3NQb3J0LFxuICAgICAgICBob3N0LFxuICAgICAgICBxdWlldFxuICAgICAgKTtcblxuICAgICAgZmV0Y2hQdWJsaWNJcCh1c2VQdWJsaWNJcCkudGhlbigocHVibGljSXApID0+IHtcbiAgICAgICAgaWYocHVibGljSXApIHtcbiAgICAgICAgICBkaXNwbGF5U2VydmVyU3RhdHVzKFxuICAgICAgICAgICAgaHR0cFBvcnQsXG4gICAgICAgICAgICBmaW5hbENvbmZpZy5jdXN0b20hWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSEuaHR0cHNQb3J0ISxcbiAgICAgICAgICAgIHdzUG9ydCxcbiAgICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgICBxdWlldCxcbiAgICAgICAgICAgIHB1YmxpY0lwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgRXhwcmVzcyBzZXJ2ZXIgZXJyb3JzXG4gICAgc2VydmVyLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgbG9nKGBFeHByZXNzIHNlcnZlciBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIHN0YXJ0IEV4cHJlc3Mgc2VydmVyLicpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgZ3JhY2VmdWwgc2h1dGRvd25cbiAgICBjb25zdCBzaHV0ZG93biA9ICgpID0+IHtcbiAgICAgIGxvZygnXFxuU2h1dHRpbmcgZG93biBzZXJ2ZXJsZXNzIGRldmVsb3BtZW50IHNlcnZlci4uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgc2VydmVyLmNsb3NlKCk7XG4gICAgICB3c1NlcnZlci5jbG9zZSgpO1xuICAgICAgY2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIHByb2Nlc3Mub24oJ1NJR0lOVCcsIHNodXRkb3duKTtcbiAgICBwcm9jZXNzLm9uKCdTSUdURVJNJywgc2h1dGRvd24pO1xuXG4gICAgLy8gS2VlcCB0aGUgcHJvY2VzcyBhbGl2ZVxuICAgIHByb2Nlc3Muc3RkaW4ucmVzdW1lKCk7XG5cbiAgICBsb2coJ1NlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyIGlzIHJ1bm5pbmcuIFByZXNzIEN0cmwrQyB0byBzdG9wLicsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgLy8gRG9uJ3QgY2FsbCBjYWxsYmFjayBoZXJlLCBsZXQgdGhlIHByb2Nlc3Mgc3RheSBhbGl2ZVxuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIHN0YXJ0IHNlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyLicpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG59OyJdLCJuYW1lcyI6WyJib3hlbiIsImNoYWxrIiwiZXhwcmVzcyIsInJlYWRGaWxlU3luYyIsImV4aXN0c1N5bmMiLCJta2RpclN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiaG9tZWRpciIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsImpvaW4iLCJpc0Fic29sdXRlIiwicGF0aFRvRmlsZVVSTCIsIldlYlNvY2tldFNlcnZlciIsIkxleENvbmZpZyIsImdldFBhY2thZ2VEaXIiLCJjcmVhdGVTcGlubmVyIiwicmVtb3ZlRmlsZXMiLCJsb2ciLCJnZXRDYWNoZURpciIsImNhY2hlRGlyIiwicmVjdXJzaXZlIiwiZ2V0Q2FjaGVQYXRoIiwicmVhZFB1YmxpY0lwQ2FjaGUiLCJjYWNoZVBhdGgiLCJjYWNoZURhdGEiLCJjYWNoZSIsIkpTT04iLCJwYXJzZSIsIm9uZVdlZWtNcyIsIkRhdGUiLCJub3ciLCJ0aW1lc3RhbXAiLCJ3cml0ZVB1YmxpY0lwQ2FjaGUiLCJpcCIsInN0cmluZ2lmeSIsImZldGNoUHVibGljSXAiLCJmb3JjZVJlZnJlc2giLCJQcm9taXNlIiwiY2FjaGVkIiwiZmV0Y2giLCJ0aGVuIiwicmVzIiwidGV4dCIsImRhdGEiLCJ0cmltIiwiY2F0Y2giLCJ1bmRlZmluZWQiLCJkaXNwbGF5U2VydmVyU3RhdHVzIiwiaHR0cFBvcnQiLCJodHRwc1BvcnQiLCJ3c1BvcnQiLCJob3N0IiwicXVpZXQiLCJwdWJsaWNJcCIsImh0dHBVcmwiLCJodHRwc1VybCIsIndzVXJsIiwid3NzVXJsIiwidXJsTGluZXMiLCJncmVlbiIsInVuZGVybGluZSIsInN0YXR1c0JveCIsImN5YW4iLCJib2xkIiwieWVsbG93IiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJTdHlsZSIsIm1hcmdpbiIsInBhZGRpbmciLCJjb25zb2xlIiwibG9hZEhhbmRsZXIiLCJoYW5kbGVyUGF0aCIsIm91dHB1dERpciIsImhhbmRsZXJQYXJ0cyIsInNwbGl0IiwiZmlsZVBhdGgiLCJleHBvcnROYW1lIiwibGVuZ3RoIiwic2xpY2UiLCJpbmNsdWRlcyIsImVycm9yIiwicGF0aFBhcnRzIiwibGFzdFBhcnQiLCJmdWxsUGF0aCIsImV4dGVuc2lvbnMiLCJwYXRoV2l0aG91dEV4dCIsInJlcGxhY2UiLCJleHQiLCJjYW5kaWRhdGVQYXRoIiwiRXJyb3IiLCJpbXBvcnRQYXRoIiwiZW5kc1dpdGgiLCJpbXBvcnRVcmwiLCJocmVmIiwiaGFuZGxlck1vZHVsZSIsIk9iamVjdCIsImtleXMiLCJoYW5kbGVyIiwiZGVmYXVsdCIsImltcG9ydEVycm9yIiwibWVzc2FnZSIsInN0YWNrIiwiY2FwdHVyZUNvbnNvbGVMb2dzIiwiZXZlbnQiLCJjb250ZXh0Iiwib3JpZ2luYWxDb25zb2xlTG9nIiwib3JpZ2luYWxDb25zb2xlRXJyb3IiLCJvcmlnaW5hbENvbnNvbGVXYXJuIiwid2FybiIsIm9yaWdpbmFsQ29uc29sZUluZm8iLCJpbmZvIiwibG9ncyIsImFyZ3MiLCJwdXNoIiwicmVzdWx0IiwiZ3JheSIsImZvckVhY2giLCJjcmVhdGVFeHByZXNzU2VydmVyIiwiY29uZmlnIiwiZGVidWciLCJhcHAiLCJ1c2UiLCJyZXEiLCJuZXh0IiwiaGVhZGVyIiwibWV0aG9kIiwic2VuZFN0YXR1cyIsImpzb24iLCJsb2FkR3JhcGhRTFNjaGVtYSIsImdyYXBocWxIYW5kbGVyIiwiZnVuY3Rpb25zIiwiZnVuY3Rpb25OYW1lIiwiZnVuY3Rpb25Db25maWciLCJlbnRyaWVzIiwiZXZlbnRzIiwiaHR0cCIsInBhdGgiLCJncmFwaHFsUGF0aCIsIl9mdW5jdGlvbk5hbWUiLCJib2R5IiwicXVlcnkiLCJ2YXJpYWJsZXMiLCJvcGVyYXRpb25OYW1lIiwibG9nTWVzc2FnZSIsIm1hcCIsImFyZyIsIlN0cmluZyIsImF3c1JlcXVlc3RJZCIsImZ1bmN0aW9uVmVyc2lvbiIsImdldFJlbWFpbmluZ1RpbWVJbk1pbGxpcyIsImludm9rZWRGdW5jdGlvbkFybiIsImxvZ0dyb3VwTmFtZSIsImxvZ1N0cmVhbU5hbWUiLCJ3cmFwcGVkSGFuZGxlciIsImhlYWRlcnMiLCJodHRwTWV0aG9kIiwicXVlcnlTdHJpbmdQYXJhbWV0ZXJzIiwic3RhdHVzQ29kZSIsInN0YXR1cyIsImtleSIsInZhbHVlIiwic2V0SGVhZGVyIiwic2VuZCIsInVybCIsInBhdGhuYW1lIiwibWF0Y2hlZEZ1bmN0aW9uIiwiZnVuY3Rpb25OYW1lcyIsImV2ZW50UGF0aCIsImV2ZW50TWV0aG9kIiwidG9VcHBlckNhc2UiLCJyZXF1ZXN0TWV0aG9kIiwibm9ybWFsaXplZEV2ZW50UGF0aCIsIm5vcm1hbGl6ZWRQYXRobmFtZSIsIm1lbW9yeUxpbWl0SW5NQiIsImNyZWF0ZVdlYlNvY2tldFNlcnZlciIsIndzcyIsInBvcnQiLCJvbiIsIndzIiwidG9TdHJpbmciLCJ3ZWJzb2NrZXQiLCJyb3V0ZSIsImFjdGlvbiIsInJlcXVlc3RDb250ZXh0IiwiYXBpR2F0ZXdheSIsImVuZHBvaW50IiwiY29ubmVjdGlvbklkIiwicm91dGVLZXkiLCJsb2FkRW52RmlsZSIsImVudlBhdGgiLCJlbnZWYXJzIiwiZW52Q29udGVudCIsImxpbmVzIiwibGluZSIsInRyaW1tZWRMaW5lIiwic3RhcnRzV2l0aCIsImVxdWFsSW5kZXgiLCJpbmRleE9mIiwic3Vic3RyaW5nIiwiY2xlYW5WYWx1ZSIsInNlcnZlcmxlc3MiLCJjbWQiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJjbGlIb3N0IiwiY2xpSHR0cFBvcnQiLCJjbGlIdHRwc1BvcnQiLCJyZW1vdmUiLCJ0ZXN0IiwidXNlUHVibGljSXAiLCJjbGlXc1BvcnQiLCJzcGlubmVyIiwicGFyc2VDb25maWciLCJvdXRwdXRGdWxsUGF0aCIsImVudlBhdGhzIiwicHJvY2VzcyIsImN3ZCIsImZpbGVFbnZWYXJzIiwidmFyaWFibGVzT2JqIiwiTk9ERV9FTlYiLCJjbGlWYXJzIiwiX2Vycm9yIiwiZW52Iiwic3RhcnQiLCJzdWNjZWVkIiwic2VydmVybGVzc0NvbmZpZyIsInBhY2thZ2VEaXIiLCJjb25maWdGb3JtYXRzIiwiY29uZmlnUGF0aCIsImNvbmZpZ01vZHVsZSIsImNvbmZpZ09mZmxpbmUiLCJjdXN0b20iLCJlZmZlY3RpdmVIb3N0IiwidG9OdW1iZXIiLCJ2IiwiZmFsbGJhY2siLCJuIiwicGFyc2VJbnQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImVmZmVjdGl2ZUh0dHBQb3J0IiwiZWZmZWN0aXZlSHR0cHNQb3J0IiwiZWZmZWN0aXZlV3NQb3J0IiwiZmluYWxDb25maWciLCJjb3JzIiwiZXhwcmVzc0FwcCIsIndzU2VydmVyIiwiZmFpbCIsInNlcnZlciIsImxpc3RlbiIsInNodXRkb3duIiwiY2xvc2UiLCJzdGRpbiIsInJlc3VtZSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsT0FBT0EsV0FBVyxRQUFRO0FBQzFCLE9BQU9DLFdBQVcsUUFBUTtBQUMxQixPQUFPQyxhQUFhLFVBQVU7QUFDOUIsU0FBUUMsWUFBWSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsYUFBYSxRQUFPLEtBQUs7QUFDdEUsU0FBUUMsT0FBTyxRQUFPLEtBQUs7QUFDM0IsU0FBUUMsV0FBV0MsV0FBVyxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsUUFBTyxPQUFPO0FBQzlELFNBQVFDLGFBQWEsUUFBTyxNQUFNO0FBQ2xDLFNBQVFDLGVBQWUsUUFBTyxLQUFLO0FBRW5DLFNBQVFDLFNBQVMsRUFBRUMsYUFBYSxRQUFPLHFCQUFxQjtBQUM1RCxTQUFRQyxhQUFhLEVBQUVDLFdBQVcsUUFBTyxxQkFBcUI7QUFDOUQsU0FBUUMsR0FBRyxRQUFPLHFCQUFxQjtBQW1EdkMsTUFBTUMsY0FBYztJQUNsQixNQUFNQyxXQUFXVixLQUFLSCxXQUFXO0lBQ2pDLElBQUcsQ0FBQ0gsV0FBV2dCLFdBQVc7UUFDeEJmLFVBQVVlLFVBQVU7WUFBQ0MsV0FBVztRQUFJO0lBQ3RDO0lBQ0EsT0FBT0Q7QUFDVDtBQUVBLE1BQU1FLGVBQWUsSUFBY1osS0FBS1MsZUFBZTtBQUV2RCxNQUFNSSxvQkFBb0I7SUFDeEIsTUFBTUMsWUFBWUY7SUFDbEIsSUFBRyxDQUFDbEIsV0FBV29CLFlBQVk7UUFDekIsT0FBTztJQUNUO0lBRUEsSUFBSTtRQUNGLE1BQU1DLFlB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
|
|
834
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zZXJ2ZXJsZXNzL3NlcnZlcmxlc3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBib3hlbiBmcm9tICdib3hlbic7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQge3JlYWRGaWxlU3luYywgZXhpc3RzU3luYywgbWtkaXJTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2hvbWVkaXJ9IGZyb20gJ29zJztcbmltcG9ydCB7cmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZSwgam9pbiwgaXNBYnNvbHV0ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge3BhdGhUb0ZpbGVVUkx9IGZyb20gJ3VybCc7XG5pbXBvcnQge1dlYlNvY2tldFNlcnZlcn0gZnJvbSAnd3MnO1xuXG5pbXBvcnQge0xleENvbmZpZywgZ2V0UGFja2FnZURpcn0gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lciwgcmVtb3ZlRmlsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJsZXNzT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuICByZWFkb25seSBodHRwUG9ydD86IG51bWJlcjtcbiAgcmVhZG9ubHkgaHR0cHNQb3J0PzogbnVtYmVyO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlbW92ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRlc3Q/OiBib29sZWFuO1xuICByZWFkb25seSB1c2VQdWJsaWNJcD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IHN0cmluZztcbiAgcmVhZG9ubHkgd3NQb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBTZXJ2ZXJsZXNzQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmludGVyZmFjZSBQdWJsaWNJcENhY2hlIHtcbiAgaXA6IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBTZXJ2ZXJsZXNzSGFuZGxlciB7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgZXZlbnRzPzogQXJyYXk8e1xuICAgIHJlYWRvbmx5IGh0dHA/OiB7XG4gICAgICByZWFkb25seSBjb3JzPzogYm9vbGVhbjtcbiAgICAgIHJlYWRvbmx5IG1ldGhvZD86IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG4gICAgfTtcbiAgICByZWFkb25seSB3ZWJzb2NrZXQ/OiB7XG4gICAgICByZWFkb25seSByb3V0ZT86IHN0cmluZztcbiAgICB9O1xuICB9Pjtcbn1cblxuaW50ZXJmYWNlIFNlcnZlcmxlc3NDb25maWcge1xuICByZWFkb25seSBjdXN0b20/OiB7XG4gICAgcmVhZG9ubHkgJ3NlcnZlcmxlc3Mtb2ZmbGluZSc/OiB7XG4gICAgICByZWFkb25seSBjb3JzPzogYm9vbGVhbjtcbiAgICAgIHJlYWRvbmx5IGhvc3Q/OiBzdHJpbmc7XG4gICAgICByZWFkb25seSBodHRwUG9ydD86IG51bWJlcjtcbiAgICAgIHJlYWRvbmx5IGh0dHBzUG9ydD86IG51bWJlcjtcbiAgICAgIHJlYWRvbmx5IHdzUG9ydD86IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICByZWFkb25seSBmdW5jdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBTZXJ2ZXJsZXNzSGFuZGxlcj47XG59XG5cbmNvbnN0IGdldENhY2hlRGlyID0gKCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGNhY2hlRGlyID0gam9pbihob21lZGlyKCksICcubGV4LWNhY2hlJyk7XG4gIGlmKCFleGlzdHNTeW5jKGNhY2hlRGlyKSkge1xuICAgIG1rZGlyU3luYyhjYWNoZURpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICB9XG4gIHJldHVybiBjYWNoZURpcjtcbn07XG5cbmNvbnN0IGdldENhY2hlUGF0aCA9ICgpOiBzdHJpbmcgPT4gam9pbihnZXRDYWNoZURpcigpLCAncHVibGljLWlwLmpzb24nKTtcblxuY29uc3QgcmVhZFB1YmxpY0lwQ2FjaGUgPSAoKTogUHVibGljSXBDYWNoZSB8IG51bGwgPT4ge1xuICBjb25zdCBjYWNoZVBhdGggPSBnZXRDYWNoZVBhdGgoKTtcbiAgaWYoIWV4aXN0c1N5bmMoY2FjaGVQYXRoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjYWNoZURhdGEgPSByZWFkRmlsZVN5bmMoY2FjaGVQYXRoLCAndXRmOCcpO1xuICAgIGNvbnN0IGNhY2hlOiBQdWJsaWNJcENhY2hlID0gSlNPTi5wYXJzZShjYWNoZURhdGEpO1xuXG4gICAgLy8gQ2hlY2sgaWYgY2FjaGUgaXMgb2xkZXIgdGhhbiAxIHdlZWtcbiAgICBjb25zdCBvbmVXZWVrTXMgPSA3ICogMjQgKiA2MCAqIDYwICogMTAwMDtcbiAgICBpZihEYXRlLm5vdygpIC0gY2FjaGUudGltZXN0YW1wID4gb25lV2Vla01zKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FjaGU7XG4gIH0gY2F0Y2h7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmNvbnN0IHdyaXRlUHVibGljSXBDYWNoZSA9IChpcDogc3RyaW5nKTogdm9pZCA9PiB7XG4gIGNvbnN0IGNhY2hlUGF0aCA9IGdldENhY2hlUGF0aCgpO1xuICBjb25zdCBjYWNoZTogUHVibGljSXBDYWNoZSA9IHtcbiAgICBpcCxcbiAgICB0aW1lc3RhbXA6IERhdGUubm93KClcbiAgfTtcbiAgd3JpdGVGaWxlU3luYyhjYWNoZVBhdGgsIEpTT04uc3RyaW5naWZ5KGNhY2hlLCBudWxsLCAyKSk7XG59O1xuXG5jb25zdCBmZXRjaFB1YmxpY0lwID0gKGZvcmNlUmVmcmVzaDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+ID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gIGlmKCFmb3JjZVJlZnJlc2gpIHtcbiAgICBjb25zdCBjYWNoZWQgPSByZWFkUHVibGljSXBDYWNoZSgpO1xuICAgIGlmKGNhY2hlZCkge1xuICAgICAgcmVzb2x2ZShjYWNoZWQuaXApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVzZSBmZXRjaCBpbnN0ZWFkIG9mIGh0dHBzXG4gIGZldGNoKCdodHRwczovL2FwaS5pcGlmeS5vcmcnKVxuICAgIC50aGVuKChyZXMpID0+IHJlcy50ZXh0KCkpXG4gICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGlwID0gZGF0YS50cmltKCk7XG4gICAgICBpZihpcCkge1xuICAgICAgICB3cml0ZVB1YmxpY0lwQ2FjaGUoaXApO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShpcCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKCkgPT4gcmVzb2x2ZSh1bmRlZmluZWQpKTtcbn0pO1xuXG5jb25zdCByZXNvbHZlUHVibGljSXBGb3JEaXNwbGF5ID0gYXN5bmMgKGZvcmNlUmVmcmVzaDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+ID0+IHtcbiAgY29uc3QgdGltZW91dE1zID0gMTUwMDtcbiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZTx1bmRlZmluZWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCksIHRpbWVvdXRNcyk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmFjZShbZmV0Y2hQdWJsaWNJcChmb3JjZVJlZnJlc2gpLCB0aW1lb3V0UHJvbWlzZV0pO1xuICB9IGNhdGNoe1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn07XG5cbmNvbnN0IGRpc3BsYXlTZXJ2ZXJTdGF0dXMgPSAoXG4gIGh0dHBQb3J0OiBudW1iZXIsXG4gIGh0dHBzUG9ydDogbnVtYmVyLFxuICB3c1BvcnQ6IG51bWJlcixcbiAgaG9zdDogc3RyaW5nLFxuICBxdWlldDogYm9vbGVhbixcbiAgcHVibGljSXA/OiBzdHJpbmdcbikgPT4ge1xuICBpZihxdWlldCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGh0dHBVcmwgPSBgaHR0cDovLyR7aG9zdH06JHtodHRwUG9ydH1gO1xuICBjb25zdCBodHRwc1VybCA9IGBodHRwczovLyR7aG9zdH06JHtodHRwc1BvcnR9YDtcbiAgY29uc3Qgd3NVcmwgPSBgd3M6Ly8ke2hvc3R9OiR7d3NQb3J0fWA7XG4gIGNvbnN0IHdzc1VybCA9IGB3c3M6Ly8ke2hvc3R9OiR7d3NQb3J0fWA7XG5cbiAgbGV0IHVybExpbmVzID0gYCR7Y2hhbGsuZ3JlZW4oJ0hUVFA6Jyl9ICAgICAgJHtjaGFsay51bmRlcmxpbmUoaHR0cFVybCl9XFxuYDtcbiAgdXJsTGluZXMgKz0gYCR7Y2hhbGsuZ3JlZW4oJ0hUVFBTOicpfSAgICAgJHtjaGFsay51bmRlcmxpbmUoaHR0cHNVcmwpfVxcbmA7XG4gIHVybExpbmVzICs9IGAke2NoYWxrLmdyZWVuKCdXZWJTb2NrZXQ6Jyl9ICR7Y2hhbGsudW5kZXJsaW5lKHdzVXJsKX1cXG5gO1xuICB1cmxMaW5lcyArPSBgJHtjaGFsay5ncmVlbignV1NTOicpfSAgICAgICAke2NoYWxrLnVuZGVybGluZSh3c3NVcmwpfVxcbmA7XG5cbiAgaWYocHVibGljSXApIHtcbiAgICB1cmxMaW5lcyArPSBgXFxuJHtjaGFsay5ncmVlbignUHVibGljOicpfSAgICAke2NoYWxrLnVuZGVybGluZShgaHR0cDovLyR7cHVibGljSXB9OiR7aHR0cFBvcnR9YCl9XFxuYDtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1c0JveCA9IGJveGVuKFxuICAgIGAke2NoYWxrLmN5YW4uYm9sZCgn8J+agCBTZXJ2ZXJsZXNzIERldmVsb3BtZW50IFNlcnZlciBSdW5uaW5nJyl9XFxuXFxuJHt1cmxMaW5lc31cXG5gICtcbiAgICBgJHtjaGFsay55ZWxsb3coJ1ByZXNzIEN0cmwrQyB0byBzdG9wIHRoZSBzZXJ2ZXInKX1gLFxuICAgIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyMxYTFhMWEnLFxuICAgICAgYm9yZGVyQ29sb3I6ICdjeWFuJyxcbiAgICAgIGJvcmRlclN0eWxlOiAncm91bmQnLFxuICAgICAgbWFyZ2luOiAxLFxuICAgICAgcGFkZGluZzogMVxuICAgIH1cbiAgKTtcblxuICBjb25zb2xlLmxvZyhgXFxuJHtzdGF0dXNCb3h9XFxuYCk7XG59O1xuXG5jb25zdCBsb2FkSGFuZGxlciA9IGFzeW5jIChoYW5kbGVyUGF0aDogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gUGFyc2luZyBoYW5kbGVyIHBhdGg6ICR7aGFuZGxlclBhdGh9YCk7XG5cbiAgICAvLyBQYXJzZSBBV1MgTGFtYmRhIGhhbmRsZXIgZm9ybWF0OiBcInBhdGgvdG8vZmlsZS5leHBvcnROYW1lXCIgb3IgXCJmaWxlLmV4cG9ydE5hbWVcIlxuICAgIC8vIEV4YW1wbGVzOiBcImluZGV4LmhhbmRsZXJcIiwgXCJoYW5kbGVycy9hcGkuaGFuZGxlclwiLCBcInNyYy9pbmRleC5kZWZhdWx0XCJcbiAgICBjb25zdCBoYW5kbGVyUGFydHMgPSBoYW5kbGVyUGF0aC5zcGxpdCgnLicpO1xuICAgIGNvbnNvbGUubG9nKCdbU2VydmVybGVzc10gSGFuZGxlciBwYXJ0cyBhZnRlciBzcGxpdDonLCBoYW5kbGVyUGFydHMpO1xuXG4gICAgbGV0IGZpbGVQYXRoOiBzdHJpbmc7XG4gICAgbGV0IGV4cG9ydE5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYoaGFuZGxlclBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEFXUyBMYW1iZGEgZm9ybWF0OiBcImZpbGUuZXhwb3J0TmFtZVwiXG4gICAgICAvLyBUYWtlIHRoZSBsYXN0IHBhcnQgYXMgZXhwb3J0IG5hbWUsIHJlc3QgYXMgZmlsZSBwYXRoXG4gICAgICAvLyBIYW5kbGUgY2FzZXMgbGlrZSBcImluZGV4LmhhbmRsZXJcIiAtPiBmaWxlOiBcImluZGV4XCIsIGV4cG9ydDogXCJoYW5kbGVyXCJcbiAgICAgIC8vIE9yIFwiaGFuZGxlcnMvYXBpLmhhbmRsZXJcIiAtPiBmaWxlOiBcImhhbmRsZXJzL2FwaVwiLCBleHBvcnQ6IFwiaGFuZGxlclwiXG4gICAgICBleHBvcnROYW1lID0gaGFuZGxlclBhcnRzW2hhbmRsZXJQYXJ0cy5sZW5ndGggLSAxXSB8fCBudWxsO1xuICAgICAgZmlsZVBhdGggPSBoYW5kbGVyUGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oJy4nKTtcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gUGFyc2VkIEFXUyBMYW1iZGEgZm9ybWF0IC0gZmlsZVBhdGg6IFwiJHtmaWxlUGF0aH1cIiwgZXhwb3J0TmFtZTogXCIke2V4cG9ydE5hbWV9XCJgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2ltcGxlIGZvcm1hdDoganVzdCB0aGUgZmlsZSBwYXRoXG4gICAgICBmaWxlUGF0aCA9IGhhbmRsZXJQYXRoO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBTaW1wbGUgZm9ybWF0IC0gZmlsZVBhdGg6IFwiJHtmaWxlUGF0aH1cImApO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSBmaWxlUGF0aCBkb2Vzbid0IGhhdmUgdGhlIGV4cG9ydCBuYW1lIGluIGl0XG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJy5oYW5kbGVyJykgfHwgZmlsZVBhdGguaW5jbHVkZXMoJy5kZWZhdWx0JykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBXQVJOSU5HOiBmaWxlUGF0aCBzdGlsbCBjb250YWlucyBleHBvcnQgbmFtZSEgZmlsZVBhdGg6IFwiJHtmaWxlUGF0aH1cImApO1xuICAgICAgLy8gVHJ5IHRvIGZpeCBpdCAtIHJlbW92ZSB0aGUgbGFzdCBwYXJ0IGlmIGl0IGxvb2tzIGxpa2UgYW4gZXhwb3J0IG5hbWVcbiAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IGZpbGVQYXRoLnNwbGl0KCcuJyk7XG4gICAgICBpZihwYXRoUGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zdCBsYXN0UGFydCA9IHBhdGhQYXJ0c1twYXRoUGFydHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmKFsnaGFuZGxlcicsICdkZWZhdWx0JywgJ2luZGV4J10uaW5jbHVkZXMobGFzdFBhcnQpICYmICFleHBvcnROYW1lKSB7XG4gICAgICAgICAgZXhwb3J0TmFtZSA9IGxhc3RQYXJ0O1xuICAgICAgICAgIGZpbGVQYXRoID0gcGF0aFBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKCcuJyk7XG4gICAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBGaXhlZCAtIGZpbGVQYXRoOiBcIiR7ZmlsZVBhdGh9XCIsIGV4cG9ydE5hbWU6IFwiJHtleHBvcnROYW1lfVwiYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYm90aCByZWxhdGl2ZSBwYXRocyBhbmQgYWJzb2x1dGUgcGF0aHNcbiAgICBsZXQgZnVsbFBhdGg6IHN0cmluZztcbiAgICBpZihpc0Fic29sdXRlKGZpbGVQYXRoKSkge1xuICAgICAgZnVsbFBhdGggPSBmaWxlUGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgZnVsbFBhdGggPSBwYXRoUmVzb2x2ZShvdXRwdXREaXIsIGZpbGVQYXRoKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBSZXNvbHZlZCBmdWxsUGF0aCAoYmVmb3JlIGV4dGVuc2lvbnMpOiAke2Z1bGxQYXRofWApO1xuXG4gICAgLy8gVHJ5IGRpZmZlcmVudCBleHRlbnNpb25zIGlmIGZpbGUgZG9lc24ndCBleGlzdFxuICAgIGlmKCFleGlzdHNTeW5jKGZ1bGxQYXRoKSkge1xuICAgICAgY29uc3QgZXh0ZW5zaW9ucyA9IFsnLmpzJywgJy5tanMnLCAnLmNqcyddO1xuICAgICAgY29uc3QgcGF0aFdpdGhvdXRFeHQgPSBmdWxsUGF0aC5yZXBsYWNlKC9cXC4oanN8bWpzfGNqcykkLywgJycpO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBUcnlpbmcgZXh0ZW5zaW9ucy4gQmFzZSBwYXRoOiAke3BhdGhXaXRob3V0RXh0fWApO1xuICAgICAgZm9yKGNvbnN0IGV4dCBvZiBleHRlbnNpb25zKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZVBhdGggPSBwYXRoV2l0aG91dEV4dCArIGV4dDtcbiAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBDaGVja2luZzogJHtjYW5kaWRhdGVQYXRofSAoZXhpc3RzOiAke2V4aXN0c1N5bmMoY2FuZGlkYXRlUGF0aCl9KWApO1xuICAgICAgICBpZihleGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpKSB7XG4gICAgICAgICAgZnVsbFBhdGggPSBjYW5kaWRhdGVQYXRoO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gRm91bmQgZmlsZSB3aXRoIGV4dGVuc2lvbjogJHtmdWxsUGF0aH1gKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEZpbGUgZXhpc3RzIHdpdGhvdXQgdHJ5aW5nIGV4dGVuc2lvbnM6ICR7ZnVsbFBhdGh9YCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBGaW5hbCBmdWxsUGF0aDogJHtmdWxsUGF0aH1gKTtcbiAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEV4cG9ydCBuYW1lOiAke2V4cG9ydE5hbWUgfHwgJ2RlZmF1bHQvaGFuZGxlcid9YCk7XG4gICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBGaWxlIGV4aXN0czogJHtleGlzdHNTeW5jKGZ1bGxQYXRoKX1gKTtcblxuICAgIGlmKCFleGlzdHNTeW5jKGZ1bGxQYXRoKSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEhhbmRsZXIgZmlsZSBub3QgZm91bmQ6ICR7ZnVsbFBhdGh9YCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gT3V0cHV0IGRpcmVjdG9yeTogJHtvdXRwdXREaXJ9YCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gSGFuZGxlciBwYXRoIGZyb20gY29uZmlnOiAke2hhbmRsZXJQYXRofWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIYW5kbGVyIGZpbGUgbm90IGZvdW5kOiAke2Z1bGxQYXRofWApO1xuICAgIH1cblxuICAgIC8vIER5bmFtaWMgaW1wb3J0IG9mIHRoZSBoYW5kbGVyIHdpdGggYmV0dGVyIGVycm9yIGhhbmRsaW5nXG4gICAgLy8gQWRkIC5qcyBleHRlbnNpb24gaWYgaW1wb3J0aW5nIFR5cGVTY3JpcHQgY29tcGlsZWQgb3V0cHV0XG4gICAgY29uc3QgaW1wb3J0UGF0aCA9IGZ1bGxQYXRoLmVuZHNXaXRoKCcudHMnKSA/IGZ1bGxQYXRoLnJlcGxhY2UoL1xcLnRzJC8sICcuanMnKSA6IGZ1bGxQYXRoO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENvbnZlcnQgdG8gZmlsZTovLyBVUkwgZm9yIEVTIG1vZHVsZSBpbXBvcnRzIChyZXF1aXJlZCBmb3IgYWJzb2x1dGUgcGF0aHMpXG4gICAgICAvLyBVc2UgcGF0aFRvRmlsZVVSTCB0byBlbnN1cmUgcHJvcGVyIGZpbGU6Ly8gVVJMIGZvcm1hdFxuICAgICAgY29uc3QgaW1wb3J0VXJsID0gcGF0aFRvRmlsZVVSTChpbXBvcnRQYXRoKS5ocmVmO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBJbXBvcnRpbmcgaGFuZGxlciBmcm9tOiAke2ltcG9ydFVybH1gKTtcbiAgICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gRmlsZSBwYXRoOiAke2ltcG9ydFBhdGh9YCk7XG5cbiAgICAgIC8vIFVzZSBpbXBvcnQoKSB3aXRoIHRoZSBmaWxlIFVSTFxuICAgICAgLy8gTm90ZTogSWYgdGhlIGhhbmRsZXIgZmlsZSBoYXMgaW1wb3J0IGVycm9ycyAobGlrZSBtaXNzaW5nIGRlcGVuZGVuY2llcyksXG4gICAgICAvLyB0aG9zZSB3aWxsIHN1cmZhY2UgaGVyZSwgYnV0IHRoYXQncyBhIGhhbmRsZXIgY29kZSBpc3N1ZSwgbm90IGEgbG9hZGVyIGlzc3VlXG4gICAgICBjb25zdCBoYW5kbGVyTW9kdWxlID0gYXdhaXQgaW1wb3J0KGltcG9ydFVybCk7XG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEhhbmRsZXIgbW9kdWxlIGxvYWRlZCBzdWNjZXNzZnVsbHkuIEV4cG9ydHM6ICR7T2JqZWN0LmtleXMoaGFuZGxlck1vZHVsZSkuam9pbignLCAnKX1gKTtcblxuICAgICAgLy8gR2V0IHRoZSBoYW5kbGVyIGJhc2VkIG9uIGV4cG9ydCBuYW1lIG9yIHRyeSBkZWZhdWx0c1xuICAgICAgbGV0IGhhbmRsZXI6IGFueTtcbiAgICAgIGlmKGV4cG9ydE5hbWUpIHtcbiAgICAgICAgaGFuZGxlciA9IGhhbmRsZXJNb2R1bGVbZXhwb3J0TmFtZV07XG4gICAgICAgIGlmKCFoYW5kbGVyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEV4cG9ydCBcIiR7ZXhwb3J0TmFtZX1cIiBub3QgZm91bmQgaW4gbW9kdWxlLiBBdmFpbGFibGUgZXhwb3J0czogJHtPYmplY3Qua2V5cyhoYW5kbGVyTW9kdWxlKS5qb2luKCcsICcpfWApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUcnkgZGVmYXVsdCwgaGFuZGxlciwgb3IgdGhlIG1vZHVsZSBpdHNlbGZcbiAgICAgICAgaGFuZGxlciA9IGhhbmRsZXJNb2R1bGUuZGVmYXVsdCB8fCBoYW5kbGVyTW9kdWxlLmhhbmRsZXIgfHwgaGFuZGxlck1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIGZvdW5kOiAke3R5cGVvZiBoYW5kbGVyfSwgaXNGdW5jdGlvbjogJHt0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJ31gKTtcblxuICAgICAgaWYodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEhhbmRsZXIgaXMgbm90IGEgZnVuY3Rpb24uIFR5cGU6ICR7dHlwZW9mIGhhbmRsZXJ9LCBWYWx1ZTpgLCBoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoYW5kbGVyO1xuICAgIH0gY2F0Y2goaW1wb3J0RXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEltcG9ydCBlcnJvciBmb3IgaGFuZGxlciAke2hhbmRsZXJQYXRofTpgLCBpbXBvcnRFcnJvci5tZXNzYWdlKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTZXJ2ZXJsZXNzXSBJbXBvcnQgZXJyb3Igc3RhY2s6JywgaW1wb3J0RXJyb3Iuc3RhY2spO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgZGVwZW5kZW5jeSByZXNvbHV0aW9uIGVycm9yIChjb21tb24gd2l0aCBFUyBtb2R1bGVzKVxuICAgICAgaWYoaW1wb3J0RXJyb3IubWVzc2FnZSAmJiBpbXBvcnRFcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdDYW5ub3QgZmluZCBtb2R1bGUnKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gVGhpcyBhcHBlYXJzIHRvIGJlIGEgZGVwZW5kZW5jeSByZXNvbHV0aW9uIGVycm9yLicpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gVGhlIGhhbmRsZXIgZmlsZSBleGlzdHMsIGJ1dCBvbmUgb2YgaXRzIGltcG9ydHMgaXMgZmFpbGluZy4nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIENoZWNrIHRoYXQgYWxsIGRlcGVuZGVuY2llcyBpbiB0aGUgaGFuZGxlciBmaWxlIGFyZSBwcm9wZXJseSBpbnN0YWxsZWQuJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIGZpbGU6ICR7aW1wb3J0UGF0aH1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIE1ha2Ugc3VyZSB0aGUgaGFuZGxlciBhbmQgaXRzIGRlcGVuZGVuY2llcyBhcmUgY29tcGlsZWQgY29ycmVjdGx5LicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3I6IGFueSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBFcnJvciBsb2FkaW5nIGhhbmRsZXIgJHtoYW5kbGVyUGF0aH06YCwgZXJyb3IubWVzc2FnZSk7XG4gICAgY29uc29sZS5lcnJvcignW1NlcnZlcmxlc3NdIEVycm9yIHN0YWNrOicsIGVycm9yLnN0YWNrKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuY29uc3QgY2FwdHVyZUNvbnNvbGVMb2dzID0gKGhhbmRsZXI6IChldmVudDogYW55LCBjb250ZXh0OiBhbnkpID0+IFByb21pc2U8YW55PiwgcXVpZXQ6IGJvb2xlYW4pID0+IHtcbiAgaWYocXVpZXQpIHtcbiAgICByZXR1cm4gaGFuZGxlcjtcbiAgfVxuXG4gIHJldHVybiBhc3luYyAoZXZlbnQ6IGFueSwgY29udGV4dDogYW55KSA9PiB7XG4gICAgLy8gQ2FwdHVyZSBjb25zb2xlLmxvZywgY29uc29sZS5lcnJvciwgZXRjLlxuICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZUxvZyA9IGNvbnNvbGUubG9nO1xuICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZUVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICBjb25zdCBvcmlnaW5hbENvbnNvbGVXYXJuID0gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZUluZm8gPSBjb25zb2xlLmluZm87XG5cbiAgICBjb25zdCBsb2dzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgY29uc29sZS5sb2cgPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgIGxvZ3MucHVzaChgW0xPR10gJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICAgIG9yaWdpbmFsQ29uc29sZUxvZyguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgY29uc29sZS5lcnJvciA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgbG9ncy5wdXNoKGBbRVJST1JdICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgICBvcmlnaW5hbENvbnNvbGVFcnJvciguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgY29uc29sZS53YXJuID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICBsb2dzLnB1c2goYFtXQVJOXSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgb3JpZ2luYWxDb25zb2xlV2FybiguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgY29uc29sZS5pbmZvID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICBsb2dzLnB1c2goYFtJTkZPXSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgb3JpZ2luYWxDb25zb2xlSW5mbyguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIoZXZlbnQsIGNvbnRleHQpO1xuXG4gICAgICAvLyBPdXRwdXQgY2FwdHVyZWQgbG9nc1xuICAgICAgaWYobG9ncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJy0tLSBIYW5kbGVyIENvbnNvbGUgT3V0cHV0IC0tLScpKTtcbiAgICAgICAgbG9ncy5mb3JFYWNoKChsb2cpID0+IGNvbnNvbGUubG9nKGNoYWxrLmdyYXkobG9nKSkpO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCctLS0gRW5kIEhhbmRsZXIgQ29uc29sZSBPdXRwdXQgLS0tJykpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIGNvbnNvbGUgbWV0aG9kc1xuICAgICAgY29uc29sZS5sb2cgPSBvcmlnaW5hbENvbnNvbGVMb2c7XG4gICAgICBjb25zb2xlLmVycm9yID0gb3JpZ2luYWxDb25zb2xlRXJyb3I7XG4gICAgICBjb25zb2xlLndhcm4gPSBvcmlnaW5hbENvbnNvbGVXYXJuO1xuICAgICAgY29uc29sZS5pbmZvID0gb3JpZ2luYWxDb25zb2xlSW5mbztcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBjcmVhdGVFeHByZXNzU2VydmVyID0gYXN5bmMgKFxuICBjb25maWc6IFNlcnZlcmxlc3NDb25maWcsXG4gIG91dHB1dERpcjogc3RyaW5nLFxuICBodHRwUG9ydDogbnVtYmVyLFxuICBob3N0OiBzdHJpbmcsXG4gIHF1aWV0OiBib29sZWFuLFxuICBkZWJ1ZzogYm9vbGVhblxuKSA9PiB7XG4gIGNvbnN0IGFwcCA9IGV4cHJlc3MoKTtcblxuICAvLyBFbmFibGUgQ09SU1xuICBhcHAudXNlKChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsICcqJyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycsICdHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBQQVRDSCwgT1BUSU9OUycpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLCAnKicpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJywgJ3RydWUnKTtcblxuICAgIGlmKHJlcS5tZXRob2QgPT09ICdPUFRJT05TJykge1xuICAgICAgcmVzLnNlbmRTdGF0dXMoMjAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gUGFyc2UgSlNPTiBib2RpZXNcbiAgYXBwLnVzZShleHByZXNzLmpzb24oKSk7XG5cbiAgLy8gTG9hZCBHcmFwaFFMIGhhbmRsZXJcbiAgY29uc3QgbG9hZEdyYXBoUUxTY2hlbWEgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB0byBmaW5kIGEgR3JhcGhRTCBoYW5kbGVyXG4gICAgICBsZXQgZ3JhcGhxbEhhbmRsZXIgPSBudWxsO1xuXG4gICAgICBpZihjb25maWcuZnVuY3Rpb25zKSB7XG4gICAgICAgIGZvcihjb25zdCBbZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmZ1bmN0aW9ucykpIHtcbiAgICAgICAgICBpZihmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgIGZvcihjb25zdCBldmVudCBvZiBmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgICAgaWYoZXZlbnQuaHR0cCAmJiBldmVudC5odHRwLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAvLyBMb29rIGZvciBHcmFwaFFMIGVuZHBvaW50c1xuICAgICAgICAgICAgICAgIGlmKGV2ZW50Lmh0dHAucGF0aCA9PT0gJy9wdWJsaWMnIHx8IGV2ZW50Lmh0dHAucGF0aCA9PT0gJy9ncmFwaHFsJykge1xuICAgICAgICAgICAgICAgICAgZ3JhcGhxbEhhbmRsZXIgPSBhd2FpdCBsb2FkSGFuZGxlcihmdW5jdGlvbkNvbmZpZy5oYW5kbGVyLCBvdXRwdXREaXIpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGdyYXBocWxIYW5kbGVyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYoZ3JhcGhxbEhhbmRsZXIpIHtcbiAgICAgICAgbG9nKCdGb3VuZCBHcmFwaFFMIGhhbmRsZXInLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgcmV0dXJuIGdyYXBocWxIYW5kbGVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBFcnJvciBsb2FkaW5nIEdyYXBoUUwgaGFuZGxlcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICAvLyBTZXQgdXAgR3JhcGhRTCBoYW5kbGVyIGZvciBHcmFwaFFMIHJlcXVlc3RzXG4gIHRyeSB7XG4gICAgY29uc3QgZ3JhcGhxbEhhbmRsZXIgPSBhd2FpdCBsb2FkR3JhcGhRTFNjaGVtYSgpO1xuICAgIGlmKGdyYXBocWxIYW5kbGVyKSB7XG4gICAgICAvLyBGaW5kIHRoZSBHcmFwaFFMIHBhdGggZnJvbSB0aGUgc2VydmVybGVzcyBjb25maWdcbiAgICAgIGxldCBncmFwaHFsUGF0aCA9ICcvZ3JhcGhxbCc7IC8vIGRlZmF1bHQgZmFsbGJhY2tcblxuICAgICAgaWYoY29uZmlnLmZ1bmN0aW9ucykge1xuICAgICAgICBmb3IoY29uc3QgW19mdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQ29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuZnVuY3Rpb25zKSkge1xuICAgICAgICAgIGlmKGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgZm9yKGNvbnN0IGV2ZW50IG9mIGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgICBpZihldmVudD8uaHR0cD8ucGF0aCkge1xuICAgICAgICAgICAgICAgIGdyYXBocWxQYXRoID0gZXZlbnQuaHR0cC5wYXRoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGdyYXBocWxQYXRoICE9PSAnL2dyYXBocWwnKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHVwIEdyYXBoUUwgZW5kcG9pbnQgd2l0aCBlbmhhbmNlZCBjb25zb2xlLmxvZyBjYXB0dXJlXG4gICAgICBhcHAudXNlKGdyYXBocWxQYXRoLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgLy8gR3JhcGhRTCBEZWJ1ZyBMb2dnaW5nXG4gICAgICAgIGlmKGRlYnVnICYmIHJlcS5ib2R5ICYmIHJlcS5ib2R5LnF1ZXJ5KSB7XG4gICAgICAgICAgbG9nKCfwn5SNIEdyYXBoUUwgRGVidWcgTW9kZTogQW5hbHl6aW5nIHJlcXVlc3QuLi4nLCAnaW5mbycsIGZhbHNlKTtcbiAgICAgICAgICBsb2coYPCfk50gR3JhcGhRTCBRdWVyeTogJHtyZXEuYm9keS5xdWVyeX1gLCAnaW5mbycsIGZhbHNlKTtcbiAgICAgICAgICBpZihyZXEuYm9keS52YXJpYWJsZXMpIHtcbiAgICAgICAgICAgIGxvZyhg8J+TiiBHcmFwaFFMIFZhcmlhYmxlczogJHtKU09OLnN0cmluZ2lmeShyZXEuYm9keS52YXJpYWJsZXMsIG51bGwsIDIpfWAsICdpbmZvJywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihyZXEuYm9keS5vcGVyYXRpb25OYW1lKSB7XG4gICAgICAgICAgICBsb2coYPCfj7fvuI8gIEdyYXBoUUwgT3BlcmF0aW9uOiAke3JlcS5ib2R5Lm9wZXJhdGlvbk5hbWV9YCwgJ2luZm8nLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5oYW5jZWQgY29uc29sZS5sb2cgY2FwdHVyZVxuICAgICAgICBjb25zdCBvcmlnaW5hbENvbnNvbGVMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgICAgY29uc3QgbG9nczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBjb25zb2xlLmxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG9nTWVzc2FnZSA9IGFyZ3MubWFwKChhcmcpID0+XG4gICAgICAgICAgICAodHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShhcmcsIG51bGwsIDIpIDogU3RyaW5nKGFyZykpXG4gICAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgICAgbG9ncy5wdXNoKGxvZ01lc3NhZ2UpO1xuICAgICAgICAgIG9yaWdpbmFsQ29uc29sZUxvZyhgW0dyYXBoUUxdICR7bG9nTWVzc2FnZX1gKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDcmVhdGUgY29udGV4dCBmb3IgdGhlIGhhbmRsZXJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICBhd3NSZXF1ZXN0SWQ6ICd0ZXN0LXJlcXVlc3QtaWQnLFxuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogJ2dyYXBocWwnLFxuICAgICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogJyRMQVRFU1QnLFxuICAgICAgICAgIGdldFJlbWFpbmluZ1RpbWVJbk1pbGxpczogKCkgPT4gMzAwMDAsXG4gICAgICAgICAgaW52b2tlZEZ1bmN0aW9uQXJuOiAnYXJuOmF3czpsYW1iZGE6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpmdW5jdGlvbjpncmFwaHFsJyxcbiAgICAgICAgICBsb2dHcm91cE5hbWU6ICcvYXdzL2xhbWJkYS9ncmFwaHFsJyxcbiAgICAgICAgICBsb2dTdHJlYW1OYW1lOiAndGVzdC1sb2ctc3RyZWFtJyxcbiAgICAgICAgICByZXEsXG4gICAgICAgICAgcmVzXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gV3JhcCBoYW5kbGVyIHdpdGggY29uc29sZSBsb2cgY2FwdHVyZVxuICAgICAgICBjb25zdCB3cmFwcGVkSGFuZGxlciA9IGNhcHR1cmVDb25zb2xlTG9ncyhncmFwaHFsSGFuZGxlciwgcXVpZXQpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQ2FsbCB0aGUgaGFuZGxlciB3aXRoIEdyYXBoUUwgcGFyYW1ldGVyc1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdyYXBwZWRIYW5kbGVyKHtcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcS5ib2R5KSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzLFxuICAgICAgICAgICAgaHR0cE1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgcGF0aDogZ3JhcGhxbFBhdGgsXG4gICAgICAgICAgICBxdWVyeVN0cmluZ1BhcmFtZXRlcnM6IHt9XG4gICAgICAgICAgfSwgY29udGV4dCk7XG5cbiAgICAgICAgICAvLyBSZXN0b3JlIGNvbnNvbGUubG9nXG4gICAgICAgICAgY29uc29sZS5sb2cgPSBvcmlnaW5hbENvbnNvbGVMb2c7XG5cbiAgICAgICAgICAvLyBIYW5kbGUgdGhlIHJlc3VsdFxuICAgICAgICAgIGlmKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQuc3RhdHVzQ29kZSkge1xuICAgICAgICAgICAgcmVzLnN0YXR1cyhyZXN1bHQuc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICBpZihyZXN1bHQuaGVhZGVycykge1xuICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHQuaGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihrZXksIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcy5zZW5kKHJlc3VsdC5ib2R5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzLmpzb24ocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAvLyBSZXN0b3JlIGNvbnNvbGUubG9nXG4gICAgICAgICAgY29uc29sZS5sb2cgPSBvcmlnaW5hbENvbnNvbGVMb2c7XG4gICAgICAgICAgbG9nKGBHcmFwaFFMIGhhbmRsZXIgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBmYWxzZSk7XG4gICAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe2Vycm9yOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBsb2coYEdyYXBoUUwgZW5kcG9pbnQgYXZhaWxhYmxlIGF0IGh0dHA6Ly8ke2hvc3R9OiR7aHR0cFBvcnR9JHtncmFwaHFsUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYEVycm9yIHNldHRpbmcgdXAgR3JhcGhRTDogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrIGZvciBub24tR3JhcGhRTCByb3V0ZXMgLSBoYW5kbGUgYWxsIHJlbWFpbmluZyByb3V0ZXNcbiAgYXBwLnVzZSgnLycsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSByZXEudXJsIHx8ICcvJztcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2QgfHwgJ0dFVCc7XG4gICAgICBjb25zdCBwYXRobmFtZSA9IHJlcS5wYXRoIHx8IHVybC5zcGxpdCgnPycpWzBdOyAvLyBFeHRyYWN0IHBhdGhuYW1lIHdpdGhvdXQgcXVlcnkgc3RyaW5nXG5cbiAgICAgIC8vIEFsd2F5cyBsb2cgcmVxdWVzdHMgKG5vdCBhZmZlY3RlZCBieSBxdWlldCBmbGFnIGZvciBkZWJ1Z2dpbmcpXG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdICR7bWV0aG9kfSAke3VybH0gKHBhdGhuYW1lOiAke3BhdGhuYW1lfSlgKTtcblxuICAgICAgLy8gRmluZCBtYXRjaGluZyBmdW5jdGlvblxuICAgICAgbGV0IG1hdGNoZWRGdW5jdGlvbiA9IG51bGw7XG5cbiAgICAgIGlmKGNvbmZpZy5mdW5jdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lcyA9IE9iamVjdC5rZXlzKGNvbmZpZy5mdW5jdGlvbnMpO1xuICAgICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEF2YWlsYWJsZSBmdW5jdGlvbnM6ICR7ZnVuY3Rpb25OYW1lcy5qb2luKCcsICcpfWApO1xuICAgICAgICBjb25zb2xlLmxvZygnW1NlcnZlcmxlc3NdIENvbmZpZyBmdW5jdGlvbnM6JywgSlNPTi5zdHJpbmdpZnkoY29uZmlnLmZ1bmN0aW9ucywgbnVsbCwgMikpO1xuXG4gICAgICAgIGZvcihjb25zdCBbZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmZ1bmN0aW9ucykpIHtcbiAgICAgICAgICBpZihmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgIGZvcihjb25zdCBldmVudCBvZiBmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgICAgaWYoZXZlbnQuaHR0cCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50UGF0aCA9IGV2ZW50Lmh0dHAucGF0aCB8fCAnLyc7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRNZXRob2QgPSAoZXZlbnQuaHR0cC5tZXRob2QgfHwgJ0dFVCcpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBDaGVja2luZyBmdW5jdGlvbiAke2Z1bmN0aW9uTmFtZX06IHBhdGg9XCIke2V2ZW50UGF0aH1cIiwgbWV0aG9kPVwiJHtldmVudE1ldGhvZH1cIiBhZ2FpbnN0IHBhdGhuYW1lPVwiJHtwYXRobmFtZX1cIiwgbWV0aG9kPVwiJHtyZXF1ZXN0TWV0aG9kfVwiYCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJbXByb3ZlZCBwYXRoIG1hdGNoaW5nIC0gY29tcGFyZSBwYXRobmFtZSB3aXRob3V0IHF1ZXJ5IHN0cmluZ1xuICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSBwYXRocyAocmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMgZm9yIGNvbXBhcmlzb24pXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEV2ZW50UGF0aCA9IGV2ZW50UGF0aC5yZXBsYWNlKC9cXC8kLywgJycpIHx8ICcvJztcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkUGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9cXC8kLywgJycpIHx8ICcvJztcblxuICAgICAgICAgICAgICAgIGlmKG5vcm1hbGl6ZWRFdmVudFBhdGggPT09IG5vcm1hbGl6ZWRQYXRobmFtZSAmJiBldmVudE1ldGhvZCA9PT0gcmVxdWVzdE1ldGhvZCkge1xuICAgICAgICAgICAgICAgICAgbWF0Y2hlZEZ1bmN0aW9uID0gZnVuY3Rpb25OYW1lO1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSDinJMgTWF0Y2hlZCBmdW5jdGlvbjogJHttYXRjaGVkRnVuY3Rpb259YCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYobWF0Y2hlZEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbU2VydmVybGVzc10gTm8gZnVuY3Rpb25zIGZvdW5kIGluIGNvbmZpZycpO1xuICAgICAgfVxuXG4gICAgICBpZihtYXRjaGVkRnVuY3Rpb24gJiYgY29uZmlnLmZ1bmN0aW9uc1ttYXRjaGVkRnVuY3Rpb25dKSB7XG4gICAgICAgIC8vIFJlc29sdmUgaGFuZGxlciBwYXRoIHJlbGF0aXZlIHRvIG91dHB1dCBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgaGFuZGxlclBhdGggPSBjb25maWcuZnVuY3Rpb25zW21hdGNoZWRGdW5jdGlvbl0uaGFuZGxlcjtcbiAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBMb2FkaW5nIGhhbmRsZXI6ICR7aGFuZGxlclBhdGh9IGZyb20gb3V0cHV0RGlyOiAke291dHB1dERpcn1gKTtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IGF3YWl0IGxvYWRIYW5kbGVyKGhhbmRsZXJQYXRoLCBvdXRwdXREaXIpO1xuXG4gICAgICAgIGlmKGhhbmRsZXIpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEhhbmRsZXIgbG9hZGVkIHN1Y2Nlc3NmdWxseSwgdHlwZTogJHt0eXBlb2YgaGFuZGxlcn1gKTtcbiAgICAgICAgICBjb25zdCB3cmFwcGVkSGFuZGxlciA9IGNhcHR1cmVDb25zb2xlTG9ncyhoYW5kbGVyLCBxdWlldCk7XG5cbiAgICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICAgIGJvZHk6IHJlcS5ib2R5LFxuICAgICAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsXG4gICAgICAgICAgICBodHRwTWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBwYXRoOiB1cmwsXG4gICAgICAgICAgICBxdWVyeVN0cmluZ1BhcmFtZXRlcnM6IHJlcS5xdWVyeVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgYXdzUmVxdWVzdElkOiAndGVzdC1yZXF1ZXN0LWlkJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbWF0Y2hlZEZ1bmN0aW9uLFxuICAgICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiAnJExBVEVTVCcsXG4gICAgICAgICAgICBnZXRSZW1haW5pbmdUaW1lSW5NaWxsaXM6ICgpID0+IDMwMDAwLFxuICAgICAgICAgICAgaW52b2tlZEZ1bmN0aW9uQXJuOiBgYXJuOmF3czpsYW1iZGE6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpmdW5jdGlvbjoke21hdGNoZWRGdW5jdGlvbn1gLFxuICAgICAgICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy9sYW1iZGEvJHttYXRjaGVkRnVuY3Rpb259YCxcbiAgICAgICAgICAgIGxvZ1N0cmVhbU5hbWU6ICd0ZXN0LWxvZy1zdHJlYW0nLFxuICAgICAgICAgICAgbWVtb3J5TGltaXRJbk1COiAnMTI4J1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTZXJ2ZXJsZXNzXSBDYWxsaW5nIGhhbmRsZXIgd2l0aCBldmVudDonLCBKU09OLnN0cmluZ2lmeShldmVudCwgbnVsbCwgMikpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JhcHBlZEhhbmRsZXIoZXZlbnQsIGNvbnRleHQpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTZXJ2ZXJsZXNzXSBIYW5kbGVyIHJldHVybmVkOicsIEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMikpO1xuXG4gICAgICAgICAgICBpZihyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0LnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgcmVzLnN0YXR1cyhyZXN1bHQuc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICAgIGlmKHJlc3VsdC5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0LmhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihrZXksIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlcy5zZW5kKHJlc3VsdC5ib2R5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlcy5qc29uKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gSGFuZGxlciBlcnJvcjonLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTZXJ2ZXJsZXNzXSBIYW5kbGVyIGVycm9yIHN0YWNrOicsIGVycm9yLnN0YWNrKTtcbiAgICAgICAgICAgIGxvZyhgSGFuZGxlciBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIGZhbHNlKTtcbiAgICAgICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtlcnJvcjogZXJyb3IubWVzc2FnZX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gSGFuZGxlciBub3QgZm91bmQgZm9yIGZ1bmN0aW9uOiAke21hdGNoZWRGdW5jdGlvbn1gKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gSGFuZGxlciBwYXRoOiAke2hhbmRsZXJQYXRofSwgT3V0cHV0IGRpcjogJHtvdXRwdXREaXJ9YCk7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oe2Vycm9yOiAnSGFuZGxlciBub3QgZm91bmQnfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBGdW5jdGlvbiBub3QgZm91bmQgZm9yIHBhdGhuYW1lOiAke3BhdGhuYW1lfSwgbWV0aG9kOiAke21ldGhvZH1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEF2YWlsYWJsZSBmdW5jdGlvbnM6ICR7Y29uZmlnLmZ1bmN0aW9ucyA/IE9iamVjdC5rZXlzKGNvbmZpZy5mdW5jdGlvbnMpLmpvaW4oJywgJykgOiAnbm9uZSd9YCk7XG4gICAgICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHtlcnJvcjogJ0Z1bmN0aW9uIG5vdCBmb3VuZCd9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFJvdXRlIGhhbmRsaW5nIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgZmFsc2UpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe2Vycm9yOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYXBwO1xufTtcblxuY29uc3QgY3JlYXRlV2ViU29ja2V0U2VydmVyID0gKFxuICBjb25maWc6IFNlcnZlcmxlc3NDb25maWcsXG4gIG91dHB1dERpcjogc3RyaW5nLFxuICB3c1BvcnQ6IG51bWJlcixcbiAgcXVpZXQ6IGJvb2xlYW4sXG4gIGRlYnVnOiBib29sZWFuXG4pID0+IHtcbiAgY29uc3Qgd3NzID0gbmV3IFdlYlNvY2tldFNlcnZlcih7cG9ydDogd3NQb3J0fSk7XG5cbiAgd3NzLm9uKCdjb25uZWN0aW9uJywgYXN5bmMgKHdzLCByZXEpID0+IHtcbiAgICBsb2coYFdlYlNvY2tldCBjb25uZWN0aW9uIGVzdGFibGlzaGVkOiAke3JlcS51cmx9YCwgJ2luZm8nLCBmYWxzZSk7XG5cbiAgICB3cy5vbignbWVzc2FnZScsIGFzeW5jIChtZXNzYWdlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShtZXNzYWdlLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIC8vIEZpbmQgbWF0Y2hpbmcgV2ViU29ja2V0IGZ1bmN0aW9uXG4gICAgICAgIGxldCBtYXRjaGVkRnVuY3Rpb24gPSBudWxsO1xuXG4gICAgICAgIGlmKGNvbmZpZy5mdW5jdGlvbnMpIHtcbiAgICAgICAgICBmb3IoY29uc3QgW2Z1bmN0aW9uTmFtZSwgZnVuY3Rpb25Db25maWddIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZy5mdW5jdGlvbnMpKSB7XG4gICAgICAgICAgICBpZihmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgICAgZm9yKGNvbnN0IGV2ZW50IG9mIGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgICAgIGlmKGV2ZW50LndlYnNvY2tldCkge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgcm91dGUgPSBldmVudC53ZWJzb2NrZXQucm91dGUgfHwgJyRjb25uZWN0JztcbiAgICAgICAgICAgICAgICAgIGlmKHJvdXRlID09PSAnJGRlZmF1bHQnIHx8IHJvdXRlID09PSBkYXRhLmFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkRnVuY3Rpb24gPSBmdW5jdGlvbk5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYobWF0Y2hlZEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKG1hdGNoZWRGdW5jdGlvbiAmJiBjb25maWcuZnVuY3Rpb25zW21hdGNoZWRGdW5jdGlvbl0pIHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gYXdhaXQgbG9hZEhhbmRsZXIoY29uZmlnLmZ1bmN0aW9uc1ttYXRjaGVkRnVuY3Rpb25dLmhhbmRsZXIsIG91dHB1dERpcik7XG5cbiAgICAgICAgICBpZihoYW5kbGVyKSB7XG4gICAgICAgICAgICAvLyBXcmFwIGhhbmRsZXIgd2l0aCBjb25zb2xlIGxvZyBjYXB0dXJlXG4gICAgICAgICAgICBjb25zdCB3cmFwcGVkSGFuZGxlciA9IGNhcHR1cmVDb25zb2xlTG9ncyhoYW5kbGVyLCBxdWlldCk7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICAgICAgYm9keTogZGF0YS5ib2R5IHx8IG51bGwsXG4gICAgICAgICAgICAgIHJlcXVlc3RDb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgYXBpR2F0ZXdheToge1xuICAgICAgICAgICAgICAgICAgZW5kcG9pbnQ6IGB3czovL2xvY2FsaG9zdDoke3dzUG9ydH1gXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uSWQ6ICd0ZXN0LWNvbm5lY3Rpb24taWQnLFxuICAgICAgICAgICAgICAgIHJvdXRlS2V5OiBkYXRhLmFjdGlvbiB8fCAnJGRlZmF1bHQnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAgIGF3c1JlcXVlc3RJZDogJ3Rlc3QtcmVxdWVzdC1pZCcsXG4gICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbWF0Y2hlZEZ1bmN0aW9uLFxuICAgICAgICAgICAgICBmdW5jdGlvblZlcnNpb246ICckTEFURVNUJyxcbiAgICAgICAgICAgICAgZ2V0UmVtYWluaW5nVGltZUluTWlsbGlzOiAoKSA9PiAzMDAwMCxcbiAgICAgICAgICAgICAgaW52b2tlZEZ1bmN0aW9uQXJuOiBgYXJuOmF3czpsYW1iZGE6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpmdW5jdGlvbjoke21hdGNoZWRGdW5jdGlvbn1gLFxuICAgICAgICAgICAgICBsb2dHcm91cE5hbWU6IGAvYXdzL2xhbWJkYS8ke21hdGNoZWRGdW5jdGlvbn1gLFxuICAgICAgICAgICAgICBsb2dTdHJlYW1OYW1lOiAndGVzdC1sb2ctc3RyZWFtJyxcbiAgICAgICAgICAgICAgbWVtb3J5TGltaXRJbk1COiAnMTI4J1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JhcHBlZEhhbmRsZXIoZXZlbnQsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICAvLyBIYW5kbGUgTGFtYmRhIHJlc3BvbnNlIGZvcm1hdCBmb3IgV2ViU29ja2V0XG4gICAgICAgICAgICBpZihyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0LnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIExhbWJkYSByZXNwb25zZSBvYmplY3QsIGV4dHJhY3QgdGhlIGJvZHlcbiAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHJlc3VsdC5ib2R5IHx8ICcnO1xuICAgICAgICAgICAgICB3cy5zZW5kKGJvZHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGRpcmVjdCByZXNwb25zZSwgc3RyaW5naWZ5IGl0XG4gICAgICAgICAgICAgIHdzLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVzdWx0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdzLnNlbmQoSlNPTi5zdHJpbmdpZnkoe2Vycm9yOiAnSGFuZGxlciBub3QgZm91bmQnfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHtlcnJvcjogJ1dlYlNvY2tldCBmdW5jdGlvbiBub3QgZm91bmQnfSkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGxvZyhgV2ViU29ja2V0IGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgZmFsc2UpO1xuICAgICAgICB3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHtlcnJvcjogZXJyb3IubWVzc2FnZX0pKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHdzLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgIGxvZygnV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VkJywgJ2luZm8nLCBmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB3c3M7XG59O1xuXG5jb25zdCBsb2FkRW52RmlsZSA9IChlbnZQYXRoOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0+IHtcbiAgY29uc3QgZW52VmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGlmKCFleGlzdHNTeW5jKGVudlBhdGgpKSB7XG4gICAgcmV0dXJuIGVudlZhcnM7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGVudkNvbnRlbnQgPSByZWFkRmlsZVN5bmMoZW52UGF0aCwgJ3V0ZjgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGVudkNvbnRlbnQuc3BsaXQoJ1xcbicpO1xuXG4gICAgZm9yKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZS50cmltKCk7XG5cbiAgICAgIC8vIFNraXAgZW1wdHkgbGluZXMgYW5kIGNvbW1lbnRzXG4gICAgICBpZighdHJpbW1lZExpbmUgfHwgdHJpbW1lZExpbmUuc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBQYXJzZSBLRVk9dmFsdWUgZm9ybWF0XG4gICAgICBjb25zdCBlcXVhbEluZGV4ID0gdHJpbW1lZExpbmUuaW5kZXhPZignPScpO1xuICAgICAgaWYoZXF1YWxJbmRleCA+IDApIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdHJpbW1lZExpbmUuc3Vic3RyaW5nKDAsIGVxdWFsSW5kZXgpLnRyaW0oKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0cmltbWVkTGluZS5zdWJzdHJpbmcoZXF1YWxJbmRleCArIDEpLnRyaW0oKTtcblxuICAgICAgICAvLyBSZW1vdmUgcXVvdGVzIGlmIHByZXNlbnRcbiAgICAgICAgY29uc3QgY2xlYW5WYWx1ZSA9IHZhbHVlLnJlcGxhY2UoL15bXCInXXxbXCInXSQvZywgJycpO1xuXG4gICAgICAgIGlmKGtleSkge1xuICAgICAgICAgIGVudlZhcnNba2V5XSA9IGNsZWFuVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFdhcm5pbmc6IENvdWxkIG5vdCBsb2FkIC5lbnYgZmlsZSBhdCAke2VudlBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBmYWxzZSk7XG4gIH1cblxuICByZXR1cm4gZW52VmFycztcbn07XG5cbmV4cG9ydCBjb25zdCBzZXJ2ZXJsZXNzID0gYXN5bmMgKFxuICBjbWQ6IFNlcnZlcmxlc3NPcHRpb25zLFxuICBjYWxsYmFjazogU2VydmVybGVzc0NhbGxiYWNrID0gKCkgPT4gKHt9KVxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge1xuICAgIGNsaU5hbWUgPSAnTGV4JyxcbiAgICBjb25maWcsXG4gICAgZGVidWcgPSBmYWxzZSxcbiAgICBob3N0OiBjbGlIb3N0LFxuICAgIGh0dHBQb3J0OiBjbGlIdHRwUG9ydCxcbiAgICBodHRwc1BvcnQ6IGNsaUh0dHBzUG9ydCxcbiAgICBxdWlldCA9IGZhbHNlLFxuICAgIHJlbW92ZSA9IGZhbHNlLFxuICAgIHRlc3QgPSBmYWxzZSxcbiAgICB1c2VQdWJsaWNJcCxcbiAgICB2YXJpYWJsZXMsXG4gICAgd3NQb3J0OiBjbGlXc1BvcnRcbiAgfSA9IGNtZDtcblxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgbG9nKGAke2NsaU5hbWV9IHN0YXJ0aW5nIHNlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgYXdhaXQgTGV4Q29uZmlnLnBhcnNlQ29uZmlnKGNtZCk7XG5cbiAgY29uc3Qge291dHB1dEZ1bGxQYXRofSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgLy8gTG9hZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSAuZW52IGZpbGVzXG4gIGNvbnN0IGVudlBhdGhzID0gW1xuICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuZW52JyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy5lbnYubG9jYWwnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLmVudi5kZXZlbG9wbWVudCcpXG4gIF07XG5cbiAgbGV0IGVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAvLyBMb2FkIGZyb20gLmVudiBmaWxlcyBpbiBvcmRlciAobGF0ZXIgZmlsZXMgb3ZlcnJpZGUgZWFybGllciBvbmVzKVxuICBmb3IoY29uc3QgZW52UGF0aCBvZiBlbnZQYXRocykge1xuICAgIGNvbnN0IGZpbGVFbnZWYXJzID0gbG9hZEVudkZpbGUoZW52UGF0aCk7XG4gICAgaWYoT2JqZWN0LmtleXMoZmlsZUVudlZhcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZyhgTG9hZGVkIGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tOiAke2VudlBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgfVxuICAgIGVudlZhcnMgPSB7Li4uZW52VmFycywgLi4uZmlsZUVudlZhcnN9O1xuICB9XG5cbiAgLy8gU3RhcnQgd2l0aCBkZWZhdWx0IE5PREVfRU5WIGFuZCBsb2FkZWQgLmVudiB2YXJpYWJsZXNcbiAgbGV0IHZhcmlhYmxlc09iajogb2JqZWN0ID0ge05PREVfRU5WOiAnZGV2ZWxvcG1lbnQnLCAuLi5lbnZWYXJzfTtcblxuICAvLyBPdmVycmlkZSB3aXRoIGNvbW1hbmQgbGluZSB2YXJpYWJsZXMgaWYgcHJvdmlkZWRcbiAgaWYodmFyaWFibGVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsaVZhcnMgPSBKU09OLnBhcnNlKHZhcmlhYmxlcyk7XG4gICAgICB2YXJpYWJsZXNPYmogPSB7Li4udmFyaWFibGVzT2JqLCAuLi5jbGlWYXJzfTtcbiAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgb3B0aW9uIGlzIG5vdCBhIHZhbGlkIEpTT04gb2JqZWN0LmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzcy5lbnYgPSB7Li4ucHJvY2Vzcy5lbnYsIC4uLnZhcmlhYmxlc09ian07XG5cbiAgLy8gSWYgaW4gdGVzdCBtb2RlLCBleGl0IGVhcmx5IGFmdGVyIGxvYWRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gIGlmKHRlc3QpIHtcbiAgICBsb2coJ1Rlc3QgbW9kZTogRW52aXJvbm1lbnQgdmFyaWFibGVzIGxvYWRlZCwgZXhpdGluZycsICdpbmZvJywgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYocmVtb3ZlKSB7XG4gICAgc3Bpbm5lci5zdGFydCgnQ2xlYW5pbmcgb3V0cHV0IGRpcmVjdG9yeS4uLicpO1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKG91dHB1dEZ1bGxQYXRoIHx8ICcnKTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBjbGVhbmVkIG91dHB1dCBkaXJlY3RvcnkhJyk7XG4gIH1cblxuICAvLyBMb2FkIHNlcnZlcmxlc3MgY29uZmlndXJhdGlvblxuICBsZXQgc2VydmVybGVzc0NvbmZpZzogU2VydmVybGVzc0NvbmZpZyA9IHt9O1xuXG4gIHRyeSB7XG4gICAgLy8gVXNlIGdldFBhY2thZ2VEaXIgdG8gaGFuZGxlIG5wbSB3b3Jrc3BhY2VzIGNvcnJlY3RseVxuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBnZXRQYWNrYWdlRGlyKCk7XG5cbiAgICAvLyBUcnkgbXVsdGlwbGUgY29uZmlnIGZpbGUgZm9ybWF0c1xuICAgIGNvbnN0IGNvbmZpZ0Zvcm1hdHMgPSBjb25maWcgPyBbY29uZmlnXSA6IFtcbiAgICAgIHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICdsZXguY29uZmlnLm1qcycpLFxuICAgICAgcGF0aFJlc29sdmUocGFja2FnZURpciwgJ2xleC5jb25maWcuanMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICdsZXguY29uZmlnLmNqcycpLFxuICAgICAgcGF0aFJlc29sdmUocGFja2FnZURpciwgJ2xleC5jb25maWcudHMnKVxuICAgIF07XG5cbiAgICBsZXQgY29uZmlnUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgZm9yKGNvbnN0IGNhbmRpZGF0ZVBhdGggb2YgY29uZmlnRm9ybWF0cykge1xuICAgICAgaWYoZXhpc3RzU3luYyhjYW5kaWRhdGVQYXRoKSkge1xuICAgICAgICBjb25maWdQYXRoID0gY2FuZGlkYXRlUGF0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoY29uZmlnUGF0aCkge1xuICAgICAgbG9nKGBMb2FkaW5nIHNlcnZlcmxlc3MgY29uZmlnIGZyb206ICR7Y29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIGNvbnN0IGNvbmZpZ01vZHVsZSA9IGF3YWl0IGltcG9ydChjb25maWdQYXRoKTtcbiAgICAgIHNlcnZlcmxlc3NDb25maWcgPSBjb25maWdNb2R1bGUuZGVmYXVsdD8uc2VydmVybGVzcyB8fCBjb25maWdNb2R1bGUuc2VydmVybGVzcyB8fCB7fTtcbiAgICAgIGxvZygnU2VydmVybGVzcyBjb25maWcgbG9hZGVkIHN1Y2Nlc3NmdWxseScsICdpbmZvJywgcXVpZXQpO1xuICAgICAgY29uc3QgZnVuY3Rpb25OYW1lcyA9IE9iamVjdC5rZXlzKHNlcnZlcmxlc3NDb25maWcuZnVuY3Rpb25zIHx8IHt9KTtcbiAgICAgIGxvZyhgTG9hZGVkIGZ1bmN0aW9uczogJHtmdW5jdGlvbk5hbWVzLmxlbmd0aCA+IDAgPyBmdW5jdGlvbk5hbWVzLmpvaW4oJywgJykgOiAnbm9uZSd9YCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIC8vIERlYnVnOiBQcmludCBmdWxsIGNvbmZpZyBpZiBkZWJ1ZyBtb2RlXG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYEZ1bGwgc2VydmVybGVzcyBjb25maWc6ICR7SlNPTi5zdHJpbmdpZnkoc2VydmVybGVzc0NvbmZpZywgbnVsbCwgMil9YCwgJ2luZm8nLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZyhgTm8gc2VydmVybGVzcyBjb25maWcgZm91bmQuIFRyaWVkOiAke2NvbmZpZ0Zvcm1hdHMuam9pbignLCAnKX1gLCAnd2FybicsIHF1aWV0KTtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYEVycm9yIGxvYWRpbmcgc2VydmVybGVzcyBjb25maWc6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgaWYoZGVidWcpIHtcbiAgICAgIGxvZyhgQ29uZmlnIGVycm9yIHN0YWNrOiAke2Vycm9yLnN0YWNrfWAsICdlcnJvcicsIGZhbHNlKTtcbiAgICB9XG4gICAgLy8gRG9uJ3QgZXhpdCwgY29udGludWUgd2l0aCBlbXB0eSBjb25maWdcbiAgfVxuXG4gIC8vIE1lcmdlIGNvbmZpZyB3aXRoIGNvbW1hbmQgbGluZSBvcHRpb25zXG4gIC8vIERldGVybWluZSBlZmZlY3RpdmUgaG9zdC9wb3J0cyB3aXRoIGNvcnJlY3QgcHJlY2VkZW5jZTogQ0xJID4gY29uZmlnID4gZGVmYXVsdHNcbiAgY29uc3QgY29uZmlnT2ZmbGluZSA9IHNlcnZlcmxlc3NDb25maWcuY3VzdG9tPy5bJ3NlcnZlcmxlc3Mtb2ZmbGluZSddIHx8IHt9O1xuICBjb25zdCBlZmZlY3RpdmVIb3N0ID0gKGNsaUhvc3QgPz8gY29uZmlnT2ZmbGluZS5ob3N0ID8/ICdsb2NhbGhvc3QnKSBhcyBzdHJpbmc7XG4gIGNvbnN0IHRvTnVtYmVyID0gKHY6IGFueSwgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgaWYodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwgfHwgdiA9PT0gJycpIHtcbiAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICB9XG5cbiAgICBjb25zdCBuID0gdHlwZW9mIHYgPT09ICdudW1iZXInID8gdiA6IHBhcnNlSW50KFN0cmluZyh2KSk7XG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiBmYWxsYmFjaztcbiAgfTtcbiAgY29uc3QgZWZmZWN0aXZlSHR0cFBvcnQgPSB0b051bWJlcihjbGlIdHRwUG9ydCA/PyBjb25maWdPZmZsaW5lLmh0dHBQb3J0LCA1MDAwKTtcbiAgY29uc3QgZWZmZWN0aXZlSHR0cHNQb3J0ID0gdG9OdW1iZXIoY2xpSHR0cHNQb3J0ID8/IGNvbmZpZ09mZmxpbmUuaHR0cHNQb3J0LCA1MDAxKTtcbiAgY29uc3QgZWZmZWN0aXZlV3NQb3J0ID0gdG9OdW1iZXIoY2xpV3NQb3J0ID8/IGNvbmZpZ09mZmxpbmUud3NQb3J0LCA1MDAyKTtcblxuICBjb25zdCBmaW5hbENvbmZpZzogU2VydmVybGVzc0NvbmZpZyA9IHtcbiAgICAuLi5zZXJ2ZXJsZXNzQ29uZmlnLFxuICAgIGN1c3RvbToge1xuICAgICAgJ3NlcnZlcmxlc3Mtb2ZmbGluZSc6IHtcbiAgICAgICAgY29yczogc2VydmVybGVzc0NvbmZpZy5jdXN0b20/Llsnc2VydmVybGVzcy1vZmZsaW5lJ10/LmNvcnMgIT09IGZhbHNlLFxuICAgICAgICBob3N0OiBlZmZlY3RpdmVIb3N0LFxuICAgICAgICBodHRwUG9ydDogZWZmZWN0aXZlSHR0cFBvcnQsXG4gICAgICAgIGh0dHBzUG9ydDogZWZmZWN0aXZlSHR0cHNQb3J0LFxuICAgICAgICB3c1BvcnQ6IGVmZmVjdGl2ZVdzUG9ydFxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBvdXRwdXREaXIgPSBvdXRwdXRGdWxsUGF0aCB8fCAnbGliJztcbiAgbG9nKGBVc2luZyBvdXRwdXQgZGlyZWN0b3J5OiAke291dHB1dERpcn1gLCAnaW5mbycsIHF1aWV0KTtcblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoJ1N0YXJ0aW5nIHNlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyLi4uJyk7XG5cbiAgICBjb25zdCBodHRwUG9ydCA9IGZpbmFsQ29uZmlnLmN1c3RvbSFbJ3NlcnZlcmxlc3Mtb2ZmbGluZSddIS5odHRwUG9ydCE7XG4gICAgY29uc3Qgd3NQb3J0ID0gZmluYWxDb25maWcuY3VzdG9tIVsnc2VydmVybGVzcy1vZmZsaW5lJ10hLndzUG9ydCE7XG4gICAgY29uc3QgaG9zdCA9IGZpbmFsQ29uZmlnLmN1c3RvbSFbJ3NlcnZlcmxlc3Mtb2ZmbGluZSddIS5ob3N0ITtcblxuICAgIGxvZyhgQ3JlYXRpbmcgSFRUUCBzZXJ2ZXIgb24gJHtob3N0fToke2h0dHBQb3J0fWAsICdpbmZvJywgcXVpZXQpO1xuICAgIGxvZyhgQ3JlYXRpbmcgV2ViU29ja2V0IHNlcnZlciBvbiBwb3J0ICR7d3NQb3J0fWAsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgLy8gQ3JlYXRlIEV4cHJlc3Mgc2VydmVyXG4gICAgY29uc3QgZXhwcmVzc0FwcCA9IGF3YWl0IGNyZWF0ZUV4cHJlc3NTZXJ2ZXIoXG4gICAgICBmaW5hbENvbmZpZyxcbiAgICAgIG91dHB1dERpcixcbiAgICAgIGh0dHBQb3J0LFxuICAgICAgaG9zdCxcbiAgICAgIHF1aWV0LFxuICAgICAgZGVidWdcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIFdlYlNvY2tldCBzZXJ2ZXJcbiAgICBjb25zdCB3c1NlcnZlciA9IGNyZWF0ZVdlYlNvY2tldFNlcnZlcihcbiAgICAgIGZpbmFsQ29uZmlnLFxuICAgICAgb3V0cHV0RGlyLFxuICAgICAgd3NQb3J0LFxuICAgICAgcXVpZXQsXG4gICAgICBkZWJ1Z1xuICAgICk7XG5cbiAgICAvLyBIYW5kbGUgc2VydmVyIGVycm9yc1xuICAgIHdzU2VydmVyLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgbG9nKGBXZWJTb2NrZXQgc2VydmVyIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gc3RhcnQgV2ViU29ja2V0IHNlcnZlci4nKTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuXG4gICAgLy8gU3RhcnQgRXhwcmVzcyBzZXJ2ZXJcbiAgICBjb25zdCBzZXJ2ZXIgPSBleHByZXNzQXBwLmxpc3RlbihodHRwUG9ydCwgaG9zdCwgKCkgPT4ge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdTZXJ2ZXJsZXNzIGRldmVsb3BtZW50IHNlcnZlciBzdGFydGVkLicpO1xuICAgICAgdm9pZCByZXNvbHZlUHVibGljSXBGb3JEaXNwbGF5KHVzZVB1YmxpY0lwKS50aGVuKChwdWJsaWNJcCkgPT4ge1xuICAgICAgICBkaXNwbGF5U2VydmVyU3RhdHVzKFxuICAgICAgICAgIGh0dHBQb3J0LFxuICAgICAgICAgIGZpbmFsQ29uZmlnLmN1c3RvbSFbJ3NlcnZlcmxlc3Mtb2ZmbGluZSddIS5odHRwc1BvcnQhLFxuICAgICAgICAgIHdzUG9ydCxcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIHB1YmxpY0lwXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBFeHByZXNzIHNlcnZlciBlcnJvcnNcbiAgICBzZXJ2ZXIub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICBsb2coYEV4cHJlc3Mgc2VydmVyIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gc3RhcnQgRXhwcmVzcyBzZXJ2ZXIuJyk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBncmFjZWZ1bCBzaHV0ZG93blxuICAgIGNvbnN0IHNodXRkb3duID0gKCkgPT4ge1xuICAgICAgbG9nKCdcXG5TaHV0dGluZyBkb3duIHNlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyLi4uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgIHdzU2VydmVyLmNsb3NlKCk7XG4gICAgICBjYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgcHJvY2Vzcy5vbignU0lHSU5UJywgc2h1dGRvd24pO1xuICAgIHByb2Nlc3Mub24oJ1NJR1RFUk0nLCBzaHV0ZG93bik7XG5cbiAgICAvLyBLZWVwIHRoZSBwcm9jZXNzIGFsaXZlXG4gICAgcHJvY2Vzcy5zdGRpbi5yZXN1bWUoKTtcblxuICAgIGxvZygnU2VydmVybGVzcyBkZXZlbG9wbWVudCBzZXJ2ZXIgaXMgcnVubmluZy4gUHJlc3MgQ3RybCtDIHRvIHN0b3AuJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAvLyBEb24ndCBjYWxsIGNhbGxiYWNrIGhlcmUsIGxldCB0aGUgcHJvY2VzcyBzdGF5IGFsaXZlXG4gICAgcmV0dXJuIDA7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gc3RhcnQgc2VydmVybGVzcyBkZXZlbG9wbWVudCBzZXJ2ZXIuJyk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiYm94ZW4iLCJjaGFsayIsImV4cHJlc3MiLCJyZWFkRmlsZVN5bmMiLCJleGlzdHNTeW5jIiwibWtkaXJTeW5jIiwid3JpdGVGaWxlU3luYyIsImhvbWVkaXIiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJqb2luIiwiaXNBYnNvbHV0ZSIsInBhdGhUb0ZpbGVVUkwiLCJXZWJTb2NrZXRTZXJ2ZXIiLCJMZXhDb25maWciLCJnZXRQYWNrYWdlRGlyIiwiY3JlYXRlU3Bpbm5lciIsInJlbW92ZUZpbGVzIiwibG9nIiwiZ2V0Q2FjaGVEaXIiLCJjYWNoZURpciIsInJlY3Vyc2l2ZSIsImdldENhY2hlUGF0aCIsInJlYWRQdWJsaWNJcENhY2hlIiwiY2FjaGVQYXRoIiwiY2FjaGVEYXRhIiwiY2FjaGUiLCJKU09OIiwicGFyc2UiLCJvbmVXZWVrTXMiLCJEYXRlIiwibm93IiwidGltZXN0YW1wIiwid3JpdGVQdWJsaWNJcENhY2hlIiwiaXAiLCJzdHJpbmdpZnkiLCJmZXRjaFB1YmxpY0lwIiwiZm9yY2VSZWZyZXNoIiwiUHJvbWlzZSIsImNhY2hlZCIsImZldGNoIiwidGhlbiIsInJlcyIsInRleHQiLCJkYXRhIiwidHJpbSIsImNhdGNoIiwidW5kZWZpbmVkIiwicmVzb2x2ZVB1YmxpY0lwRm9yRGlzcGxheSIsInRpbWVvdXRNcyIsInRpbWVvdXRQcm9taXNlIiwic2V0VGltZW91dCIsInJhY2UiLCJkaXNwbGF5U2VydmVyU3RhdHVzIiwiaHR0cFBvcnQiLCJodHRwc1BvcnQiLCJ3c1BvcnQiLCJob3N0IiwicXVpZXQiLCJwdWJsaWNJcCIsImh0dHBVcmwiLCJodHRwc1VybCIsIndzVXJsIiwid3NzVXJsIiwidXJsTGluZXMiLCJncmVlbiIsInVuZGVybGluZSIsInN0YXR1c0JveCIsImN5YW4iLCJib2xkIiwieWVsbG93IiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJTdHlsZSIsIm1hcmdpbiIsInBhZGRpbmciLCJjb25zb2xlIiwibG9hZEhhbmRsZXIiLCJoYW5kbGVyUGF0aCIsIm91dHB1dERpciIsImhhbmRsZXJQYXJ0cyIsInNwbGl0IiwiZmlsZVBhdGgiLCJleHBvcnROYW1lIiwibGVuZ3RoIiwic2xpY2UiLCJpbmNsdWRlcyIsImVycm9yIiwicGF0aFBhcnRzIiwibGFzdFBhcnQiLCJmdWxsUGF0aCIsImV4dGVuc2lvbnMiLCJwYXRoV2l0aG91dEV4dCIsInJlcGxhY2UiLCJleHQiLCJjYW5kaWRhdGVQYXRoIiwiRXJyb3IiLCJpbXBvcnRQYXRoIiwiZW5kc1dpdGgiLCJpbXBvcnRVcmwiLCJocmVmIiwiaGFuZGxlck1vZHVsZSIsIk9iamVjdCIsImtleXMiLCJoYW5kbGVyIiwiZGVmYXVsdCIsImltcG9ydEVycm9yIiwibWVzc2FnZSIsInN0YWNrIiwiY2FwdHVyZUNvbnNvbGVMb2dzIiwiZXZlbnQiLCJjb250ZXh0Iiwib3JpZ2luYWxDb25zb2xlTG9nIiwib3JpZ2luYWxDb25zb2xlRXJyb3IiLCJvcmlnaW5hbENvbnNvbGVXYXJuIiwid2FybiIsIm9yaWdpbmFsQ29uc29sZUluZm8iLCJpbmZvIiwibG9ncyIsImFyZ3MiLCJwdXNoIiwicmVzdWx0IiwiZ3JheSIsImZvckVhY2giLCJjcmVhdGVFeHByZXNzU2VydmVyIiwiY29uZmlnIiwiZGVidWciLCJhcHAiLCJ1c2UiLCJyZXEiLCJuZXh0IiwiaGVhZGVyIiwibWV0aG9kIiwic2VuZFN0YXR1cyIsImpzb24iLCJsb2FkR3JhcGhRTFNjaGVtYSIsImdyYXBocWxIYW5kbGVyIiwiZnVuY3Rpb25zIiwiZnVuY3Rpb25OYW1lIiwiZnVuY3Rpb25Db25maWciLCJlbnRyaWVzIiwiZXZlbnRzIiwiaHR0cCIsInBhdGgiLCJncmFwaHFsUGF0aCIsIl9mdW5jdGlvbk5hbWUiLCJib2R5IiwicXVlcnkiLCJ2YXJpYWJsZXMiLCJvcGVyYXRpb25OYW1lIiwibG9nTWVzc2FnZSIsIm1hcCIsImFyZyIsIlN0cmluZyIsImF3c1JlcXVlc3RJZCIsImZ1bmN0aW9uVmVyc2lvbiIsImdldFJlbWFpbmluZ1RpbWVJbk1pbGxpcyIsImludm9rZWRGdW5jdGlvbkFybiIsImxvZ0dyb3VwTmFtZSIsImxvZ1N0cmVhbU5hbWUiLCJ3cmFwcGVkSGFuZGxlciIsImhlYWRlcnMiLCJodHRwTWV0aG9kIiwicXVlcnlTdHJpbmdQYXJhbWV0ZXJzIiwic3RhdHVzQ29kZSIsInN0YXR1cyIsImtleSIsInZhbHVlIiwic2V0SGVhZGVyIiwic2VuZCIsInVybCIsInBhdGhuYW1lIiwibWF0Y2hlZEZ1bmN0aW9uIiwiZnVuY3Rpb25OYW1lcyIsImV2ZW50UGF0aCIsImV2ZW50TWV0aG9kIiwidG9VcHBlckNhc2UiLCJyZXF1ZXN0TWV0aG9kIiwibm9ybWFsaXplZEV2ZW50UGF0aCIsIm5vcm1hbGl6ZWRQYXRobmFtZSIsIm1lbW9yeUxpbWl0SW5NQiIsImNyZWF0ZVdlYlNvY2tldFNlcnZlciIsIndzcyIsInBvcnQiLCJvbiIsIndzIiwidG9TdHJpbmciLCJ3ZWJzb2NrZXQiLCJyb3V0ZSIsImFjdGlvbiIsInJlcXVlc3RDb250ZXh0IiwiYXBpR2F0ZXdheSIsImVuZHBvaW50IiwiY29ubmVjdGlvbklkIiwicm91dGVLZXkiLCJsb2FkRW52RmlsZSIsImVudlBhdGgiLCJlbnZWYXJzIiwiZW52Q29udGVudCIsImxpbmVzIiwibGluZSIsInRyaW1tZWRMaW5lIiwic3RhcnRzV2l0aCIsImVxdWFsSW5kZXgiLCJpbmRleE9mIiwic3Vic3RyaW5nIiwiY2xlYW5WYWx1ZSIsInNlcnZlcmxlc3MiLCJjbWQiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJjbGlIb3N0IiwiY2xpSHR0cFBvcnQiLCJjbGlIdHRwc1BvcnQiLCJyZW1vdmUiLCJ0ZXN0IiwidXNlUHVibGljSXAiLCJjbGlXc1BvcnQiLCJzcGlubmVyIiwicGFyc2VDb25maWciLCJvdXRwdXRGdWxsUGF0aCIsImVudlBhdGhzIiwicHJvY2VzcyIsImN3ZCIsImZpbGVFbnZWYXJzIiwidmFyaWFibGVzT2JqIiwiTk9ERV9FTlYiLCJjbGlWYXJzIiwiX2Vycm9yIiwiZW52Iiwic3RhcnQiLCJzdWNjZWVkIiwic2VydmVybGVzc0NvbmZpZyIsInBhY2thZ2VEaXIiLCJjb25maWdGb3JtYXRzIiwiY29uZmlnUGF0aCIsImNvbmZpZ01vZHVsZSIsImNvbmZpZ09mZmxpbmUiLCJjdXN0b20iLCJlZmZlY3RpdmVIb3N0IiwidG9OdW1iZXIiLCJ2IiwiZmFsbGJhY2siLCJuIiwicGFyc2VJbnQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImVmZmVjdGl2ZUh0dHBQb3J0IiwiZWZmZWN0aXZlSHR0cHNQb3J0IiwiZWZmZWN0aXZlV3NQb3J0IiwiZmluYWxDb25maWciLCJjb3JzIiwiZXhwcmVzc0FwcCIsIndzU2VydmVyIiwiZmFpbCIsInNlcnZlciIsImxpc3RlbiIsInNodXRkb3duIiwiY2xvc2UiLCJzdGRpbiIsInJlc3VtZSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsT0FBT0EsV0FBVyxRQUFRO0FBQzFCLE9BQU9DLFdBQVcsUUFBUTtBQUMxQixPQUFPQyxhQUFhLFVBQVU7QUFDOUIsU0FBUUMsWUFBWSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsYUFBYSxRQUFPLEtBQUs7QUFDdEUsU0FBUUMsT0FBTyxRQUFPLEtBQUs7QUFDM0IsU0FBUUMsV0FBV0MsV0FBVyxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsUUFBTyxPQUFPO0FBQzlELFNBQVFDLGFBQWEsUUFBTyxNQUFNO0FBQ2xDLFNBQVFDLGVBQWUsUUFBTyxLQUFLO0FBRW5DLFNBQVFDLFNBQVMsRUFBRUMsYUFBYSxRQUFPLHFCQUFxQjtBQUM1RCxTQUFRQyxhQUFhLEVBQUVDLFdBQVcsUUFBTyxxQkFBcUI7QUFDOUQsU0FBUUMsR0FBRyxRQUFPLHFCQUFxQjtB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
|
|
@@ -250,4 +250,4 @@ export const storybook = async (cmd, callback = ()=>({}))=>{
|
|
|
250
250
|
}
|
|
251
251
|
};
|
|
252
252
|
|
|
253
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zdG9yeWJvb2svc3Rvcnlib29rLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7c3luYyBhcyBnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lcn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7ZmluZFRhaWx3aW5kQ3NzUGF0aCwgcmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3Rvcnlib29rT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgb3Blbj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3RhdGljPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdXNlTGV4Q29uZmlnPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogc3RyaW5nO1xuICByZWFkb25seSB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgU3Rvcnlib29rQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpPT4gdm9pZDtcblxuY29uc3QgZmluZFN0b3J5RmlsZXMgPSAoKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCBzdG9yeVBhdHRlcm5zID0gW1xuICAgICcqKi8qLnN0b3JpZXMue3RzLHRzeCxqcyxqc3h9JyxcbiAgICAnKiovKi5zdG9yeS57dHMsdHN4LGpzLGpzeH0nLFxuICAgICcqKi9zdG9yaWVzLyoqLyoue3RzLHRzeCxqcyxqc3h9J1xuICBdO1xuXG4gIGNvbnN0IHN0b3J5RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgc3RvcnlQYXR0ZXJucy5mb3JFYWNoKChwYXR0ZXJuKSA9PiB7XG4gICAgY29uc3QgZmlsZXMgPSBnbG9iU3luYyhwYXR0ZXJuLCB7XG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICBpZ25vcmU6IFsnKiovbm9kZV9tb2R1bGVzLyoqJywgJyoqL2Rpc3QvKionLCAnKiovbGliLyoqJywgJyoqL2J1aWxkLyoqJ11cbiAgICB9KTtcbiAgICBzdG9yeUZpbGVzLnB1c2goLi4uZmlsZXMpO1xuICB9KTtcblxuICByZXR1cm4gc3RvcnlGaWxlcztcbn07XG5cbmNvbnN0IGNoZWNrU3Rvcnlib29rSW5pdGlhbGl6YXRpb24gPSAoKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHByb2plY3RDb25maWdEaXIgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLnN0b3J5Ym9vaycpO1xuICBjb25zdCBsZXhDb25maWdEaXIgPSBwYXRoUmVzb2x2ZShMZXhDb25maWcuZ2V0TGV4RGlyKCksICcuc3Rvcnlib29rJyk7XG5cbiAgcmV0dXJuIGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ0RpcikgfHwgZXhpc3RzU3luYyhsZXhDb25maWdEaXIpO1xufTtcblxuY29uc3QgZXh0cmFjdFByb2dyZXNzUGVyY2VudGFnZSA9IChvdXRwdXQ6IHN0cmluZyk6IG51bWJlciB8IG51bGwgPT4ge1xuICBjb25zdCBsaW5lcyA9IG91dHB1dC5zcGxpdCgnXFxuJyk7XG4gIGZvcihjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgaWYobGluZS5pbmNsdWRlcygnW3dlYnBhY2suUHJvZ3Jlc3NdJykgJiYgbGluZS5pbmNsdWRlcygnJScpKSB7XG4gICAgICBjb25zdCBwZXJjZW50YWdlTWF0Y2ggPSBsaW5lLm1hdGNoKC8oXFxkKyklLyk7XG4gICAgICBpZihwZXJjZW50YWdlTWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHBlcmNlbnRhZ2VNYXRjaFsxXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgZmlsdGVyQW5kQmVhdXRpZnlPdXRwdXQgPSAob3V0cHV0OiBzdHJpbmcsIGlzVmVyYm9zZTogYm9vbGVhbik6IHN0cmluZyA9PiB7XG4gIGlmKGlzVmVyYm9zZSkge1xuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBjb25zdCBsaW5lcyA9IG91dHB1dC5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IGZpbHRlcmVkTGluZXMgPSBsaW5lcy5maWx0ZXIoKGxpbmUpID0+IHtcbiAgICBpZihsaW5lLmluY2x1ZGVzKCdbd2VicGFjay5Qcm9ncmVzc10nKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmKGxpbmUuaW5jbHVkZXMoJ1N0b3J5Ym9vaycpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCdMb2NhbDonKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnaHR0cDovL2xvY2FsaG9zdCcpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCdpbmZvID0+JykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ1N0YXJ0aW5nJykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ3JlYWR5JykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ2Vycm9yJykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ3dhcm5pbmcnKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiBmaWx0ZXJlZExpbmVzLmpvaW4oJ1xcbicpO1xufTtcblxuY29uc3QgYmVhdXRpZnlPdXRwdXQgPSAob3V0cHV0OiBzdHJpbmcpOiBzdHJpbmcgPT4gb3V0cHV0XG4gIC5yZXBsYWNlKC9TdG9yeWJvb2sgdltcXGQuXSsvZywgY2hhbGsuY3lhbignJCYnKSlcbiAgLnJlcGxhY2UoL2luZm8gPT4vZywgY2hhbGsuYmx1ZSgnaW5mbyA9PicpKVxuICAucmVwbGFjZSgvTG9jYWw6L2csIGNoYWxrLmdyZWVuKCdMb2NhbDonKSlcbiAgLnJlcGxhY2UoL09uIHlvdXIgbmV0d29yazovZywgY2hhbGsuZ3JlZW4oJ09uIHlvdXIgbmV0d29yazonKSlcbiAgLnJlcGxhY2UoL1N0b3J5Ym9vay4qc3RhcnRlZC9nLCBjaGFsay5ncmVlbignJCYnKSlcbiAgLnJlcGxhY2UoL1N0b3J5Ym9vay4qcmVhZHkvZywgY2hhbGsuZ3JlZW4oJyQmJykpXG4gIC5yZXBsYWNlKC9lcnJvci9nLCBjaGFsay5yZWQoJyQmJykpXG4gIC5yZXBsYWNlKC93YXJuaW5nL2csIGNoYWxrLnllbGxvdygnJCYnKSlcbiAgLnJlcGxhY2UoLyhcXGQrKSUvZywgY2hhbGsubWFnZW50YSgnJDElJykpO1xuXG5leHBvcnQgY29uc3Qgc3Rvcnlib29rID0gYXN5bmMgKGNtZDogU3Rvcnlib29rT3B0aW9ucywgY2FsbGJhY2s6IFN0b3J5Ym9va0NhbGxiYWNrID0gKCkgPT4gKHt9KSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtjbGlOYW1lID0gJ0xleCcsIGNvbmZpZywgb3BlbiA9IGZhbHNlLCBwb3J0ID0gNjAwNywgcXVpZXQsIHN0YXRpYzogc3RhdGljQnVpbGQgPSBmYWxzZSwgdXNlTGV4Q29uZmlnID0gZmFsc2UsIHZhcmlhYmxlcywgdmVyYm9zZSA9IGZhbHNlfSA9IGNtZDtcblxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgbG9nKGNoYWxrLmN5YW4oYCR7Y2xpTmFtZX0gc3RhcnRpbmcgU3Rvcnlib29rLi4uYCksICdpbmZvJywgcXVpZXQpO1xuXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGxldCB2YXJpYWJsZXNPYmo6IG9iamVjdCA9IHtOT0RFX0VOVjogJ2RldmVsb3BtZW50J307XG5cbiAgaWYodmFyaWFibGVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhcmlhYmxlc09iaiA9IEpTT04ucGFyc2UodmFyaWFibGVzKTtcbiAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgb3B0aW9uIGlzIG5vdCBhIHZhbGlkIEpTT04gb2JqZWN0LmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzcy5lbnYgPSB7Li4ucHJvY2Vzcy5lbnYsIC4uLnZhcmlhYmxlc09ian07XG5cbiAgc3Bpbm5lci5zdGFydCgnRmluZGluZyBzdG9yeSBmaWxlcy4uLicpO1xuICBjb25zdCBzdG9yeUZpbGVzID0gZmluZFN0b3J5RmlsZXMoKTtcblxuICBpZihzdG9yeUZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHNwaW5uZXIuZmFpbCgnTm8gc3RvcnkgZmlsZXMgZm91bmQgaW4gdGhlIHByb2plY3QuJyk7XG4gICAgbG9nKCdQbGVhc2UgY3JlYXRlIHN0b3J5IGZpbGVzIHdpdGggLnN0b3JpZXMudHMvLnN0b3JpZXMuanMgZXh0ZW5zaW9ucyBvciBpbiBhIHN0b3JpZXMvIGRpcmVjdG9yeS4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHNwaW5uZXIuc3VjY2VlZChgRm91bmQgJHtzdG9yeUZpbGVzLmxlbmd0aH0gc3RvcnkgZmlsZShzKWApO1xuXG4gIGNvbnN0IHRhaWx3aW5kQ3NzUGF0aCA9IGZpbmRUYWlsd2luZENzc1BhdGgoKTtcblxuICBjb25zb2xlLmxvZyh7dGFpbHdpbmRDc3NQYXRofSk7XG4gIGlmKHRhaWx3aW5kQ3NzUGF0aCkge1xuICAgIGlmKCFxdWlldCkge1xuICAgICAgbG9nKGNoYWxrLmdyZWVuKGDinJMgVGFpbHdpbmQgQ1NTIGludGVncmF0aW9uIGRldGVjdGVkOiAke3RhaWx3aW5kQ3NzUGF0aH1gKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmKCFxdWlldCkge1xuICAgICAgbG9nKGNoYWxrLnllbGxvdygn4pqgIE5vIFRhaWx3aW5kIENTUyBmaWxlIGZvdW5kIGluIHByb2plY3QnKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgICBsb2coY2hhbGsuZ3JheSgnQ3JlYXRlIGEgdGFpbHdpbmQuY3NzIGZpbGUgd2l0aCBAdGFpbHdpbmQgZGlyZWN0aXZlcyBmb3IgZnVsbCBUYWlsd2luZCBzdXBwb3J0JyksICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgfVxuXG4gIGlmKCFjaGVja1N0b3J5Ym9va0luaXRpYWxpemF0aW9uKCkpIHtcbiAgICBzcGlubmVyLmZhaWwoJ1N0b3J5Ym9vayBpcyBub3QgaW5pdGlhbGl6ZWQgaW4gdGhpcyBwcm9qZWN0IG9yIGluIExleC4nKTtcbiAgICBsb2coJ1BsZWFzZSBydW4gXCJucHggc3Rvcnlib29rQGxhdGVzdCBpbml0XCIgdG8gc2V0IHVwIFN0b3J5Ym9vayBpbiB5b3VyIHByb2plY3QsIG9yIGVuc3VyZSBMZXggaGFzIGEgdmFsaWQgLnN0b3J5Ym9vayBjb25maWd1cmF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY29uc3QgcHJvamVjdENvbmZpZ0RpciA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuc3Rvcnlib29rJyk7XG4gIGNvbnN0IGxleENvbmZpZ0RpciA9IHBhdGhSZXNvbHZlKExleENvbmZpZy5nZXRMZXhEaXIoKSwgJy5zdG9yeWJvb2snKTtcblxuICBsZXQgY29uZmlnRGlyID0gY29uZmlnO1xuICBpZighY29uZmlnRGlyKSB7XG4gICAgY29uZmlnRGlyID0gbGV4Q29uZmlnRGlyO1xuICAgIGlmKCF1c2VMZXhDb25maWcgJiYgZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnRGlyKSkge1xuICAgICAgY29uZmlnRGlyID0gcHJvamVjdENvbmZpZ0RpcjtcbiAgICB9XG4gIH1cblxuICBpZighcXVpZXQpIHtcbiAgICBsb2coY2hhbGsuZ3JheShgUHJvamVjdCBjb25maWcgZGlyOiAke3Byb2plY3RDb25maWdEaXJ9IChleGlzdHM6ICR7ZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnRGlyKX0pYCksICdpbmZvJywgcXVpZXQpO1xuICAgIGxvZyhjaGFsay5ncmF5KGBMZXggY29uZmlnIGRpcjogJHtsZXhDb25maWdEaXJ9IChleGlzdHM6ICR7ZXhpc3RzU3luYyhsZXhDb25maWdEaXIpfSlgKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgaWYodXNlTGV4Q29uZmlnKSB7XG4gICAgICBsb2coY2hhbGsuYmx1ZSgnVXNpbmcgTGV4IFN0b3J5Ym9vayBjb25maWd1cmF0aW9uICgtLXVzZS1sZXgtY29uZmlnIGZsYWcpJyksICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgICBsb2coY2hhbGsuZ3JheShgSW5pdGlhbCBjb25maWcgZGlyOiAke2NvbmZpZ0Rpcn1gKSwgJ2luZm8nLCBxdWlldCk7XG4gIH1cblxuICBpZihjb25maWdEaXIgPT09IGxleENvbmZpZ0Rpcikge1xuICAgIGlmKCFxdWlldCkge1xuICAgICAgbG9nKGNoYWxrLmJsdWUoJ1VzaW5nIExleCBjb25maWcsIHdpbGwgY3JlYXRlIHRlbXBvcmFyeSBjb25maWcgaW4gcHJvamVjdCAuc3Rvcnlib29rIGRpcmVjdG9yeScpLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gICAgY29uc3QgcHJvamVjdFN0b3J5Ym9va0RpciA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuc3Rvcnlib29rJyk7XG5cbiAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydCgnZnMvcHJvbWlzZXMnKTtcbiAgICBhd2FpdCBmcy5ta2Rpcihwcm9qZWN0U3Rvcnlib29rRGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG5cbiAgICBjb25zdCBsZXhNYWluUGF0aCA9IHBhdGhSZXNvbHZlKGxleENvbmZpZ0RpciwgJ21haW4udHMnKTtcbiAgICBjb25zdCBwcm9qZWN0TWFpblBhdGggPSBwYXRoUmVzb2x2ZShwcm9qZWN0U3Rvcnlib29rRGlyLCAnbWFpbi50cycpO1xuICAgIGxldCBtYWluQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGxleE1haW5QYXRoLCAndXRmOCcpO1xuXG4gICAgbWFpbkNvbnRlbnQgPSBtYWluQ29udGVudC5yZXBsYWNlKFxuICAgICAgL3N0b3JpZXM6XFxzKlxcWy4qP1xcXS8sXG4gICAgICBgc3RvcmllczogWycke3BhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzcmMvKiovKi5zdG9yaWVzLkAodHN8dHN4KScpfScsICcke3BhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzcmMvKiovKi5tZHgnKX0nXWBcbiAgICApO1xuXG4gICAgY29uc3QgbGV4Tm9kZU1vZHVsZXMgPSBwYXRoUmVzb2x2ZShMZXhDb25maWcuZ2V0TGV4RGlyKCksICdub2RlX21vZHVsZXMnKTtcbiAgICBtYWluQ29udGVudCA9IG1haW5Db250ZW50LnJlcGxhY2UoXG4gICAgICAvY29uc3QgbGV4TW9kdWxlID0gXFwobW9kdWxlUGF0aDogc3RyaW5nXFwpID0+IHJlc29sdmVcXChnZXRMZXhOb2RlTW9kdWxlc1BhdGhcXChcXCksIG1vZHVsZVBhdGhcXCk7LyxcbiAgICAgIGBjb25zdCBsZXhNb2R1bGUgPSAobW9kdWxlUGF0aDogc3RyaW5nKSA9PiByZXNvbHZlKCcke2xleE5vZGVNb2R1bGVzfScsIG1vZHVsZVBhdGgpO2BcbiAgICApO1xuXG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHByb2plY3RNYWluUGF0aCwgbWFpbkNvbnRlbnQpO1xuXG4gICAgY29uc3QgbGV4UHJldmlld1BhdGggPSBwYXRoUmVzb2x2ZShsZXhDb25maWdEaXIsICdwcmV2aWV3LnRzeCcpO1xuICAgIGlmKGV4aXN0c1N5bmMobGV4UHJldmlld1BhdGgpKSB7XG4gICAgICBjb25zdCBwcmV2aWV3Q29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGxleFByZXZpZXdQYXRoLCAndXRmOCcpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGhSZXNvbHZlKHByb2plY3RTdG9yeWJvb2tEaXIsICdwcmV2aWV3LnRzeCcpLCBwcmV2aWV3Q29udGVudCk7XG4gICAgfVxuXG4gICAgY29uZmlnRGlyID0gcHJvamVjdFN0b3J5Ym9va0RpcjtcbiAgfVxuICBpZighZXhpc3RzU3luYyhjb25maWdEaXIpKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdTdG9yeWJvb2sgY29uZmlndXJhdGlvbiBub3QgZm91bmQuJyk7XG4gICAgbG9nKGBQcm9qZWN0IGNvbmZpZzogJHtwcm9qZWN0Q29uZmlnRGlyfWAsICdpbmZvJywgcXVpZXQpO1xuICAgIGxvZyhgTGV4IGNvbmZpZzogJHtsZXhDb25maWdEaXJ9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgbG9nKCdQbGVhc2UgcnVuIFwibnB4IHN0b3J5Ym9va0BsYXRlc3QgaW5pdFwiIHRvIHNldCB1cCBTdG9yeWJvb2sgaW4geW91ciBwcm9qZWN0LCBvciBlbnN1cmUgTGV4IGhhcyBhIHZhbGlkIC5zdG9yeWJvb2sgY29uZmlndXJhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IHN0b3J5Ym9va1BhdGggPSByZXNvbHZlQmluYXJ5UGF0aCgnc3Rvcnlib29rJyk7XG5cbiAgaWYoIXN0b3J5Ym9va1BhdGgpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IHN0b3J5Ym9vayBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlcyBvciBtb25vcmVwbyByb290YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBTdG9yeWJvb2sgaW5zdGFsbGF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY29uc3Qgc3Rvcnlib29rQXJncyA9IFtzdGF0aWNCdWlsZCA/ICdidWlsZCcgOiAnZGV2J107XG4gIHN0b3J5Ym9va0FyZ3MucHVzaCgnLS1jb25maWctZGlyJywgY29uZmlnRGlyKTtcblxuICBpZihwb3J0KSB7XG4gICAgc3Rvcnlib29rQXJncy5wdXNoKCctLXBvcnQnLCBwb3J0LnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgaWYob3Blbikge1xuICAgIHN0b3J5Ym9va0FyZ3MucHVzaCgnLS1vcGVuJyk7XG4gIH1cblxuICBpZihzdGF0aWNCdWlsZCkge1xuICAgIGNvbnN0IG91dHB1dERpciA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzdG9yeWJvb2stc3RhdGljJyk7XG4gICAgc3Rvcnlib29rQXJncy5wdXNoKCctLW91dHB1dC1kaXInLCBvdXRwdXREaXIpO1xuICB9XG5cbiAgaWYoIXF1aWV0KSB7XG4gICAgbG9nKGNoYWxrLmdyYXkoYENvbmZpZyBkaXJlY3Rvcnk6ICR7Y29uZmlnRGlyfWApLCAnaW5mbycsIHF1aWV0KTtcbiAgfVxuXG4gIHByb2Nlc3MuZW52LlRBSUxXSU5EX0NTU19QQVRIID0gdGFpbHdpbmRDc3NQYXRoO1xuXG4gIHRyeSB7XG4gICAgc3Bpbm5lci5zdGFydChzdGF0aWNCdWlsZCA/ICdCdWlsZGluZyBzdGF0aWMgU3Rvcnlib29rLi4uJyA6ICdTdGFydGluZyBTdG9yeWJvb2sgZGV2ZWxvcG1lbnQgc2VydmVyLi4uJyk7XG5cbiAgICBjb25zdCBzdG9yeWJvb2tQcm9jZXNzID0gZXhlY2Eoc3Rvcnlib29rUGF0aCBhcyBhbnksIHN0b3J5Ym9va0FyZ3MsIHtcbiAgICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgIExFWF9RVUlFVDogcXVpZXQsXG4gICAgICAgIExFWF9WRVJCT1NFOiB2ZXJib3NlLFxuICAgICAgICBTVE9SWUJPT0tfT1BFTjogb3BlbixcbiAgICAgICAgLi4uKHRhaWx3aW5kQ3NzUGF0aCAmJiB7VEFJTFdJTkRfQ1NTX1BBVEg6IHRhaWx3aW5kQ3NzUGF0aH0pXG4gICAgICB9IGFzIGFueSxcbiAgICAgIHN0ZGlvOiAncGlwZSdcbiAgICB9KTtcblxuICAgIGxldCB1cmxGb3VuZCA9IGZhbHNlO1xuICAgIGxldCBsYXN0UHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcblxuICAgIHN0b3J5Ym9va1Byb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBwcm9ncmVzc1BlcmNlbnRhZ2UgPSBleHRyYWN0UHJvZ3Jlc3NQZXJjZW50YWdlKG91dHB1dCk7XG5cbiAgICAgIGlmKHByb2dyZXNzUGVyY2VudGFnZSAhPT0gbnVsbCAmJiBwcm9ncmVzc1BlcmNlbnRhZ2UgIT09IGxhc3RQcm9ncmVzc1BlcmNlbnRhZ2UpIHtcbiAgICAgICAgbGFzdFByb2dyZXNzUGVyY2VudGFnZSA9IHByb2dyZXNzUGVyY2VudGFnZTtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gc3RhdGljQnVpbGQgPyAnQnVpbGRpbmcnIDogJ1N0YXJ0aW5nJztcbiAgICAgICAgKHNwaW5uZXIgYXMgYW55KS50ZXh0ID0gYCR7YWN0aW9ufSBTdG9yeWJvb2suLi4gJHtwcm9ncmVzc1BlcmNlbnRhZ2V9JWA7XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBcXG5XZWJwYWNrIFByb2dyZXNzOiAke2NoYWxrLm1hZ2VudGEoYCR7cHJvZ3Jlc3NQZXJjZW50YWdlfSVgKX1cXG5gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsdGVyZWRPdXRwdXQgPSBmaWx0ZXJBbmRCZWF1dGlmeU91dHB1dChvdXRwdXQsIHZlcmJvc2UpO1xuICAgICAgY29uc3QgYmVhdXRpZmllZE91dHB1dCA9IGJlYXV0aWZ5T3V0cHV0KGZpbHRlcmVkT3V0cHV0KTtcblxuICAgICAgaWYoIXVybEZvdW5kICYmIChvdXRwdXQuaW5jbHVkZXMoJ0xvY2FsOicpIHx8IG91dHB1dC5pbmNsdWRlcygnaHR0cDovL2xvY2FsaG9zdCcpIHx8IG91dHB1dC5pbmNsdWRlcygnU3Rvcnlib29rJykpKSB7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZChjaGFsay5ncmVlbignU3Rvcnlib29rIGRldmVsb3BtZW50IHNlcnZlciBpcyByZWFkeSEnKSk7XG4gICAgICAgIHVybEZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYoZmlsdGVyZWRPdXRwdXQudHJpbSgpKSB7XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGJlYXV0aWZpZWRPdXRwdXQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3Rvcnlib29rUHJvY2Vzcy5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkT3V0cHV0ID0gZmlsdGVyQW5kQmVhdXRpZnlPdXRwdXQob3V0cHV0LCB2ZXJib3NlKTtcbiAgICAgIGNvbnN0IGJlYXV0aWZpZWRPdXRwdXQgPSBiZWF1dGlmeU91dHB1dChmaWx0ZXJlZE91dHB1dCk7XG5cbiAgICAgIGlmKGZpbHRlcmVkT3V0cHV0LnRyaW0oKSkge1xuICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShiZWF1dGlmaWVkT3V0cHV0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzdG9yeWJvb2tQcm9jZXNzO1xuICAgICAgaWYoIXVybEZvdW5kKSB7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZChjaGFsay5ncmVlbignU3Rvcnlib29rIGRldmVsb3BtZW50IHNlcnZlciBzdGFydGVkLicpKTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKDApO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgc3Bpbm5lci5mYWlsKGNoYWxrLnJlZCgnVGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHJ1bm5pbmcgc3Rvcnlib29rLicpKTtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHNwaW5uZXIuZmFpbCgnVGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHJ1bm5pbmcgc3Rvcnlib29rLicpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG59OyJdLCJuYW1lcyI6WyJjaGFsayIsImV4ZWNhIiwiZXhpc3RzU3luYyIsInN5bmMiLCJnbG9iU3luYyIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsIkxleENvbmZpZyIsImNyZWF0ZVNwaW5uZXIiLCJmaW5kVGFpbHdpbmRDc3NQYXRoIiwicmVzb2x2ZUJpbmFyeVBhdGgiLCJsb2ciLCJmaW5kU3RvcnlGaWxlcyIsInN0b3J5UGF0dGVybnMiLCJzdG9yeUZpbGVzIiwiZm9yRWFjaCIsInBhdHRlcm4iLCJmaWxlcyIsImN3ZCIsInByb2Nlc3MiLCJpZ25vcmUiLCJwdXNoIiwiY2hlY2tTdG9yeWJvb2tJbml0aWFsaXphdGlvbiIsInByb2plY3RDb25maWdEaXIiLCJsZXhDb25maWdEaXIiLCJnZXRMZXhEaXIiLCJleHRyYWN0UHJvZ3Jlc3NQZXJjZW50YWdlIiwib3V0cHV0IiwibGluZXMiLCJzcGxpdCIsImxpbmUiLCJpbmNsdWRlcyIsInBlcmNlbnRhZ2VNYXRjaCIsIm1hdGNoIiwicGFyc2VJbnQiLCJmaWx0ZXJBbmRCZWF1dGlmeU91dHB1dCIsImlzVmVyYm9zZSIsImZpbHRlcmVkTGluZXMiLCJmaWx0ZXIiLCJqb2luIiwiYmVhdXRpZnlPdXRwdXQiLCJyZXBsYWNlIiwiY3lhbiIsImJsdWUiLCJncmVlbiIsInJlZCIsInllbGxvdyIsIm1hZ2VudGEiLCJzdG9yeWJvb2siLCJjbWQiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJjb25maWciLCJvcGVuIiwicG9ydCIsInF1aWV0Iiwic3RhdGljIiwic3RhdGljQnVpbGQiLCJ1c2VMZXhDb25maWciLCJ2YXJpYWJsZXMiLCJ2ZXJib3NlIiwic3Bpbm5lciIsInBhcnNlQ29uZmlnIiwidmFyaWFibGVzT2JqIiwiTk9ERV9FTlYiLCJKU09OIiwicGFyc2UiLCJfZXJyb3IiLCJlbnYiLCJzdGFydCIsImxlbmd0aCIsImZhaWwiLCJzdWNjZWVkIiwidGFpbHdpbmRDc3NQYXRoIiwiY29uc29sZSIsImdyYXkiLCJjb25maWdEaXIiLCJwcm9qZWN0U3Rvcnlib29rRGlyIiwiZnMiLCJta2RpciIsInJlY3Vyc2l2ZSIsImxleE1haW5QYXRoIiwicHJvamVjdE1haW5QYXRoIiwibWFpbkNvbnRlbnQiLCJyZWFkRmlsZSIsImxleE5vZGVNb2R1bGVzIiwid3JpdGVGaWxlIiwibGV4UHJldmlld1BhdGgiLCJwcmV2aWV3Q29udGVudCIsInN0b3J5Ym9va1BhdGgiLCJzdG9yeWJvb2tBcmdzIiwidG9TdHJpbmciLCJvdXRwdXREaXIiLCJUQUlMV0lORF9DU1NfUEFUSCIsInN0b3J5Ym9va1Byb2Nlc3MiLCJlbmNvZGluZyIsIkxFWF9RVUlFVCIsIkxFWF9WRVJCT1NFIiwiU1RPUllCT09LX09QRU4iLCJzdGRpbyIsInVybEZvdW5kIiwibGFzdFByb2dyZXNzUGVyY2VudGFnZSIsInN0ZG91dCIsIm9uIiwiZGF0YSIsInByb2dyZXNzUGVyY2VudGFnZSIsImFjdGlvbiIsInRleHQiLCJ3cml0ZSIsImZpbHRlcmVkT3V0cHV0IiwiYmVhdXRpZmllZE91dHB1dCIsInRyaW0iLCJzdGRlcnIiLCJlcnJvciIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFdBQVcsUUFBUTtBQUMxQixTQUFRQyxLQUFLLFFBQU8sUUFBUTtBQUM1QixTQUFRQyxVQUFVLFFBQU8sS0FBSztBQUM5QixTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxTQUFRQyxXQUFXQyxXQUFXLFFBQU8sT0FBTztBQUU1QyxTQUFRQyxTQUFTLFFBQU8scUJBQXFCO0FBQzdDLFNBQVFDLGFBQWEsUUFBTyxxQkFBcUI7QUFDakQsU0FBUUMsbUJBQW1CLEVBQUVDLGlCQUFpQixRQUFPLHNCQUFzQjtBQUMzRSxTQUFRQyxHQUFHLFFBQU8scUJBQXFCO0FBZ0J2QyxNQUFNQyxpQkFBaUI7SUFDckIsTUFBTUMsZ0JBQWdCO1FBQ3BCO1FBQ0E7UUFDQTtLQUNEO0lBRUQsTUFBTUMsYUFBdUIsRUFBRTtJQUUvQkQsY0FBY0UsT0FBTyxDQUFDLENBQUNDO1FBQ3JCLE1BQU1DLFFBQVFiLFNBQVNZLFNBQVM7WUFDOUJFLEtBQUtDLFFBQVFELEdBQUc7WUFDaEJFLFFBQVE7Z0JBQUM7Z0JBQXNCO2dCQUFjO2dCQUFhO2FBQWM7UUFDMUU7UUFDQU4sV0FBV08sSUFBSSxJQUFJSjtJQUNyQjtJQUVBLE9BQU9IO0FBQ1Q7QUFFQSxNQUFNUSwrQkFBK0I7SUFDbkMsTUFBTUMsbUJBQW1CakIsWUFBWWEsUUFBUUQsR0FBRyxJQUFJO0lBQ3BELE1BQU1NLGVBQWVsQixZQUFZQyxVQUFVa0IsU0FBUyxJQUFJO0lBRXhELE9BQU92QixXQUFXcUIscUJBQXFCckIsV0FBV3NCO0FBQ3BEO0FBRUEsTUFBTUUsNEJBQTRCLENBQUNDO0lBQ2pDLE1BQU1DLFFBQVFELE9BQU9FLEtBQUssQ0FBQztJQUMzQixLQUFJLE1BQU1DLFFBQVFGLE1BQU87UUFDdkIsSUFBR0UsS0FBS0MsUUFBUSxDQUFDLHlCQUF5QkQsS0FBS0MsUUFBUSxDQUFDLE1BQU07WUFD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
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zdG9yeWJvb2svc3Rvcnlib29rLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7c3luYyBhcyBnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lcn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7ZmluZFRhaWx3aW5kQ3NzUGF0aCwgcmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3Rvcnlib29rT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgb3Blbj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3RhdGljPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdXNlTGV4Q29uZmlnPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogc3RyaW5nO1xuICByZWFkb25seSB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgU3Rvcnlib29rQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmNvbnN0IGZpbmRTdG9yeUZpbGVzID0gKCk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qgc3RvcnlQYXR0ZXJucyA9IFtcbiAgICAnKiovKi5zdG9yaWVzLnt0cyx0c3gsanMsanN4fScsXG4gICAgJyoqLyouc3Rvcnkue3RzLHRzeCxqcyxqc3h9JyxcbiAgICAnKiovc3Rvcmllcy8qKi8qLnt0cyx0c3gsanMsanN4fSdcbiAgXTtcblxuICBjb25zdCBzdG9yeUZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHN0b3J5UGF0dGVybnMuZm9yRWFjaCgocGF0dGVybikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZ2xvYlN5bmMocGF0dGVybiwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgaWdub3JlOiBbJyoqL25vZGVfbW9kdWxlcy8qKicsICcqKi9kaXN0LyoqJywgJyoqL2xpYi8qKicsICcqKi9idWlsZC8qKiddXG4gICAgfSk7XG4gICAgc3RvcnlGaWxlcy5wdXNoKC4uLmZpbGVzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0b3J5RmlsZXM7XG59O1xuXG5jb25zdCBjaGVja1N0b3J5Ym9va0luaXRpYWxpemF0aW9uID0gKCk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBwcm9qZWN0Q29uZmlnRGlyID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy5zdG9yeWJvb2snKTtcbiAgY29uc3QgbGV4Q29uZmlnRGlyID0gcGF0aFJlc29sdmUoTGV4Q29uZmlnLmdldExleERpcigpLCAnLnN0b3J5Ym9vaycpO1xuXG4gIHJldHVybiBleGlzdHNTeW5jKHByb2plY3RDb25maWdEaXIpIHx8IGV4aXN0c1N5bmMobGV4Q29uZmlnRGlyKTtcbn07XG5cbmNvbnN0IGV4dHJhY3RQcm9ncmVzc1BlcmNlbnRhZ2UgPSAob3V0cHV0OiBzdHJpbmcpOiBudW1iZXIgfCBudWxsID0+IHtcbiAgY29uc3QgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xcbicpO1xuICBmb3IoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGlmKGxpbmUuaW5jbHVkZXMoJ1t3ZWJwYWNrLlByb2dyZXNzXScpICYmIGxpbmUuaW5jbHVkZXMoJyUnKSkge1xuICAgICAgY29uc3QgcGVyY2VudGFnZU1hdGNoID0gbGluZS5tYXRjaCgvKFxcZCspJS8pO1xuICAgICAgaWYocGVyY2VudGFnZU1hdGNoKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChwZXJjZW50YWdlTWF0Y2hbMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IGZpbHRlckFuZEJlYXV0aWZ5T3V0cHV0ID0gKG91dHB1dDogc3RyaW5nLCBpc1ZlcmJvc2U6IGJvb2xlYW4pOiBzdHJpbmcgPT4ge1xuICBpZihpc1ZlcmJvc2UpIHtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgY29uc3QgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBmaWx0ZXJlZExpbmVzID0gbGluZXMuZmlsdGVyKChsaW5lKSA9PiB7XG4gICAgaWYobGluZS5pbmNsdWRlcygnW3dlYnBhY2suUHJvZ3Jlc3NdJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZihsaW5lLmluY2x1ZGVzKCdTdG9yeWJvb2snKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnTG9jYWw6JykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ2h0dHA6Ly9sb2NhbGhvc3QnKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnaW5mbyA9PicpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCdTdGFydGluZycpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCdyZWFkeScpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCdlcnJvcicpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCd3YXJuaW5nJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICByZXR1cm4gZmlsdGVyZWRMaW5lcy5qb2luKCdcXG4nKTtcbn07XG5cbmNvbnN0IGJlYXV0aWZ5T3V0cHV0ID0gKG91dHB1dDogc3RyaW5nKTogc3RyaW5nID0+IG91dHB1dFxuICAucmVwbGFjZSgvU3Rvcnlib29rIHZbXFxkLl0rL2csIGNoYWxrLmN5YW4oJyQmJykpXG4gIC5yZXBsYWNlKC9pbmZvID0+L2csIGNoYWxrLmJsdWUoJ2luZm8gPT4nKSlcbiAgLnJlcGxhY2UoL0xvY2FsOi9nLCBjaGFsay5ncmVlbignTG9jYWw6JykpXG4gIC5yZXBsYWNlKC9PbiB5b3VyIG5ldHdvcms6L2csIGNoYWxrLmdyZWVuKCdPbiB5b3VyIG5ldHdvcms6JykpXG4gIC5yZXBsYWNlKC9TdG9yeWJvb2suKnN0YXJ0ZWQvZywgY2hhbGsuZ3JlZW4oJyQmJykpXG4gIC5yZXBsYWNlKC9TdG9yeWJvb2suKnJlYWR5L2csIGNoYWxrLmdyZWVuKCckJicpKVxuICAucmVwbGFjZSgvZXJyb3IvZywgY2hhbGsucmVkKCckJicpKVxuICAucmVwbGFjZSgvd2FybmluZy9nLCBjaGFsay55ZWxsb3coJyQmJykpXG4gIC5yZXBsYWNlKC8oXFxkKyklL2csIGNoYWxrLm1hZ2VudGEoJyQxJScpKTtcblxuZXhwb3J0IGNvbnN0IHN0b3J5Ym9vayA9IGFzeW5jIChjbWQ6IFN0b3J5Ym9va09wdGlvbnMsIGNhbGxiYWNrOiBTdG9yeWJvb2tDYWxsYmFjayA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBjb25maWcsIG9wZW4gPSBmYWxzZSwgcG9ydCA9IDYwMDcsIHF1aWV0LCBzdGF0aWM6IHN0YXRpY0J1aWxkID0gZmFsc2UsIHVzZUxleENvbmZpZyA9IGZhbHNlLCB2YXJpYWJsZXMsIHZlcmJvc2UgPSBmYWxzZX0gPSBjbWQ7XG5cbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIGxvZyhjaGFsay5jeWFuKGAke2NsaU5hbWV9IHN0YXJ0aW5nIFN0b3J5Ym9vay4uLmApLCAnaW5mbycsIHF1aWV0KTtcblxuICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcoY21kKTtcblxuICBsZXQgdmFyaWFibGVzT2JqOiBvYmplY3QgPSB7Tk9ERV9FTlY6ICdkZXZlbG9wbWVudCd9O1xuXG4gIGlmKHZhcmlhYmxlcykge1xuICAgIHRyeSB7XG4gICAgICB2YXJpYWJsZXNPYmogPSBKU09OLnBhcnNlKHZhcmlhYmxlcyk7XG4gICAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRW52aXJvbm1lbnQgdmFyaWFibGVzIG9wdGlvbiBpcyBub3QgYSB2YWxpZCBKU09OIG9iamVjdC5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3MuZW52ID0gey4uLnByb2Nlc3MuZW52LCAuLi52YXJpYWJsZXNPYmp9O1xuXG4gIHNwaW5uZXIuc3RhcnQoJ0ZpbmRpbmcgc3RvcnkgZmlsZXMuLi4nKTtcbiAgY29uc3Qgc3RvcnlGaWxlcyA9IGZpbmRTdG9yeUZpbGVzKCk7XG5cbiAgaWYoc3RvcnlGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICBzcGlubmVyLmZhaWwoJ05vIHN0b3J5IGZpbGVzIGZvdW5kIGluIHRoZSBwcm9qZWN0LicpO1xuICAgIGxvZygnUGxlYXNlIGNyZWF0ZSBzdG9yeSBmaWxlcyB3aXRoIC5zdG9yaWVzLnRzLy5zdG9yaWVzLmpzIGV4dGVuc2lvbnMgb3IgaW4gYSBzdG9yaWVzLyBkaXJlY3RvcnkuJywgJ2luZm8nLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBzcGlubmVyLnN1Y2NlZWQoYEZvdW5kICR7c3RvcnlGaWxlcy5sZW5ndGh9IHN0b3J5IGZpbGUocylgKTtcblxuICBjb25zdCB0YWlsd2luZENzc1BhdGggPSBmaW5kVGFpbHdpbmRDc3NQYXRoKCk7XG5cbiAgY29uc29sZS5sb2coe3RhaWx3aW5kQ3NzUGF0aH0pO1xuICBpZih0YWlsd2luZENzc1BhdGgpIHtcbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGxvZyhjaGFsay5ncmVlbihg4pyTIFRhaWx3aW5kIENTUyBpbnRlZ3JhdGlvbiBkZXRlY3RlZDogJHt0YWlsd2luZENzc1BhdGh9YCksICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGxvZyhjaGFsay55ZWxsb3coJ+KaoCBObyBUYWlsd2luZCBDU1MgZmlsZSBmb3VuZCBpbiBwcm9qZWN0JyksICdpbmZvJywgcXVpZXQpO1xuICAgICAgbG9nKGNoYWxrLmdyYXkoJ0NyZWF0ZSBhIHRhaWx3aW5kLmNzcyBmaWxlIHdpdGggQHRhaWx3aW5kIGRpcmVjdGl2ZXMgZm9yIGZ1bGwgVGFpbHdpbmQgc3VwcG9ydCcpLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gIH1cblxuICBpZighY2hlY2tTdG9yeWJvb2tJbml0aWFsaXphdGlvbigpKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdTdG9yeWJvb2sgaXMgbm90IGluaXRpYWxpemVkIGluIHRoaXMgcHJvamVjdCBvciBpbiBMZXguJyk7XG4gICAgbG9nKCdQbGVhc2UgcnVuIFwibnB4IHN0b3J5Ym9va0BsYXRlc3QgaW5pdFwiIHRvIHNldCB1cCBTdG9yeWJvb2sgaW4geW91ciBwcm9qZWN0LCBvciBlbnN1cmUgTGV4IGhhcyBhIHZhbGlkIC5zdG9yeWJvb2sgY29uZmlndXJhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IHByb2plY3RDb25maWdEaXIgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLnN0b3J5Ym9vaycpO1xuICBjb25zdCBsZXhDb25maWdEaXIgPSBwYXRoUmVzb2x2ZShMZXhDb25maWcuZ2V0TGV4RGlyKCksICcuc3Rvcnlib29rJyk7XG5cbiAgbGV0IGNvbmZpZ0RpciA9IGNvbmZpZztcbiAgaWYoIWNvbmZpZ0Rpcikge1xuICAgIGNvbmZpZ0RpciA9IGxleENvbmZpZ0RpcjtcbiAgICBpZighdXNlTGV4Q29uZmlnICYmIGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ0RpcikpIHtcbiAgICAgIGNvbmZpZ0RpciA9IHByb2plY3RDb25maWdEaXI7XG4gICAgfVxuICB9XG5cbiAgaWYoIXF1aWV0KSB7XG4gICAgbG9nKGNoYWxrLmdyYXkoYFByb2plY3QgY29uZmlnIGRpcjogJHtwcm9qZWN0Q29uZmlnRGlyfSAoZXhpc3RzOiAke2V4aXN0c1N5bmMocHJvamVjdENvbmZpZ0Rpcil9KWApLCAnaW5mbycsIHF1aWV0KTtcbiAgICBsb2coY2hhbGsuZ3JheShgTGV4IGNvbmZpZyBkaXI6ICR7bGV4Q29uZmlnRGlyfSAoZXhpc3RzOiAke2V4aXN0c1N5bmMobGV4Q29uZmlnRGlyKX0pYCksICdpbmZvJywgcXVpZXQpO1xuICAgIGlmKHVzZUxleENvbmZpZykge1xuICAgICAgbG9nKGNoYWxrLmJsdWUoJ1VzaW5nIExleCBTdG9yeWJvb2sgY29uZmlndXJhdGlvbiAoLS11c2UtbGV4LWNvbmZpZyBmbGFnKScpLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gICAgbG9nKGNoYWxrLmdyYXkoYEluaXRpYWwgY29uZmlnIGRpcjogJHtjb25maWdEaXJ9YCksICdpbmZvJywgcXVpZXQpO1xuICB9XG5cbiAgaWYoY29uZmlnRGlyID09PSBsZXhDb25maWdEaXIpIHtcbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGxvZyhjaGFsay5ibHVlKCdVc2luZyBMZXggY29uZmlnLCB3aWxsIGNyZWF0ZSB0ZW1wb3JhcnkgY29uZmlnIGluIHByb2plY3QgLnN0b3J5Ym9vayBkaXJlY3RvcnknKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgfVxuICAgIGNvbnN0IHByb2plY3RTdG9yeWJvb2tEaXIgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLnN0b3J5Ym9vaycpO1xuXG4gICAgY29uc3QgZnMgPSBhd2FpdCBpbXBvcnQoJ2ZzL3Byb21pc2VzJyk7XG4gICAgYXdhaXQgZnMubWtkaXIocHJvamVjdFN0b3J5Ym9va0Rpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuXG4gICAgY29uc3QgbGV4TWFpblBhdGggPSBwYXRoUmVzb2x2ZShsZXhDb25maWdEaXIsICdtYWluLnRzJyk7XG4gICAgY29uc3QgcHJvamVjdE1haW5QYXRoID0gcGF0aFJlc29sdmUocHJvamVjdFN0b3J5Ym9va0RpciwgJ21haW4udHMnKTtcbiAgICBsZXQgbWFpbkNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShsZXhNYWluUGF0aCwgJ3V0ZjgnKTtcblxuICAgIG1haW5Db250ZW50ID0gbWFpbkNvbnRlbnQucmVwbGFjZShcbiAgICAgIC9zdG9yaWVzOlxccypcXFsuKj9cXF0vLFxuICAgICAgYHN0b3JpZXM6IFsnJHtwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnc3JjLyoqLyouc3Rvcmllcy5AKHRzfHRzeCknKX0nLCAnJHtwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnc3JjLyoqLyoubWR4Jyl9J11gXG4gICAgKTtcblxuICAgIGNvbnN0IGxleE5vZGVNb2R1bGVzID0gcGF0aFJlc29sdmUoTGV4Q29uZmlnLmdldExleERpcigpLCAnbm9kZV9tb2R1bGVzJyk7XG4gICAgbWFpbkNvbnRlbnQgPSBtYWluQ29udGVudC5yZXBsYWNlKFxuICAgICAgL2NvbnN0IGxleE1vZHVsZSA9IFxcKG1vZHVsZVBhdGg6IHN0cmluZ1xcKSA9PiByZXNvbHZlXFwoZ2V0TGV4Tm9kZU1vZHVsZXNQYXRoXFwoXFwpLCBtb2R1bGVQYXRoXFwpOy8sXG4gICAgICBgY29uc3QgbGV4TW9kdWxlID0gKG1vZHVsZVBhdGg6IHN0cmluZykgPT4gcmVzb2x2ZSgnJHtsZXhOb2RlTW9kdWxlc30nLCBtb2R1bGVQYXRoKTtgXG4gICAgKTtcblxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShwcm9qZWN0TWFpblBhdGgsIG1haW5Db250ZW50KTtcblxuICAgIGNvbnN0IGxleFByZXZpZXdQYXRoID0gcGF0aFJlc29sdmUobGV4Q29uZmlnRGlyLCAncHJldmlldy50c3gnKTtcbiAgICBpZihleGlzdHNTeW5jKGxleFByZXZpZXdQYXRoKSkge1xuICAgICAgY29uc3QgcHJldmlld0NvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShsZXhQcmV2aWV3UGF0aCwgJ3V0ZjgnKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoUmVzb2x2ZShwcm9qZWN0U3Rvcnlib29rRGlyLCAncHJldmlldy50c3gnKSwgcHJldmlld0NvbnRlbnQpO1xuICAgIH1cblxuICAgIGNvbmZpZ0RpciA9IHByb2plY3RTdG9yeWJvb2tEaXI7XG4gIH1cbiAgaWYoIWV4aXN0c1N5bmMoY29uZmlnRGlyKSkge1xuICAgIHNwaW5uZXIuZmFpbCgnU3Rvcnlib29rIGNvbmZpZ3VyYXRpb24gbm90IGZvdW5kLicpO1xuICAgIGxvZyhgUHJvamVjdCBjb25maWc6ICR7cHJvamVjdENvbmZpZ0Rpcn1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICBsb2coYExleCBjb25maWc6ICR7bGV4Q29uZmlnRGlyfWAsICdpbmZvJywgcXVpZXQpO1xuICAgIGxvZygnUGxlYXNlIHJ1biBcIm5weCBzdG9yeWJvb2tAbGF0ZXN0IGluaXRcIiB0byBzZXQgdXAgU3Rvcnlib29rIGluIHlvdXIgcHJvamVjdCwgb3IgZW5zdXJlIExleCBoYXMgYSB2YWxpZCAuc3Rvcnlib29rIGNvbmZpZ3VyYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBjb25zdCBzdG9yeWJvb2tQYXRoID0gcmVzb2x2ZUJpbmFyeVBhdGgoJ3N0b3J5Ym9vaycpO1xuXG4gIGlmKCFzdG9yeWJvb2tQYXRoKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBzdG9yeWJvb2sgYmluYXJ5IG5vdCBmb3VuZCBpbiBMZXgncyBub2RlX21vZHVsZXMgb3IgbW9ub3JlcG8gcm9vdGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBsb2coJ1BsZWFzZSByZWluc3RhbGwgTGV4IG9yIGNoZWNrIHlvdXIgU3Rvcnlib29rIGluc3RhbGxhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IHN0b3J5Ym9va0FyZ3MgPSBbc3RhdGljQnVpbGQgPyAnYnVpbGQnIDogJ2RldiddO1xuICBzdG9yeWJvb2tBcmdzLnB1c2goJy0tY29uZmlnLWRpcicsIGNvbmZpZ0Rpcik7XG5cbiAgaWYocG9ydCkge1xuICAgIHN0b3J5Ym9va0FyZ3MucHVzaCgnLS1wb3J0JywgcG9ydC50b1N0cmluZygpKTtcbiAgfVxuXG4gIGlmKG9wZW4pIHtcbiAgICBzdG9yeWJvb2tBcmdzLnB1c2goJy0tb3BlbicpO1xuICB9XG5cbiAgaWYoc3RhdGljQnVpbGQpIHtcbiAgICBjb25zdCBvdXRwdXREaXIgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnc3Rvcnlib29rLXN0YXRpYycpO1xuICAgIHN0b3J5Ym9va0FyZ3MucHVzaCgnLS1vdXRwdXQtZGlyJywgb3V0cHV0RGlyKTtcbiAgfVxuXG4gIGlmKCFxdWlldCkge1xuICAgIGxvZyhjaGFsay5ncmF5KGBDb25maWcgZGlyZWN0b3J5OiAke2NvbmZpZ0Rpcn1gKSwgJ2luZm8nLCBxdWlldCk7XG4gIH1cblxuICBwcm9jZXNzLmVudi5UQUlMV0lORF9DU1NfUEFUSCA9IHRhaWx3aW5kQ3NzUGF0aDtcblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoc3RhdGljQnVpbGQgPyAnQnVpbGRpbmcgc3RhdGljIFN0b3J5Ym9vay4uLicgOiAnU3RhcnRpbmcgU3Rvcnlib29rIGRldmVsb3BtZW50IHNlcnZlci4uLicpO1xuXG4gICAgY29uc3Qgc3Rvcnlib29rUHJvY2VzcyA9IGV4ZWNhKHN0b3J5Ym9va1BhdGggYXMgYW55LCBzdG9yeWJvb2tBcmdzLCB7XG4gICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgZW52OiB7XG4gICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICBMRVhfUVVJRVQ6IHF1aWV0LFxuICAgICAgICBMRVhfVkVSQk9TRTogdmVyYm9zZSxcbiAgICAgICAgU1RPUllCT09LX09QRU46IG9wZW4sXG4gICAgICAgIC4uLih0YWlsd2luZENzc1BhdGggJiYge1RBSUxXSU5EX0NTU19QQVRIOiB0YWlsd2luZENzc1BhdGh9KVxuICAgICAgfSBhcyBhbnksXG4gICAgICBzdGRpbzogJ3BpcGUnXG4gICAgfSk7XG5cbiAgICBsZXQgdXJsRm91bmQgPSBmYWxzZTtcbiAgICBsZXQgbGFzdFByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG5cbiAgICBzdG9yeWJvb2tQcm9jZXNzLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgY29uc3QgcHJvZ3Jlc3NQZXJjZW50YWdlID0gZXh0cmFjdFByb2dyZXNzUGVyY2VudGFnZShvdXRwdXQpO1xuXG4gICAgICBpZihwcm9ncmVzc1BlcmNlbnRhZ2UgIT09IG51bGwgJiYgcHJvZ3Jlc3NQZXJjZW50YWdlICE9PSBsYXN0UHJvZ3Jlc3NQZXJjZW50YWdlKSB7XG4gICAgICAgIGxhc3RQcm9ncmVzc1BlcmNlbnRhZ2UgPSBwcm9ncmVzc1BlcmNlbnRhZ2U7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHN0YXRpY0J1aWxkID8gJ0J1aWxkaW5nJyA6ICdTdGFydGluZyc7XG4gICAgICAgIChzcGlubmVyIGFzIGFueSkudGV4dCA9IGAke2FjdGlvbn0gU3Rvcnlib29rLi4uICR7cHJvZ3Jlc3NQZXJjZW50YWdlfSVgO1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFxuV2VicGFjayBQcm9ncmVzczogJHtjaGFsay5tYWdlbnRhKGAke3Byb2dyZXNzUGVyY2VudGFnZX0lYCl9XFxuYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkT3V0cHV0ID0gZmlsdGVyQW5kQmVhdXRpZnlPdXRwdXQob3V0cHV0LCB2ZXJib3NlKTtcbiAgICAgIGNvbnN0IGJlYXV0aWZpZWRPdXRwdXQgPSBiZWF1dGlmeU91dHB1dChmaWx0ZXJlZE91dHB1dCk7XG5cbiAgICAgIGlmKCF1cmxGb3VuZCAmJiAob3V0cHV0LmluY2x1ZGVzKCdMb2NhbDonKSB8fCBvdXRwdXQuaW5jbHVkZXMoJ2h0dHA6Ly9sb2NhbGhvc3QnKSB8fCBvdXRwdXQuaW5jbHVkZXMoJ1N0b3J5Ym9vaycpKSkge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoY2hhbGsuZ3JlZW4oJ1N0b3J5Ym9vayBkZXZlbG9wbWVudCBzZXJ2ZXIgaXMgcmVhZHkhJykpO1xuICAgICAgICB1cmxGb3VuZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmKGZpbHRlcmVkT3V0cHV0LnRyaW0oKSkge1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShiZWF1dGlmaWVkT3V0cHV0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0b3J5Ym9va1Byb2Nlc3Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBmaWx0ZXJlZE91dHB1dCA9IGZpbHRlckFuZEJlYXV0aWZ5T3V0cHV0KG91dHB1dCwgdmVyYm9zZSk7XG4gICAgICBjb25zdCBiZWF1dGlmaWVkT3V0cHV0ID0gYmVhdXRpZnlPdXRwdXQoZmlsdGVyZWRPdXRwdXQpO1xuXG4gICAgICBpZihmaWx0ZXJlZE91dHB1dC50cmltKCkpIHtcbiAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYmVhdXRpZmllZE91dHB1dCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc3Rvcnlib29rUHJvY2VzcztcbiAgICAgIGlmKCF1cmxGb3VuZCkge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoY2hhbGsuZ3JlZW4oJ1N0b3J5Ym9vayBkZXZlbG9wbWVudCBzZXJ2ZXIgc3RhcnRlZC4nKSk7XG4gICAgICB9XG4gICAgICBjYWxsYmFjaygwKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIHNwaW5uZXIuZmFpbChjaGFsay5yZWQoJ1RoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBydW5uaW5nIHN0b3J5Ym9vay4nKSk7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBzcGlubmVyLmZhaWwoJ1RoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBydW5uaW5nIHN0b3J5Ym9vay4nKTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTsiXSwibmFtZXMiOlsiY2hhbGsiLCJleGVjYSIsImV4aXN0c1N5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJMZXhDb25maWciLCJjcmVhdGVTcGlubmVyIiwiZmluZFRhaWx3aW5kQ3NzUGF0aCIsInJlc29sdmVCaW5hcnlQYXRoIiwibG9nIiwiZmluZFN0b3J5RmlsZXMiLCJzdG9yeVBhdHRlcm5zIiwic3RvcnlGaWxlcyIsImZvckVhY2giLCJwYXR0ZXJuIiwiZmlsZXMiLCJjd2QiLCJwcm9jZXNzIiwiaWdub3JlIiwicHVzaCIsImNoZWNrU3Rvcnlib29rSW5pdGlhbGl6YXRpb24iLCJwcm9qZWN0Q29uZmlnRGlyIiwibGV4Q29uZmlnRGlyIiwiZ2V0TGV4RGlyIiwiZXh0cmFjdFByb2dyZXNzUGVyY2VudGFnZSIsIm91dHB1dCIsImxpbmVzIiwic3BsaXQiLCJsaW5lIiwiaW5jbHVkZXMiLCJwZXJjZW50YWdlTWF0Y2giLCJtYXRjaCIsInBhcnNlSW50IiwiZmlsdGVyQW5kQmVhdXRpZnlPdXRwdXQiLCJpc1ZlcmJvc2UiLCJmaWx0ZXJlZExpbmVzIiwiZmlsdGVyIiwiam9pbiIsImJlYXV0aWZ5T3V0cHV0IiwicmVwbGFjZSIsImN5YW4iLCJibHVlIiwiZ3JlZW4iLCJyZWQiLCJ5ZWxsb3ciLCJtYWdlbnRhIiwic3Rvcnlib29rIiwiY21kIiwiY2FsbGJhY2siLCJjbGlOYW1lIiwiY29uZmlnIiwib3BlbiIsInBvcnQiLCJxdWlldCIsInN0YXRpYyIsInN0YXRpY0J1aWxkIiwidXNlTGV4Q29uZmlnIiwidmFyaWFibGVzIiwidmVyYm9zZSIsInNwaW5uZXIiLCJwYXJzZUNvbmZpZyIsInZhcmlhYmxlc09iaiIsIk5PREVfRU5WIiwiSlNPTiIsInBhcnNlIiwiX2Vycm9yIiwiZW52Iiwic3RhcnQiLCJsZW5ndGgiLCJmYWlsIiwic3VjY2VlZCIsInRhaWx3aW5kQ3NzUGF0aCIsImNvbnNvbGUiLCJncmF5IiwiY29uZmlnRGlyIiwicHJvamVjdFN0b3J5Ym9va0RpciIsImZzIiwibWtkaXIiLCJyZWN1cnNpdmUiLCJsZXhNYWluUGF0aCIsInByb2plY3RNYWluUGF0aCIsIm1haW5Db250ZW50IiwicmVhZEZpbGUiLCJsZXhOb2RlTW9kdWxlcyIsIndyaXRlRmlsZSIsImxleFByZXZpZXdQYXRoIiwicHJldmlld0NvbnRlbnQiLCJzdG9yeWJvb2tQYXRoIiwic3Rvcnlib29rQXJncyIsInRvU3RyaW5nIiwib3V0cHV0RGlyIiwiVEFJTFdJTkRfQ1NTX1BBVEgiLCJzdG9yeWJvb2tQcm9jZXNzIiwiZW5jb2RpbmciLCJMRVhfUVVJRVQiLCJMRVhfVkVSQk9TRSIsIlNUT1JZQk9PS19PUEVOIiwic3RkaW8iLCJ1cmxGb3VuZCIsImxhc3RQcm9ncmVzc1BlcmNlbnRhZ2UiLCJzdGRvdXQiLCJvbiIsImRhdGEiLCJwcm9ncmVzc1BlcmNlbnRhZ2UiLCJhY3Rpb24iLCJ0ZXh0Iiwid3JpdGUiLCJmaWx0ZXJlZE91dHB1dCIsImJlYXV0aWZpZWRPdXRwdXQiLCJ0cmltIiwic3RkZXJyIiwiZXJyb3IiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsU0FBUUMsS0FBSyxRQUFPLFFBQVE7QUFDNUIsU0FBUUMsVUFBVSxRQUFPLEtBQUs7QUFDOUIsU0FBUUMsUUFBUUMsUUFBUSxRQUFPLE9BQU87QUFDdEMsU0FBUUMsV0FBV0MsV0FBVyxRQUFPLE9BQU87QUFFNUMsU0FBUUMsU0FBUyxRQUFPLHFCQUFxQjtBQUM3QyxTQUFRQyxhQUFhLFFBQU8scUJBQXFCO0FBQ2pELFNBQVFDLG1CQUFtQixFQUFFQyxpQkFBaUIsUUFBTyxzQkFBc0I7QUFDM0UsU0FBUUMsR0FBRyxRQUFPLHFCQUFxQjtBQWdCdkMsTUFBTUMsaUJBQWlCO0lBQ3JCLE1BQU1DLGdCQUFnQjtRQUNwQjtRQUNBO1FBQ0E7S0FDRDtJQUVELE1BQU1DLGFBQXVCLEVBQUU7SUFFL0JELGNBQWNFLE9BQU8sQ0FBQyxDQUFDQztRQUNyQixNQUFNQyxRQUFRYixTQUFTWSxTQUFTO1lBQzlCRSxLQUFLQyxRQUFRRCxHQUFHO1lBQ2hCRSxRQUFRO2dCQUFDO2dCQUFzQjtnQkFBYztnQkFBYTthQUFjO1FBQzFFO1FBQ0FOLFdBQVdPLElBQUksSUFBSUo7SUFDckI7SUFFQSxPQUFPSDtBQUNUO0FBRUEsTUFBTVEsK0JBQStCO0lBQ25DLE1BQU1DLG1CQUFtQmpCLFlBQVlhLFFBQVFELEdBQUcsSUFBSTtJQUNwRCxNQUFNTSxlQUFlbEIsWUFBWUMsVUFBVWtCLFNBQVMsSUFBSTtJQUV4RCxPQUFPdkIsV0FBV3FCLHFCQUFxQnJCLFdBQVdzQjtBQUNwRDtBQUVBLE1BQU1FLDRCQUE0QixDQUFDQztJQUNqQyxNQUFNQyxRQUFRRCxPQUFPRSxLQUFLLENBQUM7SUFDM0IsS0FBSSxNQUFNQyxRQUFRRixNQUFPO1FBQ3ZCLElBQUdFLEtBQUtDLFFBQVEsQ0FBQyx5QkFBeUJELEtBQUtDLFFBQVEsQ0FBQyxNQUFNO1lB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
|
|
@@ -36,4 +36,4 @@ export const versions = (cmd, callback)=>{
|
|
|
36
36
|
return Promise.resolve(0);
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy92ZXJzaW9ucy92ZXJzaW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcblxuaW1wb3J0IHtnZXRMZXhQYWNrYWdlSnNvblBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmNvbnN0IHBhY2thZ2VQYXRoID0gZ2V0TGV4UGFja2FnZUpzb25QYXRoKCk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhY2thZ2VQYXRoLCAndXRmOCcpKTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlVmVyc2lvbiA9IChwYWNrYWdlVmVyc2lvbjogc3RyaW5nKTogc3RyaW5nID0+IHBhY2thZ2VWZXJzaW9uPy5yZXBsYWNlKC9cXF4vZywgJycpIHx8ICdOL0EnO1xuXG5leHBvcnQgY29uc3QgcGFja2FnZXMgPSB7XG4gIGxleDogcGFja2FnZUpzb24udmVyc2lvbixcbiAgc3djOiBwYXJzZVZlcnNpb24ocGFja2FnZUpzb24/LmRlcGVuZGVuY2llcz8uWydAc3djL2NvcmUnXSksXG4gIHR5cGVzY3JpcHQ6IHBhcnNlVmVyc2lvbihwYWNrYWdlSnNvbj8uZGVwZW5kZW5jaWVzPy50eXBlc2NyaXB0KSxcbiAgdml0ZXN0OiBwYXJzZVZlcnNpb24ocGFja2FnZUpzb24/LmRlcGVuZGVuY2llcz8udml0ZXN0KSxcbiAgd2VicGFjazogcGFyc2VWZXJzaW9uKHBhY2thZ2VKc29uPy5kZXBlbmRlbmNpZXM/LndlYnBhY2spXG59O1xuXG5leHBvcnQgY29uc3QganNvblZlcnNpb25zID0gKGxleFBhY2thZ2VzKSA9PiBPYmplY3Qua2V5cyhsZXhQYWNrYWdlcykucmVkdWNlKChsaXN0LCBrZXkpID0+
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy92ZXJzaW9ucy92ZXJzaW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcblxuaW1wb3J0IHtnZXRMZXhQYWNrYWdlSnNvblBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmNvbnN0IHBhY2thZ2VQYXRoID0gZ2V0TGV4UGFja2FnZUpzb25QYXRoKCk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhY2thZ2VQYXRoLCAndXRmOCcpKTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlVmVyc2lvbiA9IChwYWNrYWdlVmVyc2lvbjogc3RyaW5nKTogc3RyaW5nID0+IHBhY2thZ2VWZXJzaW9uPy5yZXBsYWNlKC9cXF4vZywgJycpIHx8ICdOL0EnO1xuXG5leHBvcnQgY29uc3QgcGFja2FnZXMgPSB7XG4gIGxleDogcGFja2FnZUpzb24udmVyc2lvbixcbiAgc3djOiBwYXJzZVZlcnNpb24ocGFja2FnZUpzb24/LmRlcGVuZGVuY2llcz8uWydAc3djL2NvcmUnXSksXG4gIHR5cGVzY3JpcHQ6IHBhcnNlVmVyc2lvbihwYWNrYWdlSnNvbj8uZGVwZW5kZW5jaWVzPy50eXBlc2NyaXB0KSxcbiAgdml0ZXN0OiBwYXJzZVZlcnNpb24ocGFja2FnZUpzb24/LmRlcGVuZGVuY2llcz8udml0ZXN0KSxcbiAgd2VicGFjazogcGFyc2VWZXJzaW9uKHBhY2thZ2VKc29uPy5kZXBlbmRlbmNpZXM/LndlYnBhY2spXG59O1xuXG5leHBvcnQgY29uc3QganNvblZlcnNpb25zID0gKGxleFBhY2thZ2VzKSA9PiBPYmplY3Qua2V5cyhsZXhQYWNrYWdlcykucmVkdWNlKChsaXN0LCBrZXkpID0+IHtcbiAgbGlzdFtrZXldID0gcGFja2FnZXNba2V5XTtcbiAgcmV0dXJuIGxpc3Q7XG59LCB7fSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbnNDbWQge1xuICByZWFkb25seSBqc29uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IHZlcnNpb25zID0gKGNtZDogVmVyc2lvbnNDbWQsIGNhbGxiYWNrOiAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBpZihjbWQuanNvbikge1xuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGpzb25WZXJzaW9ucyhwYWNrYWdlcykpKTtcbiAgfSBlbHNlIHtcbiAgICBsb2coJ1ZlcnNpb25zOicsICdpbmZvJywgZmFsc2UpO1xuICAgIGxvZyhgICBMZXg6ICR7cGFja2FnZXMubGV4fWAsICdpbmZvJywgZmFsc2UpO1xuICAgIGxvZygnICAtLS0tLS0tLS0tJywgJ25vdGUnLCBmYWxzZSk7XG4gICAgbG9nKGAgIFNXQzogJHtwYWNrYWdlcy5zd2N9YCwgJ2luZm8nLCBmYWxzZSk7XG4gICAgbG9nKGAgIFZpdGVzdDogJHtwYWNrYWdlcy52aXRlc3R9YCwgJ2luZm8nLCBmYWxzZSk7XG4gICAgbG9nKGAgIFR5cGVzY3JpcHQ6ICR7cGFja2FnZXMudHlwZXNjcmlwdH1gLCAnaW5mbycsIGZhbHNlKTtcbiAgICBsb2coYCAgV2VicGFjazogJHtwYWNrYWdlcy53ZWJwYWNrfWAsICdpbmZvJywgZmFsc2UpO1xuICB9XG5cbiAgaWYoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjaygwKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoMCk7XG59O1xuIl0sIm5hbWVzIjpbInJlYWRGaWxlU3luYyIsImdldExleFBhY2thZ2VKc29uUGF0aCIsImxvZyIsInBhY2thZ2VQYXRoIiwicGFja2FnZUpzb24iLCJKU09OIiwicGFyc2UiLCJwYXJzZVZlcnNpb24iLCJwYWNrYWdlVmVyc2lvbiIsInJlcGxhY2UiLCJwYWNrYWdlcyIsImxleCIsInZlcnNpb24iLCJzd2MiLCJkZXBlbmRlbmNpZXMiLCJ0eXBlc2NyaXB0Iiwidml0ZXN0Iiwid2VicGFjayIsImpzb25WZXJzaW9ucyIsImxleFBhY2thZ2VzIiwiT2JqZWN0Iiwia2V5cyIsInJlZHVjZSIsImxpc3QiLCJrZXkiLCJ2ZXJzaW9ucyIsImNtZCIsImNhbGxiYWNrIiwianNvbiIsImNvbnNvbGUiLCJzdHJpbmdpZnkiLCJQcm9taXNlIiwicmVzb2x2ZSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsWUFBWSxRQUFPLEtBQUs7QUFFaEMsU0FBUUMscUJBQXFCLFFBQU8sc0JBQXNCO0FBQzFELFNBQVFDLEdBQUcsUUFBTyxxQkFBcUI7QUFFdkMsTUFBTUMsY0FBY0Y7QUFDcEIsTUFBTUcsY0FBY0MsS0FBS0MsS0FBSyxDQUFDTixhQUFhRyxhQUFhO0FBRXpELE9BQU8sTUFBTUksZUFBZSxDQUFDQyxpQkFBbUNBLGdCQUFnQkMsUUFBUSxPQUFPLE9BQU8sTUFBTTtBQUU1RyxPQUFPLE1BQU1DLFdBQVc7SUFDdEJDLEtBQUtQLFlBQVlRLE9BQU87SUFDeEJDLEtBQUtOLGFBQWFILGFBQWFVLGNBQWMsQ0FBQyxZQUFZO0lBQzFEQyxZQUFZUixhQUFhSCxhQUFhVSxjQUFjQztJQUNwREMsUUFBUVQsYUFBYUgsYUFBYVUsY0FBY0U7SUFDaERDLFNBQVNWLGFBQWFILGFBQWFVLGNBQWNHO0FBQ25ELEVBQUU7QUFFRixPQUFPLE1BQU1DLGVBQWUsQ0FBQ0MsY0FBZ0JDLE9BQU9DLElBQUksQ0FBQ0YsYUFBYUcsTUFBTSxDQUFDLENBQUNDLE1BQU1DO1FBQ2xGRCxJQUFJLENBQUNDLElBQUksR0FBR2QsUUFBUSxDQUFDYyxJQUFJO1FBQ3pCLE9BQU9EO0lBQ1QsR0FBRyxDQUFDLEdBQUc7QUFNUCxPQUFPLE1BQU1FLFdBQVcsQ0FBQ0MsS0FBa0JDO0lBQ3pDLElBQUdELElBQUlFLElBQUksRUFBRTtRQUNYQyxRQUFRM0IsR0FBRyxDQUFDRyxLQUFLeUIsU0FBUyxDQUFDWixhQUFhUjtJQUMxQyxPQUFPO1FBQ0xSLElBQUksYUFBYSxRQUFRO1FBQ3pCQSxJQUFJLENBQUMsT0FBTyxFQUFFUSxTQUFTQyxHQUFHLEVBQUUsRUFBRSxRQUFRO1FBQ3RDVCxJQUFJLGdCQUFnQixRQUFRO1FBQzVCQSxJQUFJLENBQUMsT0FBTyxFQUFFUSxTQUFTRyxHQUFHLEVBQUUsRUFBRSxRQUFRO1FBQ3RDWCxJQUFJLENBQUMsVUFBVSxFQUFFUSxTQUFTTSxNQUFNLEVBQUUsRUFBRSxRQUFRO1FBQzVDZCxJQUFJLENBQUMsY0FBYyxFQUFFUSxTQUFTSyxVQUFVLEVBQUUsRUFBRSxRQUFRO1FBQ3BEYixJQUFJLENBQUMsV0FBVyxFQUFFUSxTQUFTTyxPQUFPLEVBQUUsRUFBRSxRQUFRO0lBQ2hEO0lBRUEsSUFBR1UsVUFBVTtRQUNYQSxTQUFTO0lBQ1g7SUFFQSxPQUFPSSxRQUFRQyxPQUFPLENBQUM7QUFDekIsRUFBRSJ9
|