sonamu 0.8.19 → 0.8.21

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 (51) hide show
  1. package/dist/api/config.d.ts +1 -1
  2. package/dist/api/config.d.ts.map +1 -1
  3. package/dist/api/config.js +1 -1
  4. package/dist/api/decorators.js +2 -2
  5. package/dist/api/sonamu.d.ts +1 -1
  6. package/dist/api/sonamu.d.ts.map +1 -1
  7. package/dist/api/sonamu.js +19 -14
  8. package/dist/bin/cli.js +30 -1
  9. package/dist/database/base-model.js +2 -2
  10. package/dist/database/db.d.ts +1 -1
  11. package/dist/database/db.d.ts.map +1 -1
  12. package/dist/database/db.js +1 -1
  13. package/dist/stream/sse.d.ts +2 -0
  14. package/dist/stream/sse.d.ts.map +1 -1
  15. package/dist/stream/sse.js +29 -6
  16. package/dist/syncer/syncer.js +2 -2
  17. package/dist/testing/global-setup.d.ts.map +1 -1
  18. package/dist/testing/global-setup.js +4 -1
  19. package/dist/ui/api.d.ts.map +1 -1
  20. package/dist/ui/api.js +15 -12
  21. package/dist/ui/cdd-service.d.ts +4 -2
  22. package/dist/ui/cdd-service.d.ts.map +1 -1
  23. package/dist/ui/cdd-service.js +99 -1
  24. package/dist/ui/cdd-types.d.ts +25 -0
  25. package/dist/ui/cdd-types.d.ts.map +1 -1
  26. package/dist/ui/cdd-types.js +1 -1
  27. package/dist/ui-web/assets/index-B7gc0Ygb.css +1 -0
  28. package/dist/ui-web/assets/{index-D_19-Pi4.js → index-DP968oXY.js} +71 -71
  29. package/dist/ui-web/index.html +2 -2
  30. package/package.json +3 -3
  31. package/src/api/config.ts +1 -1
  32. package/src/api/decorators.ts +1 -1
  33. package/src/api/sonamu.ts +20 -15
  34. package/src/bin/cli.ts +34 -0
  35. package/src/database/base-model.ts +1 -1
  36. package/src/database/db.ts +1 -1
  37. package/src/shared/app.shared.ts.txt +10 -1
  38. package/src/shared/web.shared.ts.txt +1 -1
  39. package/src/skills/AGENTS.md +10 -0
  40. package/src/skills/sonamu/auth.md +40 -1
  41. package/src/skills/sonamu/cdd.md +42 -0
  42. package/src/skills/sonamu/model.md +1 -1
  43. package/src/skills/sonamu/scaffolding.md +6 -0
  44. package/src/skills/sonamu/workflow.md +1 -1
  45. package/src/stream/sse.ts +34 -5
  46. package/src/syncer/syncer.ts +1 -1
  47. package/src/testing/global-setup.ts +4 -0
  48. package/src/ui/api.ts +20 -6
  49. package/src/ui/cdd-service.ts +106 -0
  50. package/src/ui/cdd-types.ts +28 -0
  51. package/dist/ui-web/assets/index-D4XFBV-f.css +0 -1
@@ -273,7 +273,7 @@ import { UpsertBuilder } from "./upsert-builder.js";
273
273
  const { default: SqlParser } = await import("node-sql-parser");
274
274
  const parser = new SqlParser.Parser();
275
275
  const parsedQuery = parser.astify(countPuri.toQuery(), {
276
- database: Sonamu.config.database.database
276
+ database: Sonamu.config.database?.database
277
277
  });
278
278
  const leftJoinTables = getJoinTables(parsedQuery, [
279
279
  "LEFT JOIN"
@@ -390,4 +390,4 @@ import { UpsertBuilder } from "./upsert-builder.js";
390
390
  }
391
391
  export const BaseModel = new BaseModelClass();
392
392
 
393
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9iYXNlLW1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJp7J2YIO2DgOyeheydgCDqsJzrs4Qg66qo64247JeQ7IScIO2ZleygleuQmOuvgOuhnCBCYXNlTW9kZWzsl5DshJzripQgYW5566W8IO2XiOyaqe2VqCAqL1xuaW1wb3J0IHsgZ2V0TG9nZ2VyLCB0eXBlIExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBncm91cCwgaXNPYmplY3QsIG9taXQsIHNldCB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyB0eXBlIExpc3RSZXN1bHQsIG5vcm1hbGl6ZUZpbHRlclF1ZXJ5LCB2YWxpZGF0ZVNvbmFtdUZpbHRlcnMgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJRdWVyeSB9IGZyb20gXCIuLi9maWx0ZXIvdHlwZXNcIjtcbmltcG9ydCB7IGNvbnZlcnREb21haW5Ub0NhdGVnb3J5IH0gZnJvbSBcIi4uL2xvZ2dlci9jYXRlZ29yeVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZVNjaGVtYUV4dGVuZCwgU29uYW11UXVlcnlNb2RlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRKb2luVGFibGVzLCBnZXRUYWJsZU5hbWVzRnJvbVdoZXJlIH0gZnJvbSBcIi4uL3V0aWxzL3NxbC1wYXJzZXJcIjtcbmltcG9ydCB7IGNodW5rIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VyTWFwLCBSZXNvbHZlU3Vic2V0SW50ZXJzZWN0aW9uIH0gZnJvbSBcIi4vYmFzZS1tb2RlbC50eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBEQlByZXNldCB9IGZyb20gXCIuL2RiXCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuL2RiXCI7XG5pbXBvcnQgeyBQdXJpIH0gZnJvbSBcIi4vcHVyaVwiO1xuaW1wb3J0IHR5cGUgeyBVbmlvbkV4dHJhY3RlZFRUYWJsZXMgfSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEluZmVyQWxsU3Vic2V0cywgUHVyaUxvYWRlclF1ZXJpZXMsIFB1cmlTdWJzZXRGbiB9IGZyb20gXCIuL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5pbXBvcnQgeyBQdXJpV3JhcHBlciB9IGZyb20gXCIuL3B1cmktd3JhcHBlclwiO1xuaW1wb3J0IHsgVXBzZXJ0QnVpbGRlciB9IGZyb20gXCIuL3Vwc2VydC1idWlsZGVyXCI7XG5cbnR5cGUgVW5rbm93bkRCUmVjb3JkID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICog66qo65OgIE1vZGVsIO2BtOuemOyKpOydmCDquLDrs7gg7YG0656Y7IqkXG4gKlxuICogQHRlbXBsYXRlIFRTdWJzZXRLZXkgLSDshJzruIzshYsg7YKkIOycoOuLiOyYqCAo7JiIOiBcIkFcIiB8IFwiUFwiIHwgXCJTU1wiKVxuICogQHRlbXBsYXRlIFRTdWJzZXRNYXBwaW5nIC0g7ISc67iM7IWL67OEIOy1nOyihSDqsrDqs7wg7YOA7J6FIOunpO2VkVxuICogQHRlbXBsYXRlIFRTdWJzZXRRdWVyaWVzIC0g7ISc67iM7IWLIOy/vOumrCDtlajsiJgg6rCd7LK0XG4gKiBAdGVtcGxhdGUgVExvYWRlclF1ZXJpZXMgLSDshJzruIzshYvrs4Qg66Gc642UIOy/vOumrCDrsLDsl7Qg6rCd7LK0XG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlTW9kZWxDbGFzczxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyA9IG5ldmVyLFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBuZXZlcixcbiAgVFN1YnNldFF1ZXJpZXMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgUHVyaVN1YnNldEZuPiA9IG5ldmVyLFxuICBUTG9hZGVyUXVlcmllcyBleHRlbmRzIFB1cmlMb2FkZXJRdWVyaWVzPFRTdWJzZXRLZXk+ID0gbmV2ZXIsXG4+IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbE5hbWU6IHN0cmluZyA9IHRoaXMuY29uc3RydWN0b3IubmFtZSxcbiAgICBwcm90ZWN0ZWQgc3Vic2V0UXVlcmllcz86IFRTdWJzZXRRdWVyaWVzLFxuICAgIHByb3RlY3RlZCBsb2FkZXJRdWVyaWVzPzogVExvYWRlclF1ZXJpZXMsXG4gICkge1xuICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKTtcbiAgfVxuXG4gIGdldERCKHdoaWNoOiBEQlByZXNldCk6IEtuZXgge1xuICAgIHJldHVybiBEQi5nZXREQih3aGljaCk7XG4gIH1cblxuICBnZXRQdXJpKHdoaWNoOiBEQlByZXNldCk6IFB1cmlXcmFwcGVyIHtcbiAgICAvLyDtirjrnpzsnq3shZgg7Luo7YWN7Iqk7Yq47JeQ7IScIO2KuOuenOyereyFmCDtmo3rk51cbiAgICBjb25zdCB0cnggPSBEQi5nZXRUcmFuc2FjdGlvbkNvbnRleHQoKS5nZXRUcmFuc2FjdGlvbih3aGljaCk7XG4gICAgaWYgKHRyeCkge1xuICAgICAgcmV0dXJuIHRyeDtcbiAgICB9XG5cbiAgICAvLyDtirjrnpzsnq3shZjsnbQg7JeG7Jy866m0IOyDiOuhnOyatCBQdXJpV3JhcHBlciDrsJjtmZhcbiAgICBjb25zdCBkYiA9IHRoaXMuZ2V0REIod2hpY2gpO1xuICAgIHJldHVybiBuZXcgUHVyaVdyYXBwZXIoZGIsIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpIHtcbiAgICByZXR1cm4gREIuZGVzdHJveSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0SW5zZXJ0ZWRJZHMoXG4gICAgd2RiOiBLbmV4LFxuICAgIHJvd3M6IFVua25vd25EQlJlY29yZFtdLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIHVucUtleUZpZWxkczogc3RyaW5nW10sXG4gICAgY2h1bmtTaXplOiBudW1iZXIgPSA1MDAsXG4gICkge1xuICAgIGlmICghd2RiKSB7XG4gICAgICB3ZGIgPSB0aGlzLmdldERCKFwid1wiKTtcbiAgICB9XG5cbiAgICBsZXQgdW5xS2V5czogc3RyaW5nW107XG4gICAgbGV0IHdoZXJlSW5GaWVsZDogc3RyaW5nIHwgS25leC5SYXc7XG4gICAgbGV0IHNlbGVjdEZpZWxkOiBzdHJpbmc7XG5cbiAgICBpZiAodW5xS2V5RmllbGRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHdoZXJlSW5GaWVsZCA9IHdkYi5yYXcoYENPTkNBVF9XUygnXycsICcke3VucUtleUZpZWxkcy5qb2luKFwiLFwiKX0nKWApO1xuICAgICAgc2VsZWN0RmllbGQgPSBgJHt3aGVyZUluRmllbGR9IGFzIHRtcFVpZGA7XG4gICAgICB1bnFLZXlzID0gcm93cy5tYXAoKHJvdykgPT4gdW5xS2V5RmllbGRzLm1hcCgoZmllbGQpID0+IHJvd1tmaWVsZF0pLmpvaW4oXCJfXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hlcmVJbkZpZWxkID0gdW5xS2V5RmllbGRzWzBdO1xuICAgICAgc2VsZWN0RmllbGQgPSB1bnFLZXlGaWVsZHNbMF07XG4gICAgICB1bnFLZXlzID0gcm93cy5tYXAoKHJvdykgPT4gcm93W3VucUtleUZpZWxkc1swXV0gYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0SWRzOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgaXRlbXMgb2YgY2h1bmsodW5xS2V5cywgY2h1bmtTaXplKSkge1xuICAgICAgY29uc3QgZGJSb3dzID0gYXdhaXQgd2RiKHRhYmxlTmFtZSlcbiAgICAgICAgLnNlbGVjdChcImlkXCIsIHdkYi5yYXcoc2VsZWN0RmllbGQpKVxuICAgICAgICAud2hlcmVJbih3aGVyZUluRmllbGQgYXMgc3RyaW5nLCBpdGVtcyk7XG4gICAgICByZXN1bHRJZHMgPSByZXN1bHRJZHMuY29uY2F0KFxuICAgICAgICBkYlJvd3MubWFwKChkYlJvdzogVW5rbm93bkRCUmVjb3JkKSA9PiBwYXJzZUludChTdHJpbmcoZGJSb3cuaWQpKSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRJZHM7XG4gIH1cblxuICAvKipcbiAgICog7Yq57KCVIOyEnOu4jOyFi+yXkCDrjIDtlZwg7L+866asIOu5jOuNlCDtmo3rk51cbiAgICpcbiAgICogQHJldHVybnMgcWIgLSDsv7zrpqwg67mM642UICjsobDqsbQg7LaU6rCA7JqpKVxuICAgKiBAcmV0dXJucyBvblN1YnNldCAtIO2KueyglSDshJzruIzshYsg7KCE7JqpIO2DgOyeheydtCDtlYTsmpTtlaAg65WMIOyCrOyaqVxuICAgKi9cbiAgZ2V0U3Vic2V0UXVlcmllczxUIGV4dGVuZHMgVFN1YnNldEtleT4oc3Vic2V0OiBUKSB7XG4gICAgaWYgKCF0aGlzLnN1YnNldFF1ZXJpZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInN1YnNldFF1ZXJpZXMgaXMgbm90IGRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcHVyaVdyYXBwZXIgPSBuZXcgUHVyaVdyYXBwZXIodGhpcy5nZXREQihcInJcIiksIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuICAgIGNvbnN0IHFiID0gdGhpcy5zdWJzZXRRdWVyaWVzW3N1YnNldF0/LihwdXJpV3JhcHBlcik7XG5cbiAgICAvLyBOb25BbGxvd2VkQXNTaW5nbGVUYWJsZTog64uo7J28IO2FjOydtOu4lCDsu6zrn7wg7KCR6re8IOuwqeyngOyaqSDrp4jsu6RcbiAgICB0eXBlIFFCVGFibGVzID0gVW5pb25FeHRyYWN0ZWRUVGFibGVzPFRTdWJzZXRLZXksIFRTdWJzZXRRdWVyaWVzPiAmIHtcbiAgICAgIE5vbkFsbG93ZWRBc1NpbmdsZVRhYmxlOiB7IF9fZnVsbHRleHRfXzogdHJ1ZSB9O1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgcWI6IHFiIGFzIHVua25vd24gYXMgUHVyaTxEYXRhYmFzZVNjaGVtYUV4dGVuZCwgUUJUYWJsZXMsIHt9PixcbiAgICAgIG9uU3Vic2V0OiAoKF9zdWJzZXQ6IFRTdWJzZXRLZXkgfCByZWFkb25seSBUU3Vic2V0S2V5W10pID0+IHFiKSBhcyB7XG4gICAgICAgIC8vIOuLqOydvCDtgqRcbiAgICAgICAgPFMgZXh0ZW5kcyBUU3Vic2V0S2V5PihzdWJzZXQ6IFMpOiBSZXR1cm5UeXBlPFRTdWJzZXRRdWVyaWVzW1NdPjtcbiAgICAgICAgLy8g7YKkIOuwsOyXtCAtPiDqtZDsp5Htlakg67CY7ZmYXG4gICAgICAgIDxBcnIgZXh0ZW5kcyByZWFkb25seSBUU3Vic2V0S2V5W10+KFxuICAgICAgICAgIHN1YnNldHM6IFsuLi5BcnJdLFxuICAgICAgICApOiBSZXNvbHZlU3Vic2V0SW50ZXJzZWN0aW9uPEFyciwgVFN1YnNldFF1ZXJpZXM+O1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuaGFuY2VyIOqwneyytCDsg53shLEg7Zes7Y28XG4gICAqIO2DgOyehSDqsoDspp0g67CPIOy2lOuhoOydhCDrj4TsmYDspIxcbiAgICovXG4gIGNyZWF0ZUVuaGFuY2VyczxUIGV4dGVuZHMgVFN1YnNldEtleT4oXG4gICAgZW5oYW5jZXJzOiBFbmhhbmNlck1hcDxcbiAgICAgIFQsXG4gICAgICBJbmZlckFsbFN1YnNldHM8VFN1YnNldFF1ZXJpZXMsIFRMb2FkZXJRdWVyaWVzPixcbiAgICAgIFRTdWJzZXRNYXBwaW5nLFxuICAgICAgVFN1YnNldFF1ZXJpZXNcbiAgICA+LFxuICApIHtcbiAgICByZXR1cm4gZW5oYW5jZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIOyEnOu4jOyFiyDsv7zrpqwg7Iuk7ZaJXG4gICAqXG4gICAqIDEuIFNvbmFtdSDtlYTthLAg7KCB7JqpICjtg4DsnoUg67OA7ZmYIO2PrO2VqClcbiAgICogMi4g7L+866asIOyLpO2WiSAocGFnaW5hdGlvbiDsoIHsmqkpXG4gICAqIDMuIOuhnOuNlCDsi6TtlokgKDE6TiwgTjpNIOq0gOqzhCDrjbDsnbTthLAg66Gc65SpKVxuICAgKiA0LiBIeWRyYXRlIChmbGF0IOKGkiDspJHssqkg6rCd7LK0KVxuICAgKiA1LiBFbmhhbmNlciDsoIHsmqkgKHZpcnR1YWwg7ZWE65OcIOqzhOyCsClcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVTdWJzZXRRdWVyeTxcbiAgICBUIGV4dGVuZHMgVFN1YnNldEtleSxcbiAgICBUQ29tcHV0ZWRSZXN1bHRzIGV4dGVuZHMgSW5mZXJBbGxTdWJzZXRzPFRTdWJzZXRRdWVyaWVzLCBUTG9hZGVyUXVlcmllcz4sXG4gICAgTFAgZXh0ZW5kcyB7XG4gICAgICBudW0/OiBudW1iZXI7XG4gICAgICBwYWdlPzogbnVtYmVyO1xuICAgICAgcXVlcnlNb2RlPzogU29uYW11UXVlcnlNb2RlO1xuICAgICAgc29uYW11RmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfSxcbiAgPihcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN1YnNldDogVDtcbiAgICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+O1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIG51bTogbnVtYmVyO1xuICAgICAgICBwYWdlOiBudW1iZXI7XG4gICAgICAgIHF1ZXJ5TW9kZT86IFNvbmFtdVF1ZXJ5TW9kZTtcbiAgICAgICAgc29uYW11RmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICB9O1xuICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgICAgb3B0aW1pemVDb3VudFF1ZXJ5PzogYm9vbGVhbjtcbiAgICB9ICYgRW5oYW5jZXJQYXJhbTxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZywgVFN1YnNldFF1ZXJpZXM+LFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFRTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHsgc3Vic2V0LCBxYiwgcGFyYW1zOiBxdWVyeVBhcmFtcywgZGVidWcgPSBmYWxzZSwgb3B0aW1pemVDb3VudFF1ZXJ5ID0gZmFsc2UgfSA9IHBhcmFtcztcblxuICAgIGlmICghdGhpcy5sb2FkZXJRdWVyaWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsb2FkZXJRdWVyaWVzIGlzIG5vdCBkZWZpbmVkXCIpO1xuICAgIH1cblxuICAgIC8vIFNvbmFtdSBGaWx0ZXIg7KCB7JqpXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLnNvbmFtdUZpbHRlcikge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbHRlciA9IG5vcm1hbGl6ZUZpbHRlclF1ZXJ5KHF1ZXJ5UGFyYW1zLnNvbmFtdUZpbHRlcik7XG4gICAgICB0aGlzLmFwcGx5U29uYW11RmlsdGVycyhxYiwgbm9ybWFsaXplZEZpbHRlcik7XG4gICAgfVxuXG4gICAgY29uc3QgeyBudW0sIHBhZ2UgfSA9IHF1ZXJ5UGFyYW1zO1xuXG4gICAgLy8gQ09VTlQg7L+866asIOyLpO2WiSAocXVlcnlNb2RlOiBsaXN07J28IOuVjOuKlCAwIOumrO2EtClcbiAgICBjb25zdCB0b3RhbCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUNvdW50UXVlcnkocWIsIHF1ZXJ5UGFyYW1zLCBkZWJ1Zywgb3B0aW1pemVDb3VudFF1ZXJ5KTtcblxuICAgIGlmIChxdWVyeVBhcmFtcz8ucXVlcnlNb2RlID09PSBcImNvdW50XCIpIHtcbiAgICAgIHJldHVybiB7IHRvdGFsIH0gYXMgTGlzdFJlc3VsdDxMUCwgVFN1YnNldE1hcHBpbmdbVF0+O1xuICAgIH1cblxuICAgIC8vIExJU1Qg7L+866asIOyLpO2WiVxuICAgIGNvbnN0IGNvbXB1dGVkUm93cyA9IGF3YWl0IHRoaXMuZXhlY3V0ZUxpc3RRdWVyeShzdWJzZXQsIHFiLCBxdWVyeVBhcmFtcywgbnVtLCBwYWdlLCBkZWJ1Zyk7XG5cbiAgICAvLyBFbmhhbmNlciDsoIHsmqlcbiAgICBjb25zdCBlbmhhbmNlciA9IChwYXJhbXMgYXMgYW55KS5lbmhhbmNlcnM/LltzdWJzZXRdO1xuICAgIGNvbnN0IGVuaGFuY2VkUm93cyA9IChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGNvbXB1dGVkUm93cy5tYXAoKHJvdykgPT4gZW5oYW5jZXI/Lihyb3cpID8/IHJvdyksXG4gICAgKSkgYXMgVFN1YnNldE1hcHBpbmdbVF1bXTtcblxuICAgIC8vIEludGVybmFsIO2VhOuTnCDsoJzqsbBcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldCh0aGlzLm1vZGVsTmFtZSk7XG4gICAgY29uc3QgaW50ZXJuYWxGaWVsZHMgPSBlbnRpdHkuc3Vic2V0c0ludGVybmFsW3N1YnNldF0gPz8gW107XG4gICAgY29uc3Qgcm93cyA9XG4gICAgICBpbnRlcm5hbEZpZWxkcy5sZW5ndGggPiAwXG4gICAgICAgID8gZW5oYW5jZWRSb3dzLm1hcCgocm93KSA9PiB0aGlzLm9taXRJbnRlcm5hbEZpZWxkcyhyb3csIGludGVybmFsRmllbGRzKSlcbiAgICAgICAgOiBlbmhhbmNlZFJvd3M7XG5cbiAgICBpZiAocXVlcnlQYXJhbXMucXVlcnlNb2RlID09PSBcImxpc3RcIikge1xuICAgICAgLy8g66as7Iqk7Yq466eMIOumrO2EtFxuICAgICAgcmV0dXJuIHsgcm93cyB9IGFzIExpc3RSZXN1bHQ8TFAsIFRTdWJzZXRNYXBwaW5nW1RdPjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g65GY64ukIOumrO2EtFxuICAgICAgcmV0dXJuIHsgcm93cywgdG90YWwgfSBhcyBMaXN0UmVzdWx0PExQLCBUU3Vic2V0TWFwcGluZ1tUXT47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOqwneyytOyXkOyEnCBpbnRlcm5hbCDtlYTrk5wg7KCc6rGwXG4gICAqIOykkeyyqSDtlYTrk5wo7JiIOiBcInVzZXIuZW1haWxcIikg67CPIOuwsOyXtCjsmIg6IFwiZW1wbG95ZWVzLnNhbGFyeVwiKeuPhCDsspjrpqxcbiAgICovXG4gIG9taXRJbnRlcm5hbEZpZWxkczxUIGV4dGVuZHMgb2JqZWN0Pihyb3c6IFQsIGZpZWxkczogc3RyaW5nW10pOiBUIHtcbiAgICBjb25zdCByZXN1bHQgPSBjbG9uZURlZXAocm93KTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgdGhpcy5kZWxldGVGaWVsZChyZXN1bHQsIGZpZWxkLnNwbGl0KFwiLlwiKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyUXVlcnnrpbwgUHVyaSBRdWVyeUJ1aWxkZXLsl5Ag7KCB7JqpXG4gICAqXG4gICAqIEBwYXJhbSBxYiBQdXJpIFF1ZXJ5QnVpbGRlciDsnbjsiqTthLTsiqRcbiAgICogQHBhcmFtIGZpbHRlcnMgRmlsdGVyUXVlcnkg6rCd7LK0XG4gICAqL1xuICBwcm90ZWN0ZWQgYXBwbHlTb25hbXVGaWx0ZXJzPFRFbnRpdHkgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgcWI6IFB1cmk8YW55LCBhbnksIGFueT4sXG4gICAgZmlsdGVycz86IEZpbHRlclF1ZXJ5PFRFbnRpdHk+LFxuICApOiB2b2lkIHtcbiAgICBpZiAoIWZpbHRlcnMpIHJldHVybjtcblxuICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHRoaXMubW9kZWxOYW1lKTtcblxuICAgIC8vIDEuIO2VhO2EsCDqsoDspp0gKEVudGl0eSDquLDrsJgpXG4gICAgdmFsaWRhdGVTb25hbXVGaWx0ZXJzKGZpbHRlcnMsIGVudGl0eSk7XG5cbiAgICAvLyAyLiDqsoDspp3rkJwg7ZWE7YSwIOyggeyaqVxuICAgIGNvbnN0IHB1cmkgPSBxYiBhcyBhbnk7XG5cbiAgICBmb3IgKGNvbnN0IFtmaWVsZCwgY29uZGl0aW9uXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXJzKSkge1xuICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IGNvbmRpdGlvbiA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgIC8vIO2FjOydtOu4lOuqhS7tlYTrk5zrqoUg7ZiV7Iud7Jy866GcIOuzgO2ZmFxuICAgICAgY29uc3QgZnVsbEZpZWxkID0gZW50aXR5LmdldEZ1bGxGaWVsZE5hbWUoZmllbGQpO1xuXG4gICAgICAvLyDsp4HsoJEg6rCSIChlceyZgCDrj5nsnbwpXG4gICAgICBpZiAodHlwZW9mIGNvbmRpdGlvbiAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGNvbmRpdGlvbikpIHtcbiAgICAgICAgcHVyaS53aGVyZShmdWxsRmllbGQsIGNvbmRpdGlvbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyDsl7DsgrDsnpAg6rCd7LK0XG4gICAgICBmb3IgKGNvbnN0IFtvcGVyYXRvciwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmRpdGlvbikpIHtcbiAgICAgICAgdGhpcy5hcHBseU9wZXJhdG9yKHFiLCBmdWxsRmllbGQsIG9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOuLqOydvCDsl7DsgrDsnpDrpbwgUXVlcnlCdWlsZGVy7JeQIOyggeyaqVxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseU9wZXJhdG9yKFxuICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+LFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLFxuICAgIHZhbHVlOiB1bmtub3duLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwdXJpID0gcWIgYXMgYW55O1xuXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgY2FzZSBcImVxXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJuZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIiE9XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJndFwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj5cIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImd0ZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj49XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJsdFwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIjxcIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImx0ZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIjw9XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpblwiOlxuICAgICAgICBwdXJpLndoZXJlSW4oZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJub3RJblwiOlxuICAgICAgICBwdXJpLndoZXJlTm90SW4oZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJjb250YWluc1wiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcImxpa2VcIiwgYCUke3ZhbHVlfSVgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJzdGFydHNXaXRoXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwibGlrZVwiLCBgJHt2YWx1ZX0lYCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiZW5kc1dpdGhcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCJsaWtlXCIsIGAlJHt2YWx1ZX1gKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpc051bGxcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgbnVsbCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiaXNOb3ROdWxsXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiIT1cIiwgbnVsbCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiYmVmb3JlXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiPFwiLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiYWZ0ZXJcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCI+XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJiZXR3ZWVuXCI6IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB2YWx1ZTtcbiAgICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj49XCIsIG1pbikud2hlcmUoZmllbGQsIFwiPD1cIiwgbWF4KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGBVbnN1cHBvcnRlZCBvcGVyYXRvcjogJHtvcGVyYXRvcn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog7KSR7LKpIO2VhOuTnCDsgq3soJwgKOuwsOyXtCDrgrQg6rCd7LK064+EIOyymOumrClcbiAgICovXG4gIGRlbGV0ZUZpZWxkKG9iajogYW55LCBwYXJ0czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBvYmouZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtICYmIHR5cGVvZiBpdGVtID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBkZWxldGUgaXRlbVtwYXJ0c1swXV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBvYmpbcGFydHNbMF1dO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBwYXJ0cztcbiAgICBjb25zdCBuZXh0ID0gb2JqW2ZpcnN0XTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG5leHQpKSB7XG4gICAgICBuZXh0Lm1hcCgoaXRlbSkgPT4gdGhpcy5kZWxldGVGaWVsZChpdGVtLCByZXN0KSk7XG4gICAgfSBlbHNlIGlmIChuZXh0ICYmIHR5cGVvZiBuZXh0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmRlbGV0ZUZpZWxkKG5leHQsIHJlc3QpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDT1VOVCDsv7zrpqwg7Iuk7ZaJICjrgrTrtoAg66mU7ISc65OcKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlQ291bnRRdWVyeShcbiAgICBxYjogUHVyaTxhbnksIGFueSwgYW55PixcbiAgICBwYXJhbXM6IHsgcXVlcnlNb2RlPzogXCJsaXN0XCIgfCBcImNvdW50XCIgfCBcImJvdGhcIiB9LFxuICAgIGRlYnVnOiBib29sZWFuLFxuICAgIG9wdGltaXplQ291bnRRdWVyeTogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAocGFyYW1zLnF1ZXJ5TW9kZSA9PT0gXCJsaXN0XCIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGNvdW50UHVyaSA9IHFiLmNsb25lKCkuY2xlYXIoXCJvcmRlclwiKS5jbGVhcihcImxpbWl0XCIpLmNsZWFyKFwib2Zmc2V0XCIpO1xuXG4gICAgaWYgKG9wdGltaXplQ291bnRRdWVyeSkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0OiBTcWxQYXJzZXIgfSA9IGF3YWl0IGltcG9ydChcIm5vZGUtc3FsLXBhcnNlclwiKTtcbiAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBTcWxQYXJzZXIuUGFyc2VyKCk7XG4gICAgICBjb25zdCBwYXJzZWRRdWVyeSA9IHBhcnNlci5hc3RpZnkoY291bnRQdXJpLnRvUXVlcnkoKSwge1xuICAgICAgICBkYXRhYmFzZTogU29uYW11LmNvbmZpZy5kYXRhYmFzZS5kYXRhYmFzZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBsZWZ0Sm9pblRhYmxlcyA9IGdldEpvaW5UYWJsZXMocGFyc2VkUXVlcnksIFtcIkxFRlQgSk9JTlwiXSk7XG4gICAgICBjb25zdCB3aGVyZVRhYmxlcyA9IGdldFRhYmxlTmFtZXNGcm9tV2hlcmUocGFyc2VkUXVlcnkpO1xuXG4gICAgICBjb25zdCB0YWJsZXNUb1JlbW92ZSA9IGxlZnRKb2luVGFibGVzLmZpbHRlcigoaikgPT4gIXdoZXJlVGFibGVzLmluY2x1ZGVzKGopKTtcbiAgICAgIHRhYmxlc1RvUmVtb3ZlLmZvckVhY2goKHRhYmxlKSA9PiB7XG4gICAgICAgIGNvdW50UHVyaS5jbGVhckpvaW4odGFibGUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ09VTlQoKinroZwg7KCE7LK0IOugiOy9lOuTnCDsiJjrpbwg6rOE7IKwXG4gICAgLy8gVE9ETzogcWLsnZggRElTVElOQ1TqsIAg7J6I64qUIOqyveyasCDsspjrpqztlbTslbwg7ZWoXG4gICAgY29uc3QgY291bnRSZXN1bHQ6IHsgdG90YWw/OiBudW1iZXIgfSA9IGF3YWl0IGNvdW50UHVyaVxuICAgICAgLmNsZWFyKFwic2VsZWN0XCIpXG4gICAgICAuc2VsZWN0KHsgdG90YWw6IFB1cmkucmF3TnVtYmVyKGBDT1VOVCgqKTo6aW50ZWdlcmApIH0pXG4gICAgICAuZmlyc3QoKTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgY291bnRQdXJpLmRlYnVnKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50UmVzdWx0Py50b3RhbCA/PyAwO1xuICB9XG5cbiAgLyoqXG4gICAqIExJU1Qg7L+866asIOyLpO2WiSAo64K067aAIOuplOyEnOuTnClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUxpc3RRdWVyeTxUIGV4dGVuZHMgVFN1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+LFxuICAgIHBhcmFtczogeyBxdWVyeU1vZGU/OiBcImxpc3RcIiB8IFwiY291bnRcIiB8IFwiYm90aFwiIH0sXG4gICAgbnVtOiBudW1iZXIsXG4gICAgcGFnZTogbnVtYmVyLFxuICAgIGRlYnVnOiBib29sZWFuLFxuICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgaWYgKHBhcmFtcy5xdWVyeU1vZGUgPT09IFwiY291bnRcIikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbWl0ZWRRYiA9ICgoKSA9PiB7XG4gICAgICBpZiAobnVtID09PSAwKSB7XG4gICAgICAgIHJldHVybiBxYjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBxYi5saW1pdChudW0pLm9mZnNldChudW0gKiAocGFnZSAtIDEpKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIGxldCB1bmxvYWRlZFJvd3MgPSAoYXdhaXQgbGltaXRlZFFiKSBhcyBhbnlbXTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgcWIuZGVidWcoKTtcbiAgICB9XG5cbiAgICAvLyDroZzrjZQg7LKY66asXG4gICAgY29uc3QgbG9hZGVycyA9ICh0aGlzLmxvYWRlclF1ZXJpZXMgYXMgYW55KVtzdWJzZXRdO1xuICAgIGlmIChsb2FkZXJzICYmIEFycmF5LmlzQXJyYXkobG9hZGVycykpIHtcbiAgICAgIHVubG9hZGVkUm93cyA9IGF3YWl0IHRoaXMucHJvY2Vzc0xvYWRlcnModW5sb2FkZWRSb3dzLCBsb2FkZXJzLCBkZWJ1Zyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHlkcmF0ZSh1bmxvYWRlZFJvd3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIOyerOq3gOyggSDroZzrjZQg7LKY66asXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NMb2FkZXJzKHJvd3M6IGFueVtdLCBsb2FkZXJzOiBhbnlbXSwgZGVidWc6IGJvb2xlYW4pOiBQcm9taXNlPGFueVtdPiB7XG4gICAgZm9yIChjb25zdCByZXNvbHZlTG9hZGVyIG9mIGxvYWRlcnMpIHtcbiAgICAgIGNvbnN0IHsgYXMsIHJlZklkLCBxYjogcmVzb2x2ZUxvYWRlclFiRm4sIGxvYWRlcnM6IG5lc3RlZExvYWRlcnMgfSA9IHJlc29sdmVMb2FkZXI7XG5cbiAgICAgIGNvbnN0IHJlc29sdmVMb2FkZXJRYiA9IHJlc29sdmVMb2FkZXJRYkZuKFxuICAgICAgICBuZXcgUHVyaVdyYXBwZXIodGhpcy5nZXREQihcInJcIiksIG5ldyBVcHNlcnRCdWlsZGVyKCkpLFxuICAgICAgICByb3dzLm1hcCgocm93KSA9PiByb3dbcmVmSWRdKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICByZXNvbHZlTG9hZGVyUWIuZGVidWcoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGxvYWRlZFJvd3MgPSAoYXdhaXQgcmVzb2x2ZUxvYWRlclFiKSBhcyBhbnlbXTtcblxuICAgICAgLy8g7KSR7LKpIGxvYWRlcnPqsIAg7J6I7Jy866m0IOyerOq3gCDsspjrpqxcbiAgICAgIGlmIChuZXN0ZWRMb2FkZXJzICYmIG5lc3RlZExvYWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2FkZWRSb3dzID0gYXdhaXQgdGhpcy5wcm9jZXNzTG9hZGVycyhsb2FkZWRSb3dzLCBuZXN0ZWRMb2FkZXJzLCBkZWJ1Zyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YlJvd0dyb3VwcyA9IGdyb3VwKGxvYWRlZFJvd3MsIChyb3cpID0+IHJvdy5yZWZJZCk7XG5cbiAgICAgIHJvd3MgPSByb3dzLm1hcCgocm93KSA9PiB7XG4gICAgICAgIHJvd1thc10gPSAoc3ViUm93R3JvdXBzW3Jvd1tyZWZJZF1dID8/IFtdKS5tYXAoKHIpID0+IG9taXQociwgW1wicmVmSWRcIl0pKTtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXQg66CI7L2U65Oc66W8IOykkeyyqSDqsJ3ssrTroZwg67OA7ZmYXG4gICAqXG4gICAqIC0gYHVzZXJfX25hbWVgIOKGkiBgeyB1c2VyOiB7IG5hbWUgfSB9YFxuICAgKiAtIG51bGxhYmxlIHJlbGF0aW9u7J2YIOqyveyasCBpZCDtlYTrk5zqsIAgbnVsbOydtOuptCDqsJ3ssrQg7J6Q7LK066W8IG51bGzroZxcbiAgICovXG4gIGh5ZHJhdGU8VCBleHRlbmRzIFVua25vd25EQlJlY29yZD4ocm93czogVFtdKTogVFtdIHtcbiAgICByZXR1cm4gcm93cy5tYXAoKHJvdzogVCkgPT4ge1xuICAgICAgLy8gbnVsbGFibGUgcmVsYXRpb24g7LKY66asOiDqt7jro7nsnZggaWQg7ZWE65Oc6rCAIG51bGzsnbTrqbQg6rCd7LK0IOyghOyytOulvCBudWxs66GcXG4gICAgICBjb25zdCBuZXN0ZWRLZXlzID0gT2JqZWN0LmtleXMocm93KS5maWx0ZXIoKGtleSkgPT4ga2V5LmluY2x1ZGVzKFwiX19cIikpO1xuICAgICAgY29uc3QgZ3JvdXBzID0gT2JqZWN0Lmdyb3VwQnkobmVzdGVkS2V5cywgKGtleSkgPT4ga2V5LnNwbGl0KFwiX19cIilbMF0pO1xuXG4gICAgICAvLyBpZCDtlYTrk5zqsIAgbnVsbOyduCDqt7jro7kg7LC+6riwICjsmIg6IHBhcmVudF9faWTqsIAgbnVsbOydtOuptCBwYXJlbnQg6re466O5IOyghOyytOqwgCBudWxsKVxuICAgICAgY29uc3QgbnVsbEtleXMgPSBPYmplY3QuZW50cmllcyhncm91cHMpXG4gICAgICAgIC5maWx0ZXIoKFtncm91cEtleSwgZmllbGRzXSkgPT4ge1xuICAgICAgICAgIGlmICghZmllbGRzIHx8IGZpZWxkcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgIC8vIOq3uOujueydmCBpZCDtlYTrk5wg7LC+6riwICjsmIg6IFwicGFyZW50X19pZFwiKVxuICAgICAgICAgIGNvbnN0IGlkRmllbGQgPSBgJHtncm91cEtleX1fX2lkYDtcbiAgICAgICAgICBpZiAoaWRGaWVsZCBpbiByb3cpIHtcbiAgICAgICAgICAgIC8vIGlkIO2VhOuTnOqwgCBudWxs7J2066m0IOqwneyytCDsoITssrTqsIAgbnVsbFxuICAgICAgICAgICAgcmV0dXJuIHJvd1tpZEZpZWxkXSA9PT0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpZCDtlYTrk5zqsIAg7JeG7Jy866m0IOq4sOyhtCDroZzsp4E6IOuqqOuToCDtlYTrk5zqsIAgbnVsbOyduOyngCDtmZXsnbhcbiAgICAgICAgICByZXR1cm4gZmllbGRzLmV2ZXJ5KFxuICAgICAgICAgICAgKGZpZWxkKSA9PlxuICAgICAgICAgICAgICByb3dbZmllbGRdID09PSBudWxsIHx8IChBcnJheS5pc0FycmF5KHJvd1tmaWVsZF0pICYmIHJvd1tmaWVsZF0ubGVuZ3RoID09PSAwKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKChba2V5XSkgPT4ga2V5KTtcblxuICAgICAgY29uc3QgaHlkcmF0ZWQgPSBPYmplY3Qua2V5cyhyb3cpLnJlZHVjZSgociwgZmllbGQpID0+IHtcbiAgICAgICAgaWYgKCFmaWVsZC5pbmNsdWRlcyhcIl9fXCIpKSB7XG4gICAgICAgICAgLy8g7J2867CYIO2VhOuTnDog67Cw7Je0IOuCtCDqsJ3ssrTrqbQg7J6s6reAIGh5ZHJhdGVcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiBpc09iamVjdChyb3dbZmllbGRdWzBdKSkge1xuICAgICAgICAgICAgcltmaWVsZF0gPSB0aGlzLmh5ZHJhdGUocm93W2ZpZWxkXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJbZmllbGRdID0gcm93W2ZpZWxkXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDspJHssqkg7ZWE65OcIOyymOumrDogdXNlcl9fbmFtZSDihpIgdXNlcltuYW1lXVxuICAgICAgICBjb25zdCBwYXJ0cyA9IGZpZWxkLnNwbGl0KFwiX19cIik7XG4gICAgICAgIGNvbnN0IG9ialBhdGggPVxuICAgICAgICAgIHBhcnRzWzBdICtcbiAgICAgICAgICBwYXJ0c1xuICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAubWFwKChwYXJ0KSA9PiBgWyR7cGFydH1dYClcbiAgICAgICAgICAgIC5qb2luKFwiXCIpO1xuXG4gICAgICAgIHIgPSBzZXQoXG4gICAgICAgICAgcixcbiAgICAgICAgICBvYmpQYXRoLFxuICAgICAgICAgIHJvd1tmaWVsZF0gJiYgQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiBpc09iamVjdChyb3dbZmllbGRdWzBdKVxuICAgICAgICAgICAgPyB0aGlzLmh5ZHJhdGUocm93W2ZpZWxkXSlcbiAgICAgICAgICAgIDogcm93W2ZpZWxkXSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0sIHt9IGFzIFVua25vd25EQlJlY29yZCk7XG5cbiAgICAgIC8vIG51bGwgcmVsYXRpb24g7LKY66asXG4gICAgICBudWxsS2V5cy5mb3JFYWNoKChudWxsS2V5KSA9PiB7XG4gICAgICAgIGh5ZHJhdGVkW251bGxLZXldID0gbnVsbDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaHlkcmF0ZWQ7XG4gICAgfSkgYXMgVFtdO1xuICB9XG59XG5cbi8qKlxuICogRW5oYW5jZXIg7YyM652866+47YSwIOyhsOqxtOu2gCDtg4DsnoVcbiAqIFJlcXVpcmVkRW5oYW5jZXJLZXlz6rCAIOyXhuycvOuptCBlbmhhbmNlcnMg7ISg7YOd7KCBLCDsnojsnLzrqbQg7ZWE7IiYXG4gKi9cbnR5cGUgRW5oYW5jZXJQYXJhbTxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyxcbiAgVENvbXB1dGVkUmVzdWx0cyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0UXVlcmllcyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBQdXJpU3Vic2V0Rm4+LFxuPiA9IFtSZXF1aXJlZEVuaGFuY2VyS2V5czxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZz5dIGV4dGVuZHMgW25ldmVyXVxuICA/IHsgZW5oYW5jZXJzPzogRW5oYW5jZXJNYXA8VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmcsIFRTdWJzZXRRdWVyaWVzPiB9XG4gIDogeyBlbmhhbmNlcnM6IEVuaGFuY2VyTWFwPFRTdWJzZXRLZXksIFRDb21wdXRlZFJlc3VsdHMsIFRTdWJzZXRNYXBwaW5nLCBUU3Vic2V0UXVlcmllcz4gfTtcblxudHlwZSBSZXF1aXJlZEVuaGFuY2VyS2V5czxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyxcbiAgVENvbXB1dGVkUmVzdWx0cyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuPiA9IHtcbiAgW0sgaW4gVFN1YnNldEtleV06IFRDb21wdXRlZFJlc3VsdHNbS10gZXh0ZW5kcyBUU3Vic2V0TWFwcGluZ1tLXSA/IG5ldmVyIDogSztcbn1bVFN1YnNldEtleV07XG5cbmV4cG9ydCBjb25zdCBCYXNlTW9kZWwgPSBuZXcgQmFzZU1vZGVsQ2xhc3MoKTtcbiJdLCJuYW1lcyI6WyJnZXRMb2dnZXIiLCJjbG9uZURlZXAiLCJncm91cCIsImlzT2JqZWN0Iiwib21pdCIsInNldCIsIm5vcm1hbGl6ZUZpbHRlclF1ZXJ5IiwidmFsaWRhdGVTb25hbXVGaWx0ZXJzIiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsImNvbnZlcnREb21haW5Ub0NhdGVnb3J5IiwiZ2V0Sm9pblRhYmxlcyIsImdldFRhYmxlTmFtZXNGcm9tV2hlcmUiLCJjaHVuayIsIkRCIiwiUHVyaSIsIlB1cmlXcmFwcGVyIiwiVXBzZXJ0QnVpbGRlciIsIkJhc2VNb2RlbENsYXNzIiwibG9nZ2VyIiwibW9kZWxOYW1lIiwibmFtZSIsInN1YnNldFF1ZXJpZXMiLCJsb2FkZXJRdWVyaWVzIiwiZ2V0REIiLCJ3aGljaCIsImdldFB1cmkiLCJ0cngiLCJnZXRUcmFuc2FjdGlvbkNvbnRleHQiLCJnZXRUcmFuc2FjdGlvbiIsImRiIiwiZGVzdHJveSIsImdldEluc2VydGVkSWRzIiwid2RiIiwicm93cyIsInRhYmxlTmFtZSIsInVucUtleUZpZWxkcyIsImNodW5rU2l6ZSIsInVucUtleXMiLCJ3aGVyZUluRmllbGQiLCJzZWxlY3RGaWVsZCIsImxlbmd0aCIsInJhdyIsImpvaW4iLCJtYXAiLCJyb3ciLCJmaWVsZCIsInJlc3VsdElkcyIsIml0ZW1zIiwiZGJSb3dzIiwic2VsZWN0Iiwid2hlcmVJbiIsImNvbmNhdCIsImRiUm93IiwicGFyc2VJbnQiLCJTdHJpbmciLCJpZCIsImdldFN1YnNldFF1ZXJpZXMiLCJzdWJzZXQiLCJFcnJvciIsInB1cmlXcmFwcGVyIiwicWIiLCJvblN1YnNldCIsIl9zdWJzZXQiLCJjcmVhdGVFbmhhbmNlcnMiLCJlbmhhbmNlcnMiLCJleGVjdXRlU3Vic2V0UXVlcnkiLCJwYXJhbXMiLCJxdWVyeVBhcmFtcyIsImRlYnVnIiwib3B0aW1pemVDb3VudFF1ZXJ5Iiwic29uYW11RmlsdGVyIiwibm9ybWFsaXplZEZpbHRlciIsImFwcGx5U29uYW11RmlsdGVycyIsIm51bSIsInBhZ2UiLCJ0b3RhbCIsImV4ZWN1dGVDb3VudFF1ZXJ5IiwicXVlcnlNb2RlIiwiY29tcHV0ZWRSb3dzIiwiZXhlY3V0ZUxpc3RRdWVyeSIsImVuaGFuY2VyIiwiZW5oYW5jZWRSb3dzIiwiUHJvbWlzZSIsImFsbCIsImVudGl0eSIsImdldCIsImludGVybmFsRmllbGRzIiwic3Vic2V0c0ludGVybmFsIiwib21pdEludGVybmFsRmllbGRzIiwiZmllbGRzIiwicmVzdWx0IiwiZGVsZXRlRmllbGQiLCJzcGxpdCIsImZpbHRlcnMiLCJwdXJpIiwiY29uZGl0aW9uIiwiT2JqZWN0IiwiZW50cmllcyIsInVuZGVmaW5lZCIsImZ1bGxGaWVsZCIsImdldEZ1bGxGaWVsZE5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJ3aGVyZSIsIm9wZXJhdG9yIiwidmFsdWUiLCJhcHBseU9wZXJhdG9yIiwid2hlcmVOb3RJbiIsIm1pbiIsIm1heCIsImNvbnNvbGUiLCJ3YXJuIiwib2JqIiwicGFydHMiLCJmb3JFYWNoIiwiaXRlbSIsImZpcnN0IiwicmVzdCIsIm5leHQiLCJjb3VudFB1cmkiLCJjbG9uZSIsImNsZWFyIiwiZGVmYXVsdCIsIlNxbFBhcnNlciIsInBhcnNlciIsIlBhcnNlciIsInBhcnNlZFF1ZXJ5IiwiYXN0aWZ5IiwidG9RdWVyeSIsImRhdGFiYXNlIiwiY29uZmlnIiwibGVmdEpvaW5UYWJsZXMiLCJ3aGVyZVRhYmxlcyIsInRhYmxlc1RvUmVtb3ZlIiwiZmlsdGVyIiwiaiIsImluY2x1ZGVzIiwidGFibGUiLCJjbGVhckpvaW4iLCJjb3VudFJlc3VsdCIsInJhd051bWJlciIsImxpbWl0ZWRRYiIsImxpbWl0Iiwib2Zmc2V0IiwidW5sb2FkZWRSb3dzIiwibG9hZGVycyIsInByb2Nlc3NMb2FkZXJzIiwiaHlkcmF0ZSIsInJlc29sdmVMb2FkZXIiLCJhcyIsInJlZklkIiwicmVzb2x2ZUxvYWRlclFiRm4iLCJuZXN0ZWRMb2FkZXJzIiwicmVzb2x2ZUxvYWRlclFiIiwibG9hZGVkUm93cyIsInN1YlJvd0dyb3VwcyIsInIiLCJuZXN0ZWRLZXlzIiwia2V5cyIsImtleSIsImdyb3VwcyIsImdyb3VwQnkiLCJudWxsS2V5cyIsImdyb3VwS2V5IiwiaWRGaWVsZCIsImV2ZXJ5IiwiaHlkcmF0ZWQiLCJyZWR1Y2UiLCJvYmpQYXRoIiwic2xpY2UiLCJwYXJ0IiwibnVsbEtleSIsIkJhc2VNb2RlbCJdLCJtYXBwaW5ncyI6IkFBQUEsa0dBQWtHLEdBQ2xHLFNBQVNBLFNBQVMsUUFBcUIsbUJBQW1CO0FBRTFELFNBQVNDLFNBQVMsRUFBRUMsS0FBSyxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRUMsR0FBRyxRQUFRLFVBQVU7QUFDaEUsU0FBMEJDLG9CQUFvQixFQUFFQyxxQkFBcUIsUUFBUSxjQUFLO0FBQ2xGLFNBQVNDLE1BQU0sUUFBUSxrQkFBUztBQUNoQyxTQUFTQyxhQUFhLFFBQVEsOEJBQTJCO0FBRXpELFNBQVNDLHVCQUF1QixRQUFRLHdCQUFxQjtBQUU3RCxTQUFTQyxhQUFhLEVBQUVDLHNCQUFzQixRQUFRLHlCQUFzQjtBQUM1RSxTQUFTQyxLQUFLLFFBQVEsb0JBQWlCO0FBR3ZDLFNBQVNDLEVBQUUsUUFBUSxVQUFPO0FBQzFCLFNBQVNDLElBQUksUUFBUSxZQUFTO0FBRzlCLFNBQVNDLFdBQVcsUUFBUSxvQkFBaUI7QUFDN0MsU0FBU0MsYUFBYSxRQUFRLHNCQUFtQjtBQUlqRDs7Ozs7OztDQU9DLEdBQ0QsT0FBTyxNQUFNQzs7OztJQU1RQyxPQUFlO0lBRWxDLFlBQ0UsQUFBZ0JDLFlBQW9CLElBQUksQ0FBQyxXQUFXLENBQUNDLElBQUksRUFDekQsQUFBVUMsYUFBOEIsRUFDeEMsQUFBVUMsYUFBOEIsQ0FDeEM7YUFIZ0JILFlBQUFBO2FBQ05FLGdCQUFBQTthQUNBQyxnQkFBQUE7UUFFVixJQUFJLENBQUNK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
393
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9iYXNlLW1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJp7J2YIO2DgOyeheydgCDqsJzrs4Qg66qo64247JeQ7IScIO2ZleygleuQmOuvgOuhnCBCYXNlTW9kZWzsl5DshJzripQgYW5566W8IO2XiOyaqe2VqCAqL1xuaW1wb3J0IHsgZ2V0TG9nZ2VyLCB0eXBlIExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBncm91cCwgaXNPYmplY3QsIG9taXQsIHNldCB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyB0eXBlIExpc3RSZXN1bHQsIG5vcm1hbGl6ZUZpbHRlclF1ZXJ5LCB2YWxpZGF0ZVNvbmFtdUZpbHRlcnMgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJRdWVyeSB9IGZyb20gXCIuLi9maWx0ZXIvdHlwZXNcIjtcbmltcG9ydCB7IGNvbnZlcnREb21haW5Ub0NhdGVnb3J5IH0gZnJvbSBcIi4uL2xvZ2dlci9jYXRlZ29yeVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZVNjaGVtYUV4dGVuZCwgU29uYW11UXVlcnlNb2RlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRKb2luVGFibGVzLCBnZXRUYWJsZU5hbWVzRnJvbVdoZXJlIH0gZnJvbSBcIi4uL3V0aWxzL3NxbC1wYXJzZXJcIjtcbmltcG9ydCB7IGNodW5rIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VyTWFwLCBSZXNvbHZlU3Vic2V0SW50ZXJzZWN0aW9uIH0gZnJvbSBcIi4vYmFzZS1tb2RlbC50eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBEQlByZXNldCB9IGZyb20gXCIuL2RiXCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuL2RiXCI7XG5pbXBvcnQgeyBQdXJpIH0gZnJvbSBcIi4vcHVyaVwiO1xuaW1wb3J0IHR5cGUgeyBVbmlvbkV4dHJhY3RlZFRUYWJsZXMgfSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEluZmVyQWxsU3Vic2V0cywgUHVyaUxvYWRlclF1ZXJpZXMsIFB1cmlTdWJzZXRGbiB9IGZyb20gXCIuL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5pbXBvcnQgeyBQdXJpV3JhcHBlciB9IGZyb20gXCIuL3B1cmktd3JhcHBlclwiO1xuaW1wb3J0IHsgVXBzZXJ0QnVpbGRlciB9IGZyb20gXCIuL3Vwc2VydC1idWlsZGVyXCI7XG5cbnR5cGUgVW5rbm93bkRCUmVjb3JkID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICog66qo65OgIE1vZGVsIO2BtOuemOyKpOydmCDquLDrs7gg7YG0656Y7IqkXG4gKlxuICogQHRlbXBsYXRlIFRTdWJzZXRLZXkgLSDshJzruIzshYsg7YKkIOycoOuLiOyYqCAo7JiIOiBcIkFcIiB8IFwiUFwiIHwgXCJTU1wiKVxuICogQHRlbXBsYXRlIFRTdWJzZXRNYXBwaW5nIC0g7ISc67iM7IWL67OEIOy1nOyihSDqsrDqs7wg7YOA7J6FIOunpO2VkVxuICogQHRlbXBsYXRlIFRTdWJzZXRRdWVyaWVzIC0g7ISc67iM7IWLIOy/vOumrCDtlajsiJgg6rCd7LK0XG4gKiBAdGVtcGxhdGUgVExvYWRlclF1ZXJpZXMgLSDshJzruIzshYvrs4Qg66Gc642UIOy/vOumrCDrsLDsl7Qg6rCd7LK0XG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlTW9kZWxDbGFzczxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyA9IG5ldmVyLFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBuZXZlcixcbiAgVFN1YnNldFF1ZXJpZXMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgUHVyaVN1YnNldEZuPiA9IG5ldmVyLFxuICBUTG9hZGVyUXVlcmllcyBleHRlbmRzIFB1cmlMb2FkZXJRdWVyaWVzPFRTdWJzZXRLZXk+ID0gbmV2ZXIsXG4+IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbE5hbWU6IHN0cmluZyA9IHRoaXMuY29uc3RydWN0b3IubmFtZSxcbiAgICBwcm90ZWN0ZWQgc3Vic2V0UXVlcmllcz86IFRTdWJzZXRRdWVyaWVzLFxuICAgIHByb3RlY3RlZCBsb2FkZXJRdWVyaWVzPzogVExvYWRlclF1ZXJpZXMsXG4gICkge1xuICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKTtcbiAgfVxuXG4gIGdldERCKHdoaWNoOiBEQlByZXNldCk6IEtuZXgge1xuICAgIHJldHVybiBEQi5nZXREQih3aGljaCk7XG4gIH1cblxuICBnZXRQdXJpKHdoaWNoOiBEQlByZXNldCk6IFB1cmlXcmFwcGVyIHtcbiAgICAvLyDtirjrnpzsnq3shZgg7Luo7YWN7Iqk7Yq47JeQ7IScIO2KuOuenOyereyFmCDtmo3rk51cbiAgICBjb25zdCB0cnggPSBEQi5nZXRUcmFuc2FjdGlvbkNvbnRleHQoKS5nZXRUcmFuc2FjdGlvbih3aGljaCk7XG4gICAgaWYgKHRyeCkge1xuICAgICAgcmV0dXJuIHRyeDtcbiAgICB9XG5cbiAgICAvLyDtirjrnpzsnq3shZjsnbQg7JeG7Jy866m0IOyDiOuhnOyatCBQdXJpV3JhcHBlciDrsJjtmZhcbiAgICBjb25zdCBkYiA9IHRoaXMuZ2V0REIod2hpY2gpO1xuICAgIHJldHVybiBuZXcgUHVyaVdyYXBwZXIoZGIsIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpIHtcbiAgICByZXR1cm4gREIuZGVzdHJveSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0SW5zZXJ0ZWRJZHMoXG4gICAgd2RiOiBLbmV4LFxuICAgIHJvd3M6IFVua25vd25EQlJlY29yZFtdLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIHVucUtleUZpZWxkczogc3RyaW5nW10sXG4gICAgY2h1bmtTaXplOiBudW1iZXIgPSA1MDAsXG4gICkge1xuICAgIGlmICghd2RiKSB7XG4gICAgICB3ZGIgPSB0aGlzLmdldERCKFwid1wiKTtcbiAgICB9XG5cbiAgICBsZXQgdW5xS2V5czogc3RyaW5nW107XG4gICAgbGV0IHdoZXJlSW5GaWVsZDogc3RyaW5nIHwgS25leC5SYXc7XG4gICAgbGV0IHNlbGVjdEZpZWxkOiBzdHJpbmc7XG5cbiAgICBpZiAodW5xS2V5RmllbGRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHdoZXJlSW5GaWVsZCA9IHdkYi5yYXcoYENPTkNBVF9XUygnXycsICcke3VucUtleUZpZWxkcy5qb2luKFwiLFwiKX0nKWApO1xuICAgICAgc2VsZWN0RmllbGQgPSBgJHt3aGVyZUluRmllbGR9IGFzIHRtcFVpZGA7XG4gICAgICB1bnFLZXlzID0gcm93cy5tYXAoKHJvdykgPT4gdW5xS2V5RmllbGRzLm1hcCgoZmllbGQpID0+IHJvd1tmaWVsZF0pLmpvaW4oXCJfXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hlcmVJbkZpZWxkID0gdW5xS2V5RmllbGRzWzBdO1xuICAgICAgc2VsZWN0RmllbGQgPSB1bnFLZXlGaWVsZHNbMF07XG4gICAgICB1bnFLZXlzID0gcm93cy5tYXAoKHJvdykgPT4gcm93W3VucUtleUZpZWxkc1swXV0gYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0SWRzOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgaXRlbXMgb2YgY2h1bmsodW5xS2V5cywgY2h1bmtTaXplKSkge1xuICAgICAgY29uc3QgZGJSb3dzID0gYXdhaXQgd2RiKHRhYmxlTmFtZSlcbiAgICAgICAgLnNlbGVjdChcImlkXCIsIHdkYi5yYXcoc2VsZWN0RmllbGQpKVxuICAgICAgICAud2hlcmVJbih3aGVyZUluRmllbGQgYXMgc3RyaW5nLCBpdGVtcyk7XG4gICAgICByZXN1bHRJZHMgPSByZXN1bHRJZHMuY29uY2F0KFxuICAgICAgICBkYlJvd3MubWFwKChkYlJvdzogVW5rbm93bkRCUmVjb3JkKSA9PiBwYXJzZUludChTdHJpbmcoZGJSb3cuaWQpKSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRJZHM7XG4gIH1cblxuICAvKipcbiAgICog7Yq57KCVIOyEnOu4jOyFi+yXkCDrjIDtlZwg7L+866asIOu5jOuNlCDtmo3rk51cbiAgICpcbiAgICogQHJldHVybnMgcWIgLSDsv7zrpqwg67mM642UICjsobDqsbQg7LaU6rCA7JqpKVxuICAgKiBAcmV0dXJucyBvblN1YnNldCAtIO2KueyglSDshJzruIzshYsg7KCE7JqpIO2DgOyeheydtCDtlYTsmpTtlaAg65WMIOyCrOyaqVxuICAgKi9cbiAgZ2V0U3Vic2V0UXVlcmllczxUIGV4dGVuZHMgVFN1YnNldEtleT4oc3Vic2V0OiBUKSB7XG4gICAgaWYgKCF0aGlzLnN1YnNldFF1ZXJpZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInN1YnNldFF1ZXJpZXMgaXMgbm90IGRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcHVyaVdyYXBwZXIgPSBuZXcgUHVyaVdyYXBwZXIodGhpcy5nZXREQihcInJcIiksIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuICAgIGNvbnN0IHFiID0gdGhpcy5zdWJzZXRRdWVyaWVzW3N1YnNldF0/LihwdXJpV3JhcHBlcik7XG5cbiAgICAvLyBOb25BbGxvd2VkQXNTaW5nbGVUYWJsZTog64uo7J28IO2FjOydtOu4lCDsu6zrn7wg7KCR6re8IOuwqeyngOyaqSDrp4jsu6RcbiAgICB0eXBlIFFCVGFibGVzID0gVW5pb25FeHRyYWN0ZWRUVGFibGVzPFRTdWJzZXRLZXksIFRTdWJzZXRRdWVyaWVzPiAmIHtcbiAgICAgIE5vbkFsbG93ZWRBc1NpbmdsZVRhYmxlOiB7IF9fZnVsbHRleHRfXzogdHJ1ZSB9O1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgcWI6IHFiIGFzIHVua25vd24gYXMgUHVyaTxEYXRhYmFzZVNjaGVtYUV4dGVuZCwgUUJUYWJsZXMsIHt9PixcbiAgICAgIG9uU3Vic2V0OiAoKF9zdWJzZXQ6IFRTdWJzZXRLZXkgfCByZWFkb25seSBUU3Vic2V0S2V5W10pID0+IHFiKSBhcyB7XG4gICAgICAgIC8vIOuLqOydvCDtgqRcbiAgICAgICAgPFMgZXh0ZW5kcyBUU3Vic2V0S2V5PihzdWJzZXQ6IFMpOiBSZXR1cm5UeXBlPFRTdWJzZXRRdWVyaWVzW1NdPjtcbiAgICAgICAgLy8g7YKkIOuwsOyXtCAtPiDqtZDsp5Htlakg67CY7ZmYXG4gICAgICAgIDxBcnIgZXh0ZW5kcyByZWFkb25seSBUU3Vic2V0S2V5W10+KFxuICAgICAgICAgIHN1YnNldHM6IFsuLi5BcnJdLFxuICAgICAgICApOiBSZXNvbHZlU3Vic2V0SW50ZXJzZWN0aW9uPEFyciwgVFN1YnNldFF1ZXJpZXM+O1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuaGFuY2VyIOqwneyytCDsg53shLEg7Zes7Y28XG4gICAqIO2DgOyehSDqsoDspp0g67CPIOy2lOuhoOydhCDrj4TsmYDspIxcbiAgICovXG4gIGNyZWF0ZUVuaGFuY2VyczxUIGV4dGVuZHMgVFN1YnNldEtleT4oXG4gICAgZW5oYW5jZXJzOiBFbmhhbmNlck1hcDxcbiAgICAgIFQsXG4gICAgICBJbmZlckFsbFN1YnNldHM8VFN1YnNldFF1ZXJpZXMsIFRMb2FkZXJRdWVyaWVzPixcbiAgICAgIFRTdWJzZXRNYXBwaW5nLFxuICAgICAgVFN1YnNldFF1ZXJpZXNcbiAgICA+LFxuICApIHtcbiAgICByZXR1cm4gZW5oYW5jZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIOyEnOu4jOyFiyDsv7zrpqwg7Iuk7ZaJXG4gICAqXG4gICAqIDEuIFNvbmFtdSDtlYTthLAg7KCB7JqpICjtg4DsnoUg67OA7ZmYIO2PrO2VqClcbiAgICogMi4g7L+866asIOyLpO2WiSAocGFnaW5hdGlvbiDsoIHsmqkpXG4gICAqIDMuIOuhnOuNlCDsi6TtlokgKDE6TiwgTjpNIOq0gOqzhCDrjbDsnbTthLAg66Gc65SpKVxuICAgKiA0LiBIeWRyYXRlIChmbGF0IOKGkiDspJHssqkg6rCd7LK0KVxuICAgKiA1LiBFbmhhbmNlciDsoIHsmqkgKHZpcnR1YWwg7ZWE65OcIOqzhOyCsClcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVTdWJzZXRRdWVyeTxcbiAgICBUIGV4dGVuZHMgVFN1YnNldEtleSxcbiAgICBUQ29tcHV0ZWRSZXN1bHRzIGV4dGVuZHMgSW5mZXJBbGxTdWJzZXRzPFRTdWJzZXRRdWVyaWVzLCBUTG9hZGVyUXVlcmllcz4sXG4gICAgTFAgZXh0ZW5kcyB7XG4gICAgICBudW0/OiBudW1iZXI7XG4gICAgICBwYWdlPzogbnVtYmVyO1xuICAgICAgcXVlcnlNb2RlPzogU29uYW11UXVlcnlNb2RlO1xuICAgICAgc29uYW11RmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfSxcbiAgPihcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN1YnNldDogVDtcbiAgICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+O1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIG51bTogbnVtYmVyO1xuICAgICAgICBwYWdlOiBudW1iZXI7XG4gICAgICAgIHF1ZXJ5TW9kZT86IFNvbmFtdVF1ZXJ5TW9kZTtcbiAgICAgICAgc29uYW11RmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICB9O1xuICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgICAgb3B0aW1pemVDb3VudFF1ZXJ5PzogYm9vbGVhbjtcbiAgICB9ICYgRW5oYW5jZXJQYXJhbTxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZywgVFN1YnNldFF1ZXJpZXM+LFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFRTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHsgc3Vic2V0LCBxYiwgcGFyYW1zOiBxdWVyeVBhcmFtcywgZGVidWcgPSBmYWxzZSwgb3B0aW1pemVDb3VudFF1ZXJ5ID0gZmFsc2UgfSA9IHBhcmFtcztcblxuICAgIGlmICghdGhpcy5sb2FkZXJRdWVyaWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsb2FkZXJRdWVyaWVzIGlzIG5vdCBkZWZpbmVkXCIpO1xuICAgIH1cblxuICAgIC8vIFNvbmFtdSBGaWx0ZXIg7KCB7JqpXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLnNvbmFtdUZpbHRlcikge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbHRlciA9IG5vcm1hbGl6ZUZpbHRlclF1ZXJ5KHF1ZXJ5UGFyYW1zLnNvbmFtdUZpbHRlcik7XG4gICAgICB0aGlzLmFwcGx5U29uYW11RmlsdGVycyhxYiwgbm9ybWFsaXplZEZpbHRlcik7XG4gICAgfVxuXG4gICAgY29uc3QgeyBudW0sIHBhZ2UgfSA9IHF1ZXJ5UGFyYW1zO1xuXG4gICAgLy8gQ09VTlQg7L+866asIOyLpO2WiSAocXVlcnlNb2RlOiBsaXN07J28IOuVjOuKlCAwIOumrO2EtClcbiAgICBjb25zdCB0b3RhbCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUNvdW50UXVlcnkocWIsIHF1ZXJ5UGFyYW1zLCBkZWJ1Zywgb3B0aW1pemVDb3VudFF1ZXJ5KTtcblxuICAgIGlmIChxdWVyeVBhcmFtcz8ucXVlcnlNb2RlID09PSBcImNvdW50XCIpIHtcbiAgICAgIHJldHVybiB7IHRvdGFsIH0gYXMgTGlzdFJlc3VsdDxMUCwgVFN1YnNldE1hcHBpbmdbVF0+O1xuICAgIH1cblxuICAgIC8vIExJU1Qg7L+866asIOyLpO2WiVxuICAgIGNvbnN0IGNvbXB1dGVkUm93cyA9IGF3YWl0IHRoaXMuZXhlY3V0ZUxpc3RRdWVyeShzdWJzZXQsIHFiLCBxdWVyeVBhcmFtcywgbnVtLCBwYWdlLCBkZWJ1Zyk7XG5cbiAgICAvLyBFbmhhbmNlciDsoIHsmqlcbiAgICBjb25zdCBlbmhhbmNlciA9IChwYXJhbXMgYXMgYW55KS5lbmhhbmNlcnM/LltzdWJzZXRdO1xuICAgIGNvbnN0IGVuaGFuY2VkUm93cyA9IChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGNvbXB1dGVkUm93cy5tYXAoKHJvdykgPT4gZW5oYW5jZXI/Lihyb3cpID8/IHJvdyksXG4gICAgKSkgYXMgVFN1YnNldE1hcHBpbmdbVF1bXTtcblxuICAgIC8vIEludGVybmFsIO2VhOuTnCDsoJzqsbBcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldCh0aGlzLm1vZGVsTmFtZSk7XG4gICAgY29uc3QgaW50ZXJuYWxGaWVsZHMgPSBlbnRpdHkuc3Vic2V0c0ludGVybmFsW3N1YnNldF0gPz8gW107XG4gICAgY29uc3Qgcm93cyA9XG4gICAgICBpbnRlcm5hbEZpZWxkcy5sZW5ndGggPiAwXG4gICAgICAgID8gZW5oYW5jZWRSb3dzLm1hcCgocm93KSA9PiB0aGlzLm9taXRJbnRlcm5hbEZpZWxkcyhyb3csIGludGVybmFsRmllbGRzKSlcbiAgICAgICAgOiBlbmhhbmNlZFJvd3M7XG5cbiAgICBpZiAocXVlcnlQYXJhbXMucXVlcnlNb2RlID09PSBcImxpc3RcIikge1xuICAgICAgLy8g66as7Iqk7Yq466eMIOumrO2EtFxuICAgICAgcmV0dXJuIHsgcm93cyB9IGFzIExpc3RSZXN1bHQ8TFAsIFRTdWJzZXRNYXBwaW5nW1RdPjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g65GY64ukIOumrO2EtFxuICAgICAgcmV0dXJuIHsgcm93cywgdG90YWwgfSBhcyBMaXN0UmVzdWx0PExQLCBUU3Vic2V0TWFwcGluZ1tUXT47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOqwneyytOyXkOyEnCBpbnRlcm5hbCDtlYTrk5wg7KCc6rGwXG4gICAqIOykkeyyqSDtlYTrk5wo7JiIOiBcInVzZXIuZW1haWxcIikg67CPIOuwsOyXtCjsmIg6IFwiZW1wbG95ZWVzLnNhbGFyeVwiKeuPhCDsspjrpqxcbiAgICovXG4gIG9taXRJbnRlcm5hbEZpZWxkczxUIGV4dGVuZHMgb2JqZWN0Pihyb3c6IFQsIGZpZWxkczogc3RyaW5nW10pOiBUIHtcbiAgICBjb25zdCByZXN1bHQgPSBjbG9uZURlZXAocm93KTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgdGhpcy5kZWxldGVGaWVsZChyZXN1bHQsIGZpZWxkLnNwbGl0KFwiLlwiKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyUXVlcnnrpbwgUHVyaSBRdWVyeUJ1aWxkZXLsl5Ag7KCB7JqpXG4gICAqXG4gICAqIEBwYXJhbSBxYiBQdXJpIFF1ZXJ5QnVpbGRlciDsnbjsiqTthLTsiqRcbiAgICogQHBhcmFtIGZpbHRlcnMgRmlsdGVyUXVlcnkg6rCd7LK0XG4gICAqL1xuICBwcm90ZWN0ZWQgYXBwbHlTb25hbXVGaWx0ZXJzPFRFbnRpdHkgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgcWI6IFB1cmk8YW55LCBhbnksIGFueT4sXG4gICAgZmlsdGVycz86IEZpbHRlclF1ZXJ5PFRFbnRpdHk+LFxuICApOiB2b2lkIHtcbiAgICBpZiAoIWZpbHRlcnMpIHJldHVybjtcblxuICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHRoaXMubW9kZWxOYW1lKTtcblxuICAgIC8vIDEuIO2VhO2EsCDqsoDspp0gKEVudGl0eSDquLDrsJgpXG4gICAgdmFsaWRhdGVTb25hbXVGaWx0ZXJzKGZpbHRlcnMsIGVudGl0eSk7XG5cbiAgICAvLyAyLiDqsoDspp3rkJwg7ZWE7YSwIOyggeyaqVxuICAgIGNvbnN0IHB1cmkgPSBxYiBhcyBhbnk7XG5cbiAgICBmb3IgKGNvbnN0IFtmaWVsZCwgY29uZGl0aW9uXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXJzKSkge1xuICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IGNvbmRpdGlvbiA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgIC8vIO2FjOydtOu4lOuqhS7tlYTrk5zrqoUg7ZiV7Iud7Jy866GcIOuzgO2ZmFxuICAgICAgY29uc3QgZnVsbEZpZWxkID0gZW50aXR5LmdldEZ1bGxGaWVsZE5hbWUoZmllbGQpO1xuXG4gICAgICAvLyDsp4HsoJEg6rCSIChlceyZgCDrj5nsnbwpXG4gICAgICBpZiAodHlwZW9mIGNvbmRpdGlvbiAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGNvbmRpdGlvbikpIHtcbiAgICAgICAgcHVyaS53aGVyZShmdWxsRmllbGQsIGNvbmRpdGlvbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyDsl7DsgrDsnpAg6rCd7LK0XG4gICAgICBmb3IgKGNvbnN0IFtvcGVyYXRvciwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmRpdGlvbikpIHtcbiAgICAgICAgdGhpcy5hcHBseU9wZXJhdG9yKHFiLCBmdWxsRmllbGQsIG9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOuLqOydvCDsl7DsgrDsnpDrpbwgUXVlcnlCdWlsZGVy7JeQIOyggeyaqVxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseU9wZXJhdG9yKFxuICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+LFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLFxuICAgIHZhbHVlOiB1bmtub3duLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwdXJpID0gcWIgYXMgYW55O1xuXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgY2FzZSBcImVxXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJuZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIiE9XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJndFwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj5cIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImd0ZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj49XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJsdFwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIjxcIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImx0ZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIjw9XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpblwiOlxuICAgICAgICBwdXJpLndoZXJlSW4oZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJub3RJblwiOlxuICAgICAgICBwdXJpLndoZXJlTm90SW4oZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJjb250YWluc1wiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcImxpa2VcIiwgYCUke3ZhbHVlfSVgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJzdGFydHNXaXRoXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwibGlrZVwiLCBgJHt2YWx1ZX0lYCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiZW5kc1dpdGhcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCJsaWtlXCIsIGAlJHt2YWx1ZX1gKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpc051bGxcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgbnVsbCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiaXNOb3ROdWxsXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiIT1cIiwgbnVsbCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiYmVmb3JlXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiPFwiLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiYWZ0ZXJcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCI+XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJiZXR3ZWVuXCI6IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB2YWx1ZTtcbiAgICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj49XCIsIG1pbikud2hlcmUoZmllbGQsIFwiPD1cIiwgbWF4KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGBVbnN1cHBvcnRlZCBvcGVyYXRvcjogJHtvcGVyYXRvcn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog7KSR7LKpIO2VhOuTnCDsgq3soJwgKOuwsOyXtCDrgrQg6rCd7LK064+EIOyymOumrClcbiAgICovXG4gIGRlbGV0ZUZpZWxkKG9iajogYW55LCBwYXJ0czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBvYmouZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtICYmIHR5cGVvZiBpdGVtID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBkZWxldGUgaXRlbVtwYXJ0c1swXV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBvYmpbcGFydHNbMF1dO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBwYXJ0cztcbiAgICBjb25zdCBuZXh0ID0gb2JqW2ZpcnN0XTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG5leHQpKSB7XG4gICAgICBuZXh0Lm1hcCgoaXRlbSkgPT4gdGhpcy5kZWxldGVGaWVsZChpdGVtLCByZXN0KSk7XG4gICAgfSBlbHNlIGlmIChuZXh0ICYmIHR5cGVvZiBuZXh0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmRlbGV0ZUZpZWxkKG5leHQsIHJlc3QpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDT1VOVCDsv7zrpqwg7Iuk7ZaJICjrgrTrtoAg66mU7ISc65OcKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlQ291bnRRdWVyeShcbiAgICBxYjogUHVyaTxhbnksIGFueSwgYW55PixcbiAgICBwYXJhbXM6IHsgcXVlcnlNb2RlPzogXCJsaXN0XCIgfCBcImNvdW50XCIgfCBcImJvdGhcIiB9LFxuICAgIGRlYnVnOiBib29sZWFuLFxuICAgIG9wdGltaXplQ291bnRRdWVyeTogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAocGFyYW1zLnF1ZXJ5TW9kZSA9PT0gXCJsaXN0XCIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGNvdW50UHVyaSA9IHFiLmNsb25lKCkuY2xlYXIoXCJvcmRlclwiKS5jbGVhcihcImxpbWl0XCIpLmNsZWFyKFwib2Zmc2V0XCIpO1xuXG4gICAgaWYgKG9wdGltaXplQ291bnRRdWVyeSkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0OiBTcWxQYXJzZXIgfSA9IGF3YWl0IGltcG9ydChcIm5vZGUtc3FsLXBhcnNlclwiKTtcbiAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBTcWxQYXJzZXIuUGFyc2VyKCk7XG4gICAgICBjb25zdCBwYXJzZWRRdWVyeSA9IHBhcnNlci5hc3RpZnkoY291bnRQdXJpLnRvUXVlcnkoKSwge1xuICAgICAgICBkYXRhYmFzZTogU29uYW11LmNvbmZpZy5kYXRhYmFzZT8uZGF0YWJhc2UsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbGVmdEpvaW5UYWJsZXMgPSBnZXRKb2luVGFibGVzKHBhcnNlZFF1ZXJ5LCBbXCJMRUZUIEpPSU5cIl0pO1xuICAgICAgY29uc3Qgd2hlcmVUYWJsZXMgPSBnZXRUYWJsZU5hbWVzRnJvbVdoZXJlKHBhcnNlZFF1ZXJ5KTtcblxuICAgICAgY29uc3QgdGFibGVzVG9SZW1vdmUgPSBsZWZ0Sm9pblRhYmxlcy5maWx0ZXIoKGopID0+ICF3aGVyZVRhYmxlcy5pbmNsdWRlcyhqKSk7XG4gICAgICB0YWJsZXNUb1JlbW92ZS5mb3JFYWNoKCh0YWJsZSkgPT4ge1xuICAgICAgICBjb3VudFB1cmkuY2xlYXJKb2luKHRhYmxlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENPVU5UKCop66GcIOyghOyytCDroIjsvZTrk5wg7IiY66W8IOqzhOyCsFxuICAgIC8vIFRPRE86IHFi7J2YIERJU1RJTkNU6rCAIOyeiOuKlCDqsr3smrAg7LKY66as7ZW07JW8IO2VqFxuICAgIGNvbnN0IGNvdW50UmVzdWx0OiB7IHRvdGFsPzogbnVtYmVyIH0gPSBhd2FpdCBjb3VudFB1cmlcbiAgICAgIC5jbGVhcihcInNlbGVjdFwiKVxuICAgICAgLnNlbGVjdCh7IHRvdGFsOiBQdXJpLnJhd051bWJlcihgQ09VTlQoKik6OmludGVnZXJgKSB9KVxuICAgICAgLmZpcnN0KCk7XG5cbiAgICBpZiAoZGVidWcpIHtcbiAgICAgIGNvdW50UHVyaS5kZWJ1ZygpO1xuICAgIH1cblxuICAgIHJldHVybiBjb3VudFJlc3VsdD8udG90YWwgPz8gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMSVNUIOy/vOumrCDsi6TtlokgKOuCtOu2gCDrqZTshJzrk5wpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVMaXN0UXVlcnk8VCBleHRlbmRzIFRTdWJzZXRLZXk+KFxuICAgIHN1YnNldDogVCxcbiAgICBxYjogUHVyaTxhbnksIGFueSwgYW55PixcbiAgICBwYXJhbXM6IHsgcXVlcnlNb2RlPzogXCJsaXN0XCIgfCBcImNvdW50XCIgfCBcImJvdGhcIiB9LFxuICAgIG51bTogbnVtYmVyLFxuICAgIHBhZ2U6IG51bWJlcixcbiAgICBkZWJ1ZzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGlmIChwYXJhbXMucXVlcnlNb2RlID09PSBcImNvdW50XCIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW1pdGVkUWIgPSAoKCkgPT4ge1xuICAgICAgaWYgKG51bSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcWI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcWIubGltaXQobnVtKS5vZmZzZXQobnVtICogKHBhZ2UgLSAxKSk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBsZXQgdW5sb2FkZWRSb3dzID0gKGF3YWl0IGxpbWl0ZWRRYikgYXMgYW55W107XG5cbiAgICBpZiAoZGVidWcpIHtcbiAgICAgIHFiLmRlYnVnKCk7XG4gICAgfVxuXG4gICAgLy8g66Gc642UIOyymOumrFxuICAgIGNvbnN0IGxvYWRlcnMgPSAodGhpcy5sb2FkZXJRdWVyaWVzIGFzIGFueSlbc3Vic2V0XTtcbiAgICBpZiAobG9hZGVycyAmJiBBcnJheS5pc0FycmF5KGxvYWRlcnMpKSB7XG4gICAgICB1bmxvYWRlZFJvd3MgPSBhd2FpdCB0aGlzLnByb2Nlc3NMb2FkZXJzKHVubG9hZGVkUm93cywgbG9hZGVycywgZGVidWcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh5ZHJhdGUodW5sb2FkZWRSb3dzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDsnqzqt4DsoIEg66Gc642UIOyymOumrFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzTG9hZGVycyhyb3dzOiBhbnlbXSwgbG9hZGVyczogYW55W10sIGRlYnVnOiBib29sZWFuKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGZvciAoY29uc3QgcmVzb2x2ZUxvYWRlciBvZiBsb2FkZXJzKSB7XG4gICAgICBjb25zdCB7IGFzLCByZWZJZCwgcWI6IHJlc29sdmVMb2FkZXJRYkZuLCBsb2FkZXJzOiBuZXN0ZWRMb2FkZXJzIH0gPSByZXNvbHZlTG9hZGVyO1xuXG4gICAgICBjb25zdCByZXNvbHZlTG9hZGVyUWIgPSByZXNvbHZlTG9hZGVyUWJGbihcbiAgICAgICAgbmV3IFB1cmlXcmFwcGVyKHRoaXMuZ2V0REIoXCJyXCIpLCBuZXcgVXBzZXJ0QnVpbGRlcigpKSxcbiAgICAgICAgcm93cy5tYXAoKHJvdykgPT4gcm93W3JlZklkXSksXG4gICAgICApO1xuXG4gICAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgcmVzb2x2ZUxvYWRlclFiLmRlYnVnKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBsb2FkZWRSb3dzID0gKGF3YWl0IHJlc29sdmVMb2FkZXJRYikgYXMgYW55W107XG5cbiAgICAgIC8vIOykkeyyqSBsb2FkZXJz6rCAIOyeiOycvOuptCDsnqzqt4Ag7LKY66asXG4gICAgICBpZiAobmVzdGVkTG9hZGVycyAmJiBuZXN0ZWRMb2FkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbG9hZGVkUm93cyA9IGF3YWl0IHRoaXMucHJvY2Vzc0xvYWRlcnMobG9hZGVkUm93cywgbmVzdGVkTG9hZGVycywgZGVidWcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdWJSb3dHcm91cHMgPSBncm91cChsb2FkZWRSb3dzLCAocm93KSA9PiByb3cucmVmSWQpO1xuXG4gICAgICByb3dzID0gcm93cy5tYXAoKHJvdykgPT4ge1xuICAgICAgICByb3dbYXNdID0gKHN1YlJvd0dyb3Vwc1tyb3dbcmVmSWRdXSA/PyBbXSkubWFwKChyKSA9PiBvbWl0KHIsIFtcInJlZklkXCJdKSk7XG4gICAgICAgIHJldHVybiByb3c7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93cztcbiAgfVxuXG4gIC8qKlxuICAgKiBGbGF0IOugiOy9lOuTnOulvCDspJHssqkg6rCd7LK066GcIOuzgO2ZmFxuICAgKlxuICAgKiAtIGB1c2VyX19uYW1lYCDihpIgYHsgdXNlcjogeyBuYW1lIH0gfWBcbiAgICogLSBudWxsYWJsZSByZWxhdGlvbuydmCDqsr3smrAgaWQg7ZWE65Oc6rCAIG51bGzsnbTrqbQg6rCd7LK0IOyekOyytOulvCBudWxs66GcXG4gICAqL1xuICBoeWRyYXRlPFQgZXh0ZW5kcyBVbmtub3duREJSZWNvcmQ+KHJvd3M6IFRbXSk6IFRbXSB7XG4gICAgcmV0dXJuIHJvd3MubWFwKChyb3c6IFQpID0+IHtcbiAgICAgIC8vIG51bGxhYmxlIHJlbGF0aW9uIOyymOumrDog6re466O57J2YIGlkIO2VhOuTnOqwgCBudWxs7J2066m0IOqwneyytCDsoITssrTrpbwgbnVsbOuhnFxuICAgICAgY29uc3QgbmVzdGVkS2V5cyA9IE9iamVjdC5rZXlzKHJvdykuZmlsdGVyKChrZXkpID0+IGtleS5pbmNsdWRlcyhcIl9fXCIpKTtcbiAgICAgIGNvbnN0IGdyb3VwcyA9IE9iamVjdC5ncm91cEJ5KG5lc3RlZEtleXMsIChrZXkpID0+IGtleS5zcGxpdChcIl9fXCIpWzBdKTtcblxuICAgICAgLy8gaWQg7ZWE65Oc6rCAIG51bGzsnbgg6re466O5IOywvuq4sCAo7JiIOiBwYXJlbnRfX2lk6rCAIG51bGzsnbTrqbQgcGFyZW50IOq3uOujuSDsoITssrTqsIAgbnVsbClcbiAgICAgIGNvbnN0IG51bGxLZXlzID0gT2JqZWN0LmVudHJpZXMoZ3JvdXBzKVxuICAgICAgICAuZmlsdGVyKChbZ3JvdXBLZXksIGZpZWxkc10pID0+IHtcbiAgICAgICAgICBpZiAoIWZpZWxkcyB8fCBmaWVsZHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAvLyDqt7jro7nsnZggaWQg7ZWE65OcIOywvuq4sCAo7JiIOiBcInBhcmVudF9faWRcIilcbiAgICAgICAgICBjb25zdCBpZEZpZWxkID0gYCR7Z3JvdXBLZXl9X19pZGA7XG4gICAgICAgICAgaWYgKGlkRmllbGQgaW4gcm93KSB7XG4gICAgICAgICAgICAvLyBpZCDtlYTrk5zqsIAgbnVsbOydtOuptCDqsJ3ssrQg7KCE7LK06rCAIG51bGxcbiAgICAgICAgICAgIHJldHVybiByb3dbaWRGaWVsZF0gPT09IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWQg7ZWE65Oc6rCAIOyXhuycvOuptCDquLDsobQg66Gc7KeBOiDrqqjrk6Ag7ZWE65Oc6rCAIG51bGzsnbjsp4Ag7ZmV7J24XG4gICAgICAgICAgcmV0dXJuIGZpZWxkcy5ldmVyeShcbiAgICAgICAgICAgIChmaWVsZCkgPT5cbiAgICAgICAgICAgICAgcm93W2ZpZWxkXSA9PT0gbnVsbCB8fCAoQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiByb3dbZmllbGRdLmxlbmd0aCA9PT0gMCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCgoW2tleV0pID0+IGtleSk7XG5cbiAgICAgIGNvbnN0IGh5ZHJhdGVkID0gT2JqZWN0LmtleXMocm93KS5yZWR1Y2UoKHIsIGZpZWxkKSA9PiB7XG4gICAgICAgIGlmICghZmllbGQuaW5jbHVkZXMoXCJfX1wiKSkge1xuICAgICAgICAgIC8vIOydvOuwmCDtlYTrk5w6IOuwsOyXtCDrgrQg6rCd7LK066m0IOyerOq3gCBoeWRyYXRlXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocm93W2ZpZWxkXSkgJiYgaXNPYmplY3Qocm93W2ZpZWxkXVswXSkpIHtcbiAgICAgICAgICAgIHJbZmllbGRdID0gdGhpcy5oeWRyYXRlKHJvd1tmaWVsZF0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByW2ZpZWxkXSA9IHJvd1tmaWVsZF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7KSR7LKpIO2VhOuTnCDsspjrpqw6IHVzZXJfX25hbWUg4oaSIHVzZXJbbmFtZV1cbiAgICAgICAgY29uc3QgcGFydHMgPSBmaWVsZC5zcGxpdChcIl9fXCIpO1xuICAgICAgICBjb25zdCBvYmpQYXRoID1cbiAgICAgICAgICBwYXJ0c1swXSArXG4gICAgICAgICAgcGFydHNcbiAgICAgICAgICAgIC5zbGljZSgxKVxuICAgICAgICAgICAgLm1hcCgocGFydCkgPT4gYFske3BhcnR9XWApXG4gICAgICAgICAgICAuam9pbihcIlwiKTtcblxuICAgICAgICByID0gc2V0KFxuICAgICAgICAgIHIsXG4gICAgICAgICAgb2JqUGF0aCxcbiAgICAgICAgICByb3dbZmllbGRdICYmIEFycmF5LmlzQXJyYXkocm93W2ZpZWxkXSkgJiYgaXNPYmplY3Qocm93W2ZpZWxkXVswXSlcbiAgICAgICAgICAgID8gdGhpcy5oeWRyYXRlKHJvd1tmaWVsZF0pXG4gICAgICAgICAgICA6IHJvd1tmaWVsZF0sXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9LCB7fSBhcyBVbmtub3duREJSZWNvcmQpO1xuXG4gICAgICAvLyBudWxsIHJlbGF0aW9uIOyymOumrFxuICAgICAgbnVsbEtleXMuZm9yRWFjaCgobnVsbEtleSkgPT4ge1xuICAgICAgICBoeWRyYXRlZFtudWxsS2V5XSA9IG51bGw7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGh5ZHJhdGVkO1xuICAgIH0pIGFzIFRbXTtcbiAgfVxufVxuXG4vKipcbiAqIEVuaGFuY2VyIO2MjOudvOuvuO2EsCDsobDqsbTrtoAg7YOA7J6FXG4gKiBSZXF1aXJlZEVuaGFuY2VyS2V5c+qwgCDsl4bsnLzrqbQgZW5oYW5jZXJzIOyEoO2DneyggSwg7J6I7Jy866m0IO2VhOyImFxuICovXG50eXBlIEVuaGFuY2VyUGFyYW08XG4gIFRTdWJzZXRLZXkgZXh0ZW5kcyBzdHJpbmcsXG4gIFRDb21wdXRlZFJlc3VsdHMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55PixcbiAgVFN1YnNldE1hcHBpbmcgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55PixcbiAgVFN1YnNldFF1ZXJpZXMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgUHVyaVN1YnNldEZuPixcbj4gPSBbUmVxdWlyZWRFbmhhbmNlcktleXM8VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmc+XSBleHRlbmRzIFtuZXZlcl1cbiAgPyB7IGVuaGFuY2Vycz86IEVuaGFuY2VyTWFwPFRTdWJzZXRLZXksIFRDb21wdXRlZFJlc3VsdHMsIFRTdWJzZXRNYXBwaW5nLCBUU3Vic2V0UXVlcmllcz4gfVxuICA6IHsgZW5oYW5jZXJzOiBFbmhhbmNlck1hcDxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZywgVFN1YnNldFF1ZXJpZXM+IH07XG5cbnR5cGUgUmVxdWlyZWRFbmhhbmNlcktleXM8XG4gIFRTdWJzZXRLZXkgZXh0ZW5kcyBzdHJpbmcsXG4gIFRDb21wdXRlZFJlc3VsdHMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55PixcbiAgVFN1YnNldE1hcHBpbmcgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55Pixcbj4gPSB7XG4gIFtLIGluIFRTdWJzZXRLZXldOiBUQ29tcHV0ZWRSZXN1bHRzW0tdIGV4dGVuZHMgVFN1YnNldE1hcHBpbmdbS10gPyBuZXZlciA6IEs7XG59W1RTdWJzZXRLZXldO1xuXG5leHBvcnQgY29uc3QgQmFzZU1vZGVsID0gbmV3IEJhc2VNb2RlbENsYXNzKCk7XG4iXSwibmFtZXMiOlsiZ2V0TG9nZ2VyIiwiY2xvbmVEZWVwIiwiZ3JvdXAiLCJpc09iamVjdCIsIm9taXQiLCJzZXQiLCJub3JtYWxpemVGaWx0ZXJRdWVyeSIsInZhbGlkYXRlU29uYW11RmlsdGVycyIsIlNvbmFtdSIsIkVudGl0eU1hbmFnZXIiLCJjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSIsImdldEpvaW5UYWJsZXMiLCJnZXRUYWJsZU5hbWVzRnJvbVdoZXJlIiwiY2h1bmsiLCJEQiIsIlB1cmkiLCJQdXJpV3JhcHBlciIsIlVwc2VydEJ1aWxkZXIiLCJCYXNlTW9kZWxDbGFzcyIsImxvZ2dlciIsIm1vZGVsTmFtZSIsIm5hbWUiLCJzdWJzZXRRdWVyaWVzIiwibG9hZGVyUXVlcmllcyIsImdldERCIiwid2hpY2giLCJnZXRQdXJpIiwidHJ4IiwiZ2V0VHJhbnNhY3Rpb25Db250ZXh0IiwiZ2V0VHJhbnNhY3Rpb24iLCJkYiIsImRlc3Ryb3kiLCJnZXRJbnNlcnRlZElkcyIsIndkYiIsInJvd3MiLCJ0YWJsZU5hbWUiLCJ1bnFLZXlGaWVsZHMiLCJjaHVua1NpemUiLCJ1bnFLZXlzIiwid2hlcmVJbkZpZWxkIiwic2VsZWN0RmllbGQiLCJsZW5ndGgiLCJyYXciLCJqb2luIiwibWFwIiwicm93IiwiZmllbGQiLCJyZXN1bHRJZHMiLCJpdGVtcyIsImRiUm93cyIsInNlbGVjdCIsIndoZXJlSW4iLCJjb25jYXQiLCJkYlJvdyIsInBhcnNlSW50IiwiU3RyaW5nIiwiaWQiLCJnZXRTdWJzZXRRdWVyaWVzIiwic3Vic2V0IiwiRXJyb3IiLCJwdXJpV3JhcHBlciIsInFiIiwib25TdWJzZXQiLCJfc3Vic2V0IiwiY3JlYXRlRW5oYW5jZXJzIiwiZW5oYW5jZXJzIiwiZXhlY3V0ZVN1YnNldFF1ZXJ5IiwicGFyYW1zIiwicXVlcnlQYXJhbXMiLCJkZWJ1ZyIsIm9wdGltaXplQ291bnRRdWVyeSIsInNvbmFtdUZpbHRlciIsIm5vcm1hbGl6ZWRGaWx0ZXIiLCJhcHBseVNvbmFtdUZpbHRlcnMiLCJudW0iLCJwYWdlIiwidG90YWwiLCJleGVjdXRlQ291bnRRdWVyeSIsInF1ZXJ5TW9kZSIsImNvbXB1dGVkUm93cyIsImV4ZWN1dGVMaXN0UXVlcnkiLCJlbmhhbmNlciIsImVuaGFuY2VkUm93cyIsIlByb21pc2UiLCJhbGwiLCJlbnRpdHkiLCJnZXQiLCJpbnRlcm5hbEZpZWxkcyIsInN1YnNldHNJbnRlcm5hbCIsIm9taXRJbnRlcm5hbEZpZWxkcyIsImZpZWxkcyIsInJlc3VsdCIsImRlbGV0ZUZpZWxkIiwic3BsaXQiLCJmaWx0ZXJzIiwicHVyaSIsImNvbmRpdGlvbiIsIk9iamVjdCIsImVudHJpZXMiLCJ1bmRlZmluZWQiLCJmdWxsRmllbGQiLCJnZXRGdWxsRmllbGROYW1lIiwiQXJyYXkiLCJpc0FycmF5Iiwid2hlcmUiLCJvcGVyYXRvciIsInZhbHVlIiwiYXBwbHlPcGVyYXRvciIsIndoZXJlTm90SW4iLCJtaW4iLCJtYXgiLCJjb25zb2xlIiwid2FybiIsIm9iaiIsInBhcnRzIiwiZm9yRWFjaCIsIml0ZW0iLCJmaXJzdCIsInJlc3QiLCJuZXh0IiwiY291bnRQdXJpIiwiY2xvbmUiLCJjbGVhciIsImRlZmF1bHQiLCJTcWxQYXJzZXIiLCJwYXJzZXIiLCJQYXJzZXIiLCJwYXJzZWRRdWVyeSIsImFzdGlmeSIsInRvUXVlcnkiLCJkYXRhYmFzZSIsImNvbmZpZyIsImxlZnRKb2luVGFibGVzIiwid2hlcmVUYWJsZXMiLCJ0YWJsZXNUb1JlbW92ZSIsImZpbHRlciIsImoiLCJpbmNsdWRlcyIsInRhYmxlIiwiY2xlYXJKb2luIiwiY291bnRSZXN1bHQiLCJyYXdOdW1iZXIiLCJsaW1pdGVkUWIiLCJsaW1pdCIsIm9mZnNldCIsInVubG9hZGVkUm93cyIsImxvYWRlcnMiLCJwcm9jZXNzTG9hZGVycyIsImh5ZHJhdGUiLCJyZXNvbHZlTG9hZGVyIiwiYXMiLCJyZWZJZCIsInJlc29sdmVMb2FkZXJRYkZuIiwibmVzdGVkTG9hZGVycyIsInJlc29sdmVMb2FkZXJRYiIsImxvYWRlZFJvd3MiLCJzdWJSb3dHcm91cHMiLCJyIiwibmVzdGVkS2V5cyIsImtleXMiLCJrZXkiLCJncm91cHMiLCJncm91cEJ5IiwibnVsbEtleXMiLCJncm91cEtleSIsImlkRmllbGQiLCJldmVyeSIsImh5ZHJhdGVkIiwicmVkdWNlIiwib2JqUGF0aCIsInNsaWNlIiwicGFydCIsIm51bGxLZXkiLCJCYXNlTW9kZWwiXSwibWFwcGluZ3MiOiJBQUFBLGtHQUFrRyxHQUNsRyxTQUFTQSxTQUFTLFFBQXFCLG1CQUFtQjtBQUUxRCxTQUFTQyxTQUFTLEVBQUVDLEtBQUssRUFBRUMsUUFBUSxFQUFFQyxJQUFJLEVBQUVDLEdBQUcsUUFBUSxVQUFVO0FBQ2hFLFNBQTBCQyxvQkFBb0IsRUFBRUMscUJBQXFCLFFBQVEsY0FBSztBQUNsRixTQUFTQyxNQUFNLFFBQVEsa0JBQVM7QUFDaEMsU0FBU0MsYUFBYSxRQUFRLDhCQUEyQjtBQUV6RCxTQUFTQyx1QkFBdUIsUUFBUSx3QkFBcUI7QUFFN0QsU0FBU0MsYUFBYSxFQUFFQyxzQkFBc0IsUUFBUSx5QkFBc0I7QUFDNUUsU0FBU0MsS0FBSyxRQUFRLG9CQUFpQjtBQUd2QyxTQUFTQyxFQUFFLFFBQVEsVUFBTztBQUMxQixTQUFTQyxJQUFJLFFBQVEsWUFBUztBQUc5QixTQUFTQyxXQUFXLFFBQVEsb0JBQWlCO0FBQzdDLFNBQVNDLGFBQWEsUUFBUSxzQkFBbUI7QUFJakQ7Ozs7Ozs7Q0FPQyxHQUNELE9BQU8sTUFBTUM7Ozs7SUFNUUMsT0FBZTtJQUVsQyxZQUNFLEFBQWdCQyxZQUFvQixJQUFJLENBQUMsV0FBVyxDQUFDQyxJQUFJLEVBQ3pELEFBQVVDLGFBQThCLEVBQ3hDLEFBQVVDLGFBQThCLENBQ3hDO2FBSGdCSCxZQUFBQTthQUNORSxnQkFBQUE7YUFDQUMsZ0JBQUFBO1FBRVYsSUFBSSxDQUFD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
@@ -26,7 +26,7 @@ export declare class DBClass {
26
26
  private getWorkerDB;
27
27
  getDBConfig(which: DBPreset): Knex.Config;
28
28
  destroy(): Promise<void>;
29
- generateDBConfig(config: SonamuConfig["database"]): SonamuDBConfig;
29
+ generateDBConfig(config: NonNullable<SonamuConfig["database"]>): SonamuDBConfig;
30
30
  testTransaction: Knex.Transaction | null;
31
31
  createTestTransaction(): Promise<Knex.Transaction>;
32
32
  clearTestTransaction(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,eAAe,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAU3D,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAEjC,MAAM,MAAM,cAAc,GAAG;IAC3B,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC;IAChC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC9B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,OAAO;IAClB,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,SAAS,CAAgC;IAE1C,kBAAkB,wCAA+C;IAEjE,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7D,qBAAqB,IAAI,kBAAkB;IAIlD,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAsC5B;;;OAGG;IACH,OAAO,CAAC,WAAW;IA+BnB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,MAAM;IA2BnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBvB,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,cAAc;IAsDlE,eAAe,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAQ;IACjD,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;IAKlD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;CAIzC;AACD,eAAO,MAAM,EAAE,SAAgB,CAAC"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,eAAe,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAU3D,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAEjC,MAAM,MAAM,cAAc,GAAG;IAC3B,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC;IAChC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC9B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,OAAO;IAClB,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,SAAS,CAAgC;IAE1C,kBAAkB,wCAA+C;IAEjE,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7D,qBAAqB,IAAI,kBAAkB;IAIlD,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAsC5B;;;OAGG;IACH,OAAO,CAAC,WAAW;IA+BnB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,MAAM;IA2BnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBvB,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,cAAc;IAsD/E,eAAe,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAQ;IACjD,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;IAKlD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;CAIzC;AACD,eAAO,MAAM,EAAE,SAAgB,CAAC"}
@@ -173,4 +173,4 @@ export class DBClass {
173
173
  }
174
174
  export const DB = new DBClass();
175
175
 
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9kYi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IEFzeW5jTG9jYWxTdG9yYWdlIH0gZnJvbSBcImFzeW5jX2hvb2tzXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgYXNzaWduIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb25maWcsIFNvbmFtdUNvbmZpZyB9IGZyb20gXCIuLi9hcGkvY29uZmlnXCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi9rbmV4XCI7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkNvbnRleHQgfSBmcm9tIFwiLi90cmFuc2FjdGlvbi1jb250ZXh0XCI7XG5cbi8qKlxuICog7Jes65+sIOyEpOyglSDqsJ3ssrTrpbwg7Iic7LCo7KCB7Jy866GcIGRlZXAgbWVyZ2Xtlanri4jri6QuXG4gKiB1bmRlZmluZWQvbnVsbOyduCDsnbjsnpDripQg66y07Iuc65Cp64uI64ukLlxuICovXG5mdW5jdGlvbiBtZXJnZUNvbmZpZ3M8VCBleHRlbmRzIG9iamVjdD4oLi4uY29uZmlnczogKFBhcnRpYWw8VD4gfCB1bmRlZmluZWQgfCBudWxsKVtdKTogVCB7XG4gIHJldHVybiBjb25maWdzLnJlZHVjZTxUPigoYWNjLCBjb25maWcpID0+IChjb25maWcgPyBhc3NpZ24oYWNjLCBjb25maWcgYXMgVCkgOiBhY2MpLCB7fSBhcyBUKTtcbn1cblxuZXhwb3J0IHR5cGUgREJQcmVzZXQgPSBcIndcIiB8IFwiclwiO1xuXG5leHBvcnQgdHlwZSBTb25hbXVEQkNvbmZpZyA9IHtcbiAgZGV2ZWxvcG1lbnRfbWFzdGVyOiBLbmV4LkNvbmZpZztcbiAgZGV2ZWxvcG1lbnRfc2xhdmU6IEtuZXguQ29uZmlnO1xuICBwcm9kdWN0aW9uX21hc3RlcjogS25leC5Db25maWc7XG4gIHByb2R1Y3Rpb25fc2xhdmU6IEtuZXguQ29uZmlnO1xuICBmaXh0dXJlOiBLbmV4LkNvbmZpZztcbiAgdGVzdDogS25leC5Db25maWc7XG59O1xuXG5leHBvcnQgY2xhc3MgREJDbGFzcyB7XG4gIHByaXZhdGUgd2RiPzogS25leDtcbiAgcHJpdmF0ZSByZGI/OiBLbmV4O1xuICBwcml2YXRlIHdvcmtlckRCczogTWFwPG51bWJlciwgS25leD4gPSBuZXcgTWFwKCk7XG5cbiAgcHVibGljIHRyYW5zYWN0aW9uU3RvcmFnZSA9IG5ldyBBc3luY0xvY2FsU3RvcmFnZTxUcmFuc2FjdGlvbkNvbnRleHQ+KCk7XG5cbiAgcHVibGljIHJ1bldpdGhUcmFuc2FjdGlvbjxUPihjYWxsYmFjazogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uU3RvcmFnZS5ydW4obmV3IFRyYW5zYWN0aW9uQ29udGV4dCgpLCBjYWxsYmFjayk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25Db250ZXh0KCk6IFRyYW5zYWN0aW9uQ29udGV4dCB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb25TdG9yYWdlLmdldFN0b3JlKCkgPz8gbmV3IFRyYW5zYWN0aW9uQ29udGV4dCgpO1xuICB9XG5cbiAgZ2V0REIod2hpY2g6IERCUHJlc2V0KTogS25leCB7XG4gICAgY29uc3QgZGJDb25maWcgPSBTb25hbXUuZGJDb25maWc7XG5cbiAgICAvLyDthYzsiqTtirgg7Yq4656c7J6t7IWYIOqyqeumrFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIC8vIOuzkeugrCDthYzsiqTtirgg66qo65OcOiB3b3JrZXLrs4QgREIg7IKs7JqpXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuU09OQU1VX1dPUktFUl9EQiA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0V29ya2VyREIoZGJDb25maWcpO1xuICAgICAgfVxuXG4gICAgICAvLyDquLDsobQg64uo7J28IO2FjOyKpO2KuCDroZzsp4FcbiAgICAgIGlmICh0aGlzLnRlc3RUcmFuc2FjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gICAgICB9IGVsc2UgaWYgKHRoaXMud2RiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndkYjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud2RiID0gY3JlYXRlS25leEluc3RhbmNlKHtcbiAgICAgICAgICAuLi5kYkNvbmZpZy50ZXN0LFxuICAgICAgICAgIC8vIOuLqOydvCDtkoBcbiAgICAgICAgICBwb29sOiB7XG4gICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICBtYXg6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLndkYjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZU5hbWUgPSB3aGljaCA9PT0gXCJ3XCIgPyBcIndkYlwiIDogXCJyZGJcIjtcblxuICAgIGlmICghdGhpc1tpbnN0YW5jZU5hbWVdKSB7XG4gICAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldERCQ29uZmlnKHdoaWNoKTtcbiAgICAgIHRoaXNbaW5zdGFuY2VOYW1lXSA9IGNyZWF0ZUtuZXhJbnN0YW5jZShjb25maWcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW2luc3RhbmNlTmFtZV07XG4gIH1cblxuICAvKipcbiAgICog67OR66CsIO2FjOyKpO2KuOyXkOyEnCB3b3JrZXLrs4QgREIg7J247Iqk7YS07Iqk66W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAgICogVklURVNUX1BPT0xfSUQg7ZmY6rK967OA7IiY66GcIHdvcmtlcuulvCDsi53rs4TtlZjsl6wg7ZW064u5IERC7JeQIOyXsOqysO2VqeuLiOuLpC5cbiAgICovXG4gIHByaXZhdGUgZ2V0V29ya2VyREIoZGJDb25maWc6IFNvbmFtdURCQ29uZmlnKTogS25leCB7XG4gICAgLy8g7Yq4656c7J6t7IWY7J20IOyeiOycvOuptCDtirjrnpzsnq3shZgg67CY7ZmYXG4gICAgaWYgKHRoaXMudGVzdFRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gICAgfVxuXG4gICAgY29uc3Qgd29ya2VySWQgPSBwYXJzZUludChwcm9jZXNzLmVudi5WSVRFU1RfUE9PTF9JRCA/PyBcIjFcIiwgMTApO1xuXG4gICAgLy8gV29ya2Vy67OEIERCIOyduOyKpO2EtOyKpCDsupDsi7FcbiAgICBpZiAoIXRoaXMud29ya2VyREJzLmhhcyh3b3JrZXJJZCkpIHtcbiAgICAgIGNvbnN0IGJhc2VUZXN0Q29uZmlnID0gZGJDb25maWcudGVzdDtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBiYXNlVGVzdENvbmZpZy5jb25uZWN0aW9uIGFzIHsgZGF0YWJhc2U6IHN0cmluZyB9O1xuICAgICAgY29uc3Qgd29ya2VyRGJOYW1lID0gYCR7Y29ubmVjdGlvbi5kYXRhYmFzZX1fJHt3b3JrZXJJZH1gO1xuXG4gICAgICBjb25zdCB3b3JrZXJDb25maWcgPSB7XG4gICAgICAgIC4uLmJhc2VUZXN0Q29uZmlnLFxuICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgLi4uY29ubmVjdGlvbixcbiAgICAgICAgICBkYXRhYmFzZTogd29ya2VyRGJOYW1lLFxuICAgICAgICB9LFxuICAgICAgICBwb29sOiB7IG1pbjogMSwgbWF4OiAxIH0sXG4gICAgICB9O1xuXG4gICAgICB0aGlzLndvcmtlckRCcy5zZXQod29ya2VySWQsIGNyZWF0ZUtuZXhJbnN0YW5jZSh3b3JrZXJDb25maWcpKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYiA9IHRoaXMud29ya2VyREJzLmdldCh3b3JrZXJJZCk7XG4gICAgYXNzZXJ0KGRiLCBgV29ya2VyIERCICR7d29ya2VySWR9IG5vdCBmb3VuZGApO1xuICAgIHJldHVybiBkYjtcbiAgfVxuXG4gIGdldERCQ29uZmlnKHdoaWNoOiBEQlByZXNldCk6IEtuZXguQ29uZmlnIHtcbiAgICBjb25zdCBkYkNvbmZpZyA9IFNvbmFtdS5kYkNvbmZpZztcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kYkNvbmZpZy50ZXN0LFxuICAgICAgICAvLyDri6jsnbwg7ZKAXG4gICAgICAgIHBvb2w6IHtcbiAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgbWF4OiAxLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgc3dpdGNoIChwcm9jZXNzLmVudi5OT0RFX0VOViA/PyBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgIGNhc2UgXCJkZXZlbG9wbWVudFwiOlxuICAgICAgY2FzZSBcInN0YWdpbmdcIjpcbiAgICAgICAgcmV0dXJuIHdoaWNoID09PSBcIndcIlxuICAgICAgICAgID8gZGJDb25maWcuZGV2ZWxvcG1lbnRfbWFzdGVyXG4gICAgICAgICAgOiAoZGJDb25maWcuZGV2ZWxvcG1lbnRfc2xhdmUgPz8gZGJDb25maWcuZGV2ZWxvcG1lbnRfbWFzdGVyKTtcbiAgICAgIGNhc2UgXCJwcm9kdWN0aW9uXCI6XG4gICAgICAgIHJldHVybiB3aGljaCA9PT0gXCJ3XCJcbiAgICAgICAgICA/IGRiQ29uZmlnLnByb2R1Y3Rpb25fbWFzdGVyXG4gICAgICAgICAgOiAoZGJDb25maWcucHJvZHVjdGlvbl9zbGF2ZSA/PyBkYkNvbmZpZy5wcm9kdWN0aW9uX21hc3Rlcik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYO2YhOyerCBFTlYgJHtwcm9jZXNzLmVudi5OT0RFX0VOVn3sl5DripQg7ISk7KCVIOqwgOuKpe2VnCBEQuyEpOygleydtCDsl4bsirXri4jri6QuYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy53ZGIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXdhaXQgdGhpcy53ZGIuZGVzdHJveSgpO1xuICAgICAgdGhpcy53ZGIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnJkYiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLnJkYi5kZXN0cm95KCk7XG4gICAgICB0aGlzLnJkYiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8g67OR66CsIO2FjOyKpO2KuOyaqSB3b3JrZXIgRELrk6Trj4Qg7KCV66asXG4gICAgZm9yIChjb25zdCBkYiBvZiB0aGlzLndvcmtlckRCcy52YWx1ZXMoKSkge1xuICAgICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLndvcmtlckRCcy5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlREJDb25maWcoY29uZmlnOiBTb25hbXVDb25maWdbXCJkYXRhYmFzZVwiXSk6IFNvbmFtdURCQ29uZmlnIHtcbiAgICBjb25zdCBkZWZhdWx0S25leENvbmZpZzogUGFydGlhbDxEYXRhYmFzZUNvbmZpZz4gPSBhc3NpZ24oXG4gICAgICB7XG4gICAgICAgIGNsaWVudDogXCJwb3N0Z3Jlc3FsXCIsXG4gICAgICAgIHBvb2w6IHtcbiAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgbWF4OiA1LFxuICAgICAgICB9LFxuICAgICAgICBtaWdyYXRpb25zOiB7XG4gICAgICAgICAgZGlyZWN0b3J5OiBcIi4vc3JjL21pZ3JhdGlvbnNcIixcbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgIGRhdGFiYXNlOiBjb25maWcubmFtZSxcbiAgICAgICAgICAuLi5jb25maWcuZGVmYXVsdE9wdGlvbnM/LmNvbm5lY3Rpb24sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY29uZmlnLmRlZmF1bHRPcHRpb25zLFxuICAgICk7XG5cbiAgICAvLyBiaW9tZS1pZ25vcmUgZm9ybWF0OiDshKTsoJUg6rWs7KGwIOqwgOuPheyEseydhCDsnITtlbQg7Jes65+sIOykhOuhnCDsnKDsp4BcbiAgICByZXR1cm4ge1xuICAgICAgLy8g7Jes6riw7JeQIOuCmOyXtO2VnCDsiJzshJzrjIDroZwgU29uYW11IFVJ7J2YIERCIE1pZ3JhdGlvbiDtg63sl5Ag7ZGc7Iuc65Cp64uI64ukLlxuICAgICAgdGVzdDogbWVyZ2VDb25maWdzKFxuICAgICAgICBkZWZhdWx0S25leENvbmZpZywgXG4gICAgICAgIHsgY29ubmVjdGlvbjogeyBkYXRhYmFzZTogYCR7Y29uZmlnLm5hbWV9X3Rlc3RgIH0gfSxcbiAgICAgICAgY29uZmlnLmVudmlyb25tZW50cz8udGVzdFxuICAgICAgKSxcbiAgICAgIGZpeHR1cmU6IG1lcmdlQ29uZmlncyhcbiAgICAgICAgZGVmYXVsdEtuZXhDb25maWcsIFxuICAgICAgICB7IGNvbm5lY3Rpb246IHsgZGF0YWJhc2U6IGAke2NvbmZpZy5uYW1lfV9maXh0dXJlYCB9IH0sXG4gICAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LmZpeHR1cmUsXG4gICAgICApLFxuICAgICAgZGV2ZWxvcG1lbnRfbWFzdGVyOiBtZXJnZUNvbmZpZ3MoXG4gICAgICAgIGRlZmF1bHRLbmV4Q29uZmlnLCBcbiAgICAgICAgY29uZmlnLmVudmlyb25tZW50cz8uZGV2ZWxvcG1lbnRcbiAgICAgICksXG4gICAgICBkZXZlbG9wbWVudF9zbGF2ZTogbWVyZ2VDb25maWdzKFxuICAgICAgICBkZWZhdWx0S25leENvbmZpZyxcbiAgICAgICAgY29uZmlnLmVudmlyb25tZW50cz8uZGV2ZWxvcG1lbnQsXG4gICAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LmRldmVsb3BtZW50X3NsYXZlLFxuICAgICAgKSxcbiAgICAgIHByb2R1Y3Rpb25fbWFzdGVyOiBtZXJnZUNvbmZpZ3MoXG4gICAgICAgIGRlZmF1bHRLbmV4Q29uZmlnLCBcbiAgICAgICAgY29uZmlnLmVudmlyb25tZW50cz8ucHJvZHVjdGlvblxuICAgICAgKSxcbiAgICAgIHByb2R1Y3Rpb25fc2xhdmU6IG1lcmdlQ29uZmlncyhcbiAgICAgICAgZGVmYXVsdEtuZXhDb25maWcsXG4gICAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LnByb2R1Y3Rpb24sXG4gICAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LnByb2R1Y3Rpb25fc2xhdmUsXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICAvLyBUZXN0IO2ZmOqyveyXkOyEnCDtirjrnpzsnq3shZgg7IKs7JqpXG4gIHB1YmxpYyB0ZXN0VHJhbnNhY3Rpb246IEtuZXguVHJhbnNhY3Rpb24gfCBudWxsID0gbnVsbDtcbiAgYXN5bmMgY3JlYXRlVGVzdFRyYW5zYWN0aW9uKCk6IFByb21pc2U8S25leC5UcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGRiID0gdGhpcy5nZXREQihcIndcIik7XG4gICAgdGhpcy50ZXN0VHJhbnNhY3Rpb24gPSBhd2FpdCBkYi50cmFuc2FjdGlvbigpO1xuICAgIHJldHVybiB0aGlzLnRlc3RUcmFuc2FjdGlvbjtcbiAgfVxuICBhc3luYyBjbGVhclRlc3RUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnRlc3RUcmFuc2FjdGlvbj8ucm9sbGJhY2soKTtcbiAgICB0aGlzLnRlc3RUcmFuc2FjdGlvbiA9IG51bGw7XG4gIH1cbiAgYXN5bmMgZ2V0VGVzdENvbm5lY3Rpb24oKTogUHJvbWlzZTxLbmV4PiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwid1wiKTtcbiAgICByZXR1cm4gZGI7XG4gIH1cbn1cbmV4cG9ydCBjb25zdCBEQiA9IG5ldyBEQkNsYXNzKCk7XG4iXSwibmFtZXMiOlsiYXNzZXJ0IiwiQXN5bmNMb2NhbFN0b3JhZ2UiLCJhc3NpZ24iLCJTb25hbXUiLCJjcmVhdGVLbmV4SW5zdGFuY2UiLCJUcmFuc2FjdGlvbkNvbnRleHQiLCJtZXJnZUNvbmZpZ3MiLCJjb25maWdzIiwicmVkdWNlIiwiYWNjIiwiY29uZmlnIiwiREJDbGFzcyIsIndkYiIsInJkYiIsIndvcmtlckRCcyIsIk1hcCIsInRyYW5zYWN0aW9uU3RvcmFnZSIsInJ1bldpdGhUcmFuc2FjdGlvbiIsImNhbGxiYWNrIiwicnVuIiwiZ2V0VHJhbnNhY3Rpb25Db250ZXh0IiwiZ2V0U3RvcmUiLCJnZXREQiIsIndoaWNoIiwiZGJDb25maWciLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJTT05BTVVfV09SS0VSX0RCIiwiZ2V0V29ya2VyREIiLCJ0ZXN0VHJhbnNhY3Rpb24iLCJ0ZXN0IiwicG9vbCIsIm1pbiIsIm1heCIsImluc3RhbmNlTmFtZSIsImdldERCQ29uZmlnIiwid29ya2VySWQiLCJwYXJzZUludCIsIlZJVEVTVF9QT09MX0lEIiwiaGFzIiwiYmFzZVRlc3RDb25maWciLCJjb25uZWN0aW9uIiwid29ya2VyRGJOYW1lIiwiZGF0YWJhc2UiLCJ3b3JrZXJDb25maWciLCJzZXQiLCJkYiIsImdldCIsImRldmVsb3BtZW50X21hc3RlciIsImRldmVsb3BtZW50X3NsYXZlIiwicHJvZHVjdGlvbl9tYXN0ZXIiLCJwcm9kdWN0aW9uX3NsYXZlIiwiRXJyb3IiLCJkZXN0cm95IiwidW5kZWZpbmVkIiwidmFsdWVzIiwiY2xlYXIiLCJnZW5lcmF0ZURCQ29uZmlnIiwiZGVmYXVsdEtuZXhDb25maWciLCJjbGllbnQiLCJtaWdyYXRpb25zIiwiZGlyZWN0b3J5IiwibmFtZSIsImRlZmF1bHRPcHRpb25zIiwiZW52aXJvbm1lbnRzIiwiZml4dHVyZSIsImRldmVsb3BtZW50IiwicHJvZHVjdGlvbiIsImNyZWF0ZVRlc3RUcmFuc2FjdGlvbiIsInRyYW5zYWN0aW9uIiwiY2xlYXJUZXN0VHJhbnNhY3Rpb24iLCJyb2xsYmFjayIsImdldFRlc3RDb25uZWN0aW9uIiwiREIiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVksU0FBUztBQUM1QixTQUFTQyxpQkFBaUIsUUFBUSxj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
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9kYi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IEFzeW5jTG9jYWxTdG9yYWdlIH0gZnJvbSBcImFzeW5jX2hvb2tzXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgYXNzaWduIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb25maWcsIFNvbmFtdUNvbmZpZyB9IGZyb20gXCIuLi9hcGkvY29uZmlnXCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi9rbmV4XCI7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkNvbnRleHQgfSBmcm9tIFwiLi90cmFuc2FjdGlvbi1jb250ZXh0XCI7XG5cbi8qKlxuICog7Jes65+sIOyEpOyglSDqsJ3ssrTrpbwg7Iic7LCo7KCB7Jy866GcIGRlZXAgbWVyZ2Xtlanri4jri6QuXG4gKiB1bmRlZmluZWQvbnVsbOyduCDsnbjsnpDripQg66y07Iuc65Cp64uI64ukLlxuICovXG5mdW5jdGlvbiBtZXJnZUNvbmZpZ3M8VCBleHRlbmRzIG9iamVjdD4oLi4uY29uZmlnczogKFBhcnRpYWw8VD4gfCB1bmRlZmluZWQgfCBudWxsKVtdKTogVCB7XG4gIHJldHVybiBjb25maWdzLnJlZHVjZTxUPigoYWNjLCBjb25maWcpID0+IChjb25maWcgPyBhc3NpZ24oYWNjLCBjb25maWcgYXMgVCkgOiBhY2MpLCB7fSBhcyBUKTtcbn1cblxuZXhwb3J0IHR5cGUgREJQcmVzZXQgPSBcIndcIiB8IFwiclwiO1xuXG5leHBvcnQgdHlwZSBTb25hbXVEQkNvbmZpZyA9IHtcbiAgZGV2ZWxvcG1lbnRfbWFzdGVyOiBLbmV4LkNvbmZpZztcbiAgZGV2ZWxvcG1lbnRfc2xhdmU6IEtuZXguQ29uZmlnO1xuICBwcm9kdWN0aW9uX21hc3RlcjogS25leC5Db25maWc7XG4gIHByb2R1Y3Rpb25fc2xhdmU6IEtuZXguQ29uZmlnO1xuICBmaXh0dXJlOiBLbmV4LkNvbmZpZztcbiAgdGVzdDogS25leC5Db25maWc7XG59O1xuXG5leHBvcnQgY2xhc3MgREJDbGFzcyB7XG4gIHByaXZhdGUgd2RiPzogS25leDtcbiAgcHJpdmF0ZSByZGI/OiBLbmV4O1xuICBwcml2YXRlIHdvcmtlckRCczogTWFwPG51bWJlciwgS25leD4gPSBuZXcgTWFwKCk7XG5cbiAgcHVibGljIHRyYW5zYWN0aW9uU3RvcmFnZSA9IG5ldyBBc3luY0xvY2FsU3RvcmFnZTxUcmFuc2FjdGlvbkNvbnRleHQ+KCk7XG5cbiAgcHVibGljIHJ1bldpdGhUcmFuc2FjdGlvbjxUPihjYWxsYmFjazogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uU3RvcmFnZS5ydW4obmV3IFRyYW5zYWN0aW9uQ29udGV4dCgpLCBjYWxsYmFjayk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25Db250ZXh0KCk6IFRyYW5zYWN0aW9uQ29udGV4dCB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb25TdG9yYWdlLmdldFN0b3JlKCkgPz8gbmV3IFRyYW5zYWN0aW9uQ29udGV4dCgpO1xuICB9XG5cbiAgZ2V0REIod2hpY2g6IERCUHJlc2V0KTogS25leCB7XG4gICAgY29uc3QgZGJDb25maWcgPSBTb25hbXUuZGJDb25maWc7XG5cbiAgICAvLyDthYzsiqTtirgg7Yq4656c7J6t7IWYIOqyqeumrFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIC8vIOuzkeugrCDthYzsiqTtirgg66qo65OcOiB3b3JrZXLrs4QgREIg7IKs7JqpXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuU09OQU1VX1dPUktFUl9EQiA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0V29ya2VyREIoZGJDb25maWcpO1xuICAgICAgfVxuXG4gICAgICAvLyDquLDsobQg64uo7J28IO2FjOyKpO2KuCDroZzsp4FcbiAgICAgIGlmICh0aGlzLnRlc3RUcmFuc2FjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gICAgICB9IGVsc2UgaWYgKHRoaXMud2RiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndkYjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud2RiID0gY3JlYXRlS25leEluc3RhbmNlKHtcbiAgICAgICAgICAuLi5kYkNvbmZpZy50ZXN0LFxuICAgICAgICAgIC8vIOuLqOydvCDtkoBcbiAgICAgICAgICBwb29sOiB7XG4gICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICBtYXg6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLndkYjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZU5hbWUgPSB3aGljaCA9PT0gXCJ3XCIgPyBcIndkYlwiIDogXCJyZGJcIjtcblxuICAgIGlmICghdGhpc1tpbnN0YW5jZU5hbWVdKSB7XG4gICAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldERCQ29uZmlnKHdoaWNoKTtcbiAgICAgIHRoaXNbaW5zdGFuY2VOYW1lXSA9IGNyZWF0ZUtuZXhJbnN0YW5jZShjb25maWcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW2luc3RhbmNlTmFtZV07XG4gIH1cblxuICAvKipcbiAgICog67OR66CsIO2FjOyKpO2KuOyXkOyEnCB3b3JrZXLrs4QgREIg7J247Iqk7YS07Iqk66W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAgICogVklURVNUX1BPT0xfSUQg7ZmY6rK967OA7IiY66GcIHdvcmtlcuulvCDsi53rs4TtlZjsl6wg7ZW064u5IERC7JeQIOyXsOqysO2VqeuLiOuLpC5cbiAgICovXG4gIHByaXZhdGUgZ2V0V29ya2VyREIoZGJDb25maWc6IFNvbmFtdURCQ29uZmlnKTogS25leCB7XG4gICAgLy8g7Yq4656c7J6t7IWY7J20IOyeiOycvOuptCDtirjrnpzsnq3shZgg67CY7ZmYXG4gICAgaWYgKHRoaXMudGVzdFRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gICAgfVxuXG4gICAgY29uc3Qgd29ya2VySWQgPSBwYXJzZUludChwcm9jZXNzLmVudi5WSVRFU1RfUE9PTF9JRCA/PyBcIjFcIiwgMTApO1xuXG4gICAgLy8gV29ya2Vy67OEIERCIOyduOyKpO2EtOyKpCDsupDsi7FcbiAgICBpZiAoIXRoaXMud29ya2VyREJzLmhhcyh3b3JrZXJJZCkpIHtcbiAgICAgIGNvbnN0IGJhc2VUZXN0Q29uZmlnID0gZGJDb25maWcudGVzdDtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBiYXNlVGVzdENvbmZpZy5jb25uZWN0aW9uIGFzIHsgZGF0YWJhc2U6IHN0cmluZyB9O1xuICAgICAgY29uc3Qgd29ya2VyRGJOYW1lID0gYCR7Y29ubmVjdGlvbi5kYXRhYmFzZX1fJHt3b3JrZXJJZH1gO1xuXG4gICAgICBjb25zdCB3b3JrZXJDb25maWcgPSB7XG4gICAgICAgIC4uLmJhc2VUZXN0Q29uZmlnLFxuICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgLi4uY29ubmVjdGlvbixcbiAgICAgICAgICBkYXRhYmFzZTogd29ya2VyRGJOYW1lLFxuICAgICAgICB9LFxuICAgICAgICBwb29sOiB7IG1pbjogMSwgbWF4OiAxIH0sXG4gICAgICB9O1xuXG4gICAgICB0aGlzLndvcmtlckRCcy5zZXQod29ya2VySWQsIGNyZWF0ZUtuZXhJbnN0YW5jZSh3b3JrZXJDb25maWcpKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYiA9IHRoaXMud29ya2VyREJzLmdldCh3b3JrZXJJZCk7XG4gICAgYXNzZXJ0KGRiLCBgV29ya2VyIERCICR7d29ya2VySWR9IG5vdCBmb3VuZGApO1xuICAgIHJldHVybiBkYjtcbiAgfVxuXG4gIGdldERCQ29uZmlnKHdoaWNoOiBEQlByZXNldCk6IEtuZXguQ29uZmlnIHtcbiAgICBjb25zdCBkYkNvbmZpZyA9IFNvbmFtdS5kYkNvbmZpZztcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kYkNvbmZpZy50ZXN0LFxuICAgICAgICAvLyDri6jsnbwg7ZKAXG4gICAgICAgIHBvb2w6IHtcbiAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgbWF4OiAxLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgc3dpdGNoIChwcm9jZXNzLmVudi5OT0RFX0VOViA/PyBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgIGNhc2UgXCJkZXZlbG9wbWVudFwiOlxuICAgICAgY2FzZSBcInN0YWdpbmdcIjpcbiAgICAgICAgcmV0dXJuIHdoaWNoID09PSBcIndcIlxuICAgICAgICAgID8gZGJDb25maWcuZGV2ZWxvcG1lbnRfbWFzdGVyXG4gICAgICAgICAgOiAoZGJDb25maWcuZGV2ZWxvcG1lbnRfc2xhdmUgPz8gZGJDb25maWcuZGV2ZWxvcG1lbnRfbWFzdGVyKTtcbiAgICAgIGNhc2UgXCJwcm9kdWN0aW9uXCI6XG4gICAgICAgIHJldHVybiB3aGljaCA9PT0gXCJ3XCJcbiAgICAgICAgICA/IGRiQ29uZmlnLnByb2R1Y3Rpb25fbWFzdGVyXG4gICAgICAgICAgOiAoZGJDb25maWcucHJvZHVjdGlvbl9zbGF2ZSA/PyBkYkNvbmZpZy5wcm9kdWN0aW9uX21hc3Rlcik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYO2YhOyerCBFTlYgJHtwcm9jZXNzLmVudi5OT0RFX0VOVn3sl5DripQg7ISk7KCVIOqwgOuKpe2VnCBEQuyEpOygleydtCDsl4bsirXri4jri6QuYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy53ZGIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXdhaXQgdGhpcy53ZGIuZGVzdHJveSgpO1xuICAgICAgdGhpcy53ZGIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnJkYiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLnJkYi5kZXN0cm95KCk7XG4gICAgICB0aGlzLnJkYiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8g67OR66CsIO2FjOyKpO2KuOyaqSB3b3JrZXIgRELrk6Trj4Qg7KCV66asXG4gICAgZm9yIChjb25zdCBkYiBvZiB0aGlzLndvcmtlckRCcy52YWx1ZXMoKSkge1xuICAgICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLndvcmtlckRCcy5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlREJDb25maWcoY29uZmlnOiBOb25OdWxsYWJsZTxTb25hbXVDb25maWdbXCJkYXRhYmFzZVwiXT4pOiBTb25hbXVEQkNvbmZpZyB7XG4gICAgY29uc3QgZGVmYXVsdEtuZXhDb25maWc6IFBhcnRpYWw8RGF0YWJhc2VDb25maWc+ID0gYXNzaWduKFxuICAgICAge1xuICAgICAgICBjbGllbnQ6IFwicG9zdGdyZXNxbFwiLFxuICAgICAgICBwb29sOiB7XG4gICAgICAgICAgbWluOiAxLFxuICAgICAgICAgIG1heDogNSxcbiAgICAgICAgfSxcbiAgICAgICAgbWlncmF0aW9uczoge1xuICAgICAgICAgIGRpcmVjdG9yeTogXCIuL3NyYy9taWdyYXRpb25zXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgICBkYXRhYmFzZTogY29uZmlnLm5hbWUsXG4gICAgICAgICAgLi4uY29uZmlnLmRlZmF1bHRPcHRpb25zPy5jb25uZWN0aW9uLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGNvbmZpZy5kZWZhdWx0T3B0aW9ucyxcbiAgICApO1xuXG4gICAgLy8gYmlvbWUtaWdub3JlIGZvcm1hdDog7ISk7KCVIOq1rOyhsCDqsIDrj4XshLHsnYQg7JyE7ZW0IOyXrOufrCDspITroZwg7Jyg7KeAXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIOyXrOq4sOyXkCDrgpjsl7TtlZwg7Iic7ISc64yA66GcIFNvbmFtdSBVSeydmCBEQiBNaWdyYXRpb24g7YOt7JeQIO2RnOyLnOuQqeuLiOuLpC5cbiAgICAgIHRlc3Q6IG1lcmdlQ29uZmlncyhcbiAgICAgICAgZGVmYXVsdEtuZXhDb25maWcsIFxuICAgICAgICB7IGNvbm5lY3Rpb246IHsgZGF0YWJhc2U6IGAke2NvbmZpZy5uYW1lfV90ZXN0YCB9IH0sXG4gICAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LnRlc3RcbiAgICAgICksXG4gICAgICBmaXh0dXJlOiBtZXJnZUNvbmZpZ3MoXG4gICAgICAgIGRlZmF1bHRLbmV4Q29uZmlnLCBcbiAgICAgICAgeyBjb25uZWN0aW9uOiB7IGRhdGFiYXNlOiBgJHtjb25maWcubmFtZX1fZml4dHVyZWAgfSB9LFxuICAgICAgICBjb25maWcuZW52aXJvbm1lbnRzPy5maXh0dXJlLFxuICAgICAgKSxcbiAgICAgIGRldmVsb3BtZW50X21hc3RlcjogbWVyZ2VDb25maWdzKFxuICAgICAgICBkZWZhdWx0S25leENvbmZpZywgXG4gICAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LmRldmVsb3BtZW50XG4gICAgICApLFxuICAgICAgZGV2ZWxvcG1lbnRfc2xhdmU6IG1lcmdlQ29uZmlncyhcbiAgICAgICAgZGVmYXVsdEtuZXhDb25maWcsXG4gICAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LmRldmVsb3BtZW50LFxuICAgICAgICBjb25maWcuZW52aXJvbm1lbnRzPy5kZXZlbG9wbWVudF9zbGF2ZSxcbiAgICAgICksXG4gICAgICBwcm9kdWN0aW9uX21hc3RlcjogbWVyZ2VDb25maWdzKFxuICAgICAgICBkZWZhdWx0S25leENvbmZpZywgXG4gICAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LnByb2R1Y3Rpb25cbiAgICAgICksXG4gICAgICBwcm9kdWN0aW9uX3NsYXZlOiBtZXJnZUNvbmZpZ3MoXG4gICAgICAgIGRlZmF1bHRLbmV4Q29uZmlnLFxuICAgICAgICBjb25maWcuZW52aXJvbm1lbnRzPy5wcm9kdWN0aW9uLFxuICAgICAgICBjb25maWcuZW52aXJvbm1lbnRzPy5wcm9kdWN0aW9uX3NsYXZlLFxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gVGVzdCDtmZjqsr3sl5DshJwg7Yq4656c7J6t7IWYIOyCrOyaqVxuICBwdWJsaWMgdGVzdFRyYW5zYWN0aW9uOiBLbmV4LlRyYW5zYWN0aW9uIHwgbnVsbCA9IG51bGw7XG4gIGFzeW5jIGNyZWF0ZVRlc3RUcmFuc2FjdGlvbigpOiBQcm9taXNlPEtuZXguVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBkYiA9IHRoaXMuZ2V0REIoXCJ3XCIpO1xuICAgIHRoaXMudGVzdFRyYW5zYWN0aW9uID0gYXdhaXQgZGIudHJhbnNhY3Rpb24oKTtcbiAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gIH1cbiAgYXN5bmMgY2xlYXJUZXN0VHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy50ZXN0VHJhbnNhY3Rpb24/LnJvbGxiYWNrKCk7XG4gICAgdGhpcy50ZXN0VHJhbnNhY3Rpb24gPSBudWxsO1xuICB9XG4gIGFzeW5jIGdldFRlc3RDb25uZWN0aW9uKCk6IFByb21pc2U8S25leD4ge1xuICAgIGNvbnN0IGRiID0gdGhpcy5nZXREQihcIndcIik7XG4gICAgcmV0dXJuIGRiO1xuICB9XG59XG5leHBvcnQgY29uc3QgREIgPSBuZXcgREJDbGFzcygpO1xuIl0sIm5hbWVzIjpbImFzc2VydCIsIkFzeW5jTG9jYWxTdG9yYWdlIiwiYXNzaWduIiwiU29uYW11IiwiY3JlYXRlS25leEluc3RhbmNlIiwiVHJhbnNhY3Rpb25Db250ZXh0IiwibWVyZ2VDb25maWdzIiwiY29uZmlncyIsInJlZHVjZSIsImFjYyIsImNvbmZpZyIsIkRCQ2xhc3MiLCJ3ZGIiLCJyZGIiLCJ3b3JrZXJEQnMiLCJNYXAiLCJ0cmFuc2FjdGlvblN0b3JhZ2UiLCJydW5XaXRoVHJhbnNhY3Rpb24iLCJjYWxsYmFjayIsInJ1biIsImdldFRyYW5zYWN0aW9uQ29udGV4dCIsImdldFN0b3JlIiwiZ2V0REIiLCJ3aGljaCIsImRiQ29uZmlnIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiU09OQU1VX1dPUktFUl9EQiIsImdldFdvcmtlckRCIiwidGVzdFRyYW5zYWN0aW9uIiwidGVzdCIsInBvb2wiLCJtaW4iLCJtYXgiLCJpbnN0YW5jZU5hbWUiLCJnZXREQkNvbmZpZyIsIndvcmtlcklkIiwicGFyc2VJbnQiLCJWSVRFU1RfUE9PTF9JRCIsImhhcyIsImJhc2VUZXN0Q29uZmlnIiwiY29ubmVjdGlvbiIsIndvcmtlckRiTmFtZSIsImRhdGFiYXNlIiwid29ya2VyQ29uZmlnIiwic2V0IiwiZGIiLCJnZXQiLCJkZXZlbG9wbWVudF9tYXN0ZXIiLCJkZXZlbG9wbWVudF9zbGF2ZSIsInByb2R1Y3Rpb25fbWFzdGVyIiwicHJvZHVjdGlvbl9zbGF2ZSIsIkVycm9yIiwiZGVzdHJveSIsInVuZGVmaW5lZCIsInZhbHVlcyIsImNsZWFyIiwiZ2VuZXJhdGVEQkNvbmZpZyIsImRlZmF1bHRLbmV4Q29uZmlnIiwiY2xpZW50IiwibWlncmF0aW9ucyIsImRpcmVjdG9yeSIsIm5hbWUiLCJkZWZhdWx0T3B0aW9ucyIsImVudmlyb25tZW50cyIsImZpeHR1cmUiLCJkZXZlbG9wbWVudCIsInByb2R1Y3Rpb24iLCJjcmVhdGVUZXN0VHJhbnNhY3Rpb24iLCJ0cmFuc2FjdGlvbiIsImNsZWFyVGVzdFRyYW5zYWN0aW9uIiwicm9sbGJhY2siLCJnZXRUZXN0Q29ubmVjdGlvbiIsIkRCIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxZQUFZLFNBQVM7QUFDNUIsU0FBU0Ms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
@@ -3,6 +3,8 @@ import type { z } from "zod";
3
3
  export declare function createSSEFactory<T extends z.ZodObject>(socket: FastifyRequest["socket"], reply: FastifyReply, _events: T): SSEConnection<T>;
4
4
  export declare function createMockSSEFactory<T extends z.ZodObject>(_events: T): SSEConnection<T>;
5
5
  export interface SSEConnection<T extends z.ZodObject> {
6
+ get closed(): boolean;
7
+ onClose(callback: () => void): void;
6
8
  publish<K extends keyof z.infer<T>>(event: K, data: z.infer<T>[K]): void;
7
9
  end(): Promise<void>;
8
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/stream/sse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EACpD,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,EAChC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,CAAC,GACT,aAAa,CAAC,CAAC,CAAC,CAElB;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAKxF;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;IAClD,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACzE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB"}
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/stream/sse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EACpD,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,EAChC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,CAAC,GACT,aAAa,CAAC,CAAC,CAAC,CAElB;AAED,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CASxF;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;IAClD,IAAI,MAAM,IAAI,OAAO,CAAC;IACtB,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACzE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB"}
@@ -4,6 +4,10 @@ export function createSSEFactory(socket, reply, _events) {
4
4
  }
5
5
  export function createMockSSEFactory(_events) {
6
6
  return {
7
+ get closed () {
8
+ return false;
9
+ },
10
+ onClose: (_callback)=>{},
7
11
  publish: (_event, _data)=>{},
8
12
  end: ()=>Promise.resolve()
9
13
  };
@@ -12,14 +16,30 @@ class SSEConnectionImpl {
12
16
  socket;
13
17
  reply;
14
18
  _closed = false;
19
+ _closeCallbacks = [];
20
+ markClosed = ()=>{
21
+ this._closed = true;
22
+ this.fireCloseCallbacks();
23
+ };
24
+ get closed() {
25
+ return this._closed;
26
+ }
27
+ onClose(callback) {
28
+ this._closeCallbacks.push(callback);
29
+ }
30
+ // 콜백을 한 번만 실행하고 배열을 비워 중복 호출을 방지
31
+ fireCloseCallbacks() {
32
+ const callbacks = this._closeCallbacks;
33
+ this._closeCallbacks = [];
34
+ for (const cb of callbacks){
35
+ cb();
36
+ }
37
+ }
15
38
  constructor(socket, reply){
16
39
  this.socket = socket;
17
40
  this.reply = reply;
18
- const markClosed = ()=>{
19
- this._closed = true;
20
- };
21
- this.socket.on("close", markClosed);
22
- this.socket.on("error", markClosed);
41
+ this.socket.on("close", this.markClosed);
42
+ this.socket.on("error", this.markClosed);
23
43
  }
24
44
  publish(event, data) {
25
45
  if (this._closed) {
@@ -35,6 +55,9 @@ class SSEConnectionImpl {
35
55
  return;
36
56
  }
37
57
  this._closed = true;
58
+ this.socket.off("close", this.markClosed);
59
+ this.socket.off("error", this.markClosed);
60
+ this.fireCloseCallbacks();
38
61
  this.reply.sse({
39
62
  event: "end",
40
63
  data: "END"
@@ -44,4 +67,4 @@ class SSEConnectionImpl {
44
67
  }
45
68
  }
46
69
 
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdHJlYW0vc3NlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmFzdGlmeVJlcGx5LCBGYXN0aWZ5UmVxdWVzdCB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgdHlwZSB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIE5PVEUoSGF6ZSwgMjUxMTA2KTogY29udGV4dCBwcm92aWRlcuyXkOyEnCDsnbjsnpDrpbwg7LGE7JuM7KO866m0IGNyZWF0ZVNTRShldmVudHMp66eM7Jy866GcIOyCrOyaqSDqsIDriqVcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTU0VGYWN0b3J5PFQgZXh0ZW5kcyB6LlpvZE9iamVjdD4oXG4gIHNvY2tldDogRmFzdGlmeVJlcXVlc3RbXCJzb2NrZXRcIl0sXG4gIHJlcGx5OiBGYXN0aWZ5UmVwbHksXG4gIF9ldmVudHM6IFQsXG4pOiBTU0VDb25uZWN0aW9uPFQ+IHtcbiAgcmV0dXJuIG5ldyBTU0VDb25uZWN0aW9uSW1wbDxUPihzb2NrZXQsIHJlcGx5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tTU0VGYWN0b3J5PFQgZXh0ZW5kcyB6LlpvZE9iamVjdD4oX2V2ZW50czogVCk6IFNTRUNvbm5lY3Rpb248VD4ge1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2g6IChfZXZlbnQsIF9kYXRhKSA9PiB7fSxcbiAgICBlbmQ6ICgpID0+IFByb21pc2UucmVzb2x2ZSgpLFxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNTRUNvbm5lY3Rpb248VCBleHRlbmRzIHouWm9kT2JqZWN0PiB7XG4gIHB1Ymxpc2g8SyBleHRlbmRzIGtleW9mIHouaW5mZXI8VD4+KGV2ZW50OiBLLCBkYXRhOiB6LmluZmVyPFQ+W0tdKTogdm9pZDtcbiAgZW5kKCk6IFByb21pc2U8dm9pZD47XG59XG5cbmNsYXNzIFNTRUNvbm5lY3Rpb25JbXBsPFQgZXh0ZW5kcyB6LlpvZE9iamVjdD4gaW1wbGVtZW50cyBTU0VDb25uZWN0aW9uPFQ+IHtcbiAgcHJpdmF0ZSBfY2xvc2VkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzb2NrZXQ6IEZhc3RpZnlSZXF1ZXN0W1wic29ja2V0XCJdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVwbHk6IEZhc3RpZnlSZXBseSxcbiAgKSB7XG4gICAgY29uc3QgbWFya0Nsb3NlZCA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2Nsb3NlZCA9IHRydWU7XG4gICAgfTtcbiAgICB0aGlzLnNvY2tldC5vbihcImNsb3NlXCIsIG1hcmtDbG9zZWQpO1xuICAgIHRoaXMuc29ja2V0Lm9uKFwiZXJyb3JcIiwgbWFya0Nsb3NlZCk7XG4gIH1cblxuICBwdWJsaXNoPEsgZXh0ZW5kcyBrZXlvZiB6LmluZmVyPFQ+PihldmVudDogSywgZGF0YTogei5pbmZlcjxUPltLXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlcGx5LnNzZSh7XG4gICAgICBldmVudDogZXZlbnQgYXMgc3RyaW5nLFxuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoZGF0YSksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBlbmQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Nsb3NlZCA9IHRydWU7XG5cbiAgICB0aGlzLnJlcGx5LnNzZSh7XG4gICAgICBldmVudDogXCJlbmRcIixcbiAgICAgIGRhdGE6IFwiRU5EXCIsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAyMDApKTtcbiAgICB0aGlzLnJlcGx5LnJhdy5lbmQoKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImNyZWF0ZVNTRUZhY3RvcnkiLCJzb2NrZXQiLCJyZXBseSIsIl9ldmVudHMiLCJTU0VDb25uZWN0aW9uSW1wbCIsImNyZWF0ZU1vY2tTU0VGYWN0b3J5IiwicHVibGlzaCIsIl9ldmVudCIsIl9kYXRhIiwiZW5kIiwiUHJvbWlzZSIsInJlc29sdmUiLCJfY2xvc2VkIiwibWFya0Nsb3NlZCIsIm9uIiwiZXZlbnQiLCJkYXRhIiwic3NlIiwiSlNPTiIsInN0cmluZ2lmeSIsInNldFRpbWVvdXQiLCJyYXciXSwibWFwcGluZ3MiOiJBQUdBLDZFQUE2RTtBQUM3RSxPQUFPLFNBQVNBLGlCQUNkQyxNQUFnQyxFQUNoQ0MsS0FBbUIsRUFDbkJDLE9BQVU7SUFFVixPQUFPLElBQUlDLGtCQUFxQkgsUUFBUUM7QUFDMUM7QUFFQSxPQUFPLFNBQVNHLHFCQUE0Q0YsT0FBVTtJQUNwRSxPQUFPO1FBQ0xHLFNBQVMsQ0FBQ0MsUUFBUUMsU0FBVztRQUM3QkMsS0FBSyxJQUFNQyxRQUFRQyxPQUFPO0lBQzVCO0FBQ0Y7QUFPQSxNQUFNUDs7O0lBQ0lRLFVBQVUsTUFBTTtJQUV4QixZQUNFLEFBQWlCWCxNQUFnQyxFQUNqRCxBQUFpQkMsS0FBbUIsQ0FDcEM7YUFGaUJELFNBQUFBO2FBQ0FDLFFBQUFBO1FBRWpCLE1BQU1XLGFBQWE7WUFDakIsSUFBSSxDQUFDRCxPQUFPLEdBQUc7UUFDakI7UUFDQSxJQUFJLENBQUNYLE1BQU0sQ0FBQ2EsRUFBRSxDQUFDLFNBQVNEO1FBQ3hCLElBQUksQ0FBQ1osTUFBTSxDQUFDYSxFQUFFLENBQUMsU0FBU0Q7SUFDMUI7SUFFQVAsUUFBb0NTLEtBQVEsRUFBRUMsSUFBbUIsRUFBUTtRQUN2RSxJQUFJLElBQUksQ0FBQ0osT0FBTyxFQUFFO1lBQ2hCO1FBQ0Y7UUFFQSxJQUFJLENBQUNWLEtBQUssQ0FBQ2UsR0FBRyxDQUFDO1lBQ2JGLE9BQU9BO1lBQ1BDLE1BQU1FLEtBQUtDLFNBQVMsQ0FBQ0g7UUFDdkI7SUFDRjtJQUVBLE1BQU1QLE1BQXFCO1FBQ3pCLElBQUksSUFBSSxDQUFDRyxPQUFPLEVBQUU7WUFDaEI7UUFDRjtRQUVBLElBQUksQ0FBQ0EsT0FBTyxHQUFHO1FBRWYsSUFBSSxDQUFDVixLQUFLLENBQUNlLEdBQUcsQ0FBQztZQUNiRixPQUFPO1lBQ1BDLE1BQU07UUFDUjtRQUVBLE1BQU0sSUFBSU4sUUFBUSxDQUFDQyxVQUFZUyxXQUFXVCxTQUFTO1FBQ25ELElBQUksQ0FBQ1QsS0FBSyxDQUFDbUIsR0FBRyxDQUFDWixHQUFHO0lBQ3BCO0FBQ0YifQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdHJlYW0vc3NlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmFzdGlmeVJlcGx5LCBGYXN0aWZ5UmVxdWVzdCB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgdHlwZSB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIE5PVEUoSGF6ZSwgMjUxMTA2KTogY29udGV4dCBwcm92aWRlcuyXkOyEnCDsnbjsnpDrpbwg7LGE7JuM7KO866m0IGNyZWF0ZVNTRShldmVudHMp66eM7Jy866GcIOyCrOyaqSDqsIDriqVcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTU0VGYWN0b3J5PFQgZXh0ZW5kcyB6LlpvZE9iamVjdD4oXG4gIHNvY2tldDogRmFzdGlmeVJlcXVlc3RbXCJzb2NrZXRcIl0sXG4gIHJlcGx5OiBGYXN0aWZ5UmVwbHksXG4gIF9ldmVudHM6IFQsXG4pOiBTU0VDb25uZWN0aW9uPFQ+IHtcbiAgcmV0dXJuIG5ldyBTU0VDb25uZWN0aW9uSW1wbDxUPihzb2NrZXQsIHJlcGx5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tTU0VGYWN0b3J5PFQgZXh0ZW5kcyB6LlpvZE9iamVjdD4oX2V2ZW50czogVCk6IFNTRUNvbm5lY3Rpb248VD4ge1xuICByZXR1cm4ge1xuICAgIGdldCBjbG9zZWQoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBvbkNsb3NlOiAoX2NhbGxiYWNrKSA9PiB7fSxcbiAgICBwdWJsaXNoOiAoX2V2ZW50LCBfZGF0YSkgPT4ge30sXG4gICAgZW5kOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoKSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTU0VDb25uZWN0aW9uPFQgZXh0ZW5kcyB6LlpvZE9iamVjdD4ge1xuICBnZXQgY2xvc2VkKCk6IGJvb2xlYW47XG4gIG9uQ2xvc2UoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkO1xuICBwdWJsaXNoPEsgZXh0ZW5kcyBrZXlvZiB6LmluZmVyPFQ+PihldmVudDogSywgZGF0YTogei5pbmZlcjxUPltLXSk6IHZvaWQ7XG4gIGVuZCgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5jbGFzcyBTU0VDb25uZWN0aW9uSW1wbDxUIGV4dGVuZHMgei5ab2RPYmplY3Q+IGltcGxlbWVudHMgU1NFQ29ubmVjdGlvbjxUPiB7XG4gIHByaXZhdGUgX2Nsb3NlZCA9IGZhbHNlO1xuICBwcml2YXRlIF9jbG9zZUNhbGxiYWNrczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG1hcmtDbG9zZWQgPSAoKSA9PiB7XG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLmZpcmVDbG9zZUNhbGxiYWNrcygpO1xuICB9O1xuXG4gIGdldCBjbG9zZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Nsb3NlZDtcbiAgfVxuXG4gIG9uQ2xvc2UoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9jbG9zZUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIOy9nOuwseydhCDtlZwg67KI66eMIOyLpO2Wie2VmOqzoCDrsLDsl7TsnYQg67mE7JuMIOykkeuztSDtmLjstpzsnYQg67Cp7KeAXG4gIHByaXZhdGUgZmlyZUNsb3NlQ2FsbGJhY2tzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuX2Nsb3NlQ2FsbGJhY2tzO1xuICAgIHRoaXMuX2Nsb3NlQ2FsbGJhY2tzID0gW107XG4gICAgZm9yIChjb25zdCBjYiBvZiBjYWxsYmFja3MpIHtcbiAgICAgIGNiKCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzb2NrZXQ6IEZhc3RpZnlSZXF1ZXN0W1wic29ja2V0XCJdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVwbHk6IEZhc3RpZnlSZXBseSxcbiAgKSB7XG4gICAgdGhpcy5zb2NrZXQub24oXCJjbG9zZVwiLCB0aGlzLm1hcmtDbG9zZWQpO1xuICAgIHRoaXMuc29ja2V0Lm9uKFwiZXJyb3JcIiwgdGhpcy5tYXJrQ2xvc2VkKTtcbiAgfVxuXG4gIHB1Ymxpc2g8SyBleHRlbmRzIGtleW9mIHouaW5mZXI8VD4+KGV2ZW50OiBLLCBkYXRhOiB6LmluZmVyPFQ+W0tdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVwbHkuc3NlKHtcbiAgICAgIGV2ZW50OiBldmVudCBhcyBzdHJpbmcsXG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShkYXRhKSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGVuZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLnNvY2tldC5vZmYoXCJjbG9zZVwiLCB0aGlzLm1hcmtDbG9zZWQpO1xuICAgIHRoaXMuc29ja2V0Lm9mZihcImVycm9yXCIsIHRoaXMubWFya0Nsb3NlZCk7XG4gICAgdGhpcy5maXJlQ2xvc2VDYWxsYmFja3MoKTtcblxuICAgIHRoaXMucmVwbHkuc3NlKHtcbiAgICAgIGV2ZW50OiBcImVuZFwiLFxuICAgICAgZGF0YTogXCJFTkRcIixcbiAgICB9KTtcblxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDIwMCkpO1xuICAgIHRoaXMucmVwbHkucmF3LmVuZCgpO1xuICB9XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlU1NFRmFjdG9yeSIsInNvY2tldCIsInJlcGx5IiwiX2V2ZW50cyIsIlNTRUNvbm5lY3Rpb25JbXBsIiwiY3JlYXRlTW9ja1NTRUZhY3RvcnkiLCJjbG9zZWQiLCJvbkNsb3NlIiwiX2NhbGxiYWNrIiwicHVibGlzaCIsIl9ldmVudCIsIl9kYXRhIiwiZW5kIiwiUHJvbWlzZSIsInJlc29sdmUiLCJfY2xvc2VkIiwiX2Nsb3NlQ2FsbGJhY2tzIiwibWFya0Nsb3NlZCIsImZpcmVDbG9zZUNhbGxiYWNrcyIsImNhbGxiYWNrIiwicHVzaCIsImNhbGxiYWNrcyIsImNiIiwib24iLCJldmVudCIsImRhdGEiLCJzc2UiLCJKU09OIiwic3RyaW5naWZ5Iiwib2ZmIiwic2V0VGltZW91dCIsInJhdyJdLCJtYXBwaW5ncyI6IkFBR0EsNkVBQTZFO0FBQzdFLE9BQU8sU0FBU0EsaUJBQ2RDLE1BQWdDLEVBQ2hDQyxLQUFtQixFQUNuQkMsT0FBVTtJQUVWLE9BQU8sSUFBSUMsa0JBQXFCSCxRQUFRQztBQUMxQztBQUVBLE9BQU8sU0FBU0cscUJBQTRDRixPQUFVO0lBQ3BFLE9BQU87UUFDTCxJQUFJRyxVQUFTO1lBQ1gsT0FBTztRQUNUO1FBQ0FDLFNBQVMsQ0FBQ0MsYUFBZTtRQUN6QkMsU0FBUyxDQUFDQyxRQUFRQyxTQUFXO1FBQzdCQyxLQUFLLElBQU1DLFFBQVFDLE9BQU87SUFDNUI7QUFDRjtBQVNBLE1BQU1WOzs7SUFDSVcsVUFBVSxNQUFNO0lBQ2hCQyxrQkFBcUMsRUFBRSxDQUFDO0lBRS9CQyxhQUFhO1FBQzVCLElBQUksQ0FBQ0YsT0FBTyxHQUFHO1FBQ2YsSUFBSSxDQUFDRyxrQkFBa0I7SUFDekIsRUFBRTtJQUVGLElBQUlaLFNBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDUyxPQUFPO0lBQ3JCO0lBRUFSLFFBQVFZLFFBQW9CLEVBQVE7UUFDbEMsSUFBSSxDQUFDSCxlQUFlLENBQUNJLElBQUksQ0FBQ0Q7SUFDNUI7SUFFQSxpQ0FBaUM7SUFDekJELHFCQUEyQjtRQUNqQyxNQUFNRyxZQUFZLElBQUksQ0FBQ0wsZUFBZTtRQUN0QyxJQUFJLENBQUNBLGVBQWUsR0FBRyxFQUFFO1FBQ3pCLEtBQUssTUFBTU0sTUFBTUQsVUFBVztZQUMxQkM7UUFDRjtJQUNGO0lBRUEsWUFDRSxBQUFpQnJCLE1BQWdDLEVBQ2pELEFBQWlCQyxLQUFtQixDQUNwQzthQUZpQkQsU0FBQUE7YUFDQUMsUUFBQUE7UUFFakIsSUFBSSxDQUFDRCxNQUFNLENBQUNzQixFQUFFLENBQUMsU0FBUyxJQUFJLENBQUNOLFVBQVU7UUFDdkMsSUFBSSxDQUFDaEIsTUFBTSxDQUFDc0IsRUFBRSxDQUFDLFNBQVMsSUFBSSxDQUFDTixVQUFVO0lBQ3pDO0lBRUFSLFFBQW9DZSxLQUFRLEVBQUVDLElBQW1CLEVBQVE7UUFDdkUsSUFBSSxJQUFJLENBQUNWLE9BQU8sRUFBRTtZQUNoQjtRQUNGO1FBRUEsSUFBSSxDQUFDYixLQUFLLENBQUN3QixHQUFHLENBQUM7WUFDYkYsT0FBT0E7WUFDUEMsTUFBTUUsS0FBS0MsU0FBUyxDQUFDSDtRQUN2QjtJQUNGO0lBRUEsTUFBTWIsTUFBcUI7UUFDekIsSUFBSSxJQUFJLENBQUNHLE9BQU8sRUFBRTtZQUNoQjtRQUNGO1FBRUEsSUFBSSxDQUFDQSxPQUFPLEdBQUc7UUFDZixJQUFJLENBQUNkLE1BQU0sQ0FBQzRCLEdBQUcsQ0FBQyxTQUFTLElBQUksQ0FBQ1osVUFBVTtRQUN4QyxJQUFJLENBQUNoQixNQUFNLENBQUM0QixHQUFHLENBQUMsU0FBUyxJQUFJLENBQUNaLFVBQVU7UUFDeEMsSUFBSSxDQUFDQyxrQkFBa0I7UUFFdkIsSUFBSSxDQUFDaEIsS0FBSyxDQUFDd0IsR0FBRyxDQUFDO1lBQ2JGLE9BQU87WUFDUEMsTUFBTTtRQUNSO1FBRUEsTUFBTSxJQUFJWixRQUFRLENBQUNDLFVBQVlnQixXQUFXaEIsU0FBUztRQUNuRCxJQUFJLENBQUNaLEtBQUssQ0FBQzZCLEdBQUcsQ0FBQ25CLEdBQUc7SUFDcEI7QUFDRiJ9