sonamu 0.10.4 → 0.10.6

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.
Files changed (82) hide show
  1. package/dist/bin/cli.js +206 -187
  2. package/dist/cone/cone-generator.js +3 -9
  3. package/dist/database/knex.d.ts.map +1 -1
  4. package/dist/database/knex.js +2 -2
  5. package/dist/database/puri.d.ts +17 -0
  6. package/dist/database/puri.d.ts.map +1 -1
  7. package/dist/database/puri.js +102 -3
  8. package/dist/migration/code-generation.js +6 -6
  9. package/dist/migration/migrator.d.ts.map +1 -1
  10. package/dist/migration/migrator.js +51 -6
  11. package/dist/ui-web/assets/{index-CDd6xT-F.js → index-D0MHYbxl.js} +2 -2
  12. package/dist/ui-web/assets/index-Dx_JX4aQ.css +1 -0
  13. package/dist/ui-web/index.html +2 -2
  14. package/package.json +2 -2
  15. package/src/bin/cli.ts +283 -282
  16. package/src/cone/cone-generator.ts +2 -18
  17. package/src/database/__tests__/puri.test.ts +183 -0
  18. package/src/database/knex.ts +4 -1
  19. package/src/database/puri.ts +229 -2
  20. package/src/database/puri.types.test-d.ts +56 -0
  21. package/src/migration/code-generation.ts +5 -5
  22. package/src/migration/migrator.ts +81 -7
  23. package/src/skills/AGENTS.md +76 -50
  24. package/src/skills/sonamu/SKILL.md +46 -227
  25. package/src/skills/{sonamu/ai-agents.md → sonamu-ai-agents/SKILL.md} +3 -3
  26. package/src/skills/{sonamu/api.md → sonamu-api/SKILL.md} +3 -2
  27. package/src/skills/{sonamu/auth.md → sonamu-auth/SKILL.md} +9 -4
  28. package/src/skills/{sonamu/auth-plugins.md → sonamu-auth/references/plugins.md} +2 -7
  29. package/src/skills/sonamu-auth/references/user-id-migration-followups.md +192 -0
  30. package/src/skills/{sonamu/auth-migration.md → sonamu-auth/references/user-id-migration.md} +1 -195
  31. package/src/skills/sonamu-config/SKILL.md +203 -0
  32. package/src/skills/{sonamu → sonamu-config/references}/database.md +3 -8
  33. package/src/skills/sonamu-config/references/environments.md +178 -0
  34. package/src/skills/sonamu-config/references/server-options.md +400 -0
  35. package/src/skills/sonamu-entity/SKILL.md +180 -0
  36. package/src/skills/{sonamu/entity-validation-checklist.md → sonamu-entity/references/creation-workflow.md} +117 -8
  37. package/src/skills/sonamu-entity/references/design-guides.md +243 -0
  38. package/src/skills/sonamu-entity/references/field-types.md +170 -0
  39. package/src/skills/sonamu-entity/references/relations-detail.md +245 -0
  40. package/src/skills/{sonamu/entity-relations.md → sonamu-entity/references/relations.md} +1 -258
  41. package/src/skills/{sonamu → sonamu-entity/references}/subset.md +1 -11
  42. package/src/skills/sonamu-fixture/SKILL.md +180 -0
  43. package/src/skills/{sonamu/fixture-cli.md → sonamu-fixture/references/cli-usage.md} +5 -176
  44. package/src/skills/{sonamu → sonamu-fixture/references}/cone.md +4 -14
  45. package/src/skills/sonamu-frontend/SKILL.md +142 -0
  46. package/src/skills/sonamu-frontend/references/components.md +323 -0
  47. package/src/skills/sonamu-frontend/references/examples.md +64 -0
  48. package/src/skills/sonamu-frontend/references/hooks.md +273 -0
  49. package/src/skills/sonamu-frontend/references/runtime.md +165 -0
  50. package/src/skills/{sonamu → sonamu-frontend/references}/scaffolding.md +3 -8
  51. package/src/skills/{sonamu/i18n.md → sonamu-i18n/SKILL.md} +2 -2
  52. package/src/skills/{sonamu/migration.md → sonamu-migration/SKILL.md} +1 -1
  53. package/src/skills/{sonamu/naite.md → sonamu-naite/SKILL.md} +5 -5
  54. package/src/skills/sonamu-query/SKILL.md +48 -0
  55. package/src/skills/sonamu-query/references/model-patterns.md +390 -0
  56. package/src/skills/{sonamu → sonamu-query/references}/model.md +1 -401
  57. package/src/skills/{sonamu → sonamu-query/references}/puri.md +31 -243
  58. package/src/skills/sonamu-query/references/search.md +238 -0
  59. package/src/skills/{sonamu → sonamu-query/references}/upsert.md +1 -6
  60. package/src/skills/{sonamu/tasks.md → sonamu-tasks/SKILL.md} +1 -1
  61. package/src/skills/sonamu-testing/SKILL.md +251 -0
  62. package/src/skills/{sonamu/testing-devrunner.md → sonamu-testing/references/devrunner.md} +4 -9
  63. package/src/skills/sonamu-testing/references/helpers.md +185 -0
  64. package/src/skills/sonamu-testing/references/patterns.md +263 -0
  65. package/src/skills/sonamu-testing/references/pitfalls.md +588 -0
  66. package/src/skills/sonamu-testing/references/quick-start.md +285 -0
  67. package/src/skills/sonamu-testing/references/type-safety.md +172 -0
  68. package/src/skills/sonamu-testing/references/writing-plan.md +375 -0
  69. package/src/skills/{sonamu/vector.md → sonamu-vector/SKILL.md} +1 -1
  70. package/dist/ui-web/assets/index-Dx4ap5i4.css +0 -1
  71. package/src/skills/commands/sonamu-skills.md +0 -20
  72. package/src/skills/project/README.md +0 -19
  73. package/src/skills/project/architecture.md +0 -373
  74. package/src/skills/sonamu/cdd.md +0 -129
  75. package/src/skills/sonamu/config.md +0 -772
  76. package/src/skills/sonamu/create-sonamu.md +0 -208
  77. package/src/skills/sonamu/entity-basic.md +0 -678
  78. package/src/skills/sonamu/framework-change.md +0 -96
  79. package/src/skills/sonamu/frontend.md +0 -915
  80. package/src/skills/sonamu/project-init.md +0 -477
  81. package/src/skills/sonamu/skill-contribution.md +0 -247
  82. package/src/skills/sonamu/testing.md +0 -2163
@@ -38,10 +38,9 @@ function getApiKey() {
38
38
  return apiKey;
39
39
  }
40
40
  /**
41
- * 도메인별 {domain}.contract.md와 architecture.md를 읽어 컨텍스트로 반환합니다.
41
+ * 도메인별 {domain}.contract.md를 읽어 컨텍스트로 반환합니다.
42
42
  *
43
- * - contract/{domain}/{domain}.contract.md: 도메인 규칙과 결정 근거 (주 참조 대상)
44
- * - .claude/skills/project/architecture.md: 엔티티 설계 구조 (보조 참조)
43
+ * - contract/{domain}/{domain}.contract.md: 도메인 규칙과 결정 근거
45
44
  *
46
45
  * cone 생성 시 LLM에게 전달하여 도메인 맥락에 맞는 메타데이터를 생성하도록 합니다.
47
46
  */
@@ -63,11 +62,6 @@ function readProjectSkills() {
63
62
  }
64
63
  }
65
64
  }
66
- const architecturePath = path$1.join(projectRoot, ".claude", "skills", "project", "architecture.md");
67
- if (fs$1.existsSync(architecturePath)) {
68
- const content = fs$1.readFileSync(architecturePath, "utf-8").trim();
69
- if (content) contents.push(`--- architecture.md ---\n${content}`);
70
- }
71
65
  return contents.join("\n\n");
72
66
  } catch {
73
67
  return "";
@@ -298,4 +292,4 @@ function mergeOnlyEmpty(generated, existing) {
298
292
  __esmMin((() => {}))();
299
293
  export { generateCones };
300
294
 
301
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZS1nZW5lcmF0b3IuanMiLCJuYW1lcyI6WyJwYXRoIiwiZnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZS9jb25lLWdlbmVyYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmltcG9ydCB7IHR5cGUgQ29uZSwgdHlwZSBFbnRpdHlKc29uIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5cbi8qKlxuICogQ29uZSDsg53shLEg7Luo7YWN7Iqk7Yq4XG4gKlxuICogRW50aXR5IOygleuztOyZgCDsg53shLEg7Ji17IWY7J2EIOuLtOqzoCDsnojsirXri4jri6QuXG4gKi9cbmV4cG9ydCB0eXBlIENvbmVHZW5lcmF0aW9uQ29udGV4dCA9IHtcbiAgZW50aXR5OiBFbnRpdHlKc29uO1xuICBsb2NhbGU/OiBcImtvXCIgfCBcImVuXCIgfCBcImphXCI7XG4gIGV4aXN0aW5nQ29uZXM/OiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgLyoqIHRydWXsnbgg6rK97JqwIG5vdGXqsIAg7JeG64qUIGNvbmXrp4wg7IOd7ISxICovXG4gIG9ubHlFbXB0eT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIENvbmUg7IOd7ISxIOqysOqzvFxuICpcbiAqIEVudGl0eSwgUHJvcHMsIFN1YnNldHMsIEVudW1z7J2YIGNvbmUg66mU7YOA642w7J207YSw66W8IOuLtOqzoCDsnojsirXri4jri6QuXG4gKi9cbmV4cG9ydCB0eXBlIENvbmVHZW5lcmF0aW9uUmVzdWx0ID0ge1xuICBlbnRpdHlDb25lPzogQ29uZTtcbiAgcHJvcENvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgc3Vic2V0Q29uZXM6IFJlY29yZDxzdHJpbmcsIENvbmU+O1xuICBlbnVtQ29uZXM6IFJlY29yZDxzdHJpbmcsIENvbmU+O1xuICB0b2tlbnNVc2VkOiBudW1iZXI7XG59O1xuXG4vKipcbiAqIExMTeydhCDsgqzsmqntlZjsl6wgRW50aXR57J2YIGNvbmUg66mU7YOA642w7J207YSw66W8IOyDneyEse2VqeuLiOuLpC5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCAtIEVudGl0eSDsoJXrs7TsmYAg7IOd7ISxIOyYteyFmFxuICogQHJldHVybnMg7IOd7ISx65CcIGNvbmUg66mU7YOA642w7J207YSwXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUNvbmVzKGNvbnRleHQ6IENvbmVHZW5lcmF0aW9uQ29udGV4dCk6IFByb21pc2U8Q29uZUdlbmVyYXRpb25SZXN1bHQ+IHtcbiAgY29uc3QgYXBpS2V5ID0gZ2V0QXBpS2V5KCk7XG4gIGNvbnN0IHByb21wdCA9IGJ1aWxkUHJvbXB0KGNvbnRleHQpO1xuICBjb25zdCB7IHRleHQ6IHJlc3BvbnNlVGV4dCwgdG9rZW5zVXNlZCB9ID0gYXdhaXQgY2FsbEFudGhyb3BpY0FQSShwcm9tcHQsIGFwaUtleSk7XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlQ29uZVJlc3BvbnNlKHJlc3BvbnNlVGV4dCk7XG4gIHJlc3VsdC50b2tlbnNVc2VkID0gdG9rZW5zVXNlZDtcblxuICBpZiAoY29udGV4dC5leGlzdGluZ0NvbmVzKSB7XG4gICAgaWYgKGNvbnRleHQub25seUVtcHR5KSB7XG4gICAgICByZXR1cm4gbWVyZ2VPbmx5RW1wdHkocmVzdWx0LCBjb250ZXh0LmV4aXN0aW5nQ29uZXMpO1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VXaXRoRXhpc3RpbmcocmVzdWx0LCBjb250ZXh0LmV4aXN0aW5nQ29uZXMpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBBUEkg7YKk66W8IOqwgOyguOyYteuLiOuLpC5cbiAqXG4gKiBTb25hbXUuc2VjcmV0IOuYkOuKlCDtmZjqsr3rs4DsiJjsl5DshJwg6rCA7KC47Ji164uI64ukLlxuICovXG5mdW5jdGlvbiBnZXRBcGlLZXkoKTogc3RyaW5nIHtcbiAgLy8gU29uYW11LnNlY3JldOydgCDrn7Dtg4DsnoTsl5Ag66Gc65Oc65CY66+A66GcIOuPmeyggeycvOuhnCBpbXBvcnRcbiAgbGV0IGFwaUtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgLy8gU29uYW116rCAIOy0iOq4sO2ZlOuQmOyWtCDsnojripQg6rK97JqwXG4gICAgY29uc3QgeyBTb25hbXUgfSA9IHJlcXVpcmUoXCIuLi9hcGlcIik7XG4gICAgYXBpS2V5ID0gU29uYW11LnNlY3JldHM/LmFudGhyb3BpY19hcGlfa2V5O1xuICB9IGNhdGNoIHtcbiAgICAvLyBTb25hbXXqsIAg7LSI6riw7ZmU65CY7KeAIOyViuydgCDqsr3smrAgKO2FjOyKpO2KuCDrk7EpXG4gICAgYXBpS2V5ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFhcGlLZXkpIHtcbiAgICBhcGlLZXkgPSBwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWTtcbiAgfVxuXG4gIGlmICghYXBpS2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJBTlRIUk9QSUNfQVBJX0tFWSBub3QgZm91bmQuIFwiICtcbiAgICAgICAgXCJTZXQgQU5USFJPUElDX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgYWRkIGl0IHRvIHNvbmFtdS5zZWNyZXQudHNcIixcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGFwaUtleTtcbn1cblxuLyoqXG4gKiDrj4TrqZTsnbjrs4Qge2RvbWFpbn0uY29udHJhY3QubWTsmYAgYXJjaGl0ZWN0dXJlLm1k66W8IOydveyWtCDsu6jthY3siqTtirjroZwg67CY7ZmY7ZWp64uI64ukLlxuICpcbiAqIC0gY29udHJhY3Qve2RvbWFpbn0ve2RvbWFpbn0uY29udHJhY3QubWQ6IOuPhOuplOyduCDqt5zsuZnqs7wg6rKw7KCVIOq3vOqxsCAo7KO8IOywuOyhsCDrjIDsg4EpXG4gKiAtIC5jbGF1ZGUvc2tpbGxzL3Byb2plY3QvYXJjaGl0ZWN0dXJlLm1kOiDsl5Tti7Dti7Ag7ISk6rOEIOq1rOyhsCAo67O07KGwIOywuOyhsClcbiAqXG4gKiBjb25lIOyDneyEsSDsi5wgTExN7JeQ6rKMIOyghOuLrO2VmOyXrCDrj4TrqZTsnbgg66el65297JeQIOunnuuKlCDrqZTtg4DrjbDsnbTthLDrpbwg7IOd7ISx7ZWY64+E66GdIO2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gcmVhZFByb2plY3RTa2lsbHMoKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IFNvbmFtdSB9ID0gcmVxdWlyZShcIi4uL2FwaVwiKTtcbiAgICBjb25zdCBwcm9qZWN0Um9vdCA9IFNvbmFtdS5hcHBSb290UGF0aDtcbiAgICBjb25zdCBjb250ZW50czogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIGNvbnRyYWN0LyoqLyouY29udHJhY3QubWQg7IiY7KeRXG4gICAgY29uc3QgY29udHJhY3REaXIgPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsIFwiY29udHJhY3RcIik7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoY29udHJhY3REaXIpKSB7XG4gICAgICBjb25zdCBkb21haW5zID0gZnNcbiAgICAgICAgLnJlYWRkaXJTeW5jKGNvbnRyYWN0RGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSlcbiAgICAgICAgLmZpbHRlcigoZCkgPT4gZC5pc0RpcmVjdG9yeSgpKVxuICAgICAgICAubWFwKChkKSA9PiBkLm5hbWUpO1xuXG4gICAgICBmb3IgKGNvbnN0IGRvbWFpbiBvZiBkb21haW5zKSB7XG4gICAgICAgIGNvbnN0IGRvbWFpbkRpciA9IHBhdGguam9pbihjb250cmFjdERpciwgZG9tYWluKTtcbiAgICAgICAgY29uc3QgY29udHJhY3RGaWxlcyA9IGZzXG4gICAgICAgICAgLnJlYWRkaXJTeW5jKGRvbWFpbkRpcilcbiAgICAgICAgICAuZmlsdGVyKChmOiBzdHJpbmcpID0+IGYuZW5kc1dpdGgoXCIuY29udHJhY3QubWRcIikpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBjb250cmFjdEZpbGVzKSB7XG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZG9tYWluRGlyLCBmaWxlKTtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCBcInV0Zi04XCIpLnRyaW0oKTtcbiAgICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgICAgY29udGVudHMucHVzaChgLS0tIGNvbnRyYWN0LyR7ZG9tYWlufS8ke2ZpbGV9IC0tLVxcbiR7Y29udGVudH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAuY2xhdWRlL3NraWxscy9wcm9qZWN0L2FyY2hpdGVjdHVyZS5tZCDrs7TsobAg7LC47KGwXG4gICAgY29uc3QgYXJjaGl0ZWN0dXJlUGF0aCA9IHBhdGguam9pbihcbiAgICAgIHByb2plY3RSb290LFxuICAgICAgXCIuY2xhdWRlXCIsXG4gICAgICBcInNraWxsc1wiLFxuICAgICAgXCJwcm9qZWN0XCIsXG4gICAgICBcImFyY2hpdGVjdHVyZS5tZFwiLFxuICAgICk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoYXJjaGl0ZWN0dXJlUGF0aCkpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoYXJjaGl0ZWN0dXJlUGF0aCwgXCJ1dGYtOFwiKS50cmltKCk7XG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICBjb250ZW50cy5wdXNoKGAtLS0gYXJjaGl0ZWN0dXJlLm1kIC0tLVxcbiR7Y29udGVudH1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29udGVudHMuam9pbihcIlxcblxcblwiKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gU29uYW11IOuvuOy0iOq4sO2ZlCDrmJDripQg7YyM7J28IOygkeq3vCDsmKTrpZgg7IucIOu5iCDrrLjsnpDsl7Qg67CY7ZmYXG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cblxuLyoqXG4gKiBMTE0g7ZSE66Gs7ZSE7Yq466W8IOyDneyEse2VqeuLiOuLpC5cbiAqXG4gKiBhaS1jbGllbnQudHMg7Yyo7YS07J2EIOywuOqzoO2VmOyXrCDrqoXtmZXtlZwg7KeA7Iuc7IKs7ZWt6rO8IOy2nOugpSDtmJXsi53snYQg7KCc6rO17ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBidWlsZFByb21wdChjb250ZXh0OiBDb25lR2VuZXJhdGlvbkNvbnRleHQpOiBzdHJpbmcge1xuICBjb25zdCBsb2NhbGUgPSBjb250ZXh0LmxvY2FsZSB8fCBcImtvXCI7XG4gIGNvbnN0IGxvY2FsZURlc2MgPSB7XG4gICAga286IFwiS29yZWFuXCIsXG4gICAgZW46IFwiRW5nbGlzaFwiLFxuICAgIGphOiBcIkphcGFuZXNlXCIsXG4gIH1bbG9jYWxlXTtcblxuICBjb25zdCBwcm9qZWN0Q29udGV4dCA9IHJlYWRQcm9qZWN0U2tpbGxzKCk7XG4gIGNvbnN0IHByb2plY3RTZWN0aW9uID0gcHJvamVjdENvbnRleHRcbiAgICA/IGBcXG5QUk9KRUNUIENPTlRFWFQgKGJ1c2luZXNzIHJlcXVpcmVtZW50cyBhbmQgZG9tYWluIGtub3dsZWRnZSk6XFxuJHtwcm9qZWN0Q29udGV4dH1cXG5cXG5Vc2UgdGhlIGFib3ZlIHByb2plY3QgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBidXNpbmVzcyBkb21haW4sIGVudGl0eSBwdXJwb3NlcywgZmllbGQgbWVhbmluZ3MsIGFuZCByZWxhdGlvbnNoaXBzLiBHZW5lcmF0ZSBjb25lIG1ldGFkYXRhIHRoYXQgcmVmbGVjdHMgdGhpcyBwcm9qZWN0J3MgYWN0dWFsIHJlcXVpcmVtZW50cywgbm90IGdlbmVyaWMgYXNzdW1wdGlvbnMuXFxuYFxuICAgIDogXCJcIjtcblxuICByZXR1cm4gYFlvdSBhcmUgYSBTb25hbXUgZnJhbWV3b3JrIGV4cGVydC4gR2VuZXJhdGUgY29uZSBtZXRhZGF0YSBmb3IgZGF0YWJhc2UgZW50aXR5IGZpeHR1cmUgZ2VuZXJhdGlvbi5cblxuQ1JJVElDQUwgUFJJT1JJVFkgUlVMRTpcblRoZSBcIm5vdGVcIiBmaWVsZCBpcyB0aGUgUFJJTUFSWSBzb3VyY2UgZm9yIGZpeHR1cmUgZGF0YSBnZW5lcmF0aW9uLiBXaGVuIC0tdXNlLWxsbSBpcyBlbmFibGVkLCB0aGUgZml4dHVyZSBnZW5lcmF0b3IgcmVhZHMgY29uZS5ub3RlIGFuZCBhc2tzIExMTSB0byBnZW5lcmF0ZSBjb250ZXh0dWFsbHkgYXBwcm9wcmlhdGUgZGF0YSBCRUZPUkUgZmFsbGluZyBiYWNrIHRvIGZpeHR1cmVHZW5lcmF0b3IuXG5UaGVyZWZvcmUsIGNvbmUubm90ZSBtdXN0IGFsd2F5cyBjb250YWluIHJpY2gsIGRvbWFpbi1zcGVjaWZpYyBkZXNjcmlwdGlvbnMgd2l0aCBjb25jcmV0ZSBleGFtcGxlcyBhbmQgdmFsdWUgcmFuZ2VzLlxuZml4dHVyZUdlbmVyYXRvciBpcyBvbmx5IGEgRkFMTEJBQ0sgZm9yIHdoZW4gTExNIGlzIHVuYXZhaWxhYmxlIChubyBBUEkga2V5KS4gV3JpdGUgaXQgYXMgYSBiZXN0LWVmZm9ydCBhcHByb3hpbWF0aW9uLCBidXQgbmV2ZXIgcmVseSBvbiBpdCBhcyB0aGUgcHJpbWFyeSBnZW5lcmF0aW9uIG1ldGhvZC5cbiR7cHJvamVjdFNlY3Rpb259XG5FTlRJVFkgU1RSVUNUVVJFOlxuJHtKU09OLnN0cmluZ2lmeShjb250ZXh0LmVudGl0eSwgbnVsbCwgMil9XG5cbkxPQ0FMRTogJHtsb2NhbGV9ICgke2xvY2FsZURlc2N9KVxuXG5JTlNUUlVDVElPTlM6XG4xLiBFbnRpdHkgY29uZSBtZXRhZGF0YTpcbiAgIC0gbm90ZTogRGVzY3JpYmUgd2hhdCB0aGlzIGVudGl0eSByZXByZXNlbnRzLCBpdHMgcHVycG9zZSwgcmVsYXRpb25zaGlwcywgYnVzaW5lc3MgY29udGV4dCwgYW5kIG92ZXJhbGwgZ3VpZGFuY2UgZm9yIGdlbmVyYXRpbmcgdGVzdCBkYXRhLiBDb21iaW5lIGFsbCByZWxldmFudCBpbmZvcm1hdGlvbiBpbnRvIG9uZSBjb2hlcmVudCBkZXNjcmlwdGlvbi5cbiAgIC0gdGFnczogUmVsZXZhbnQgY2F0ZWdvcml6YXRpb24gdGFnc1xuXG4yLiBGb3IgZWFjaCBwcm9wLCBnZW5lcmF0ZSBhcHByb3ByaWF0ZSBjb25lIG1ldGFkYXRhOlxuICAgLSBub3RlIChNT1NUIElNUE9SVEFOVCk6IERlc2NyaWJlIHdoYXQgdGhpcyBmaWVsZCByZXByZXNlbnRzIGluIGJ1c2luZXNzIHRlcm1zLCBhbmQgcHJvdmlkZSBkZXRhaWxlZCBndWlkYW5jZSBmb3IgcmVhbGlzdGljIHRlc3QgZGF0YSBnZW5lcmF0aW9uLiBJbmNsdWRlIGNvbmNyZXRlIGV4YW1wbGVzLCB2YWx1ZSByYW5nZXMsIGZvcm1hdHRpbmcgcnVsZXMsIGFuZCBkb21haW4gY29uc3RyYWludHMuIFRoaXMgaXMgdGhlIHByaW1hcnkgaW5wdXQgTExNIHVzZXMgdG8gZ2VuZXJhdGUgZml4dHVyZSBkYXRhLlxuICAgLSBmaXh0dXJlR2VuZXJhdG9yOiBmYWtlci5qcyBleHByZXNzaW9uIGFzIEZBTExCQUNLIG9ubHkgKHNlZSBydWxlIDkgZm9yIGV4Y2VwdGlvbnMpLiBGb3IgZnJlZS10ZXh0IGZpZWxkcyB3aGVyZSBmYWtlciBjYW5ub3QgcHJvZHVjZSBkb21haW4tYXBwcm9wcmlhdGUgY29udGVudCAoZGVzY3JpcHRpb24sIHN1bW1hcnksIG5vdGUsIHJlYXNvbiwgdGl0bGUsIGV0Yy4pLCBwcmVmZXIgdXNpbmcgZmFrZXIuaGVscGVycy5hcnJheUVsZW1lbnQoWy4uLl0pIHdpdGggNS0xMCBkb21haW4tc3BlY2lmaWMgZXhhbXBsZSB2YWx1ZXMgcmF0aGVyIHRoYW4gZmFrZXIubG9yZW0uKi5cblxuMy4gRmllbGQgdHlwZSDihpIgZmFrZXIuanMgbWFwcGluZzpcbiAgIC0gZW1haWwg4oaSIGZha2VyLmludGVybmV0LmVtYWlsKClcbiAgIC0gcGhvbmUg4oaSIGZha2VyLnBob25lLm51bWJlcigpXG4gICAtIG5hbWUvdXNlcm5hbWUg4oaSIGZha2VyLnBlcnNvbi5mdWxsTmFtZSgpICh3aXRoIGxvY2FsZSlcbiAgIC0gYmlydGhfZGF0ZSDihpIgZmFrZXIuZGF0ZS5iaXJ0aGRhdGUoeyBtaW46IDE4LCBtYXg6IDY1LCBtb2RlOiAnYWdlJyB9KVxuICAgLSBzYWxhcnkg4oaSIGZha2VyLm51bWJlci5pbnQoeyBtaW46IDMwXzAwMF8wMDAsIG1heDogMTUwXzAwMF8wMDAgfSkgZm9yIGtvIGxvY2FsZVxuICAgLSBjb21wYW55X25hbWUg4oaSIGZha2VyLmNvbXBhbnkubmFtZSgpXG4gICAtIGFkZHJlc3Mg4oaSIGZha2VyLmxvY2F0aW9uLnN0cmVldEFkZHJlc3MoKVxuXG40LiBSZWxhdGlvbiBmaWVsZHMgKEJlbG9uZ3NUb09uZSwgT25lVG9PbmUgd2l0aCBoYXNKb2luQ29sdW1uKTpcbiAgIC0gQWx3YXlzIGFkZCBkYXRhU291cmNlOiB7IHN0cmF0ZWd5OiBcInJlY2VudFwiLCBjb25maWc6IHsgbGltaXQ6IDMtNSB9IH1cbiAgIC0gbm90ZTogRXhwbGFpbiB3aGF0IHRoaXMgcmVsYXRpb24gcmVwcmVzZW50cyBhbmQgdGhhdCBpdCByZWZlcmVuY2VzIGV4aXN0aW5nIGRhdGFcblxuNS4gU3Vic2V0cyBjb25lIG1ldGFkYXRhIChJTVBPUlRBTlQgLSBnZW5lcmF0ZSBmb3IgQUxMIHN1YnNldHMpOlxuICAgLSBub3RlOiBEZXNjcmliZSB3aGF0IHRoaXMgc3Vic2V0IHJlcHJlc2VudHMsIHdoYXQgZmllbGRzIGl0IGluY2x1ZGVzLCBhbmQgd2hlbiB0byB1c2UgaXRcblxuNi4gRW51bXMgY29uZSBtZXRhZGF0YSAoSU1QT1JUQU5UIC0gZ2VuZXJhdGUgZm9yIEFMTCBlbnVtcyk6XG4gICAtIG5vdGU6IERlc2NyaWJlIHdoYXQgdGhpcyBlbnVtIHJlcHJlc2VudHMuIElmIGFueSBwcm9wIHVzZXMgdGhpcyBlbnVtIHR5cGUsIGluY2x1ZGUgdGhlIHNhbWUgZ3VpZGFuY2UgZnJvbSB0aGF0IHByb3AncyBub3RlLlxuICAgLSBGb3IgZWFjaCBlbnVtIHZhbHVlLCBwcm92aWRlIG5vdGUgZXhwbGFpbmluZyB3aGF0IHRoYXQgc3BlY2lmaWMgdmFsdWUgbWVhbnNcblxuNy4gS29yZWFuIGZpZWxkIG5hbWVzIChsb2NhbGU9a28pOlxuICAgLSBJbmZlciBtZWFuaW5nIGFuZCBnZW5lcmF0ZSBhcHByb3ByaWF0ZSBmYWtlclxuICAgLSBcIuydtOumhFwiIOKGkiBmYWtlci5wZXJzb24uZnVsbE5hbWUoKVxuICAgLSBcIuyDneuFhOyblOydvFwiIOKGkiBmYWtlci5kYXRlLmJpcnRoZGF0ZSgpXG4gICAtIFwi7KO87IaMXCIg4oaSIGZha2VyLmxvY2F0aW9uLnN0cmVldEFkZHJlc3MoKVxuXG44LiBMb2NhbGUtc3BlY2lmaWMgdmFsdWVzOlxuICAgLSBrbzogS29yZWFuIG5hbWVzLCBhZGRyZXNzZXMsIHBob25lIG51bWJlcnMgKDAxMC1YWFhYLVhYWFggZm9ybWF0KVxuICAgLSBlbjogRW5nbGlzaCBuYW1lcywgVVMgYWRkcmVzc2VzXG4gICAtIGphOiBKYXBhbmVzZSBuYW1lcywgYWRkcmVzc2VzXG5cbjkuIENvcnJlbGF0ZWQgZmllbGRzIChJTVBPUlRBTlQgLSBkbyBOT1QgdXNlIGZpeHR1cmVHZW5lcmF0b3IgZm9yIHRoZXNlKTpcbiAgIElmIG11bHRpcGxlIHByb3BzIGFyZSBzZW1hbnRpY2FsbHkgcmVsYXRlZCBhbmQgbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggZWFjaCBvdGhlciAoZS5nLiBuYW1lICsgbmFtZV9lbiwgbmFtZSArIG5hbWVfamEsIHRpdGxlICsgdGl0bGVfZW4pLCBkbyBOT1Qgc2V0IGZpeHR1cmVHZW5lcmF0b3Igb24gYW55IG9mIHRoZW0uXG4gICBJbnN0ZWFkLCBzZXQgb25seSBub3RlIHdpdGggYSBjbGVhciBkZXNjcmlwdGlvbiB0aGF0IGV4cGxhaW5zIHRoZSByZWxhdGlvbnNoaXAuXG4gICBFeGFtcGxlOiBpZiBuYW1lIGlzIGEgS29yZWFuIGZ1bGwgbmFtZSBsaWtlIFwi6rmA66+87IiYXCIsIHRoZW4gbmFtZV9lbiBtdXN0IGJlIGl0cyByb21hbml6ZWQgZm9ybSBcIktpbSBNaW5zdVwiLlxuICAgVGhlIGZpeHR1cmUgZ2VuZXJhdG9yIHdpbGwgcGFzcyBhbGwgc3VjaCBwcm9wcyB0b2dldGhlciB0byBMTE0gaW4gYSBzaW5nbGUgY2FsbCB0byBlbnN1cmUgY29uc2lzdGVuY3kuXG4gICBEZXRlY3Rpb24gcnVsZTogaWYgYSBwcm9wIG5hbWUgbWF0Y2hlcyBhbm90aGVyIHByb3AgbmFtZSB3aXRoIGEgbG9jYWxlIHN1ZmZpeCAoX2VuLCBfa28sIF9qYSwgX2NuKSBvciB2aWNlIHZlcnNhLCB0cmVhdCB0aGVtIGFzIGNvcnJlbGF0ZWQuXG5cbjEwLiBTdHJpbmcgUEsgaWQ6XG4gICAtIE5ldmVyIHNldCBmaXh0dXJlU3RyYXRlZ3k6IFwic2VxdWVuY2VcIiBvbiBhbiBpZCBwcm9wIHdpdGggdHlwZSBcInN0cmluZ1wiLlxuICAgLSBEbyBub3Qgc2V0IGZpeHR1cmVHZW5lcmF0b3IgZWl0aGVyIOKAlCBmaXh0dXJlLWdlbmVyYXRvciBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlcyBhbHBoYW51bWVyaWMoMzIpLlxuICAgLSBJbiBub3RlLCBkZXNjcmliZSBob3cgdGhlIGlkIGlzIGdlbmVyYXRlZCAoZS5nLiByYW5kb20gc3RyaW5nIGdlbmVyYXRlZCBieSBiZXR0ZXItYXV0aCkuXG5cbjExLiBmaXh0dXJlQ29tcGFuaW9ucyAoSU1QT1JUQU5UIC0gbmV2ZXIgZ2VuZXJhdGUgb3IgbW9kaWZ5KTpcbiAgIC0gZml4dHVyZUNvbXBhbmlvbnMgaXMgdXNlci1kZWNsYXJlZCBtZXRhZGF0YSB0aGF0IHRyaWdnZXJzIGF1dG9tYXRpYyBjb21wYW5pb24gZml4dHVyZSBjcmVhdGlvbiB3aGVuIGEgcGFyZW50IGZpeHR1cmUgaXMgZ2VuZXJhdGVkLlxuICAgLSBEbyBOT1QgZ2VuZXJhdGUgb3Igc3VnZ2VzdCBmaXh0dXJlQ29tcGFuaW9ucyBmb3IgYW55IHByb3AuIE9ubHkgdXNlcnMgZGVjbGFyZSB0aGlzIGludGVudGlvbmFsbHkuXG4gICAtIElmIGEgcHJvcCdzIGV4aXN0aW5nIGNvbmUgYWxyZWFkeSBjb250YWlucyBmaXh0dXJlQ29tcGFuaW9ucywgcHJlc2VydmUgaXQgZXhhY3RseSBhcy1pcyBpbiB0aGUgcHJvcENvbmVzIG91dHB1dC4gRG8gbm90IHJlbW92ZSwgYWx0ZXIsIG9yIG9taXQgaXQuXG4gICAtIEV4YW1wbGU6IGlmIFVzZXIgZW50aXR5J3MgXCJpZFwiIHByb3AgY29uZSBoYXMgZml4dHVyZUNvbXBhbmlvbnMsIGluY2x1ZGUgaXQgdW5jaGFuZ2VkIGluIHByb3BDb25lc1tcImlkXCJdLlxuXG4ke1xuICBjb250ZXh0LmV4aXN0aW5nQ29uZXNcbiAgICA/IGBcbkVYSVNUSU5HIENPTkVTIChwcmVzZXJ2ZSB0aGVzZSBpZiBwcmVzZW50KTpcbiR7SlNPTi5zdHJpbmdpZnkoY29udGV4dC5leGlzdGluZ0NvbmVzLCBudWxsLCAyKX1cbmBcbiAgICA6IFwiXCJcbn1cblxuT1VUUFVUIEZPUk1BVDpcblJldHVybiBPTkxZIHZhbGlkIEpTT04gKG5vIG1hcmtkb3duLCBubyBjb2RlIGJsb2NrcykuIFVzZSB0aGlzIGV4YWN0IHN0cnVjdHVyZTpcbntcbiAgXCJlbnRpdHlDb25lXCI6IHtcbiAgICBcIm5vdGVcIjogXCJEZXNjcmlwdGlvbiBvZiB0aGUgZW50aXR5LCBpdHMgcHVycG9zZSwgYW5kIGd1aWRhbmNlIGZvciBmaXh0dXJlIGdlbmVyYXRpb25cIixcbiAgICBcInRhZ3NcIjogW1wib3B0aW9uYWxcIiwgXCJ0YWdzXCJdXG4gIH0sXG4gIFwicHJvcENvbmVzXCI6IHtcbiAgICBcInByb3BfbmFtZVwiOiB7XG4gICAgICBcIm5vdGVcIjogXCJEZXNjcmlwdGlvbiBvZiB0aGlzIGZpZWxkIGFuZCBndWlkYW5jZSBmb3IgcmVhbGlzdGljIHRlc3QgZGF0YSBnZW5lcmF0aW9uXCIsXG4gICAgICBcImZpeHR1cmVHZW5lcmF0b3JcIjogXCJmYWtlci54eHgueXl5KClcIixcbiAgICAgIFwiZGF0YVNvdXJjZVwiOiB7IFwic3RyYXRlZ3lcIjogXCJyZWNlbnRcIiwgXCJjb25maWdcIjogeyBcImxpbWl0XCI6IDUgfSB9XG4gICAgfVxuICB9LFxuICBcInN1YnNldENvbmVzXCI6IHtcbiAgICBcIkFcIjoge1xuICAgICAgXCJub3RlXCI6IFwiRGVzY3JpcHRpb24gb2Ygc3Vic2V0IEEsIHdoYXQgZmllbGRzIGl0IGluY2x1ZGVzLCBhbmQgd2hlbiB0byB1c2UgaXRcIlxuICAgIH1cbiAgfSxcbiAgXCJlbnVtQ29uZXNcIjoge1xuICAgIFwiRW51bU5hbWVcIjoge1xuICAgICAgXCJub3RlXCI6IFwiRGVzY3JpcHRpb24gb2YgdGhlIGVudW0gYW5kIGd1aWRhbmNlIGZvciBnZW5lcmF0aW5nIHZhbHVlc1wiLFxuICAgICAgXCJ2YWx1ZXNcIjoge1xuICAgICAgICBcIlZBTFVFX0tFWVwiOiB7XG4gICAgICAgICAgXCJub3RlXCI6IFwiJHtsb2NhbGVEZXNjfSBkZXNjcmlwdGlvbiBvZiB0aGlzIGVudW0gdmFsdWVcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbklNUE9SVEFOVDogUmV0dXJuIHB1cmUgSlNPTiBvbmx5LiBEbyBOT1Qgd3JhcCBpbiBtYXJrZG93biBjb2RlIGJsb2Nrcy5gO1xufVxuXG4vKipcbiAqIEFudGhyb3BpYyBBUEnrpbwg7Zi47Lac7ZWY7JesIExMTSDsnZHri7XsnYQg67Cb7Iq164uI64ukLlxuICpcbiAqIEBwYXJhbSBwcm9tcHQgLSDsg53shLHtlaAg7ZSE66Gs7ZSE7Yq4XG4gKiBAcGFyYW0gYXBpS2V5IC0gQW50aHJvcGljIEFQSSDtgqRcbiAqIEByZXR1cm5zIExMTSDsnZHri7Ug7YWN7Iqk7Yq4IOuwjyDthqDtgbAg7IKs7Jqp65+JXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhbGxBbnRocm9waWNBUEkoXG4gIHByb21wdDogc3RyaW5nLFxuICBhcGlLZXk6IHN0cmluZyxcbik6IFByb21pc2U8eyB0ZXh0OiBzdHJpbmc7IHRva2Vuc1VzZWQ6IG51bWJlciB9PiB7XG4gIHRyeSB7XG4gICAgLy8gQGFpLXNkay9hbnRocm9waWPqs7wgYWkg7Yyo7YKk7KeA64qUIG9wdGlvbmFsIGRlcGVuZGVuY3nsnbTrr4DroZwg64+Z7KCBIGltcG9ydFxuICAgIGNvbnN0IHsgY3JlYXRlQW50aHJvcGljIH0gPSBhd2FpdCBpbXBvcnQoXCJAYWktc2RrL2FudGhyb3BpY1wiKTtcbiAgICBjb25zdCB7IGdlbmVyYXRlVGV4dCB9ID0gYXdhaXQgaW1wb3J0KFwiYWlcIik7XG5cbiAgICBjb25zdCBhbnRocm9waWMgPSBjcmVhdGVBbnRocm9waWMoe1xuICAgICAgYXBpS2V5LFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyB0ZXh0LCB1c2FnZSB9ID0gYXdhaXQgZ2VuZXJhdGVUZXh0KHtcbiAgICAgIG1vZGVsOiBhbnRocm9waWMoXCJjbGF1ZGUtc29ubmV0LTQtNlwiKSxcbiAgICAgIHByb21wdCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2Vuc1VzZWQgPSB1c2FnZT8udG90YWxUb2tlbnMgfHwgMDtcbiAgICBpZiAodXNhZ2UpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbQ29uZSBHZW5lcmF0b3JdIFRva2VucyB1c2VkOiAke3Rva2Vuc1VzZWR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdGV4dCwgdG9rZW5zVXNlZCB9O1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGlmIChlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgXCJzdGF0dXNDb2RlXCIgaW4gZXJyb3IpIHtcbiAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSAoZXJyb3IgYXMgeyBzdGF0dXNDb2RlOiBudW1iZXIgfSkuc3RhdHVzQ29kZTtcbiAgICAgIGlmIChzdGF0dXNDb2RlID09PSA0MjkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmF0ZSBsaW1pdCBleGNlZWRlZC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBjYXVzZTogZXJyb3IgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBMTE0gQVBJIGZhaWxlZDogJHttZXNzYWdlfWAsIHsgY2F1c2U6IGVycm9yIH0pO1xuICB9XG59XG5cbi8qKlxuICogTExNIOydkeuLteydhCDtjIzsi7HtlZjsl6wgQ29uZUdlbmVyYXRpb25SZXN1bHTroZwg67OA7ZmY7ZWp64uI64ukLlxuICpcbiAqIE1hcmtkb3duIOy9lOuTnCDruJTroZ3snbQg7Y+s7ZWo65CY7Ja0IOyeiOycvOuptCDsoJzqsbDtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ29uZVJlc3BvbnNlKHRleHQ6IHN0cmluZyk6IENvbmVHZW5lcmF0aW9uUmVzdWx0IHtcbiAgbGV0IGpzb25UZXh0ID0gdGV4dC50cmltKCk7XG4gIGpzb25UZXh0ID0ganNvblRleHQucmVwbGFjZSgvXmBgYGpzb25cXHMqL2ksIFwiXCIpO1xuICBqc29uVGV4dCA9IGpzb25UZXh0LnJlcGxhY2UoL2BgYFxccyokLywgXCJcIik7XG4gIGpzb25UZXh0ID0ganNvblRleHQudHJpbSgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShqc29uVGV4dCk7XG5cbiAgICBpZiAoIXBhcnNlZC5wcm9wQ29uZXMgfHwgdHlwZW9mIHBhcnNlZC5wcm9wQ29uZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmVzcG9uc2U6IHByb3BDb25lcyBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBvYmplY3RcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eUNvbmU6IHBhcnNlZC5lbnRpdHlDb25lLFxuICAgICAgcHJvcENvbmVzOiBwYXJzZWQucHJvcENvbmVzLFxuICAgICAgc3Vic2V0Q29uZXM6IHBhcnNlZC5zdWJzZXRDb25lcyB8fCB7fSxcbiAgICAgIGVudW1Db25lczogcGFyc2VkLmVudW1Db25lcyB8fCB7fSxcbiAgICAgIHRva2Vuc1VzZWQ6IDAsXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIHBhcnNlIExMTSByZXNwb25zZTogJHttZXNzYWdlfVxcblxcbmAgK1xuICAgICAgICBgT3JpZ2luYWwgcmVzcG9uc2U6XFxuJHt0ZXh0fVxcblxcbmAgK1xuICAgICAgICBgQ2xlYW5lZCBKU09OOlxcbiR7anNvblRleHR9YCxcbiAgICAgIHsgY2F1c2U6IGVycm9yIH0sXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIOyDneyEseuQnCBjb25l7J2EIOq4sOyhtCBjb25l6rO8IOuzke2Vqe2VqeuLiOuLpC5cbiAqXG4gKiDquLDsobQgY29uZeydtCDsnojsnLzrqbQg67O07KG07ZWY6rOgLCDsl4bripQg6rK97Jqw7JeQ66eMIOyDneyEseuQnCBjb25l7J2EIOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VXaXRoRXhpc3RpbmcoXG4gIGdlbmVyYXRlZDogQ29uZUdlbmVyYXRpb25SZXN1bHQsXG4gIGV4aXN0aW5nOiBSZWNvcmQ8c3RyaW5nLCBDb25lPixcbik6IENvbmVHZW5lcmF0aW9uUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5nZW5lcmF0ZWQgfTtcblxuICBjb25zdCBlbnRpdHlLZXkgPSBgZW50aXR5OiR7Z2VuZXJhdGVkLmVudGl0eUNvbmUgPyBcInByZXNlbnRcIiA6IFwibWlzc2luZ1wifWA7XG4gIGlmIChleGlzdGluZ1tlbnRpdHlLZXldKSB7XG4gICAgcmVzdWx0LmVudGl0eUNvbmUgPSBleGlzdGluZ1tlbnRpdHlLZXldO1xuICB9XG5cbiAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQucHJvcENvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBwcm9wOiR7cHJvcE5hbWV9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XSkge1xuICAgICAgcmVzdWx0LnByb3BDb25lc1twcm9wTmFtZV0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgZW51bUlkIG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5lbnVtQ29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYGVudW06JHtlbnVtSWR9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XSkge1xuICAgICAgcmVzdWx0LmVudW1Db25lc1tlbnVtSWRdID0gZXhpc3Rpbmdba2V5XTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHN1YnNldEtleSBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQuc3Vic2V0Q29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYHN1YnNldDoke3N1YnNldEtleX1gO1xuICAgIGlmIChleGlzdGluZ1trZXldKSB7XG4gICAgICByZXN1bHQuc3Vic2V0Q29uZXNbc3Vic2V0S2V5XSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBub3Rl6rCAIOyXhuuKlCBjb25l66eMIOyDneyEse2VmOqzoCDrgpjrqLjsp4DripQg67O07KG07ZWp64uI64ukLlxuICpcbiAqIOq4sOyhtCBjb25l7JeQIG5vdGXqsIAg7J6I7Jy866m0IOuztOyhtO2VmOqzoCwg7JeG7Jy866m0IOyDiOuhnCDsg53shLHrkJwgY29uZeydhCDsgqzsmqntlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlT25seUVtcHR5KFxuICBnZW5lcmF0ZWQ6IENvbmVHZW5lcmF0aW9uUmVzdWx0LFxuICBleGlzdGluZzogUmVjb3JkPHN0cmluZywgQ29uZT4sXG4pOiBDb25lR2VuZXJhdGlvblJlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uZ2VuZXJhdGVkIH07XG5cbiAgLy8gRW50aXR5IGNvbmU6IHNjYWxl7J20IOyeiOycvOuptCDrs7TsobRcbiAgY29uc3QgZW50aXR5S2V5ID0gYGVudGl0eToke2dlbmVyYXRlZC5lbnRpdHlDb25lID8gXCJwcmVzZW50XCIgOiBcIm1pc3NpbmdcIn1gO1xuICBpZiAoZXhpc3RpbmdbZW50aXR5S2V5XT8ubm90ZSkge1xuICAgIHJlc3VsdC5lbnRpdHlDb25lID0gZXhpc3RpbmdbZW50aXR5S2V5XTtcbiAgfVxuXG4gIC8vIFByb3AgY29uZXM6IHNjYWxl7J20IOyeiOycvOuptCDrs7TsobRcbiAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQucHJvcENvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBwcm9wOiR7cHJvcE5hbWV9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XT8ubm90ZSkge1xuICAgICAgcmVzdWx0LnByb3BDb25lc1twcm9wTmFtZV0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVudW0gY29uZXM6IHNjYWxl7J20IOyeiOycvOuptCDrs7TsobRcbiAgZm9yIChjb25zdCBlbnVtSWQgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLmVudW1Db25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgZW51bToke2VudW1JZH1gO1xuICAgIGlmIChleGlzdGluZ1trZXldPy5ub3RlKSB7XG4gICAgICByZXN1bHQuZW51bUNvbmVzW2VudW1JZF0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN1YnNldCBjb25lczogc2NhbGXsnbQg7J6I7Jy866m0IOuztOyhtFxuICBmb3IgKGNvbnN0IHN1YnNldEtleSBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQuc3Vic2V0Q29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYHN1YnNldDoke3N1YnNldEtleX1gO1xuICAgIGlmIChleGlzdGluZ1trZXldPy5ub3RlKSB7XG4gICAgICByZXN1bHQuc3Vic2V0Q29uZXNbc3Vic2V0S2V5XSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFxQ0EsZUFBc0IsY0FBYyxTQUErRDtDQUNqRyxNQUFNLFNBQVMsVUFBVTtDQUV6QixNQUFNLEVBQUUsTUFBTSxjQUFjLGVBQWUsTUFBTSxpQkFEbEMsWUFBWSxPQUN1QyxHQUFRLE1BQU07Q0FDaEYsTUFBTSxTQUFTLGtCQUFrQixZQUFZO0NBQzdDLE9BQU8sYUFBYTtDQUVwQixJQUFJLFFBQVEsZUFBZTtFQUN6QixJQUFJLFFBQVEsV0FDVixPQUFPLGVBQWUsUUFBUSxRQUFRLGFBQWE7RUFFckQsT0FBTyxrQkFBa0IsUUFBUSxRQUFRLGFBQWE7Q0FDeEQ7Q0FFQSxPQUFPO0FBQ1Q7Ozs7OztBQU9BLFNBQVMsWUFBb0I7Q0FFM0IsSUFBSTtDQUVKLElBQUk7RUFFRixNQUFNLEVBQUUsWUFBQSxTQUFBLEdBQUEsYUFBQSxXQUFBO0VBQ1IsU0FBUyxPQUFPLFNBQVM7Q0FDM0IsUUFBUTtFQUVOLFNBQVM7Q0FDWDtDQUVBLElBQUksQ0FBQyxRQUNILFNBQVMsUUFBUSxJQUFJO0NBR3ZCLElBQUksQ0FBQyxRQUNILE1BQU0sSUFBSSxNQUNSLHVHQUVGO0NBR0YsT0FBTztBQUNUOzs7Ozs7Ozs7QUFVQSxTQUFTLG9CQUE0QjtDQUNuQyxJQUFJO0VBQ0YsTUFBTSxFQUFFLFlBQUEsU0FBQSxHQUFBLGFBQUEsV0FBQTtFQUNSLE1BQU0sY0FBYyxPQUFPO0VBQzNCLE1BQU0sV0FBcUIsQ0FBQztFQUc1QixNQUFNLGNBQWNBLE9BQUssS0FBSyxhQUFhLFVBQVU7RUFDckQsSUFBSUMsS0FBRyxXQUFXLFdBQVcsR0FBRztHQUM5QixNQUFNLFVBQVVBLEtBQ2IsWUFBWSxhQUFhLEVBQUUsZUFBZSxLQUFLLENBQUMsQ0FBQyxDQUNqRCxRQUFRLE1BQU0sRUFBRSxZQUFZLENBQUMs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
295
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZS1nZW5lcmF0b3IuanMiLCJuYW1lcyI6WyJwYXRoIiwiZnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZS9jb25lLWdlbmVyYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmltcG9ydCB7IHR5cGUgQ29uZSwgdHlwZSBFbnRpdHlKc29uIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5cbi8qKlxuICogQ29uZSDsg53shLEg7Luo7YWN7Iqk7Yq4XG4gKlxuICogRW50aXR5IOygleuztOyZgCDsg53shLEg7Ji17IWY7J2EIOuLtOqzoCDsnojsirXri4jri6QuXG4gKi9cbmV4cG9ydCB0eXBlIENvbmVHZW5lcmF0aW9uQ29udGV4dCA9IHtcbiAgZW50aXR5OiBFbnRpdHlKc29uO1xuICBsb2NhbGU/OiBcImtvXCIgfCBcImVuXCIgfCBcImphXCI7XG4gIGV4aXN0aW5nQ29uZXM/OiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgLyoqIHRydWXsnbgg6rK97JqwIG5vdGXqsIAg7JeG64qUIGNvbmXrp4wg7IOd7ISxICovXG4gIG9ubHlFbXB0eT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIENvbmUg7IOd7ISxIOqysOqzvFxuICpcbiAqIEVudGl0eSwgUHJvcHMsIFN1YnNldHMsIEVudW1z7J2YIGNvbmUg66mU7YOA642w7J207YSw66W8IOuLtOqzoCDsnojsirXri4jri6QuXG4gKi9cbmV4cG9ydCB0eXBlIENvbmVHZW5lcmF0aW9uUmVzdWx0ID0ge1xuICBlbnRpdHlDb25lPzogQ29uZTtcbiAgcHJvcENvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgc3Vic2V0Q29uZXM6IFJlY29yZDxzdHJpbmcsIENvbmU+O1xuICBlbnVtQ29uZXM6IFJlY29yZDxzdHJpbmcsIENvbmU+O1xuICB0b2tlbnNVc2VkOiBudW1iZXI7XG59O1xuXG4vKipcbiAqIExMTeydhCDsgqzsmqntlZjsl6wgRW50aXR57J2YIGNvbmUg66mU7YOA642w7J207YSw66W8IOyDneyEse2VqeuLiOuLpC5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCAtIEVudGl0eSDsoJXrs7TsmYAg7IOd7ISxIOyYteyFmFxuICogQHJldHVybnMg7IOd7ISx65CcIGNvbmUg66mU7YOA642w7J207YSwXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUNvbmVzKGNvbnRleHQ6IENvbmVHZW5lcmF0aW9uQ29udGV4dCk6IFByb21pc2U8Q29uZUdlbmVyYXRpb25SZXN1bHQ+IHtcbiAgY29uc3QgYXBpS2V5ID0gZ2V0QXBpS2V5KCk7XG4gIGNvbnN0IHByb21wdCA9IGJ1aWxkUHJvbXB0KGNvbnRleHQpO1xuICBjb25zdCB7IHRleHQ6IHJlc3BvbnNlVGV4dCwgdG9rZW5zVXNlZCB9ID0gYXdhaXQgY2FsbEFudGhyb3BpY0FQSShwcm9tcHQsIGFwaUtleSk7XG4gIGNvbnN0IHJlc3VsdCA9IHBhcnNlQ29uZVJlc3BvbnNlKHJlc3BvbnNlVGV4dCk7XG4gIHJlc3VsdC50b2tlbnNVc2VkID0gdG9rZW5zVXNlZDtcblxuICBpZiAoY29udGV4dC5leGlzdGluZ0NvbmVzKSB7XG4gICAgaWYgKGNvbnRleHQub25seUVtcHR5KSB7XG4gICAgICByZXR1cm4gbWVyZ2VPbmx5RW1wdHkocmVzdWx0LCBjb250ZXh0LmV4aXN0aW5nQ29uZXMpO1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VXaXRoRXhpc3RpbmcocmVzdWx0LCBjb250ZXh0LmV4aXN0aW5nQ29uZXMpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBBUEkg7YKk66W8IOqwgOyguOyYteuLiOuLpC5cbiAqXG4gKiBTb25hbXUuc2VjcmV0IOuYkOuKlCDtmZjqsr3rs4DsiJjsl5DshJwg6rCA7KC47Ji164uI64ukLlxuICovXG5mdW5jdGlvbiBnZXRBcGlLZXkoKTogc3RyaW5nIHtcbiAgLy8gU29uYW11LnNlY3JldOydgCDrn7Dtg4DsnoTsl5Ag66Gc65Oc65CY66+A66GcIOuPmeyggeycvOuhnCBpbXBvcnRcbiAgbGV0IGFwaUtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHRyeSB7XG4gICAgLy8gU29uYW116rCAIOy0iOq4sO2ZlOuQmOyWtCDsnojripQg6rK97JqwXG4gICAgY29uc3QgeyBTb25hbXUgfSA9IHJlcXVpcmUoXCIuLi9hcGlcIik7XG4gICAgYXBpS2V5ID0gU29uYW11LnNlY3JldHM/LmFudGhyb3BpY19hcGlfa2V5O1xuICB9IGNhdGNoIHtcbiAgICAvLyBTb25hbXXqsIAg7LSI6riw7ZmU65CY7KeAIOyViuydgCDqsr3smrAgKO2FjOyKpO2KuCDrk7EpXG4gICAgYXBpS2V5ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFhcGlLZXkpIHtcbiAgICBhcGlLZXkgPSBwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWTtcbiAgfVxuXG4gIGlmICghYXBpS2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJBTlRIUk9QSUNfQVBJX0tFWSBub3QgZm91bmQuIFwiICtcbiAgICAgICAgXCJTZXQgQU5USFJPUElDX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgYWRkIGl0IHRvIHNvbmFtdS5zZWNyZXQudHNcIixcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGFwaUtleTtcbn1cblxuLyoqXG4gKiDrj4TrqZTsnbjrs4Qge2RvbWFpbn0uY29udHJhY3QubWTrpbwg7J297Ja0IOy7qO2FjeyKpO2KuOuhnCDrsJjtmZjtlanri4jri6QuXG4gKlxuICogLSBjb250cmFjdC97ZG9tYWlufS97ZG9tYWlufS5jb250cmFjdC5tZDog64+E66mU7J24IOq3nOy5meqzvCDqsrDsoJUg6re86rGwXG4gKlxuICogY29uZSDsg53shLEg7IucIExMTeyXkOqyjCDsoITri6ztlZjsl6wg64+E66mU7J24IOunpeudveyXkCDrp57ripQg66mU7YOA642w7J207YSw66W8IOyDneyEse2VmOuPhOuhnSDtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHJlYWRQcm9qZWN0U2tpbGxzKCk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBTb25hbXUgfSA9IHJlcXVpcmUoXCIuLi9hcGlcIik7XG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBTb25hbXUuYXBwUm9vdFBhdGg7XG4gICAgY29uc3QgY29udGVudHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBjb250cmFjdC8qKi8qLmNvbnRyYWN0Lm1kIOyImOynkVxuICAgIGNvbnN0IGNvbnRyYWN0RGlyID0gcGF0aC5qb2luKHByb2plY3RSb290LCBcImNvbnRyYWN0XCIpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGNvbnRyYWN0RGlyKSkge1xuICAgICAgY29uc3QgZG9tYWlucyA9IGZzXG4gICAgICAgIC5yZWFkZGlyU3luYyhjb250cmFjdERpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pXG4gICAgICAgIC5maWx0ZXIoKGQpID0+IGQuaXNEaXJlY3RvcnkoKSlcbiAgICAgICAgLm1hcCgoZCkgPT4gZC5uYW1lKTtcblxuICAgICAgZm9yIChjb25zdCBkb21haW4gb2YgZG9tYWlucykge1xuICAgICAgICBjb25zdCBkb21haW5EaXIgPSBwYXRoLmpvaW4oY29udHJhY3REaXIsIGRvbWFpbik7XG4gICAgICAgIGNvbnN0IGNvbnRyYWN0RmlsZXMgPSBmc1xuICAgICAgICAgIC5yZWFkZGlyU3luYyhkb21haW5EaXIpXG4gICAgICAgICAgLmZpbHRlcigoZjogc3RyaW5nKSA9PiBmLmVuZHNXaXRoKFwiLmNvbnRyYWN0Lm1kXCIpKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgY29udHJhY3RGaWxlcykge1xuICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRvbWFpbkRpciwgZmlsZSk7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgXCJ1dGYtOFwiKS50cmltKCk7XG4gICAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAgIGNvbnRlbnRzLnB1c2goYC0tLSBjb250cmFjdC8ke2RvbWFpbn0vJHtmaWxlfSAtLS1cXG4ke2NvbnRlbnR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRlbnRzLmpvaW4oXCJcXG5cXG5cIik7XG4gIH0gY2F0Y2gge1xuICAgIC8vIFNvbmFtdSDrr7jstIjquLDtmZQg65iQ64qUIO2MjOydvCDsoJHqt7wg7Jik66WYIOyLnCDruYgg66y47J6Q7Je0IOuwmO2ZmFxuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5cbi8qKlxuICogTExNIO2UhOuhrO2UhO2KuOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogYWktY2xpZW50LnRzIO2MqO2EtOydhCDssLjqs6DtlZjsl6wg66qF7ZmV7ZWcIOyngOyLnOyCrO2VreqzvCDstpzroKUg7ZiV7Iud7J2EIOygnOqzte2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRQcm9tcHQoY29udGV4dDogQ29uZUdlbmVyYXRpb25Db250ZXh0KTogc3RyaW5nIHtcbiAgY29uc3QgbG9jYWxlID0gY29udGV4dC5sb2NhbGUgfHwgXCJrb1wiO1xuICBjb25zdCBsb2NhbGVEZXNjID0ge1xuICAgIGtvOiBcIktvcmVhblwiLFxuICAgIGVuOiBcIkVuZ2xpc2hcIixcbiAgICBqYTogXCJKYXBhbmVzZVwiLFxuICB9W2xvY2FsZV07XG5cbiAgY29uc3QgcHJvamVjdENvbnRleHQgPSByZWFkUHJvamVjdFNraWxscygpO1xuICBjb25zdCBwcm9qZWN0U2VjdGlvbiA9IHByb2plY3RDb250ZXh0XG4gICAgPyBgXFxuUFJPSkVDVCBDT05URVhUIChidXNpbmVzcyByZXF1aXJlbWVudHMgYW5kIGRvbWFpbiBrbm93bGVkZ2UpOlxcbiR7cHJvamVjdENvbnRleHR9XFxuXFxuVXNlIHRoZSBhYm92ZSBwcm9qZWN0IGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgYnVzaW5lc3MgZG9tYWluLCBlbnRpdHkgcHVycG9zZXMsIGZpZWxkIG1lYW5pbmdzLCBhbmQgcmVsYXRpb25zaGlwcy4gR2VuZXJhdGUgY29uZSBtZXRhZGF0YSB0aGF0IHJlZmxlY3RzIHRoaXMgcHJvamVjdCdzIGFjdHVhbCByZXF1aXJlbWVudHMsIG5vdCBnZW5lcmljIGFzc3VtcHRpb25zLlxcbmBcbiAgICA6IFwiXCI7XG5cbiAgcmV0dXJuIGBZb3UgYXJlIGEgU29uYW11IGZyYW1ld29yayBleHBlcnQuIEdlbmVyYXRlIGNvbmUgbWV0YWRhdGEgZm9yIGRhdGFiYXNlIGVudGl0eSBmaXh0dXJlIGdlbmVyYXRpb24uXG5cbkNSSVRJQ0FMIFBSSU9SSVRZIFJVTEU6XG5UaGUgXCJub3RlXCIgZmllbGQgaXMgdGhlIFBSSU1BUlkgc291cmNlIGZvciBmaXh0dXJlIGRhdGEgZ2VuZXJhdGlvbi4gV2hlbiAtLXVzZS1sbG0gaXMgZW5hYmxlZCwgdGhlIGZpeHR1cmUgZ2VuZXJhdG9yIHJlYWRzIGNvbmUubm90ZSBhbmQgYXNrcyBMTE0gdG8gZ2VuZXJhdGUgY29udGV4dHVhbGx5IGFwcHJvcHJpYXRlIGRhdGEgQkVGT1JFIGZhbGxpbmcgYmFjayB0byBmaXh0dXJlR2VuZXJhdG9yLlxuVGhlcmVmb3JlLCBjb25lLm5vdGUgbXVzdCBhbHdheXMgY29udGFpbiByaWNoLCBkb21haW4tc3BlY2lmaWMgZGVzY3JpcHRpb25zIHdpdGggY29uY3JldGUgZXhhbXBsZXMgYW5kIHZhbHVlIHJhbmdlcy5cbmZpeHR1cmVHZW5lcmF0b3IgaXMgb25seSBhIEZBTExCQUNLIGZvciB3aGVuIExMTSBpcyB1bmF2YWlsYWJsZSAobm8gQVBJIGtleSkuIFdyaXRlIGl0IGFzIGEgYmVzdC1lZmZvcnQgYXBwcm94aW1hdGlvbiwgYnV0IG5ldmVyIHJlbHkgb24gaXQgYXMgdGhlIHByaW1hcnkgZ2VuZXJhdGlvbiBtZXRob2QuXG4ke3Byb2plY3RTZWN0aW9ufVxuRU5USVRZIFNUUlVDVFVSRTpcbiR7SlNPTi5zdHJpbmdpZnkoY29udGV4dC5lbnRpdHksIG51bGwsIDIpfVxuXG5MT0NBTEU6ICR7bG9jYWxlfSAoJHtsb2NhbGVEZXNjfSlcblxuSU5TVFJVQ1RJT05TOlxuMS4gRW50aXR5IGNvbmUgbWV0YWRhdGE6XG4gICAtIG5vdGU6IERlc2NyaWJlIHdoYXQgdGhpcyBlbnRpdHkgcmVwcmVzZW50cywgaXRzIHB1cnBvc2UsIHJlbGF0aW9uc2hpcHMsIGJ1c2luZXNzIGNvbnRleHQsIGFuZCBvdmVyYWxsIGd1aWRhbmNlIGZvciBnZW5lcmF0aW5nIHRlc3QgZGF0YS4gQ29tYmluZSBhbGwgcmVsZXZhbnQgaW5mb3JtYXRpb24gaW50byBvbmUgY29oZXJlbnQgZGVzY3JpcHRpb24uXG4gICAtIHRhZ3M6IFJlbGV2YW50IGNhdGVnb3JpemF0aW9uIHRhZ3NcblxuMi4gRm9yIGVhY2ggcHJvcCwgZ2VuZXJhdGUgYXBwcm9wcmlhdGUgY29uZSBtZXRhZGF0YTpcbiAgIC0gbm90ZSAoTU9TVCBJTVBPUlRBTlQpOiBEZXNjcmliZSB3aGF0IHRoaXMgZmllbGQgcmVwcmVzZW50cyBpbiBidXNpbmVzcyB0ZXJtcywgYW5kIHByb3ZpZGUgZGV0YWlsZWQgZ3VpZGFuY2UgZm9yIHJlYWxpc3RpYyB0ZXN0IGRhdGEgZ2VuZXJhdGlvbi4gSW5jbHVkZSBjb25jcmV0ZSBleGFtcGxlcywgdmFsdWUgcmFuZ2VzLCBmb3JtYXR0aW5nIHJ1bGVzLCBhbmQgZG9tYWluIGNvbnN0cmFpbnRzLiBUaGlzIGlzIHRoZSBwcmltYXJ5IGlucHV0IExMTSB1c2VzIHRvIGdlbmVyYXRlIGZpeHR1cmUgZGF0YS5cbiAgIC0gZml4dHVyZUdlbmVyYXRvcjogZmFrZXIuanMgZXhwcmVzc2lvbiBhcyBGQUxMQkFDSyBvbmx5IChzZWUgcnVsZSA5IGZvciBleGNlcHRpb25zKS4gRm9yIGZyZWUtdGV4dCBmaWVsZHMgd2hlcmUgZmFrZXIgY2Fubm90IHByb2R1Y2UgZG9tYWluLWFwcHJvcHJpYXRlIGNvbnRlbnQgKGRlc2NyaXB0aW9uLCBzdW1tYXJ5LCBub3RlLCByZWFzb24sIHRpdGxlLCBldGMuKSwgcHJlZmVyIHVzaW5nIGZha2VyLmhlbHBlcnMuYXJyYXlFbGVtZW50KFsuLi5dKSB3aXRoIDUtMTAgZG9tYWluLXNwZWNpZmljIGV4YW1wbGUgdmFsdWVzIHJhdGhlciB0aGFuIGZha2VyLmxvcmVtLiouXG5cbjMuIEZpZWxkIHR5cGUg4oaSIGZha2VyLmpzIG1hcHBpbmc6XG4gICAtIGVtYWlsIOKGkiBmYWtlci5pbnRlcm5ldC5lbWFpbCgpXG4gICAtIHBob25lIOKGkiBmYWtlci5waG9uZS5udW1iZXIoKVxuICAgLSBuYW1lL3VzZXJuYW1lIOKGkiBmYWtlci5wZXJzb24uZnVsbE5hbWUoKSAod2l0aCBsb2NhbGUpXG4gICAtIGJpcnRoX2RhdGUg4oaSIGZha2VyLmRhdGUuYmlydGhkYXRlKHsgbWluOiAxOCwgbWF4OiA2NSwgbW9kZTogJ2FnZScgfSlcbiAgIC0gc2FsYXJ5IOKGkiBmYWtlci5udW1iZXIuaW50KHsgbWluOiAzMF8wMDBfMDAwLCBtYXg6IDE1MF8wMDBfMDAwIH0pIGZvciBrbyBsb2NhbGVcbiAgIC0gY29tcGFueV9uYW1lIOKGkiBmYWtlci5jb21wYW55Lm5hbWUoKVxuICAgLSBhZGRyZXNzIOKGkiBmYWtlci5sb2NhdGlvbi5zdHJlZXRBZGRyZXNzKClcblxuNC4gUmVsYXRpb24gZmllbGRzIChCZWxvbmdzVG9PbmUsIE9uZVRvT25lIHdpdGggaGFzSm9pbkNvbHVtbik6XG4gICAtIEFsd2F5cyBhZGQgZGF0YVNvdXJjZTogeyBzdHJhdGVneTogXCJyZWNlbnRcIiwgY29uZmlnOiB7IGxpbWl0OiAzLTUgfSB9XG4gICAtIG5vdGU6IEV4cGxhaW4gd2hhdCB0aGlzIHJlbGF0aW9uIHJlcHJlc2VudHMgYW5kIHRoYXQgaXQgcmVmZXJlbmNlcyBleGlzdGluZyBkYXRhXG5cbjUuIFN1YnNldHMgY29uZSBtZXRhZGF0YSAoSU1QT1JUQU5UIC0gZ2VuZXJhdGUgZm9yIEFMTCBzdWJzZXRzKTpcbiAgIC0gbm90ZTogRGVzY3JpYmUgd2hhdCB0aGlzIHN1YnNldCByZXByZXNlbnRzLCB3aGF0IGZpZWxkcyBpdCBpbmNsdWRlcywgYW5kIHdoZW4gdG8gdXNlIGl0XG5cbjYuIEVudW1zIGNvbmUgbWV0YWRhdGEgKElNUE9SVEFOVCAtIGdlbmVyYXRlIGZvciBBTEwgZW51bXMpOlxuICAgLSBub3RlOiBEZXNjcmliZSB3aGF0IHRoaXMgZW51bSByZXByZXNlbnRzLiBJZiBhbnkgcHJvcCB1c2VzIHRoaXMgZW51bSB0eXBlLCBpbmNsdWRlIHRoZSBzYW1lIGd1aWRhbmNlIGZyb20gdGhhdCBwcm9wJ3Mgbm90ZS5cbiAgIC0gRm9yIGVhY2ggZW51bSB2YWx1ZSwgcHJvdmlkZSBub3RlIGV4cGxhaW5pbmcgd2hhdCB0aGF0IHNwZWNpZmljIHZhbHVlIG1lYW5zXG5cbjcuIEtvcmVhbiBmaWVsZCBuYW1lcyAobG9jYWxlPWtvKTpcbiAgIC0gSW5mZXIgbWVhbmluZyBhbmQgZ2VuZXJhdGUgYXBwcm9wcmlhdGUgZmFrZXJcbiAgIC0gXCLsnbTrpoRcIiDihpIgZmFrZXIucGVyc29uLmZ1bGxOYW1lKClcbiAgIC0gXCLsg53rhYTsm5TsnbxcIiDihpIgZmFrZXIuZGF0ZS5iaXJ0aGRhdGUoKVxuICAgLSBcIuyjvOyGjFwiIOKGkiBmYWtlci5sb2NhdGlvbi5zdHJlZXRBZGRyZXNzKClcblxuOC4gTG9jYWxlLXNwZWNpZmljIHZhbHVlczpcbiAgIC0ga286IEtvcmVhbiBuYW1lcywgYWRkcmVzc2VzLCBwaG9uZSBudW1iZXJzICgwMTAtWFhYWC1YWFhYIGZvcm1hdClcbiAgIC0gZW46IEVuZ2xpc2ggbmFtZXMsIFVTIGFkZHJlc3Nlc1xuICAgLSBqYTogSmFwYW5lc2UgbmFtZXMsIGFkZHJlc3Nlc1xuXG45LiBDb3JyZWxhdGVkIGZpZWxkcyAoSU1QT1JUQU5UIC0gZG8gTk9UIHVzZSBmaXh0dXJlR2VuZXJhdG9yIGZvciB0aGVzZSk6XG4gICBJZiBtdWx0aXBsZSBwcm9wcyBhcmUgc2VtYW50aWNhbGx5IHJlbGF0ZWQgYW5kIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIGVhY2ggb3RoZXIgKGUuZy4gbmFtZSArIG5hbWVfZW4sIG5hbWUgKyBuYW1lX2phLCB0aXRsZSArIHRpdGxlX2VuKSwgZG8gTk9UIHNldCBmaXh0dXJlR2VuZXJhdG9yIG9uIGFueSBvZiB0aGVtLlxuICAgSW5zdGVhZCwgc2V0IG9ubHkgbm90ZSB3aXRoIGEgY2xlYXIgZGVzY3JpcHRpb24gdGhhdCBleHBsYWlucyB0aGUgcmVsYXRpb25zaGlwLlxuICAgRXhhbXBsZTogaWYgbmFtZSBpcyBhIEtvcmVhbiBmdWxsIG5hbWUgbGlrZSBcIuq5gOuvvOyImFwiLCB0aGVuIG5hbWVfZW4gbXVzdCBiZSBpdHMgcm9tYW5pemVkIGZvcm0gXCJLaW0gTWluc3VcIi5cbiAgIFRoZSBmaXh0dXJlIGdlbmVyYXRvciB3aWxsIHBhc3MgYWxsIHN1Y2ggcHJvcHMgdG9nZXRoZXIgdG8gTExNIGluIGEgc2luZ2xlIGNhbGwgdG8gZW5zdXJlIGNvbnNpc3RlbmN5LlxuICAgRGV0ZWN0aW9uIHJ1bGU6IGlmIGEgcHJvcCBuYW1lIG1hdGNoZXMgYW5vdGhlciBwcm9wIG5hbWUgd2l0aCBhIGxvY2FsZSBzdWZmaXggKF9lbiwgX2tvLCBfamEsIF9jbikgb3IgdmljZSB2ZXJzYSwgdHJlYXQgdGhlbSBhcyBjb3JyZWxhdGVkLlxuXG4xMC4gU3RyaW5nIFBLIGlkOlxuICAgLSBOZXZlciBzZXQgZml4dHVyZVN0cmF0ZWd5OiBcInNlcXVlbmNlXCIgb24gYW4gaWQgcHJvcCB3aXRoIHR5cGUgXCJzdHJpbmdcIi5cbiAgIC0gRG8gbm90IHNldCBmaXh0dXJlR2VuZXJhdG9yIGVpdGhlciDigJQgZml4dHVyZS1nZW5lcmF0b3IgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgYWxwaGFudW1lcmljKDMyKS5cbiAgIC0gSW4gbm90ZSwgZGVzY3JpYmUgaG93IHRoZSBpZCBpcyBnZW5lcmF0ZWQgKGUuZy4gcmFuZG9tIHN0cmluZyBnZW5lcmF0ZWQgYnkgYmV0dGVyLWF1dGgpLlxuXG4xMS4gZml4dHVyZUNvbXBhbmlvbnMgKElNUE9SVEFOVCAtIG5ldmVyIGdlbmVyYXRlIG9yIG1vZGlmeSk6XG4gICAtIGZpeHR1cmVDb21wYW5pb25zIGlzIHVzZXItZGVjbGFyZWQgbWV0YWRhdGEgdGhhdCB0cmlnZ2VycyBhdXRvbWF0aWMgY29tcGFuaW9uIGZpeHR1cmUgY3JlYXRpb24gd2hlbiBhIHBhcmVudCBmaXh0dXJlIGlzIGdlbmVyYXRlZC5cbiAgIC0gRG8gTk9UIGdlbmVyYXRlIG9yIHN1Z2dlc3QgZml4dHVyZUNvbXBhbmlvbnMgZm9yIGFueSBwcm9wLiBPbmx5IHVzZXJzIGRlY2xhcmUgdGhpcyBpbnRlbnRpb25hbGx5LlxuICAgLSBJZiBhIHByb3AncyBleGlzdGluZyBjb25lIGFscmVhZHkgY29udGFpbnMgZml4dHVyZUNvbXBhbmlvbnMsIHByZXNlcnZlIGl0IGV4YWN0bHkgYXMtaXMgaW4gdGhlIHByb3BDb25lcyBvdXRwdXQuIERvIG5vdCByZW1vdmUsIGFsdGVyLCBvciBvbWl0IGl0LlxuICAgLSBFeGFtcGxlOiBpZiBVc2VyIGVudGl0eSdzIFwiaWRcIiBwcm9wIGNvbmUgaGFzIGZpeHR1cmVDb21wYW5pb25zLCBpbmNsdWRlIGl0IHVuY2hhbmdlZCBpbiBwcm9wQ29uZXNbXCJpZFwiXS5cblxuJHtcbiAgY29udGV4dC5leGlzdGluZ0NvbmVzXG4gICAgPyBgXG5FWElTVElORyBDT05FUyAocHJlc2VydmUgdGhlc2UgaWYgcHJlc2VudCk6XG4ke0pTT04uc3RyaW5naWZ5KGNvbnRleHQuZXhpc3RpbmdDb25lcywgbnVsbCwgMil9XG5gXG4gICAgOiBcIlwiXG59XG5cbk9VVFBVVCBGT1JNQVQ6XG5SZXR1cm4gT05MWSB2YWxpZCBKU09OIChubyBtYXJrZG93biwgbm8gY29kZSBibG9ja3MpLiBVc2UgdGhpcyBleGFjdCBzdHJ1Y3R1cmU6XG57XG4gIFwiZW50aXR5Q29uZVwiOiB7XG4gICAgXCJub3RlXCI6IFwiRGVzY3JpcHRpb24gb2YgdGhlIGVudGl0eSwgaXRzIHB1cnBvc2UsIGFuZCBndWlkYW5jZSBmb3IgZml4dHVyZSBnZW5lcmF0aW9uXCIsXG4gICAgXCJ0YWdzXCI6IFtcIm9wdGlvbmFsXCIsIFwidGFnc1wiXVxuICB9LFxuICBcInByb3BDb25lc1wiOiB7XG4gICAgXCJwcm9wX25hbWVcIjoge1xuICAgICAgXCJub3RlXCI6IFwiRGVzY3JpcHRpb24gb2YgdGhpcyBmaWVsZCBhbmQgZ3VpZGFuY2UgZm9yIHJlYWxpc3RpYyB0ZXN0IGRhdGEgZ2VuZXJhdGlvblwiLFxuICAgICAgXCJmaXh0dXJlR2VuZXJhdG9yXCI6IFwiZmFrZXIueHh4Lnl5eSgpXCIsXG4gICAgICBcImRhdGFTb3VyY2VcIjogeyBcInN0cmF0ZWd5XCI6IFwicmVjZW50XCIsIFwiY29uZmlnXCI6IHsgXCJsaW1pdFwiOiA1IH0gfVxuICAgIH1cbiAgfSxcbiAgXCJzdWJzZXRDb25lc1wiOiB7XG4gICAgXCJBXCI6IHtcbiAgICAgIFwibm90ZVwiOiBcIkRlc2NyaXB0aW9uIG9mIHN1YnNldCBBLCB3aGF0IGZpZWxkcyBpdCBpbmNsdWRlcywgYW5kIHdoZW4gdG8gdXNlIGl0XCJcbiAgICB9XG4gIH0sXG4gIFwiZW51bUNvbmVzXCI6IHtcbiAgICBcIkVudW1OYW1lXCI6IHtcbiAgICAgIFwibm90ZVwiOiBcIkRlc2NyaXB0aW9uIG9mIHRoZSBlbnVtIGFuZCBndWlkYW5jZSBmb3IgZ2VuZXJhdGluZyB2YWx1ZXNcIixcbiAgICAgIFwidmFsdWVzXCI6IHtcbiAgICAgICAgXCJWQUxVRV9LRVlcIjoge1xuICAgICAgICAgIFwibm90ZVwiOiBcIiR7bG9jYWxlRGVzY30gZGVzY3JpcHRpb24gb2YgdGhpcyBlbnVtIHZhbHVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5JTVBPUlRBTlQ6IFJldHVybiBwdXJlIEpTT04gb25seS4gRG8gTk9UIHdyYXAgaW4gbWFya2Rvd24gY29kZSBibG9ja3MuYDtcbn1cblxuLyoqXG4gKiBBbnRocm9waWMgQVBJ66W8IO2YuOy2nO2VmOyXrCBMTE0g7J2R64u17J2EIOuwm+yKteuLiOuLpC5cbiAqXG4gKiBAcGFyYW0gcHJvbXB0IC0g7IOd7ISx7ZWgIO2UhOuhrO2UhO2KuFxuICogQHBhcmFtIGFwaUtleSAtIEFudGhyb3BpYyBBUEkg7YKkXG4gKiBAcmV0dXJucyBMTE0g7J2R64u1IO2FjeyKpO2KuCDrsI8g7Yag7YGwIOyCrOyaqeufiVxuICovXG5hc3luYyBmdW5jdGlvbiBjYWxsQW50aHJvcGljQVBJKFxuICBwcm9tcHQ6IHN0cmluZyxcbiAgYXBpS2V5OiBzdHJpbmcsXG4pOiBQcm9taXNlPHsgdGV4dDogc3RyaW5nOyB0b2tlbnNVc2VkOiBudW1iZXIgfT4ge1xuICB0cnkge1xuICAgIC8vIEBhaS1zZGsvYW50aHJvcGlj6rO8IGFpIO2MqO2CpOyngOuKlCBvcHRpb25hbCBkZXBlbmRlbmN57J2066+A66GcIOuPmeyggSBpbXBvcnRcbiAgICBjb25zdCB7IGNyZWF0ZUFudGhyb3BpYyB9ID0gYXdhaXQgaW1wb3J0KFwiQGFpLXNkay9hbnRocm9waWNcIik7XG4gICAgY29uc3QgeyBnZW5lcmF0ZVRleHQgfSA9IGF3YWl0IGltcG9ydChcImFpXCIpO1xuXG4gICAgY29uc3QgYW50aHJvcGljID0gY3JlYXRlQW50aHJvcGljKHtcbiAgICAgIGFwaUtleSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgdGV4dCwgdXNhZ2UgfSA9IGF3YWl0IGdlbmVyYXRlVGV4dCh7XG4gICAgICBtb2RlbDogYW50aHJvcGljKFwiY2xhdWRlLXNvbm5ldC00LTZcIiksXG4gICAgICBwcm9tcHQsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbnNVc2VkID0gdXNhZ2U/LnRvdGFsVG9rZW5zIHx8IDA7XG4gICAgaWYgKHVzYWdlKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0NvbmUgR2VuZXJhdG9yXSBUb2tlbnMgdXNlZDogJHt0b2tlbnNVc2VkfWApO1xuICAgIH1cblxuICAgIHJldHVybiB7IHRleHQsIHRva2Vuc1VzZWQgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIFwic3RhdHVzQ29kZVwiIGluIGVycm9yKSB7XG4gICAgICBjb25zdCBzdGF0dXNDb2RlID0gKGVycm9yIGFzIHsgc3RhdHVzQ29kZTogbnVtYmVyIH0pLnN0YXR1c0NvZGU7XG4gICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gNDI5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJhdGUgbGltaXQgZXhjZWVkZWQuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgY2F1c2U6IGVycm9yIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgIHRocm93IG5ldyBFcnJvcihgTExNIEFQSSBmYWlsZWQ6ICR7bWVzc2FnZX1gLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgfVxufVxuXG4vKipcbiAqIExMTSDsnZHri7XsnYQg7YyM7Iux7ZWY7JesIENvbmVHZW5lcmF0aW9uUmVzdWx066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqXG4gKiBNYXJrZG93biDsvZTrk5wg67iU66Gd7J20IO2PrO2VqOuQmOyWtCDsnojsnLzrqbQg7KCc6rGw7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBwYXJzZUNvbmVSZXNwb25zZSh0ZXh0OiBzdHJpbmcpOiBDb25lR2VuZXJhdGlvblJlc3VsdCB7XG4gIGxldCBqc29uVGV4dCA9IHRleHQudHJpbSgpO1xuICBqc29uVGV4dCA9IGpzb25UZXh0LnJlcGxhY2UoL15gYGBqc29uXFxzKi9pLCBcIlwiKTtcbiAganNvblRleHQgPSBqc29uVGV4dC5yZXBsYWNlKC9gYGBcXHMqJC8sIFwiXCIpO1xuICBqc29uVGV4dCA9IGpzb25UZXh0LnRyaW0oKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoanNvblRleHQpO1xuXG4gICAgaWYgKCFwYXJzZWQucHJvcENvbmVzIHx8IHR5cGVvZiBwYXJzZWQucHJvcENvbmVzICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlOiBwcm9wQ29uZXMgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlbnRpdHlDb25lOiBwYXJzZWQuZW50aXR5Q29uZSxcbiAgICAgIHByb3BDb25lczogcGFyc2VkLnByb3BDb25lcyxcbiAgICAgIHN1YnNldENvbmVzOiBwYXJzZWQuc3Vic2V0Q29uZXMgfHwge30sXG4gICAgICBlbnVtQ29uZXM6IHBhcnNlZC5lbnVtQ29uZXMgfHwge30sXG4gICAgICB0b2tlbnNVc2VkOiAwLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBwYXJzZSBMTE0gcmVzcG9uc2U6ICR7bWVzc2FnZX1cXG5cXG5gICtcbiAgICAgICAgYE9yaWdpbmFsIHJlc3BvbnNlOlxcbiR7dGV4dH1cXG5cXG5gICtcbiAgICAgICAgYENsZWFuZWQgSlNPTjpcXG4ke2pzb25UZXh0fWAsXG4gICAgICB7IGNhdXNlOiBlcnJvciB9LFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiDsg53shLHrkJwgY29uZeydhCDquLDsobQgY29uZeqzvCDrs5Htlantlanri4jri6QuXG4gKlxuICog6riw7KG0IGNvbmXsnbQg7J6I7Jy866m0IOuztOyhtO2VmOqzoCwg7JeG64qUIOqyveyasOyXkOunjCDsg53shLHrkJwgY29uZeydhCDsgqzsmqntlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlV2l0aEV4aXN0aW5nKFxuICBnZW5lcmF0ZWQ6IENvbmVHZW5lcmF0aW9uUmVzdWx0LFxuICBleGlzdGluZzogUmVjb3JkPHN0cmluZywgQ29uZT4sXG4pOiBDb25lR2VuZXJhdGlvblJlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uZ2VuZXJhdGVkIH07XG5cbiAgY29uc3QgZW50aXR5S2V5ID0gYGVudGl0eToke2dlbmVyYXRlZC5lbnRpdHlDb25lID8gXCJwcmVzZW50XCIgOiBcIm1pc3NpbmdcIn1gO1xuICBpZiAoZXhpc3RpbmdbZW50aXR5S2V5XSkge1xuICAgIHJlc3VsdC5lbnRpdHlDb25lID0gZXhpc3RpbmdbZW50aXR5S2V5XTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLnByb3BDb25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgcHJvcDoke3Byb3BOYW1lfWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0pIHtcbiAgICAgIHJlc3VsdC5wcm9wQ29uZXNbcHJvcE5hbWVdID0gZXhpc3Rpbmdba2V5XTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGVudW1JZCBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQuZW51bUNvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBlbnVtOiR7ZW51bUlkfWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0pIHtcbiAgICAgIHJlc3VsdC5lbnVtQ29uZXNbZW51bUlkXSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBzdWJzZXRLZXkgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLnN1YnNldENvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBzdWJzZXQ6JHtzdWJzZXRLZXl9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XSkge1xuICAgICAgcmVzdWx0LnN1YnNldENvbmVzW3N1YnNldEtleV0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogbm90ZeqwgCDsl4bripQgY29uZeunjCDsg53shLHtlZjqs6Ag64KY66i47KeA64qUIOuztOyhtO2VqeuLiOuLpC5cbiAqXG4gKiDquLDsobQgY29uZeyXkCBub3Rl6rCAIOyeiOycvOuptCDrs7TsobTtlZjqs6AsIOyXhuycvOuptCDsg4jroZwg7IOd7ISx65CcIGNvbmXsnYQg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBtZXJnZU9ubHlFbXB0eShcbiAgZ2VuZXJhdGVkOiBDb25lR2VuZXJhdGlvblJlc3VsdCxcbiAgZXhpc3Rpbmc6IFJlY29yZDxzdHJpbmcsIENvbmU+LFxuKTogQ29uZUdlbmVyYXRpb25SZXN1bHQge1xuICBjb25zdCByZXN1bHQgPSB7IC4uLmdlbmVyYXRlZCB9O1xuXG4gIC8vIEVudGl0eSBjb25lOiBzY2FsZeydtCDsnojsnLzrqbQg67O07KG0XG4gIGNvbnN0IGVudGl0eUtleSA9IGBlbnRpdHk6JHtnZW5lcmF0ZWQuZW50aXR5Q29uZSA/IFwicHJlc2VudFwiIDogXCJtaXNzaW5nXCJ9YDtcbiAgaWYgKGV4aXN0aW5nW2VudGl0eUtleV0/Lm5vdGUpIHtcbiAgICByZXN1bHQuZW50aXR5Q29uZSA9IGV4aXN0aW5nW2VudGl0eUtleV07XG4gIH1cblxuICAvLyBQcm9wIGNvbmVzOiBzY2FsZeydtCDsnojsnLzrqbQg67O07KG0XG4gIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLnByb3BDb25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgcHJvcDoke3Byb3BOYW1lfWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0/Lm5vdGUpIHtcbiAgICAgIHJlc3VsdC5wcm9wQ29uZXNbcHJvcE5hbWVdID0gZXhpc3Rpbmdba2V5XTtcbiAgICB9XG4gIH1cblxuICAvLyBFbnVtIGNvbmVzOiBzY2FsZeydtCDsnojsnLzrqbQg67O07KG0XG4gIGZvciAoY29uc3QgZW51bUlkIG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5lbnVtQ29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYGVudW06JHtlbnVtSWR9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XT8ubm90ZSkge1xuICAgICAgcmVzdWx0LmVudW1Db25lc1tlbnVtSWRdID0gZXhpc3Rpbmdba2V5XTtcbiAgICB9XG4gIH1cblxuICAvLyBTdWJzZXQgY29uZXM6IHNjYWxl7J20IOyeiOycvOuptCDrs7TsobRcbiAgZm9yIChjb25zdCBzdWJzZXRLZXkgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLnN1YnNldENvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBzdWJzZXQ6JHtzdWJzZXRLZXl9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XT8ubm90ZSkge1xuICAgICAgcmVzdWx0LnN1YnNldENvbmVzW3N1YnNldEtleV0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBcUNBLGVBQXNCLGNBQWMsU0FBK0Q7Q0FDakcsTUFBTSxTQUFTLFVBQVU7Q0FFekIsTUFBTSxFQUFFLE1BQU0sY0FBYyxlQUFlLE1BQU0saUJBRGxDLFlBQVksT0FDdUMsR0FBUSxNQUFNO0NBQ2hGLE1BQU0sU0FBUyxrQkFBa0IsWUFBWTtDQUM3QyxPQUFPLGFBQWE7Q0FFcEIsSUFBSSxRQUFRLGVBQWU7RUFDekIsSUFBSSxRQUFRLFdBQ1YsT0FBTyxlQUFlLFFBQVEsUUFBUSxhQUFhO0VBRXJELE9BQU8sa0JBQWtCLFFBQVEsUUFBUSxhQUFhO0NBQ3hEO0NBRUEsT0FBTztBQUNUOzs7Ozs7QUFPQSxTQUFTLFlBQW9CO0NBRTNCLElBQUk7Q0FFSixJQUFJO0VBRUYsTUFBTSxFQUFFLFlBQUEsU0FBQSxHQUFBLGFBQUEsV0FBQTtFQUNSLFNBQVMsT0FBTyxTQUFTO0NBQzNCLFFBQVE7RUFFTixTQUFTO0NBQ1g7Q0FFQSxJQUFJLENBQUMsUUFDSCxTQUFTLFFBQVEsSUFB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
@@ -1 +1 @@
1
- {"version":3,"file":"knex.d.ts","sourceRoot":"","sources":["../../src/database/knex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CA0C5D"}
1
+ {"version":3,"file":"knex.d.ts","sourceRoot":"","sources":["../../src/database/knex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CA6C5D"}
@@ -12,12 +12,12 @@ function createKnexInstance(config) {
12
12
  config.pool = {
13
13
  maxConnectionLifetimeMillis: 18e5,
14
14
  maxConnectionLifetimeJitterMillis: 3e5,
15
- ...config.pool,
16
15
  propagateCreateError: false,
17
16
  idleTimeoutMillis: 1e4,
18
17
  reapIntervalMillis: 1e3,
19
18
  acquireTimeoutMillis: 3e4,
20
19
  createTimeoutMillis: 3e4,
20
+ ...config.pool,
21
21
  validate: (connection) => {
22
22
  if (typeof connection !== "object" || connection === null) return false;
23
23
  const conn = connection;
@@ -37,4 +37,4 @@ var init_knex = __esmMin((() => {}));
37
37
  init_knex();
38
38
  export { createKnexInstance, init_knex };
39
39
 
40
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia25leC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2Uva25leC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IGtuZXggZnJvbSBcImtuZXhcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUtuZXhJbnN0YW5jZShjb25maWc6IEtuZXguQ29uZmlnKTogS25leCB7XG4gIGlmIChjb25maWcuY29ubmVjdGlvbiAmJiB0eXBlb2YgY29uZmlnLmNvbm5lY3Rpb24gPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCBjb25uID0gY29uZmlnLmNvbm5lY3Rpb24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICBpZiAoY29ubi5rZWVwQWxpdmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29ubi5rZWVwQWxpdmUgPSB0cnVlO1xuICAgICAgY29ubi5rZWVwQWxpdmVJbml0aWFsRGVsYXlNaWxsaXMgPSBjb25uLmtlZXBBbGl2ZUluaXRpYWxEZWxheU1pbGxpcyA/PyAxMDAwMDtcbiAgICB9XG4gIH1cblxuICBjb25maWcucG9vbCA9IHtcbiAgICBtYXhDb25uZWN0aW9uTGlmZXRpbWVNaWxsaXM6IDE4MDAwMDAsXG4gICAgbWF4Q29ubmVjdGlvbkxpZmV0aW1lSml0dGVyTWlsbGlzOiAzMDAwMDAsXG4gICAgLi4uY29uZmlnLnBvb2wsXG4gICAgcHJvcGFnYXRlQ3JlYXRlRXJyb3I6IGZhbHNlLFxuICAgIGlkbGVUaW1lb3V0TWlsbGlzOiAxMDAwMCxcbiAgICByZWFwSW50ZXJ2YWxNaWxsaXM6IDEwMDAsXG4gICAgYWNxdWlyZVRpbWVvdXRNaWxsaXM6IDMwMDAwLFxuICAgIGNyZWF0ZVRpbWVvdXRNaWxsaXM6IDMwMDAwLFxuICAgIHZhbGlkYXRlOiAoY29ubmVjdGlvbjogdW5rbm93bikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBjb25uZWN0aW9uICE9PSBcIm9iamVjdFwiIHx8IGNvbm5lY3Rpb24gPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGNvbm4gPSBjb25uZWN0aW9uIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgaWYgKGNvbm4uX2VuZGluZyA9PT0gdHJ1ZSB8fCBjb25uLl9jbG9zZWQgPT09IHRydWUpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgYWZ0ZXJDcmVhdGU6ICgoXG4gICAgICBjb25uOiBLbmV4LkNsaWVudCAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgZG9uZTogKGVycjogRXJyb3IgfCBudWxsLCBjb25uOiBLbmV4LkNsaWVudCkgPT4gdm9pZCxcbiAgICApID0+IHtcbiAgICAgIC8vIHBnIGRyaXZlcjog7IaM7LyTIOugiOuyqCBrZWVwQWxpdmUg7ISk7KCVXG4gICAgICBjb25zdCBzdHJlYW0gPSAoY29ubiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuY29ubmVjdGlvbiBhc1xuICAgICAgICB8IHsgc3RyZWFtPzogeyBzZXRLZWVwQWxpdmU/OiAoZW5hYmxlOiBib29sZWFuLCBpbml0aWFsRGVsYXk6IG51bWJlcikgPT4gdm9pZCB9IH1cbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoc3RyZWFtPy5zdHJlYW0/LnNldEtlZXBBbGl2ZSkge1xuICAgICAgICBzdHJlYW0uc3RyZWFtLnNldEtlZXBBbGl2ZSh0cnVlLCAxMDAwMCk7XG4gICAgICB9XG5cbiAgICAgIGRvbmUobnVsbCwgY29ubik7XG4gICAgfSkgc2F0aXNmaWVzIEtuZXguUG9vbENvbmZpZ1tcImFmdGVyQ3JlYXRlXCJdLFxuICB9O1xuXG4gIHJldHVybiBrbmV4KGNvbmZpZyk7XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUdBLFNBQWdCLG1CQUFtQixRQUEyQjtDQUM1RCxJQUFJLE9BQU8sY0FBYyxPQUFPLE9BQU8sZUFBZSxVQUFVO0VBQzlELE1BQU0sT0FBTyxPQUFPO0VBRXBCLElBQUksS0FBSyxjQUFjLFFBQVc7R0FDaEMsS0FBSyxZQUFZO0dBQ2pCLEtBQUssOEJBQThCLEtBQUssK0JBQStCO0VBQ3pFO0NBQ0Y7Q0FFQSxPQUFPLE9BQU87RUFDWiw2QkFBNkI7RUFDN0IsbUNBQW1DO0VBQ25DLEdBQUcsT0FBTztFQUNWLHNCQUFzQjtFQUN0QixtQkFBbUI7RUFDbkIsb0JBQW9CO0VBQ3BCLHNCQUFzQjtFQUN0QixxQkFBcUI7RUFDckIsV0FBVyxlQUF3QjtHQUNqQyxJQUFJLE9BQU8sZUFBZSxZQUFZLGVBQWUsTUFBTSxPQUFPO0dBQ2xFLE1BQU0sT0FBTztHQUNiLElBQUksS0FBSyxZQUFZLFFBQVEsS0FBSyxZQUFZLE1BQU0sT0FBTztHQUMzRCxPQUFPO0VBQ1Q7RUFDQSxlQUNFLE1BQ0EsU0FDRztHQUVILE1BQU0sU0FBVSxLQUFpQztHQUdqRCxJQUFJLFFBQVEsUUFBUSxjQUNsQixPQUFPLE9BQU8sYUFBYSxNQUFNLEdBQUs7R0FHeEMsS0FBSyxNQUFNLElBQUk7RUFDakI7Q0FDRjtDQUVBLE9BQU8sS0FBSyxNQUFNO0FBQ3BCIn0=
40
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia25leC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2Uva25leC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IGtuZXggZnJvbSBcImtuZXhcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUtuZXhJbnN0YW5jZShjb25maWc6IEtuZXguQ29uZmlnKTogS25leCB7XG4gIGlmIChjb25maWcuY29ubmVjdGlvbiAmJiB0eXBlb2YgY29uZmlnLmNvbm5lY3Rpb24gPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCBjb25uID0gY29uZmlnLmNvbm5lY3Rpb24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICBpZiAoY29ubi5rZWVwQWxpdmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29ubi5rZWVwQWxpdmUgPSB0cnVlO1xuICAgICAgY29ubi5rZWVwQWxpdmVJbml0aWFsRGVsYXlNaWxsaXMgPSBjb25uLmtlZXBBbGl2ZUluaXRpYWxEZWxheU1pbGxpcyA/PyAxMDAwMDtcbiAgICB9XG4gIH1cblxuICBjb25maWcucG9vbCA9IHtcbiAgICAvLyDslYTrnpjripQg6riw67O46rCS7J2066mwLCDtmLjstpzsuKHsnbQgY29uZmlnLnBvb2zroZwg642u7Ja07JO4IOyImCDsnojri6QuXG4gICAgLy8gKOyYiDog66eI7J206re466CI7J207IWYIOyDge2DnCDsobDtmozripQgZmFpbC1mYXN066W8IOychO2VtCDsp6fsnYAg7YOA7J6E7JWE7JuDICsgcHJvcGFnYXRlQ3JlYXRlRXJyb3Lrpbwg7KeA7KCVKVxuICAgIG1heENvbm5lY3Rpb25MaWZldGltZU1pbGxpczogMTgwMDAwMCxcbiAgICBtYXhDb25uZWN0aW9uTGlmZXRpbWVKaXR0ZXJNaWxsaXM6IDMwMDAwMCxcbiAgICBwcm9wYWdhdGVDcmVhdGVFcnJvcjogZmFsc2UsXG4gICAgaWRsZVRpbWVvdXRNaWxsaXM6IDEwMDAwLFxuICAgIHJlYXBJbnRlcnZhbE1pbGxpczogMTAwMCxcbiAgICBhY3F1aXJlVGltZW91dE1pbGxpczogMzAwMDAsXG4gICAgY3JlYXRlVGltZW91dE1pbGxpczogMzAwMDAsXG4gICAgLi4uY29uZmlnLnBvb2wsXG4gICAgLy8gdmFsaWRhdGUvYWZ0ZXJDcmVhdGXripQg7ZWt7IOBIO2UhOugiOyehOybjO2BrCDquLDrs7jqsJLsnYQg7IKs7Jqp7ZWc64ukLlxuICAgIHZhbGlkYXRlOiAoY29ubmVjdGlvbjogdW5rbm93bikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBjb25uZWN0aW9uICE9PSBcIm9iamVjdFwiIHx8IGNvbm5lY3Rpb24gPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGNvbm4gPSBjb25uZWN0aW9uIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgaWYgKGNvbm4uX2VuZGluZyA9PT0gdHJ1ZSB8fCBjb25uLl9jbG9zZWQgPT09IHRydWUpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgYWZ0ZXJDcmVhdGU6ICgoXG4gICAgICBjb25uOiBLbmV4LkNsaWVudCAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgZG9uZTogKGVycjogRXJyb3IgfCBudWxsLCBjb25uOiBLbmV4LkNsaWVudCkgPT4gdm9pZCxcbiAgICApID0+IHtcbiAgICAgIC8vIHBnIGRyaXZlcjog7IaM7LyTIOugiOuyqCBrZWVwQWxpdmUg7ISk7KCVXG4gICAgICBjb25zdCBzdHJlYW0gPSAoY29ubiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuY29ubmVjdGlvbiBhc1xuICAgICAgICB8IHsgc3RyZWFtPzogeyBzZXRLZWVwQWxpdmU/OiAoZW5hYmxlOiBib29sZWFuLCBpbml0aWFsRGVsYXk6IG51bWJlcikgPT4gdm9pZCB9IH1cbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoc3RyZWFtPy5zdHJlYW0/LnNldEtlZXBBbGl2ZSkge1xuICAgICAgICBzdHJlYW0uc3RyZWFtLnNldEtlZXBBbGl2ZSh0cnVlLCAxMDAwMCk7XG4gICAgICB9XG5cbiAgICAgIGRvbmUobnVsbCwgY29ubik7XG4gICAgfSkgc2F0aXNmaWVzIEtuZXguUG9vbENvbmZpZ1tcImFmdGVyQ3JlYXRlXCJdLFxuICB9O1xuXG4gIHJldHVybiBrbmV4KGNvbmZpZyk7XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUdBLFNBQWdCLG1CQUFtQixRQUEyQjtDQUM1RCxJQUFJLE9BQU8sY0FBYyxPQUFPLE9BQU8sZUFBZSxVQUFVO0VBQzlELE1BQU0sT0FBTyxPQUFPO0VBRXBCLElBQUksS0FBSyxjQUFjLFFBQVc7R0FDaEMsS0FBSyxZQUFZO0dBQ2pCLEtBQUssOEJBQThCLEtBQUssK0JBQStCO0VBQ3pFO0NBQ0Y7Q0FFQSxPQUFPLE9BQU87RUFHWiw2QkFBNkI7RUFDN0IsbUNBQW1DO0VBQ25DLHNCQUFzQjtFQUN0QixtQkFBbUI7RUFDbkIsb0JBQW9CO0VBQ3BCLHNCQUFzQjtFQUN0QixxQkFBcUI7RUFDckIsR0FBRyxPQUFPO0VBRVYsV0FBVyxlQUF3QjtHQUNqQyxJQUFJLE9BQU8sZUFBZSxZQUFZLGVBQWUsTUFBTSxPQUFPO0dBQ2xFLE1BQU0sT0FBTztHQUNiLElBQUksS0FBSyxZQUFZLFFBQVEsS0FBSyxZQUFZLE1BQU0sT0FBTztHQUMzRCxPQUFPO0VBQ1Q7RUFDQSxlQUNFLE1BQ0EsU0FDRztHQUVILE1BQU0sU0FBVSxLQUFpQztHQUdqRCxJQUFJLFFBQVEsUUFBUSxjQUNsQixPQUFPLE9BQU8sYUFBYSxNQUFNLEdBQUs7R0FHeEMsS0FBSyxNQUFNLElBQUk7RUFDakI7Q0FDRjtDQUVBLE9BQU8sS0FBSyxNQUFNO0FBQ3BCIn0=
@@ -16,6 +16,7 @@ export declare class Puri<TSchema, TTables extends Record<string, any>, TResult>
16
16
  knex: Knex;
17
17
  private knexQuery;
18
18
  private tableSpec;
19
+ private correlationRegistry;
19
20
  constructor(knex: Knex, tableName: string);
20
21
  constructor(knex: Knex, tableSource: Record<string, string | Puri<TSchema, any, any>>);
21
22
  safeGetTableSpec(tableName: string): TableSpec | null;
@@ -101,6 +102,10 @@ export declare class Puri<TSchema, TTables extends Record<string, any>, TResult>
101
102
  [K in TJoinAlias]: TJoinTable;
102
103
  }, callback: (j: JoinClauseGroup<TTables, Record<TJoinAlias, TSchema[TJoinTable]>>) => void): Puri<TSchema, TTables & Record<TJoinAlias, TSchema[TJoinTable]>, TResult>;
103
104
  join<TJoinTable extends keyof TSchema>(tableName: TJoinTable, callback: (j: JoinClauseGroup<TTables, Record<TJoinTable, TSchema[TJoinTable]>>) => void): Puri<TSchema, TTables & Record<TJoinTable, TSchema[TJoinTable]>, TResult>;
105
+ ensureJoin<TJoinTable extends keyof TSchema, TJoinAlias extends string>(tableSpec: {
106
+ [K in TJoinAlias]: TJoinTable;
107
+ }, left: AvailableColumns<TTables>, right: `${TJoinAlias}.${ColumnKeys<TSchema[TJoinTable]>}`): Puri<TSchema, TTables & Record<TJoinAlias, TSchema[TJoinTable]>, TResult>;
108
+ ensureJoin<TJoinTable extends keyof TSchema>(tableName: TJoinTable, left: AvailableColumns<TTables>, right: `${TJoinTable & string}.${ColumnKeys<TSchema[TJoinTable]>}`): Puri<TSchema, TTables & Record<TJoinTable, TSchema[TJoinTable]>, TResult>;
104
109
  leftJoin<TJoinAlias extends string, TSubResult>(tableSpec: {
105
110
  [K in TJoinAlias]: Puri<TSchema, any, TSubResult>;
106
111
  }, left: AvailableColumns<TTables>, right: `${TJoinAlias}.${ColumnKeys<TSubResult>}`): Puri<TSchema, TTables & Record<TJoinAlias, TSubResult & LeftJoinedMarker>, TResult>;
@@ -115,7 +120,19 @@ export declare class Puri<TSchema, TTables extends Record<string, any>, TResult>
115
120
  [K in TJoinAlias]: TJoinTable;
116
121
  }, callback: (j: JoinClauseGroup<TTables, Record<TJoinAlias, TSchema[TJoinTable]>>) => void): Puri<TSchema, TTables & Record<TJoinAlias, TSchema[TJoinTable] & LeftJoinedMarker>, TResult>;
117
122
  leftJoin<TJoinTable extends keyof TSchema>(tableName: TJoinTable, callback: (j: JoinClauseGroup<TTables, Record<TJoinTable, TSchema[TJoinTable]>>) => void): Puri<TSchema, TTables & Record<TJoinTable, TSchema[TJoinTable] & LeftJoinedMarker>, TResult>;
123
+ ensureLeftJoin<TJoinTable extends keyof TSchema, TJoinAlias extends string, TLeft extends AvailableColumns<TTables>>(tableSpec: {
124
+ [K in TJoinAlias]: TJoinTable;
125
+ }, left: TLeft, right: `${TJoinAlias}.${ColumnKeys<TSchema[TJoinTable]>}`): Puri<TSchema, TTables & Record<TJoinAlias, TSchema[TJoinTable] & LeftJoinMarkerFor<TTables, TLeft>>, TResult>;
126
+ ensureLeftJoin<TJoinTable extends keyof TSchema, TLeft extends AvailableColumns<TTables>>(tableName: TJoinTable, left: TLeft, right: `${TJoinTable & string}.${ColumnKeys<TSchema[TJoinTable]>}`): Puri<TSchema, TTables & Record<TJoinTable, TSchema[TJoinTable] & LeftJoinMarkerFor<TTables, TLeft>>, TResult>;
118
127
  __commonJoin(joinType: "join" | "leftJoin", tableNameOrSpec: any, ...args: any[]): this;
128
+ private __ensureJoin;
129
+ private createJoinRegistration;
130
+ private assertCorrelationAvailable;
131
+ private isSameJoinRegistration;
132
+ private createJoinConflictError;
133
+ private formatCorrelationRegistration;
134
+ private clearJoinRegistrations;
135
+ private getKnexJoinAlias;
119
136
  where(conditions: WhereCondition<TTables>): this;
120
137
  where<TColumn extends AvailableColumns<TTables>>(column: TColumn, value: ExtractColumnType<TTables, TColumn & string>): this;
121
138
  where<TColumn extends AvailableColumns<TTables>>(column: TColumn, operator: WhereOperator, value: ExtractColumnType<TTables, TColumn & string>): this;
@@ -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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"}