sonamu 0.8.2 → 0.8.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/dist/bin/cli.js CHANGED
@@ -939,7 +939,8 @@ async function scaffold_model_test(entityId) {
939
939
  if (isGlobal) {
940
940
  await skills_sync_to(path.join(os.homedir(), ".claude"), sourceSkillsDir, sourceClaudeMd, {
941
941
  useSymlink: false,
942
- copyProjectTemplates: false
942
+ copyProjectTemplates: false,
943
+ isGlobal: true
943
944
  });
944
945
  console.log(chalk.cyan(`\n Global sync complete → ~/.claude/skills/sonamu/`));
945
946
  console.log(chalk.dim(` These skills are available in all Claude Code sessions.`));
@@ -1006,7 +1007,9 @@ async function scaffold_model_test(entityId) {
1006
1007
  if (await exists(sourceClaudeMd)) {
1007
1008
  try {
1008
1009
  const targetClaudeMd = path.join(claudeDir, "CLAUDE.md");
1009
- const sourceContent = await readFile(sourceClaudeMd, "utf-8");
1010
+ const rawContent = await readFile(sourceClaudeMd, "utf-8");
1011
+ // 글로벌 모드에서는 상대 경로를 절대 경로로 변환합니다
1012
+ const sourceContent = options.isGlobal ? rawContent.replaceAll(".claude/skills/sonamu/", "~/.claude/skills/sonamu/") : rawContent;
1010
1013
  if (await exists(targetClaudeMd)) {
1011
1014
  const targetContent = await readFile(targetClaudeMd, "utf-8");
1012
1015
  const startMarker = "<!-- SONAMU:START -->";
@@ -1212,4 +1215,4 @@ status: draft
1212
1215
  return findAppRootPath();
1213
1216
  }
1214
1217
 
1215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuXG5kb3RlbnYuY29uZmlnKCk7XG5cbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgZXhlY1N5bmMsIHNwYXduIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGNwLCBta2RpciwgcmVhZGRpciwgcmVhZEZpbGUsIHJtLCBzeW1saW5rLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBrbmV4LCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm1vZHVsZVwiO1xuaW1wb3J0IG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBwcm9jZXNzIGZyb20gXCJwcm9jZXNzXCI7XG5pbXBvcnQgeyB0c2ljbGkgfSBmcm9tIFwidHNpY2xpXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUJldHRlckF1dGhFbnRpdGllcyB9IGZyb20gXCIuLi9hdXRoL2F1dGgtZ2VuZXJhdG9yXCI7XG5pbXBvcnQge1xuICB0eXBlIEJldHRlckF1dGhQbHVnaW5JZCxcbiAgaXNWYWxpZFBsdWdpbklkLFxuICBTVVBQT1JURURfUExVR0lOX0lEUyxcbn0gZnJvbSBcIi4uL2F1dGgvcGx1Z2lucy9lbnRpdHktZGVmaW5pdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11REJDb25maWcgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBNaWdyYXRvciB9IGZyb20gXCIuLi9taWdyYXRpb24vbWlncmF0b3JcIjtcbmltcG9ydCB7IEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBleGVjV2l0aExpbmVQcmVmaXgsXG4gIHByaW50QnVpbGRTdW1tYXJ5LFxuICBwcmludFRhc2tGYWlsZWQsXG4gIHByaW50VGFza0hlYWRlcixcbiAgcHJpbnRUYXNrU3RhcnQsXG4gIHByaW50VGFza1N1Y2Nlc3MsXG59IGZyb20gXCIuLi91dGlscy9jb25zb2xlLXV0aWxcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuaW1wb3J0IHsgZmluZEFwaVJvb3RQYXRoLCBmaW5kQXBwUm9vdFBhdGggfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IEFQSV9BUlRJRkFDVFMsIHR5cGUgQnVpbGRBcnRpZmFjdCwgV0VCX0FSVElGQUNUUyB9IGZyb20gXCIuL2J1aWxkLWNvbmZpZ1wiO1xuaW1wb3J0IHsgZml4dHVyZUV4cGxvcmVDb21tYW5kLCBmaXh0dXJlRmV0Y2hDb21tYW5kLCBmaXh0dXJlR2VuQ29tbWFuZCB9IGZyb20gXCIuL2ZpeHR1cmVcIjtcblxubGV0IG1pZ3JhdG9yOiBNaWdyYXRvcjtcblxuLyoqXG4gKiBDTEkg7Ji17IWY7J2EIO2MjOyLse2VmOuKlCDtl6ztjbwg7ZWo7IiYXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ2xpT3B0aW9ucyhhcmd2OiBzdHJpbmdbXSA9IHByb2Nlc3MuYXJndik6IHtcbiAgZmxhZ3M6IFNldDxzdHJpbmc+OyAvLyAtLXJlZ2VuZXJhdGUsIC0tYWksIC0tbm8tY29uZXMg65OxXG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IC8vIC0tbG9jYWxlIGtvIOuTsVxufSB7XG4gIGNvbnN0IGZsYWdzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcmcgPSBhcmd2W2ldO1xuICAgIGlmICghYXJnLnN0YXJ0c1dpdGgoXCItLVwiKSkgY29udGludWU7XG5cbiAgICAvLyAtLW9wdGlvbj12YWx1ZSDtmJXsi51cbiAgICBpZiAoYXJnLmluY2x1ZGVzKFwiPVwiKSkge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gYXJnLnNsaWNlKDIpLnNwbGl0KFwiPVwiKTtcbiAgICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gLS1vcHRpb24gdmFsdWUg7ZiV7Iud7J247KeAIO2ZleyduFxuICAgIGNvbnN0IG5leHRBcmcgPSBhcmd2W2kgKyAxXTtcbiAgICBpZiAobmV4dEFyZyAmJiAhbmV4dEFyZy5zdGFydHNXaXRoKFwiLS1cIikgJiYgIW5leHRBcmcuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgIG9wdGlvbnNbYXJnLnNsaWNlKDIpXSA9IG5leHRBcmc7XG4gICAgICBpKys7IC8vIOuLpOydjCBhcmfripQg6rCS7J2066+A66GcIOyKpO2CtVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAtLWZsYWcg7ZiV7IudXG4gICAgICBmbGFncy5hZGQoYXJnLnNsaWNlKDIpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBmbGFncywgb3B0aW9ucyB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBib290c3RyYXAoKSB7XG4gIGNvbnN0IG5vdFRvSW5pdCA9IFtcImRldlwiLCBcImJ1aWxkXCIsIFwic3RhcnRcIiwgXCJza2lsbHNcIl0uaW5jbHVkZXMocHJvY2Vzcy5hcmd2WzJdID8/IFwiXCIpO1xuICBpZiAoIW5vdFRvSW5pdCkge1xuICAgIGF3YWl0IFNvbmFtdS5pbml0KGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIHRzaWNsaeuKlCDsoJXtmZXtlZwg66qF66C57Ja0IOunpOy5reunjCDsp4Dsm5DtlZjrr4DroZwsIC0t66GcIOyLnOyeke2VmOuKlCDsmLXshZjqs7wg6re4IOqwkuydhCDtlYTthLDrp4Htlanri4jri6QuXG4gICAgLy8g7Ji17IWYIO2MjOyLseydgCDqsIEgcnVubmVyIO2VqOyImOyXkOyEnCDsm5Drs7ggcHJvY2Vzcy5hcmd266W8IOyCrOyaqe2VmOyXrCDsiJjtlontlanri4jri6QuXG4gICAgLy8gXCItLVwiKGJhcmUgZG91YmxlIGRhc2gp64qUIHBhc3N0aHJvdWdoIOq1rOu2hOyekOydtOuvgOuhnCwg6re4IOuSpOydmCDrqqjrk6Ag7J247J6Q64+EIOygnOyZuO2VqeuLiOuLpC5cbiAgICBjb25zdCBmaWx0ZXJlZEFyZ3Y6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IHNraXBOZXh0ID0gZmFsc2U7XG4gICAgbGV0IGFmdGVyRG91YmxlRGFzaCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvY2Vzcy5hcmd2Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBhcmcgPSBwcm9jZXNzLmFyZ3ZbaV07XG4gICAgICBpZiAoYXJnID09PSBcIi0tXCIpIHtcbiAgICAgICAgYWZ0ZXJEb3VibGVEYXNoID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoYWZ0ZXJEb3VibGVEYXNoKSBjb250aW51ZTtcbiAgICAgIGlmIChza2lwTmV4dCkge1xuICAgICAgICBza2lwTmV4dCA9IGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmcuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICAgIC8vIC0tb3B0aW9uPXZhbHVlIO2YleyLneydgCDsnbQgYXJn66eMIOyKpO2CtVxuICAgICAgICBpZiAoYXJnLmluY2x1ZGVzKFwiPVwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIC0tb3B0aW9uIHZhbHVlIO2YleyLneyduOyngCDtmZXsnbg6IOuLpOydjCBhcmfqsIAgLS3roZwg7Iuc7J6R7ZWY7KeAIOyViuycvOuptCDqsJLsnbQg7J6I64qUIOqyg1xuICAgICAgICBjb25zdCBuZXh0QXJnID0gcHJvY2Vzcy5hcmd2W2kgKyAxXTtcbiAgICAgICAgaWYgKG5leHRBcmcgJiYgIW5leHRBcmcuc3RhcnRzV2l0aChcIi0tXCIpICYmICFuZXh0QXJnLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgc2tpcE5leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZmlsdGVyZWRBcmd2LnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICAvLyBidWlsZC9kZXYg66qF66C57Ja06rCAIOyEnOu4jOy7pOunqOuTnCDsl4bsnbQg7Zi47Lac65CgIOuVjCBcImFsbFwi7J2EIOq4sOuzuOqwkuycvOuhnCDstpTqsIDtlanri4jri6QuXG4gICAgLy8g7JiIOiBgc29uYW11IGJ1aWxkYCDihpIgYHNvbmFtdSBidWlsZCBhbGxgLCBgc29uYW11IGRldmAg4oaSIGBzb25hbXUgZGV2IGFsbGBcbiAgICBjb25zdCBjbWQgPSBmaWx0ZXJlZEFyZ3ZbMl07XG4gICAgaWYgKChjbWQgPT09IFwiYnVpbGRcIiB8fCBjbWQgPT09IFwiZGV2XCIpICYmIGZpbHRlcmVkQXJndi5sZW5ndGggPT09IDMpIHtcbiAgICAgIGZpbHRlcmVkQXJndi5wdXNoKFwiYWxsXCIpO1xuICAgIH1cblxuICAgIGF3YWl0IHRzaWNsaShmaWx0ZXJlZEFyZ3YsIHtcbiAgICAgIHR5cGVzOiB7XG4gICAgICAgIFwiI2VudGl0eUlkXCI6IHtcbiAgICAgICAgICB0eXBlOiBcImF1dG9jb21wbGV0ZVwiLFxuICAgICAgICAgIG5hbWU6IFwiI2VudGl0eUlkXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJQbGVhc2UgaW5wdXQgI2VudGl0eUlkXCIsXG4gICAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxQYXJlbnRJZHMoKS5tYXAoKGVudGl0eUlkKSA9PiAoe1xuICAgICAgICAgICAgdGl0bGU6IGVudGl0eUlkLFxuICAgICAgICAgICAgdmFsdWU6IGVudGl0eUlkLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgICAgXCIjcmVjb3JkSWRzXCI6IFwibnVtYmVyW11cIixcbiAgICAgICAgXCIjbmFtZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICBcIiN0YXJnZXRzXCI6IHtcbiAgICAgICAgICB0eXBlOiBcIm11bHRpc2VsZWN0XCIsXG4gICAgICAgICAgbmFtZTogXCIjdGFyZ2V0c1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiUGxlYXNlIGlucHV0ICN0YXJnZXRzXCIsXG4gICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgeyB0aXRsZTogXCJEZXZlbG9wbWVudFwiLCB2YWx1ZTogXCJkZXZlbG9wbWVudF9tYXN0ZXJcIiB9LFxuICAgICAgICAgICAgeyB0aXRsZTogXCJQcm9kdWN0aW9uXCIsIHZhbHVlOiBcInByb2R1Y3Rpb25fbWFzdGVyXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiRml4dHVyZVwiLCB2YWx1ZTogXCJmaXh0dXJlXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiVGVzdFwiLCB2YWx1ZTogXCJ0ZXN0XCIgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImluaXRcIl0sXG4gICAgICAgIFtcImZpeHR1cmVcIiwgXCJpbXBvcnRcIiwgXCIjZW50aXR5SWRcIiwgXCIjcmVjb3JkSWRzXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwic3luY1wiXSxcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImdlblwiXSxcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImZldGNoXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwiZXhwbG9yZVwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInJ1blwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcImFwcGx5XCIsIFwiI3RhcmdldHNcIl0sXG4gICAgICAgIFtcIm1pZ3JhdGVcIiwgXCJzdGF0dXNcIl0sXG4gICAgICAgIFtcInN0dWJcIiwgXCJwcmFjdGljZVwiLCBcIiNuYW1lXCJdLFxuICAgICAgICBbXCJzdHViXCIsIFwiZW50aXR5XCIsIFwiI25hbWVcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwibW9kZWxcIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwibW9kZWxfdGVzdFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJ2aWV3X2xpc3RcIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwidmlld19mb3JtXCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJjb25lXCIsIFwiZ2VuXCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJzeW5jXCJdLFxuICAgICAgICBbXCJidWlsZFwiLCBcImFsbFwiXSxcbiAgICAgICAgW1wiYnVpbGRcIiwgXCJhcGlcIl0sXG4gICAgICAgIFtcImJ1aWxkXCIsIFwid2ViXCJdLFxuICAgICAgICBbXCJkZXZcIiwgXCJhbGxcIl0sXG4gICAgICAgIFtcImRldlwiLCBcImFwaVwiXSxcbiAgICAgICAgW1wiZGV2XCIsIFwid2ViXCJdLFxuICAgICAgICBbXCJzdGFydFwiXSxcbiAgICAgICAgW1wic2tpbGxzXCIsIFwic3luY1wiXSxcbiAgICAgICAgW1wic2tpbGxzXCIsIFwiY3JlYXRlXCIsIFwiI25hbWVcIl0sXG4gICAgICAgIFtcImF1dGhcIiwgXCJnZW5lcmF0ZVwiXSxcbiAgICAgIF0sXG4gICAgICBydW5uZXJzOiB7XG4gICAgICAgIG1pZ3JhdGVfc3RhdHVzLFxuICAgICAgICBtaWdyYXRlX3J1bixcbiAgICAgICAgbWlncmF0ZV9hcHBseSxcbiAgICAgICAgZml4dHVyZV9pbml0LFxuICAgICAgICBmaXh0dXJlX2ltcG9ydCxcbiAgICAgICAgZml4dHVyZV9zeW5jLFxuICAgICAgICBmaXh0dXJlX2dlbixcbiAgICAgICAgZml4dHVyZV9mZXRjaCxcbiAgICAgICAgZml4dHVyZV9leHBsb3JlLFxuICAgICAgICBzdHViX3ByYWN0aWNlLFxuICAgICAgICBzdHViX2VudGl0eSxcbiAgICAgICAgc2NhZmZvbGRfbW9kZWwsXG4gICAgICAgIHNjYWZmb2xkX21vZGVsX3Rlc3QsXG4gICAgICAgIC8vIHNjYWZmb2xkX3ZpZXdfbGlzdCxcbiAgICAgICAgLy8gc2NhZmZvbGRfdmlld19mb3JtLFxuICAgICAgICBjb25lX2dlbixcbiAgICAgICAgc3luYyxcbiAgICAgICAgYnVpbGRfYWxsLFxuICAgICAgICBidWlsZF9hcGksXG4gICAgICAgIGJ1aWxkX3dlYixcbiAgICAgICAgZGV2X2FsbCxcbiAgICAgICAgZGV2X2FwaSxcbiAgICAgICAgZGV2X3dlYixcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHNraWxsc19zeW5jLFxuICAgICAgICBza2lsbHNfY3JlYXRlLFxuICAgICAgICBhdXRoX2dlbmVyYXRlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBTb25hbXUuZGVzdHJveSgpO1xuICB9XG59XG5cbmJvb3RzdHJhcCgpLmZpbmFsbHkoYXN5bmMgKCkgPT4ge1xuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5kZXN0cm95KCk7XG59KTtcblxuLyoqXG4gKiBwbnBtIHN5bmMg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjrpbwg7Iux7YGs7ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBzeW5jKCkge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLnN5bmMoKTtcbn1cblxuLyoqXG4gKiBBUEkg6rCc67CcIOyEnOuyhOulvCDsi6TtlontlZjripQg6rO17Ya1IOuhnOyngeyeheuLiOuLpC5cbiAqIGRldl9hbGzqs7wgZGV2X2FwaeyXkOyEnCDqs7XsnKDtlanri4jri6QuXG4gKlxuICogVHlwZVNjcmlwdOulvCDrsJTroZwg7Iuk7ZaJ7ZWgIOyImCDsnojrj4TroZ0gQHNvbmFtdS1raXQvdHMtbG9hZGVy66W8LFxuICogSE1S7J2EIOyngOybkO2VmOq4sCDsnITtlbQgQHNvbmFtdS1raXQvaG1yLWhvb2vsnYQgaW1wb3J07ZWY66mwLFxuICog7IaM7Iqk66e1IOyngOybkOydhCDsnITtlbQgLS1lbmFibGUtc291cmNlLW1hcHMg7ZSM656Y6re466W8IO2PrO2VqO2VmOyXrCDsi6Ttlontlanri4jri6QuXG4gKlxuICog7J2065WMIEBzb25hbXUta2l0L3RzLWxvYWRlcuyZgCBAc29uYW11LWtpdC9obXItaG9va+uKlCBzb25hbXXqsIAg7J6Q7LK07KCB7Jy866GcIOqwgOyngOqzoCDsnojripQgZGVwZW5kZW5jeeyeheuLiOuLpC5cbiAqIOuYkO2VnCDsi6Ttlonsl5Ag7IKs7Jqp7ZWY64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLrj4Qg66eI7LCs6rCA7KeA66GcIHNvbmFtdeqwgCDsnpDssrTsoIHsnLzroZwg6rCA7KeA6rOgIOyeiOuKlCBkZXBlbmRlbmN57J6F64uI64ukLlxuICog65Sw65287IScIOyCrOyaqeyekCDtlITroZzsoJ3tirjsl5DshJzripQg7J20IOyEuCDtjKjtgqTsp4Drpbwg7KeB7KCRIOyEpOy5mO2VoCDtlYTsmpTqsIAg7JeG7Iq164uI64ukLlxuICovXG5mdW5jdGlvbiBzcGF3bkFwaURldlNlcnZlcihvcHRpb25zPzogeyBleHRyYUVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcInNyYy9pbmRleC50c1wiO1xuXG4gIC8vIOydtCBzb25hbXUg7Yyo7YKk7KeA6rCAIGRlcGVuZGVuY2llc+uhnCDqsIDsp4Dqs6Ag7J6I64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLsnZggYmluL3J1bi5qc+ulvCDsgqzsmqntlanri4jri6QuXG4gIC8vIOydtCDqsr3roZwoL2Jpbi9ydW4uanMp64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLsnZggcGFja2FnZS5qc29u7J2YIGJpbiDtlYTrk5zsl5Ag66qF7Iuc65CY7Ja0IOyeiOuKlCDqt7jqsoPqs7wg6rCZ7Iq164uI64ukLlxuICBjb25zdCBob3RSdW5uZXJCaW5QYXRoID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpLnJlc29sdmUoXG4gICAgXCJAc29uYW11LWtpdC9obXItcnVubmVyL2Jpbi9ydW4uanNcIixcbiAgKTtcblxuICBjb25zdCBzZXJ2ZXJQcm9jZXNzID0gc3Bhd24oXG4gICAgcHJvY2Vzcy5leGVjUGF0aCwgLy8gbm9kZVxuICAgIFtcbiAgICAgIGhvdFJ1bm5lckJpblBhdGgsIC8vIOydtOugh+qyjCDtlbTshJwgaG90LXJ1bm5lcuulvCDsi6TtlontlZjqtazsmpRcbiAgICAgIFwiLS1jbGVhci1zY3JlZW49ZmFsc2VcIiwgLy8g7J207ZWYIGhvdC1ydW5uZXLsl5Dqsowg64SY6rKo7KSEIOyduOyekOuTpOyeheuLiOuLpC5cbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1pbXBvcnQ9c29uYW11L3RzLWxvYWRlci1yZWdpc3RlclwiLCAvLyBUeXBlU2NyaXB0IOyEnO2PrO2KuOulvCDsnITtlZwg66Gc642ULFxuICAgICAgXCItLW5vZGUtYXJncz0tLWltcG9ydD1zb25hbXUvaG1yLWhvb2stcmVnaXN0ZXJcIiwgLy8gSE1S7J2EIOyngOybkO2VmOq4sCDsnITtlZwgaG9vayxcbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1lbmFibGUtc291cmNlLW1hcHNcIiwgLy8g6re466as6rOgIOyGjOyKpOuntSDsp4Dsm5DsnYQg7JyE7ZWcIO2UjOuemOq3uOyeheuLiOuLpC5cbiAgICAgIFwiLS1vbi1rZXk9cjpyZXN0YXJ0OlJlc3RhcnQgc2VydmVyXCIsIC8vIHIg64iE66W066m0IOyEnOuyhCDsnqzsi5zsnpHtlZjqsowg7ZW07KSY7JqULlxuICAgICAgYC0tb24ta2V5PWY6c2hlbGwocm0gJHtwYXRoLmpvaW4oYXBpUm9vdCwgXCJzb25hbXUubG9ja1wiKX0pOnJlc3RhcnQ6Rm9yY2UgcmVzdGFydGAsIC8vIGYg64iE66W066m0IHNvbmFtdS5sb2NrIO2MjOydvOydhCDsp4DsmrDqs6Ag7ISc67KEIOyerOyLnOyeke2VmOqyjCDtlbTspJjsmpQuXG5cbiAgICAgIFwiLS1vbi1rZXk9ZW50ZXI6c2hlbGwoZWNobyBoaSk6S2V5IGJpbmRpbmcgdGVzdFwiLCAvLyBlbnRlcuulvCBrZXnroZwg7JO4IOyImCDsnojsnYzsnYQg67O07J206riwIOychO2VnCDthYzsiqTtirjsnoXri4jri6QuXG4gICAgICBcIi0tb24ta2V5PWN0cmwrZiBjdHJsK2Y6c2hlbGwoZ2l0IHB1bGwgJiYgcG5wbSBpbnN0YWxsICYmIHBucG0gLS1maWx0ZXIgc29uYW11IGJ1aWxkICYmIGVjaG8gJ1NvbmFtdSBpcyBub3cgdXAtdG8tZGF0ZSEnKTpyZXN0YXJ0OlB1bGwgJiBpbnN0YWxsICYgYnVpbGQgJiByZXN0YXJ0XCIsIC8vIG1vZGlmaWVy7JmA7J2YIOyhsO2VqSwg6re466as6rOgIOuRkCDqsJzsnZggY2hvcmTrpbwg7IKs7Jqp7ZWgIOyImCDsnojsnYzsnYQg67O07J206riwIOychO2VnCDthYzsiqTtirjsnoXri4jri6QuXG4gICAgICBlbnRyeVBvaW50LCAvLyDrp4jsp4Drp4nsnLzroZwg7Iuk7KCcIOyLpO2Wie2VoCDsiqTtgazrpr3tirjsnZgg6rK966Gc66W8IOuEmOqyqOykjeuLiOuLpC5cbiAgICBdLFxuICAgIHtcbiAgICAgIGN3ZDogYXBpUm9vdCxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAgIGVudjoge1xuICAgICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgICAgTk9ERV9FTlY6IFwiZGV2ZWxvcG1lbnRcIixcbiAgICAgICAgSE9UOiBcInllc1wiLCAvLyDslpjqsIAg7J6I7Ja07JW8IEhNUuydtCDtmZzshLHtmZTrkKnri4jri6QuXG4gICAgICAgIEFQSV9ST09UX1BBVEg6IGFwaVJvb3QsIC8vIOydtCDqsr3roZzqsIAgaG1yLWhvb2vsnZgg66Oo7Yq4IOuUlOugie2GoOumrOqwgCDrkKnri4jri6QuXG4gICAgICAgIC4uLm9wdGlvbnM/LmV4dHJhRW52LFxuICAgICAgfSxcbiAgICB9LFxuICApO1xuXG4gIC8vIOyiheujjCDsspjrpqxcbiAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCJcXG5cXG7wn5GLIFNodXR0aW5nIGRvd24uLi5cIikpO1xuICAgIHNlcnZlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9O1xuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgY2xlYW51cCk7XG4gIHByb2Nlc3Mub24oXCJTSUdURVJNXCIsIGNsZWFudXApO1xuXG4gIHNlcnZlclByb2Nlc3Mub24oXCJleGl0XCIsIChjb2RlKSA9PiB7XG4gICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKGBTZXJ2ZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpO1xuICAgICAgcHJvY2Vzcy5leGl0KGNvZGUgfHwgMSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBwbnBtIGRldiAvIHBucG0gZGV2IGFsbCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIO2UhOuhnOygne2KuOyXkCDrjIDtlbQgSE1SIOyngOybkO2VmOuKlCDqsJzrsJwg7ISc67KE66W8IOudhOybjOykjeuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5mdW5jdGlvbiBkZXZfYWxsKCkge1xuICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIlN0YXJ0aW5nIFNvbmFtdSBkZXYgc2VydmVyLi4uXFxuXCIpKTtcbiAgc3Bhd25BcGlEZXZTZXJ2ZXIoKTtcbn1cblxuLyoqXG4gKiBwbnBtIGRldiBhcGkg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBBUEkg7KCE7JqpIOqwnOuwnCDshJzrsoTrpbwg652E7JuB64uI64ukLlxuICogZGV2X2FsbOqzvCDqsbDsnZgg64+Z7J287ZWY65CYLCDthrXtlakg7Ju5IOyEnOuyhOulvCDruYTtmZzshLHtmZTtlanri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZGV2X2FwaSgpIHtcbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCJTdGFydGluZyBTb25hbXUgQVBJLW9ubHkgZGV2IHNlcnZlci4uLlxcblwiKSk7XG4gIHNwYXduQXBpRGV2U2VydmVyKHtcbiAgICBleHRyYUVudjogeyBTT05BTVVfRElTQUJMRV9JTlRFR1JBVEVEX1dFQjogXCJ5ZXNcIiB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBwbnBtIGRldiB3ZWIg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBWaXRlIOqwnOuwnCDshJzrsoTrpbwg64uo64+F7Jy866GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqIC0tIOuSpOydmCDsnbjsnpDripQgVml0ZeyXkCDqt7jrjIDroZwg7KCE64us65Cp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldl93ZWIoKSB7XG4gIGNvbnN0IGFwcFJvb3QgPSBmaW5kQXBwUm9vdFBhdGgoKTtcbiAgY29uc3Qgd2ViUGF0aCA9IHBhdGguam9pbihhcHBSb290LCBcIndlYlwiKTtcblxuICBpZiAoIShhd2FpdCBleGlzdHMod2ViUGF0aCkpKSB7XG4gICAgY29uc29sZS5lcnJvcihgd2ViIOuUlOugie2GoOumrOulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpDogJHt3ZWJQYXRofWApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIC8vIC0tIOuSpOydmCDsnbjsnpAg7LaU7LacXG4gIGNvbnN0IGRvdWJsZURhc2hJbmRleCA9IHByb2Nlc3MuYXJndi5pbmRleE9mKFwiLS1cIik7XG4gIGNvbnN0IHBhc3N0aHJvdWdoQXJncyA9IGRvdWJsZURhc2hJbmRleCAhPT0gLTEgPyBwcm9jZXNzLmFyZ3Yuc2xpY2UoZG91YmxlRGFzaEluZGV4ICsgMSkgOiBbXTtcblxuICBjb25zdCB2aXRlQXJncyA9IFtcImV4ZWNcIiwgXCJ2aXRlXCIsIC4uLnBhc3N0aHJvdWdoQXJnc107XG5cbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCJTdGFydGluZyBWaXRlIGRldiBzZXJ2ZXIuLi5cXG5cIikpO1xuXG4gIGNvbnN0IHZpdGVQcm9jZXNzID0gc3Bhd24oXCJwbnBtXCIsIHZpdGVBcmdzLCB7XG4gICAgY3dkOiB3ZWJQYXRoLFxuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgfSk7XG5cbiAgdml0ZVByb2Nlc3Mub24oXCJleGl0XCIsIChjb2RlKSA9PiB7XG4gICAgcHJvY2Vzcy5leGl0KGNvZGUgPz8gMCk7XG4gIH0pO1xuXG4gIC8vIFNJR0lOVC9TSUdURVJNIOyLnCBWaXRlIO2UhOuhnOyEuOyKpOulvCBncmFjZWZ1bGx5IOyiheujjO2VqeuLiOuLpC5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgW1wiU0lHSU5UXCIsIFwiU0lHVEVSTVwiXSBhcyBjb25zdCkge1xuICAgIHByb2Nlc3Mub24oc2lnbmFsLCAoKSA9PiB7XG4gICAgICB2aXRlUHJvY2Vzcy5raWxsKHNpZ25hbCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTV0Mg7ISk7KCVIO2MjOydvCDqsr3roZzrpbwg6rKw7KCV7ZWp64uI64ukLiBBUEkg67mM65OcKFNXQynsl5DshJzrp4wg7IKs7Jqp65Cp64uI64ukLlxuICog7ZSE66Gc7KCd7Yq4IOujqO2KuOyXkCAuc3djcmPqsIAg7J6I7Jy866m0IOq3uOqyg+ydhCwg7JeG7Jy866m0IHNvbmFtdSDquLDrs7gg7ISk7KCV7J2EIOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVN3Y0NvbmZpZ1BhdGgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgbGV0IHN3Y0ZpbGVQYXRoID0gXCIuc3djcmNcIjtcbiAgdHJ5IHtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKHN3Y0ZpbGVQYXRoKSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiVXNpbmcgLnN3Y3JjIGZyb20gcHJvamVjdCByb290Li4uXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiVXNpbmcgZGVmYXVsdCAuc3djcmMgZnJvbSBzb25hbXUgcGFja2FnZS4uLlwiKSk7XG4gICAgICBzd2NGaWxlUGF0aCA9IHBhdGguam9pbihpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCIuc3djcmMucHJvamVjdC1kZWZhdWx0XCIpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChcIlNldHRpbmcgdXAgc3djIGNvbmZpZyBmaWxlIGZhaWxlZC5cIiksIGVycm9yKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbiAgcmV0dXJuIHN3Y0ZpbGVQYXRoO1xufVxuXG4vKipcbiAqIHNvbmFtdSBidWlsZCAvIHNvbmFtdSBidWlsZCBhbGwg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBidWlsZF9hcGkgKyBidWlsZF93ZWLsnZgg7ZWp7ISx7J6F64uI64ukLiBXZWIg65SU66CJ7Yag66as6rCAIOyXhuycvOuptCBXZWIg67mM65Oc66W8IOyKpO2Cte2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRfYWxsKCkge1xuICBhd2FpdCBidWlsZF9hcGkoKTtcbiAgYXdhaXQgYnVpbGRfd2ViKHsgc2tpcElmTWlzc2luZzogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBwbnBtIGJ1aWxkIGFwaSDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIEFQSSDtlITroZzsoJ3tirjrp4wg67mM65Oc7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkX2FwaSgpIHtcbiAgY29uc3QgYXBwUm9vdCA9IGZpbmRBcHBSb290UGF0aCgpO1xuICBjb25zdCBzd2NGaWxlUGF0aCA9IGF3YWl0IHJlc29sdmVTd2NDb25maWdQYXRoKCk7XG5cbiAgY29uc3QgYXBpU3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIEFQSV9BUlRJRkFDVFMpIHtcbiAgICAgIGNvbnN0IGN3ZCA9IHBhdGguam9pbihhcHBSb290LCBhcnRpZmFjdC5wcm9qZWN0UGF0aCk7XG4gICAgICBwcmludFRhc2tIZWFkZXIoYXJ0aWZhY3QubmFtZSwgYXJ0aWZhY3QuZGVzY3JpcHRpb24sIGN3ZCk7XG5cbiAgICAgIGF3YWl0IHJ1bkJ1aWxkU3RlcHMoYXJ0aWZhY3QsIHsgY3dkLCBidWlsZENvbW1hbmRBcmdzOiB7IGNvbmZpZ0ZpbGVQYXRoOiBzd2NGaWxlUGF0aCB9IH0pO1xuICAgIH1cbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIkFQSVwiLCB0cnVlLCBEYXRlLm5vdygpIC0gYXBpU3RhcnRlZEF0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiQVBJXCIsIGZhbHNlLCBEYXRlLm5vdygpIC0gYXBpU3RhcnRlZEF0KTtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIHBucG0gYnVpbGQgd2ViIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICogV2ViIO2UhOuhnOygne2KuOunjCDruYzrk5ztlanri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRfd2ViKHsgc2tpcElmTWlzc2luZyA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCBhcHBSb290ID0gZmluZEFwcFJvb3RQYXRoKCk7XG4gIGNvbnN0IHdlYlBhdGggPSBwYXRoLmpvaW4oYXBwUm9vdCwgXCJ3ZWJcIik7XG5cbiAgaWYgKCEoYXdhaXQgZXhpc3RzKHdlYlBhdGgpKSkge1xuICAgIGlmIChza2lwSWZNaXNzaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KFwiV2ViIOuUlOugie2GoOumrOqwgCDsl4bsnLzrr4DroZwgV2ViIOu5jOuTnOulvCDqsbTrhIjrnIHri4jri6QuXCIpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcihgd2ViIOuUlOugie2GoOumrOulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpDogJHt3ZWJQYXRofWApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGNvbnN0IHdlYlN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBXRUJfQVJUSUZBQ1RTKSB7XG4gICAgICBjb25zdCBjd2QgPSBwYXRoLmpvaW4oYXBwUm9vdCwgYXJ0aWZhY3QucHJvamVjdFBhdGgpO1xuICAgICAgcHJpbnRUYXNrSGVhZGVyKGFydGlmYWN0Lm5hbWUsIGFydGlmYWN0LmRlc2NyaXB0aW9uLCBjd2QpO1xuXG4gICAgICBhd2FpdCBydW5CdWlsZFN0ZXBzKGFydGlmYWN0LCB7IGN3ZCwgYnVpbGRDb21tYW5kQXJnczoge30gfSk7XG4gICAgfVxuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiV2ViXCIsIHRydWUsIERhdGUubm93KCkgLSB3ZWJTdGFydGVkQXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcHJpbnRCdWlsZFN1bW1hcnkoXCJXZWJcIiwgZmFsc2UsIERhdGUubm93KCkgLSB3ZWJTdGFydGVkQXQpO1xuICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbi8qKlxuICogcHJlLWJ1aWxkLCBidWlsZCwgcG9zdC1idWlsZCDri6jqs4Trpbwg7Iic7LCo7KCB7Jy866GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuQnVpbGRTdGVwczxUPihcbiAgYXJ0aWZhY3Q6IEJ1aWxkQXJ0aWZhY3Q8VD4sXG4gIG9wdGlvbnM6IHsgY3dkOiBzdHJpbmc7IGJ1aWxkQ29tbWFuZEFyZ3M6IFQgfSxcbikge1xuICBjb25zdCBzdGVwcyA9IFtcbiAgICB7IG5hbWU6IFwicHJlLWJ1aWxkXCIsIGNtZDogYXJ0aWZhY3QucHJlQnVpbGRDb21tYW5kPy4oKSB9LFxuICAgIHsgbmFtZTogXCJidWlsZFwiLCBjbWQ6IGFydGlmYWN0LmJ1aWxkQ29tbWFuZChvcHRpb25zLmJ1aWxkQ29tbWFuZEFyZ3MpIH0sXG4gICAgeyBuYW1lOiBcInBvc3QtYnVpbGRcIiwgY21kOiBhcnRpZmFjdC5wb3N0QnVpbGRDb21tYW5kPy4oKSB9LFxuICBdLmZpbHRlcigoc3RlcCkgPT4gc3RlcC5jbWQpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RlcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzdGVwID0gc3RlcHNbaV07XG4gICAgY29uc3QgaXNMYXN0ID0gaSA9PT0gc3RlcHMubGVuZ3RoIC0gMTtcblxuICAgIHRyeSB7XG4gICAgICBhc3NlcnQoc3RlcC5jbWQpO1xuICAgICAgcHJpbnRUYXNrU3RhcnQoc3RlcC5uYW1lLCBzdGVwLmNtZCwgaXNMYXN0KTtcbiAgICAgIGF3YWl0IGV4ZWNXaXRoTGluZVByZWZpeChzdGVwLmNtZCwgeyBjd2Q6IG9wdGlvbnMuY3dkIH0pO1xuICAgICAgcHJpbnRUYXNrU3VjY2VzcyhzdGVwLm5hbWUsIGlzTGFzdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcHJpbnRUYXNrRmFpbGVkKHN0ZXAubmFtZSwgaXNMYXN0KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtzdGVwLm5hbWV9IGZhaWxlZGAsIHsgY2F1c2U6IGUgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogcG5wbSBzdGFydCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOu5jOuTnOuQnCDtlITroZzsoJ3tirjrpbwg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIOu5jOuTnOuQnCDqsrDqs7zrrLwoZGlzdCDrlJTroInthqDrpqzsnZggaW5kZXguanMg7JeU7Yq466as7Y+s7J247Yq4KeydtCDsl4bri6TrqbQg7Iuk7ZaJ7J2EIOykkeuLqO2VqeuLiOuLpC5cbiAqIOyGjOyKpOuntSDsp4Dsm5Dqs7wgZG90ZW52IOyngOybkOydhCDtj6ztlajtlZjsl6wg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcImRpc3QvaW5kZXguanNcIjtcblxuICBpZiAoIShhd2FpdCBleGlzdHMoZW50cnlQb2ludCkpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAke2VudHJ5UG9pbnR9IG5vdCBmb3VuZC4gUGxlYXNlIGJ1aWxkIHlvdXIgcHJvamVjdCBmaXJzdC5gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlJ1bjogcG5wbSBzb25hbXUgYnVpbGRcIikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcImNoaWxkX3Byb2Nlc3NcIik7XG4gIGNvbnN0IHNlcnZlclByb2Nlc3MgPSBzcGF3bihcbiAgICBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgIFtcIi0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsIFwiLXJcIiwgXCJkb3RlbnYvY29uZmlnXCIsIGVudHJ5UG9pbnRdLFxuICAgIHtcbiAgICAgIGN3ZDogYXBpUm9vdCxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICB9LFxuICApO1xuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgKCkgPT4ge1xuICAgIHNlcnZlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBNaWdyYXRvcigpIHtcbiAgLy8gbWlncmF0b3JcbiAgbWlncmF0b3IgPSBuZXcgTWlncmF0b3IoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBGaXh0dXJlTWFuYWdlcigpIHtcbiAgRml4dHVyZU1hbmFnZXIuaW5pdCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX2FwcGx5KHRhcmdldHM6IChrZXlvZiBTb25hbXVEQkNvbmZpZylbXSkge1xuICBhd2FpdCBzZXR1cE1pZ3JhdG9yKCk7XG4gIGF3YWl0IG1pZ3JhdG9yLnJ1bkFjdGlvbihcImFwcGx5XCIsIHRhcmdldHMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3J1bigpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuICBjb25zdCBsb2NhbEhvc3RzID0gW1wibG9jYWxob3N0XCIsIFwiMTI3LjAuMC4xXCIsIFwiMC4wLjAuMFwiLCBcIjo6MVwiXTtcbiAgY29uc3QgdGFyZ2V0cyA9IE9iamVjdC5rZXlzKFNvbmFtdS5kYkNvbmZpZykuZmlsdGVyKCh0YXJnZXQpID0+IHtcbiAgICBjb25zdCB0YXJnZXRDb25maWcgPSBTb25hbXUuZGJDb25maWdbdGFyZ2V0IGFzIGtleW9mIFNvbmFtdURCQ29uZmlnXTtcbiAgICBjb25zdCBob3N0ID0gKHRhcmdldENvbmZpZz8uY29ubmVjdGlvbiBhcyB7IGhvc3Q/OiBzdHJpbmcgfSk/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIjtcbiAgICByZXR1cm4gbG9jYWxIb3N0cy5pbmNsdWRlcyhob3N0LnRvTG93ZXJDYXNlKCkpO1xuICB9KTtcblxuICAvLyDroZzsu6wg642w7J207YSw67Kg7J207Iqk7JeQIOuMgO2VtOyEnOunjCDsoITssrQg66eI7J206re466CI7J207IWY7JeQ7IScIOuPmeyekVxuICBhd2FpdCBtaWdyYXRvci5ydW5BY3Rpb24oXCJhcHBseVwiLCB0YXJnZXRzIGFzIChrZXlvZiBTb25hbXVEQkNvbmZpZylbXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1pZ3JhdGVfc3RhdHVzKCkge1xuICBhd2FpdCBzZXR1cE1pZ3JhdG9yKCk7XG5cbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgbWlncmF0b3IuZ2V0U3RhdHVzKCk7XG4gIC8vIHN0YXR1cztcbiAgY29uc29sZS5sb2coc3RhdHVzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9pbml0KCkge1xuICBjb25zdCBzcmNDb25maWcgPSBTb25hbXUuZGJDb25maWcuZGV2ZWxvcG1lbnRfbWFzdGVyO1xuICBjb25zdCB0YXJnZXRzID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiBcIihSRU1PVEUpIEZpeHR1cmUgREJcIixcbiAgICAgIGNvbmZpZzogU29uYW11LmRiQ29uZmlnLmZpeHR1cmUsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogXCIoTE9DQUwpIFRlc3RpbmcgREJcIixcbiAgICAgIGNvbmZpZzogU29uYW11LmRiQ29uZmlnLnRlc3QsXG4gICAgICB0b1NraXA6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbW90ZUNvbm4gPSBTb25hbXUuZGJDb25maWcuZml4dHVyZS5jb25uZWN0aW9uIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZztcbiAgICAgICAgY29uc3QgbG9jYWxDb25uID0gU29uYW11LmRiQ29uZmlnLnRlc3QuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gICAgICAgIHJldHVybiByZW1vdGVDb25uLmhvc3QgPT09IGxvY2FsQ29ubi5ob3N0ICYmIHJlbW90ZUNvbm4uZGF0YWJhc2UgPT09IGxvY2FsQ29ubi5kYXRhYmFzZTtcbiAgICAgIH0pKCksXG4gICAgfSxcbiAgXSBhcyB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBjb25maWc6IEtuZXguQ29uZmlnO1xuICAgIHRvU2tpcD86IGJvb2xlYW47XG4gIH1bXTtcblxuICAvLyAxLiDquLDspIBEQiDsiqTtgqTrp4jrpbwg642k7ZSEXG4gIGNvbnNvbGUubG9nKFwiRFVNUC4uLlwiKTtcbiAgY29uc3QgZHVtcEZpbGVuYW1lID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC0ke0RhdGUubm93KCl9LnNxbGA7XG4gIGNvbnN0IHNyY0Nvbm4gPSBzcmNDb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gIGNvbnN0IG1pZ3JhdGlvbnNEdW1wID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC1taWdyYXRpb25zLSR7RGF0ZS5ub3coKX0uc3FsYDtcbiAgZXhlY1N5bmMoXG4gICAgYG15c3FsZHVtcCAtaCR7c3JjQ29ubi5ob3N0fSAtdSR7c3JjQ29ubi51c2VyfSAtcCR7c3JjQ29ubi5wYXNzd29yZH0gLS1zaW5nbGUtdHJhbnNhY3Rpb24gLWQgLS1uby1jcmVhdGUtZGIgLS10cmlnZ2VycyAke3NyY0Nvbm4uZGF0YWJhc2V9ID4gJHtkdW1wRmlsZW5hbWV9YCxcbiAgKTtcbiAgY29uc3QgX2RiID0ga25leChzcmNDb25maWcpO1xuICBjb25zdCBbW21pZ3JhdGlvbnNdXSA9IGF3YWl0IF9kYi5yYXcoXG4gICAgXCJTRUxFQ1QgQ09VTlQoKikgYXMgY291bnQgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIFdIRVJFIHRhYmxlX3NjaGVtYSA9ID8gQU5EIHRhYmxlX25hbWUgPSAna25leF9taWdyYXRpb25zJ1wiLFxuICAgIFtzcmNDb25uLmRhdGFiYXNlXSxcbiAgKTtcbiAgaWYgKG1pZ3JhdGlvbnMuY291bnQgPiAwKSB7XG4gICAgZXhlY1N5bmMoXG4gICAgICBgbXlzcWxkdW1wIC1oJHtzcmNDb25uLmhvc3R9IC11JHtzcmNDb25uLnVzZXJ9IC1wJHtzcmNDb25uLnBhc3N3b3JkfSAtLXNpbmdsZS10cmFuc2FjdGlvbiAtLW5vLWNyZWF0ZS1kYiAtLXRyaWdnZXJzICR7c3JjQ29ubi5kYXRhYmFzZX0ga25leF9taWdyYXRpb25zIGtuZXhfbWlncmF0aW9uc19sb2NrID4gJHttaWdyYXRpb25zRHVtcH1gLFxuICAgICk7XG4gIH1cblxuICAvLyAyLiDrjIDsg4FEQiDqsIHqsIHsl5Ag64yA7ZWY7JesIOyhtOyerOyXrOu2gCDtmZXsnbgg7ZuEIOu2k+q4sFxuICBmb3IgYXdhaXQgKGNvbnN0IHsgbGFiZWwsIGNvbmZpZywgdG9Ta2lwIH0gb2YgdGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbm4gPSBjb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG5cbiAgICBpZiAodG9Ta2lwID09PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoYCR7bGFiZWx9OiBTa2lwcGVkIWApKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGRiID0ga25leCh7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgIC4uLigoY29uZmlnLmNvbm5lY3Rpb24gPz8ge30pIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZyksXG4gICAgICAgIGRhdGFiYXNlOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IFtbcm93XV0gPSBhd2FpdCBkYi5yYXcoYFNIT1cgREFUQUJBU0VTIExJS0UgXCIke2Nvbm4uZGF0YWJhc2V9XCJgKTtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCR7bGFiZWx9OiBEYXRhYmFzZSBcIiR7Y29ubi5kYXRhYmFzZX1cIiBBbHJlYWR5IGV4aXN0c2ApKTtcbiAgICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBTWU5DIHRvICR7bGFiZWx9Li4uYCk7XG4gICAgY29uc3QgbXlzcWxDbWQgPSBgbXlzcWwgLWgke2Nvbm4uaG9zdH0gLXUke2Nvbm4udXNlcn0gLXAke2Nvbm4ucGFzc3dvcmR9YDtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gLWUgJ0RST1AgREFUQUJBU0UgSUYgRVhJU1RTIFxcYCR7Y29ubi5kYXRhYmFzZX1cXGAnYCk7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9IC1lICdDUkVBVEUgREFUQUJBU0UgXFxgJHtjb25uLmRhdGFiYXNlfVxcYCdgKTtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7ZHVtcEZpbGVuYW1lfWApO1xuICAgIGlmIChhd2FpdCBleGlzdHMobWlncmF0aW9uc0R1bXApKSB7XG4gICAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7bWlncmF0aW9uc0R1bXB9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICB9XG5cbiAgYXdhaXQgX2RiLmRlc3Ryb3koKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9pbXBvcnQoZW50aXR5SWQ6IHN0cmluZywgcmVjb3JkSWRzOiBudW1iZXJbXSkge1xuICBhd2FpdCBzZXR1cEZpeHR1cmVNYW5hZ2VyKCk7XG5cbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuaW1wb3J0Rml4dHVyZShlbnRpdHlJZCwgcmVjb3JkSWRzKTtcbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuc3luYygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX3N5bmMoKSB7XG4gIGF3YWl0IHNldHVwRml4dHVyZU1hbmFnZXIoKTtcblxuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5zeW5jKCk7XG59XG5cbi8qKlxuICogZml4dHVyZSBnZW4g66qF66C57Ja0XG4gKiDsmLXshZjsnYQgcHJvY2Vzcy5hcmd27JeQ7IScIO2MjOyLsVxuICovXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX2dlbigpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhwcm9jZXNzLmFyZ3YpO1xuICBhd2FpdCBmaXh0dXJlR2VuQ29tbWFuZChvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBmaXh0dXJlIGZldGNoIOuqheugueyWtFxuICog7Ji17IWY7J2EIHByb2Nlc3MuYXJnduyXkOyEnCDtjIzsi7FcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9mZXRjaCgpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhwcm9jZXNzLmFyZ3YpO1xuICBhd2FpdCBmaXh0dXJlRmV0Y2hDb21tYW5kKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIGZpeHR1cmUgZXhwbG9yZSDrqoXroLnslrRcbiAqIOyYteyFmOydhCBwcm9jZXNzLmFyZ3bsl5DshJwg7YyM7IuxXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfZXhwbG9yZSgpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhwcm9jZXNzLmFyZ3YpO1xuICBhd2FpdCBmaXh0dXJlRXhwbG9yZUNvbW1hbmQob3B0aW9ucyk7XG59XG5cbi8qKlxuICog6rCE64uo7ZWcIOyYteyFmCDtjIzshJxcbiAqL1xuZnVuY3Rpb24gcGFyc2VPcHRpb25zKFxuICBhcmd2OiBzdHJpbmdbXSxcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCBzdHJpbmdbXT4gJiB7IF86IHN0cmluZ1tdIH0ge1xuICBjb25zdCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuIHwgc3RyaW5nW10+ICYgeyBfOiBzdHJpbmdbXSB9ID0geyBfOiBbXSB9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3ZbaV07XG5cbiAgICBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuICAgICAgY29uc3Qga2V5ID0gYXJnLnNsaWNlKDIpO1xuXG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKFwiPVwiKSkge1xuICAgICAgICBjb25zdCBbaywgdl0gPSBrZXkuc3BsaXQoXCI9XCIpO1xuICAgICAgICBvcHRpb25zW2tdID0gdjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBhcmd2W2kgKyAxXTtcbiAgICAgICAgaWYgKG5leHQgJiYgIW5leHQuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICAgICAgb3B0aW9uc1trZXldID0gbmV4dDtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9uc1trZXldID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICBjb25zdCBrZXkgPSBhcmcuc2xpY2UoMSk7XG4gICAgICBjb25zdCBuZXh0ID0gYXJndltpICsgMV07XG5cbiAgICAgIGlmIChuZXh0ICYmICFuZXh0LnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgIG9wdGlvbnNba2V5XSA9IG5leHQ7XG4gICAgICAgIGkrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnNba2V5XSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuXy5wdXNoKGFyZyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0dWJfcHJhY3RpY2UobmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHByYWN0aWNlRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJwcmFjdGljZXNcIik7XG4gIGNvbnN0IGZpbGVOYW1lcyA9IGF3YWl0IHJlYWRkaXIocHJhY3RpY2VEaXIpO1xuXG4gIGNvbnN0IG1heFNlcU5vID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIShhd2FpdCBleGlzdHMocHJhY3RpY2VEaXIpKSkge1xuICAgICAgYXdhaXQgbWtkaXIocHJhY3RpY2VEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkU2VxcyA9IGZpbGVOYW1lc1xuICAgICAgLmZpbHRlcigoZmlsZU5hbWUpID0+IGZpbGVOYW1lLnN0YXJ0c1dpdGgoXCJwXCIpICYmIGZpbGVOYW1lLmVuZHNXaXRoKFwiLnRzXCIpKVxuICAgICAgLm1hcCgoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgWywgc2VxTm9dID0gZmlsZU5hbWUubWF0Y2goL15wKFswLTldKyktLykgPz8gW1wiMFwiLCBcIjBcIl07XG4gICAgICAgIHJldHVybiBwYXJzZUludChzZXFObyk7XG4gICAgICB9KVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIgLSBhKTtcblxuICAgIGlmIChmaWx0ZXJlZFNlcXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGZpbHRlcmVkU2Vxc1swXTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSkoKTtcblxuICBjb25zdCBjdXJyZW50U2VxTm8gPSBtYXhTZXFObyArIDE7XG4gIGNvbnN0IGZpbGVOYW1lID0gYHAke2N1cnJlbnRTZXFOb30tJHtuYW1lfS50c2A7XG4gIGNvbnN0IGRzdFBhdGggPSBwYXRoLmpvaW4ocHJhY3RpY2VEaXIsIGZpbGVOYW1lKTtcblxuICBjb25zdCBjb2RlID0gW1xuICAgIGBpbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICBcIlwiLFxuICAgIGBjb25zb2xlLmNsZWFyKCk7YCxcbiAgICBgY29uc29sZS5sb2coXCIke2ZpbGVOYW1lfVwiKTtgLFxuICAgIFwiXCIsXG4gICAgYFNvbmFtdS5ydW5TY3JpcHQoYXN5bmMgKCkgPT4ge2AsXG4gICAgYCAvLyBUT0RPYCxcbiAgICBgfSk7YCxcbiAgICBcIlwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG4gIGF3YWl0IHdyaXRlRmlsZShkc3RQYXRoLCBjb2RlKTtcblxuICBleGVjU3luYyhgY29kZSAke2RzdFBhdGh9YCk7XG5cbiAgY29uc3QgcnVuQ29kZSA9IGB5YXJuIG5vZGUgLXIgZG90ZW52L2NvbmZpZyAtLWVuYWJsZS1zb3VyY2UtbWFwcyBkaXN0L3ByYWN0aWNlcy8ke2ZpbGVOYW1lLnJlcGxhY2UoXG4gICAgXCIudHNcIixcbiAgICBcIi5qc1wiLFxuICApfWA7XG4gIGNvbnNvbGUubG9nKGAke2NoYWxrLmJsdWUocnVuQ29kZSl9IGNvcGllZCB0byBjbGlwYm9hcmQuYCk7XG4gIGV4ZWNTeW5jKGBlY2hvIFwiJHtydW5Db2RlfVwiIHwgcGJjb3B5YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0dWJfZW50aXR5KGVudGl0eUlkOiBzdHJpbmcpIHtcbiAgYXdhaXQgU29uYW11LnN5bmNlci5jcmVhdGVFbnRpdHkoeyBlbnRpdHlJZCwgdGl0bGU6IGVudGl0eUlkIH0pO1xuXG4gIGNvbnN0IHsgZmxhZ3MgfSA9IHBhcnNlQ2xpT3B0aW9ucygpO1xuICBjb25zdCB1c2VBSSA9IGZsYWdzLmhhcyhcImFpXCIpO1xuICBjb25zdCBub0NvbmVzID0gZmxhZ3MuaGFzKFwibm8tY29uZXNcIik7XG5cbiAgLy8gLS1uby1jb25lczogY29uZSDsg53shLEg7Iqk7YK1XG4gIGlmIChub0NvbmVzKSB7XG4gICAgY29uc29sZS5sb2coYOKckyBFbnRpdHkgJyR7ZW50aXR5SWR9JyBjcmVhdGVkIHdpdGhvdXQgY29uZXNgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7IEVudGl0eU1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiKTtcbiAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICBpZiAoIWVudGl0eSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVudGl0eSBub3QgZm91bmQ6ICR7ZW50aXR5SWR9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gLS1haTogTExN7Jy866GcIGNvbmUg7IOd7ISxXG4gIGlmICh1c2VBSSkge1xuICAgIGNvbnNvbGUubG9nKGDinJMgRW50aXR5ICcke2VudGl0eUlkfScgY3JlYXRlZGApO1xuICAgIGNvbnNvbGUubG9nKGDwn4yfIEdlbmVyYXRpbmcgQUktcG93ZXJlZCBjb25lcy4uLmApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdMb2NhbGUgPSBTb25hbXUuY29uZmlnLmkxOG4/LmRlZmF1bHRMb2NhbGU7XG4gICAgICBjb25zdCBsb2NhbGUgPVxuICAgICAgICBjb25maWdMb2NhbGUgPT09IFwia29cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiZW5cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiamFcIlxuICAgICAgICAgID8gY29uZmlnTG9jYWxlXG4gICAgICAgICAgOiBcImtvXCI7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVudGl0eS5nZW5lcmF0ZUNvbmVzKHtcbiAgICAgICAgcHJlc2VydmVFeGlzdGluZzogZmFsc2UsXG4gICAgICAgIG9ubHlFbXB0eTogZmFsc2UsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhg4pyFIERvbmUgKCR7cmVzdWx0LnRva2Vuc1VzZWR9IHRva2VucylgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcyhcIkFOVEhST1BJQ19BUElfS0VZXCIpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbuKdjCAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbvCfkqEgUmVtb3ZlIC0tYWkgZmxhZyB0byB1c2UgdGVtcGxhdGUgY29uZXMgaW5zdGVhZGApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIOq4sOuzuDog7YWc7ZSM66a/IGNvbmUg7J6Q64+ZIOyDneyEsVxuICAvLyBMTE0g7JeG7J20IGZha2VyLW1hcHBpbmdzLnRz66W8IO2ZnOyaqe2VmOyXrCDquLDrs7ggY29uZSDrqZTtg4DrjbDsnbTthLDrpbwg7IOd7ISx7ZWp64uI64ukLlxuICAvLyDsnbTrpbwg7Ya17ZW0IEFOVEhST1BJQ19BUElfS0VZ6rCAIOyXhuyWtOuPhCBTb25hbXXrpbwg7IKs7Jqp7ZWgIOyImCDsnojsnLzrqbAsXG4gIC8vIOyDneyEseuQnCDthZztlIzrpr8gY29uZeydgCDrgpjspJHsl5AgJ2NvbmUgZ2VuJyDrqoXroLnslrTroZwgQUnrpbwg7Ya17ZW0IOyXheq3uOugiOydtOuTnO2VoCDsiJgg7J6I7Iq164uI64ukLlxuICBjb25zb2xlLmxvZyhg8J+MnyBHZW5lcmF0aW5nIHRlbXBsYXRlIGNvbmVzLi4uYCk7XG4gIGF3YWl0IGVudGl0eS5nZW5lcmF0ZVRlbXBsYXRlQ29uZXMoKTtcbiAgY29uc29sZS5sb2coYOKckyBFbnRpdHkgJyR7ZW50aXR5SWR9JyBjcmVhdGVkIHdpdGggdGVtcGxhdGUgY29uZXNgKTtcbiAgY29uc29sZS5sb2coYPCfkqEgVGlwOiBSdW4gJ3BucG0gc29uYW11IGNvbmUgZ2VuICR7ZW50aXR5SWR9JyB0byBpbXByb3ZlIHdpdGggQUlgKTtcbn1cblxuLyoqXG4gKiBBSeulvCDsgqzsmqntlZjsl6wgZW50aXR57J2YIGNvbmUg66mU7YOA642w7J207YSw66W8IOyDneyEse2VmOqxsOuCmCDsl4Xqt7jroIjsnbTrk5ztlanri4jri6QuXG4gKlxuICog7Ji17IWYOlxuICogLSAtLXJlZ2VuZXJhdGU6IOyghOyytCDsnqzsg53shLEgKOq4sOyhtCBjb25lIOuNruyWtOyTsOq4sClcbiAqIC0gLS1sb2NhbGUgPGtvfGVufGphPjog7IOd7ISxIOyWuOyWtCDsp4DsoJVcbiAqIC0g6riw67O4OiBvbmx5RW1wdHkg66qo65OcICjquLDsobQgZml4dHVyZUhpbnQg67O07KG0KVxuICpcbiAqIEFOVEhST1BJQ19BUElfS0VZIO2VhOyalCAoc29uYW11LnNlY3JldC50cyDrmJDripQg7ZmY6rK967OA7IiYKVxuICovXG5hc3luYyBmdW5jdGlvbiBjb25lX2dlbihlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGNvbnN0IHsgRW50aXR5TWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCIpO1xuICBjb25zdCB7IGZsYWdzLCBvcHRpb25zIH0gPSBwYXJzZUNsaU9wdGlvbnMoKTtcblxuICAvLyAtLWFsbCDsmLXshZg6IOuqqOuToCBlbnRpdHkgY29uZSDsg53shLFcbiAgaWYgKGZsYWdzLmhhcyhcImFsbFwiKSB8fCBlbnRpdHlJZCA9PT0gXCJhbGxcIikge1xuICAgIGNvbnN0IGFsbEVudGl0aWVzID0gRW50aXR5TWFuYWdlci5nZXRBbGxFbnRpdGllcygpO1xuICAgIGNvbnNvbGUubG9nKGDwn4yfIEdlbmVyYXRpbmcgQUktcG93ZXJlZCBjb25lcyBmb3IgJHthbGxFbnRpdGllcy5sZW5ndGh9IGVudGl0aWVzLi4uXFxuYCk7XG5cbiAgICBsZXQgdG90YWxUb2tlbnMgPSAwO1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGFsbEVudGl0aWVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUHJvY2Vzc2luZyAke2VudGl0eS5pZH0uLi5gKTtcbiAgICAgICAgY29uc3QgY29uZmlnTG9jYWxlID0gb3B0aW9ucy5sb2NhbGUgfHwgU29uYW11LmNvbmZpZy5pMThuPy5kZWZhdWx0TG9jYWxlO1xuICAgICAgICBjb25zdCBsb2NhbGUgPVxuICAgICAgICAgIGNvbmZpZ0xvY2FsZSA9PT0gXCJrb1wiIHx8IGNvbmZpZ0xvY2FsZSA9PT0gXCJlblwiIHx8IGNvbmZpZ0xvY2FsZSA9PT0gXCJqYVwiXG4gICAgICAgICAgICA/IGNvbmZpZ0xvY2FsZVxuICAgICAgICAgICAgOiBcImtvXCI7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW50aXR5LmdlbmVyYXRlQ29uZXMoe1xuICAgICAgICAgIHByZXNlcnZlRXhpc3Rpbmc6ICFmbGFncy5oYXMoXCJyZWdlbmVyYXRlXCIpLFxuICAgICAgICAgIG9ubHlFbXB0eTogIWZsYWdzLmhhcyhcInJlZ2VuZXJhdGVcIiksXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0b3RhbFRva2VucyArPSByZXN1bHQudG9rZW5zVXNlZDtcbiAgICAgICAgY29uc29sZS5sb2coYCAg4pyTICR7ZW50aXR5LmlkfSAoJHtyZXN1bHQudG9rZW5zVXNlZH0gdG9rZW5zKVxcbmApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgICAgIGVycm9ycy5wdXNoKGAke2VudGl0eS5pZH06ICR7bWVzc2FnZX1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgICDinJcgJHtlbnRpdHkuaWR9OiAke21lc3NhZ2V9XFxuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coYFxcbuKchSBEb25lISBUb3RhbDogJHt0b3RhbFRva2Vuc30gdG9rZW5zIHVzZWRgKTtcbiAgICBjb25zdCBlc3RpbWF0ZWRDb3N0ID0gKHRvdGFsVG9rZW5zICogOSkgLyAxXzAwMF8wMDA7XG4gICAgY29uc29sZS5sb2coYPCfkrAgRXN0aW1hdGVkIGNvc3Q6IH4kJHtlc3RpbWF0ZWRDb3N0LnRvRml4ZWQoNCl9YCk7XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbuKdjCBGYWlsZWQgZW50aXRpZXMgKCR7ZXJyb3JzLmxlbmd0aH0pOmApO1xuICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJyb3JzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCAgLSAke2Vycn1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8g64uo7J28IGVudGl0eSBjb25lIOyDneyEsVxuICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gIGlmICghZW50aXR5KSB7XG4gICAgY29uc29sZS5lcnJvcihgRW50aXR5IG5vdCBmb3VuZDogJHtlbnRpdHlJZH1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtb2RlID0gZmxhZ3MuaGFzKFwicmVnZW5lcmF0ZVwiKSA/IFwicmVnZW5lcmF0aW5nXCIgOiBcImdlbmVyYXRpbmdcIjtcbiAgY29uc29sZS5sb2coXG4gICAgYPCfjJ8gJHttb2RlID09PSBcInJlZ2VuZXJhdGluZ1wiID8gXCJSZWdlbmVyYXRpbmdcIiA6IFwiR2VuZXJhdGluZ1wifSBBSS1wb3dlcmVkIGNvbmVzIGZvciAke2VudGl0eUlkfS4uLmAsXG4gICk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWdMb2NhbGUgPSBvcHRpb25zLmxvY2FsZSB8fCBTb25hbXUuY29uZmlnLmkxOG4/LmRlZmF1bHRMb2NhbGU7XG4gICAgY29uc3QgbG9jYWxlID1cbiAgICAgIGNvbmZpZ0xvY2FsZSA9PT0gXCJrb1wiIHx8IGNvbmZpZ0xvY2FsZSA9PT0gXCJlblwiIHx8IGNvbmZpZ0xvY2FsZSA9PT0gXCJqYVwiID8gY29uZmlnTG9jYWxlIDogXCJrb1wiO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW50aXR5LmdlbmVyYXRlQ29uZXMoe1xuICAgICAgcHJlc2VydmVFeGlzdGluZzogIWZsYWdzLmhhcyhcInJlZ2VuZXJhdGVcIiksXG4gICAgICBvbmx5RW1wdHk6ICFmbGFncy5oYXMoXCJyZWdlbmVyYXRlXCIpLFxuICAgICAgbG9jYWxlLFxuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coYOKchSBEb25lISAoJHtyZXN1bHQudG9rZW5zVXNlZH0gdG9rZW5zIHVzZWQpYCk7XG5cbiAgICAvLyDthqDtgbAg67mE7JqpIOqzhOyCsCAo64yA65617KCB7J24IOy2lOyglSlcbiAgICAvLyBDbGF1ZGUgU29ubmV0IDQuNTogaW5wdXQgJDMvTSB0b2tlbnMsIG91dHB1dCAkMTUvTSB0b2tlbnNcbiAgICAvLyDqsITri6jtlZjqsowg7Y+J6regICQ5L00gdG9rZW5z66GcIOqzhOyCsFxuICAgIGNvbnN0IGVzdGltYXRlZENvc3QgPSAocmVzdWx0LnRva2Vuc1VzZWQgKiA5KSAvIDFfMDAwXzAwMDtcbiAgICBjb25zb2xlLmxvZyhg8J+SsCBFc3RpbWF0ZWQgY29zdDogfiQke2VzdGltYXRlZENvc3QudG9GaXhlZCg0KX1gKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJBTlRIUk9QSUNfQVBJX0tFWVwiKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7inYwgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7wn5KhIFRvIHVzZSBBSS1wb3dlcmVkIGNvbmUgZ2VuZXJhdGlvbjpgKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgICAgMS4gR2V0IGFuIEFQSSBrZXkgZnJvbSBodHRwczovL2NvbnNvbGUuYW50aHJvcGljLmNvbS9gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgICAgMi4gQWRkIGl0IHRvIHNvbmFtdS5zZWNyZXQudHMgb3Igc2V0IEFOVEhST1BJQ19BUElfS0VZIGVudmlyb25tZW50IHZhcmlhYmxlYCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcyhcIlJhdGUgbGltaXRcIikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu4p2MICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu8J+SoSBQbGVhc2Ugd2FpdCBhIG1vbWVudCBhbmQgdHJ5IGFnYWluLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu4p2MIEZhaWxlZCB0byBnZW5lcmF0ZSBjb25lczogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBcXG7inYwgRmFpbGVkIHRvIGdlbmVyYXRlIGNvbmVzOiBVbmtub3duIGVycm9yYCk7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkX21vZGVsKGVudGl0eUlkOiBzdHJpbmcpIHtcbiAgYXdhaXQgU29uYW11LnN5bmNlci5nZW5lcmF0ZVRlbXBsYXRlKFwibW9kZWxcIiwge1xuICAgIGVudGl0eUlkLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRfbW9kZWxfdGVzdChlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuZ2VuZXJhdGVUZW1wbGF0ZShcIm1vZGVsX3Rlc3RcIiwge1xuICAgIGVudGl0eUlkLFxuICB9KTtcbn1cblxuLyoqXG4gKiBwbnBtIHNvbmFtdSBza2lsbHMgc3luYyDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOqzteyLnSBTa2lsbHPrpbwg66Gc7LusIO2UhOuhnOygne2KuCDrmJDripQg6riA66Gc67KMIH4vLmNsYXVkZS/roZwg64+Z6riw7ZmU7ZWp64uI64ukLlxuICpcbiAqIC0tZ2xvYmFsIO2UjOuemOq3uDogfi8uY2xhdWRlL+yXkCDrj5nquLDtmZQgKO2UhOuhnOygne2KuCDsg53shLEg7KCEIOyCrOyaqSDqsIDriqUpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNraWxsc19zeW5jKCkge1xuICBjb25zdCB7IGZsYWdzIH0gPSBwYXJzZUNsaU9wdGlvbnMoKTtcbiAgY29uc3QgaXNHbG9iYWwgPSBmbGFncy5oYXMoXCJnbG9iYWxcIik7XG5cbiAgLy8g6rCc67CcIO2ZmOqyvSAtIGNsaS50czogc29uYW11L21vZHVsZXMvc29uYW11L3NyYy9iaW4vY2xpLnRzXG4gIC8vIOu5jOuTnCDtm4QgLSBjbGkuanM6IG5vZGVfbW9kdWxlcy9zb25hbXUvZGlzdC9iaW4vY2xpLmpzICjsi6TsoJwg7Iuk7ZaJKVxuICAvLyBza2lsbHMg7JyE7LmYOiBub2RlX21vZHVsZXMvc29uYW11L3NyYy9za2lsbHMgKG5wbSDrsLDtj6wg7IucKVxuICBjb25zdCBzb3VyY2VCYXNlID0gcGF0aC5yZXNvbHZlKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcInNyY1wiLCBcInNraWxsc1wiKTtcbiAgY29uc3Qgc291cmNlU2tpbGxzRGlyID0gcGF0aC5qb2luKHNvdXJjZUJhc2UsIFwic29uYW11XCIpO1xuICBjb25zdCBzb3VyY2VDbGF1ZGVNZCA9IHBhdGguam9pbihzb3VyY2VCYXNlLCBcIkNMQVVERS5tZFwiKTtcblxuICBpZiAoIShhd2FpdCBleGlzdHMoc291cmNlU2tpbGxzRGlyKSkpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCJTa2lsbHMgc291cmNlIG5vdCBmb3VuZCBpbiBzb25hbXUgcGFja2FnZS5cIikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpc0dsb2JhbCkge1xuICAgIGF3YWl0IHNraWxsc19zeW5jX3RvKHBhdGguam9pbihvcy5ob21lZGlyKCksIFwiLmNsYXVkZVwiKSwgc291cmNlU2tpbGxzRGlyLCBzb3VyY2VDbGF1ZGVNZCwge1xuICAgICAgdXNlU3ltbGluazogZmFsc2UsXG4gICAgICBjb3B5UHJvamVjdFRlbXBsYXRlczogZmFsc2UsXG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxuICBHbG9iYWwgc3luYyBjb21wbGV0ZSDihpIgfi8uY2xhdWRlL3NraWxscy9zb25hbXUvYCkpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBUaGVzZSBza2lsbHMgYXJlIGF2YWlsYWJsZSBpbiBhbGwgQ2xhdWRlIENvZGUgc2Vzc2lvbnMuYCkpO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsuZGltKFxuICAgICAgICBgICBPbmNlIGEgcHJvamVjdCBpcyBjcmVhdGVkLCBydW4gJ3BucG0gc29uYW11IHNraWxscyBzeW5jJyBmb3IgcHJvamVjdC1sb2NhbCBzeW5jLmAsXG4gICAgICApLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgd29ya3NwYWNlUm9vdCA9IGF3YWl0IGZpbmRXb3Jrc3BhY2VSb290KCk7XG4gICAgY29uc3QgY2xhdWRlRGlyID0gcGF0aC5qb2luKHdvcmtzcGFjZVJvb3QsIFwiLmNsYXVkZVwiKTtcbiAgICBhd2FpdCBza2lsbHNfc3luY190byhjbGF1ZGVEaXIsIHNvdXJjZVNraWxsc0Rpciwgc291cmNlQ2xhdWRlTWQsIHtcbiAgICAgIHVzZVN5bWxpbms6IHRydWUsXG4gICAgICBjb3B5UHJvamVjdFRlbXBsYXRlczogdHJ1ZSxcbiAgICAgIHNvdXJjZUJhc2UsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBjbGF1ZGVEaXLroZwgc2tpbGxz66W8IOuPmeq4sO2ZlO2VmOuKlCDqs7XthrUg66Gc7KeB7J6F64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBza2lsbHNfc3luY190byhcbiAgY2xhdWRlRGlyOiBzdHJpbmcsXG4gIHNvdXJjZVNraWxsc0Rpcjogc3RyaW5nLFxuICBzb3VyY2VDbGF1ZGVNZDogc3RyaW5nLFxuICBvcHRpb25zOiB7XG4gICAgdXNlU3ltbGluazogYm9vbGVhbjtcbiAgICBjb3B5UHJvamVjdFRlbXBsYXRlczogYm9vbGVhbjtcbiAgICBzb3VyY2VCYXNlPzogc3RyaW5nO1xuICB9LFxuKSB7XG4gIGNvbnN0IHRhcmdldFNraWxsc0RpciA9IHBhdGguam9pbihjbGF1ZGVEaXIsIFwic2tpbGxzXCIsIFwic29uYW11XCIpO1xuXG4gIC8vIOq4sOyhtCDrlJTroInthqDrpqwvc3ltbGluayDsgq3soJwg7ZuEIOyerOyDneyEsVxuICAvLyBleGlzdHMoKeuKlCBicm9rZW4gc3ltbGlua+ulvCDqsJDsp4DtlZjsp4Ag66q77ZWY66+A66GcIHJt7J2EIOustOyhsOqxtCDsi5zrj4Ttlanri4jri6RcbiAgdHJ5IHtcbiAgICBhd2FpdCBybSh0YXJnZXRTa2lsbHNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCB7XG4gICAgLy8g7YyM7J287J20IOyXhuycvOuptCDrrLTsi5xcbiAgfVxuXG4gIGF3YWl0IG1rZGlyKHBhdGguZGlybmFtZSh0YXJnZXRTa2lsbHNEaXIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBpZiAob3B0aW9ucy51c2VTeW1saW5rKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN5bWxpbmsoc291cmNlU2tpbGxzRGlyLCB0YXJnZXRTa2lsbHNEaXIsIFwiZGlyXCIpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBTa2lsbHMgbGlua2VkIChzeW1saW5rKWApKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNoYWxrLnllbGxvdyhg4pqgIFN5bWxpbmsgZmFpbGVkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKSxcbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCAgRmFsbGluZyBiYWNrIHRvIGNvcHkuLi5gKSk7XG4gICAgICBhd2FpdCBza2lsbHNDb3B5KHNvdXJjZVNraWxsc0RpciwgdGFyZ2V0U2tpbGxzRGlyKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgc2tpbGxzQ29weShzb3VyY2VTa2lsbHNEaXIsIHRhcmdldFNraWxsc0Rpcik7XG4gIH1cblxuICAvLyBwcm9qZWN0IOuUlOugie2GoOumrCDstIjquLDtmZQgKOyXhuycvOuptCDsg53shLEsIOyeiOycvOuptCDsnKDsp4ApXG4gIGlmIChvcHRpb25zLmNvcHlQcm9qZWN0VGVtcGxhdGVzICYmIG9wdGlvbnMuc291cmNlQmFzZSkge1xuICAgIGNvbnN0IHNvdXJjZVByb2plY3REaXIgPSBwYXRoLmpvaW4ob3B0aW9ucy5zb3VyY2VCYXNlLCBcInByb2plY3RcIik7XG4gICAgY29uc3QgdGFyZ2V0UHJvamVjdERpciA9IHBhdGguam9pbihjbGF1ZGVEaXIsIFwic2tpbGxzXCIsIFwicHJvamVjdFwiKTtcblxuICAgIGlmIChhd2FpdCBleGlzdHMoc291cmNlUHJvamVjdERpcikpIHtcbiAgICAgIGlmICghKGF3YWl0IGV4aXN0cyh0YXJnZXRQcm9qZWN0RGlyKSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBjcChzb3VyY2VQcm9qZWN0RGlyLCB0YXJnZXRQcm9qZWN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIFByb2plY3QgdGVtcGxhdGVzIGluaXRpYWxpemVkYCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBjaGFsay5yZWQoXG4gICAgICAgICAgICAgIGDinJcgRmFpbGVkIHRvIGluaXRpYWxpemUgcHJvamVjdCB0ZW1wbGF0ZXM6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWAsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShg4o+tIFByb2plY3QgdGVtcGxhdGVzIGFscmVhZHkgZXhpc3QgKHByZXNlcnZlZClgKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ0xBVURFLm1kIOuzteyCrC/sl4XrjbDsnbTtirhcbiAgaWYgKGF3YWl0IGV4aXN0cyhzb3VyY2VDbGF1ZGVNZCkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGFyZ2V0Q2xhdWRlTWQgPSBwYXRoLmpvaW4oY2xhdWRlRGlyLCBcIkNMQVVERS5tZFwiKTtcbiAgICAgIGNvbnN0IHNvdXJjZUNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShzb3VyY2VDbGF1ZGVNZCwgXCJ1dGYtOFwiKTtcblxuICAgICAgaWYgKGF3YWl0IGV4aXN0cyh0YXJnZXRDbGF1ZGVNZCkpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0Q29udGVudCA9IGF3YWl0IHJlYWRGaWxlKHRhcmdldENsYXVkZU1kLCBcInV0Zi04XCIpO1xuICAgICAgICBjb25zdCBzdGFydE1hcmtlciA9IFwiPCEtLSBTT05BTVU6U1RBUlQgLS0+XCI7XG4gICAgICAgIGNvbnN0IGVuZE1hcmtlciA9IFwiPCEtLSBTT05BTVU6RU5EIC0tPlwiO1xuICAgICAgICBpZiAodGFyZ2V0Q29udGVudC5pbmNsdWRlcyhzdGFydE1hcmtlcikgJiYgdGFyZ2V0Q29udGVudC5pbmNsdWRlcyhlbmRNYXJrZXIpKSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRJZHggPSB0YXJnZXRDb250ZW50LmluZGV4T2Yoc3RhcnRNYXJrZXIpO1xuICAgICAgICAgIGNvbnN0IGVuZElkeCA9IHRhcmdldENvbnRlbnQuaW5kZXhPZihlbmRNYXJrZXIpO1xuXG4gICAgICAgICAgaWYgKHN0YXJ0SWR4ICE9PSAtMSAmJiBlbmRJZHggIT09IC0xICYmIHN0YXJ0SWR4IDwgZW5kSWR4KSB7XG4gICAgICAgICAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXRDb250ZW50LnN1YnN0cmluZygwLCBzdGFydElkeCk7XG4gICAgICAgICAgICBjb25zdCBhZnRlciA9IHRhcmdldENvbnRlbnQuc3Vic3RyaW5nKGVuZElkeCArIGVuZE1hcmtlci5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGAke2JlZm9yZX0ke3N0YXJ0TWFya2VyfVxcbiR7c291cmNlQ29udGVudH1cXG4ke2VuZE1hcmtlcn0ke2FmdGVyfWA7XG4gICAgICAgICAgICBhd2FpdCB3cml0ZUZpbGUodGFyZ2V0Q2xhdWRlTWQsIG5ld0NvbnRlbnQpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBDTEFVREUubWQgdXBkYXRlZCAobWFya2VyIHJlZ2lvbilgKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhg4o+tIENMQVVERS5tZCBtYXJrZXIgcG9zaXRpb25zIGludmFsaWQsIHNraXBwZWRgKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIOuniOy7pOqwgCDsl4bripQg6riw7KG0IENMQVVERS5tZOyXkCBTb25hbXUg7IS57IWY7J2EIOy2lOqwgO2VqeuLiOuLpFxuICAgICAgICAgIGNvbnN0IGFwcGVuZGVkID0gYCR7dGFyZ2V0Q29udGVudC50cmltRW5kKCl9XFxuXFxuPCEtLSBTT05BTVU6U1RBUlQgLS0+XFxuJHtzb3VyY2VDb250ZW50fVxcbjwhLS0gU09OQU1VOkVORCAtLT5cXG5gO1xuICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZSh0YXJnZXRDbGF1ZGVNZCwgYXBwZW5kZWQpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgQ0xBVURFLm1kIHVwZGF0ZWQgKGFwcGVuZGVkIFNvbmFtdSBzZWN0aW9uKWApKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgd2l0aE1hcmtlcnMgPSBgPCEtLSBTT05BTVU6U1RBUlQgLS0+XFxuJHtzb3VyY2VDb250ZW50fVxcbjwhLS0gU09OQU1VOkVORCAtLT5cXG5gO1xuICAgICAgICBhd2FpdCB3cml0ZUZpbGUodGFyZ2V0Q2xhdWRlTWQsIHdpdGhNYXJrZXJzKTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBDTEFVREUubWQgY3JlYXRlZGApKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgY2hhbGsucmVkKFxuICAgICAgICAgIGDinJcgRmFpbGVkIHRvIHVwZGF0ZSBDTEFVREUubWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBza2lsbHNDb3B5KHNyYzogc3RyaW5nLCBkZXN0OiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjcChzcmMsIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgU2tpbGxzIGNvcGllZGApKTtcbiAgfSBjYXRjaCAoY29weUVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGNoYWxrLnJlZChcbiAgICAgICAgYOKclyBGYWlsZWQgdG8gY29weSBza2lsbHM6ICR7Y29weUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBjb3B5RXJyb3IubWVzc2FnZSA6IFN0cmluZyhjb3B5RXJyb3IpfWAsXG4gICAgICApLFxuICAgICk7XG4gICAgdGhyb3cgY29weUVycm9yO1xuICB9XG59XG5cbi8qKlxuICogcG5wbSBzb25hbXUgc2tpbGxzIGNyZWF0ZSA8bmFtZT4g7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDroZzsu6wgc2tpbGwg7LSI7JWI7J2EIOyDneyEse2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2tpbGxzX2NyZWF0ZShuYW1lOiBzdHJpbmcpIHtcbiAgY29uc3Qgd29ya3NwYWNlUm9vdCA9IGF3YWl0IGZpbmRXb3Jrc3BhY2VSb290KCk7XG4gIGNvbnN0IGxvY2FsRGlyID0gcGF0aC5qb2luKHdvcmtzcGFjZVJvb3QsIFwiLmNsYXVkZVwiLCBcInNraWxsc1wiLCBcImxvY2FsXCIpO1xuXG4gIC8vID09PSDtjIzsnbzrqoUg6rKA7KadIOuwjyBTYW5pdGl6ZSA9PT1cbiAgaWYgKCFuYW1lIHx8IG5hbWUudHJpbSgpID09PSBcIlwiKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCLinJcgU2tpbGwgbmFtZSBpcyByZXF1aXJlZFwiKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHNhbml0aXplZCA9IG5hbWVcbiAgICAvLyDqs7XrsLHsnYQg7ZWY7J207ZSI7Jy866GcXG4gICAgLnJlcGxhY2UoL1xccysvZywgXCItXCIpXG4gICAgLy8g6rK966GcIOq1rOu2hOyekCDsoJzqsbBcbiAgICAucmVwbGFjZSgvWy9cXFxcXS9nLCBcIi1cIilcbiAgICAvLyBQYXRoIHRyYXZlcnNhbCDrsKnsp4BcbiAgICAucmVwbGFjZSgvXFwuXFwuL2csIFwiXCIpXG4gICAgLy8gV2luZG93cyDquIjsp4Ag66y47J6QIOygnOqxsFxuICAgIC5yZXBsYWNlKC9bPD46XCJ8PypdL2csIFwiXCIpXG4gICAgLy8g7Iuc7J6RL+uBnSDsoJAsIO2VmOydtO2UiCwg7Ja4642U7Iqk7L2U7Ja0IOygnOqxsFxuICAgIC5yZXBsYWNlKC9eWy5cXC1fXSt8Wy5cXC1fXSskL2csIFwiXCIpXG4gICAgLy8g7Jew7IaN65CcIO2VmOydtO2UiOydhCDtlZjrgpjroZxcbiAgICAucmVwbGFjZSgvLSsvZywgXCItXCIpXG4gICAgLy8g7JWM7YyM67KzLCDsiKvsnpAsIO2VmOydtO2UiCwg7Ja4642U7Iqk7L2U7Ja0LCDtlZzquIDrp4wg7ZeI7JqpXG4gICAgLnJlcGxhY2UoL1teYS16QS1aMC05LV/qsIAt7Z6jXS9nLCBcIlwiKTtcblxuICAvLyDquLjsnbQg7KCc7ZWcXG4gIGNvbnN0IE1BWF9MRU5HVEggPSAxMDA7XG4gIGlmIChzYW5pdGl6ZWQubGVuZ3RoID4gTUFYX0xFTkdUSCkge1xuICAgIHNhbml0aXplZCA9IHNhbml0aXplZC5zdWJzdHJpbmcoMCwgTUFYX0xFTkdUSCk7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGDimqAgTmFtZSB0cnVuY2F0ZWQgdG8gJHtNQVhfTEVOR1RIfSBjaGFyYWN0ZXJzYCkpO1xuICB9XG5cbiAgLy8gV2luZG93cyDsmIjslb3slrQg7ZmV7J24XG4gIGNvbnN0IFJFU0VSVkVEX05BTUVTID0gW1xuICAgIFwiQ09OXCIsXG4gICAgXCJQUk5cIixcbiAgICBcIkFVWFwiLFxuICAgIFwiTlVMXCIsXG4gICAgXCJDT00xXCIsXG4gICAgXCJDT00yXCIsXG4gICAgXCJDT00zXCIsXG4gICAgXCJDT000XCIsXG4gICAgXCJDT001XCIsXG4gICAgXCJDT002XCIsXG4gICAgXCJDT003XCIsXG4gICAgXCJDT004XCIsXG4gICAgXCJDT005XCIsXG4gICAgXCJMUFQxXCIsXG4gICAgXCJMUFQyXCIsXG4gICAgXCJMUFQzXCIsXG4gICAgXCJMUFQ0XCIsXG4gICAgXCJMUFQ1XCIsXG4gICAgXCJMUFQ2XCIsXG4gICAgXCJMUFQ3XCIsXG4gICAgXCJMUFQ4XCIsXG4gICAgXCJMUFQ5XCIsXG4gIF07XG4gIGlmIChSRVNFUlZFRF9OQU1FUy5pbmNsdWRlcyhzYW5pdGl6ZWQudG9VcHBlckNhc2UoKSkpIHtcbiAgICBzYW5pdGl6ZWQgPSBgc2tpbGwtJHtzYW5pdGl6ZWR9YDtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYOKaoCBSZXNlcnZlZCBuYW1lIGRldGVjdGVkLCBwcmVmaXhlZCB3aXRoIFwic2tpbGwtXCJgKSk7XG4gIH1cblxuICAvLyDruYgg66y47J6Q7Je0IOyytO2BrFxuICBpZiAoc2FuaXRpemVkID09PSBcIlwiKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCLinJcgSW52YWxpZCBza2lsbCBuYW1lIGFmdGVyIHNhbml0aXphdGlvblwiKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZGltKGAgIE9yaWdpbmFsOiBcIiR7bmFtZX1cImApKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyDrs4Dqsr0g7JWM66a8XG4gIGlmIChzYW5pdGl6ZWQgIT09IG5hbWUpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYOKaoCBOYW1lIHNhbml0aXplZDogXCIke25hbWV9XCIg4oaSIFwiJHtzYW5pdGl6ZWR9XCJgKSk7XG4gIH1cblxuICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihsb2NhbERpciwgYCR7c2FuaXRpemVkfS5tZGApO1xuXG4gIGlmIChhd2FpdCBleGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGBTa2lsbCBcIiR7c2FuaXRpemVkfVwiIGFscmVhZHkgZXhpc3RzLmApKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBta2Rpcihsb2NhbERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBgLS0tXG5uYW1lOiAke3Nhbml0aXplZH1cbmNhdGVnb3J5OiBvdGhlclxuY3JlYXRlZF9hdDogJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdfVxuc3RhdHVzOiBkcmFmdFxuLS0tXG5cbiMgJHtzYW5pdGl6ZWR9XG5cbiMjIOyDge2ZqVxuXG5b7Ja065akIOusuOygnOyYgOuKlOyngF1cblxuIyMg7ZW06rKwIOuwqeuylVxuXG5b7Ja065a76rKMIO2VtOqysO2WiOuKlOyngF1cblxuIyMg7L2U65OcIOyYiOyLnFxuXG5cXGBcXGBcXGB0eXBlc2NyaXB0XG4vLyDsmIjsi5wg7L2U65OcXG5cXGBcXGBcXGBcbmA7XG5cbiAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCB0ZW1wbGF0ZSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgQ3JlYXRlZCAuY2xhdWRlL3NraWxscy9sb2NhbC8ke3Nhbml0aXplZH0ubWRgKSk7XG59XG5cbi8qKlxuICogcG5wbSBzb25hbXUgYXV0aCBnZW5lcmF0ZSDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIGJldHRlci1hdXRoIOyXlO2LsO2LsOuTpChVc2VyLCBTZXNzaW9uLCBBY2NvdW50LCBWZXJpZmljYXRpb24p7J2EIOyDneyEse2VqeuLiOuLpC5cbiAqXG4gKiDsmLXshZg6XG4gKiAtLXBsdWdpbnMgcGhvbmUtbnVtYmVyLDJmYSAg7ZSM65+s6re47J24IOyXlO2LsO2LsOuPhCDtlajqu5gg7IOd7ISxXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGF1dGhfZ2VuZXJhdGUoKSB7XG4gIC8vIC0tcGx1Z2lucyDsmLXshZgg7YyM7IuxXG4gIGNvbnN0IHBsdWdpbnNBcmcgPSBwcm9jZXNzLmFyZ3YuZmluZCgoYXJnKSA9PiBhcmcuc3RhcnRzV2l0aChcIi0tcGx1Z2luc1wiKSk7XG4gIGNvbnN0IHBsdWdpbnM6IEJldHRlckF1dGhQbHVnaW5JZFtdID0gW107XG5cbiAgaWYgKHBsdWdpbnNBcmcpIHtcbiAgICBjb25zdCBwbHVnaW5WYWx1ZSA9IHBsdWdpbnNBcmcuaW5jbHVkZXMoXCI9XCIpXG4gICAgICA/IHBsdWdpbnNBcmcuc3BsaXQoXCI9XCIpWzFdXG4gICAgICA6IHByb2Nlc3MuYXJndltwcm9jZXNzLmFyZ3YuaW5kZXhPZihwbHVnaW5zQXJnKSArIDFdO1xuXG4gICAgaWYgKHBsdWdpblZhbHVlKSB7XG4gICAgICBjb25zdCBwbHVnaW5JZHMgPSBwbHVnaW5WYWx1ZS5zcGxpdChcIixcIikubWFwKChwKSA9PiBwLnRyaW0oKSk7XG5cbiAgICAgIGZvciAoY29uc3QgaWQgb2YgcGx1Z2luSWRzKSB7XG4gICAgICAgIGlmIChpc1ZhbGlkUGx1Z2luSWQoaWQpKSB7XG4gICAgICAgICAgcGx1Z2lucy5wdXNoKGlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYOKaoCBVbmtub3duIHBsdWdpbjogJHtpZH1gKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKGAgIFN1cHBvcnRlZCBwbHVnaW5zOiAke1NVUFBPUlRFRF9QTFVHSU5fSURTLmpvaW4oXCIsIFwiKX1gKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIvCflJAgR2VuZXJhdGluZyBiZXR0ZXItYXV0aCBlbnRpdGllcy4uLlxcblwiKSk7XG5cbiAgaWYgKHBsdWdpbnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBQbHVnaW5zOiAke3BsdWdpbnMuam9pbihcIiwgXCIpfWApKTtcbiAgfVxuXG4gIGF3YWl0IGdlbmVyYXRlQmV0dGVyQXV0aEVudGl0aWVzKHsgcGx1Z2lucyB9KTtcbn1cblxuLyoqXG4gKiDsm4ztgazsiqTtjpjsnbTsiqQg66Oo7Yq466W8IOywvuyKteuLiOuLpC5cbiAqIOyasOyEoOyInOychDogcG5wbS13b3Jrc3BhY2UueWFtbCA+IENMQVVERS5tZCA+IOujqO2KuCBwYWNrYWdlLmpzb24gKHdvcmtzcGFjZXMg7ZWE65OcKVxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kV29ya3NwYWNlUm9vdCgpIHtcbiAgbGV0IGRpciA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgd2hpbGUgKGRpciAhPT0gcGF0aC5kaXJuYW1lKGRpcikpIHtcbiAgICAvLyAxLiBwbnBtLXdvcmtzcGFjZS55YW1sIO2MjOydvOydtCDsnojripTsp4Ag7ZmV7J24LiDsnojsnLzrqbQg7ZmV7Iuk7ZWcIG1vbm9yZXBvIOujqO2KuC5cbiAgICBpZiAoYXdhaXQgZXhpc3RzKHBhdGguam9pbihkaXIsIFwicG5wbS13b3Jrc3BhY2UueWFtbFwiKSkpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuXG4gICAgLy8gMi4gQ0xBVURFLm1kIO2MjOydvOydtCDsnojripTsp4Ag7ZmV7J24LiDsnojsnLzrqbQg7ZSE66Gc7KCd7Yq4IOujqO2KuOuhnCDqsITso7ztlaguXG4gICAgaWYgKGF3YWl0IGV4aXN0cyhwYXRoLmpvaW4oZGlyLCBcIkNMQVVERS5tZFwiKSkpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuXG4gICAgLy8gMy4gcGFja2FnZS5qc29u7JeQIHdvcmtzcGFjZXMg7ZWE65Oc6rCAIOyeiOycvOuptCDro6jtirguXG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBcInBhY2thZ2UuanNvblwiKTtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKHBhY2thZ2VQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGF3YWl0IHJlYWRGaWxlKHBhY2thZ2VQYXRoLCBcInV0Zi04XCIpKTtcbiAgICAgICAgaWYgKHBhY2thZ2VKc29uLndvcmtzcGFjZXMpIHtcbiAgICAgICAgICByZXR1cm4gZGlyO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8g7YyM7IuxIOyLpO2MqOyLnCDrrLTsi5xcbiAgICAgIH1cbiAgICB9XG4gICAgZGlyID0gcGF0aC5kaXJuYW1lKGRpcik7XG4gIH1cblxuICAvLyDssL7sp4Ag66q77ZWY66m0IGFwaSDtj7TrjZTsnZgg67aA66qoIOyCrOyaqVxuICByZXR1cm4gZmluZEFwcFJvb3RQYXRoKCk7XG59XG4iXSwibmFtZXMiOlsiY2hhbGsiLCJkb3RlbnYiLCJjb25maWciLCJhc3NlcnQiLCJleGVjU3luYyIsInNwYXduIiwiY3AiLCJta2RpciIsInJlYWRkaXIiLCJyZWFkRmlsZSIsInJtIiwic3ltbGluayIsIndyaXRlRmlsZSIsImtuZXgiLCJjcmVhdGVSZXF1aXJlIiwib3MiLCJwYXRoIiwicHJvY2VzcyIsInRzaWNsaSIsIlNvbmFtdSIsImdlbmVyYXRlQmV0dGVyQXV0aEVudGl0aWVzIiwiaXNWYWxpZFBsdWdpbklkIiwiU1VQUE9SVEVEX1BMVUdJTl9JRFMiLCJFbnRpdHlNYW5hZ2VyIiwiTWlncmF0b3IiLCJGaXh0dXJlTWFuYWdlciIsImV4ZWNXaXRoTGluZVByZWZpeCIsInByaW50QnVpbGRTdW1tYXJ5IiwicHJpbnRUYXNrRmFpbGVkIiwicHJpbnRUYXNrSGVhZGVyIiwicHJpbnRUYXNrU3RhcnQiLCJwcmludFRhc2tTdWNjZXNzIiwiZXhpc3RzIiwiZmluZEFwaVJvb3RQYXRoIiwiZmluZEFwcFJvb3RQYXRoIiwiQVBJX0FSVElGQUNUUyIsIldFQl9BUlRJRkFDVFMiLCJmaXh0dXJlRXhwbG9yZUNvbW1hbmQiLCJmaXh0dXJlRmV0Y2hDb21tYW5kIiwiZml4dHVyZUdlbkNvbW1hbmQiLCJtaWdyYXRvciIsInBhcnNlQ2xpT3B0aW9ucyIsImFyZ3YiLCJmbGFncyIsIlNldCIsIm9wdGlvbnMiLCJpIiwibGVuZ3RoIiwiYXJnIiwic3RhcnRzV2l0aCIsImluY2x1ZGVzIiwia2V5IiwidmFsdWUiLCJzbGljZSIsInNwbGl0IiwibmV4dEFyZyIsImFkZCIsImJvb3RzdHJhcCIsIm5vdFRvSW5pdCIsImluaXQiLCJmaWx0ZXJlZEFyZ3YiLCJza2lwTmV4dCIsImFmdGVyRG91YmxlRGFzaCIsInB1c2giLCJjbWQiLCJ0eXBlcyIsInR5cGUiLCJuYW1lIiwibWVzc2FnZSIsImNob2ljZXMiLCJnZXRBbGxQYXJlbnRJZHMiLCJtYXAiLCJlbnRpdHlJZCIsInRpdGxlIiwiYXJncyIsInJ1bm5lcnMiLCJtaWdyYXRlX3N0YXR1cyIsIm1pZ3JhdGVfcnVuIiwibWlncmF0ZV9hcHBseSIsImZpeHR1cmVfaW5pdCIsImZpeHR1cmVfaW1wb3J0IiwiZml4dHVyZV9zeW5jIiwiZml4dHVyZV9nZW4iLCJmaXh0dXJlX2ZldGNoIiwiZml4dHVyZV9leHBsb3JlIiwic3R1Yl9wcmFjdGljZSIsInN0dWJfZW50aXR5Iiwic2NhZmZvbGRfbW9kZWwiLCJzY2FmZm9sZF9tb2RlbF90ZXN0IiwiY29uZV9nZW4iLCJzeW5jIiwiYnVpbGRfYWxsIiwiYnVpbGRfYXBpIiwiYnVpbGRfd2ViIiwiZGV2X2FsbCIsImRldl9hcGkiLCJkZXZfd2ViIiwic3RhcnQiLCJza2lsbHNfc3luYyIsInNraWxsc19jcmVhdGUiLCJhdXRoX2dlbmVyYXRlIiwiZGVzdHJveSIsImZpbmFsbHkiLCJzeW5jZXIiLCJzcGF3bkFwaURldlNlcnZlciIsImFwaVJvb3QiLCJlbnRyeVBvaW50IiwiaG90UnVubmVyQmluUGF0aCIsInVybCIsInJlc29sdmUiLCJzZXJ2ZXJQcm9jZXNzIiwiZXhlY1BhdGgiLCJqb2luIiwiY3dkIiwic3RkaW8iLCJlbnYiLCJOT0RFX0VOViIsIkhPVCIsIkFQSV9ST09UX1BBVEgiLCJleHRyYUVudiIsImNsZWFudXAiLCJjb25zb2xlIiwibG9nIiwieWVsbG93Iiwia2lsbCIsImV4aXQiLCJvbiIsImNvZGUiLCJlcnJvciIsInJlZCIsImJvbGQiLCJTT05BTVVfRElTQUJMRV9JTlRFR1JBVEVEX1dFQiIsImFwcFJvb3QiLCJ3ZWJQYXRoIiwiZG91YmxlRGFzaEluZGV4IiwiaW5kZXhPZiIsInBhc3N0aHJvdWdoQXJncyIsInZpdGVBcmdzIiwidml0ZVByb2Nlc3MiLCJzaWduYWwiLCJyZXNvbHZlU3djQ29uZmlnUGF0aCIsInN3Y0ZpbGVQYXRoIiwiZGltIiwiZGlybmFtZSIsInNraXBJZk1pc3NpbmciLCJhcGlTdGFydGVkQXQiLCJEYXRlIiwibm93IiwiYXJ0aWZhY3QiLCJwcm9qZWN0UGF0aCIsImRlc2NyaXB0aW9uIiwicnVuQnVpbGRTdGVwcyIsImJ1aWxkQ29tbWFuZEFyZ3MiLCJjb25maWdGaWxlUGF0aCIsImUiLCJncmF5Iiwid2ViU3RhcnRlZEF0Iiwic3RlcHMiLCJwcmVCdWlsZENvbW1hbmQiLCJidWlsZENvbW1hbmQiLCJwb3N0QnVpbGRDb21tYW5kIiwiZmlsdGVyIiwic3RlcCIsImlzTGFzdCIsIkVycm9yIiwiY2F1c2UiLCJibHVlIiwic2V0dXBNaWdyYXRvciIsInNldHVwRml4dHVyZU1hbmFnZXIiLCJ0YXJnZXRzIiwicnVuQWN0aW9uIiwibG9jYWxIb3N0cyIsIk9iamVjdCIsImtleXMiLCJkYkNvbmZpZyIsInRhcmdldCIsInRhcmdldENvbmZpZyIsImhvc3QiLCJjb25uZWN0aW9uIiwidG9Mb3dlckNhc2UiLCJzdGF0dXMiLCJnZXRTdGF0dXMiLCJzcmNDb25maWciLCJkZXZlbG9wbWVudF9tYXN0ZXIiLCJsYWJlbCIsImZpeHR1cmUiLCJ0ZXN0IiwidG9Ta2lwIiwicmVtb3RlQ29ubiIsImxvY2FsQ29ubiIsImRhdGFiYXNlIiwiZHVtcEZpbGVuYW1lIiwic3JjQ29ubiIsIm1pZ3JhdGlvbnNEdW1wIiwidXNlciIsInBhc3N3b3JkIiwiX2RiIiwibWlncmF0aW9ucyIsInJhdyIsImNvdW50IiwiY29ubiIsImRiIiwidW5kZWZpbmVkIiwicm93IiwibXlzcWxDbWQiLCJyZWNvcmRJZHMiLCJpbXBvcnRGaXh0dXJlIiwicGFyc2VPcHRpb25zIiwiXyIsImsiLCJ2IiwibmV4dCIsInByYWN0aWNlRGlyIiwiYXBpUm9vdFBhdGgiLCJmaWxlTmFtZXMiLCJtYXhTZXFObyIsInJlY3Vyc2l2ZSIsImZpbHRlcmVkU2VxcyIsImZpbGVOYW1lIiwiZW5kc1dpdGgiLCJzZXFObyIsIm1hdGNoIiwicGFyc2VJbnQiLCJzb3J0IiwiYSIsImIiLCJjdXJyZW50U2VxTm8iLCJkc3RQYXRoIiwicnVuQ29kZSIsInJlcGxhY2UiLCJjcmVhdGVFbnRpdHkiLCJ1c2VBSSIsImhhcyIsIm5vQ29uZXMiLCJlbnRpdHkiLCJnZXQiLCJjb25maWdMb2NhbGUiLCJpMThuIiwiZGVmYXVsdExvY2FsZSIsImxvY2FsZSIsInJlc3VsdCIsImdlbmVyYXRlQ29uZXMiLCJwcmVzZXJ2ZUV4aXN0aW5nIiwib25seUVtcHR5IiwidG9rZW5zVXNlZCIsImdlbmVyYXRlVGVtcGxhdGVDb25lcyIsImFsbEVudGl0aWVzIiwiZ2V0QWxsRW50aXRpZXMiLCJ0b3RhbFRva2VucyIsImVycm9ycyIsImlkIiwiZXN0aW1hdGVkQ29zdCIsInRvRml4ZWQiLCJlcnIiLCJtb2RlIiwiZ2VuZXJhdGVUZW1wbGF0ZSIsImlzR2xvYmFsIiwic291cmNlQmFzZSIsInNvdXJjZVNraWxsc0RpciIsInNvdXJjZUNsYXVkZU1kIiwic2tpbGxzX3N5bmNfdG8iLCJob21lZGlyIiwidXNlU3ltbGluayIsImNvcHlQcm9qZWN0VGVtcGxhdGVzIiwiY3lhbiIsIndvcmtzcGFjZVJvb3QiLCJmaW5kV29ya3NwYWNlUm9vdCIsImNsYXVkZURpciIsInRhcmdldFNraWxsc0RpciIsImZvcmNlIiwiZ3JlZW4iLCJTdHJpbmciLCJza2lsbHNDb3B5Iiwic291cmNlUHJvamVjdERpciIsInRhcmdldFByb2plY3REaXIiLCJ0YXJnZXRDbGF1ZGVNZCIsInNvdXJjZUNvbnRlbnQiLCJ0YXJnZXRDb250ZW50Iiwic3RhcnRNYXJrZXIiLCJlbmRNYXJrZXIiLCJzdGFydElkeCIsImVuZElkeCIsImJlZm9yZSIsInN1YnN0cmluZyIsImFmdGVyIiwibmV3Q29udGVudCIsImFwcGVuZGVkIiwidHJpbUVuZCIsIndpdGhNYXJrZXJzIiwic3JjIiwiZGVzdCIsImNvcHlFcnJvciIsImxvY2FsRGlyIiwidHJpbSIsInNhbml0aXplZCIsIk1BWF9MRU5HVEgiLCJSRVNFUlZFRF9OQU1FUyIsInRvVXBwZXJDYXNlIiwiZmlsZVBhdGgiLCJ0ZW1wbGF0ZSIsInRvSVNPU3RyaW5nIiwicGx1Z2luc0FyZyIsImZpbmQiLCJwbHVnaW5zIiwicGx1Z2luVmFsdWUiLCJwbHVnaW5JZHMiLCJwIiwiZGlyIiwicGFja2FnZVBhdGgiLCJwYWNrYWdlSnNvbiIsIkpTT04iLCJwYXJzZSIsIndvcmtzcGFjZXMiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFdBQVcsUUFBUTtBQUMxQixPQUFPQyxZQUFZLFNBQVM7QUFFNUJBLE9BQU9DLE1BQU07QUFFYixPQUFPQyxZQUFZLFNBQVM7QUFDNUIsU0FBU0MsUUFBUSxFQUFFQyxLQUFLLFFBQVEsZ0JBQWdCO0FBQ2hELFNBQVNDLEVBQUUsRUFBRUMsS0FBSyxFQUFFQyxPQUFPLEVBQUVDLFFBQVEsRUFBRUMsRUFBRSxFQUFFQyxPQUFPLEVBQUVDLFNBQVMsUUFBUSxtQkFBYztBQUNuRixPQUFPQyxVQUF5QixPQUFPO0FBQ3ZDLFNBQVNDLGFBQWEsUUFBUSxTQUFTO0FBQ3ZDLE9BQU9DLFFBQVEsS0FBSztBQUNwQixPQUFPQyxVQUFVLE9BQU87QUFDeEIsT0FBT0MsYUFBYSxVQUFVO0FBQzlCLFNBQVNDLE1BQU0sUUFBUSxTQUFTO0FBQ2hDLFNBQVNDLE1BQU0sUUFBUSxrQkFBUztBQUNoQyxTQUFTQywwQkFBMEIsUUFBUSw0QkFBeUI7QUFDcEUsU0FFRUMsZUFBZSxFQUNmQyxvQkFBb0IsUUFDZiw4Q0FBcUM7QUFFNUMsU0FBU0MsYUFBYSxRQUFRLDhCQUEyQjtBQUN6RCxTQUFTQyxRQUFRLFFBQVEsMkJBQXdCO0FBQ2pELFNBQVNDLGNBQWMsUUFBUSxnQ0FBNkI7QUFDNUQsU0FDRUMsa0JBQWtCLEVBQ2xCQyxpQkFBaUIsRUFDakJDLGVBQWUsRUFDZkMsZUFBZSxFQUNmQyxjQUFjLEVBQ2RDLGdCQUFnQixRQUNYLDJCQUF3QjtBQUMvQixTQUFTQyxNQUFNLFFBQVEsdUJBQW9CO0FBQzNDLFNBQVNDLGVBQWUsRUFBRUMsZUFBZSxRQUFRLG9CQUFpQjtBQUNsRSxTQUFTQyxhQUFhLEVBQXNCQyxhQUFhLFFBQVEsb0JBQWlCO0FBQ2xGLFNBQVNDLHFCQUFxQixFQUFFQyxtQkFBbUIsRUFBRUMsaUJBQWlCLFFB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
1218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuXG5kb3RlbnYuY29uZmlnKCk7XG5cbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgZXhlY1N5bmMsIHNwYXduIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGNwLCBta2RpciwgcmVhZGRpciwgcmVhZEZpbGUsIHJtLCBzeW1saW5rLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBrbmV4LCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm1vZHVsZVwiO1xuaW1wb3J0IG9zIGZyb20gXCJvc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBwcm9jZXNzIGZyb20gXCJwcm9jZXNzXCI7XG5pbXBvcnQgeyB0c2ljbGkgfSBmcm9tIFwidHNpY2xpXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUJldHRlckF1dGhFbnRpdGllcyB9IGZyb20gXCIuLi9hdXRoL2F1dGgtZ2VuZXJhdG9yXCI7XG5pbXBvcnQge1xuICB0eXBlIEJldHRlckF1dGhQbHVnaW5JZCxcbiAgaXNWYWxpZFBsdWdpbklkLFxuICBTVVBQT1JURURfUExVR0lOX0lEUyxcbn0gZnJvbSBcIi4uL2F1dGgvcGx1Z2lucy9lbnRpdHktZGVmaW5pdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11REJDb25maWcgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBNaWdyYXRvciB9IGZyb20gXCIuLi9taWdyYXRpb24vbWlncmF0b3JcIjtcbmltcG9ydCB7IEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBleGVjV2l0aExpbmVQcmVmaXgsXG4gIHByaW50QnVpbGRTdW1tYXJ5LFxuICBwcmludFRhc2tGYWlsZWQsXG4gIHByaW50VGFza0hlYWRlcixcbiAgcHJpbnRUYXNrU3RhcnQsXG4gIHByaW50VGFza1N1Y2Nlc3MsXG59IGZyb20gXCIuLi91dGlscy9jb25zb2xlLXV0aWxcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuaW1wb3J0IHsgZmluZEFwaVJvb3RQYXRoLCBmaW5kQXBwUm9vdFBhdGggfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IEFQSV9BUlRJRkFDVFMsIHR5cGUgQnVpbGRBcnRpZmFjdCwgV0VCX0FSVElGQUNUUyB9IGZyb20gXCIuL2J1aWxkLWNvbmZpZ1wiO1xuaW1wb3J0IHsgZml4dHVyZUV4cGxvcmVDb21tYW5kLCBmaXh0dXJlRmV0Y2hDb21tYW5kLCBmaXh0dXJlR2VuQ29tbWFuZCB9IGZyb20gXCIuL2ZpeHR1cmVcIjtcblxubGV0IG1pZ3JhdG9yOiBNaWdyYXRvcjtcblxuLyoqXG4gKiBDTEkg7Ji17IWY7J2EIO2MjOyLse2VmOuKlCDtl6ztjbwg7ZWo7IiYXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ2xpT3B0aW9ucyhhcmd2OiBzdHJpbmdbXSA9IHByb2Nlc3MuYXJndik6IHtcbiAgZmxhZ3M6IFNldDxzdHJpbmc+OyAvLyAtLXJlZ2VuZXJhdGUsIC0tYWksIC0tbm8tY29uZXMg65OxXG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IC8vIC0tbG9jYWxlIGtvIOuTsVxufSB7XG4gIGNvbnN0IGZsYWdzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcmcgPSBhcmd2W2ldO1xuICAgIGlmICghYXJnLnN0YXJ0c1dpdGgoXCItLVwiKSkgY29udGludWU7XG5cbiAgICAvLyAtLW9wdGlvbj12YWx1ZSDtmJXsi51cbiAgICBpZiAoYXJnLmluY2x1ZGVzKFwiPVwiKSkge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gYXJnLnNsaWNlKDIpLnNwbGl0KFwiPVwiKTtcbiAgICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gLS1vcHRpb24gdmFsdWUg7ZiV7Iud7J247KeAIO2ZleyduFxuICAgIGNvbnN0IG5leHRBcmcgPSBhcmd2W2kgKyAxXTtcbiAgICBpZiAobmV4dEFyZyAmJiAhbmV4dEFyZy5zdGFydHNXaXRoKFwiLS1cIikgJiYgIW5leHRBcmcuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgIG9wdGlvbnNbYXJnLnNsaWNlKDIpXSA9IG5leHRBcmc7XG4gICAgICBpKys7IC8vIOuLpOydjCBhcmfripQg6rCS7J2066+A66GcIOyKpO2CtVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAtLWZsYWcg7ZiV7IudXG4gICAgICBmbGFncy5hZGQoYXJnLnNsaWNlKDIpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBmbGFncywgb3B0aW9ucyB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBib290c3RyYXAoKSB7XG4gIGNvbnN0IG5vdFRvSW5pdCA9IFtcImRldlwiLCBcImJ1aWxkXCIsIFwic3RhcnRcIiwgXCJza2lsbHNcIl0uaW5jbHVkZXMocHJvY2Vzcy5hcmd2WzJdID8/IFwiXCIpO1xuICBpZiAoIW5vdFRvSW5pdCkge1xuICAgIGF3YWl0IFNvbmFtdS5pbml0KGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIHRzaWNsaeuKlCDsoJXtmZXtlZwg66qF66C57Ja0IOunpOy5reunjCDsp4Dsm5DtlZjrr4DroZwsIC0t66GcIOyLnOyeke2VmOuKlCDsmLXshZjqs7wg6re4IOqwkuydhCDtlYTthLDrp4Htlanri4jri6QuXG4gICAgLy8g7Ji17IWYIO2MjOyLseydgCDqsIEgcnVubmVyIO2VqOyImOyXkOyEnCDsm5Drs7ggcHJvY2Vzcy5hcmd266W8IOyCrOyaqe2VmOyXrCDsiJjtlontlanri4jri6QuXG4gICAgLy8gXCItLVwiKGJhcmUgZG91YmxlIGRhc2gp64qUIHBhc3N0aHJvdWdoIOq1rOu2hOyekOydtOuvgOuhnCwg6re4IOuSpOydmCDrqqjrk6Ag7J247J6Q64+EIOygnOyZuO2VqeuLiOuLpC5cbiAgICBjb25zdCBmaWx0ZXJlZEFyZ3Y6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IHNraXBOZXh0ID0gZmFsc2U7XG4gICAgbGV0IGFmdGVyRG91YmxlRGFzaCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvY2Vzcy5hcmd2Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBhcmcgPSBwcm9jZXNzLmFyZ3ZbaV07XG4gICAgICBpZiAoYXJnID09PSBcIi0tXCIpIHtcbiAgICAgICAgYWZ0ZXJEb3VibGVEYXNoID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoYWZ0ZXJEb3VibGVEYXNoKSBjb250aW51ZTtcbiAgICAgIGlmIChza2lwTmV4dCkge1xuICAgICAgICBza2lwTmV4dCA9IGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmcuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICAgIC8vIC0tb3B0aW9uPXZhbHVlIO2YleyLneydgCDsnbQgYXJn66eMIOyKpO2CtVxuICAgICAgICBpZiAoYXJnLmluY2x1ZGVzKFwiPVwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIC0tb3B0aW9uIHZhbHVlIO2YleyLneyduOyngCDtmZXsnbg6IOuLpOydjCBhcmfqsIAgLS3roZwg7Iuc7J6R7ZWY7KeAIOyViuycvOuptCDqsJLsnbQg7J6I64qUIOqyg1xuICAgICAgICBjb25zdCBuZXh0QXJnID0gcHJvY2Vzcy5hcmd2W2kgKyAxXTtcbiAgICAgICAgaWYgKG5leHRBcmcgJiYgIW5leHRBcmcuc3RhcnRzV2l0aChcIi0tXCIpICYmICFuZXh0QXJnLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgc2tpcE5leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZmlsdGVyZWRBcmd2LnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICAvLyBidWlsZC9kZXYg66qF66C57Ja06rCAIOyEnOu4jOy7pOunqOuTnCDsl4bsnbQg7Zi47Lac65CgIOuVjCBcImFsbFwi7J2EIOq4sOuzuOqwkuycvOuhnCDstpTqsIDtlanri4jri6QuXG4gICAgLy8g7JiIOiBgc29uYW11IGJ1aWxkYCDihpIgYHNvbmFtdSBidWlsZCBhbGxgLCBgc29uYW11IGRldmAg4oaSIGBzb25hbXUgZGV2IGFsbGBcbiAgICBjb25zdCBjbWQgPSBmaWx0ZXJlZEFyZ3ZbMl07XG4gICAgaWYgKChjbWQgPT09IFwiYnVpbGRcIiB8fCBjbWQgPT09IFwiZGV2XCIpICYmIGZpbHRlcmVkQXJndi5sZW5ndGggPT09IDMpIHtcbiAgICAgIGZpbHRlcmVkQXJndi5wdXNoKFwiYWxsXCIpO1xuICAgIH1cblxuICAgIGF3YWl0IHRzaWNsaShmaWx0ZXJlZEFyZ3YsIHtcbiAgICAgIHR5cGVzOiB7XG4gICAgICAgIFwiI2VudGl0eUlkXCI6IHtcbiAgICAgICAgICB0eXBlOiBcImF1dG9jb21wbGV0ZVwiLFxuICAgICAgICAgIG5hbWU6IFwiI2VudGl0eUlkXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJQbGVhc2UgaW5wdXQgI2VudGl0eUlkXCIsXG4gICAgICAgICAgY2hvaWNlczogRW50aXR5TWFuYWdlci5nZXRBbGxQYXJlbnRJZHMoKS5tYXAoKGVudGl0eUlkKSA9PiAoe1xuICAgICAgICAgICAgdGl0bGU6IGVudGl0eUlkLFxuICAgICAgICAgICAgdmFsdWU6IGVudGl0eUlkLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgICAgXCIjcmVjb3JkSWRzXCI6IFwibnVtYmVyW11cIixcbiAgICAgICAgXCIjbmFtZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICBcIiN0YXJnZXRzXCI6IHtcbiAgICAgICAgICB0eXBlOiBcIm11bHRpc2VsZWN0XCIsXG4gICAgICAgICAgbmFtZTogXCIjdGFyZ2V0c1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IFwiUGxlYXNlIGlucHV0ICN0YXJnZXRzXCIsXG4gICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgeyB0aXRsZTogXCJEZXZlbG9wbWVudFwiLCB2YWx1ZTogXCJkZXZlbG9wbWVudF9tYXN0ZXJcIiB9LFxuICAgICAgICAgICAgeyB0aXRsZTogXCJQcm9kdWN0aW9uXCIsIHZhbHVlOiBcInByb2R1Y3Rpb25fbWFzdGVyXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiRml4dHVyZVwiLCB2YWx1ZTogXCJmaXh0dXJlXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiVGVzdFwiLCB2YWx1ZTogXCJ0ZXN0XCIgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImluaXRcIl0sXG4gICAgICAgIFtcImZpeHR1cmVcIiwgXCJpbXBvcnRcIiwgXCIjZW50aXR5SWRcIiwgXCIjcmVjb3JkSWRzXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwic3luY1wiXSxcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImdlblwiXSxcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImZldGNoXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwiZXhwbG9yZVwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInJ1blwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcImFwcGx5XCIsIFwiI3RhcmdldHNcIl0sXG4gICAgICAgIFtcIm1pZ3JhdGVcIiwgXCJzdGF0dXNcIl0sXG4gICAgICAgIFtcInN0dWJcIiwgXCJwcmFjdGljZVwiLCBcIiNuYW1lXCJdLFxuICAgICAgICBbXCJzdHViXCIsIFwiZW50aXR5XCIsIFwiI25hbWVcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwibW9kZWxcIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwibW9kZWxfdGVzdFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJ2aWV3X2xpc3RcIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInNjYWZmb2xkXCIsIFwidmlld19mb3JtXCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJjb25lXCIsIFwiZ2VuXCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJzeW5jXCJdLFxuICAgICAgICBbXCJidWlsZFwiLCBcImFsbFwiXSxcbiAgICAgICAgW1wiYnVpbGRcIiwgXCJhcGlcIl0sXG4gICAgICAgIFtcImJ1aWxkXCIsIFwid2ViXCJdLFxuICAgICAgICBbXCJkZXZcIiwgXCJhbGxcIl0sXG4gICAgICAgIFtcImRldlwiLCBcImFwaVwiXSxcbiAgICAgICAgW1wiZGV2XCIsIFwid2ViXCJdLFxuICAgICAgICBbXCJzdGFydFwiXSxcbiAgICAgICAgW1wic2tpbGxzXCIsIFwic3luY1wiXSxcbiAgICAgICAgW1wic2tpbGxzXCIsIFwiY3JlYXRlXCIsIFwiI25hbWVcIl0sXG4gICAgICAgIFtcImF1dGhcIiwgXCJnZW5lcmF0ZVwiXSxcbiAgICAgIF0sXG4gICAgICBydW5uZXJzOiB7XG4gICAgICAgIG1pZ3JhdGVfc3RhdHVzLFxuICAgICAgICBtaWdyYXRlX3J1bixcbiAgICAgICAgbWlncmF0ZV9hcHBseSxcbiAgICAgICAgZml4dHVyZV9pbml0LFxuICAgICAgICBmaXh0dXJlX2ltcG9ydCxcbiAgICAgICAgZml4dHVyZV9zeW5jLFxuICAgICAgICBmaXh0dXJlX2dlbixcbiAgICAgICAgZml4dHVyZV9mZXRjaCxcbiAgICAgICAgZml4dHVyZV9leHBsb3JlLFxuICAgICAgICBzdHViX3ByYWN0aWNlLFxuICAgICAgICBzdHViX2VudGl0eSxcbiAgICAgICAgc2NhZmZvbGRfbW9kZWwsXG4gICAgICAgIHNjYWZmb2xkX21vZGVsX3Rlc3QsXG4gICAgICAgIC8vIHNjYWZmb2xkX3ZpZXdfbGlzdCxcbiAgICAgICAgLy8gc2NhZmZvbGRfdmlld19mb3JtLFxuICAgICAgICBjb25lX2dlbixcbiAgICAgICAgc3luYyxcbiAgICAgICAgYnVpbGRfYWxsLFxuICAgICAgICBidWlsZF9hcGksXG4gICAgICAgIGJ1aWxkX3dlYixcbiAgICAgICAgZGV2X2FsbCxcbiAgICAgICAgZGV2X2FwaSxcbiAgICAgICAgZGV2X3dlYixcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHNraWxsc19zeW5jLFxuICAgICAgICBza2lsbHNfY3JlYXRlLFxuICAgICAgICBhdXRoX2dlbmVyYXRlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBTb25hbXUuZGVzdHJveSgpO1xuICB9XG59XG5cbmJvb3RzdHJhcCgpLmZpbmFsbHkoYXN5bmMgKCkgPT4ge1xuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5kZXN0cm95KCk7XG59KTtcblxuLyoqXG4gKiBwbnBtIHN5bmMg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjrpbwg7Iux7YGs7ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBzeW5jKCkge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLnN5bmMoKTtcbn1cblxuLyoqXG4gKiBBUEkg6rCc67CcIOyEnOuyhOulvCDsi6TtlontlZjripQg6rO17Ya1IOuhnOyngeyeheuLiOuLpC5cbiAqIGRldl9hbGzqs7wgZGV2X2FwaeyXkOyEnCDqs7XsnKDtlanri4jri6QuXG4gKlxuICogVHlwZVNjcmlwdOulvCDrsJTroZwg7Iuk7ZaJ7ZWgIOyImCDsnojrj4TroZ0gQHNvbmFtdS1raXQvdHMtbG9hZGVy66W8LFxuICogSE1S7J2EIOyngOybkO2VmOq4sCDsnITtlbQgQHNvbmFtdS1raXQvaG1yLWhvb2vsnYQgaW1wb3J07ZWY66mwLFxuICog7IaM7Iqk66e1IOyngOybkOydhCDsnITtlbQgLS1lbmFibGUtc291cmNlLW1hcHMg7ZSM656Y6re466W8IO2PrO2VqO2VmOyXrCDsi6Ttlontlanri4jri6QuXG4gKlxuICog7J2065WMIEBzb25hbXUta2l0L3RzLWxvYWRlcuyZgCBAc29uYW11LWtpdC9obXItaG9va+uKlCBzb25hbXXqsIAg7J6Q7LK07KCB7Jy866GcIOqwgOyngOqzoCDsnojripQgZGVwZW5kZW5jeeyeheuLiOuLpC5cbiAqIOuYkO2VnCDsi6Ttlonsl5Ag7IKs7Jqp7ZWY64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLrj4Qg66eI7LCs6rCA7KeA66GcIHNvbmFtdeqwgCDsnpDssrTsoIHsnLzroZwg6rCA7KeA6rOgIOyeiOuKlCBkZXBlbmRlbmN57J6F64uI64ukLlxuICog65Sw65287IScIOyCrOyaqeyekCDtlITroZzsoJ3tirjsl5DshJzripQg7J20IOyEuCDtjKjtgqTsp4Drpbwg7KeB7KCRIOyEpOy5mO2VoCDtlYTsmpTqsIAg7JeG7Iq164uI64ukLlxuICovXG5mdW5jdGlvbiBzcGF3bkFwaURldlNlcnZlcihvcHRpb25zPzogeyBleHRyYUVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcInNyYy9pbmRleC50c1wiO1xuXG4gIC8vIOydtCBzb25hbXUg7Yyo7YKk7KeA6rCAIGRlcGVuZGVuY2llc+uhnCDqsIDsp4Dqs6Ag7J6I64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLsnZggYmluL3J1bi5qc+ulvCDsgqzsmqntlanri4jri6QuXG4gIC8vIOydtCDqsr3roZwoL2Jpbi9ydW4uanMp64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLsnZggcGFja2FnZS5qc29u7J2YIGJpbiDtlYTrk5zsl5Ag66qF7Iuc65CY7Ja0IOyeiOuKlCDqt7jqsoPqs7wg6rCZ7Iq164uI64ukLlxuICBjb25zdCBob3RSdW5uZXJCaW5QYXRoID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpLnJlc29sdmUoXG4gICAgXCJAc29uYW11LWtpdC9obXItcnVubmVyL2Jpbi9ydW4uanNcIixcbiAgKTtcblxuICBjb25zdCBzZXJ2ZXJQcm9jZXNzID0gc3Bhd24oXG4gICAgcHJvY2Vzcy5leGVjUGF0aCwgLy8gbm9kZVxuICAgIFtcbiAgICAgIGhvdFJ1bm5lckJpblBhdGgsIC8vIOydtOugh+qyjCDtlbTshJwgaG90LXJ1bm5lcuulvCDsi6TtlontlZjqtazsmpRcbiAgICAgIFwiLS1jbGVhci1zY3JlZW49ZmFsc2VcIiwgLy8g7J207ZWYIGhvdC1ydW5uZXLsl5Dqsowg64SY6rKo7KSEIOyduOyekOuTpOyeheuLiOuLpC5cbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1pbXBvcnQ9c29uYW11L3RzLWxvYWRlci1yZWdpc3RlclwiLCAvLyBUeXBlU2NyaXB0IOyEnO2PrO2KuOulvCDsnITtlZwg66Gc642ULFxuICAgICAgXCItLW5vZGUtYXJncz0tLWltcG9ydD1zb25hbXUvaG1yLWhvb2stcmVnaXN0ZXJcIiwgLy8gSE1S7J2EIOyngOybkO2VmOq4sCDsnITtlZwgaG9vayxcbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1lbmFibGUtc291cmNlLW1hcHNcIiwgLy8g6re466as6rOgIOyGjOyKpOuntSDsp4Dsm5DsnYQg7JyE7ZWcIO2UjOuemOq3uOyeheuLiOuLpC5cbiAgICAgIFwiLS1vbi1rZXk9cjpyZXN0YXJ0OlJlc3RhcnQgc2VydmVyXCIsIC8vIHIg64iE66W066m0IOyEnOuyhCDsnqzsi5zsnpHtlZjqsowg7ZW07KSY7JqULlxuICAgICAgYC0tb24ta2V5PWY6c2hlbGwocm0gJHtwYXRoLmpvaW4oYXBpUm9vdCwgXCJzb25hbXUubG9ja1wiKX0pOnJlc3RhcnQ6Rm9yY2UgcmVzdGFydGAsIC8vIGYg64iE66W066m0IHNvbmFtdS5sb2NrIO2MjOydvOydhCDsp4DsmrDqs6Ag7ISc67KEIOyerOyLnOyeke2VmOqyjCDtlbTspJjsmpQuXG5cbiAgICAgIFwiLS1vbi1rZXk9ZW50ZXI6c2hlbGwoZWNobyBoaSk6S2V5IGJpbmRpbmcgdGVzdFwiLCAvLyBlbnRlcuulvCBrZXnroZwg7JO4IOyImCDsnojsnYzsnYQg67O07J206riwIOychO2VnCDthYzsiqTtirjsnoXri4jri6QuXG4gICAgICBcIi0tb24ta2V5PWN0cmwrZiBjdHJsK2Y6c2hlbGwoZ2l0IHB1bGwgJiYgcG5wbSBpbnN0YWxsICYmIHBucG0gLS1maWx0ZXIgc29uYW11IGJ1aWxkICYmIGVjaG8gJ1NvbmFtdSBpcyBub3cgdXAtdG8tZGF0ZSEnKTpyZXN0YXJ0OlB1bGwgJiBpbnN0YWxsICYgYnVpbGQgJiByZXN0YXJ0XCIsIC8vIG1vZGlmaWVy7JmA7J2YIOyhsO2VqSwg6re466as6rOgIOuRkCDqsJzsnZggY2hvcmTrpbwg7IKs7Jqp7ZWgIOyImCDsnojsnYzsnYQg67O07J206riwIOychO2VnCDthYzsiqTtirjsnoXri4jri6QuXG4gICAgICBlbnRyeVBvaW50LCAvLyDrp4jsp4Drp4nsnLzroZwg7Iuk7KCcIOyLpO2Wie2VoCDsiqTtgazrpr3tirjsnZgg6rK966Gc66W8IOuEmOqyqOykjeuLiOuLpC5cbiAgICBdLFxuICAgIHtcbiAgICAgIGN3ZDogYXBpUm9vdCxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAgIGVudjoge1xuICAgICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgICAgTk9ERV9FTlY6IFwiZGV2ZWxvcG1lbnRcIixcbiAgICAgICAgSE9UOiBcInllc1wiLCAvLyDslpjqsIAg7J6I7Ja07JW8IEhNUuydtCDtmZzshLHtmZTrkKnri4jri6QuXG4gICAgICAgIEFQSV9ST09UX1BBVEg6IGFwaVJvb3QsIC8vIOydtCDqsr3roZzqsIAgaG1yLWhvb2vsnZgg66Oo7Yq4IOuUlOugie2GoOumrOqwgCDrkKnri4jri6QuXG4gICAgICAgIC4uLm9wdGlvbnM/LmV4dHJhRW52LFxuICAgICAgfSxcbiAgICB9LFxuICApO1xuXG4gIC8vIOyiheujjCDsspjrpqxcbiAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCJcXG5cXG7wn5GLIFNodXR0aW5nIGRvd24uLi5cIikpO1xuICAgIHNlcnZlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9O1xuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgY2xlYW51cCk7XG4gIHByb2Nlc3Mub24oXCJTSUdURVJNXCIsIGNsZWFudXApO1xuXG4gIHNlcnZlclByb2Nlc3Mub24oXCJleGl0XCIsIChjb2RlKSA9PiB7XG4gICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKGBTZXJ2ZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpO1xuICAgICAgcHJvY2Vzcy5leGl0KGNvZGUgfHwgMSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBwbnBtIGRldiAvIHBucG0gZGV2IGFsbCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIO2UhOuhnOygne2KuOyXkCDrjIDtlbQgSE1SIOyngOybkO2VmOuKlCDqsJzrsJwg7ISc67KE66W8IOudhOybjOykjeuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5mdW5jdGlvbiBkZXZfYWxsKCkge1xuICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIlN0YXJ0aW5nIFNvbmFtdSBkZXYgc2VydmVyLi4uXFxuXCIpKTtcbiAgc3Bhd25BcGlEZXZTZXJ2ZXIoKTtcbn1cblxuLyoqXG4gKiBwbnBtIGRldiBhcGkg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBBUEkg7KCE7JqpIOqwnOuwnCDshJzrsoTrpbwg652E7JuB64uI64ukLlxuICogZGV2X2FsbOqzvCDqsbDsnZgg64+Z7J287ZWY65CYLCDthrXtlakg7Ju5IOyEnOuyhOulvCDruYTtmZzshLHtmZTtlanri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZGV2X2FwaSgpIHtcbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCJTdGFydGluZyBTb25hbXUgQVBJLW9ubHkgZGV2IHNlcnZlci4uLlxcblwiKSk7XG4gIHNwYXduQXBpRGV2U2VydmVyKHtcbiAgICBleHRyYUVudjogeyBTT05BTVVfRElTQUJMRV9JTlRFR1JBVEVEX1dFQjogXCJ5ZXNcIiB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBwbnBtIGRldiB3ZWIg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBWaXRlIOqwnOuwnCDshJzrsoTrpbwg64uo64+F7Jy866GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqIC0tIOuSpOydmCDsnbjsnpDripQgVml0ZeyXkCDqt7jrjIDroZwg7KCE64us65Cp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldl93ZWIoKSB7XG4gIGNvbnN0IGFwcFJvb3QgPSBmaW5kQXBwUm9vdFBhdGgoKTtcbiAgY29uc3Qgd2ViUGF0aCA9IHBhdGguam9pbihhcHBSb290LCBcIndlYlwiKTtcblxuICBpZiAoIShhd2FpdCBleGlzdHMod2ViUGF0aCkpKSB7XG4gICAgY29uc29sZS5lcnJvcihgd2ViIOuUlOugie2GoOumrOulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpDogJHt3ZWJQYXRofWApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIC8vIC0tIOuSpOydmCDsnbjsnpAg7LaU7LacXG4gIGNvbnN0IGRvdWJsZURhc2hJbmRleCA9IHByb2Nlc3MuYXJndi5pbmRleE9mKFwiLS1cIik7XG4gIGNvbnN0IHBhc3N0aHJvdWdoQXJncyA9IGRvdWJsZURhc2hJbmRleCAhPT0gLTEgPyBwcm9jZXNzLmFyZ3Yuc2xpY2UoZG91YmxlRGFzaEluZGV4ICsgMSkgOiBbXTtcblxuICBjb25zdCB2aXRlQXJncyA9IFtcImV4ZWNcIiwgXCJ2aXRlXCIsIC4uLnBhc3N0aHJvdWdoQXJnc107XG5cbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCJTdGFydGluZyBWaXRlIGRldiBzZXJ2ZXIuLi5cXG5cIikpO1xuXG4gIGNvbnN0IHZpdGVQcm9jZXNzID0gc3Bhd24oXCJwbnBtXCIsIHZpdGVBcmdzLCB7XG4gICAgY3dkOiB3ZWJQYXRoLFxuICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgfSk7XG5cbiAgdml0ZVByb2Nlc3Mub24oXCJleGl0XCIsIChjb2RlKSA9PiB7XG4gICAgcHJvY2Vzcy5leGl0KGNvZGUgPz8gMCk7XG4gIH0pO1xuXG4gIC8vIFNJR0lOVC9TSUdURVJNIOyLnCBWaXRlIO2UhOuhnOyEuOyKpOulvCBncmFjZWZ1bGx5IOyiheujjO2VqeuLiOuLpC5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgW1wiU0lHSU5UXCIsIFwiU0lHVEVSTVwiXSBhcyBjb25zdCkge1xuICAgIHByb2Nlc3Mub24oc2lnbmFsLCAoKSA9PiB7XG4gICAgICB2aXRlUHJvY2Vzcy5raWxsKHNpZ25hbCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTV0Mg7ISk7KCVIO2MjOydvCDqsr3roZzrpbwg6rKw7KCV7ZWp64uI64ukLiBBUEkg67mM65OcKFNXQynsl5DshJzrp4wg7IKs7Jqp65Cp64uI64ukLlxuICog7ZSE66Gc7KCd7Yq4IOujqO2KuOyXkCAuc3djcmPqsIAg7J6I7Jy866m0IOq3uOqyg+ydhCwg7JeG7Jy866m0IHNvbmFtdSDquLDrs7gg7ISk7KCV7J2EIOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVN3Y0NvbmZpZ1BhdGgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgbGV0IHN3Y0ZpbGVQYXRoID0gXCIuc3djcmNcIjtcbiAgdHJ5IHtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKHN3Y0ZpbGVQYXRoKSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiVXNpbmcgLnN3Y3JjIGZyb20gcHJvamVjdCByb290Li4uXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiVXNpbmcgZGVmYXVsdCAuc3djcmMgZnJvbSBzb25hbXUgcGFja2FnZS4uLlwiKSk7XG4gICAgICBzd2NGaWxlUGF0aCA9IHBhdGguam9pbihpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCIuc3djcmMucHJvamVjdC1kZWZhdWx0XCIpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChcIlNldHRpbmcgdXAgc3djIGNvbmZpZyBmaWxlIGZhaWxlZC5cIiksIGVycm9yKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbiAgcmV0dXJuIHN3Y0ZpbGVQYXRoO1xufVxuXG4vKipcbiAqIHNvbmFtdSBidWlsZCAvIHNvbmFtdSBidWlsZCBhbGwg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBidWlsZF9hcGkgKyBidWlsZF93ZWLsnZgg7ZWp7ISx7J6F64uI64ukLiBXZWIg65SU66CJ7Yag66as6rCAIOyXhuycvOuptCBXZWIg67mM65Oc66W8IOyKpO2Cte2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRfYWxsKCkge1xuICBhd2FpdCBidWlsZF9hcGkoKTtcbiAgYXdhaXQgYnVpbGRfd2ViKHsgc2tpcElmTWlzc2luZzogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBwbnBtIGJ1aWxkIGFwaSDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIEFQSSDtlITroZzsoJ3tirjrp4wg67mM65Oc7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkX2FwaSgpIHtcbiAgY29uc3QgYXBwUm9vdCA9IGZpbmRBcHBSb290UGF0aCgpO1xuICBjb25zdCBzd2NGaWxlUGF0aCA9IGF3YWl0IHJlc29sdmVTd2NDb25maWdQYXRoKCk7XG5cbiAgY29uc3QgYXBpU3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIEFQSV9BUlRJRkFDVFMpIHtcbiAgICAgIGNvbnN0IGN3ZCA9IHBhdGguam9pbihhcHBSb290LCBhcnRpZmFjdC5wcm9qZWN0UGF0aCk7XG4gICAgICBwcmludFRhc2tIZWFkZXIoYXJ0aWZhY3QubmFtZSwgYXJ0aWZhY3QuZGVzY3JpcHRpb24sIGN3ZCk7XG5cbiAgICAgIGF3YWl0IHJ1bkJ1aWxkU3RlcHMoYXJ0aWZhY3QsIHsgY3dkLCBidWlsZENvbW1hbmRBcmdzOiB7IGNvbmZpZ0ZpbGVQYXRoOiBzd2NGaWxlUGF0aCB9IH0pO1xuICAgIH1cbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIkFQSVwiLCB0cnVlLCBEYXRlLm5vdygpIC0gYXBpU3RhcnRlZEF0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiQVBJXCIsIGZhbHNlLCBEYXRlLm5vdygpIC0gYXBpU3RhcnRlZEF0KTtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIHBucG0gYnVpbGQgd2ViIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICogV2ViIO2UhOuhnOygne2KuOunjCDruYzrk5ztlanri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRfd2ViKHsgc2tpcElmTWlzc2luZyA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCBhcHBSb290ID0gZmluZEFwcFJvb3RQYXRoKCk7XG4gIGNvbnN0IHdlYlBhdGggPSBwYXRoLmpvaW4oYXBwUm9vdCwgXCJ3ZWJcIik7XG5cbiAgaWYgKCEoYXdhaXQgZXhpc3RzKHdlYlBhdGgpKSkge1xuICAgIGlmIChza2lwSWZNaXNzaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KFwiV2ViIOuUlOugie2GoOumrOqwgCDsl4bsnLzrr4DroZwgV2ViIOu5jOuTnOulvCDqsbTrhIjrnIHri4jri6QuXCIpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvcihgd2ViIOuUlOugie2GoOumrOulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpDogJHt3ZWJQYXRofWApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGNvbnN0IHdlYlN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBXRUJfQVJUSUZBQ1RTKSB7XG4gICAgICBjb25zdCBjd2QgPSBwYXRoLmpvaW4oYXBwUm9vdCwgYXJ0aWZhY3QucHJvamVjdFBhdGgpO1xuICAgICAgcHJpbnRUYXNrSGVhZGVyKGFydGlmYWN0Lm5hbWUsIGFydGlmYWN0LmRlc2NyaXB0aW9uLCBjd2QpO1xuXG4gICAgICBhd2FpdCBydW5CdWlsZFN0ZXBzKGFydGlmYWN0LCB7IGN3ZCwgYnVpbGRDb21tYW5kQXJnczoge30gfSk7XG4gICAgfVxuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiV2ViXCIsIHRydWUsIERhdGUubm93KCkgLSB3ZWJTdGFydGVkQXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcHJpbnRCdWlsZFN1bW1hcnkoXCJXZWJcIiwgZmFsc2UsIERhdGUubm93KCkgLSB3ZWJTdGFydGVkQXQpO1xuICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbi8qKlxuICogcHJlLWJ1aWxkLCBidWlsZCwgcG9zdC1idWlsZCDri6jqs4Trpbwg7Iic7LCo7KCB7Jy866GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuQnVpbGRTdGVwczxUPihcbiAgYXJ0aWZhY3Q6IEJ1aWxkQXJ0aWZhY3Q8VD4sXG4gIG9wdGlvbnM6IHsgY3dkOiBzdHJpbmc7IGJ1aWxkQ29tbWFuZEFyZ3M6IFQgfSxcbikge1xuICBjb25zdCBzdGVwcyA9IFtcbiAgICB7IG5hbWU6IFwicHJlLWJ1aWxkXCIsIGNtZDogYXJ0aWZhY3QucHJlQnVpbGRDb21tYW5kPy4oKSB9LFxuICAgIHsgbmFtZTogXCJidWlsZFwiLCBjbWQ6IGFydGlmYWN0LmJ1aWxkQ29tbWFuZChvcHRpb25zLmJ1aWxkQ29tbWFuZEFyZ3MpIH0sXG4gICAgeyBuYW1lOiBcInBvc3QtYnVpbGRcIiwgY21kOiBhcnRpZmFjdC5wb3N0QnVpbGRDb21tYW5kPy4oKSB9LFxuICBdLmZpbHRlcigoc3RlcCkgPT4gc3RlcC5jbWQpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RlcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzdGVwID0gc3RlcHNbaV07XG4gICAgY29uc3QgaXNMYXN0ID0gaSA9PT0gc3RlcHMubGVuZ3RoIC0gMTtcblxuICAgIHRyeSB7XG4gICAgICBhc3NlcnQoc3RlcC5jbWQpO1xuICAgICAgcHJpbnRUYXNrU3RhcnQoc3RlcC5uYW1lLCBzdGVwLmNtZCwgaXNMYXN0KTtcbiAgICAgIGF3YWl0IGV4ZWNXaXRoTGluZVByZWZpeChzdGVwLmNtZCwgeyBjd2Q6IG9wdGlvbnMuY3dkIH0pO1xuICAgICAgcHJpbnRUYXNrU3VjY2VzcyhzdGVwLm5hbWUsIGlzTGFzdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcHJpbnRUYXNrRmFpbGVkKHN0ZXAubmFtZSwgaXNMYXN0KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtzdGVwLm5hbWV9IGZhaWxlZGAsIHsgY2F1c2U6IGUgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogcG5wbSBzdGFydCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOu5jOuTnOuQnCDtlITroZzsoJ3tirjrpbwg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIOu5jOuTnOuQnCDqsrDqs7zrrLwoZGlzdCDrlJTroInthqDrpqzsnZggaW5kZXguanMg7JeU7Yq466as7Y+s7J247Yq4KeydtCDsl4bri6TrqbQg7Iuk7ZaJ7J2EIOykkeuLqO2VqeuLiOuLpC5cbiAqIOyGjOyKpOuntSDsp4Dsm5Dqs7wgZG90ZW52IOyngOybkOydhCDtj6ztlajtlZjsl6wg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcImRpc3QvaW5kZXguanNcIjtcblxuICBpZiAoIShhd2FpdCBleGlzdHMoZW50cnlQb2ludCkpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAke2VudHJ5UG9pbnR9IG5vdCBmb3VuZC4gUGxlYXNlIGJ1aWxkIHlvdXIgcHJvamVjdCBmaXJzdC5gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlJ1bjogcG5wbSBzb25hbXUgYnVpbGRcIikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcImNoaWxkX3Byb2Nlc3NcIik7XG4gIGNvbnN0IHNlcnZlclByb2Nlc3MgPSBzcGF3bihcbiAgICBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgIFtcIi0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsIFwiLXJcIiwgXCJkb3RlbnYvY29uZmlnXCIsIGVudHJ5UG9pbnRdLFxuICAgIHtcbiAgICAgIGN3ZDogYXBpUm9vdCxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICB9LFxuICApO1xuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgKCkgPT4ge1xuICAgIHNlcnZlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBNaWdyYXRvcigpIHtcbiAgLy8gbWlncmF0b3JcbiAgbWlncmF0b3IgPSBuZXcgTWlncmF0b3IoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBGaXh0dXJlTWFuYWdlcigpIHtcbiAgRml4dHVyZU1hbmFnZXIuaW5pdCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX2FwcGx5KHRhcmdldHM6IChrZXlvZiBTb25hbXVEQkNvbmZpZylbXSkge1xuICBhd2FpdCBzZXR1cE1pZ3JhdG9yKCk7XG4gIGF3YWl0IG1pZ3JhdG9yLnJ1bkFjdGlvbihcImFwcGx5XCIsIHRhcmdldHMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3J1bigpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuICBjb25zdCBsb2NhbEhvc3RzID0gW1wibG9jYWxob3N0XCIsIFwiMTI3LjAuMC4xXCIsIFwiMC4wLjAuMFwiLCBcIjo6MVwiXTtcbiAgY29uc3QgdGFyZ2V0cyA9IE9iamVjdC5rZXlzKFNvbmFtdS5kYkNvbmZpZykuZmlsdGVyKCh0YXJnZXQpID0+IHtcbiAgICBjb25zdCB0YXJnZXRDb25maWcgPSBTb25hbXUuZGJDb25maWdbdGFyZ2V0IGFzIGtleW9mIFNvbmFtdURCQ29uZmlnXTtcbiAgICBjb25zdCBob3N0ID0gKHRhcmdldENvbmZpZz8uY29ubmVjdGlvbiBhcyB7IGhvc3Q/OiBzdHJpbmcgfSk/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIjtcbiAgICByZXR1cm4gbG9jYWxIb3N0cy5pbmNsdWRlcyhob3N0LnRvTG93ZXJDYXNlKCkpO1xuICB9KTtcblxuICAvLyDroZzsu6wg642w7J207YSw67Kg7J207Iqk7JeQIOuMgO2VtOyEnOunjCDsoITssrQg66eI7J206re466CI7J207IWY7JeQ7IScIOuPmeyekVxuICBhd2FpdCBtaWdyYXRvci5ydW5BY3Rpb24oXCJhcHBseVwiLCB0YXJnZXRzIGFzIChrZXlvZiBTb25hbXVEQkNvbmZpZylbXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1pZ3JhdGVfc3RhdHVzKCkge1xuICBhd2FpdCBzZXR1cE1pZ3JhdG9yKCk7XG5cbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgbWlncmF0b3IuZ2V0U3RhdHVzKCk7XG4gIC8vIHN0YXR1cztcbiAgY29uc29sZS5sb2coc3RhdHVzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9pbml0KCkge1xuICBjb25zdCBzcmNDb25maWcgPSBTb25hbXUuZGJDb25maWcuZGV2ZWxvcG1lbnRfbWFzdGVyO1xuICBjb25zdCB0YXJnZXRzID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiBcIihSRU1PVEUpIEZpeHR1cmUgREJcIixcbiAgICAgIGNvbmZpZzogU29uYW11LmRiQ29uZmlnLmZpeHR1cmUsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogXCIoTE9DQUwpIFRlc3RpbmcgREJcIixcbiAgICAgIGNvbmZpZzogU29uYW11LmRiQ29uZmlnLnRlc3QsXG4gICAgICB0b1NraXA6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbW90ZUNvbm4gPSBTb25hbXUuZGJDb25maWcuZml4dHVyZS5jb25uZWN0aW9uIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZztcbiAgICAgICAgY29uc3QgbG9jYWxDb25uID0gU29uYW11LmRiQ29uZmlnLnRlc3QuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gICAgICAgIHJldHVybiByZW1vdGVDb25uLmhvc3QgPT09IGxvY2FsQ29ubi5ob3N0ICYmIHJlbW90ZUNvbm4uZGF0YWJhc2UgPT09IGxvY2FsQ29ubi5kYXRhYmFzZTtcbiAgICAgIH0pKCksXG4gICAgfSxcbiAgXSBhcyB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBjb25maWc6IEtuZXguQ29uZmlnO1xuICAgIHRvU2tpcD86IGJvb2xlYW47XG4gIH1bXTtcblxuICAvLyAxLiDquLDspIBEQiDsiqTtgqTrp4jrpbwg642k7ZSEXG4gIGNvbnNvbGUubG9nKFwiRFVNUC4uLlwiKTtcbiAgY29uc3QgZHVtcEZpbGVuYW1lID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC0ke0RhdGUubm93KCl9LnNxbGA7XG4gIGNvbnN0IHNyY0Nvbm4gPSBzcmNDb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gIGNvbnN0IG1pZ3JhdGlvbnNEdW1wID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC1taWdyYXRpb25zLSR7RGF0ZS5ub3coKX0uc3FsYDtcbiAgZXhlY1N5bmMoXG4gICAgYG15c3FsZHVtcCAtaCR7c3JjQ29ubi5ob3N0fSAtdSR7c3JjQ29ubi51c2VyfSAtcCR7c3JjQ29ubi5wYXNzd29yZH0gLS1zaW5nbGUtdHJhbnNhY3Rpb24gLWQgLS1uby1jcmVhdGUtZGIgLS10cmlnZ2VycyAke3NyY0Nvbm4uZGF0YWJhc2V9ID4gJHtkdW1wRmlsZW5hbWV9YCxcbiAgKTtcbiAgY29uc3QgX2RiID0ga25leChzcmNDb25maWcpO1xuICBjb25zdCBbW21pZ3JhdGlvbnNdXSA9IGF3YWl0IF9kYi5yYXcoXG4gICAgXCJTRUxFQ1QgQ09VTlQoKikgYXMgY291bnQgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIFdIRVJFIHRhYmxlX3NjaGVtYSA9ID8gQU5EIHRhYmxlX25hbWUgPSAna25leF9taWdyYXRpb25zJ1wiLFxuICAgIFtzcmNDb25uLmRhdGFiYXNlXSxcbiAgKTtcbiAgaWYgKG1pZ3JhdGlvbnMuY291bnQgPiAwKSB7XG4gICAgZXhlY1N5bmMoXG4gICAgICBgbXlzcWxkdW1wIC1oJHtzcmNDb25uLmhvc3R9IC11JHtzcmNDb25uLnVzZXJ9IC1wJHtzcmNDb25uLnBhc3N3b3JkfSAtLXNpbmdsZS10cmFuc2FjdGlvbiAtLW5vLWNyZWF0ZS1kYiAtLXRyaWdnZXJzICR7c3JjQ29ubi5kYXRhYmFzZX0ga25leF9taWdyYXRpb25zIGtuZXhfbWlncmF0aW9uc19sb2NrID4gJHttaWdyYXRpb25zRHVtcH1gLFxuICAgICk7XG4gIH1cblxuICAvLyAyLiDrjIDsg4FEQiDqsIHqsIHsl5Ag64yA7ZWY7JesIOyhtOyerOyXrOu2gCDtmZXsnbgg7ZuEIOu2k+q4sFxuICBmb3IgYXdhaXQgKGNvbnN0IHsgbGFiZWwsIGNvbmZpZywgdG9Ta2lwIH0gb2YgdGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbm4gPSBjb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG5cbiAgICBpZiAodG9Ta2lwID09PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoYCR7bGFiZWx9OiBTa2lwcGVkIWApKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGRiID0ga25leCh7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgIC4uLigoY29uZmlnLmNvbm5lY3Rpb24gPz8ge30pIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZyksXG4gICAgICAgIGRhdGFiYXNlOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IFtbcm93XV0gPSBhd2FpdCBkYi5yYXcoYFNIT1cgREFUQUJBU0VTIExJS0UgXCIke2Nvbm4uZGF0YWJhc2V9XCJgKTtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCR7bGFiZWx9OiBEYXRhYmFzZSBcIiR7Y29ubi5kYXRhYmFzZX1cIiBBbHJlYWR5IGV4aXN0c2ApKTtcbiAgICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBTWU5DIHRvICR7bGFiZWx9Li4uYCk7XG4gICAgY29uc3QgbXlzcWxDbWQgPSBgbXlzcWwgLWgke2Nvbm4uaG9zdH0gLXUke2Nvbm4udXNlcn0gLXAke2Nvbm4ucGFzc3dvcmR9YDtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gLWUgJ0RST1AgREFUQUJBU0UgSUYgRVhJU1RTIFxcYCR7Y29ubi5kYXRhYmFzZX1cXGAnYCk7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9IC1lICdDUkVBVEUgREFUQUJBU0UgXFxgJHtjb25uLmRhdGFiYXNlfVxcYCdgKTtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7ZHVtcEZpbGVuYW1lfWApO1xuICAgIGlmIChhd2FpdCBleGlzdHMobWlncmF0aW9uc0R1bXApKSB7XG4gICAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7bWlncmF0aW9uc0R1bXB9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICB9XG5cbiAgYXdhaXQgX2RiLmRlc3Ryb3koKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9pbXBvcnQoZW50aXR5SWQ6IHN0cmluZywgcmVjb3JkSWRzOiBudW1iZXJbXSkge1xuICBhd2FpdCBzZXR1cEZpeHR1cmVNYW5hZ2VyKCk7XG5cbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuaW1wb3J0Rml4dHVyZShlbnRpdHlJZCwgcmVjb3JkSWRzKTtcbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuc3luYygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX3N5bmMoKSB7XG4gIGF3YWl0IHNldHVwRml4dHVyZU1hbmFnZXIoKTtcblxuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5zeW5jKCk7XG59XG5cbi8qKlxuICogZml4dHVyZSBnZW4g66qF66C57Ja0XG4gKiDsmLXshZjsnYQgcHJvY2Vzcy5hcmd27JeQ7IScIO2MjOyLsVxuICovXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX2dlbigpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhwcm9jZXNzLmFyZ3YpO1xuICBhd2FpdCBmaXh0dXJlR2VuQ29tbWFuZChvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBmaXh0dXJlIGZldGNoIOuqheugueyWtFxuICog7Ji17IWY7J2EIHByb2Nlc3MuYXJnduyXkOyEnCDtjIzsi7FcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9mZXRjaCgpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhwcm9jZXNzLmFyZ3YpO1xuICBhd2FpdCBmaXh0dXJlRmV0Y2hDb21tYW5kKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIGZpeHR1cmUgZXhwbG9yZSDrqoXroLnslrRcbiAqIOyYteyFmOydhCBwcm9jZXNzLmFyZ3bsl5DshJwg7YyM7IuxXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfZXhwbG9yZSgpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlT3B0aW9ucyhwcm9jZXNzLmFyZ3YpO1xuICBhd2FpdCBmaXh0dXJlRXhwbG9yZUNvbW1hbmQob3B0aW9ucyk7XG59XG5cbi8qKlxuICog6rCE64uo7ZWcIOyYteyFmCDtjIzshJxcbiAqL1xuZnVuY3Rpb24gcGFyc2VPcHRpb25zKFxuICBhcmd2OiBzdHJpbmdbXSxcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCBzdHJpbmdbXT4gJiB7IF86IHN0cmluZ1tdIH0ge1xuICBjb25zdCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuIHwgc3RyaW5nW10+ICYgeyBfOiBzdHJpbmdbXSB9ID0geyBfOiBbXSB9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3ZbaV07XG5cbiAgICBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuICAgICAgY29uc3Qga2V5ID0gYXJnLnNsaWNlKDIpO1xuXG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKFwiPVwiKSkge1xuICAgICAgICBjb25zdCBbaywgdl0gPSBrZXkuc3BsaXQoXCI9XCIpO1xuICAgICAgICBvcHRpb25zW2tdID0gdjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBhcmd2W2kgKyAxXTtcbiAgICAgICAgaWYgKG5leHQgJiYgIW5leHQuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICAgICAgb3B0aW9uc1trZXldID0gbmV4dDtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9uc1trZXldID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICBjb25zdCBrZXkgPSBhcmcuc2xpY2UoMSk7XG4gICAgICBjb25zdCBuZXh0ID0gYXJndltpICsgMV07XG5cbiAgICAgIGlmIChuZXh0ICYmICFuZXh0LnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgIG9wdGlvbnNba2V5XSA9IG5leHQ7XG4gICAgICAgIGkrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnNba2V5XSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuXy5wdXNoKGFyZyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0dWJfcHJhY3RpY2UobmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHByYWN0aWNlRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJwcmFjdGljZXNcIik7XG4gIGNvbnN0IGZpbGVOYW1lcyA9IGF3YWl0IHJlYWRkaXIocHJhY3RpY2VEaXIpO1xuXG4gIGNvbnN0IG1heFNlcU5vID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIShhd2FpdCBleGlzdHMocHJhY3RpY2VEaXIpKSkge1xuICAgICAgYXdhaXQgbWtkaXIocHJhY3RpY2VEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkU2VxcyA9IGZpbGVOYW1lc1xuICAgICAgLmZpbHRlcigoZmlsZU5hbWUpID0+IGZpbGVOYW1lLnN0YXJ0c1dpdGgoXCJwXCIpICYmIGZpbGVOYW1lLmVuZHNXaXRoKFwiLnRzXCIpKVxuICAgICAgLm1hcCgoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgWywgc2VxTm9dID0gZmlsZU5hbWUubWF0Y2goL15wKFswLTldKyktLykgPz8gW1wiMFwiLCBcIjBcIl07XG4gICAgICAgIHJldHVybiBwYXJzZUludChzZXFObyk7XG4gICAgICB9KVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIgLSBhKTtcblxuICAgIGlmIChmaWx0ZXJlZFNlcXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGZpbHRlcmVkU2Vxc1swXTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSkoKTtcblxuICBjb25zdCBjdXJyZW50U2VxTm8gPSBtYXhTZXFObyArIDE7XG4gIGNvbnN0IGZpbGVOYW1lID0gYHAke2N1cnJlbnRTZXFOb30tJHtuYW1lfS50c2A7XG4gIGNvbnN0IGRzdFBhdGggPSBwYXRoLmpvaW4ocHJhY3RpY2VEaXIsIGZpbGVOYW1lKTtcblxuICBjb25zdCBjb2RlID0gW1xuICAgIGBpbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICBcIlwiLFxuICAgIGBjb25zb2xlLmNsZWFyKCk7YCxcbiAgICBgY29uc29sZS5sb2coXCIke2ZpbGVOYW1lfVwiKTtgLFxuICAgIFwiXCIsXG4gICAgYFNvbmFtdS5ydW5TY3JpcHQoYXN5bmMgKCkgPT4ge2AsXG4gICAgYCAvLyBUT0RPYCxcbiAgICBgfSk7YCxcbiAgICBcIlwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG4gIGF3YWl0IHdyaXRlRmlsZShkc3RQYXRoLCBjb2RlKTtcblxuICBleGVjU3luYyhgY29kZSAke2RzdFBhdGh9YCk7XG5cbiAgY29uc3QgcnVuQ29kZSA9IGB5YXJuIG5vZGUgLXIgZG90ZW52L2NvbmZpZyAtLWVuYWJsZS1zb3VyY2UtbWFwcyBkaXN0L3ByYWN0aWNlcy8ke2ZpbGVOYW1lLnJlcGxhY2UoXG4gICAgXCIudHNcIixcbiAgICBcIi5qc1wiLFxuICApfWA7XG4gIGNvbnNvbGUubG9nKGAke2NoYWxrLmJsdWUocnVuQ29kZSl9IGNvcGllZCB0byBjbGlwYm9hcmQuYCk7XG4gIGV4ZWNTeW5jKGBlY2hvIFwiJHtydW5Db2RlfVwiIHwgcGJjb3B5YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0dWJfZW50aXR5KGVudGl0eUlkOiBzdHJpbmcpIHtcbiAgYXdhaXQgU29uYW11LnN5bmNlci5jcmVhdGVFbnRpdHkoeyBlbnRpdHlJZCwgdGl0bGU6IGVudGl0eUlkIH0pO1xuXG4gIGNvbnN0IHsgZmxhZ3MgfSA9IHBhcnNlQ2xpT3B0aW9ucygpO1xuICBjb25zdCB1c2VBSSA9IGZsYWdzLmhhcyhcImFpXCIpO1xuICBjb25zdCBub0NvbmVzID0gZmxhZ3MuaGFzKFwibm8tY29uZXNcIik7XG5cbiAgLy8gLS1uby1jb25lczogY29uZSDsg53shLEg7Iqk7YK1XG4gIGlmIChub0NvbmVzKSB7XG4gICAgY29uc29sZS5sb2coYOKckyBFbnRpdHkgJyR7ZW50aXR5SWR9JyBjcmVhdGVkIHdpdGhvdXQgY29uZXNgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7IEVudGl0eU1hbmFnZXIgfSA9IGF3YWl0IGltcG9ydChcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiKTtcbiAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICBpZiAoIWVudGl0eSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVudGl0eSBub3QgZm91bmQ6ICR7ZW50aXR5SWR9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gLS1haTogTExN7Jy866GcIGNvbmUg7IOd7ISxXG4gIGlmICh1c2VBSSkge1xuICAgIGNvbnNvbGUubG9nKGDinJMgRW50aXR5ICcke2VudGl0eUlkfScgY3JlYXRlZGApO1xuICAgIGNvbnNvbGUubG9nKGDwn4yfIEdlbmVyYXRpbmcgQUktcG93ZXJlZCBjb25lcy4uLmApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdMb2NhbGUgPSBTb25hbXUuY29uZmlnLmkxOG4/LmRlZmF1bHRMb2NhbGU7XG4gICAgICBjb25zdCBsb2NhbGUgPVxuICAgICAgICBjb25maWdMb2NhbGUgPT09IFwia29cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiZW5cIiB8fCBjb25maWdMb2NhbGUgPT09IFwiamFcIlxuICAgICAgICAgID8gY29uZmlnTG9jYWxlXG4gICAgICAgICAgOiBcImtvXCI7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVudGl0eS5nZW5lcmF0ZUNvbmVzKHtcbiAgICAgICAgcHJlc2VydmVFeGlzdGluZzogZmFsc2UsXG4gICAgICAgIG9ubHlFbXB0eTogZmFsc2UsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhg4pyFIERvbmUgKCR7cmVzdWx0LnRva2Vuc1VzZWR9IHRva2VucylgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcyhcIkFOVEhST1BJQ19BUElfS0VZXCIpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbuKdjCAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbvCfkqEgUmVtb3ZlIC0tYWkgZmxhZyB0byB1c2UgdGVtcGxhdGUgY29uZXMgaW5zdGVhZGApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIOq4sOuzuDog7YWc7ZSM66a/IGNvbmUg7J6Q64+ZIOyDneyEsVxuICAvLyBMTE0g7JeG7J20IGZha2VyLW1hcHBpbmdzLnRz66W8IO2ZnOyaqe2VmOyXrCDquLDrs7ggY29uZSDrqZTtg4DrjbDsnbTthLDrpbwg7IOd7ISx7ZWp64uI64ukLlxuICAvLyDsnbTrpbwg7Ya17ZW0IEFOVEhST1BJQ19BUElfS0VZ6rCAIOyXhuyWtOuPhCBTb25hbXXrpbwg7IKs7Jqp7ZWgIOyImCDsnojsnLzrqbAsXG4gIC8vIOyDneyEseuQnCDthZztlIzrpr8gY29uZeydgCDrgpjspJHsl5AgJ2NvbmUgZ2VuJyDrqoXroLnslrTroZwgQUnrpbwg7Ya17ZW0IOyXheq3uOugiOydtOuTnO2VoCDsiJgg7J6I7Iq164uI64ukLlxuICBjb25zb2xlLmxvZyhg8J+MnyBHZW5lcmF0aW5nIHRlbXBsYXRlIGNvbmVzLi4uYCk7XG4gIGF3YWl0IGVudGl0eS5nZW5lcmF0ZVRlbXBsYXRlQ29uZXMoKTtcbiAgY29uc29sZS5sb2coYOKckyBFbnRpdHkgJyR7ZW50aXR5SWR9JyBjcmVhdGVkIHdpdGggdGVtcGxhdGUgY29uZXNgKTtcbiAgY29uc29sZS5sb2coYPCfkqEgVGlwOiBSdW4gJ3BucG0gc29uYW11IGNvbmUgZ2VuICR7ZW50aXR5SWR9JyB0byBpbXByb3ZlIHdpdGggQUlgKTtcbn1cblxuLyoqXG4gKiBBSeulvCDsgqzsmqntlZjsl6wgZW50aXR57J2YIGNvbmUg66mU7YOA642w7J207YSw66W8IOyDneyEse2VmOqxsOuCmCDsl4Xqt7jroIjsnbTrk5ztlanri4jri6QuXG4gKlxuICog7Ji17IWYOlxuICogLSAtLXJlZ2VuZXJhdGU6IOyghOyytCDsnqzsg53shLEgKOq4sOyhtCBjb25lIOuNruyWtOyTsOq4sClcbiAqIC0gLS1sb2NhbGUgPGtvfGVufGphPjog7IOd7ISxIOyWuOyWtCDsp4DsoJVcbiAqIC0g6riw67O4OiBvbmx5RW1wdHkg66qo65OcICjquLDsobQgZml4dHVyZUhpbnQg67O07KG0KVxuICpcbiAqIEFOVEhST1BJQ19BUElfS0VZIO2VhOyalCAoc29uYW11LnNlY3JldC50cyDrmJDripQg7ZmY6rK967OA7IiYKVxuICovXG5hc3luYyBmdW5jdGlvbiBjb25lX2dlbihlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGNvbnN0IHsgRW50aXR5TWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCIpO1xuICBjb25zdCB7IGZsYWdzLCBvcHRpb25zIH0gPSBwYXJzZUNsaU9wdGlvbnMoKTtcblxuICAvLyAtLWFsbCDsmLXshZg6IOuqqOuToCBlbnRpdHkgY29uZSDsg53shLFcbiAgaWYgKGZsYWdzLmhhcyhcImFsbFwiKSB8fCBlbnRpdHlJZCA9PT0gXCJhbGxcIikge1xuICAgIGNvbnN0IGFsbEVudGl0aWVzID0gRW50aXR5TWFuYWdlci5nZXRBbGxFbnRpdGllcygpO1xuICAgIGNvbnNvbGUubG9nKGDwn4yfIEdlbmVyYXRpbmcgQUktcG93ZXJlZCBjb25lcyBmb3IgJHthbGxFbnRpdGllcy5sZW5ndGh9IGVudGl0aWVzLi4uXFxuYCk7XG5cbiAgICBsZXQgdG90YWxUb2tlbnMgPSAwO1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGFsbEVudGl0aWVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUHJvY2Vzc2luZyAke2VudGl0eS5pZH0uLi5gKTtcbiAgICAgICAgY29uc3QgY29uZmlnTG9jYWxlID0gb3B0aW9ucy5sb2NhbGUgfHwgU29uYW11LmNvbmZpZy5pMThuPy5kZWZhdWx0TG9jYWxlO1xuICAgICAgICBjb25zdCBsb2NhbGUgPVxuICAgICAgICAgIGNvbmZpZ0xvY2FsZSA9PT0gXCJrb1wiIHx8IGNvbmZpZ0xvY2FsZSA9PT0gXCJlblwiIHx8IGNvbmZpZ0xvY2FsZSA9PT0gXCJqYVwiXG4gICAgICAgICAgICA/IGNvbmZpZ0xvY2FsZVxuICAgICAgICAgICAgOiBcImtvXCI7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW50aXR5LmdlbmVyYXRlQ29uZXMoe1xuICAgICAgICAgIHByZXNlcnZlRXhpc3Rpbmc6ICFmbGFncy5oYXMoXCJyZWdlbmVyYXRlXCIpLFxuICAgICAgICAgIG9ubHlFbXB0eTogIWZsYWdzLmhhcyhcInJlZ2VuZXJhdGVcIiksXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0b3RhbFRva2VucyArPSByZXN1bHQudG9rZW5zVXNlZDtcbiAgICAgICAgY29uc29sZS5sb2coYCAg4pyTICR7ZW50aXR5LmlkfSAoJHtyZXN1bHQudG9rZW5zVXNlZH0gdG9rZW5zKVxcbmApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgICAgIGVycm9ycy5wdXNoKGAke2VudGl0eS5pZH06ICR7bWVzc2FnZX1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgICDinJcgJHtlbnRpdHkuaWR9OiAke21lc3NhZ2V9XFxuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coYFxcbuKchSBEb25lISBUb3RhbDogJHt0b3RhbFRva2Vuc30gdG9rZW5zIHVzZWRgKTtcbiAgICBjb25zdCBlc3RpbWF0ZWRDb3N0ID0gKHRvdGFsVG9rZW5zICogOSkgLyAxXzAwMF8wMDA7XG4gICAgY29uc29sZS5sb2coYPCfkrAgRXN0aW1hdGVkIGNvc3Q6IH4kJHtlc3RpbWF0ZWRDb3N0LnRvRml4ZWQoNCl9YCk7XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbuKdjCBGYWlsZWQgZW50aXRpZXMgKCR7ZXJyb3JzLmxlbmd0aH0pOmApO1xuICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJyb3JzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCAgLSAke2Vycn1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8g64uo7J28IGVudGl0eSBjb25lIOyDneyEsVxuICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gIGlmICghZW50aXR5KSB7XG4gICAgY29uc29sZS5lcnJvcihgRW50aXR5IG5vdCBmb3VuZDogJHtlbnRpdHlJZH1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtb2RlID0gZmxhZ3MuaGFzKFwicmVnZW5lcmF0ZVwiKSA/IFwicmVnZW5lcmF0aW5nXCIgOiBcImdlbmVyYXRpbmdcIjtcbiAgY29uc29sZS5sb2coXG4gICAgYPCfjJ8gJHttb2RlID09PSBcInJlZ2VuZXJhdGluZ1wiID8gXCJSZWdlbmVyYXRpbmdcIiA6IFwiR2VuZXJhdGluZ1wifSBBSS1wb3dlcmVkIGNvbmVzIGZvciAke2VudGl0eUlkfS4uLmAsXG4gICk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWdMb2NhbGUgPSBvcHRpb25zLmxvY2FsZSB8fCBTb25hbXUuY29uZmlnLmkxOG4/LmRlZmF1bHRMb2NhbGU7XG4gICAgY29uc3QgbG9jYWxlID1cbiAgICAgIGNvbmZpZ0xvY2FsZSA9PT0gXCJrb1wiIHx8IGNvbmZpZ0xvY2FsZSA9PT0gXCJlblwiIHx8IGNvbmZpZ0xvY2FsZSA9PT0gXCJqYVwiID8gY29uZmlnTG9jYWxlIDogXCJrb1wiO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW50aXR5LmdlbmVyYXRlQ29uZXMoe1xuICAgICAgcHJlc2VydmVFeGlzdGluZzogIWZsYWdzLmhhcyhcInJlZ2VuZXJhdGVcIiksXG4gICAgICBvbmx5RW1wdHk6ICFmbGFncy5oYXMoXCJyZWdlbmVyYXRlXCIpLFxuICAgICAgbG9jYWxlLFxuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coYOKchSBEb25lISAoJHtyZXN1bHQudG9rZW5zVXNlZH0gdG9rZW5zIHVzZWQpYCk7XG5cbiAgICAvLyDthqDtgbAg67mE7JqpIOqzhOyCsCAo64yA65617KCB7J24IOy2lOyglSlcbiAgICAvLyBDbGF1ZGUgU29ubmV0IDQuNTogaW5wdXQgJDMvTSB0b2tlbnMsIG91dHB1dCAkMTUvTSB0b2tlbnNcbiAgICAvLyDqsITri6jtlZjqsowg7Y+J6regICQ5L00gdG9rZW5z66GcIOqzhOyCsFxuICAgIGNvbnN0IGVzdGltYXRlZENvc3QgPSAocmVzdWx0LnRva2Vuc1VzZWQgKiA5KSAvIDFfMDAwXzAwMDtcbiAgICBjb25zb2xlLmxvZyhg8J+SsCBFc3RpbWF0ZWQgY29zdDogfiQke2VzdGltYXRlZENvc3QudG9GaXhlZCg0KX1gKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgaWYgKGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJBTlRIUk9QSUNfQVBJX0tFWVwiKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7inYwgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7wn5KhIFRvIHVzZSBBSS1wb3dlcmVkIGNvbmUgZ2VuZXJhdGlvbjpgKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgICAgMS4gR2V0IGFuIEFQSSBrZXkgZnJvbSBodHRwczovL2NvbnNvbGUuYW50aHJvcGljLmNvbS9gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgICAgMi4gQWRkIGl0IHRvIHNvbmFtdS5zZWNyZXQudHMgb3Igc2V0IEFOVEhST1BJQ19BUElfS0VZIGVudmlyb25tZW50IHZhcmlhYmxlYCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcyhcIlJhdGUgbGltaXRcIikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu4p2MICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu8J+SoSBQbGVhc2Ugd2FpdCBhIG1vbWVudCBhbmQgdHJ5IGFnYWluLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu4p2MIEZhaWxlZCB0byBnZW5lcmF0ZSBjb25lczogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBcXG7inYwgRmFpbGVkIHRvIGdlbmVyYXRlIGNvbmVzOiBVbmtub3duIGVycm9yYCk7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkX21vZGVsKGVudGl0eUlkOiBzdHJpbmcpIHtcbiAgYXdhaXQgU29uYW11LnN5bmNlci5nZW5lcmF0ZVRlbXBsYXRlKFwibW9kZWxcIiwge1xuICAgIGVudGl0eUlkLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRfbW9kZWxfdGVzdChlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuZ2VuZXJhdGVUZW1wbGF0ZShcIm1vZGVsX3Rlc3RcIiwge1xuICAgIGVudGl0eUlkLFxuICB9KTtcbn1cblxuLyoqXG4gKiBwbnBtIHNvbmFtdSBza2lsbHMgc3luYyDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOqzteyLnSBTa2lsbHPrpbwg66Gc7LusIO2UhOuhnOygne2KuCDrmJDripQg6riA66Gc67KMIH4vLmNsYXVkZS/roZwg64+Z6riw7ZmU7ZWp64uI64ukLlxuICpcbiAqIC0tZ2xvYmFsIO2UjOuemOq3uDogfi8uY2xhdWRlL+yXkCDrj5nquLDtmZQgKO2UhOuhnOygne2KuCDsg53shLEg7KCEIOyCrOyaqSDqsIDriqUpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNraWxsc19zeW5jKCkge1xuICBjb25zdCB7IGZsYWdzIH0gPSBwYXJzZUNsaU9wdGlvbnMoKTtcbiAgY29uc3QgaXNHbG9iYWwgPSBmbGFncy5oYXMoXCJnbG9iYWxcIik7XG5cbiAgLy8g6rCc67CcIO2ZmOqyvSAtIGNsaS50czogc29uYW11L21vZHVsZXMvc29uYW11L3NyYy9iaW4vY2xpLnRzXG4gIC8vIOu5jOuTnCDtm4QgLSBjbGkuanM6IG5vZGVfbW9kdWxlcy9zb25hbXUvZGlzdC9iaW4vY2xpLmpzICjsi6TsoJwg7Iuk7ZaJKVxuICAvLyBza2lsbHMg7JyE7LmYOiBub2RlX21vZHVsZXMvc29uYW11L3NyYy9za2lsbHMgKG5wbSDrsLDtj6wg7IucKVxuICBjb25zdCBzb3VyY2VCYXNlID0gcGF0aC5yZXNvbHZlKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcInNyY1wiLCBcInNraWxsc1wiKTtcbiAgY29uc3Qgc291cmNlU2tpbGxzRGlyID0gcGF0aC5qb2luKHNvdXJjZUJhc2UsIFwic29uYW11XCIpO1xuICBjb25zdCBzb3VyY2VDbGF1ZGVNZCA9IHBhdGguam9pbihzb3VyY2VCYXNlLCBcIkNMQVVERS5tZFwiKTtcblxuICBpZiAoIShhd2FpdCBleGlzdHMoc291cmNlU2tpbGxzRGlyKSkpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCJTa2lsbHMgc291cmNlIG5vdCBmb3VuZCBpbiBzb25hbXUgcGFja2FnZS5cIikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpc0dsb2JhbCkge1xuICAgIGF3YWl0IHNraWxsc19zeW5jX3RvKHBhdGguam9pbihvcy5ob21lZGlyKCksIFwiLmNsYXVkZVwiKSwgc291cmNlU2tpbGxzRGlyLCBzb3VyY2VDbGF1ZGVNZCwge1xuICAgICAgdXNlU3ltbGluazogZmFsc2UsXG4gICAgICBjb3B5UHJvamVjdFRlbXBsYXRlczogZmFsc2UsXG4gICAgICBpc0dsb2JhbDogdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG4gIEdsb2JhbCBzeW5jIGNvbXBsZXRlIOKGkiB+Ly5jbGF1ZGUvc2tpbGxzL3NvbmFtdS9gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZGltKGAgIFRoZXNlIHNraWxscyBhcmUgYXZhaWxhYmxlIGluIGFsbCBDbGF1ZGUgQ29kZSBzZXNzaW9ucy5gKSk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBjaGFsay5kaW0oXG4gICAgICAgIGAgIE9uY2UgYSBwcm9qZWN0IGlzIGNyZWF0ZWQsIHJ1biAncG5wbSBzb25hbXUgc2tpbGxzIHN5bmMnIGZvciBwcm9qZWN0LWxvY2FsIHN5bmMuYCxcbiAgICAgICksXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB3b3Jrc3BhY2VSb290ID0gYXdhaXQgZmluZFdvcmtzcGFjZVJvb3QoKTtcbiAgICBjb25zdCBjbGF1ZGVEaXIgPSBwYXRoLmpvaW4od29ya3NwYWNlUm9vdCwgXCIuY2xhdWRlXCIpO1xuICAgIGF3YWl0IHNraWxsc19zeW5jX3RvKGNsYXVkZURpciwgc291cmNlU2tpbGxzRGlyLCBzb3VyY2VDbGF1ZGVNZCwge1xuICAgICAgdXNlU3ltbGluazogdHJ1ZSxcbiAgICAgIGNvcHlQcm9qZWN0VGVtcGxhdGVzOiB0cnVlLFxuICAgICAgc291cmNlQmFzZSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIGNsYXVkZURpcuuhnCBza2lsbHPrpbwg64+Z6riw7ZmU7ZWY64qUIOqzte2GtSDroZzsp4HsnoXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNraWxsc19zeW5jX3RvKFxuICBjbGF1ZGVEaXI6IHN0cmluZyxcbiAgc291cmNlU2tpbGxzRGlyOiBzdHJpbmcsXG4gIHNvdXJjZUNsYXVkZU1kOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHtcbiAgICB1c2VTeW1saW5rOiBib29sZWFuO1xuICAgIGNvcHlQcm9qZWN0VGVtcGxhdGVzOiBib29sZWFuO1xuICAgIHNvdXJjZUJhc2U/OiBzdHJpbmc7XG4gICAgaXNHbG9iYWw/OiBib29sZWFuO1xuICB9LFxuKSB7XG4gIGNvbnN0IHRhcmdldFNraWxsc0RpciA9IHBhdGguam9pbihjbGF1ZGVEaXIsIFwic2tpbGxzXCIsIFwic29uYW11XCIpO1xuXG4gIC8vIOq4sOyhtCDrlJTroInthqDrpqwvc3ltbGluayDsgq3soJwg7ZuEIOyerOyDneyEsVxuICAvLyBleGlzdHMoKeuKlCBicm9rZW4gc3ltbGlua+ulvCDqsJDsp4DtlZjsp4Ag66q77ZWY66+A66GcIHJt7J2EIOustOyhsOqxtCDsi5zrj4Ttlanri4jri6RcbiAgdHJ5IHtcbiAgICBhd2FpdCBybSh0YXJnZXRTa2lsbHNEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCB7XG4gICAgLy8g7YyM7J287J20IOyXhuycvOuptCDrrLTsi5xcbiAgfVxuXG4gIGF3YWl0IG1rZGlyKHBhdGguZGlybmFtZSh0YXJnZXRTa2lsbHNEaXIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBpZiAob3B0aW9ucy51c2VTeW1saW5rKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN5bWxpbmsoc291cmNlU2tpbGxzRGlyLCB0YXJnZXRTa2lsbHNEaXIsIFwiZGlyXCIpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBTa2lsbHMgbGlua2VkIChzeW1saW5rKWApKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNoYWxrLnllbGxvdyhg4pqgIFN5bWxpbmsgZmFpbGVkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKSxcbiAgICAgICk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCAgRmFsbGluZyBiYWNrIHRvIGNvcHkuLi5gKSk7XG4gICAgICBhd2FpdCBza2lsbHNDb3B5KHNvdXJjZVNraWxsc0RpciwgdGFyZ2V0U2tpbGxzRGlyKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgc2tpbGxzQ29weShzb3VyY2VTa2lsbHNEaXIsIHRhcmdldFNraWxsc0Rpcik7XG4gIH1cblxuICAvLyBwcm9qZWN0IOuUlOugie2GoOumrCDstIjquLDtmZQgKOyXhuycvOuptCDsg53shLEsIOyeiOycvOuptCDsnKDsp4ApXG4gIGlmIChvcHRpb25zLmNvcHlQcm9qZWN0VGVtcGxhdGVzICYmIG9wdGlvbnMuc291cmNlQmFzZSkge1xuICAgIGNvbnN0IHNvdXJjZVByb2plY3REaXIgPSBwYXRoLmpvaW4ob3B0aW9ucy5zb3VyY2VCYXNlLCBcInByb2plY3RcIik7XG4gICAgY29uc3QgdGFyZ2V0UHJvamVjdERpciA9IHBhdGguam9pbihjbGF1ZGVEaXIsIFwic2tpbGxzXCIsIFwicHJvamVjdFwiKTtcblxuICAgIGlmIChhd2FpdCBleGlzdHMoc291cmNlUHJvamVjdERpcikpIHtcbiAgICAgIGlmICghKGF3YWl0IGV4aXN0cyh0YXJnZXRQcm9qZWN0RGlyKSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBjcChzb3VyY2VQcm9qZWN0RGlyLCB0YXJnZXRQcm9qZWN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIFByb2plY3QgdGVtcGxhdGVzIGluaXRpYWxpemVkYCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBjaGFsay5yZWQoXG4gICAgICAgICAgICAgIGDinJcgRmFpbGVkIHRvIGluaXRpYWxpemUgcHJvamVjdCB0ZW1wbGF0ZXM6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWAsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShg4o+tIFByb2plY3QgdGVtcGxhdGVzIGFscmVhZHkgZXhpc3QgKHByZXNlcnZlZClgKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ0xBVURFLm1kIOuzteyCrC/sl4XrjbDsnbTtirhcbiAgaWYgKGF3YWl0IGV4aXN0cyhzb3VyY2VDbGF1ZGVNZCkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGFyZ2V0Q2xhdWRlTWQgPSBwYXRoLmpvaW4oY2xhdWRlRGlyLCBcIkNMQVVERS5tZFwiKTtcbiAgICAgIGNvbnN0IHJhd0NvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShzb3VyY2VDbGF1ZGVNZCwgXCJ1dGYtOFwiKTtcbiAgICAgIC8vIOq4gOuhnOuyjCDrqqjrk5zsl5DshJzripQg7IOB64yAIOqyveuhnOulvCDsoIjrjIAg6rK966Gc66GcIOuzgO2ZmO2VqeuLiOuLpFxuICAgICAgY29uc3Qgc291cmNlQ29udGVudCA9IG9wdGlvbnMuaXNHbG9iYWxcbiAgICAgICAgPyByYXdDb250ZW50LnJlcGxhY2VBbGwoXCIuY2xhdWRlL3NraWxscy9zb25hbXUvXCIsIFwifi8uY2xhdWRlL3NraWxscy9zb25hbXUvXCIpXG4gICAgICAgIDogcmF3Q29udGVudDtcblxuICAgICAgaWYgKGF3YWl0IGV4aXN0cyh0YXJnZXRDbGF1ZGVNZCkpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0Q29udGVudCA9IGF3YWl0IHJlYWRGaWxlKHRhcmdldENsYXVkZU1kLCBcInV0Zi04XCIpO1xuICAgICAgICBjb25zdCBzdGFydE1hcmtlciA9IFwiPCEtLSBTT05BTVU6U1RBUlQgLS0+XCI7XG4gICAgICAgIGNvbnN0IGVuZE1hcmtlciA9IFwiPCEtLSBTT05BTVU6RU5EIC0tPlwiO1xuICAgICAgICBpZiAodGFyZ2V0Q29udGVudC5pbmNsdWRlcyhzdGFydE1hcmtlcikgJiYgdGFyZ2V0Q29udGVudC5pbmNsdWRlcyhlbmRNYXJrZXIpKSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRJZHggPSB0YXJnZXRDb250ZW50LmluZGV4T2Yoc3RhcnRNYXJrZXIpO1xuICAgICAgICAgIGNvbnN0IGVuZElkeCA9IHRhcmdldENvbnRlbnQuaW5kZXhPZihlbmRNYXJrZXIpO1xuXG4gICAgICAgICAgaWYgKHN0YXJ0SWR4ICE9PSAtMSAmJiBlbmRJZHggIT09IC0xICYmIHN0YXJ0SWR4IDwgZW5kSWR4KSB7XG4gICAgICAgICAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXRDb250ZW50LnN1YnN0cmluZygwLCBzdGFydElkeCk7XG4gICAgICAgICAgICBjb25zdCBhZnRlciA9IHRhcmdldENvbnRlbnQuc3Vic3RyaW5nKGVuZElkeCArIGVuZE1hcmtlci5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGAke2JlZm9yZX0ke3N0YXJ0TWFya2VyfVxcbiR7c291cmNlQ29udGVudH1cXG4ke2VuZE1hcmtlcn0ke2FmdGVyfWA7XG4gICAgICAgICAgICBhd2FpdCB3cml0ZUZpbGUodGFyZ2V0Q2xhdWRlTWQsIG5ld0NvbnRlbnQpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBDTEFVREUubWQgdXBkYXRlZCAobWFya2VyIHJlZ2lvbilgKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhg4o+tIENMQVVERS5tZCBtYXJrZXIgcG9zaXRpb25zIGludmFsaWQsIHNraXBwZWRgKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIOuniOy7pOqwgCDsl4bripQg6riw7KG0IENMQVVERS5tZOyXkCBTb25hbXUg7IS57IWY7J2EIOy2lOqwgO2VqeuLiOuLpFxuICAgICAgICAgIGNvbnN0IGFwcGVuZGVkID0gYCR7dGFyZ2V0Q29udGVudC50cmltRW5kKCl9XFxuXFxuPCEtLSBTT05BTVU6U1RBUlQgLS0+XFxuJHtzb3VyY2VDb250ZW50fVxcbjwhLS0gU09OQU1VOkVORCAtLT5cXG5gO1xuICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZSh0YXJnZXRDbGF1ZGVNZCwgYXBwZW5kZWQpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgQ0xBVURFLm1kIHVwZGF0ZWQgKGFwcGVuZGVkIFNvbmFtdSBzZWN0aW9uKWApKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgd2l0aE1hcmtlcnMgPSBgPCEtLSBTT05BTVU6U1RBUlQgLS0+XFxuJHtzb3VyY2VDb250ZW50fVxcbjwhLS0gU09OQU1VOkVORCAtLT5cXG5gO1xuICAgICAgICBhd2FpdCB3cml0ZUZpbGUodGFyZ2V0Q2xhdWRlTWQsIHdpdGhNYXJrZXJzKTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBDTEFVREUubWQgY3JlYXRlZGApKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgY2hhbGsucmVkKFxuICAgICAgICAgIGDinJcgRmFpbGVkIHRvIHVwZGF0ZSBDTEFVREUubWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBza2lsbHNDb3B5KHNyYzogc3RyaW5nLCBkZXN0OiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjcChzcmMsIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgU2tpbGxzIGNvcGllZGApKTtcbiAgfSBjYXRjaCAoY29weUVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGNoYWxrLnJlZChcbiAgICAgICAgYOKclyBGYWlsZWQgdG8gY29weSBza2lsbHM6ICR7Y29weUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBjb3B5RXJyb3IubWVzc2FnZSA6IFN0cmluZyhjb3B5RXJyb3IpfWAsXG4gICAgICApLFxuICAgICk7XG4gICAgdGhyb3cgY29weUVycm9yO1xuICB9XG59XG5cbi8qKlxuICogcG5wbSBzb25hbXUgc2tpbGxzIGNyZWF0ZSA8bmFtZT4g7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDroZzsu6wgc2tpbGwg7LSI7JWI7J2EIOyDneyEse2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2tpbGxzX2NyZWF0ZShuYW1lOiBzdHJpbmcpIHtcbiAgY29uc3Qgd29ya3NwYWNlUm9vdCA9IGF3YWl0IGZpbmRXb3Jrc3BhY2VSb290KCk7XG4gIGNvbnN0IGxvY2FsRGlyID0gcGF0aC5qb2luKHdvcmtzcGFjZVJvb3QsIFwiLmNsYXVkZVwiLCBcInNraWxsc1wiLCBcImxvY2FsXCIpO1xuXG4gIC8vID09PSDtjIzsnbzrqoUg6rKA7KadIOuwjyBTYW5pdGl6ZSA9PT1cbiAgaWYgKCFuYW1lIHx8IG5hbWUudHJpbSgpID09PSBcIlwiKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCLinJcgU2tpbGwgbmFtZSBpcyByZXF1aXJlZFwiKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHNhbml0aXplZCA9IG5hbWVcbiAgICAvLyDqs7XrsLHsnYQg7ZWY7J207ZSI7Jy866GcXG4gICAgLnJlcGxhY2UoL1xccysvZywgXCItXCIpXG4gICAgLy8g6rK966GcIOq1rOu2hOyekCDsoJzqsbBcbiAgICAucmVwbGFjZSgvWy9cXFxcXS9nLCBcIi1cIilcbiAgICAvLyBQYXRoIHRyYXZlcnNhbCDrsKnsp4BcbiAgICAucmVwbGFjZSgvXFwuXFwuL2csIFwiXCIpXG4gICAgLy8gV2luZG93cyDquIjsp4Ag66y47J6QIOygnOqxsFxuICAgIC5yZXBsYWNlKC9bPD46XCJ8PypdL2csIFwiXCIpXG4gICAgLy8g7Iuc7J6RL+uBnSDsoJAsIO2VmOydtO2UiCwg7Ja4642U7Iqk7L2U7Ja0IOygnOqxsFxuICAgIC5yZXBsYWNlKC9eWy5cXC1fXSt8Wy5cXC1fXSskL2csIFwiXCIpXG4gICAgLy8g7Jew7IaN65CcIO2VmOydtO2UiOydhCDtlZjrgpjroZxcbiAgICAucmVwbGFjZSgvLSsvZywgXCItXCIpXG4gICAgLy8g7JWM7YyM67KzLCDsiKvsnpAsIO2VmOydtO2UiCwg7Ja4642U7Iqk7L2U7Ja0LCDtlZzquIDrp4wg7ZeI7JqpXG4gICAgLnJlcGxhY2UoL1teYS16QS1aMC05LV/qsIAt7Z6jXS9nLCBcIlwiKTtcblxuICAvLyDquLjsnbQg7KCc7ZWcXG4gIGNvbnN0IE1BWF9MRU5HVEggPSAxMDA7XG4gIGlmIChzYW5pdGl6ZWQubGVuZ3RoID4gTUFYX0xFTkdUSCkge1xuICAgIHNhbml0aXplZCA9IHNhbml0aXplZC5zdWJzdHJpbmcoMCwgTUFYX0xFTkdUSCk7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGDimqAgTmFtZSB0cnVuY2F0ZWQgdG8gJHtNQVhfTEVOR1RIfSBjaGFyYWN0ZXJzYCkpO1xuICB9XG5cbiAgLy8gV2luZG93cyDsmIjslb3slrQg7ZmV7J24XG4gIGNvbnN0IFJFU0VSVkVEX05BTUVTID0gW1xuICAgIFwiQ09OXCIsXG4gICAgXCJQUk5cIixcbiAgICBcIkFVWFwiLFxuICAgIFwiTlVMXCIsXG4gICAgXCJDT00xXCIsXG4gICAgXCJDT00yXCIsXG4gICAgXCJDT00zXCIsXG4gICAgXCJDT000XCIsXG4gICAgXCJDT001XCIsXG4gICAgXCJDT002XCIsXG4gICAgXCJDT003XCIsXG4gICAgXCJDT004XCIsXG4gICAgXCJDT005XCIsXG4gICAgXCJMUFQxXCIsXG4gICAgXCJMUFQyXCIsXG4gICAgXCJMUFQzXCIsXG4gICAgXCJMUFQ0XCIsXG4gICAgXCJMUFQ1XCIsXG4gICAgXCJMUFQ2XCIsXG4gICAgXCJMUFQ3XCIsXG4gICAgXCJMUFQ4XCIsXG4gICAgXCJMUFQ5XCIsXG4gIF07XG4gIGlmIChSRVNFUlZFRF9OQU1FUy5pbmNsdWRlcyhzYW5pdGl6ZWQudG9VcHBlckNhc2UoKSkpIHtcbiAgICBzYW5pdGl6ZWQgPSBgc2tpbGwtJHtzYW5pdGl6ZWR9YDtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYOKaoCBSZXNlcnZlZCBuYW1lIGRldGVjdGVkLCBwcmVmaXhlZCB3aXRoIFwic2tpbGwtXCJgKSk7XG4gIH1cblxuICAvLyDruYgg66y47J6Q7Je0IOyytO2BrFxuICBpZiAoc2FuaXRpemVkID09PSBcIlwiKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCLinJcgSW52YWxpZCBza2lsbCBuYW1lIGFmdGVyIHNhbml0aXphdGlvblwiKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZGltKGAgIE9yaWdpbmFsOiBcIiR7bmFtZX1cImApKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyDrs4Dqsr0g7JWM66a8XG4gIGlmIChzYW5pdGl6ZWQgIT09IG5hbWUpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYOKaoCBOYW1lIHNhbml0aXplZDogXCIke25hbWV9XCIg4oaSIFwiJHtzYW5pdGl6ZWR9XCJgKSk7XG4gIH1cblxuICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihsb2NhbERpciwgYCR7c2FuaXRpemVkfS5tZGApO1xuXG4gIGlmIChhd2FpdCBleGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGBTa2lsbCBcIiR7c2FuaXRpemVkfVwiIGFscmVhZHkgZXhpc3RzLmApKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBta2Rpcihsb2NhbERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBgLS0tXG5uYW1lOiAke3Nhbml0aXplZH1cbmNhdGVnb3J5OiBvdGhlclxuY3JlYXRlZF9hdDogJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdfVxuc3RhdHVzOiBkcmFmdFxuLS0tXG5cbiMgJHtzYW5pdGl6ZWR9XG5cbiMjIOyDge2ZqVxuXG5b7Ja065akIOusuOygnOyYgOuKlOyngF1cblxuIyMg7ZW06rKwIOuwqeuylVxuXG5b7Ja065a76rKMIO2VtOqysO2WiOuKlOyngF1cblxuIyMg7L2U65OcIOyYiOyLnFxuXG5cXGBcXGBcXGB0eXBlc2NyaXB0XG4vLyDsmIjsi5wg7L2U65OcXG5cXGBcXGBcXGBcbmA7XG5cbiAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCB0ZW1wbGF0ZSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgQ3JlYXRlZCAuY2xhdWRlL3NraWxscy9sb2NhbC8ke3Nhbml0aXplZH0ubWRgKSk7XG59XG5cbi8qKlxuICogcG5wbSBzb25hbXUgYXV0aCBnZW5lcmF0ZSDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIGJldHRlci1hdXRoIOyXlO2LsO2LsOuTpChVc2VyLCBTZXNzaW9uLCBBY2NvdW50LCBWZXJpZmljYXRpb24p7J2EIOyDneyEse2VqeuLiOuLpC5cbiAqXG4gKiDsmLXshZg6XG4gKiAtLXBsdWdpbnMgcGhvbmUtbnVtYmVyLDJmYSAg7ZSM65+s6re47J24IOyXlO2LsO2LsOuPhCDtlajqu5gg7IOd7ISxXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGF1dGhfZ2VuZXJhdGUoKSB7XG4gIC8vIC0tcGx1Z2lucyDsmLXshZgg7YyM7IuxXG4gIGNvbnN0IHBsdWdpbnNBcmcgPSBwcm9jZXNzLmFyZ3YuZmluZCgoYXJnKSA9PiBhcmcuc3RhcnRzV2l0aChcIi0tcGx1Z2luc1wiKSk7XG4gIGNvbnN0IHBsdWdpbnM6IEJldHRlckF1dGhQbHVnaW5JZFtdID0gW107XG5cbiAgaWYgKHBsdWdpbnNBcmcpIHtcbiAgICBjb25zdCBwbHVnaW5WYWx1ZSA9IHBsdWdpbnNBcmcuaW5jbHVkZXMoXCI9XCIpXG4gICAgICA/IHBsdWdpbnNBcmcuc3BsaXQoXCI9XCIpWzFdXG4gICAgICA6IHByb2Nlc3MuYXJndltwcm9jZXNzLmFyZ3YuaW5kZXhPZihwbHVnaW5zQXJnKSArIDFdO1xuXG4gICAgaWYgKHBsdWdpblZhbHVlKSB7XG4gICAgICBjb25zdCBwbHVnaW5JZHMgPSBwbHVnaW5WYWx1ZS5zcGxpdChcIixcIikubWFwKChwKSA9PiBwLnRyaW0oKSk7XG5cbiAgICAgIGZvciAoY29uc3QgaWQgb2YgcGx1Z2luSWRzKSB7XG4gICAgICAgIGlmIChpc1ZhbGlkUGx1Z2luSWQoaWQpKSB7XG4gICAgICAgICAgcGx1Z2lucy5wdXNoKGlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYOKaoCBVbmtub3duIHBsdWdpbjogJHtpZH1gKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKGAgIFN1cHBvcnRlZCBwbHVnaW5zOiAke1NVUFBPUlRFRF9QTFVHSU5fSURTLmpvaW4oXCIsIFwiKX1gKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIvCflJAgR2VuZXJhdGluZyBiZXR0ZXItYXV0aCBlbnRpdGllcy4uLlxcblwiKSk7XG5cbiAgaWYgKHBsdWdpbnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBQbHVnaW5zOiAke3BsdWdpbnMuam9pbihcIiwgXCIpfWApKTtcbiAgfVxuXG4gIGF3YWl0IGdlbmVyYXRlQmV0dGVyQXV0aEVudGl0aWVzKHsgcGx1Z2lucyB9KTtcbn1cblxuLyoqXG4gKiDsm4ztgazsiqTtjpjsnbTsiqQg66Oo7Yq466W8IOywvuyKteuLiOuLpC5cbiAqIOyasOyEoOyInOychDogcG5wbS13b3Jrc3BhY2UueWFtbCA+IENMQVVERS5tZCA+IOujqO2KuCBwYWNrYWdlLmpzb24gKHdvcmtzcGFjZXMg7ZWE65OcKVxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kV29ya3NwYWNlUm9vdCgpIHtcbiAgbGV0IGRpciA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgd2hpbGUgKGRpciAhPT0gcGF0aC5kaXJuYW1lKGRpcikpIHtcbiAgICAvLyAxLiBwbnBtLXdvcmtzcGFjZS55YW1sIO2MjOydvOydtCDsnojripTsp4Ag7ZmV7J24LiDsnojsnLzrqbQg7ZmV7Iuk7ZWcIG1vbm9yZXBvIOujqO2KuC5cbiAgICBpZiAoYXdhaXQgZXhpc3RzKHBhdGguam9pbihkaXIsIFwicG5wbS13b3Jrc3BhY2UueWFtbFwiKSkpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuXG4gICAgLy8gMi4gQ0xBVURFLm1kIO2MjOydvOydtCDsnojripTsp4Ag7ZmV7J24LiDsnojsnLzrqbQg7ZSE66Gc7KCd7Yq4IOujqO2KuOuhnCDqsITso7ztlaguXG4gICAgaWYgKGF3YWl0IGV4aXN0cyhwYXRoLmpvaW4oZGlyLCBcIkNMQVVERS5tZFwiKSkpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuXG4gICAgLy8gMy4gcGFja2FnZS5qc29u7JeQIHdvcmtzcGFjZXMg7ZWE65Oc6rCAIOyeiOycvOuptCDro6jtirguXG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBcInBhY2thZ2UuanNvblwiKTtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKHBhY2thZ2VQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGF3YWl0IHJlYWRGaWxlKHBhY2thZ2VQYXRoLCBcInV0Zi04XCIpKTtcbiAgICAgICAgaWYgKHBhY2thZ2VKc29uLndvcmtzcGFjZXMpIHtcbiAgICAgICAgICByZXR1cm4gZGlyO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8g7YyM7IuxIOyLpO2MqOyLnCDrrLTsi5xcbiAgICAgIH1cbiAgICB9XG4gICAgZGlyID0gcGF0aC5kaXJuYW1lKGRpcik7XG4gIH1cblxuICAvLyDssL7sp4Ag66q77ZWY66m0IGFwaSDtj7TrjZTsnZgg67aA66qoIOyCrOyaqVxuICByZXR1cm4gZmluZEFwcFJvb3RQYXRoKCk7XG59XG4iXSwibmFtZXMiOlsiY2hhbGsiLCJkb3RlbnYiLCJjb25maWciLCJhc3NlcnQiLCJleGVjU3luYyIsInNwYXduIiwiY3AiLCJta2RpciIsInJlYWRkaXIiLCJyZWFkRmlsZSIsInJtIiwic3ltbGluayIsIndyaXRlRmlsZSIsImtuZXgiLCJjcmVhdGVSZXF1aXJlIiwib3MiLCJwYXRoIiwicHJvY2VzcyIsInRzaWNsaSIsIlNvbmFtdSIsImdlbmVyYXRlQmV0dGVyQXV0aEVudGl0aWVzIiwiaXNWYWxpZFBsdWdpbklkIiwiU1VQUE9SVEVEX1BMVUdJTl9JRFMiLCJFbnRpdHlNYW5hZ2VyIiwiTWlncmF0b3IiLCJGaXh0dXJlTWFuYWdlciIsImV4ZWNXaXRoTGluZVByZWZpeCIsInByaW50QnVpbGRTdW1tYXJ5IiwicHJpbnRUYXNrRmFpbGVkIiwicHJpbnRUYXNrSGVhZGVyIiwicHJpbnRUYXNrU3RhcnQiLCJwcmludFRhc2tTdWNjZXNzIiwiZXhpc3RzIiwiZmluZEFwaVJvb3RQYXRoIiwiZmluZEFwcFJvb3RQYXRoIiwiQVBJX0FSVElGQUNUUyIsIldFQl9BUlRJRkFDVFMiLCJmaXh0dXJlRXhwbG9yZUNvbW1hbmQiLCJmaXh0dXJlRmV0Y2hDb21tYW5kIiwiZml4dHVyZUdlbkNvbW1hbmQiLCJtaWdyYXRvciIsInBhcnNlQ2xpT3B0aW9ucyIsImFyZ3YiLCJmbGFncyIsIlNldCIsIm9wdGlvbnMiLCJpIiwibGVuZ3RoIiwiYXJnIiwic3RhcnRzV2l0aCIsImluY2x1ZGVzIiwia2V5IiwidmFsdWUiLCJzbGljZSIsInNwbGl0IiwibmV4dEFyZyIsImFkZCIsImJvb3RzdHJhcCIsIm5vdFRvSW5pdCIsImluaXQiLCJmaWx0ZXJlZEFyZ3YiLCJza2lwTmV4dCIsImFmdGVyRG91YmxlRGFzaCIsInB1c2giLCJjbWQiLCJ0eXBlcyIsInR5cGUiLCJuYW1lIiwibWVzc2FnZSIsImNob2ljZXMiLCJnZXRBbGxQYXJlbnRJZHMiLCJtYXAiLCJlbnRpdHlJZCIsInRpdGxlIiwiYXJncyIsInJ1bm5lcnMiLCJtaWdyYXRlX3N0YXR1cyIsIm1pZ3JhdGVfcnVuIiwibWlncmF0ZV9hcHBseSIsImZpeHR1cmVfaW5pdCIsImZpeHR1cmVfaW1wb3J0IiwiZml4dHVyZV9zeW5jIiwiZml4dHVyZV9nZW4iLCJmaXh0dXJlX2ZldGNoIiwiZml4dHVyZV9leHBsb3JlIiwic3R1Yl9wcmFjdGljZSIsInN0dWJfZW50aXR5Iiwic2NhZmZvbGRfbW9kZWwiLCJzY2FmZm9sZF9tb2RlbF90ZXN0IiwiY29uZV9nZW4iLCJzeW5jIiwiYnVpbGRfYWxsIiwiYnVpbGRfYXBpIiwiYnVpbGRfd2ViIiwiZGV2X2FsbCIsImRldl9hcGkiLCJkZXZfd2ViIiwic3RhcnQiLCJza2lsbHNfc3luYyIsInNraWxsc19jcmVhdGUiLCJhdXRoX2dlbmVyYXRlIiwiZGVzdHJveSIsImZpbmFsbHkiLCJzeW5jZXIiLCJzcGF3bkFwaURldlNlcnZlciIsImFwaVJvb3QiLCJlbnRyeVBvaW50IiwiaG90UnVubmVyQmluUGF0aCIsInVybCIsInJlc29sdmUiLCJzZXJ2ZXJQcm9jZXNzIiwiZXhlY1BhdGgiLCJqb2luIiwiY3dkIiwic3RkaW8iLCJlbnYiLCJOT0RFX0VOViIsIkhPVCIsIkFQSV9ST09UX1BBVEgiLCJleHRyYUVudiIsImNsZWFudXAiLCJjb25zb2xlIiwibG9nIiwieWVsbG93Iiwia2lsbCIsImV4aXQiLCJvbiIsImNvZGUiLCJlcnJvciIsInJlZCIsImJvbGQiLCJTT05BTVVfRElTQUJMRV9JTlRFR1JBVEVEX1dFQiIsImFwcFJvb3QiLCJ3ZWJQYXRoIiwiZG91YmxlRGFzaEluZGV4IiwiaW5kZXhPZiIsInBhc3N0aHJvdWdoQXJncyIsInZpdGVBcmdzIiwidml0ZVByb2Nlc3MiLCJzaWduYWwiLCJyZXNvbHZlU3djQ29uZmlnUGF0aCIsInN3Y0ZpbGVQYXRoIiwiZGltIiwiZGlybmFtZSIsInNraXBJZk1pc3NpbmciLCJhcGlTdGFydGVkQXQiLCJEYXRlIiwibm93IiwiYXJ0aWZhY3QiLCJwcm9qZWN0UGF0aCIsImRlc2NyaXB0aW9uIiwicnVuQnVpbGRTdGVwcyIsImJ1aWxkQ29tbWFuZEFyZ3MiLCJjb25maWdGaWxlUGF0aCIsImUiLCJncmF5Iiwid2ViU3RhcnRlZEF0Iiwic3RlcHMiLCJwcmVCdWlsZENvbW1hbmQiLCJidWlsZENvbW1hbmQiLCJwb3N0QnVpbGRDb21tYW5kIiwiZmlsdGVyIiwic3RlcCIsImlzTGFzdCIsIkVycm9yIiwiY2F1c2UiLCJibHVlIiwic2V0dXBNaWdyYXRvciIsInNldHVwRml4dHVyZU1hbmFnZXIiLCJ0YXJnZXRzIiwicnVuQWN0aW9uIiwibG9jYWxIb3N0cyIsIk9iamVjdCIsImtleXMiLCJkYkNvbmZpZyIsInRhcmdldCIsInRhcmdldENvbmZpZyIsImhvc3QiLCJjb25uZWN0aW9uIiwidG9Mb3dlckNhc2UiLCJzdGF0dXMiLCJnZXRTdGF0dXMiLCJzcmNDb25maWciLCJkZXZlbG9wbWVudF9tYXN0ZXIiLCJsYWJlbCIsImZpeHR1cmUiLCJ0ZXN0IiwidG9Ta2lwIiwicmVtb3RlQ29ubiIsImxvY2FsQ29ubiIsImRhdGFiYXNlIiwiZHVtcEZpbGVuYW1lIiwic3JjQ29ubiIsIm1pZ3JhdGlvbnNEdW1wIiwidXNlciIsInBhc3N3b3JkIiwiX2RiIiwibWlncmF0aW9ucyIsInJhdyIsImNvdW50IiwiY29ubiIsImRiIiwidW5kZWZpbmVkIiwicm93IiwibXlzcWxDbWQiLCJyZWNvcmRJZHMiLCJpbXBvcnRGaXh0dXJlIiwicGFyc2VPcHRpb25zIiwiXyIsImsiLCJ2IiwibmV4dCIsInByYWN0aWNlRGlyIiwiYXBpUm9vdFBhdGgiLCJmaWxlTmFtZXMiLCJtYXhTZXFObyIsInJlY3Vyc2l2ZSIsImZpbHRlcmVkU2VxcyIsImZpbGVOYW1lIiwiZW5kc1dpdGgiLCJzZXFObyIsIm1hdGNoIiwicGFyc2VJbnQiLCJzb3J0IiwiYSIsImIiLCJjdXJyZW50U2VxTm8iLCJkc3RQYXRoIiwicnVuQ29kZSIsInJlcGxhY2UiLCJjcmVhdGVFbnRpdHkiLCJ1c2VBSSIsImhhcyIsIm5vQ29uZXMiLCJlbnRpdHkiLCJnZXQiLCJjb25maWdMb2NhbGUiLCJpMThuIiwiZGVmYXVsdExvY2FsZSIsImxvY2FsZSIsInJlc3VsdCIsImdlbmVyYXRlQ29uZXMiLCJwcmVzZXJ2ZUV4aXN0aW5nIiwib25seUVtcHR5IiwidG9rZW5zVXNlZCIsImdlbmVyYXRlVGVtcGxhdGVDb25lcyIsImFsbEVudGl0aWVzIiwiZ2V0QWxsRW50aXRpZXMiLCJ0b3RhbFRva2VucyIsImVycm9ycyIsImlkIiwiZXN0aW1hdGVkQ29zdCIsInRvRml4ZWQiLCJlcnIiLCJtb2RlIiwiZ2VuZXJhdGVUZW1wbGF0ZSIsImlzR2xvYmFsIiwic291cmNlQmFzZSIsInNvdXJjZVNraWxsc0RpciIsInNvdXJjZUNsYXVkZU1kIiwic2tpbGxzX3N5bmNfdG8iLCJob21lZGlyIiwidXNlU3ltbGluayIsImNvcHlQcm9qZWN0VGVtcGxhdGVzIiwiY3lhbiIsIndvcmtzcGFjZVJvb3QiLCJmaW5kV29ya3NwYWNlUm9vdCIsImNsYXVkZURpciIsInRhcmdldFNraWxsc0RpciIsImZvcmNlIiwiZ3JlZW4iLCJTdHJpbmciLCJza2lsbHNDb3B5Iiwic291cmNlUHJvamVjdERpciIsInRhcmdldFByb2plY3REaXIiLCJ0YXJnZXRDbGF1ZGVNZCIsInJhd0NvbnRlbnQiLCJzb3VyY2VDb250ZW50IiwicmVwbGFjZUFsbCIsInRhcmdldENvbnRlbnQiLCJzdGFydE1hcmtlciIsImVuZE1hcmtlciIsInN0YXJ0SWR4IiwiZW5kSWR4IiwiYmVmb3JlIiwic3Vic3RyaW5nIiwiYWZ0ZXIiLCJuZXdDb250ZW50IiwiYXBwZW5kZWQiLCJ0cmltRW5kIiwid2l0aE1hcmtlcnMiLCJzcmMiLCJkZXN0IiwiY29weUVycm9yIiwibG9jYWxEaXIiLCJ0cmltIiwic2FuaXRpemVkIiwiTUFYX0xFTkdUSCIsIlJFU0VSVkVEX05BTUVTIiwidG9VcHBlckNhc2UiLCJmaWxlUGF0aCIsInRlbXBsYXRlIiwidG9JU09TdHJpbmciLCJwbHVnaW5zQXJnIiwiZmluZCIsInBsdWdpbnMiLCJwbHVnaW5WYWx1ZSIsInBsdWdpbklkcyIsInAiLCJkaXIiLCJwYWNrYWdlUGF0aCIsInBhY2thZ2VKc29uIiwiSlNPTiIsInBhcnNlIiwid29ya3NwYWNlcyJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsV0FBVyxRQUFRO0FBQzFCLE9BQU9DLFlBQVksU0FBUztBQUU1QkEsT0FBT0MsTUFBTTtBQUViLE9BQU9DLFlBQVksU0FBUztBQUM1QixTQUFTQyxRQUFRLEVBQUVDLEtBQUssUUFBUSxnQkFBZ0I7QUFDaEQsU0FBU0MsRUFBRSxFQUFFQyxLQUFLLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxFQUFFQyxFQUFFLEVBQUVDLE9BQU8sRUFBRUMsU0FBUyxRQUFRLG1CQUFjO0FBQ25GLE9BQU9DLFVBQXlCLE9BQU87QUFDdkMsU0FBU0MsYUFBYSxRQUFRLFNBQVM7QUFDdkMsT0FBT0MsUUFBUSxLQUFLO0FBQ3BCLE9BQU9DLFVBQVUsT0FBTztBQUN4QixPQUFPQyxhQUFhLFVBQVU7QUFDOUIsU0FBU0MsTUFBTSxRQUFRLFNBQVM7QUFDaEMsU0FBU0MsTUFBTSxRQUFRLGtCQUFTO0FBQ2hDLFNBQVNDLDBCQUEwQixRQUFRLDRCQUF5QjtBQUNwRSxTQUVFQyxlQUFlLEVBQ2ZDLG9CQUFvQixRQUNmLDhDQUFxQztBQUU1QyxTQUFTQyxhQUFhLFFB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonamu",
3
- "version": "0.8.2",
3
+ "version": "0.8.3",
4
4
  "description": "Sonamu — TypeScript Fullstack API Framework",
5
5
  "keywords": [
6
6
  "typescript",
@@ -119,10 +119,10 @@
119
119
  "tsicli": "^1.0.5",
120
120
  "vite": "7.3.0",
121
121
  "vitest": "^4.0.10",
122
- "@sonamu-kit/hmr-hook": "^0.4.1",
123
- "@sonamu-kit/hmr-runner": "^0.1.1",
122
+ "@sonamu-kit/tasks": "^0.2.0",
124
123
  "@sonamu-kit/ts-loader": "^2.1.3",
125
- "@sonamu-kit/tasks": "^0.2.0"
124
+ "@sonamu-kit/hmr-hook": "^0.4.1",
125
+ "@sonamu-kit/hmr-runner": "^0.1.1"
126
126
  },
127
127
  "devDependencies": {
128
128
  "@biomejs/biome": "^2.3.13",
package/src/bin/cli.ts CHANGED
@@ -964,6 +964,7 @@ async function skills_sync() {
964
964
  await skills_sync_to(path.join(os.homedir(), ".claude"), sourceSkillsDir, sourceClaudeMd, {
965
965
  useSymlink: false,
966
966
  copyProjectTemplates: false,
967
+ isGlobal: true,
967
968
  });
968
969
  console.log(chalk.cyan(`\n Global sync complete → ~/.claude/skills/sonamu/`));
969
970
  console.log(chalk.dim(` These skills are available in all Claude Code sessions.`));
@@ -994,6 +995,7 @@ async function skills_sync_to(
994
995
  useSymlink: boolean;
995
996
  copyProjectTemplates: boolean;
996
997
  sourceBase?: string;
998
+ isGlobal?: boolean;
997
999
  },
998
1000
  ) {
999
1001
  const targetSkillsDir = path.join(claudeDir, "skills", "sonamu");
@@ -1050,7 +1052,11 @@ async function skills_sync_to(
1050
1052
  if (await exists(sourceClaudeMd)) {
1051
1053
  try {
1052
1054
  const targetClaudeMd = path.join(claudeDir, "CLAUDE.md");
1053
- const sourceContent = await readFile(sourceClaudeMd, "utf-8");
1055
+ const rawContent = await readFile(sourceClaudeMd, "utf-8");
1056
+ // 글로벌 모드에서는 상대 경로를 절대 경로로 변환합니다
1057
+ const sourceContent = options.isGlobal
1058
+ ? rawContent.replaceAll(".claude/skills/sonamu/", "~/.claude/skills/sonamu/")
1059
+ : rawContent;
1054
1060
 
1055
1061
  if (await exists(targetClaudeMd)) {
1056
1062
  const targetContent = await readFile(targetClaudeMd, "utf-8");