sonamu 0.7.1 → 0.7.2

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 (35) hide show
  1. package/dist/ai/agents/types.d.ts +4 -3
  2. package/dist/ai/agents/types.d.ts.map +1 -1
  3. package/dist/ai/agents/types.js +1 -1
  4. package/dist/api/config.d.ts +4 -2
  5. package/dist/api/config.d.ts.map +1 -1
  6. package/dist/api/config.js +5 -2
  7. package/dist/api/decorators.d.ts.map +1 -1
  8. package/dist/api/decorators.js +3 -2
  9. package/dist/bin/cli.js +13 -13
  10. package/dist/bin/{hot-hook-register.d.ts → hmr-hook-register.d.ts} +3 -3
  11. package/dist/bin/hmr-hook-register.d.ts.map +1 -0
  12. package/dist/bin/{hot-hook-register.js → hmr-hook-register.js} +5 -5
  13. package/dist/bin/ts-loader-register.d.ts +2 -0
  14. package/dist/bin/ts-loader-register.d.ts.map +1 -0
  15. package/dist/bin/ts-loader-register.js +34 -0
  16. package/dist/database/base-model.d.ts +2 -34
  17. package/dist/database/base-model.d.ts.map +1 -1
  18. package/dist/database/base-model.js +3 -170
  19. package/dist/syncer/syncer.js +3 -3
  20. package/dist/template/zod-converter.js +4 -2
  21. package/dist/types/types.d.ts +2 -2
  22. package/package.json +8 -8
  23. package/src/ai/agents/types.ts +6 -3
  24. package/src/api/config.ts +16 -5
  25. package/src/api/decorators.ts +2 -1
  26. package/src/bin/cli.ts +13 -13
  27. package/src/bin/{hot-hook-register.ts → hmr-hook-register.ts} +4 -4
  28. package/src/bin/{loader-register.ts → ts-loader-register.ts} +2 -2
  29. package/src/database/base-model.ts +5 -236
  30. package/src/syncer/syncer.ts +2 -2
  31. package/src/template/zod-converter.ts +3 -1
  32. package/dist/bin/hot-hook-register.d.ts.map +0 -1
  33. package/dist/bin/loader-register.d.ts +0 -2
  34. package/dist/bin/loader-register.d.ts.map +0 -1
  35. package/dist/bin/loader-register.js +0 -34
@@ -1,9 +1,10 @@
1
- import type { ProviderOptions, Schema, Tool } from "@ai-sdk/provider-utils";
1
+ import type { ProviderOptions, Tool } from "@ai-sdk/provider-utils";
2
2
  import type { LanguageModel, StopCondition, ToolSet } from "ai";
3
+ import type * as z4 from "zod/v4";
3
4
  export type ToolChoiceLimited = "auto" | "none" | "required";
4
5
  export interface ToolDecoratorSchema<INPUT, OUTPUT = unknown> {
5
- input: Schema<INPUT>;
6
- output?: Schema<OUTPUT>;
6
+ input: z4.core.$ZodType<INPUT, any>;
7
+ output?: z4.core.$ZodType<OUTPUT, any>;
7
8
  }
8
9
  export interface ToolDecoratorOptions<INPUT, OUTPUT = unknown> {
9
10
  name?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ai/agents/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAEhE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAE7D,MAAM,WAAW,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAC1D,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3C,aAAa,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IACrD,aAAa,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IACrD,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,aAAa,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACtC,aAAa,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;IACxC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC9C"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ai/agents/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAChE,OAAO,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAC;AAElC,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAE7D,MAAM,WAAW,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAE1D,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEpC,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3C,aAAa,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IACrD,aAAa,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IACrD,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,aAAa,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACtC,aAAa,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;IACxC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC9C"}
@@ -1,3 +1,3 @@
1
1
  export { };
2
2
 
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9haS9hZ2VudHMvdHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm92aWRlck9wdGlvbnMsIFNjaGVtYSwgVG9vbCB9IGZyb20gXCJAYWktc2RrL3Byb3ZpZGVyLXV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IExhbmd1YWdlTW9kZWwsIFN0b3BDb25kaXRpb24sIFRvb2xTZXQgfSBmcm9tIFwiYWlcIjtcblxuZXhwb3J0IHR5cGUgVG9vbENob2ljZUxpbWl0ZWQgPSBcImF1dG9cIiB8IFwibm9uZVwiIHwgXCJyZXF1aXJlZFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xEZWNvcmF0b3JTY2hlbWE8SU5QVVQsIE9VVFBVVCA9IHVua25vd24+IHtcbiAgaW5wdXQ6IFNjaGVtYTxJTlBVVD47XG4gIG91dHB1dD86IFNjaGVtYTxPVVRQVVQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xEZWNvcmF0b3JPcHRpb25zPElOUFVULCBPVVRQVVQgPSB1bmtub3duPiB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBzY2hlbWE6IFRvb2xEZWNvcmF0b3JTY2hlbWE8SU5QVVQsIE9VVFBVVD47XG4gIG5lZWRzQXBwcm92YWw/OiBUb29sPElOUFVULCBPVVRQVVQ+W1wibmVlZHNBcHByb3ZhbFwiXTtcbiAgdG9Nb2RlbE91dHB1dD86IFRvb2w8SU5QVVQsIE9VVFBVVD5bXCJ0b01vZGVsT3V0cHV0XCJdO1xuICBwcm92aWRlck9wdGlvbnM/OiBQcm92aWRlck9wdGlvbnM7XG59XG5cbmV4cG9ydCB0eXBlIFJlZ2lzdGVyZWRUb29sRGVmaW5pdGlvbiA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc2NoZW1hOiBUb29sRGVjb3JhdG9yU2NoZW1hPHVua25vd24sIHVua25vd24+O1xuICBuZWVkc0FwcHJvdmFsPzogVG9vbFtcIm5lZWRzQXBwcm92YWxcIl07XG4gIHRvTW9kZWxPdXRwdXQ/OiBUb29sW1widG9Nb2RlbE91dHB1dFwiXTtcbiAgcHJvdmlkZXJPcHRpb25zPzogUHJvdmlkZXJPcHRpb25zO1xuICBtZXRob2Q6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd247XG4gIGZyb206IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRDb25maWcge1xuICBtb2RlbDogTGFuZ3VhZ2VNb2RlbDtcbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuICB0b29sQ2hvaWNlPzogVG9vbENob2ljZUxpbWl0ZWQ7XG4gIHByb3ZpZGVyT3B0aW9ucz86IFByb3ZpZGVyT3B0aW9ucztcbiAgc3RvcFdoZW4/OiBTdG9wQ29uZGl0aW9uPFRvb2xTZXQ+IHwgQXJyYXk8U3RvcENvbmRpdGlvbjxUb29sU2V0Pj47XG4gIGFjdGl2ZVRvb2xzPzogQXJyYXk8c3RyaW5nPjtcbiAgbWF4T3V0cHV0VG9rZW5zPzogbnVtYmVyO1xuICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbiAgdG9wUD86IG51bWJlcjtcbiAgdG9wSz86IG51bWJlcjtcbiAgcHJlc2VuY2VQZW5hbHR5PzogbnVtYmVyO1xuICBmcmVxdWVuY3lQZW5hbHR5PzogbnVtYmVyO1xuICBzdG9wU2VxdWVuY2VzPzogc3RyaW5nW107XG4gIHNlZWQ/OiBudW1iZXI7XG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQThCQSxXQWdCQyJ9
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9haS9hZ2VudHMvdHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm92aWRlck9wdGlvbnMsIFRvb2wgfSBmcm9tIFwiQGFpLXNkay9wcm92aWRlci11dGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBMYW5ndWFnZU1vZGVsLCBTdG9wQ29uZGl0aW9uLCBUb29sU2V0IH0gZnJvbSBcImFpXCI7XG5pbXBvcnQgdHlwZSAqIGFzIHo0IGZyb20gXCJ6b2QvdjRcIjtcblxuZXhwb3J0IHR5cGUgVG9vbENob2ljZUxpbWl0ZWQgPSBcImF1dG9cIiB8IFwibm9uZVwiIHwgXCJyZXF1aXJlZFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvb2xEZWNvcmF0b3JTY2hlbWE8SU5QVVQsIE9VVFBVVCA9IHVua25vd24+IHtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiB6b2QgdHlwZeydmCDtg4DsnoUg7LaU66Gg7JeQIO2VhOyalFxuICBpbnB1dDogejQuY29yZS4kWm9kVHlwZTxJTlBVVCwgYW55PjtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiB6b2QgdHlwZeydmCDtg4DsnoUg7LaU66Gg7JeQIO2VhOyalFxuICBvdXRwdXQ/OiB6NC5jb3JlLiRab2RUeXBlPE9VVFBVVCwgYW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb29sRGVjb3JhdG9yT3B0aW9uczxJTlBVVCwgT1VUUFVUID0gdW5rbm93bj4ge1xuICBuYW1lPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc2NoZW1hOiBUb29sRGVjb3JhdG9yU2NoZW1hPElOUFVULCBPVVRQVVQ+O1xuICBuZWVkc0FwcHJvdmFsPzogVG9vbDxJTlBVVCwgT1VUUFVUPltcIm5lZWRzQXBwcm92YWxcIl07XG4gIHRvTW9kZWxPdXRwdXQ/OiBUb29sPElOUFVULCBPVVRQVVQ+W1widG9Nb2RlbE91dHB1dFwiXTtcbiAgcHJvdmlkZXJPcHRpb25zPzogUHJvdmlkZXJPcHRpb25zO1xufVxuXG5leHBvcnQgdHlwZSBSZWdpc3RlcmVkVG9vbERlZmluaXRpb24gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHNjaGVtYTogVG9vbERlY29yYXRvclNjaGVtYTx1bmtub3duLCB1bmtub3duPjtcbiAgbmVlZHNBcHByb3ZhbD86IFRvb2xbXCJuZWVkc0FwcHJvdmFsXCJdO1xuICB0b01vZGVsT3V0cHV0PzogVG9vbFtcInRvTW9kZWxPdXRwdXRcIl07XG4gIHByb3ZpZGVyT3B0aW9ucz86IFByb3ZpZGVyT3B0aW9ucztcbiAgbWV0aG9kOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duO1xuICBmcm9tOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50Q29uZmlnIHtcbiAgbW9kZWw6IExhbmd1YWdlTW9kZWw7XG4gIGluc3RydWN0aW9ucz86IHN0cmluZztcbiAgdG9vbENob2ljZT86IFRvb2xDaG9pY2VMaW1pdGVkO1xuICBwcm92aWRlck9wdGlvbnM/OiBQcm92aWRlck9wdGlvbnM7XG4gIHN0b3BXaGVuPzogU3RvcENvbmRpdGlvbjxUb29sU2V0PiB8IEFycmF5PFN0b3BDb25kaXRpb248VG9vbFNldD4+O1xuICBhY3RpdmVUb29scz86IEFycmF5PHN0cmluZz47XG4gIG1heE91dHB1dFRva2Vucz86IG51bWJlcjtcbiAgdGVtcGVyYXR1cmU/OiBudW1iZXI7XG4gIHRvcFA/OiBudW1iZXI7XG4gIHRvcEs/OiBudW1iZXI7XG4gIHByZXNlbmNlUGVuYWx0eT86IG51bWJlcjtcbiAgZnJlcXVlbmN5UGVuYWx0eT86IG51bWJlcjtcbiAgc3RvcFNlcXVlbmNlcz86IHN0cmluZ1tdO1xuICBzZWVkPzogbnVtYmVyO1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPjtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQ0EsV0FnQkMifQ==
@@ -70,9 +70,11 @@ export type SonamuServerOptions = {
70
70
  onError?: (error: Error, request: FastifyRequest, reply: FastifyReply) => Promise<void> | void;
71
71
  };
72
72
  };
73
- export type SonamuConfigExport = SonamuConfig | Promise<SonamuConfig>;
74
- export declare function defineConfig(config: SonamuConfig): SonamuConfig;
73
+ export type SonamuConfigExport = SonamuConfig | Promise<SonamuConfig> | (() => SonamuConfig) | (() => Promise<SonamuConfig>);
74
+ export declare function defineConfig(config: SonamuConfig): Promise<SonamuConfig>;
75
75
  export declare function defineConfig(config: Promise<SonamuConfig>): Promise<SonamuConfig>;
76
+ export declare function defineConfig(config: () => SonamuConfig): Promise<SonamuConfig>;
77
+ export declare function defineConfig(config: () => Promise<SonamuConfig>): Promise<SonamuConfig>;
76
78
  /**
77
79
  * sonamu.config.ts 파일을 로드합니다.
78
80
  * 이 설정 파일은 환경에 따라 다른 경로에 있을 수 있습니다.
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  export function defineConfig(config) {
2
- return config;
2
+ if (typeof config === "function") {
3
+ return Promise.resolve(config());
4
+ }
5
+ return Promise.resolve(config);
3
6
  }
4
7
  /**
5
8
  * sonamu.config.ts 파일을 로드합니다.
@@ -22,4 +25,4 @@ export function defineConfig(config) {
22
25
  return config;
23
26
  }
24
27
 
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmFzdGlmeUNvcnNPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L2NvcnNcIjtcbmltcG9ydCB0eXBlIHsgRmFzdGlmeUZvcm1ib2R5T3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9mb3JtYm9keVwiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5TXVsdGlwYXJ0T3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9tdWx0aXBhcnRcIjtcbmltcG9ydCB0eXBlIHsgRGVzZXJpYWxpemVGdW5jdGlvbiwgU2VyaWFsaXplRnVuY3Rpb24gfSBmcm9tIFwiQGZhc3RpZnkvcGFzc3BvcnQvZGlzdC9BdXRoZW50aWNhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3VyZVNlc3Npb25QbHVnaW5PcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L3NlY3VyZS1zZXNzaW9uXCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlTdGF0aWNPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L3N0YXRpY1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UsIEZhc3RpZnlSZXBseSwgRmFzdGlmeVJlcXVlc3QsIEZhc3RpZnlTZXJ2ZXJPcHRpb25zIH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCB0eXBlIHsgUXNQbHVnaW5PcHRpb25zIH0gZnJvbSBcImZhc3RpZnktcXNcIjtcbmltcG9ydCB0eXBlIHsgU3NlUGx1Z2luT3B0aW9ucyB9IGZyb20gXCJmYXN0aWZ5LXNzZS12Mi9saWIvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgdHlwZSB7IERyaXZlciB9IGZyb20gXCIuLi9maWxlLXN0b3JhZ2UvZHJpdmVyXCI7XG5pbXBvcnQgdHlwZSB7IFNvbmFtdUZhc3RpZnlDb25maWcgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgRGF0YWJhc2VDb25maWcgPSBPbWl0PEtuZXguQ29uZmlnLCBcImNvbm5lY3Rpb25cIj4gJiB7XG4gIGNvbm5lY3Rpb24/OiBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZztcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdUNvbmZpZyA9IHtcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmc7XG5cbiAgYXBpOiB7XG4gICAgZGlyOiBzdHJpbmc7XG4gICAgcm91dGU6IHtcbiAgICAgIHByZWZpeDogc3RyaW5nO1xuICAgIH07XG4gICAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIH07XG4gIHN5bmM6IHtcbiAgICB0YXJnZXRzOiBzdHJpbmdbXTsgLy8gXCJ3ZWJcIiwgXCJhcHBcIiDrk7FcbiAgfTtcbiAgdWk/OiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICB9O1xuXG4gIGRhdGFiYXNlOiB7XG4gICAgLy8g642w7J207YSw67Kg7J207IqkXG4gICAgZGF0YWJhc2U/OiBcInBvc3RncmVzcWxcIjtcbiAgICAvLyDquLDrs7gg642w7J207YSw67Kg7J207IqkIOydtOumhFxuICAgIG5hbWU6IHN0cmluZztcbiAgICAvLyDrqqjrk6Ag7ZmY6rK97JeQIOyggeyaqeuQoCDquLDrs7ggS25leCDsmLXshZhcbiAgICBkZWZhdWx0T3B0aW9uczogRGF0YWJhc2VDb25maWc7XG4gICAgLy8g7ZmY6rK967OEIOyEpOyglVxuICAgIGVudmlyb25tZW50cz86IHtcbiAgICAgIGRldmVsb3BtZW50PzogRGF0YWJhc2VDb25maWc7XG4gICAgICBkZXZlbG9wbWVudF9zbGF2ZT86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgcHJvZHVjdGlvbj86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgcHJvZHVjdGlvbl9zbGF2ZT86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgcmVtb3RlX2ZpeHR1cmU/OiBEYXRhYmFzZUNvbmZpZztcbiAgICB9O1xuICB9O1xuXG4gIHNlcnZlcjogU29uYW11U2VydmVyT3B0aW9ucztcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdVNlcnZlck9wdGlvbnMgPSB7XG4gIGZhc3RpZnk/OiBGYXN0aWZ5U2VydmVyT3B0aW9ucztcblxuICBsaXN0ZW4/OiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICAgIGhvc3Q/OiBzdHJpbmc7XG4gIH07XG5cbiAgcGx1Z2lucz86IHtcbiAgICBjb3JzPzogYm9vbGVhbiB8IEZhc3RpZnlDb3JzT3B0aW9ucztcbiAgICBmb3JtYm9keT86IGJvb2xlYW4gfCBGYXN0aWZ5Rm9ybWJvZHlPcHRpb25zO1xuICAgIG11bHRpcGFydD86IGJvb2xlYW4gfCBGYXN0aWZ5TXVsdGlwYXJ0T3B0aW9ucztcbiAgICBxcz86IGJvb2xlYW4gfCBRc1BsdWdpbk9wdGlvbnM7XG4gICAgc3NlPzogYm9vbGVhbiB8IFNzZVBsdWdpbk9wdGlvbnM7XG4gICAgc3RhdGljPzogYm9vbGVhbiB8IEZhc3RpZnlTdGF0aWNPcHRpb25zO1xuICAgIHNlc3Npb24/OiBib29sZWFuIHwgU2VjdXJlU2Vzc2lvblBsdWdpbk9wdGlvbnM7XG5cbiAgICBjdXN0b20/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IHZvaWQ7XG4gIH07XG5cbiAgYXV0aD86XG4gICAgfCBib29sZWFuXG4gICAgfCB7XG4gICAgICAgIHVzZXJTZXJpYWxpemVyOiBTZXJpYWxpemVGdW5jdGlvbjx1bmtub3duLCB1bmtub3duPjtcbiAgICAgICAgdXNlckRlc2VyaWFsaXplcjogRGVzZXJpYWxpemVGdW5jdGlvbjx1bmtub3duLCB1bmtub3duPjtcbiAgICAgIH07XG5cbiAgYXBpQ29uZmlnOiBTb25hbXVGYXN0aWZ5Q29uZmlnO1xuXG4gIHN0b3JhZ2U/OiBEcml2ZXI7XG5cbiAgbGlmZWN5Y2xlPzoge1xuICAgIG9uU3RhcnQ/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAgIG9uU2h1dGRvd24/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAgIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yLCByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCwgcmVwbHk6IEZhc3RpZnlSZXBseSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBTb25hbXVDb25maWdFeHBvcnQgPSBTb25hbXVDb25maWcgfCBQcm9taXNlPFNvbmFtdUNvbmZpZz47XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb25maWcoY29uZmlnOiBTb25hbXVDb25maWcpOiBTb25hbXVDb25maWc7XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29uZmlnKGNvbmZpZzogUHJvbWlzZTxTb25hbXVDb25maWc+KTogUHJvbWlzZTxTb25hbXVDb25maWc+O1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbmZpZyhjb25maWc6IFNvbmFtdUNvbmZpZ0V4cG9ydCk6IFNvbmFtdUNvbmZpZ0V4cG9ydCB7XG4gIHJldHVybiBjb25maWc7XG59XG5cbi8qKlxuICogc29uYW11LmNvbmZpZy50cyDtjIzsnbzsnYQg66Gc65Oc7ZWp64uI64ukLlxuICog7J20IOyEpOyglSDtjIzsnbzsnYAg7ZmY6rK97JeQIOuUsOudvCDri6Trpbgg6rK966Gc7JeQIOyeiOydhCDsiJgg7J6I7Iq164uI64ukLlxuICogZGlzdOulvCDruYzrk5ztlZjripQg7ZmY6rK97J20652866m0IGRpc3Qg67CU66GcIOyVhOuemOyXkCDsnojsnYQg6rKD7J206rOgKGNsaS13cmFwcGVyLnRz7JeQ7IScIOu5jOuTnCksXG4gKiDqt7jroIfsp4Ag7JWK7J2AIO2ZmOqyveydtOudvOuptCDtlITroZzsoJ3tirgg66Oo7Yq47JeQIOyeiOydhCDqsoPsnoXri4jri6QuXG4gKlxuICog7J20IO2VqOyImOuKlCDsnZjrj4TsoIHsnLzroZwg64uk66W4IOydmOyhtOyEseydmCDsgqzsmqnsnYQg7LWc64yA7ZWcIOuwsOygnO2VmOyYgOyKteuLiOuLpC5cbiAqIOydtOuKlCDsi6Ttlokg7LSI6riw7JeQIOy1nOuMgO2VnCDruaDrpbTqsowg7ISk7KCV7J2EIOydveyWtOyYrCDsiJgg7J6I64+E66GdIO2VmOq4sCDsnITtlajsnoXri4jri6QuXG4gKiDrlLDrnbzshJwg6rK966GcIGNvbmNhdOqzvCBVUkwgc2NoZW1lIOy2lOqwgOuPhCDri6jsiJztlZwg66y47J6Q7Je0IOyhsOyekeycvOuhnCDsspjrpqztlZjsmIDsirXri4jri6QuXG4gKlxuICogQHBhcmFtIHJvb3RQYXRoXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZENvbmZpZyhyb290UGF0aDogc3RyaW5nKTogUHJvbWlzZTxTb25hbXVDb25maWc+IHtcbiAgY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgY29uc3QgY29uZmlnUGF0aCA9XG4gICAgcHJvY2Vzcy5lbnYuSE9UID09PSBcInllc1wiIHx8IHByb2Nlc3MuZW52LlZJVEVTVCA9PT0gXCJ0cnVlXCJcbiAgICAgID8gYCR7cm9vdFBhdGh9L3NvbmFtdS5jb25maWcudHNgXG4gICAgICA6IGAke3Jvb3RQYXRofS9kaXN0L3NvbmFtdS5jb25maWcuanNgO1xuICBjb25zdCB7IGRlZmF1bHQ6IGNvbmZpZyB9ID0gYXdhaXQgaW1wb3J0KGBmaWxlOi8vJHtjb25maWdQYXRofWApO1xuICBjb25zdCBpbXBvcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydDtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwidGVzdFwiICYmXG4gICAgY29uc29sZS5sb2coYFtUSU1JTkddIGxvYWRDb25maWcgdG9vayAke2ltcG9ydFRpbWUudG9GaXhlZCgyKX1tc2ApO1xuICByZXR1cm4gY29uZmlnO1xufVxuIl0sIm5hbWVzIjpbImRlZmluZUNvbmZpZyIsImNvbmZpZyIsImxvYWRDb25maWciLCJyb290UGF0aCIsInN0YXJ0IiwicGVyZm9ybWFuY2UiLCJub3ciLCJjb25maWdQYXRoIiwicHJvY2VzcyIsImVudiIsIkhPVCIsIlZJVEVTVCIsImRlZmF1bHQiLCJpbXBvcnRUaW1lIiwiTk9ERV9FTlYiLCJjb25zb2xlIiwibG9nIiwidG9GaXhlZCJdLCJtYXBwaW5ncyI6IkFBZ0dBLE9BQU8sU0FBU0EsYUFBYUMsTUFBMEI7SUFDckQsT0FBT0E7QUFDVDtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sZUFBZUMsV0FBV0MsUUFBZ0I7SUFDL0MsTUFBTUMsUUFBUUMsWUFBWUMsR0FBRztJQUM3QixNQUFNQyxhQUNKQyxRQUFRQyxHQUFHLENBQUNDLEdBQUcsS0FBSyxTQUFTRixRQUFRQyxHQUFHLENBQUNFLE1BQU0sS0FBSyxTQUNoRCxHQUFHUixTQUFTLGlCQUFpQixDQUFDLEdBQzlCLEdBQUdBLFNBQVMsc0JBQXNCLENBQUM7SUFDekMsTUFBTSxFQUFFUyxTQUFTWCxNQUFNLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRU0sWUFBWTtJQUMvRCxNQUFNTSxhQUFhUixZQUFZQyxHQUFHLEtBQUtGO0lBQ3ZDSSxRQUFRQyxHQUFHLENBQUNLLFFBQVEsS0FBSyxVQUN2QkMsUUFBUUMsR0FBRyxDQUFDLENBQUMseUJBQXlCLEVBQUVILFdBQVdJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNuRSxPQUFPaEI7QUFDVCJ9
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmFzdGlmeUNvcnNPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L2NvcnNcIjtcbmltcG9ydCB0eXBlIHsgRmFzdGlmeUZvcm1ib2R5T3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9mb3JtYm9keVwiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5TXVsdGlwYXJ0T3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9tdWx0aXBhcnRcIjtcbmltcG9ydCB0eXBlIHsgRGVzZXJpYWxpemVGdW5jdGlvbiwgU2VyaWFsaXplRnVuY3Rpb24gfSBmcm9tIFwiQGZhc3RpZnkvcGFzc3BvcnQvZGlzdC9BdXRoZW50aWNhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IFNlY3VyZVNlc3Npb25QbHVnaW5PcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L3NlY3VyZS1zZXNzaW9uXCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlTdGF0aWNPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L3N0YXRpY1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UsIEZhc3RpZnlSZXBseSwgRmFzdGlmeVJlcXVlc3QsIEZhc3RpZnlTZXJ2ZXJPcHRpb25zIH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCB0eXBlIHsgUXNQbHVnaW5PcHRpb25zIH0gZnJvbSBcImZhc3RpZnktcXNcIjtcbmltcG9ydCB0eXBlIHsgU3NlUGx1Z2luT3B0aW9ucyB9IGZyb20gXCJmYXN0aWZ5LXNzZS12Mi9saWIvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgdHlwZSB7IERyaXZlciB9IGZyb20gXCIuLi9maWxlLXN0b3JhZ2UvZHJpdmVyXCI7XG5pbXBvcnQgdHlwZSB7IFNvbmFtdUZhc3RpZnlDb25maWcgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgRGF0YWJhc2VDb25maWcgPSBPbWl0PEtuZXguQ29uZmlnLCBcImNvbm5lY3Rpb25cIj4gJiB7XG4gIGNvbm5lY3Rpb24/OiBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZztcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdUNvbmZpZyA9IHtcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmc7XG5cbiAgYXBpOiB7XG4gICAgZGlyOiBzdHJpbmc7XG4gICAgcm91dGU6IHtcbiAgICAgIHByZWZpeDogc3RyaW5nO1xuICAgIH07XG4gICAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIH07XG4gIHN5bmM6IHtcbiAgICB0YXJnZXRzOiBzdHJpbmdbXTsgLy8gXCJ3ZWJcIiwgXCJhcHBcIiDrk7FcbiAgfTtcbiAgdWk/OiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICB9O1xuXG4gIGRhdGFiYXNlOiB7XG4gICAgLy8g642w7J207YSw67Kg7J207IqkXG4gICAgZGF0YWJhc2U/OiBcInBvc3RncmVzcWxcIjtcbiAgICAvLyDquLDrs7gg642w7J207YSw67Kg7J207IqkIOydtOumhFxuICAgIG5hbWU6IHN0cmluZztcbiAgICAvLyDrqqjrk6Ag7ZmY6rK97JeQIOyggeyaqeuQoCDquLDrs7ggS25leCDsmLXshZhcbiAgICBkZWZhdWx0T3B0aW9uczogRGF0YWJhc2VDb25maWc7XG4gICAgLy8g7ZmY6rK967OEIOyEpOyglVxuICAgIGVudmlyb25tZW50cz86IHtcbiAgICAgIGRldmVsb3BtZW50PzogRGF0YWJhc2VDb25maWc7XG4gICAgICBkZXZlbG9wbWVudF9zbGF2ZT86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgcHJvZHVjdGlvbj86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgcHJvZHVjdGlvbl9zbGF2ZT86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgcmVtb3RlX2ZpeHR1cmU/OiBEYXRhYmFzZUNvbmZpZztcbiAgICB9O1xuICB9O1xuXG4gIHNlcnZlcjogU29uYW11U2VydmVyT3B0aW9ucztcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdVNlcnZlck9wdGlvbnMgPSB7XG4gIGZhc3RpZnk/OiBGYXN0aWZ5U2VydmVyT3B0aW9ucztcblxuICBsaXN0ZW4/OiB7XG4gICAgcG9ydDogbnVtYmVyO1xuICAgIGhvc3Q/OiBzdHJpbmc7XG4gIH07XG5cbiAgcGx1Z2lucz86IHtcbiAgICBjb3JzPzogYm9vbGVhbiB8IEZhc3RpZnlDb3JzT3B0aW9ucztcbiAgICBmb3JtYm9keT86IGJvb2xlYW4gfCBGYXN0aWZ5Rm9ybWJvZHlPcHRpb25zO1xuICAgIG11bHRpcGFydD86IGJvb2xlYW4gfCBGYXN0aWZ5TXVsdGlwYXJ0T3B0aW9ucztcbiAgICBxcz86IGJvb2xlYW4gfCBRc1BsdWdpbk9wdGlvbnM7XG4gICAgc3NlPzogYm9vbGVhbiB8IFNzZVBsdWdpbk9wdGlvbnM7XG4gICAgc3RhdGljPzogYm9vbGVhbiB8IEZhc3RpZnlTdGF0aWNPcHRpb25zO1xuICAgIHNlc3Npb24/OiBib29sZWFuIHwgU2VjdXJlU2Vzc2lvblBsdWdpbk9wdGlvbnM7XG5cbiAgICBjdXN0b20/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IHZvaWQ7XG4gIH07XG5cbiAgYXV0aD86XG4gICAgfCBib29sZWFuXG4gICAgfCB7XG4gICAgICAgIHVzZXJTZXJpYWxpemVyOiBTZXJpYWxpemVGdW5jdGlvbjx1bmtub3duLCB1bmtub3duPjtcbiAgICAgICAgdXNlckRlc2VyaWFsaXplcjogRGVzZXJpYWxpemVGdW5jdGlvbjx1bmtub3duLCB1bmtub3duPjtcbiAgICAgIH07XG5cbiAgYXBpQ29uZmlnOiBTb25hbXVGYXN0aWZ5Q29uZmlnO1xuXG4gIHN0b3JhZ2U/OiBEcml2ZXI7XG5cbiAgbGlmZWN5Y2xlPzoge1xuICAgIG9uU3RhcnQ/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAgIG9uU2h1dGRvd24/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAgIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yLCByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCwgcmVwbHk6IEZhc3RpZnlSZXBseSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gIH07XG59O1xuXG4vLyBOT1RFKEhhemUsIDI1MTIwOSk6IGNvbmZpZ+yXkOuKlCBULCBQcm9taXNlPFQ+LCAoKSA9PiBULCAoKSA9PiBQcm9taXNlPFQ+6rCAIOuqqOuRkCDsmKwg7IiYIOyeiOyWtOyVvCDtlaguXG5leHBvcnQgdHlwZSBTb25hbXVDb25maWdFeHBvcnQgPVxuICB8IFNvbmFtdUNvbmZpZ1xuICB8IFByb21pc2U8U29uYW11Q29uZmlnPlxuICB8ICgoKSA9PiBTb25hbXVDb25maWcpXG4gIHwgKCgpID0+IFByb21pc2U8U29uYW11Q29uZmlnPik7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb25maWcoY29uZmlnOiBTb25hbXVDb25maWcpOiBQcm9taXNlPFNvbmFtdUNvbmZpZz47XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29uZmlnKGNvbmZpZzogUHJvbWlzZTxTb25hbXVDb25maWc+KTogUHJvbWlzZTxTb25hbXVDb25maWc+O1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbmZpZyhjb25maWc6ICgpID0+IFNvbmFtdUNvbmZpZyk6IFByb21pc2U8U29uYW11Q29uZmlnPjtcbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVDb25maWcoY29uZmlnOiAoKSA9PiBQcm9taXNlPFNvbmFtdUNvbmZpZz4pOiBQcm9taXNlPFNvbmFtdUNvbmZpZz47XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29uZmlnKGNvbmZpZzogU29uYW11Q29uZmlnRXhwb3J0KTogUHJvbWlzZTxTb25hbXVDb25maWc+IHtcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY29uZmlnKCkpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb25maWcpO1xufVxuXG4vKipcbiAqIHNvbmFtdS5jb25maWcudHMg7YyM7J287J2EIOuhnOuTnO2VqeuLiOuLpC5cbiAqIOydtCDshKTsoJUg7YyM7J287J2AIO2ZmOqyveyXkCDrlLDrnbwg64uk66W4IOqyveuhnOyXkCDsnojsnYQg7IiYIOyeiOyKteuLiOuLpC5cbiAqIGRpc3Trpbwg67mM65Oc7ZWY64qUIO2ZmOqyveydtOudvOuptCBkaXN0IOuwlOuhnCDslYTrnpjsl5Ag7J6I7J2EIOqyg+ydtOqzoChjbGktd3JhcHBlci50c+yXkOyEnCDruYzrk5wpLFxuICog6re466CH7KeAIOyViuydgCDtmZjqsr3snbTrnbzrqbQg7ZSE66Gc7KCd7Yq4IOujqO2KuOyXkCDsnojsnYQg6rKD7J6F64uI64ukLlxuICpcbiAqIOydtCDtlajsiJjripQg7J2Y64+E7KCB7Jy866GcIOuLpOuluCDsnZjsobTshLHsnZgg7IKs7Jqp7J2EIOy1nOuMgO2VnCDrsLDsoJztlZjsmIDsirXri4jri6QuXG4gKiDsnbTripQg7Iuk7ZaJIOy0iOq4sOyXkCDstZzrjIDtlZwg67mg66W06rKMIOyEpOygleydhCDsnb3slrTsmKwg7IiYIOyeiOuPhOuhnSDtlZjquLAg7JyE7ZWo7J6F64uI64ukLlxuICog65Sw65287IScIOqyveuhnCBjb25jYXTqs7wgVVJMIHNjaGVtZSDstpTqsIDrj4Qg64uo7Iic7ZWcIOusuOyekOyXtCDsobDsnpHsnLzroZwg7LKY66as7ZWY7JiA7Iq164uI64ukLlxuICpcbiAqIEBwYXJhbSByb290UGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRDb25maWcocm9vdFBhdGg6IHN0cmluZyk6IFByb21pc2U8U29uYW11Q29uZmlnPiB7XG4gIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPVxuICAgIHByb2Nlc3MuZW52LkhPVCA9PT0gXCJ5ZXNcIiB8fCBwcm9jZXNzLmVudi5WSVRFU1QgPT09IFwidHJ1ZVwiXG4gICAgICA/IGAke3Jvb3RQYXRofS9zb25hbXUuY29uZmlnLnRzYFxuICAgICAgOiBgJHtyb290UGF0aH0vZGlzdC9zb25hbXUuY29uZmlnLmpzYDtcbiAgY29uc3QgeyBkZWZhdWx0OiBjb25maWcgfSA9IGF3YWl0IGltcG9ydChgZmlsZTovLyR7Y29uZmlnUGF0aH1gKTtcbiAgY29uc3QgaW1wb3J0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnQ7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInRlc3RcIiAmJlxuICAgIGNvbnNvbGUubG9nKGBbVElNSU5HXSBsb2FkQ29uZmlnIHRvb2sgJHtpbXBvcnRUaW1lLnRvRml4ZWQoMil9bXNgKTtcbiAgcmV0dXJuIGNvbmZpZztcbn1cbiJdLCJuYW1lcyI6WyJkZWZpbmVDb25maWciLCJjb25maWciLCJQcm9taXNlIiwicmVzb2x2ZSIsImxvYWRDb25maWciLCJyb290UGF0aCIsInN0YXJ0IiwicGVyZm9ybWFuY2UiLCJub3ciLCJjb25maWdQYXRoIiwicHJvY2VzcyIsImVudiIsIkhPVCIsIlZJVEVTVCIsImRlZmF1bHQiLCJpbXBvcnRUaW1lIiwiTk9ERV9FTlYiLCJjb25zb2xlIiwibG9nIiwidG9GaXhlZCJdLCJtYXBwaW5ncyI6IkFBdUdBLE9BQU8sU0FBU0EsYUFBYUMsTUFBMEI7SUFDckQsSUFBSSxPQUFPQSxXQUFXLFlBQVk7UUFDaEMsT0FBT0MsUUFBUUMsT0FBTyxDQUFDRjtJQUN6QjtJQUVBLE9BQU9DLFFBQVFDLE9BQU8sQ0FBQ0Y7QUFDekI7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLGVBQWVHLFdBQVdDLFFBQWdCO0lBQy9DLE1BQU1DLFFBQVFDLFlBQVlDLEdBQUc7SUFDN0IsTUFBTUMsYUFDSkMsUUFBUUMsR0FBRyxDQUFDQyxHQUFHLEtBQUssU0FBU0YsUUFBUUMsR0FBRyxDQUFDRSxNQUFNLEtBQUssU0FDaEQsR0FBR1IsU0FBUyxpQkFBaUIsQ0FBQyxHQUM5QixHQUFHQSxTQUFTLHNCQUFzQixDQUFDO0lBQ3pDLE1BQU0sRUFBRVMsU0FBU2IsTUFBTSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUVRLFlBQVk7SUFDL0QsTUFBTU0sYUFBYVIsWUFBWUMsR0FBRyxLQUFLRjtJQUN2Q0ksUUFBUUMsR0FBRyxDQUFDSyxRQUFRLEtBQUssVUFDdkJDLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLHlCQUF5QixFQUFFSCxXQUFXSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbkUsT0FBT2xCO0FBQ1QifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/api/decorators.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAI7D,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,IAAI,CAAC;IACZ,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,IAAI,CAAC;CACZ;AACD,MAAM,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC;AACvC,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,iBAAiB,GAAG,KAAK,GAAG,cAAc,CAAC;AACjF,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,WAAW,CAAC,EACR,YAAY,GACZ,WAAW,GACX,UAAU,GACV,kBAAkB,GAClB,0BAA0B,CAAC;IAC/B,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,KAAK,CAAC;IAEZ,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CAC9B,CAAC;AACF,eAAO,MAAM,cAAc,EAAE;IAC3B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,mBAAmB,CAAC;IAC7B,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,aAAa,CAAC,EAAE,sBAAsB,CAAC;CACxC,EAAO,CAAC;AACT,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,mBAAmB,CAAC;IAC7B,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,cAAc,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC;IACzC,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;CAC1B,CAAC;AACF,KAAK,eAAe,GAAG;IAAE,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAkBzD,wBAAgB,GAAG,CAAC,OAAO,GAAE,mBAAwB,IAQ3C,QAAQ,eAAe,EAAE,aAAa,MAAM,UAyCrD;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,sBAAsB,IAC5C,QAAQ,eAAe,EAAE,aAAa,MAAM,UAqDrD;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,IAGtD,SAAS,eAAe,EAAE,cAAc,MAAM,EAAE,YAAY,kBAAkB,wBA8CvF;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,OAAO,GAAE,sBAA2B,IACjD,SAAS,eAAe,EAAE,cAAc,MAAM,EAAE,YAAY,kBAAkB,wBAgEvF"}
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/api/decorators.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { isEqual } from "radashi";
4
4
  import { DB } from "../database/db.js";
5
5
  import { PuriTransactionWrapper } from "../database/puri-wrapper.js";
6
6
  import { Sonamu } from "./sonamu.js";
7
+ import { UpsertBuilder } from "../database/upsert-builder.js";
7
8
  export const registeredApis = [];
8
9
  const DECORATOR_TYPES = {
9
10
  API: Symbol("api"),
@@ -109,7 +110,7 @@ export function transactional(options = {}) {
109
110
  const startTransaction = async ()=>{
110
111
  const puri = this.getPuri(dbPreset);
111
112
  return puri.knex.transaction(async (trx)=>{
112
- const trxWrapper = new PuriTransactionWrapper(trx, this.getUpsertBuilder());
113
+ const trxWrapper = new PuriTransactionWrapper(trx, new UpsertBuilder());
113
114
  // TransactionContext에 트랜잭션 저장
114
115
  DB.getTransactionContext().setTransaction(dbPreset, trxWrapper);
115
116
  try {
@@ -232,4 +233,4 @@ newOptions) {
232
233
  });
233
234
  }
234
235
 
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvZGVjb3JhdG9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB0eXBlIHsgSFRUUE1ldGhvZHMgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHR5cGUgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlTW9kZWxDbGFzcyB9IGZyb20gXCIuLi9kYXRhYmFzZS9iYXNlLW1vZGVsXCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuLi9kYXRhYmFzZS9kYlwiO1xuaW1wb3J0IHtcbiAgUHVyaVRyYW5zYWN0aW9uV3JhcHBlcixcbiAgdHlwZSBQdXJpV3JhcHBlcixcbiAgdHlwZSBUcmFuc2FjdGlvbmFsT3B0aW9ucyxcbn0gZnJvbSBcIi4uL2RhdGFiYXNlL3B1cmktd3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgeyBBcGlQYXJhbSwgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFVwbG9hZENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi9zb25hbXVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHdWFyZEtleXMge1xuICBxdWVyeTogdHJ1ZTtcbiAgYWRtaW46IHRydWU7XG4gIHVzZXI6IHRydWU7XG59XG5leHBvcnQgdHlwZSBHdWFyZEtleSA9IGtleW9mIEd1YXJkS2V5cztcbmV4cG9ydCB0eXBlIFNlcnZpY2VDbGllbnQgPSBcImF4aW9zXCIgfCBcImF4aW9zLW11bHRpcGFydFwiIHwgXCJzd3JcIiB8IFwid2luZG93LWZldGNoXCI7XG5leHBvcnQgdHlwZSBBcGlEZWNvcmF0b3JPcHRpb25zID0ge1xuICBodHRwTWV0aG9kPzogSFRUUE1ldGhvZHM7XG4gIGNvbnRlbnRUeXBlPzpcbiAgICB8IFwidGV4dC9wbGFpblwiXG4gICAgfCBcInRleHQvaHRtbFwiXG4gICAgfCBcInRleHQveG1sXCJcbiAgICB8IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgfCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO1xuICBjbGllbnRzPzogU2VydmljZUNsaWVudFtdO1xuICBwYXRoPzogc3RyaW5nO1xuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIGd1YXJkcz86IEd1YXJkS2V5W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0aW1lb3V0PzogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIFN0cmVhbURlY29yYXRvck9wdGlvbnMgPSB7XG4gIHR5cGU6IFwic3NlXCI7IC8vIHwgJ3dzXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog7J2067Kk7Yq4IO2CpOuzhOuhnCDrhJjqsqjso7zripQg6rCS7J2066+A66GcIOyWtOuWpCDtg4DsnoXsnbTrk6Ag7IOB6rSA7JeG7J2MXG4gIGV2ZW50czogei5ab2RPYmplY3Q8YW55PjtcbiAgcGF0aD86IHN0cmluZztcbiAgcmVzb3VyY2VOYW1lPzogc3RyaW5nO1xuICBndWFyZHM/OiBHdWFyZEtleVtdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBVcGxvYWREZWNvcmF0b3JPcHRpb25zID0ge1xuICBtb2RlPzogXCJzaW5nbGVcIiB8IFwibXVsdGlwbGVcIjtcbn07XG5leHBvcnQgY29uc3QgcmVnaXN0ZXJlZEFwaXM6IHtcbiAgLyoqXG4gICAqIG1vZGVsTmFtZeydgCDrqqjrjbgg7YG0656Y7IqkIOydtOumhOyeheuLiOuLpC4gKGV4LiBcIlVzZXJNb2RlbFwiKVxuICAgKi9cbiAgbW9kZWxOYW1lOiBzdHJpbmc7XG4gIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBvcHRpb25zOiBBcGlEZWNvcmF0b3JPcHRpb25zO1xuICBzdHJlYW1PcHRpb25zPzogU3RyZWFtRGVjb3JhdG9yT3B0aW9ucztcbiAgdXBsb2FkT3B0aW9ucz86IFVwbG9hZERlY29yYXRvck9wdGlvbnM7XG59W10gPSBbXTtcbmV4cG9ydCB0eXBlIEV4dGVuZGVkQXBpID0ge1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gIHN0cmVhbU9wdGlvbnM/OiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zO1xuICB1cGxvYWRPcHRpb25zPzogVXBsb2FkRGVjb3JhdG9yT3B0aW9ucztcbiAgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXTtcbiAgcGFyYW1ldGVyczogQXBpUGFyYW1bXTtcbiAgcmV0dXJuVHlwZTogQXBpUGFyYW1UeXBlO1xufTtcbnR5cGUgRGVjb3JhdG9yVGFyZ2V0ID0geyBjb25zdHJ1Y3RvcjogeyBuYW1lOiBzdHJpbmcgfSB9O1xuXG5jb25zdCBERUNPUkFUT1JfVFlQRVMgPSB7XG4gIEFQSTogU3ltYm9sKFwiYXBpXCIpLFxuICBTVFJFQU06IFN5bWJvbChcInN0cmVhbVwiKSxcbn0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGNoZWNrU2luZ2xlRGVjb3JhdG9yKHRhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZWNvcmF0b3JUeXBlOiBzeW1ib2wpIHtcbiAgY29uc3QgbWV0aG9kID0gdGFyZ2V0W3Byb3BlcnR5S2V5IGFzIGtleW9mIHR5cGVvZiB0YXJnZXRdIGFzIHsgX19kZWNvcmF0b3JUeXBlPzogc3ltYm9sIH07XG4gIGlmIChtZXRob2Q/Ll9fZGVjb3JhdG9yVHlwZSAmJiBtZXRob2Q/Ll9fZGVjb3JhdG9yVHlwZSAhPT0gZGVjb3JhdG9yVHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBAJHtTdHJpbmcoZGVjb3JhdG9yVHlwZSl9IGRlY29yYXRvciBjYW4gb25seSBiZSB1c2VkIG9uY2Ugb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX0uIFlvdSBjYW4gdXNlIG9ubHkgb25lIG9mIEBhcGkgb3IgQHN0cmVhbSBkZWNvcmF0b3Igb24gdGhlIHNhbWUgbWV0aG9kLmAsXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBtZXRob2QuX19kZWNvcmF0b3JUeXBlID0gZGVjb3JhdG9yVHlwZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBpKG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnMgPSB7fSkge1xuICBvcHRpb25zID0ge1xuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIGNsaWVudHM6IFtcImF4aW9zXCJdLFxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG5cbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBhcGkgZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIC8vIOuplOyEnOuTnOyXkCDqsbjrprAg642w7L2U66CI7J207YSwIOykkeuztSDssrTtgaxcbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuQVBJKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuXG4gICAgLy8g6riw7KG0IOuPmeydvO2VnCDrqZTshJzrk5zqsIAg7J6I64qU7KeAIO2ZleyduCDtm4Qg7J6I64qUIOqyveyasCBvdmVycmlkZVxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChhcGkpID0+IGFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0FwaSkge1xuICAgICAgLy8g6riw7KG07J2YIHBhdGjsmYAg7IOI66Gc7Jq0IHBhdGjqsIAg64uk66W064uk66m0KD3ruYgg7Iqk7Yq466eB7J20IOyVhOuLiOyXiOuKlOuNsCDri6Trpbgg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcImFwaVwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIC8vIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXCJhcGlcIiwgbW9kZWxOYW1lLCBtZXRob2ROYW1lLCBleGlzdGluZ0FwaS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nQXBpLm9wdGlvbnMsIC8vIOq4sOyhtOydmCDsmLXshZjsnYQg7KG07KSR7ZWY65CYXG4gICAgICAgIC4uLm9wdGlvbnMsIC8vIEBhcGkg642w7L2U66CI7J207YSw7J2YIOyYteyFmOydhCDstpTqsIDtlanri4jri6QuXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtKG9wdGlvbnM6IFN0cmVhbURlY29yYXRvck9wdGlvbnMpIHtcbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBzdHJlYW0gZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIC8vIOuplOyEnOuTnOyXkCDqsbjrprAg642w7L2U66CI7J207YSwIOykkeuztSDssrTtgaxcbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuU1RSRUFNKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuICAgIGNvbnN0IG9wdGlvbnNXaXRoRGVmYXVsdHMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaHR0cE1ldGhvZDogXCJHRVRcIiBhcyBIVFRQTWV0aG9kcyxcbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmdBcGkgPSByZWdpc3RlcmVkQXBpcy5maW5kKFxuICAgICAgKGFwaSkgPT4gYXBpLm1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lICYmIGFwaS5tZXRob2ROYW1lID09PSBtZXRob2ROYW1lLFxuICAgICk7XG4gICAgaWYgKGV4aXN0aW5nQXBpKSB7XG4gICAgICAvLyDquLDsobTsnZggcGF0aOyZgCDsg4jroZzsmrQgcGF0aOqwgCDri6TrpbTri6TrqbQoPeu5iCDsiqTtirjrp4HsnbQg7JWE64uI7JeI64qU642wIOuLpOuluCDsiqTtirjrp4HsnLzroZwg67CU64CM6rKMIOuQnOuLpOuptCkg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdQYXRoKFwic3RyZWFtXCIsIG1vZGVsTmFtZSwgbWV0aG9kTmFtZSwgZXhpc3RpbmdBcGkucGF0aCwgcGF0aCk7XG4gICAgICBleGlzdGluZ0FwaS5wYXRoID0gcGF0aDtcblxuICAgICAgLy8g6riw7KG07J2YIOyYteyFmOqzvCDsg4jroZzsmrQg7Ji17IWY7J20IOqyuey5mOuKlCDrtoDrtoTsnbQg7J6I64uk66m0IOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nT3B0aW9ucyhcbiAgICAgICAgXCJzdHJlYW1cIixcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBleGlzdGluZ0FwaS5vcHRpb25zLFxuICAgICAgICBvcHRpb25zV2l0aERlZmF1bHRzLFxuICAgICAgKTtcbiAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nQXBpLm9wdGlvbnMsIC8vIOq4sOyhtOydmCDsmLXshZjsnYQg7KG07KSR7ZWY65CYXG4gICAgICAgIC4uLm9wdGlvbnNXaXRoRGVmYXVsdHMsIC8vIEBzdHJlYW0g642w7L2U66CI7J207YSw7J2YIOyYteyFmOydhCDstpTqsIDtlanri4jri6QuXG4gICAgICB9O1xuXG4gICAgICBleGlzdGluZ0FwaS5zdHJlYW1PcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVnaXN0ZXJlZEFwaXMucHVzaCh7XG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICAgc3RyZWFtT3B0aW9uczogb3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zYWN0aW9uYWwob3B0aW9uczogVHJhbnNhY3Rpb25hbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IGlzb2xhdGlvbiwgcmVhZE9ubHksIGRiUHJlc2V0ID0gXCJ3XCIgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIChfdGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIF9wcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHRoaXM6IEJhc2VNb2RlbENsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ29udGV4dCA9IERCLnRyYW5zYWN0aW9uU3RvcmFnZS5nZXRTdG9yZSgpO1xuXG4gICAgICAvLyDsnbTrr7ggQXN5bmNMb2NhbFN0b3JhZ2Ug7Luo7YWN7Iqk7Yq4IOyViOyXkCDsnojripTsp4Ag7ZmV7J24XG4gICAgICBpZiAoZXhpc3RpbmdDb250ZXh0KSB7XG4gICAgICAgIC8vIO2VtOuLuSBwcmVzZXTsnZgg7Yq4656c7J6t7IWY7J20IOydtOuvuCDsnojsnLzrqbQg7J6s7IKs7JqpXG4gICAgICAgIGlmIChleGlzdGluZ0NvbnRleHQuZ2V0VHJhbnNhY3Rpb24oZGJQcmVzZXQpKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFzeW5jTG9jYWxTdG9yYWdlIOy7qO2FjeyKpO2KuCDsl4bqsbDrgpgg7ZW064u5IHByZXNldOydmCDtirjrnpzsnq3shZjsnbQg7JeG7Jy866m0IOyDiOuhnCDsi5zsnpFcbiAgICAgIGNvbnN0IHN0YXJ0VHJhbnNhY3Rpb24gPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHB1cmkgPSB0aGlzLmdldFB1cmkoZGJQcmVzZXQpIGFzIFB1cmlXcmFwcGVyO1xuXG4gICAgICAgIHJldHVybiBwdXJpLmtuZXgudHJhbnNhY3Rpb24oXG4gICAgICAgICAgYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJ4V3JhcHBlciA9IG5ldyBQdXJpVHJhbnNhY3Rpb25XcmFwcGVyKHRyeCwgdGhpcy5nZXRVcHNlcnRCdWlsZGVyKCkpO1xuICAgICAgICAgICAgLy8gVHJhbnNhY3Rpb25Db250ZXh07JeQIO2KuOuenOyereyFmCDsoIDsnqVcbiAgICAgICAgICAgIERCLmdldFRyYW5zYWN0aW9uQ29udGV4dCgpLnNldFRyYW5zYWN0aW9uKGRiUHJlc2V0LCB0cnhXcmFwcGVyKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgLy8g7Yq4656c7J6t7IWYIOygnOqxsFxuICAgICAgICAgICAgICBEQi5nZXRUcmFuc2FjdGlvbkNvbnRleHQoKS5kZWxldGVUcmFuc2FjdGlvbihkYlByZXNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGlzb2xhdGlvbkxldmVsOiBpc29sYXRpb24sIHJlYWRPbmx5IH0sXG4gICAgICAgICk7XG4gICAgICB9O1xuXG4gICAgICAvLyBBc3luY0xvY2FsU3RvcmFnZSDsu6jthY3siqTtirjqsIAg7JeG7Jy866m0IOyDiOuhnCDsg53shLFcbiAgICAgIGlmICghZXhpc3RpbmdDb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBEQi5ydW5XaXRoVHJhbnNhY3Rpb24oc3RhcnRUcmFuc2FjdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDsu6jthY3siqTtirjripQg7J6I7KeA66eMIOydtCBwcmVzZXTsnZgg7Yq4656c7J6t7IWY7J2AIOyXhuuKlCDqsr3smrAgKOqwmeydgCDsu6jthY3siqTtirgg64K07JeQ7IScIOyLpO2WiSlcbiAgICAgICAgcmV0dXJuIHN0YXJ0VHJhbnNhY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gIH07XG59XG5cbi8qKlxuICogYXBpIOuNsOy9lOugiOydtO2EsOyZgCDtlajqu5gg7IKs7Jqp7ZWgIOyImCDsnojsirXri4jri6QuXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZChvcHRpb25zOiBVcGxvYWREZWNvcmF0b3JPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIChfdGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIF9wcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgY29uc3QgbW9kZWxOYW1lID0gX3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEB1cGxvYWQgZGVjb3JhdG9yIG9uICR7X3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke19wcm9wZXJ0eUtleX1gLFxuICAgICk7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IF9wcm9wZXJ0eUtleTtcblxuICAgIC8vIHJlZ2lzdGVyZWRBcGlz7JeQ7IScIO2VtOuLuSBBUEkg7LC+7JWE7IScIHVwbG9hZE9wdGlvbnMg7LaU6rCAXG4gICAgY29uc3QgZXhpc3RpbmdBcGkgPSByZWdpc3RlcmVkQXBpcy5maW5kKFxuICAgICAgKGFwaSkgPT4gYXBpLm1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lICYmIGFwaS5tZXRob2ROYW1lID09PSBtZXRob2ROYW1lLFxuICAgICk7XG4gICAgaWYgKGV4aXN0aW5nQXBpKSB7XG4gICAgICBleGlzdGluZ0FwaS51cGxvYWRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g7J20IOuplOyGjOuTnOyXkCDrtpnsnYAgQGFwaSDrjbDsvZTroIjsnbTthLDqsIAg7JWE7KeBIGV2YWzrkJjsp4Ag7JWK7J2AIOyDge2ZqeyeheuLiOuLpC4gKOunjOyVvSBAYXBp6rCAIOyViCDrtpnslrQg7J6I7JeI64uk66m0IOyLrOqwge2VnCDsg4HtmansnoXri4jri6QuLiEpXG4gICAgICAvLyDsl6zquLDsl5DshJwg7LWc7LSI66GcIG1vZGVsTmFtZeqzvCBtZXRob2ROYW1l7JeQIOuMgO2VtCByZWdpc3RlcmVkQXBpc+yXkCDtlZjrgpjrpbwg7LaU6rCA7ZW07KO87Ja07JW8IO2VqeuLiOuLpC5cbiAgICAgIC8vIHVwbG9hZE9wdGlvbnPripQg6re464yA66GcIOy2lOqwgO2VmOqzoCwgcGF0aOuKlCDruYgg7Iqk7Yq466eB7Jy866GcIOy2lOqwgO2VtOykjeuLiOuLpC5cbiAgICAgIC8vIOydtO2bhCBAYXBpIOuNsOy9lOugiOydtO2EsOqwgCBldmFs65CY66m0IOyLpOygnCBwYXRo66GcIOuNruyWtOyUjOybjOyngOqzoCwgb3B0aW9uc+qwgCDstpTqsIDrkKnri4jri6QuXG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoOiBcIlwiLFxuICAgICAgICBvcHRpb25zOiB7fSxcbiAgICAgICAgdXBsb2FkT3B0aW9uczogb3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAodGhpczogQmFzZU1vZGVsQ2xhc3MsIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgY29uc3QgeyByZXF1ZXN0IH0gPSBTb25hbXUuZ2V0Q29udGV4dCgpO1xuICAgICAgY29uc3QgdXBsb2FkQ29udGV4dDogVXBsb2FkQ29udGV4dCA9IHtcbiAgICAgICAgZmlsZTogdW5kZWZpbmVkLFxuICAgICAgICBmaWxlczogW10sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzdG9yYWdlID0gU29uYW11LnN0b3JhZ2U7XG4gICAgICBpZiAoIXN0b3JhZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RvcmFnZeqwgCDshKTsoJXrkJjsp4Ag7JWK7JWY7Iq164uI64ukLlwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBGaWxlU3RvcmFnZSB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vZmlsZS1zdG9yYWdlL2ZpbGUtc3RvcmFnZVwiKTtcbiAgICAgIGlmIChvcHRpb25zLm1vZGUgPT09IFwibXVsdGlwbGVcIikge1xuICAgICAgICBjb25zdCByYXdGaWxlc0l0ZXJhdG9yID0gcmVxdWVzdC5maWxlcygpO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHJhd0ZpbGUgb2YgcmF3RmlsZXNJdGVyYXRvcikge1xuICAgICAgICAgIGlmIChyYXdGaWxlKSB7XG4gICAgICAgICAgICBhd2FpdCByYXdGaWxlLnRvQnVmZmVyKCk7XG4gICAgICAgICAgICB1cGxvYWRDb250ZXh0LmZpbGVzLnB1c2gobmV3IEZpbGVTdG9yYWdlKHJhd0ZpbGUsIHN0b3JhZ2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJhd0ZpbGUgPSBhd2FpdCByZXF1ZXN0LmZpbGUoKTtcbiAgICAgICAgaWYgKHJhd0ZpbGUpIHtcbiAgICAgICAgICB1cGxvYWRDb250ZXh0LmZpbGUgPSBuZXcgRmlsZVN0b3JhZ2UocmF3RmlsZSwgc3RvcmFnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFNvbmFtdS51cGxvYWRTdG9yYWdlLnJ1bih7IHVwbG9hZENvbnRleHQgfSwgKCkgPT4ge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gIH07XG59XG5cbi8qKlxuICog6riw7KG07J2YIHBhdGjsmYAg7IOI66Gc7Jq0IHBhdGjqsIAg64uk66W064uk66m0KD3qsJLsnbQg7J6I642YIOyKpO2KuOungeydtCDri6Trpbgg6rCS7J20IOyeiOuKlCDsiqTtirjrp4HsnLzroZwg67CU64CM6rKMIOuQnOuLpOuptCkg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAqIEBwYXJhbSBkZWNvcmF0b3JOYW1lIOuNsOy9lOugiOydtO2EsCDsnbTrpoRcbiAqIEBwYXJhbSBtb2RlbE5hbWUg66qo6424IOydtOumhFxuICogQHBhcmFtIG1ldGhvZE5hbWUg66mU7ISc65OcIOydtOumhFxuICogQHBhcmFtIGV4aXN0aW5nUGF0aCDquLDsobTsnZggcGF0aFxuICogQHBhcmFtIG5ld1BhdGgg7IOI66Gc7Jq0IHBhdGhcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9Db25mbGljdGluZ1BhdGgoXG4gIGRlY29yYXRvck5hbWU6IHN0cmluZyxcbiAgbW9kZWxOYW1lOiBzdHJpbmcsXG4gIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgZXhpc3RpbmdQYXRoOiBzdHJpbmcsXG4gIG5ld1BhdGg6IHN0cmluZyxcbikge1xuICBpZiAoZXhpc3RpbmdQYXRoICE9PSBcIlwiICYmIG5ld1BhdGggIT09IFwiXCIgJiYgZXhpc3RpbmdQYXRoICE9PSBuZXdQYXRoKSB7XG4gICAgLy8g7J206rKD7J20IOustOyKqCDsg4HtmansnbTrg5DrqbTsmpQsIGFwaS5wYXRo6rCAIOuNruyWtOyUjOybjOyngOuKlCDsg4HtmansnoXri4jri6QuXG4gICAgLy8g6rCA66C5IEBhcGkoeyBwYXRoOiBcIi9hcGkvdjEvdXNlcnNcIiB9KSDrjbDsvZTroIjsnbTthLDqsIAg67aZ7Ja07J6I64qUIOuplOyEnOuTnOyXkFxuICAgIC8vIEBzdHJlYW0oeyBwYXRoOiBcIi9hcGkvdjEvdXNlcnMvc3RyZWFtXCIgfSkg6rCZ7J2AIOqyg+ydtCDrtpnslrQg7J6I64qUIOyDge2ZqeyeheuLiOuLpC5cbiAgICAvLyDsnbTroIfqsowg65CY66m0IOuRkCDrjbDsvZTroIjsnbTthLDqsIAg6rCZ7J2AIGFwaeydmCBwYXRoIO2VhOuTnOulvCDqsbTrk5zrpqzqsowg65CY66+A66GcLCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBAJHtkZWNvcmF0b3JOYW1lfSBkZWNvcmF0b3Igb24gJHttb2RlbE5hbWV9LiR7bWV0aG9kTmFtZX0gaGFzIGNvbmZsaWN0aW5nIHBhdGg6ICR7bmV3UGF0aH0uIFRoZSBkZWNvcmF0b3IgaXMgdHJ5aW5nIHRvIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwYXRoKCR7ZXhpc3RpbmdQYXRofSkgd2l0aCB0aGUgbmV3IHBhdGgoJHtuZXdQYXRofSkuYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICog6riw7KG07J2YIOyYteyFmOqzvCDsg4jroZzsmrQg7Ji17IWY7J20IOqyuey5mOuKlCDrtoDrtoTsnbQg7J6I64uk66m0IOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gKiBAcGFyYW0gZGVjb3JhdG9yTmFtZSDrjbDsvZTroIjsnbTthLAg7J2066aEXG4gKiBAcGFyYW0gbW9kZWxOYW1lIOuqqOuNuCDsnbTrpoRcbiAqIEBwYXJhbSBtZXRob2ROYW1lIOuplOyEnOuTnCDsnbTrpoRcbiAqIEBwYXJhbSBleGlzdGluZ09wdGlvbnMg6riw7KG07J2YIOyYteyFmFxuICogQHBhcmFtIG5ld09wdGlvbnMg7IOI66Gc7Jq0IOyYteyFmFxuICovXG5mdW5jdGlvbiBhc3NlcnROb0NvbmZsaWN0aW5nT3B0aW9ucyhcbiAgZGVjb3JhdG9yTmFtZTogc3RyaW5nLFxuICBtb2RlbE5hbWU6IHN0cmluZyxcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IDzslYQg7Im96rKM7Im96rKMIOyigCDqsJHsi5zri6Q+XG4gIGV4aXN0aW5nT3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiA87J2065+0IOuVjCDslYTri4jrqbQgYW55IOyWuOygnCDslIHri4jquYw+XG4gIG5ld09wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4pIHtcbiAgT2JqZWN0LmtleXMobmV3T3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKGV4aXN0aW5nT3B0aW9uc1trZXldICYmICFpc0VxdWFsKGV4aXN0aW5nT3B0aW9uc1trZXldLCBuZXdPcHRpb25zW2tleV0pKSB7XG4gICAgICAvLyDsnbTqsoPsnbQg66y07IqoIOyDge2ZqeydtOuDkOuptOyalCwgYXBpLm9wdGlvbnPqsIAg642u7Ja07JSM7JuM7KeA64qUIOyDge2ZqeyeheuLiOuLpC5cbiAgICAgIC8vIOqwgOuguSBAYXBpKHsgcmVzb3VyY2VOYW1lOiBcIlVzZXJzXCIgfSkg642w7L2U66CI7J207YSw6rCAIOu2meyWtOyeiOuKlCDrqZTshJzrk5zsl5BcbiAgICAgIC8vIEBzdHJlYW0oeyByZXNvdXJjZU5hbWU6IFwiUG9zdHNcIiB9KSDqsJnsnYAg6rKD7J20IOu2meyWtCDsnojripQg7IOB7Zmp7J6F64uI64ukLlxuICAgICAgLy8g7J2066CH6rKMIOuQmOuptCDrkZAg642w7L2U66CI7J207YSw6rCAIOqwmeydgCBhcGnsnZggb3B0aW9ucyDsho0g6rCZ7J2AIO2VhOuTnOulvCDqsbTrk5zrpqzqsowg65CY66+A66GcLCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQCR7ZGVjb3JhdG9yTmFtZX0gZGVjb3JhdG9yIG9uICR7bW9kZWxOYW1lfS4ke21ldGhvZE5hbWV9IGhhcyBjb25mbGljdGluZyBvcHRpb25zOiAke2tleX0uIFRoZSBkZWNvcmF0b3IgaXMgdHJ5aW5nIHRvIG92ZXJyaWRlIHRoZSBleGlzdGluZyBvcHRpb24oJHtKU09OLnN0cmluZ2lmeShleGlzdGluZ09wdGlvbnNba2V5XSl9KSB3aXRoIHRoZSBuZXcgb3B0aW9uKCR7SlNPTi5zdHJpbmdpZnkobmV3T3B0aW9uc1trZXldKX0pLmAsXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiYXNzZXJ0IiwiaW5mbGVjdGlvbiIsImlzRXF1YWwiLCJEQiIsIlB1cmlUcmFuc2FjdGlvbldyYXBwZXIiLCJTb25hbXUiLCJyZWdpc3RlcmVkQXBpcyIsIkRFQ09SQVRPUl9UWVBFUyIsIkFQSSIsIlN5bWJvbCIsIlNUUkVBTSIsImNoZWNrU2luZ2xlRGVjb3JhdG9yIiwidGFyZ2V0IiwicHJvcGVydHlLZXkiLCJkZWNvcmF0b3JUeXBlIiwibWV0aG9kIiwiX19kZWNvcmF0b3JUeXBlIiwiRXJyb3IiLCJTdHJpbmciLCJuYW1lIiwiYXBpIiwib3B0aW9ucyIsImh0dHBNZXRob2QiLCJjb250ZW50VHlwZSIsImNsaWVudHMiLCJtb2RlbE5hbWUiLCJtYXRjaCIsIm1ldGhvZE5hbWUiLCJkZWZhdWx0UGF0aCIsImNhbWVsaXplIiwicmVwbGFjZSIsInBhdGgiLCJleGlzdGluZ0FwaSIsImZpbmQiLCJhc3NlcnROb0NvbmZsaWN0aW5nUGF0aCIsImFzc2VydE5vQ29uZmxpY3RpbmdPcHRpb25zIiwicHVzaCIsInN0cmVhbSIsIm9wdGlvbnNXaXRoRGVmYXVsdHMiLCJzdHJlYW1PcHRpb25zIiwidHJhbnNhY3Rpb25hbCIsImlzb2xhdGlvbiIsInJlYWRPbmx5IiwiZGJQcmVzZXQiLCJfdGFyZ2V0IiwiX3Byb3BlcnR5S2V5IiwiZGVzY3JpcHRvciIsIm9yaWdpbmFsTWV0aG9kIiwidmFsdWUiLCJhcmdzIiwiZXhpc3RpbmdDb250ZXh0IiwidHJhbnNhY3Rpb25TdG9yYWdlIiwiZ2V0U3RvcmUiLCJnZXRUcmFuc2FjdGlvbiIsImFwcGx5Iiwic3RhcnRUcmFuc2FjdGlvbiIsInB1cmkiLCJnZXRQdXJpIiwia25leCIsInRyYW5zYWN0aW9uIiwidHJ4IiwidHJ4V3JhcHBlciIsImdldFVwc2VydEJ1aWxkZXIiLCJnZXRUcmFuc2FjdGlvbkNvbnRleHQiLCJzZXRUcmFuc2FjdGlvbiIsImRlbGV0ZVRyYW5zYWN0aW9uIiwiaXNvbGF0aW9uTGV2ZWwiLCJydW5XaXRoVHJhbnNhY3Rpb24iLCJ1cGxvYWQiLCJ1cGxvYWRPcHRpb25zIiwicmVxdWVzdCIsImdldENvbnRleHQiLCJ1cGxvYWRDb250ZXh0IiwiZmlsZSIsInVuZGVmaW5lZCIsImZpbGVzIiwic3RvcmFnZSIsIkZpbGVTdG9yYWdlIiwibW9kZSIsInJhd0ZpbGVzSXRlcmF0b3IiLCJyYXdGaWxlIiwidG9CdWZmZXIiLCJ1cGxvYWRTdG9yYWdlIiwicnVuIiwiZGVjb3JhdG9yTmFtZSIsImV4aXN0aW5nUGF0aCIsIm5ld1BhdGgiLCJleGlzdGluZ09wdGlvbnMiLCJuZXdPcHRpb25zIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJKU09OIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxZQUFZLFNBQVM7QUFFNUIsT0FBT0MsZ0JBQWdCLGFBQWE7QUFDcEMsU0FBU0MsT0FBTyxRQUFRLFVBQVU7QUFHbEMsU0FBU0MsRUFBRSxRQUFRLG9CQUFpQjtBQUNwQyxTQUNFQyxzQkFBc0IsUUFHakIsOEJBQTJCO0FBR2xDLFNBQVNDLE1BQU0sUUFBUSxjQUFXO0FBb0NsQyxPQUFPLE1BQU1DLGlCQVVQLEVBQUUsQ0FBQztBQWNULE1BQU1DLGtCQUFrQjtJQUN0QkMsS0FBS0MsT0FBTztJQUNaQyxRQUFRRCxPQUFPO0FBQ2pCO0FBRUEsU0FBU0UscUJBQXFCQyxNQUF1QixFQUFFQyxXQUFtQixFQUFFQyxhQUFxQjtJQUMvRixNQUFNQyxTQUFTSCxNQUFNLENBQUNDLFlBQW1DO0lBQ3pELElBQUlFLFFBQVFDLG1CQUFtQkQsUUFBUUMsb0JBQW9CRixlQUFlO1FBQ3hFLE1BQU0sSUFBSUcsTUFDUixDQUFDLENBQUMsRUFBRUMsT0FBT0osZUFBZSxvQ0FBb0MsRUFBRUYsT0FBTyxXQUFXLENBQUNPLElBQUksQ0FBQyxDQUFDLEVBQUVOLFlBQVksdUVBQXVFLENBQUM7SUFFbkwsT0FBTztRQUNMRSxPQUFPQyxlQUFlLEdBQUdGO0lBQzNCO0FBQ0Y7QUFFQSxPQUFPLFNBQVNNLElBQUlDLFVBQStCLENBQUMsQ0FBQztJQUNuREEsVUFBVTtRQUNSQyxZQUFZO1FBQ1pDLGFBQWE7UUFDYkMsU0FBUztZQUFDO1NBQVE7UUFDbEIsR0FBR0gsT0FBTztJQUNaO0lB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
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvZGVjb3JhdG9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB0eXBlIHsgSFRUUE1ldGhvZHMgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHR5cGUgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlTW9kZWxDbGFzcyB9IGZyb20gXCIuLi9kYXRhYmFzZS9iYXNlLW1vZGVsXCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuLi9kYXRhYmFzZS9kYlwiO1xuaW1wb3J0IHtcbiAgUHVyaVRyYW5zYWN0aW9uV3JhcHBlcixcbiAgdHlwZSBQdXJpV3JhcHBlcixcbiAgdHlwZSBUcmFuc2FjdGlvbmFsT3B0aW9ucyxcbn0gZnJvbSBcIi4uL2RhdGFiYXNlL3B1cmktd3JhcHBlclwiO1xuaW1wb3J0IHR5cGUgeyBBcGlQYXJhbSwgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFVwbG9hZENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi9zb25hbXVcIjtcbmltcG9ydCB7IFVwc2VydEJ1aWxkZXIgfSBmcm9tIFwiLi4vZGF0YWJhc2UvdXBzZXJ0LWJ1aWxkZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHdWFyZEtleXMge1xuICBxdWVyeTogdHJ1ZTtcbiAgYWRtaW46IHRydWU7XG4gIHVzZXI6IHRydWU7XG59XG5leHBvcnQgdHlwZSBHdWFyZEtleSA9IGtleW9mIEd1YXJkS2V5cztcbmV4cG9ydCB0eXBlIFNlcnZpY2VDbGllbnQgPSBcImF4aW9zXCIgfCBcImF4aW9zLW11bHRpcGFydFwiIHwgXCJzd3JcIiB8IFwid2luZG93LWZldGNoXCI7XG5leHBvcnQgdHlwZSBBcGlEZWNvcmF0b3JPcHRpb25zID0ge1xuICBodHRwTWV0aG9kPzogSFRUUE1ldGhvZHM7XG4gIGNvbnRlbnRUeXBlPzpcbiAgICB8IFwidGV4dC9wbGFpblwiXG4gICAgfCBcInRleHQvaHRtbFwiXG4gICAgfCBcInRleHQveG1sXCJcbiAgICB8IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgfCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiO1xuICBjbGllbnRzPzogU2VydmljZUNsaWVudFtdO1xuICBwYXRoPzogc3RyaW5nO1xuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIGd1YXJkcz86IEd1YXJkS2V5W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB0aW1lb3V0PzogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIFN0cmVhbURlY29yYXRvck9wdGlvbnMgPSB7XG4gIHR5cGU6IFwic3NlXCI7IC8vIHwgJ3dzXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog7J2067Kk7Yq4IO2CpOuzhOuhnCDrhJjqsqjso7zripQg6rCS7J2066+A66GcIOyWtOuWpCDtg4DsnoXsnbTrk6Ag7IOB6rSA7JeG7J2MXG4gIGV2ZW50czogei5ab2RPYmplY3Q8YW55PjtcbiAgcGF0aD86IHN0cmluZztcbiAgcmVzb3VyY2VOYW1lPzogc3RyaW5nO1xuICBndWFyZHM/OiBHdWFyZEtleVtdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBVcGxvYWREZWNvcmF0b3JPcHRpb25zID0ge1xuICBtb2RlPzogXCJzaW5nbGVcIiB8IFwibXVsdGlwbGVcIjtcbn07XG5leHBvcnQgY29uc3QgcmVnaXN0ZXJlZEFwaXM6IHtcbiAgLyoqXG4gICAqIG1vZGVsTmFtZeydgCDrqqjrjbgg7YG0656Y7IqkIOydtOumhOyeheuLiOuLpC4gKGV4LiBcIlVzZXJNb2RlbFwiKVxuICAgKi9cbiAgbW9kZWxOYW1lOiBzdHJpbmc7XG4gIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBvcHRpb25zOiBBcGlEZWNvcmF0b3JPcHRpb25zO1xuICBzdHJlYW1PcHRpb25zPzogU3RyZWFtRGVjb3JhdG9yT3B0aW9ucztcbiAgdXBsb2FkT3B0aW9ucz86IFVwbG9hZERlY29yYXRvck9wdGlvbnM7XG59W10gPSBbXTtcbmV4cG9ydCB0eXBlIEV4dGVuZGVkQXBpID0ge1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gIHN0cmVhbU9wdGlvbnM/OiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zO1xuICB1cGxvYWRPcHRpb25zPzogVXBsb2FkRGVjb3JhdG9yT3B0aW9ucztcbiAgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXTtcbiAgcGFyYW1ldGVyczogQXBpUGFyYW1bXTtcbiAgcmV0dXJuVHlwZTogQXBpUGFyYW1UeXBlO1xufTtcbnR5cGUgRGVjb3JhdG9yVGFyZ2V0ID0geyBjb25zdHJ1Y3RvcjogeyBuYW1lOiBzdHJpbmcgfSB9O1xuXG5jb25zdCBERUNPUkFUT1JfVFlQRVMgPSB7XG4gIEFQSTogU3ltYm9sKFwiYXBpXCIpLFxuICBTVFJFQU06IFN5bWJvbChcInN0cmVhbVwiKSxcbn0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGNoZWNrU2luZ2xlRGVjb3JhdG9yKHRhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZWNvcmF0b3JUeXBlOiBzeW1ib2wpIHtcbiAgY29uc3QgbWV0aG9kID0gdGFyZ2V0W3Byb3BlcnR5S2V5IGFzIGtleW9mIHR5cGVvZiB0YXJnZXRdIGFzIHsgX19kZWNvcmF0b3JUeXBlPzogc3ltYm9sIH07XG4gIGlmIChtZXRob2Q/Ll9fZGVjb3JhdG9yVHlwZSAmJiBtZXRob2Q/Ll9fZGVjb3JhdG9yVHlwZSAhPT0gZGVjb3JhdG9yVHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBAJHtTdHJpbmcoZGVjb3JhdG9yVHlwZSl9IGRlY29yYXRvciBjYW4gb25seSBiZSB1c2VkIG9uY2Ugb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX0uIFlvdSBjYW4gdXNlIG9ubHkgb25lIG9mIEBhcGkgb3IgQHN0cmVhbSBkZWNvcmF0b3Igb24gdGhlIHNhbWUgbWV0aG9kLmAsXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBtZXRob2QuX19kZWNvcmF0b3JUeXBlID0gZGVjb3JhdG9yVHlwZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBpKG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnMgPSB7fSkge1xuICBvcHRpb25zID0ge1xuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIGNsaWVudHM6IFtcImF4aW9zXCJdLFxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG5cbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBhcGkgZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIC8vIOuplOyEnOuTnOyXkCDqsbjrprAg642w7L2U66CI7J207YSwIOykkeuztSDssrTtgaxcbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuQVBJKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuXG4gICAgLy8g6riw7KG0IOuPmeydvO2VnCDrqZTshJzrk5zqsIAg7J6I64qU7KeAIO2ZleyduCDtm4Qg7J6I64qUIOqyveyasCBvdmVycmlkZVxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChhcGkpID0+IGFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0FwaSkge1xuICAgICAgLy8g6riw7KG07J2YIHBhdGjsmYAg7IOI66Gc7Jq0IHBhdGjqsIAg64uk66W064uk66m0KD3ruYgg7Iqk7Yq466eB7J20IOyVhOuLiOyXiOuKlOuNsCDri6Trpbgg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcImFwaVwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIC8vIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXCJhcGlcIiwgbW9kZWxOYW1lLCBtZXRob2ROYW1lLCBleGlzdGluZ0FwaS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nQXBpLm9wdGlvbnMsIC8vIOq4sOyhtOydmCDsmLXshZjsnYQg7KG07KSR7ZWY65CYXG4gICAgICAgIC4uLm9wdGlvbnMsIC8vIEBhcGkg642w7L2U66CI7J207YSw7J2YIOyYteyFmOydhCDstpTqsIDtlanri4jri6QuXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtKG9wdGlvbnM6IFN0cmVhbURlY29yYXRvck9wdGlvbnMpIHtcbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBzdHJlYW0gZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIC8vIOuplOyEnOuTnOyXkCDqsbjrprAg642w7L2U66CI7J207YSwIOykkeuztSDssrTtgaxcbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuU1RSRUFNKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuICAgIGNvbnN0IG9wdGlvbnNXaXRoRGVmYXVsdHMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaHR0cE1ldGhvZDogXCJHRVRcIiBhcyBIVFRQTWV0aG9kcyxcbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmdBcGkgPSByZWdpc3RlcmVkQXBpcy5maW5kKFxuICAgICAgKGFwaSkgPT4gYXBpLm1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lICYmIGFwaS5tZXRob2ROYW1lID09PSBtZXRob2ROYW1lLFxuICAgICk7XG4gICAgaWYgKGV4aXN0aW5nQXBpKSB7XG4gICAgICAvLyDquLDsobTsnZggcGF0aOyZgCDsg4jroZzsmrQgcGF0aOqwgCDri6TrpbTri6TrqbQoPeu5iCDsiqTtirjrp4HsnbQg7JWE64uI7JeI64qU642wIOuLpOuluCDsiqTtirjrp4HsnLzroZwg67CU64CM6rKMIOuQnOuLpOuptCkg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdQYXRoKFwic3RyZWFtXCIsIG1vZGVsTmFtZSwgbWV0aG9kTmFtZSwgZXhpc3RpbmdBcGkucGF0aCwgcGF0aCk7XG4gICAgICBleGlzdGluZ0FwaS5wYXRoID0gcGF0aDtcblxuICAgICAgLy8g6riw7KG07J2YIOyYteyFmOqzvCDsg4jroZzsmrQg7Ji17IWY7J20IOqyuey5mOuKlCDrtoDrtoTsnbQg7J6I64uk66m0IOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nT3B0aW9ucyhcbiAgICAgICAgXCJzdHJlYW1cIixcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBleGlzdGluZ0FwaS5vcHRpb25zLFxuICAgICAgICBvcHRpb25zV2l0aERlZmF1bHRzLFxuICAgICAgKTtcbiAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nQXBpLm9wdGlvbnMsIC8vIOq4sOyhtOydmCDsmLXshZjsnYQg7KG07KSR7ZWY65CYXG4gICAgICAgIC4uLm9wdGlvbnNXaXRoRGVmYXVsdHMsIC8vIEBzdHJlYW0g642w7L2U66CI7J207YSw7J2YIOyYteyFmOydhCDstpTqsIDtlanri4jri6QuXG4gICAgICB9O1xuXG4gICAgICBleGlzdGluZ0FwaS5zdHJlYW1PcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVnaXN0ZXJlZEFwaXMucHVzaCh7XG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICAgc3RyZWFtT3B0aW9uczogb3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zYWN0aW9uYWwob3B0aW9uczogVHJhbnNhY3Rpb25hbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IGlzb2xhdGlvbiwgcmVhZE9ubHksIGRiUHJlc2V0ID0gXCJ3XCIgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIChfdGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIF9wcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHRoaXM6IEJhc2VNb2RlbENsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ29udGV4dCA9IERCLnRyYW5zYWN0aW9uU3RvcmFnZS5nZXRTdG9yZSgpO1xuXG4gICAgICAvLyDsnbTrr7ggQXN5bmNMb2NhbFN0b3JhZ2Ug7Luo7YWN7Iqk7Yq4IOyViOyXkCDsnojripTsp4Ag7ZmV7J24XG4gICAgICBpZiAoZXhpc3RpbmdDb250ZXh0KSB7XG4gICAgICAgIC8vIO2VtOuLuSBwcmVzZXTsnZgg7Yq4656c7J6t7IWY7J20IOydtOuvuCDsnojsnLzrqbQg7J6s7IKs7JqpXG4gICAgICAgIGlmIChleGlzdGluZ0NvbnRleHQuZ2V0VHJhbnNhY3Rpb24oZGJQcmVzZXQpKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFzeW5jTG9jYWxTdG9yYWdlIOy7qO2FjeyKpO2KuCDsl4bqsbDrgpgg7ZW064u5IHByZXNldOydmCDtirjrnpzsnq3shZjsnbQg7JeG7Jy866m0IOyDiOuhnCDsi5zsnpFcbiAgICAgIGNvbnN0IHN0YXJ0VHJhbnNhY3Rpb24gPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHB1cmkgPSB0aGlzLmdldFB1cmkoZGJQcmVzZXQpIGFzIFB1cmlXcmFwcGVyO1xuXG4gICAgICAgIHJldHVybiBwdXJpLmtuZXgudHJhbnNhY3Rpb24oXG4gICAgICAgICAgYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJ4V3JhcHBlciA9IG5ldyBQdXJpVHJhbnNhY3Rpb25XcmFwcGVyKHRyeCwgbmV3IFVwc2VydEJ1aWxkZXIoKSk7XG4gICAgICAgICAgICAvLyBUcmFuc2FjdGlvbkNvbnRleHTsl5Ag7Yq4656c7J6t7IWYIOyggOyepVxuICAgICAgICAgICAgREIuZ2V0VHJhbnNhY3Rpb25Db250ZXh0KCkuc2V0VHJhbnNhY3Rpb24oZGJQcmVzZXQsIHRyeFdyYXBwZXIpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAvLyDtirjrnpzsnq3shZgg7KCc6rGwXG4gICAgICAgICAgICAgIERCLmdldFRyYW5zYWN0aW9uQ29udGV4dCgpLmRlbGV0ZVRyYW5zYWN0aW9uKGRiUHJlc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgaXNvbGF0aW9uTGV2ZWw6IGlzb2xhdGlvbiwgcmVhZE9ubHkgfSxcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIEFzeW5jTG9jYWxTdG9yYWdlIOy7qO2FjeyKpO2KuOqwgCDsl4bsnLzrqbQg7IOI66GcIOyDneyEsVxuICAgICAgaWYgKCFleGlzdGluZ0NvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIERCLnJ1bldpdGhUcmFuc2FjdGlvbihzdGFydFRyYW5zYWN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOy7qO2FjeyKpO2KuOuKlCDsnojsp4Drp4wg7J20IHByZXNldOydmCDtirjrnpzsnq3shZjsnYAg7JeG64qUIOqyveyasCAo6rCZ7J2AIOy7qO2FjeyKpO2KuCDrgrTsl5DshJwg7Iuk7ZaJKVxuICAgICAgICByZXR1cm4gc3RhcnRUcmFuc2FjdGlvbigpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiBhcGkg642w7L2U66CI7J207YSw7JmAIO2VqOq7mCDsgqzsmqntlaAg7IiYIOyeiOyKteuLiOuLpC5cbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkKG9wdGlvbnM6IFVwbG9hZERlY29yYXRvck9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gKF90YXJnZXQ6IERlY29yYXRvclRhcmdldCwgX3Byb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSBfdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUubWF0Y2goLyguKylDbGFzcyQvKT8uWzFdO1xuICAgIGFzc2VydChcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIGBtb2RlbE5hbWUgaXMgcmVxdWlyZWQgb24gQHVwbG9hZCBkZWNvcmF0b3Igb24gJHtfdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7X3Byb3BlcnR5S2V5fWAsXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gX3Byb3BlcnR5S2V5O1xuXG4gICAgLy8gcmVnaXN0ZXJlZEFwaXPsl5DshJwg7ZW064u5IEFQSSDssL7slYTshJwgdXBsb2FkT3B0aW9ucyDstpTqsIBcbiAgICBjb25zdCBleGlzdGluZ0FwaSA9IHJlZ2lzdGVyZWRBcGlzLmZpbmQoXG4gICAgICAoYXBpKSA9PiBhcGkubW9kZWxOYW1lID09PSBtb2RlbE5hbWUgJiYgYXBpLm1ldGhvZE5hbWUgPT09IG1ldGhvZE5hbWUsXG4gICAgKTtcbiAgICBpZiAoZXhpc3RpbmdBcGkpIHtcbiAgICAgIGV4aXN0aW5nQXBpLnVwbG9hZE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDsnbQg66mU7IaM65Oc7JeQIOu2meydgCBAYXBpIOuNsOy9lOugiOydtO2EsOqwgCDslYTsp4EgZXZhbOuQmOyngCDslYrsnYAg7IOB7Zmp7J6F64uI64ukLiAo66eM7JW9IEBhcGnqsIAg7JWIIOu2meyWtCDsnojsl4jri6TrqbQg7Ius6rCB7ZWcIOyDge2ZqeyeheuLiOuLpC4uISlcbiAgICAgIC8vIOyXrOq4sOyXkOyEnCDstZzstIjroZwgbW9kZWxOYW1l6rO8IG1ldGhvZE5hbWXsl5Ag64yA7ZW0IHJlZ2lzdGVyZWRBcGlz7JeQIO2VmOuCmOulvCDstpTqsIDtlbTso7zslrTslbwg7ZWp64uI64ukLlxuICAgICAgLy8gdXBsb2FkT3B0aW9uc+uKlCDqt7jrjIDroZwg7LaU6rCA7ZWY6rOgLCBwYXRo64qUIOu5iCDsiqTtirjrp4HsnLzroZwg7LaU6rCA7ZW07KSN64uI64ukLlxuICAgICAgLy8g7J207ZuEIEBhcGkg642w7L2U66CI7J207YSw6rCAIGV2YWzrkJjrqbQg7Iuk7KCcIHBhdGjroZwg642u7Ja07JSM7JuM7KeA6rOgLCBvcHRpb25z6rCAIOy2lOqwgOuQqeuLiOuLpC5cbiAgICAgIHJlZ2lzdGVyZWRBcGlzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHBhdGg6IFwiXCIsXG4gICAgICAgIG9wdGlvbnM6IHt9LFxuICAgICAgICB1cGxvYWRPcHRpb25zOiBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcywgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICBjb25zdCB7IHJlcXVlc3QgfSA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgICBjb25zdCB1cGxvYWRDb250ZXh0OiBVcGxvYWRDb250ZXh0ID0ge1xuICAgICAgICBmaWxlOiB1bmRlZmluZWQsXG4gICAgICAgIGZpbGVzOiBbXSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHN0b3JhZ2UgPSBTb25hbXUuc3RvcmFnZTtcbiAgICAgIGlmICghc3RvcmFnZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdG9yYWdl6rCAIOyEpOygleuQmOyngCDslYrslZjsirXri4jri6QuXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IEZpbGVTdG9yYWdlIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9maWxlLXN0b3JhZ2UvZmlsZS1zdG9yYWdlXCIpO1xuICAgICAgaWYgKG9wdGlvbnMubW9kZSA9PT0gXCJtdWx0aXBsZVwiKSB7XG4gICAgICAgIGNvbnN0IHJhd0ZpbGVzSXRlcmF0b3IgPSByZXF1ZXN0LmZpbGVzKCk7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgcmF3RmlsZSBvZiByYXdGaWxlc0l0ZXJhdG9yKSB7XG4gICAgICAgICAgaWYgKHJhd0ZpbGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHJhd0ZpbGUudG9CdWZmZXIoKTtcbiAgICAgICAgICAgIHVwbG9hZENvbnRleHQuZmlsZXMucHVzaChuZXcgRmlsZVN0b3JhZ2UocmF3RmlsZSwgc3RvcmFnZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmF3RmlsZSA9IGF3YWl0IHJlcXVlc3QuZmlsZSgpO1xuICAgICAgICBpZiAocmF3RmlsZSkge1xuICAgICAgICAgIHVwbG9hZENvbnRleHQuZmlsZSA9IG5ldyBGaWxlU3RvcmFnZShyYXdGaWxlLCBzdG9yYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gU29uYW11LnVwbG9hZFN0b3JhZ2UucnVuKHsgdXBsb2FkQ29udGV4dCB9LCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiDquLDsobTsnZggcGF0aOyZgCDsg4jroZzsmrQgcGF0aOqwgCDri6TrpbTri6TrqbQoPeqwkuydtCDsnojrjZgg7Iqk7Yq466eB7J20IOuLpOuluCDqsJLsnbQg7J6I64qUIOyKpO2KuOungeycvOuhnCDrsJTrgIzqsowg65Cc64uk66m0KSDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICogQHBhcmFtIGRlY29yYXRvck5hbWUg642w7L2U66CI7J207YSwIOydtOumhFxuICogQHBhcmFtIG1vZGVsTmFtZSDrqqjrjbgg7J2066aEXG4gKiBAcGFyYW0gbWV0aG9kTmFtZSDrqZTshJzrk5wg7J2066aEXG4gKiBAcGFyYW0gZXhpc3RpbmdQYXRoIOq4sOyhtOydmCBwYXRoXG4gKiBAcGFyYW0gbmV3UGF0aCDsg4jroZzsmrQgcGF0aFxuICovXG5mdW5jdGlvbiBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcbiAgZGVjb3JhdG9yTmFtZTogc3RyaW5nLFxuICBtb2RlbE5hbWU6IHN0cmluZyxcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICBleGlzdGluZ1BhdGg6IHN0cmluZyxcbiAgbmV3UGF0aDogc3RyaW5nLFxuKSB7XG4gIGlmIChleGlzdGluZ1BhdGggIT09IFwiXCIgJiYgbmV3UGF0aCAhPT0gXCJcIiAmJiBleGlzdGluZ1BhdGggIT09IG5ld1BhdGgpIHtcbiAgICAvLyDsnbTqsoPsnbQg66y07IqoIOyDge2ZqeydtOuDkOuptOyalCwgYXBpLnBhdGjqsIAg642u7Ja07JSM7JuM7KeA64qUIOyDge2ZqeyeheuLiOuLpC5cbiAgICAvLyDqsIDroLkgQGFwaSh7IHBhdGg6IFwiL2FwaS92MS91c2Vyc1wiIH0pIOuNsOy9lOugiOydtO2EsOqwgCDrtpnslrTsnojripQg66mU7ISc65Oc7JeQXG4gICAgLy8gQHN0cmVhbSh7IHBhdGg6IFwiL2FwaS92MS91c2Vycy9zdHJlYW1cIiB9KSDqsJnsnYAg6rKD7J20IOu2meyWtCDsnojripQg7IOB7Zmp7J6F64uI64ukLlxuICAgIC8vIOydtOugh+qyjCDrkJjrqbQg65GQIOuNsOy9lOugiOydtO2EsOqwgCDqsJnsnYAgYXBp7J2YIHBhdGgg7ZWE65Oc66W8IOqxtOuTnOumrOqyjCDrkJjrr4DroZwsIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEAke2RlY29yYXRvck5hbWV9IGRlY29yYXRvciBvbiAke21vZGVsTmFtZX0uJHttZXRob2ROYW1lfSBoYXMgY29uZmxpY3RpbmcgcGF0aDogJHtuZXdQYXRofS4gVGhlIGRlY29yYXRvciBpcyB0cnlpbmcgdG8gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHBhdGgoJHtleGlzdGluZ1BhdGh9KSB3aXRoIHRoZSBuZXcgcGF0aCgke25ld1BhdGh9KS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiDquLDsobTsnZgg7Ji17IWY6rO8IOyDiOuhnOyatCDsmLXshZjsnbQg6rK57LmY64qUIOu2gOu2hOydtCDsnojri6TrqbQg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAqIEBwYXJhbSBkZWNvcmF0b3JOYW1lIOuNsOy9lOugiOydtO2EsCDsnbTrpoRcbiAqIEBwYXJhbSBtb2RlbE5hbWUg66qo6424IOydtOumhFxuICogQHBhcmFtIG1ldGhvZE5hbWUg66mU7ISc65OcIOydtOumhFxuICogQHBhcmFtIGV4aXN0aW5nT3B0aW9ucyDquLDsobTsnZgg7Ji17IWYXG4gKiBAcGFyYW0gbmV3T3B0aW9ucyDsg4jroZzsmrQg7Ji17IWYXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vQ29uZmxpY3RpbmdPcHRpb25zKFxuICBkZWNvcmF0b3JOYW1lOiBzdHJpbmcsXG4gIG1vZGVsTmFtZTogc3RyaW5nLFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogPOyVhCDsib3qsozsib3qsowg7KKAIOqwkeyLnOuLpD5cbiAgZXhpc3RpbmdPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IDzsnbTrn7Qg65WMIOyVhOuLiOuptCBhbnkg7Ja47KCcIOyUgeuLiOq5jD5cbiAgbmV3T3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55Pixcbikge1xuICBPYmplY3Qua2V5cyhuZXdPcHRpb25zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoZXhpc3RpbmdPcHRpb25zW2tleV0gJiYgIWlzRXF1YWwoZXhpc3RpbmdPcHRpb25zW2tleV0sIG5ld09wdGlvbnNba2V5XSkpIHtcbiAgICAgIC8vIOydtOqyg+ydtCDrrLTsiqgg7IOB7Zmp7J2064OQ66m07JqULCBhcGkub3B0aW9uc+qwgCDrja7slrTslIzsm4zsp4DripQg7IOB7Zmp7J6F64uI64ukLlxuICAgICAgLy8g6rCA66C5IEBhcGkoeyByZXNvdXJjZU5hbWU6IFwiVXNlcnNcIiB9KSDrjbDsvZTroIjsnbTthLDqsIAg67aZ7Ja07J6I64qUIOuplOyEnOuTnOyXkFxuICAgICAgLy8gQHN0cmVhbSh7IHJlc291cmNlTmFtZTogXCJQb3N0c1wiIH0pIOqwmeydgCDqsoPsnbQg67aZ7Ja0IOyeiOuKlCDsg4HtmansnoXri4jri6QuXG4gICAgICAvLyDsnbTroIfqsowg65CY66m0IOuRkCDrjbDsvZTroIjsnbTthLDqsIAg6rCZ7J2AIGFwaeydmCBvcHRpb25zIOyGjSDqsJnsnYAg7ZWE65Oc66W8IOqxtOuTnOumrOqyjCDrkJjrr4DroZwsIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBAJHtkZWNvcmF0b3JOYW1lfSBkZWNvcmF0b3Igb24gJHttb2RlbE5hbWV9LiR7bWV0aG9kTmFtZX0gaGFzIGNvbmZsaWN0aW5nIG9wdGlvbnM6ICR7a2V5fS4gVGhlIGRlY29yYXRvciBpcyB0cnlpbmcgdG8gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIG9wdGlvbigke0pTT04uc3RyaW5naWZ5KGV4aXN0aW5nT3B0aW9uc1trZXldKX0pIHdpdGggdGhlIG5ldyBvcHRpb24oJHtKU09OLnN0cmluZ2lmeShuZXdPcHRpb25zW2tleV0pfSkuYCxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJhc3NlcnQiLCJpbmZsZWN0aW9uIiwiaXNFcXVhbCIsIkRCIiwiUHVyaVRyYW5zYWN0aW9uV3JhcHBlciIsIlNvbmFtdSIsIlVwc2VydEJ1aWxkZXIiLCJyZWdpc3RlcmVkQXBpcyIsIkRFQ09SQVRPUl9UWVBFUyIsIkFQSSIsIlN5bWJvbCIsIlNUUkVBTSIsImNoZWNrU2luZ2xlRGVjb3JhdG9yIiwidGFyZ2V0IiwicHJvcGVydHlLZXkiLCJkZWNvcmF0b3JUeXBlIiwibWV0aG9kIiwiX19kZWNvcmF0b3JUeXBlIiwiRXJyb3IiLCJTdHJpbmciLCJuYW1lIiwiYXBpIiwib3B0aW9ucyIsImh0dHBNZXRob2QiLCJjb250ZW50VHlwZSIsImNsaWVudHMiLCJtb2RlbE5hbWUiLCJtYXRjaCIsIm1ldGhvZE5hbWUiLCJkZWZhdWx0UGF0aCIsImNhbWVsaXplIiwicmVwbGFjZSIsInBhdGgiLCJleGlzdGluZ0FwaSIsImZpbmQiLCJhc3NlcnROb0NvbmZsaWN0aW5nUGF0aCIsImFzc2VydE5vQ29uZmxpY3RpbmdPcHRpb25zIiwicHVzaCIsInN0cmVhbSIsIm9wdGlvbnNXaXRoRGVmYXVsdHMiLCJzdHJlYW1PcHRpb25zIiwidHJhbnNhY3Rpb25hbCIsImlzb2xhdGlvbiIsInJlYWRPbmx5IiwiZGJQcmVzZXQiLCJfdGFyZ2V0IiwiX3Byb3BlcnR5S2V5IiwiZGVzY3JpcHRvciIsIm9yaWdpbmFsTWV0aG9kIiwidmFsdWUiLCJhcmdzIiwiZXhpc3RpbmdDb250ZXh0IiwidHJhbnNhY3Rpb25TdG9yYWdlIiwiZ2V0U3RvcmUiLCJnZXRUcmFuc2FjdGlvbiIsImFwcGx5Iiwic3RhcnRUcmFuc2FjdGlvbiIsInB1cmkiLCJnZXRQdXJpIiwia25leCIsInRyYW5zYWN0aW9uIiwidHJ4IiwidHJ4V3JhcHBlciIsImdldFRyYW5zYWN0aW9uQ29udGV4dCIsInNldFRyYW5zYWN0aW9uIiwiZGVsZXRlVHJhbnNhY3Rpb24iLCJpc29sYXRpb25MZXZlbCIsInJ1bldpdGhUcmFuc2FjdGlvbiIsInVwbG9hZCIsInVwbG9hZE9wdGlvbnMiLCJyZXF1ZXN0IiwiZ2V0Q29udGV4dCIsInVwbG9hZENvbnRleHQiLCJmaWxlIiwidW5kZWZpbmVkIiwiZmlsZXMiLCJzdG9yYWdlIiwiRmlsZVN0b3JhZ2UiLCJtb2RlIiwicmF3RmlsZXNJdGVyYXRvciIsInJhd0ZpbGUiLCJ0b0J1ZmZlciIsInVwbG9hZFN0b3JhZ2UiLCJydW4iLCJkZWNvcmF0b3JOYW1lIiwiZXhpc3RpbmdQYXRoIiwibmV3UGF0aCIsImV4aXN0aW5nT3B0aW9ucyIsIm5ld09wdGlvbnMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsIkpTT04iLCJzdHJpbmdpZnkiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVksU0FBUztBQUU1QixPQUFPQyxnQkFBZ0IsYUFBYTtBQUNwQyxTQUFTQyxPQUFPLFFBQVEsVUFBVTtBQUdsQyxTQUFTQyxFQUFFLFFBQVEsb0JBQWlCO0FBQ3BDLFNBQ0VDLHNCQUFzQixRQUdqQiw4QkFBMkI7QUFHbEMsU0FBU0MsTUFBTSxRQUFRLGNBQVc7QUFDbEMsU0FBU0MsYUFBYSxRQUFRLGdDQUE2QjtBQW9DM0QsT0FBTyxNQUFNQyxpQkFVUCxFQUFFLENBQUM7QUFjVCxNQUFNQyxrQkFBa0I7SUFDdEJDLEtBQUtDLE9BQU87SUFDWkMsUUFBUUQsT0FBTztBQUNqQjtBQUVBLFNBQVNFLHFCQUFxQkMsTUFBdUIsRUFBRUMsV0FBbUIsRUFBRUMsYUFBcUI7SUFDL0YsTUFBTUMsU0FBU0gsTUFBTSxDQUFDQyxZQUFtQztJQUN6RCxJQUFJRSxRQUFRQyxtQkFBbUJELFFBQVFDLG9CQUFvQkYsZUFBZTtRQUN4RSxNQUFNLElBQUlHLE1BQ1IsQ0FBQyxDQUFDLEVBQUVDLE9BQU9KLGVBQWUsb0NBQW9DLEVBQUVGLE9BQU8sV0FBVyxDQUFDTyxJQUFJLENBQUMsQ0FBQyxFQUFFTixZQUFZLHVFQUF1RSxDQUFDO0lBRW5MLE9BQU87UUFDTEUsT0FBT0MsZUFBZSxHQUFHRjtJQUMzQjtBQUNGO0FBRUEsT0FBTyxTQUFTTSxJQUFJQyxVQUErQixDQUFD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
package/dist/bin/cli.js CHANGED
@@ -157,12 +157,12 @@ bootstrap().finally(async ()=>{
157
157
  * pnpm dev 하면 실행되는 함수입니다.
158
158
  * 프로젝트에 대해 HMR 지원하는 개발 서버를 띄워줍니다.
159
159
  *
160
- * TypeScript를 바로 실행할 수 있도록 @sonamu-kit/loader를,
161
- * HMR을 지원하기 위해 @sonamu-kit/hot-hook을 import하며,
160
+ * TypeScript를 바로 실행할 수 있도록 @sonamu-kit/ts-loader를,
161
+ * HMR을 지원하기 위해 @sonamu-kit/hmr-hook을 import하며,
162
162
  * 소스맵 지원을 위해 --enable-source-maps 플래그를 포함하여 실행합니다.
163
163
  *
164
- * 이때 @sonamu-kit/loader와 @sonamu-kit/hot-hook는 sonamu가 자체적으로 가지고 있는 dependency입니다.
165
- * 또한 실행에 사용하는 @sonamu-kit/hot-runner도 마찬가지로 sonamu가 자체적으로 가지고 있는 dependency입니다.
164
+ * 이때 @sonamu-kit/ts-loader와 @sonamu-kit/hmr-hook는 sonamu가 자체적으로 가지고 있는 dependency입니다.
165
+ * 또한 실행에 사용하는 @sonamu-kit/hmr-runner도 마찬가지로 sonamu가 자체적으로 가지고 있는 dependency입니다.
166
166
  * 따라서 사용자 프로젝트에서는 이 세 패키지를 직접 설치할 필요가 없습니다.
167
167
  *
168
168
  * Sonamu.init 없이 호출될 것을 상정하여 구현되었습니다.
@@ -170,14 +170,14 @@ bootstrap().finally(async ()=>{
170
170
  const apiRoot = findApiRootPath();
171
171
  const entryPoint = "src/index.ts";
172
172
  console.log(chalk.yellow.bold("🚀 Starting Sonamu dev server...\n"));
173
- // 이 sonamu 패키지가 dependencies로 가지고 있는 @sonamu-kit/hot-runner의 bin/run.js를 사용합니다.
174
- // 이 경로(/bin/run.js)는 @sonamu-kit/hot-runner의 package.json의 bin 필드에 명시되어 있는 그것과 같습니다.
175
- const hotRunnerBinPath = createRequire(import.meta.url).resolve("@sonamu-kit/hot-runner/bin/run.js");
173
+ // 이 sonamu 패키지가 dependencies로 가지고 있는 @sonamu-kit/hmr-runner의 bin/run.js를 사용합니다.
174
+ // 이 경로(/bin/run.js)는 @sonamu-kit/hmr-runner의 package.json의 bin 필드에 명시되어 있는 그것과 같습니다.
175
+ const hotRunnerBinPath = createRequire(import.meta.url).resolve("@sonamu-kit/hmr-runner/bin/run.js");
176
176
  const serverProcess = spawn(process.execPath, [
177
177
  hotRunnerBinPath,
178
178
  "--clear-screen=false",
179
- "--node-args=--import=sonamu/loader-register",
180
- "--node-args=--import=sonamu/hot-hook-register",
179
+ "--node-args=--import=sonamu/ts-loader-register",
180
+ "--node-args=--import=sonamu/hmr-hook-register",
181
181
  "--node-args=--enable-source-maps",
182
182
  "--on-key=r:restart:Restart server",
183
183
  `--on-key=f:shell(rm ${path.join(apiRoot, "sonamu.lock")}):restart:Force restart`,
@@ -474,12 +474,12 @@ async function ui() {
474
474
  console.log(chalk.red(`UI runner script not found at ${uiNodePath}. Please rebuild @sonamu-kit/ui.`));
475
475
  return;
476
476
  }
477
- // UI를 별도 프로세스로 실행 (hot-hook 활성화)
477
+ // UI를 별도 프로세스로 실행 (hmr-hook 활성화)
478
478
  const uiProcess = spawn(process.execPath, [
479
479
  "--import",
480
- "sonamu/loader-register",
480
+ "sonamu/ts-loader-register",
481
481
  "--import",
482
- "sonamu/hot-hook-register",
482
+ "sonamu/hmr-hook-register",
483
483
  "--enable-source-maps",
484
484
  "--no-warnings",
485
485
  uiNodePath
@@ -516,4 +516,4 @@ async function ui() {
516
516
  }
517
517
  }
518
518
 
519
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuXG5kb3RlbnYuY29uZmlnKCk7XG5cbmltcG9ydCB7IGV4ZWNTeW5jLCBzcGF3biB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBta2RpciwgcmVhZGRpciwgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGtuZXgsIHsgdHlwZSBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcInByb2Nlc3NcIjtcbmltcG9ydCB7IHRzaWNsaSB9IGZyb20gXCJ0c2ljbGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11REJDb25maWcgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBNaWdyYXRvciB9IGZyb20gXCIuLi9taWdyYXRpb24vbWlncmF0b3JcIjtcbmltcG9ydCB7IEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IGZpbmRBcGlSb290UGF0aCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgQlVJTERfRElSLCBTV0NfQlVJTERfQ09NTUFORCwgVFNDX1RZUEVfQ0hFQ0tfQ09NTUFORCB9IGZyb20gXCIuL2J1aWxkLWNvbmZpZ1wiO1xuXG5sZXQgbWlncmF0b3I6IE1pZ3JhdG9yO1xuXG5hc3luYyBmdW5jdGlvbiBib290c3RyYXAoKSB7XG4gIGNvbnN0IG5vdFRvSW5pdCA9IFtcImRldlwiLCBcImJ1aWxkXCIsIFwic3RhcnRcIl0uaW5jbHVkZXMocHJvY2Vzcy5hcmd2WzJdID8/IFwiXCIpO1xuICBpZiAoIW5vdFRvSW5pdCkge1xuICAgIGF3YWl0IFNvbmFtdS5pbml0KGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBhd2FpdCB0c2ljbGkocHJvY2Vzcy5hcmd2LCB7XG4gICAgdHlwZXM6IHtcbiAgICAgIFwiI2VudGl0eUlkXCI6IHtcbiAgICAgICAgdHlwZTogXCJhdXRvY29tcGxldGVcIixcbiAgICAgICAgbmFtZTogXCIjZW50aXR5SWRcIixcbiAgICAgICAgbWVzc2FnZTogXCJQbGVhc2UgaW5wdXQgI2VudGl0eUlkXCIsXG4gICAgICAgIGNob2ljZXM6IEVudGl0eU1hbmFnZXIuZ2V0QWxsUGFyZW50SWRzKCkubWFwKChlbnRpdHlJZCkgPT4gKHtcbiAgICAgICAgICB0aXRsZTogZW50aXR5SWQsXG4gICAgICAgICAgdmFsdWU6IGVudGl0eUlkLFxuICAgICAgICB9KSksXG4gICAgICB9LFxuICAgICAgXCIjcmVjb3JkSWRzXCI6IFwibnVtYmVyW11cIixcbiAgICAgIFwiI25hbWVcIjogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIGFyZ3M6IFtcbiAgICAgIFtcImZpeHR1cmVcIiwgXCJpbml0XCJdLFxuICAgICAgW1wiZml4dHVyZVwiLCBcImltcG9ydFwiLCBcIiNlbnRpdHlJZFwiLCBcIiNyZWNvcmRJZHNcIl0sXG4gICAgICBbXCJmaXh0dXJlXCIsIFwic3luY1wiXSxcbiAgICAgIFtcIm1pZ3JhdGVcIiwgXCJydW5cIl0sXG4gICAgICBbXCJtaWdyYXRlXCIsIFwiY2hlY2tcIl0sXG4gICAgICBbXCJtaWdyYXRlXCIsIFwicm9sbGJhY2tcIl0sXG4gICAgICBbXCJtaWdyYXRlXCIsIFwicmVzZXRcIl0sXG4gICAgICBbXCJtaWdyYXRlXCIsIFwiY2xlYXJcIl0sXG4gICAgICBbXCJtaWdyYXRlXCIsIFwic3RhdHVzXCJdLFxuICAgICAgW1wic3R1YlwiLCBcInByYWN0aWNlXCIsIFwiI25hbWVcIl0sXG4gICAgICBbXCJzdHViXCIsIFwiZW50aXR5XCIsIFwiI25hbWVcIl0sXG4gICAgICBbXCJzY2FmZm9sZFwiLCBcIm1vZGVsXCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgW1wic2NhZmZvbGRcIiwgXCJtb2RlbF90ZXN0XCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgW1wic2NhZmZvbGRcIiwgXCJ2aWV3X2xpc3RcIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICBbXCJzY2FmZm9sZFwiLCBcInZpZXdfZm9ybVwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgIFtcInVpXCJdLFxuICAgICAgW1wic3luY1wiXSxcbiAgICAgIFtcImRldlwiXSxcbiAgICAgIFtcImJ1aWxkXCJdLFxuICAgICAgW1wic3RhcnRcIl0sXG4gICAgXSxcbiAgICBydW5uZXJzOiB7XG4gICAgICBtaWdyYXRlX3N0YXR1cyxcbiAgICAgIG1pZ3JhdGVfcnVuLFxuICAgICAgZml4dHVyZV9pbml0LFxuICAgICAgZml4dHVyZV9pbXBvcnQsXG4gICAgICBmaXh0dXJlX3N5bmMsXG4gICAgICBzdHViX3ByYWN0aWNlLFxuICAgICAgc3R1Yl9lbnRpdHksXG4gICAgICBzY2FmZm9sZF9tb2RlbCxcbiAgICAgIHNjYWZmb2xkX21vZGVsX3Rlc3QsXG4gICAgICB1aSxcbiAgICAgIC8vIHNjYWZmb2xkX3ZpZXdfbGlzdCxcbiAgICAgIC8vIHNjYWZmb2xkX3ZpZXdfZm9ybSxcbiAgICAgIHN5bmMsXG4gICAgICBkZXYsXG4gICAgICBidWlsZCxcbiAgICAgIHN0YXJ0LFxuICAgIH0sXG4gIH0pO1xufVxuXG5ib290c3RyYXAoKS5maW5hbGx5KGFzeW5jICgpID0+IHtcbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuZGVzdHJveSgpO1xufSk7XG5cbi8qKlxuICogcG5wbSBzeW5jIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog7ZSE66Gc7KCd7Yq466W8IOyLse2BrO2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3luYygpIHtcbiAgYXdhaXQgU29uYW11LnN5bmNlci5zeW5jKCk7XG59XG5cbi8qKlxuICogcG5wbSBkZXYg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjsl5Ag64yA7ZW0IEhNUiDsp4Dsm5DtlZjripQg6rCc67CcIOyEnOuyhOulvCDrnYTsm4zspI3ri4jri6QuXG4gKlxuICogVHlwZVNjcmlwdOulvCDrsJTroZwg7Iuk7ZaJ7ZWgIOyImCDsnojrj4TroZ0gQHNvbmFtdS1raXQvbG9hZGVy66W8LFxuICogSE1S7J2EIOyngOybkO2VmOq4sCDsnITtlbQgQHNvbmFtdS1raXQvaG90LWhvb2vsnYQgaW1wb3J07ZWY66mwLFxuICog7IaM7Iqk66e1IOyngOybkOydhCDsnITtlbQgLS1lbmFibGUtc291cmNlLW1hcHMg7ZSM656Y6re466W8IO2PrO2VqO2VmOyXrCDsi6Ttlontlanri4jri6QuXG4gKlxuICog7J2065WMIEBzb25hbXUta2l0L2xvYWRlcuyZgCBAc29uYW11LWtpdC9ob3QtaG9va+uKlCBzb25hbXXqsIAg7J6Q7LK07KCB7Jy866GcIOqwgOyngOqzoCDsnojripQgZGVwZW5kZW5jeeyeheuLiOuLpC5cbiAqIOuYkO2VnCDsi6Ttlonsl5Ag7IKs7Jqp7ZWY64qUIEBzb25hbXUta2l0L2hvdC1ydW5uZXLrj4Qg66eI7LCs6rCA7KeA66GcIHNvbmFtdeqwgCDsnpDssrTsoIHsnLzroZwg6rCA7KeA6rOgIOyeiOuKlCBkZXBlbmRlbmN57J6F64uI64ukLlxuICog65Sw65287IScIOyCrOyaqeyekCDtlITroZzsoJ3tirjsl5DshJzripQg7J20IOyEuCDtjKjtgqTsp4Drpbwg7KeB7KCRIOyEpOy5mO2VoCDtlYTsmpTqsIAg7JeG7Iq164uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldigpIHtcbiAgY29uc3QgYXBpUm9vdCA9IGZpbmRBcGlSb290UGF0aCgpO1xuICBjb25zdCBlbnRyeVBvaW50ID0gXCJzcmMvaW5kZXgudHNcIjtcblxuICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIvCfmoAgU3RhcnRpbmcgU29uYW11IGRldiBzZXJ2ZXIuLi5cXG5cIikpO1xuXG4gIC8vIOydtCBzb25hbXUg7Yyo7YKk7KeA6rCAIGRlcGVuZGVuY2llc+uhnCDqsIDsp4Dqs6Ag7J6I64qUIEBzb25hbXUta2l0L2hvdC1ydW5uZXLsnZggYmluL3J1bi5qc+ulvCDsgqzsmqntlanri4jri6QuXG4gIC8vIOydtCDqsr3roZwoL2Jpbi9ydW4uanMp64qUIEBzb25hbXUta2l0L2hvdC1ydW5uZXLsnZggcGFja2FnZS5qc29u7J2YIGJpbiDtlYTrk5zsl5Ag66qF7Iuc65CY7Ja0IOyeiOuKlCDqt7jqsoPqs7wg6rCZ7Iq164uI64ukLlxuICBjb25zdCBob3RSdW5uZXJCaW5QYXRoID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpLnJlc29sdmUoXG4gICAgXCJAc29uYW11LWtpdC9ob3QtcnVubmVyL2Jpbi9ydW4uanNcIixcbiAgKTtcblxuICBjb25zdCBzZXJ2ZXJQcm9jZXNzID0gc3Bhd24oXG4gICAgcHJvY2Vzcy5leGVjUGF0aCwgLy8gbm9kZVxuICAgIFtcbiAgICAgIGhvdFJ1bm5lckJpblBhdGgsIC8vIOydtOugh+qyjCDtlbTshJwgaG90LXJ1bm5lcuulvCDsi6TtlontlZjqtazsmpRcbiAgICAgIFwiLS1jbGVhci1zY3JlZW49ZmFsc2VcIiwgLy8g7J207ZWYIGhvdC1ydW5uZXLsl5Dqsowg64SY6rKo7KSEIOyduOyekOuTpOyeheuLiOuLpC5cbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1pbXBvcnQ9c29uYW11L2xvYWRlci1yZWdpc3RlclwiLCAvLyBUeXBlU2NyaXB0IOyEnO2PrO2KuOulvCDsnITtlZwg66Gc642ULFxuICAgICAgXCItLW5vZGUtYXJncz0tLWltcG9ydD1zb25hbXUvaG90LWhvb2stcmVnaXN0ZXJcIiwgLy8gSE1S7J2EIOyngOybkO2VmOq4sCDsnITtlZwgaG90LWhvb2ssXG4gICAgICBcIi0tbm9kZS1hcmdzPS0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsIC8vIOq3uOumrOqzoCDshozsiqTrp7Ug7KeA7JuQ7J2EIOychO2VnCDtlIzrnpjqt7jsnoXri4jri6QuXG4gICAgICBcIi0tb24ta2V5PXI6cmVzdGFydDpSZXN0YXJ0IHNlcnZlclwiLCAvLyByIOuIhOultOuptCDshJzrsoQg7J6s7Iuc7J6R7ZWY6rKMIO2VtOykmOyalC5cbiAgICAgIGAtLW9uLWtleT1mOnNoZWxsKHJtICR7cGF0aC5qb2luKGFwaVJvb3QsIFwic29uYW11LmxvY2tcIil9KTpyZXN0YXJ0OkZvcmNlIHJlc3RhcnRgLCAvLyBmIOuIhOultOuptCBzb25hbXUubG9jayDtjIzsnbzsnYQg7KeA7Jqw6rOgIOyEnOuyhCDsnqzsi5zsnpHtlZjqsowg7ZW07KSY7JqULlxuXG4gICAgICBcIi0tb24ta2V5PWVudGVyOnNoZWxsKGVjaG8gaGkpOktleSBiaW5kaW5nIHRlc3RcIiwgLy8gZW50ZXLrpbwga2V566GcIOyTuCDsiJgg7J6I7J2M7J2EIOuztOydtOq4sCDsnITtlZwg7YWM7Iqk7Yq47J6F64uI64ukLlxuICAgICAgXCItLW9uLWtleT1jdHJsK2YgY3RybCtmOnNoZWxsKGdpdCBwdWxsICYmIHBucG0gaW5zdGFsbCAmJiBwbnBtIC0tZmlsdGVyIHNvbmFtdSBidWlsZCAmJiBlY2hvICdTb25hbXUgaXMgbm93IHVwLXRvLWRhdGUhJyk6cmVzdGFydDpQdWxsICYgaW5zdGFsbCAmIGJ1aWxkICYgcmVzdGFydFwiLCAvLyBtb2RpZmllcuyZgOydmCDsobDtlaksIOq3uOumrOqzoCDrkZAg6rCc7J2YIGNob3Jk66W8IOyCrOyaqe2VoCDsiJgg7J6I7J2M7J2EIOuztOydtOq4sCDsnITtlZwg7YWM7Iqk7Yq47J6F64uI64ukLlxuICAgICAgZW50cnlQb2ludCwgLy8g66eI7KeA66eJ7Jy866GcIOyLpOygnCDsi6TtlontlaAg7Iqk7YGs66a97Yq47J2YIOqyveuhnOulvCDrhJjqsqjspI3ri4jri6QuXG4gICAgXSxcbiAgICB7XG4gICAgICBjd2Q6IGFwaVJvb3QsXG4gICAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgIE5PREVfRU5WOiBcImRldmVsb3BtZW50XCIsXG4gICAgICAgIEhPVDogXCJ5ZXNcIiwgLy8g7JaY6rCAIOyeiOyWtOyVvCBITVLsnbQg7Zmc7ISx7ZmU65Cp64uI64ukLlxuICAgICAgICBBUElfUk9PVF9QQVRIOiBhcGlSb290LCAvLyDsnbQg6rK966Gc6rCAIGhvdC1ob29r7J2YIOujqO2KuCDrlJTroInthqDrpqzqsIAg65Cp64uI64ukLlxuICAgICAgfSxcbiAgICB9LFxuICApO1xuXG4gIC8vIOyiheujjCDsspjrpqxcbiAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCJcXG5cXG7wn5GLIFNodXR0aW5nIGRvd24uLi5cIikpO1xuICAgIHNlcnZlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9O1xuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgY2xlYW51cCk7XG4gIHByb2Nlc3Mub24oXCJTSUdURVJNXCIsIGNsZWFudXApO1xuXG4gIHNlcnZlclByb2Nlc3Mub24oXCJleGl0XCIsIChjb2RlKSA9PiB7XG4gICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKGDinYwgU2VydmVyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKTtcbiAgICAgIHByb2Nlc3MuZXhpdChjb2RlIHx8IDEpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogcG5wbSBidWlsZCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIO2UhOuhnOygne2KuOulvCDruYzrk5ztlanri4jri6QuXG4gKlxuICog67mM65Oc7JeQIO2VhOyalO2VnCAuc3djcmPripQg7ZSE66Gc7KCd7Yq4IOujqO2KuOyXkOyEnCDssL7qs6AsIOyXhuycvOuptCBzb25hbXXqsIAg6rSA66as7ZWY64qUIC5zd2NyYy5wcm9qZWN0LWRlZmF1bHTrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICogc29uYW11LmNvbmZpZy50c+uKlCBzcmPsl5Ag65Ok7Ja07J6I7KeAIOyViuq4sCDrlYzrrLjsl5AgU1dDX0JVSUxEX0NPTU1BTkTroZwg67mM65Oc65CY7KeAIOyViuyKteuLiOuLpC5cbiAqIOuUsOudvOyEnCDrlLDroZwg67mM65Oc7ZW07KSN64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkKCkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG5cbiAgLy8g7Lac66ClIOuUlOugie2GoOumrOulvCDsoJzqsbDtlanri4jri6QuXG4gIHRyeSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlJlbW92aW5nIGJ1aWxkIGRpcmVjdG9yeS4uLlwiKSk7XG4gICAgaWYgKGF3YWl0IGV4aXN0cyhCVUlMRF9ESVIpKSB7XG4gICAgICBhd2FpdCBybShCVUlMRF9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJSZW1vdmUgYnVpbGQgZGlyZWN0b3J5IGZhaWxlZC5cIiksIGVycm9yKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyAuc3djcmMg7YyM7J287J2EIOyngOygle2VqeuLiOuLpC5cbiAgbGV0IHN3Y0ZpbGVQYXRoID0gXCIuc3djcmNcIjtcbiAgdHJ5IHtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKHN3Y0ZpbGVQYXRoKSkge1xuICAgICAgLy8g7IKs7Jqp7J6QIO2UhOuhnOygne2KuOyXkCAuc3djcmPqsIAg7J6I7Jy866m0IOyasOyEoOycvOuhnCDsgqzsmqntlanri4jri6QuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ibHVlKFwiVXNpbmcgLnN3Y3JjIGZyb20gcHJvamVjdCByb290Li4uXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g7JWE64uI652866m0IHNvbmFtdeqwgCDqtIDrpqztlZjripQgLnN3Y3JjLnByb2plY3QtZGVmYXVsdOulvCDqsIDsoLjri6Qg7JSB64uI64ukLlxuICAgICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlVzaW5nIGRlZmF1bHQgLnN3Y3JjIGZyb20gc29uYW11IHBhY2thZ2UuLi5cIikpO1xuICAgICAgc3djRmlsZVBhdGggPSBwYXRoLmpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiLnN3Y3JjLnByb2plY3QtZGVmYXVsdFwiKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJTZXR0aW5nIHVwIHN3YyBjb25maWcgZmlsZSBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8g7IaM7IqkIOuUlOugie2GoOumrOulvCDruYzrk5ztlanri4jri6QuXG4gIHRyeSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIkJ1aWxkaW5nIHdpdGggc3djLi4uXCIpKTtcbiAgICBleGVjU3luYyhTV0NfQlVJTERfQ09NTUFORChzd2NGaWxlUGF0aCksIHsgY3dkOiBhcGlSb290LCBzdGRpbzogXCJpbmhlcml0XCIgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJCdWlsZCBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8gc29uYW11LmNvbmZpZy50c+unjCDrlLDroZwg67mM65Oc7ZWp64uI64ukLlxuICAvLyDsnbQg7Lmc6rWs64qUIHNyY+yXkCDrk6TslrTsnojsp4Ag7JWK6riwIOuVjOusuOyXkCBTV0NfQlVJTERfQ09NTUFOROuhnCDruYzrk5zrkJjsp4Ag7JWK7Iq164uI64ukLlxuICAvLyDrlLDrnbzshJwg65Sw66GcIOu5jOuTnO2VtOykjeuLiOuLpC5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWdQYXRoID0gcGF0aC5qb2luKGFwaVJvb3QsIFwic29uYW11LmNvbmZpZy50c1wiKTtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKGNvbmZpZ1BhdGgpKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ibHVlKFwiQnVpbGRpbmcgc29uYW11LmNvbmZpZy50cy4uLlwiKSk7XG4gICAgICBleGVjU3luYyhgc3djICR7Y29uZmlnUGF0aH0gLW8gJHtCVUlMRF9ESVJ9L3NvbmFtdS5jb25maWcuanNgLCB7XG4gICAgICAgIGN3ZDogYXBpUm9vdCxcbiAgICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgICAgfSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwiQnVpbGRpbmcgc29uYW11LmNvbmZpZy50cyBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgLy8g66eI7KeA66eJ7JeQ64qUIO2DgOyehSDssrTtgazrpbwg7ZW07JqULlxuICB0cnkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsdWUoXCJDaGVja2luZyB0eXBlcyB3aXRoIHRzYy4uLlwiKSk7XG4gICAgZXhlY1N5bmMoVFNDX1RZUEVfQ0hFQ0tfQ09NTUFORCwge1xuICAgICAgY3dkOiBhcGlSb290LFxuICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKFwiVHlwZSBjaGVjayBmYWlsZWQuXCIpLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbi8qKlxuICogcG5wbSBzdGFydCDtlZjrqbQg7Iuk7ZaJ65CY64qUIO2VqOyImOyeheuLiOuLpC5cbiAqIOu5jOuTnOuQnCDtlITroZzsoJ3tirjrpbwg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIOu5jOuTnOuQnCDqsrDqs7zrrLwoZGlzdCDrlJTroInthqDrpqzsnZggaW5kZXguanMg7JeU7Yq466as7Y+s7J247Yq4KeydtCDsl4bri6TrqbQg7Iuk7ZaJ7J2EIOykkeuLqO2VqeuLiOuLpC5cbiAqIOyGjOyKpOuntSDsp4Dsm5Dqs7wgZG90ZW52IOyngOybkOydhCDtj6ztlajtlZjsl6wg7Iuk7ZaJ7ZWp64uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICBjb25zdCBhcGlSb290ID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIGNvbnN0IGVudHJ5UG9pbnQgPSBcImRpc3QvaW5kZXguanNcIjtcblxuICBpZiAoIShhd2FpdCBleGlzdHMoZW50cnlQb2ludCkpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGAke2VudHJ5UG9pbnR9IG5vdCBmb3VuZC4gUGxlYXNlIGJ1aWxkIHlvdXIgcHJvamVjdCBmaXJzdC5gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIlJ1bjogeWFybiBzb25hbXUgYnVpbGRcIikpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IGltcG9ydChcImNoaWxkX3Byb2Nlc3NcIik7XG4gIGNvbnN0IHNlcnZlclByb2Nlc3MgPSBzcGF3bihcbiAgICBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgIFtcIi0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsIFwiLXJcIiwgXCJkb3RlbnYvY29uZmlnXCIsIGVudHJ5UG9pbnRdLFxuICAgIHtcbiAgICAgIGN3ZDogYXBpUm9vdCxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICB9LFxuICApO1xuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgKCkgPT4ge1xuICAgIHNlcnZlclByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBNaWdyYXRvcigpIHtcbiAgLy8gbWlncmF0b3JcbiAgbWlncmF0b3IgPSBuZXcgTWlncmF0b3IoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0dXBGaXh0dXJlTWFuYWdlcigpIHtcbiAgRml4dHVyZU1hbmFnZXIuaW5pdCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3J1bigpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuXG4gIGF3YWl0IG1pZ3JhdG9yLnJ1bkFjdGlvbihcbiAgICBcImFwcGx5XCIsXG4gICAgT2JqZWN0LmtleXMoU29uYW11LmRiQ29uZmlnKSBhcyAoa2V5b2YgU29uYW11REJDb25maWcpW10gLyrsi7kg64ukISovLFxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaWdyYXRlX3N0YXR1cygpIHtcbiAgYXdhaXQgc2V0dXBNaWdyYXRvcigpO1xuXG4gIGNvbnN0IHN0YXR1cyA9IGF3YWl0IG1pZ3JhdG9yLmdldFN0YXR1cygpO1xuICAvLyBzdGF0dXM7XG4gIGNvbnNvbGUubG9nKHN0YXR1cyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfaW5pdCgpIHtcbiAgY29uc3Qgc3JjQ29uZmlnID0gU29uYW11LmRiQ29uZmlnLmRldmVsb3BtZW50X21hc3RlcjtcbiAgY29uc3QgdGFyZ2V0cyA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogXCIoUkVNT1RFKSBGaXh0dXJlIERCXCIsXG4gICAgICBjb25maWc6IFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlX3JlbW90ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiBcIihMT0NBTCkgVGVzdGluZyBEQlwiLFxuICAgICAgY29uZmlnOiBTb25hbXUuZGJDb25maWcudGVzdCxcbiAgICAgIHRvU2tpcDogKCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVtb3RlQ29ubiA9IFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlX3JlbW90ZS5jb25uZWN0aW9uIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZztcbiAgICAgICAgY29uc3QgbG9jYWxDb25uID0gU29uYW11LmRiQ29uZmlnLnRlc3QuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gICAgICAgIHJldHVybiByZW1vdGVDb25uLmhvc3QgPT09IGxvY2FsQ29ubi5ob3N0ICYmIHJlbW90ZUNvbm4uZGF0YWJhc2UgPT09IGxvY2FsQ29ubi5kYXRhYmFzZTtcbiAgICAgIH0pKCksXG4gICAgfSxcbiAgXSBhcyB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBjb25maWc6IEtuZXguQ29uZmlnO1xuICAgIHRvU2tpcD86IGJvb2xlYW47XG4gIH1bXTtcblxuICAvLyAxLiDquLDspIBEQiDsiqTtgqTrp4jrpbwg642k7ZSEXG4gIGNvbnNvbGUubG9nKFwiRFVNUC4uLlwiKTtcbiAgY29uc3QgZHVtcEZpbGVuYW1lID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC0ke0RhdGUubm93KCl9LnNxbGA7XG4gIGNvbnN0IHNyY0Nvbm4gPSBzcmNDb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG4gIGNvbnN0IG1pZ3JhdGlvbnNEdW1wID0gYC90bXAvc29uYW11LWZpeHR1cmUtaW5pdC1taWdyYXRpb25zLSR7RGF0ZS5ub3coKX0uc3FsYDtcbiAgZXhlY1N5bmMoXG4gICAgYG15c3FsZHVtcCAtaCR7c3JjQ29ubi5ob3N0fSAtdSR7c3JjQ29ubi51c2VyfSAtcCR7c3JjQ29ubi5wYXNzd29yZH0gLS1zaW5nbGUtdHJhbnNhY3Rpb24gLWQgLS1uby1jcmVhdGUtZGIgLS10cmlnZ2VycyAke3NyY0Nvbm4uZGF0YWJhc2V9ID4gJHtkdW1wRmlsZW5hbWV9YCxcbiAgKTtcbiAgY29uc3QgX2RiID0ga25leChzcmNDb25maWcpO1xuICBjb25zdCBbW21pZ3JhdGlvbnNdXSA9IGF3YWl0IF9kYi5yYXcoXG4gICAgXCJTRUxFQ1QgQ09VTlQoKikgYXMgY291bnQgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIFdIRVJFIHRhYmxlX3NjaGVtYSA9ID8gQU5EIHRhYmxlX25hbWUgPSAna25leF9taWdyYXRpb25zJ1wiLFxuICAgIFtzcmNDb25uLmRhdGFiYXNlXSxcbiAgKTtcbiAgaWYgKG1pZ3JhdGlvbnMuY291bnQgPiAwKSB7XG4gICAgZXhlY1N5bmMoXG4gICAgICBgbXlzcWxkdW1wIC1oJHtzcmNDb25uLmhvc3R9IC11JHtzcmNDb25uLnVzZXJ9IC1wJHtzcmNDb25uLnBhc3N3b3JkfSAtLXNpbmdsZS10cmFuc2FjdGlvbiAtLW5vLWNyZWF0ZS1kYiAtLXRyaWdnZXJzICR7c3JjQ29ubi5kYXRhYmFzZX0ga25leF9taWdyYXRpb25zIGtuZXhfbWlncmF0aW9uc19sb2NrID4gJHttaWdyYXRpb25zRHVtcH1gLFxuICAgICk7XG4gIH1cblxuICAvLyAyLiDrjIDsg4FEQiDqsIHqsIHsl5Ag64yA7ZWY7JesIOyhtOyerOyXrOu2gCDtmZXsnbgg7ZuEIOu2k+q4sFxuICBmb3IgYXdhaXQgKGNvbnN0IHsgbGFiZWwsIGNvbmZpZywgdG9Ta2lwIH0gb2YgdGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbm4gPSBjb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LkNvbm5lY3Rpb25Db25maWc7XG5cbiAgICBpZiAodG9Ta2lwID09PSB0cnVlKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoYCR7bGFiZWx9OiBTa2lwcGVkIWApKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGRiID0ga25leCh7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgIC4uLigoY29uZmlnLmNvbm5lY3Rpb24gPz8ge30pIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZyksXG4gICAgICAgIGRhdGFiYXNlOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IFtbcm93XV0gPSBhd2FpdCBkYi5yYXcoYFNIT1cgREFUQUJBU0VTIExJS0UgXCIke2Nvbm4uZGF0YWJhc2V9XCJgKTtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYCR7bGFiZWx9OiBEYXRhYmFzZSBcIiR7Y29ubi5kYXRhYmFzZX1cIiBBbHJlYWR5IGV4aXN0c2ApKTtcbiAgICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBTWU5DIHRvICR7bGFiZWx9Li4uYCk7XG4gICAgY29uc3QgbXlzcWxDbWQgPSBgbXlzcWwgLWgke2Nvbm4uaG9zdH0gLXUke2Nvbm4udXNlcn0gLXAke2Nvbm4ucGFzc3dvcmR9YDtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gLWUgJ0RST1AgREFUQUJBU0UgSUYgRVhJU1RTIFxcYCR7Y29ubi5kYXRhYmFzZX1cXGAnYCk7XG4gICAgZXhlY1N5bmMoYCR7bXlzcWxDbWR9IC1lICdDUkVBVEUgREFUQUJBU0UgXFxgJHtjb25uLmRhdGFiYXNlfVxcYCdgKTtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7ZHVtcEZpbGVuYW1lfWApO1xuICAgIGlmIChhd2FpdCBleGlzdHMobWlncmF0aW9uc0R1bXApKSB7XG4gICAgICBleGVjU3luYyhgJHtteXNxbENtZH0gJHtjb25uLmRhdGFiYXNlfSA8ICR7bWlncmF0aW9uc0R1bXB9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICB9XG5cbiAgYXdhaXQgX2RiLmRlc3Ryb3koKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9pbXBvcnQoZW50aXR5SWQ6IHN0cmluZywgcmVjb3JkSWRzOiBudW1iZXJbXSkge1xuICBhd2FpdCBzZXR1cEZpeHR1cmVNYW5hZ2VyKCk7XG5cbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuaW1wb3J0Rml4dHVyZShlbnRpdHlJZCwgcmVjb3JkSWRzKTtcbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuc3luYygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX3N5bmMoKSB7XG4gIGF3YWl0IHNldHVwRml4dHVyZU1hbmFnZXIoKTtcblxuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5zeW5jKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0dWJfcHJhY3RpY2UobmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHByYWN0aWNlRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJwcmFjdGljZXNcIik7XG4gIGNvbnN0IGZpbGVOYW1lcyA9IGF3YWl0IHJlYWRkaXIocHJhY3RpY2VEaXIpO1xuXG4gIGNvbnN0IG1heFNlcU5vID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIShhd2FpdCBleGlzdHMocHJhY3RpY2VEaXIpKSkge1xuICAgICAgYXdhaXQgbWtkaXIocHJhY3RpY2VEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcmVkU2VxcyA9IGZpbGVOYW1lc1xuICAgICAgLmZpbHRlcigoZmlsZU5hbWUpID0+IGZpbGVOYW1lLnN0YXJ0c1dpdGgoXCJwXCIpICYmIGZpbGVOYW1lLmVuZHNXaXRoKFwiLnRzXCIpKVxuICAgICAgLm1hcCgoZmlsZU5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgWywgc2VxTm9dID0gZmlsZU5hbWUubWF0Y2goL15wKFswLTldKyktLykgPz8gW1wiMFwiLCBcIjBcIl07XG4gICAgICAgIHJldHVybiBwYXJzZUludChzZXFObyk7XG4gICAgICB9KVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIgLSBhKTtcblxuICAgIGlmIChmaWx0ZXJlZFNlcXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGZpbHRlcmVkU2Vxc1swXTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSkoKTtcblxuICBjb25zdCBjdXJyZW50U2VxTm8gPSBtYXhTZXFObyArIDE7XG4gIGNvbnN0IGZpbGVOYW1lID0gYHAke2N1cnJlbnRTZXFOb30tJHtuYW1lfS50c2A7XG4gIGNvbnN0IGRzdFBhdGggPSBwYXRoLmpvaW4ocHJhY3RpY2VEaXIsIGZpbGVOYW1lKTtcblxuICBjb25zdCBjb2RlID0gW1xuICAgIGBpbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICBcIlwiLFxuICAgIGBjb25zb2xlLmNsZWFyKCk7YCxcbiAgICBgY29uc29sZS5sb2coXCIke2ZpbGVOYW1lfVwiKTtgLFxuICAgIFwiXCIsXG4gICAgYFNvbmFtdS5ydW5TY3JpcHQoYXN5bmMgKCkgPT4ge2AsXG4gICAgYCAvLyBUT0RPYCxcbiAgICBgfSk7YCxcbiAgICBcIlwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG4gIGF3YWl0IHdyaXRlRmlsZShkc3RQYXRoLCBjb2RlKTtcblxuICBleGVjU3luYyhgY29kZSAke2RzdFBhdGh9YCk7XG5cbiAgY29uc3QgcnVuQ29kZSA9IGB5YXJuIG5vZGUgLXIgZG90ZW52L2NvbmZpZyAtLWVuYWJsZS1zb3VyY2UtbWFwcyBkaXN0L3ByYWN0aWNlcy8ke2ZpbGVOYW1lLnJlcGxhY2UoXG4gICAgXCIudHNcIixcbiAgICBcIi5qc1wiLFxuICApfWA7XG4gIGNvbnNvbGUubG9nKGAke2NoYWxrLmJsdWUocnVuQ29kZSl9IGNvcGllZCB0byBjbGlwYm9hcmQuYCk7XG4gIGV4ZWNTeW5jKGBlY2hvIFwiJHtydW5Db2RlfVwiIHwgcGJjb3B5YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0dWJfZW50aXR5KGVudGl0eUlkOiBzdHJpbmcpIHtcbiAgYXdhaXQgU29uYW11LnN5bmNlci5jcmVhdGVFbnRpdHkoeyBlbnRpdHlJZCwgdGl0bGU6IGVudGl0eUlkIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZF9tb2RlbChlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuZ2VuZXJhdGVUZW1wbGF0ZShcIm1vZGVsXCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkX21vZGVsX3Rlc3QoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXCJtb2RlbF90ZXN0XCIsIHtcbiAgICBlbnRpdHlJZCxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVpKCkge1xuICB0cnkge1xuICAgIC8vIOyCrOyaqeyekCDtlITroZzsoJ3tirjsnZgg7Yyo7YKk7KeA65OkIOykkeyXkOyEnCBAc29uYW11LWtpdC91aeulvCDssL7sirXri4jri6QuXG4gICAgLy8g7J2066W8IOychO2VtOyEnCBjcmVhdGVSZXF1aXJl66W8IOyCrOyaqe2VmOyXrCDtlITroZzsoJ3tirgg6rK966GcIOq4sOykgOycvOuhnCByZXNvbHZl7ZWp64uI64ukLlxuICAgIGNvbnN0IHByb2plY3RSZXF1aXJlID0gY3JlYXRlUmVxdWlyZShwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBcInBhY2thZ2UuanNvblwiKSk7XG4gICAgY29uc3QgdWlQYWNrYWdlUGF0aCA9IHByb2plY3RSZXF1aXJlLnJlc29sdmUoXCJAc29uYW11LWtpdC91aVwiKTsgLy8g7JeG7Jy866m0IOyXrOq4sOyEnCDthLDsoLjsmpQoTU9EVUxFX05PVF9GT1VORClcbiAgICBjb25zdCB1aU5vZGVQYXRoID0gcGF0aC5qb2luKHBhdGguZGlybmFtZSh1aVBhY2thZ2VQYXRoKSwgXCJydW4tdWkuanNcIik7XG5cbiAgICBpZiAoIShhd2FpdCBleGlzdHModWlOb2RlUGF0aCkpKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgY2hhbGsucmVkKGBVSSBydW5uZXIgc2NyaXB0IG5vdCBmb3VuZCBhdCAke3VpTm9kZVBhdGh9LiBQbGVhc2UgcmVidWlsZCBAc29uYW11LWtpdC91aS5gKSxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVUnrpbwg67OE64+EIO2UhOuhnOyEuOyKpOuhnCDsi6TtlokgKGhvdC1ob29rIO2ZnOyEse2ZlClcbiAgICBjb25zdCB1aVByb2Nlc3MgPSBzcGF3bihcbiAgICAgIHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgICBbXG4gICAgICAgIFwiLS1pbXBvcnRcIixcbiAgICAgICAgXCJzb25hbXUvbG9hZGVyLXJlZ2lzdGVyXCIsXG4gICAgICAgIFwiLS1pbXBvcnRcIixcbiAgICAgICAgXCJzb25hbXUvaG90LWhvb2stcmVnaXN0ZXJcIixcbiAgICAgICAgXCItLWVuYWJsZS1zb3VyY2UtbWFwc1wiLFxuICAgICAgICBcIi0tbm8td2FybmluZ3NcIixcbiAgICAgICAgdWlOb2RlUGF0aCxcbiAgICAgIF0sXG4gICAgICB7XG4gICAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgICAgSE9UOiBcInllc1wiLFxuICAgICAgICAgIFBST0pFQ1RfTkFNRTogU29uYW11LmNvbmZpZy5wcm9qZWN0TmFtZSA/PyBwYXRoLmJhc2VuYW1lKFNvbmFtdS5hcGlSb290UGF0aCksXG4gICAgICAgICAgQVBJX1JPT1RfUEFUSDogU29uYW11LmFwaVJvb3RQYXRoLFxuICAgICAgICAgIFVJX1BPUlQ6IChTb25hbXUuY29uZmlnLnVpPy5wb3J0ID8/IDU3MDAwKS50b1N0cmluZygpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8g7KKF66OMIOyymOumrFxuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coXCJcXG5cXG7wn5GLIFNodXR0aW5nIGRvd24gVUkgc2VydmVyLi4uXCIpKTtcbiAgICAgIHVpUHJvY2Vzcy5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9O1xuXG4gICAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCBjbGVhbnVwKTtcbiAgICBwcm9jZXNzLm9uKFwiU0lHVEVSTVwiLCBjbGVhbnVwKTtcblxuICAgIHVpUHJvY2Vzcy5vbihcImV4aXRcIiwgKGNvZGUpID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKGDinYwgVUkgc2VydmVyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KGNvZGUgfHwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUubWVzc2FnZS5pbmNsdWRlcyhcImlzbid0IGRlY2xhcmVkXCIpKSB7XG4gICAgICBjb25zb2xlLmxvZyhgWW91IG5lZWQgdG8gaW5zdGFsbCAke2NoYWxrLmJsdWUoYEBzb25hbXUta2l0L3VpYCl9IGZpcnN0LmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG4iXSwibmFtZXMiOlsiY2hhbGsiLCJkb3RlbnYiLCJjb25maWciLCJleGVjU3luYyIsInNwYXduIiwibWtkaXIiLCJyZWFkZGlyIiwicm0iLCJ3cml0ZUZpbGUiLCJrbmV4IiwiY3JlYXRlUmVxdWlyZSIsInBhdGgiLCJwcm9jZXNzIiwidHNpY2xpIiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsIk1pZ3JhdG9yIiwiRml4dHVyZU1hbmFnZXIiLCJleGlzdHMiLCJmaW5kQXBpUm9vdFBhdGgiLCJCVUlMRF9ESVIiLCJTV0NfQlVJTERfQ09NTUFORCIsIlRTQ19UWVBFX0NIRUNLX0NPTU1BTkQiLCJtaWdyYXRvciIsImJvb3RzdHJhcCIsIm5vdFRvSW5pdCIsImluY2x1ZGVzIiwiYXJndiIsImluaXQiLCJ0eXBlcyIsInR5cGUiLCJuYW1lIiwibWVzc2FnZSIsImNob2ljZXMiLCJnZXRBbGxQYXJlbnRJZHMiLCJtYXAiLCJlbnRpdHlJZCIsInRpdGxlIiwidmFsdWUiLCJhcmdzIiwicnVubmVycyIsIm1pZ3JhdGVfc3RhdHVzIiwibWlncmF0ZV9ydW4iLCJmaXh0dXJlX2luaXQiLCJmaXh0dXJlX2ltcG9ydCIsImZpeHR1cmVfc3luYyIsInN0dWJfcHJhY3RpY2UiLCJzdHViX2VudGl0eSIsInNjYWZmb2xkX21vZGVsIiwic2NhZmZvbGRfbW9kZWxfdGVzdCIsInVpIiwic3luYyIsImRldiIsImJ1aWxkIiwic3RhcnQiLCJmaW5hbGx5IiwiZGVzdHJveSIsInN5bmNlciIsImFwaVJvb3QiLCJlbnRyeVBvaW50IiwiY29uc29sZSIsImxvZyIsInllbGxvdyIsImJvbGQiLCJob3RSdW5uZXJCaW5QYXRoIiwidXJsIiwicmVzb2x2ZSIsInNlcnZlclByb2Nlc3MiLCJleGVjUGF0aCIsImpvaW4iLCJjd2QiLCJzdGRpbyIsImVudiIsIk5PREVfRU5WIiwiSE9UIiwiQVBJX1JPT1RfUEFUSCIsImNsZWFudXAiLCJraWxsIiwiZXhpdCIsIm9uIiwiY29kZSIsImVycm9yIiwicmVkIiwiYmx1ZSIsInJlY3Vyc2l2ZSIsImZvcmNlIiwic3djRmlsZVBhdGgiLCJkaXJuYW1lIiwiY29uZmlnUGF0aCIsInNldHVwTWlncmF0b3IiLCJzZXR1cEZpeHR1cmVNYW5hZ2VyIiwicnVuQWN0aW9uIiwiT2JqZWN0Iiwia2V5cyIsImRiQ29uZmlnIiwic3RhdHVzIiwiZ2V0U3RhdHVzIiwic3JjQ29uZmlnIiwiZGV2ZWxvcG1lbnRfbWFzdGVyIiwidGFyZ2V0cyIsImxhYmVsIiwiZml4dHVyZV9yZW1vdGUiLCJ0ZXN0IiwidG9Ta2lwIiwicmVtb3RlQ29ubiIsImNvbm5lY3Rpb24iLCJsb2NhbENvbm4iLCJob3N0IiwiZGF0YWJhc2UiLCJkdW1wRmlsZW5hbWUiLCJEYXRlIiwibm93Iiwic3JjQ29ubiIsIm1pZ3JhdGlvbnNEdW1wIiwidXNlciIsInBhc3N3b3JkIiwiX2RiIiwibWlncmF0aW9ucyIsInJhdyIsImNvdW50IiwiY29ubiIsImRiIiwidW5kZWZpbmVkIiwicm93IiwibXlzcWxDbWQiLCJyZWNvcmRJZHMiLCJpbXBvcnRGaXh0dXJlIiwicHJhY3RpY2VEaXIiLCJhcGlSb290UGF0aCIsImZpbGVOYW1lcyIsIm1heFNlcU5vIiwiZmlsdGVyZWRTZXFzIiwiZmlsdGVyIiwiZmlsZU5hbWUiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJzZXFObyIsIm1hdGNoIiwicGFyc2VJbnQiLCJzb3J0IiwiYSIsImIiLCJsZW5ndGgiLCJjdXJyZW50U2VxTm8iLCJkc3RQYXRoIiwicnVuQ29kZSIsInJlcGxhY2UiLCJjcmVhdGVFbnRpdHkiLCJnZW5lcmF0ZVRlbXBsYXRlIiwicHJvamVjdFJlcXVpcmUiLCJ1aVBhY2thZ2VQYXRoIiwidWlOb2RlUGF0aCIsInVpUHJvY2VzcyIsIlBST0pFQ1RfTkFNRSIsInByb2plY3ROYW1lIiwiYmFzZW5hbWUiLCJVSV9QT1JUIiwicG9ydCIsInRvU3RyaW5nIiwiZSIsIkVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsT0FBT0MsWUFBWSxTQUFTO0FBRTVCQSxPQUFPQyxNQUFNO0FBRWIsU0FBU0MsUUFBUSxFQUFFQyxLQUFLLFFBQVEsZ0JBQWdCO0FBQ2hELFNBQVNDLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxFQUFFLEVB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
519
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBkb3RlbnYgZnJvbSBcImRvdGVudlwiO1xuXG5kb3RlbnYuY29uZmlnKCk7XG5cbmltcG9ydCB7IGV4ZWNTeW5jLCBzcGF3biB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBta2RpciwgcmVhZGRpciwgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGtuZXgsIHsgdHlwZSBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibW9kdWxlXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcInByb2Nlc3NcIjtcbmltcG9ydCB7IHRzaWNsaSB9IGZyb20gXCJ0c2ljbGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11REJDb25maWcgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBNaWdyYXRvciB9IGZyb20gXCIuLi9taWdyYXRpb24vbWlncmF0b3JcIjtcbmltcG9ydCB7IEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IGZpbmRBcGlSb290UGF0aCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgQlVJTERfRElSLCBTV0NfQlVJTERfQ09NTUFORCwgVFNDX1RZUEVfQ0hFQ0tfQ09NTUFORCB9IGZyb20gXCIuL2J1aWxkLWNvbmZpZ1wiO1xuXG5sZXQgbWlncmF0b3I6IE1pZ3JhdG9yO1xuXG5hc3luYyBmdW5jdGlvbiBib290c3RyYXAoKSB7XG4gIGNvbnN0IG5vdFRvSW5pdCA9IFtcImRldlwiLCBcImJ1aWxkXCIsIFwic3RhcnRcIl0uaW5jbHVkZXMocHJvY2Vzcy5hcmd2WzJdID8/IFwiXCIpO1xuICBpZiAoIW5vdFRvSW5pdCkge1xuICAgIGF3YWl0IFNvbmFtdS5pbml0KGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBhd2FpdCB0c2ljbGkocHJvY2Vzcy5hcmd2LCB7XG4gICAgdHlwZXM6IHtcbiAgICAgIFwiI2VudGl0eUlkXCI6IHtcbiAgICAgICAgdHlwZTogXCJhdXRvY29tcGxldGVcIixcbiAgICAgICAgbmFtZTogXCIjZW50aXR5SWRcIixcbiAgICAgICAgbWVzc2FnZTogXCJQbGVhc2UgaW5wdXQgI2VudGl0eUlkXCIsXG4gICAgICAgIGNob2ljZXM6IEVudGl0eU1hbmFnZXIuZ2V0QWxsUGFyZW50SWRzKCkubWFwKChlbnRpdHlJZCkgPT4gKHtcbiAgICAgICAgICB0aXRsZTogZW50aXR5SWQsXG4gICAgICAgICAgdmFsdWU6IGVudGl0eUlkLFxuICAgICAgICB9KSksXG4gICAgICB9LFxuICAgICAgXCIjcmVjb3JkSWRzXCI6IFwibnVtYmVyW11cIixcbiAgICAgIFwiI25hbWVcIjogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIGFyZ3M6IFtcbiAgICAgIFtcImZpeHR1cmVcIiwgXCJpbml0XCJdLFxuICAgICAgW1wiZml4dHVyZVwiLCBcImltcG9ydFwiLCBcIiNlbnRpdHlJZFwiLCBcIiNyZWNvcmRJZHNcIl0sXG4gICAgICBbXCJmaXh0dXJlXCIsIFwic3luY1wiXSxcbiAgICAgIFtcIm1pZ3JhdGVcIiwgXCJydW5cIl0sXG4gICAgICBbXCJtaWdyYXRlXCIsIFwiY2hlY2tcIl0sXG4gICAgICBbXCJtaWdyYXRlXCIsIFwicm9sbGJhY2tcIl0sXG4gICAgICBbXCJtaWdyYXRlXCIsIFwicmVzZXRcIl0sXG4gICAgICBbXCJtaWdyYXRlXCIsIFwiY2xlYXJcIl0sXG4gICAgICBbXCJtaWdyYXRlXCIsIFwic3RhdHVzXCJdLFxuICAgICAgW1wic3R1YlwiLCBcInByYWN0aWNlXCIsIFwiI25hbWVcIl0sXG4gICAgICBbXCJzdHViXCIsIFwiZW50aXR5XCIsIFwiI25hbWVcIl0sXG4gICAgICBbXCJzY2FmZm9sZFwiLCBcIm1vZGVsXCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgW1wic2NhZmZvbGRcIiwgXCJtb2RlbF90ZXN0XCIsIFwiI2VudGl0eUlkXCJdLFxuICAgICAgW1wic2NhZmZvbGRcIiwgXCJ2aWV3X2xpc3RcIiwgXCIjZW50aXR5SWRcIl0sXG4gICAgICBbXCJzY2FmZm9sZFwiLCBcInZpZXdfZm9ybVwiLCBcIiNlbnRpdHlJZFwiXSxcbiAgICAgIFtcInVpXCJdLFxuICAgICAgW1wic3luY1wiXSxcbiAgICAgIFtcImRldlwiXSxcbiAgICAgIFtcImJ1aWxkXCJdLFxuICAgICAgW1wic3RhcnRcIl0sXG4gICAgXSxcbiAgICBydW5uZXJzOiB7XG4gICAgICBtaWdyYXRlX3N0YXR1cyxcbiAgICAgIG1pZ3JhdGVfcnVuLFxuICAgICAgZml4dHVyZV9pbml0LFxuICAgICAgZml4dHVyZV9pbXBvcnQsXG4gICAgICBmaXh0dXJlX3N5bmMsXG4gICAgICBzdHViX3ByYWN0aWNlLFxuICAgICAgc3R1Yl9lbnRpdHksXG4gICAgICBzY2FmZm9sZF9tb2RlbCxcbiAgICAgIHNjYWZmb2xkX21vZGVsX3Rlc3QsXG4gICAgICB1aSxcbiAgICAgIC8vIHNjYWZmb2xkX3ZpZXdfbGlzdCxcbiAgICAgIC8vIHNjYWZmb2xkX3ZpZXdfZm9ybSxcbiAgICAgIHN5bmMsXG4gICAgICBkZXYsXG4gICAgICBidWlsZCxcbiAgICAgIHN0YXJ0LFxuICAgIH0sXG4gIH0pO1xufVxuXG5ib290c3RyYXAoKS5maW5hbGx5KGFzeW5jICgpID0+IHtcbiAgYXdhaXQgRml4dHVyZU1hbmFnZXIuZGVzdHJveSgpO1xufSk7XG5cbi8qKlxuICogcG5wbSBzeW5jIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog7ZSE66Gc7KCd7Yq466W8IOyLse2BrO2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3luYygpIHtcbiAgYXdhaXQgU29uYW11LnN5bmNlci5zeW5jKCk7XG59XG5cbi8qKlxuICogcG5wbSBkZXYg7ZWY66m0IOyLpO2WieuQmOuKlCDtlajsiJjsnoXri4jri6QuXG4gKiDtlITroZzsoJ3tirjsl5Ag64yA7ZW0IEhNUiDsp4Dsm5DtlZjripQg6rCc67CcIOyEnOuyhOulvCDrnYTsm4zspI3ri4jri6QuXG4gKlxuICogVHlwZVNjcmlwdOulvCDrsJTroZwg7Iuk7ZaJ7ZWgIOyImCDsnojrj4TroZ0gQHNvbmFtdS1raXQvdHMtbG9hZGVy66W8LFxuICogSE1S7J2EIOyngOybkO2VmOq4sCDsnITtlbQgQHNvbmFtdS1raXQvaG1yLWhvb2vsnYQgaW1wb3J07ZWY66mwLFxuICog7IaM7Iqk66e1IOyngOybkOydhCDsnITtlbQgLS1lbmFibGUtc291cmNlLW1hcHMg7ZSM656Y6re466W8IO2PrO2VqO2VmOyXrCDsi6Ttlontlanri4jri6QuXG4gKlxuICog7J2065WMIEBzb25hbXUta2l0L3RzLWxvYWRlcuyZgCBAc29uYW11LWtpdC9obXItaG9va+uKlCBzb25hbXXqsIAg7J6Q7LK07KCB7Jy866GcIOqwgOyngOqzoCDsnojripQgZGVwZW5kZW5jeeyeheuLiOuLpC5cbiAqIOuYkO2VnCDsi6Ttlonsl5Ag7IKs7Jqp7ZWY64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLrj4Qg66eI7LCs6rCA7KeA66GcIHNvbmFtdeqwgCDsnpDssrTsoIHsnLzroZwg6rCA7KeA6rOgIOyeiOuKlCBkZXBlbmRlbmN57J6F64uI64ukLlxuICog65Sw65287IScIOyCrOyaqeyekCDtlITroZzsoJ3tirjsl5DshJzripQg7J20IOyEuCDtjKjtgqTsp4Drpbwg7KeB7KCRIOyEpOy5mO2VoCDtlYTsmpTqsIAg7JeG7Iq164uI64ukLlxuICpcbiAqIFNvbmFtdS5pbml0IOyXhuydtCDtmLjstpzrkKAg6rKD7J2EIOyDgeygle2VmOyXrCDqtaztmITrkJjsl4jsirXri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldigpIHtcbiAgY29uc3QgYXBpUm9vdCA9IGZpbmRBcGlSb290UGF0aCgpO1xuICBjb25zdCBlbnRyeVBvaW50ID0gXCJzcmMvaW5kZXgudHNcIjtcblxuICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIvCfmoAgU3RhcnRpbmcgU29uYW11IGRldiBzZXJ2ZXIuLi5cXG5cIikpO1xuXG4gIC8vIOydtCBzb25hbXUg7Yyo7YKk7KeA6rCAIGRlcGVuZGVuY2llc+uhnCDqsIDsp4Dqs6Ag7J6I64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLsnZggYmluL3J1bi5qc+ulvCDsgqzsmqntlanri4jri6QuXG4gIC8vIOydtCDqsr3roZwoL2Jpbi9ydW4uanMp64qUIEBzb25hbXUta2l0L2htci1ydW5uZXLsnZggcGFja2FnZS5qc29u7J2YIGJpbiDtlYTrk5zsl5Ag66qF7Iuc65CY7Ja0IOyeiOuKlCDqt7jqsoPqs7wg6rCZ7Iq164uI64ukLlxuICBjb25zdCBob3RSdW5uZXJCaW5QYXRoID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpLnJlc29sdmUoXG4gICAgXCJAc29uYW11LWtpdC9obXItcnVubmVyL2Jpbi9ydW4uanNcIixcbiAgKTtcblxuICBjb25zdCBzZXJ2ZXJQcm9jZXNzID0gc3Bhd24oXG4gICAgcHJvY2Vzcy5leGVjUGF0aCwgLy8gbm9kZVxuICAgIFtcbiAgICAgIGhvdFJ1bm5lckJpblBhdGgsIC8vIOydtOugh+qyjCDtlbTshJwgaG90LXJ1bm5lcuulvCDsi6TtlontlZjqtazsmpRcbiAgICAgIFwiLS1jbGVhci1zY3JlZW49ZmFsc2VcIiwgLy8g7J207ZWYIGhvdC1ydW5uZXLsl5Dqsowg64SY6rKo7KSEIOyduOyekOuTpOyeheuLiOuLpC5cbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1pbXBvcnQ9c29uYW11L3RzLWxvYWRlci1yZWdpc3RlclwiLCAvLyBUeXBlU2NyaXB0IOyEnO2PrO2KuOulvCDsnITtlZwg66Gc642ULFxuICAgICAgXCItLW5vZGUtYXJncz0tLWltcG9ydD1zb25hbXUvaG1yLWhvb2stcmVnaXN0ZXJcIiwgLy8gSE1S7J2EIOyngOybkO2VmOq4sCDsnITtlZwgaG9vayxcbiAgICAgIFwiLS1ub2RlLWFyZ3M9LS1lbmFibGUtc291cmNlLW1hcHNcIiwgLy8g6re466as6rOgIOyGjOyKpOuntSDsp4Dsm5DsnYQg7JyE7ZWcIO2UjOuemOq3uOyeheuLiOuLpC5cbiAgICAgIFwiLS1vbi1rZXk9cjpyZXN0YXJ0OlJlc3RhcnQgc2VydmVyXCIsIC8vIHIg64iE66W066m0IOyEnOuyhCDsnqzsi5zsnpHtlZjqsowg7ZW07KSY7JqULlxuICAgICAgYC0tb24ta2V5PWY6c2hlbGwocm0gJHtwYXRoLmpvaW4oYXBpUm9vdCwgXCJzb25hbXUubG9ja1wiKX0pOnJlc3RhcnQ6Rm9yY2UgcmVzdGFydGAsIC8vIGYg64iE66W066m0IHNvbmFtdS5sb2NrIO2MjOydvOydhCDsp4DsmrDqs6Ag7ISc67KEIOyerOyLnOyeke2VmOqyjCDtlbTspJjsmpQuXG5cbiAgICAgIFwiLS1vbi1rZXk9ZW50ZXI6c2hlbGwoZWNobyBoaSk6S2V5IGJpbmRpbmcgdGVzdFwiLCAvLyBlbnRlcuulvCBrZXnroZwg7JO4IOyImCDsnojsnYzsnYQg67O07J206riwIOychO2VnCDthYzsiqTtirjsnoXri4jri6QuXG4gICAgICBcIi0tb24ta2V5PWN0cmwrZiBjdHJsK2Y6c2hlbGwoZ2l0IHB1bGwgJiYgcG5wbSBpbnN0YWxsICYmIHBucG0gLS1maWx0ZXIgc29uYW11IGJ1aWxkICYmIGVjaG8gJ1NvbmFtdSBpcyBub3cgdXAtdG8tZGF0ZSEnKTpyZXN0YXJ0OlB1bGwgJiBpbnN0YWxsICYgYnVpbGQgJiByZXN0YXJ0XCIsIC8vIG1vZGlmaWVy7JmA7J2YIOyhsO2VqSwg6re466as6rOgIOuRkCDqsJzsnZggY2hvcmTrpbwg7IKs7Jqp7ZWgIOyImCDsnojsnYzsnYQg67O07J206riwIOychO2VnCDthYzsiqTtirjsnoXri4jri6QuXG4gICAgICBlbnRyeVBvaW50LCAvLyDrp4jsp4Drp4nsnLzroZwg7Iuk7KCcIOyLpO2Wie2VoCDsiqTtgazrpr3tirjsnZgg6rK966Gc66W8IOuEmOqyqOykjeuLiOuLpC5cbiAgICBdLFxuICAgIHtcbiAgICAgIGN3ZDogYXBpUm9vdCxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAgIGVudjoge1xuICAgICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgICAgTk9ERV9FTlY6IFwiZGV2ZWxvcG1lbnRcIixcbiAgICAgICAgSE9UOiBcInllc1wiLCAvLyDslpjqsIAg7J6I7Ja07JW8IEhNUuydtCDtmZzshLHtmZTrkKnri4jri6QuXG4gICAgICAgIEFQSV9ST09UX1BBVEg6IGFwaVJvb3QsIC8vIOydtCDqsr3roZzqsIAgaG1yLWhvb2vsnZgg66Oo7Yq4IOuUlOugie2GoOumrOqwgCDrkKnri4jri6QuXG4gICAgICB9LFxuICAgIH0sXG4gICk7XG5cbiAgLy8g7KKF66OMIOyymOumrFxuICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIlxcblxcbvCfkYsgU2h1dHRpbmcgZG93bi4uLlwiKSk7XG4gICAgc2VydmVyUHJvY2Vzcy5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH07XG5cbiAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCBjbGVhbnVwKTtcbiAgcHJvY2Vzcy5vbihcIlNJR1RFUk1cIiwgY2xlYW51cCk7XG5cbiAgc2VydmVyUHJvY2Vzcy5vbihcImV4aXRcIiwgKGNvZGUpID0+IHtcbiAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoYOKdjCBTZXJ2ZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpO1xuICAgICAgcHJvY2Vzcy5leGl0KGNvZGUgfHwgMSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBwbnBtIGJ1aWxkIO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog7ZSE66Gc7KCd7Yq466W8IOu5jOuTnO2VqeuLiOuLpC5cbiAqXG4gKiDruYzrk5zsl5Ag7ZWE7JqU7ZWcIC5zd2NyY+uKlCDtlITroZzsoJ3tirgg66Oo7Yq47JeQ7IScIOywvuqzoCwg7JeG7Jy866m0IHNvbmFtdeqwgCDqtIDrpqztlZjripQgLnN3Y3JjLnByb2plY3QtZGVmYXVsdOulvCDsgqzsmqntlanri4jri6QuXG4gKiBzb25hbXUuY29uZmlnLnRz64qUIHNyY+yXkCDrk6TslrTsnojsp4Ag7JWK6riwIOuVjOusuOyXkCBTV0NfQlVJTERfQ09NTUFOROuhnCDruYzrk5zrkJjsp4Ag7JWK7Iq164uI64ukLlxuICog65Sw65287IScIOuUsOuhnCDruYzrk5ztlbTspI3ri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYnVpbGQoKSB7XG4gIGNvbnN0IGFwaVJvb3QgPSBmaW5kQXBpUm9vdFBhdGgoKTtcblxuICAvLyDstpzroKUg65SU66CJ7Yag66as66W8IOygnOqxsO2VqeuLiOuLpC5cbiAgdHJ5IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ibHVlKFwiUmVtb3ZpbmcgYnVpbGQgZGlyZWN0b3J5Li4uXCIpKTtcbiAgICBpZiAoYXdhaXQgZXhpc3RzKEJVSUxEX0RJUikpIHtcbiAgICAgIGF3YWl0IHJtKEJVSUxEX0RJUiwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChcIlJlbW92ZSBidWlsZCBkaXJlY3RvcnkgZmFpbGVkLlwiKSwgZXJyb3IpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIC8vIC5zd2NyYyDtjIzsnbzsnYQg7KeA7KCV7ZWp64uI64ukLlxuICBsZXQgc3djRmlsZVBhdGggPSBcIi5zd2NyY1wiO1xuICB0cnkge1xuICAgIGlmIChhd2FpdCBleGlzdHMoc3djRmlsZVBhdGgpKSB7XG4gICAgICAvLyDsgqzsmqnsnpAg7ZSE66Gc7KCd7Yq47JeQIC5zd2NyY+qwgCDsnojsnLzrqbQg7Jqw7ISg7Jy866GcIOyCrOyaqe2VqeuLiOuLpC5cbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsdWUoXCJVc2luZyAuc3djcmMgZnJvbSBwcm9qZWN0IHJvb3QuLi5cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDslYTri4jrnbzrqbQgc29uYW116rCAIOq0gOumrO2VmOuKlCAuc3djcmMucHJvamVjdC1kZWZhdWx066W8IOqwgOyguOuLpCDslIHri4jri6QuXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ibHVlKFwiVXNpbmcgZGVmYXVsdCAuc3djcmMgZnJvbSBzb25hbXUgcGFja2FnZS4uLlwiKSk7XG4gICAgICBzd2NGaWxlUGF0aCA9IHBhdGguam9pbihpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCIuc3djcmMucHJvamVjdC1kZWZhdWx0XCIpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChcIlNldHRpbmcgdXAgc3djIGNvbmZpZyBmaWxlIGZhaWxlZC5cIiksIGVycm9yKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyDshozsiqQg65SU66CJ7Yag66as66W8IOu5jOuTnO2VqeuLiOuLpC5cbiAgdHJ5IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ibHVlKFwiQnVpbGRpbmcgd2l0aCBzd2MuLi5cIikpO1xuICAgIGV4ZWNTeW5jKFNXQ19CVUlMRF9DT01NQU5EKHN3Y0ZpbGVQYXRoKSwgeyBjd2Q6IGFwaVJvb3QsIHN0ZGlvOiBcImluaGVyaXRcIiB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChcIkJ1aWxkIGZhaWxlZC5cIiksIGVycm9yKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyBzb25hbXUuY29uZmlnLnRz66eMIOuUsOuhnCDruYzrk5ztlanri4jri6QuXG4gIC8vIOydtCDsuZzqtazripQgc3Jj7JeQIOuTpOyWtOyeiOyngCDslYrquLAg65WM66y47JeQIFNXQ19CVUlMRF9DT01NQU5E66GcIOu5jOuTnOuQmOyngCDslYrsirXri4jri6QuXG4gIC8vIOuUsOudvOyEnCDrlLDroZwg67mM65Oc7ZW07KSN64uI64ukLlxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4oYXBpUm9vdCwgXCJzb25hbXUuY29uZmlnLnRzXCIpO1xuICAgIGlmIChhd2FpdCBleGlzdHMoY29uZmlnUGF0aCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsdWUoXCJCdWlsZGluZyBzb25hbXUuY29uZmlnLnRzLi4uXCIpKTtcbiAgICAgIGV4ZWNTeW5jKGBzd2MgJHtjb25maWdQYXRofSAtbyAke0JVSUxEX0RJUn0vc29uYW11LmNvbmZpZy5qc2AsIHtcbiAgICAgICAgY3dkOiBhcGlSb290LFxuICAgICAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgICB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJCdWlsZGluZyBzb25hbXUuY29uZmlnLnRzIGZhaWxlZC5cIiksIGVycm9yKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cblxuICAvLyDrp4jsp4Drp4nsl5DripQg7YOA7J6FIOyytO2BrOulvCDtlbTsmpQuXG4gIHRyeSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShcIkNoZWNraW5nIHR5cGVzIHdpdGggdHNjLi4uXCIpKTtcbiAgICBleGVjU3luYyhUU0NfVFlQRV9DSEVDS19DT01NQU5ELCB7XG4gICAgICBjd2Q6IGFwaVJvb3QsXG4gICAgICBzdGRpbzogXCJpbmhlcml0XCIsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoXCJUeXBlIGNoZWNrIGZhaWxlZC5cIiksIGVycm9yKTtcbiAgICBwcm9jZXNzLmV4aXQoMSk7XG4gIH1cbn1cblxuLyoqXG4gKiBwbnBtIHN0YXJ0IO2VmOuptCDsi6TtlonrkJjripQg7ZWo7IiY7J6F64uI64ukLlxuICog67mM65Oc65CcIO2UhOuhnOygne2KuOulvCDsi6Ttlontlanri4jri6QuXG4gKlxuICog67mM65Oc65CcIOqysOqzvOusvChkaXN0IOuUlOugie2GoOumrOydmCBpbmRleC5qcyDsl5Ttirjrpqztj6zsnbjtirgp7J20IOyXhuuLpOuptCDsi6TtlonsnYQg7KSR64uo7ZWp64uI64ukLlxuICog7IaM7Iqk66e1IOyngOybkOqzvCBkb3RlbnYg7KeA7JuQ7J2EIO2PrO2VqO2VmOyXrCDsi6Ttlontlanri4jri6QuXG4gKlxuICogU29uYW11LmluaXQg7JeG7J20IO2YuOy2nOuQoCDqsoPsnYQg7IOB7KCV7ZWY7JesIOq1rO2YhOuQmOyXiOyKteuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7XG4gIGNvbnN0IGFwaVJvb3QgPSBmaW5kQXBpUm9vdFBhdGgoKTtcbiAgY29uc3QgZW50cnlQb2ludCA9IFwiZGlzdC9pbmRleC5qc1wiO1xuXG4gIGlmICghKGF3YWl0IGV4aXN0cyhlbnRyeVBvaW50KSkpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoYCR7ZW50cnlQb2ludH0gbm90IGZvdW5kLiBQbGVhc2UgYnVpbGQgeW91ciBwcm9qZWN0IGZpcnN0LmApKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ibHVlKFwiUnVuOiB5YXJuIHNvbmFtdSBidWlsZFwiKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBzcGF3biB9ID0gYXdhaXQgaW1wb3J0KFwiY2hpbGRfcHJvY2Vzc1wiKTtcbiAgY29uc3Qgc2VydmVyUHJvY2VzcyA9IHNwYXduKFxuICAgIHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgW1wiLS1lbmFibGUtc291cmNlLW1hcHNcIiwgXCItclwiLCBcImRvdGVudi9jb25maWdcIiwgZW50cnlQb2ludF0sXG4gICAge1xuICAgICAgY3dkOiBhcGlSb290LFxuICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgIH0sXG4gICk7XG5cbiAgcHJvY2Vzcy5vbihcIlNJR0lOVFwiLCAoKSA9PiB7XG4gICAgc2VydmVyUHJvY2Vzcy5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXR1cE1pZ3JhdG9yKCkge1xuICAvLyBtaWdyYXRvclxuICBtaWdyYXRvciA9IG5ldyBNaWdyYXRvcigpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXR1cEZpeHR1cmVNYW5hZ2VyKCkge1xuICBGaXh0dXJlTWFuYWdlci5pbml0KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1pZ3JhdGVfcnVuKCkge1xuICBhd2FpdCBzZXR1cE1pZ3JhdG9yKCk7XG5cbiAgYXdhaXQgbWlncmF0b3IucnVuQWN0aW9uKFxuICAgIFwiYXBwbHlcIixcbiAgICBPYmplY3Qua2V5cyhTb25hbXUuZGJDb25maWcpIGFzIChrZXlvZiBTb25hbXVEQkNvbmZpZylbXSAvKuyLuSDri6QhKi8sXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1pZ3JhdGVfc3RhdHVzKCkge1xuICBhd2FpdCBzZXR1cE1pZ3JhdG9yKCk7XG5cbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgbWlncmF0b3IuZ2V0U3RhdHVzKCk7XG4gIC8vIHN0YXR1cztcbiAgY29uc29sZS5sb2coc3RhdHVzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZml4dHVyZV9pbml0KCkge1xuICBjb25zdCBzcmNDb25maWcgPSBTb25hbXUuZGJDb25maWcuZGV2ZWxvcG1lbnRfbWFzdGVyO1xuICBjb25zdCB0YXJnZXRzID0gW1xuICAgIHtcbiAgICAgIGxhYmVsOiBcIihSRU1PVEUpIEZpeHR1cmUgREJcIixcbiAgICAgIGNvbmZpZzogU29uYW11LmRiQ29uZmlnLmZpeHR1cmVfcmVtb3RlLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IFwiKExPQ0FMKSBUZXN0aW5nIERCXCIsXG4gICAgICBjb25maWc6IFNvbmFtdS5kYkNvbmZpZy50ZXN0LFxuICAgICAgdG9Ta2lwOiAoKCkgPT4ge1xuICAgICAgICBjb25zdCByZW1vdGVDb25uID0gU29uYW11LmRiQ29uZmlnLmZpeHR1cmVfcmVtb3RlLmNvbm5lY3Rpb24gYXMgS25leC5Db25uZWN0aW9uQ29uZmlnO1xuICAgICAgICBjb25zdCBsb2NhbENvbm4gPSBTb25hbXUuZGJDb25maWcudGVzdC5jb25uZWN0aW9uIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZztcbiAgICAgICAgcmV0dXJuIHJlbW90ZUNvbm4uaG9zdCA9PT0gbG9jYWxDb25uLmhvc3QgJiYgcmVtb3RlQ29ubi5kYXRhYmFzZSA9PT0gbG9jYWxDb25uLmRhdGFiYXNlO1xuICAgICAgfSkoKSxcbiAgICB9LFxuICBdIGFzIHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGNvbmZpZzogS25leC5Db25maWc7XG4gICAgdG9Ta2lwPzogYm9vbGVhbjtcbiAgfVtdO1xuXG4gIC8vIDEuIOq4sOykgERCIOyKpO2CpOuniOulvCDrjaTtlIRcbiAgY29uc29sZS5sb2coXCJEVU1QLi4uXCIpO1xuICBjb25zdCBkdW1wRmlsZW5hbWUgPSBgL3RtcC9zb25hbXUtZml4dHVyZS1pbml0LSR7RGF0ZS5ub3coKX0uc3FsYDtcbiAgY29uc3Qgc3JjQ29ubiA9IHNyY0NvbmZpZy5jb25uZWN0aW9uIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZztcbiAgY29uc3QgbWlncmF0aW9uc0R1bXAgPSBgL3RtcC9zb25hbXUtZml4dHVyZS1pbml0LW1pZ3JhdGlvbnMtJHtEYXRlLm5vdygpfS5zcWxgO1xuICBleGVjU3luYyhcbiAgICBgbXlzcWxkdW1wIC1oJHtzcmNDb25uLmhvc3R9IC11JHtzcmNDb25uLnVzZXJ9IC1wJHtzcmNDb25uLnBhc3N3b3JkfSAtLXNpbmdsZS10cmFuc2FjdGlvbiAtZCAtLW5vLWNyZWF0ZS1kYiAtLXRyaWdnZXJzICR7c3JjQ29ubi5kYXRhYmFzZX0gPiAke2R1bXBGaWxlbmFtZX1gLFxuICApO1xuICBjb25zdCBfZGIgPSBrbmV4KHNyY0NvbmZpZyk7XG4gIGNvbnN0IFtbbWlncmF0aW9uc11dID0gYXdhaXQgX2RiLnJhdyhcbiAgICBcIlNFTEVDVCBDT1VOVCgqKSBhcyBjb3VudCBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgV0hFUkUgdGFibGVfc2NoZW1hID0gPyBBTkQgdGFibGVfbmFtZSA9ICdrbmV4X21pZ3JhdGlvbnMnXCIsXG4gICAgW3NyY0Nvbm4uZGF0YWJhc2VdLFxuICApO1xuICBpZiAobWlncmF0aW9ucy5jb3VudCA+IDApIHtcbiAgICBleGVjU3luYyhcbiAgICAgIGBteXNxbGR1bXAgLWgke3NyY0Nvbm4uaG9zdH0gLXUke3NyY0Nvbm4udXNlcn0gLXAke3NyY0Nvbm4ucGFzc3dvcmR9IC0tc2luZ2xlLXRyYW5zYWN0aW9uIC0tbm8tY3JlYXRlLWRiIC0tdHJpZ2dlcnMgJHtzcmNDb25uLmRhdGFiYXNlfSBrbmV4X21pZ3JhdGlvbnMga25leF9taWdyYXRpb25zX2xvY2sgPiAke21pZ3JhdGlvbnNEdW1wfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIDIuIOuMgOyDgURCIOqwgeqwgeyXkCDrjIDtlZjsl6wg7KG07J6s7Jes67aAIO2ZleyduCDtm4Qg67aT6riwXG4gIGZvciBhd2FpdCAoY29uc3QgeyBsYWJlbCwgY29uZmlnLCB0b1NraXAgfSBvZiB0YXJnZXRzKSB7XG4gICAgY29uc3QgY29ubiA9IGNvbmZpZy5jb25uZWN0aW9uIGFzIEtuZXguQ29ubmVjdGlvbkNvbmZpZztcblxuICAgIGlmICh0b1NraXAgPT09IHRydWUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZChgJHtsYWJlbH06IFNraXBwZWQhYCkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZGIgPSBrbmV4KHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgLi4uKChjb25maWcuY29ubmVjdGlvbiA/PyB7fSkgYXMgS25leC5Db25uZWN0aW9uQ29uZmlnKSxcbiAgICAgICAgZGF0YWJhc2U6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgW1tyb3ddXSA9IGF3YWl0IGRiLnJhdyhgU0hPVyBEQVRBQkFTRVMgTElLRSBcIiR7Y29ubi5kYXRhYmFzZX1cImApO1xuICAgIGlmIChyb3cpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhgJHtsYWJlbH06IERhdGFiYXNlIFwiJHtjb25uLmRhdGFiYXNlfVwiIEFscmVhZHkgZXhpc3RzYCkpO1xuICAgICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coYFNZTkMgdG8gJHtsYWJlbH0uLi5gKTtcbiAgICBjb25zdCBteXNxbENtZCA9IGBteXNxbCAtaCR7Y29ubi5ob3N0fSAtdSR7Y29ubi51c2VyfSAtcCR7Y29ubi5wYXNzd29yZH1gO1xuICAgIGV4ZWNTeW5jKGAke215c3FsQ21kfSAtZSAnRFJPUCBEQVRBQkFTRSBJRiBFWElTVFMgXFxgJHtjb25uLmRhdGFiYXNlfVxcYCdgKTtcbiAgICBleGVjU3luYyhgJHtteXNxbENtZH0gLWUgJ0NSRUFURSBEQVRBQkFTRSBcXGAke2Nvbm4uZGF0YWJhc2V9XFxgJ2ApO1xuICAgIGV4ZWNTeW5jKGAke215c3FsQ21kfSAke2Nvbm4uZGF0YWJhc2V9IDwgJHtkdW1wRmlsZW5hbWV9YCk7XG4gICAgaWYgKGF3YWl0IGV4aXN0cyhtaWdyYXRpb25zRHVtcCkpIHtcbiAgICAgIGV4ZWNTeW5jKGAke215c3FsQ21kfSAke2Nvbm4uZGF0YWJhc2V9IDwgJHttaWdyYXRpb25zRHVtcH1gKTtcbiAgICB9XG5cbiAgICBhd2FpdCBkYi5kZXN0cm95KCk7XG4gIH1cblxuICBhd2FpdCBfZGIuZGVzdHJveSgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaXh0dXJlX2ltcG9ydChlbnRpdHlJZDogc3RyaW5nLCByZWNvcmRJZHM6IG51bWJlcltdKSB7XG4gIGF3YWl0IHNldHVwRml4dHVyZU1hbmFnZXIoKTtcblxuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5pbXBvcnRGaXh0dXJlKGVudGl0eUlkLCByZWNvcmRJZHMpO1xuICBhd2FpdCBGaXh0dXJlTWFuYWdlci5zeW5jKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpeHR1cmVfc3luYygpIHtcbiAgYXdhaXQgc2V0dXBGaXh0dXJlTWFuYWdlcigpO1xuXG4gIGF3YWl0IEZpeHR1cmVNYW5hZ2VyLnN5bmMoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3R1Yl9wcmFjdGljZShuYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgcHJhY3RpY2VEaXIgPSBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBcInNyY1wiLCBcInByYWN0aWNlc1wiKTtcbiAgY29uc3QgZmlsZU5hbWVzID0gYXdhaXQgcmVhZGRpcihwcmFjdGljZURpcik7XG5cbiAgY29uc3QgbWF4U2VxTm8gPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmICghKGF3YWl0IGV4aXN0cyhwcmFjdGljZURpcikpKSB7XG4gICAgICBhd2FpdCBta2RpcihwcmFjdGljZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRTZXFzID0gZmlsZU5hbWVzXG4gICAgICAuZmlsdGVyKChmaWxlTmFtZSkgPT4gZmlsZU5hbWUuc3RhcnRzV2l0aChcInBcIikgJiYgZmlsZU5hbWUuZW5kc1dpdGgoXCIudHNcIikpXG4gICAgICAubWFwKChmaWxlTmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBbLCBzZXFOb10gPSBmaWxlTmFtZS5tYXRjaCgvXnAoWzAtOV0rKS0vKSA/PyBbXCIwXCIsIFwiMFwiXTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHNlcU5vKTtcbiAgICAgIH0pXG4gICAgICAuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuXG4gICAgaWYgKGZpbHRlcmVkU2Vxcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gZmlsdGVyZWRTZXFzWzBdO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9KSgpO1xuXG4gIGNvbnN0IGN1cnJlbnRTZXFObyA9IG1heFNlcU5vICsgMTtcbiAgY29uc3QgZmlsZU5hbWUgPSBgcCR7Y3VycmVudFNlcU5vfS0ke25hbWV9LnRzYDtcbiAgY29uc3QgZHN0UGF0aCA9IHBhdGguam9pbihwcmFjdGljZURpciwgZmlsZU5hbWUpO1xuXG4gIGNvbnN0IGNvZGUgPSBbXG4gICAgYGltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCJzb25hbXVcIjtgLFxuICAgIFwiXCIsXG4gICAgYGNvbnNvbGUuY2xlYXIoKTtgLFxuICAgIGBjb25zb2xlLmxvZyhcIiR7ZmlsZU5hbWV9XCIpO2AsXG4gICAgXCJcIixcbiAgICBgU29uYW11LnJ1blNjcmlwdChhc3luYyAoKSA9PiB7YCxcbiAgICBgIC8vIFRPRE9gLFxuICAgIGB9KTtgLFxuICAgIFwiXCIsXG4gIF0uam9pbihcIlxcblwiKTtcbiAgYXdhaXQgd3JpdGVGaWxlKGRzdFBhdGgsIGNvZGUpO1xuXG4gIGV4ZWNTeW5jKGBjb2RlICR7ZHN0UGF0aH1gKTtcblxuICBjb25zdCBydW5Db2RlID0gYHlhcm4gbm9kZSAtciBkb3RlbnYvY29uZmlnIC0tZW5hYmxlLXNvdXJjZS1tYXBzIGRpc3QvcHJhY3RpY2VzLyR7ZmlsZU5hbWUucmVwbGFjZShcbiAgICBcIi50c1wiLFxuICAgIFwiLmpzXCIsXG4gICl9YDtcbiAgY29uc29sZS5sb2coYCR7Y2hhbGsuYmx1ZShydW5Db2RlKX0gY29waWVkIHRvIGNsaXBib2FyZC5gKTtcbiAgZXhlY1N5bmMoYGVjaG8gXCIke3J1bkNvZGV9XCIgfCBwYmNvcHlgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3R1Yl9lbnRpdHkoZW50aXR5SWQ6IHN0cmluZykge1xuICBhd2FpdCBTb25hbXUuc3luY2VyLmNyZWF0ZUVudGl0eSh7IGVudGl0eUlkLCB0aXRsZTogZW50aXR5SWQgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkX21vZGVsKGVudGl0eUlkOiBzdHJpbmcpIHtcbiAgYXdhaXQgU29uYW11LnN5bmNlci5nZW5lcmF0ZVRlbXBsYXRlKFwibW9kZWxcIiwge1xuICAgIGVudGl0eUlkLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRfbW9kZWxfdGVzdChlbnRpdHlJZDogc3RyaW5nKSB7XG4gIGF3YWl0IFNvbmFtdS5zeW5jZXIuZ2VuZXJhdGVUZW1wbGF0ZShcIm1vZGVsX3Rlc3RcIiwge1xuICAgIGVudGl0eUlkLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdWkoKSB7XG4gIHRyeSB7XG4gICAgLy8g7IKs7Jqp7J6QIO2UhOuhnOygne2KuOydmCDtjKjtgqTsp4Drk6Qg7KSR7JeQ7IScIEBzb25hbXUta2l0L3Vp66W8IOywvuyKteuLiOuLpC5cbiAgICAvLyDsnbTrpbwg7JyE7ZW07IScIGNyZWF0ZVJlcXVpcmXrpbwg7IKs7Jqp7ZWY7JesIO2UhOuhnOygne2KuCDqsr3roZwg6riw7KSA7Jy866GcIHJlc29sdmXtlanri4jri6QuXG4gICAgY29uc3QgcHJvamVjdFJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwicGFja2FnZS5qc29uXCIpKTtcbiAgICBjb25zdCB1aVBhY2thZ2VQYXRoID0gcHJvamVjdFJlcXVpcmUucmVzb2x2ZShcIkBzb25hbXUta2l0L3VpXCIpOyAvLyDsl4bsnLzrqbQg7Jes6riw7IScIO2EsOyguOyalChNT0RVTEVfTk9UX0ZPVU5EKVxuICAgIGNvbnN0IHVpTm9kZVBhdGggPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKHVpUGFja2FnZVBhdGgpLCBcInJ1bi11aS5qc1wiKTtcblxuICAgIGlmICghKGF3YWl0IGV4aXN0cyh1aU5vZGVQYXRoKSkpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBjaGFsay5yZWQoYFVJIHJ1bm5lciBzY3JpcHQgbm90IGZvdW5kIGF0ICR7dWlOb2RlUGF0aH0uIFBsZWFzZSByZWJ1aWxkIEBzb25hbXUta2l0L3VpLmApLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBVSeulvCDrs4Trj4Qg7ZSE66Gc7IS47Iqk66GcIOyLpO2WiSAoaG1yLWhvb2sg7Zmc7ISx7ZmUKVxuICAgIGNvbnN0IHVpUHJvY2VzcyA9IHNwYXduKFxuICAgICAgcHJvY2Vzcy5leGVjUGF0aCxcbiAgICAgIFtcbiAgICAgICAgXCItLWltcG9ydFwiLFxuICAgICAgICBcInNvbmFtdS90cy1sb2FkZXItcmVnaXN0ZXJcIixcbiAgICAgICAgXCItLWltcG9ydFwiLFxuICAgICAgICBcInNvbmFtdS9obXItaG9vay1yZWdpc3RlclwiLFxuICAgICAgICBcIi0tZW5hYmxlLXNvdXJjZS1tYXBzXCIsXG4gICAgICAgIFwiLS1uby13YXJuaW5nc1wiLFxuICAgICAgICB1aU5vZGVQYXRoLFxuICAgICAgXSxcbiAgICAgIHtcbiAgICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgICAgICBIT1Q6IFwieWVzXCIsXG4gICAgICAgICAgUFJPSkVDVF9OQU1FOiBTb25hbXUuY29uZmlnLnByb2plY3ROYW1lID8/IHBhdGguYmFzZW5hbWUoU29uYW11LmFwaVJvb3RQYXRoKSxcbiAgICAgICAgICBBUElfUk9PVF9QQVRIOiBTb25hbXUuYXBpUm9vdFBhdGgsXG4gICAgICAgICAgVUlfUE9SVDogKFNvbmFtdS5jb25maWcudWk/LnBvcnQgPz8gNTcwMDApLnRvU3RyaW5nKCksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyDsooXro4wg7LKY66asXG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhcIlxcblxcbvCfkYsgU2h1dHRpbmcgZG93biBVSSBzZXJ2ZXIuLi5cIikpO1xuICAgICAgdWlQcm9jZXNzLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgIH07XG5cbiAgICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsIGNsZWFudXApO1xuICAgIHByb2Nlc3Mub24oXCJTSUdURVJNXCIsIGNsZWFudXApO1xuXG4gICAgdWlQcm9jZXNzLm9uKFwiZXhpdFwiLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoYOKdjCBVSSBzZXJ2ZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSB8fCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKFwiaXNuJ3QgZGVjbGFyZWRcIikpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBZb3UgbmVlZCB0byBpbnN0YWxsICR7Y2hhbGsuYmx1ZShgQHNvbmFtdS1raXQvdWlgKX0gZmlyc3QuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IGU7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJjaGFsayIsImRvdGVudiIsImNvbmZpZyIsImV4ZWNTeW5jIiwic3Bhd24iLCJta2RpciIsInJlYWRkaXIiLCJybSIsIndyaXRlRmlsZSIsImtuZXgiLCJjcmVhdGVSZXF1aXJlIiwicGF0aCIsInByb2Nlc3MiLCJ0c2ljbGkiLCJTb25hbXUiLCJFbnRpdHlNYW5hZ2VyIiwiTWlncmF0b3IiLCJGaXh0dXJlTWFuYWdlciIsImV4aXN0cyIsImZpbmRBcGlSb290UGF0aCIsIkJVSUxEX0RJUiIsIlNXQ19CVUlMRF9DT01NQU5EIiwiVFNDX1RZUEVfQ0hFQ0tfQ09NTUFORCIsIm1pZ3JhdG9yIiwiYm9vdHN0cmFwIiwibm90VG9Jbml0IiwiaW5jbHVkZXMiLCJhcmd2IiwiaW5pdCIsInR5cGVzIiwidHlwZSIsIm5hbWUiLCJtZXNzYWdlIiwiY2hvaWNlcyIsImdldEFsbFBhcmVudElkcyIsIm1hcCIsImVudGl0eUlkIiwidGl0bGUiLCJ2YWx1ZSIsImFyZ3MiLCJydW5uZXJzIiwibWlncmF0ZV9zdGF0dXMiLCJtaWdyYXRlX3J1biIsImZpeHR1cmVfaW5pdCIsImZpeHR1cmVfaW1wb3J0IiwiZml4dHVyZV9zeW5jIiwic3R1Yl9wcmFjdGljZSIsInN0dWJfZW50aXR5Iiwic2NhZmZvbGRfbW9kZWwiLCJzY2FmZm9sZF9tb2RlbF90ZXN0IiwidWkiLCJzeW5jIiwiZGV2IiwiYnVpbGQiLCJzdGFydCIsImZpbmFsbHkiLCJkZXN0cm95Iiwic3luY2VyIiwiYXBpUm9vdCIsImVudHJ5UG9pbnQiLCJjb25zb2xlIiwibG9nIiwieWVsbG93IiwiYm9sZCIsImhvdFJ1bm5lckJpblBhdGgiLCJ1cmwiLCJyZXNvbHZlIiwic2VydmVyUHJvY2VzcyIsImV4ZWNQYXRoIiwiam9pbiIsImN3ZCIsInN0ZGlvIiwiZW52IiwiTk9ERV9FTlYiLCJIT1QiLCJBUElfUk9PVF9QQVRIIiwiY2xlYW51cCIsImtpbGwiLCJleGl0Iiwib24iLCJjb2RlIiwiZXJyb3IiLCJyZWQiLCJibHVlIiwicmVjdXJzaXZlIiwiZm9yY2UiLCJzd2NGaWxlUGF0aCIsImRpcm5hbWUiLCJjb25maWdQYXRoIiwic2V0dXBNaWdyYXRvciIsInNldHVwRml4dHVyZU1hbmFnZXIiLCJydW5BY3Rpb24iLCJPYmplY3QiLCJrZXlzIiwiZGJDb25maWciLCJzdGF0dXMiLCJnZXRTdGF0dXMiLCJzcmNDb25maWciLCJkZXZlbG9wbWVudF9tYXN0ZXIiLCJ0YXJnZXRzIiwibGFiZWwiLCJmaXh0dXJlX3JlbW90ZSIsInRlc3QiLCJ0b1NraXAiLCJyZW1vdGVDb25uIiwiY29ubmVjdGlvbiIsImxvY2FsQ29ubiIsImhvc3QiLCJkYXRhYmFzZSIsImR1bXBGaWxlbmFtZSIsIkRhdGUiLCJub3ciLCJzcmNDb25uIiwibWlncmF0aW9uc0R1bXAiLCJ1c2VyIiwicGFzc3dvcmQiLCJfZGIiLCJtaWdyYXRpb25zIiwicmF3IiwiY291bnQiLCJjb25uIiwiZGIiLCJ1bmRlZmluZWQiLCJyb3ciLCJteXNxbENtZCIsInJlY29yZElkcyIsImltcG9ydEZpeHR1cmUiLCJwcmFjdGljZURpciIsImFwaVJvb3RQYXRoIiwiZmlsZU5hbWVzIiwibWF4U2VxTm8iLCJmaWx0ZXJlZFNlcXMiLCJmaWx0ZXIiLCJmaWxlTmFtZSIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInNlcU5vIiwibWF0Y2giLCJwYXJzZUludCIsInNvcnQiLCJhIiwiYiIsImxlbmd0aCIsImN1cnJlbnRTZXFObyIsImRzdFBhdGgiLCJydW5Db2RlIiwicmVwbGFjZSIsImNyZWF0ZUVudGl0eSIsImdlbmVyYXRlVGVtcGxhdGUiLCJwcm9qZWN0UmVxdWlyZSIsInVpUGFja2FnZVBhdGgiLCJ1aU5vZGVQYXRoIiwidWlQcm9jZXNzIiwiUFJPSkVDVF9OQU1FIiwicHJvamVjdE5hbWUiLCJiYXNlbmFtZSIsIlVJX1BPUlQiLCJwb3J0IiwidG9TdHJpbmciLCJlIiwiRXJyb3IiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFdBQVcsUUFBUTtBQUMxQixPQUFPQyxZQUFZLFNBQVM7QUFFNUJBLE9BQU9DLE1BQU07QUFFYixTQUFTQyxRQUFRLEVBQUVDLEtBQUssUUFBUSxnQkFBZ0I7QUFDaEQsU0FBU0MsS0FBSyxFQUFFQyxPQUFPLEVBQUVD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
@@ -1,11 +1,11 @@
1
1
  /**
2
- * hot-hook 초기화하는 모듈입니다.
2
+ * hmr-hook 초기화하는 모듈입니다.
3
3
  *
4
4
  * 이 파일은 --import 플래그로 프로세스 시작 시 로드되어야 합니다.
5
5
  *
6
6
  * 환경변수:
7
7
  * - API_ROOT_PATH: 사용자 프로젝트의 API 루트 경로
8
- * - HOT: 'yes'일 때만 hot-hook 활성화
8
+ * - HOT: 'yes'일 때만 hmr-hook 활성화
9
9
  */
10
10
  export {};
11
- //# sourceMappingURL=hot-hook-register.d.ts.map
11
+ //# sourceMappingURL=hmr-hook-register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmr-hook-register.d.ts","sourceRoot":"","sources":["../../src/bin/hmr-hook-register.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,OAAO,EAAE,CAAC"}
@@ -1,21 +1,21 @@
1
1
  /**
2
- * hot-hook 초기화하는 모듈입니다.
2
+ * hmr-hook 초기화하는 모듈입니다.
3
3
  *
4
4
  * 이 파일은 --import 플래그로 프로세스 시작 시 로드되어야 합니다.
5
5
  *
6
6
  * 환경변수:
7
7
  * - API_ROOT_PATH: 사용자 프로젝트의 API 루트 경로
8
- * - HOT: 'yes'일 때만 hot-hook 활성화
8
+ * - HOT: 'yes'일 때만 hmr-hook 활성화
9
9
  */ if (process.env.HOT === "yes" && process.env.API_ROOT_PATH) {
10
- const { hot } = await import("@sonamu-kit/hot-hook");
10
+ const { hot } = await import("@sonamu-kit/hmr-hook");
11
11
  await hot.init({
12
12
  rootDirectory: process.env.API_ROOT_PATH,
13
13
  boundaries: [
14
14
  `./src/**/*.ts`
15
15
  ]
16
16
  });
17
- console.log("🔥 Hot-hook initialized");
17
+ console.log("🔥 HMR-hook initialized");
18
18
  }
19
19
  export { };
20
20
 
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vaG90LWhvb2stcmVnaXN0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBob3QtaG9vayDstIjquLDtmZTtlZjripQg66qo65OI7J6F64uI64ukLlxuICpcbiAqIOydtCDtjIzsnbzsnYAgLS1pbXBvcnQg7ZSM656Y6re466GcIO2UhOuhnOyEuOyKpCDsi5zsnpEg7IucIOuhnOuTnOuQmOyWtOyVvCDtlanri4jri6QuXG4gKlxuICog7ZmY6rK967OA7IiYOlxuICogLSBBUElfUk9PVF9QQVRIOiDsgqzsmqnsnpAg7ZSE66Gc7KCd7Yq47J2YIEFQSSDro6jtirgg6rK966GcXG4gKiAtIEhPVDogJ3llcyfsnbwg65WM66eMIGhvdC1ob29rIO2ZnOyEse2ZlFxuICovXG5cbmlmIChwcm9jZXNzLmVudi5IT1QgPT09IFwieWVzXCIgJiYgcHJvY2Vzcy5lbnYuQVBJX1JPT1RfUEFUSCkge1xuICBjb25zdCB7IGhvdCB9ID0gYXdhaXQgaW1wb3J0KFwiQHNvbmFtdS1raXQvaG90LWhvb2tcIik7XG5cbiAgYXdhaXQgaG90LmluaXQoe1xuICAgIHJvb3REaXJlY3Rvcnk6IHByb2Nlc3MuZW52LkFQSV9ST09UX1BBVEgsIC8vIOydtCDsuZzqtazqsIAg7ZSE66Gc7KCd7Yq4IEFQSSDqsr3roZzroZwg7J6YIOyEpOygleuQmOyWtOyVvCDslYTrnpgg67CU7Jq0642U66as6rCAIOyekeuPme2VqeuLiOuLpC5cbiAgICBib3VuZGFyaWVzOiBbYC4vc3JjLyoqLyoudHNgXSwgLy8g7ZSE66Gc7KCd7Yq47J2YIOydtCDsuZzqtazrk6TsnbQg67CU7Jq0642U66as6rCAIOuQqeuLiOuLpC5cbiAgfSk7XG5cbiAgY29uc29sZS5sb2coXCLwn5SlIEhvdC1ob29rIGluaXRpYWxpemVkXCIpO1xufVxuXG5leHBvcnQge307XG4iXSwibmFtZXMiOlsicHJvY2VzcyIsImVudiIsIkhPVCIsIkFQSV9ST09UX1BBVEgiLCJob3QiLCJpbml0Iiwicm9vdERpcmVjdG9yeSIsImJvdW5kYXJpZXMiLCJjb25zb2xlIiwibG9nIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Q0FRQyxHQUVELElBQUlBLFFBQVFDLEdBQUcsQ0FBQ0MsR0FBRyxLQUFLLFNBQVNGLFFBQVFDLEdBQUcsQ0FBQ0UsYUFBYSxFQUFFO0lBQzFELE1BQU0sRUFBRUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUM7SUFFN0IsTUFBTUEsSUFBSUMsSUFBSSxDQUFDO1FBQ2JDLGVBQWVOLFFBQVFDLEdBQUcsQ0FBQ0UsYUFBYTtRQUN4Q0ksWUFBWTtZQUFDLENBQUMsYUFBYSxDQUFDO1NBQUM7SUFDL0I7SUFFQUMsUUFBUUMsR0FBRyxDQUFDO0FBQ2Q7QUFFQSxXQUFVIn0=
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vaG1yLWhvb2stcmVnaXN0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBobXItaG9vayDstIjquLDtmZTtlZjripQg66qo65OI7J6F64uI64ukLlxuICpcbiAqIOydtCDtjIzsnbzsnYAgLS1pbXBvcnQg7ZSM656Y6re466GcIO2UhOuhnOyEuOyKpCDsi5zsnpEg7IucIOuhnOuTnOuQmOyWtOyVvCDtlanri4jri6QuXG4gKlxuICog7ZmY6rK967OA7IiYOlxuICogLSBBUElfUk9PVF9QQVRIOiDsgqzsmqnsnpAg7ZSE66Gc7KCd7Yq47J2YIEFQSSDro6jtirgg6rK966GcXG4gKiAtIEhPVDogJ3llcyfsnbwg65WM66eMIGhtci1ob29rIO2ZnOyEse2ZlFxuICovXG5cbmlmIChwcm9jZXNzLmVudi5IT1QgPT09IFwieWVzXCIgJiYgcHJvY2Vzcy5lbnYuQVBJX1JPT1RfUEFUSCkge1xuICBjb25zdCB7IGhvdCB9ID0gYXdhaXQgaW1wb3J0KFwiQHNvbmFtdS1raXQvaG1yLWhvb2tcIik7XG5cbiAgYXdhaXQgaG90LmluaXQoe1xuICAgIHJvb3REaXJlY3Rvcnk6IHByb2Nlc3MuZW52LkFQSV9ST09UX1BBVEgsIC8vIOydtCDsuZzqtazqsIAg7ZSE66Gc7KCd7Yq4IEFQSSDqsr3roZzroZwg7J6YIOyEpOygleuQmOyWtOyVvCDslYTrnpgg67CU7Jq0642U66as6rCAIOyekeuPme2VqeuLiOuLpC5cbiAgICBib3VuZGFyaWVzOiBbYC4vc3JjLyoqLyoudHNgXSwgLy8g7ZSE66Gc7KCd7Yq47J2YIOydtCDsuZzqtazrk6TsnbQg67CU7Jq0642U66as6rCAIOuQqeuLiOuLpC5cbiAgfSk7XG5cbiAgY29uc29sZS5sb2coXCLwn5SlIEhNUi1ob29rIGluaXRpYWxpemVkXCIpO1xufVxuXG5leHBvcnQge307XG4iXSwibmFtZXMiOlsicHJvY2VzcyIsImVudiIsIkhPVCIsIkFQSV9ST09UX1BBVEgiLCJob3QiLCJpbml0Iiwicm9vdERpcmVjdG9yeSIsImJvdW5kYXJpZXMiLCJjb25zb2xlIiwibG9nIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Q0FRQyxHQUVELElBQUlBLFFBQVFDLEdBQUcsQ0FBQ0MsR0FBRyxLQUFLLFNBQVNGLFFBQVFDLEdBQUcsQ0FBQ0UsYUFBYSxFQUFFO0lBQzFELE1BQU0sRUFBRUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUM7SUFFN0IsTUFBTUEsSUFBSUMsSUFBSSxDQUFDO1FBQ2JDLGVBQWVOLFFBQVFDLEdBQUcsQ0FBQ0UsYUFBYTtRQUN4Q0ksWUFBWTtZQUFDLENBQUMsYUFBYSxDQUFDO1NBQUM7SUFDL0I7SUFFQUMsUUFBUUMsR0FBRyxDQUFDO0FBQ2Q7QUFFQSxXQUFVIn0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ts-loader-register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ts-loader-register.d.ts","sourceRoot":"","sources":["../../src/bin/ts-loader-register.ts"],"names":[],"mappings":""}