sonamu 0.11.11 → 0.11.13

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 (44) hide show
  1. package/dist/code-formatting/index.d.ts +8 -0
  2. package/dist/code-formatting/index.d.ts.map +1 -0
  3. package/dist/code-formatting/index.js +27 -0
  4. package/dist/code-formatting/oxfmt.d.ts +5 -0
  5. package/dist/code-formatting/oxfmt.d.ts.map +1 -0
  6. package/dist/code-formatting/oxfmt.js +61 -0
  7. package/dist/code-formatting/oxlint.d.ts +30 -0
  8. package/dist/code-formatting/oxlint.d.ts.map +1 -0
  9. package/dist/code-formatting/oxlint.js +130 -0
  10. package/dist/cone/cone-generator.js +1 -1
  11. package/dist/dict/sonamu-dictionary.js +3 -3
  12. package/dist/entity/entity.d.ts.map +1 -1
  13. package/dist/entity/entity.js +3 -3
  14. package/dist/migration/code-generation.d.ts.map +1 -1
  15. package/dist/migration/code-generation.js +3 -3
  16. package/dist/syncer/code-generator.d.ts.map +1 -1
  17. package/dist/syncer/code-generator.js +3 -3
  18. package/dist/syncer/file-copy.js +3 -3
  19. package/dist/syncer/filesystem-dependencies.js +1 -1
  20. package/dist/syncer/syncer-actions.d.ts.map +1 -1
  21. package/dist/syncer/syncer-actions.js +3 -3
  22. package/dist/template/implementations/sd.template.js +1 -1
  23. package/dist/tooling/cdd-service.js +1 -1
  24. package/dist/ui-web/assets/index-BMdIyKXS.css +1 -0
  25. package/dist/ui-web/assets/{index-C_RUxOdN.js → index-ClxAM2Lk.js} +37 -37
  26. package/dist/ui-web/index.html +2 -2
  27. package/dist/utils/fs-utils.js +3 -3
  28. package/package.json +3 -3
  29. package/src/code-formatting/__tests__/formatter-batching.test.ts +210 -0
  30. package/src/{utils → code-formatting}/__tests__/formatter-bin.test.ts +2 -2
  31. package/src/code-formatting/index.ts +29 -0
  32. package/src/code-formatting/oxfmt.ts +63 -0
  33. package/src/{utils/formatter.ts → code-formatting/oxlint.ts} +67 -95
  34. package/src/dict/sonamu-dictionary.ts +1 -1
  35. package/src/entity/entity.ts +1 -1
  36. package/src/migration/code-generation.ts +1 -1
  37. package/src/syncer/code-generator.ts +1 -1
  38. package/src/syncer/file-copy.ts +1 -1
  39. package/src/syncer/syncer-actions.ts +1 -1
  40. package/src/utils/fs-utils.ts +1 -1
  41. package/dist/ui-web/assets/index-5i4uZVES.css +0 -1
  42. package/dist/utils/formatter.d.ts +0 -14
  43. package/dist/utils/formatter.d.ts.map +0 -1
  44. package/dist/utils/formatter.js +0 -147
@@ -1 +1 @@
1
- {"version":3,"file":"code-generator.d.ts","sourceRoot":"","sources":["../../src/syncer/code-generator.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIxD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,SAAS,WAAW,EAC1D,GAAG,EAAE,CAAC,EACN,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,EACnC,gBAAgB,CAAC,EAAE,eAAe,GACjC,OAAO,CAAC,YAAY,EAAE,CAAC,CA4CzB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,MAAM,eAAe,EAClE,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,WAAW,EAAE,CAAC,CAoBxB"}
1
+ {"version":3,"file":"code-generator.d.ts","sourceRoot":"","sources":["../../src/syncer/code-generator.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIxD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,SAAS,WAAW,EAC1D,GAAG,EAAE,CAAC,EACN,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,EACnC,gBAAgB,CAAC,EAAE,eAAe,GACjC,OAAO,CAAC,YAAY,EAAE,CAAC,CA4CzB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,MAAM,eAAe,EAClE,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,WAAW,EAAE,CAAC,CAoBxB"}
@@ -3,7 +3,7 @@ import { SD, init_sd } from "../dict/sd.js";
3
3
  import { AlreadyProcessedException, init_so_exceptions } from "../exceptions/so-exceptions.js";
4
4
  import { init_controller, isTest } from "../utils/controller.js";
5
5
  import { everyAsync, filterAsync, init_async_utils } from "../utils/async-utils.js";
6
- import { formatCode, init_formatter } from "../utils/formatter.js";
6
+ import { formatCode, init_code_formatting } from "../code-formatting/index.js";
7
7
  import { Sonamu, init_sonamu } from "../api/sonamu.js";
8
8
  import { EntityManager, init_entity_manager } from "../entity/entity-manager.js";
9
9
  import { Naite, init_naite } from "../naite/naite.js";
@@ -128,6 +128,7 @@ async function writeCodeToPathEachTarget(pathAndCode) {
128
128
  }
129
129
  var init_code_generator = __esmMin((() => {
130
130
  init_sonamu();
131
+ init_code_formatting();
131
132
  init_sd();
132
133
  init_entity_manager();
133
134
  init_so_exceptions();
@@ -136,7 +137,6 @@ var init_code_generator = __esmMin((() => {
136
137
  init_zod_converter();
137
138
  init_async_utils();
138
139
  init_controller();
139
- init_formatter();
140
140
  init_lodash_able();
141
141
  init_file_tracking();
142
142
  init_filesystem_dependencies();
@@ -145,4 +145,4 @@ var init_code_generator = __esmMin((() => {
145
145
  init_code_generator();
146
146
  export { generateTemplate, init_code_generator, renderTemplate };
147
147
 
148
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1nZW5lcmF0b3IuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9jb2RlLWdlbmVyYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vZGljdC9zZFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24gfSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgdHlwZSBSZW5kZXJlZFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1hbmFnZXIgfSBmcm9tIFwiLi4vdGVtcGxhdGUvdGVtcGxhdGUtbWFuYWdlclwiO1xuaW1wb3J0IHsgQlVJTFRfSU5fVFlQRVMgfSBmcm9tIFwiLi4vdGVtcGxhdGUvem9kLWNvbnZlcnRlclwiO1xuaW1wb3J0IHtcbiAgdHlwZSBHZW5lcmF0ZU9wdGlvbnMsXG4gIHR5cGUgUGF0aEFuZENvZGUsXG4gIHR5cGUgVGVtcGxhdGVLZXksXG4gIHR5cGUgVGVtcGxhdGVPcHRpb25zLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGV2ZXJ5QXN5bmMsIGZpbHRlckFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBpc1Rlc3QgfSBmcm9tIFwiLi4vdXRpbHMvY29udHJvbGxlclwiO1xuaW1wb3J0IHsgZm9ybWF0Q29kZSB9IGZyb20gXCIuLi91dGlscy9mb3JtYXR0ZXJcIjtcbmltcG9ydCB7IHdyYXBJZiB9IGZyb20gXCIuLi91dGlscy9sb2Rhc2gtYWJsZVwiO1xuaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgdHJhY2tXcml0dGVuIH0gZnJvbSBcIi4vZmlsZS10cmFja2luZ1wiO1xuaW1wb3J0IHsgc3luY2VyRmlsZUV4aXN0cywgc3luY2VyRmlsZXN5c3RlbSB9IGZyb20gXCIuL2ZpbGVzeXN0ZW0tZGVwZW5kZW5jaWVzXCI7XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOugjOuNlOunge2VmOqzoCDtjIzsnbzroZwg7IOd7ISx7ZWp64uI64ukLlxuICogb3ZlcndyaXRlIOyYteyFmOydtCBmYWxzZeyduCDqsr3smrAsIOydtOuvuCDsobTsnqztlZjripQg7YyM7J287J2AIOqxtOuEiOucgeuLiOuLpC5cbiAqIEBwYXJhbSBrZXkgLSDthZztlIzrpr8g7YKkICjsmIg6IFwiZW50aXR5XCIsIFwibW9kZWxcIiwgXCJzZXJ2aWNlXCIg65OxKVxuICogQHBhcmFtIHRlbXBsYXRlT3B0aW9ucyAtIO2FnO2UjOumvyDroIzrjZTrp4Hsl5Ag7ZWE7JqU7ZWcIOyYteyFmFxuICogQHBhcmFtIF9nZW5lcmF0ZU9wdGlvbnMgLSDsg53shLEg7Ji17IWYIChvdmVyd3JpdGUg7Jes67aAKVxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVRlbXBsYXRlPFQgZXh0ZW5kcyBUZW1wbGF0ZUtleT4oXG4gIGtleTogVCxcbiAgdGVtcGxhdGVPcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVF0sXG4gIF9nZW5lcmF0ZU9wdGlvbnM/OiBHZW5lcmF0ZU9wdGlvbnMsXG4pOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIGNvbnN0IGdlbmVyYXRlT3B0aW9ucyA9IHtcbiAgICBvdmVyd3JpdGU6IGZhbHNlLFxuICAgIC4uLl9nZW5lcmF0ZU9wdGlvbnMsXG4gIH07XG4gIE5haXRlLnQoXCJnZW5lcmF0ZVRlbXBsYXRlXCIsIHsga2V5LCB0ZW1wbGF0ZU9wdGlvbnMsIGdlbmVyYXRlT3B0aW9ucyB9KTtcblxuICAvLyDtgqQgY2hpbGRyZW5cbiAgY29uc3Qga2V5czogVGVtcGxhdGVLZXlbXSA9IFtrZXldO1xuXG4gIC8vIO2FnO2UjOumvyDroIzrjZRcbiAgY29uc3QgcGF0aEFuZENvZGVzID0gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAga2V5cy5tYXAoYXN5bmMgKHRlbXBsYXRlS2V5KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZW5kZXJUZW1wbGF0ZSh0ZW1wbGF0ZUtleSwgdGVtcGxhdGVPcHRpb25zKTtcbiAgICAgIH0pLFxuICAgIClcbiAgKS5mbGF0KCk7XG5cbiAgY29uc3QgZmlsdGVyZWRQYXRoQW5kQ29kZXM6IFBhdGhBbmRDb2RlW10gPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmIChnZW5lcmF0ZU9wdGlvbnMub3ZlcndyaXRlKSB7XG4gICAgICByZXR1cm4gcGF0aEFuZENvZGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXdhaXQgZmlsdGVyQXN5bmMocGF0aEFuZENvZGVzLCBhc3luYyAocGF0aEFuZENvZGUpID0+IHtcbiAgICAgICAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7U29uYW11LmFwcFJvb3RQYXRofS8ke3BhdGhBbmRDb2RlLnBhdGh9YDtcbiAgICAgICAgY29uc3QgZHN0RmlsZVBhdGhzID0gdGFyZ2V0cy5tYXAoKHRhcmdldCkgPT4gZmlsZVBhdGgucmVwbGFjZShcIi86dGFyZ2V0L1wiLCBgLyR7dGFyZ2V0fS9gKSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBldmVyeUFzeW5jKFxuICAgICAgICAgIGRzdEZpbGVQYXRocyxcbiAgICAgICAgICBhc3luYyAoZHN0UGF0aCkgPT4gIShhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRzdFBhdGgpKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSkoKTtcblxuICBpZiAoZmlsdGVyZWRQYXRoQW5kQ29kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IuYWxsRmlsZXNFeGlzdFwiKSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZmlsdGVyZWRQYXRoQW5kQ29kZXMubWFwKChwYXRoQW5kQ29kZSkgPT4gd3JpdGVDb2RlVG9QYXRoRWFjaFRhcmdldChwYXRoQW5kQ29kZSkpLFxuICAgIClcbiAgKS5mbGF0KCk7XG59XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOugjOuNlOunge2VmOyXrCBQYXRoQW5kQ29kZSDqsJ3ssrTrpbwg67CY7ZmY7ZWp64uI64ukLlxuICog7YyM7J2866GcIOyTsOyngCDslYrqs6Ag66mU66qo66as7IOB7JeQ7ISc66eMIOugjOuNlOunge2VqeuLiOuLpC5cbiAqIEBwYXJhbSBrZXkgLSDthZztlIzrpr8g7YKkXG4gKiBAcGFyYW0gb3B0aW9ucyAtIO2FnO2UjOumvyDroIzrjZTrp4Eg7Ji17IWYXG4gKiBAcmV0dXJucyDqsr3roZzsmYAg7L2U65OcIOyMjeydmCDrsLDsl7RcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclRlbXBsYXRlPFQgZXh0ZW5kcyBrZXlvZiBUZW1wbGF0ZU9wdGlvbnM+KFxuICBrZXk6IFQsXG4gIG9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tUXSxcbik6IFByb21pc2U8UGF0aEFuZENvZGVbXT4ge1xuICBOYWl0ZS50KFwicmVuZGVyVGVtcGxhdGVcIiwgeyBrZXksIG9wdGlvbnMgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0KGtleSk7XG5cbiAgY29uc3QgcmVuZGVyZWQgPSBhd2FpdCB0ZW1wbGF0ZS5yZW5kZXIob3B0aW9ucyk7XG4gIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUoa2V5LCByZW5kZXJlZCk7XG5cbiAgbGV0IHByZVRlbXBsYXRlUmVzb2x2ZWQ6IFBhdGhBbmRDb2RlW10gPSBbXTtcbiAgaWYgKHJlbmRlcmVkLnByZVRlbXBsYXRlcykge1xuICAgIHByZVRlbXBsYXRlUmVzb2x2ZWQgPSAoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgcmVuZGVyZWQucHJlVGVtcGxhdGVzLm1hcCgoeyBrZXk6IHByZVRlbXBsYXRlS2V5LCBvcHRpb25zOiBwcmVUZW1wbGF0ZU9wdGlvbnMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZW5kZXJUZW1wbGF0ZShwcmVUZW1wbGF0ZUtleSwgcHJlVGVtcGxhdGVPcHRpb25zKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgKS5mbGF0KCk7XG4gIH1cblxuICByZXR1cm4gW3Jlc29sdmVkLCAuLi5wcmVUZW1wbGF0ZVJlc29sdmVkXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUoXG4gIGtleTogVGVtcGxhdGVLZXksXG4gIHJlc3VsdDogUmVuZGVyZWRUZW1wbGF0ZSxcbik6IFByb21pc2U8UGF0aEFuZENvZGU+IHtcbiAgTmFpdGUudChgcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUke2tleX1gLCB7IGtleSwgcmVzdWx0IH0pO1xuXG4gIGNvbnN0IHsgdGFyZ2V0LCBwYXRoOiBmaWxlUGF0aCwgYm9keSwgaW1wb3J0S2V5cywgY3VzdG9tSGVhZGVycyB9ID0gcmVzdWx0O1xuXG4gIC8vIGltcG9ydCDtlaAg64yA7IOB7J2YIOuMgOyDgSBwYXRoIOy2lOy2nFxuICBjb25zdCBidWlsdEluU2NoZW1hTmFtZXMgPSBPYmplY3QudmFsdWVzKEJVSUxUX0lOX1RZUEVTKS5tYXAoXG4gICAgKGluZm8pID0+XG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIGluZm8uc2NoZW1hTmFtZSBhcyBzdHJpbmcsXG4gICk7XG4gIGNvbnN0IGltcG9ydERlZnMgPSBpbXBvcnRLZXlzXG4gICAgLy8g64K07J6lIO2DgOyehSDsiqTtgqTrp4jripQg7J2066+4IHNvbmFtdeyXkOyEnCBpbXBvcnTrkJjrr4DroZwg7KCc7Jm4XG4gICAgLmZpbHRlcigoaW1wb3J0S2V5KSA9PiAhYnVpbHRJblNjaGVtYU5hbWVzLmluY2x1ZGVzKGltcG9ydEtleSkpXG4gICAgLnJlZHVjZShcbiAgICAgIChyLCBpbXBvcnRLZXkpID0+IHtcbiAgICAgICAgbGV0IG1vZHVsZVBhdGggPSBpbXBvcnRLZXk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbW9kdWxlUGF0aCA9IEVudGl0eU1hbmFnZXIuZ2V0TW9kdWxlUGF0aChpbXBvcnRLZXkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBbcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGU6JHtrZXl9XSAke2ltcG9ydEtleX0g66qo65OIIOqyveuhnCDssL7quLAg7Iuk7YyoOiAke2Vycm9yfWAsXG4gICAgICAgICAgICB7IGNhdXNlOiBlcnJvciB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGltcG9ydFBhdGggPSBtb2R1bGVQYXRoO1xuICAgICAgICBpZiAobW9kdWxlUGF0aC5pbmNsdWRlcyhcIi9cIikgfHwgbW9kdWxlUGF0aC5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICAgICAgICBpbXBvcnRQYXRoID0gd3JhcElmKHBhdGgucmVsYXRpdmUocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSwgbW9kdWxlUGF0aCksIChwKSA9PiBbXG4gICAgICAgICAgICAhcC5zdGFydHNXaXRoKFwiLlwiKSxcbiAgICAgICAgICAgIGAuLyR7cH1gLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g6rCZ7J2AIO2MjOydvOyXkOyEnCBpbXBvcnQg7ZWY64qUIOqyveyasCBrZXlzIOuhnCDrgpjsl7Qg7LKY66asXG4gICAgICAgIGNvbnN0IGV4aXN0c09uZSA9IHIuZmluZCgoaW1wb3J0RGVmKSA9PiBpbXBvcnREZWYuZnJvbSA9PT0gaW1wb3J0UGF0aCk7XG4gICAgICAgIGlmIChleGlzdHNPbmUpIHtcbiAgICAgICAgICBleGlzdHNPbmUua2V5cyA9IHVuaXF1ZShleGlzdHNPbmUua2V5cy5jb25jYXQoaW1wb3J0S2V5KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgci5wdXNoKHtcbiAgICAgICAgICAgIGtleXM6IFtpbXBvcnRLZXldLFxuICAgICAgICAgICAgZnJvbTogaW1wb3J0UGF0aCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0sXG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHtcbiAgICAgICAga2V5czogc3RyaW5nW107XG4gICAgICAgIGZyb206IHN0cmluZztcbiAgICAgIH1bXSxcbiAgICApXG4gICAgLy8g7IWA7ZSEIOywuOyhsCDrsKnsp4BcbiAgICAuZmlsdGVyKChpbXBvcnREZWYpID0+ICFmaWxlUGF0aC5lbmRzV2l0aChgJHtpbXBvcnREZWYuZnJvbS5yZXBsYWNlKFwiLi9cIiwgXCJcIil9LnRzYCkpO1xuXG4gIC8vIOy7pOyKpO2FgCDtl6TrjZQg7Y+s7ZWo7ZWY7JesIO2XpOuNlCDsg53shLFcbiAgY29uc3QgaGVhZGVyID0gW1xuICAgIC4uLihjdXN0b21IZWFkZXJzID8/IFtdKSxcbiAgICAuLi5pbXBvcnREZWZzLm1hcChcbiAgICAgIChpbXBvcnREZWYpID0+IGBpbXBvcnQgeyAke2ltcG9ydERlZi5rZXlzLmpvaW4oXCIsIFwiKX0gfSBmcm9tICcke2ltcG9ydERlZi5mcm9tfSdgLFxuICAgICksXG4gIF0uam9pbihcIlxcblwiKTtcblxuICBjb25zdCBmb3JtYXR0ZWQgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmIChrZXkgPT09IFwiZ2VuZXJhdGVkX2h0dHBcIikge1xuICAgICAgcmV0dXJuIFtoZWFkZXIsIGJvZHldLmpvaW4oXCJcXG5cXG5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIE5haXRlLnQoXCJyZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZTpiZWZvcmVGb3JtYXRcIiwgeyBrZXksIGhlYWRlciwgYm9keSB9KTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZENvZGUgPSBhd2FpdCBmb3JtYXRDb2RlKFxuICAgICAgICBbaGVhZGVyLCBib2R5XS5qb2luKFwiXFxuXFxuXCIpLFxuICAgICAgICBgJHtTb25hbXUuYXBwUm9vdFBhdGh9LyR7ZmlsZVBhdGh9YCxcbiAgICAgICk7XG4gICAgICBOYWl0ZS50KGByZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZTpmb3JtYXR0ZWQ6JHtrZXl9YCwgZm9ybWF0dGVkQ29kZSk7XG4gICAgICByZXR1cm4gZm9ybWF0dGVkQ29kZTtcbiAgICB9XG4gIH0pKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBgJHt0YXJnZXR9LyR7ZmlsZVBhdGh9YCxcbiAgICBjb2RlOiBmb3JtYXR0ZWQsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQ29kZVRvUGF0aEVhY2hUYXJnZXQocGF0aEFuZENvZGU6IFBhdGhBbmRDb2RlKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgeyBhcHBSb290UGF0aCB9ID0gU29uYW11O1xuICBjb25zdCBmaWxlUGF0aCA9XG4gICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBgJHtTb25hbXUuYXBwUm9vdFBhdGh9LyR7cGF0aEFuZENvZGUucGF0aH1gIGFzIEFic29sdXRlUGF0aDtcblxuICBjb25zdCBkc3RGaWxlUGF0aHMgPSB1bmlxdWUoXG4gICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyB0YXJnZXRzLm1hcChcbiAgICAgICh0YXJnZXQpID0+IGZpbGVQYXRoLnJlcGxhY2UoXCIvOnRhcmdldC9cIiwgYC8ke3RhcmdldH0vYCksXG4gICAgKSBhcyBBYnNvbHV0ZVBhdGhbXSxcbiAgKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGRzdEZpbGVQYXRocy5tYXAoYXN5bmMgKGRzdEZpbGVQYXRoKSA9PiB7XG4gICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0RmlsZVBhdGgpO1xuICAgICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhkaXIpKSkge1xuICAgICAgICBhd2FpdCBzeW5jZXJGaWxlc3lzdGVtLm1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBzeW5jZXJGaWxlc3lzdGVtLndyaXRlRmlsZShkc3RGaWxlUGF0aCwgcGF0aEFuZENvZGUuY29kZSk7XG4gICAgICAvLyDrsKnquIgg7Jqw66as6rCAIOyTtCBwYXRo66W8IOuTseuhnSDihpIgZGV2IHdhdGNoZXLsnZgg7ZuE7IaNIGNoYW5nZSDsnbTrsqTtirjqsIBcbiAgICAgIC8vIOyZuOu2gCDrs4Dqsr3snLzroZwg7Jik7J2465CY7KeAIOyViuuPhOuhnSDqsbDrpoQg6rCA65OcIOyekOujjCDsoJzqs7UuXG4gICAgICBhd2FpdCB0cmFja1dyaXR0ZW4oZHN0RmlsZVBhdGgpO1xuICAgICAgIWlzVGVzdCgpICYmXG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGNoYWxrLmJvbGQoXCJHZW5lcmF0ZWQ6IFwiKSArIGNoYWxrLmJsdWUoYCR7ZHN0RmlsZVBhdGgucmVwbGFjZShgJHthcHBSb290UGF0aH0vYCwgXCJcIil9YCksXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gZHN0RmlsZVBhdGg7XG4gICAgfSksXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUNBLGVBQXNCLGlCQUNwQixLQUNBLGlCQUNBLGtCQUN5QjtDQUN6QixNQUFNLGtCQUFrQjtFQUN0QixXQUFXO0VBQ1gsR0FBRztDQUNMO0NBQ0EsTUFBTSxFQUFFLG9CQUFvQjtFQUFFO0VBQUs7RUFBaUI7Q0FBZ0IsQ0FBQztDQUdyRSxNQUFNLE9BQXNCLENBQUMsR0FBRztDQUdoQyxNQUFNLGdCQUNKLE1BQU0sUUFBUSxJQUNaLEtBQUssSUFBSSxPQUFPLGdCQUFnQjtFQUM5QixPQUFPLE1BQU0sZUFBZSxhQUFhLGVBQWU7Q0FDMUQsQ0FBQyxDQUNILEVBQUEsQ0FDQSxLQUFLO0NBRVAsTUFBTSx1QkFBc0MsT0FBTyxZQUFZO0VBQzdELElBQUksZ0JBQWdCLFdBQ2xCLE9BQU87T0FFUCxPQUFPLE1BQU0sWUFBWSxjQUFjLE9BQU8sZ0JBQWdCO0dBQzVELE1BQU0sRUFBRSxZQUFZLE9BQU8sT0FBTztHQUNsQyxNQUFNLFdBQVcsR0FBRyxPQUFPLFlBQVksR0FBRyxZQUFZO0dBRXRELE9BQU8sTUFBTSxXQURRLFFBQVEsS0FBSyxXQUFXLFNBQVMsUUFBUSxhQUFhLElBQUksT0FBTyxFQUFFLENBRXRGLEdBQ0EsT0FBTyxZQUFZLENBQUUsTUFBTSxpQkFBaUIsT0FB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
148
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1nZW5lcmF0b3IuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9jb2RlLWdlbmVyYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgZm9ybWF0Q29kZSB9IGZyb20gXCIuLi9jb2RlLWZvcm1hdHRpbmdcIjtcbmltcG9ydCB7IFNEIH0gZnJvbSBcIi4uL2RpY3Qvc2RcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBBbHJlYWR5UHJvY2Vzc2VkRXhjZXB0aW9uIH0gZnJvbSBcIi4uL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IHR5cGUgUmVuZGVyZWRUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZS90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgVGVtcGxhdGVNYW5hZ2VyIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3RlbXBsYXRlLW1hbmFnZXJcIjtcbmltcG9ydCB7IEJVSUxUX0lOX1RZUEVTIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3pvZC1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG4gIHR5cGUgR2VuZXJhdGVPcHRpb25zLFxuICB0eXBlIFBhdGhBbmRDb2RlLFxuICB0eXBlIFRlbXBsYXRlS2V5LFxuICB0eXBlIFRlbXBsYXRlT3B0aW9ucyxcbn0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBldmVyeUFzeW5jLCBmaWx0ZXJBc3luYyB9IGZyb20gXCIuLi91dGlscy9hc3luYy11dGlsc1wiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IHdyYXBJZiB9IGZyb20gXCIuLi91dGlscy9sb2Rhc2gtYWJsZVwiO1xuaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgdHJhY2tXcml0dGVuIH0gZnJvbSBcIi4vZmlsZS10cmFja2luZ1wiO1xuaW1wb3J0IHsgc3luY2VyRmlsZUV4aXN0cywgc3luY2VyRmlsZXN5c3RlbSB9IGZyb20gXCIuL2ZpbGVzeXN0ZW0tZGVwZW5kZW5jaWVzXCI7XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOugjOuNlOunge2VmOqzoCDtjIzsnbzroZwg7IOd7ISx7ZWp64uI64ukLlxuICogb3ZlcndyaXRlIOyYteyFmOydtCBmYWxzZeyduCDqsr3smrAsIOydtOuvuCDsobTsnqztlZjripQg7YyM7J287J2AIOqxtOuEiOucgeuLiOuLpC5cbiAqIEBwYXJhbSBrZXkgLSDthZztlIzrpr8g7YKkICjsmIg6IFwiZW50aXR5XCIsIFwibW9kZWxcIiwgXCJzZXJ2aWNlXCIg65OxKVxuICogQHBhcmFtIHRlbXBsYXRlT3B0aW9ucyAtIO2FnO2UjOumvyDroIzrjZTrp4Hsl5Ag7ZWE7JqU7ZWcIOyYteyFmFxuICogQHBhcmFtIF9nZW5lcmF0ZU9wdGlvbnMgLSDsg53shLEg7Ji17IWYIChvdmVyd3JpdGUg7Jes67aAKVxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVRlbXBsYXRlPFQgZXh0ZW5kcyBUZW1wbGF0ZUtleT4oXG4gIGtleTogVCxcbiAgdGVtcGxhdGVPcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVF0sXG4gIF9nZW5lcmF0ZU9wdGlvbnM/OiBHZW5lcmF0ZU9wdGlvbnMsXG4pOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIGNvbnN0IGdlbmVyYXRlT3B0aW9ucyA9IHtcbiAgICBvdmVyd3JpdGU6IGZhbHNlLFxuICAgIC4uLl9nZW5lcmF0ZU9wdGlvbnMsXG4gIH07XG4gIE5haXRlLnQoXCJnZW5lcmF0ZVRlbXBsYXRlXCIsIHsga2V5LCB0ZW1wbGF0ZU9wdGlvbnMsIGdlbmVyYXRlT3B0aW9ucyB9KTtcblxuICAvLyDtgqQgY2hpbGRyZW5cbiAgY29uc3Qga2V5czogVGVtcGxhdGVLZXlbXSA9IFtrZXldO1xuXG4gIC8vIO2FnO2UjOumvyDroIzrjZRcbiAgY29uc3QgcGF0aEFuZENvZGVzID0gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAga2V5cy5tYXAoYXN5bmMgKHRlbXBsYXRlS2V5KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZW5kZXJUZW1wbGF0ZSh0ZW1wbGF0ZUtleSwgdGVtcGxhdGVPcHRpb25zKTtcbiAgICAgIH0pLFxuICAgIClcbiAgKS5mbGF0KCk7XG5cbiAgY29uc3QgZmlsdGVyZWRQYXRoQW5kQ29kZXM6IFBhdGhBbmRDb2RlW10gPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmIChnZW5lcmF0ZU9wdGlvbnMub3ZlcndyaXRlKSB7XG4gICAgICByZXR1cm4gcGF0aEFuZENvZGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXdhaXQgZmlsdGVyQXN5bmMocGF0aEFuZENvZGVzLCBhc3luYyAocGF0aEFuZENvZGUpID0+IHtcbiAgICAgICAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7U29uYW11LmFwcFJvb3RQYXRofS8ke3BhdGhBbmRDb2RlLnBhdGh9YDtcbiAgICAgICAgY29uc3QgZHN0RmlsZVBhdGhzID0gdGFyZ2V0cy5tYXAoKHRhcmdldCkgPT4gZmlsZVBhdGgucmVwbGFjZShcIi86dGFyZ2V0L1wiLCBgLyR7dGFyZ2V0fS9gKSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBldmVyeUFzeW5jKFxuICAgICAgICAgIGRzdEZpbGVQYXRocyxcbiAgICAgICAgICBhc3luYyAoZHN0UGF0aCkgPT4gIShhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRzdFBhdGgpKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSkoKTtcblxuICBpZiAoZmlsdGVyZWRQYXRoQW5kQ29kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IuYWxsRmlsZXNFeGlzdFwiKSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZmlsdGVyZWRQYXRoQW5kQ29kZXMubWFwKChwYXRoQW5kQ29kZSkgPT4gd3JpdGVDb2RlVG9QYXRoRWFjaFRhcmdldChwYXRoQW5kQ29kZSkpLFxuICAgIClcbiAgKS5mbGF0KCk7XG59XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOugjOuNlOunge2VmOyXrCBQYXRoQW5kQ29kZSDqsJ3ssrTrpbwg67CY7ZmY7ZWp64uI64ukLlxuICog7YyM7J2866GcIOyTsOyngCDslYrqs6Ag66mU66qo66as7IOB7JeQ7ISc66eMIOugjOuNlOunge2VqeuLiOuLpC5cbiAqIEBwYXJhbSBrZXkgLSDthZztlIzrpr8g7YKkXG4gKiBAcGFyYW0gb3B0aW9ucyAtIO2FnO2UjOumvyDroIzrjZTrp4Eg7Ji17IWYXG4gKiBAcmV0dXJucyDqsr3roZzsmYAg7L2U65OcIOyMjeydmCDrsLDsl7RcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclRlbXBsYXRlPFQgZXh0ZW5kcyBrZXlvZiBUZW1wbGF0ZU9wdGlvbnM+KFxuICBrZXk6IFQsXG4gIG9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tUXSxcbik6IFByb21pc2U8UGF0aEFuZENvZGVbXT4ge1xuICBOYWl0ZS50KFwicmVuZGVyVGVtcGxhdGVcIiwgeyBrZXksIG9wdGlvbnMgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0KGtleSk7XG5cbiAgY29uc3QgcmVuZGVyZWQgPSBhd2FpdCB0ZW1wbGF0ZS5yZW5kZXIob3B0aW9ucyk7XG4gIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUoa2V5LCByZW5kZXJlZCk7XG5cbiAgbGV0IHByZVRlbXBsYXRlUmVzb2x2ZWQ6IFBhdGhBbmRDb2RlW10gPSBbXTtcbiAgaWYgKHJlbmRlcmVkLnByZVRlbXBsYXRlcykge1xuICAgIHByZVRlbXBsYXRlUmVzb2x2ZWQgPSAoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgcmVuZGVyZWQucHJlVGVtcGxhdGVzLm1hcCgoeyBrZXk6IHByZVRlbXBsYXRlS2V5LCBvcHRpb25zOiBwcmVUZW1wbGF0ZU9wdGlvbnMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZW5kZXJUZW1wbGF0ZShwcmVUZW1wbGF0ZUtleSwgcHJlVGVtcGxhdGVPcHRpb25zKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgKS5mbGF0KCk7XG4gIH1cblxuICByZXR1cm4gW3Jlc29sdmVkLCAuLi5wcmVUZW1wbGF0ZVJlc29sdmVkXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUoXG4gIGtleTogVGVtcGxhdGVLZXksXG4gIHJlc3VsdDogUmVuZGVyZWRUZW1wbGF0ZSxcbik6IFByb21pc2U8UGF0aEFuZENvZGU+IHtcbiAgTmFpdGUudChgcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUke2tleX1gLCB7IGtleSwgcmVzdWx0IH0pO1xuXG4gIGNvbnN0IHsgdGFyZ2V0LCBwYXRoOiBmaWxlUGF0aCwgYm9keSwgaW1wb3J0S2V5cywgY3VzdG9tSGVhZGVycyB9ID0gcmVzdWx0O1xuXG4gIC8vIGltcG9ydCDtlaAg64yA7IOB7J2YIOuMgOyDgSBwYXRoIOy2lOy2nFxuICBjb25zdCBidWlsdEluU2NoZW1hTmFtZXMgPSBPYmplY3QudmFsdWVzKEJVSUxUX0lOX1RZUEVTKS5tYXAoXG4gICAgKGluZm8pID0+XG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIGluZm8uc2NoZW1hTmFtZSBhcyBzdHJpbmcsXG4gICk7XG4gIGNvbnN0IGltcG9ydERlZnMgPSBpbXBvcnRLZXlzXG4gICAgLy8g64K07J6lIO2DgOyehSDsiqTtgqTrp4jripQg7J2066+4IHNvbmFtdeyXkOyEnCBpbXBvcnTrkJjrr4DroZwg7KCc7Jm4XG4gICAgLmZpbHRlcigoaW1wb3J0S2V5KSA9PiAhYnVpbHRJblNjaGVtYU5hbWVzLmluY2x1ZGVzKGltcG9ydEtleSkpXG4gICAgLnJlZHVjZShcbiAgICAgIChyLCBpbXBvcnRLZXkpID0+IHtcbiAgICAgICAgbGV0IG1vZHVsZVBhdGggPSBpbXBvcnRLZXk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbW9kdWxlUGF0aCA9IEVudGl0eU1hbmFnZXIuZ2V0TW9kdWxlUGF0aChpbXBvcnRLZXkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBbcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGU6JHtrZXl9XSAke2ltcG9ydEtleX0g66qo65OIIOqyveuhnCDssL7quLAg7Iuk7YyoOiAke2Vycm9yfWAsXG4gICAgICAgICAgICB7IGNhdXNlOiBlcnJvciB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGltcG9ydFBhdGggPSBtb2R1bGVQYXRoO1xuICAgICAgICBpZiAobW9kdWxlUGF0aC5pbmNsdWRlcyhcIi9cIikgfHwgbW9kdWxlUGF0aC5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICAgICAgICBpbXBvcnRQYXRoID0gd3JhcElmKHBhdGgucmVsYXRpdmUocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSwgbW9kdWxlUGF0aCksIChwKSA9PiBbXG4gICAgICAgICAgICAhcC5zdGFydHNXaXRoKFwiLlwiKSxcbiAgICAgICAgICAgIGAuLyR7cH1gLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g6rCZ7J2AIO2MjOydvOyXkOyEnCBpbXBvcnQg7ZWY64qUIOqyveyasCBrZXlzIOuhnCDrgpjsl7Qg7LKY66asXG4gICAgICAgIGNvbnN0IGV4aXN0c09uZSA9IHIuZmluZCgoaW1wb3J0RGVmKSA9PiBpbXBvcnREZWYuZnJvbSA9PT0gaW1wb3J0UGF0aCk7XG4gICAgICAgIGlmIChleGlzdHNPbmUpIHtcbiAgICAgICAgICBleGlzdHNPbmUua2V5cyA9IHVuaXF1ZShleGlzdHNPbmUua2V5cy5jb25jYXQoaW1wb3J0S2V5KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgci5wdXNoKHtcbiAgICAgICAgICAgIGtleXM6IFtpbXBvcnRLZXldLFxuICAgICAgICAgICAgZnJvbTogaW1wb3J0UGF0aCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0sXG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHtcbiAgICAgICAga2V5czogc3RyaW5nW107XG4gICAgICAgIGZyb206IHN0cmluZztcbiAgICAgIH1bXSxcbiAgICApXG4gICAgLy8g7IWA7ZSEIOywuOyhsCDrsKnsp4BcbiAgICAuZmlsdGVyKChpbXBvcnREZWYpID0+ICFmaWxlUGF0aC5lbmRzV2l0aChgJHtpbXBvcnREZWYuZnJvbS5yZXBsYWNlKFwiLi9cIiwgXCJcIil9LnRzYCkpO1xuXG4gIC8vIOy7pOyKpO2FgCDtl6TrjZQg7Y+s7ZWo7ZWY7JesIO2XpOuNlCDsg53shLFcbiAgY29uc3QgaGVhZGVyID0gW1xuICAgIC4uLihjdXN0b21IZWFkZXJzID8/IFtdKSxcbiAgICAuLi5pbXBvcnREZWZzLm1hcChcbiAgICAgIChpbXBvcnREZWYpID0+IGBpbXBvcnQgeyAke2ltcG9ydERlZi5rZXlzLmpvaW4oXCIsIFwiKX0gfSBmcm9tICcke2ltcG9ydERlZi5mcm9tfSdgLFxuICAgICksXG4gIF0uam9pbihcIlxcblwiKTtcblxuICBjb25zdCBmb3JtYXR0ZWQgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmIChrZXkgPT09IFwiZ2VuZXJhdGVkX2h0dHBcIikge1xuICAgICAgcmV0dXJuIFtoZWFkZXIsIGJvZHldLmpvaW4oXCJcXG5cXG5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIE5haXRlLnQoXCJyZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZTpiZWZvcmVGb3JtYXRcIiwgeyBrZXksIGhlYWRlciwgYm9keSB9KTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZENvZGUgPSBhd2FpdCBmb3JtYXRDb2RlKFxuICAgICAgICBbaGVhZGVyLCBib2R5XS5qb2luKFwiXFxuXFxuXCIpLFxuICAgICAgICBgJHtTb25hbXUuYXBwUm9vdFBhdGh9LyR7ZmlsZVBhdGh9YCxcbiAgICAgICk7XG4gICAgICBOYWl0ZS50KGByZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZTpmb3JtYXR0ZWQ6JHtrZXl9YCwgZm9ybWF0dGVkQ29kZSk7XG4gICAgICByZXR1cm4gZm9ybWF0dGVkQ29kZTtcbiAgICB9XG4gIH0pKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBgJHt0YXJnZXR9LyR7ZmlsZVBhdGh9YCxcbiAgICBjb2RlOiBmb3JtYXR0ZWQsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQ29kZVRvUGF0aEVhY2hUYXJnZXQocGF0aEFuZENvZGU6IFBhdGhBbmRDb2RlKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgeyBhcHBSb290UGF0aCB9ID0gU29uYW11O1xuICBjb25zdCBmaWxlUGF0aCA9XG4gICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBgJHtTb25hbXUuYXBwUm9vdFBhdGh9LyR7cGF0aEFuZENvZGUucGF0aH1gIGFzIEFic29sdXRlUGF0aDtcblxuICBjb25zdCBkc3RGaWxlUGF0aHMgPSB1bmlxdWUoXG4gICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyB0YXJnZXRzLm1hcChcbiAgICAgICh0YXJnZXQpID0+IGZpbGVQYXRoLnJlcGxhY2UoXCIvOnRhcmdldC9cIiwgYC8ke3RhcmdldH0vYCksXG4gICAgKSBhcyBBYnNvbHV0ZVBhdGhbXSxcbiAgKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGRzdEZpbGVQYXRocy5tYXAoYXN5bmMgKGRzdEZpbGVQYXRoKSA9PiB7XG4gICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0RmlsZVBhdGgpO1xuICAgICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhkaXIpKSkge1xuICAgICAgICBhd2FpdCBzeW5jZXJGaWxlc3lzdGVtLm1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBzeW5jZXJGaWxlc3lzdGVtLndyaXRlRmlsZShkc3RGaWxlUGF0aCwgcGF0aEFuZENvZGUuY29kZSk7XG4gICAgICAvLyDrsKnquIgg7Jqw66as6rCAIOyTtCBwYXRo66W8IOuTseuhnSDihpIgZGV2IHdhdGNoZXLsnZgg7ZuE7IaNIGNoYW5nZSDsnbTrsqTtirjqsIBcbiAgICAgIC8vIOyZuOu2gCDrs4Dqsr3snLzroZwg7Jik7J2465CY7KeAIOyViuuPhOuhnSDqsbDrpoQg6rCA65OcIOyekOujjCDsoJzqs7UuXG4gICAgICBhd2FpdCB0cmFja1dyaXR0ZW4oZHN0RmlsZVBhdGgpO1xuICAgICAgIWlzVGVzdCgpICYmXG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGNoYWxrLmJvbGQoXCJHZW5lcmF0ZWQ6IFwiKSArIGNoYWxrLmJsdWUoYCR7ZHN0RmlsZVBhdGgucmVwbGFjZShgJHthcHBSb290UGF0aH0vYCwgXCJcIil9YCksXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gZHN0RmlsZVBhdGg7XG4gICAgfSksXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUNBLGVBQXNCLGlCQUNwQixLQUNBLGlCQUNBLGtCQUN5QjtDQUN6QixNQUFNLGtCQUFrQjtFQUN0QixXQUFXO0VBQ1gsR0FBRztDQUNMO0NBQ0EsTUFBTSxFQUFFLG9CQUFvQjtFQUFFO0VBQUs7RUFBaUI7Q0FBZ0IsQ0FBQztDQUdyRSxNQUFNLE9BQXNCLENBQUMsR0FBRztDQUdoQyxNQUFNLGdCQUNKLE1BQU0sUUFBUSxJQUNaLEtBQUssSUFBSSxPQUFPLGdCQUFnQjtFQUM5QixPQUFPLE1BQU0sZUFBZSxhQUFhLGVBQWU7Q0FDMUQsQ0FBQyxDQUNILEVBQUEsQ0FDQSxLQUFLO0NBRVAsTUFBTSx1QkFBc0MsT0FBTyxZQUFZO0VBQzdELElBQUksZ0JBQWdCLFdBQ2xCLE9BQU87T0FFUCxPQUFPLE1BQU0sWUFBWSxjQUFjLE9BQU8sZ0JBQWdCO0dBQzVELE1BQU0sRUFBRSxZQUFZLE9BQU8sT0FBTztHQUNsQyxNQUFNLFdBQVcsR0FBRyxPQUFPLFlBQVksR0FBRyxZQUFZO0dBRXRELE9BQU8sTUFBTSxXQURRLFFBQVEsS0FBSyxXQUFXLFNBQVMsUUFBUSxhQUFhLElBQUksT0FBTyxFQUFFLENBRXRGLEdBQ0EsT0FBTyxZQUFZLENBQUUsTUFBTSxpQkFBaUIsT0FB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
@@ -1,5 +1,5 @@
1
1
  import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
- import { formatCode, init_formatter } from "../utils/formatter.js";
2
+ import { formatCode, init_code_formatting } from "../code-formatting/index.js";
3
3
  import { init_filesystem_dependencies, syncerFileExists, syncerFilesystem } from "./filesystem-dependencies.js";
4
4
  import path, { dirname } from "node:path";
5
5
  //#region src/syncer/file-copy.ts
@@ -26,11 +26,11 @@ function replaceCoreImport(source, toPath) {
26
26
  return source.replace(/from "sonamu(\/dict)?"/g, `from "${sharedPath}"`);
27
27
  }
28
28
  var init_file_copy = __esmMin((() => {
29
- init_formatter();
29
+ init_code_formatting();
30
30
  init_filesystem_dependencies();
31
31
  }));
32
32
  //#endregion
33
33
  init_file_copy();
34
34
  export { copyFileWithReplaceCoreToShared, init_file_copy };
35
35
 
36
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1jb3B5LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvZmlsZS1jb3B5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoLCB7IGRpcm5hbWUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tIFwiLi4vdXRpbHMvZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBzeW5jZXJGaWxlRXhpc3RzLCBzeW5jZXJGaWxlc3lzdGVtIH0gZnJvbSBcIi4vZmlsZXN5c3RlbS1kZXBlbmRlbmNpZXNcIjtcblxuLyoqXG4gKiBTeW5jZXIg7YyM7J287Iuc7Iqk7YWcIOqyveqzhOulvCDthrXtlbQg7YyM7J287J2EIOuzteyCrO2VmOqzoCDtgbTrnbzsnbTslrjtirjsmqkgaW1wb3J0IOqyveuhnOulvCDrs4DtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkKFxuICBmcm9tUGF0aDogc3RyaW5nLFxuICB0b1BhdGg6IHN0cmluZyxcbiAgc3luY0hlYWRlcj86IHN0cmluZyxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoIShhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGZyb21QYXRoKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvbGRGaWxlQ29udGVudCA9IGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ucmVhZEZpbGUoZnJvbVBhdGgsIFwidXRmLThcIik7XG4gIGxldCBuZXdGaWxlQ29udGVudCA9IHJlcGxhY2VDb3JlSW1wb3J0KG9sZEZpbGVDb250ZW50LCB0b1BhdGgpO1xuXG4gIGlmIChzeW5jSGVhZGVyKSB7XG4gICAgY29uc3QgZ2VuZXJhdGVkQmxvY2tSZWdleCA9IC9cXC9cXCpcXCpcXHI/XFxuIFxcKiBAZ2VuZXJhdGVkXFxyP1xcbltcXHNcXFNdKj9cXCpcXC9cXHI/XFxuKFxccj9cXG4pKi87XG4gICAgbmV3RmlsZUNvbnRlbnQgPSBnZW5lcmF0ZWRCbG9ja1JlZ2V4LnRlc3QobmV3RmlsZUNvbnRlbnQpXG4gICAgICA/IG5ld0ZpbGVDb250ZW50LnJlcGxhY2UoZ2VuZXJhdGVkQmxvY2tSZWdleCwgYCR7c3luY0hlYWRlcn1cXG5cXG5gKVxuICAgICAgOiBgJHtzeW5jSGVhZGVyfVxcblxcbiR7bmV3RmlsZUNvbnRlbnR9YDtcbiAgfVxuXG4gIGlmICh0b1BhdGguZW5kc1dpdGgoXCIudHNcIikgfHwgdG9QYXRoLmVuZHNXaXRoKFwiLnRzeFwiKSkge1xuICAgIG5ld0ZpbGVDb250ZW50ID0gYXdhaXQgZm9ybWF0Q29kZShuZXdGaWxlQ29udGVudCwgdG9QYXRoKTtcbiAgfVxuXG4gIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ud3JpdGVGaWxlKHRvUGF0aCwgbmV3RmlsZUNvbnRlbnQpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUNvcmVJbXBvcnQoc291cmNlOiBzdHJpbmcsIHRvUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc3JjTWF0Y2ggPSB0b1BhdGgubWF0Y2goL14oLitcXC9zcmMpXFwvLyk7XG4gIGlmICghc3JjTWF0Y2gpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgY29uc3Qgc2VydmljZXNEaXIgPSBwYXRoLmpvaW4oc3JjTWF0Y2hbMV0sIFwic2VydmljZXNcIik7XG4gIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZGlybmFtZSh0b1BhdGgpLCBzZXJ2aWNlc0Rpcik7XG4gIGNvbnN0IHNoYXJlZFBhdGggPSByZWxhdGl2ZVBhdGggPT09IFwiXCIgPyBcIi4vc29uYW11LnNoYXJlZFwiIDogYCR7cmVsYXRpdmVQYXRofS9zb25hbXUuc2hhcmVkYDtcbiAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKC9mcm9tIFwic29uYW11KFxcL2RpY3QpP1wiL2csIGBmcm9tIFwiJHtzaGFyZWRQYXRofVwiYCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsZUFBc0IsZ0NBQ3BCLFVBQ0EsUUFDQSxZQUNrQjtDQUNsQixJQUFJLENBQUUsTUFBTSxpQkFBaUIsUUFBUSxHQUNuQyxPQUFPO0NBSVQsSUFBSSxpQkFBaUIsa0JBQWtCLE1BRFYsaUJBQWlCLFNBQVMsVUFBVSxPQUFPLEdBQ2pCLE1BQU07Q0FFN0QsSUFBSSxZQUFZO0VBQ2QsTUFBTSxzQkFBc0I7RUFDNUIsaUJBQWlCLG9CQUFvQixLQUFLLGNBQWMsSUFDcEQsZUFBZSxRQUFRLHFCQUFxQixHQUFHLFdBQVcsS0FBSyxJQUMvRCxHQUFHLFdBQVcsTUFBTTtDQUMxQjtDQUVBLElBQUksT0FBTyxTQUFTLEtBQUssS0FBSyxPQUFPLFNBQVMsTUFBTSxHQUNsRCxpQkFBaUIsTUFBTSxXQUFXLGdCQUFnQixNQUFNO0NBRzFELE1BQU0saUJBQWlCLFVBQVUsUUFBUSxjQUFjO0NBQ3ZELE9BQU87QUFDVDtBQUVBLFNBQVMsa0JBQWtCLFFBQWdCLFFBQXdCO0NBQ2pFLE1BQU0sV0FBVyxPQUFPLE1BQU0sY0FBYztDQUM1QyxJQUFJLENBQUMsVUFDSCxPQUFPO0NBR1QsTUFBTSxjQUFjLEtBQUssS0FBSyxTQUFTLElBQUksVUFBVTtDQUNyRCxNQUFNLGVBQWUsS0FBSyxTQUFTLFFBQVEsTUFBTSxHQUFHLFdBQVc7Q0FDL0QsTUFBTSxhQUFhLGlCQUFpQixLQUFLLG9CQUFvQixHQUFHLGFBQWE7Q0FDN0UsT0FBTyxPQUFPLFFBQVEsMkJBQTJCLFNBQVMsV0FBVyxFQUFFO0FBQ3pFOztnQkEzQytDOzhCQUMrQiJ9
36
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1jb3B5LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvZmlsZS1jb3B5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoLCB7IGRpcm5hbWUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tIFwiLi4vY29kZS1mb3JtYXR0aW5nXCI7XG5pbXBvcnQgeyBzeW5jZXJGaWxlRXhpc3RzLCBzeW5jZXJGaWxlc3lzdGVtIH0gZnJvbSBcIi4vZmlsZXN5c3RlbS1kZXBlbmRlbmNpZXNcIjtcblxuLyoqXG4gKiBTeW5jZXIg7YyM7J287Iuc7Iqk7YWcIOqyveqzhOulvCDthrXtlbQg7YyM7J287J2EIOuzteyCrO2VmOqzoCDtgbTrnbzsnbTslrjtirjsmqkgaW1wb3J0IOqyveuhnOulvCDrs4DtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkKFxuICBmcm9tUGF0aDogc3RyaW5nLFxuICB0b1BhdGg6IHN0cmluZyxcbiAgc3luY0hlYWRlcj86IHN0cmluZyxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoIShhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGZyb21QYXRoKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvbGRGaWxlQ29udGVudCA9IGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ucmVhZEZpbGUoZnJvbVBhdGgsIFwidXRmLThcIik7XG4gIGxldCBuZXdGaWxlQ29udGVudCA9IHJlcGxhY2VDb3JlSW1wb3J0KG9sZEZpbGVDb250ZW50LCB0b1BhdGgpO1xuXG4gIGlmIChzeW5jSGVhZGVyKSB7XG4gICAgY29uc3QgZ2VuZXJhdGVkQmxvY2tSZWdleCA9IC9cXC9cXCpcXCpcXHI/XFxuIFxcKiBAZ2VuZXJhdGVkXFxyP1xcbltcXHNcXFNdKj9cXCpcXC9cXHI/XFxuKFxccj9cXG4pKi87XG4gICAgbmV3RmlsZUNvbnRlbnQgPSBnZW5lcmF0ZWRCbG9ja1JlZ2V4LnRlc3QobmV3RmlsZUNvbnRlbnQpXG4gICAgICA/IG5ld0ZpbGVDb250ZW50LnJlcGxhY2UoZ2VuZXJhdGVkQmxvY2tSZWdleCwgYCR7c3luY0hlYWRlcn1cXG5cXG5gKVxuICAgICAgOiBgJHtzeW5jSGVhZGVyfVxcblxcbiR7bmV3RmlsZUNvbnRlbnR9YDtcbiAgfVxuXG4gIGlmICh0b1BhdGguZW5kc1dpdGgoXCIudHNcIikgfHwgdG9QYXRoLmVuZHNXaXRoKFwiLnRzeFwiKSkge1xuICAgIG5ld0ZpbGVDb250ZW50ID0gYXdhaXQgZm9ybWF0Q29kZShuZXdGaWxlQ29udGVudCwgdG9QYXRoKTtcbiAgfVxuXG4gIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ud3JpdGVGaWxlKHRvUGF0aCwgbmV3RmlsZUNvbnRlbnQpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUNvcmVJbXBvcnQoc291cmNlOiBzdHJpbmcsIHRvUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc3JjTWF0Y2ggPSB0b1BhdGgubWF0Y2goL14oLitcXC9zcmMpXFwvLyk7XG4gIGlmICghc3JjTWF0Y2gpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgY29uc3Qgc2VydmljZXNEaXIgPSBwYXRoLmpvaW4oc3JjTWF0Y2hbMV0sIFwic2VydmljZXNcIik7XG4gIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZGlybmFtZSh0b1BhdGgpLCBzZXJ2aWNlc0Rpcik7XG4gIGNvbnN0IHNoYXJlZFBhdGggPSByZWxhdGl2ZVBhdGggPT09IFwiXCIgPyBcIi4vc29uYW11LnNoYXJlZFwiIDogYCR7cmVsYXRpdmVQYXRofS9zb25hbXUuc2hhcmVkYDtcbiAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKC9mcm9tIFwic29uYW11KFxcL2RpY3QpP1wiL2csIGBmcm9tIFwiJHtzaGFyZWRQYXRofVwiYCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsZUFBc0IsZ0NBQ3BCLFVBQ0EsUUFDQSxZQUNrQjtDQUNsQixJQUFJLENBQUUsTUFBTSxpQkFBaUIsUUFBUSxHQUNuQyxPQUFPO0NBSVQsSUFBSSxpQkFBaUIsa0JBQWtCLE1BRFYsaUJBQWlCLFNBQVMsVUFBVSxPQUFPLEdBQ2pCLE1BQU07Q0FFN0QsSUFBSSxZQUFZO0VBQ2QsTUFBTSxzQkFBc0I7RUFDNUIsaUJBQWlCLG9CQUFvQixLQUFLLGNBQWMsSUFDcEQsZUFBZSxRQUFRLHFCQUFxQixHQUFHLFdBQVcsS0FBSyxJQUMvRCxHQUFHLFdBQVcsTUFBTTtDQUMxQjtDQUVBLElBQUksT0FBTyxTQUFTLEtBQUssS0FBSyxPQUFPLFNBQVMsTUFBTSxHQUNsRCxpQkFBaUIsTUFBTSxXQUFXLGdCQUFnQixNQUFNO0NBRzFELE1BQU0saUJBQWlCLFVBQVUsUUFBUSxjQUFjO0NBQ3ZELE9BQU87QUFDVDtBQUVBLFNBQVMsa0JBQWtCLFFBQWdCLFFBQXdCO0NBQ2pFLE1BQU0sV0FBVyxPQUFPLE1BQU0sY0FBYztDQUM1QyxJQUFJLENBQUMsVUFDSCxPQUFPO0NBR1QsTUFBTSxjQUFjLEtBQUssS0FBSyxTQUFTLElBQUksVUFBVTtDQUNyRCxNQUFNLGVBQWUsS0FBSyxTQUFTLFFBQVEsTUFBTSxHQUFHLFdBQVc7Q0FDL0QsTUFBTSxhQUFhLGlCQUFpQixLQUFLLG9CQUFvQixHQUFHLGFBQWE7Q0FDN0UsT0FBTyxPQUFPLFFBQVEsMkJBQTJCLFNBQVMsV0FBVyxFQUFFO0FBQ3pFOztzQkEzQytDOzhCQUMrQiJ9
@@ -1,6 +1,6 @@
1
1
  import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
- import { constants } from "node:fs";
3
2
  import { access, mkdir, readFile, rm, stat, unlink, writeFile } from "node:fs/promises";
3
+ import { constants } from "node:fs";
4
4
  //#region src/syncer/filesystem-dependencies.ts
5
5
  async function syncerFileExists(path) {
6
6
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"syncer-actions.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer-actions.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAKlE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,wBAAsB,gBAAgB,kBAcrC;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE;IACX,WAAW,EAAE,iBAAiB,CAAC;CAChC,EAAE,GACF,OAAO,CAAC,YAAY,EAAE,CAAC,CAazB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAE1F;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAOrE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,CAQjE;AAED;;GAEG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,YAAY,CAAC,CAmB1E;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAExE;AAED;;;;;;GAMG;AACH,wBAAsB,uCAAuC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAWvF;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoCzF;AAED;;;;;GAKG;AACH,wBAAsB,oCAAoC,IAAI,OAAO,CAAC,IAAI,CAAC,CAiE1E;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAwBhE"}
1
+ {"version":3,"file":"syncer-actions.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer-actions.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIlE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,wBAAsB,gBAAgB,kBAcrC;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE;IACX,WAAW,EAAE,iBAAiB,CAAC;CAChC,EAAE,GACF,OAAO,CAAC,YAAY,EAAE,CAAC,CAazB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAE1F;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAOrE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,CAQjE;AAED;;GAEG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,YAAY,CAAC,CAmB1E;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAExE;AAED;;;;;;GAMG;AACH,wBAAsB,uCAAuC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAWvF;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoCzF;AAED;;;;;GAKG;AACH,wBAAsB,oCAAoC,IAAI,OAAO,CAAC,IAAI,CAAC,CAiE1E;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAwBhE"}
@@ -2,7 +2,7 @@ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
2
  import { init_runtime_value, isObjectValue } from "../utils/runtime-value.js";
3
3
  import { AlreadyProcessedException, init_so_exceptions } from "../exceptions/so-exceptions.js";
4
4
  import { init_controller, isTest } from "../utils/controller.js";
5
- import { formatCode, init_formatter } from "../utils/formatter.js";
5
+ import { formatCode, init_code_formatting } from "../code-formatting/index.js";
6
6
  import { Sonamu, init_sonamu } from "../api/sonamu.js";
7
7
  import { Naite, init_naite } from "../naite/naite.js";
8
8
  import { init_filesystem_dependencies, syncerFileExists, syncerFilesystem } from "./filesystem-dependencies.js";
@@ -187,10 +187,10 @@ async function syncLocaleFiles(target, apiI18nDir, locales) {
187
187
  }
188
188
  var init_syncer_actions = __esmMin((() => {
189
189
  init_sonamu();
190
+ init_code_formatting();
190
191
  init_so_exceptions();
191
192
  init_naite();
192
193
  init_controller();
193
- init_formatter();
194
194
  init_runtime_value();
195
195
  init_code_generator();
196
196
  init_file_copy();
@@ -201,4 +201,4 @@ var init_syncer_actions = __esmMin((() => {
201
201
  init_syncer_actions();
202
202
  export { actionCopySharedToTargetsIfNotExists, actionGenerateHttpValidators, actionGenerateHttps, actionGenerateInitialTypes, actionGenerateSchemas, actionGenerateServices, actionGenerateSsrEntryServerIfNotExists, actionGenerateSsrQueries, actionSyncConfig, actionSyncFilesToTargets, actionSyncSonamuDictionary, init_syncer_actions };
203
203
 
204
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLWFjdGlvbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9zeW5jZXItYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCBwYXRoLCB7IGRpcm5hbWUgfSBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgQWxyZWFkeVByb2Nlc3NlZEV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IE5haXRlIH0gZnJvbSBcIi4uL25haXRlL25haXRlXCI7XG5pbXBvcnQgeyBpc1Rlc3QgfSBmcm9tIFwiLi4vdXRpbHMvY29udHJvbGxlclwiO1xuaW1wb3J0IHsgZm9ybWF0Q29kZSB9IGZyb20gXCIuLi91dGlscy9mb3JtYXR0ZXJcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGlzT2JqZWN0VmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVUZW1wbGF0ZSB9IGZyb20gXCIuL2NvZGUtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkIH0gZnJvbSBcIi4vZmlsZS1jb3B5XCI7XG5pbXBvcnQgeyB0cmFja1dyaXR0ZW4gfSBmcm9tIFwiLi9maWxlLXRyYWNraW5nXCI7XG5pbXBvcnQgeyBzeW5jZXJGaWxlRXhpc3RzLCBzeW5jZXJGaWxlc3lzdGVtIH0gZnJvbSBcIi4vZmlsZXN5c3RlbS1kZXBlbmRlbmNpZXNcIjtcblxuLy8gd2ViLy5zb25hbXUuZW52IOyXkCDtmITsnqwg7ISk7KCV6rCSIOyggOyepVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNDb25maWcoKSB7XG4gIGNvbnN0IHsgaG9zdCwgcG9ydCB9ID0gU29uYW11LmNvbmZpZy5zZXJ2ZXIubGlzdGVuID8/IHt9O1xuICBjb25zdCBjb250ZW50ID0gYEFQSV9IT1NUPSR7aG9zdCA/PyBcImxvY2FsaG9zdFwifVxcbkFQSV9QT1JUPSR7cG9ydCA/PyAzMDAwfWA7XG5cbiAgTmFpdGUudChcImFjdGlvblN5bmNDb25maWdcIiwgeyBjb250ZW50IH0pO1xuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLi4uU29uYW11LmNvbmZpZy5zeW5jLnRhcmdldHMubWFwKCh0YXJnZXQpID0+IHtcbiAgICAgIHJldHVybiBzeW5jZXJGaWxlc3lzdGVtLndyaXRlRmlsZShcbiAgICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcIi5zb25hbXUuZW52XCIpLFxuICAgICAgICBjb250ZW50LFxuICAgICAgKTtcbiAgICB9KSxcbiAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkX3Nzb1wiLCB7fSwgeyBvdmVyd3JpdGU6IHRydWUgfSksXG4gIF0pO1xufVxuXG4vKipcbiAqIHNlcnZpY2VzLmdlbmVyYXRlZC50c+ulvCDsg53shLHtlanri4jri6QuXG4gKiBAcGFyYW0gcGFyYW1zQXJyYXlcbiAqIEByZXR1cm5zIOyDneyEseuQnCDtjIzsnbwg6rK966GcIOuwsOyXtC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlU2VydmljZXMoXG4gIHBhcmFtc0FycmF5OiB7XG4gICAgbmFtZXNSZWNvcmQ6IEVudGl0eU5hbWVzUmVjb3JkO1xuICB9W10sXG4pOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIE5haXRlLnQoXCJhY3Rpb25HZW5lcmF0ZVNlcnZpY2VzXCIsIHBhcmFtc0FycmF5KTtcblxuICAvLyBzZXJ2aWNlcy5nZW5lcmF0ZWQudHMg7Ya17ZWpIO2MjOydvCDsg53shLFcbiAgY29uc3Qgc2VydmljZXNGaWxlID0gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcbiAgICBcInNlcnZpY2VzXCIsXG4gICAge30sXG4gICAge1xuICAgICAgb3ZlcndyaXRlOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgcmV0dXJuIFsuLi5zZXJ2aWNlc0ZpbGVdO1xufVxuXG4vKipcbiAqIEVudGl0eeyXkCDrlLjrprAg7LSI6riwIHR5cGVzLnRz66W8IOunjOuTpOyWtOykjeuLiOuLpC5cbiAqIEBwYXJhbSBlbnRpdHlJZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVJbml0aWFsVHlwZXMoZW50aXR5SWQ6IHN0cmluZyk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIGdlbmVyYXRlVGVtcGxhdGUoXCJpbml0X3R5cGVzXCIsIHsgZW50aXR5SWQgfSk7XG59XG5cbi8qKlxuICogc29uYW11LmdlbmVyYXRlZC50c+yZgCBzb25hbXUuZ2VuZXJhdGVkLnNzby50c+ulvCDsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNjaGVtYXMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGdlbmVyYXRlVGVtcGxhdGUoXCJnZW5lcmF0ZWRfc3NvXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KSxcbiAgICAgIGdlbmVyYXRlVGVtcGxhdGUoXCJnZW5lcmF0ZWRcIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pLFxuICAgIF0pXG4gICkuZmxhdCgpO1xufVxuXG4vKipcbiAqIHNvbmFtdS5nZW5lcmF0ZWQuaHR0cOulvCDsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSHR0cHMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGg+IHtcbiAgY29uc3QgW3Jlc10gPSBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFxuICAgIFwiZ2VuZXJhdGVkX2h0dHBcIixcbiAgICB7IGVudGl0eUlkOiBcImR1bW15XCIgfSxcbiAgICB7IG92ZXJ3cml0ZTogdHJ1ZSB9LFxuICApO1xuICBhc3NlcnQocmVzKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLyoqXG4gKiDstZzsooUgUkVTVCBjYXN0ZXLrpbwg64u064qUIEFQSSDsoITsmqkgdmFsaWRhdG9yIHJlZ2lzdHJ566W8IOyerOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSHR0cFZhbGlkYXRvcnMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGg+IHtcbiAgY29uc3QgcmVnaXN0cnlQYXRoID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhdGguam9pbihcbiAgICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICAgIFwic3JjL2FwcGxpY2F0aW9uL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZC50c1wiLFxuICAgICkgYXMgQWJzb2x1dGVQYXRoO1xuICBjb25zdCBwb2xpY3kgPSBTb25hbXUuY29uZmlnLnZhbGlkYXRpb24/LnpvZENvbXBpbGVyO1xuICBjb25zdCBpc0FvdCA9IGlzT2JqZWN0VmFsdWUocG9saWN5KSAmJiBwb2xpY3kgIT09IG51bGwgJiYgcG9saWN5LmFwaSA9PT0gXCJhb3RcIjtcbiAgaWYgKCFpc0FvdCkge1xuICAgIC8vIG9wdC1vdXQvSklUIOyghO2ZmCDrkqQgQU9UIGNvbXBpbGUgaW1wb3J06rCAIOyVoO2UjOumrOy8gOydtOyFmOyXkCDrgqjsp4Ag7JWK64+E66GdIOyCsOy2nOusvOuPhCDtlajqu5gg7KCV66as7ZWp64uI64ukLlxuICAgIGlmIChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKHJlZ2lzdHJ5UGF0aCkpIHtcbiAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0udW5saW5rKHJlZ2lzdHJ5UGF0aCk7XG4gICAgfVxuICAgIHJldHVybiByZWdpc3RyeVBhdGg7XG4gIH1cblxuICBjb25zdCBbZ2VuZXJhdGVkUGF0aF0gPSBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFwiaHR0cF92YWxpZGF0b3JzXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgYXNzZXJ0KGdlbmVyYXRlZFBhdGgpO1xuICByZXR1cm4gZ2VuZXJhdGVkUGF0aDtcbn1cblxuLyoqXG4gKiBxdWVyaWVzLmdlbmVyYXRlZC50cyDsnqzsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNzclF1ZXJpZXMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICByZXR1cm4gZ2VuZXJhdGVUZW1wbGF0ZShcInF1ZXJpZXNcIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIGVudHJ5LXNlcnZlci5nZW5lcmF0ZWQudHN466W8IOyDneyEse2VqeuLiOuLpC5cbiAqIOuLpOuluCDslaHshZjrk6Tqs7wg64us66asLCDsnbTrr7gg7YyM7J287J20IOyeiOycvOuptCDqt7jrg6Ug64aU65Gh64uI64ukLiDqt7jrnpjshJwg7ZWo7IiYIOydtOumhCDrgZ3sl5Ag7I2o64ao7Ja07JqUIOOFjlxuICog7J6F66ClIOydmOyhtCDsl4bripQg7KCV7KCBIOy9lOuTnOudvCDrp6Trsoggb3ZlcndyaXRl64qUIG10aW1l66eMIOqwseyLoO2VmOuKlCDsnZjrr7gg7JeG64qUIOuPmeyekS5cbiAqIO2FnO2UjOumvyDsnpDssrTqsIAg67OA6rK965CcIOqyveyasChTb25hbXUg7JeF6re466CI7J2065OcKeyXkOuKlCDsgqzsmqnsnpDqsIAg7YyM7J287J2EIOyCreygnO2VnCDrkqQgc3luY+uhnCDsnqzsg53shLEuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QgKOydtOuvuCDsnojsnLzrqbQg67mIIOuwsOyXtCkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNzckVudHJ5U2VydmVySWZOb3RFeGlzdHMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFwiZW50cnlfc2VydmVyXCIsIHt9LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBnZW5lcmF0ZVRlbXBsYXRl7J2AIG92ZXJ3cml0ZTogZmFsc2Xsl5DshJwg7YyM7J287J20IOydtOuvuCDsnojsnLzrqbQg7JiI7Jm466W8IOuNmOynkeuLiOuLpC5cbiAgICAvLyBJZk5vdEV4aXN0cyDsnZjrr7jsg4EgXCLqt7jrg6Ug64aU65GU64ukXCLqsIAg7KCV7IOB7J2066+A66GcIOu5iCDrsLDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICAgIGlmIChlIGluc3RhbmNlb2YgQWxyZWFkeVByb2Nlc3NlZEV4Y2VwdGlvbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbi8qKlxuICog7KO87Ja07KeEIC50cyDtjIzsnbzrk6QoYXBp7JeQIOyeiOuLpOqzoCDqsIDsoJUp7J2EIOuqqOuToCDtg4Dqsp8g65SU66CJ7Yag66as7J2YIHNlcnZpY2Vz7JeQIOqwluuLpCDrkaHri4jri6QuXG4gKiDsnbTrlYwg64K067aA7J2YIHNvbmFtdSBpbXBvcnTripQgc29uYW11LnNoYXJlZC50cyBpbXBvcnTroZwg7LmY7ZmY65CY6rOgLFxuICog6rK966Gc7J2YIC9hcHBsaWNhdGlvbi/snYAgL3NlcnZpY2VzL+uhnCDsuZjtmZjrkKnri4jri6QuXG4gKlxuICogQHBhcmFtIHRzUGF0aHMg67O17IKs7ZWgIO2MjOydvOuTpOydmCDsoIjrjIAg6rK966GcXG4gKiBAcmV0dXJucyDqsIEg7YOA6rKf7JeQIOuzteyCrOuQnCDtjIzsnbzrk6TsnZgg7KCI64yAIOqyveuhnCDrsLDsl7QgKGZsYXQpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY0ZpbGVzVG9UYXJnZXRzKHRzUGF0aHM6IEFic29sdXRlUGF0aFtdKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgeyBkaXI6IGFwaURpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG5cbiAgcmV0dXJuIChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRhcmdldHMubWFwKGFzeW5jICh0YXJnZXQpID0+XG4gICAgICAgIFByb21pc2UuYWxsKFxuICAgICAgICAgIHRzUGF0aHMubWFwKGFzeW5jIChyZWFsU3JjKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkc3QgPSByZWFsU3JjXG4gICAgICAgICAgICAgIC5yZXBsYWNlKGAvJHthcGlEaXJ9L2AsIGAvJHt0YXJnZXR9L2ApXG4gICAgICAgICAgICAgIC5yZXBsYWNlKFwiL2FwcGxpY2F0aW9uL1wiLCBcIi9zZXJ2aWNlcy9cIik7XG4gICAgICAgICAgICBjb25zdCBkaXIgPSBkaXJuYW1lKGRzdCk7XG4gICAgICAgICAgICBpZiAoIShhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRpcikpKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN5bmNIZWFkZXIgPSBbXG4gICAgICAgICAgICAgIFwiLyoqXCIsXG4gICAgICAgICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICAgICAgICBcIiAqIEFQSeyXkOyEnCDrj5nquLDtmZTrkJwg7YyM7J287J6F64uI64ukLiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgICAgICAgXCIgKi9cIixcbiAgICAgICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICAgICAgICAgIGF3YWl0IGNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQocmVhbFNyYywgZHN0LCBzeW5jSGVhZGVyKTtcbiAgICAgICAgICAgIGF3YWl0IHRyYWNrV3JpdHRlbihcbiAgICAgICAgICAgICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBkc3QgYXMgQWJzb2x1dGVQYXRoLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICFpc1Rlc3QoKSAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBjaGFsay5ib2xkKFwiQ29waWVkOiBcIikgKyBjaGFsay5ibHVlKGRzdC5yZXBsYWNlKGAke1NvbmFtdS5hcHBSb290UGF0aH0vYCwgXCJcIikpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGRzdDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKVxuICApLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBzaGFyZWQg7YWc7ZSM66a/7Jy866Gc67aA7YSwIHNvbmFtdS5zaGFyZWQudHMg7YyM7J287J2EIOunjOuTpOyWtOyEnCDrqqjrk6Ag7YOA6rKfIOuUlOugie2GoOumrOyXkCDqsJbri6Qg65Gh64uI64ukLlxuICog7YyM7J287J2EIOunjOuTnOuKlCDqs7zsoJXsl5DshJwg7Jes65+sIOy5mO2ZmCDqsIDqs7XsnbQg7J287Ja064Kp64uI64ukLlxuICpcbiAqIOuLpOuluCDslaHshZjrk6Tqs7wg64us66asLCDsnbTrr7gg7YyM7J287J20IOyeiOycvOuptCDqt7jrg6Ug64aU65Gh64uI64ukLiDqt7jrnpjshJwg7ZWo7IiYIOydtOumhCDrgZ3sl5Ag7I2o64ao7Ja07JqUIOOFjlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uQ29weVNoYXJlZFRvVGFyZ2V0c0lmTm90RXhpc3RzKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcblxuICAvLyBwbHVyYWwudHMg64K07Jqp7J2EIOydveyWtOyEnCBzaGFyZWQg7YyM7J287JeQIOyCveyehe2VqeuLiOuLpC5cbiAgY29uc3QgZGljdFV0aWxzUGF0aCA9IHBhdGguam9pbihcbiAgICBpbXBvcnQubWV0YS5kaXJuYW1lLnJlcGxhY2UoXCIvZGlzdC9cIiwgXCIvc3JjL1wiKSxcbiAgICBcIi4uL2RpY3QvdXRpbHMudHNcIixcbiAgKTtcbiAgY29uc3QgZGljdFV0aWxzQ29kZSA9IChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRpY3RVdGlsc1BhdGgpKVxuICAgID8gYXdhaXQgc3luY2VyRmlsZXN5c3RlbS5yZWFkRmlsZShkaWN0VXRpbHNQYXRoLCBcInV0Zi04XCIpXG4gICAgOiBcIlwiO1xuXG4gIC8vIO2KueyglSDrs4DsiJgg7LmY7ZmY7J2EIOychO2VtOyEnCDsgqzsmqntlanri4jri6QuXG4gIGNvbnN0IGNvbnZlcnRNYXAgPSB7XG4gICAgYmFzZVVybDpcbiAgICAgIFNvbmFtdS5jb25maWcuc2VydmVyLmJhc2VVcmwgPz9cbiAgICAgIGBodHRwOi8vJHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIn06JHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/LnBvcnQgPz8gMzAwMH1gLFxuICAgIGRpY3RVdGlsczogZGljdFV0aWxzQ29kZSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgLy8g7KeA6riIIOqwgOyguOqwgOugpOuKlCDsnbQg7YyM7J287J2AIFNvbmFtdSDsvZTrk5zrsqDsnbTsiqTsnZgg7J2867aA7J6F64uI64ukLlxuICAgIC8vIOq3uOufsOuNsCBkaXN0IOyGjSDruYzrk5zrkJwg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnbQg7ZWE7JqU7ZWcIOqyg+ydtCDslYTri4jqs6AsIHNyY+yXkOunjCDsnojripQg7YWN7Iqk7Yq4IO2MjOydvOydtCDtlYTsmpTtlanri4jri6QuXG4gICAgLy8g65Sw65287IScIC9zcmMv7JeQ7IScIOywvuyKteuLiOuLpC5cbiAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKFxuICAgICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgICBgLi4vc2hhcmVkLyR7dGFyZ2V0fS5zaGFyZWQudHMudHh0YCxcbiAgICApO1xuICAgIGlmICghKGF3YWl0IHN5bmNlckZpbGVFeGlzdHMoc3JjUGF0aCkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQpKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyaWVkIHRvIGNvcHkgc29uYW11LnNoYXJlZC50cyB0byB0YXJnZXQgJyR7dGFyZ2V0fScgYnV0IHRoZSB0YXJnZXQgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBQbGVhc2UgY2hlY2sgeW91ciBwcm9qZWN0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFRleHQgPSBhd2FpdCBzeW5jZXJGaWxlc3lzdGVtLnJlYWRGaWxlKHNyY1BhdGgsIFwidXRmLThcIik7XG4gICAgY29uc3QgY29udmVydGVkVGV4dCA9IE9iamVjdC5lbnRyaWVzKGNvbnZlcnRNYXApLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4gYWNjLnJlcGxhY2UoYCRbWyR7a2V5fV1dYCwgdmFsdWUpLFxuICAgICAgZnVsbFRleHQsXG4gICAgKTtcblxuICAgIC8vIOydtOqxtCDtlITroZzsoJ3tirjsl5AgLnRzIOyGjOyKpCDsvZTrk5wg7YyM7J287J2EIOyDneyEse2VmOuKlCDqsoPsnbTrr4DroZwgc3Jj7J2YIC50cyDqsr3roZzroZwg6rCR64uI64ukLlxuICAgIGNvbnN0IGRlc3RQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9zZXJ2aWNlcy9zb25hbXUuc2hhcmVkLnRzXCIpO1xuXG4gICAgLy8g7KCV66eQIO2YueyLnOuCmOyngOunjCB0YXJnZXQg65SU66CJ7Yag66as64qUIOyeiOyWtOuPhCBzcmMvc2VydmljZXMg65SU66CJ7Yag66as64qUIOyXhuydhCDsiJgg7J6I7Jy866+A66GcIOuvuOumrCDsg53shLHtlbTspI3ri4jri6QuXG4gICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhwYXRoLmRpcm5hbWUoZGVzdFBhdGgpKSkpIHtcbiAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIocGF0aC5kaXJuYW1lKGRlc3RQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBjb25zb2xlLndhcm4oYENyZWF0ZWQgZGlyZWN0b3J5ICcke3BhdGguZGlybmFtZShkZXN0UGF0aCl9JyBiZWNhdXNlIGl0IGRpZCBub3QgZXhpc3QuYCk7XG4gICAgfVxuXG4gICAgLy8g7YyM7J287J20IOydtOuvuCDsobTsnqztlZjrqbQg6rG064SI65yB64uI64ukLlxuICAgIC8vIHNvbmFtdS5zaGFyZWQudHPripQg7ZSE66Gc7KCd7Yq47JeQ7IScIOyekOycoOuhreqyjCDsu6TsiqTthLDrp4jsnbTsp5XtlaAg7IiYIOyeiOyWtOyVvCDtlZjrr4DroZwsXG4gICAgLy8g7LWc7LSIIDHtmozrp4wg7IOd7ISx7ZWY6rOgIOydtO2bhOyXkOuKlCDrja7slrTsk7Dsp4Ag7JWK7Iq164uI64ukLlxuICAgIC8vIO2FnO2UjOumvyDrgrTsmqkoJFtbZGljdFV0aWxzXV0g65OxKeydtCDrs4Dqsr3rkJjsl4jsnYQg65WMIOuwmOyYgeydtCDtlYTsmpTtlZjrqbQsXG4gICAgLy8g7ZW064u5IO2MjOydvOydhCDsgq3soJztlZwg65KkIGBwbnBtIHNvbmFtdSBzeW5jYOuhnCDsnqzsg53shLHtlZjrqbQg65Cp64uI64ukLlxuICAgIGlmIChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRlc3RQYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgYXdhaXQgc3luY2VyRmlsZXN5c3RlbS53cml0ZUZpbGUoZGVzdFBhdGgsIGF3YWl0IGZvcm1hdENvZGUoY29udmVydGVkVGV4dCwgZGVzdFBhdGgpKTtcbiAgICAhaXNUZXN0KCkgJiZcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJDb3BpZWQ6IFwiKSArIGNoYWxrLmJsdWUocGF0aC5yZWxhdGl2ZShTb25hbXUuYXBwUm9vdFBhdGgsIGRlc3RQYXRoKSkpO1xuICB9XG59XG5cbi8qKlxuICogU29uYW11IERpY3Rpb25hcnkoU0Qp66W8IOuqqOuToCDtg4Dqsp8oYXBpICsgd2ViL2FwcCDrk7Ep7JeQIOuPmeq4sO2ZlO2VqeuLiOuLpC5cbiAqXG4gKiDqsIEg7YOA6rKf7JeQIOuMgO2VtDpcbiAqIC0gdGFyZ2V07J20IGFwaeqwgCDslYTri4jrqbQg7IKs7Jqp7J6QIOyekeyEsSBsb2NhbGUg7YyM7J28KGtvLnRzL2VuLnRzLy4uLinsnYQgYXBpIOKGkiB0YXJnZXTsnLzroZwg67O17IKsXG4gKiAtIHNkIO2FnO2UjOumv+ydhCDroIzrjZTrp4HtlbTshJwgc2QuZ2VuZXJhdGVkLnRzIOyDneyEsSAob3ZlcndyaXRlKVxuICpcbiAqIO2VnCDtg4Dqsp/sl5DshJwg7Iuk7Yyo7ZW064+EIOuLpOuluCDtg4Dqsp/snYAg6rOE7IaNIOynhO2Wie2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNTb25hbXVEaWN0aW9uYXJ5KCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgaTE4bkNvbmZpZyA9IFNvbmFtdS5jb25maWcuaTE4bjtcblxuICBjb25zdCB0YXJnZXRMaXN0ID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtcbiAgICAgIFwiYXBpXCIsXG4gICAgICAuLi50YXJnZXRzLFxuICAgIF0gYXMgKFwiYXBpXCIgfCBcIndlYlwiIHwgXCJhcHBcIilbXTtcblxuICBjb25zdCBhcGlJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgU29uYW11LmNvbmZpZy5hcGkuZGlyLCBcInNyYy9pMThuXCIpO1xuXG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldExpc3QpIHtcbiAgICB0cnkge1xuICAgICAgLy8gd2ViL2FwcOydmCDqsr3smrAgbG9jYWxlIO2MjOydvOuTpOydhCBhcGnsl5DshJwg67O17IKsXG4gICAgICBpZiAodGFyZ2V0ICE9PSBcImFwaVwiKSB7XG4gICAgICAgIGF3YWl0IHN5bmNMb2NhbGVGaWxlcyh0YXJnZXQsIGFwaUkxOG5EaXIsIGkxOG5Db25maWcuc3VwcG9ydGVkTG9jYWxlcyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJzZFwiLCB7IHRhcmdldCB9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZ2VuZXJhdGUgU0QgdGVtcGxhdGUgZm9yICR7dGFyZ2V0fTpgLCBlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBhcGnsnZggbG9jYWxlIO2MjOydvOydhCB3ZWIvYXBw7Jy866GcIOuzteyCrO2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3luY0xvY2FsZUZpbGVzKFxuICB0YXJnZXQ6IHN0cmluZyxcbiAgYXBpSTE4bkRpcjogc3RyaW5nLFxuICBsb2NhbGVzOiBzdHJpbmdbXSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0YXJnZXRJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9pMThuXCIpO1xuXG4gIC8vIOuUlOugie2GoOumrOqwgCDsl4bsnLzrqbQg7IOd7ISxXG4gIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIodGFyZ2V0STE4bkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBwYXRoLmpvaW4oYXBpSTE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuICAgIGNvbnN0IHRhcmdldEZpbGUgPSBwYXRoLmpvaW4odGFyZ2V0STE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuXG4gICAgY29uc3Qgc3luY0hlYWRlciA9IFtcbiAgICAgIFwiLyoqXCIsXG4gICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgIFwiICogQVBJ7JeQ7IScIOuPmeq4sO2ZlOuQnCDtjIzsnbzsnoXri4jri6QuIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlwiLFxuICAgICAgXCIgKi9cIixcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgYXdhaXQgY29weUZpbGVXaXRoUmVwbGFjZUNvcmVUb1NoYXJlZChzb3VyY2VGaWxlLCB0YXJnZXRGaWxlLCBzeW5jSGVhZGVyKTtcbiAgICBhd2FpdCB0cmFja1dyaXR0ZW4oXG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHRhcmdldEZpbGUgYXMgQWJzb2x1dGVQYXRoLFxuICAgICk7XG4gICAgIWlzVGVzdCgpICYmXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKFwiQ29waWVkOiBcIikgKyBjaGFsay5jeWFuKGAke3RhcmdldH0vc3JjL2kxOG4vJHtsb2NhbGV9LnRzYCkpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxlQUFzQixtQkFBbUI7Q0FDdkMsTUFBTSxFQUFFLE1BQU0sU0FBUyxPQUFPLE9BQU8sT0FBTyxVQUFVLENBQUM7Q0FDdkQsTUFBTSxVQUFVLFlBQVksUUFBUSxZQUFZLGFBQWEsUUFBUTtDQUVyRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxDQUFDO0NBQ3ZDLE1BQU0sUUFBUSxJQUFJLENBQ2hCLEdBQUcsT0FBTyxPQUFPLEtBQUssUUFBUSxLQUFLLFdBQVc7RUFDNUMsT0FBTyxpQkFBaUIsVUFDdEIsS0FBSyxLQUFLLE9BQU8sYUFBYSxRQUFRLGFBQWEsR0FDbkQsT0FDRjtDQUNGLENBQUMsR0FDRCxpQkFBaUIsaUJBQWlCLENBQUMsR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDLENBQzNELENBQUM7QUFDSDs7Ozs7O0FBT0EsZUFBc0IsdUJBQ3BCLGFBR3lCO0NBQ3pCLE1BQU0sRUFBRSwwQkFBMEIsV0FBVztDQVc3QyxPQUFPLENBQUMsR0FBRyxNQVJnQixpQkFDekIsWUFDQSxDQUFDLEdBQ0QsRUFDRSxXQUFXLEtBQ2IsQ0FDRixDQUV1QjtBQUN6Qjs7Ozs7QUFNQSxlQUFzQiwyQkFBMkIsVUFBMkM7Q0FDMUYsT0FBTyxpQkFBaUIsY0FBYyxFQUFFLFNBQVMsQ0FBQztBQUNwRDs7Ozs7QUFN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
204
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLWFjdGlvbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9zeW5jZXItYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCBwYXRoLCB7IGRpcm5hbWUgfSBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBmb3JtYXRDb2RlIH0gZnJvbSBcIi4uL2NvZGUtZm9ybWF0dGluZ1wiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24gfSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGlzT2JqZWN0VmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVUZW1wbGF0ZSB9IGZyb20gXCIuL2NvZGUtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkIH0gZnJvbSBcIi4vZmlsZS1jb3B5XCI7XG5pbXBvcnQgeyB0cmFja1dyaXR0ZW4gfSBmcm9tIFwiLi9maWxlLXRyYWNraW5nXCI7XG5pbXBvcnQgeyBzeW5jZXJGaWxlRXhpc3RzLCBzeW5jZXJGaWxlc3lzdGVtIH0gZnJvbSBcIi4vZmlsZXN5c3RlbS1kZXBlbmRlbmNpZXNcIjtcblxuLy8gd2ViLy5zb25hbXUuZW52IOyXkCDtmITsnqwg7ISk7KCV6rCSIOyggOyepVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNDb25maWcoKSB7XG4gIGNvbnN0IHsgaG9zdCwgcG9ydCB9ID0gU29uYW11LmNvbmZpZy5zZXJ2ZXIubGlzdGVuID8/IHt9O1xuICBjb25zdCBjb250ZW50ID0gYEFQSV9IT1NUPSR7aG9zdCA/PyBcImxvY2FsaG9zdFwifVxcbkFQSV9QT1JUPSR7cG9ydCA/PyAzMDAwfWA7XG5cbiAgTmFpdGUudChcImFjdGlvblN5bmNDb25maWdcIiwgeyBjb250ZW50IH0pO1xuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLi4uU29uYW11LmNvbmZpZy5zeW5jLnRhcmdldHMubWFwKCh0YXJnZXQpID0+IHtcbiAgICAgIHJldHVybiBzeW5jZXJGaWxlc3lzdGVtLndyaXRlRmlsZShcbiAgICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcIi5zb25hbXUuZW52XCIpLFxuICAgICAgICBjb250ZW50LFxuICAgICAgKTtcbiAgICB9KSxcbiAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkX3Nzb1wiLCB7fSwgeyBvdmVyd3JpdGU6IHRydWUgfSksXG4gIF0pO1xufVxuXG4vKipcbiAqIHNlcnZpY2VzLmdlbmVyYXRlZC50c+ulvCDsg53shLHtlanri4jri6QuXG4gKiBAcGFyYW0gcGFyYW1zQXJyYXlcbiAqIEByZXR1cm5zIOyDneyEseuQnCDtjIzsnbwg6rK966GcIOuwsOyXtC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlU2VydmljZXMoXG4gIHBhcmFtc0FycmF5OiB7XG4gICAgbmFtZXNSZWNvcmQ6IEVudGl0eU5hbWVzUmVjb3JkO1xuICB9W10sXG4pOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIE5haXRlLnQoXCJhY3Rpb25HZW5lcmF0ZVNlcnZpY2VzXCIsIHBhcmFtc0FycmF5KTtcblxuICAvLyBzZXJ2aWNlcy5nZW5lcmF0ZWQudHMg7Ya17ZWpIO2MjOydvCDsg53shLFcbiAgY29uc3Qgc2VydmljZXNGaWxlID0gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcbiAgICBcInNlcnZpY2VzXCIsXG4gICAge30sXG4gICAge1xuICAgICAgb3ZlcndyaXRlOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgcmV0dXJuIFsuLi5zZXJ2aWNlc0ZpbGVdO1xufVxuXG4vKipcbiAqIEVudGl0eeyXkCDrlLjrprAg7LSI6riwIHR5cGVzLnRz66W8IOunjOuTpOyWtOykjeuLiOuLpC5cbiAqIEBwYXJhbSBlbnRpdHlJZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVJbml0aWFsVHlwZXMoZW50aXR5SWQ6IHN0cmluZyk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIGdlbmVyYXRlVGVtcGxhdGUoXCJpbml0X3R5cGVzXCIsIHsgZW50aXR5SWQgfSk7XG59XG5cbi8qKlxuICogc29uYW11LmdlbmVyYXRlZC50c+yZgCBzb25hbXUuZ2VuZXJhdGVkLnNzby50c+ulvCDsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNjaGVtYXMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGdlbmVyYXRlVGVtcGxhdGUoXCJnZW5lcmF0ZWRfc3NvXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KSxcbiAgICAgIGdlbmVyYXRlVGVtcGxhdGUoXCJnZW5lcmF0ZWRcIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pLFxuICAgIF0pXG4gICkuZmxhdCgpO1xufVxuXG4vKipcbiAqIHNvbmFtdS5nZW5lcmF0ZWQuaHR0cOulvCDsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSHR0cHMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGg+IHtcbiAgY29uc3QgW3Jlc10gPSBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFxuICAgIFwiZ2VuZXJhdGVkX2h0dHBcIixcbiAgICB7IGVudGl0eUlkOiBcImR1bW15XCIgfSxcbiAgICB7IG92ZXJ3cml0ZTogdHJ1ZSB9LFxuICApO1xuICBhc3NlcnQocmVzKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLyoqXG4gKiDstZzsooUgUkVTVCBjYXN0ZXLrpbwg64u064qUIEFQSSDsoITsmqkgdmFsaWRhdG9yIHJlZ2lzdHJ566W8IOyerOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSHR0cFZhbGlkYXRvcnMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGg+IHtcbiAgY29uc3QgcmVnaXN0cnlQYXRoID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhdGguam9pbihcbiAgICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICAgIFwic3JjL2FwcGxpY2F0aW9uL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZC50c1wiLFxuICAgICkgYXMgQWJzb2x1dGVQYXRoO1xuICBjb25zdCBwb2xpY3kgPSBTb25hbXUuY29uZmlnLnZhbGlkYXRpb24/LnpvZENvbXBpbGVyO1xuICBjb25zdCBpc0FvdCA9IGlzT2JqZWN0VmFsdWUocG9saWN5KSAmJiBwb2xpY3kgIT09IG51bGwgJiYgcG9saWN5LmFwaSA9PT0gXCJhb3RcIjtcbiAgaWYgKCFpc0FvdCkge1xuICAgIC8vIG9wdC1vdXQvSklUIOyghO2ZmCDrkqQgQU9UIGNvbXBpbGUgaW1wb3J06rCAIOyVoO2UjOumrOy8gOydtOyFmOyXkCDrgqjsp4Ag7JWK64+E66GdIOyCsOy2nOusvOuPhCDtlajqu5gg7KCV66as7ZWp64uI64ukLlxuICAgIGlmIChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKHJlZ2lzdHJ5UGF0aCkpIHtcbiAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0udW5saW5rKHJlZ2lzdHJ5UGF0aCk7XG4gICAgfVxuICAgIHJldHVybiByZWdpc3RyeVBhdGg7XG4gIH1cblxuICBjb25zdCBbZ2VuZXJhdGVkUGF0aF0gPSBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFwiaHR0cF92YWxpZGF0b3JzXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgYXNzZXJ0KGdlbmVyYXRlZFBhdGgpO1xuICByZXR1cm4gZ2VuZXJhdGVkUGF0aDtcbn1cblxuLyoqXG4gKiBxdWVyaWVzLmdlbmVyYXRlZC50cyDsnqzsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNzclF1ZXJpZXMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICByZXR1cm4gZ2VuZXJhdGVUZW1wbGF0ZShcInF1ZXJpZXNcIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIGVudHJ5LXNlcnZlci5nZW5lcmF0ZWQudHN466W8IOyDneyEse2VqeuLiOuLpC5cbiAqIOuLpOuluCDslaHshZjrk6Tqs7wg64us66asLCDsnbTrr7gg7YyM7J287J20IOyeiOycvOuptCDqt7jrg6Ug64aU65Gh64uI64ukLiDqt7jrnpjshJwg7ZWo7IiYIOydtOumhCDrgZ3sl5Ag7I2o64ao7Ja07JqUIOOFjlxuICog7J6F66ClIOydmOyhtCDsl4bripQg7KCV7KCBIOy9lOuTnOudvCDrp6Trsoggb3ZlcndyaXRl64qUIG10aW1l66eMIOqwseyLoO2VmOuKlCDsnZjrr7gg7JeG64qUIOuPmeyekS5cbiAqIO2FnO2UjOumvyDsnpDssrTqsIAg67OA6rK965CcIOqyveyasChTb25hbXUg7JeF6re466CI7J2065OcKeyXkOuKlCDsgqzsmqnsnpDqsIAg7YyM7J287J2EIOyCreygnO2VnCDrkqQgc3luY+uhnCDsnqzsg53shLEuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QgKOydtOuvuCDsnojsnLzrqbQg67mIIOuwsOyXtCkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNzckVudHJ5U2VydmVySWZOb3RFeGlzdHMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFwiZW50cnlfc2VydmVyXCIsIHt9LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBnZW5lcmF0ZVRlbXBsYXRl7J2AIG92ZXJ3cml0ZTogZmFsc2Xsl5DshJwg7YyM7J287J20IOydtOuvuCDsnojsnLzrqbQg7JiI7Jm466W8IOuNmOynkeuLiOuLpC5cbiAgICAvLyBJZk5vdEV4aXN0cyDsnZjrr7jsg4EgXCLqt7jrg6Ug64aU65GU64ukXCLqsIAg7KCV7IOB7J2066+A66GcIOu5iCDrsLDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICAgIGlmIChlIGluc3RhbmNlb2YgQWxyZWFkeVByb2Nlc3NlZEV4Y2VwdGlvbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbi8qKlxuICog7KO87Ja07KeEIC50cyDtjIzsnbzrk6QoYXBp7JeQIOyeiOuLpOqzoCDqsIDsoJUp7J2EIOuqqOuToCDtg4Dqsp8g65SU66CJ7Yag66as7J2YIHNlcnZpY2Vz7JeQIOqwluuLpCDrkaHri4jri6QuXG4gKiDsnbTrlYwg64K067aA7J2YIHNvbmFtdSBpbXBvcnTripQgc29uYW11LnNoYXJlZC50cyBpbXBvcnTroZwg7LmY7ZmY65CY6rOgLFxuICog6rK966Gc7J2YIC9hcHBsaWNhdGlvbi/snYAgL3NlcnZpY2VzL+uhnCDsuZjtmZjrkKnri4jri6QuXG4gKlxuICogQHBhcmFtIHRzUGF0aHMg67O17IKs7ZWgIO2MjOydvOuTpOydmCDsoIjrjIAg6rK966GcXG4gKiBAcmV0dXJucyDqsIEg7YOA6rKf7JeQIOuzteyCrOuQnCDtjIzsnbzrk6TsnZgg7KCI64yAIOqyveuhnCDrsLDsl7QgKGZsYXQpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY0ZpbGVzVG9UYXJnZXRzKHRzUGF0aHM6IEFic29sdXRlUGF0aFtdKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgeyBkaXI6IGFwaURpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG5cbiAgcmV0dXJuIChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRhcmdldHMubWFwKGFzeW5jICh0YXJnZXQpID0+XG4gICAgICAgIFByb21pc2UuYWxsKFxuICAgICAgICAgIHRzUGF0aHMubWFwKGFzeW5jIChyZWFsU3JjKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkc3QgPSByZWFsU3JjXG4gICAgICAgICAgICAgIC5yZXBsYWNlKGAvJHthcGlEaXJ9L2AsIGAvJHt0YXJnZXR9L2ApXG4gICAgICAgICAgICAgIC5yZXBsYWNlKFwiL2FwcGxpY2F0aW9uL1wiLCBcIi9zZXJ2aWNlcy9cIik7XG4gICAgICAgICAgICBjb25zdCBkaXIgPSBkaXJuYW1lKGRzdCk7XG4gICAgICAgICAgICBpZiAoIShhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRpcikpKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN5bmNIZWFkZXIgPSBbXG4gICAgICAgICAgICAgIFwiLyoqXCIsXG4gICAgICAgICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICAgICAgICBcIiAqIEFQSeyXkOyEnCDrj5nquLDtmZTrkJwg7YyM7J287J6F64uI64ukLiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgICAgICAgXCIgKi9cIixcbiAgICAgICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICAgICAgICAgIGF3YWl0IGNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQocmVhbFNyYywgZHN0LCBzeW5jSGVhZGVyKTtcbiAgICAgICAgICAgIGF3YWl0IHRyYWNrV3JpdHRlbihcbiAgICAgICAgICAgICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBkc3QgYXMgQWJzb2x1dGVQYXRoLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICFpc1Rlc3QoKSAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBjaGFsay5ib2xkKFwiQ29waWVkOiBcIikgKyBjaGFsay5ibHVlKGRzdC5yZXBsYWNlKGAke1NvbmFtdS5hcHBSb290UGF0aH0vYCwgXCJcIikpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGRzdDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKVxuICApLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBzaGFyZWQg7YWc7ZSM66a/7Jy866Gc67aA7YSwIHNvbmFtdS5zaGFyZWQudHMg7YyM7J287J2EIOunjOuTpOyWtOyEnCDrqqjrk6Ag7YOA6rKfIOuUlOugie2GoOumrOyXkCDqsJbri6Qg65Gh64uI64ukLlxuICog7YyM7J287J2EIOunjOuTnOuKlCDqs7zsoJXsl5DshJwg7Jes65+sIOy5mO2ZmCDqsIDqs7XsnbQg7J287Ja064Kp64uI64ukLlxuICpcbiAqIOuLpOuluCDslaHshZjrk6Tqs7wg64us66asLCDsnbTrr7gg7YyM7J287J20IOyeiOycvOuptCDqt7jrg6Ug64aU65Gh64uI64ukLiDqt7jrnpjshJwg7ZWo7IiYIOydtOumhCDrgZ3sl5Ag7I2o64ao7Ja07JqUIOOFjlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uQ29weVNoYXJlZFRvVGFyZ2V0c0lmTm90RXhpc3RzKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcblxuICAvLyBwbHVyYWwudHMg64K07Jqp7J2EIOydveyWtOyEnCBzaGFyZWQg7YyM7J287JeQIOyCveyehe2VqeuLiOuLpC5cbiAgY29uc3QgZGljdFV0aWxzUGF0aCA9IHBhdGguam9pbihcbiAgICBpbXBvcnQubWV0YS5kaXJuYW1lLnJlcGxhY2UoXCIvZGlzdC9cIiwgXCIvc3JjL1wiKSxcbiAgICBcIi4uL2RpY3QvdXRpbHMudHNcIixcbiAgKTtcbiAgY29uc3QgZGljdFV0aWxzQ29kZSA9IChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRpY3RVdGlsc1BhdGgpKVxuICAgID8gYXdhaXQgc3luY2VyRmlsZXN5c3RlbS5yZWFkRmlsZShkaWN0VXRpbHNQYXRoLCBcInV0Zi04XCIpXG4gICAgOiBcIlwiO1xuXG4gIC8vIO2KueyglSDrs4DsiJgg7LmY7ZmY7J2EIOychO2VtOyEnCDsgqzsmqntlanri4jri6QuXG4gIGNvbnN0IGNvbnZlcnRNYXAgPSB7XG4gICAgYmFzZVVybDpcbiAgICAgIFNvbmFtdS5jb25maWcuc2VydmVyLmJhc2VVcmwgPz9cbiAgICAgIGBodHRwOi8vJHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIn06JHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/LnBvcnQgPz8gMzAwMH1gLFxuICAgIGRpY3RVdGlsczogZGljdFV0aWxzQ29kZSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgLy8g7KeA6riIIOqwgOyguOqwgOugpOuKlCDsnbQg7YyM7J287J2AIFNvbmFtdSDsvZTrk5zrsqDsnbTsiqTsnZgg7J2867aA7J6F64uI64ukLlxuICAgIC8vIOq3uOufsOuNsCBkaXN0IOyGjSDruYzrk5zrkJwg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnbQg7ZWE7JqU7ZWcIOqyg+ydtCDslYTri4jqs6AsIHNyY+yXkOunjCDsnojripQg7YWN7Iqk7Yq4IO2MjOydvOydtCDtlYTsmpTtlanri4jri6QuXG4gICAgLy8g65Sw65287IScIC9zcmMv7JeQ7IScIOywvuyKteuLiOuLpC5cbiAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKFxuICAgICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgICBgLi4vc2hhcmVkLyR7dGFyZ2V0fS5zaGFyZWQudHMudHh0YCxcbiAgICApO1xuICAgIGlmICghKGF3YWl0IHN5bmNlckZpbGVFeGlzdHMoc3JjUGF0aCkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQpKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyaWVkIHRvIGNvcHkgc29uYW11LnNoYXJlZC50cyB0byB0YXJnZXQgJyR7dGFyZ2V0fScgYnV0IHRoZSB0YXJnZXQgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBQbGVhc2UgY2hlY2sgeW91ciBwcm9qZWN0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFRleHQgPSBhd2FpdCBzeW5jZXJGaWxlc3lzdGVtLnJlYWRGaWxlKHNyY1BhdGgsIFwidXRmLThcIik7XG4gICAgY29uc3QgY29udmVydGVkVGV4dCA9IE9iamVjdC5lbnRyaWVzKGNvbnZlcnRNYXApLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4gYWNjLnJlcGxhY2UoYCRbWyR7a2V5fV1dYCwgdmFsdWUpLFxuICAgICAgZnVsbFRleHQsXG4gICAgKTtcblxuICAgIC8vIOydtOqxtCDtlITroZzsoJ3tirjsl5AgLnRzIOyGjOyKpCDsvZTrk5wg7YyM7J287J2EIOyDneyEse2VmOuKlCDqsoPsnbTrr4DroZwgc3Jj7J2YIC50cyDqsr3roZzroZwg6rCR64uI64ukLlxuICAgIGNvbnN0IGRlc3RQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9zZXJ2aWNlcy9zb25hbXUuc2hhcmVkLnRzXCIpO1xuXG4gICAgLy8g7KCV66eQIO2YueyLnOuCmOyngOunjCB0YXJnZXQg65SU66CJ7Yag66as64qUIOyeiOyWtOuPhCBzcmMvc2VydmljZXMg65SU66CJ7Yag66as64qUIOyXhuydhCDsiJgg7J6I7Jy866+A66GcIOuvuOumrCDsg53shLHtlbTspI3ri4jri6QuXG4gICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhwYXRoLmRpcm5hbWUoZGVzdFBhdGgpKSkpIHtcbiAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIocGF0aC5kaXJuYW1lKGRlc3RQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBjb25zb2xlLndhcm4oYENyZWF0ZWQgZGlyZWN0b3J5ICcke3BhdGguZGlybmFtZShkZXN0UGF0aCl9JyBiZWNhdXNlIGl0IGRpZCBub3QgZXhpc3QuYCk7XG4gICAgfVxuXG4gICAgLy8g7YyM7J287J20IOydtOuvuCDsobTsnqztlZjrqbQg6rG064SI65yB64uI64ukLlxuICAgIC8vIHNvbmFtdS5zaGFyZWQudHPripQg7ZSE66Gc7KCd7Yq47JeQ7IScIOyekOycoOuhreqyjCDsu6TsiqTthLDrp4jsnbTsp5XtlaAg7IiYIOyeiOyWtOyVvCDtlZjrr4DroZwsXG4gICAgLy8g7LWc7LSIIDHtmozrp4wg7IOd7ISx7ZWY6rOgIOydtO2bhOyXkOuKlCDrja7slrTsk7Dsp4Ag7JWK7Iq164uI64ukLlxuICAgIC8vIO2FnO2UjOumvyDrgrTsmqkoJFtbZGljdFV0aWxzXV0g65OxKeydtCDrs4Dqsr3rkJjsl4jsnYQg65WMIOuwmOyYgeydtCDtlYTsmpTtlZjrqbQsXG4gICAgLy8g7ZW064u5IO2MjOydvOydhCDsgq3soJztlZwg65KkIGBwbnBtIHNvbmFtdSBzeW5jYOuhnCDsnqzsg53shLHtlZjrqbQg65Cp64uI64ukLlxuICAgIGlmIChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRlc3RQYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgYXdhaXQgc3luY2VyRmlsZXN5c3RlbS53cml0ZUZpbGUoZGVzdFBhdGgsIGF3YWl0IGZvcm1hdENvZGUoY29udmVydGVkVGV4dCwgZGVzdFBhdGgpKTtcbiAgICAhaXNUZXN0KCkgJiZcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJDb3BpZWQ6IFwiKSArIGNoYWxrLmJsdWUocGF0aC5yZWxhdGl2ZShTb25hbXUuYXBwUm9vdFBhdGgsIGRlc3RQYXRoKSkpO1xuICB9XG59XG5cbi8qKlxuICogU29uYW11IERpY3Rpb25hcnkoU0Qp66W8IOuqqOuToCDtg4Dqsp8oYXBpICsgd2ViL2FwcCDrk7Ep7JeQIOuPmeq4sO2ZlO2VqeuLiOuLpC5cbiAqXG4gKiDqsIEg7YOA6rKf7JeQIOuMgO2VtDpcbiAqIC0gdGFyZ2V07J20IGFwaeqwgCDslYTri4jrqbQg7IKs7Jqp7J6QIOyekeyEsSBsb2NhbGUg7YyM7J28KGtvLnRzL2VuLnRzLy4uLinsnYQgYXBpIOKGkiB0YXJnZXTsnLzroZwg67O17IKsXG4gKiAtIHNkIO2FnO2UjOumv+ydhCDroIzrjZTrp4HtlbTshJwgc2QuZ2VuZXJhdGVkLnRzIOyDneyEsSAob3ZlcndyaXRlKVxuICpcbiAqIO2VnCDtg4Dqsp/sl5DshJwg7Iuk7Yyo7ZW064+EIOuLpOuluCDtg4Dqsp/snYAg6rOE7IaNIOynhO2Wie2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNTb25hbXVEaWN0aW9uYXJ5KCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgaTE4bkNvbmZpZyA9IFNvbmFtdS5jb25maWcuaTE4bjtcblxuICBjb25zdCB0YXJnZXRMaXN0ID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtcbiAgICAgIFwiYXBpXCIsXG4gICAgICAuLi50YXJnZXRzLFxuICAgIF0gYXMgKFwiYXBpXCIgfCBcIndlYlwiIHwgXCJhcHBcIilbXTtcblxuICBjb25zdCBhcGlJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgU29uYW11LmNvbmZpZy5hcGkuZGlyLCBcInNyYy9pMThuXCIpO1xuXG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldExpc3QpIHtcbiAgICB0cnkge1xuICAgICAgLy8gd2ViL2FwcOydmCDqsr3smrAgbG9jYWxlIO2MjOydvOuTpOydhCBhcGnsl5DshJwg67O17IKsXG4gICAgICBpZiAodGFyZ2V0ICE9PSBcImFwaVwiKSB7XG4gICAgICAgIGF3YWl0IHN5bmNMb2NhbGVGaWxlcyh0YXJnZXQsIGFwaUkxOG5EaXIsIGkxOG5Db25maWcuc3VwcG9ydGVkTG9jYWxlcyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJzZFwiLCB7IHRhcmdldCB9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZ2VuZXJhdGUgU0QgdGVtcGxhdGUgZm9yICR7dGFyZ2V0fTpgLCBlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBhcGnsnZggbG9jYWxlIO2MjOydvOydhCB3ZWIvYXBw7Jy866GcIOuzteyCrO2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3luY0xvY2FsZUZpbGVzKFxuICB0YXJnZXQ6IHN0cmluZyxcbiAgYXBpSTE4bkRpcjogc3RyaW5nLFxuICBsb2NhbGVzOiBzdHJpbmdbXSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0YXJnZXRJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9pMThuXCIpO1xuXG4gIC8vIOuUlOugie2GoOumrOqwgCDsl4bsnLzrqbQg7IOd7ISxXG4gIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIodGFyZ2V0STE4bkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBwYXRoLmpvaW4oYXBpSTE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuICAgIGNvbnN0IHRhcmdldEZpbGUgPSBwYXRoLmpvaW4odGFyZ2V0STE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuXG4gICAgY29uc3Qgc3luY0hlYWRlciA9IFtcbiAgICAgIFwiLyoqXCIsXG4gICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgIFwiICogQVBJ7JeQ7IScIOuPmeq4sO2ZlOuQnCDtjIzsnbzsnoXri4jri6QuIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlwiLFxuICAgICAgXCIgKi9cIixcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgYXdhaXQgY29weUZpbGVXaXRoUmVwbGFjZUNvcmVUb1NoYXJlZChzb3VyY2VGaWxlLCB0YXJnZXRGaWxlLCBzeW5jSGVhZGVyKTtcbiAgICBhd2FpdCB0cmFja1dyaXR0ZW4oXG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHRhcmdldEZpbGUgYXMgQWJzb2x1dGVQYXRoLFxuICAgICk7XG4gICAgIWlzVGVzdCgpICYmXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKFwiQ29waWVkOiBcIikgKyBjaGFsay5jeWFuKGAke3RhcmdldH0vc3JjL2kxOG4vJHtsb2NhbGV9LnRzYCkpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxlQUFzQixtQkFBbUI7Q0FDdkMsTUFBTSxFQUFFLE1BQU0sU0FBUyxPQUFPLE9BQU8sT0FBTyxVQUFVLENBQUM7Q0FDdkQsTUFBTSxVQUFVLFlBQVksUUFBUSxZQUFZLGFBQWEsUUFBUTtDQUVyRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxDQUFDO0NBQ3ZDLE1BQU0sUUFBUSxJQUFJLENBQ2hCLEdBQUcsT0FBTyxPQUFPLEtBQUssUUFBUSxLQUFLLFdBQVc7RUFDNUMsT0FBTyxpQkFBaUIsVUFDdEIsS0FBSyxLQUFLLE9BQU8sYUFBYSxRQUFRLGFBQWEsR0FDbkQsT0FDRjtDQUNGLENBQUMsR0FDRCxpQkFBaUIsaUJBQWlCLENBQUMsR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDLENBQzNELENBQUM7QUFDSDs7Ozs7O0FBT0EsZUFBc0IsdUJBQ3BCLGFBR3lCO0NBQ3pCLE1BQU0sRUFBRSwwQkFBMEIsV0FBVztDQVc3QyxPQUFPLENBQUMsR0FBRyxNQVJnQixpQkFDekIsWUFDQSxDQUFDLEdBQ0QsRUFDRSxXQUFXLEtBQ2IsQ0FDRixDQUV1QjtBQUN6Qjs7Ozs7QUFNQSxlQUFzQiwyQkFBMkIsVUFBMkM7Q0FDMUYsT0FBTyxpQkFBaUIsY0FBYyxFQUFFLFNBQVMsQ0FBQztBQUNwRDs7Ozs7QUFN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
@@ -2,8 +2,8 @@ import { Sonamu, init_sonamu } from "../../api/sonamu.js";
2
2
  import { EntityManager, init_entity_manager } from "../../entity/entity-manager.js";
3
3
  import { Template, init_template } from "../template.js";
4
4
  import { extractObjectDeclaration, init_helpers } from "../helpers.js";
5
- import fs from "node:fs";
6
5
  import path from "node:path";
6
+ import fs from "node:fs";
7
7
  import { fileURLToPath } from "node:url";
8
8
  //#region src/template/implementations/sd.template.ts
9
9
  init_sonamu();
@@ -1,6 +1,6 @@
1
- import { constants } from "node:fs";
2
1
  import * as defaultFs from "node:fs/promises";
3
2
  import path from "node:path";
3
+ import { constants } from "node:fs";
4
4
  //#region src/tooling/cdd-service.ts
5
5
  function invalidCddPath(relativePath, cause) {
6
6
  return Object.assign(/* @__PURE__ */ new Error(`CDD 경로가 contract 밖을 참조합니다: ${relativePath}`), {