@cartanova/qgrid-cli 2.4.2 → 2.4.3
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/bundle/dist/sonamu.config.js +2 -1
- package/bundle/dist/utils/providers/common/model-cost.js +22 -1
- package/bundle/dist/utils/providers/openai/codex-worker.js +19 -2
- package/bundle/src/sonamu.config.ts +3 -0
- package/bundle/src/utils/providers/common/model-cost.test.ts +54 -0
- package/bundle/src/utils/providers/common/model-cost.ts +31 -0
- package/bundle/src/utils/providers/openai/codex-worker.test.ts +70 -1
- package/bundle/src/utils/providers/openai/codex-worker.ts +18 -6
- package/bundle/web-dist/client/assets/{index-CN7eSKO4.js → index-DsGDBrrH.js} +3 -3
- package/bundle/web-dist/client/assets/{logs-NubdF_C_.js → logs-C6EMtwDn.js} +1 -1
- package/bundle/web-dist/client/assets/{routes-NKxXqHvs.js → routes-De9iuL80.js} +1 -1
- package/bundle/web-dist/client/assets/{show-BvDjIZCX.js → show-BSW3PE7Z.js} +1 -1
- package/bundle/web-dist/client/assets/{tokens-XAhJyLqj.js → tokens-BMsL6vk9.js} +1 -1
- package/bundle/web-dist/client/index.html +1 -1
- package/bundle/web-dist/server/entry-server.generated.js +1 -1
- package/package.json +1 -1
|
@@ -87,6 +87,7 @@ var sonamu_config_default = defineConfig({
|
|
|
87
87
|
port,
|
|
88
88
|
host
|
|
89
89
|
},
|
|
90
|
+
fastify: { bodyLimit: 10 * 1024 * 1024 },
|
|
90
91
|
plugins: {
|
|
91
92
|
formbody: true,
|
|
92
93
|
qs: true,
|
|
@@ -203,4 +204,4 @@ var sonamu_config_default = defineConfig({
|
|
|
203
204
|
//#endregion
|
|
204
205
|
export { sonamu_config_default as default };
|
|
205
206
|
|
|
206
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29uYW11LmNvbmZpZy5qcyIsIm5hbWVzIjpbImNhY2hlRHJpdmVycyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9zb25hbXUuY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IGdldENvbnNvbGVTaW5rIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyBnZXRQcmV0dHlGb3JtYXR0ZXIgfSBmcm9tIFwiQGxvZ3RhcGUvcHJldHR5XCI7XG5pbXBvcnQgZG90ZW52IGZyb20gXCJkb3RlbnZcIjtcbmltcG9ydCB7IENhY2hlUHJlc2V0cywgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInNvbmFtdVwiO1xuaW1wb3J0IHsgZHJpdmVycyBhcyBjYWNoZURyaXZlcnMsIHN0b3JlIH0gZnJvbSBcInNvbmFtdS9jYWNoZVwiO1xuXG5pbXBvcnQgeyBRZ3JpZERpc3BhdGNoZXIgfSBmcm9tIFwiLi9hcHBsaWNhdGlvbi9xZ3JpZC9xZ3JpZC5kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBRZ3JpZEZyYW1lIH0gZnJvbSBcIi4vYXBwbGljYXRpb24vcWdyaWQvcWdyaWQuZnJhbWVcIjtcbmltcG9ydCB7IFRva2VuU3Vic2NyaWJlciB9IGZyb20gXCIuL2FwcGxpY2F0aW9uL3FncmlkL3Rva2VuLXN1YnNjcmliZXJcIjtcbmltcG9ydCB7IGVuc3VyZVRva2Vuc1RyaWdnZXIgfSBmcm9tIFwiLi9hcHBsaWNhdGlvbi9xZ3JpZC90b2tlbi10cmlnZ2VyLXNldHVwXCI7XG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4vYXBwbGljYXRpb24vdG9rZW4vdG9rZW4ubW9kZWxcIjtcbmltcG9ydCB7IEFudGhyb3BpY0Rpc3BhdGNoZXIgfSBmcm9tIFwiLi91dGlscy9wcm92aWRlcnMvYW50aHJvcGljL2FudGhyb3BpYy1kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBPcGVuQUlEaXNwYXRjaGVyIH0gZnJvbSBcIi4vdXRpbHMvcHJvdmlkZXJzL29wZW5haS9vcGVuYWktZGlzcGF0Y2hlclwiO1xuXG5kb3RlbnYuY29uZmlnKHsgcGF0aDogcGF0aC5qb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi4vLmVudlwiKSB9KTtcblxuY29uc3QgaG9zdCA9IHByb2Nlc3MuZW52LkhPU1QgPz8gXCJsb2NhbGhvc3RcIjtcbmNvbnN0IHBvcnQgPSBOdW1iZXIocHJvY2Vzcy5lbnYuUE9SVCA/PyA0NDkwMCk7XG5cbmNvbnN0IGNvbm5Db25maWcgPSB7XG4gIGhvc3Q6IHByb2Nlc3MuZW52LlFHUklEX0RCX0hPU1QgPz8gXCJsb2NhbGhvc3RcIixcbiAgcG9ydDogTnVtYmVyKHByb2Nlc3MuZW52LlFHUklEX0RCX1BPUlQgPz8gNTQzMiksXG4gIHVzZXI6IHByb2Nlc3MuZW52LlFHUklEX0RCX1VTRVIgPz8gXCJwb3N0Z3Jlc1wiLFxuICBwYXNzd29yZDogcHJvY2Vzcy5lbnYuUUdSSURfREJfUEFTU1dPUkQgPz8gXCJwb3N0Z3Jlc1wiLFxuICBkYXRhYmFzZTogcHJvY2Vzcy5lbnYuUUdSSURfREJfTkFNRSA/PyBcInFncmlkXCIsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoe1xuICBwcm9qZWN0TmFtZTogcHJvY2Vzcy5lbnYuUFJPSkVDVF9OQU1FID8/IFwiUWdyaWRcIixcbiAgZGF0YWJhc2U6IHtcbiAgICBuYW1lOiBcInFncmlkXCIsXG4gICAgZGVmYXVsdE9wdGlvbnM6IHtcbiAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgLi4uY29ubkNvbmZpZyxcbiAgICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgICAgICBrZWVwQWxpdmVJbml0aWFsRGVsYXlNaWxsaXM6IDEwMDAwLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGVudmlyb25tZW50czoge1xuICAgICAgZml4dHVyZToge1xuICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgLi4uY29ubkNvbmZpZyxcbiAgICAgICAgICBkYXRhYmFzZTogcHJvY2Vzcy5lbnYuUUdSSURfREJfTkFNRSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0ZXN0OiB7XG4gICAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgICAuLi5jb25uQ29uZmlnLFxuICAgICAgICAgIGRhdGFiYXNlOiBwcm9jZXNzLmVudi5RR1JJRF9EQl9OQU1FLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICBhcGk6IHtcbiAgICBkaXI6IFwiYXBpXCIsXG4gICAgdGltZXpvbmU6IFwiQXNpYS9TZW91bFwiLFxuICAgIHJvdXRlOiB7XG4gICAgICBwcmVmaXg6IFwiL2FwaVwiLFxuICAgIH0sXG4gIH0sXG4gIGkxOG46IHtcbiAgICBkZWZhdWx0TG9jYWxlOiBcImtvXCIsXG4gICAgc3VwcG9ydGVkTG9jYWxlczogW1wia29cIiwgXCJlblwiXSxcbiAgfSxcbiAgc3luYzoge1xuICAgIHRhcmdldHM6IFtcIndlYlwiXSxcbiAgfSxcbiAgdGVzdDoge1xuICAgIHBhcmFsbGVsOiB0cnVlLFxuICAgIG1heFdvcmtlcnM6IDQsXG4gICAgZGV2UnVubmVyOiB7IGVuYWJsZWQ6IHRydWUgfSxcbiAgfSxcbiAgbG9nZ2luZzoge1xuICAgIHNpbmtzOiB7XG4gICAgICBjb25zb2xlOiBnZXRDb25zb2xlU2luayh7XG4gICAgICAgIGZvcm1hdHRlcjogZ2V0UHJldHR5Rm9ybWF0dGVyKHtcbiAgICAgICAgICB0aW1lc3RhbXA6IFwidGltZVwiLFxuICAgICAgICAgIGNhdGVnb3J5V2lkdGg6IDIwLFxuICAgICAgICAgIGNhdGVnb3J5VHJ1bmNhdGU6IFwibWlkZGxlXCIsXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgfSxcbiAgICBsb2dnZXJzOiBbXG4gICAgICAvLyBxZ3JpZCDroZzqt7ggKOyalOyyrSDrtoTrsLAsIG9hdXRoL3VzYWdlIEFQSSlcbiAgICAgIHsgY2F0ZWdvcnk6IFtcInFncmlkXCJdLCBzaW5rczogW1wiY29uc29sZVwiXSwgbG93ZXN0TGV2ZWw6IFwiaW5mb1wiIH0sXG4gICAgICAvLyBzb25hbXUg66Gc6re464qUIHdhcm5pbmcg7J207IOB66eMXG4gICAgICB7IGNhdGVnb3J5OiBbXCJzb25hbXVcIl0sIHNpbmtzOiBbXCJjb25zb2xlXCJdLCBsb3dlc3RMZXZlbDogXCJ3YXJuaW5nXCIgfSxcbiAgICAgIC8vIGZhc3RpZnkg66Gc6re4IOywqOuLqFxuICAgICAgeyBjYXRlZ29yeTogW1wiZmFzdGlmeVwiXSwgc2lua3M6IFtdLCBsb3dlc3RMZXZlbDogXCJmYXRhbFwiIH0sXG4gICAgXSxcbiAgfSxcbiAgc2VydmVyOiB7XG4gICAgbGlzdGVuOiB7IHBvcnQsIGhvc3QgfSxcbiAgICBwbHVnaW5zOiB7XG4gICAgICBmb3JtYm9keTogdHJ1ZSxcbiAgICAgIHFzOiB0cnVlLFxuICAgICAgc3NlOiB0cnVlLFxuICAgICAgbXVsdGlwYXJ0OiB7IGxpbWl0czogeyBmaWxlU2l6ZTogMTAyNCAqIDEwMjQgKiAzMCB9IH0sXG4gICAgICBzdGF0aWM6IHtcbiAgICAgICAgcm9vdDogcGF0aC5qb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLy4uL1wiLCBcInB1YmxpY1wiKSxcbiAgICAgICAgcHJlZml4OiBcIi9hcGkvcHVibGljXCIsXG4gICAgICB9LFxuICAgICAgY3VzdG9tOiAoc2VydmVyKSA9PiB7XG4gICAgICAgIC8vIE9BdXRoIOy9nOuwsSDigJQgQW50aHJvcGlj7J20IC9jYWxsYmFja+ycvOuhnCDrpqzri6TsnbTroIntirhcbiAgICAgICAgc2VydmVyLmdldChcIi9jYWxsYmFja1wiLCBhc3luYyAocmVxdWVzdCwgcmVwbHkpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGNvZGUsIHN0YXRlIH0gPSByZXF1ZXN0LnF1ZXJ5IGFzIHsgY29kZT86IHN0cmluZzsgc3RhdGU/OiBzdHJpbmcgfTtcbiAgICAgICAgICBpZiAoIWNvZGUgfHwgIXN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoXCIvP29hdXRoPWVycm9yJnJlYXNvbj1taXNzaW5nX3BhcmFtc1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBRZ3JpZEZyYW1lLmhhbmRsZU9BdXRoQ2FsbGJhY2soY29kZSwgc3RhdGUsIHJlcGx5KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoXG4gICAgICAgICAgICAgIGAvP29hdXRoPWVycm9yJnJlYXNvbj0ke2VuY29kZVVSSUNvbXBvbmVudCgoZSBhcyBFcnJvcikubWVzc2FnZSl9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBPcGVuQUkgT0F1dGgg64qUIGNvZGV4IGFwcC1zZXJ2ZXIg6rCAIOyekOyytCBjYWxsYmFjayDshJzrsoTrpbwg7Jis66a8XG4gICAgICAgIC8vIGhhbmRsZU9wZW5BSUNhbGxiYWNrIOu2iO2VhOyalCDigJQgb2F1dGhDb21wbGV0ZU9wZW5BSSBBUEkg66GcIOyZhOujjCDtmZXsnbhcbiAgICAgIH0sXG4gICAgfSxcbiAgICBhcGlDb25maWc6IHtcbiAgICAgIGNvbnRleHRQcm92aWRlcjogKGRlZmF1bHRDb250ZXh0LCByZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZGVmYXVsdENvbnRleHQsXG4gICAgICAgICAgaXA6IHJlcXVlc3QuaXAsXG4gICAgICAgICAgYm9keTogcmVxdWVzdC5ib2R5LFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGd1YXJkSGFuZGxlcjogKCkgPT4ge30sXG4gICAgICBjYWNoZUNvbnRyb2xIYW5kbGVyOiAocmVxKSA9PiB7XG4gICAgICAgIHN3aXRjaCAocmVxLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwiYXNzZXRzXCI6XG4gICAgICAgICAgICAvLyBIYXNoIO2PrO2VqOuQnCDtjIzsnbw6IOyYgeq1rCDsupDsi5xcbiAgICAgICAgICAgIGlmIChyZXEucGF0aC5tYXRjaCgvLVthLWYwLTldK1xcLi8pKSB7XG4gICAgICAgICAgICAgIHJldHVybiBDYWNoZVByZXNldHMuaW1tdXRhYmxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIENhY2hlUHJlc2V0cy5sb25nTGl2ZWQ7XG5cbiAgICAgICAgICBjYXNlIFwiYXBpXCI6XG4gICAgICAgICAgICAvLyBHRVQg7JqU7LKt66eMIOy6kOyLsSDqs6DroKRcbiAgICAgICAgICAgIGlmIChyZXEubWV0aG9kID09PSBcIkdFVFwiKSB7XG4gICAgICAgICAgICAgIC8vIO2KueyglSDqsr3roZzripQg7Ken7J2AIOy6kOyLnFxuICAgICAgICAgICAgICBpZiAocmVxLnBhdGguc3RhcnRzV2l0aChcIi9hcGkvc3RhdGljLWRhdGFcIikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQ2FjaGVQcmVzZXRzLnNob3J0TGl2ZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJlcS5wYXRoLnN0YXJ0c1dpdGgoXCIvYXBpL3Rlcm1zXCIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIENhY2hlUHJlc2V0cy5tZWRpdW1MaXZlZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8g6riw67O4OiDsupDsi5wg7JeG7J2MXG4gICAgICAgICAgICByZXR1cm4gQ2FjaGVQcmVzZXRzLm5vQ2FjaGU7XG5cbiAgICAgICAgICBjYXNlIFwic3NyXCI6XG4gICAgICAgICAgICAvLyBTU1Ig7Y6Y7J207KeAOiAxMOy0iCDsupDsi5xcbiAgICAgICAgICAgIHJldHVybiBDYWNoZVByZXNldHMuc3NyO1xuXG4gICAgICAgICAgY2FzZSBcImNzclwiOlxuICAgICAgICAgICAgLy8gQ1NSIGZhbGxiYWNrIChpbmRleC5odG1sKTogMeu2hCDsupDsi5xcbiAgICAgICAgICAgIHJldHVybiBDYWNoZVByZXNldHMuc2hvcnRMaXZlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQ2FjaGVQcmVzZXRzLm5vQ2FjaGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAgY2FjaGU6IHtcbiAgICAgIGRlZmF1bHQ6IFwibWFpblwiLFxuICAgICAgc3RvcmVzOiB7XG4gICAgICAgIG1haW46IHN0b3JlKCkudXNlTDFMYXllcihjYWNoZURyaXZlcnMubWVtb3J5KHsgbWF4U2l6ZTogXCI1MG1iXCIgfSkpLFxuICAgICAgfSxcbiAgICAgIHR0bDogXCI1bVwiLFxuICAgICAgcHJlZml4OiBcIlwiLFxuICAgIH0sXG4gICAgbGlmZWN5Y2xlOiB7XG4gICAgICBvblN0YXJ0OiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvZyA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcInN0YXJ0dXBcIl0pO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qga25leCA9IFRva2VuTW9kZWwuZ2V0REIoXCJ3XCIpO1xuICAgICAgICAgIGNvbnN0IG1pZ3JhdGlvbnNEaXIgPSBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLi9zcmMvbWlncmF0aW9uc1wiKTtcbiAgICAgICAgICBjb25zdCBbYmF0Y2gsIG1pZ3JhdGlvbnNdID0gYXdhaXQga25leC5taWdyYXRlLmxhdGVzdCh7IGRpcmVjdG9yeTogbWlncmF0aW9uc0RpciB9KTtcbiAgICAgICAgICBpZiAobWlncmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhgbWlncmF0aW9uOiAke21pZ3JhdGlvbnMubGVuZ3RofSBhcHBsaWVkIChiYXRjaCAke2JhdGNofSlgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cud2FybihgbWlncmF0aW9uIHNraXBwZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdHJpZ2dlclJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBlbnN1cmVUb2tlbnNUcmlnZ2VyKGNvbm5Db25maWcpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdHJpZ2dlclJlYWR5ID0gZmFsc2U7XG4gICAgICAgICAgbG9nLndhcm4oYHRyaWdnZXIgc2V0dXAgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlciA9IG5ldyBUb2tlblN1YnNjcmliZXIoY29ubkNvbmZpZywgUWdyaWREaXNwYXRjaGVyKTtcbiAgICAgICAgUWdyaWREaXNwYXRjaGVyLnN1YnNjcmliZXIgPSBzdWJzY3JpYmVyO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0ZWQgPSBhd2FpdCBzdWJzY3JpYmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBvcGVuYWlEaXNwYXRjaGVyID0gbmV3IE9wZW5BSURpc3BhdGNoZXIoKTtcbiAgICAgICAgICBhd2FpdCBvcGVuYWlEaXNwYXRjaGVyLnN0YXJ0KCk7XG4gICAgICAgICAgUWdyaWREaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXIgPSBvcGVuYWlEaXNwYXRjaGVyO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nLndhcm4oYG9wZW5haSBkaXNwYXRjaGVyIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYW50aHJvcGljRGlzcGF0Y2hlciA9IG5ldyBBbnRocm9waWNEaXNwYXRjaGVyKCk7XG4gICAgICAgICAgYXdhaXQgYW50aHJvcGljRGlzcGF0Y2hlci5zdGFydCgpO1xuICAgICAgICAgIFFncmlkRGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyID0gYW50aHJvcGljRGlzcGF0Y2hlcjtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZy53YXJuKGBhbnRocm9waWMgZGlzcGF0Y2hlciBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbnRocm9waWNDb3VudCA9IFFncmlkRGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy50b2tlbkNvdW50ID8/IDA7XG4gICAgICAgIGNvbnN0IG9wZW5haVJlYWR5ID0gUWdyaWREaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXI/LnJlYWR5V29ya2VyQ291bnQgPz8gMDtcbiAgICAgICAgY29uc3Qgb3BlbmFpVG90YWwgPSBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcj8ud29ya2VyQ291bnQgPz8gMDtcblxuICAgICAgICBsb2cuaW5mbyhgbGlzdGVuaW5nIG9uIGh0dHA6Ly8ke2hvc3R9OiR7cG9ydH1gKTtcbiAgICAgICAgbG9nLmluZm8oYGFudGhyb3BpYzogJHthbnRocm9waWNDb3VudH0gdG9rZW5zIHJlYWR5YCk7XG4gICAgICAgIGxvZy5pbmZvKGBvcGVuYWk6ICR7b3BlbmFpUmVhZHl9LyR7b3BlbmFpVG90YWx9IHRva2VucyByZWFkeWApO1xuICAgICAgICBsb2cuaW5mbyhcbiAgICAgICAgICBgc3Vic2NyaWJlcjogJHtzdGFydGVkID8gXCJMSVNURU4gYWN0aXZlXCIgOiBcImRlZ3JhZGVkXCJ9JHt0cmlnZ2VyUmVhZHkgPyBcIlwiIDogXCIsIHRyaWdnZXIgZmFpbGVkXCJ9YCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvblNodXRkb3duOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvZyA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcInN0YXJ0dXBcIl0pO1xuICAgICAgICBpZiAoUWdyaWREaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXIpIHtcbiAgICAgICAgICBhd2FpdCBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlci5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFFncmlkRGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyKSB7XG4gICAgICAgICAgYXdhaXQgUWdyaWREaXNwYXRjaGVyLmFudGhyb3BpY0Rpc3BhdGNoZXIuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChRZ3JpZERpc3BhdGNoZXIuc3Vic2NyaWJlcikge1xuICAgICAgICAgIGF3YWl0IFFncmlkRGlzcGF0Y2hlci5zdWJzY3JpYmVyLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgICBsb2cuaW5mbyhcImdyYWNlZnVsIHNodXRkb3duXCIpO1xuICAgICAgfSxcbiAgICAgIG9uRXJyb3I6IChlcnJvciwgX3JlcXVlc3QsIHJlcGx5KSA9PiB7XG4gICAgICAgIGdldExvZ2dlcihbXCJxZ3JpZFwiXSkuZXJyb3IoYCR7ZXJyb3J9YCk7XG4gICAgICAgIHJlcGx5LnN0YXR1cyg1MDApLnNlbmQoe1xuICAgICAgICAgIG5hbWU6IGVycm9yLm5hbWUsXG4gICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBLE9BQU8sT0FBTyxFQUFFLE1BQU0sS0FBSyxLQUFLLE9BQU8sS0FBSyxTQUFTLFVBQVUsRUFBRSxDQUFDO0FBRWxFLE1BQU0sT0FBTyxRQUFRLElBQUksUUFBUTtBQUNqQyxNQUFNLE9BQU8sT0FBTyxRQUFRLElBQUksUUFBUSxNQUFNO0FBRTlDLE1BQU0sYUFBYTtDQUNqQixNQUFNLFFBQVEsSUFBSSxpQkFBaUI7Q0FDbkMsTUFBTSxPQUFPLFFBQVEsSUFBSSxpQkFBaUIsS0FBSztDQUMvQyxNQUFNLFFBQVEsSUFBSSxpQkFBaUI7Q0FDbkMsVUFBVSxRQUFRLElBQUkscUJBQXFCO0NBQzNDLFVBQVUs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
|
|
207
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29uYW11LmNvbmZpZy5qcyIsIm5hbWVzIjpbImNhY2hlRHJpdmVycyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9zb25hbXUuY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IGdldENvbnNvbGVTaW5rIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyBnZXRQcmV0dHlGb3JtYXR0ZXIgfSBmcm9tIFwiQGxvZ3RhcGUvcHJldHR5XCI7XG5pbXBvcnQgZG90ZW52IGZyb20gXCJkb3RlbnZcIjtcbmltcG9ydCB7IENhY2hlUHJlc2V0cywgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInNvbmFtdVwiO1xuaW1wb3J0IHsgZHJpdmVycyBhcyBjYWNoZURyaXZlcnMsIHN0b3JlIH0gZnJvbSBcInNvbmFtdS9jYWNoZVwiO1xuXG5pbXBvcnQgeyBRZ3JpZERpc3BhdGNoZXIgfSBmcm9tIFwiLi9hcHBsaWNhdGlvbi9xZ3JpZC9xZ3JpZC5kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBRZ3JpZEZyYW1lIH0gZnJvbSBcIi4vYXBwbGljYXRpb24vcWdyaWQvcWdyaWQuZnJhbWVcIjtcbmltcG9ydCB7IFRva2VuU3Vic2NyaWJlciB9IGZyb20gXCIuL2FwcGxpY2F0aW9uL3FncmlkL3Rva2VuLXN1YnNjcmliZXJcIjtcbmltcG9ydCB7IGVuc3VyZVRva2Vuc1RyaWdnZXIgfSBmcm9tIFwiLi9hcHBsaWNhdGlvbi9xZ3JpZC90b2tlbi10cmlnZ2VyLXNldHVwXCI7XG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4vYXBwbGljYXRpb24vdG9rZW4vdG9rZW4ubW9kZWxcIjtcbmltcG9ydCB7IEFudGhyb3BpY0Rpc3BhdGNoZXIgfSBmcm9tIFwiLi91dGlscy9wcm92aWRlcnMvYW50aHJvcGljL2FudGhyb3BpYy1kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBPcGVuQUlEaXNwYXRjaGVyIH0gZnJvbSBcIi4vdXRpbHMvcHJvdmlkZXJzL29wZW5haS9vcGVuYWktZGlzcGF0Y2hlclwiO1xuXG5kb3RlbnYuY29uZmlnKHsgcGF0aDogcGF0aC5qb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi4vLmVudlwiKSB9KTtcblxuY29uc3QgaG9zdCA9IHByb2Nlc3MuZW52LkhPU1QgPz8gXCJsb2NhbGhvc3RcIjtcbmNvbnN0IHBvcnQgPSBOdW1iZXIocHJvY2Vzcy5lbnYuUE9SVCA/PyA0NDkwMCk7XG5cbmNvbnN0IGNvbm5Db25maWcgPSB7XG4gIGhvc3Q6IHByb2Nlc3MuZW52LlFHUklEX0RCX0hPU1QgPz8gXCJsb2NhbGhvc3RcIixcbiAgcG9ydDogTnVtYmVyKHByb2Nlc3MuZW52LlFHUklEX0RCX1BPUlQgPz8gNTQzMiksXG4gIHVzZXI6IHByb2Nlc3MuZW52LlFHUklEX0RCX1VTRVIgPz8gXCJwb3N0Z3Jlc1wiLFxuICBwYXNzd29yZDogcHJvY2Vzcy5lbnYuUUdSSURfREJfUEFTU1dPUkQgPz8gXCJwb3N0Z3Jlc1wiLFxuICBkYXRhYmFzZTogcHJvY2Vzcy5lbnYuUUdSSURfREJfTkFNRSA/PyBcInFncmlkXCIsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoe1xuICBwcm9qZWN0TmFtZTogcHJvY2Vzcy5lbnYuUFJPSkVDVF9OQU1FID8/IFwiUWdyaWRcIixcbiAgZGF0YWJhc2U6IHtcbiAgICBuYW1lOiBcInFncmlkXCIsXG4gICAgZGVmYXVsdE9wdGlvbnM6IHtcbiAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgLi4uY29ubkNvbmZpZyxcbiAgICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgICAgICBrZWVwQWxpdmVJbml0aWFsRGVsYXlNaWxsaXM6IDEwMDAwLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGVudmlyb25tZW50czoge1xuICAgICAgZml4dHVyZToge1xuICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgLi4uY29ubkNvbmZpZyxcbiAgICAgICAgICBkYXRhYmFzZTogcHJvY2Vzcy5lbnYuUUdSSURfREJfTkFNRSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0ZXN0OiB7XG4gICAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgICAuLi5jb25uQ29uZmlnLFxuICAgICAgICAgIGRhdGFiYXNlOiBwcm9jZXNzLmVudi5RR1JJRF9EQl9OQU1FLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICBhcGk6IHtcbiAgICBkaXI6IFwiYXBpXCIsXG4gICAgdGltZXpvbmU6IFwiQXNpYS9TZW91bFwiLFxuICAgIHJvdXRlOiB7XG4gICAgICBwcmVmaXg6IFwiL2FwaVwiLFxuICAgIH0sXG4gIH0sXG4gIGkxOG46IHtcbiAgICBkZWZhdWx0TG9jYWxlOiBcImtvXCIsXG4gICAgc3VwcG9ydGVkTG9jYWxlczogW1wia29cIiwgXCJlblwiXSxcbiAgfSxcbiAgc3luYzoge1xuICAgIHRhcmdldHM6IFtcIndlYlwiXSxcbiAgfSxcbiAgdGVzdDoge1xuICAgIHBhcmFsbGVsOiB0cnVlLFxuICAgIG1heFdvcmtlcnM6IDQsXG4gICAgZGV2UnVubmVyOiB7IGVuYWJsZWQ6IHRydWUgfSxcbiAgfSxcbiAgbG9nZ2luZzoge1xuICAgIHNpbmtzOiB7XG4gICAgICBjb25zb2xlOiBnZXRDb25zb2xlU2luayh7XG4gICAgICAgIGZvcm1hdHRlcjogZ2V0UHJldHR5Rm9ybWF0dGVyKHtcbiAgICAgICAgICB0aW1lc3RhbXA6IFwidGltZVwiLFxuICAgICAgICAgIGNhdGVnb3J5V2lkdGg6IDIwLFxuICAgICAgICAgIGNhdGVnb3J5VHJ1bmNhdGU6IFwibWlkZGxlXCIsXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgfSxcbiAgICBsb2dnZXJzOiBbXG4gICAgICAvLyBxZ3JpZCDroZzqt7ggKOyalOyyrSDrtoTrsLAsIG9hdXRoL3VzYWdlIEFQSSlcbiAgICAgIHsgY2F0ZWdvcnk6IFtcInFncmlkXCJdLCBzaW5rczogW1wiY29uc29sZVwiXSwgbG93ZXN0TGV2ZWw6IFwiaW5mb1wiIH0sXG4gICAgICAvLyBzb25hbXUg66Gc6re464qUIHdhcm5pbmcg7J207IOB66eMXG4gICAgICB7IGNhdGVnb3J5OiBbXCJzb25hbXVcIl0sIHNpbmtzOiBbXCJjb25zb2xlXCJdLCBsb3dlc3RMZXZlbDogXCJ3YXJuaW5nXCIgfSxcbiAgICAgIC8vIGZhc3RpZnkg66Gc6re4IOywqOuLqFxuICAgICAgeyBjYXRlZ29yeTogW1wiZmFzdGlmeVwiXSwgc2lua3M6IFtdLCBsb3dlc3RMZXZlbDogXCJmYXRhbFwiIH0sXG4gICAgXSxcbiAgfSxcbiAgc2VydmVyOiB7XG4gICAgbGlzdGVuOiB7IHBvcnQsIGhvc3QgfSxcbiAgICBmYXN0aWZ5OiB7XG4gICAgICBib2R5TGltaXQ6IDEwICogMTAyNCAqIDEwMjQsXG4gICAgfSxcbiAgICBwbHVnaW5zOiB7XG4gICAgICBmb3JtYm9keTogdHJ1ZSxcbiAgICAgIHFzOiB0cnVlLFxuICAgICAgc3NlOiB0cnVlLFxuICAgICAgbXVsdGlwYXJ0OiB7IGxpbWl0czogeyBmaWxlU2l6ZTogMTAyNCAqIDEwMjQgKiAzMCB9IH0sXG4gICAgICBzdGF0aWM6IHtcbiAgICAgICAgcm9vdDogcGF0aC5qb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLy4uL1wiLCBcInB1YmxpY1wiKSxcbiAgICAgICAgcHJlZml4OiBcIi9hcGkvcHVibGljXCIsXG4gICAgICB9LFxuICAgICAgY3VzdG9tOiAoc2VydmVyKSA9PiB7XG4gICAgICAgIC8vIE9BdXRoIOy9nOuwsSDigJQgQW50aHJvcGlj7J20IC9jYWxsYmFja+ycvOuhnCDrpqzri6TsnbTroIntirhcbiAgICAgICAgc2VydmVyLmdldChcIi9jYWxsYmFja1wiLCBhc3luYyAocmVxdWVzdCwgcmVwbHkpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGNvZGUsIHN0YXRlIH0gPSByZXF1ZXN0LnF1ZXJ5IGFzIHsgY29kZT86IHN0cmluZzsgc3RhdGU/OiBzdHJpbmcgfTtcbiAgICAgICAgICBpZiAoIWNvZGUgfHwgIXN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoXCIvP29hdXRoPWVycm9yJnJlYXNvbj1taXNzaW5nX3BhcmFtc1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBRZ3JpZEZyYW1lLmhhbmRsZU9BdXRoQ2FsbGJhY2soY29kZSwgc3RhdGUsIHJlcGx5KTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoXG4gICAgICAgICAgICAgIGAvP29hdXRoPWVycm9yJnJlYXNvbj0ke2VuY29kZVVSSUNvbXBvbmVudCgoZSBhcyBFcnJvcikubWVzc2FnZSl9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBPcGVuQUkgT0F1dGgg64qUIGNvZGV4IGFwcC1zZXJ2ZXIg6rCAIOyekOyytCBjYWxsYmFjayDshJzrsoTrpbwg7Jis66a8XG4gICAgICAgIC8vIGhhbmRsZU9wZW5BSUNhbGxiYWNrIOu2iO2VhOyalCDigJQgb2F1dGhDb21wbGV0ZU9wZW5BSSBBUEkg66GcIOyZhOujjCDtmZXsnbhcbiAgICAgIH0sXG4gICAgfSxcbiAgICBhcGlDb25maWc6IHtcbiAgICAgIGNvbnRleHRQcm92aWRlcjogKGRlZmF1bHRDb250ZXh0LCByZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uZGVmYXVsdENvbnRleHQsXG4gICAgICAgICAgaXA6IHJlcXVlc3QuaXAsXG4gICAgICAgICAgYm9keTogcmVxdWVzdC5ib2R5LFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGd1YXJkSGFuZGxlcjogKCkgPT4ge30sXG4gICAgICBjYWNoZUNvbnRyb2xIYW5kbGVyOiAocmVxKSA9PiB7XG4gICAgICAgIHN3aXRjaCAocmVxLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwiYXNzZXRzXCI6XG4gICAgICAgICAgICAvLyBIYXNoIO2PrO2VqOuQnCDtjIzsnbw6IOyYgeq1rCDsupDsi5xcbiAgICAgICAgICAgIGlmIChyZXEucGF0aC5tYXRjaCgvLVthLWYwLTldK1xcLi8pKSB7XG4gICAgICAgICAgICAgIHJldHVybiBDYWNoZVByZXNldHMuaW1tdXRhYmxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIENhY2hlUHJlc2V0cy5sb25nTGl2ZWQ7XG5cbiAgICAgICAgICBjYXNlIFwiYXBpXCI6XG4gICAgICAgICAgICAvLyBHRVQg7JqU7LKt66eMIOy6kOyLsSDqs6DroKRcbiAgICAgICAgICAgIGlmIChyZXEubWV0aG9kID09PSBcIkdFVFwiKSB7XG4gICAgICAgICAgICAgIC8vIO2KueyglSDqsr3roZzripQg7Ken7J2AIOy6kOyLnFxuICAgICAgICAgICAgICBpZiAocmVxLnBhdGguc3RhcnRzV2l0aChcIi9hcGkvc3RhdGljLWRhdGFcIikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQ2FjaGVQcmVzZXRzLnNob3J0TGl2ZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJlcS5wYXRoLnN0YXJ0c1dpdGgoXCIvYXBpL3Rlcm1zXCIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIENhY2hlUHJlc2V0cy5tZWRpdW1MaXZlZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8g6riw67O4OiDsupDsi5wg7JeG7J2MXG4gICAgICAgICAgICByZXR1cm4gQ2FjaGVQcmVzZXRzLm5vQ2FjaGU7XG5cbiAgICAgICAgICBjYXNlIFwic3NyXCI6XG4gICAgICAgICAgICAvLyBTU1Ig7Y6Y7J207KeAOiAxMOy0iCDsupDsi5xcbiAgICAgICAgICAgIHJldHVybiBDYWNoZVByZXNldHMuc3NyO1xuXG4gICAgICAgICAgY2FzZSBcImNzclwiOlxuICAgICAgICAgICAgLy8gQ1NSIGZhbGxiYWNrIChpbmRleC5odG1sKTogMeu2hCDsupDsi5xcbiAgICAgICAgICAgIHJldHVybiBDYWNoZVByZXNldHMuc2hvcnRMaXZlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQ2FjaGVQcmVzZXRzLm5vQ2FjaGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAgY2FjaGU6IHtcbiAgICAgIGRlZmF1bHQ6IFwibWFpblwiLFxuICAgICAgc3RvcmVzOiB7XG4gICAgICAgIG1haW46IHN0b3JlKCkudXNlTDFMYXllcihjYWNoZURyaXZlcnMubWVtb3J5KHsgbWF4U2l6ZTogXCI1MG1iXCIgfSkpLFxuICAgICAgfSxcbiAgICAgIHR0bDogXCI1bVwiLFxuICAgICAgcHJlZml4OiBcIlwiLFxuICAgIH0sXG4gICAgbGlmZWN5Y2xlOiB7XG4gICAgICBvblN0YXJ0OiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvZyA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcInN0YXJ0dXBcIl0pO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qga25leCA9IFRva2VuTW9kZWwuZ2V0REIoXCJ3XCIpO1xuICAgICAgICAgIGNvbnN0IG1pZ3JhdGlvbnNEaXIgPSBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLi9zcmMvbWlncmF0aW9uc1wiKTtcbiAgICAgICAgICBjb25zdCBbYmF0Y2gsIG1pZ3JhdGlvbnNdID0gYXdhaXQga25leC5taWdyYXRlLmxhdGVzdCh7IGRpcmVjdG9yeTogbWlncmF0aW9uc0RpciB9KTtcbiAgICAgICAgICBpZiAobWlncmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhgbWlncmF0aW9uOiAke21pZ3JhdGlvbnMubGVuZ3RofSBhcHBsaWVkIChiYXRjaCAke2JhdGNofSlgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2cud2FybihgbWlncmF0aW9uIHNraXBwZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdHJpZ2dlclJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBlbnN1cmVUb2tlbnNUcmlnZ2VyKGNvbm5Db25maWcpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdHJpZ2dlclJlYWR5ID0gZmFsc2U7XG4gICAgICAgICAgbG9nLndhcm4oYHRyaWdnZXIgc2V0dXAgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlciA9IG5ldyBUb2tlblN1YnNjcmliZXIoY29ubkNvbmZpZywgUWdyaWREaXNwYXRjaGVyKTtcbiAgICAgICAgUWdyaWREaXNwYXRjaGVyLnN1YnNjcmliZXIgPSBzdWJzY3JpYmVyO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0ZWQgPSBhd2FpdCBzdWJzY3JpYmVyLnN0YXJ0KCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBvcGVuYWlEaXNwYXRjaGVyID0gbmV3IE9wZW5BSURpc3BhdGNoZXIoKTtcbiAgICAgICAgICBhd2FpdCBvcGVuYWlEaXNwYXRjaGVyLnN0YXJ0KCk7XG4gICAgICAgICAgUWdyaWREaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXIgPSBvcGVuYWlEaXNwYXRjaGVyO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nLndhcm4oYG9wZW5haSBkaXNwYXRjaGVyIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYW50aHJvcGljRGlzcGF0Y2hlciA9IG5ldyBBbnRocm9waWNEaXNwYXRjaGVyKCk7XG4gICAgICAgICAgYXdhaXQgYW50aHJvcGljRGlzcGF0Y2hlci5zdGFydCgpO1xuICAgICAgICAgIFFncmlkRGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyID0gYW50aHJvcGljRGlzcGF0Y2hlcjtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZy53YXJuKGBhbnRocm9waWMgZGlzcGF0Y2hlciBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbnRocm9waWNDb3VudCA9IFFncmlkRGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy50b2tlbkNvdW50ID8/IDA7XG4gICAgICAgIGNvbnN0IG9wZW5haVJlYWR5ID0gUWdyaWREaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXI/LnJlYWR5V29ya2VyQ291bnQgPz8gMDtcbiAgICAgICAgY29uc3Qgb3BlbmFpVG90YWwgPSBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcj8ud29ya2VyQ291bnQgPz8gMDtcblxuICAgICAgICBsb2cuaW5mbyhgbGlzdGVuaW5nIG9uIGh0dHA6Ly8ke2hvc3R9OiR7cG9ydH1gKTtcbiAgICAgICAgbG9nLmluZm8oYGFudGhyb3BpYzogJHthbnRocm9waWNDb3VudH0gdG9rZW5zIHJlYWR5YCk7XG4gICAgICAgIGxvZy5pbmZvKGBvcGVuYWk6ICR7b3BlbmFpUmVhZHl9LyR7b3BlbmFpVG90YWx9IHRva2VucyByZWFkeWApO1xuICAgICAgICBsb2cuaW5mbyhcbiAgICAgICAgICBgc3Vic2NyaWJlcjogJHtzdGFydGVkID8gXCJMSVNURU4gYWN0aXZlXCIgOiBcImRlZ3JhZGVkXCJ9JHt0cmlnZ2VyUmVhZHkgPyBcIlwiIDogXCIsIHRyaWdnZXIgZmFpbGVkXCJ9YCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvblNodXRkb3duOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvZyA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcInN0YXJ0dXBcIl0pO1xuICAgICAgICBpZiAoUWdyaWREaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXIpIHtcbiAgICAgICAgICBhd2FpdCBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlci5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFFncmlkRGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyKSB7XG4gICAgICAgICAgYXdhaXQgUWdyaWREaXNwYXRjaGVyLmFudGhyb3BpY0Rpc3BhdGNoZXIuc3RvcCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChRZ3JpZERpc3BhdGNoZXIuc3Vic2NyaWJlcikge1xuICAgICAgICAgIGF3YWl0IFFncmlkRGlzcGF0Y2hlci5zdWJzY3JpYmVyLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgICBsb2cuaW5mbyhcImdyYWNlZnVsIHNodXRkb3duXCIpO1xuICAgICAgfSxcbiAgICAgIG9uRXJyb3I6IChlcnJvciwgX3JlcXVlc3QsIHJlcGx5KSA9PiB7XG4gICAgICAgIGdldExvZ2dlcihbXCJxZ3JpZFwiXSkuZXJyb3IoYCR7ZXJyb3J9YCk7XG4gICAgICAgIHJlcGx5LnN0YXR1cyg1MDApLnNlbmQoe1xuICAgICAgICAgIG5hbWU6IGVycm9yLm5hbWUsXG4gICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBLE9BQU8sT0FBTyxFQUFFLE1BQU0sS0FBSyxLQUFLLE9BQU8sS0FBSyxTQUFTLFVBQVUsRUFBRSxDQUFDO0FBRWxFLE1BQU0sT0FBTyxRQUFRLElBQUksUUFBUTtBQUNqQyxNQUFNLE9BQU8sT0FBTyxRQUFRLElBQUksUUFBUSxNQUFNO0FBRTlDLE1BQU0sYUFBYTtDQUNqQixNQUFNLFFBQVEsSUFBSSxpQkFBaUI7Q0FDbkMsTUFBTSxPQUFPLFFBQVEsSUFBSSxpQkFBaUIsS0FBSztDQUMvQyxN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
|
|
@@ -7,6 +7,27 @@ const LONG_CONTEXT_272K = {
|
|
|
7
7
|
outputMultiplier: 1.5
|
|
8
8
|
};
|
|
9
9
|
const OPENAI_COSTS = {
|
|
10
|
+
"gpt-5.6-sol": {
|
|
11
|
+
inputTokens: 5,
|
|
12
|
+
outputTokens: 30,
|
|
13
|
+
cachedInputTokens: .5,
|
|
14
|
+
cacheCreationInputTokens: 6.25,
|
|
15
|
+
longContext: LONG_CONTEXT_272K
|
|
16
|
+
},
|
|
17
|
+
"gpt-5.6-terra": {
|
|
18
|
+
inputTokens: 2.5,
|
|
19
|
+
outputTokens: 15,
|
|
20
|
+
cachedInputTokens: .25,
|
|
21
|
+
cacheCreationInputTokens: 3.125,
|
|
22
|
+
longContext: LONG_CONTEXT_272K
|
|
23
|
+
},
|
|
24
|
+
"gpt-5.6-luna": {
|
|
25
|
+
inputTokens: 1,
|
|
26
|
+
outputTokens: 6,
|
|
27
|
+
cachedInputTokens: .1,
|
|
28
|
+
cacheCreationInputTokens: 1.25,
|
|
29
|
+
longContext: LONG_CONTEXT_272K
|
|
30
|
+
},
|
|
10
31
|
"gpt-5.5": {
|
|
11
32
|
inputTokens: 5,
|
|
12
33
|
outputTokens: 30,
|
|
@@ -152,4 +173,4 @@ function calculateCostUsd(model, usage) {
|
|
|
152
173
|
//#endregion
|
|
153
174
|
export { calculateCostUsd, getModelCosts };
|
|
154
175
|
|
|
155
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY29zdC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog66qo642467OEIO2GoO2BsCDqsIDqsqkg7YWM7J2067iUICsgY29zdCDqs4TsgrAuXG4gKlxuICogY2xhdWRlIGNvZGUg7JmAIOuPmeydvCDtjKjthLQ6IO2BtOudvOydtOyWuO2KuOyXkOyEnCDqsIDqsqkg7YWM7J2067iU66GcIOyngeygkSDqs4TsgrAuXG4gKiDqsIDqsqkg64uo7JyEOiBVU0QgcGVyIDFNIHRva2Vucy5cbiAqXG4gKiBPcGVuQUkg66qo6424IOuqqeuhnTogY29kZXggYXBwLXNlcnZlciBtb2RlbC9saXN0IFJQQyDroZwg7Iuk7LihICgyMDI2LTA1LTE4KVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvcHJpY2luZ1xuICogQHNlZSBodHRwczovL3BsYXRmb3JtLmNsYXVkZS5jb20vZG9jcy9lbi9hYm91dC1jbGF1ZGUvcHJpY2luZ1xuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxDb3N0cyB7XG4gIGlucHV0VG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZWRJbnB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBsb25nLWNvbnRleHQg7ZWg7KadLiDsoITssrQg7J6F66ClIO2GoO2BsChpbnB1dF90b2tlbnMsIGNhY2hlX3JlYWQg7Y+s7ZWoKeydtCB0aHJlc2hvbGQg7LSI6rO8IOyLnFxuICAgKiDstIjqs7zrtoTrp4zsnbQg7JWE64uI6528IOyalOyyrSDsoITssrQoZnVsbCBzZXNzaW9uKeyXkCDrsLDsnKgg7KCB7JqpLlxuICAgKi9cbiAgbG9uZ0NvbnRleHQ/OiB7XG4gICAgdGhyZXNob2xkOiBudW1iZXI7XG4gICAgaW5wdXRNdWx0aXBsaWVyOiBudW1iZXI7XG4gICAgY2FjaGVkSW5wdXRNdWx0aXBsaWVyOiBudW1iZXI7XG4gICAgb3V0cHV0TXVsdGlwbGllcjogbnVtYmVyO1xuICB9O1xufVxuXG4vLyDilIDilIAgT3BlbkFJIOKAlCBjb2RleCBhcHAtc2VydmVyIOyXkOyEnCDsgqzsmqkg6rCA64ql7ZWcIOuqqOuNuCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vXG4vLyDqsIDqsqkg7Lac7LKYOiBodHRwczovL29wZW5haS5jb20vYXBpL3ByaWNpbmcgKDIwMjYtMDYtMTEg7ZmV7J24KVxuLy8g7Iug66qo6424IOy2nOyLnOuniOuLpCDri6jqsIDqsIAg67CU64CM66+A66GcKDUuMuKGkjUuNOKGkjUuNSkg66qo6424IOy2lOqwgCDsi5wg67CY65Oc7IucIOqzteyLnSDtjpjsnbTsp4Ag7J6s7ZmV7J247ZW07JW87ZWoXG5cbi8vIEdQVC01LjTsl5DshJwg7LKY7J2MIOuPhOyeheuQnCBsb25nLWNvbnRleHQg7ZWg7KadICg1LjIvNS4zLWNvZGV464qUIO2VtOuLuSDsl4bsnYwsIDUuNC1taW5pL25hbm/ripQg6rO17IudIO2RnOyXkOyEnCBsb25nLWNvbnRleHQg64uo6rCAIOyXhuydjClcbi8vIDI3Mksg7LSI6rO8IOyLnCBpbnB1dCAyeCAvIGNhY2hlZCAyeCAvIG91dHB1dCAxLjV4IOKAlCDstIjqs7zrtoTrp4zsnbQg7JWE64uMIOyEuOyFmCDsoITssrTsl5Ag7KCB7Jqp65CoXG4vLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuYWkuY29tL2FwaS9kb2NzL21vZGVscy9ncHQtNS41IChcInByb21wdHMgd2l0aCA+MjcySyBpbnB1dCB0b2tlbnNcIilcbmNvbnN0IExPTkdfQ09OVEVYVF8yNzJLOiBOb25OdWxsYWJsZTxNb2RlbENvc3RzW1wibG9uZ0NvbnRleHRcIl0+ID0ge1xuICB0aHJlc2hvbGQ6IDI3Ml8wMDAsXG4gIGlucHV0TXVsdGlwbGllcjogMixcbiAgY2FjaGVkSW5wdXRNdWx0aXBsaWVyOiAyLFxuICBvdXRwdXRNdWx0aXBsaWVyOiAxLjUsXG59O1xuXG5jb25zdCBPUEVOQUlfQ09TVFM6IFJlY29yZDxzdHJpbmcsIE1vZGVsQ29zdHM+ID0ge1xuICAvLyBodHRwczovL29wZW5haS5jb20vaW5kZXgvaW50cm9kdWNpbmctZ3B0LTUtNS8gKDIwMjYtMDQg7Lac7IucKVxuICBcImdwdC01LjVcIjoge1xuICAgIGlucHV0VG9rZW5zOiA1LFxuICAgIG91dHB1dFRva2VuczogMzAsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSxcbiAgICBsb25nQ29udGV4dDogTE9OR19DT05URVhUXzI3MkssXG4gIH0sXG4gIC8vIGh0dHBzOi8vb3BlbmFpLmNvbS9pbmRleC9pbnRyb2R1Y2luZy1ncHQtNS00LyAoMjAyNi0wMyDstpzsi5wpXG4gIFwiZ3B0LTUuNFwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDIuNSxcbiAgICBvdXRwdXRUb2tlbnM6IDE1LFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiAwLjI1LFxuICAgIGxvbmdDb250ZXh0OiBMT05HX0NPTlRFWFRfMjcySyxcbiAgfSxcbiAgXCJncHQtNS40LW1pbmlcIjogeyBpbnB1dFRva2VuczogMC43NSwgb3V0cHV0VG9rZW5zOiA0LjUsIGNhY2hlZElucHV0VG9rZW5zOiAwLjA3NSB9LFxuICAvLyBncHQtNS4y7JmAIOuPmeydvCDri6jqsIAgKGNhY2hlZCA9IGlucHV07J2YIDEwJSlcbiAgXCJncHQtNS4zLWNvZGV4XCI6IHsgaW5wdXRUb2tlbnM6IDEuNzUsIG91dHB1dFRva2VuczogMTQsIGNhY2hlZElucHV0VG9rZW5zOiAwLjE3NSB9LFxuICAvLyBodHRwczovL29wZW5haS5jb20vaW5kZXgvaW50cm9kdWNpbmctZ3B0LTUtMi8gKGNhY2hlZCBpbnB1dCA5MCUg7ZWg7J24IOuqheyLnClcbiAgXCJncHQtNS4yXCI6IHsgaW5wdXRUb2tlbnM6IDEuNzUsIG91dHB1dFRva2VuczogMTQsIGNhY2hlZElucHV0VG9rZW5zOiAwLjE3NSB9LFxufTtcblxuLy8g4pSA4pSAIEFudGhyb3BpYyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuY29uc3QgQU5USFJPUElDX0NPU1RTOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbENvc3RzPiA9IHtcbiAgLy8gQ2xhdWRlIENvZGUg64qUIOuzhOuPhCB0dGw6XCIxaFwiIOyYteyFmCDsl4bsnbQg7Iuk7ZaJ65CY66+A66GcIGZhbGxiYWNrIOqwgOqyqe2RnOuKlCA167aEIGNhY2hlIHdyaXRlKDEuMjV4KeulvCDquLDspIDsnLzroZwg65GU64ukLlxuICAvLyAx7Iuc6rCEIGNhY2hlIHdyaXRlIOuKlCBpbnB1dCAyeCDsnbTsp4Drp4wg7ZiE7J6sIHFncmlkIOyLpO2WiSDqsr3roZzsnZgg6riw67O46rCS7J20IOyVhOuLiOuLpC5cbiAgc29ubmV0OiB7XG4gICAgaW5wdXRUb2tlbnM6IDMsXG4gICAgb3V0cHV0VG9rZW5zOiAxNSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC4zLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogMy43NSxcbiAgfSxcbiAgXCJjbGF1ZGUtMy01LWhhaWt1XCI6IHtcbiAgICBpbnB1dFRva2VuczogMC44LFxuICAgIG91dHB1dFRva2VuczogNCxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC4wOCxcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IDEsXG4gIH0sXG4gIFwiY2xhdWRlLWhhaWt1LTQtNVwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDEsXG4gICAgb3V0cHV0VG9rZW5zOiA1LFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiAwLjEsXG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiAxLjI1LFxuICB9LFxuICBcImNsYXVkZS0zLTUtc29ubmV0XCI6IHtcbiAgICBpbnB1dFRva2VuczogMyxcbiAgICBvdXRwdXRUb2tlbnM6IDE1LFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiAwLjMsXG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiAzLjc1LFxuICB9LFxuICBcImNsYXVkZS0zLTctc29ubmV0XCI6IHtcbiAgICBpbnB1dFRva2VuczogMyxcbiAgICBvdXRwdXRUb2tlbnM6IDE1LFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiAwLjMsXG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiAzLjc1LFxuICB9LFxuICBcImNsYXVkZS1zb25uZXQtNFwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDMsXG4gICAgb3V0cHV0VG9rZW5zOiAxNSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC4zLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogMy43NSxcbiAgfSxcbiAgXCJjbGF1ZGUtc29ubmV0LTQtNVwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDMsXG4gICAgb3V0cHV0VG9rZW5zOiAxNSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC4zLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogMy43NSxcbiAgfSxcbiAgXCJjbGF1ZGUtc29ubmV0LTQtNlwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDMsXG4gICAgb3V0cHV0VG9rZW5zOiAxNSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC4zLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogMy43NSxcbiAgfSxcbiAgXCJjbGF1ZGUtc29ubmV0LTQtN1wiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDMsXG4gICAgb3V0cHV0VG9rZW5zOiAxNSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC4zLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogMy43NSxcbiAgfSxcbiAgXCJjbGF1ZGUtb3B1cy00XCI6IHtcbiAgICBpbnB1dFRva2VuczogMTUsXG4gICAgb3V0cHV0VG9rZW5zOiA3NSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMS41LFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogMTguNzUsXG4gIH0sXG4gIFwiY2xhdWRlLW9wdXMtNC0xXCI6IHtcbiAgICBpbnB1dFRva2VuczogMTUsXG4gICAgb3V0cHV0VG9rZW5zOiA3NSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMS41LFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogMTguNzUsXG4gIH0sXG4gIFwiY2xhdWRlLW9wdXMtNC01XCI6IHtcbiAgICBpbnB1dFRva2VuczogNSxcbiAgICBvdXRwdXRUb2tlbnM6IDI1LFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiAwLjUsXG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiA2LjI1LFxuICB9LFxuICBcImNsYXVkZS1vcHVzLTQtNlwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDUsXG4gICAgb3V0cHV0VG9rZW5zOiAyNSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC41LFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogNi4yNSxcbiAgfSxcbiAgXCJjbGF1ZGUtb3B1cy00LTdcIjoge1xuICAgIGlucHV0VG9rZW5zOiA1LFxuICAgIG91dHB1dFRva2VuczogMjUsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSxcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IDYuMjUsXG4gIH0sXG4gIFwiY2xhdWRlLW9wdXMtNC04XCI6IHtcbiAgICBpbnB1dFRva2VuczogNSxcbiAgICBvdXRwdXRUb2tlbnM6IDI1LFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiAwLjUsXG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiA2LjI1LFxuICB9LFxufTtcblxuY29uc3QgREVGQVVMVF9DT1NUUzogTW9kZWxDb3N0cyA9IHsgaW5wdXRUb2tlbnM6IDMsIG91dHB1dFRva2VuczogMTUsIGNhY2hlZElucHV0VG9rZW5zOiAwLjMgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZGVsQ29zdHMobW9kZWw6IHN0cmluZyk6IE1vZGVsQ29zdHMge1xuICBjb25zdCBub3JtYWxpemVkTW9kZWwgPSBtb2RlbC5yZXBsYWNlKC9cXFsxbVxcXSQvaSwgXCJcIik7XG4gIHJldHVybiBPUEVOQUlfQ09TVFNbbm9ybWFsaXplZE1vZGVsXSA/PyBBTlRIUk9QSUNfQ09TVFNbbm9ybWFsaXplZE1vZGVsXSA/PyBERUZBVUxUX0NPU1RTO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ29zdFVzZChcbiAgbW9kZWw6IHN0cmluZyxcbiAgdXNhZ2U6IHtcbiAgICBpbnB1dFRva2VuczogbnVtYmVyO1xuICAgIG91dHB1dFRva2VuczogbnVtYmVyO1xuICAgIGNhY2hlZElucHV0VG9rZW5zPzogbnVtYmVyO1xuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2Vucz86IG51bWJlcjtcbiAgfSxcbik6IG51bWJlciB7XG4gIGNvbnN0IGNvc3RzID0gZ2V0TW9kZWxDb3N0cyhtb2RlbCk7XG4gIGNvbnN0IGNhY2hlZElucHV0ID0gdXNhZ2UuY2FjaGVkSW5wdXRUb2tlbnMgPz8gMDtcbiAgY29uc3QgY2FjaGVDcmVhdGlvbklucHV0ID0gdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zID8/IDA7XG4gIGNvbnN0IG5vbkNhY2hlZElucHV0ID0gTWF0aC5tYXgodXNhZ2UuaW5wdXRUb2tlbnMgLSBjYWNoZWRJbnB1dCAtIGNhY2hlQ3JlYXRpb25JbnB1dCwgMCk7XG5cbiAgLy8gbG9uZy1jb250ZXh0IO2VoOymnTog7KCE7LK0IOyeheugpShpbnB1dF90b2tlbnMsIGNhY2hlIO2PrO2VqCnsnbQgdGhyZXNob2xkIOy0iOqzvCDsi5wg7JqU7LKtIOyghOyytOyXkCDrsLDsnKgg7KCB7JqpXG4gIGNvbnN0IGxjID0gY29zdHMubG9uZ0NvbnRleHQ7XG4gIGNvbnN0IGlzTG9uZ0NvbnRleHQgPSBsYyAhPT0gdW5kZWZpbmVkICYmIHVzYWdlLmlucHV0VG9rZW5zID4gbGMudGhyZXNob2xkO1xuICBjb25zdCBpbnB1dFJhdGUgPSBjb3N0cy5pbnB1dFRva2VucyAqIChpc0xvbmdDb250ZXh0ID8gbGMuaW5wdXRNdWx0aXBsaWVyIDogMSk7XG4gIGNvbnN0IGNhY2hlZFJhdGUgPSBjb3N0cy5jYWNoZWRJbnB1dFRva2VucyAqIChpc0xvbmdDb250ZXh0ID8gbGMuY2FjaGVkSW5wdXRNdWx0aXBsaWVyIDogMSk7XG4gIGNvbnN0IGNhY2hlQ3JlYXRpb25SYXRlID1cbiAgICAoY29zdHMuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zID8/IGNvc3RzLmlucHV0VG9rZW5zKSAqXG4gICAgKGlzTG9uZ0NvbnRleHQgPyBsYy5pbnB1dE11bHRpcGxpZXIgOiAxKTtcbiAgY29uc3Qgb3V0cHV0UmF0ZSA9IGNvc3RzLm91dHB1dFRva2VucyAqIChpc0xvbmdDb250ZXh0ID8gbGMub3V0cHV0TXVsdGlwbGllciA6IDEpO1xuXG4gIHJldHVybiAoXG4gICAgKG5vbkNhY2hlZElucHV0IC8gMV8wMDBfMDAwKSAqIGlucHV0UmF0ZSArXG4gICAgKHVzYWdlLm91dHB1dFRva2VucyAvIDFfMDAwXzAwMCkgKiBvdXRwdXRSYXRlICtcbiAgICAoY2FjaGVkSW5wdXQgLyAxXzAwMF8wMDApICogY2FjaGVkUmF0ZSArXG4gICAgKGNhY2hlQ3JlYXRpb25JbnB1dCAvIDFfMDAwXzAwMCkgKiBjYWNoZUNyZWF0aW9uUmF0ZVxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQXFDQSxNQUFNLG9CQUE0RDtDQUNoRSxXQUFXO0NBQ1gsaUJBQWlCO0NBQ2pCLHVCQUF1QjtDQUN2QixrQkFBa0I7Q0FDbkI7QUFFRCxNQUFNLGVBQTJDO0NBRS9DLFdBQVc7RUFDVCxhQUFhO0VBQ2IsY0FBYztFQUNkLG1CQUFtQjtFQUNuQixhQUFh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
|
|
176
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY29zdC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog66qo642467OEIO2GoO2BsCDqsIDqsqkg7YWM7J2067iUICsgY29zdCDqs4TsgrAuXG4gKlxuICogY2xhdWRlIGNvZGUg7JmAIOuPmeydvCDtjKjthLQ6IO2BtOudvOydtOyWuO2KuOyXkOyEnCDqsIDqsqkg7YWM7J2067iU66GcIOyngeygkSDqs4TsgrAuXG4gKiDqsIDqsqkg64uo7JyEOiBVU0QgcGVyIDFNIHRva2Vucy5cbiAqXG4gKiBPcGVuQUkg66qo6424IOuqqeuhnTogY29kZXggYXBwLXNlcnZlciBtb2RlbC9saXN0IFJQQyDroZwg7Iuk7LihICgyMDI2LTA1LTE4KVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvcHJpY2luZ1xuICogQHNlZSBodHRwczovL3BsYXRmb3JtLmNsYXVkZS5jb20vZG9jcy9lbi9hYm91dC1jbGF1ZGUvcHJpY2luZ1xuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxDb3N0cyB7XG4gIGlucHV0VG9rZW5zOiBudW1iZXI7XG4gIG91dHB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZWRJbnB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBsb25nLWNvbnRleHQg7ZWg7KadLiDsoITssrQg7J6F66ClIO2GoO2BsChpbnB1dF90b2tlbnMsIGNhY2hlX3JlYWQg7Y+s7ZWoKeydtCB0aHJlc2hvbGQg7LSI6rO8IOyLnFxuICAgKiDstIjqs7zrtoTrp4zsnbQg7JWE64uI6528IOyalOyyrSDsoITssrQoZnVsbCBzZXNzaW9uKeyXkCDrsLDsnKgg7KCB7JqpLlxuICAgKi9cbiAgbG9uZ0NvbnRleHQ/OiB7XG4gICAgdGhyZXNob2xkOiBudW1iZXI7XG4gICAgaW5wdXRNdWx0aXBsaWVyOiBudW1iZXI7XG4gICAgY2FjaGVkSW5wdXRNdWx0aXBsaWVyOiBudW1iZXI7XG4gICAgb3V0cHV0TXVsdGlwbGllcjogbnVtYmVyO1xuICB9O1xufVxuXG4vLyDilIDilIAgT3BlbkFJIOKAlCBjb2RleCBhcHAtc2VydmVyIOyXkOyEnCDsgqzsmqkg6rCA64ql7ZWcIOuqqOuNuCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vXG4vLyDqsIDqsqkg7Lac7LKYOiBodHRwczovL29wZW5haS5jb20vYXBpL3ByaWNpbmcgKDIwMjYtMDYtMTEg7ZmV7J24KVxuLy8g7Iug66qo6424IOy2nOyLnOuniOuLpCDri6jqsIDqsIAg67CU64CM66+A66GcKDUuMuKGkjUuNOKGkjUuNSkg66qo6424IOy2lOqwgCDsi5wg67CY65Oc7IucIOqzteyLnSDtjpjsnbTsp4Ag7J6s7ZmV7J247ZW07JW87ZWoXG5cbi8vIEdQVC01LjTsl5DshJwg7LKY7J2MIOuPhOyeheuQnCBsb25nLWNvbnRleHQg7ZWg7KadICg1LjIvNS4zLWNvZGV464qUIO2VtOuLuSDsl4bsnYwsIDUuNC1taW5pL25hbm/ripQg6rO17IudIO2RnOyXkOyEnCBsb25nLWNvbnRleHQg64uo6rCAIOyXhuydjClcbi8vIDI3Mksg7LSI6rO8IOyLnCBpbnB1dCAyeCAvIGNhY2hlZCAyeCAvIG91dHB1dCAxLjV4IOKAlCDstIjqs7zrtoTrp4zsnbQg7JWE64uMIOyEuOyFmCDsoITssrTsl5Ag7KCB7Jqp65CoXG4vLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuYWkuY29tL2FwaS9kb2NzL21vZGVscy9ncHQtNS41IChcInByb21wdHMgd2l0aCA+MjcySyBpbnB1dCB0b2tlbnNcIilcbmNvbnN0IExPTkdfQ09OVEVYVF8yNzJLOiBOb25OdWxsYWJsZTxNb2RlbENvc3RzW1wibG9uZ0NvbnRleHRcIl0+ID0ge1xuICB0aHJlc2hvbGQ6IDI3Ml8wMDAsXG4gIGlucHV0TXVsdGlwbGllcjogMixcbiAgY2FjaGVkSW5wdXRNdWx0aXBsaWVyOiAyLFxuICBvdXRwdXRNdWx0aXBsaWVyOiAxLjUsXG59O1xuXG5jb25zdCBPUEVOQUlfQ09TVFM6IFJlY29yZDxzdHJpbmcsIE1vZGVsQ29zdHM+ID0ge1xuICAvLyBHUFQtNS42IFNvbCwgVGVycmEsIEx1bmEuIE9wZW5BSSBuYXRpdmUgQVBJIOuKlCAxLjA1TSBjb250ZXh0IC8gMTI4SyBtYXggb3V0cHV0IOydtOyngOunjCxcbiAgLy8gcWdyaWQg7J2YIGNvZGV4IGFwcC1zZXJ2ZXIg6rK966Gc64qUIGNvbnRleHRfd2luZG93PTM3MksgKG1heF9jb250ZXh0X3dpbmRvdyDrj4QgMzcySyxcbiAgLy8gZWZmZWN0aXZlIDk1JSDiiYggMzUzSykg66GcIOygnO2VnOuQnOuLpCDigJQgY29kZXggMC4xNDQuMSBtb2RlbHNfY2FjaGUg7Iuk7LihICgyMDI2LTA3LTEwKS5cbiAgLy8gY2FjaGUgd3JpdGUg64qUIHVuY2FjaGVkIGlucHV0IOydmCAxLjI1eCDroZwg6rO86riI65CY7KeA66eMLCBjb2RleCBhcHAtc2VydmVyIHVzYWdlXG4gIC8vIChUb2tlblVzYWdlQnJlYWtkb3duKSDsl5AgY2FjaGUgd3JpdGUg7Yag7YGwIO2VhOuTnOqwgCDsl4bslrQg7ZiE7J6sIE9wZW5BSSDsi6Ttlokg6rK966Gc7J2YXG4gIC8vIGNvc3Qg6rOE7IKw7JeQ7ISc64qUIO2VreyDgSAwIOycvOuhnCDsnqHtnozri6Qg4oaSIOq3uOunjO2BvCDqs7zshozsp5Hqs4QuIOuLqOqwgOuKlCDsmbjrtoAgbG9nZ2VyL21hbnVhbFxuICAvLyB1c2FnZSDsnoXroKXqs7wg7Zal7ZuEIO2UhOuhnO2GoOy9nCDtmZXsnqXsnYQg7JyE7ZW0IOycoOyngO2VnOuLpC5cbiAgLy8gQHNlZSBodHRwczovL2RldmVsb3BlcnMub3BlbmFpLmNvbS9hcGkvZG9jcy9tb2RlbHMvZ3B0LTUuNi1zb2xcbiAgLy8gQHNlZSBodHRwczovL2RldmVsb3BlcnMub3BlbmFpLmNvbS9hcGkvZG9jcy9tb2RlbHMvZ3B0LTUuNi10ZXJyYVxuICAvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVycy5vcGVuYWkuY29tL2FwaS9kb2NzL21vZGVscy9ncHQtNS42LWx1bmFcbiAgXCJncHQtNS42LXNvbFwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDUsXG4gICAgb3V0cHV0VG9rZW5zOiAzMCxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC41LFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogNi4yNSxcbiAgICBsb25nQ29udGV4dDogTE9OR19DT05URVhUXzI3MkssXG4gIH0sXG4gIFwiZ3B0LTUuNi10ZXJyYVwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDIuNSxcbiAgICBvdXRwdXRUb2tlbnM6IDE1LFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiAwLjI1LFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogMy4xMjUsXG4gICAgbG9uZ0NvbnRleHQ6IExPTkdfQ09OVEVYVF8yNzJLLFxuICB9LFxuICBcImdwdC01LjYtbHVuYVwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDEsXG4gICAgb3V0cHV0VG9rZW5zOiA2LFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiAwLjEsXG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiAxLjI1LFxuICAgIGxvbmdDb250ZXh0OiBMT05HX0NPTlRFWFRfMjcySyxcbiAgfSxcbiAgLy8gaHR0cHM6Ly9vcGVuYWkuY29tL2luZGV4L2ludHJvZHVjaW5nLWdwdC01LTUvICgyMDI2LTA0IOy2nOyLnClcbiAgXCJncHQtNS41XCI6IHtcbiAgICBpbnB1dFRva2VuczogNSxcbiAgICBvdXRwdXRUb2tlbnM6IDMwLFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiAwLjUsXG4gICAgbG9uZ0NvbnRleHQ6IExPTkdfQ09OVEVYVF8yNzJLLFxuICB9LFxuICAvLyBodHRwczovL29wZW5haS5jb20vaW5kZXgvaW50cm9kdWNpbmctZ3B0LTUtNC8gKDIwMjYtMDMg7Lac7IucKVxuICBcImdwdC01LjRcIjoge1xuICAgIGlucHV0VG9rZW5zOiAyLjUsXG4gICAgb3V0cHV0VG9rZW5zOiAxNSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC4yNSxcbiAgICBsb25nQ29udGV4dDogTE9OR19DT05URVhUXzI3MkssXG4gIH0sXG4gIFwiZ3B0LTUuNC1taW5pXCI6IHsgaW5wdXRUb2tlbnM6IDAuNzUsIG91dHB1dFRva2VuczogNC41LCBjYWNoZWRJbnB1dFRva2VuczogMC4wNzUgfSxcbiAgLy8gZ3B0LTUuMuyZgCDrj5nsnbwg64uo6rCAIChjYWNoZWQgPSBpbnB1dOydmCAxMCUpXG4gIFwiZ3B0LTUuMy1jb2RleFwiOiB7IGlucHV0VG9rZW5zOiAxLjc1LCBvdXRwdXRUb2tlbnM6IDE0LCBjYWNoZWRJbnB1dFRva2VuczogMC4xNzUgfSxcbiAgLy8gaHR0cHM6Ly9vcGVuYWkuY29tL2luZGV4L2ludHJvZHVjaW5nLWdwdC01LTIvIChjYWNoZWQgaW5wdXQgOTAlIO2VoOyduCDrqoXsi5wpXG4gIFwiZ3B0LTUuMlwiOiB7IGlucHV0VG9rZW5zOiAxLjc1LCBvdXRwdXRUb2tlbnM6IDE0LCBjYWNoZWRJbnB1dFRva2VuczogMC4xNzUgfSxcbn07XG5cbi8vIOKUgOKUgCBBbnRocm9waWMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmNvbnN0IEFOVEhST1BJQ19DT1NUUzogUmVjb3JkPHN0cmluZywgTW9kZWxDb3N0cz4gPSB7XG4gIC8vIENsYXVkZSBDb2RlIOuKlCDrs4Trj4QgdHRsOlwiMWhcIiDsmLXshZgg7JeG7J20IOyLpO2WieuQmOuvgOuhnCBmYWxsYmFjayDqsIDqsqntkZzripQgNeu2hCBjYWNoZSB3cml0ZSgxLjI1eCnrpbwg6riw7KSA7Jy866GcIOuRlOuLpC5cbiAgLy8gMeyLnOqwhCBjYWNoZSB3cml0ZSDripQgaW5wdXQgMngg7J207KeA66eMIO2YhOyerCBxZ3JpZCDsi6Ttlokg6rK966Gc7J2YIOq4sOuzuOqwkuydtCDslYTri4jri6QuXG4gIHNvbm5ldDoge1xuICAgIGlucHV0VG9rZW5zOiAzLFxuICAgIG91dHB1dFRva2VuczogMTUsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMyxcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IDMuNzUsXG4gIH0sXG4gIFwiY2xhdWRlLTMtNS1oYWlrdVwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDAuOCxcbiAgICBvdXRwdXRUb2tlbnM6IDQsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMDgsXG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiAxLFxuICB9LFxuICBcImNsYXVkZS1oYWlrdS00LTVcIjoge1xuICAgIGlucHV0VG9rZW5zOiAxLFxuICAgIG91dHB1dFRva2VuczogNSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC4xLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogMS4yNSxcbiAgfSxcbiAgXCJjbGF1ZGUtMy01LXNvbm5ldFwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDMsXG4gICAgb3V0cHV0VG9rZW5zOiAxNSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC4zLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogMy43NSxcbiAgfSxcbiAgXCJjbGF1ZGUtMy03LXNvbm5ldFwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDMsXG4gICAgb3V0cHV0VG9rZW5zOiAxNSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC4zLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogMy43NSxcbiAgfSxcbiAgXCJjbGF1ZGUtc29ubmV0LTRcIjoge1xuICAgIGlucHV0VG9rZW5zOiAzLFxuICAgIG91dHB1dFRva2VuczogMTUsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMyxcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IDMuNzUsXG4gIH0sXG4gIFwiY2xhdWRlLXNvbm5ldC00LTVcIjoge1xuICAgIGlucHV0VG9rZW5zOiAzLFxuICAgIG91dHB1dFRva2VuczogMTUsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMyxcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IDMuNzUsXG4gIH0sXG4gIFwiY2xhdWRlLXNvbm5ldC00LTZcIjoge1xuICAgIGlucHV0VG9rZW5zOiAzLFxuICAgIG91dHB1dFRva2VuczogMTUsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMyxcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IDMuNzUsXG4gIH0sXG4gIFwiY2xhdWRlLXNvbm5ldC00LTdcIjoge1xuICAgIGlucHV0VG9rZW5zOiAzLFxuICAgIG91dHB1dFRva2VuczogMTUsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAuMyxcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IDMuNzUsXG4gIH0sXG4gIFwiY2xhdWRlLW9wdXMtNFwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDE1LFxuICAgIG91dHB1dFRva2VuczogNzUsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IDEuNSxcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IDE4Ljc1LFxuICB9LFxuICBcImNsYXVkZS1vcHVzLTQtMVwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDE1LFxuICAgIG91dHB1dFRva2VuczogNzUsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IDEuNSxcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IDE4Ljc1LFxuICB9LFxuICBcImNsYXVkZS1vcHVzLTQtNVwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDUsXG4gICAgb3V0cHV0VG9rZW5zOiAyNSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC41LFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogNi4yNSxcbiAgfSxcbiAgXCJjbGF1ZGUtb3B1cy00LTZcIjoge1xuICAgIGlucHV0VG9rZW5zOiA1LFxuICAgIG91dHB1dFRva2VuczogMjUsXG4gICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAuNSxcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IDYuMjUsXG4gIH0sXG4gIFwiY2xhdWRlLW9wdXMtNC03XCI6IHtcbiAgICBpbnB1dFRva2VuczogNSxcbiAgICBvdXRwdXRUb2tlbnM6IDI1LFxuICAgIGNhY2hlZElucHV0VG9rZW5zOiAwLjUsXG4gICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiA2LjI1LFxuICB9LFxuICBcImNsYXVkZS1vcHVzLTQtOFwiOiB7XG4gICAgaW5wdXRUb2tlbnM6IDUsXG4gICAgb3V0cHV0VG9rZW5zOiAyNSxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogMC41LFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogNi4yNSxcbiAgfSxcbn07XG5cbmNvbnN0IERFRkFVTFRfQ09TVFM6IE1vZGVsQ29zdHMgPSB7IGlucHV0VG9rZW5zOiAzLCBvdXRwdXRUb2tlbnM6IDE1LCBjYWNoZWRJbnB1dFRva2VuczogMC4zIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RlbENvc3RzKG1vZGVsOiBzdHJpbmcpOiBNb2RlbENvc3RzIHtcbiAgY29uc3Qgbm9ybWFsaXplZE1vZGVsID0gbW9kZWwucmVwbGFjZSgvXFxbMW1cXF0kL2ksIFwiXCIpO1xuICByZXR1cm4gT1BFTkFJX0NPU1RTW25vcm1hbGl6ZWRNb2RlbF0gPz8gQU5USFJPUElDX0NPU1RTW25vcm1hbGl6ZWRNb2RlbF0gPz8gREVGQVVMVF9DT1NUUztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUNvc3RVc2QoXG4gIG1vZGVsOiBzdHJpbmcsXG4gIHVzYWdlOiB7XG4gICAgaW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgICBvdXRwdXRUb2tlbnM6IG51bWJlcjtcbiAgICBjYWNoZWRJbnB1dFRva2Vucz86IG51bWJlcjtcbiAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM/OiBudW1iZXI7XG4gIH0sXG4pOiBudW1iZXIge1xuICBjb25zdCBjb3N0cyA9IGdldE1vZGVsQ29zdHMobW9kZWwpO1xuICBjb25zdCBjYWNoZWRJbnB1dCA9IHVzYWdlLmNhY2hlZElucHV0VG9rZW5zID8/IDA7XG4gIGNvbnN0IGNhY2hlQ3JlYXRpb25JbnB1dCA9IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyA/PyAwO1xuICBjb25zdCBub25DYWNoZWRJbnB1dCA9IE1hdGgubWF4KHVzYWdlLmlucHV0VG9rZW5zIC0gY2FjaGVkSW5wdXQgLSBjYWNoZUNyZWF0aW9uSW5wdXQsIDApO1xuXG4gIC8vIGxvbmctY29udGV4dCDtlaDspp06IOyghOyytCDsnoXroKUoaW5wdXRfdG9rZW5zLCBjYWNoZSDtj6ztlagp7J20IHRocmVzaG9sZCDstIjqs7wg7IucIOyalOyyrSDsoITssrTsl5Ag67Cw7JyoIOyggeyaqVxuICBjb25zdCBsYyA9IGNvc3RzLmxvbmdDb250ZXh0O1xuICBjb25zdCBpc0xvbmdDb250ZXh0ID0gbGMgIT09IHVuZGVmaW5lZCAmJiB1c2FnZS5pbnB1dFRva2VucyA+IGxjLnRocmVzaG9sZDtcbiAgY29uc3QgaW5wdXRSYXRlID0gY29zdHMuaW5wdXRUb2tlbnMgKiAoaXNMb25nQ29udGV4dCA/IGxjLmlucHV0TXVsdGlwbGllciA6IDEpO1xuICBjb25zdCBjYWNoZWRSYXRlID0gY29zdHMuY2FjaGVkSW5wdXRUb2tlbnMgKiAoaXNMb25nQ29udGV4dCA/IGxjLmNhY2hlZElucHV0TXVsdGlwbGllciA6IDEpO1xuICBjb25zdCBjYWNoZUNyZWF0aW9uUmF0ZSA9XG4gICAgKGNvc3RzLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyA/PyBjb3N0cy5pbnB1dFRva2VucykgKlxuICAgIChpc0xvbmdDb250ZXh0ID8gbGMuaW5wdXRNdWx0aXBsaWVyIDogMSk7XG4gIGNvbnN0IG91dHB1dFJhdGUgPSBjb3N0cy5vdXRwdXRUb2tlbnMgKiAoaXNMb25nQ29udGV4dCA/IGxjLm91dHB1dE11bHRpcGxpZXIgOiAxKTtcblxuICByZXR1cm4gKFxuICAgIChub25DYWNoZWRJbnB1dCAvIDFfMDAwXzAwMCkgKiBpbnB1dFJhdGUgK1xuICAgICh1c2FnZS5vdXRwdXRUb2tlbnMgLyAxXzAwMF8wMDApICogb3V0cHV0UmF0ZSArXG4gICAgKGNhY2hlZElucHV0IC8gMV8wMDBfMDAwKSAqIGNhY2hlZFJhdGUgK1xuICAgIChjYWNoZUNyZWF0aW9uSW5wdXQgLyAxXzAwMF8wMDApICogY2FjaGVDcmVhdGlvblJhdGVcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFxQ0EsTUFBTSxvQkFBNEQ7Q0FDaEUsV0FBVztDQUNYLGlCQUFpQjtDQUNqQix1QkFBdUI7Q0FDdkIsa0JBQWtCO0NBQ25CO0FBRUQsTUFBTSxlQUEyQztDQVcvQyxlQUFlO0VBQ2IsYUFBYTtFQUNiLGNBQWM7RUFDZCxtQkFBbUI7RUFDbkIsMEJBQTBCO0VBQzFCLGFBQWE7RUFDZDtDQUNELGlCQUFpQjtFQUNmLGFBQWE7RUFDYixjQUFjO0VBQ2QsbUJBQW1CO0VBQ25CLDBCQUEwQjtFQUMxQixhQUFhO0VBQ2Q7Q0FDRCxnQkFBZ0I7RUFDZCxhQUFhO0VBQ2IsY0FBYztFQUNkLG1CQUFtQjtFQUNuQiwwQkFBMEI7RUFDMUIsYUFBYTtFQUNkO0NBRUQsV0FBVztFQUNULGFBQWE7RUFDYixjQUFjO0VBQ2QsbUJBQW1CO0VBQ25CLGFBQWE7RUFDZDtDQUVELFdBQVc7RUFDVCxhQUFhO0VBQ2IsY0FBYztFQUNkLG1CQUFtQjtFQUNuQixhQUFhO0VBQ2Q7Q0FDRCxnQkFBZ0I7RUFBRSxhQUFhO0VBQU0sY0FBYztFQUFLLG1CQUFtQjtFQUFPO0NBRWxGLGlCQUFpQjtFQUFFLGFBQWE7RUFBTSxjQUFjO0VBQUksbUJBQW1CO0VBQU87Q0FFbEYsV0FBVztFQUFFLGFBQWE7RUFBTSxjQUFjO0VBQUksbUJBQW1CO0VBQU87Q0FDN0U7QUFJRCxNQUFNLGtCQUE4QztDQUdsRCxRQUFRO0VBQ04sYUFBYTtFQUNiLGNBQWM7RUFDZCxtQkFBbUI7RUFDbkIsMEJBQTBCO0VBQzNCO0NBQ0Qsb0JBQW9CO0VBQ2xCLGFBQWE7RUFDYixjQUFjO0VBQ2QsbUJBQW1CO0VBQ25CLDBCQUEwQjtFQUMzQjtDQUNELG9CQUFvQjtFQUNsQixhQUFhO0VBQ2IsY0FBYztFQUNkLG1CQUFtQjtFQUNuQiwwQkFBMEI7RUFDM0I7Q0FDRCxxQkFBcUI7RUFDbkIsYUFBYTtFQUNiLGNBQWM7RUFDZCxtQkFBbUI7RUFDbkIsMEJBQTBCO0VBQzNCO0NBQ0QscUJBQXFCO0VBQ25CLGFBQWE7RUFDYixjQUFjO0VBQ2QsbUJBQW1CO0VBQ25CLDBCQUEwQjtFQUMzQjtDQUNELG1CQUFtQjtFQUNqQixhQUFhO0VBQ2IsY0FBYztFQUNkLG1CQUFtQjtFQUNuQiwwQkFBMEI7RUFDM0I7Q0FDRCxxQkFBcUI7RUFDbkIsYUFBYTtFQUNiLGNBQWM7RUFDZCxtQkFBbUI7RUFDbkIsMEJBQTBCO0VBQzNCO0NBQ0QscUJBQXFCO0VBQ25CLGFBQWE7RUFDYixjQUFjO0VBQ2QsbUJBQW1CO0VBQ25CLDBCQUEwQjtFQUMzQjtDQUNELHFCQUFxQjtFQUNuQixhQUFhO0VBQ2IsY0FBYztFQUNkLG1CQUFtQjtFQUNuQiwwQkFBMEI7RUFDM0I7Q0FDRCxpQkFBaUI7RUFDZixhQUFhO0VBQ2IsY0FBYztFQUNkLG1CQUFtQjtFQUNuQiwwQkFBMEI7RUFDM0I7Q0FDRCxtQkFBbUI7RUFDakIsYUFBYTtFQUNiLGNBQWM7RUFDZCxtQkFBbUI7RUFDbkIsMEJBQTBCO0VBQzNCO0NBQ0QsbUJBQW1CO0VBQ2pCLGFBQWE7RUFDYixjQUFjO0VBQ2QsbUJBQW1CO0VBQ25CLDBCQUEwQjtFQUMzQjtDQUNELG1CQUFtQjtFQUNqQixhQUFhO0VBQ2IsY0FBYztFQUNkLG1CQUFtQjtFQUNuQiwwQkFBMEI7RUFDM0I7Q0FDRCxtQkFBbUI7RUFDakIsYUFBYTtFQUNiLGNBQWM7RUFDZCxtQkFBbUI7RUFDbkIsMEJBQTBCO0VBQzNCO0NBQ0QsbUJBQW1CO0VBQ2pCLGFBQWE7RUFDYixjQUFjO0VBQ2QsbUJBQW1CO0VBQ25CLDBCQUEwQjtFQUMzQjtDQUNGO0FBRUQsTUFBTSxnQkFBNEI7Q0FBRSxhQUFhO0NBQUcsY0FBYztDQUFJLG1CQUFtQjtDQUFLO0FBRTlGLFNBQWdCLGNBQWMsT0FBMkI7Q0FDdkQsTUFBTSxrQkFBa0IsTUFBTSxRQUFRLFlBQVksR0FBRztBQUNyRCxRQUFPLGFBQWEsb0JBQW9CLGdCQUFnQixvQkFBb0I7O0FBRzlFLFNBQWdCLGlCQUNkLE9BQ0EsT0FNUTtDQUNSLE1BQU0sUUFBUSxjQUFjLE1BQU07Q0FDbEMsTUFBTSxjQUFjLE1BQU0scUJBQXFCO0NBQy9DLE1BQU0scUJBQXFCLE1BQU0sNEJBQTRCO0NBQzdELE1BQU0saUJBQWlCLEtBQUssSUFBSSxNQUFNLGNBQWMsY0FBYyxvQkFBb0IsRUFBRTtDQUd4RixNQUFNLEtBQUssTUFBTTtDQUNqQixNQUFNLGdCQUFnQixPQUFPLFVBQWEsTUFBTSxjQUFjLEdBQUc7Q0FDakUsTUFBTSxZQUFZLE1BQU0sZUFBZSxnQkFBZ0IsR0FBRyxrQkFBa0I7Q0FDNUUsTUFBTSxhQUFhLE1BQU0scUJBQXFCLGdCQUFnQixHQUFHLHdCQUF3QjtDQUN6RixNQUFNLHFCQUNILE1BQU0sNEJBQTRCLE1BQU0sZ0JBQ3hDLGdCQUFnQixHQUFHLGtCQUFrQjtDQUN4QyxNQUFNLGFBQWEsTUFBTSxnQkFBZ0IsZ0JBQWdCLEdBQUcsbUJBQW1CO0FBRS9FLFFBQ0csaUJBQWlCLE1BQWEsWUFDOUIsTUFBTSxlQUFlLE1BQWEsYUFDbEMsY0FBYyxNQUFhLGFBQzNCLHFCQUFxQixNQUFhIn0=
|
|
@@ -50,6 +50,9 @@ view_image = false
|
|
|
50
50
|
|
|
51
51
|
[skills]
|
|
52
52
|
include_instructions = false
|
|
53
|
+
|
|
54
|
+
[skills.bundled]
|
|
55
|
+
enabled = false
|
|
53
56
|
`;
|
|
54
57
|
var CodexAppServerWorker = class CodexAppServerWorker {
|
|
55
58
|
proc = null;
|
|
@@ -80,6 +83,10 @@ var CodexAppServerWorker = class CodexAppServerWorker {
|
|
|
80
83
|
this.cachedCapabilities = void 0;
|
|
81
84
|
this.cachedModels = void 0;
|
|
82
85
|
const cwd = `${this.codexHome}/cwd`;
|
|
86
|
+
rmSync(this.codexHome, {
|
|
87
|
+
recursive: true,
|
|
88
|
+
force: true
|
|
89
|
+
});
|
|
83
90
|
mkdirSync(cwd, { recursive: true });
|
|
84
91
|
writeFileSync(`${this.codexHome}/config.toml`, CODEX_CONFIG_TOML);
|
|
85
92
|
this.proc = spawn("codex", [
|
|
@@ -379,6 +386,14 @@ var CodexAppServerWorker = class CodexAppServerWorker {
|
|
|
379
386
|
this.activeTurnAbort = void 0;
|
|
380
387
|
abort?.(error);
|
|
381
388
|
}
|
|
389
|
+
cleanupGeneratedImages() {
|
|
390
|
+
try {
|
|
391
|
+
rmSync(`${this.codexHome}/generated_images`, {
|
|
392
|
+
recursive: true,
|
|
393
|
+
force: true
|
|
394
|
+
});
|
|
395
|
+
} catch {}
|
|
396
|
+
}
|
|
382
397
|
consumeTurnNotifications(threadId, model, ttftTracker = createTtftTracker()) {
|
|
383
398
|
return new Promise((resolve, reject) => {
|
|
384
399
|
let settled = false;
|
|
@@ -419,6 +434,7 @@ var CodexAppServerWorker = class CodexAppServerWorker {
|
|
|
419
434
|
if (settled) return;
|
|
420
435
|
settled = true;
|
|
421
436
|
cleanup();
|
|
437
|
+
if (result.imageAttempted) this.cleanupGeneratedImages();
|
|
422
438
|
resolve(result);
|
|
423
439
|
};
|
|
424
440
|
abort = finishWithError;
|
|
@@ -507,6 +523,7 @@ var CodexAppServerWorker = class CodexAppServerWorker {
|
|
|
507
523
|
if (settled) return;
|
|
508
524
|
settled = true;
|
|
509
525
|
cleanup();
|
|
526
|
+
if (result.imageAttempted) this.cleanupGeneratedImages();
|
|
510
527
|
cb.onComplete(result);
|
|
511
528
|
resolve();
|
|
512
529
|
};
|
|
@@ -574,6 +591,6 @@ var CodexAppServerWorker = class CodexAppServerWorker {
|
|
|
574
591
|
}
|
|
575
592
|
};
|
|
576
593
|
//#endregion
|
|
577
|
-
export { CodexAppServerWorker };
|
|
594
|
+
export { CODEX_CONFIG_TOML, CodexAppServerWorker };
|
|
578
595
|
|
|
579
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXgtd29ya2VyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9wcm92aWRlcnMvb3BlbmFpL2NvZGV4LXdvcmtlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biwgdHlwZSBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBta2RpclN5bmMsIHJlYWRGaWxlU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHsgdHlwZSBNb2RlbCB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Nb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBNb2RlbExpc3RSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Nb2RlbExpc3RSZXNwb25zZVwiO1xuaW1wb3J0IHsgdHlwZSBNb2RlbFByb3ZpZGVyQ2FwYWJpbGl0aWVzUmVhZFJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvZGV4LXByb3RvY29sL3YyL01vZGVsUHJvdmlkZXJDYXBhYmlsaXRpZXNSZWFkUmVzcG9uc2VcIjtcbmltcG9ydCB7IHR5cGUgVGhyZWFkSW5qZWN0SXRlbXNQYXJhbXMgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvdjIvVGhyZWFkSW5qZWN0SXRlbXNQYXJhbXNcIjtcbmltcG9ydCB7IHR5cGUgVGhyZWFkU3RhcnRQYXJhbXMgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvdjIvVGhyZWFkU3RhcnRQYXJhbXNcIjtcbmltcG9ydCB7IHR5cGUgVGhyZWFkU3RhcnRSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9UaHJlYWRTdGFydFJlc3BvbnNlXCI7XG5pbXBvcnQgeyB0eXBlIFRva2VuVXNhZ2VCcmVha2Rvd24gfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvdjIvVG9rZW5Vc2FnZUJyZWFrZG93blwiO1xuaW1wb3J0IHsgdHlwZSBUdXJuU3RhcnRQYXJhbXMgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvdjIvVHVyblN0YXJ0UGFyYW1zXCI7XG5pbXBvcnQgeyB0eXBlIFR1cm5TdGFydFJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvZGV4LXByb3RvY29sL3YyL1R1cm5TdGFydFJlc3BvbnNlXCI7XG5pbXBvcnQge1xuICBDT0RFWF9JTUFHRV9HRU5FUkFUSU9OX01PREVMLFxuICByZXNvbHZlSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyxcbn0gZnJvbSBcIi4uLy4uLy4uL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLWltYWdlLWdlbmVyYXRpb25cIjtcbmltcG9ydCB7IHR5cGUgSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9hcHBsaWNhdGlvbi9xZ3JpZC9xZ3JpZC50eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBTdHJlYW1DYWxsYmFja3MgYXMgQ29tbW9uU3RyZWFtQ2FsbGJhY2tzIH0gZnJvbSBcIi4uL2NvbW1vbi9wcm92aWRlci1kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVUdGZ0VHJhY2tlciB9IGZyb20gXCIuLi9jb21tb24vdHRmdFwiO1xuaW1wb3J0IHsgQ29kZXhScGNDbGllbnQgfSBmcm9tIFwiLi9jb2RleC1ycGNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwiY29kZXgtd29ya2VyXCJdKTtcblxuY29uc3QgTUFYX1JFU1RBUlRfQVRURU1QVFMgPSAzO1xuY29uc3QgUkVTVEFSVF9CQUNLT0ZGX0JBU0VfTVMgPSAxXzAwMDtcblxuLy8g4pSA4pSAIFR5cGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtlckNvbmZpZyB7XG4gIHRva2VuSWQ6IG51bWJlcjtcbiAgdG9rZW5OYW1lOiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIGFjY291bnRJZDogc3RyaW5nO1xuICBwbGFuVHlwZT86IHN0cmluZztcbiAgd29ya2VySW5kZXg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHVyblJlcXVlc3Qge1xuICBpbnB1dDogVHVyblN0YXJ0UGFyYW1zW1wiaW5wdXRcIl07XG4gIG91dHB1dFNjaGVtYT86IFR1cm5TdGFydFBhcmFtc1tcIm91dHB1dFNjaGVtYVwiXTtcbiAgZWZmb3J0Pzogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgZGV2ZWxvcGVySW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuICBoaXN0b3J5PzogVGhyZWFkSW5qZWN0SXRlbXNQYXJhbXNbXCJpdGVtc1wiXTtcbiAgdmVyYm9zaXR5Pzogc3RyaW5nO1xuICByZWFzb25pbmdTdW1tYXJ5Pzogc3RyaW5nO1xuICBzZXJ2aWNlVGllcj86IHN0cmluZztcbiAgLy8g7J20IHR1cm4g7JeQ7IScIGNvZGV4IOuCtOyepSBpbWFnZV9nZW5lcmF0aW9uIHRvb2wg7J2EIOy8oOuLpC5cbiAgLy8gdGhyZWFkIOuLqOychOuhnOunjCDtmZzshLHtmZTrkJjrqbAo7KCE7JetIGNvbmZpZyDripQgaW1hZ2VfZ2VuZXJhdGlvbj1mYWxzZSDsnKDsp4ApLFxuICAvLyDtlIzrnpjqt7gg7JeG64qUIOyalOyyreydgCB0b29sIOq1rOyEseydtCDtmITtlonqs7wg64+Z7J287ZWY64ukLlxuICBpbWFnZUdlbmVyYXRpb24/OiBib29sZWFuO1xuICBpbWFnZUdlbmVyYXRpb25PcHRpb25zPzogSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucztcbn1cblxuLy8g7ZWcIHR1cm4g7JeQ7IScIOyDneyEseuQnCDsnbTrr7jsp4Ag7ZWY64KYLiBjb2RleCBpbWFnZUdlbmVyYXRpb24gaXRlbSDsl5DshJwg7YyM7IOdLlxuZXhwb3J0IGludGVyZmFjZSBUdXJuSW1hZ2Uge1xuICBkYXRhOiBzdHJpbmc7IC8vIGJhc2U2NCBpbWFnZSBwYXlsb2FkIChpdGVtLnJlc3VsdClcbiAgcmV2aXNlZFByb21wdDogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUdXJuUmVzdWx0IHtcbiAgdGV4dDogc3RyaW5nO1xuICB1c2FnZTogVG9rZW5Vc2FnZUJyZWFrZG93bjtcbiAgZHVyYXRpb25NczogbnVtYmVyO1xuICB0dGZ0TXM6IG51bWJlciB8IG51bGw7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIC8vIOydtOuvuOyngCB0dXJuIOyXkOyEnOunjCDssYTsm4zsp5AuIOyZhOyEsSDsnbTrr7jsp4DqsIAg7JeG7Jy866m0IOu5iCDrsLDsl7QvdW5kZWZpbmVkLlxuICBpbWFnZXM/OiBUdXJuSW1hZ2VbXTtcbiAgLy8g7J2066+47KeAIHRvb2wg7Zi47Lac7J20IOq0gOy4oeuQkOuKlOyngChpdGVtL3N0YXJ0ZWQg65iQ64qUIGhhc1Jlc3VsdCDsnojripQgY29tcGxldGVkKS5cbiAgLy8g7J2066+47KeAIDDqsJzsnbwg65WMIOyerOyLnOuPhCDqsIDriqUg7Iuk7YyoKFwi7Iuc64+EIO2bhCDrr7jsmYTshLFcIinsmYAg7J6s7Iuc64+EIOustOydtShcInRvb2wg66+47Zi47LacXCIp7J2EIOq1rOu2hC5cbiAgaW1hZ2VBdHRlbXB0ZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBTdHJlYW1DYWxsYmFja3MgPSBDb21tb25TdHJlYW1DYWxsYmFja3M8VHVyblJlc3VsdD47XG5cbnR5cGUgUmVmcmVzaGFibGVXb3JrZXJDcmVkZW50aWFscyA9IFBpY2s8V29ya2VyQ29uZmlnLCBcImFjY2Vzc1Rva2VuXCIgfCBcImFjY291bnRJZFwiIHwgXCJwbGFuVHlwZVwiPjtcbnR5cGUgQWN0aXZlVHVybkFib3J0ID0gKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcblxuLy8gdGhyZWFkL3N0YXJ0IOqzte2GtSDsmLXshZhcbmNvbnN0IFRIUkVBRF9ERUZBVUxUUyA9IHtcbiAgc2FuZGJveDogXCJyZWFkLW9ubHlcIixcbiAgYXBwcm92YWxQb2xpY3k6IFwibmV2ZXJcIixcbiAgY29uZmlnOiB7XG4gICAgYXBwczogeyBfZGVmYXVsdDogeyBlbmFibGVkOiBmYWxzZSwgZGVzdHJ1Y3RpdmVfZW5hYmxlZDogZmFsc2UsIG9wZW5fd29ybGRfZW5hYmxlZDogZmFsc2UgfSB9LFxuICB9LFxufSBzYXRpc2ZpZXMgUGFydGlhbDxUaHJlYWRTdGFydFBhcmFtcz47XG5cbmNvbnN0IEJBU0VfSU5TVFJVQ1RJT05TID1cbiAgXCJZb3UgYXJlIGEgaGVscGZ1bCBhc3Npc3RhbnQuIERvIG5vdCB1c2UgYW55IHRvb2xzIHN1Y2ggYXMgc2hlbGwsIGZpbGUgb3BlcmF0aW9ucywgb3Igd2ViIHNlYXJjaC4gUmVzcG9uZCB3aXRoIHRleHQgb25seS5cIjtcblxuLy8g7J2066+47KeAIOyDneyEsSB0aHJlYWQg7KCE7JqpIGluc3RydWN0aW9uLiDquLDrs7ggQkFTRV9JTlNUUlVDVElPTlMg7J2YIFwidGV4dCBvbmx5XCIg7KeA7Iuc6rCAXG4vLyDsi6Tsp4gg7Ja17KCc6riw7J2066+A66GcKGNvZGV4IGltYWdlX2dlbmVyYXRpb24gZmVhdHVyZSDripQgZGVmYXVsdC1vbiksIOydtOuvuOyngCDrqqjrk5zsl5DshJzripRcbi8vIGltYWdlX2dlbmVyYXRpb24gdG9vbCDsgqzsmqnsnYQg66qF7Iuc7KCB7Jy866GcIO2XiOyaqe2VnOuLpC4gc2hlbGwvd2ViIOuTsSDrgpjrqLjsp4AgdG9vbCDsnYAg7Jes7KCE7Z6IIOq4iOyngC5cbmNvbnN0IElNQUdFX0JBU0VfSU5TVFJVQ1RJT05TID1cbiAgXCJZb3UgYXJlIGEgaGVscGZ1bCBhc3Npc3RhbnQuIFdoZW4gYXNrZWQgdG8gY3JlYXRlIGFuIGltYWdlLCB1c2UgdGhlIGltYWdlX2dlbmVyYXRpb24gdG9vbCB0byBwcm9kdWNlIGl0LiBEbyBub3QgdXNlIGFueSBvdGhlciB0b29scyBzdWNoIGFzIHNoZWxsLCBmaWxlIG9wZXJhdGlvbnMsIG9yIHdlYiBzZWFyY2guXCI7XG5cbmZ1bmN0aW9uIGltYWdlQmFzZUluc3RydWN0aW9ucyhvcHRpb25zOiBJbWFnZUdlbmVyYXRpb25PcHRpb25zIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgcmV0dXJuIGAke0lNQUdFX0JBU0VfSU5TVFJVQ1RJT05TfSBSZXF1ZXN0ZWQgaW1hZ2Ugb3V0cHV0OiBtb2RlbCAke0NPREVYX0lNQUdFX0dFTkVSQVRJT05fTU9ERUx9LCBxdWFsaXR5ICR7cmVzb2x2ZWQucXVhbGl0eX0sIHNpemUgJHtyZXNvbHZlZC5zaXplfSwgZm9ybWF0IHBuZy5gO1xufVxuXG4vLyDsi6TsuKHsg4Eg7JmE66OMIGl0ZW0g7J2YIHN0YXR1cyDripQgXCJnZW5lcmF0aW5nXCIg7Jy866GcIOyZgOuPhCByZXN1bHQg7JeQIOyZhOyEsSBiYXNlNjQg6rCAIOyLpOumsOuLpC5cbi8vIOuUsOudvOyEnCDsmYTshLEg7YyQ7KCV7J2AIHN0YXR1cyDrrLjsnpDsl7TsnbQg7JWE64uI6528IHJlc3VsdCDsnZgg7Jyg7Zqo7ISxKOu5hOyWtOyeiOyngCDslYrqs6Ag7ZGc7KSAIGJhc2U2NCDsnbjsp4Ap7Jy866GcIO2VnOuLpC5cbmZ1bmN0aW9uIGlzQ29tcGxldGVkSW1hZ2VSZXN1bHQocmVzdWx0OiB1bmtub3duKTogcmVzdWx0IGlzIHN0cmluZyB7XG4gIGlmICh0eXBlb2YgcmVzdWx0ICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHRyaW1tZWQgPSByZXN1bHQudHJpbSgpO1xuICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDAgfHwgdHJpbW1lZC5zdGFydHNXaXRoKFwiZGF0YTpcIikpIHJldHVybiBmYWxzZTtcbiAgaWYgKCEvXltBLVphLXowLTkrL10rPXswLDJ9JC8udGVzdCh0cmltbWVkKSB8fCB0cmltbWVkLmxlbmd0aCAlIDQgIT09IDApIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIGNvZGV46rCAIOunpCDsmpTssq3sl5Ag7J6Q64+ZIOyjvOyehe2VmOuKlCDrgrTsnqUgdG9vbChzaGVsbC93ZWJfc2VhcmNoL3NwYXduX2FnZW50IOuTsSAxNOqwnCnqs7xcbi8vIGluc3RydWN0aW9uIOu4lOuhnShwZXJtaXNzaW9ucy9lbnZpcm9ubWVudF9jb250ZXh0L3NraWxscywgfjEwS0Ip7J2EIOu5hO2ZnOyEse2ZlFxuLy8gJENPREVYX0hPTUUvY29uZmlnLnRvbWwg66GcIOyNqOuEo+ycvOuptCBjb2RleCDrtoDtjIUg7IucIHNjYW5cbi8vIO2GteygnOu2iOqwgDogdXBkYXRlX3BsYW4vcmVxdWVzdF91c2VyX2lucHV0XG5jb25zdCBDT0RFWF9DT05GSUdfVE9NTCA9IGB3ZWJfc2VhcmNoID0gXCJkaXNhYmxlZFwiXG5pbmNsdWRlX3Blcm1pc3Npb25zX2luc3RydWN0aW9ucyA9IGZhbHNlXG5pbmNsdWRlX2FwcHNfaW5zdHJ1Y3Rpb25zID0gZmFsc2VcbmluY2x1ZGVfZW52aXJvbm1lbnRfY29udGV4dCA9IGZhbHNlXG5cbltmZWF0dXJlc11cbnNoZWxsX3Rvb2wgPSBmYWxzZVxudG9vbF9zZWFyY2ggPSBmYWxzZVxudG9vbF9zdWdnZXN0ID0gZmFsc2Vcbm11bHRpX2FnZW50ID0gZmFsc2VcbmltYWdlX2dlbmVyYXRpb24gPSBmYWxzZVxuYXBwcyA9IGZhbHNlXG5wbHVnaW5zID0gZmFsc2VcblxuW3Rvb2xzXVxudmlld19pbWFnZSA9IGZhbHNlXG5cbltza2lsbHNdXG5pbmNsdWRlX2luc3RydWN0aW9ucyA9IGZhbHNlXG5gO1xuXG4vLyDilIDilIAgV29ya2VyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgY2xhc3MgQ29kZXhBcHBTZXJ2ZXJXb3JrZXIge1xuICBwcml2YXRlIHByb2M6IENoaWxkUHJvY2VzcyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJwYzogQ29kZXhScGNDbGllbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb2RleEhvbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZXN0YXJ0QXR0ZW1wdHMgPSAwO1xuICBwcml2YXRlIHJlYWR5ID0gZmFsc2U7XG4gIHByaXZhdGUgZGVzdHJveWVkID0gZmFsc2U7XG4gIHByaXZhdGUgYnVzeSA9IGZhbHNlO1xuICBwcml2YXRlIGFjdGl2ZVR1cm5BYm9ydD86IEFjdGl2ZVR1cm5BYm9ydDtcbiAgYWN0aXZlID0gdHJ1ZTtcbiAgb25SZWFkeT86ICgpID0+IHZvaWQ7XG4gIC8vIHJlc3RhcnQg7IucIHJwYyDqsJ3ssrTqsIAg7IOI66GcIOyDneyEseuQmOuvgOuhnCwg7ZW465Ok65+s66W8IOuztOq0gO2WiOuLpOqwgCDrp6Qgc3Bhd27rp4jri6Qg7J6s67CU7J2465Sp7ZWc64ukLlxuICBzZXJ2ZXJSZXF1ZXN0SGFuZGxlcj86IChtZXRob2Q6IHN0cmluZywgcGFyYW1zOiB1bmtub3duKSA9PiBQcm9taXNlPHVua25vd24+O1xuXG4gIC8vIHRocmVhZCDsnqzsgqzsmqkocHJvbXB0IGNhY2hlKTogd29ya2VyIOqwgCDsg53shLHtlZwgdGhyZWFkIOuTpOydmCDrqZTtg4AuXG4gIC8vIGVwaGVtZXJhbCB0aHJlYWQg64qUIOydtCDtlITroZzshLjsiqQg66mU66qo66as7JeQ66eMIOyhtOyerO2VmOuvgOuhnCByZXN0YXJ0IOyLnCDsoITrtoAg66y07ZqoLlxuICBwcml2YXRlIHRocmVhZE1ldGEgPSBuZXcgTWFwPHN0cmluZywgeyBsYXN0VXNlZEF0OiBudW1iZXIgfT4oKTtcbiAgLy8gc3Bhd24g7Lm07Jq07YSwLiByZXN0YXJ0IOuniOuLpCDspp3qsIAg4oaSIGNvbnYg7ZW465Ok7J2YIGVwb2NoIOyZgCDrjIDsobDtlbQgc3RhbGUgdGhyZWFkIOqwkOyngC5cbiAgcHJpdmF0ZSBlcG9jaENvdW50ZXIgPSAwO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUSFJFQURfSURMRV9UVExfTVMgPSAxMCAqIDYwXzAwMDtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTUFYX1RIUkVBRFNfUEVSX1dPUktFUiA9IDE2O1xuICAvLyDsnbTrr7jsp4Ag6rKM7J207Yq4IOqygOymneyaqSDsupDsi5wuIHNwYXduIOuLqOychOuhnCDrrLTtmqjtmZQocmVzdGFydCDsi5wgY2xlYXIpLlxuICAvLyBjYXBhYmlsaXR5IOuKlCBwcm92aWRlciDri6jsnIQgYm9vbGVhbiwg66qo6424IOupgO2LsOuqqOuLrCDsl6zrtoDripQgbW9kZWwvbGlzdCDroZwg7ZmV7J24LlxuICBwcml2YXRlIGNhY2hlZENhcGFiaWxpdGllcz86IE1vZGVsUHJvdmlkZXJDYXBhYmlsaXRpZXNSZWFkUmVzcG9uc2U7XG4gIHByaXZhdGUgY2FjaGVkTW9kZWxzPzogTWFwPHN0cmluZywgTW9kZWw+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBXb3JrZXJDb25maWcpIHtcbiAgICBjb25zdCBzdWZmaXggPSBjb25maWcud29ya2VySW5kZXggIT09IHVuZGVmaW5lZCA/IGAtJHtjb25maWcud29ya2VySW5kZXh9YCA6IFwiXCI7XG4gICAgdGhpcy5jb2RleEhvbWUgPSBgL3RtcC9xZ3JpZC1jb2RleC8ke2NvbmZpZy50b2tlbklkfSR7c3VmZml4fWA7XG4gIH1cblxuICAvLyDilIDilIAgTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByaXZhdGUgYXN5bmMgc3Bhd25BbmRJbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIOyDiCBjb2RleCDtlITroZzshLjsiqQg4oaSIOq4sOyhtCBlcGhlbWVyYWwgdGhyZWFkIOyghOu2gCDrrLTtmqguIGVwb2NoIOymneqwgOuhnCBzdGFsZSDqsJDsp4AuXG4gICAgdGhpcy5lcG9jaENvdW50ZXIrKztcbiAgICB0aGlzLnRocmVhZE1ldGEuY2xlYXIoKTtcbiAgICAvLyDsg4gg7ZSE66Gc7IS47IqkIOKGkiBjYXBhYmlsaXR5L21vZGVsIOy6kOyLnCDrrLTtmqgo66Gc6re47J24IOqzhOyglS/rsoTsoITsnbQg67CU64CM7JeI7J2EIOyImCDsnojsnYwpLlxuICAgIHRoaXMuY2FjaGVkQ2FwYWJpbGl0aWVzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2FjaGVkTW9kZWxzID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGN3ZCA9IGAke3RoaXMuY29kZXhIb21lfS9jd2RgO1xuICAgIG1rZGlyU3luYyhjd2QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIGNvZGV4IOuCtOyepSB0b29sL3dlYl9zZWFyY2gvaW5zdHJ1Y3Rpb24g67iU66GdIOu5hO2ZnOyEse2ZlFxuICAgIHdyaXRlRmlsZVN5bmMoYCR7dGhpcy5jb2RleEhvbWV9L2NvbmZpZy50b21sYCwgQ09ERVhfQ09ORklHX1RPTUwpO1xuXG4gICAgdGhpcy5wcm9jID0gc3Bhd24oXCJjb2RleFwiLCBbXCJhcHAtc2VydmVyXCIsIFwiLS1saXN0ZW5cIiwgXCJzdGRpbzovL1wiXSwge1xuICAgICAgc3RkaW86IFtcInBpcGVcIiwgXCJwaXBlXCIsIFwicGlwZVwiXSxcbiAgICAgIGN3ZCxcbiAgICAgIGVudjoge1xuICAgICAgICBQQVRIOiBwcm9jZXNzLmVudi5QQVRILFxuICAgICAgICBUTVBESVI6IHByb2Nlc3MuZW52LlRNUERJUixcbiAgICAgICAgQ09ERVhfSE9NRTogdGhpcy5jb2RleEhvbWUsXG4gICAgICAgIC8vIGVudmlyb25tZW50IOu5hO2ZnOyEse2ZlCDihpIgaGFzX2Vudmlyb25tZW50PWZhbHNlIOKGkiBzaGVsbC9hcHBseV9wYXRjaC92aWV3X2ltYWdlIOygnOqxsFxuICAgICAgICBDT0RFWF9FWEVDX1NFUlZFUl9VUkw6IFwibm9uZVwiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMucHJvYy5vbihcImV4aXRcIiwgKGNvZGUpID0+IHtcbiAgICAgIGxvZ2dlci5pbmZvKGB3b3JrZXIgJHt0aGlzLmNvbmZpZy50b2tlbk5hbWV9IGV4aXRlZCAoY29kZT0ke2NvZGV9KWApO1xuICAgICAgdGhpcy5mYWlsQWN0aXZlVHVybihcbiAgICAgICAgbmV3IEVycm9yKGBjb2RleCB3b3JrZXIgZXhpdGVkIHdoaWxlIHR1cm4gd2FzIHJ1bm5pbmcgKGNvZGU9JHtjb2RlID8/IFwidW5rbm93blwifSlgKSxcbiAgICAgICk7XG4gICAgICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gICAgICB0aGlzLnJwYyA9IG51bGw7XG4gICAgICB0aGlzLnByb2MgPSBudWxsO1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkgdGhpcy5zY2hlZHVsZVJlc3RhcnQoKTtcbiAgICB9KTtcblxuICAgIHRoaXMucnBjID0gbmV3IENvZGV4UnBjQ2xpZW50KHRoaXMucHJvYyk7XG4gICAgLy8gcmVzdGFydCDtm4Tsl5Drj4QgcmVmcmVzaCBzZXJ2ZXItcmVxdWVzdCDtlbjrk6Trn6zrpbwg7Jyg7KeAICjsl4bsnLzrqbQgY29kZXgg7Yag7YGwIO2ajOyghCDsi6TtjKgg4oaSIHNlc3Npb24gZXhwaXJlZClcbiAgICB0aGlzLmJpbmRTZXJ2ZXJSZXF1ZXN0SGFuZGxlcigpO1xuXG4gICAgYXdhaXQgdGhpcy5ycGMucmVxdWVzdChcImluaXRpYWxpemVcIiwge1xuICAgICAgY2xpZW50SW5mbzogeyBuYW1lOiBcInFncmlkXCIsIHZlcnNpb246IFwiMS4wLjBcIiB9LFxuICAgICAgY2FwYWJpbGl0aWVzOiB7IGV4cGVyaW1lbnRhbEFwaTogdHJ1ZSB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB3YWl0Rm9yTG9naW5Db21wbGV0ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoXCJsb2dpbiB0aW1lb3V0XCIpKSwgMTIwXzAwMCk7XG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJhY2NvdW50L2xvZ2luL2NvbXBsZXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIGlmIChwLnN1Y2Nlc3MpIHJlc29sdmUoKTtcbiAgICAgICAgZWxzZSByZWplY3QobmV3IEVycm9yKGBsb2dpbiBmYWlsZWQ6ICR7cC5lcnJvciA/PyBcInVua25vd25cIn1gKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zcGF3bkFuZEluaXQoKTtcblxuICAgIGF3YWl0IHRoaXMucnBjIS5yZXF1ZXN0KFwiYWNjb3VudC9sb2dpbi9zdGFydFwiLCB7XG4gICAgICB0eXBlOiBcImNoYXRncHRBdXRoVG9rZW5zXCIsXG4gICAgICBhY2Nlc3NUb2tlbjogdGhpcy5jb25maWcuYWNjZXNzVG9rZW4sXG4gICAgICBjaGF0Z3B0QWNjb3VudElkOiB0aGlzLmNvbmZpZy5hY2NvdW50SWQsXG4gICAgICAuLi4odGhpcy5jb25maWcucGxhblR5cGUgPyB7IGNoYXRncHRQbGFuVHlwZTogdGhpcy5jb25maWcucGxhblR5cGUgfSA6IHt9KSxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMud2FpdEZvckxvZ2luQ29tcGxldGVkKCk7XG4gICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgdGhpcy5yZXN0YXJ0QXR0ZW1wdHMgPSAwO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRCcm93c2VyTG9naW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLnNwYXduQW5kSW5pdCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucnBjIS5yZXF1ZXN0PHsgYXV0aFVybDogc3RyaW5nIH0+KFwiYWNjb3VudC9sb2dpbi9zdGFydFwiLCB7XG4gICAgICB0eXBlOiBcImNoYXRncHRcIixcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbyhgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfSBicm93c2VyIGxvZ2luIHN0YXJ0ZWRgKTtcbiAgICByZXR1cm4gcmVzdWx0LmF1dGhVcmw7XG4gIH1cblxuICBhc3luYyB3YWl0Rm9yQnJvd3NlckxvZ2luQ29tcGxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yTG9naW5Db21wbGV0ZWQoKTtcbiAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICB0aGlzLnJlc3RhcnRBdHRlbXB0cyA9IDA7XG4gICAgbG9nZ2VyLmluZm8oYHdvcmtlciAke3RoaXMuY29uZmlnLnRva2VuTmFtZX0gYnJvd3NlciBsb2dpbiBjb21wbGV0ZWRgKTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRNYW5hZ2VkQ3JlZGVudGlhbHMoKTogUHJvbWlzZTx7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgICBpZFRva2VuPzogc3RyaW5nO1xuICAgIGFjY291bnRJZDogc3RyaW5nO1xuICB9IHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXcgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhgJHt0aGlzLmNvZGV4SG9tZX0vYXV0aC5qc29uYCwgXCJ1dGYtOFwiKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY2Nlc3NUb2tlbjogcmF3LnRva2Vucz8uYWNjZXNzX3Rva2VuID8/IFwiXCIsXG4gICAgICAgIHJlZnJlc2hUb2tlbjogcmF3LnRva2Vucz8ucmVmcmVzaF90b2tlbiA/PyBcIlwiLFxuICAgICAgICBpZFRva2VuOiByYXcudG9rZW5zPy5pZF90b2tlbixcbiAgICAgICAgYWNjb3VudElkOiByYXcudG9rZW5zPy5hY2NvdW50X2lkID8/IFwiXCIsXG4gICAgICB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMga2lsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgdGhpcy5yZWFkeSA9IGZhbHNlO1xuICAgIHRoaXMuZmFpbEFjdGl2ZVR1cm4obmV3IEVycm9yKFwiY29kZXggd29ya2VyIHN0b3BwZWRcIikpO1xuICAgIHRoaXMucnBjPy5kZXN0cm95KCk7XG5cbiAgICBpZiAodGhpcy5wcm9jKSB7XG4gICAgICB0aGlzLnByb2Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvYz8ua2lsbChcIlNJR0tJTExcIik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCAzXzAwMCk7XG4gICAgICAgIHRoaXMucHJvYyEub24oXCJleGl0XCIsICgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcm1TeW5jKHRoaXMuY29kZXhIb21lLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG5cbiAgZ2V0IGlzUmVhZHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHkgJiYgIXRoaXMuZGVzdHJveWVkO1xuICB9XG4gIGdldCBpc0Rlc3Ryb3llZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXN0cm95ZWQ7XG4gIH1cbiAgZ2V0IHRva2VuSWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcudG9rZW5JZDtcbiAgfVxuICBnZXQgd29ya2VySW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcud29ya2VySW5kZXggPz8gMDtcbiAgfVxuICBnZXQgdG9rZW5OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnRva2VuTmFtZTtcbiAgfVxuXG4gIGNhblJldXNlRm9yVG9rZW4oX3Rva2VuTmFtZTogc3RyaW5nLCBjcmVkZW50aWFsczogUmVmcmVzaGFibGVXb3JrZXJDcmVkZW50aWFscyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbmZpZy5hY2NvdW50SWQgPT09IGNyZWRlbnRpYWxzLmFjY291bnRJZCAmJlxuICAgICAgKHRoaXMuY29uZmlnLnBsYW5UeXBlID8/IHVuZGVmaW5lZCkgPT09IChjcmVkZW50aWFscy5wbGFuVHlwZSA/PyB1bmRlZmluZWQpXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVRva2VuU3RhdGUodG9rZW5OYW1lOiBzdHJpbmcsIGNyZWRlbnRpYWxzOiBSZWZyZXNoYWJsZVdvcmtlckNyZWRlbnRpYWxzKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcudG9rZW5OYW1lID0gdG9rZW5OYW1lO1xuICAgIHRoaXMuY29uZmlnLmFjY2Vzc1Rva2VuID0gY3JlZGVudGlhbHMuYWNjZXNzVG9rZW47XG4gICAgdGhpcy5jb25maWcuYWNjb3VudElkID0gY3JlZGVudGlhbHMuYWNjb3VudElkO1xuICAgIGlmIChjcmVkZW50aWFscy5wbGFuVHlwZSkge1xuICAgICAgdGhpcy5jb25maWcucGxhblR5cGUgPSBjcmVkZW50aWFscy5wbGFuVHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHRoaXMuY29uZmlnLnBsYW5UeXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBSYXRlIGxpbWl0cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBhc3luYyBnZXRSYXRlTGltaXRzKCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGlmICghdGhpcy5ycGMgfHwgIXRoaXMucmVhZHkpIHRocm93IG5ldyBFcnJvcihcIndvcmtlciBub3QgcmVhZHlcIik7XG4gICAgcmV0dXJuIHRoaXMucnBjLnJlcXVlc3QoXCJhY2NvdW50L3JhdGVMaW1pdHMvcmVhZFwiLCB7fSk7XG4gIH1cblxuICAvLyDilIDilIAgSW1hZ2UgZ2VuZXJhdGlvbiBnYXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyDsnbTrr7jsp4AgdG9vbCDsnYAgY29kZXgg7JeQ7IScIChBdXRoTW9kZTo6Q2hhdGdwdCkgQU5EIChpbWFnZV9nZW5lcmF0aW9uIGZlYXR1cmUpXG4gIC8vIEFORCAo66qo6424IOupgO2LsOuqqOuLrCkgM+ykkSDqsozsnbTtirjri6QuIHFncmlkIOuKlCBPQXV0aCDsoITsmqnsnbTqs6AgZmVhdHVyZSDripQgdGhyZWFkIOyXkOyEnFxuICAvLyDsvJzrr4DroZwsIGRpc3BhdGNoZXIg6rCAIOyCrOyghCDqsoDspp3tlaAg64Ko7J2AIOyhsOqxtOydgCBjYXBhYmlsaXR5KHByb3ZpZGVyKSArIOuqqOuNuCDrqYDti7Drqqjri6zsnbTri6QuXG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkQ2FwYWJpbGl0aWVzKCk6IFByb21pc2U8TW9kZWxQcm92aWRlckNhcGFiaWxpdGllc1JlYWRSZXNwb25zZT4ge1xuICAgIGlmICghdGhpcy5ycGMgfHwgIXRoaXMucmVhZHkpIHRocm93IG5ldyBFcnJvcihcIndvcmtlciBub3QgcmVhZHlcIik7XG4gICAgaWYgKCF0aGlzLmNhY2hlZENhcGFiaWxpdGllcykge1xuICAgICAgdGhpcy5jYWNoZWRDYXBhYmlsaXRpZXMgPSBhd2FpdCB0aGlzLnJwYy5yZXF1ZXN0PE1vZGVsUHJvdmlkZXJDYXBhYmlsaXRpZXNSZWFkUmVzcG9uc2U+KFxuICAgICAgICBcIm1vZGVsUHJvdmlkZXIvY2FwYWJpbGl0aWVzL3JlYWRcIixcbiAgICAgICAge30sXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jYWNoZWRDYXBhYmlsaXRpZXM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRNb2RlbHMoKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBNb2RlbD4+IHtcbiAgICBpZiAoIXRoaXMucnBjIHx8ICF0aGlzLnJlYWR5KSB0aHJvdyBuZXcgRXJyb3IoXCJ3b3JrZXIgbm90IHJlYWR5XCIpO1xuICAgIGlmICghdGhpcy5jYWNoZWRNb2RlbHMpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMucnBjLnJlcXVlc3Q8TW9kZWxMaXN0UmVzcG9uc2U+KFwibW9kZWwvbGlzdFwiLCB7fSk7XG4gICAgICB0aGlzLmNhY2hlZE1vZGVscyA9IG5ldyBNYXAocmVzLmRhdGEubWFwKChtKSA9PiBbbS5tb2RlbCwgbV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkTW9kZWxzO1xuICB9XG5cbiAgLy8g7KO87Ja07KeEIOuqqOuNuCjrr7jsp4DsoJXsnbTrqbQgdGhyZWFkIOq4sOuzuCDrqqjrjbgp66GcIOydtOuvuOyngCDsg53shLHsnbQg6rCA64ql7ZWc7KeAIOqygOymnS5cbiAgLy8g67aI6rCAIOyCrOycoOulvCDrrLjsnpDsl7TroZwg67CY7ZmY7ZWY6rOgLCDqsIDriqXtlZjrqbQgbnVsbCDsnYQg67CY7ZmY7ZWc64ukLlxuICBhc3luYyBjaGVja0ltYWdlR2VuZXJhdGlvblN1cHBvcnQobW9kZWw/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBpZiAoIXRoaXMucnBjIHx8ICF0aGlzLnJlYWR5KSByZXR1cm4gXCJ3b3JrZXIgbm90IHJlYWR5XCI7XG4gICAgY29uc3QgY2FwcyA9IGF3YWl0IHRoaXMubG9hZENhcGFiaWxpdGllcygpO1xuICAgIGlmICghY2Fwcy5pbWFnZUdlbmVyYXRpb24pIHJldHVybiBcInByb3ZpZGVyIGRvZXMgbm90IHN1cHBvcnQgaW1hZ2UgZ2VuZXJhdGlvblwiO1xuICAgIC8vIOuqqOuNuCDrqYDti7Drqqjri6wg6rKA7KadLiBtb2RlbCDrr7jsp4DsoJXsnbTrqbQgcHJvdmlkZXIgY2FwYWJpbGl0eSDrp4zsnLzroZwg7Ya16rO87Iuc7YKk6rOgLFxuICAgIC8vIOyLpOygnCDsoIHsmqkg66qo64247J2YIOupgO2LsOuqqOuLrCDsl6zrtoDripQgdHVybiDsi6Ttlokg6rKw6rO8KOydtOuvuOyngCAw6rCcIOKGkiBVMyDsi6TtjKgg67aE66WYKeqwgCDsnqHripTri6QuXG4gICAgaWYgKG1vZGVsKSB7XG4gICAgICBjb25zdCBtb2RlbHMgPSBhd2FpdCB0aGlzLmxvYWRNb2RlbHMoKTtcbiAgICAgIGNvbnN0IGluZm8gPSBtb2RlbHMuZ2V0KG1vZGVsKTtcbiAgICAgIGlmIChpbmZvICYmICFpbmZvLmlucHV0TW9kYWxpdGllcy5pbmNsdWRlcyhcImltYWdlXCIpKSB7XG4gICAgICAgIHJldHVybiBgbW9kZWwgJHttb2RlbH0gaXMgbm90IG11bHRpbW9kYWwgKG5vIGltYWdlIGlucHV0IG1vZGFsaXR5KWA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8g4pSA4pSAIFNlcnZlci1yZXF1ZXN0IGRlbGVnYXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgc2V0U2VydmVyUmVxdWVzdEhhbmRsZXIoaGFuZGxlcjogKG1ldGhvZDogc3RyaW5nLCBwYXJhbXM6IHVua25vd24pID0+IFByb21pc2U8dW5rbm93bj4pOiB2b2lkIHtcbiAgICB0aGlzLnNlcnZlclJlcXVlc3RIYW5kbGVyID0gaGFuZGxlcjtcbiAgICB0aGlzLmJpbmRTZXJ2ZXJSZXF1ZXN0SGFuZGxlcigpO1xuICB9XG5cbiAgLy8gc3Bhd25BbmRJbml07JeQ7IScIHJwYyDsg53shLEg7KeB7ZuEIO2YuOy2nC4gcmVzdGFydOuhnCBycGPqsIAg7IOI66GcIOunjOuTpOyWtOyguOuPhCDtlbjrk6Trn6zqsIAg7Jyg7KeA65Cc64ukLlxuICBiaW5kU2VydmVyUmVxdWVzdEhhbmRsZXIoKTogdm9pZCB7XG4gICAgY29uc3QgaGFuZGxlciA9IHRoaXMuc2VydmVyUmVxdWVzdEhhbmRsZXI7XG4gICAgaWYgKCFoYW5kbGVyKSByZXR1cm47XG4gICAgdGhpcy5ycGM/Lm9uU2VydmVyUmVxdWVzdChcImFjY291bnQvY2hhdGdwdEF1dGhUb2tlbnMvcmVmcmVzaFwiLCAocGFyYW1zKSA9PlxuICAgICAgaGFuZGxlcihcImFjY291bnQvY2hhdGdwdEF1dGhUb2tlbnMvcmVmcmVzaFwiLCBwYXJhbXMpLFxuICAgICk7XG4gIH1cblxuICAvLyDilIDilIAgVHVybiBleGVjdXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgdHJ5QWNxdWlyZVR1cm4oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuYnVzeSkgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmVsZWFzZVR1cm4oKTogdm9pZCB7XG4gICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gIH1cbiAgZ2V0IGhhc0NhcGFjaXR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5idXN5O1xuICB9XG5cbiAgLy8g7IOIIHRocmVhZCDsg53shLEgKHRocmVhZC9zdGFydCArIO2VhOyalCDsi5wgaGlzdG9yeSBpbmplY3QpLiDssqsgdHVybiAvIO2PtOuwsSDqsr3roZzsmqkuXG4gIC8vIO2bhOyGjSB0dXJuIOydgCBjcmVhdGVUaHJlYWQg7JeG7J20IHN0YXJ0VHVybk9uVGhyZWFkIOunjCDtmLjstpztlbQgY29udmVyc2F0aW9uX2lkIOulvCDqs6DsoJXtlZzri6QuXG4gIC8vIHRocmVhZCDsnZgg6riw67O4IG1vZGVsIOuPhCDrsJjtmZggKHJlcS5tb2RlbCDrr7jsp4DsoJUg7IucIGZhbGxiYWNrKS5cbiAgYXN5bmMgY3JlYXRlVGhyZWFkKHJlcTogVHVyblJlcXVlc3QpOiBQcm9taXNlPHsgdGhyZWFkSWQ6IHN0cmluZzsgbW9kZWw6IHN0cmluZyB9PiB7XG4gICAgaWYgKCF0aGlzLnJwYyB8fCAhdGhpcy5yZWFkeSkgdGhyb3cgbmV3IEVycm9yKFwid29ya2VyIG5vdCByZWFkeVwiKTtcbiAgICB0aGlzLnN3ZWVwSWRsZVRocmVhZHMoKTtcblxuICAgIGNvbnN0IHRocmVhZENvbmZpZzogVGhyZWFkU3RhcnRQYXJhbXNbXCJjb25maWdcIl0gPSB7XG4gICAgICAuLi5USFJFQURfREVGQVVMVFMuY29uZmlnLFxuICAgICAgLi4uKHJlcS52ZXJib3NpdHkgPyB7IG1vZGVsX3ZlcmJvc2l0eTogcmVxLnZlcmJvc2l0eSB9IDoge30pLFxuICAgICAgLy8g7J2066+47KeAIOuqqOuTnDogdGhyZWFkIOuLqOychOuhnOunjCBpbWFnZV9nZW5lcmF0aW9uIGZlYXR1cmUg66W8IOy8oOuLpC5cbiAgICAgIC8vIOyghOyXrSBjb25maWcudG9tbCDsnYAgaW1hZ2VfZ2VuZXJhdGlvbj1mYWxzZSDsnKDsp4Ao7YWN7Iqk7Yq4IHRocmVhZCDsnbTspJEg7LCo64uoKSxcbiAgICAgIC8vIGRvdHRlZCBDTEkt7Iqk7YOA7J28IG92ZXJyaWRlIO2CpOuhnCDsnbQgdGhyZWFkIOyXkOyEnOunjCDtmZzshLHtmZQo7Iuk7LihIO2ZleyduCkuXG4gICAgICAuLi4ocmVxLmltYWdlR2VuZXJhdGlvbiA/IHsgXCJmZWF0dXJlcy5pbWFnZV9nZW5lcmF0aW9uXCI6IHRydWUgfSA6IHt9KSxcbiAgICB9O1xuICAgIGNvbnN0IHsgdGhyZWFkLCBtb2RlbDogdGhyZWFkTW9kZWwgfSA9IGF3YWl0IHRoaXMucnBjLnJlcXVlc3Q8VGhyZWFkU3RhcnRSZXNwb25zZT4oXG4gICAgICBcInRocmVhZC9zdGFydFwiLFxuICAgICAge1xuICAgICAgICBlcGhlbWVyYWw6IHRydWUsXG4gICAgICAgIGN3ZDogYCR7dGhpcy5jb2RleEhvbWV9L2N3ZGAsXG4gICAgICAgIGJhc2VJbnN0cnVjdGlvbnM6IHJlcS5pbWFnZUdlbmVyYXRpb25cbiAgICAgICAgICA/IGltYWdlQmFzZUluc3RydWN0aW9ucyhyZXEuaW1hZ2VHZW5lcmF0aW9uT3B0aW9ucylcbiAgICAgICAgICA6IEJBU0VfSU5TVFJVQ1RJT05TLFxuICAgICAgICBkZXZlbG9wZXJJbnN0cnVjdGlvbnM6IHJlcS5kZXZlbG9wZXJJbnN0cnVjdGlvbnMgPz8gXCJcIixcbiAgICAgICAgc2FuZGJveDogVEhSRUFEX0RFRkFVTFRTLnNhbmRib3gsXG4gICAgICAgIGFwcHJvdmFsUG9saWN5OiBUSFJFQURfREVGQVVMVFMuYXBwcm92YWxQb2xpY3ksXG4gICAgICAgIGNvbmZpZzogdGhyZWFkQ29uZmlnLFxuICAgICAgfSBzYXRpc2ZpZXMgUGFydGlhbDxUaHJlYWRTdGFydFBhcmFtcz4sXG4gICAgKTtcblxuICAgIGNvbnN0IHRocmVhZElkID0gdGhyZWFkLmlkO1xuICAgIGlmIChyZXEuaGlzdG9yeT8ubGVuZ3RoKSB7XG4gICAgICBhd2FpdCB0aGlzLnJwYy5yZXF1ZXN0KFwidGhyZWFkL2luamVjdF9pdGVtc1wiLCB7XG4gICAgICAgIHRocmVhZElkLFxuICAgICAgICBpdGVtczogcmVxLmhpc3RvcnksXG4gICAgICB9IHNhdGlzZmllcyBUaHJlYWRJbmplY3RJdGVtc1BhcmFtcyk7XG4gICAgfVxuICAgIC8vIOydtOuvuOyngCB0dXJuIOydgCDsnqzsgqzsmqnsl5DshJwg7KCc7Jm4KFI4KTogYmFzZTY0IOqwgCB0aHJlYWQg66mU66qo66aswrfsupDsi5wgcHJlZml4IOyXkFxuICAgIC8vIOyDgeyjvO2VmOuKlCDqsoPsnYQg66eJ6rOgLCDsnbTrr7jsp4AgdGhyZWFkIOulvCAxIO2ajOyaqeycvOuhnCDrkZTri6QuIHRocmVhZE1ldGEg66+465Ox66GdIOKGklxuICAgIC8vIO2bhOyGjSByZXVzZSDsobDtmozsl5DshJwg7J20IHRocmVhZCDripQg7ZuE67O06rCAIOuQmOyngCDslYrripTri6QuXG4gICAgaWYgKCFyZXEuaW1hZ2VHZW5lcmF0aW9uKSB7XG4gICAgICB0aGlzLnRocmVhZE1ldGEuc2V0KHRocmVhZElkLCB7IGxhc3RVc2VkQXQ6IERhdGUubm93KCkgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdGhyZWFkSWQsIG1vZGVsOiByZXEubW9kZWwgPz8gdGhyZWFkTW9kZWwgfTtcbiAgfVxuXG4gIC8vIOq4sOyhtCB0aHJlYWQg7JeQIHR1cm4g66eMIOyLpO2WiSAoaW5qZWN0IOyXhuydjCkuIGNvbnZlcnNhdGlvbl9pZCDsnKDsp4Ag4oaSIHByb21wdCBjYWNoZSDsoIHspJEuXG4gIHByaXZhdGUgYXN5bmMgc3RhcnRUdXJuT25UaHJlYWQodGhyZWFkSWQ6IHN0cmluZywgcmVxOiBUdXJuUmVxdWVzdCk6IFByb21pc2U8eyB0dXJuSWQ6IHN0cmluZyB9PiB7XG4gICAgaWYgKCF0aGlzLnJwYyB8fCAhdGhpcy5yZWFkeSkgdGhyb3cgbmV3IEVycm9yKFwid29ya2VyIG5vdCByZWFkeVwiKTtcblxuICAgIGNvbnN0IHsgdHVybiB9ID0gYXdhaXQgdGhpcy5ycGMucmVxdWVzdDxUdXJuU3RhcnRSZXNwb25zZT4oXCJ0dXJuL3N0YXJ0XCIsIHtcbiAgICAgIHRocmVhZElkLFxuICAgICAgaW5wdXQ6IHJlcS5pbnB1dCxcbiAgICAgIC4uLihyZXEub3V0cHV0U2NoZW1hID8geyBvdXRwdXRTY2hlbWE6IHJlcS5vdXRwdXRTY2hlbWEgfSA6IHt9KSxcbiAgICAgIC4uLihyZXEuZWZmb3J0ID8geyBlZmZvcnQ6IHJlcS5lZmZvcnQgfSA6IHt9KSxcbiAgICAgIC4uLihyZXEubW9kZWwgPyB7IG1vZGVsOiByZXEubW9kZWwgfSA6IHt9KSxcbiAgICAgIC4uLihyZXEucmVhc29uaW5nU3VtbWFyeSA/IHsgc3VtbWFyeTogcmVxLnJlYXNvbmluZ1N1bW1hcnkgfSA6IHt9KSxcbiAgICAgIC4uLihyZXEuc2VydmljZVRpZXIgPyB7IHNlcnZpY2VUaWVyOiByZXEuc2VydmljZVRpZXIgfSA6IHt9KSxcbiAgICB9KTtcbiAgICBjb25zdCBtZXRhID0gdGhpcy50aHJlYWRNZXRhLmdldCh0aHJlYWRJZCk7XG4gICAgaWYgKG1ldGEpIG1ldGEubGFzdFVzZWRBdCA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIHsgdHVybklkOiB0dXJuLmlkIH07XG4gIH1cblxuICAvLyBleGlzdGluZ1RocmVhZElkIOyeiOycvOuptCDqt7ggdGhyZWFkIOyerOyCrOyaqSjtm4Tsho0gdHVybiksIOyXhuycvOuptCDsg4ggdGhyZWFkIOyDneyEsSjssqsgdHVybikuXG4gIC8vIO2YuOy2nCDtm4Qg7IKs7Jqp7ZWcIHRocmVhZElkIOulvCDrsJjtmZjtlbQgZGlzcGF0Y2hlciDqsIAgY29udiDtlbjrk6TsnYQg67Cc6riJ7ZWc64ukLlxuICBhc3luYyBleGVjdXRlVHVybihcbiAgICByZXE6IFR1cm5SZXF1ZXN0LFxuICAgIGV4aXN0aW5nVGhyZWFkSWQ/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8VHVyblJlc3VsdCAmIHsgdGhyZWFkSWQ6IHN0cmluZyB9PiB7XG4gICAgbGV0IHRocmVhZElkOiBzdHJpbmc7XG4gICAgbGV0IG1vZGVsOiBzdHJpbmc7XG4gICAgaWYgKGV4aXN0aW5nVGhyZWFkSWQpIHtcbiAgICAgIHRocmVhZElkID0gZXhpc3RpbmdUaHJlYWRJZDtcbiAgICAgIG1vZGVsID0gcmVxLm1vZGVsID8/IFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgICh7IHRocmVhZElkLCBtb2RlbCB9ID0gYXdhaXQgdGhpcy5jcmVhdGVUaHJlYWQocmVxKSk7XG4gICAgfVxuICAgIGNvbnN0IHR0ZnRUcmFja2VyID0gY3JlYXRlVHRmdFRyYWNrZXIoKTtcbiAgICBjb25zdCByZXN1bHRQcm9taXNlID0gdGhpcy5jb25zdW1lVHVybk5vdGlmaWNhdGlvbnModGhyZWFkSWQsIG1vZGVsLCB0dGZ0VHJhY2tlcik7XG4gICAgdHJ5IHtcbiAgICAgIHR0ZnRUcmFja2VyLm1hcmtTdGFydCgpO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydFR1cm5PblRocmVhZCh0aHJlYWRJZCwgcmVxKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmZhaWxBY3RpdmVUdXJuKGUgYXMgRXJyb3IpO1xuICAgICAgYXdhaXQgcmVzdWx0UHJvbWlzZS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXN1bHRQcm9taXNlO1xuICAgIHJldHVybiB7IC4uLnJlc3VsdCwgdGhyZWFkSWQgfTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVUdXJuU3RyZWFtKFxuICAgIHJlcTogVHVyblJlcXVlc3QsXG4gICAgY2I6IFN0cmVhbUNhbGxiYWNrcyxcbiAgICBleGlzdGluZ1RocmVhZElkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHsgdGhyZWFkSWQ6IHN0cmluZyB9PiB7XG4gICAgbGV0IHRocmVhZElkOiBzdHJpbmc7XG4gICAgbGV0IG1vZGVsOiBzdHJpbmc7XG4gICAgaWYgKGV4aXN0aW5nVGhyZWFkSWQpIHtcbiAgICAgIHRocmVhZElkID0gZXhpc3RpbmdUaHJlYWRJZDtcbiAgICAgIG1vZGVsID0gcmVxLm1vZGVsID8/IFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgICh7IHRocmVhZElkLCBtb2RlbCB9ID0gYXdhaXQgdGhpcy5jcmVhdGVUaHJlYWQocmVxKSk7XG4gICAgfVxuICAgIGNiLm9uVGhyZWFkSWQ/Lih0aHJlYWRJZCk7XG4gICAgY29uc3QgdHRmdFRyYWNrZXIgPSBjcmVhdGVUdGZ0VHJhY2tlcigpO1xuICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSB0aGlzLmNvbnN1bWVTdHJlYW1Ob3RpZmljYXRpb25zKHRocmVhZElkLCBtb2RlbCwgY2IsIHR0ZnRUcmFja2VyKTtcbiAgICBsZXQgdHVybklkOiBzdHJpbmc7XG4gICAgdHJ5IHtcbiAgICAgIHR0ZnRUcmFja2VyLm1hcmtTdGFydCgpO1xuICAgICAgKHsgdHVybklkIH0gPSBhd2FpdCB0aGlzLnN0YXJ0VHVybk9uVGhyZWFkKHRocmVhZElkLCByZXEpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmZhaWxBY3RpdmVUdXJuKGUgYXMgRXJyb3IpO1xuICAgICAgYXdhaXQgcmVzdWx0UHJvbWlzZS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICBjYi5vblR1cm5JZD8uKHR1cm5JZCk7XG4gICAgYXdhaXQgcmVzdWx0UHJvbWlzZTtcbiAgICByZXR1cm4geyB0aHJlYWRJZCB9O1xuICB9XG5cbiAgLy8g4pSA4pSAIHRocmVhZCDsnqzsgqzsmqkg7KeA7JuQIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGdldCBlcG9jaCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmVwb2NoQ291bnRlcjtcbiAgfVxuXG4gIGhhc1RocmVhZCh0aHJlYWRJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGhyZWFkTWV0YS5oYXModGhyZWFkSWQpO1xuICB9XG5cbiAgLy8gaWRsZSBUVEwg7LSI6rO8IC8g6rCc7IiYIOyDge2VnCDstIjqs7wgdGhyZWFkIOulvCDsoJXrpqwuIGNyZWF0ZVRocmVhZCDsp4HsoIQgbGF6eSDtmLjstpwuXG4gIC8vIGNvZGV4IGVwaGVtZXJhbCB0aHJlYWQg64qUIOuqheyLnOyggSBjbG9zZSBSUEMg7JeG7J20IOunteyXkOyEnCDsoJzqsbAg4oaSIOuNlCDsnbTsg4EgdHVybiDslYgg67O064OELlxuICBzd2VlcElkbGVUaHJlYWRzKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgZm9yIChjb25zdCBbaWQsIG1ldGFdIG9mIHRoaXMudGhyZWFkTWV0YSkge1xuICAgICAgaWYgKG5vdyAtIG1ldGEubGFzdFVzZWRBdCA+IENvZGV4QXBwU2VydmVyV29ya2VyLlRIUkVBRF9JRExFX1RUTF9NUykge1xuICAgICAgICB0aGlzLnRocmVhZE1ldGEuZGVsZXRlKGlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gY3JlYXRlVGhyZWFkIOyngeyghCDtmLjstpwg4oaSIOyDiCB0aHJlYWQgMSDqsJzqsIAg6rOnIOy2lOqwgOuQnOuLpC4g7LaU6rCAIO2bhOyXkOuPhCBNQVgg66W8IOuEmOyngCDslYrrj4TroZ1cbiAgICAvLyBNQVgtMSDsnbTtlZjroZwg7KSE7JesIOuRlOuLpCjqt7jrnpjslbwg7IOd7ISxIOynge2bhCDsoJXtmZXtnoggTUFYKS4gTFJVOiBsYXN0VXNlZEF0IOyYpOumhOywqOyInOycvOuhnCDsoJzqsbAuXG4gICAgY29uc3QgbGltaXQgPSBDb2RleEFwcFNlcnZlcldvcmtlci5NQVhfVEhSRUFEU19QRVJfV09SS0VSIC0gMTtcbiAgICBpZiAodGhpcy50aHJlYWRNZXRhLnNpemUgPiBsaW1pdCkge1xuICAgICAgY29uc3Qgc29ydGVkID0gWy4uLnRoaXMudGhyZWFkTWV0YS5lbnRyaWVzKCldLnRvU29ydGVkKFxuICAgICAgICAoYSwgYikgPT4gYVsxXS5sYXN0VXNlZEF0IC0gYlsxXS5sYXN0VXNlZEF0LFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG92ZXIgPSB0aGlzLnRocmVhZE1ldGEuc2l6ZSAtIGxpbWl0O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdmVyOyBpKyspIHRoaXMudGhyZWFkTWV0YS5kZWxldGUoc29ydGVkW2ldIVswXSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW50ZXJydXB0VHVybih0aHJlYWRJZDogc3RyaW5nLCB0dXJuSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5ycGMgfHwgIXRoaXMucmVhZHkpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5ycGMucmVxdWVzdChcInR1cm4vaW50ZXJydXB0XCIsIHsgdGhyZWFkSWQsIHR1cm5JZCB9KTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cblxuICBwcml2YXRlIGZhaWxBY3RpdmVUdXJuKGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIGNvbnN0IGFib3J0ID0gdGhpcy5hY3RpdmVUdXJuQWJvcnQ7XG4gICAgdGhpcy5hY3RpdmVUdXJuQWJvcnQgPSB1bmRlZmluZWQ7XG4gICAgYWJvcnQ/LihlcnJvcik7XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWVUdXJuTm90aWZpY2F0aW9ucyhcbiAgICB0aHJlYWRJZDogc3RyaW5nLFxuICAgIG1vZGVsOiBzdHJpbmcsXG4gICAgdHRmdFRyYWNrZXIgPSBjcmVhdGVUdGZ0VHJhY2tlcigpLFxuICApOiBQcm9taXNlPFR1cm5SZXN1bHQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8VHVyblJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHNldHRsZWQgPSBmYWxzZTtcbiAgICAgIGxldCBhYm9ydDogQWN0aXZlVHVybkFib3J0O1xuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBmaW5pc2hXaXRoRXJyb3IobmV3IEVycm9yKFwidHVybiB0aW1lb3V0ICg2MDBzKVwiKSk7XG4gICAgICB9LCA2MDBfMDAwKTtcblxuICAgICAgbGV0IHRleHQgPSBcIlwiO1xuICAgICAgbGV0IHVzYWdlOiBUb2tlblVzYWdlQnJlYWtkb3duID0ge1xuICAgICAgICB0b3RhbFRva2VuczogMCxcbiAgICAgICAgaW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIG91dHB1dFRva2VuczogMCxcbiAgICAgICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIHJlYXNvbmluZ091dHB1dFRva2VuczogMCxcbiAgICAgIH07XG4gICAgICBsZXQgZHVyYXRpb25NcyA9IDA7XG4gICAgICBjb25zdCBpbWFnZXMgPSBuZXcgTWFwPHN0cmluZywgVHVybkltYWdlPigpOyAvLyBpdGVtLmlkIOKGkiDsnbTrr7jsp4AgKGRlZHVwKVxuICAgICAgbGV0IGltYWdlQXR0ZW1wdGVkID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVHVybkFib3J0ID09PSBhYm9ydCkgdGhpcy5hY3RpdmVUdXJuQWJvcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBbXG4gICAgICAgICAgXCJpdGVtL3N0YXJ0ZWRcIixcbiAgICAgICAgICBcIml0ZW0vY29tcGxldGVkXCIsXG4gICAgICAgICAgXCJpdGVtL2FnZW50TWVzc2FnZS9kZWx0YVwiLFxuICAgICAgICAgIFwidHVybi9jb21wbGV0ZWRcIixcbiAgICAgICAgICBcInRocmVhZC90b2tlblVzYWdlL3VwZGF0ZWRcIixcbiAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIF0gYXMgY29uc3QpIHtcbiAgICAgICAgICB0aGlzLnJwYz8ub25Ob3RpZmljYXRpb24obiwgKCkgPT4ge30pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmaW5pc2hXaXRoRXJyb3IgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmaW5pc2hXaXRoUmVzdWx0ID0gKHJlc3VsdDogVHVyblJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9O1xuXG4gICAgICBhYm9ydCA9IGZpbmlzaFdpdGhFcnJvcjtcbiAgICAgIHRoaXMuYWN0aXZlVHVybkFib3J0ID0gYWJvcnQ7XG5cbiAgICAgIC8vIOydtOuvuOyngCB0b29sIO2YuOy2nCDqtIDsuKEo7J6s7Iuc64+EIO2MkOygleyaqSkuIHN0YXJ0ZWQg64qUIHJlc3VsdCDsl4bsnbQg7Jik66+A66GcXG4gICAgICAvLyBhdHRlbXB0ZWQg7Iug7Zi466Gc66eMIOyTsOqzoCwg7JmE7ISxIOydtOuvuOyngOuKlCBjb21wbGV0ZWQg7JeQ7IScIHJlc3VsdCDsnKDtmqjshLHsnLzroZwg7YyQ7KCV7ZWc64ukLlxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiaXRlbS9zdGFydGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICBpZiAocC5pdGVtLnR5cGUgPT09IFwiaW1hZ2VHZW5lcmF0aW9uXCIpIGltYWdlQXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJpdGVtL2NvbXBsZXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgaWYgKHAuaXRlbS50eXBlID09PSBcImFnZW50TWVzc2FnZVwiKSB7XG4gICAgICAgICAgdGV4dCA9IHAuaXRlbS50ZXh0O1xuICAgICAgICB9IGVsc2UgaWYgKHAuaXRlbS50eXBlID09PSBcImltYWdlR2VuZXJhdGlvblwiKSB7XG4gICAgICAgICAgaW1hZ2VBdHRlbXB0ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChpc0NvbXBsZXRlZEltYWdlUmVzdWx0KHAuaXRlbS5yZXN1bHQpKSB7XG4gICAgICAgICAgICBpbWFnZXMuc2V0KHAuaXRlbS5pZCwgeyBkYXRhOiBwLml0ZW0ucmVzdWx0LCByZXZpc2VkUHJvbXB0OiBwLml0ZW0ucmV2aXNlZFByb21wdCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJpdGVtL2FnZW50TWVzc2FnZS9kZWx0YVwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgdHRmdFRyYWNrZXIucmVjb3JkRmlyc3REZWx0YSgpO1xuICAgICAgICB0ZXh0ICs9IHAuZGVsdGE7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwidGhyZWFkL3Rva2VuVXNhZ2UvdXBkYXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgLy8gdGhyZWFkIOyerOyCrOyaqSDsi5wgLnRvdGFsIOydgCDrjIDtmZQg7KCE7LK0IOuIhOyggeydtOudvCwgY29sZCDsmIDrjZgg7J207KCEIHR1cm4g6rmM7KeAIOyEnuyXrFxuICAgICAgICAvLyDsnbQg7JqU7LKtIOyekOyytOydmCBjYWNoZSDsoIHspJHrpaDsnbQg7Z2s7ISd65Cc64ukKOyYiDogdHVybjEgY29sZCAwJSArIHR1cm4yIDkwJSDihpIgNDglIOuhnCDquLDroZ0pLlxuICAgICAgICAvLyAubGFzdCDripQg7J2067KIIHR1cm4g66eM7J2YIHVzYWdlIOudvCByZXF1ZXN0X2xvZyDqsIAg6re4IOyalOyyreydmCDsi6TsoJwg7Yag7YGw7J2EIOygle2Zle2eiCDrsJjsmIHtlZzri6QuXG4gICAgICAgIHVzYWdlID0gcC50b2tlblVzYWdlLmxhc3Q7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwidHVybi9jb21wbGV0ZWRcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIGR1cmF0aW9uTXMgPSBwLnR1cm4uZHVyYXRpb25NcyA/PyAwO1xuICAgICAgICBpZiAocC50dXJuLnN0YXR1cyA9PT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgICAgIGZpbmlzaFdpdGhSZXN1bHQoe1xuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIHVzYWdlLFxuICAgICAgICAgICAgZHVyYXRpb25NcyxcbiAgICAgICAgICAgIHR0ZnRNczogdHRmdFRyYWNrZXIudmFsdWUoKSxcbiAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgaW1hZ2VzOiBpbWFnZXMuc2l6ZSA+IDAgPyBbLi4uaW1hZ2VzLnZhbHVlcygpXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGltYWdlQXR0ZW1wdGVkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHR1cm4g7Iuk7YyoL+ykkeuLqCDsi5wg67aA67aEIOydtOuvuOyngOuKlCDtj5DquLAo7ISx6rO17Jy866GcIOyKueqyqe2VmOyngCDslYrsnYwpLlxuICAgICAgICAgIGZpbmlzaFdpdGhFcnJvcihuZXcgRXJyb3IoYHR1cm4gZmFpbGVkOiAke0pTT04uc3RyaW5naWZ5KHAudHVybi5lcnJvcil9YCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiZXJyb3JcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIGlmICghcC53aWxsUmV0cnkpIHtcbiAgICAgICAgICBmaW5pc2hXaXRoRXJyb3IobmV3IEVycm9yKGBjb2RleCBlcnJvcjogJHtwLmVycm9yLm1lc3NhZ2V9YCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZVN0cmVhbU5vdGlmaWNhdGlvbnMoXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBtb2RlbDogc3RyaW5nLFxuICAgIGNiOiBTdHJlYW1DYWxsYmFja3MsXG4gICAgdHRmdFRyYWNrZXIgPSBjcmVhdGVUdGZ0VHJhY2tlcigpLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHNldHRsZWQgPSBmYWxzZTtcbiAgICAgIGxldCBhYm9ydDogQWN0aXZlVHVybkFib3J0O1xuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBmaW5pc2hXaXRoRXJyb3IobmV3IEVycm9yKFwidHVybiB0aW1lb3V0ICg2MDBzKVwiKSk7XG4gICAgICB9LCA2MDBfMDAwKTtcblxuICAgICAgbGV0IHRleHQgPSBcIlwiO1xuICAgICAgbGV0IHVzYWdlOiBUb2tlblVzYWdlQnJlYWtkb3duID0ge1xuICAgICAgICB0b3RhbFRva2VuczogMCxcbiAgICAgICAgaW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIG91dHB1dFRva2VuczogMCxcbiAgICAgICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIHJlYXNvbmluZ091dHB1dFRva2VuczogMCxcbiAgICAgIH07XG4gICAgICBjb25zdCBpbWFnZXMgPSBuZXcgTWFwPHN0cmluZywgVHVybkltYWdlPigpOyAvLyBpdGVtLmlkIOKGkiDsnbTrr7jsp4AgKGRlZHVwKVxuICAgICAgbGV0IGltYWdlQXR0ZW1wdGVkID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVHVybkFib3J0ID09PSBhYm9ydCkgdGhpcy5hY3RpdmVUdXJuQWJvcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBbXG4gICAgICAgICAgXCJpdGVtL3N0YXJ0ZWRcIixcbiAgICAgICAgICBcIml0ZW0vY29tcGxldGVkXCIsXG4gICAgICAgICAgXCJpdGVtL2FnZW50TWVzc2FnZS9kZWx0YVwiLFxuICAgICAgICAgIFwidHVybi9jb21wbGV0ZWRcIixcbiAgICAgICAgICBcInRocmVhZC90b2tlblVzYWdlL3VwZGF0ZWRcIixcbiAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIF0gYXMgY29uc3QpIHtcbiAgICAgICAgICB0aGlzLnJwYz8ub25Ob3RpZmljYXRpb24obiwgKCkgPT4ge30pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmaW5pc2hXaXRoRXJyb3IgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIGNiLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgZmluaXNoV2l0aENvbXBsZXRlID0gKHJlc3VsdDogVHVyblJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICBjYi5vbkNvbXBsZXRlKHJlc3VsdCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH07XG5cbiAgICAgIGFib3J0ID0gZmluaXNoV2l0aEVycm9yO1xuICAgICAgdGhpcy5hY3RpdmVUdXJuQWJvcnQgPSBhYm9ydDtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiaXRlbS9hZ2VudE1lc3NhZ2UvZGVsdGFcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIHR0ZnRUcmFja2VyLnJlY29yZEZpcnN0RGVsdGEoKTtcbiAgICAgICAgdGV4dCArPSBwLmRlbHRhO1xuICAgICAgICBjYi5vbkRlbHRhKHAuZGVsdGEpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcIml0ZW0vc3RhcnRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgaWYgKHAuaXRlbS50eXBlID09PSBcImltYWdlR2VuZXJhdGlvblwiKSBpbWFnZUF0dGVtcHRlZCA9IHRydWU7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiaXRlbS9jb21wbGV0ZWRcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIGlmIChwLml0ZW0udHlwZSA9PT0gXCJhZ2VudE1lc3NhZ2VcIikge1xuICAgICAgICAgIHRleHQgPSBwLml0ZW0udGV4dDtcbiAgICAgICAgfSBlbHNlIGlmIChwLml0ZW0udHlwZSA9PT0gXCJpbWFnZUdlbmVyYXRpb25cIikge1xuICAgICAgICAgIGltYWdlQXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoaXNDb21wbGV0ZWRJbWFnZVJlc3VsdChwLml0ZW0ucmVzdWx0KSkge1xuICAgICAgICAgICAgaW1hZ2VzLnNldChwLml0ZW0uaWQsIHsgZGF0YTogcC5pdGVtLnJlc3VsdCwgcmV2aXNlZFByb21wdDogcC5pdGVtLnJldmlzZWRQcm9tcHQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwidGhyZWFkL3Rva2VuVXNhZ2UvdXBkYXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgLy8gdGhyZWFkIOyerOyCrOyaqSDsi5wgLnRvdGFsIOydgCDrjIDtmZQg7KCE7LK0IOuIhOyggeydtOudvCwgY29sZCDsmIDrjZgg7J207KCEIHR1cm4g6rmM7KeAIOyEnuyXrFxuICAgICAgICAvLyDsnbQg7JqU7LKtIOyekOyytOydmCBjYWNoZSDsoIHspJHrpaDsnbQg7Z2s7ISd65Cc64ukKOyYiDogdHVybjEgY29sZCAwJSArIHR1cm4yIDkwJSDihpIgNDglIOuhnCDquLDroZ0pLlxuICAgICAgICAvLyAubGFzdCDripQg7J2067KIIHR1cm4g66eM7J2YIHVzYWdlIOudvCByZXF1ZXN0X2xvZyDqsIAg6re4IOyalOyyreydmCDsi6TsoJwg7Yag7YGw7J2EIOygle2Zle2eiCDrsJjsmIHtlZzri6QuXG4gICAgICAgIHVzYWdlID0gcC50b2tlblVzYWdlLmxhc3Q7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwidHVybi9jb21wbGV0ZWRcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIGlmIChwLnR1cm4uc3RhdHVzID09PSBcImNvbXBsZXRlZFwiKSB7XG4gICAgICAgICAgZmluaXNoV2l0aENvbXBsZXRlKHtcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICB1c2FnZSxcbiAgICAgICAgICAgIGR1cmF0aW9uTXM6IHAudHVybi5kdXJhdGlvbk1zID8/IDAsXG4gICAgICAgICAgICB0dGZ0TXM6IHR0ZnRUcmFja2VyLnZhbHVlKCksXG4gICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgIGltYWdlczogaW1hZ2VzLnNpemUgPiAwID8gWy4uLmltYWdlcy52YWx1ZXMoKV0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBpbWFnZUF0dGVtcHRlZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaW5pc2hXaXRoRXJyb3IobmV3IEVycm9yKGB0dXJuICR7cC50dXJuLnN0YXR1c306ICR7SlNPTi5zdHJpbmdpZnkocC50dXJuLmVycm9yKX1gKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJlcnJvclwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgaWYgKCFwLndpbGxSZXRyeSkge1xuICAgICAgICAgIGZpbmlzaFdpdGhFcnJvcihuZXcgRXJyb3IoYGNvZGV4IGVycm9yOiAke3AuZXJyb3IubWVzc2FnZX1gKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8g4pSA4pSAIFJlc3RhcnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBzY2hlZHVsZVJlc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkIHx8IHRoaXMucmVzdGFydEF0dGVtcHRzID49IE1BWF9SRVNUQVJUX0FUVEVNUFRTKSB7XG4gICAgICBpZiAodGhpcy5yZXN0YXJ0QXR0ZW1wdHMgPj0gTUFYX1JFU1RBUlRfQVRURU1QVFMpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYHdvcmtlciAke3RoaXMuY29uZmlnLnRva2VuTmFtZX0gbWF4IHJlc3RhcnQgYXR0ZW1wdHMgcmVhY2hlZGApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVzdGFydEF0dGVtcHRzKys7XG4gICAgY29uc3QgYmFzZURlbGF5ID0gUkVTVEFSVF9CQUNLT0ZGX0JBU0VfTVMgKiAyICoqICh0aGlzLnJlc3RhcnRBdHRlbXB0cyAtIDEpO1xuICAgIGNvbnN0IHN0YWdnZXIgPSAodGhpcy5jb25maWcud29ya2VySW5kZXggPz8gMCkgKiAyXzAwMDtcbiAgICBjb25zdCBkZWxheSA9IGJhc2VEZWxheSArIHN0YWdnZXI7XG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfVske3RoaXMuY29uZmlnLndvcmtlckluZGV4ID8/IDB9XSByZXN0YXJ0aW5nIGluICR7ZGVsYXl9bXMgKGF0dGVtcHQgJHt0aGlzLnJlc3RhcnRBdHRlbXB0c30pYCxcbiAgICApO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMub25SZWFkeT8uKCkpXG4gICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGB3b3JrZXIgJHt0aGlzLmNvbmZpZy50b2tlbk5hbWV9IHJlc3RhcnQgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVSZXN0YXJ0KCk7XG4gICAgICAgIH0pO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQXVCQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsZUFBZSxDQUFDO0FBRW5ELE1BQU0sdUJBQXVCO0FBQzdCLE1BQU0sMEJBQTBCO0FBdURoQyxNQUFNLGtCQUFrQjtDQUN0QixTQUFTO0NBQ1QsZ0JBQWdCO0NBQ2hCLFFBQVEsRUFDTixNQUFNLEVBQUUsVUFBVTtFQUFFLFNBQVM7RUFBTyxxQkFBcUI7RUFBTyxvQkFBb0I7RUFBTyxFQUFFLEVBQzlGO0NBQ0Y7QUFFRCxNQUFNLG9CQUNKO0FBS0YsTUFBTSwwQkFDSjtBQUVGLFNBQVMsc0JBQXNCLFNBQXFEO0NBQ2xGLE1BQU0sV0FBVyw4QkFBOEIsUUFBUTtBQUN2RCxRQUFPLEdBQUcsd0JBQXdCLGlDQUFpQyw2QkFBNkIsWUFBWSxTQUFTLFFBQVEsU0FBUyxTQUFTLEtBQUs7O0FBS3RKLFNBQVMsdUJBQXVCLFFBQW1DO0FBQ2pFLEtBQUksT0FBTyxXQUFXLFNBQVUsUUFBTztDQUN2QyxNQUFNLFVBQVUsT0FBTyxNQUFNO0FBQzdCLEtBQUksUUFBUSxXQUFXLEtBQUssUUFBUSxXQUFXLFFBQVEsQ0FBRSxRQUFPO0FBQ2hFLEtBQUksQ0FBQyx5QkFBeUIsS0FBSyxRQUFRLElBQUksUUFBUSxTQUFTLE1BQU0sRUFBRyxRQUFPO0FBQ2hGLFFBQU87O0FBT1QsTUFBTSxvQkFBb0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUIxQixJQUFhLHVCQUFiLE1BQWEscUJBQXFCO0NBQ2hDLE9BQW9DO0NBQ3BDLE1BQXFDO0NBQ3JDO0NBQ0Esa0JBQTBCO0NBQzFCLFFBQWdCO0NBQ2hCLFlBQW9CO0NBQ3BCLE9BQWU7Q0FDZjtD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
|
|
596
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXgtd29ya2VyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9wcm92aWRlcnMvb3BlbmFpL2NvZGV4LXdvcmtlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3biwgdHlwZSBDaGlsZFByb2Nlc3MgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBta2RpclN5bmMsIHJlYWRGaWxlU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcblxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcblxuaW1wb3J0IHtcbiAgQ09ERVhfSU1BR0VfR0VORVJBVElPTl9NT0RFTCxcbiAgcmVzb2x2ZUltYWdlR2VuZXJhdGlvbk9wdGlvbnMsXG59IGZyb20gXCIuLi8uLi8uLi9hcHBsaWNhdGlvbi9xZ3JpZC9xZ3JpZC1pbWFnZS1nZW5lcmF0aW9uXCI7XG5pbXBvcnQgeyB0eXBlIEltYWdlR2VuZXJhdGlvbk9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vLi4vYXBwbGljYXRpb24vcWdyaWQvcWdyaWQudHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgTW9kZWwgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvdjIvTW9kZWxcIjtcbmltcG9ydCB7IHR5cGUgTW9kZWxMaXN0UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvdjIvTW9kZWxMaXN0UmVzcG9uc2VcIjtcbmltcG9ydCB7IHR5cGUgTW9kZWxQcm92aWRlckNhcGFiaWxpdGllc1JlYWRSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Nb2RlbFByb3ZpZGVyQ2FwYWJpbGl0aWVzUmVhZFJlc3BvbnNlXCI7XG5pbXBvcnQgeyB0eXBlIFRocmVhZEluamVjdEl0ZW1zUGFyYW1zIH0gZnJvbSBcIi4uLy4uLy4uL2NvZGV4LXByb3RvY29sL3YyL1RocmVhZEluamVjdEl0ZW1zUGFyYW1zXCI7XG5pbXBvcnQgeyB0eXBlIFRocmVhZFN0YXJ0UGFyYW1zIH0gZnJvbSBcIi4uLy4uLy4uL2NvZGV4LXByb3RvY29sL3YyL1RocmVhZFN0YXJ0UGFyYW1zXCI7XG5pbXBvcnQgeyB0eXBlIFRocmVhZFN0YXJ0UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vY29kZXgtcHJvdG9jb2wvdjIvVGhyZWFkU3RhcnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgdHlwZSBUb2tlblVzYWdlQnJlYWtkb3duIH0gZnJvbSBcIi4uLy4uLy4uL2NvZGV4LXByb3RvY29sL3YyL1Rva2VuVXNhZ2VCcmVha2Rvd25cIjtcbmltcG9ydCB7IHR5cGUgVHVyblN0YXJ0UGFyYW1zIH0gZnJvbSBcIi4uLy4uLy4uL2NvZGV4LXByb3RvY29sL3YyL1R1cm5TdGFydFBhcmFtc1wiO1xuaW1wb3J0IHsgdHlwZSBUdXJuU3RhcnRSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi9jb2RleC1wcm90b2NvbC92Mi9UdXJuU3RhcnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgdHlwZSBTdHJlYW1DYWxsYmFja3MgYXMgQ29tbW9uU3RyZWFtQ2FsbGJhY2tzIH0gZnJvbSBcIi4uL2NvbW1vbi9wcm92aWRlci1kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVUdGZ0VHJhY2tlciB9IGZyb20gXCIuLi9jb21tb24vdHRmdFwiO1xuaW1wb3J0IHsgQ29kZXhScGNDbGllbnQgfSBmcm9tIFwiLi9jb2RleC1ycGNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwiY29kZXgtd29ya2VyXCJdKTtcblxuY29uc3QgTUFYX1JFU1RBUlRfQVRURU1QVFMgPSAzO1xuY29uc3QgUkVTVEFSVF9CQUNLT0ZGX0JBU0VfTVMgPSAxXzAwMDtcblxuLy8g4pSA4pSAIFR5cGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtlckNvbmZpZyB7XG4gIHRva2VuSWQ6IG51bWJlcjtcbiAgdG9rZW5OYW1lOiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIGFjY291bnRJZDogc3RyaW5nO1xuICBwbGFuVHlwZT86IHN0cmluZztcbiAgd29ya2VySW5kZXg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHVyblJlcXVlc3Qge1xuICBpbnB1dDogVHVyblN0YXJ0UGFyYW1zW1wiaW5wdXRcIl07XG4gIG91dHB1dFNjaGVtYT86IFR1cm5TdGFydFBhcmFtc1tcIm91dHB1dFNjaGVtYVwiXTtcbiAgZWZmb3J0Pzogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgZGV2ZWxvcGVySW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuICBoaXN0b3J5PzogVGhyZWFkSW5qZWN0SXRlbXNQYXJhbXNbXCJpdGVtc1wiXTtcbiAgdmVyYm9zaXR5Pzogc3RyaW5nO1xuICByZWFzb25pbmdTdW1tYXJ5Pzogc3RyaW5nO1xuICBzZXJ2aWNlVGllcj86IHN0cmluZztcbiAgLy8g7J20IHR1cm4g7JeQ7IScIGNvZGV4IOuCtOyepSBpbWFnZV9nZW5lcmF0aW9uIHRvb2wg7J2EIOy8oOuLpC5cbiAgLy8gdGhyZWFkIOuLqOychOuhnOunjCDtmZzshLHtmZTrkJjrqbAo7KCE7JetIGNvbmZpZyDripQgaW1hZ2VfZ2VuZXJhdGlvbj1mYWxzZSDsnKDsp4ApLFxuICAvLyDtlIzrnpjqt7gg7JeG64qUIOyalOyyreydgCB0b29sIOq1rOyEseydtCDtmITtlonqs7wg64+Z7J287ZWY64ukLlxuICBpbWFnZUdlbmVyYXRpb24/OiBib29sZWFuO1xuICBpbWFnZUdlbmVyYXRpb25PcHRpb25zPzogSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucztcbn1cblxuLy8g7ZWcIHR1cm4g7JeQ7IScIOyDneyEseuQnCDsnbTrr7jsp4Ag7ZWY64KYLiBjb2RleCBpbWFnZUdlbmVyYXRpb24gaXRlbSDsl5DshJwg7YyM7IOdLlxuZXhwb3J0IGludGVyZmFjZSBUdXJuSW1hZ2Uge1xuICBkYXRhOiBzdHJpbmc7IC8vIGJhc2U2NCBpbWFnZSBwYXlsb2FkIChpdGVtLnJlc3VsdClcbiAgcmV2aXNlZFByb21wdDogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUdXJuUmVzdWx0IHtcbiAgdGV4dDogc3RyaW5nO1xuICB1c2FnZTogVG9rZW5Vc2FnZUJyZWFrZG93bjtcbiAgZHVyYXRpb25NczogbnVtYmVyO1xuICB0dGZ0TXM6IG51bWJlciB8IG51bGw7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIC8vIOydtOuvuOyngCB0dXJuIOyXkOyEnOunjCDssYTsm4zsp5AuIOyZhOyEsSDsnbTrr7jsp4DqsIAg7JeG7Jy866m0IOu5iCDrsLDsl7QvdW5kZWZpbmVkLlxuICBpbWFnZXM/OiBUdXJuSW1hZ2VbXTtcbiAgLy8g7J2066+47KeAIHRvb2wg7Zi47Lac7J20IOq0gOy4oeuQkOuKlOyngChpdGVtL3N0YXJ0ZWQg65iQ64qUIGhhc1Jlc3VsdCDsnojripQgY29tcGxldGVkKS5cbiAgLy8g7J2066+47KeAIDDqsJzsnbwg65WMIOyerOyLnOuPhCDqsIDriqUg7Iuk7YyoKFwi7Iuc64+EIO2bhCDrr7jsmYTshLFcIinsmYAg7J6s7Iuc64+EIOustOydtShcInRvb2wg66+47Zi47LacXCIp7J2EIOq1rOu2hC5cbiAgaW1hZ2VBdHRlbXB0ZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBTdHJlYW1DYWxsYmFja3MgPSBDb21tb25TdHJlYW1DYWxsYmFja3M8VHVyblJlc3VsdD47XG5cbnR5cGUgUmVmcmVzaGFibGVXb3JrZXJDcmVkZW50aWFscyA9IFBpY2s8V29ya2VyQ29uZmlnLCBcImFjY2Vzc1Rva2VuXCIgfCBcImFjY291bnRJZFwiIHwgXCJwbGFuVHlwZVwiPjtcbnR5cGUgQWN0aXZlVHVybkFib3J0ID0gKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcblxuLy8gdGhyZWFkL3N0YXJ0IOqzte2GtSDsmLXshZhcbmNvbnN0IFRIUkVBRF9ERUZBVUxUUyA9IHtcbiAgc2FuZGJveDogXCJyZWFkLW9ubHlcIixcbiAgYXBwcm92YWxQb2xpY3k6IFwibmV2ZXJcIixcbiAgY29uZmlnOiB7XG4gICAgYXBwczogeyBfZGVmYXVsdDogeyBlbmFibGVkOiBmYWxzZSwgZGVzdHJ1Y3RpdmVfZW5hYmxlZDogZmFsc2UsIG9wZW5fd29ybGRfZW5hYmxlZDogZmFsc2UgfSB9LFxuICB9LFxufSBzYXRpc2ZpZXMgUGFydGlhbDxUaHJlYWRTdGFydFBhcmFtcz47XG5cbmNvbnN0IEJBU0VfSU5TVFJVQ1RJT05TID1cbiAgXCJZb3UgYXJlIGEgaGVscGZ1bCBhc3Npc3RhbnQuIERvIG5vdCB1c2UgYW55IHRvb2xzIHN1Y2ggYXMgc2hlbGwsIGZpbGUgb3BlcmF0aW9ucywgb3Igd2ViIHNlYXJjaC4gUmVzcG9uZCB3aXRoIHRleHQgb25seS5cIjtcblxuLy8g7J2066+47KeAIOyDneyEsSB0aHJlYWQg7KCE7JqpIGluc3RydWN0aW9uLiDquLDrs7ggQkFTRV9JTlNUUlVDVElPTlMg7J2YIFwidGV4dCBvbmx5XCIg7KeA7Iuc6rCAXG4vLyDsi6Tsp4gg7Ja17KCc6riw7J2066+A66GcKGNvZGV4IGltYWdlX2dlbmVyYXRpb24gZmVhdHVyZSDripQgZGVmYXVsdC1vbiksIOydtOuvuOyngCDrqqjrk5zsl5DshJzripRcbi8vIGltYWdlX2dlbmVyYXRpb24gdG9vbCDsgqzsmqnsnYQg66qF7Iuc7KCB7Jy866GcIO2XiOyaqe2VnOuLpC4gc2hlbGwvd2ViIOuTsSDrgpjrqLjsp4AgdG9vbCDsnYAg7Jes7KCE7Z6IIOq4iOyngC5cbmNvbnN0IElNQUdFX0JBU0VfSU5TVFJVQ1RJT05TID1cbiAgXCJZb3UgYXJlIGEgaGVscGZ1bCBhc3Npc3RhbnQuIFdoZW4gYXNrZWQgdG8gY3JlYXRlIGFuIGltYWdlLCB1c2UgdGhlIGltYWdlX2dlbmVyYXRpb24gdG9vbCB0byBwcm9kdWNlIGl0LiBEbyBub3QgdXNlIGFueSBvdGhlciB0b29scyBzdWNoIGFzIHNoZWxsLCBmaWxlIG9wZXJhdGlvbnMsIG9yIHdlYiBzZWFyY2guXCI7XG5cbmZ1bmN0aW9uIGltYWdlQmFzZUluc3RydWN0aW9ucyhvcHRpb25zOiBJbWFnZUdlbmVyYXRpb25PcHRpb25zIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgcmV0dXJuIGAke0lNQUdFX0JBU0VfSU5TVFJVQ1RJT05TfSBSZXF1ZXN0ZWQgaW1hZ2Ugb3V0cHV0OiBtb2RlbCAke0NPREVYX0lNQUdFX0dFTkVSQVRJT05fTU9ERUx9LCBxdWFsaXR5ICR7cmVzb2x2ZWQucXVhbGl0eX0sIHNpemUgJHtyZXNvbHZlZC5zaXplfSwgZm9ybWF0IHBuZy5gO1xufVxuXG4vLyDsi6TsuKHsg4Eg7JmE66OMIGl0ZW0g7J2YIHN0YXR1cyDripQgXCJnZW5lcmF0aW5nXCIg7Jy866GcIOyZgOuPhCByZXN1bHQg7JeQIOyZhOyEsSBiYXNlNjQg6rCAIOyLpOumsOuLpC5cbi8vIOuUsOudvOyEnCDsmYTshLEg7YyQ7KCV7J2AIHN0YXR1cyDrrLjsnpDsl7TsnbQg7JWE64uI6528IHJlc3VsdCDsnZgg7Jyg7Zqo7ISxKOu5hOyWtOyeiOyngCDslYrqs6Ag7ZGc7KSAIGJhc2U2NCDsnbjsp4Ap7Jy866GcIO2VnOuLpC5cbmZ1bmN0aW9uIGlzQ29tcGxldGVkSW1hZ2VSZXN1bHQocmVzdWx0OiB1bmtub3duKTogcmVzdWx0IGlzIHN0cmluZyB7XG4gIGlmICh0eXBlb2YgcmVzdWx0ICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHRyaW1tZWQgPSByZXN1bHQudHJpbSgpO1xuICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDAgfHwgdHJpbW1lZC5zdGFydHNXaXRoKFwiZGF0YTpcIikpIHJldHVybiBmYWxzZTtcbiAgaWYgKCEvXltBLVphLXowLTkrL10rPXswLDJ9JC8udGVzdCh0cmltbWVkKSB8fCB0cmltbWVkLmxlbmd0aCAlIDQgIT09IDApIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8vIGNvZGV46rCAIOunpCDsmpTssq3sl5Ag7J6Q64+ZIOyjvOyehe2VmOuKlCDrgrTsnqUgdG9vbChzaGVsbC93ZWJfc2VhcmNoL3NwYXduX2FnZW50IOuTsSAxNOqwnCnqs7xcbi8vIGluc3RydWN0aW9uIOu4lOuhnShwZXJtaXNzaW9ucy9lbnZpcm9ubWVudF9jb250ZXh0L3NraWxscywgfjEwS0Ip7J2EIOu5hO2ZnOyEse2ZlFxuLy8gJENPREVYX0hPTUUvY29uZmlnLnRvbWwg66GcIOyNqOuEo+ycvOuptCBjb2RleCDrtoDtjIUg7IucIHNjYW5cbi8vIO2GteygnOu2iOqwgDogdXBkYXRlX3BsYW4vcmVxdWVzdF91c2VyX2lucHV0XG5leHBvcnQgY29uc3QgQ09ERVhfQ09ORklHX1RPTUwgPSBgd2ViX3NlYXJjaCA9IFwiZGlzYWJsZWRcIlxuaW5jbHVkZV9wZXJtaXNzaW9uc19pbnN0cnVjdGlvbnMgPSBmYWxzZVxuaW5jbHVkZV9hcHBzX2luc3RydWN0aW9ucyA9IGZhbHNlXG5pbmNsdWRlX2Vudmlyb25tZW50X2NvbnRleHQgPSBmYWxzZVxuXG5bZmVhdHVyZXNdXG5zaGVsbF90b29sID0gZmFsc2VcbnRvb2xfc2VhcmNoID0gZmFsc2VcbnRvb2xfc3VnZ2VzdCA9IGZhbHNlXG5tdWx0aV9hZ2VudCA9IGZhbHNlXG5pbWFnZV9nZW5lcmF0aW9uID0gZmFsc2VcbmFwcHMgPSBmYWxzZVxucGx1Z2lucyA9IGZhbHNlXG5cblt0b29sc11cbnZpZXdfaW1hZ2UgPSBmYWxzZVxuXG5bc2tpbGxzXVxuaW5jbHVkZV9pbnN0cnVjdGlvbnMgPSBmYWxzZVxuXG5bc2tpbGxzLmJ1bmRsZWRdXG5lbmFibGVkID0gZmFsc2VcbmA7XG5cbi8vIOKUgOKUgCBXb3JrZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBjbGFzcyBDb2RleEFwcFNlcnZlcldvcmtlciB7XG4gIHByaXZhdGUgcHJvYzogQ2hpbGRQcm9jZXNzIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcnBjOiBDb2RleFJwY0NsaWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvZGV4SG9tZTogc3RyaW5nO1xuICBwcml2YXRlIHJlc3RhcnRBdHRlbXB0cyA9IDA7XG4gIHByaXZhdGUgcmVhZHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSBkZXN0cm95ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBidXN5ID0gZmFsc2U7XG4gIHByaXZhdGUgYWN0aXZlVHVybkFib3J0PzogQWN0aXZlVHVybkFib3J0O1xuICBhY3RpdmUgPSB0cnVlO1xuICBvblJlYWR5PzogKCkgPT4gdm9pZDtcbiAgLy8gcmVzdGFydCDsi5wgcnBjIOqwneyytOqwgCDsg4jroZwg7IOd7ISx65CY66+A66GcLCDtlbjrk6Trn6zrpbwg67O06rSA7ZaI64uk6rCAIOunpCBzcGF3buuniOuLpCDsnqzrsJTsnbjrlKntlZzri6QuXG4gIHNlcnZlclJlcXVlc3RIYW5kbGVyPzogKG1ldGhvZDogc3RyaW5nLCBwYXJhbXM6IHVua25vd24pID0+IFByb21pc2U8dW5rbm93bj47XG5cbiAgLy8gdGhyZWFkIOyerOyCrOyaqShwcm9tcHQgY2FjaGUpOiB3b3JrZXIg6rCAIOyDneyEse2VnCB0aHJlYWQg65Ok7J2YIOuplO2DgC5cbiAgLy8gZXBoZW1lcmFsIHRocmVhZCDripQg7J20IO2UhOuhnOyEuOyKpCDrqZTrqqjrpqzsl5Drp4wg7KG07J6s7ZWY66+A66GcIHJlc3RhcnQg7IucIOyghOu2gCDrrLTtmqguXG4gIHByaXZhdGUgdGhyZWFkTWV0YSA9IG5ldyBNYXA8c3RyaW5nLCB7IGxhc3RVc2VkQXQ6IG51bWJlciB9PigpO1xuICAvLyBzcGF3biDsubTsmrTthLAuIHJlc3RhcnQg66eI64ukIOymneqwgCDihpIgY29udiDtlbjrk6TsnZggZXBvY2gg7JmAIOuMgOyhsO2VtCBzdGFsZSB0aHJlYWQg6rCQ7KeALlxuICBwcml2YXRlIGVwb2NoQ291bnRlciA9IDA7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRIUkVBRF9JRExFX1RUTF9NUyA9IDEwICogNjBfMDAwO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfVEhSRUFEU19QRVJfV09SS0VSID0gMTY7XG4gIC8vIOydtOuvuOyngCDqsozsnbTtirgg6rKA7Kad7JqpIOy6kOyLnC4gc3Bhd24g64uo7JyE66GcIOustO2aqO2ZlChyZXN0YXJ0IOyLnCBjbGVhcikuXG4gIC8vIGNhcGFiaWxpdHkg64qUIHByb3ZpZGVyIOuLqOychCBib29sZWFuLCDrqqjrjbgg66mA7Yuw66qo64usIOyXrOu2gOuKlCBtb2RlbC9saXN0IOuhnCDtmZXsnbguXG4gIHByaXZhdGUgY2FjaGVkQ2FwYWJpbGl0aWVzPzogTW9kZWxQcm92aWRlckNhcGFiaWxpdGllc1JlYWRSZXNwb25zZTtcbiAgcHJpdmF0ZSBjYWNoZWRNb2RlbHM/OiBNYXA8c3RyaW5nLCBNb2RlbD47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWc6IFdvcmtlckNvbmZpZykge1xuICAgIGNvbnN0IHN1ZmZpeCA9IGNvbmZpZy53b3JrZXJJbmRleCAhPT0gdW5kZWZpbmVkID8gYC0ke2NvbmZpZy53b3JrZXJJbmRleH1gIDogXCJcIjtcbiAgICB0aGlzLmNvZGV4SG9tZSA9IGAvdG1wL3FncmlkLWNvZGV4LyR7Y29uZmlnLnRva2VuSWR9JHtzdWZmaXh9YDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBhc3luYyBzcGF3bkFuZEluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8g7IOIIGNvZGV4IO2UhOuhnOyEuOyKpCDihpIg6riw7KG0IGVwaGVtZXJhbCB0aHJlYWQg7KCE67aAIOustO2aqC4gZXBvY2gg7Kad6rCA66GcIHN0YWxlIOqwkOyngC5cbiAgICB0aGlzLmVwb2NoQ291bnRlcisrO1xuICAgIHRoaXMudGhyZWFkTWV0YS5jbGVhcigpO1xuICAgIC8vIOyDiCDtlITroZzshLjsiqQg4oaSIGNhcGFiaWxpdHkvbW9kZWwg7LqQ7IucIOustO2aqCjroZzqt7jsnbgg6rOE7KCVL+uyhOyghOydtCDrsJTrgIzsl4jsnYQg7IiYIOyeiOydjCkuXG4gICAgdGhpcy5jYWNoZWRDYXBhYmlsaXRpZXMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jYWNoZWRNb2RlbHMgPSB1bmRlZmluZWQ7XG4gICAgY29uc3QgY3dkID0gYCR7dGhpcy5jb2RleEhvbWV9L2N3ZGA7XG4gICAgcm1TeW5jKHRoaXMuY29kZXhIb21lLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgbWtkaXJTeW5jKGN3ZCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgLy8gY29kZXgg64K07J6lIHRvb2wvd2ViX3NlYXJjaC9pbnN0cnVjdGlvbiDruJTroZ0g67mE7Zmc7ISx7ZmUXG4gICAgd3JpdGVGaWxlU3luYyhgJHt0aGlzLmNvZGV4SG9tZX0vY29uZmlnLnRvbWxgLCBDT0RFWF9DT05GSUdfVE9NTCk7XG5cbiAgICB0aGlzLnByb2MgPSBzcGF3bihcImNvZGV4XCIsIFtcImFwcC1zZXJ2ZXJcIiwgXCItLWxpc3RlblwiLCBcInN0ZGlvOi8vXCJdLCB7XG4gICAgICBzdGRpbzogW1wicGlwZVwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgICAgY3dkLFxuICAgICAgZW52OiB7XG4gICAgICAgIFBBVEg6IHByb2Nlc3MuZW52LlBBVEgsXG4gICAgICAgIFRNUERJUjogcHJvY2Vzcy5lbnYuVE1QRElSLFxuICAgICAgICBDT0RFWF9IT01FOiB0aGlzLmNvZGV4SG9tZSxcbiAgICAgICAgLy8gZW52aXJvbm1lbnQg67mE7Zmc7ISx7ZmUIOKGkiBoYXNfZW52aXJvbm1lbnQ9ZmFsc2Ug4oaSIHNoZWxsL2FwcGx5X3BhdGNoL3ZpZXdfaW1hZ2Ug7KCc6rGwXG4gICAgICAgIENPREVYX0VYRUNfU0VSVkVSX1VSTDogXCJub25lXCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9jLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oYHdvcmtlciAke3RoaXMuY29uZmlnLnRva2VuTmFtZX0gZXhpdGVkIChjb2RlPSR7Y29kZX0pYCk7XG4gICAgICB0aGlzLmZhaWxBY3RpdmVUdXJuKFxuICAgICAgICBuZXcgRXJyb3IoYGNvZGV4IHdvcmtlciBleGl0ZWQgd2hpbGUgdHVybiB3YXMgcnVubmluZyAoY29kZT0ke2NvZGUgPz8gXCJ1bmtub3duXCJ9KWApLFxuICAgICAgKTtcbiAgICAgIHRoaXMucmVhZHkgPSBmYWxzZTtcbiAgICAgIHRoaXMucnBjID0gbnVsbDtcbiAgICAgIHRoaXMucHJvYyA9IG51bGw7XG4gICAgICBpZiAoIXRoaXMuZGVzdHJveWVkKSB0aGlzLnNjaGVkdWxlUmVzdGFydCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5ycGMgPSBuZXcgQ29kZXhScGNDbGllbnQodGhpcy5wcm9jKTtcbiAgICAvLyByZXN0YXJ0IO2bhOyXkOuPhCByZWZyZXNoIHNlcnZlci1yZXF1ZXN0IO2VuOuTpOufrOulvCDsnKDsp4AgKOyXhuycvOuptCBjb2RleCDthqDtgbAg7ZqM7KCEIOyLpO2MqCDihpIgc2Vzc2lvbiBleHBpcmVkKVxuICAgIHRoaXMuYmluZFNlcnZlclJlcXVlc3RIYW5kbGVyKCk7XG5cbiAgICBhd2FpdCB0aGlzLnJwYy5yZXF1ZXN0KFwiaW5pdGlhbGl6ZVwiLCB7XG4gICAgICBjbGllbnRJbmZvOiB7IG5hbWU6IFwicWdyaWRcIiwgdmVyc2lvbjogXCIxLjAuMFwiIH0sXG4gICAgICBjYXBhYmlsaXRpZXM6IHsgZXhwZXJpbWVudGFsQXBpOiB0cnVlIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHdhaXRGb3JMb2dpbkNvbXBsZXRlZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihcImxvZ2luIHRpbWVvdXRcIikpLCAxMjBfMDAwKTtcbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcImFjY291bnQvbG9naW4vY29tcGxldGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgaWYgKHAuc3VjY2VzcykgcmVzb2x2ZSgpO1xuICAgICAgICBlbHNlIHJlamVjdChuZXcgRXJyb3IoYGxvZ2luIGZhaWxlZDogJHtwLmVycm9yID8/IFwidW5rbm93blwifWApKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNwYXduQW5kSW5pdCgpO1xuXG4gICAgYXdhaXQgdGhpcy5ycGMhLnJlcXVlc3QoXCJhY2NvdW50L2xvZ2luL3N0YXJ0XCIsIHtcbiAgICAgIHR5cGU6IFwiY2hhdGdwdEF1dGhUb2tlbnNcIixcbiAgICAgIGFjY2Vzc1Rva2VuOiB0aGlzLmNvbmZpZy5hY2Nlc3NUb2tlbixcbiAgICAgIGNoYXRncHRBY2NvdW50SWQ6IHRoaXMuY29uZmlnLmFjY291bnRJZCxcbiAgICAgIC4uLih0aGlzLmNvbmZpZy5wbGFuVHlwZSA/IHsgY2hhdGdwdFBsYW5UeXBlOiB0aGlzLmNvbmZpZy5wbGFuVHlwZSB9IDoge30pLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy53YWl0Rm9yTG9naW5Db21wbGV0ZWQoKTtcbiAgICB0aGlzLnJlYWR5ID0gdHJ1ZTtcbiAgICB0aGlzLnJlc3RhcnRBdHRlbXB0cyA9IDA7XG4gIH1cblxuICBhc3luYyBzdGFydEJyb3dzZXJMb2dpbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGF3YWl0IHRoaXMuc3Bhd25BbmRJbml0KCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ycGMhLnJlcXVlc3Q8eyBhdXRoVXJsOiBzdHJpbmcgfT4oXCJhY2NvdW50L2xvZ2luL3N0YXJ0XCIsIHtcbiAgICAgIHR5cGU6IFwiY2hhdGdwdFwiLFxuICAgIH0pO1xuICAgIGxvZ2dlci5pbmZvKGB3b3JrZXIgJHt0aGlzLmNvbmZpZy50b2tlbk5hbWV9IGJyb3dzZXIgbG9naW4gc3RhcnRlZGApO1xuICAgIHJldHVybiByZXN1bHQuYXV0aFVybDtcbiAgfVxuXG4gIGFzeW5jIHdhaXRGb3JCcm93c2VyTG9naW5Db21wbGV0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLndhaXRGb3JMb2dpbkNvbXBsZXRlZCgpO1xuICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICAgIHRoaXMucmVzdGFydEF0dGVtcHRzID0gMDtcbiAgICBsb2dnZXIuaW5mbyhgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfSBicm93c2VyIGxvZ2luIGNvbXBsZXRlZGApO1xuICB9XG5cbiAgYXN5bmMgcmVhZE1hbmFnZWRDcmVkZW50aWFscygpOiBQcm9taXNlPHtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xuICAgIGlkVG9rZW4/OiBzdHJpbmc7XG4gICAgYWNjb3VudElkOiBzdHJpbmc7XG4gIH0gfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhdyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKGAke3RoaXMuY29kZXhIb21lfS9hdXRoLmpzb25gLCBcInV0Zi04XCIpKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFjY2Vzc1Rva2VuOiByYXcudG9rZW5zPy5hY2Nlc3NfdG9rZW4gPz8gXCJcIixcbiAgICAgICAgcmVmcmVzaFRva2VuOiByYXcudG9rZW5zPy5yZWZyZXNoX3Rva2VuID8/IFwiXCIsXG4gICAgICAgIGlkVG9rZW46IHJhdy50b2tlbnM/LmlkX3Rva2VuLFxuICAgICAgICBhY2NvdW50SWQ6IHJhdy50b2tlbnM/LmFjY291bnRfaWQgPz8gXCJcIixcbiAgICAgIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBraWxsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy5mYWlsQWN0aXZlVHVybihuZXcgRXJyb3IoXCJjb2RleCB3b3JrZXIgc3RvcHBlZFwiKSk7XG4gICAgdGhpcy5ycGM/LmRlc3Ryb3koKTtcblxuICAgIGlmICh0aGlzLnByb2MpIHtcbiAgICAgIHRoaXMucHJvYy5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9jPy5raWxsKFwiU0lHS0lMTFwiKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sIDNfMDAwKTtcbiAgICAgICAgdGhpcy5wcm9jIS5vbihcImV4aXRcIiwgKCkgPT4ge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBybVN5bmModGhpcy5jb2RleEhvbWUsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIHt9XG4gIH1cblxuICBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeSAmJiAhdGhpcy5kZXN0cm95ZWQ7XG4gIH1cbiAgZ2V0IGlzRGVzdHJveWVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlc3Ryb3llZDtcbiAgfVxuICBnZXQgdG9rZW5JZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy50b2tlbklkO1xuICB9XG4gIGdldCB3b3JrZXJJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy53b3JrZXJJbmRleCA/PyAwO1xuICB9XG4gIGdldCB0b2tlbk5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcudG9rZW5OYW1lO1xuICB9XG5cbiAgY2FuUmV1c2VGb3JUb2tlbihfdG9rZW5OYW1lOiBzdHJpbmcsIGNyZWRlbnRpYWxzOiBSZWZyZXNoYWJsZVdvcmtlckNyZWRlbnRpYWxzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY29uZmlnLmFjY291bnRJZCA9PT0gY3JlZGVudGlhbHMuYWNjb3VudElkICYmXG4gICAgICAodGhpcy5jb25maWcucGxhblR5cGUgPz8gdW5kZWZpbmVkKSA9PT0gKGNyZWRlbnRpYWxzLnBsYW5UeXBlID8/IHVuZGVmaW5lZClcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlVG9rZW5TdGF0ZSh0b2tlbk5hbWU6IHN0cmluZywgY3JlZGVudGlhbHM6IFJlZnJlc2hhYmxlV29ya2VyQ3JlZGVudGlhbHMpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZy50b2tlbk5hbWUgPSB0b2tlbk5hbWU7XG4gICAgdGhpcy5jb25maWcuYWNjZXNzVG9rZW4gPSBjcmVkZW50aWFscy5hY2Nlc3NUb2tlbjtcbiAgICB0aGlzLmNvbmZpZy5hY2NvdW50SWQgPSBjcmVkZW50aWFscy5hY2NvdW50SWQ7XG4gICAgaWYgKGNyZWRlbnRpYWxzLnBsYW5UeXBlKSB7XG4gICAgICB0aGlzLmNvbmZpZy5wbGFuVHlwZSA9IGNyZWRlbnRpYWxzLnBsYW5UeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdGhpcy5jb25maWcucGxhblR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIFJhdGUgbGltaXRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGFzeW5jIGdldFJhdGVMaW1pdHMoKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgaWYgKCF0aGlzLnJwYyB8fCAhdGhpcy5yZWFkeSkgdGhyb3cgbmV3IEVycm9yKFwid29ya2VyIG5vdCByZWFkeVwiKTtcbiAgICByZXR1cm4gdGhpcy5ycGMucmVxdWVzdChcImFjY291bnQvcmF0ZUxpbWl0cy9yZWFkXCIsIHt9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJbWFnZSBnZW5lcmF0aW9uIGdhdGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vIOydtOuvuOyngCB0b29sIOydgCBjb2RleCDsl5DshJwgKEF1dGhNb2RlOjpDaGF0Z3B0KSBBTkQgKGltYWdlX2dlbmVyYXRpb24gZmVhdHVyZSlcbiAgLy8gQU5EICjrqqjrjbgg66mA7Yuw66qo64usKSAz7KSRIOqyjOydtO2KuOuLpC4gcWdyaWQg64qUIE9BdXRoIOyghOyaqeydtOqzoCBmZWF0dXJlIOuKlCB0aHJlYWQg7JeQ7IScXG4gIC8vIOy8nOuvgOuhnCwgZGlzcGF0Y2hlciDqsIAg7IKs7KCEIOqygOymne2VoCDrgqjsnYAg7KGw6rG07J2AIGNhcGFiaWxpdHkocHJvdmlkZXIpICsg66qo6424IOupgO2LsOuqqOuLrOydtOuLpC5cblxuICBwcml2YXRlIGFzeW5jIGxvYWRDYXBhYmlsaXRpZXMoKTogUHJvbWlzZTxNb2RlbFByb3ZpZGVyQ2FwYWJpbGl0aWVzUmVhZFJlc3BvbnNlPiB7XG4gICAgaWYgKCF0aGlzLnJwYyB8fCAhdGhpcy5yZWFkeSkgdGhyb3cgbmV3IEVycm9yKFwid29ya2VyIG5vdCByZWFkeVwiKTtcbiAgICBpZiAoIXRoaXMuY2FjaGVkQ2FwYWJpbGl0aWVzKSB7XG4gICAgICB0aGlzLmNhY2hlZENhcGFiaWxpdGllcyA9IGF3YWl0IHRoaXMucnBjLnJlcXVlc3Q8TW9kZWxQcm92aWRlckNhcGFiaWxpdGllc1JlYWRSZXNwb25zZT4oXG4gICAgICAgIFwibW9kZWxQcm92aWRlci9jYXBhYmlsaXRpZXMvcmVhZFwiLFxuICAgICAgICB7fSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNhY2hlZENhcGFiaWxpdGllcztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZE1vZGVscygpOiBQcm9taXNlPE1hcDxzdHJpbmcsIE1vZGVsPj4ge1xuICAgIGlmICghdGhpcy5ycGMgfHwgIXRoaXMucmVhZHkpIHRocm93IG5ldyBFcnJvcihcIndvcmtlciBub3QgcmVhZHlcIik7XG4gICAgaWYgKCF0aGlzLmNhY2hlZE1vZGVscykge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ycGMucmVxdWVzdDxNb2RlbExpc3RSZXNwb25zZT4oXCJtb2RlbC9saXN0XCIsIHt9KTtcbiAgICAgIHRoaXMuY2FjaGVkTW9kZWxzID0gbmV3IE1hcChyZXMuZGF0YS5tYXAoKG0pID0+IFttLm1vZGVsLCBtXSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jYWNoZWRNb2RlbHM7XG4gIH1cblxuICAvLyDso7zslrTsp4Qg66qo6424KOuvuOyngOygleydtOuptCB0aHJlYWQg6riw67O4IOuqqOuNuCnroZwg7J2066+47KeAIOyDneyEseydtCDqsIDriqXtlZzsp4Ag6rKA7KadLlxuICAvLyDrtojqsIAg7IKs7Jyg66W8IOusuOyekOyXtOuhnCDrsJjtmZjtlZjqs6AsIOqwgOuKpe2VmOuptCBudWxsIOydhCDrsJjtmZjtlZzri6QuXG4gIGFzeW5jIGNoZWNrSW1hZ2VHZW5lcmF0aW9uU3VwcG9ydChtb2RlbD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIGlmICghdGhpcy5ycGMgfHwgIXRoaXMucmVhZHkpIHJldHVybiBcIndvcmtlciBub3QgcmVhZHlcIjtcbiAgICBjb25zdCBjYXBzID0gYXdhaXQgdGhpcy5sb2FkQ2FwYWJpbGl0aWVzKCk7XG4gICAgaWYgKCFjYXBzLmltYWdlR2VuZXJhdGlvbikgcmV0dXJuIFwicHJvdmlkZXIgZG9lcyBub3Qgc3VwcG9ydCBpbWFnZSBnZW5lcmF0aW9uXCI7XG4gICAgLy8g66qo6424IOupgO2LsOuqqOuLrCDqsoDspp0uIG1vZGVsIOuvuOyngOygleydtOuptCBwcm92aWRlciBjYXBhYmlsaXR5IOunjOycvOuhnCDthrXqs7zsi5ztgqTqs6AsXG4gICAgLy8g7Iuk7KCcIOyggeyaqSDrqqjrjbjsnZgg66mA7Yuw66qo64usIOyXrOu2gOuKlCB0dXJuIOyLpO2WiSDqsrDqs7wo7J2066+47KeAIDDqsJwg4oaSIFUzIOyLpO2MqCDrtoTrpZgp6rCAIOyeoeuKlOuLpC5cbiAgICBpZiAobW9kZWwpIHtcbiAgICAgIGNvbnN0IG1vZGVscyA9IGF3YWl0IHRoaXMubG9hZE1vZGVscygpO1xuICAgICAgY29uc3QgaW5mbyA9IG1vZGVscy5nZXQobW9kZWwpO1xuICAgICAgaWYgKGluZm8gJiYgIWluZm8uaW5wdXRNb2RhbGl0aWVzLmluY2x1ZGVzKFwiaW1hZ2VcIikpIHtcbiAgICAgICAgcmV0dXJuIGBtb2RlbCAke21vZGVsfSBpcyBub3QgbXVsdGltb2RhbCAobm8gaW1hZ2UgaW5wdXQgbW9kYWxpdHkpYDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyDilIDilIAgU2VydmVyLXJlcXVlc3QgZGVsZWdhdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBzZXRTZXJ2ZXJSZXF1ZXN0SGFuZGxlcihoYW5kbGVyOiAobWV0aG9kOiBzdHJpbmcsIHBhcmFtczogdW5rbm93bikgPT4gUHJvbWlzZTx1bmtub3duPik6IHZvaWQge1xuICAgIHRoaXMuc2VydmVyUmVxdWVzdEhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHRoaXMuYmluZFNlcnZlclJlcXVlc3RIYW5kbGVyKCk7XG4gIH1cblxuICAvLyBzcGF3bkFuZEluaXTsl5DshJwgcnBjIOyDneyEsSDsp4Htm4Qg7Zi47LacLiByZXN0YXJ066GcIHJwY+qwgCDsg4jroZwg66eM65Ok7Ja07KC464+EIO2VuOuTpOufrOqwgCDsnKDsp4DrkJzri6QuXG4gIGJpbmRTZXJ2ZXJSZXF1ZXN0SGFuZGxlcigpOiB2b2lkIHtcbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5zZXJ2ZXJSZXF1ZXN0SGFuZGxlcjtcbiAgICBpZiAoIWhhbmRsZXIpIHJldHVybjtcbiAgICB0aGlzLnJwYz8ub25TZXJ2ZXJSZXF1ZXN0KFwiYWNjb3VudC9jaGF0Z3B0QXV0aFRva2Vucy9yZWZyZXNoXCIsIChwYXJhbXMpID0+XG4gICAgICBoYW5kbGVyKFwiYWNjb3VudC9jaGF0Z3B0QXV0aFRva2Vucy9yZWZyZXNoXCIsIHBhcmFtcyksXG4gICAgKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBUdXJuIGV4ZWN1dGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICB0cnlBY3F1aXJlVHVybigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5idXN5KSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZWxlYXNlVHVybigpOiB2b2lkIHtcbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgfVxuICBnZXQgaGFzQ2FwYWNpdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmJ1c3k7XG4gIH1cblxuICAvLyDsg4ggdGhyZWFkIOyDneyEsSAodGhyZWFkL3N0YXJ0ICsg7ZWE7JqUIOyLnCBoaXN0b3J5IGluamVjdCkuIOyyqyB0dXJuIC8g7Y+067CxIOqyveuhnOyaqS5cbiAgLy8g7ZuE7IaNIHR1cm4g7J2AIGNyZWF0ZVRocmVhZCDsl4bsnbQgc3RhcnRUdXJuT25UaHJlYWQg66eMIO2YuOy2nO2VtCBjb252ZXJzYXRpb25faWQg66W8IOqzoOygle2VnOuLpC5cbiAgLy8gdGhyZWFkIOydmCDquLDrs7ggbW9kZWwg64+EIOuwmO2ZmCAocmVxLm1vZGVsIOuvuOyngOyglSDsi5wgZmFsbGJhY2spLlxuICBhc3luYyBjcmVhdGVUaHJlYWQocmVxOiBUdXJuUmVxdWVzdCk6IFByb21pc2U8eyB0aHJlYWRJZDogc3RyaW5nOyBtb2RlbDogc3RyaW5nIH0+IHtcbiAgICBpZiAoIXRoaXMucnBjIHx8ICF0aGlzLnJlYWR5KSB0aHJvdyBuZXcgRXJyb3IoXCJ3b3JrZXIgbm90IHJlYWR5XCIpO1xuICAgIHRoaXMuc3dlZXBJZGxlVGhyZWFkcygpO1xuXG4gICAgY29uc3QgdGhyZWFkQ29uZmlnOiBUaHJlYWRTdGFydFBhcmFtc1tcImNvbmZpZ1wiXSA9IHtcbiAgICAgIC4uLlRIUkVBRF9ERUZBVUxUUy5jb25maWcsXG4gICAgICAuLi4ocmVxLnZlcmJvc2l0eSA/IHsgbW9kZWxfdmVyYm9zaXR5OiByZXEudmVyYm9zaXR5IH0gOiB7fSksXG4gICAgICAvLyDsnbTrr7jsp4Ag66qo65OcOiB0aHJlYWQg64uo7JyE66Gc66eMIGltYWdlX2dlbmVyYXRpb24gZmVhdHVyZSDrpbwg7Lyg64ukLlxuICAgICAgLy8g7KCE7JetIGNvbmZpZy50b21sIOydgCBpbWFnZV9nZW5lcmF0aW9uPWZhbHNlIOycoOyngCjthY3siqTtirggdGhyZWFkIOydtOykkSDssKjri6gpLFxuICAgICAgLy8gZG90dGVkIENMSS3siqTtg4Dsnbwgb3ZlcnJpZGUg7YKk66GcIOydtCB0aHJlYWQg7JeQ7ISc66eMIO2ZnOyEse2ZlCjsi6TsuKEg7ZmV7J24KS5cbiAgICAgIC4uLihyZXEuaW1hZ2VHZW5lcmF0aW9uID8geyBcImZlYXR1cmVzLmltYWdlX2dlbmVyYXRpb25cIjogdHJ1ZSB9IDoge30pLFxuICAgIH07XG4gICAgY29uc3QgeyB0aHJlYWQsIG1vZGVsOiB0aHJlYWRNb2RlbCB9ID0gYXdhaXQgdGhpcy5ycGMucmVxdWVzdDxUaHJlYWRTdGFydFJlc3BvbnNlPihcbiAgICAgIFwidGhyZWFkL3N0YXJ0XCIsXG4gICAgICB7XG4gICAgICAgIGVwaGVtZXJhbDogdHJ1ZSxcbiAgICAgICAgY3dkOiBgJHt0aGlzLmNvZGV4SG9tZX0vY3dkYCxcbiAgICAgICAgYmFzZUluc3RydWN0aW9uczogcmVxLmltYWdlR2VuZXJhdGlvblxuICAgICAgICAgID8gaW1hZ2VCYXNlSW5zdHJ1Y3Rpb25zKHJlcS5pbWFnZUdlbmVyYXRpb25PcHRpb25zKVxuICAgICAgICAgIDogQkFTRV9JTlNUUlVDVElPTlMsXG4gICAgICAgIGRldmVsb3Blckluc3RydWN0aW9uczogcmVxLmRldmVsb3Blckluc3RydWN0aW9ucyA/PyBcIlwiLFxuICAgICAgICBzYW5kYm94OiBUSFJFQURfREVGQVVMVFMuc2FuZGJveCxcbiAgICAgICAgYXBwcm92YWxQb2xpY3k6IFRIUkVBRF9ERUZBVUxUUy5hcHByb3ZhbFBvbGljeSxcbiAgICAgICAgY29uZmlnOiB0aHJlYWRDb25maWcsXG4gICAgICB9IHNhdGlzZmllcyBQYXJ0aWFsPFRocmVhZFN0YXJ0UGFyYW1zPixcbiAgICApO1xuXG4gICAgY29uc3QgdGhyZWFkSWQgPSB0aHJlYWQuaWQ7XG4gICAgaWYgKHJlcS5oaXN0b3J5Py5sZW5ndGgpIHtcbiAgICAgIGF3YWl0IHRoaXMucnBjLnJlcXVlc3QoXCJ0aHJlYWQvaW5qZWN0X2l0ZW1zXCIsIHtcbiAgICAgICAgdGhyZWFkSWQsXG4gICAgICAgIGl0ZW1zOiByZXEuaGlzdG9yeSxcbiAgICAgIH0gc2F0aXNmaWVzIFRocmVhZEluamVjdEl0ZW1zUGFyYW1zKTtcbiAgICB9XG4gICAgLy8g7J2066+47KeAIHR1cm4g7J2AIOyerOyCrOyaqeyXkOyEnCDsoJzsmbgoUjgpOiBiYXNlNjQg6rCAIHRocmVhZCDrqZTrqqjrpqzCt+y6kOyLnCBwcmVmaXgg7JeQXG4gICAgLy8g7IOB7KO87ZWY64qUIOqyg+ydhCDrp4nqs6AsIOydtOuvuOyngCB0aHJlYWQg66W8IDEg7ZqM7Jqp7Jy866GcIOuRlOuLpC4gdGhyZWFkTWV0YSDrr7jrk7HroZ0g4oaSXG4gICAgLy8g7ZuE7IaNIHJldXNlIOyhsO2ajOyXkOyEnCDsnbQgdGhyZWFkIOuKlCDtm4Trs7TqsIAg65CY7KeAIOyViuuKlOuLpC5cbiAgICBpZiAoIXJlcS5pbWFnZUdlbmVyYXRpb24pIHtcbiAgICAgIHRoaXMudGhyZWFkTWV0YS5zZXQodGhyZWFkSWQsIHsgbGFzdFVzZWRBdDogRGF0ZS5ub3coKSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB0aHJlYWRJZCwgbW9kZWw6IHJlcS5tb2RlbCA/PyB0aHJlYWRNb2RlbCB9O1xuICB9XG5cbiAgLy8g6riw7KG0IHRocmVhZCDsl5AgdHVybiDrp4wg7Iuk7ZaJIChpbmplY3Qg7JeG7J2MKS4gY29udmVyc2F0aW9uX2lkIOycoOyngCDihpIgcHJvbXB0IGNhY2hlIOyggeykkS5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydFR1cm5PblRocmVhZCh0aHJlYWRJZDogc3RyaW5nLCByZXE6IFR1cm5SZXF1ZXN0KTogUHJvbWlzZTx7IHR1cm5JZDogc3RyaW5nIH0+IHtcbiAgICBpZiAoIXRoaXMucnBjIHx8ICF0aGlzLnJlYWR5KSB0aHJvdyBuZXcgRXJyb3IoXCJ3b3JrZXIgbm90IHJlYWR5XCIpO1xuXG4gICAgY29uc3QgeyB0dXJuIH0gPSBhd2FpdCB0aGlzLnJwYy5yZXF1ZXN0PFR1cm5TdGFydFJlc3BvbnNlPihcInR1cm4vc3RhcnRcIiwge1xuICAgICAgdGhyZWFkSWQsXG4gICAgICBpbnB1dDogcmVxLmlucHV0LFxuICAgICAgLi4uKHJlcS5vdXRwdXRTY2hlbWEgPyB7IG91dHB1dFNjaGVtYTogcmVxLm91dHB1dFNjaGVtYSB9IDoge30pLFxuICAgICAgLi4uKHJlcS5lZmZvcnQgPyB7IGVmZm9ydDogcmVxLmVmZm9ydCB9IDoge30pLFxuICAgICAgLi4uKHJlcS5tb2RlbCA/IHsgbW9kZWw6IHJlcS5tb2RlbCB9IDoge30pLFxuICAgICAgLi4uKHJlcS5yZWFzb25pbmdTdW1tYXJ5ID8geyBzdW1tYXJ5OiByZXEucmVhc29uaW5nU3VtbWFyeSB9IDoge30pLFxuICAgICAgLi4uKHJlcS5zZXJ2aWNlVGllciA/IHsgc2VydmljZVRpZXI6IHJlcS5zZXJ2aWNlVGllciB9IDoge30pLFxuICAgIH0pO1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnRocmVhZE1ldGEuZ2V0KHRocmVhZElkKTtcbiAgICBpZiAobWV0YSkgbWV0YS5sYXN0VXNlZEF0ID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4geyB0dXJuSWQ6IHR1cm4uaWQgfTtcbiAgfVxuXG4gIC8vIGV4aXN0aW5nVGhyZWFkSWQg7J6I7Jy866m0IOq3uCB0aHJlYWQg7J6s7IKs7JqpKO2bhOyGjSB0dXJuKSwg7JeG7Jy866m0IOyDiCB0aHJlYWQg7IOd7ISxKOyyqyB0dXJuKS5cbiAgLy8g7Zi47LacIO2bhCDsgqzsmqntlZwgdGhyZWFkSWQg66W8IOuwmO2ZmO2VtCBkaXNwYXRjaGVyIOqwgCBjb252IO2VuOuTpOydhCDrsJzquIntlZzri6QuXG4gIGFzeW5jIGV4ZWN1dGVUdXJuKFxuICAgIHJlcTogVHVyblJlcXVlc3QsXG4gICAgZXhpc3RpbmdUaHJlYWRJZD86IHN0cmluZyxcbiAgKTogUHJvbWlzZTxUdXJuUmVzdWx0ICYgeyB0aHJlYWRJZDogc3RyaW5nIH0+IHtcbiAgICBsZXQgdGhyZWFkSWQ6IHN0cmluZztcbiAgICBsZXQgbW9kZWw6IHN0cmluZztcbiAgICBpZiAoZXhpc3RpbmdUaHJlYWRJZCkge1xuICAgICAgdGhyZWFkSWQgPSBleGlzdGluZ1RocmVhZElkO1xuICAgICAgbW9kZWwgPSByZXEubW9kZWwgPz8gXCJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgKHsgdGhyZWFkSWQsIG1vZGVsIH0gPSBhd2FpdCB0aGlzLmNyZWF0ZVRocmVhZChyZXEpKTtcbiAgICB9XG4gICAgY29uc3QgdHRmdFRyYWNrZXIgPSBjcmVhdGVUdGZ0VHJhY2tlcigpO1xuICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSB0aGlzLmNvbnN1bWVUdXJuTm90aWZpY2F0aW9ucyh0aHJlYWRJZCwgbW9kZWwsIHR0ZnRUcmFja2VyKTtcbiAgICB0cnkge1xuICAgICAgdHRmdFRyYWNrZXIubWFya1N0YXJ0KCk7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0VHVybk9uVGhyZWFkKHRocmVhZElkLCByZXEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuZmFpbEFjdGl2ZVR1cm4oZSBhcyBFcnJvcik7XG4gICAgICBhd2FpdCByZXN1bHRQcm9taXNlLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3VsdFByb21pc2U7XG4gICAgcmV0dXJuIHsgLi4ucmVzdWx0LCB0aHJlYWRJZCB9O1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZVR1cm5TdHJlYW0oXG4gICAgcmVxOiBUdXJuUmVxdWVzdCxcbiAgICBjYjogU3RyZWFtQ2FsbGJhY2tzLFxuICAgIGV4aXN0aW5nVGhyZWFkSWQ/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8eyB0aHJlYWRJZDogc3RyaW5nIH0+IHtcbiAgICBsZXQgdGhyZWFkSWQ6IHN0cmluZztcbiAgICBsZXQgbW9kZWw6IHN0cmluZztcbiAgICBpZiAoZXhpc3RpbmdUaHJlYWRJZCkge1xuICAgICAgdGhyZWFkSWQgPSBleGlzdGluZ1RocmVhZElkO1xuICAgICAgbW9kZWwgPSByZXEubW9kZWwgPz8gXCJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgKHsgdGhyZWFkSWQsIG1vZGVsIH0gPSBhd2FpdCB0aGlzLmNyZWF0ZVRocmVhZChyZXEpKTtcbiAgICB9XG4gICAgY2Iub25UaHJlYWRJZD8uKHRocmVhZElkKTtcbiAgICBjb25zdCB0dGZ0VHJhY2tlciA9IGNyZWF0ZVR0ZnRUcmFja2VyKCk7XG4gICAgY29uc3QgcmVzdWx0UHJvbWlzZSA9IHRoaXMuY29uc3VtZVN0cmVhbU5vdGlmaWNhdGlvbnModGhyZWFkSWQsIG1vZGVsLCBjYiwgdHRmdFRyYWNrZXIpO1xuICAgIGxldCB0dXJuSWQ6IHN0cmluZztcbiAgICB0cnkge1xuICAgICAgdHRmdFRyYWNrZXIubWFya1N0YXJ0KCk7XG4gICAgICAoeyB0dXJuSWQgfSA9IGF3YWl0IHRoaXMuc3RhcnRUdXJuT25UaHJlYWQodGhyZWFkSWQsIHJlcSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuZmFpbEFjdGl2ZVR1cm4oZSBhcyBFcnJvcik7XG4gICAgICBhd2FpdCByZXN1bHRQcm9taXNlLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIGNiLm9uVHVybklkPy4odHVybklkKTtcbiAgICBhd2FpdCByZXN1bHRQcm9taXNlO1xuICAgIHJldHVybiB7IHRocmVhZElkIH07XG4gIH1cblxuICAvLyDilIDilIAgdGhyZWFkIOyerOyCrOyaqSDsp4Dsm5Ag4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgZ2V0IGVwb2NoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXBvY2hDb3VudGVyO1xuICB9XG5cbiAgaGFzVGhyZWFkKHRocmVhZElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50aHJlYWRNZXRhLmhhcyh0aHJlYWRJZCk7XG4gIH1cblxuICAvLyBpZGxlIFRUTCDstIjqs7wgLyDqsJzsiJgg7IOB7ZWcIOy0iOqzvCB0aHJlYWQg66W8IOygleumrC4gY3JlYXRlVGhyZWFkIOyngeyghCBsYXp5IO2YuOy2nC5cbiAgLy8gY29kZXggZXBoZW1lcmFsIHRocmVhZCDripQg66qF7Iuc7KCBIGNsb3NlIFJQQyDsl4bsnbQg66e17JeQ7IScIOygnOqxsCDihpIg642UIOydtOyDgSB0dXJuIOyViCDrs7Trg4QuXG4gIHN3ZWVwSWRsZVRocmVhZHMoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBmb3IgKGNvbnN0IFtpZCwgbWV0YV0gb2YgdGhpcy50aHJlYWRNZXRhKSB7XG4gICAgICBpZiAobm93IC0gbWV0YS5sYXN0VXNlZEF0ID4gQ29kZXhBcHBTZXJ2ZXJXb3JrZXIuVEhSRUFEX0lETEVfVFRMX01TKSB7XG4gICAgICAgIHRoaXMudGhyZWFkTWV0YS5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBjcmVhdGVUaHJlYWQg7KeB7KCEIO2YuOy2nCDihpIg7IOIIHRocmVhZCAxIOqwnOqwgCDqs6cg7LaU6rCA65Cc64ukLiDstpTqsIAg7ZuE7JeQ64+EIE1BWCDrpbwg64SY7KeAIOyViuuPhOuhnVxuICAgIC8vIE1BWC0xIOydtO2VmOuhnCDspITsl6wg65GU64ukKOq3uOuemOyVvCDsg53shLEg7KeB7ZuEIOygle2Zle2eiCBNQVgpLiBMUlU6IGxhc3RVc2VkQXQg7Jik66aE7LCo7Iic7Jy866GcIOygnOqxsC5cbiAgICBjb25zdCBsaW1pdCA9IENvZGV4QXBwU2VydmVyV29ya2VyLk1BWF9USFJFQURTX1BFUl9XT1JLRVIgLSAxO1xuICAgIGlmICh0aGlzLnRocmVhZE1ldGEuc2l6ZSA+IGxpbWl0KSB7XG4gICAgICBjb25zdCBzb3J0ZWQgPSBbLi4udGhpcy50aHJlYWRNZXRhLmVudHJpZXMoKV0udG9Tb3J0ZWQoXG4gICAgICAgIChhLCBiKSA9PiBhWzFdLmxhc3RVc2VkQXQgLSBiWzFdLmxhc3RVc2VkQXQsXG4gICAgICApO1xuICAgICAgY29uc3Qgb3ZlciA9IHRoaXMudGhyZWFkTWV0YS5zaXplIC0gbGltaXQ7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG92ZXI7IGkrKykgdGhpcy50aHJlYWRNZXRhLmRlbGV0ZShzb3J0ZWRbaV0hWzBdKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbnRlcnJ1cHRUdXJuKHRocmVhZElkOiBzdHJpbmcsIHR1cm5JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnJwYyB8fCAhdGhpcy5yZWFkeSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJwYy5yZXF1ZXN0KFwidHVybi9pbnRlcnJ1cHRcIiwgeyB0aHJlYWRJZCwgdHVybklkIH0pO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIHByaXZhdGUgZmFpbEFjdGl2ZVR1cm4oZXJyb3I6IEVycm9yKTogdm9pZCB7XG4gICAgY29uc3QgYWJvcnQgPSB0aGlzLmFjdGl2ZVR1cm5BYm9ydDtcbiAgICB0aGlzLmFjdGl2ZVR1cm5BYm9ydCA9IHVuZGVmaW5lZDtcbiAgICBhYm9ydD8uKGVycm9yKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cEdlbmVyYXRlZEltYWdlcygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgcm1TeW5jKGAke3RoaXMuY29kZXhIb21lfS9nZW5lcmF0ZWRfaW1hZ2VzYCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZVR1cm5Ob3RpZmljYXRpb25zKFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgbW9kZWw6IHN0cmluZyxcbiAgICB0dGZ0VHJhY2tlciA9IGNyZWF0ZVR0ZnRUcmFja2VyKCksXG4gICk6IFByb21pc2U8VHVyblJlc3VsdD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxUdXJuUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgICAgbGV0IGFib3J0OiBBY3RpdmVUdXJuQWJvcnQ7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGZpbmlzaFdpdGhFcnJvcihuZXcgRXJyb3IoXCJ0dXJuIHRpbWVvdXQgKDYwMHMpXCIpKTtcbiAgICAgIH0sIDYwMF8wMDApO1xuXG4gICAgICBsZXQgdGV4dCA9IFwiXCI7XG4gICAgICBsZXQgdXNhZ2U6IFRva2VuVXNhZ2VCcmVha2Rvd24gPSB7XG4gICAgICAgIHRvdGFsVG9rZW5zOiAwLFxuICAgICAgICBpbnB1dFRva2VuczogMCxcbiAgICAgICAgb3V0cHV0VG9rZW5zOiAwLFxuICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogMCxcbiAgICAgICAgcmVhc29uaW5nT3V0cHV0VG9rZW5zOiAwLFxuICAgICAgfTtcbiAgICAgIGxldCBkdXJhdGlvbk1zID0gMDtcbiAgICAgIGNvbnN0IGltYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBUdXJuSW1hZ2U+KCk7IC8vIGl0ZW0uaWQg4oaSIOydtOuvuOyngCAoZGVkdXApXG4gICAgICBsZXQgaW1hZ2VBdHRlbXB0ZWQgPSBmYWxzZTtcblxuICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVUdXJuQWJvcnQgPT09IGFib3J0KSB0aGlzLmFjdGl2ZVR1cm5BYm9ydCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIFtcbiAgICAgICAgICBcIml0ZW0vc3RhcnRlZFwiLFxuICAgICAgICAgIFwiaXRlbS9jb21wbGV0ZWRcIixcbiAgICAgICAgICBcIml0ZW0vYWdlbnRNZXNzYWdlL2RlbHRhXCIsXG4gICAgICAgICAgXCJ0dXJuL2NvbXBsZXRlZFwiLFxuICAgICAgICAgIFwidGhyZWFkL3Rva2VuVXNhZ2UvdXBkYXRlZFwiLFxuICAgICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgXSBhcyBjb25zdCkge1xuICAgICAgICAgIHRoaXMucnBjPy5vbk5vdGlmaWNhdGlvbihuLCAoKSA9PiB7fSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGZpbmlzaFdpdGhFcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGZpbmlzaFdpdGhSZXN1bHQgPSAocmVzdWx0OiBUdXJuUmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIGlmIChyZXN1bHQuaW1hZ2VBdHRlbXB0ZWQpIHRoaXMuY2xlYW51cEdlbmVyYXRlZEltYWdlcygpO1xuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9O1xuXG4gICAgICBhYm9ydCA9IGZpbmlzaFdpdGhFcnJvcjtcbiAgICAgIHRoaXMuYWN0aXZlVHVybkFib3J0ID0gYWJvcnQ7XG5cbiAgICAgIC8vIOydtOuvuOyngCB0b29sIO2YuOy2nCDqtIDsuKEo7J6s7Iuc64+EIO2MkOygleyaqSkuIHN0YXJ0ZWQg64qUIHJlc3VsdCDsl4bsnbQg7Jik66+A66GcXG4gICAgICAvLyBhdHRlbXB0ZWQg7Iug7Zi466Gc66eMIOyTsOqzoCwg7JmE7ISxIOydtOuvuOyngOuKlCBjb21wbGV0ZWQg7JeQ7IScIHJlc3VsdCDsnKDtmqjshLHsnLzroZwg7YyQ7KCV7ZWc64ukLlxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiaXRlbS9zdGFydGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICBpZiAocC5pdGVtLnR5cGUgPT09IFwiaW1hZ2VHZW5lcmF0aW9uXCIpIGltYWdlQXR0ZW1wdGVkID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJpdGVtL2NvbXBsZXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgaWYgKHAuaXRlbS50eXBlID09PSBcImFnZW50TWVzc2FnZVwiKSB7XG4gICAgICAgICAgdGV4dCA9IHAuaXRlbS50ZXh0O1xuICAgICAgICB9IGVsc2UgaWYgKHAuaXRlbS50eXBlID09PSBcImltYWdlR2VuZXJhdGlvblwiKSB7XG4gICAgICAgICAgaW1hZ2VBdHRlbXB0ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChpc0NvbXBsZXRlZEltYWdlUmVzdWx0KHAuaXRlbS5yZXN1bHQpKSB7XG4gICAgICAgICAgICBpbWFnZXMuc2V0KHAuaXRlbS5pZCwgeyBkYXRhOiBwLml0ZW0ucmVzdWx0LCByZXZpc2VkUHJvbXB0OiBwLml0ZW0ucmV2aXNlZFByb21wdCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJpdGVtL2FnZW50TWVzc2FnZS9kZWx0YVwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgdHRmdFRyYWNrZXIucmVjb3JkRmlyc3REZWx0YSgpO1xuICAgICAgICB0ZXh0ICs9IHAuZGVsdGE7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwidGhyZWFkL3Rva2VuVXNhZ2UvdXBkYXRlZFwiLCAocCkgPT4ge1xuICAgICAgICBpZiAocC50aHJlYWRJZCAhPT0gdGhyZWFkSWQpIHJldHVybjtcbiAgICAgICAgLy8gdGhyZWFkIOyerOyCrOyaqSDsi5wgLnRvdGFsIOydgCDrjIDtmZQg7KCE7LK0IOuIhOyggeydtOudvCwgY29sZCDsmIDrjZgg7J207KCEIHR1cm4g6rmM7KeAIOyEnuyXrFxuICAgICAgICAvLyDsnbQg7JqU7LKtIOyekOyytOydmCBjYWNoZSDsoIHspJHrpaDsnbQg7Z2s7ISd65Cc64ukKOyYiDogdHVybjEgY29sZCAwJSArIHR1cm4yIDkwJSDihpIgNDglIOuhnCDquLDroZ0pLlxuICAgICAgICAvLyAubGFzdCDripQg7J2067KIIHR1cm4g66eM7J2YIHVzYWdlIOudvCByZXF1ZXN0X2xvZyDqsIAg6re4IOyalOyyreydmCDsi6TsoJwg7Yag7YGw7J2EIOygle2Zle2eiCDrsJjsmIHtlZzri6QuXG4gICAgICAgIHVzYWdlID0gcC50b2tlblVzYWdlLmxhc3Q7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwidHVybi9jb21wbGV0ZWRcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIGR1cmF0aW9uTXMgPSBwLnR1cm4uZHVyYXRpb25NcyA/PyAwO1xuICAgICAgICBpZiAocC50dXJuLnN0YXR1cyA9PT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgICAgIGZpbmlzaFdpdGhSZXN1bHQoe1xuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIHVzYWdlLFxuICAgICAgICAgICAgZHVyYXRpb25NcyxcbiAgICAgICAgICAgIHR0ZnRNczogdHRmdFRyYWNrZXIudmFsdWUoKSxcbiAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgaW1hZ2VzOiBpbWFnZXMuc2l6ZSA+IDAgPyBbLi4uaW1hZ2VzLnZhbHVlcygpXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGltYWdlQXR0ZW1wdGVkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHR1cm4g7Iuk7YyoL+ykkeuLqCDsi5wg67aA67aEIOydtOuvuOyngOuKlCDtj5DquLAo7ISx6rO17Jy866GcIOyKueqyqe2VmOyngCDslYrsnYwpLlxuICAgICAgICAgIGZpbmlzaFdpdGhFcnJvcihuZXcgRXJyb3IoYHR1cm4gZmFpbGVkOiAke0pTT04uc3RyaW5naWZ5KHAudHVybi5lcnJvcil9YCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiZXJyb3JcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIGlmICghcC53aWxsUmV0cnkpIHtcbiAgICAgICAgICBmaW5pc2hXaXRoRXJyb3IobmV3IEVycm9yKGBjb2RleCBlcnJvcjogJHtwLmVycm9yLm1lc3NhZ2V9YCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZVN0cmVhbU5vdGlmaWNhdGlvbnMoXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBtb2RlbDogc3RyaW5nLFxuICAgIGNiOiBTdHJlYW1DYWxsYmFja3MsXG4gICAgdHRmdFRyYWNrZXIgPSBjcmVhdGVUdGZ0VHJhY2tlcigpLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IHNldHRsZWQgPSBmYWxzZTtcbiAgICAgIGxldCBhYm9ydDogQWN0aXZlVHVybkFib3J0O1xuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBmaW5pc2hXaXRoRXJyb3IobmV3IEVycm9yKFwidHVybiB0aW1lb3V0ICg2MDBzKVwiKSk7XG4gICAgICB9LCA2MDBfMDAwKTtcblxuICAgICAgbGV0IHRleHQgPSBcIlwiO1xuICAgICAgbGV0IHVzYWdlOiBUb2tlblVzYWdlQnJlYWtkb3duID0ge1xuICAgICAgICB0b3RhbFRva2VuczogMCxcbiAgICAgICAgaW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIG91dHB1dFRva2VuczogMCxcbiAgICAgICAgY2FjaGVkSW5wdXRUb2tlbnM6IDAsXG4gICAgICAgIHJlYXNvbmluZ091dHB1dFRva2VuczogMCxcbiAgICAgIH07XG4gICAgICBjb25zdCBpbWFnZXMgPSBuZXcgTWFwPHN0cmluZywgVHVybkltYWdlPigpOyAvLyBpdGVtLmlkIOKGkiDsnbTrr7jsp4AgKGRlZHVwKVxuICAgICAgbGV0IGltYWdlQXR0ZW1wdGVkID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVHVybkFib3J0ID09PSBhYm9ydCkgdGhpcy5hY3RpdmVUdXJuQWJvcnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBbXG4gICAgICAgICAgXCJpdGVtL3N0YXJ0ZWRcIixcbiAgICAgICAgICBcIml0ZW0vY29tcGxldGVkXCIsXG4gICAgICAgICAgXCJpdGVtL2FnZW50TWVzc2FnZS9kZWx0YVwiLFxuICAgICAgICAgIFwidHVybi9jb21wbGV0ZWRcIixcbiAgICAgICAgICBcInRocmVhZC90b2tlblVzYWdlL3VwZGF0ZWRcIixcbiAgICAgICAgICBcImVycm9yXCIsXG4gICAgICAgIF0gYXMgY29uc3QpIHtcbiAgICAgICAgICB0aGlzLnJwYz8ub25Ob3RpZmljYXRpb24obiwgKCkgPT4ge30pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmaW5pc2hXaXRoRXJyb3IgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIGNiLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgZmluaXNoV2l0aENvbXBsZXRlID0gKHJlc3VsdDogVHVyblJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICBpZiAocmVzdWx0LmltYWdlQXR0ZW1wdGVkKSB0aGlzLmNsZWFudXBHZW5lcmF0ZWRJbWFnZXMoKTtcbiAgICAgICAgY2Iub25Db21wbGV0ZShyZXN1bHQpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuXG4gICAgICBhYm9ydCA9IGZpbmlzaFdpdGhFcnJvcjtcbiAgICAgIHRoaXMuYWN0aXZlVHVybkFib3J0ID0gYWJvcnQ7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcIml0ZW0vYWdlbnRNZXNzYWdlL2RlbHRhXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICB0dGZ0VHJhY2tlci5yZWNvcmRGaXJzdERlbHRhKCk7XG4gICAgICAgIHRleHQgKz0gcC5kZWx0YTtcbiAgICAgICAgY2Iub25EZWx0YShwLmRlbHRhKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwYyEub25Ob3RpZmljYXRpb24oXCJpdGVtL3N0YXJ0ZWRcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIGlmIChwLml0ZW0udHlwZSA9PT0gXCJpbWFnZUdlbmVyYXRpb25cIikgaW1hZ2VBdHRlbXB0ZWQgPSB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcIml0ZW0vY29tcGxldGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICBpZiAocC5pdGVtLnR5cGUgPT09IFwiYWdlbnRNZXNzYWdlXCIpIHtcbiAgICAgICAgICB0ZXh0ID0gcC5pdGVtLnRleHQ7XG4gICAgICAgIH0gZWxzZSBpZiAocC5pdGVtLnR5cGUgPT09IFwiaW1hZ2VHZW5lcmF0aW9uXCIpIHtcbiAgICAgICAgICBpbWFnZUF0dGVtcHRlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKGlzQ29tcGxldGVkSW1hZ2VSZXN1bHQocC5pdGVtLnJlc3VsdCkpIHtcbiAgICAgICAgICAgIGltYWdlcy5zZXQocC5pdGVtLmlkLCB7IGRhdGE6IHAuaXRlbS5yZXN1bHQsIHJldmlzZWRQcm9tcHQ6IHAuaXRlbS5yZXZpc2VkUHJvbXB0IH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcInRocmVhZC90b2tlblVzYWdlL3VwZGF0ZWRcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIC8vIHRocmVhZCDsnqzsgqzsmqkg7IucIC50b3RhbCDsnYAg64yA7ZmUIOyghOyytCDriITsoIHsnbTrnbwsIGNvbGQg7JiA642YIOydtOyghCB0dXJuIOq5jOyngCDshJ7sl6xcbiAgICAgICAgLy8g7J20IOyalOyyrSDsnpDssrTsnZggY2FjaGUg7KCB7KSR66Wg7J20IO2drOyEneuQnOuLpCjsmIg6IHR1cm4xIGNvbGQgMCUgKyB0dXJuMiA5MCUg4oaSIDQ4JSDroZwg6riw66GdKS5cbiAgICAgICAgLy8gLmxhc3Qg64qUIOydtOuyiCB0dXJuIOunjOydmCB1c2FnZSDrnbwgcmVxdWVzdF9sb2cg6rCAIOq3uCDsmpTssq3snZgg7Iuk7KCcIO2GoO2BsOydhCDsoJXtmZXtnogg67CY7JiB7ZWc64ukLlxuICAgICAgICB1c2FnZSA9IHAudG9rZW5Vc2FnZS5sYXN0O1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucnBjIS5vbk5vdGlmaWNhdGlvbihcInR1cm4vY29tcGxldGVkXCIsIChwKSA9PiB7XG4gICAgICAgIGlmIChwLnRocmVhZElkICE9PSB0aHJlYWRJZCkgcmV0dXJuO1xuICAgICAgICBpZiAocC50dXJuLnN0YXR1cyA9PT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgICAgIGZpbmlzaFdpdGhDb21wbGV0ZSh7XG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgdXNhZ2UsXG4gICAgICAgICAgICBkdXJhdGlvbk1zOiBwLnR1cm4uZHVyYXRpb25NcyA/PyAwLFxuICAgICAgICAgICAgdHRmdE1zOiB0dGZ0VHJhY2tlci52YWx1ZSgpLFxuICAgICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgICBpbWFnZXM6IGltYWdlcy5zaXplID4gMCA/IFsuLi5pbWFnZXMudmFsdWVzKCldIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgaW1hZ2VBdHRlbXB0ZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmluaXNoV2l0aEVycm9yKG5ldyBFcnJvcihgdHVybiAke3AudHVybi5zdGF0dXN9OiAke0pTT04uc3RyaW5naWZ5KHAudHVybi5lcnJvcil9YCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ycGMhLm9uTm90aWZpY2F0aW9uKFwiZXJyb3JcIiwgKHApID0+IHtcbiAgICAgICAgaWYgKHAudGhyZWFkSWQgIT09IHRocmVhZElkKSByZXR1cm47XG4gICAgICAgIGlmICghcC53aWxsUmV0cnkpIHtcbiAgICAgICAgICBmaW5pc2hXaXRoRXJyb3IobmV3IEVycm9yKGBjb2RleCBlcnJvcjogJHtwLmVycm9yLm1lc3NhZ2V9YCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSZXN0YXJ0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByaXZhdGUgc2NoZWR1bGVSZXN0YXJ0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCB8fCB0aGlzLnJlc3RhcnRBdHRlbXB0cyA+PSBNQVhfUkVTVEFSVF9BVFRFTVBUUykge1xuICAgICAgaWYgKHRoaXMucmVzdGFydEF0dGVtcHRzID49IE1BWF9SRVNUQVJUX0FUVEVNUFRTKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGB3b3JrZXIgJHt0aGlzLmNvbmZpZy50b2tlbk5hbWV9IG1heCByZXN0YXJ0IGF0dGVtcHRzIHJlYWNoZWRgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlc3RhcnRBdHRlbXB0cysrO1xuICAgIGNvbnN0IGJhc2VEZWxheSA9IFJFU1RBUlRfQkFDS09GRl9CQVNFX01TICogMiAqKiAodGhpcy5yZXN0YXJ0QXR0ZW1wdHMgLSAxKTtcbiAgICBjb25zdCBzdGFnZ2VyID0gKHRoaXMuY29uZmlnLndvcmtlckluZGV4ID8/IDApICogMl8wMDA7XG4gICAgY29uc3QgZGVsYXkgPSBiYXNlRGVsYXkgKyBzdGFnZ2VyO1xuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYHdvcmtlciAke3RoaXMuY29uZmlnLnRva2VuTmFtZX1bJHt0aGlzLmNvbmZpZy53b3JrZXJJbmRleCA/PyAwfV0gcmVzdGFydGluZyBpbiAke2RlbGF5fW1zIChhdHRlbXB0ICR7dGhpcy5yZXN0YXJ0QXR0ZW1wdHN9KWAsXG4gICAgKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICB0aGlzLmluaXRpYWxpemUoKVxuICAgICAgICAudGhlbigoKSA9PiB0aGlzLm9uUmVhZHk/LigpKVxuICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICBsb2dnZXIud2Fybihgd29ya2VyICR7dGhpcy5jb25maWcudG9rZW5OYW1lfSByZXN0YXJ0IGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlUmVzdGFydCgpO1xuICAgICAgICB9KTtcbiAgICB9LCBkZWxheSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUF1QkEsTUFBTSxTQUFTLFVBQVUsQ0FBQyxTQUFTLGVBQWUsQ0FBQztBQUVuRCxNQUFNLHVCQUF1QjtBQUM3QixNQUFNLDBCQUEwQjtBQXVEaEMsTUFBTSxrQkFBa0I7Q0FDdEIsU0FBUztDQUNULGdCQUFnQjtDQUNoQixRQUFRLEVBQ04sTUFBTSxFQUFFLFVBQVU7RUFBRSxTQUFTO0VBQU8scUJBQXFCO0VBQU8sb0JBQW9CO0VBQU8sRUFBRSxFQUM5RjtDQUNGO0FBRUQsTUFBTSxvQkFDSjtBQUtGLE1BQU0sMEJBQ0o7QUFFRixTQUFTLHNCQUFzQixTQUFxRDtDQUNsRixNQUFNLFdBQVcsOEJBQThCLFFBQVE7QUFDdkQsUUFBTyxHQUFHLHdC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
|
|
@@ -3,6 +3,60 @@ import { describe, expect, it } from "vitest";
|
|
|
3
3
|
import { calculateCostUsd, getModelCosts } from "./model-cost";
|
|
4
4
|
|
|
5
5
|
describe("calculateCostUsd", () => {
|
|
6
|
+
it.each([
|
|
7
|
+
["gpt-5.6-sol", 5, 30, 0.5, 6.25, 3.30625],
|
|
8
|
+
["gpt-5.6-terra", 2.5, 15, 0.25, 3.125, 1.653125],
|
|
9
|
+
["gpt-5.6-luna", 1, 6, 0.1, 1.25, 0.66125],
|
|
10
|
+
])(
|
|
11
|
+
"%s applies published input, output, cache-read, and cache-write pricing",
|
|
12
|
+
(model, inputTokens, outputTokens, cachedInputTokens, cacheCreationInputTokens, expectedCost) => {
|
|
13
|
+
expect(getModelCosts(model)).toMatchObject({
|
|
14
|
+
inputTokens,
|
|
15
|
+
outputTokens,
|
|
16
|
+
cachedInputTokens,
|
|
17
|
+
cacheCreationInputTokens,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
expect(
|
|
21
|
+
calculateCostUsd(model, {
|
|
22
|
+
inputTokens: 100_000,
|
|
23
|
+
outputTokens: 100_000,
|
|
24
|
+
cachedInputTokens: 50_000,
|
|
25
|
+
cacheCreationInputTokens: 25_000,
|
|
26
|
+
}),
|
|
27
|
+
).toBeCloseTo(expectedCost, 10);
|
|
28
|
+
},
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
it.each([
|
|
32
|
+
["gpt-5.6-sol", 1.245],
|
|
33
|
+
["gpt-5.6-terra", 0.6225],
|
|
34
|
+
["gpt-5.6-luna", 0.249],
|
|
35
|
+
])("%s applies the published long-context surcharge", (model, expectedCost) => {
|
|
36
|
+
expect(
|
|
37
|
+
calculateCostUsd(model, {
|
|
38
|
+
inputTokens: 300_000,
|
|
39
|
+
outputTokens: 1_000,
|
|
40
|
+
cachedInputTokens: 200_000,
|
|
41
|
+
}),
|
|
42
|
+
).toBeCloseTo(expectedCost, 10);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it.each([
|
|
46
|
+
["gpt-5.6-sol", 1.37],
|
|
47
|
+
["gpt-5.6-terra", 0.685],
|
|
48
|
+
["gpt-5.6-luna", 0.274],
|
|
49
|
+
])("%s applies the long-context input multiplier to cache writes", (model, expectedCost) => {
|
|
50
|
+
expect(
|
|
51
|
+
calculateCostUsd(model, {
|
|
52
|
+
inputTokens: 300_000,
|
|
53
|
+
outputTokens: 1_000,
|
|
54
|
+
cachedInputTokens: 200_000,
|
|
55
|
+
cacheCreationInputTokens: 50_000,
|
|
56
|
+
}),
|
|
57
|
+
).toBeCloseTo(expectedCost, 10);
|
|
58
|
+
});
|
|
59
|
+
|
|
6
60
|
it("Anthropic cache read/write 를 전체 입력에서 분리해 각각 단가를 적용한다", () => {
|
|
7
61
|
const cost = calculateCostUsd("claude-sonnet-4-6", {
|
|
8
62
|
inputTokens: 1_917,
|