sonamu 0.10.3 → 0.10.5
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 +12 -1
- package/dist/database/puri.d.ts +4 -1
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +18 -1
- package/dist/database/puri.types.d.ts +12 -1
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +1 -1
- package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
- package/dist/migration/postgresql-schema-reader.js +2 -3
- package/dist/naite/naite-reporter.d.ts.map +1 -1
- package/dist/naite/naite-reporter.js +10 -2
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +8 -3
- package/dist/ui-web/assets/{index-CDd6xT-F.js → index-BLX4zN8c.js} +1 -1
- package/dist/ui-web/index.html +1 -1
- package/package.json +3 -3
- package/src/bin/cli.ts +15 -2
- package/src/database/__tests__/puri.test.ts +66 -0
- package/src/database/puri.ts +40 -0
- package/src/database/puri.types.test-d.ts +115 -1
- package/src/database/puri.types.ts +19 -0
- package/src/migration/postgresql-schema-reader.ts +1 -2
- package/src/naite/naite-reporter.ts +10 -1
- package/src/skills/sonamu/puri.md +28 -0
- package/src/template/__tests__/generated.template.search-text.test.ts +17 -2
- package/src/template/implementations/generated.template.ts +15 -1
package/dist/bin/cli.js
CHANGED
|
@@ -220,6 +220,8 @@ async function bootstrap() {
|
|
|
220
220
|
stub_entity,
|
|
221
221
|
scaffold_model,
|
|
222
222
|
scaffold_model_test,
|
|
223
|
+
scaffold_view_list,
|
|
224
|
+
scaffold_view_form,
|
|
223
225
|
cone_gen,
|
|
224
226
|
sync,
|
|
225
227
|
build_all,
|
|
@@ -806,6 +808,15 @@ async function scaffold_model(entityId) {
|
|
|
806
808
|
async function scaffold_model_test(entityId) {
|
|
807
809
|
await Sonamu.syncer.generateTemplate("model_test", { entityId });
|
|
808
810
|
}
|
|
811
|
+
async function scaffold_view_list(entityId) {
|
|
812
|
+
await Sonamu.syncer.generateTemplate("view_list", {
|
|
813
|
+
entityId,
|
|
814
|
+
extra: void 0
|
|
815
|
+
});
|
|
816
|
+
}
|
|
817
|
+
async function scaffold_view_form(entityId) {
|
|
818
|
+
await Sonamu.syncer.generateTemplate("view_form", { entityId });
|
|
819
|
+
}
|
|
809
820
|
/**
|
|
810
821
|
* pnpm sonamu skills sync 하면 실행되는 함수입니다.
|
|
811
822
|
* 공식 Skills를 로컬 프로젝트 또는 글로벌 ~/.claude/로 동기화합니다.
|
|
@@ -1073,4 +1084,4 @@ async function findWorkspaceRoot() {
|
|
|
1073
1084
|
//#endregion
|
|
1074
1085
|
export {};
|
|
1075
1086
|
|
|
1076
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgZXhlY1N5bmMsIHNwYXduIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGNwLCBta2RpciwgcmVhZGRpciwgcmVhZEZpbGUsIHJtLCBzeW1saW5rLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcInByb2Nlc3NcIjtcblxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IGtuZXggZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgeyB0c2ljbGkgfSBmcm9tIFwidHNpY2xpXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBhZGRDb21wYW5pb25zVG9FbnRpdGllcywgZ2VuZXJhdGVCZXR0ZXJBdXRoRW50aXRpZXMgfSBmcm9tIFwiLi4vYXV0aC9hdXRoLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgaXNWYWxpZFBsdWdpbklkLCBTVVBQT1JURURfUExVR0lOX0lEUyB9IGZyb20gXCIuLi9hdXRoL3BsdWdpbnMvZW50aXR5LWRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyB0eXBlIEJldHRlckF1dGhQbHVnaW5JZCB9IGZyb20gXCIuLi9hdXRoL3BsdWdpbnMvZW50aXR5LWRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyB0eXBlIFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgZ2V0U29uYW11RW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vZW52XCI7XG5pbXBvcnQgeyBNaWdyYXRvciB9IGZyb20gXCIuLi9taWdyYXRpb24vbWlncmF0b3JcIjtcbmltcG9ydCB7IEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBleGVjV2l0aExpbmVQcmVmaXgsXG4gIHByaW50QnVpbGRTdW1tYXJ5LFxuICBwcmludFRhc2tGYWlsZWQsXG4gIHByaW50VGFza0hlYWRlcixcbiAgcHJpbnRUYXNrU3RhcnQsXG4gIHByaW50VGFza1N1Y2Nlc3MsXG59IGZyb20gXCIuLi91dGlscy9jb25zb2xlLXV0aWxcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuaW1wb3J0IHsgZmluZEFwaVJvb3RQYXRoLCBmaW5kQXBwUm9vdFBhdGggfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IEFQSV9BUlRJRkFDVFMsIFdFQl9BUlRJRkFDVFMgfSBmcm9tIFwiLi9idWlsZC1jb25maWdcIjtcbmltcG9ydCB7IHR5cGUgQnVpbGRBcnRpZmFjdCB9IGZyb20gXCIuL2J1aWxkLWNvbmZpZ1wiO1xuaW1wb3J0IHsgZml4dHVyZUV4cGxvcmVDb21tYW5kLCBmaXh0dXJlRmV0Y2hDb21tYW5kLCBmaXh0dXJlR2VuQ29tbWFuZCB9IGZyb20gXCIuL2ZpeHR1cmVcIjtcbmltcG9ydCB7IGdldE1pZ3JhdGVSdW5UYXJnZXRzIH0gZnJvbSBcIi4vbWlncmF0ZS10YXJnZXRzXCI7XG5pbXBvcnQgeyB0ZXN0Q29tbWFuZCB9IGZyb20gXCIuL3Rlc3QtY29tbWFuZFwiO1xuXG5sZXQgbWlncmF0b3I6IE1pZ3JhdG9yO1xuXG4vKipcbiAqIENMSSDsmLXshZjsnYQg7YyM7Iux7ZWY64qUIO2XrO2NvCDtlajsiJhcbiAqL1xuZnVuY3Rpb24gcGFyc2VDbGlPcHRpb25zKGFyZ3Y6IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2KToge1xuICBmbGFnczogU2V0PHN0cmluZz47IC8vIC0tcmVnZW5lcmF0ZSwgLS1haSwgLS1uby1jb25lcyDrk7FcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgLy8gLS1sb2NhbGUga28g65OxXG59IHtcbiAgY29uc3QgZmxhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3ZbaV07XG4gICAgaWYgKCFhcmcuc3RhcnRzV2l0aChcIi0tXCIpKSBjb250aW51ZTtcblxuICAgIC8vIC0tb3B0aW9uPXZhbHVlIO2YleyLnVxuICAgIGlmIChhcmcuaW5jbHVkZXMoXCI9XCIpKSB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBhcmcuc2xpY2UoMikuc3BsaXQoXCI9XCIpO1xuICAgICAgb3B0aW9uc1trZXldID0gdmFsdWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyAtLW9wdGlvbiB2YWx1ZSDtmJXsi53snbjsp4Ag7ZmV7J24XG4gICAgY29uc3QgbmV4dEFyZyA9IGFyZ3ZbaSArIDFdO1xuICAgIGlmIChuZXh0QXJnICYmICFuZXh0QXJnLnN0YXJ0c1dpdGgoXCItLVwiKSAmJiAhbmV4dEFyZy5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgb3B0aW9uc1thcmcuc2xpY2UoMildID0gbmV4dEFyZztcbiAgICAgIGkrKzsgLy8g64uk7J2MIGFyZ+uKlCDqsJLsnbTrr4DroZwg7Iqk7YK1XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC0tZmxhZyDtmJXsi51cbiAgICAgIGZsYWdzLmFkZChhcmcuc2xpY2UoMikpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGZsYWdzLCBvcHRpb25zIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcCgpIHtcbiAgY29uc3Qgbm90VG9Jbml0ID0gW1wiZGV2XCIsIFwiYnVpbGRcIiwgXCJzdGFydFwiLCBcInNraWxsc1wiLCBcInRlc3RcIl0uaW5jbHVkZXMocHJvY2Vzcy5hcmd2WzJdID8/IFwiXCIpO1xuICBpZiAoIW5vdFRvSW5pdCkge1xuICAgIGF3YWl0IFNvbmFtdS5pbml0KGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIHRzaWNsaeuKlCDsoJXtmZXtlZwg66qF66C57Ja0IOunpOy5reunjCDsp4Dsm5DtlZjrr4DroZwsIC0t66GcIOyLnOyeke2VmOuKlCDsmLXshZjqs7wg6re4IOqwkuydhCDtlYTthLDrp4Htlanri4jri6QuXG4gICAgLy8g7Ji17IWYIO2MjOyLseydgCDqsIEgcnVubmVyIO2VqOyImOyXkOyEnCDsm5Drs7ggcHJvY2Vzcy5hcmd266W8IOyCrOyaqe2VmOyXrCDsiJjtlontlanri4jri6QuXG4gICAgLy8gXCItLVwiKGJhcmUgZG91YmxlIGRhc2gp64qUIHBhc3N0aHJvdWdoIOq1rOu2hOyekOydtOuvgOuhnCwg6re4IOuSpOydmCDrqqjrk6Ag7J247J6Q64+EIOygnOyZuO2VqeuLiOuLpC5cbiAgICBjb25zdCBmaWx0ZXJlZEFyZ3Y6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IHNraXBOZXh0ID0gZmFsc2U7XG4gICAgbGV0IGFmdGVyRG91YmxlRGFzaCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvY2Vzcy5hcmd2Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBhcmcgPSBwcm9jZXNzLmFyZ3ZbaV07XG4gICAgICBpZiAoYXJnID09PSBcIi0tXCIpIHtcbiAgICAgICAgYWZ0ZXJEb3VibGVEYXNoID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoYWZ0ZXJEb3VibGVEYXNoKSBjb250aW51ZTtcbiAgICAgIGlmIChza2lwTmV4dCkge1xuICAgICAgICBza2lwTmV4dCA9IGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmcuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICAgIC8vIC0tb3B0aW9uPXZhbHVlIO2YleyLneydgCDsnbQgYXJn66eMIOyKpO2CtVxuICAgICAgICBpZiAoYXJnLmluY2x1ZGVzKFwiPVwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIC0tb3B0aW9uIHZhbHVlIO2YleyLneyduOyngCDtmZXsnbg6IOuLpOydjCBhcmfqsIAgLS3roZwg7Iuc7J6R7ZWY7KeAIOyViuycvOuptCDqsJLsnbQg7J6I64qUIOqyg1xuICAgICAgICBjb25zdCBuZXh0QXJnID0gcHJvY2Vzcy5hcmd2W2kgKyAxXTtcbiAgICAgICAgaWYgKG5leHRBcmcgJiYgIW5leHRBcmcuc3RhcnRzV2l0aChcIi0tXCIpICYmICFuZXh0QXJnLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgc2tpcE5leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZmlsdGVyZWRBcmd2LnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICAvLyBidWlsZC9kZXYg66qF66C57Ja06rCAIOyEnOu4jOy7pOunqOuTnCDsl4bsnbQg7Zi47Lac65CgIOuVjCBcImFsbFwi7J2EIOq4sOuzuOqwkuycvOuhnCDstpTqsIDtlanri4jri6QuXG4gICAgLy8g7JiIOiBgc29uYW11IGJ1aWxkYCDihpIgYHNvbmFtdSBidWlsZCBhbGxgLCBgc29uYW11IGRldmAg4oaSIGBzb25hbXUgZGV2IGFsbGBcbiAgICBjb25zdCBjbWQgPSBmaWx0ZXJlZEFyZ3ZbMl07XG4gICAgaWYgKChjbWQgPT09IFwiYnVpbGRcIiB8fCBjbWQgPT09IFwiZGV2XCIpICYmIGZpbHRlcmVkQXJndi5sZW5ndGggPT09IDMpIHtcbiAgICAgIGZpbHRlcmVkQXJndi5wdXNoKFwiYWxsXCIpO1xuICAgIH1cblxuICAgIC8vIHRlc3Qg7Luk66eo65Oc64qUIOqwgOuzgCDsnbjsnpAo7YyM7J2866qFLCAtLXBhdHRlcm4g65OxKeulvCDrsJvsnLzrr4DroZwgdHNpY2xp66W8IOyasO2ajO2VqeuLiOuLpC5cbiAgICBpZiAoY21kID09PSBcInRlc3RcIikge1xuICAgICAgcmV0dXJuIHRlc3RDb21tYW5kKCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdHNpY2xpKGZpbHRlcmVkQXJndiwge1xuICAgICAgdHlwZXM6IHtcbiAgICAgICAgXCIjZW50aXR5SWRcIjoge1xuICAgICAgICAgIHR5cGU6IFwiYXV0b2NvbXBsZXRlXCIsXG4gICAgICAgICAgbmFtZTogXCIjZW50aXR5SWRcIixcbiAgICAgICAgICBtZXNzYWdlOiBcIlBsZWFzZSBpbnB1dCAjZW50aXR5SWRcIixcbiAgICAgICAgICBjaG9pY2VzOiBFbnRpdHlNYW5hZ2VyLmdldEFsbFBhcmVudElkcygpLm1hcCgoZW50aXR5SWQpID0+ICh7XG4gICAgICAgICAgICB0aXRsZTogZW50aXR5SWQsXG4gICAgICAgICAgICB2YWx1ZTogZW50aXR5SWQsXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgICBcIiNyZWNvcmRJZHNcIjogXCJudW1iZXJbXVwiLFxuICAgICAgICBcIiNuYW1lXCI6IFwic3RyaW5nXCIsXG4gICAgICAgIFwiI3RhcmdldHNcIjoge1xuICAgICAgICAgIHR5cGU6IFwibXVsdGlzZWxlY3RcIixcbiAgICAgICAgICBuYW1lOiBcIiN0YXJnZXRzXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJQbGVhc2UgaW5wdXQgI3RhcmdldHNcIixcbiAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICB7IHRpdGxlOiBcIkRldmVsb3BtZW50XCIsIHZhbHVlOiBcImRldmVsb3BtZW50XCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiU3RhZ2luZ1wiLCB2YWx1ZTogXCJzdGFnaW5nXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiUHJvZHVjdGlvblwiLCB2YWx1ZTogXCJwcm9kdWN0aW9uXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiRml4dHVyZVwiLCB2YWx1ZTogXCJmaXh0dXJlXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiVGVzdFwiLCB2YWx1ZTogXCJ0ZXN0XCIgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImluaXRcIl0sXG4gICAgICAgIFtcImZpeHR1cmVcIiwgXCJpbXBvcnRcIiwgXCIjZW50aXR5SWRcIiwgXCIjcmVjb3JkSWRzXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwic3luY1wiXSxcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImdlblwiXSxcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImZldGNoXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwiZXhwbG9yZVwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInJ1blwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcImFwcGx5XCIsIFwiI3RhcmdldHNcIl0sXG4gICAgICAgIFtcIm1pZ3JhdGVcIiwgXCJnZW5lcmF0ZVwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInN0YXR1c1wiXSxcbiAgICAgICAgW1wic3R1YlwiLCBcInByYWN0aWNlXCIsIFwiI25hbWVcIl0sXG4gICAgICAgIFtcInN0dWJcIiwgXCJlbnRpdHlcIiwgXCIjbmFtZVwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJtb2RlbFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJtb2RlbF90ZXN0XCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJzY2FmZm9sZFwiLCBcInZpZXdfbGlzdFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJ2aWV3X2Zvcm1cIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcImNvbmVcIiwgXCJnZW5cIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInN5bmNcIl0sXG4gICAgICAgIFtcImJ1aWxkXCIsIFwiYWxsXCJdLFxuICAgICAgICBbXCJidWlsZFwiLCBcImFwaVwiXSxcbiAgICAgICAgW1wiYnVpbGRcIiwgXCJ3ZWJcIl0sXG4gICAgICAgIFtcImRldlwiLCBcImFsbFwiXSxcbiAgICAgICAgW1wiZGV2XCIsIFwiYXBpXCJdLFxuICAgICAgICBbXCJkZXZcIiwgXCJ3ZWJcIl0sXG4gICAgICAgIFtcInN0YXJ0XCJdLFxuICAgICAgICBbXCJza2lsbHNcIiwgXCJzeW5jXCJdLFxuICAgICAgICBbXCJza2lsbHNcIiwgXCJjcmVhdGVcIiwgXCIjbmFtZVwiXSxcbiAgICAgICAgW1widGVzdFwiXSxcbiAgICAgICAgW1wiYXV0aFwiLCBcImdlbmVyYXRlXCJdLFxuICAgICAgICBbXCJhdXRoXCIsIFwiYWRkLWNvbXBhbmlvbnNcIl0sXG4gICAgICBdLFxuICAgICAgcnVubmVyczoge1xuICAgICAgICBtaWdyYXRlX3N0YXR1cyxcbiAgICAgICAgbWlncmF0ZV9ydW4sXG4gICAgICAgIG1pZ3JhdGVfYXBwbHksXG4gICAgICAgIG1pZ3JhdGVfZ2VuZXJhdGUsXG4gICAgICAgIGZpeHR1cmVfaW5pdCxcbiAgICAgICAgZml4dHVyZV9pbXBvcnQsXG4gICAgICAgIGZpeHR1cmVfc3luYyxcbiAgICAgICAgZml4dHVyZV9nZW4sXG4gICAgICAgIGZpeHR1cmVfZmV0Y2gsXG4gICAgICAgIGZpeHR1cmVfZXhwbG9yZSxcbiAgICAgICAgc3R1Yl9wcmFjdGljZSxcbiAgICAgICAgc3R1Yl9lbnRpdHksXG4gICAgICAgIHNjYWZmb2xkX21vZGVsLFxuICAgICAgICBzY2FmZm9sZF9tb2RlbF90ZXN0LFxuICAgICAgICAvLyBzY2FmZm9sZF92aWV3X2xpc3QsXG4gICAgICAgIC8vIHNjYWZmb2xkX3ZpZXdfZm9ybSxcbiAgICAgICAgY29uZV9nZW4sXG4gICAgICAgIHN5bmMsXG4gICAgICAgIGJ1aWxkX2FsbCxcbiAgICAgICAgYnVpbGRfYXBpLFxuICAgICAgICBidWlsZF93ZWIsXG4gICAgICAgIGRldl9hbGwsXG4gICAgICAgIGRldl9hcGksXG4gICAgICAgIGRldl93ZWIsXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBza2lsbHNfc3luYyxcbiAgICAgICAgc2tpbGxzX2NyZWF0ZSxcbiAgICAgICAgdGVzdDogdGVzdENvbW1hbmQsXG4gICAgICAgIGF1dGhfZ2VuZXJhdGUsXG4gICAgICAgIFwiYXV0aF9hZGQtY29tcGFuaW9uc1wiOiBhdXRoX2FkZF9jb21wYW5pb25zLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBTb25hbXUuZGVzdHJveSgpO1xuICB9XG59XG5cbmJvb3RzdHJhcCgpLmZpbmFsbHkoYXN5bmMgKCkgPT4ge1xuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5kZXN0cm95KCk7XG59KTtcblxuLyoqXG4gKiBwbnBtIHN5bmMg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjrpbwg7Iux7YGs7ZWp64uI64ukLlxuICpcbiAqIGAtLWZvcmNlYCDsmLXshZjsnbQg7KO87Ja07KeA66m0IGxvY2vsnYQg66y07Iuc7ZWY6rOgIO2SgC3si7Htgazrpbwg7IiY7ZaJ7ZWp64uI64ukLlxuICogZ2l0IHBvc3QtbWVyZ2UgaG9va+ydtOuCmCBDSeyXkOyEnCDrp6QgcHVsbCDtm4Qg7J6Q64+ZIOyLpO2Wie2VoCDsiJgg7J6I64+E66GdIOuFuOy2nC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3luYygpIHtcbiAgY29uc3QgeyBmbGFncyB9ID0gcGFyc2VDbGlPcHRpb25zKCk7XG4gIGlmIChmbGFncy5oYXMoXCJmb3JjZVwiKSkge1xuICAgIGF3YWl0IFNvbmFtdS5zeW5jZXIuZm9yY2VTeW5jKCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgU29uYW11LnN5bmNlci5zeW5jKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBUEkg6rCc67CcIOyEnOuyhOulvCDsi6TtlontlZjripQg6rO17Ya1IOuhnOyngeyeheuLiOuLpC5cbiAqIGRldl9hbGzqs7wgZGV2X2FwaeyXkOyEnCDqs7XsnKDtlanri4jri6QuXG4gKlxuICogVHlwZVNjcmlwdOulvCDrsJTroZwg7Iuk7ZaJ7ZWgIOyImCDsnojrj4TroZ0gQHNvbmFtdS1raXQvdHMtbG9hZGVy66W8LFxuICogSE1S7J2EIOyngOybkO2VmOq4sCDsnITtlbQgQHNvbmFtdS1raXQvaG1yLWhvb2vsnYQgaW1wb3J07ZWY66mwLFxuICog7IaM7Iqk66e1IOyngOybkOydhCDsnITtlbQgLS1lbmFibGUtc291cmNlLW1hcHMg7ZSM656Y6re466W8IO2PrO2VqO2VmOyXrCDsi6Ttlontlanri4jri6QuXG4gKlxuICog7J2065WMIEBzb25hbXUta2l0L3RzLWxvYWRlcuyZgCBAc29uYW11LWtpdC9obXItaG9va+uKlCBzb25hbXXqsIAg7J6Q7LK07KCB7Jy866GcIOqwgOyngOqzoCDsnojripQgZGVwZW5kZW5jeeyeheuLiOuLpC5cbiAqIOuYkO2VnCDsi6Ttlonsl5Ag7IKs7Jqp7ZWY64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLrj4Qg66eI7LCs6rCA7KeA66GcIHNvbmFtdeqwgCDsnpDssrTsoIHsnLzroZwg6rCA7KeA6rOgIOyeiOuKlCBkZXBlbmRlbmN57J6F64uI64ukLlxuICog65Sw65287IScIOyCrOyaqeyekCDtlITroZzsoJ3tirjsl5DshJzripQg7J20IOyEuCDtjKjtgqTsp4Drpbwg7KeB7KCRIOyEpOy5mO2VoCDtlYTsmpTqsIAg7JeG7Iq164uI64ukLlxuICovXG5mdW5jdGlvbiBzcGF3bkFwaURldlNlcnZlcihvcHRpb25zPzogeyBleHRyYUVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcInNyYy9pbmRleC50c1wiO1xuXG4gIC8vIOydtCBzb25hbXUg7Yyo7YKk7KeA6rCAIGRlcGVuZGVuY2llc+uhnCDqsIDsp4Dqs6Ag7J6I64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLsnZggYmluL3J1bi5qc+ulvCDsgqzsmqntlanri4jri6QuXG4gIC8vIOydtCDqsr3roZwoL2Jpbi9ydW4uanMp64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLsnZggcGFja2FnZS5qc29u7J2YIGJpbiDtlYTrk5zsl5Ag66qF7Iuc65CY7Ja0IOyeiOuKlCDqt7jqsoPqs7wg6rCZ7Iq164uI64ukLlxuICBjb25zdCBob3RSdW5uZXJCaW5QYXRoID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpLnJlc29sdmUoXG4gICAgXCJAc29uYW11LWtpdC9obXItcnVubmVyL2Jpbi9ydW4uanNcIixcbiAgKTtcblxuICBjb25zdCBzZXJ2ZXJQcm9jZXNzID0gc3Bhd24oXG4gICAgcHJvY2Vzcy5leGVjUGF0aCwgLy8gbm9kZVxuICAgIFtcbiAgICAgIGhvdFJ1bm5lckJpblBhdGgsIC8vIOydtOugh+qyjCDtlbTshJwgaG90LXJ1bm5lcuulvCDsi6TtlontlZjqtazsmpRcbiAgICAgIFwiLS1jbGVhci1zY3JlZW49ZmFsc2VcIiwgLy8g7J207ZWYIGhvdC1ydW5uZXLsl5Dqsowg64SY6rKo7KSEIOyduOyekOuTpOyeheuLiOuLpC5cbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1pbXBvcnQ9c29uYW11L3RzLWxvYWRlci1yZWdpc3RlclwiLCAvLyBUeXBlU2NyaXB0IOyEnO2PrO2KuOulvCDsnITtlZwg66Gc642ULFxuICAgICAgXCItLW5vZGUtYXJncz0tLWltcG9ydD1zb25hbXUvaG1yLWhvb2stcmVnaXN0ZXJcIiwgLy8gSE1S7J2EIOyngOybkO2VmOq4sCDsnITtlZwgaG9vayxcbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1lbmFibGUtc291cmNlLW1hcHNcIiwgLy8g6re466as6rOgIOyGjOyKpOuntSDsp4Dsm5DsnYQg7JyE7ZWcIO2UjOuemOq3uOyeheuLiOuLpC5cbiAgICAgIFwiLS1vbi1rZXk9cjpyZXN0YXJ0OlJlc3RhcnQgc2VydmVyXCIsIC8vIHIg64iE66W066m0IOyEnOuyhCDsnqzsi5zsnpHtlZjqsowg7ZW07KSY7JqULlxuICAgICAgXCItLW9uLWtleT1jOmNsZWFyOkNsZWFyIHNjcmVlblwiLCAvLyBjIOuIhOultOuptCDthLDrr7jrhJAg7ZmU66m07J2EIOyngOybjOykmOyalC5cbiAgICAgIGAtLW9uLWtleT1mOnNoZWxsKHJtICR7cGF0aC5qb2luKGFwaVJvb3QsIFwic29uYW11LmxvY2tcIil9KTpyZXN0YXJ0OkZvcmNlIHJlc3RhcnRgLCAvLyBmIOuIhOultOuptCBsb2NrIOygnOqxsCDtm4Qg7J6s7Iuc7J6RIOKGkiDsg4gg7ZSE66Gc7IS47Iqk6rCAIOu2gO2KuOyKpO2KuOueqeyXkOyEnCDtkoAt7Iux7YGsLiBmb3JjZSBzeW5jIENMSeulvCBzaGVsbOuhnCDrtoDrpbTrqbQg7IK07JWE7J6I64qUIOyEnOuyhOydmCB3YXRjaGVyIO2Pre2SjeydtCA6cmVzdGFydOyZgCDstqnrj4ztlbQg7IOB7YOcIOydtOyDgS5cblxuICAgICAgXCItLW9uLWtleT1lbnRlcjpzaGVsbChlY2hvIGhpKTpLZXkgYmluZGluZyB0ZXN0XCIsIC8vIGVudGVy66W8IGtleeuhnCDsk7gg7IiYIOyeiOydjOydhCDrs7TsnbTquLAg7JyE7ZWcIO2FjOyKpO2KuOyeheuLiOuLpC5cbiAgICAgIFwiLS1vbi1rZXk9Y3RybCtmIGN0cmwrZjpzaGVsbChnaXQgcHVsbCAmJiBwbnBtIGluc3RhbGwgJiYgcG5wbSAtLWZpbHRlciBzb25hbXUgYnVpbGQgJiYgZWNobyAnU29uYW11IGlzIG5vdyB1cC10by1kYXRlIScpOnJlc3RhcnQ6UHVsbCAmIGluc3RhbGwgJiBidWlsZCAmIHJlc3RhcnRcIiwgLy8gbW9kaWZpZXLsmYDsnZgg7KGw7ZWpLCDqt7jrpqzqs6Ag65GQIOqwnOydmCBjaG9yZOulvCDsgqzsmqntlaAg7IiYIOyeiOydjOydhCDrs7TsnbTquLAg7JyE7ZWcIO2FjOyKpO2KuOyeheuLiOuLpC5cbiAgICAgIGVudHJ5UG9pbnQsIC8vIOuniOyngOunieycvOuhnCDsi6TsoJwg7Iuk7ZaJ7ZWgIOyKpO2BrOumve2KuOydmCDqsr3roZzrpbwg64SY6rKo7KSN64uI64ukLlxuICAgIF0sXG4gICAge1xuICAgICAgY3dkOiBhcGlSb290LFxuICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgICAgZW52OiB7XG4gICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICBOT0RFX0VOVjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz8gXCJkZXZlbG9wbWVudFwiLFxuICAgICAgICBIT1Q6IFwieWVzXCIsIC8vIOyWmOqwgCDsnojslrTslbwgSE1S7J20IO2ZnOyEse2ZlOuQqeuLiOuLpC5cbiAgICAgICAgQVBJX1JPT1RfUEFUSDogYXBpUm9vdCwgLy8g7J20IOqyveuhnOqwgCBobXItaG9va+ydmCDro6jtirgg65SU66CJ7Yag66as6rCAIOuQqeuLiOuLpC5cbiAgICAgICAgLi4ub3B0aW9ucz8uZXh0cmFFbnYsXG4gICAgICB9LFxuICAgIH0sXG4gICk7XG5cbiAgLy8g7KKF66OMIOyymOumrFxuICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIlxcblxcbvCfkYsgU2h1dHRpbmcgZG93bi4uLlwiKSk7XG4gICAgc2VydmVyUHJvY2Vzcy5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH07XG5cbiAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCBjbGVhbnVwKTtcbiAgcHJvY2Vzcy5vbihcIlNJR1RFUk1cIiwgY2xlYW51cCk7XG5cbiAgc2VydmVyUHJvY2Vzcy5vbihcImV4aXRcIiwgKGNvZGUpID0+IHtcbiAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoYFNlcnZlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoY29kZSB8fCAxKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIHBucG0gZGV2IC8gcG5wbSBkZXYgYWxsIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog7ZSE66Gc7KCd7Yq47JeQIOuMgO2VtCBITVIg7KeA7JuQ7ZWY64qUIOqwnOuwnCDshJzrsoTrpbwg652E7JuM7KSN64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGRldl9hbGwoKSB7XG4gIGNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG4gIGNvbnN0IHsgdmVyc2lvbiB9ID0gcmVxdWlyZShcIi4uLy4uL3BhY2thZ2UuanNvblwiKTtcbiAgY29uc29sZS5sb2coYPCfjLIgU29uYW11IHYke3ZlcnNpb259XFxuYCk7XG4gIHNwYXduQXBpRGV2U2VydmVyKCk7XG59XG5cbi8qKlxuICogcG5wbSBkZXYgYXBpIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICogQVBJIOyghOyaqSDqsJzrsJwg7ISc67KE66W8IOudhOybgeuLiOuLpC5cbiAqIGRldl9hbGzqs7wg6rGw7J2YIOuPmeydvO2VmOuQmCwg7Ya17ZWpIOybuSDshJzrsoTrpbwg67mE7Zmc7ISx7ZmU7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGRldl9hcGkoKSB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdy5ib2xkKFwiU3RhcnRpbmcgU29uYW11IEFQSS1vbmx5IGRldiBzZXJ2ZXIuLi5cXG5cIikpO1xuICBzcGF3bkFwaURldlNlcnZlcih7XG4gICAgZXh0cmFFbnY6IHsgU09OQU1VX0RJU0FCTEVfSU5URUdSQVRFRF9XRUI6IFwieWVzXCIgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogcG5wbSBkZXYgd2ViIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICogVml0ZSDqsJzrsJwg7ISc67KE66W8IOuLqOuPheycvOuhnCDsi6Ttlontlanri4jri6QuXG4gKiAtLSDrkqTsnZgg7J247J6Q64qUIFZpdGXsl5Ag6re464yA66GcIOyghOuLrOuQqeuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZXZfd2ViKCkge1xuICBjb25zdCBhcHBSb290ID0gZmluZEFwcFJvb3RQYXRoKCk7XG4gIGNvbnN0IHdlYlBhdGggPSBwYXRoLmpvaW4oYXBwUm9vdCwgXCJ3ZWJcIik7XG5cbiAgaWYgKCEoYXdhaXQgZXhpc3RzKHdlYlBhdGgpKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYHdlYiDrlJTroInthqDrpqzrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6Q6ICR7d2ViUGF0aH1gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyAtLSDrkqTsnZgg7J247J6QIOy2lOy2nFxuICBjb25zdCBkb3VibGVEYXNoSW5kZXggPSBwcm9jZXNzLmFyZ3YuaW5kZXhPZihcIi0tXCIpO1xuICBjb25zdCBwYXNzdGhyb3VnaEFyZ3MgPSBkb3VibGVEYXNoSW5kZXggIT09IC0xID8gcHJvY2Vzcy5hcmd2LnNsaWNlKGRvdWJsZURhc2hJbmRleCArIDEpIDogW107XG5cbiAgY29uc3Qgdml0ZUFyZ3MgPSBbXCJleGVjXCIsIFwidml0ZVwiLCAuLi5wYXNzdGhyb3VnaEFyZ3NdO1xuXG4gIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdy5ib2xkKFwiU3RhcnRpbmcgVml0ZSBkZXYgc2VydmVyLi4uXFxuXCIpKTtcblxuICBjb25zdCB2aXRlUHJvY2VzcyA9IHNwYXduKFwicG5wbVwiLCB2aXRlQXJncywge1xuICAgIGN3ZDogd2ViUGF0aCxcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gIH0pO1xuXG4gIHZpdGVQcm9jZXNzLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4ge1xuICAgIHByb2Nlc3MuZXhpdChjb2RlID8/IDApO1xuICB9KTtcblxuICAvLyBTSUdJTlQvU0lHVEVSTSDsi5wgVml0ZSDtlITroZzshLjsiqTrpbwgZ3JhY2VmdWxseSDsooXro4ztlanri4jri6QuXG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIFtcIlNJR0lOVFwiLCBcIlNJR1RFUk1cIl0gYXMgY29uc3QpIHtcbiAgICBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgdml0ZVByb2Nlc3Mua2lsbChzaWduYWwpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQVBJIOu5jOuTnCDshKTsoJUg7YyM7J28IOqyveuhnOulvCDqsrDsoJXtlanri4jri6QuXG4gKiDtlITroZzsoJ3tirgg66Oo7Yq47JeQIGB0c2Rvd24uY29uZmlnLnRzYOqwgCDsnojsnLzrqbQg6re46rKD7J2ELCDsl4bsnLzrqbQgc29uYW11IOq4sOuzuCDshKTsoJXsnYQg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQXBpQnVpbGRDb25maWdQYXRoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGxvY2FsQ29uZmlnUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcInRzZG93bi5jb25maWcudHNcIik7XG5cbiAgdHJ5IHtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKGxvY2FsQ29uZmlnUGF0aCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcIlVzaW5nIHRzZG93bi5jb25maWcudHMgZnJvbSBwcm9qZWN0IHJvb3QuLi5cIikpO1xuICAgICAgcmV0dXJuIGxvY2FsQ29uZmlnUGF0aDtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oXCJVc2luZyBkZWZhdWx0IHRzZG93biBBUEkgY29uZmlnIGZyb20gc29uYW11IHBhY2thZ2UuLi5cIikpO1xuICAgIHJldHVybiBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwidHNkb3duLmFwaS5jb25maWcudHNcIik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJTZXR0aW5nIHVwIEFQSSBidWlsZCBjb25maWcgZmFpbGVkLlwiKSwgZXJyb3IpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIHNvbmFtdSBidWlsZCAvIHNvbmFtdSBidWlsZCBhbGwg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBidWlsZF9hcGkgKyBidWlsZF93ZWLsnZgg7ZWp7ISx7J6F64uI64ukLiBXZWIg65SU66CJ7Yag66as6rCAIOyXhuycvOuptCBXZWIg67mM65Oc66W8IOyKpO2Cte2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRfYWxsKCkge1xuICBhd2FpdCBidWlsZF9hcGkoKTtcbiAgYXdhaXQgYnVpbGRfd2ViKHsgc2tpcElmTWlzc2luZzogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBwbnBtIGJ1aWxkIGFwaSDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIEFQSSDtlITroZzsoJ3tirjrp4wg67mM65Oc7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkX2FwaSgpIHtcbiAgY29uc3QgYXBwUm9vdCA9IGZpbmRBcHBSb290UGF0aCgpO1xuICBjb25zdCBjb25maWdGaWxlUGF0aCA9IGF3YWl0IHJlc29sdmVBcGlCdWlsZENvbmZpZ1BhdGgoKTtcblxuICBjb25zdCBhcGlTdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICB0cnkge1xuICAgIGZvciAoY29uc3QgYXJ0aWZhY3Qgb2YgQVBJX0FSVElGQUNUUykge1xuICAgICAgY29uc3QgY3dkID0gcGF0aC5qb2luKGFwcFJvb3QsIGFydGlmYWN0LnByb2plY3RQYXRoKTtcbiAgICAgIHByaW50VGFza0hlYWRlcihhcnRpZmFjdC5uYW1lLCBhcnRpZmFjdC5kZXNjcmlwdGlvbiwgY3dkKTtcblxuICAgICAgYXdhaXQgcnVuQnVpbGRTdGVwcyhhcnRpZmFjdCwgeyBjd2QsIGJ1aWxkQ29tbWFuZEFyZ3M6IHsgY29uZmlnRmlsZVBhdGggfSB9KTtcbiAgICB9XG4gICAgcHJpbnRCdWlsZFN1bW1hcnkoXCJBUElcIiwgdHJ1ZSwgRGF0ZS5ub3coKSAtIGFwaVN0YXJ0ZWRBdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIkFQSVwiLCBmYWxzZSwgRGF0ZS5ub3coKSAtIGFwaVN0YXJ0ZWRBdCk7XG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBwbnBtIGJ1aWxkIHdlYiDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIFdlYiDtlITroZzsoJ3tirjrp4wg67mM65Oc7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkX3dlYih7IHNraXBJZk1pc3NpbmcgPSBmYWxzZSB9ID0ge30pIHtcbiAgY29uc3QgYXBwUm9vdCA9IGZpbmRBcHBSb290UGF0aCgpO1xuICBjb25zdCB3ZWJQYXRoID0gcGF0aC5qb2luKGFwcFJvb3QsIFwid2ViXCIpO1xuXG4gIGlmICghKGF3YWl0IGV4aXN0cyh3ZWJQYXRoKSkpIHtcbiAgICBpZiAoc2tpcElmTWlzc2luZykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShcIldlYiDrlJTroInthqDrpqzqsIAg7JeG7Jy866+A66GcIFdlYiDruYzrk5zrpbwg6rG064SI65yB64uI64ukLlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoYHdlYiDrlJTroInthqDrpqzrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6Q6ICR7d2ViUGF0aH1gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBjb25zdCB3ZWJTdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICB0cnkge1xuICAgIGZvciAoY29uc3QgYXJ0aWZhY3Qgb2YgV0VCX0FSVElGQUNUUykge1xuICAgICAgY29uc3QgY3dkID0gcGF0aC5qb2luKGFwcFJvb3QsIGFydGlmYWN0LnByb2plY3RQYXRoKTtcbiAgICAgIHByaW50VGFza0hlYWRlcihhcnRpZmFjdC5uYW1lLCBhcnRpZmFjdC5kZXNjcmlwdGlvbiwgY3dkKTtcblxuICAgICAgYXdhaXQgcnVuQnVpbGRTdGVwcyhhcnRpZmFjdCwgeyBjd2QsIGJ1aWxkQ29tbWFuZEFyZ3M6IHt9IH0pO1xuICAgIH1cbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIldlYlwiLCB0cnVlLCBEYXRlLm5vdygpIC0gd2ViU3RhcnRlZEF0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiV2ViXCIsIGZhbHNlLCBEYXRlLm5vdygpIC0gd2ViU3RhcnRlZEF0KTtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIHByZS1idWlsZCwgYnVpbGQsIHBvc3QtYnVpbGQg64uo6rOE66W8IOyInOywqOyggeycvOuhnCDsi6Ttlontlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bkJ1aWxkU3RlcHM8VD4oXG4gIGFydGlmYWN0OiBCdWlsZEFydGlmYWN0PFQ+LFxuICBvcHRpb25zOiB7IGN3ZDogc3RyaW5nOyBidWlsZENvbW1hbmRBcmdzOiBUIH0sXG4pIHtcbiAgY29uc3Qgc3RlcHMgPSBbXG4gICAgeyBuYW1lOiBcInByZS1idWlsZFwiLCBjbWQ6IGFydGlmYWN0LnByZUJ1aWxkQ29tbWFuZD8uKCkgfSxcbiAgICB7IG5hbWU6IFwiYnVpbGRcIiwgY21kOiBhcnRpZmFjdC5idWlsZENvbW1hbmQob3B0aW9ucy5idWlsZENvbW1hbmRBcmdzKSB9LFxuICAgIHsgbmFtZTogXCJwb3N0LWJ1aWxkXCIsIGNtZDogYXJ0aWZhY3QucG9zdEJ1aWxkQ29tbWFuZD8uKCkgfSxcbiAgXS5maWx0ZXIoKHN0ZXApID0+IHN0ZXAuY21kKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc3RlcCA9IHN0ZXBzW2ldO1xuICAgIGNvbnN0IGlzTGFzdCA9IGkgPT09IHN0ZXBzLmxlbmd0aCAtIDE7XG5cbiAgICB0cnkge1xuICAgICAgYXNzZXJ0KHN0ZXAuY21kKTtcbiAgICAgIHByaW50VGFza1N0YXJ0KHN0ZXAubmFtZSwgc3RlcC5jbWQsIGlzTGFzdCk7XG4gICAgICBhd2FpdCBleGVjV2l0aExpbmVQcmVmaXgoc3RlcC5jbWQsIHsgY3dkOiBvcHRpb25zLmN3ZCB9KTtcbiAgICAgIHByaW50VGFza1N1Y2Nlc3Moc3RlcC5uYW1lLCBpc0xhc3QpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHByaW50VGFza0ZhaWxlZChzdGVwLm5hbWUsIGlzTGFzdCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c3RlcC5uYW1lfSBmYWlsZWRgLCB7IGNhdXNlOiBlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIHBucG0gc3RhcnQg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDruYzrk5zrkJwg7ZSE66Gc7KCd7Yq466W8IOyLpO2Wie2VqeuLiOuLpC5cbiAqXG4gKiDruYzrk5zrkJwg6rKw6rO866y8KGRpc3Qg65SU66CJ7Yag66as7J2YIGluZGV4LmpzIOyXlO2KuOumrO2PrOyduO2KuCnsnbQg7JeG64uk66m0IOyLpO2WieydhCDspJHri6jtlanri4jri6QuXG4gKiDshozsiqTrp7Ug7KeA7JuQ6rO8IGRvdGVudiDsp4Dsm5DsnYQg7Y+s7ZWo7ZWY7JesIOyLpO2Wie2VqeuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydCgpIHtcbiAgY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbiAgY29uc3QgeyB2ZXJzaW9uIH0gPSByZXF1aXJlKFwiLi4vLi4vcGFja2FnZS5qc29uXCIpO1xuICBjb25zb2xlLmxvZyhg8J+MsiBTb25hbXUgdiR7dmVyc2lvbn1cXG5gKTtcblxuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcImRpc3QvaW5kZXguanNcIjtcblxuICBpZiAoIShhd2FpdCBleGlzdHMoZW50cnlQb2ludCkpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAke2VudHJ5UG9pbnR9IG5vdCBmb3VuZC4gUGxlYXNlIGJ1aWxkIHlvdXIgcHJvamVjdCBmaXJzdC5gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlJ1bjogcG5wbSBzb25hbXUgYnVpbGRcIikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcImNoaWxkX3Byb2Nlc3NcIik7XG4gIGNvbnN0IHNlcnZlclByb2Nlc3MgPSBzcGF3bihcbiAgICBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgIFtcIi0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsIFwiLXJcIiwgXCJkb3RlbnYvY29uZmlnXCIsIGVudHJ5UG9pbnRdLFxuICAgIHtcbiAgICAgIGN3ZDogYXBpUm9vdCxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICB9LFxuICApO1xuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgKCkgPT4ge1xuICAgIHNlcnZlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBNaWdyYXRvcigpIHtcbiAgLy8gbWlncmF0b3JcbiAgbWlncmF0b3IgPSBuZXcgTWlncmF0b3IoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBGaXh0dXJlTWFuYWdlcigpIHtcbiAgRml4dHVyZU1hbmFnZXIuaW5pdCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX2FwcGx5KHRhcmdldHM6IChrZXlvZiBTb25hbXVEQkNvbmZpZylbXSkge1xuICBhd2FpdCBzZXR1cE1pZ3JhdG9yKCk7XG4gIGF3YWl0IG1pZ3JhdG9yLnJ1bkFjdGlvbihcImFwcGx5XCIsIHRhcmdldHMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3J1bigpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuICBhd2FpdCBtaWdyYXRvci5ydW5BY3Rpb24oXCJhcHBseVwiLCBnZXRNaWdyYXRlUnVuVGFyZ2V0cygpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWlncmF0ZV9nZW5lcmF0ZSgpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuXG4gIGNvbnN0IHsgY29ubnMgfSA9IGF3YWl0IG1pZ3JhdG9yLmdldFN0YXR1cygpO1xuICBjb25zdCBoYXNTdGF0dXMwID0gY29ubnMuc29tZSgoY29ubikgPT4gY29ubi5zdGF0dXMgPT09IDApO1xuICBpZiAoIWhhc1N0YXR1czApIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGNoYWxrLnJlZChcbiAgICAgICAgXCLrp4jsnbTqt7jroIjsnbTshZgg7YyM7J287J2EIOyDneyEse2VmOugpOuptCDquLDsobQg66eI7J206re466CI7J207IWY7J20IOy1nOyGjCDtlZjrgpjsnZggRELsl5Ag66qo65GQIOyggeyaqeuQmOyWtCDsnojslrTslbwg7ZWp64uI64ukLlwiLFxuICAgICAgKSxcbiAgICApO1xuICAgIGZvciAoY29uc3QgY29ubiBvZiBjb25ucykge1xuICAgICAgaWYgKGNvbm4ucGVuZGluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhgICAke2Nvbm4ubmFtZX06IHBlbmRpbmcgJHtjb25uLnBlbmRpbmcubGVuZ3RofeqwnGApKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgY29uc3QgY291bnQgPSBhd2FpdCBtaWdyYXRvci5nZW5lcmF0ZVByZXBhcmVkQ29kZXMoKTtcbiAgaWYgKGNvdW50ID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGAke2NvdW50feqwnOydmCDrp4jsnbTqt7jroIjsnbTshZgg7YyM7J287J20IOyDneyEseuQmOyXiOyKteuLiOuLpC5gKSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbWlncmF0ZV9zdGF0dXMoKSB7XG4gIGF3YWl0IHNldHVwTWlncmF0b3IoKTtcblxuICBjb25zdCBzdGF0dXMgPSBhd2FpdCBtaWdyYXRvci5nZXRTdGF0dXMoKTtcbiAgLy8gc3RhdHVzO1xuICBjb25zb2xlLmxvZyhzdGF0dXMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX2luaXQoKSB7XG4gIGNvbnN0IHNyY0NvbmZpZyA9IFNvbmFtdS5kYkNvbmZpZ1tnZXRTb25hbXVFbnZpcm9ubWVudCgpXTtcbiAgY29uc3QgdGFyZ2V0cyA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogXCIoUkVNT1RFKSBGaXh0dXJlIERCXCIsXG4gICAgICBjb25maWc6IFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IFwiKExPQ0FMKSBUZXN0aW5nIERCXCIsXG4gICAgICBjb25maWc6IFNvbmFtdS5kYkNvbmZpZy50ZXN0LFxuICAgICAgdG9Ta2lwOiAoKCkgPT4ge1xuICAgICAgICBjb25zdCByZW1vdGVDb25uID0gU29uYW11LmRiQ29uZmlnLmZpeHR1cmUuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gICAgICAgIGNvbnN0IGxvY2FsQ29ubiA9IFNvbmFtdS5kYkNvbmZpZy50ZXN0LmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuICAgICAgICByZXR1cm4gcmVtb3RlQ29ubi5ob3N0ID09PSBsb2NhbENvbm4uaG9zdCAmJiByZW1vdGVDb25uLmRhdGFiYXNlID09PSBsb2NhbENvbm4uZGF0YWJhc2U7XG4gICAgICB9KSgpLFxuICAgIH0sXG4gIF0gYXMge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgY29uZmlnOiBLbmV4LkNvbmZpZztcbiAgICB0b1NraXA/OiBib29sZWFuO1xuICB9W107XG5cbiAgLy8gMS4g6riw7KSAREIg7Iqk7YKk66eI66W8IOuNpO2UhFxuICBjb25zb2xlLmxvZyhcIkRVTVAuLi5cIik7XG4gIGNvbnN0IGR1bXBGaWxlbmFtZSA9IGAvdG1wL3NvbmFtdS1maXh0dXJlLWluaXQtJHtEYXRlLm5vdygpfS5zcWxgO1xuICBjb25zdCBzcmNDb25uID0gc3JjQ29uZmlnLmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuICBjb25zdCBtaWdyYXRpb25zRHVtcCA9IGAvdG1wL3NvbmFtdS1maXh0dXJlLWluaXQtbWlncmF0aW9ucy0ke0RhdGUubm93KCl9LnNxbGA7XG4gIGV4ZWNTeW5jKFxuICAgIGBteXNxbGR1bXAgLWgke3NyY0Nvbm4uaG9zdH0gLXUke3NyY0Nvbm4udXNlcn0gLXAke3NyY0Nvbm4ucGFzc3dvcmR9IC0tc2luZ2xlLXRyYW5zYWN0aW9uIC1kIC0tbm8tY3JlYXRlLWRiIC0tdHJpZ2dlcnMgJHtzcmNDb25uLmRhdGFiYXNlfSA+ICR7ZHVtcEZpbGVuYW1lfWAsXG4gICk7XG4gIGNvbnN0IF9kYiA9IGtuZXgoc3JjQ29uZmlnKTtcbiAgY29uc3QgW1ttaWdyYXRpb25zXV0gPSBhd2FpdCBfZGIucmF3KFxuICAgIFwiU0VMRUNUIENPVU5UKCopIGFzIGNvdW50IEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBXSEVSRSB0YWJsZV9zY2hlbWEgPSA/IEFORCB0YWJsZV9uYW1lID0gJ2tuZXhfbWlncmF0aW9ucydcIixcbiAgICBbc3JjQ29ubi5kYXRhYmFzZV0sXG4gICk7XG4gIGlmIChtaWdyYXRpb25zLmNvdW50ID4gMCkge1xuICAgIGV4ZWNTeW5jKFxuICAgICAgYG15c3FsZHVtcCAtaCR7c3JjQ29ubi5ob3N0fSAtdSR7c3JjQ29ubi51c2VyfSAtcCR7c3JjQ29ubi5wYXNzd29yZH0gLS1zaW5nbGUtdHJhbnNhY3Rpb24gLS1uby1jcmVhdGUtZGIgLS10cmlnZ2VycyAke3NyY0Nvbm4uZGF0YWJhc2V9IGtuZXhfbWlncmF0aW9ucyBrbmV4X21pZ3JhdGlvbnNfbG9jayA+ICR7bWlncmF0aW9uc0R1bXB9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gMi4g64yA7IOBREIg6rCB6rCB7JeQIOuMgO2VmOyXrCDsobTsnqzsl6zrtoAg7ZmV7J24IO2bhCDrtpPquLBcbiAgZm9yIChjb25zdCB7IGxhYmVsLCBjb25maWcsIHRvU2tpcCB9IG9mIHRhcmdldHMpIHtcbiAgICBjb25zdCBjb25uID0gY29uZmlnLmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuXG4gICAgaWYgKHRvU2tpcCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAke2xhYmVsfTogU2tpcHBlZCFgKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBkYiA9IGtuZXgoe1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAuLi4oKGNvbmZpZy5jb25uZWN0aW9uID8/IHt9KSBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWcpLFxuICAgICAgICBkYXRhYmFzZTogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBbW3Jvd11dID0gYXdhaXQgZGIucmF3KGBTSE9XIERBVEFCQVNFUyBMSUtFIFwiJHtjb25uLmRhdGFiYXNlfVwiYCk7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGAke2xhYmVsfTogRGF0YWJhc2UgXCIke2Nvbm4uZGF0YWJhc2V9XCIgQWxyZWFkeSBleGlzdHNgKSk7XG4gICAgICBhd2FpdCBkYi5kZXN0cm95KCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgU1lOQyB0byAke2xhYmVsfS4uLmApO1xuICAgIGNvbnN0IG15c3FsQ21kID0gYG15c3FsIC1oJHtjb25uLmhvc3R9IC11JHtjb25uLnVzZXJ9IC1wJHtjb25uLnBhc3N3b3JkfWA7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9IC1lICdEUk9QIERBVEFCQVNFIElGIEVYSVNUUyBcXGAke2Nvbm4uZGF0YWJhc2V9XFxgJ2ApO1xuICAgIGV4ZWNTeW5jKGAke215c3FsQ21kfSAtZSAnQ1JFQVRFIERBVEFCQVNFIFxcYCR7Y29ubi5kYXRhYmFzZX1cXGAnYCk7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9ICR7Y29ubi5kYXRhYmFzZX0gPCAke2R1bXBGaWxlbmFtZX1gKTtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKG1pZ3JhdGlvbnNEdW1wKSkge1xuICAgICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9ICR7Y29ubi5kYXRhYmFzZX0gPCAke21pZ3JhdGlvbnNEdW1wfWApO1xuICAgIH1cblxuICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGF3YWl0IF9kYi5kZXN0cm95KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfaW1wb3J0KGVudGl0eUlkOiBzdHJpbmcsIHJlY29yZElkczogbnVtYmVyW10pIHtcbiAgYXdhaXQgc2V0dXBGaXh0dXJlTWFuYWdlcigpO1xuXG4gIGF3YWl0IEZpeHR1cmVNYW5hZ2VyLmltcG9ydEZpeHR1cmUoZW50aXR5SWQsIHJlY29yZElkcyk7XG4gIGF3YWl0IEZpeHR1cmVNYW5hZ2VyLnN5bmMoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9zeW5jKCkge1xuICBhd2FpdCBzZXR1cEZpeHR1cmVNYW5hZ2VyKCk7XG5cbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuc3luYygpO1xufVxuXG4vKipcbiAqIGZpeHR1cmUgZ2VuIOuqheugueyWtFxuICog7Ji17IWY7J2EIHByb2Nlc3MuYXJnduyXkOyEnCDtjIzsi7FcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9nZW4oKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMocHJvY2Vzcy5hcmd2KTtcbiAgYXdhaXQgZml4dHVyZUdlbkNvbW1hbmQob3B0aW9ucyk7XG59XG5cbi8qKlxuICogZml4dHVyZSBmZXRjaCDrqoXroLnslrRcbiAqIOyYteyFmOydhCBwcm9jZXNzLmFyZ3bsl5DshJwg7YyM7IuxXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfZmV0Y2goKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMocHJvY2Vzcy5hcmd2KTtcbiAgYXdhaXQgZml4dHVyZUZldGNoQ29tbWFuZChvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBmaXh0dXJlIGV4cGxvcmUg66qF66C57Ja0XG4gKiDsmLXshZjsnYQgcHJvY2Vzcy5hcmd27JeQ7IScIO2MjOyLsVxuICovXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX2V4cGxvcmUoKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMocHJvY2Vzcy5hcmd2KTtcbiAgYXdhaXQgZml4dHVyZUV4cGxvcmVDb21tYW5kKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIOqwhOuLqO2VnCDsmLXshZgg7YyM7IScXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3B0aW9ucyhcbiAgYXJndjogc3RyaW5nW10sXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuIHwgc3RyaW5nW10+ICYgeyBfOiBzdHJpbmdbXSB9IHtcbiAgY29uc3Qgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbiB8IHN0cmluZ1tdPiAmIHsgXzogc3RyaW5nW10gfSA9IHsgXzogW10gfTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcmcgPSBhcmd2W2ldO1xuXG4gICAgaWYgKGFyZy5zdGFydHNXaXRoKFwiLS1cIikpIHtcbiAgICAgIGNvbnN0IGtleSA9IGFyZy5zbGljZSgyKTtcblxuICAgICAgaWYgKGtleS5pbmNsdWRlcyhcIj1cIikpIHtcbiAgICAgICAgY29uc3QgW2ssIHZdID0ga2V5LnNwbGl0KFwiPVwiKTtcbiAgICAgICAgb3B0aW9uc1trXSA9IHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXh0ID0gYXJndltpICsgMV07XG4gICAgICAgIGlmIChuZXh0ICYmICFuZXh0LnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuICAgICAgICAgIG9wdGlvbnNba2V5XSA9IG5leHQ7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnNba2V5XSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFyZy5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgY29uc3Qga2V5ID0gYXJnLnNsaWNlKDEpO1xuICAgICAgY29uc3QgbmV4dCA9IGFyZ3ZbaSArIDFdO1xuXG4gICAgICBpZiAobmV4dCAmJiAhbmV4dC5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICBvcHRpb25zW2tleV0gPSBuZXh0O1xuICAgICAgICBpKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zW2tleV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLl8ucHVzaChhcmcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHViX3ByYWN0aWNlKG5hbWU6IHN0cmluZykge1xuICBjb25zdCBwcmFjdGljZURpciA9IHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic3JjXCIsIFwicHJhY3RpY2VzXCIpO1xuICBjb25zdCBmaWxlTmFtZXMgPSBhd2FpdCByZWFkZGlyKHByYWN0aWNlRGlyKTtcblxuICBjb25zdCBtYXhTZXFObyA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgaWYgKCEoYXdhaXQgZXhpc3RzKHByYWN0aWNlRGlyKSkpIHtcbiAgICAgIGF3YWl0IG1rZGlyKHByYWN0aWNlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZFNlcXMgPSBmaWxlTmFtZXNcbiAgICAgIC5maWx0ZXIoKGZpbGVOYW1lKSA9PiBmaWxlTmFtZS5zdGFydHNXaXRoKFwicFwiKSAmJiBmaWxlTmFtZS5lbmRzV2l0aChcIi50c1wiKSlcbiAgICAgIC5tYXAoKGZpbGVOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IFssIHNlcU5vXSA9IGZpbGVOYW1lLm1hdGNoKC9ecChbMC05XSspLS8pID8/IFtcIjBcIiwgXCIwXCJdO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoc2VxTm8pO1xuICAgICAgfSlcbiAgICAgIC50b1NvcnRlZCgoYSwgYikgPT4gYiAtIGEpO1xuXG4gICAgaWYgKGZpbHRlcmVkU2Vxcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZmlsdGVyZWRTZXFzWzBdO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9KSgpO1xuXG4gIGNvbnN0IGN1cnJlbnRTZXFObyA9IG1heFNlcU5vICsgMTtcbiAgY29uc3QgZmlsZU5hbWUgPSBgcCR7Y3VycmVudFNlcU5vfS0ke25hbWV9LnRzYDtcbiAgY29uc3QgZHN0UGF0aCA9IHBhdGguam9pbihwcmFjdGljZURpciwgZmlsZU5hbWUpO1xuXG4gIGNvbnN0IGNvZGUgPSBbXG4gICAgYGltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCJzb25hbXVcIjtgLFxuICAgIFwiXCIsXG4gICAgYGNvbnNvbGUuY2xlYXIoKTtgLFxuICAgIGBjb25zb2xlLmxvZyhcIiR7ZmlsZU5hbWV9XCIpO2AsXG4gICAgXCJcIixcbiAgICBgU29uYW11LnJ1blNjcmlwdChhc3luYyAoKSA9PiB7YCxcbiAgICBgIC8vIFRPRE9gLFxuICAgIGB9KTtgLFxuICAgIFwiXCIsXG4gIF0uam9pbihcIlxcblwiKTtcbiAgYXdhaXQgd3JpdGVGaWxlKGRzdFBhdGgsIGNvZGUpO1xuXG4gIGV4ZWNTeW5jKGBjb2RlICR7ZHN0UGF0aH1gKTtcblxuICBjb25zdCBydW5Db2RlID0gYHlhcm4gbm9kZSAtciBkb3RlbnYvY29uZmlnIC0tZW5hYmxlLXNvdXJjZS1tYXBzIGRpc3QvcHJhY3RpY2VzLyR7ZmlsZU5hbWUucmVwbGFjZShcbiAgICBcIi50c1wiLFxuICAgIFwiLmpzXCIsXG4gICl9YDtcbiAgY29uc29sZS5sb2coYCR7Y2hhbGsuYmx1ZShydW5Db2RlKX0gY29waWVkIHRvIGNsaXBib2FyZC5gKTtcbiAgZXhlY1N5bmMoYGVjaG8gXCIke3J1bkNvZGV9XCIgfCBwYmNvcHlgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3R1Yl9lbnRpdHkoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmNyZWF0ZUVudGl0eSh7IGVudGl0eUlkLCB0aXRsZTogZW50aXR5SWQgfSk7XG5cbiAgY29uc3QgeyBmbGFncyB9ID0gcGFyc2VDbGlPcHRpb25zKCk7XG4gIGNvbnN0IHVzZUFJID0gZmxhZ3MuaGFzKFwiYWlcIik7XG4gIGNvbnN0IG5vQ29uZXMgPSBmbGFncy5oYXMoXCJuby1jb25lc1wiKTtcblxuICAvLyAtLW5vLWNvbmVzOiBjb25lIOyDneyEsSDsiqTtgrVcbiAgaWYgKG5vQ29uZXMpIHtcbiAgICBjb25zb2xlLmxvZyhg4pyTIEVudGl0eSAnJHtlbnRpdHlJZH0nIGNyZWF0ZWQgd2l0aG91dCBjb25lc2ApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgRW50aXR5TWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCIpO1xuICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gIGlmICghZW50aXR5KSB7XG4gICAgY29uc29sZS5lcnJvcihgRW50aXR5IG5vdCBmb3VuZDogJHtlbnRpdHlJZH1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyAtLWFpOiBMTE3snLzroZwgY29uZSDsg53shLFcbiAgaWYgKHVzZUFJKSB7XG4gICAgY29uc29sZS5sb2coYOKckyBFbnRpdHkgJyR7ZW50aXR5SWR9JyBjcmVhdGVkYCk7XG4gICAgY29uc29sZS5sb2coYPCfjJ8gR2VuZXJhdGluZyBBSS1wb3dlcmVkIGNvbmVzLi4uYCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZ0xvY2FsZSA9IFNvbmFtdS5jb25maWcuaTE4bj8uZGVmYXVsdExvY2FsZTtcbiAgICAgIGNvbnN0IGxvY2FsZSA9XG4gICAgICAgIGNvbmZpZ0xvY2FsZSA9PT0gXCJrb1wiIHx8IGNvbmZpZ0xvY2FsZSA9PT0gXCJlblwiIHx8IGNvbmZpZ0xvY2FsZSA9PT0gXCJqYVwiXG4gICAgICAgICAgPyBjb25maWdMb2NhbGVcbiAgICAgICAgICA6IFwia29cIjtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW50aXR5LmdlbmVyYXRlQ29uZXMoe1xuICAgICAgICBwcmVzZXJ2ZUV4aXN0aW5nOiBmYWxzZSxcbiAgICAgICAgb25seUVtcHR5OiBmYWxzZSxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKGDinIUgRG9uZSAoJHtyZXN1bHQudG9rZW5zVXNlZH0gdG9rZW5zKWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwiQU5USFJPUElDX0FQSV9LRVlcIikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu4p2MICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu8J+SoSBSZW1vdmUgLS1haSBmbGFnIHRvIHVzZSB0ZW1wbGF0ZSBjb25lcyBpbnN0ZWFkYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8g6riw67O4OiDthZztlIzrpr8gY29uZSDsnpDrj5kg7IOd7ISxXG4gIC8vIExMTSDsl4bsnbQgZmFrZXItbWFwcGluZ3MudHPrpbwg7Zmc7Jqp7ZWY7JesIOq4sOuzuCBjb25lIOuplO2DgOuNsOydtO2EsOulvCDsg53shLHtlanri4jri6QuXG4gIC8vIOydtOulvCDthrXtlbQgQU5USFJPUElDX0FQSV9LRVnqsIAg7JeG7Ja064+EIFNvbmFtdeulvCDsgqzsmqntlaAg7IiYIOyeiOycvOupsCxcbiAgLy8g7IOd7ISx65CcIO2FnO2UjOumvyBjb25l7J2AIOuCmOykkeyXkCAnY29uZSBnZW4nIOuqheugueyWtOuhnCBBSeulvCDthrXtlbQg7JeF6re466CI7J2065Oc7ZWgIOyImCDsnojsirXri4jri6QuXG4gIGNvbnNvbGUubG9nKGDwn4yfIEdlbmVyYXRpbmcgdGVtcGxhdGUgY29uZXMuLi5gKTtcbiAgYXdhaXQgZW50aXR5LmdlbmVyYXRlVGVtcGxhdGVDb25lcygpO1xuICBjb25zb2xlLmxvZyhg4pyTIEVudGl0eSAnJHtlbnRpdHlJZH0nIGNyZWF0ZWQgd2l0aCB0ZW1wbGF0ZSBjb25lc2ApO1xuICBjb25zb2xlLmxvZyhg8J+SoSBUaXA6IFJ1biAncG5wbSBzb25hbXUgY29uZSBnZW4gJHtlbnRpdHlJZH0nIHRvIGltcHJvdmUgd2l0aCBBSWApO1xufVxuXG4vKipcbiAqIEFJ66W8IOyCrOyaqe2VmOyXrCBlbnRpdHnsnZggY29uZSDrqZTtg4DrjbDsnbTthLDrpbwg7IOd7ISx7ZWY6rGw64KYIOyXheq3uOugiOydtOuTnO2VqeuLiOuLpC5cbiAqXG4gKiDsmLXshZg6XG4gKiAtIC0tcmVnZW5lcmF0ZTog7KCE7LK0IOyerOyDneyEsSAo6riw7KG0IGNvbmUg642u7Ja07JOw6riwKVxuICogLSAtLWxvY2FsZSA8a298ZW58amE+OiDsg53shLEg7Ja47Ja0IOyngOyglVxuICogLSDquLDrs7g6IG9ubHlFbXB0eSDrqqjrk5wgKOq4sOyhtCBmaXh0dXJlSGludCDrs7TsobQpXG4gKlxuICogQU5USFJPUElDX0FQSV9LRVkg7ZWE7JqUIChzb25hbXUuc2VjcmV0LnRzIOuYkOuKlCDtmZjqsr3rs4DsiJgpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbmVfZ2VuKGVudGl0eUlkOiBzdHJpbmcpIHtcbiAgY29uc3QgeyBFbnRpdHlNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIik7XG4gIGNvbnN0IHsgZmxhZ3MsIG9wdGlvbnMgfSA9IHBhcnNlQ2xpT3B0aW9ucygpO1xuXG4gIC8vIC0tYWxsIOyYteyFmDog66qo65OgIGVudGl0eSBjb25lIOyDneyEsVxuICBpZiAoZmxhZ3MuaGFzKFwiYWxsXCIpIHx8IGVudGl0eUlkID09PSBcImFsbFwiKSB7XG4gICAgY29uc3QgYWxsRW50aXRpZXMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbEVudGl0aWVzKCk7XG4gICAgY29uc29sZS5sb2coYPCfjJ8gR2VuZXJhdGluZyBBSS1wb3dlcmVkIGNvbmVzIGZvciAke2FsbEVudGl0aWVzLmxlbmd0aH0gZW50aXRpZXMuLi5cXG5gKTtcblxuICAgIGxldCB0b3RhbFRva2VucyA9IDA7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgYWxsRW50aXRpZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nICR7ZW50aXR5LmlkfS4uLmApO1xuICAgICAgICBjb25zdCBjb25maWdMb2NhbGUgPSBvcHRpb25zLmxvY2FsZSB8fCBTb25hbXUuY29uZmlnLmkxOG4/LmRlZmF1bHRMb2NhbGU7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9XG4gICAgICAgICAgY29uZmlnTG9jYWxlID09PSBcImtvXCIgfHwgY29uZmlnTG9jYWxlID09PSBcImVuXCIgfHwgY29uZmlnTG9jYWxlID09PSBcImphXCJcbiAgICAgICAgICAgID8gY29uZmlnTG9jYWxlXG4gICAgICAgICAgICA6IFwia29cIjtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRpdHkuZ2VuZXJhdGVDb25lcyh7XG4gICAgICAgICAgcHJlc2VydmVFeGlzdGluZzogIWZsYWdzLmhhcyhcInJlZ2VuZXJhdGVcIiksXG4gICAgICAgICAgb25seUVtcHR5OiAhZmxhZ3MuaGFzKFwicmVnZW5lcmF0ZVwiKSxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRvdGFsVG9rZW5zICs9IHJlc3VsdC50b2tlbnNVc2VkO1xuICAgICAgICBjb25zb2xlLmxvZyhgICDinJMgJHtlbnRpdHkuaWR9ICgke3Jlc3VsdC50b2tlbnNVc2VkfSB0b2tlbnMpXFxuYCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICAgICAgZXJyb3JzLnB1c2goYCR7ZW50aXR5LmlkfTogJHttZXNzYWdlfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGAgIOKclyAke2VudGl0eS5pZH06ICR7bWVzc2FnZX1cXG5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgXFxu4pyFIERvbmUhIFRvdGFsOiAke3RvdGFsVG9rZW5zfSB0b2tlbnMgdXNlZGApO1xuICAgIGNvbnN0IGVzdGltYXRlZENvc3QgPSAodG90YWxUb2tlbnMgKiA5KSAvIDFfMDAwXzAwMDtcbiAgICBjb25zb2xlLmxvZyhg8J+SsCBFc3RpbWF0ZWQgY29zdDogfiQke2VzdGltYXRlZENvc3QudG9GaXhlZCg0KX1gKTtcblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5lcnJvcihgXFxu4p2MIEZhaWxlZCBlbnRpdGllcyAoJHtlcnJvcnMubGVuZ3RofSk6YCk7XG4gICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJvcnMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgICAtICR7ZXJyfWApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyDri6jsnbwgZW50aXR5IGNvbmUg7IOd7ISxXG4gIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgaWYgKCFlbnRpdHkpIHtcbiAgICBjb25zb2xlLmVycm9yKGBFbnRpdHkgbm90IGZvdW5kOiAke2VudGl0eUlkfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG1vZGUgPSBmbGFncy5oYXMoXCJyZWdlbmVyYXRlXCIpID8gXCJyZWdlbmVyYXRpbmdcIiA6IFwiZ2VuZXJhdGluZ1wiO1xuICBjb25zb2xlLmxvZyhcbiAgICBg8J+MnyAke21vZGUgPT09IFwicmVnZW5lcmF0aW5nXCIgPyBcIlJlZ2VuZXJhdGluZ1wiIDogXCJHZW5lcmF0aW5nXCJ9IEFJLXBvd2VyZWQgY29uZXMgZm9yICR7ZW50aXR5SWR9Li4uYCxcbiAgKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZ0xvY2FsZSA9IG9wdGlvbnMubG9jYWxlIHx8IFNvbmFtdS5jb25maWcuaTE4bj8uZGVmYXVsdExvY2FsZTtcbiAgICBjb25zdCBsb2NhbGUgPVxuICAgICAgY29uZmlnTG9jYWxlID09PSBcImtvXCIgfHwgY29uZmlnTG9jYWxlID09PSBcImVuXCIgfHwgY29uZmlnTG9jYWxlID09PSBcImphXCIgPyBjb25maWdMb2NhbGUgOiBcImtvXCI7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRpdHkuZ2VuZXJhdGVDb25lcyh7XG4gICAgICBwcmVzZXJ2ZUV4aXN0aW5nOiAhZmxhZ3MuaGFzKFwicmVnZW5lcmF0ZVwiKSxcbiAgICAgIG9ubHlFbXB0eTogIWZsYWdzLmhhcyhcInJlZ2VuZXJhdGVcIiksXG4gICAgICBsb2NhbGUsXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhg4pyFIERvbmUhICgke3Jlc3VsdC50b2tlbnNVc2VkfSB0b2tlbnMgdXNlZClgKTtcblxuICAgIC8vIO2GoO2BsCDruYTsmqkg6rOE7IKwICjrjIDrnrXsoIHsnbgg7LaU7KCVKVxuICAgIC8vIENsYXVkZSBTb25uZXQgNC41OiBpbnB1dCAkMy9NIHRva2Vucywgb3V0cHV0ICQxNS9NIHRva2Vuc1xuICAgIC8vIOqwhOuLqO2VmOqyjCDtj4nqt6AgJDkvTSB0b2tlbnProZwg6rOE7IKwXG4gICAgY29uc3QgZXN0aW1hdGVkQ29zdCA9IChyZXN1bHQudG9rZW5zVXNlZCAqIDkpIC8gMV8wMDBfMDAwO1xuICAgIGNvbnNvbGUubG9nKGDwn5KwIEVzdGltYXRlZCBjb3N0OiB+JCR7ZXN0aW1hdGVkQ29zdC50b0ZpeGVkKDQpfWApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcyhcIkFOVEhST1BJQ19BUElfS0VZXCIpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbuKdjCAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbvCfkqEgVG8gdXNlIEFJLXBvd2VyZWQgY29uZSBnZW5lcmF0aW9uOmApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGAgICAxLiBHZXQgYW4gQVBJIGtleSBmcm9tIGh0dHBzOi8vY29uc29sZS5hbnRocm9waWMuY29tL2ApO1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGAgICAyLiBBZGQgaXQgdG8gc29uYW11LnNlY3JldC50cyBvciBzZXQgQU5USFJPUElDX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGVgLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwiUmF0ZSBsaW1pdFwiKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7inYwgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7wn5KhIFBsZWFzZSB3YWl0IGEgbW9tZW50IGFuZCB0cnkgYWdhaW4uYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7inYwgRmFpbGVkIHRvIGdlbmVyYXRlIGNvbmVzOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbuKdjCBGYWlsZWQgdG8gZ2VuZXJhdGUgY29uZXM6IFVua25vd24gZXJyb3JgKTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRfbW9kZWwoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXCJtb2RlbFwiLCB7XG4gICAgZW50aXR5SWQsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZF9tb2RlbF90ZXN0KGVudGl0eUlkOiBzdHJpbmcpIHtcbiAgYXdhaXQgU29uYW11LnN5bmNlci5nZW5lcmF0ZVRlbXBsYXRlKFwibW9kZWxfdGVzdFwiLCB7XG4gICAgZW50aXR5SWQsXG4gIH0pO1xufVxuXG4vKipcbiAqIHBucG0gc29uYW11IHNraWxscyBzeW5jIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog6rO17IudIFNraWxsc+ulvCDroZzsu6wg7ZSE66Gc7KCd7Yq4IOuYkOuKlCDquIDroZzrsowgfi8uY2xhdWRlL+uhnCDrj5nquLDtmZTtlanri4jri6QuXG4gKlxuICogLS1nbG9iYWwg7ZSM656Y6re4OiB+Ly5jbGF1ZGUv7JeQIOuPmeq4sO2ZlCAo7ZSE66Gc7KCd7Yq4IOyDneyEsSDsoIQg7IKs7JqpIOqwgOuKpSlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2tpbGxzX3N5bmMoKSB7XG4gIGNvbnN0IHsgZmxhZ3MgfSA9IHBhcnNlQ2xpT3B0aW9ucygpO1xuICBjb25zdCBpc0dsb2JhbCA9IGZsYWdzLmhhcyhcImdsb2JhbFwiKTtcblxuICAvLyDqsJzrsJwg7ZmY6rK9IC0gY2xpLnRzOiBzb25hbXUvbW9kdWxlcy9zb25hbXUvc3JjL2Jpbi9jbGkudHNcbiAgLy8g67mM65OcIO2bhCAtIGNsaS5qczogbm9kZV9tb2R1bGVzL3NvbmFtdS9kaXN0L2Jpbi9jbGkuanMgKOyLpOygnCDsi6TtlokpXG4gIC8vIHNraWxscyDsnITsuZg6IG5vZGVfbW9kdWxlcy9zb25hbXUvc3JjL3NraWxscyAobnBtIOuwsO2PrCDsi5wpXG4gIGNvbnN0IHNvdXJjZUJhc2UgPSBwYXRoLnJlc29sdmUoaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwic3JjXCIsIFwic2tpbGxzXCIpO1xuICBjb25zdCBzb3VyY2VTa2lsbHNEaXIgPSBwYXRoLmpvaW4oc291cmNlQmFzZSwgXCJzb25hbXVcIik7XG4gIGNvbnN0IHNvdXJjZUNsYXVkZU1kID0gcGF0aC5qb2luKHNvdXJjZUJhc2UsIFwiQ0xBVURFLm1kXCIpO1xuXG4gIGlmICghKGF3YWl0IGV4aXN0cyhzb3VyY2VTa2lsbHNEaXIpKSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIlNraWxscyBzb3VyY2Ugbm90IGZvdW5kIGluIHNvbmFtdSBwYWNrYWdlLlwiKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGlzR2xvYmFsKSB7XG4gICAgY29uc3QgaG9tZUNsYXVkZURpciA9IHBhdGguam9pbihvcy5ob21lZGlyKCksIFwiLmNsYXVkZVwiKTtcbiAgICBhd2FpdCBza2lsbHNfc3luY190byhob21lQ2xhdWRlRGlyLCBzb3VyY2VTa2lsbHNEaXIsIHNvdXJjZUNsYXVkZU1kLCB7XG4gICAgICB1c2VTeW1saW5rOiBmYWxzZSxcbiAgICAgIGNvcHlQcm9qZWN0VGVtcGxhdGVzOiBmYWxzZSxcbiAgICAgIGlzR2xvYmFsOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gfi8uY2xhdWRlL2NvbW1hbmRzL3NvbmFtdS1za2lsbHMubWQg7ISk7LmYXG4gICAgY29uc3Qgc291cmNlQ29tbWFuZHNEaXIgPSBwYXRoLmpvaW4oc291cmNlQmFzZSwgXCJjb21tYW5kc1wiKTtcbiAgICBjb25zdCBzb3VyY2VDb21tYW5kID0gcGF0aC5qb2luKHNvdXJjZUNvbW1hbmRzRGlyLCBcInNvbmFtdS1za2lsbHMubWRcIik7XG4gICAgaWYgKGF3YWl0IGV4aXN0cyhzb3VyY2VDb21tYW5kKSkge1xuICAgICAgY29uc3QgdGFyZ2V0Q29tbWFuZHNEaXIgPSBwYXRoLmpvaW4oaG9tZUNsYXVkZURpciwgXCJjb21tYW5kc1wiKTtcbiAgICAgIGF3YWl0IG1rZGlyKHRhcmdldENvbW1hbmRzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IGNwKHNvdXJjZUNvbW1hbmQsIHBhdGguam9pbih0YXJnZXRDb21tYW5kc0RpciwgXCJzb25hbXUtc2tpbGxzLm1kXCIpKTtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgL3NvbmFtdS1za2lsbHMgY29tbWFuZCBpbnN0YWxsZWQg4oaSIH4vLmNsYXVkZS9jb21tYW5kcy9gKSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxuICBHbG9iYWwgc3luYyBjb21wbGV0ZSDihpIgfi8uY2xhdWRlL3NraWxscy9zb25hbXUvYCkpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBUaGVzZSBza2lsbHMgYXJlIGF2YWlsYWJsZSBpbiBhbGwgQ2xhdWRlIENvZGUgc2Vzc2lvbnMuYCkpO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsuZGltKFxuICAgICAgICBgICBPbmNlIGEgcHJvamVjdCBpcyBjcmVhdGVkLCBydW4gJ3BucG0gc29uYW11IHNraWxscyBzeW5jJyBmb3IgcHJvamVjdC1sb2NhbCBzeW5jLmAsXG4gICAgICApLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgd29ya3NwYWNlUm9vdCA9IGF3YWl0IGZpbmRXb3Jrc3BhY2VSb290KCk7XG4gICAgY29uc3QgY2xhdWRlRGlyID0gcGF0aC5qb2luKHdvcmtzcGFjZVJvb3QsIFwiLmNsYXVkZVwiKTtcbiAgICBhd2FpdCBza2lsbHNfc3luY190byhjbGF1ZGVEaXIsIHNvdXJjZVNraWxsc0Rpciwgc291cmNlQ2xhdWRlTWQsIHtcbiAgICAgIHVzZVN5bWxpbms6IHRydWUsXG4gICAgICBjb3B5UHJvamVjdFRlbXBsYXRlczogdHJ1ZSxcbiAgICAgIHNvdXJjZUJhc2UsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBjbGF1ZGVEaXLroZwgc2tpbGxz66W8IOuPmeq4sO2ZlO2VmOuKlCDqs7XthrUg66Gc7KeB7J6F64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBza2lsbHNfc3luY190byhcbiAgY2xhdWRlRGlyOiBzdHJpbmcsXG4gIHNvdXJjZVNraWxsc0Rpcjogc3RyaW5nLFxuICBzb3VyY2VDbGF1ZGVNZDogc3RyaW5nLFxuICBvcHRpb25zOiB7XG4gICAgdXNlU3ltbGluazogYm9vbGVhbjtcbiAgICBjb3B5UHJvamVjdFRlbXBsYXRlczogYm9vbGVhbjtcbiAgICBzb3VyY2VCYXNlPzogc3RyaW5nO1xuICAgIGlzR2xvYmFsPzogYm9vbGVhbjtcbiAgfSxcbikge1xuICBjb25zdCB0YXJnZXRTa2lsbHNEaXIgPSBwYXRoLmpvaW4oY2xhdWRlRGlyLCBcInNraWxsc1wiLCBcInNvbmFtdVwiKTtcblxuICAvLyDquLDsobQg65SU66CJ7Yag66asL3N5bWxpbmsg7IKt7KCcIO2bhCDsnqzsg53shLFcbiAgLy8gZXhpc3RzKCnripQgYnJva2VuIHN5bWxpbmvrpbwg6rCQ7KeA7ZWY7KeAIOuqu+2VmOuvgOuhnCBybeydhCDrrLTsobDqsbQg7Iuc64+E7ZWp64uI64ukXG4gIHRyeSB7XG4gICAgYXdhaXQgcm0odGFyZ2V0U2tpbGxzRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIO2MjOydvOydtCDsl4bsnLzrqbQg66y07IucXG4gIH1cblxuICBhd2FpdCBta2RpcihwYXRoLmRpcm5hbWUodGFyZ2V0U2tpbGxzRGlyKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgaWYgKG9wdGlvbnMudXNlU3ltbGluaykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzeW1saW5rKHNvdXJjZVNraWxsc0RpciwgdGFyZ2V0U2tpbGxzRGlyLCBcImRpclwiKTtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgU2tpbGxzIGxpbmtlZCAoc3ltbGluaylgKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjaGFsay55ZWxsb3coYOKaoCBTeW1saW5rIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCksXG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGAgIEZhbGxpbmcgYmFjayB0byBjb3B5Li4uYCkpO1xuICAgICAgYXdhaXQgc2tpbGxzQ29weShzb3VyY2VTa2lsbHNEaXIsIHRhcmdldFNraWxsc0Rpcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGF3YWl0IHNraWxsc0NvcHkoc291cmNlU2tpbGxzRGlyLCB0YXJnZXRTa2lsbHNEaXIpO1xuICB9XG5cbiAgLy8gcHJvamVjdCDrlJTroInthqDrpqwg7LSI6riw7ZmUICjsl4bsnLzrqbQg7IOd7ISxLCDsnojsnLzrqbQg7Jyg7KeAKVxuICBpZiAob3B0aW9ucy5jb3B5UHJvamVjdFRlbXBsYXRlcyAmJiBvcHRpb25zLnNvdXJjZUJhc2UpIHtcbiAgICBjb25zdCBzb3VyY2VQcm9qZWN0RGlyID0gcGF0aC5qb2luKG9wdGlvbnMuc291cmNlQmFzZSwgXCJwcm9qZWN0XCIpO1xuICAgIGNvbnN0IHRhcmdldFByb2plY3REaXIgPSBwYXRoLmpvaW4oY2xhdWRlRGlyLCBcInNraWxsc1wiLCBcInByb2plY3RcIik7XG5cbiAgICBpZiAoYXdhaXQgZXhpc3RzKHNvdXJjZVByb2plY3REaXIpKSB7XG4gICAgICBpZiAoIShhd2FpdCBleGlzdHModGFyZ2V0UHJvamVjdERpcikpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgY3Aoc291cmNlUHJvamVjdERpciwgdGFyZ2V0UHJvamVjdERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBQcm9qZWN0IHRlbXBsYXRlcyBpbml0aWFsaXplZGApKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgY2hhbGsucmVkKFxuICAgICAgICAgICAgICBg4pyXIEZhaWxlZCB0byBpbml0aWFsaXplIHByb2plY3QgdGVtcGxhdGVzOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oYOKPrSBQcm9qZWN0IHRlbXBsYXRlcyBhbHJlYWR5IGV4aXN0IChwcmVzZXJ2ZWQpYCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHNldHRpbmdzLmxvY2FsLmpzb24g4oCUIHByb2plY3QtbG9jYWwg66qo65Oc7JeQ7ISc66eMLCDsl4bsnYQg65WM66eMIOyDneyEsVxuICBpZiAob3B0aW9ucy5jb3B5UHJvamVjdFRlbXBsYXRlcykge1xuICAgIGNvbnN0IHNldHRpbmdzTG9jYWxQYXRoID0gcGF0aC5qb2luKGNsYXVkZURpciwgXCJzZXR0aW5ncy5sb2NhbC5qc29uXCIpO1xuICAgIGlmICghKGF3YWl0IGV4aXN0cyhzZXR0aW5nc0xvY2FsUGF0aCkpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXR0aW5nc0NvbnRlbnQgPSB7XG4gICAgICAgICAgaG9va3M6IHtcbiAgICAgICAgICAgIFBvc3RUb29sVXNlOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVyOiBcIkVkaXR8V3JpdGV8TXVsdGlFZGl0XCIsXG4gICAgICAgICAgICAgICAgaG9va3M6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjb21tYW5kXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IFwicG5wbSBjaGVjayAyPiYxIHwgaGVhZCAtNjBcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHNldHRpbmdzTG9jYWxQYXRoLCBgJHtKU09OLnN0cmluZ2lmeShzZXR0aW5nc0NvbnRlbnQsIG51bGwsIDIpfVxcbmApO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIC5jbGF1ZGUvc2V0dGluZ3MubG9jYWwuanNvbiBjcmVhdGVkYCkpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBjaGFsay5yZWQoXG4gICAgICAgICAgICBg4pyXIEZhaWxlZCB0byBjcmVhdGUgc2V0dGluZ3MubG9jYWwuanNvbjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oYOKPrSAuY2xhdWRlL3NldHRpbmdzLmxvY2FsLmpzb24gYWxyZWFkeSBleGlzdHMgKHByZXNlcnZlZClgKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ0xBVURFLm1kIOuzteyCrC/sl4XrjbDsnbTtirhcbiAgaWYgKGF3YWl0IGV4aXN0cyhzb3VyY2VDbGF1ZGVNZCkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGFyZ2V0Q2xhdWRlTWQgPSBwYXRoLmpvaW4oY2xhdWRlRGlyLCBcIkNMQVVERS5tZFwiKTtcbiAgICAgIGNvbnN0IHJhd0NvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShzb3VyY2VDbGF1ZGVNZCwgXCJ1dGYtOFwiKTtcbiAgICAgIC8vIOq4gOuhnOuyjCDrqqjrk5zsl5DshJzripQg7IOB64yAIOqyveuhnOulvCDsoIjrjIAg6rK966Gc66GcIOuzgO2ZmO2VqeuLiOuLpFxuICAgICAgY29uc3Qgc291cmNlQ29udGVudCA9IG9wdGlvbnMuaXNHbG9iYWxcbiAgICAgICAgPyByYXdDb250ZW50LnJlcGxhY2VBbGwoXCIuY2xhdWRlL3NraWxscy9zb25hbXUvXCIsIFwifi8uY2xhdWRlL3NraWxscy9zb25hbXUvXCIpXG4gICAgICAgIDogcmF3Q29udGVudDtcblxuICAgICAgaWYgKGF3YWl0IGV4aXN0cyh0YXJnZXRDbGF1ZGVNZCkpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0Q29udGVudCA9IGF3YWl0IHJlYWRGaWxlKHRhcmdldENsYXVkZU1kLCBcInV0Zi04XCIpO1xuICAgICAgICBjb25zdCBzdGFydE1hcmtlciA9IFwiPCEtLSBTT05BTVU6U1RBUlQgLS0+XCI7XG4gICAgICAgIGNvbnN0IGVuZE1hcmtlciA9IFwiPCEtLSBTT05BTVU6RU5EIC0tPlwiO1xuICAgICAgICBpZiAodGFyZ2V0Q29udGVudC5pbmNsdWRlcyhzdGFydE1hcmtlcikgJiYgdGFyZ2V0Q29udGVudC5pbmNsdWRlcyhlbmRNYXJrZXIpKSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRJZHggPSB0YXJnZXRDb250ZW50LmluZGV4T2Yoc3RhcnRNYXJrZXIpO1xuICAgICAgICAgIGNvbnN0IGVuZElkeCA9IHRhcmdldENvbnRlbnQuaW5kZXhPZihlbmRNYXJrZXIpO1xuXG4gICAgICAgICAgaWYgKHN0YXJ0SWR4ICE9PSAtMSAmJiBlbmRJZHggIT09IC0xICYmIHN0YXJ0SWR4IDwgZW5kSWR4KSB7XG4gICAgICAgICAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXRDb250ZW50LnN1YnN0cmluZygwLCBzdGFydElkeCk7XG4gICAgICAgICAgICBjb25zdCBhZnRlciA9IHRhcmdldENvbnRlbnQuc3Vic3RyaW5nKGVuZElkeCArIGVuZE1hcmtlci5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGAke2JlZm9yZX0ke3N0YXJ0TWFya2VyfVxcbiR7c291cmNlQ29udGVudH1cXG4ke2VuZE1hcmtlcn0ke2FmdGVyfWA7XG4gICAgICAgICAgICBhd2FpdCB3cml0ZUZpbGUodGFyZ2V0Q2xhdWRlTWQsIG5ld0NvbnRlbnQpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBDTEFVREUubWQgdXBkYXRlZCAobWFya2VyIHJlZ2lvbilgKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhg4o+tIENMQVVERS5tZCBtYXJrZXIgcG9zaXRpb25zIGludmFsaWQsIHNraXBwZWRgKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIOuniOy7pOqwgCDsl4bripQg6riw7KG0IENMQVVERS5tZOyXkCBTb25hbXUg7IS57IWY7J2EIOy2lOqwgO2VqeuLiOuLpFxuICAgICAgICAgIGNvbnN0IGFwcGVuZGVkID0gYCR7dGFyZ2V0Q29udGVudC50cmltRW5kKCl9XFxuXFxuPCEtLSBTT05BTVU6U1RBUlQgLS0+XFxuJHtzb3VyY2VDb250ZW50fVxcbjwhLS0gU09OQU1VOkVORCAtLT5cXG5gO1xuICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZSh0YXJnZXRDbGF1ZGVNZCwgYXBwZW5kZWQpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgQ0xBVURFLm1kIHVwZGF0ZWQgKGFwcGVuZGVkIFNvbmFtdSBzZWN0aW9uKWApKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgd2l0aE1hcmtlcnMgPSBgPCEtLSBTT05BTVU6U1RBUlQgLS0+XFxuJHtzb3VyY2VDb250ZW50fVxcbjwhLS0gU09OQU1VOkVORCAtLT5cXG5gO1xuICAgICAgICBhd2FpdCB3cml0ZUZpbGUodGFyZ2V0Q2xhdWRlTWQsIHdpdGhNYXJrZXJzKTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBDTEFVREUubWQgY3JlYXRlZGApKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgY2hhbGsucmVkKFxuICAgICAgICAgIGDinJcgRmFpbGVkIHRvIHVwZGF0ZSBDTEFVREUubWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBza2lsbHNDb3B5KHNyYzogc3RyaW5nLCBkZXN0OiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjcChzcmMsIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgU2tpbGxzIGNvcGllZGApKTtcbiAgfSBjYXRjaCAoY29weUVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGNoYWxrLnJlZChcbiAgICAgICAgYOKclyBGYWlsZWQgdG8gY29weSBza2lsbHM6ICR7Y29weUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBjb3B5RXJyb3IubWVzc2FnZSA6IFN0cmluZyhjb3B5RXJyb3IpfWAsXG4gICAgICApLFxuICAgICk7XG4gICAgdGhyb3cgY29weUVycm9yO1xuICB9XG59XG5cbi8qKlxuICogcG5wbSBzb25hbXUgc2tpbGxzIGNyZWF0ZSA8bmFtZT4g7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDroZzsu6wgc2tpbGwg7LSI7JWI7J2EIOyDneyEse2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2tpbGxzX2NyZWF0ZShuYW1lOiBzdHJpbmcpIHtcbiAgY29uc3Qgd29ya3NwYWNlUm9vdCA9IGF3YWl0IGZpbmRXb3Jrc3BhY2VSb290KCk7XG4gIGNvbnN0IGxvY2FsRGlyID0gcGF0aC5qb2luKHdvcmtzcGFjZVJvb3QsIFwiLmNsYXVkZVwiLCBcInNraWxsc1wiLCBcImxvY2FsXCIpO1xuXG4gIC8vID09PSDtjIzsnbzrqoUg6rKA7KadIOuwjyBTYW5pdGl6ZSA9PT1cbiAgaWYgKCFuYW1lIHx8IG5hbWUudHJpbSgpID09PSBcIlwiKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCLinJcgU2tpbGwgbmFtZSBpcyByZXF1aXJlZFwiKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHNhbml0aXplZCA9IG5hbWVcbiAgICAvLyDqs7XrsLHsnYQg7ZWY7J207ZSI7Jy866GcXG4gICAgLnJlcGxhY2UoL1xccysvZywgXCItXCIpXG4gICAgLy8g6rK966GcIOq1rOu2hOyekCDsoJzqsbBcbiAgICAucmVwbGFjZSgvWy9cXFxcXS9nLCBcIi1cIilcbiAgICAvLyBQYXRoIHRyYXZlcnNhbCDrsKnsp4BcbiAgICAucmVwbGFjZSgvXFwuXFwuL2csIFwiXCIpXG4gICAgLy8gV2luZG93cyDquIjsp4Ag66y47J6QIOygnOqxsFxuICAgIC5yZXBsYWNlKC9bPD46XCJ8PypdL2csIFwiXCIpXG4gICAgLy8g7Iuc7J6RL+uBnSDsoJAsIO2VmOydtO2UiCwg7Ja4642U7Iqk7L2U7Ja0IOygnOqxsFxuICAgIC5yZXBsYWNlKC9eWy5cXC1fXSt8Wy5cXC1fXSskL2csIFwiXCIpXG4gICAgLy8g7Jew7IaN65CcIO2VmOydtO2UiOydhCDtlZjrgpjroZxcbiAgICAucmVwbGFjZSgvLSsvZywgXCItXCIpXG4gICAgLy8g7JWM7YyM67KzLCDsiKvsnpAsIO2VmOydtO2UiCwg7Ja4642U7Iqk7L2U7Ja0LCDtlZzquIDrp4wg7ZeI7JqpXG4gICAgLnJlcGxhY2UoL1teYS16QS1aMC05LV/qsIAt7Z6jXS9nLCBcIlwiKTtcblxuICAvLyDquLjsnbQg7KCc7ZWcXG4gIGNvbnN0IE1BWF9MRU5HVEggPSAxMDA7XG4gIGlmIChzYW5pdGl6ZWQubGVuZ3RoID4gTUFYX0xFTkdUSCkge1xuICAgIHNhbml0aXplZCA9IHNhbml0aXplZC5zdWJzdHJpbmcoMCwgTUFYX0xFTkdUSCk7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGDimqAgTmFtZSB0cnVuY2F0ZWQgdG8gJHtNQVhfTEVOR1RIfSBjaGFyYWN0ZXJzYCkpO1xuICB9XG5cbiAgLy8gV2luZG93cyDsmIjslb3slrQg7ZmV7J24XG4gIGNvbnN0IFJFU0VSVkVEX05BTUVTID0gW1xuICAgIFwiQ09OXCIsXG4gICAgXCJQUk5cIixcbiAgICBcIkFVWFwiLFxuICAgIFwiTlVMXCIsXG4gICAgXCJDT00xXCIsXG4gICAgXCJDT00yXCIsXG4gICAgXCJDT00zXCIsXG4gICAgXCJDT000XCIsXG4gICAgXCJDT001XCIsXG4gICAgXCJDT002XCIsXG4gICAgXCJDT003XCIsXG4gICAgXCJDT004XCIsXG4gICAgXCJDT005XCIsXG4gICAgXCJMUFQxXCIsXG4gICAgXCJMUFQyXCIsXG4gICAgXCJMUFQzXCIsXG4gICAgXCJMUFQ0XCIsXG4gICAgXCJMUFQ1XCIsXG4gICAgXCJMUFQ2XCIsXG4gICAgXCJMUFQ3XCIsXG4gICAgXCJMUFQ4XCIsXG4gICAgXCJMUFQ5XCIsXG4gIF07XG4gIGlmIChSRVNFUlZFRF9OQU1FUy5pbmNsdWRlcyhzYW5pdGl6ZWQudG9VcHBlckNhc2UoKSkpIHtcbiAgICBzYW5pdGl6ZWQgPSBgc2tpbGwtJHtzYW5pdGl6ZWR9YDtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYOKaoCBSZXNlcnZlZCBuYW1lIGRldGVjdGVkLCBwcmVmaXhlZCB3aXRoIFwic2tpbGwtXCJgKSk7XG4gIH1cblxuICAvLyDruYgg66y47J6Q7Je0IOyytO2BrFxuICBpZiAoc2FuaXRpemVkID09PSBcIlwiKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCLinJcgSW52YWxpZCBza2lsbCBuYW1lIGFmdGVyIHNhbml0aXphdGlvblwiKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZGltKGAgIE9yaWdpbmFsOiBcIiR7bmFtZX1cImApKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyDrs4Dqsr0g7JWM66a8XG4gIGlmIChzYW5pdGl6ZWQgIT09IG5hbWUpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYOKaoCBOYW1lIHNhbml0aXplZDogXCIke25hbWV9XCIg4oaSIFwiJHtzYW5pdGl6ZWR9XCJgKSk7XG4gIH1cblxuICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihsb2NhbERpciwgYCR7c2FuaXRpemVkfS5tZGApO1xuXG4gIGlmIChhd2FpdCBleGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGBTa2lsbCBcIiR7c2FuaXRpemVkfVwiIGFscmVhZHkgZXhpc3RzLmApKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBta2Rpcihsb2NhbERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBgLS0tXG5uYW1lOiAke3Nhbml0aXplZH1cbmNhdGVnb3J5OiBvdGhlclxuY3JlYXRlZF9hdDogJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdfVxuc3RhdHVzOiBkcmFmdFxuLS0tXG5cbiMgJHtzYW5pdGl6ZWR9XG5cbiMjIOyDge2ZqVxuXG5b7Ja065akIOusuOygnOyYgOuKlOyngF1cblxuIyMg7ZW06rKwIOuwqeuylVxuXG5b7Ja065a76rKMIO2VtOqysO2WiOuKlOyngF1cblxuIyMg7L2U65OcIOyYiOyLnFxuXG5cXGBcXGBcXGB0eXBlc2NyaXB0XG4vLyDsmIjsi5wg7L2U65OcXG5cXGBcXGBcXGBcbmA7XG5cbiAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCB0ZW1wbGF0ZSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgQ3JlYXRlZCAuY2xhdWRlL3NraWxscy9sb2NhbC8ke3Nhbml0aXplZH0ubWRgKSk7XG59XG5cbi8qKlxuICogcG5wbSBzb25hbXUgYXV0aCBnZW5lcmF0ZSDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIGJldHRlci1hdXRoIOyXlO2LsO2LsOuTpChVc2VyLCBTZXNzaW9uLCBBY2NvdW50LCBWZXJpZmljYXRpb24p7J2EIOyDneyEse2VqeuLiOuLpC5cbiAqXG4gKiDsmLXshZg6XG4gKiAtLXBsdWdpbnMgcGhvbmUtbnVtYmVyLDJmYSAg7ZSM65+s6re47J24IOyXlO2LsO2LsOuPhCDtlajqu5gg7IOd7ISxXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGF1dGhfZ2VuZXJhdGUoKSB7XG4gIC8vIC0tcGx1Z2lucyDsmLXshZgg7YyM7IuxXG4gIGNvbnN0IHBsdWdpbnNBcmcgPSBwcm9jZXNzLmFyZ3YuZmluZCgoYXJnKSA9PiBhcmcuc3RhcnRzV2l0aChcIi0tcGx1Z2luc1wiKSk7XG4gIGNvbnN0IHBsdWdpbnM6IEJldHRlckF1dGhQbHVnaW5JZFtdID0gW107XG5cbiAgaWYgKHBsdWdpbnNBcmcpIHtcbiAgICBjb25zdCBwbHVnaW5WYWx1ZSA9IHBsdWdpbnNBcmcuaW5jbHVkZXMoXCI9XCIpXG4gICAgICA/IHBsdWdpbnNBcmcuc3BsaXQoXCI9XCIpWzFdXG4gICAgICA6IHByb2Nlc3MuYXJndltwcm9jZXNzLmFyZ3YuaW5kZXhPZihwbHVnaW5zQXJnKSArIDFdO1xuXG4gICAgaWYgKHBsdWdpblZhbHVlKSB7XG4gICAgICBjb25zdCBwbHVnaW5JZHMgPSBwbHVnaW5WYWx1ZS5zcGxpdChcIixcIikubWFwKChwKSA9PiBwLnRyaW0oKSk7XG5cbiAgICAgIGZvciAoY29uc3QgaWQgb2YgcGx1Z2luSWRzKSB7XG4gICAgICAgIGlmIChpc1ZhbGlkUGx1Z2luSWQoaWQpKSB7XG4gICAgICAgICAgcGx1Z2lucy5wdXNoKGlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYOKaoCBVbmtub3duIHBsdWdpbjogJHtpZH1gKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKGAgIFN1cHBvcnRlZCBwbHVnaW5zOiAke1NVUFBPUlRFRF9QTFVHSU5fSURTLmpvaW4oXCIsIFwiKX1gKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIvCflJAgR2VuZXJhdGluZyBiZXR0ZXItYXV0aCBlbnRpdGllcy4uLlxcblwiKSk7XG5cbiAgaWYgKHBsdWdpbnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBQbHVnaW5zOiAke3BsdWdpbnMuam9pbihcIiwgXCIpfWApKTtcbiAgfVxuXG4gIGF3YWl0IGdlbmVyYXRlQmV0dGVyQXV0aEVudGl0aWVzKHsgcGx1Z2lucyB9KTtcbn1cblxuLyoqXG4gKiBwbnBtIHNvbmFtdSBhdXRoIGFkZC1jb21wYW5pb25zIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog6riw7KG0IO2UhOuhnOygne2KuOydmCBlbnRpdHkuanNvbuyXkCBmaXh0dXJlQ29tcGFuaW9uc+ulvCDshozquIkg7LaU6rCA7ZWp64uI64ukLlxuICpcbiAqIOydtOuvuCBmaXh0dXJlQ29tcGFuaW9uc+qwgCDsnojripQgZW50aXR564qUIOyKpO2Cte2VqeuLiOuLpCAo642u7Ja07JOw6riwIOyXhuydjCkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGF1dGhfYWRkX2NvbXBhbmlvbnMoKSB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdy5ib2xkKFwi8J+UkCBBZGRpbmcgZml4dHVyZUNvbXBhbmlvbnMgdG8gYmV0dGVyLWF1dGggZW50aXRpZXMuLi5cXG5cIikpO1xuICBhd2FpdCBhZGRDb21wYW5pb25zVG9FbnRpdGllcygpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKFwiXFxu4pyFIERvbmUhXCIpKTtcbn1cblxuLyoqXG4gKiDsm4ztgazsiqTtjpjsnbTsiqQg66Oo7Yq466W8IOywvuyKteuLiOuLpC5cbiAqIOyasOyEoOyInOychDogcG5wbS13b3Jrc3BhY2UueWFtbCA+IHBhY2thZ2UuanNvbih3b3Jrc3BhY2VzKSA+IC5hZ2VudHMvXG4gKlxuICogQ0xBVURFLm1k64qUIOyEnOu4jO2MqO2CpOyngOyXkOuPhCDsobTsnqztlaAg7IiYIOyeiOycvOuvgOuhnCDsgqzsmqntlZjsp4Ag7JWK7Iq164uI64ukLlxuICogLmFnZW50cy/ripQgYWdlbnRzIGluaXTsnbQg7IOd7ISx7ZWY64qUIOuUlOugie2GoOumrOuhnCwg7JuM7YGs7Iqk7Y6Y7J207IqkIOujqO2KuOyXkOunjCDsobTsnqztlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpbmRXb3Jrc3BhY2VSb290KCkge1xuICBsZXQgZGlyID0gcHJvY2Vzcy5jd2QoKTtcblxuICB3aGlsZSAoZGlyICE9PSBwYXRoLmRpcm5hbWUoZGlyKSkge1xuICAgIC8vIDEuIHBucG0td29ya3NwYWNlLnlhbWw6IO2ZleyLpO2VnCBtb25vcmVwbyDro6jtirguXG4gICAgaWYgKGF3YWl0IGV4aXN0cyhwYXRoLmpvaW4oZGlyLCBcInBucG0td29ya3NwYWNlLnlhbWxcIikpKSB7XG4gICAgICByZXR1cm4gZGlyO1xuICAgIH1cblxuICAgIC8vIDIuIHBhY2thZ2UuanNvbuyXkCB3b3Jrc3BhY2VzIO2VhOuTnOqwgCDsnojsnLzrqbQgbW9ub3JlcG8g66Oo7Yq4LlxuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gcGF0aC5qb2luKGRpciwgXCJwYWNrYWdlLmpzb25cIik7XG4gICAgaWYgKGF3YWl0IGV4aXN0cyhwYWNrYWdlUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYWNrYWdlUGF0aCwgXCJ1dGYtOFwiKSk7XG4gICAgICAgIGlmIChwYWNrYWdlSnNvbi53b3Jrc3BhY2VzKSB7XG4gICAgICAgICAgcmV0dXJuIGRpcjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIO2MjOyLsSDsi6TtjKjsi5wg66y07IucXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gLmFnZW50cy86IGFnZW50cyBpbml07J20IOyDneyEse2VnCDrlJTroInthqDrpqwuIOyEnOu4jO2MqO2CpOyngOyXkOuKlCDsobTsnqztlZjsp4Ag7JWK7J2MLlxuICAgIGlmIChhd2FpdCBleGlzdHMocGF0aC5qb2luKGRpciwgXCIuYWdlbnRzXCIpKSkge1xuICAgICAgcmV0dXJuIGRpcjtcbiAgICB9XG5cbiAgICBkaXIgPSBwYXRoLmRpcm5hbWUoZGlyKTtcbiAgfVxuXG4gIC8vIOywvuyngCDrqrvtlZjrqbQgYXBpIO2PtOuNlOydmCDrtoDrqqgg7IKs7JqpXG4gIHJldHVybiBmaW5kQXBwUm9vdFBhdGgoKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztZQWFzQztvQkFLa0I7U0FDWDtjQUNHO3FCQUNXO2tCQVE3QjtjQUNZO1dBQ3VCO0FBT2pFLElBQUk7Ozs7QUFLSixTQUFTLGdCQUFnQixPQUFpQixRQUFRLE1BR2hEO0NBQ0EsTUFBTSx3QkFBUSxJQUFJLElBQVk7Q0FDOUIsTUFBTSxVQUFrQyxDQUFDO0NBRXpDLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsS0FBSztFQUNwQyxNQUFNLE1BQU0sS0FBSztFQUNqQixJQUFJLENBQUMsSUFBSSxXQUFXLElBQUksR0FBRztFQUczQixJQUFJLElBQUksU0FBUyxHQUFHLEdBQUc7R0FDckIsTUFBTSxDQUFDLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHO0dBQzNDLFFBQVEsT0FBTztHQUNmO0VBQ0Y7RUFHQSxNQUFNLFVBQVUsS0FBSyxJQUFJO0VBQ3pCLElBQUksV0FBVyxDQUFDLFFBQVEsV0FBVyxJQUFJLEtBQUssQ0FBQyxRQUFRLFdBQVcsR0FBRyxHQUFHO0dBQ3BFLFFBQVEsSUFBSSxNQUFNLENBQUMsS0FBSztHQUN4QjtFQUNGLE9BRUUsTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLENBQUM7Q0FFMUI7Q0FFQSxPQUFPO0VBQUU7RUFBTztDQUFRO0FBQzFCO0FBRUEsZUFBZSxZQUFZO0NBRXpCLElBQUksQ0FEYztFQUFDO0VBQU87RUFBUztFQUFTO0VBQVU7Q0FBTSxDQUFDLENBQUMsU0FBUyxRQUFRLEtBQUssTUFBTSxFQUNyRixHQUNILE1BQU0sT0FBTyxLQUFLLE9BQU8sS0FBSztDQUdoQyxJQUFJO0VBSUYsTUFBTSxlQUF5QixDQUFDO0VBQ2hD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
|
|
1087
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgZXhlY1N5bmMsIHNwYXduIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGNwLCBta2RpciwgcmVhZGRpciwgcmVhZEZpbGUsIHJtLCBzeW1saW5rLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcInByb2Nlc3NcIjtcblxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IGtuZXggZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgeyB0c2ljbGkgfSBmcm9tIFwidHNpY2xpXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBhZGRDb21wYW5pb25zVG9FbnRpdGllcywgZ2VuZXJhdGVCZXR0ZXJBdXRoRW50aXRpZXMgfSBmcm9tIFwiLi4vYXV0aC9hdXRoLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgaXNWYWxpZFBsdWdpbklkLCBTVVBQT1JURURfUExVR0lOX0lEUyB9IGZyb20gXCIuLi9hdXRoL3BsdWdpbnMvZW50aXR5LWRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyB0eXBlIEJldHRlckF1dGhQbHVnaW5JZCB9IGZyb20gXCIuLi9hdXRoL3BsdWdpbnMvZW50aXR5LWRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyB0eXBlIFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgZ2V0U29uYW11RW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vZW52XCI7XG5pbXBvcnQgeyBNaWdyYXRvciB9IGZyb20gXCIuLi9taWdyYXRpb24vbWlncmF0b3JcIjtcbmltcG9ydCB7IEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBleGVjV2l0aExpbmVQcmVmaXgsXG4gIHByaW50QnVpbGRTdW1tYXJ5LFxuICBwcmludFRhc2tGYWlsZWQsXG4gIHByaW50VGFza0hlYWRlcixcbiAgcHJpbnRUYXNrU3RhcnQsXG4gIHByaW50VGFza1N1Y2Nlc3MsXG59IGZyb20gXCIuLi91dGlscy9jb25zb2xlLXV0aWxcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuaW1wb3J0IHsgZmluZEFwaVJvb3RQYXRoLCBmaW5kQXBwUm9vdFBhdGggfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IEFQSV9BUlRJRkFDVFMsIFdFQl9BUlRJRkFDVFMgfSBmcm9tIFwiLi9idWlsZC1jb25maWdcIjtcbmltcG9ydCB7IHR5cGUgQnVpbGRBcnRpZmFjdCB9IGZyb20gXCIuL2J1aWxkLWNvbmZpZ1wiO1xuaW1wb3J0IHsgZml4dHVyZUV4cGxvcmVDb21tYW5kLCBmaXh0dXJlRmV0Y2hDb21tYW5kLCBmaXh0dXJlR2VuQ29tbWFuZCB9IGZyb20gXCIuL2ZpeHR1cmVcIjtcbmltcG9ydCB7IGdldE1pZ3JhdGVSdW5UYXJnZXRzIH0gZnJvbSBcIi4vbWlncmF0ZS10YXJnZXRzXCI7XG5pbXBvcnQgeyB0ZXN0Q29tbWFuZCB9IGZyb20gXCIuL3Rlc3QtY29tbWFuZFwiO1xuXG5sZXQgbWlncmF0b3I6IE1pZ3JhdG9yO1xuXG4vKipcbiAqIENMSSDsmLXshZjsnYQg7YyM7Iux7ZWY64qUIO2XrO2NvCDtlajsiJhcbiAqL1xuZnVuY3Rpb24gcGFyc2VDbGlPcHRpb25zKGFyZ3Y6IHN0cmluZ1tdID0gcHJvY2Vzcy5hcmd2KToge1xuICBmbGFnczogU2V0PHN0cmluZz47IC8vIC0tcmVnZW5lcmF0ZSwgLS1haSwgLS1uby1jb25lcyDrk7FcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgLy8gLS1sb2NhbGUga28g65OxXG59IHtcbiAgY29uc3QgZmxhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFyZyA9IGFyZ3ZbaV07XG4gICAgaWYgKCFhcmcuc3RhcnRzV2l0aChcIi0tXCIpKSBjb250aW51ZTtcblxuICAgIC8vIC0tb3B0aW9uPXZhbHVlIO2YleyLnVxuICAgIGlmIChhcmcuaW5jbHVkZXMoXCI9XCIpKSB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBhcmcuc2xpY2UoMikuc3BsaXQoXCI9XCIpO1xuICAgICAgb3B0aW9uc1trZXldID0gdmFsdWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyAtLW9wdGlvbiB2YWx1ZSDtmJXsi53snbjsp4Ag7ZmV7J24XG4gICAgY29uc3QgbmV4dEFyZyA9IGFyZ3ZbaSArIDFdO1xuICAgIGlmIChuZXh0QXJnICYmICFuZXh0QXJnLnN0YXJ0c1dpdGgoXCItLVwiKSAmJiAhbmV4dEFyZy5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgb3B0aW9uc1thcmcuc2xpY2UoMildID0gbmV4dEFyZztcbiAgICAgIGkrKzsgLy8g64uk7J2MIGFyZ+uKlCDqsJLsnbTrr4DroZwg7Iqk7YK1XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC0tZmxhZyDtmJXsi51cbiAgICAgIGZsYWdzLmFkZChhcmcuc2xpY2UoMikpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGZsYWdzLCBvcHRpb25zIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcCgpIHtcbiAgY29uc3Qgbm90VG9Jbml0ID0gW1wiZGV2XCIsIFwiYnVpbGRcIiwgXCJzdGFydFwiLCBcInNraWxsc1wiLCBcInRlc3RcIl0uaW5jbHVkZXMocHJvY2Vzcy5hcmd2WzJdID8/IFwiXCIpO1xuICBpZiAoIW5vdFRvSW5pdCkge1xuICAgIGF3YWl0IFNvbmFtdS5pbml0KGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIHRzaWNsaeuKlCDsoJXtmZXtlZwg66qF66C57Ja0IOunpOy5reunjCDsp4Dsm5DtlZjrr4DroZwsIC0t66GcIOyLnOyeke2VmOuKlCDsmLXshZjqs7wg6re4IOqwkuydhCDtlYTthLDrp4Htlanri4jri6QuXG4gICAgLy8g7Ji17IWYIO2MjOyLseydgCDqsIEgcnVubmVyIO2VqOyImOyXkOyEnCDsm5Drs7ggcHJvY2Vzcy5hcmd266W8IOyCrOyaqe2VmOyXrCDsiJjtlontlanri4jri6QuXG4gICAgLy8gXCItLVwiKGJhcmUgZG91YmxlIGRhc2gp64qUIHBhc3N0aHJvdWdoIOq1rOu2hOyekOydtOuvgOuhnCwg6re4IOuSpOydmCDrqqjrk6Ag7J247J6Q64+EIOygnOyZuO2VqeuLiOuLpC5cbiAgICBjb25zdCBmaWx0ZXJlZEFyZ3Y6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IHNraXBOZXh0ID0gZmFsc2U7XG4gICAgbGV0IGFmdGVyRG91YmxlRGFzaCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvY2Vzcy5hcmd2Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBhcmcgPSBwcm9jZXNzLmFyZ3ZbaV07XG4gICAgICBpZiAoYXJnID09PSBcIi0tXCIpIHtcbiAgICAgICAgYWZ0ZXJEb3VibGVEYXNoID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoYWZ0ZXJEb3VibGVEYXNoKSBjb250aW51ZTtcbiAgICAgIGlmIChza2lwTmV4dCkge1xuICAgICAgICBza2lwTmV4dCA9IGZhbHNlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmcuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG4gICAgICAgIC8vIC0tb3B0aW9uPXZhbHVlIO2YleyLneydgCDsnbQgYXJn66eMIOyKpO2CtVxuICAgICAgICBpZiAoYXJnLmluY2x1ZGVzKFwiPVwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIC0tb3B0aW9uIHZhbHVlIO2YleyLneyduOyngCDtmZXsnbg6IOuLpOydjCBhcmfqsIAgLS3roZwg7Iuc7J6R7ZWY7KeAIOyViuycvOuptCDqsJLsnbQg7J6I64qUIOqyg1xuICAgICAgICBjb25zdCBuZXh0QXJnID0gcHJvY2Vzcy5hcmd2W2kgKyAxXTtcbiAgICAgICAgaWYgKG5leHRBcmcgJiYgIW5leHRBcmcuc3RhcnRzV2l0aChcIi0tXCIpICYmICFuZXh0QXJnLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgc2tpcE5leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZmlsdGVyZWRBcmd2LnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICAvLyBidWlsZC9kZXYg66qF66C57Ja06rCAIOyEnOu4jOy7pOunqOuTnCDsl4bsnbQg7Zi47Lac65CgIOuVjCBcImFsbFwi7J2EIOq4sOuzuOqwkuycvOuhnCDstpTqsIDtlanri4jri6QuXG4gICAgLy8g7JiIOiBgc29uYW11IGJ1aWxkYCDihpIgYHNvbmFtdSBidWlsZCBhbGxgLCBgc29uYW11IGRldmAg4oaSIGBzb25hbXUgZGV2IGFsbGBcbiAgICBjb25zdCBjbWQgPSBmaWx0ZXJlZEFyZ3ZbMl07XG4gICAgaWYgKChjbWQgPT09IFwiYnVpbGRcIiB8fCBjbWQgPT09IFwiZGV2XCIpICYmIGZpbHRlcmVkQXJndi5sZW5ndGggPT09IDMpIHtcbiAgICAgIGZpbHRlcmVkQXJndi5wdXNoKFwiYWxsXCIpO1xuICAgIH1cblxuICAgIC8vIHRlc3Qg7Luk66eo65Oc64qUIOqwgOuzgCDsnbjsnpAo7YyM7J2866qFLCAtLXBhdHRlcm4g65OxKeulvCDrsJvsnLzrr4DroZwgdHNpY2xp66W8IOyasO2ajO2VqeuLiOuLpC5cbiAgICBpZiAoY21kID09PSBcInRlc3RcIikge1xuICAgICAgcmV0dXJuIHRlc3RDb21tYW5kKCk7XG4gICAgfVxuXG4gICAgYXdhaXQgdHNpY2xpKGZpbHRlcmVkQXJndiwge1xuICAgICAgdHlwZXM6IHtcbiAgICAgICAgXCIjZW50aXR5SWRcIjoge1xuICAgICAgICAgIHR5cGU6IFwiYXV0b2NvbXBsZXRlXCIsXG4gICAgICAgICAgbmFtZTogXCIjZW50aXR5SWRcIixcbiAgICAgICAgICBtZXNzYWdlOiBcIlBsZWFzZSBpbnB1dCAjZW50aXR5SWRcIixcbiAgICAgICAgICBjaG9pY2VzOiBFbnRpdHlNYW5hZ2VyLmdldEFsbFBhcmVudElkcygpLm1hcCgoZW50aXR5SWQpID0+ICh7XG4gICAgICAgICAgICB0aXRsZTogZW50aXR5SWQsXG4gICAgICAgICAgICB2YWx1ZTogZW50aXR5SWQsXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgICBcIiNyZWNvcmRJZHNcIjogXCJudW1iZXJbXVwiLFxuICAgICAgICBcIiNuYW1lXCI6IFwic3RyaW5nXCIsXG4gICAgICAgIFwiI3RhcmdldHNcIjoge1xuICAgICAgICAgIHR5cGU6IFwibXVsdGlzZWxlY3RcIixcbiAgICAgICAgICBuYW1lOiBcIiN0YXJnZXRzXCIsXG4gICAgICAgICAgbWVzc2FnZTogXCJQbGVhc2UgaW5wdXQgI3RhcmdldHNcIixcbiAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICB7IHRpdGxlOiBcIkRldmVsb3BtZW50XCIsIHZhbHVlOiBcImRldmVsb3BtZW50XCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiU3RhZ2luZ1wiLCB2YWx1ZTogXCJzdGFnaW5nXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiUHJvZHVjdGlvblwiLCB2YWx1ZTogXCJwcm9kdWN0aW9uXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiRml4dHVyZVwiLCB2YWx1ZTogXCJmaXh0dXJlXCIgfSxcbiAgICAgICAgICAgIHsgdGl0bGU6IFwiVGVzdFwiLCB2YWx1ZTogXCJ0ZXN0XCIgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGFyZ3M6IFtcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImluaXRcIl0sXG4gICAgICAgIFtcImZpeHR1cmVcIiwgXCJpbXBvcnRcIiwgXCIjZW50aXR5SWRcIiwgXCIjcmVjb3JkSWRzXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwic3luY1wiXSxcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImdlblwiXSxcbiAgICAgICAgW1wiZml4dHVyZVwiLCBcImZldGNoXCJdLFxuICAgICAgICBbXCJmaXh0dXJlXCIsIFwiZXhwbG9yZVwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInJ1blwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcImFwcGx5XCIsIFwiI3RhcmdldHNcIl0sXG4gICAgICAgIFtcIm1pZ3JhdGVcIiwgXCJnZW5lcmF0ZVwiXSxcbiAgICAgICAgW1wibWlncmF0ZVwiLCBcInN0YXR1c1wiXSxcbiAgICAgICAgW1wic3R1YlwiLCBcInByYWN0aWNlXCIsIFwiI25hbWVcIl0sXG4gICAgICAgIFtcInN0dWJcIiwgXCJlbnRpdHlcIiwgXCIjbmFtZVwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJtb2RlbFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJtb2RlbF90ZXN0XCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgICBbXCJzY2FmZm9sZFwiLCBcInZpZXdfbGlzdFwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgICAgW1wic2NhZmZvbGRcIiwgXCJ2aWV3X2Zvcm1cIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcImNvbmVcIiwgXCJnZW5cIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICAgIFtcInN5bmNcIl0sXG4gICAgICAgIFtcImJ1aWxkXCIsIFwiYWxsXCJdLFxuICAgICAgICBbXCJidWlsZFwiLCBcImFwaVwiXSxcbiAgICAgICAgW1wiYnVpbGRcIiwgXCJ3ZWJcIl0sXG4gICAgICAgIFtcImRldlwiLCBcImFsbFwiXSxcbiAgICAgICAgW1wiZGV2XCIsIFwiYXBpXCJdLFxuICAgICAgICBbXCJkZXZcIiwgXCJ3ZWJcIl0sXG4gICAgICAgIFtcInN0YXJ0XCJdLFxuICAgICAgICBbXCJza2lsbHNcIiwgXCJzeW5jXCJdLFxuICAgICAgICBbXCJza2lsbHNcIiwgXCJjcmVhdGVcIiwgXCIjbmFtZVwiXSxcbiAgICAgICAgW1widGVzdFwiXSxcbiAgICAgICAgW1wiYXV0aFwiLCBcImdlbmVyYXRlXCJdLFxuICAgICAgICBbXCJhdXRoXCIsIFwiYWRkLWNvbXBhbmlvbnNcIl0sXG4gICAgICBdLFxuICAgICAgcnVubmVyczoge1xuICAgICAgICBtaWdyYXRlX3N0YXR1cyxcbiAgICAgICAgbWlncmF0ZV9ydW4sXG4gICAgICAgIG1pZ3JhdGVfYXBwbHksXG4gICAgICAgIG1pZ3JhdGVfZ2VuZXJhdGUsXG4gICAgICAgIGZpeHR1cmVfaW5pdCxcbiAgICAgICAgZml4dHVyZV9pbXBvcnQsXG4gICAgICAgIGZpeHR1cmVfc3luYyxcbiAgICAgICAgZml4dHVyZV9nZW4sXG4gICAgICAgIGZpeHR1cmVfZmV0Y2gsXG4gICAgICAgIGZpeHR1cmVfZXhwbG9yZSxcbiAgICAgICAgc3R1Yl9wcmFjdGljZSxcbiAgICAgICAgc3R1Yl9lbnRpdHksXG4gICAgICAgIHNjYWZmb2xkX21vZGVsLFxuICAgICAgICBzY2FmZm9sZF9tb2RlbF90ZXN0LFxuICAgICAgICBzY2FmZm9sZF92aWV3X2xpc3QsXG4gICAgICAgIHNjYWZmb2xkX3ZpZXdfZm9ybSxcbiAgICAgICAgY29uZV9nZW4sXG4gICAgICAgIHN5bmMsXG4gICAgICAgIGJ1aWxkX2FsbCxcbiAgICAgICAgYnVpbGRfYXBpLFxuICAgICAgICBidWlsZF93ZWIsXG4gICAgICAgIGRldl9hbGwsXG4gICAgICAgIGRldl9hcGksXG4gICAgICAgIGRldl93ZWIsXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBza2lsbHNfc3luYyxcbiAgICAgICAgc2tpbGxzX2NyZWF0ZSxcbiAgICAgICAgdGVzdDogdGVzdENvbW1hbmQsXG4gICAgICAgIGF1dGhfZ2VuZXJhdGUsXG4gICAgICAgIFwiYXV0aF9hZGQtY29tcGFuaW9uc1wiOiBhdXRoX2FkZF9jb21wYW5pb25zLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBTb25hbXUuZGVzdHJveSgpO1xuICB9XG59XG5cbmJvb3RzdHJhcCgpLmZpbmFsbHkoYXN5bmMgKCkgPT4ge1xuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5kZXN0cm95KCk7XG59KTtcblxuLyoqXG4gKiBwbnBtIHN5bmMg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjrpbwg7Iux7YGs7ZWp64uI64ukLlxuICpcbiAqIGAtLWZvcmNlYCDsmLXshZjsnbQg7KO87Ja07KeA66m0IGxvY2vsnYQg66y07Iuc7ZWY6rOgIO2SgC3si7Htgazrpbwg7IiY7ZaJ7ZWp64uI64ukLlxuICogZ2l0IHBvc3QtbWVyZ2UgaG9va+ydtOuCmCBDSeyXkOyEnCDrp6QgcHVsbCDtm4Qg7J6Q64+ZIOyLpO2Wie2VoCDsiJgg7J6I64+E66GdIOuFuOy2nC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3luYygpIHtcbiAgY29uc3QgeyBmbGFncyB9ID0gcGFyc2VDbGlPcHRpb25zKCk7XG4gIGlmIChmbGFncy5oYXMoXCJmb3JjZVwiKSkge1xuICAgIGF3YWl0IFNvbmFtdS5zeW5jZXIuZm9yY2VTeW5jKCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgU29uYW11LnN5bmNlci5zeW5jKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBUEkg6rCc67CcIOyEnOuyhOulvCDsi6TtlontlZjripQg6rO17Ya1IOuhnOyngeyeheuLiOuLpC5cbiAqIGRldl9hbGzqs7wgZGV2X2FwaeyXkOyEnCDqs7XsnKDtlanri4jri6QuXG4gKlxuICogVHlwZVNjcmlwdOulvCDrsJTroZwg7Iuk7ZaJ7ZWgIOyImCDsnojrj4TroZ0gQHNvbmFtdS1raXQvdHMtbG9hZGVy66W8LFxuICogSE1S7J2EIOyngOybkO2VmOq4sCDsnITtlbQgQHNvbmFtdS1raXQvaG1yLWhvb2vsnYQgaW1wb3J07ZWY66mwLFxuICog7IaM7Iqk66e1IOyngOybkOydhCDsnITtlbQgLS1lbmFibGUtc291cmNlLW1hcHMg7ZSM656Y6re466W8IO2PrO2VqO2VmOyXrCDsi6Ttlontlanri4jri6QuXG4gKlxuICog7J2065WMIEBzb25hbXUta2l0L3RzLWxvYWRlcuyZgCBAc29uYW11LWtpdC9obXItaG9va+uKlCBzb25hbXXqsIAg7J6Q7LK07KCB7Jy866GcIOqwgOyngOqzoCDsnojripQgZGVwZW5kZW5jeeyeheuLiOuLpC5cbiAqIOuYkO2VnCDsi6Ttlonsl5Ag7IKs7Jqp7ZWY64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLrj4Qg66eI7LCs6rCA7KeA66GcIHNvbmFtdeqwgCDsnpDssrTsoIHsnLzroZwg6rCA7KeA6rOgIOyeiOuKlCBkZXBlbmRlbmN57J6F64uI64ukLlxuICog65Sw65287IScIOyCrOyaqeyekCDtlITroZzsoJ3tirjsl5DshJzripQg7J20IOyEuCDtjKjtgqTsp4Drpbwg7KeB7KCRIOyEpOy5mO2VoCDtlYTsmpTqsIAg7JeG7Iq164uI64ukLlxuICovXG5mdW5jdGlvbiBzcGF3bkFwaURldlNlcnZlcihvcHRpb25zPzogeyBleHRyYUVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcInNyYy9pbmRleC50c1wiO1xuXG4gIC8vIOydtCBzb25hbXUg7Yyo7YKk7KeA6rCAIGRlcGVuZGVuY2llc+uhnCDqsIDsp4Dqs6Ag7J6I64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLsnZggYmluL3J1bi5qc+ulvCDsgqzsmqntlanri4jri6QuXG4gIC8vIOydtCDqsr3roZwoL2Jpbi9ydW4uanMp64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLsnZggcGFja2FnZS5qc29u7J2YIGJpbiDtlYTrk5zsl5Ag66qF7Iuc65CY7Ja0IOyeiOuKlCDqt7jqsoPqs7wg6rCZ7Iq164uI64ukLlxuICBjb25zdCBob3RSdW5uZXJCaW5QYXRoID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpLnJlc29sdmUoXG4gICAgXCJAc29uYW11LWtpdC9obXItcnVubmVyL2Jpbi9ydW4uanNcIixcbiAgKTtcblxuICBjb25zdCBzZXJ2ZXJQcm9jZXNzID0gc3Bhd24oXG4gICAgcHJvY2Vzcy5leGVjUGF0aCwgLy8gbm9kZVxuICAgIFtcbiAgICAgIGhvdFJ1bm5lckJpblBhdGgsIC8vIOydtOugh+qyjCDtlbTshJwgaG90LXJ1bm5lcuulvCDsi6TtlontlZjqtazsmpRcbiAgICAgIFwiLS1jbGVhci1zY3JlZW49ZmFsc2VcIiwgLy8g7J207ZWYIGhvdC1ydW5uZXLsl5Dqsowg64SY6rKo7KSEIOyduOyekOuTpOyeheuLiOuLpC5cbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1pbXBvcnQ9c29uYW11L3RzLWxvYWRlci1yZWdpc3RlclwiLCAvLyBUeXBlU2NyaXB0IOyEnO2PrO2KuOulvCDsnITtlZwg66Gc642ULFxuICAgICAgXCItLW5vZGUtYXJncz0tLWltcG9ydD1zb25hbXUvaG1yLWhvb2stcmVnaXN0ZXJcIiwgLy8gSE1S7J2EIOyngOybkO2VmOq4sCDsnITtlZwgaG9vayxcbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1lbmFibGUtc291cmNlLW1hcHNcIiwgLy8g6re466as6rOgIOyGjOyKpOuntSDsp4Dsm5DsnYQg7JyE7ZWcIO2UjOuemOq3uOyeheuLiOuLpC5cbiAgICAgIFwiLS1vbi1rZXk9cjpyZXN0YXJ0OlJlc3RhcnQgc2VydmVyXCIsIC8vIHIg64iE66W066m0IOyEnOuyhCDsnqzsi5zsnpHtlZjqsowg7ZW07KSY7JqULlxuICAgICAgXCItLW9uLWtleT1jOmNsZWFyOkNsZWFyIHNjcmVlblwiLCAvLyBjIOuIhOultOuptCDthLDrr7jrhJAg7ZmU66m07J2EIOyngOybjOykmOyalC5cbiAgICAgIGAtLW9uLWtleT1mOnNoZWxsKHJtICR7cGF0aC5qb2luKGFwaVJvb3QsIFwic29uYW11LmxvY2tcIil9KTpyZXN0YXJ0OkZvcmNlIHJlc3RhcnRgLCAvLyBmIOuIhOultOuptCBsb2NrIOygnOqxsCDtm4Qg7J6s7Iuc7J6RIOKGkiDsg4gg7ZSE66Gc7IS47Iqk6rCAIOu2gO2KuOyKpO2KuOueqeyXkOyEnCDtkoAt7Iux7YGsLiBmb3JjZSBzeW5jIENMSeulvCBzaGVsbOuhnCDrtoDrpbTrqbQg7IK07JWE7J6I64qUIOyEnOuyhOydmCB3YXRjaGVyIO2Pre2SjeydtCA6cmVzdGFydOyZgCDstqnrj4ztlbQg7IOB7YOcIOydtOyDgS5cblxuICAgICAgXCItLW9uLWtleT1lbnRlcjpzaGVsbChlY2hvIGhpKTpLZXkgYmluZGluZyB0ZXN0XCIsIC8vIGVudGVy66W8IGtleeuhnCDsk7gg7IiYIOyeiOydjOydhCDrs7TsnbTquLAg7JyE7ZWcIO2FjOyKpO2KuOyeheuLiOuLpC5cbiAgICAgIFwiLS1vbi1rZXk9Y3RybCtmIGN0cmwrZjpzaGVsbChnaXQgcHVsbCAmJiBwbnBtIGluc3RhbGwgJiYgcG5wbSAtLWZpbHRlciBzb25hbXUgYnVpbGQgJiYgZWNobyAnU29uYW11IGlzIG5vdyB1cC10by1kYXRlIScpOnJlc3RhcnQ6UHVsbCAmIGluc3RhbGwgJiBidWlsZCAmIHJlc3RhcnRcIiwgLy8gbW9kaWZpZXLsmYDsnZgg7KGw7ZWpLCDqt7jrpqzqs6Ag65GQIOqwnOydmCBjaG9yZOulvCDsgqzsmqntlaAg7IiYIOyeiOydjOydhCDrs7TsnbTquLAg7JyE7ZWcIO2FjOyKpO2KuOyeheuLiOuLpC5cbiAgICAgIGVudHJ5UG9pbnQsIC8vIOuniOyngOunieycvOuhnCDsi6TsoJwg7Iuk7ZaJ7ZWgIOyKpO2BrOumve2KuOydmCDqsr3roZzrpbwg64SY6rKo7KSN64uI64ukLlxuICAgIF0sXG4gICAge1xuICAgICAgY3dkOiBhcGlSb290LFxuICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgICAgZW52OiB7XG4gICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICBOT0RFX0VOVjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPz8gXCJkZXZlbG9wbWVudFwiLFxuICAgICAgICBIT1Q6IFwieWVzXCIsIC8vIOyWmOqwgCDsnojslrTslbwgSE1S7J20IO2ZnOyEse2ZlOuQqeuLiOuLpC5cbiAgICAgICAgQVBJX1JPT1RfUEFUSDogYXBpUm9vdCwgLy8g7J20IOqyveuhnOqwgCBobXItaG9va+ydmCDro6jtirgg65SU66CJ7Yag66as6rCAIOuQqeuLiOuLpC5cbiAgICAgICAgLi4ub3B0aW9ucz8uZXh0cmFFbnYsXG4gICAgICB9LFxuICAgIH0sXG4gICk7XG5cbiAgLy8g7KKF66OMIOyymOumrFxuICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIlxcblxcbvCfkYsgU2h1dHRpbmcgZG93bi4uLlwiKSk7XG4gICAgc2VydmVyUHJvY2Vzcy5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH07XG5cbiAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCBjbGVhbnVwKTtcbiAgcHJvY2Vzcy5vbihcIlNJR1RFUk1cIiwgY2xlYW51cCk7XG5cbiAgc2VydmVyUHJvY2Vzcy5vbihcImV4aXRcIiwgKGNvZGUpID0+IHtcbiAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoYFNlcnZlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoY29kZSB8fCAxKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIHBucG0gZGV2IC8gcG5wbSBkZXYgYWxsIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog7ZSE66Gc7KCd7Yq47JeQIOuMgO2VtCBITVIg7KeA7JuQ7ZWY64qUIOqwnOuwnCDshJzrsoTrpbwg652E7JuM7KSN64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGRldl9hbGwoKSB7XG4gIGNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG4gIGNvbnN0IHsgdmVyc2lvbiB9ID0gcmVxdWlyZShcIi4uLy4uL3BhY2thZ2UuanNvblwiKTtcbiAgY29uc29sZS5sb2coYPCfjLIgU29uYW11IHYke3ZlcnNpb259XFxuYCk7XG4gIHNwYXduQXBpRGV2U2VydmVyKCk7XG59XG5cbi8qKlxuICogcG5wbSBkZXYgYXBpIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICogQVBJIOyghOyaqSDqsJzrsJwg7ISc67KE66W8IOudhOybgeuLiOuLpC5cbiAqIGRldl9hbGzqs7wg6rGw7J2YIOuPmeydvO2VmOuQmCwg7Ya17ZWpIOybuSDshJzrsoTrpbwg67mE7Zmc7ISx7ZmU7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGRldl9hcGkoKSB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdy5ib2xkKFwiU3RhcnRpbmcgU29uYW11IEFQSS1vbmx5IGRldiBzZXJ2ZXIuLi5cXG5cIikpO1xuICBzcGF3bkFwaURldlNlcnZlcih7XG4gICAgZXh0cmFFbnY6IHsgU09OQU1VX0RJU0FCTEVfSU5URUdSQVRFRF9XRUI6IFwieWVzXCIgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogcG5wbSBkZXYgd2ViIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICogVml0ZSDqsJzrsJwg7ISc67KE66W8IOuLqOuPheycvOuhnCDsi6Ttlontlanri4jri6QuXG4gKiAtLSDrkqTsnZgg7J247J6Q64qUIFZpdGXsl5Ag6re464yA66GcIOyghOuLrOuQqeuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZXZfd2ViKCkge1xuICBjb25zdCBhcHBSb290ID0gZmluZEFwcFJvb3RQYXRoKCk7XG4gIGNvbnN0IHdlYlBhdGggPSBwYXRoLmpvaW4oYXBwUm9vdCwgXCJ3ZWJcIik7XG5cbiAgaWYgKCEoYXdhaXQgZXhpc3RzKHdlYlBhdGgpKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYHdlYiDrlJTroInthqDrpqzrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6Q6ICR7d2ViUGF0aH1gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyAtLSDrkqTsnZgg7J247J6QIOy2lOy2nFxuICBjb25zdCBkb3VibGVEYXNoSW5kZXggPSBwcm9jZXNzLmFyZ3YuaW5kZXhPZihcIi0tXCIpO1xuICBjb25zdCBwYXNzdGhyb3VnaEFyZ3MgPSBkb3VibGVEYXNoSW5kZXggIT09IC0xID8gcHJvY2Vzcy5hcmd2LnNsaWNlKGRvdWJsZURhc2hJbmRleCArIDEpIDogW107XG5cbiAgY29uc3Qgdml0ZUFyZ3MgPSBbXCJleGVjXCIsIFwidml0ZVwiLCAuLi5wYXNzdGhyb3VnaEFyZ3NdO1xuXG4gIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdy5ib2xkKFwiU3RhcnRpbmcgVml0ZSBkZXYgc2VydmVyLi4uXFxuXCIpKTtcblxuICBjb25zdCB2aXRlUHJvY2VzcyA9IHNwYXduKFwicG5wbVwiLCB2aXRlQXJncywge1xuICAgIGN3ZDogd2ViUGF0aCxcbiAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gIH0pO1xuXG4gIHZpdGVQcm9jZXNzLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4ge1xuICAgIHByb2Nlc3MuZXhpdChjb2RlID8/IDApO1xuICB9KTtcblxuICAvLyBTSUdJTlQvU0lHVEVSTSDsi5wgVml0ZSDtlITroZzshLjsiqTrpbwgZ3JhY2VmdWxseSDsooXro4ztlanri4jri6QuXG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIFtcIlNJR0lOVFwiLCBcIlNJR1RFUk1cIl0gYXMgY29uc3QpIHtcbiAgICBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgdml0ZVByb2Nlc3Mua2lsbChzaWduYWwpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQVBJIOu5jOuTnCDshKTsoJUg7YyM7J28IOqyveuhnOulvCDqsrDsoJXtlanri4jri6QuXG4gKiDtlITroZzsoJ3tirgg66Oo7Yq47JeQIGB0c2Rvd24uY29uZmlnLnRzYOqwgCDsnojsnLzrqbQg6re46rKD7J2ELCDsl4bsnLzrqbQgc29uYW11IOq4sOuzuCDshKTsoJXsnYQg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQXBpQnVpbGRDb25maWdQYXRoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGxvY2FsQ29uZmlnUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcInRzZG93bi5jb25maWcudHNcIik7XG5cbiAgdHJ5IHtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKGxvY2FsQ29uZmlnUGF0aCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcIlVzaW5nIHRzZG93bi5jb25maWcudHMgZnJvbSBwcm9qZWN0IHJvb3QuLi5cIikpO1xuICAgICAgcmV0dXJuIGxvY2FsQ29uZmlnUGF0aDtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oXCJVc2luZyBkZWZhdWx0IHRzZG93biBBUEkgY29uZmlnIGZyb20gc29uYW11IHBhY2thZ2UuLi5cIikpO1xuICAgIHJldHVybiBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwidHNkb3duLmFwaS5jb25maWcudHNcIik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJTZXR0aW5nIHVwIEFQSSBidWlsZCBjb25maWcgZmFpbGVkLlwiKSwgZXJyb3IpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIHNvbmFtdSBidWlsZCAvIHNvbmFtdSBidWlsZCBhbGwg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBidWlsZF9hcGkgKyBidWlsZF93ZWLsnZgg7ZWp7ISx7J6F64uI64ukLiBXZWIg65SU66CJ7Yag66as6rCAIOyXhuycvOuptCBXZWIg67mM65Oc66W8IOyKpO2Cte2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGRfYWxsKCkge1xuICBhd2FpdCBidWlsZF9hcGkoKTtcbiAgYXdhaXQgYnVpbGRfd2ViKHsgc2tpcElmTWlzc2luZzogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBwbnBtIGJ1aWxkIGFwaSDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIEFQSSDtlITroZzsoJ3tirjrp4wg67mM65Oc7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkX2FwaSgpIHtcbiAgY29uc3QgYXBwUm9vdCA9IGZpbmRBcHBSb290UGF0aCgpO1xuICBjb25zdCBjb25maWdGaWxlUGF0aCA9IGF3YWl0IHJlc29sdmVBcGlCdWlsZENvbmZpZ1BhdGgoKTtcblxuICBjb25zdCBhcGlTdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICB0cnkge1xuICAgIGZvciAoY29uc3QgYXJ0aWZhY3Qgb2YgQVBJX0FSVElGQUNUUykge1xuICAgICAgY29uc3QgY3dkID0gcGF0aC5qb2luKGFwcFJvb3QsIGFydGlmYWN0LnByb2plY3RQYXRoKTtcbiAgICAgIHByaW50VGFza0hlYWRlcihhcnRpZmFjdC5uYW1lLCBhcnRpZmFjdC5kZXNjcmlwdGlvbiwgY3dkKTtcblxuICAgICAgYXdhaXQgcnVuQnVpbGRTdGVwcyhhcnRpZmFjdCwgeyBjd2QsIGJ1aWxkQ29tbWFuZEFyZ3M6IHsgY29uZmlnRmlsZVBhdGggfSB9KTtcbiAgICB9XG4gICAgcHJpbnRCdWlsZFN1bW1hcnkoXCJBUElcIiwgdHJ1ZSwgRGF0ZS5ub3coKSAtIGFwaVN0YXJ0ZWRBdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIkFQSVwiLCBmYWxzZSwgRGF0ZS5ub3coKSAtIGFwaVN0YXJ0ZWRBdCk7XG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBwbnBtIGJ1aWxkIHdlYiDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIFdlYiDtlITroZzsoJ3tirjrp4wg67mM65Oc7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkX3dlYih7IHNraXBJZk1pc3NpbmcgPSBmYWxzZSB9ID0ge30pIHtcbiAgY29uc3QgYXBwUm9vdCA9IGZpbmRBcHBSb290UGF0aCgpO1xuICBjb25zdCB3ZWJQYXRoID0gcGF0aC5qb2luKGFwcFJvb3QsIFwid2ViXCIpO1xuXG4gIGlmICghKGF3YWl0IGV4aXN0cyh3ZWJQYXRoKSkpIHtcbiAgICBpZiAoc2tpcElmTWlzc2luZykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShcIldlYiDrlJTroInthqDrpqzqsIAg7JeG7Jy866+A66GcIFdlYiDruYzrk5zrpbwg6rG064SI65yB64uI64ukLlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnNvbGUuZXJyb3IoYHdlYiDrlJTroInthqDrpqzrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6Q6ICR7d2ViUGF0aH1gKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICBjb25zdCB3ZWJTdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICB0cnkge1xuICAgIGZvciAoY29uc3QgYXJ0aWZhY3Qgb2YgV0VCX0FSVElGQUNUUykge1xuICAgICAgY29uc3QgY3dkID0gcGF0aC5qb2luKGFwcFJvb3QsIGFydGlmYWN0LnByb2plY3RQYXRoKTtcbiAgICAgIHByaW50VGFza0hlYWRlcihhcnRpZmFjdC5uYW1lLCBhcnRpZmFjdC5kZXNjcmlwdGlvbiwgY3dkKTtcblxuICAgICAgYXdhaXQgcnVuQnVpbGRTdGVwcyhhcnRpZmFjdCwgeyBjd2QsIGJ1aWxkQ29tbWFuZEFyZ3M6IHt9IH0pO1xuICAgIH1cbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIldlYlwiLCB0cnVlLCBEYXRlLm5vdygpIC0gd2ViU3RhcnRlZEF0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiV2ViXCIsIGZhbHNlLCBEYXRlLm5vdygpIC0gd2ViU3RhcnRlZEF0KTtcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG4vKipcbiAqIHByZS1idWlsZCwgYnVpbGQsIHBvc3QtYnVpbGQg64uo6rOE66W8IOyInOywqOyggeycvOuhnCDsi6Ttlontlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bkJ1aWxkU3RlcHM8VD4oXG4gIGFydGlmYWN0OiBCdWlsZEFydGlmYWN0PFQ+LFxuICBvcHRpb25zOiB7IGN3ZDogc3RyaW5nOyBidWlsZENvbW1hbmRBcmdzOiBUIH0sXG4pIHtcbiAgY29uc3Qgc3RlcHMgPSBbXG4gICAgeyBuYW1lOiBcInByZS1idWlsZFwiLCBjbWQ6IGFydGlmYWN0LnByZUJ1aWxkQ29tbWFuZD8uKCkgfSxcbiAgICB7IG5hbWU6IFwiYnVpbGRcIiwgY21kOiBhcnRpZmFjdC5idWlsZENvbW1hbmQob3B0aW9ucy5idWlsZENvbW1hbmRBcmdzKSB9LFxuICAgIHsgbmFtZTogXCJwb3N0LWJ1aWxkXCIsIGNtZDogYXJ0aWZhY3QucG9zdEJ1aWxkQ29tbWFuZD8uKCkgfSxcbiAgXS5maWx0ZXIoKHN0ZXApID0+IHN0ZXAuY21kKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc3RlcCA9IHN0ZXBzW2ldO1xuICAgIGNvbnN0IGlzTGFzdCA9IGkgPT09IHN0ZXBzLmxlbmd0aCAtIDE7XG5cbiAgICB0cnkge1xuICAgICAgYXNzZXJ0KHN0ZXAuY21kKTtcbiAgICAgIHByaW50VGFza1N0YXJ0KHN0ZXAubmFtZSwgc3RlcC5jbWQsIGlzTGFzdCk7XG4gICAgICBhd2FpdCBleGVjV2l0aExpbmVQcmVmaXgoc3RlcC5jbWQsIHsgY3dkOiBvcHRpb25zLmN3ZCB9KTtcbiAgICAgIHByaW50VGFza1N1Y2Nlc3Moc3RlcC5uYW1lLCBpc0xhc3QpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHByaW50VGFza0ZhaWxlZChzdGVwLm5hbWUsIGlzTGFzdCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c3RlcC5uYW1lfSBmYWlsZWRgLCB7IGNhdXNlOiBlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIHBucG0gc3RhcnQg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDruYzrk5zrkJwg7ZSE66Gc7KCd7Yq466W8IOyLpO2Wie2VqeuLiOuLpC5cbiAqXG4gKiDruYzrk5zrkJwg6rKw6rO866y8KGRpc3Qg65SU66CJ7Yag66as7J2YIGluZGV4LmpzIOyXlO2KuOumrO2PrOyduO2KuCnsnbQg7JeG64uk66m0IOyLpO2WieydhCDspJHri6jtlanri4jri6QuXG4gKiDshozsiqTrp7Ug7KeA7JuQ6rO8IGRvdGVudiDsp4Dsm5DsnYQg7Y+s7ZWo7ZWY7JesIOyLpO2Wie2VqeuLiOuLpC5cbiAqXG4gKiBTb25hbXUuaW5pdCDsl4bsnbQg7Zi47Lac65CgIOqyg+ydhCDsg4HsoJXtlZjsl6wg6rWs7ZiE65CY7JeI7Iq164uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBzdGFydCgpIHtcbiAgY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbiAgY29uc3QgeyB2ZXJzaW9uIH0gPSByZXF1aXJlKFwiLi4vLi4vcGFja2FnZS5qc29uXCIpO1xuICBjb25zb2xlLmxvZyhg8J+MsiBTb25hbXUgdiR7dmVyc2lvbn1cXG5gKTtcblxuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcImRpc3QvaW5kZXguanNcIjtcblxuICBpZiAoIShhd2FpdCBleGlzdHMoZW50cnlQb2ludCkpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAke2VudHJ5UG9pbnR9IG5vdCBmb3VuZC4gUGxlYXNlIGJ1aWxkIHlvdXIgcHJvamVjdCBmaXJzdC5gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlJ1bjogcG5wbSBzb25hbXUgYnVpbGRcIikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcImNoaWxkX3Byb2Nlc3NcIik7XG4gIGNvbnN0IHNlcnZlclByb2Nlc3MgPSBzcGF3bihcbiAgICBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgIFtcIi0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsIFwiLXJcIiwgXCJkb3RlbnYvY29uZmlnXCIsIGVudHJ5UG9pbnRdLFxuICAgIHtcbiAgICAgIGN3ZDogYXBpUm9vdCxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICB9LFxuICApO1xuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgKCkgPT4ge1xuICAgIHNlcnZlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBNaWdyYXRvcigpIHtcbiAgLy8gbWlncmF0b3JcbiAgbWlncmF0b3IgPSBuZXcgTWlncmF0b3IoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBGaXh0dXJlTWFuYWdlcigpIHtcbiAgRml4dHVyZU1hbmFnZXIuaW5pdCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX2FwcGx5KHRhcmdldHM6IChrZXlvZiBTb25hbXVEQkNvbmZpZylbXSkge1xuICBhd2FpdCBzZXR1cE1pZ3JhdG9yKCk7XG4gIGF3YWl0IG1pZ3JhdG9yLnJ1bkFjdGlvbihcImFwcGx5XCIsIHRhcmdldHMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3J1bigpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuICBhd2FpdCBtaWdyYXRvci5ydW5BY3Rpb24oXCJhcHBseVwiLCBnZXRNaWdyYXRlUnVuVGFyZ2V0cygpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWlncmF0ZV9nZW5lcmF0ZSgpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuXG4gIGNvbnN0IHsgY29ubnMgfSA9IGF3YWl0IG1pZ3JhdG9yLmdldFN0YXR1cygpO1xuICBjb25zdCBoYXNTdGF0dXMwID0gY29ubnMuc29tZSgoY29ubikgPT4gY29ubi5zdGF0dXMgPT09IDApO1xuICBpZiAoIWhhc1N0YXR1czApIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGNoYWxrLnJlZChcbiAgICAgICAgXCLrp4jsnbTqt7jroIjsnbTshZgg7YyM7J287J2EIOyDneyEse2VmOugpOuptCDquLDsobQg66eI7J206re466CI7J207IWY7J20IOy1nOyGjCDtlZjrgpjsnZggRELsl5Ag66qo65GQIOyggeyaqeuQmOyWtCDsnojslrTslbwg7ZWp64uI64ukLlwiLFxuICAgICAgKSxcbiAgICApO1xuICAgIGZvciAoY29uc3QgY29ubiBvZiBjb25ucykge1xuICAgICAgaWYgKGNvbm4ucGVuZGluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhgICAke2Nvbm4ubmFtZX06IHBlbmRpbmcgJHtjb25uLnBlbmRpbmcubGVuZ3RofeqwnGApKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgY29uc3QgY291bnQgPSBhd2FpdCBtaWdyYXRvci5nZW5lcmF0ZVByZXBhcmVkQ29kZXMoKTtcbiAgaWYgKGNvdW50ID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGAke2NvdW50feqwnOydmCDrp4jsnbTqt7jroIjsnbTshZgg7YyM7J287J20IOyDneyEseuQmOyXiOyKteuLiOuLpC5gKSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbWlncmF0ZV9zdGF0dXMoKSB7XG4gIGF3YWl0IHNldHVwTWlncmF0b3IoKTtcblxuICBjb25zdCBzdGF0dXMgPSBhd2FpdCBtaWdyYXRvci5nZXRTdGF0dXMoKTtcbiAgLy8gc3RhdHVzO1xuICBjb25zb2xlLmxvZyhzdGF0dXMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX2luaXQoKSB7XG4gIGNvbnN0IHNyY0NvbmZpZyA9IFNvbmFtdS5kYkNvbmZpZ1tnZXRTb25hbXVFbnZpcm9ubWVudCgpXTtcbiAgY29uc3QgdGFyZ2V0cyA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogXCIoUkVNT1RFKSBGaXh0dXJlIERCXCIsXG4gICAgICBjb25maWc6IFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IFwiKExPQ0FMKSBUZXN0aW5nIERCXCIsXG4gICAgICBjb25maWc6IFNvbmFtdS5kYkNvbmZpZy50ZXN0LFxuICAgICAgdG9Ta2lwOiAoKCkgPT4ge1xuICAgICAgICBjb25zdCByZW1vdGVDb25uID0gU29uYW11LmRiQ29uZmlnLmZpeHR1cmUuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gICAgICAgIGNvbnN0IGxvY2FsQ29ubiA9IFNvbmFtdS5kYkNvbmZpZy50ZXN0LmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuICAgICAgICByZXR1cm4gcmVtb3RlQ29ubi5ob3N0ID09PSBsb2NhbENvbm4uaG9zdCAmJiByZW1vdGVDb25uLmRhdGFiYXNlID09PSBsb2NhbENvbm4uZGF0YWJhc2U7XG4gICAgICB9KSgpLFxuICAgIH0sXG4gIF0gYXMge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgY29uZmlnOiBLbmV4LkNvbmZpZztcbiAgICB0b1NraXA/OiBib29sZWFuO1xuICB9W107XG5cbiAgLy8gMS4g6riw7KSAREIg7Iqk7YKk66eI66W8IOuNpO2UhFxuICBjb25zb2xlLmxvZyhcIkRVTVAuLi5cIik7XG4gIGNvbnN0IGR1bXBGaWxlbmFtZSA9IGAvdG1wL3NvbmFtdS1maXh0dXJlLWluaXQtJHtEYXRlLm5vdygpfS5zcWxgO1xuICBjb25zdCBzcmNDb25uID0gc3JjQ29uZmlnLmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuICBjb25zdCBtaWdyYXRpb25zRHVtcCA9IGAvdG1wL3NvbmFtdS1maXh0dXJlLWluaXQtbWlncmF0aW9ucy0ke0RhdGUubm93KCl9LnNxbGA7XG4gIGV4ZWNTeW5jKFxuICAgIGBteXNxbGR1bXAgLWgke3NyY0Nvbm4uaG9zdH0gLXUke3NyY0Nvbm4udXNlcn0gLXAke3NyY0Nvbm4ucGFzc3dvcmR9IC0tc2luZ2xlLXRyYW5zYWN0aW9uIC1kIC0tbm8tY3JlYXRlLWRiIC0tdHJpZ2dlcnMgJHtzcmNDb25uLmRhdGFiYXNlfSA+ICR7ZHVtcEZpbGVuYW1lfWAsXG4gICk7XG4gIGNvbnN0IF9kYiA9IGtuZXgoc3JjQ29uZmlnKTtcbiAgY29uc3QgW1ttaWdyYXRpb25zXV0gPSBhd2FpdCBfZGIucmF3KFxuICAgIFwiU0VMRUNUIENPVU5UKCopIGFzIGNvdW50IEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBXSEVSRSB0YWJsZV9zY2hlbWEgPSA/IEFORCB0YWJsZV9uYW1lID0gJ2tuZXhfbWlncmF0aW9ucydcIixcbiAgICBbc3JjQ29ubi5kYXRhYmFzZV0sXG4gICk7XG4gIGlmIChtaWdyYXRpb25zLmNvdW50ID4gMCkge1xuICAgIGV4ZWNTeW5jKFxuICAgICAgYG15c3FsZHVtcCAtaCR7c3JjQ29ubi5ob3N0fSAtdSR7c3JjQ29ubi51c2VyfSAtcCR7c3JjQ29ubi5wYXNzd29yZH0gLS1zaW5nbGUtdHJhbnNhY3Rpb24gLS1uby1jcmVhdGUtZGIgLS10cmlnZ2VycyAke3NyY0Nvbm4uZGF0YWJhc2V9IGtuZXhfbWlncmF0aW9ucyBrbmV4X21pZ3JhdGlvbnNfbG9jayA+ICR7bWlncmF0aW9uc0R1bXB9YCxcbiAgICApO1xuICB9XG5cbiAgLy8gMi4g64yA7IOBREIg6rCB6rCB7JeQIOuMgO2VmOyXrCDsobTsnqzsl6zrtoAg7ZmV7J24IO2bhCDrtpPquLBcbiAgZm9yIChjb25zdCB7IGxhYmVsLCBjb25maWcsIHRvU2tpcCB9IG9mIHRhcmdldHMpIHtcbiAgICBjb25zdCBjb25uID0gY29uZmlnLmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuXG4gICAgaWYgKHRvU2tpcCA9PT0gdHJ1ZSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAke2xhYmVsfTogU2tpcHBlZCFgKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBkYiA9IGtuZXgoe1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAuLi4oKGNvbmZpZy5jb25uZWN0aW9uID8/IHt9KSBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWcpLFxuICAgICAgICBkYXRhYmFzZTogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBbW3Jvd11dID0gYXdhaXQgZGIucmF3KGBTSE9XIERBVEFCQVNFUyBMSUtFIFwiJHtjb25uLmRhdGFiYXNlfVwiYCk7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGAke2xhYmVsfTogRGF0YWJhc2UgXCIke2Nvbm4uZGF0YWJhc2V9XCIgQWxyZWFkeSBleGlzdHNgKSk7XG4gICAgICBhd2FpdCBkYi5kZXN0cm95KCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgU1lOQyB0byAke2xhYmVsfS4uLmApO1xuICAgIGNvbnN0IG15c3FsQ21kID0gYG15c3FsIC1oJHtjb25uLmhvc3R9IC11JHtjb25uLnVzZXJ9IC1wJHtjb25uLnBhc3N3b3JkfWA7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9IC1lICdEUk9QIERBVEFCQVNFIElGIEVYSVNUUyBcXGAke2Nvbm4uZGF0YWJhc2V9XFxgJ2ApO1xuICAgIGV4ZWNTeW5jKGAke215c3FsQ21kfSAtZSAnQ1JFQVRFIERBVEFCQVNFIFxcYCR7Y29ubi5kYXRhYmFzZX1cXGAnYCk7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9ICR7Y29ubi5kYXRhYmFzZX0gPCAke2R1bXBGaWxlbmFtZX1gKTtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKG1pZ3JhdGlvbnNEdW1wKSkge1xuICAgICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9ICR7Y29ubi5kYXRhYmFzZX0gPCAke21pZ3JhdGlvbnNEdW1wfWApO1xuICAgIH1cblxuICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGF3YWl0IF9kYi5kZXN0cm95KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfaW1wb3J0KGVudGl0eUlkOiBzdHJpbmcsIHJlY29yZElkczogbnVtYmVyW10pIHtcbiAgYXdhaXQgc2V0dXBGaXh0dXJlTWFuYWdlcigpO1xuXG4gIGF3YWl0IEZpeHR1cmVNYW5hZ2VyLmltcG9ydEZpeHR1cmUoZW50aXR5SWQsIHJlY29yZElkcyk7XG4gIGF3YWl0IEZpeHR1cmVNYW5hZ2VyLnN5bmMoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9zeW5jKCkge1xuICBhd2FpdCBzZXR1cEZpeHR1cmVNYW5hZ2VyKCk7XG5cbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuc3luYygpO1xufVxuXG4vKipcbiAqIGZpeHR1cmUgZ2VuIOuqheugueyWtFxuICog7Ji17IWY7J2EIHByb2Nlc3MuYXJnduyXkOyEnCDtjIzsi7FcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9nZW4oKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMocHJvY2Vzcy5hcmd2KTtcbiAgYXdhaXQgZml4dHVyZUdlbkNvbW1hbmQob3B0aW9ucyk7XG59XG5cbi8qKlxuICogZml4dHVyZSBmZXRjaCDrqoXroLnslrRcbiAqIOyYteyFmOydhCBwcm9jZXNzLmFyZ3bsl5DshJwg7YyM7IuxXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfZmV0Y2goKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMocHJvY2Vzcy5hcmd2KTtcbiAgYXdhaXQgZml4dHVyZUZldGNoQ29tbWFuZChvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBmaXh0dXJlIGV4cGxvcmUg66qF66C57Ja0XG4gKiDsmLXshZjsnYQgcHJvY2Vzcy5hcmd27JeQ7IScIO2MjOyLsVxuICovXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX2V4cGxvcmUoKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZU9wdGlvbnMocHJvY2Vzcy5hcmd2KTtcbiAgYXdhaXQgZml4dHVyZUV4cGxvcmVDb21tYW5kKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIOqwhOuLqO2VnCDsmLXshZgg7YyM7IScXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3B0aW9ucyhcbiAgYXJndjogc3RyaW5nW10sXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBib29sZWFuIHwgc3RyaW5nW10+ICYgeyBfOiBzdHJpbmdbXSB9IHtcbiAgY29uc3Qgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbiB8IHN0cmluZ1tdPiAmIHsgXzogc3RyaW5nW10gfSA9IHsgXzogW10gfTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcmcgPSBhcmd2W2ldO1xuXG4gICAgaWYgKGFyZy5zdGFydHNXaXRoKFwiLS1cIikpIHtcbiAgICAgIGNvbnN0IGtleSA9IGFyZy5zbGljZSgyKTtcblxuICAgICAgaWYgKGtleS5pbmNsdWRlcyhcIj1cIikpIHtcbiAgICAgICAgY29uc3QgW2ssIHZdID0ga2V5LnNwbGl0KFwiPVwiKTtcbiAgICAgICAgb3B0aW9uc1trXSA9IHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXh0ID0gYXJndltpICsgMV07XG4gICAgICAgIGlmIChuZXh0ICYmICFuZXh0LnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuICAgICAgICAgIG9wdGlvbnNba2V5XSA9IG5leHQ7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnNba2V5XSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFyZy5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgY29uc3Qga2V5ID0gYXJnLnNsaWNlKDEpO1xuICAgICAgY29uc3QgbmV4dCA9IGFyZ3ZbaSArIDFdO1xuXG4gICAgICBpZiAobmV4dCAmJiAhbmV4dC5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICBvcHRpb25zW2tleV0gPSBuZXh0O1xuICAgICAgICBpKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zW2tleV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLl8ucHVzaChhcmcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHViX3ByYWN0aWNlKG5hbWU6IHN0cmluZykge1xuICBjb25zdCBwcmFjdGljZURpciA9IHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic3JjXCIsIFwicHJhY3RpY2VzXCIpO1xuICBjb25zdCBmaWxlTmFtZXMgPSBhd2FpdCByZWFkZGlyKHByYWN0aWNlRGlyKTtcblxuICBjb25zdCBtYXhTZXFObyA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgaWYgKCEoYXdhaXQgZXhpc3RzKHByYWN0aWNlRGlyKSkpIHtcbiAgICAgIGF3YWl0IG1rZGlyKHByYWN0aWNlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZFNlcXMgPSBmaWxlTmFtZXNcbiAgICAgIC5maWx0ZXIoKGZpbGVOYW1lKSA9PiBmaWxlTmFtZS5zdGFydHNXaXRoKFwicFwiKSAmJiBmaWxlTmFtZS5lbmRzV2l0aChcIi50c1wiKSlcbiAgICAgIC5tYXAoKGZpbGVOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IFssIHNlcU5vXSA9IGZpbGVOYW1lLm1hdGNoKC9ecChbMC05XSspLS8pID8/IFtcIjBcIiwgXCIwXCJdO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoc2VxTm8pO1xuICAgICAgfSlcbiAgICAgIC50b1NvcnRlZCgoYSwgYikgPT4gYiAtIGEpO1xuXG4gICAgaWYgKGZpbHRlcmVkU2Vxcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZmlsdGVyZWRTZXFzWzBdO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9KSgpO1xuXG4gIGNvbnN0IGN1cnJlbnRTZXFObyA9IG1heFNlcU5vICsgMTtcbiAgY29uc3QgZmlsZU5hbWUgPSBgcCR7Y3VycmVudFNlcU5vfS0ke25hbWV9LnRzYDtcbiAgY29uc3QgZHN0UGF0aCA9IHBhdGguam9pbihwcmFjdGljZURpciwgZmlsZU5hbWUpO1xuXG4gIGNvbnN0IGNvZGUgPSBbXG4gICAgYGltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCJzb25hbXVcIjtgLFxuICAgIFwiXCIsXG4gICAgYGNvbnNvbGUuY2xlYXIoKTtgLFxuICAgIGBjb25zb2xlLmxvZyhcIiR7ZmlsZU5hbWV9XCIpO2AsXG4gICAgXCJcIixcbiAgICBgU29uYW11LnJ1blNjcmlwdChhc3luYyAoKSA9PiB7YCxcbiAgICBgIC8vIFRPRE9gLFxuICAgIGB9KTtgLFxuICAgIFwiXCIsXG4gIF0uam9pbihcIlxcblwiKTtcbiAgYXdhaXQgd3JpdGVGaWxlKGRzdFBhdGgsIGNvZGUpO1xuXG4gIGV4ZWNTeW5jKGBjb2RlICR7ZHN0UGF0aH1gKTtcblxuICBjb25zdCBydW5Db2RlID0gYHlhcm4gbm9kZSAtciBkb3RlbnYvY29uZmlnIC0tZW5hYmxlLXNvdXJjZS1tYXBzIGRpc3QvcHJhY3RpY2VzLyR7ZmlsZU5hbWUucmVwbGFjZShcbiAgICBcIi50c1wiLFxuICAgIFwiLmpzXCIsXG4gICl9YDtcbiAgY29uc29sZS5sb2coYCR7Y2hhbGsuYmx1ZShydW5Db2RlKX0gY29waWVkIHRvIGNsaXBib2FyZC5gKTtcbiAgZXhlY1N5bmMoYGVjaG8gXCIke3J1bkNvZGV9XCIgfCBwYmNvcHlgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3R1Yl9lbnRpdHkoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmNyZWF0ZUVudGl0eSh7IGVudGl0eUlkLCB0aXRsZTogZW50aXR5SWQgfSk7XG5cbiAgY29uc3QgeyBmbGFncyB9ID0gcGFyc2VDbGlPcHRpb25zKCk7XG4gIGNvbnN0IHVzZUFJID0gZmxhZ3MuaGFzKFwiYWlcIik7XG4gIGNvbnN0IG5vQ29uZXMgPSBmbGFncy5oYXMoXCJuby1jb25lc1wiKTtcblxuICAvLyAtLW5vLWNvbmVzOiBjb25lIOyDneyEsSDsiqTtgrVcbiAgaWYgKG5vQ29uZXMpIHtcbiAgICBjb25zb2xlLmxvZyhg4pyTIEVudGl0eSAnJHtlbnRpdHlJZH0nIGNyZWF0ZWQgd2l0aG91dCBjb25lc2ApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgRW50aXR5TWFuYWdlciB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCIpO1xuICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gIGlmICghZW50aXR5KSB7XG4gICAgY29uc29sZS5lcnJvcihgRW50aXR5IG5vdCBmb3VuZDogJHtlbnRpdHlJZH1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyAtLWFpOiBMTE3snLzroZwgY29uZSDsg53shLFcbiAgaWYgKHVzZUFJKSB7XG4gICAgY29uc29sZS5sb2coYOKckyBFbnRpdHkgJyR7ZW50aXR5SWR9JyBjcmVhdGVkYCk7XG4gICAgY29uc29sZS5sb2coYPCfjJ8gR2VuZXJhdGluZyBBSS1wb3dlcmVkIGNvbmVzLi4uYCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZ0xvY2FsZSA9IFNvbmFtdS5jb25maWcuaTE4bj8uZGVmYXVsdExvY2FsZTtcbiAgICAgIGNvbnN0IGxvY2FsZSA9XG4gICAgICAgIGNvbmZpZ0xvY2FsZSA9PT0gXCJrb1wiIHx8IGNvbmZpZ0xvY2FsZSA9PT0gXCJlblwiIHx8IGNvbmZpZ0xvY2FsZSA9PT0gXCJqYVwiXG4gICAgICAgICAgPyBjb25maWdMb2NhbGVcbiAgICAgICAgICA6IFwia29cIjtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW50aXR5LmdlbmVyYXRlQ29uZXMoe1xuICAgICAgICBwcmVzZXJ2ZUV4aXN0aW5nOiBmYWxzZSxcbiAgICAgICAgb25seUVtcHR5OiBmYWxzZSxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKGDinIUgRG9uZSAoJHtyZXN1bHQudG9rZW5zVXNlZH0gdG9rZW5zKWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwiQU5USFJPUElDX0FQSV9LRVlcIikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu4p2MICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgXFxu8J+SoSBSZW1vdmUgLS1haSBmbGFnIHRvIHVzZSB0ZW1wbGF0ZSBjb25lcyBpbnN0ZWFkYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8g6riw67O4OiDthZztlIzrpr8gY29uZSDsnpDrj5kg7IOd7ISxXG4gIC8vIExMTSDsl4bsnbQgZmFrZXItbWFwcGluZ3MudHPrpbwg7Zmc7Jqp7ZWY7JesIOq4sOuzuCBjb25lIOuplO2DgOuNsOydtO2EsOulvCDsg53shLHtlanri4jri6QuXG4gIC8vIOydtOulvCDthrXtlbQgQU5USFJPUElDX0FQSV9LRVnqsIAg7JeG7Ja064+EIFNvbmFtdeulvCDsgqzsmqntlaAg7IiYIOyeiOycvOupsCxcbiAgLy8g7IOd7ISx65CcIO2FnO2UjOumvyBjb25l7J2AIOuCmOykkeyXkCAnY29uZSBnZW4nIOuqheugueyWtOuhnCBBSeulvCDthrXtlbQg7JeF6re466CI7J2065Oc7ZWgIOyImCDsnojsirXri4jri6QuXG4gIGNvbnNvbGUubG9nKGDwn4yfIEdlbmVyYXRpbmcgdGVtcGxhdGUgY29uZXMuLi5gKTtcbiAgYXdhaXQgZW50aXR5LmdlbmVyYXRlVGVtcGxhdGVDb25lcygpO1xuICBjb25zb2xlLmxvZyhg4pyTIEVudGl0eSAnJHtlbnRpdHlJZH0nIGNyZWF0ZWQgd2l0aCB0ZW1wbGF0ZSBjb25lc2ApO1xuICBjb25zb2xlLmxvZyhg8J+SoSBUaXA6IFJ1biAncG5wbSBzb25hbXUgY29uZSBnZW4gJHtlbnRpdHlJZH0nIHRvIGltcHJvdmUgd2l0aCBBSWApO1xufVxuXG4vKipcbiAqIEFJ66W8IOyCrOyaqe2VmOyXrCBlbnRpdHnsnZggY29uZSDrqZTtg4DrjbDsnbTthLDrpbwg7IOd7ISx7ZWY6rGw64KYIOyXheq3uOugiOydtOuTnO2VqeuLiOuLpC5cbiAqXG4gKiDsmLXshZg6XG4gKiAtIC0tcmVnZW5lcmF0ZTog7KCE7LK0IOyerOyDneyEsSAo6riw7KG0IGNvbmUg642u7Ja07JOw6riwKVxuICogLSAtLWxvY2FsZSA8a298ZW58amE+OiDsg53shLEg7Ja47Ja0IOyngOyglVxuICogLSDquLDrs7g6IG9ubHlFbXB0eSDrqqjrk5wgKOq4sOyhtCBmaXh0dXJlSGludCDrs7TsobQpXG4gKlxuICogQU5USFJPUElDX0FQSV9LRVkg7ZWE7JqUIChzb25hbXUuc2VjcmV0LnRzIOuYkOuKlCDtmZjqsr3rs4DsiJgpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbmVfZ2VuKGVudGl0eUlkOiBzdHJpbmcpIHtcbiAgY29uc3QgeyBFbnRpdHlNYW5hZ2VyIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIik7XG4gIGNvbnN0IHsgZmxhZ3MsIG9wdGlvbnMgfSA9IHBhcnNlQ2xpT3B0aW9ucygpO1xuXG4gIC8vIC0tYWxsIOyYteyFmDog66qo65OgIGVudGl0eSBjb25lIOyDneyEsVxuICBpZiAoZmxhZ3MuaGFzKFwiYWxsXCIpIHx8IGVudGl0eUlkID09PSBcImFsbFwiKSB7XG4gICAgY29uc3QgYWxsRW50aXRpZXMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbEVudGl0aWVzKCk7XG4gICAgY29uc29sZS5sb2coYPCfjJ8gR2VuZXJhdGluZyBBSS1wb3dlcmVkIGNvbmVzIGZvciAke2FsbEVudGl0aWVzLmxlbmd0aH0gZW50aXRpZXMuLi5cXG5gKTtcblxuICAgIGxldCB0b3RhbFRva2VucyA9IDA7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgYWxsRW50aXRpZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBQcm9jZXNzaW5nICR7ZW50aXR5LmlkfS4uLmApO1xuICAgICAgICBjb25zdCBjb25maWdMb2NhbGUgPSBvcHRpb25zLmxvY2FsZSB8fCBTb25hbXUuY29uZmlnLmkxOG4/LmRlZmF1bHRMb2NhbGU7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9XG4gICAgICAgICAgY29uZmlnTG9jYWxlID09PSBcImtvXCIgfHwgY29uZmlnTG9jYWxlID09PSBcImVuXCIgfHwgY29uZmlnTG9jYWxlID09PSBcImphXCJcbiAgICAgICAgICAgID8gY29uZmlnTG9jYWxlXG4gICAgICAgICAgICA6IFwia29cIjtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRpdHkuZ2VuZXJhdGVDb25lcyh7XG4gICAgICAgICAgcHJlc2VydmVFeGlzdGluZzogIWZsYWdzLmhhcyhcInJlZ2VuZXJhdGVcIiksXG4gICAgICAgICAgb25seUVtcHR5OiAhZmxhZ3MuaGFzKFwicmVnZW5lcmF0ZVwiKSxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRvdGFsVG9rZW5zICs9IHJlc3VsdC50b2tlbnNVc2VkO1xuICAgICAgICBjb25zb2xlLmxvZyhgICDinJMgJHtlbnRpdHkuaWR9ICgke3Jlc3VsdC50b2tlbnNVc2VkfSB0b2tlbnMpXFxuYCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICAgICAgZXJyb3JzLnB1c2goYCR7ZW50aXR5LmlkfTogJHttZXNzYWdlfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGAgIOKclyAke2VudGl0eS5pZH06ICR7bWVzc2FnZX1cXG5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgXFxu4pyFIERvbmUhIFRvdGFsOiAke3RvdGFsVG9rZW5zfSB0b2tlbnMgdXNlZGApO1xuICAgIGNvbnN0IGVzdGltYXRlZENvc3QgPSAodG90YWxUb2tlbnMgKiA5KSAvIDFfMDAwXzAwMDtcbiAgICBjb25zb2xlLmxvZyhg8J+SsCBFc3RpbWF0ZWQgY29zdDogfiQke2VzdGltYXRlZENvc3QudG9GaXhlZCg0KX1gKTtcblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5lcnJvcihgXFxu4p2MIEZhaWxlZCBlbnRpdGllcyAoJHtlcnJvcnMubGVuZ3RofSk6YCk7XG4gICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJvcnMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgICAtICR7ZXJyfWApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyDri6jsnbwgZW50aXR5IGNvbmUg7IOd7ISxXG4gIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgaWYgKCFlbnRpdHkpIHtcbiAgICBjb25zb2xlLmVycm9yKGBFbnRpdHkgbm90IGZvdW5kOiAke2VudGl0eUlkfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG1vZGUgPSBmbGFncy5oYXMoXCJyZWdlbmVyYXRlXCIpID8gXCJyZWdlbmVyYXRpbmdcIiA6IFwiZ2VuZXJhdGluZ1wiO1xuICBjb25zb2xlLmxvZyhcbiAgICBg8J+MnyAke21vZGUgPT09IFwicmVnZW5lcmF0aW5nXCIgPyBcIlJlZ2VuZXJhdGluZ1wiIDogXCJHZW5lcmF0aW5nXCJ9IEFJLXBvd2VyZWQgY29uZXMgZm9yICR7ZW50aXR5SWR9Li4uYCxcbiAgKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZ0xvY2FsZSA9IG9wdGlvbnMubG9jYWxlIHx8IFNvbmFtdS5jb25maWcuaTE4bj8uZGVmYXVsdExvY2FsZTtcbiAgICBjb25zdCBsb2NhbGUgPVxuICAgICAgY29uZmlnTG9jYWxlID09PSBcImtvXCIgfHwgY29uZmlnTG9jYWxlID09PSBcImVuXCIgfHwgY29uZmlnTG9jYWxlID09PSBcImphXCIgPyBjb25maWdMb2NhbGUgOiBcImtvXCI7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBlbnRpdHkuZ2VuZXJhdGVDb25lcyh7XG4gICAgICBwcmVzZXJ2ZUV4aXN0aW5nOiAhZmxhZ3MuaGFzKFwicmVnZW5lcmF0ZVwiKSxcbiAgICAgIG9ubHlFbXB0eTogIWZsYWdzLmhhcyhcInJlZ2VuZXJhdGVcIiksXG4gICAgICBsb2NhbGUsXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhg4pyFIERvbmUhICgke3Jlc3VsdC50b2tlbnNVc2VkfSB0b2tlbnMgdXNlZClgKTtcblxuICAgIC8vIO2GoO2BsCDruYTsmqkg6rOE7IKwICjrjIDrnrXsoIHsnbgg7LaU7KCVKVxuICAgIC8vIENsYXVkZSBTb25uZXQgNC41OiBpbnB1dCAkMy9NIHRva2Vucywgb3V0cHV0ICQxNS9NIHRva2Vuc1xuICAgIC8vIOqwhOuLqO2VmOqyjCDtj4nqt6AgJDkvTSB0b2tlbnProZwg6rOE7IKwXG4gICAgY29uc3QgZXN0aW1hdGVkQ29zdCA9IChyZXN1bHQudG9rZW5zVXNlZCAqIDkpIC8gMV8wMDBfMDAwO1xuICAgIGNvbnNvbGUubG9nKGDwn5KwIEVzdGltYXRlZCBjb3N0OiB+JCR7ZXN0aW1hdGVkQ29zdC50b0ZpeGVkKDQpfWApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcyhcIkFOVEhST1BJQ19BUElfS0VZXCIpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbuKdjCAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbvCfkqEgVG8gdXNlIEFJLXBvd2VyZWQgY29uZSBnZW5lcmF0aW9uOmApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGAgICAxLiBHZXQgYW4gQVBJIGtleSBmcm9tIGh0dHBzOi8vY29uc29sZS5hbnRocm9waWMuY29tL2ApO1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGAgICAyLiBBZGQgaXQgdG8gc29uYW11LnNlY3JldC50cyBvciBzZXQgQU5USFJPUElDX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGVgLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwiUmF0ZSBsaW1pdFwiKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7inYwgJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7wn5KhIFBsZWFzZSB3YWl0IGEgbW9tZW50IGFuZCB0cnkgYWdhaW4uYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBcXG7inYwgRmFpbGVkIHRvIGdlbmVyYXRlIGNvbmVzOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFxcbuKdjCBGYWlsZWQgdG8gZ2VuZXJhdGUgY29uZXM6IFVua25vd24gZXJyb3JgKTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRfbW9kZWwoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXCJtb2RlbFwiLCB7XG4gICAgZW50aXR5SWQsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZF9tb2RlbF90ZXN0KGVudGl0eUlkOiBzdHJpbmcpIHtcbiAgYXdhaXQgU29uYW11LnN5bmNlci5nZW5lcmF0ZVRlbXBsYXRlKFwibW9kZWxfdGVzdFwiLCB7XG4gICAgZW50aXR5SWQsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZF92aWV3X2xpc3QoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXCJ2aWV3X2xpc3RcIiwge1xuICAgIGVudGl0eUlkLFxuICAgIGV4dHJhOiB1bmRlZmluZWQsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZF92aWV3X2Zvcm0oZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXCJ2aWV3X2Zvcm1cIiwge1xuICAgIGVudGl0eUlkLFxuICB9KTtcbn1cblxuLyoqXG4gKiBwbnBtIHNvbmFtdSBza2lsbHMgc3luYyDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOqzteyLnSBTa2lsbHPrpbwg66Gc7LusIO2UhOuhnOygne2KuCDrmJDripQg6riA66Gc67KMIH4vLmNsYXVkZS/roZwg64+Z6riw7ZmU7ZWp64uI64ukLlxuICpcbiAqIC0tZ2xvYmFsIO2UjOuemOq3uDogfi8uY2xhdWRlL+yXkCDrj5nquLDtmZQgKO2UhOuhnOygne2KuCDsg53shLEg7KCEIOyCrOyaqSDqsIDriqUpXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNraWxsc19zeW5jKCkge1xuICBjb25zdCB7IGZsYWdzIH0gPSBwYXJzZUNsaU9wdGlvbnMoKTtcbiAgY29uc3QgaXNHbG9iYWwgPSBmbGFncy5oYXMoXCJnbG9iYWxcIik7XG5cbiAgLy8g6rCc67CcIO2ZmOqyvSAtIGNsaS50czogc29uYW11L21vZHVsZXMvc29uYW11L3NyYy9iaW4vY2xpLnRzXG4gIC8vIOu5jOuTnCDtm4QgLSBjbGkuanM6IG5vZGVfbW9kdWxlcy9zb25hbXUvZGlzdC9iaW4vY2xpLmpzICjsi6TsoJwg7Iuk7ZaJKVxuICAvLyBza2lsbHMg7JyE7LmYOiBub2RlX21vZHVsZXMvc29uYW11L3NyYy9za2lsbHMgKG5wbSDrsLDtj6wg7IucKVxuICBjb25zdCBzb3VyY2VCYXNlID0gcGF0aC5yZXNvbHZlKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcInNyY1wiLCBcInNraWxsc1wiKTtcbiAgY29uc3Qgc291cmNlU2tpbGxzRGlyID0gcGF0aC5qb2luKHNvdXJjZUJhc2UsIFwic29uYW11XCIpO1xuICBjb25zdCBzb3VyY2VDbGF1ZGVNZCA9IHBhdGguam9pbihzb3VyY2VCYXNlLCBcIkNMQVVERS5tZFwiKTtcblxuICBpZiAoIShhd2FpdCBleGlzdHMoc291cmNlU2tpbGxzRGlyKSkpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCJTa2lsbHMgc291cmNlIG5vdCBmb3VuZCBpbiBzb25hbXUgcGFja2FnZS5cIikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpc0dsb2JhbCkge1xuICAgIGNvbnN0IGhvbWVDbGF1ZGVEaXIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCBcIi5jbGF1ZGVcIik7XG4gICAgYXdhaXQgc2tpbGxzX3N5bmNfdG8oaG9tZUNsYXVkZURpciwgc291cmNlU2tpbGxzRGlyLCBzb3VyY2VDbGF1ZGVNZCwge1xuICAgICAgdXNlU3ltbGluazogZmFsc2UsXG4gICAgICBjb3B5UHJvamVjdFRlbXBsYXRlczogZmFsc2UsXG4gICAgICBpc0dsb2JhbDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIH4vLmNsYXVkZS9jb21tYW5kcy9zb25hbXUtc2tpbGxzLm1kIOyEpOy5mFxuICAgIGNvbnN0IHNvdXJjZUNvbW1hbmRzRGlyID0gcGF0aC5qb2luKHNvdXJjZUJhc2UsIFwiY29tbWFuZHNcIik7XG4gICAgY29uc3Qgc291cmNlQ29tbWFuZCA9IHBhdGguam9pbihzb3VyY2VDb21tYW5kc0RpciwgXCJzb25hbXUtc2tpbGxzLm1kXCIpO1xuICAgIGlmIChhd2FpdCBleGlzdHMoc291cmNlQ29tbWFuZCkpIHtcbiAgICAgIGNvbnN0IHRhcmdldENvbW1hbmRzRGlyID0gcGF0aC5qb2luKGhvbWVDbGF1ZGVEaXIsIFwiY29tbWFuZHNcIik7XG4gICAgICBhd2FpdCBta2Rpcih0YXJnZXRDb21tYW5kc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBhd2FpdCBjcChzb3VyY2VDb21tYW5kLCBwYXRoLmpvaW4odGFyZ2V0Q29tbWFuZHNEaXIsIFwic29uYW11LXNraWxscy5tZFwiKSk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIC9zb25hbXUtc2tpbGxzIGNvbW1hbmQgaW5zdGFsbGVkIOKGkiB+Ly5jbGF1ZGUvY29tbWFuZHMvYCkpO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYFxcbiAgR2xvYmFsIHN5bmMgY29tcGxldGUg4oaSIH4vLmNsYXVkZS9za2lsbHMvc29uYW11L2ApKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oYCAgVGhlc2Ugc2tpbGxzIGFyZSBhdmFpbGFibGUgaW4gYWxsIENsYXVkZSBDb2RlIHNlc3Npb25zLmApKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGNoYWxrLmRpbShcbiAgICAgICAgYCAgT25jZSBhIHByb2plY3QgaXMgY3JlYXRlZCwgcnVuICdwbnBtIHNvbmFtdSBza2lsbHMgc3luYycgZm9yIHByb2plY3QtbG9jYWwgc3luYy5gLFxuICAgICAgKSxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHdvcmtzcGFjZVJvb3QgPSBhd2FpdCBmaW5kV29ya3NwYWNlUm9vdCgpO1xuICAgIGNvbnN0IGNsYXVkZURpciA9IHBhdGguam9pbih3b3Jrc3BhY2VSb290LCBcIi5jbGF1ZGVcIik7XG4gICAgYXdhaXQgc2tpbGxzX3N5bmNfdG8oY2xhdWRlRGlyLCBzb3VyY2VTa2lsbHNEaXIsIHNvdXJjZUNsYXVkZU1kLCB7XG4gICAgICB1c2VTeW1saW5rOiB0cnVlLFxuICAgICAgY29weVByb2plY3RUZW1wbGF0ZXM6IHRydWUsXG4gICAgICBzb3VyY2VCYXNlLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogY2xhdWRlRGly66GcIHNraWxsc+ulvCDrj5nquLDtmZTtlZjripQg6rO17Ya1IOuhnOyngeyeheuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2tpbGxzX3N5bmNfdG8oXG4gIGNsYXVkZURpcjogc3RyaW5nLFxuICBzb3VyY2VTa2lsbHNEaXI6IHN0cmluZyxcbiAgc291cmNlQ2xhdWRlTWQ6IHN0cmluZyxcbiAgb3B0aW9uczoge1xuICAgIHVzZVN5bWxpbms6IGJvb2xlYW47XG4gICAgY29weVByb2plY3RUZW1wbGF0ZXM6IGJvb2xlYW47XG4gICAgc291cmNlQmFzZT86IHN0cmluZztcbiAgICBpc0dsb2JhbD86IGJvb2xlYW47XG4gIH0sXG4pIHtcbiAgY29uc3QgdGFyZ2V0U2tpbGxzRGlyID0gcGF0aC5qb2luKGNsYXVkZURpciwgXCJza2lsbHNcIiwgXCJzb25hbXVcIik7XG5cbiAgLy8g6riw7KG0IOuUlOugie2GoOumrC9zeW1saW5rIOyCreygnCDtm4Qg7J6s7IOd7ISxXG4gIC8vIGV4aXN0cygp64qUIGJyb2tlbiBzeW1saW5r66W8IOqwkOyngO2VmOyngCDrqrvtlZjrr4DroZwgcm3snYQg66y07KGw6rG0IOyLnOuPhO2VqeuLiOuLpFxuICB0cnkge1xuICAgIGF3YWl0IHJtKHRhcmdldFNraWxsc0RpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9IGNhdGNoIHtcbiAgICAvLyDtjIzsnbzsnbQg7JeG7Jy866m0IOustOyLnFxuICB9XG5cbiAgYXdhaXQgbWtkaXIocGF0aC5kaXJuYW1lKHRhcmdldFNraWxsc0RpciksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGlmIChvcHRpb25zLnVzZVN5bWxpbmspIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc3ltbGluayhzb3VyY2VTa2lsbHNEaXIsIHRhcmdldFNraWxsc0RpciwgXCJkaXJcIik7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIFNraWxscyBsaW5rZWQgKHN5bWxpbmspYCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY2hhbGsueWVsbG93KGDimqAgU3ltbGluayBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApLFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhgICBGYWxsaW5nIGJhY2sgdG8gY29weS4uLmApKTtcbiAgICAgIGF3YWl0IHNraWxsc0NvcHkoc291cmNlU2tpbGxzRGlyLCB0YXJnZXRTa2lsbHNEaXIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBza2lsbHNDb3B5KHNvdXJjZVNraWxsc0RpciwgdGFyZ2V0U2tpbGxzRGlyKTtcbiAgfVxuXG4gIC8vIHByb2plY3Qg65SU66CJ7Yag66asIOy0iOq4sO2ZlCAo7JeG7Jy866m0IOyDneyEsSwg7J6I7Jy866m0IOycoOyngClcbiAgaWYgKG9wdGlvbnMuY29weVByb2plY3RUZW1wbGF0ZXMgJiYgb3B0aW9ucy5zb3VyY2VCYXNlKSB7XG4gICAgY29uc3Qgc291cmNlUHJvamVjdERpciA9IHBhdGguam9pbihvcHRpb25zLnNvdXJjZUJhc2UsIFwicHJvamVjdFwiKTtcbiAgICBjb25zdCB0YXJnZXRQcm9qZWN0RGlyID0gcGF0aC5qb2luKGNsYXVkZURpciwgXCJza2lsbHNcIiwgXCJwcm9qZWN0XCIpO1xuXG4gICAgaWYgKGF3YWl0IGV4aXN0cyhzb3VyY2VQcm9qZWN0RGlyKSkge1xuICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKHRhcmdldFByb2plY3REaXIpKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGNwKHNvdXJjZVByb2plY3REaXIsIHRhcmdldFByb2plY3REaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgUHJvamVjdCB0ZW1wbGF0ZXMgaW5pdGlhbGl6ZWRgKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGNoYWxrLnJlZChcbiAgICAgICAgICAgICAgYOKclyBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwcm9qZWN0IHRlbXBsYXRlczogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKGDij60gUHJvamVjdCB0ZW1wbGF0ZXMgYWxyZWFkeSBleGlzdCAocHJlc2VydmVkKWApKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBzZXR0aW5ncy5sb2NhbC5qc29uIOKAlCBwcm9qZWN0LWxvY2FsIOuqqOuTnOyXkOyEnOunjCwg7JeG7J2EIOuVjOunjCDsg53shLFcbiAgaWYgKG9wdGlvbnMuY29weVByb2plY3RUZW1wbGF0ZXMpIHtcbiAgICBjb25zdCBzZXR0aW5nc0xvY2FsUGF0aCA9IHBhdGguam9pbihjbGF1ZGVEaXIsIFwic2V0dGluZ3MubG9jYWwuanNvblwiKTtcbiAgICBpZiAoIShhd2FpdCBleGlzdHMoc2V0dGluZ3NMb2NhbFBhdGgpKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3NDb250ZW50ID0ge1xuICAgICAgICAgIGhvb2tzOiB7XG4gICAgICAgICAgICBQb3N0VG9vbFVzZTogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWF0Y2hlcjogXCJFZGl0fFdyaXRlfE11bHRpRWRpdFwiLFxuICAgICAgICAgICAgICAgIGhvb2tzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiBcInBucG0gY2hlY2sgMj4mMSB8IGhlYWQgLTYwXCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZShzZXR0aW5nc0xvY2FsUGF0aCwgYCR7SlNPTi5zdHJpbmdpZnkoc2V0dGluZ3NDb250ZW50LCBudWxsLCAyKX1cXG5gKTtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyAuY2xhdWRlL3NldHRpbmdzLmxvY2FsLmpzb24gY3JlYXRlZGApKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgY2hhbGsucmVkKFxuICAgICAgICAgICAgYOKclyBGYWlsZWQgdG8gY3JlYXRlIHNldHRpbmdzLmxvY2FsLmpzb246ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZGltKGDij60gLmNsYXVkZS9zZXR0aW5ncy5sb2NhbC5qc29uIGFscmVhZHkgZXhpc3RzIChwcmVzZXJ2ZWQpYCkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENMQVVERS5tZCDrs7Xsgqwv7JeF642w7J207Yq4XG4gIGlmIChhd2FpdCBleGlzdHMoc291cmNlQ2xhdWRlTWQpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRhcmdldENsYXVkZU1kID0gcGF0aC5qb2luKGNsYXVkZURpciwgXCJDTEFVREUubWRcIik7XG4gICAgICBjb25zdCByYXdDb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoc291cmNlQ2xhdWRlTWQsIFwidXRmLThcIik7XG4gICAgICAvLyDquIDroZzrsowg66qo65Oc7JeQ7ISc64qUIOyDgeuMgCDqsr3roZzrpbwg7KCI64yAIOqyveuhnOuhnCDrs4DtmZjtlanri4jri6RcbiAgICAgIGNvbnN0IHNvdXJjZUNvbnRlbnQgPSBvcHRpb25zLmlzR2xvYmFsXG4gICAgICAgID8gcmF3Q29udGVudC5yZXBsYWNlQWxsKFwiLmNsYXVkZS9za2lsbHMvc29uYW11L1wiLCBcIn4vLmNsYXVkZS9za2lsbHMvc29uYW11L1wiKVxuICAgICAgICA6IHJhd0NvbnRlbnQ7XG5cbiAgICAgIGlmIChhd2FpdCBleGlzdHModGFyZ2V0Q2xhdWRlTWQpKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldENvbnRlbnQgPSBhd2FpdCByZWFkRmlsZSh0YXJnZXRDbGF1ZGVNZCwgXCJ1dGYtOFwiKTtcbiAgICAgICAgY29uc3Qgc3RhcnRNYXJrZXIgPSBcIjwhLS0gU09OQU1VOlNUQVJUIC0tPlwiO1xuICAgICAgICBjb25zdCBlbmRNYXJrZXIgPSBcIjwhLS0gU09OQU1VOkVORCAtLT5cIjtcbiAgICAgICAgaWYgKHRhcmdldENvbnRlbnQuaW5jbHVkZXMoc3RhcnRNYXJrZXIpICYmIHRhcmdldENvbnRlbnQuaW5jbHVkZXMoZW5kTWFya2VyKSkge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0SWR4ID0gdGFyZ2V0Q29udGVudC5pbmRleE9mKHN0YXJ0TWFya2VyKTtcbiAgICAgICAgICBjb25zdCBlbmRJZHggPSB0YXJnZXRDb250ZW50LmluZGV4T2YoZW5kTWFya2VyKTtcblxuICAgICAgICAgIGlmIChzdGFydElkeCAhPT0gLTEgJiYgZW5kSWR4ICE9PSAtMSAmJiBzdGFydElkeCA8IGVuZElkeCkge1xuICAgICAgICAgICAgY29uc3QgYmVmb3JlID0gdGFyZ2V0Q29udGVudC5zdWJzdHJpbmcoMCwgc3RhcnRJZHgpO1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSB0YXJnZXRDb250ZW50LnN1YnN0cmluZyhlbmRJZHggKyBlbmRNYXJrZXIubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBgJHtiZWZvcmV9JHtzdGFydE1hcmtlcn1cXG4ke3NvdXJjZUNvbnRlbnR9XFxuJHtlbmRNYXJrZXJ9JHthZnRlcn1gO1xuICAgICAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHRhcmdldENsYXVkZU1kLCBuZXdDb250ZW50KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgQ0xBVURFLm1kIHVwZGF0ZWQgKG1hcmtlciByZWdpb24pYCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYOKPrSBDTEFVREUubWQgbWFya2VyIHBvc2l0aW9ucyBpbnZhbGlkLCBza2lwcGVkYCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyDrp4jsu6TqsIAg7JeG64qUIOq4sOyhtCBDTEFVREUubWTsl5AgU29uYW11IOyEueyFmOydhCDstpTqsIDtlanri4jri6RcbiAgICAgICAgICBjb25zdCBhcHBlbmRlZCA9IGAke3RhcmdldENvbnRlbnQudHJpbUVuZCgpfVxcblxcbjwhLS0gU09OQU1VOlNUQVJUIC0tPlxcbiR7c291cmNlQ29udGVudH1cXG48IS0tIFNPTkFNVTpFTkQgLS0+XFxuYDtcbiAgICAgICAgICBhd2FpdCB3cml0ZUZpbGUodGFyZ2V0Q2xhdWRlTWQsIGFwcGVuZGVkKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIENMQVVERS5tZCB1cGRhdGVkIChhcHBlbmRlZCBTb25hbXUgc2VjdGlvbilgKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHdpdGhNYXJrZXJzID0gYDwhLS0gU09OQU1VOlNUQVJUIC0tPlxcbiR7c291cmNlQ29udGVudH1cXG48IS0tIFNPTkFNVTpFTkQgLS0+XFxuYDtcbiAgICAgICAgYXdhaXQgd3JpdGVGaWxlKHRhcmdldENsYXVkZU1kLCB3aXRoTWFya2Vycyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgQ0xBVURFLm1kIGNyZWF0ZWRgKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGNoYWxrLnJlZChcbiAgICAgICAgICBg4pyXIEZhaWxlZCB0byB1cGRhdGUgQ0xBVURFLm1kOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc2tpbGxzQ29weShzcmM6IHN0cmluZywgZGVzdDogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgY3Aoc3JjLCBkZXN0LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIFNraWxscyBjb3BpZWRgKSk7XG4gIH0gY2F0Y2ggKGNvcHlFcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBjaGFsay5yZWQoXG4gICAgICAgIGDinJcgRmFpbGVkIHRvIGNvcHkgc2tpbGxzOiAke2NvcHlFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gY29weUVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoY29weUVycm9yKX1gLFxuICAgICAgKSxcbiAgICApO1xuICAgIHRocm93IGNvcHlFcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIHBucG0gc29uYW11IHNraWxscyBjcmVhdGUgPG5hbWU+IO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog66Gc7LusIHNraWxsIOy0iOyViOydhCDsg53shLHtlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNraWxsc19jcmVhdGUobmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHdvcmtzcGFjZVJvb3QgPSBhd2FpdCBmaW5kV29ya3NwYWNlUm9vdCgpO1xuICBjb25zdCBsb2NhbERpciA9IHBhdGguam9pbih3b3Jrc3BhY2VSb290LCBcIi5jbGF1ZGVcIiwgXCJza2lsbHNcIiwgXCJsb2NhbFwiKTtcblxuICAvLyA9PT0g7YyM7J2866qFIOqygOymnSDrsI8gU2FuaXRpemUgPT09XG4gIGlmICghbmFtZSB8fCBuYW1lLnRyaW0oKSA9PT0gXCJcIikge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwi4pyXIFNraWxsIG5hbWUgaXMgcmVxdWlyZWRcIikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBzYW5pdGl6ZWQgPSBuYW1lXG4gICAgLy8g6rO167Cx7J2EIO2VmOydtO2UiOycvOuhnFxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiLVwiKVxuICAgIC8vIOqyveuhnCDqtazrtoTsnpAg7KCc6rGwXG4gICAgLnJlcGxhY2UoL1svXFxcXF0vZywgXCItXCIpXG4gICAgLy8gUGF0aCB0cmF2ZXJzYWwg67Cp7KeAXG4gICAgLnJlcGxhY2UoL1xcLlxcLi9nLCBcIlwiKVxuICAgIC8vIFdpbmRvd3Mg6riI7KeAIOusuOyekCDsoJzqsbBcbiAgICAucmVwbGFjZSgvWzw+OlwifD8qXS9nLCBcIlwiKVxuICAgIC8vIOyLnOyekS/rgZ0g7KCQLCDtlZjsnbTtlIgsIOyWuOuNlOyKpOy9lOyWtCDsoJzqsbBcbiAgICAucmVwbGFjZSgvXlsuXFwtX10rfFsuXFwtX10rJC9nLCBcIlwiKVxuICAgIC8vIOyXsOyGjeuQnCDtlZjsnbTtlIjsnYQg7ZWY64KY66GcXG4gICAgLnJlcGxhY2UoLy0rL2csIFwiLVwiKVxuICAgIC8vIOyVjO2MjOuysywg7Iir7J6QLCDtlZjsnbTtlIgsIOyWuOuNlOyKpOy9lOyWtCwg7ZWc6riA66eMIO2XiOyaqVxuICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOS1f6rCALe2eo10vZywgXCJcIik7XG5cbiAgLy8g6ri47J20IOygnO2VnFxuICBjb25zdCBNQVhfTEVOR1RIID0gMTAwO1xuICBpZiAoc2FuaXRpemVkLmxlbmd0aCA+IE1BWF9MRU5HVEgpIHtcbiAgICBzYW5pdGl6ZWQgPSBzYW5pdGl6ZWQuc3Vic3RyaW5nKDAsIE1BWF9MRU5HVEgpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhg4pqgIE5hbWUgdHJ1bmNhdGVkIHRvICR7TUFYX0xFTkdUSH0gY2hhcmFjdGVyc2ApKTtcbiAgfVxuXG4gIC8vIFdpbmRvd3Mg7JiI7JW97Ja0IO2ZleyduFxuICBjb25zdCBSRVNFUlZFRF9OQU1FUyA9IFtcbiAgICBcIkNPTlwiLFxuICAgIFwiUFJOXCIsXG4gICAgXCJBVVhcIixcbiAgICBcIk5VTFwiLFxuICAgIFwiQ09NMVwiLFxuICAgIFwiQ09NMlwiLFxuICAgIFwiQ09NM1wiLFxuICAgIFwiQ09NNFwiLFxuICAgIFwiQ09NNVwiLFxuICAgIFwiQ09NNlwiLFxuICAgIFwiQ09NN1wiLFxuICAgIFwiQ09NOFwiLFxuICAgIFwiQ09NOVwiLFxuICAgIFwiTFBUMVwiLFxuICAgIFwiTFBUMlwiLFxuICAgIFwiTFBUM1wiLFxuICAgIFwiTFBUNFwiLFxuICAgIFwiTFBUNVwiLFxuICAgIFwiTFBUNlwiLFxuICAgIFwiTFBUN1wiLFxuICAgIFwiTFBUOFwiLFxuICAgIFwiTFBUOVwiLFxuICBdO1xuICBpZiAoUkVTRVJWRURfTkFNRVMuaW5jbHVkZXMoc2FuaXRpemVkLnRvVXBwZXJDYXNlKCkpKSB7XG4gICAgc2FuaXRpemVkID0gYHNraWxsLSR7c2FuaXRpemVkfWA7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGDimqAgUmVzZXJ2ZWQgbmFtZSBkZXRlY3RlZCwgcHJlZml4ZWQgd2l0aCBcInNraWxsLVwiYCkpO1xuICB9XG5cbiAgLy8g67mIIOusuOyekOyXtCDssrTtgaxcbiAgaWYgKHNhbml0aXplZCA9PT0gXCJcIikge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwi4pyXIEludmFsaWQgc2tpbGwgbmFtZSBhZnRlciBzYW5pdGl6YXRpb25cIikpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBPcmlnaW5hbDogXCIke25hbWV9XCJgKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8g67OA6rK9IOyVjOumvFxuICBpZiAoc2FuaXRpemVkICE9PSBuYW1lKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGDimqAgTmFtZSBzYW5pdGl6ZWQ6IFwiJHtuYW1lfVwiIOKGkiBcIiR7c2FuaXRpemVkfVwiYCkpO1xuICB9XG5cbiAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4obG9jYWxEaXIsIGAke3Nhbml0aXplZH0ubWRgKTtcblxuICBpZiAoYXdhaXQgZXhpc3RzKGZpbGVQYXRoKSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhgU2tpbGwgXCIke3Nhbml0aXplZH1cIiBhbHJlYWR5IGV4aXN0cy5gKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgbWtkaXIobG9jYWxEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gYC0tLVxubmFtZTogJHtzYW5pdGl6ZWR9XG5jYXRlZ29yeTogb3RoZXJcbmNyZWF0ZWRfYXQ6ICR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXX1cbnN0YXR1czogZHJhZnRcbi0tLVxuXG4jICR7c2FuaXRpemVkfVxuXG4jIyDsg4HtmalcblxuW+yWtOuWpCDrrLjsoJzsmIDripTsp4BdXG5cbiMjIO2VtOqysCDrsKnrspVcblxuW+yWtOuWu+qyjCDtlbTqsrDtlojripTsp4BdXG5cbiMjIOy9lOuTnCDsmIjsi5xcblxuXFxgXFxgXFxgdHlwZXNjcmlwdFxuLy8g7JiI7IucIOy9lOuTnFxuXFxgXFxgXFxgXG5gO1xuXG4gIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgdGVtcGxhdGUpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIENyZWF0ZWQgLmNsYXVkZS9za2lsbHMvbG9jYWwvJHtzYW5pdGl6ZWR9Lm1kYCkpO1xufVxuXG4vKipcbiAqIHBucG0gc29uYW11IGF1dGggZ2VuZXJhdGUg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiBiZXR0ZXItYXV0aCDsl5Tti7Dti7Drk6QoVXNlciwgU2Vzc2lvbiwgQWNjb3VudCwgVmVyaWZpY2F0aW9uKeydhCDsg53shLHtlanri4jri6QuXG4gKlxuICog7Ji17IWYOlxuICogLS1wbHVnaW5zIHBob25lLW51bWJlciwyZmEgIO2UjOufrOq3uOyduCDsl5Tti7Dti7Drj4Qg7ZWo6ruYIOyDneyEsVxuICovXG5hc3luYyBmdW5jdGlvbiBhdXRoX2dlbmVyYXRlKCkge1xuICAvLyAtLXBsdWdpbnMg7Ji17IWYIO2MjOyLsVxuICBjb25zdCBwbHVnaW5zQXJnID0gcHJvY2Vzcy5hcmd2LmZpbmQoKGFyZykgPT4gYXJnLnN0YXJ0c1dpdGgoXCItLXBsdWdpbnNcIikpO1xuICBjb25zdCBwbHVnaW5zOiBCZXR0ZXJBdXRoUGx1Z2luSWRbXSA9IFtdO1xuXG4gIGlmIChwbHVnaW5zQXJnKSB7XG4gICAgY29uc3QgcGx1Z2luVmFsdWUgPSBwbHVnaW5zQXJnLmluY2x1ZGVzKFwiPVwiKVxuICAgICAgPyBwbHVnaW5zQXJnLnNwbGl0KFwiPVwiKVsxXVxuICAgICAgOiBwcm9jZXNzLmFyZ3ZbcHJvY2Vzcy5hcmd2LmluZGV4T2YocGx1Z2luc0FyZykgKyAxXTtcblxuICAgIGlmIChwbHVnaW5WYWx1ZSkge1xuICAgICAgY29uc3QgcGx1Z2luSWRzID0gcGx1Z2luVmFsdWUuc3BsaXQoXCIsXCIpLm1hcCgocCkgPT4gcC50cmltKCkpO1xuXG4gICAgICBmb3IgKGNvbnN0IGlkIG9mIHBsdWdpbklkcykge1xuICAgICAgICBpZiAoaXNWYWxpZFBsdWdpbklkKGlkKSkge1xuICAgICAgICAgIHBsdWdpbnMucHVzaChpZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGDimqAgVW5rbm93biBwbHVnaW46ICR7aWR9YCkpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmRpbShgICBTdXBwb3J0ZWQgcGx1Z2luczogJHtTVVBQT1JURURfUExVR0lOX0lEUy5qb2luKFwiLCBcIil9YCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93LmJvbGQoXCLwn5SQIEdlbmVyYXRpbmcgYmV0dGVyLWF1dGggZW50aXRpZXMuLi5cXG5cIikpO1xuXG4gIGlmIChwbHVnaW5zLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oYCAgUGx1Z2luczogJHtwbHVnaW5zLmpvaW4oXCIsIFwiKX1gKSk7XG4gIH1cblxuICBhd2FpdCBnZW5lcmF0ZUJldHRlckF1dGhFbnRpdGllcyh7IHBsdWdpbnMgfSk7XG59XG5cbi8qKlxuICogcG5wbSBzb25hbXUgYXV0aCBhZGQtY29tcGFuaW9ucyDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOq4sOyhtCDtlITroZzsoJ3tirjsnZggZW50aXR5Lmpzb27sl5AgZml4dHVyZUNvbXBhbmlvbnPrpbwg7IaM6riJIOy2lOqwgO2VqeuLiOuLpC5cbiAqXG4gKiDsnbTrr7ggZml4dHVyZUNvbXBhbmlvbnPqsIAg7J6I64qUIGVudGl0eeuKlCDsiqTtgrXtlanri4jri6QgKOuNruyWtOyTsOq4sCDsl4bsnYwpLlxuICovXG5hc3luYyBmdW5jdGlvbiBhdXRoX2FkZF9jb21wYW5pb25zKCkge1xuICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIvCflJAgQWRkaW5nIGZpeHR1cmVDb21wYW5pb25zIHRvIGJldHRlci1hdXRoIGVudGl0aWVzLi4uXFxuXCIpKTtcbiAgYXdhaXQgYWRkQ29tcGFuaW9uc1RvRW50aXRpZXMoKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIlxcbuKchSBEb25lIVwiKSk7XG59XG5cbi8qKlxuICog7JuM7YGs7Iqk7Y6Y7J207IqkIOujqO2KuOulvCDssL7sirXri4jri6QuXG4gKiDsmrDshKDsiJzsnIQ6IHBucG0td29ya3NwYWNlLnlhbWwgPiBwYWNrYWdlLmpzb24od29ya3NwYWNlcykgPiAuYWdlbnRzL1xuICpcbiAqIENMQVVERS5tZOuKlCDshJzruIztjKjtgqTsp4Dsl5Drj4Qg7KG07J6s7ZWgIOyImCDsnojsnLzrr4DroZwg7IKs7Jqp7ZWY7KeAIOyViuyKteuLiOuLpC5cbiAqIC5hZ2VudHMv64qUIGFnZW50cyBpbml07J20IOyDneyEse2VmOuKlCDrlJTroInthqDrpqzroZwsIOybjO2BrOyKpO2OmOydtOyKpCDro6jtirjsl5Drp4wg7KG07J6s7ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5kV29ya3NwYWNlUm9vdCgpIHtcbiAgbGV0IGRpciA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgd2hpbGUgKGRpciAhPT0gcGF0aC5kaXJuYW1lKGRpcikpIHtcbiAgICAvLyAxLiBwbnBtLXdvcmtzcGFjZS55YW1sOiDtmZXsi6TtlZwgbW9ub3JlcG8g66Oo7Yq4LlxuICAgIGlmIChhd2FpdCBleGlzdHMocGF0aC5qb2luKGRpciwgXCJwbnBtLXdvcmtzcGFjZS55YW1sXCIpKSkge1xuICAgICAgcmV0dXJuIGRpcjtcbiAgICB9XG5cbiAgICAvLyAyLiBwYWNrYWdlLmpzb27sl5Agd29ya3NwYWNlcyDtlYTrk5zqsIAg7J6I7Jy866m0IG1vbm9yZXBvIOujqO2KuC5cbiAgICBjb25zdCBwYWNrYWdlUGF0aCA9IHBhdGguam9pbihkaXIsIFwicGFja2FnZS5qc29uXCIpO1xuICAgIGlmIChhd2FpdCBleGlzdHMocGFja2FnZVBhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUocGFja2FnZVBhdGgsIFwidXRmLThcIikpO1xuICAgICAgICBpZiAocGFja2FnZUpzb24ud29ya3NwYWNlcykge1xuICAgICAgICAgIHJldHVybiBkaXI7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyDtjIzsi7Eg7Iuk7Yyo7IucIOustOyLnFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMuIC5hZ2VudHMvOiBhZ2VudHMgaW5pdOydtCDsg53shLHtlZwg65SU66CJ7Yag66asLiDshJzruIztjKjtgqTsp4Dsl5DripQg7KG07J6s7ZWY7KeAIOyViuydjC5cbiAgICBpZiAoYXdhaXQgZXhpc3RzKHBhdGguam9pbihkaXIsIFwiLmFnZW50c1wiKSkpIHtcbiAgICAgIHJldHVybiBkaXI7XG4gICAgfVxuXG4gICAgZGlyID0gcGF0aC5kaXJuYW1lKGRpcik7XG4gIH1cblxuICAvLyDssL7sp4Ag66q77ZWY66m0IGFwaSDtj7TrjZTsnZgg67aA66qoIOyCrOyaqVxuICByZXR1cm4gZmluZEFwcFJvb3RQYXRoKCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7WUFhc0M7b0JBS2tCO1NBQ1g7Y0FDRztxQkFDVztrQkFRN0I7Y0FDWTtXQUN1QjtBQU9qRSxJQUFJOzs7O0FBS0osU0FBUyxnQkFBZ0IsT0FBaUIsUUFBUSxNQUdoRDtDQUNBLE1BQU0sd0JBQVEsSUFBSSxJQUFZO0NBQzlCLE1BQU0sVUFBa0MsQ0FBQztDQUV6QyxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7RUFDcEMsTUFBTSxNQUFNLEtBQUs7RUFDakIsSUFBSSxDQUFDLElBQUksV0FBVyxJQUFJLEdBQUc7RUFHM0IsSUFBSSxJQUFJLFNBQVMsR0FBRyxHQUFHO0dBQ3JCLE1BQU0sQ0FBQyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRztHQUMzQyxRQUFRLE9BQU87R0FDZjtFQUNGO0VBR0EsTUFBTSxVQUFVLEtBQUssSUFBSTtFQUN6QixJQUFJLFdBQVcsQ0FBQyxRQUFRLFdBQVcsSUFBSSxLQUFLLENBQUMsUUFB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
|
package/dist/database/puri.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { type Knex } from "knex";
|
|
3
3
|
import { type TableSpec } from "../entity/entity-manager";
|
|
4
4
|
import { type ClearStatements } from "./puri-subset.types";
|
|
5
|
-
import { type AvailableColumns, type ColumnKeys, type ComparisonOperator, type Expand, type ExtractColumnType, type FulltextColumns, type FuzzyOperator, type InsertData, type InsertResult, type LeftJoinedMarker, type LeftJoinMarkerFor, type NumericColumns, type OnConflictAction, type ParseSelectObject, type ResultAvailableColumns, type SelectAllResult, type SelectObject, type SingleTableValue, type SqlExpression, type TsHighlightOptions, type TsQueryConfig, type TsQueryOptions, type TsRankOptions, type VectorColumns, type WhereCondition, type WhereOperator } from "./puri.types";
|
|
5
|
+
import { type AvailableColumns, type ColumnKeys, type ComparisonOperator, type Expand, type ExtractColumnType, type FulltextColumns, type FuzzyOperator, type InsertData, type InsertResult, type JsonColumns, type JsonSupersetValue, type LeftJoinedMarker, type LeftJoinMarkerFor, type NumericColumns, type OnConflictAction, type ParseSelectObject, type ResultAvailableColumns, type SelectAllResult, type SelectObject, type SingleTableValue, type SqlExpression, type TsHighlightOptions, type TsQueryConfig, type TsQueryOptions, type TsRankOptions, type VectorColumns, type WhereCondition, type WhereOperator } from "./puri.types";
|
|
6
6
|
type PuriOrderByDirection = "asc" | "desc";
|
|
7
7
|
type PuriOrderByNulls = "first" | "last";
|
|
8
8
|
type PuriOrderByExpression = SqlExpression<"number"> | SqlExpression<"string">;
|
|
@@ -122,6 +122,7 @@ export declare class Puri<TSchema, TTables extends Record<string, any>, TResult>
|
|
|
122
122
|
where<TColumn extends Knex.Raw>(column: TColumn, operator: WhereOperator, value: any): this;
|
|
123
123
|
whereIn<TColumn extends AvailableColumns<TTables>>(column: TColumn, values: ExtractColumnType<TTables, TColumn & string>[]): Puri<TSchema, TTables, TResult>;
|
|
124
124
|
whereNotIn<TColumn extends AvailableColumns<TTables>>(column: TColumn, values: ExtractColumnType<TTables, TColumn & string>[]): Puri<TSchema, TTables, TResult>;
|
|
125
|
+
whereJsonSupersetOf<TColumn extends JsonColumns<TTables>>(column: TColumn, value: JsonSupersetValue<ExtractColumnType<TTables, TColumn>>): this;
|
|
125
126
|
whereMatch<TColumn extends FulltextColumns<TTables>>(column: TColumn, value: string): this;
|
|
126
127
|
/**
|
|
127
128
|
* PGroonga FullText 인덱스 검색
|
|
@@ -234,6 +235,8 @@ export declare class WhereGroup<TTables extends Record<string, any>> {
|
|
|
234
235
|
orWhere<TColumn extends AvailableColumns<TTables>>(column: TColumn, operator: WhereOperator, value: ExtractColumnType<TTables, TColumn & string>): this;
|
|
235
236
|
orWhereIn<TColumn extends AvailableColumns<TTables>>(column: TColumn, values: ExtractColumnType<TTables, TColumn & string>[]): this;
|
|
236
237
|
orWhereNotIn<TColumn extends AvailableColumns<TTables>>(column: TColumn, values: ExtractColumnType<TTables, TColumn & string>[]): this;
|
|
238
|
+
whereJsonSupersetOf<TColumn extends JsonColumns<TTables>>(column: TColumn, value: JsonSupersetValue<ExtractColumnType<TTables, TColumn>>): this;
|
|
239
|
+
orWhereJsonSupersetOf<TColumn extends JsonColumns<TTables>>(column: TColumn, value: JsonSupersetValue<ExtractColumnType<TTables, TColumn>>): this;
|
|
237
240
|
whereMatch<TColumn extends FulltextColumns<TTables>>(column: TColumn, value: string): this;
|
|
238
241
|
orWhereMatch<TColumn extends FulltextColumns<TTables>>(column: TColumn, value: string): this;
|
|
239
242
|
whereSearch<TColumn extends AvailableColumns<TTables>>(column: TColumn | TColumn[], value: string, options?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puri.d.ts","sourceRoot":"","sources":["../../src/database/puri.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"puri.d.ts","sourceRoot":"","sources":["../../src/database/puri.ts"],"names":[],"mappings":"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"}
|