@kb-labs/quality-entry 2.14.0

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 (74) hide show
  1. package/README.md +120 -0
  2. package/dist/cli/commands/build-order.d.ts +16 -0
  3. package/dist/cli/commands/build-order.js +113 -0
  4. package/dist/cli/commands/build-order.js.map +1 -0
  5. package/dist/cli/commands/check-builds.d.ts +10 -0
  6. package/dist/cli/commands/check-builds.js +93 -0
  7. package/dist/cli/commands/check-builds.js.map +1 -0
  8. package/dist/cli/commands/check-tests.d.ts +10 -0
  9. package/dist/cli/commands/check-tests.js +114 -0
  10. package/dist/cli/commands/check-tests.js.map +1 -0
  11. package/dist/cli/commands/check-types.d.ts +10 -0
  12. package/dist/cli/commands/check-types.js +108 -0
  13. package/dist/cli/commands/check-types.js.map +1 -0
  14. package/dist/cli/commands/cycles.d.ts +17 -0
  15. package/dist/cli/commands/cycles.js +85 -0
  16. package/dist/cli/commands/cycles.js.map +1 -0
  17. package/dist/cli/commands/dead-code.d.ts +10 -0
  18. package/dist/cli/commands/dead-code.js +217 -0
  19. package/dist/cli/commands/dead-code.js.map +1 -0
  20. package/dist/cli/commands/fix-deps.d.ts +28 -0
  21. package/dist/cli/commands/fix-deps.js +389 -0
  22. package/dist/cli/commands/fix-deps.js.map +1 -0
  23. package/dist/cli/commands/flags.d.ts +344 -0
  24. package/dist/cli/commands/flags.js +298 -0
  25. package/dist/cli/commands/flags.js.map +1 -0
  26. package/dist/cli/commands/health.d.ts +10 -0
  27. package/dist/cli/commands/health.js +210 -0
  28. package/dist/cli/commands/health.js.map +1 -0
  29. package/dist/cli/commands/index.d.ts +14 -0
  30. package/dist/cli/commands/index.js +1747 -0
  31. package/dist/cli/commands/index.js.map +1 -0
  32. package/dist/cli/commands/stats.d.ts +10 -0
  33. package/dist/cli/commands/stats.js +282 -0
  34. package/dist/cli/commands/stats.js.map +1 -0
  35. package/dist/cli/commands/visualize.d.ts +26 -0
  36. package/dist/cli/commands/visualize.js +210 -0
  37. package/dist/cli/commands/visualize.js.map +1 -0
  38. package/dist/index.d.ts +2 -0
  39. package/dist/index.js +666 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/manifest.d.ts +168 -0
  42. package/dist/manifest.js +666 -0
  43. package/dist/manifest.js.map +1 -0
  44. package/dist/rest/handlers/build-order-handler.d.ts +17 -0
  45. package/dist/rest/handlers/build-order-handler.js +28 -0
  46. package/dist/rest/handlers/build-order-handler.js.map +1 -0
  47. package/dist/rest/handlers/builds-handler.d.ts +12 -0
  48. package/dist/rest/handlers/builds-handler.js +17 -0
  49. package/dist/rest/handlers/builds-handler.js.map +1 -0
  50. package/dist/rest/handlers/cycles-handler.d.ts +13 -0
  51. package/dist/rest/handlers/cycles-handler.js +23 -0
  52. package/dist/rest/handlers/cycles-handler.js.map +1 -0
  53. package/dist/rest/handlers/dependencies-handler.d.ts +14 -0
  54. package/dist/rest/handlers/dependencies-handler.js +19 -0
  55. package/dist/rest/handlers/dependencies-handler.js.map +1 -0
  56. package/dist/rest/handlers/graph-handler.d.ts +30 -0
  57. package/dist/rest/handlers/graph-handler.js +155 -0
  58. package/dist/rest/handlers/graph-handler.js.map +1 -0
  59. package/dist/rest/handlers/health-handler.d.ts +15 -0
  60. package/dist/rest/handlers/health-handler.js +19 -0
  61. package/dist/rest/handlers/health-handler.js.map +1 -0
  62. package/dist/rest/handlers/stale-handler.d.ts +30 -0
  63. package/dist/rest/handlers/stale-handler.js +20 -0
  64. package/dist/rest/handlers/stale-handler.js.map +1 -0
  65. package/dist/rest/handlers/stats-handler.d.ts +16 -0
  66. package/dist/rest/handlers/stats-handler.js +29 -0
  67. package/dist/rest/handlers/stats-handler.js.map +1 -0
  68. package/dist/rest/handlers/tests-handler.d.ts +14 -0
  69. package/dist/rest/handlers/tests-handler.js +19 -0
  70. package/dist/rest/handlers/tests-handler.js.map +1 -0
  71. package/dist/rest/handlers/types-handler.d.ts +12 -0
  72. package/dist/rest/handlers/types-handler.js +17 -0
  73. package/dist/rest/handlers/types-handler.js.map +1 -0
  74. package/package.json +98 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/cli/commands/build-order.ts","../../../src/cli/commands/check-builds.ts","../../../src/cli/commands/check-tests.ts","../../../src/cli/commands/check-types.ts","../../../src/cli/commands/cycles.ts","../../../src/cli/commands/dead-code.ts","../../../src/cli/commands/fix-deps.ts","../../../src/cli/commands/health.ts","../../../src/cli/commands/stats.ts","../../../src/cli/commands/visualize.ts"],"names":["defineCommand","CACHE_KEYS","summaryItems","buildDependencyGraph","result","path","findPackages","fs","outputStats"],"mappings":";;;;;;;;;;;AA8BA,IAAO,sBAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,qBAAA;AAAA,EACJ,WAAA,EAAa,8CAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAA0D;AAC5F,MAAA,MAAM,EAAE,IAAG,GAAI,GAAA;AAGf,MAAA,MAAM,KAAA,GAAS,MAAc,KAAA,IAAS,KAAA;AAGtC,MAAA,MAAM,KAAA,GAAQ,oBAAA,CAAqB,GAAA,CAAI,GAAG,CAAA;AAG1C,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,MAAM,OAAA,EAAS;AACjB,QAAA,MAAA,GAAS,uBAAA,CAAwB,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA;AAAA,MACvD,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,gBAAgB,KAAK,CAAA;AAAA,MAChC;AAGA,MAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC9B,QAAA,EAAA,EAAI,KAAA;AAAA,UACF,CAAA,MAAA,EAAS,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,yDAAA;AAAA,SACjC;AACA,QAAA,0BAAA,CAA2B,MAAA,CAAO,UAAU,EAAE,CAAA;AAC9C,QAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,MAAA,EAAO;AAAA,MAC/B;AAGA,MAAA,gBAAA,CAAiB,MAAA,EAAQ,OAAO,EAAE,CAAA;AAElC,MAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,MAAA,EAAO;AAAA,IAC/B;AAAA;AAEJ,CAAC;AAKD,SAAS,gBAAA,CAAiB,MAAA,EAA+B,KAAA,EAAY,EAAA,EAAS;AAC5E,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,EAAA,EAAI,OAAO,MAAM,CAAA;AACjB,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,MAAM,MAAA,EAAQ;AAEhB,IAAA,EAAA,EAAI,QAAQ,aAAa,CAAA;AACzB,IAAA,EAAA,EAAI,QAAQ,0BAA0B,CAAA;AACtC,IAAA,EAAA,EAAI,QAAQ,QAAQ,CAAA;AACpB,IAAA,EAAA,EAAI,QAAQ,EAAE,CAAA;AAEd,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAC7C,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA;AAC7B,MAAA,IAAI,CAAC,KAAA,EAAO;AAAC,QAAA;AAAA,MAAS;AACtB,MAAA,EAAA,EAAI,QAAQ,CAAA,QAAA,EAAW,CAAA,GAAI,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,MAAM,CAAA,UAAA,CAAY,CAAA;AACzD,MAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,QAAA,EAAA,EAAI,KAAA,GAAQ,CAAA,eAAA,EAAkB,GAAG,CAAA,WAAA,CAAa,CAAA;AAAA,MAChD;AACA,MAAA,EAAA,EAAI,QAAQ,EAAE,CAAA;AAAA,IAChB;AACA,IAAA;AAAA,EACF;AAGA,EAAA,MAAM,WAAuD,EAAC;AAE9D,EAAA,IAAI,MAAM,MAAA,EAAQ;AAEhB,IAAA,MAAM,aAAuB,EAAC;AAC9B,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAC7C,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA;AAC7B,MAAA,IAAI,CAAC,KAAA,EAAO;AAAC,QAAA;AAAA,MAAS;AACtB,MAAA,UAAA,CAAW,KAAK,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,MAAM,CAAA,iCAAA,CAAmC,CAAA;AAClF,MAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,QAAA,UAAA,CAAW,IAAA,CAAK,CAAA,SAAA,EAAO,GAAG,CAAA,CAAE,CAAA;AAAA,MAC9B;AACA,MAAA,UAAA,CAAW,KAAK,EAAE,CAAA;AAAA,IACpB;AACA,IAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,cAAA,EAAgB,KAAA,EAAO,YAAY,CAAA;AAAA,EAC7D,CAAA,MAAO;AAEL,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,EAAK,GAAA,KAAQ,CAAA,EAAG,GAAA,GAAM,CAAC,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAA;AACvE,IAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,aAAA,EAAe,KAAA,EAAO,YAAY,CAAA;AAAA,EAC5D;AAGA,EAAA,QAAA,CAAS,IAAA,CAAK;AAAA,IACZ,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,CAAA,gBAAA,EAAmB,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA,MACvC,CAAA,cAAA,EAAiB,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA,MACrC,CAAA,uBAAA,EAA0B,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA;AAAA;AAClD,GACD,CAAA;AAED,EAAA,MAAM,QAAQ,KAAA,CAAM,OAAA,GAChB,CAAA,0BAAA,EAAsB,KAAA,CAAM,OAAO,CAAA,CAAA,GACnC,gCAAA;AAEJ,EAAA,EAAA,EAAI,UAAU,qCAAA,EAAuC;AAAA,IACnD,KAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAKA,SAAS,0BAAA,CAA2B,QAAoB,EAAA,EAAS;AAC/D,EAAA,MAAM,WAAuD,EAAC;AAE9D,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,IAAA,IAAI,CAAC,KAAA,EAAO;AAAC,MAAA;AAAA,IAAS;AACtB,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA,CAAA;AAAA,MACtB,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,CAAC,KAAK,GAAA,KAAQ;AAC7B,QAAA,IAAI,GAAA,KAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC5B,UAAA,MAAM,QAAA,GAAW,MAAM,CAAC,CAAA;AACxB,UAAA,OAAO,CAAA,EAAA,EAAK,GAAG,CAAA,QAAA,EAAM,QAAA,IAAY,GAAG,CAAA,YAAA,CAAA;AAAA,QACtC;AACA,QAAA,OAAO,KAAK,GAAG,CAAA,OAAA,CAAA;AAAA,MACjB,CAAC;AAAA,KACF,CAAA;AAAA,EACH;AAEA,EAAA,EAAA,EAAI,QAAQ,gCAAA,EAAkC;AAAA,IAC5C,KAAA,EAAO,oCAAA;AAAA,IACP;AAAA,GACD,CAAA;AACH;AC5IA,IAAO,uBAAQA,aAAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,sBAAA;AAAA,EACJ,WAAA,EAAa,oCAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EACmC;AACnC,MAAA,MAAM,EAAE,EAAA,EAAI,QAAA,EAAS,GAAI,GAAA;AAGzB,MAAA,MAAM,KAAA,GAAS,MAAc,KAAA,IAAS,KAAA;AAGtC,MAAA,MAAM,WAAW,CAAA,EAAG,UAAA,CAAW,MAAM,CAAA,CAAA,EAAI,KAAA,CAAM,WAAW,KAAK,CAAA,CAAA;AAE/D,MAAA,IAAI,CAAC,MAAM,OAAA,EAAS;AAClB,QAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,KAAA,CAAM,IAAsB,QAAQ,CAAA;AAClE,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,gBAAA,CAAiB,EAAE,GAAG,MAAA,EAAQ,QAAQ,IAAA,EAAK,EAAG,OAAO,EAAE,CAAA;AACvD,UAAA,OAAO,EAAE,UAAU,MAAA,CAAO,OAAA,GAAU,IAAI,CAAA,GAAI,CAAA,EAAG,QAAQ,MAAA,EAAO;AAAA,QAChE;AAAA,MACF;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,GAAA,CAAI,GAAA,EAAK;AAAA,QACxC,eAAe,KAAA,CAAM,OAAA;AAAA,QACrB,SAAS,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,GAAI;AAAA,OAClD,CAAA;AAGD,MAAA,MAAM,SAAS,KAAA,CAAM,GAAA,CAAI,UAAU,MAAA,EAAQ,EAAA,GAAK,KAAK,GAAI,CAAA;AAGzD,MAAA,MAAM,QAAA,CAAS,SAAA,CAAU,KAAA,CAAM,sBAAA,EAAwB;AAAA,QACrD,eAAe,MAAA,CAAO,aAAA;AAAA,QACtB,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,WAAA,EAAa,OAAO,WAAA,CAAY,MAAA;AAAA,QAChC,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,eAAA,EAAiB,CAAC,CAAC,KAAA,CAAM;AAAA,OAC1B,CAAA;AAGD,MAAA,gBAAA,CAAiB,EAAE,GAAG,MAAA,EAAQ,QAAQ,KAAA,EAAM,EAAG,OAAO,EAAE,CAAA;AAExD,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,MAAA,CAAO,OAAA,GAAU,CAAA,GAAI,CAAA,GAAI,CAAA;AAAA,QACnC;AAAA,OACF;AAAA,IACF;AAAA;AAEJ,CAAC;AAKD,SAAS,gBAAA,CACP,MAAA,EACA,KAAA,EACA,EAAA,EACA;AACA,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,EAAA,EAAI,OAAO,MAAM,CAAA;AACjB,IAAA;AAAA,EACF;AAGA,EAAA,MAAM,WAAuD,EAAC;AAG9D,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,KAAY,CAAA,GAAI,QAAA,GAAM,QAAA;AAChD,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,KAAY,CAAA,GAAI,oBAAA,GAAuB,yBAAA;AACjE,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AAAA,IAC3B,CAAA,SAAA,EAAY,OAAO,OAAO,CAAA,WAAA,CAAA;AAAA,IAC1B,OAAO,OAAA,GAAU,CAAA,GAAI,CAAA,SAAA,EAAY,MAAA,CAAO,OAAO,CAAA,WAAA,CAAA,GAAgB;AAAA,GACjE,CAAE,OAAO,OAAO,CAAA;AAEhB,EAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,cAAA,EAAgB,KAAA,EAAO,aAAa,CAAA;AAG5D,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC9B,IAAA,MAAM,eAAyB,EAAC;AAChC,IAAA,KAAA,MAAW,WAAW,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG;AACjD,MAAA,YAAA,CAAa,IAAA,CAAK,CAAA,OAAA,EAAK,OAAA,CAAQ,OAAO,CAAA,CAAE,CAAA;AAExC,MAAA,MAAM,YAAY,OAAA,CAAQ,KAAA,CAAM,KAAA,CAAM,IAAI,EAAE,CAAC,CAAA;AAC7C,MAAA,YAAA,CAAa,IAAA,CAAK,KAAK,SAAA,EAAW,SAAA,CAAU,GAAG,EAAE,CAAA,IAAK,cAAc,CAAA,CAAE,CAAA;AAAA,IACxE;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC9B,MAAA,YAAA,CAAa,KAAK,CAAA,QAAA,EAAW,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,cAAA,CAAgB,CAAA;AAAA,IACzE;AAEA,IAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,wBAAA,EAAqB,KAAA,EAAO,cAAc,CAAA;AAAA,EACpE;AAGA,EAAA,IAAI,MAAA,CAAO,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACjC,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,OAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AAE7E,IAAA,IAAI,MAAA,CAAO,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACjC,MAAA,UAAA,CAAW,KAAK,CAAA,QAAA,EAAW,MAAA,CAAO,WAAA,CAAY,MAAA,GAAS,CAAC,CAAA,KAAA,CAAO,CAAA;AAAA,IACjE;AAEA,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,oDAAA;AAAA,MACR,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,CAAA,gBAAA,EAAmB,OAAO,aAAa,CAAA,CAAA;AAAA,IACvC,cAAc,MAAA,CAAO,QAAA,GAAW,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,IAChD,MAAA,CAAO,SAAS,6CAAA,GAAyC;AAAA,GAC3D;AAEA,EAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAO,cAAc,CAAA;AAExD,EAAA,MAAM,QACJ,MAAA,CAAO,OAAA,KAAY,IACf,2BAAA,GACA,CAAA,OAAA,EAAK,OAAO,OAAO,CAAA,0BAAA,CAAA;AAEzB,EAAA,EAAA,EAAI,UAAU,uBAAA,EAAyB;AAAA,IACrC,KAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;ACvIA,IAAO,sBAAQA,aAAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,qBAAA;AAAA,EACJ,WAAA,EAAa,8CAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EACkC;AAClC,MAAA,MAAM,EAAE,EAAA,EAAI,QAAA,EAAS,GAAI,GAAA;AAGzB,MAAA,MAAM,KAAA,GAAS,MAAc,KAAA,IAAS,KAAA;AAEtC,MAAA,MAAM,WAAW,CAAA,EAAGC,UAAAA,CAAW,KAAK,CAAA,CAAA,EAAI,KAAA,CAAM,WAAW,KAAK,CAAA,CAAA;AAG9D,MAAA,IAAI,CAAC,MAAM,OAAA,EAAS;AAClB,QAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,KAAA,CAAM,IAAmB,QAAQ,CAAA;AAC/D,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,iBAAA,CAAkB,EAAE,GAAG,MAAA,EAAQ,QAAQ,IAAA,EAAK,EAAG,OAAO,EAAE,CAAA;AACxD,UAAA,OAAO,EAAE,UAAU,MAAA,CAAO,OAAA,GAAU,IAAI,CAAA,GAAI,CAAA,EAAG,QAAQ,MAAA,EAAO;AAAA,QAChE;AAAA,MACF;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,GAAA,CAAI,GAAA,EAAK;AAAA,QACrC,eAAe,KAAA,CAAM,OAAA;AAAA,QACrB,SAAS,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,GAAI,GAAA;AAAA,QACjD,YAAA,EAAc,MAAM,eAAe,CAAA;AAAA,QACnC,YAAA,EAAc,MAAM,eAAe;AAAA,OACpC,CAAA;AAGD,MAAA,MAAM,SAAS,KAAA,CAAM,GAAA,CAAI,UAAU,MAAA,EAAQ,CAAA,GAAI,KAAK,GAAI,CAAA;AAGxD,MAAA,MAAM,QAAA,CAAS,SAAA,CAAU,KAAA,CAAM,qBAAA,EAAuB;AAAA,QACpD,aAAA,EAAe,MAAM,OAAA,IAAW,KAAA;AAAA,QAChC,eAAe,MAAA,CAAO,aAAA;AAAA,QACtB,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,YAAA,EAAc,MAAM,eAAe,CAAA;AAAA,QACnC,MAAA,EAAQ;AAAA,OACT,CAAA;AAGD,MAAA,iBAAA,CAAkB,EAAE,GAAG,MAAA,EAAQ,QAAQ,KAAA,EAAM,EAAG,OAAO,EAAE,CAAA;AAEzD,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,MAAA,CAAO,OAAA,GAAU,CAAA,GAAI,CAAA,GAAI,CAAA;AAAA,QACnC,MAAA;AAAA,QACA,IAAA,EAAM,EAAE,MAAA,EAAQ,KAAA;AAAM,OACxB;AAAA,IACF;AAAA;AAEJ,CAAC;AAKD,SAAS,iBAAA,CACP,MAAA,EACA,KAAA,EACA,EAAA,EACM;AACN,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,EAAA,EAAI,OAAO,MAAM,CAAA;AACjB,IAAA;AAAA,EACF;AAGA,EAAA,MAAM,WAAuD,EAAC;AAG9D,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,KAAY,CAAA,GAAI,QAAA,GAAM,QAAA;AAChD,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,KAAY,CAAA,GAAI,mBAAA,GAAsB,wBAAA;AAChE,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AAAA,IAC3B,CAAA,gBAAA,EAAmB,OAAO,aAAa,CAAA,CAAA;AAAA,IACvC,CAAA,SAAA,EAAY,OAAO,OAAO,CAAA,CAAA;AAAA,IAC1B,OAAO,OAAA,GAAU,CAAA,GAAI,CAAA,SAAA,EAAY,MAAA,CAAO,OAAO,CAAA,CAAA,GAAK,IAAA;AAAA,IACpD,OAAO,OAAA,GAAU,CAAA,GAAI,CAAA,SAAA,EAAY,MAAA,CAAO,OAAO,CAAA,iBAAA,CAAA,GAAsB;AAAA,GACvE,CAAE,OAAO,OAAO,CAAA;AAEhB,EAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,aAAA,EAAe,KAAA,EAAO,aAAa,CAAA;AAG3D,EAAA,IAAI,MAAA,CAAO,OAAA,CAAQ,UAAA,GAAa,CAAA,EAAG;AACjC,IAAA,MAAMC,aAAAA,GAAe;AAAA,MACnB,CAAA,aAAA,EAAgB,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,CAAA;AAAA,MACzC,CAAA,QAAA,EAAW,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,CAAA;AAAA,MACrC,MAAA,CAAO,QAAQ,WAAA,GAAc,CAAA,GAAI,WAAW,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,CAAA,GAAK;AAAA,KAC7E,CAAE,OAAO,OAAO,CAAA;AAEhB,IAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,cAAA,EAAgB,KAAA,EAAOA,eAAc,CAAA;AAAA,EAC/D;AAGA,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC9B,IAAA,MAAM,eAAyB,EAAC;AAChC,IAAA,KAAA,MAAW,WAAW,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG;AACjD,MAAA,YAAA,CAAa,IAAA,CAAK,CAAA,OAAA,EAAK,OAAA,CAAQ,OAAO,CAAA,CAAE,CAAA;AACxC,MAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,OAAA,CAAQ,UAAA,EAAY;AAC7C,QAAA,YAAA,CAAa,KAAK,CAAA,EAAA,EAAK,OAAA,CAAQ,WAAW,CAAA,CAAA,EAAI,OAAA,CAAQ,UAAU,CAAA,aAAA,CAAe,CAAA;AAAA,MACjF;AAEA,MAAA,MAAM,YAAY,OAAA,CAAQ,KAAA,CAAM,KAAA,CAAM,IAAI,EAAE,CAAC,CAAA;AAC7C,MAAA,YAAA,CAAa,IAAA,CAAK,KAAK,SAAA,EAAW,SAAA,CAAU,GAAG,EAAE,CAAA,IAAK,aAAa,CAAA,CAAE,CAAA;AAAA,IACvE;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC9B,MAAA,YAAA,CAAa,KAAK,CAAA,QAAA,EAAW,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,cAAA,CAAgB,CAAA;AAAA,IACzE;AAEA,IAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,iBAAA,EAAmB,KAAA,EAAO,cAAc,CAAA;AAAA,EAClE;AAGA,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACvC,IAAA,MAAM,gBAA0B,EAAC;AACjC,IAAA,aAAA,CAAc,IAAA,CAAK,qBAAqB,MAAA,CAAO,QAAA,CAAS,YAAY,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AACjF,IAAA,aAAA,CAAc,KAAK,EAAE,CAAA;AAErB,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,QAAA,CAAS,QAAA,CACjC,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,QAAQ,CAAA,CAAE,KAAK,CAAA,CAChC,KAAA,CAAM,GAAG,CAAC,CAAA;AAEb,IAAA,KAAA,MAAW,OAAO,WAAA,EAAa;AAC7B,MAAA,aAAA,CAAc,IAAA,CAAK,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA,CAAE,CAAA;AAChC,MAAA,aAAA,CAAc,IAAA;AAAA,QACZ,CAAA,SAAA,EAAY,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,gBAAA,EAAmB,GAAA,CAAI,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAC,CAAA,eAAA,EAAkB,GAAA,CAAI,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAC,iBAAiB,GAAA,CAAI,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,OAChK;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACvC,MAAA,aAAA,CAAc,KAAK,CAAA,QAAA,EAAW,MAAA,CAAO,SAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,cAAA,CAAgB,CAAA;AAAA,IACnF;AAEA,IAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,UAAA,EAAY,KAAA,EAAO,eAAe,CAAA;AAAA,EAC5D;AAGA,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,cAAc,MAAA,CAAO,QAAA,GAAW,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,IAChD,MAAA,CAAO,SAAS,4CAAA,GAAwC;AAAA,GAC1D;AAEA,EAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAO,cAAc,CAAA;AAExD,EAAA,MAAM,QACJ,MAAA,CAAO,OAAA,KAAY,IACf,yBAAA,GACA,CAAA,OAAA,EAAK,OAAO,OAAO,CAAA,8BAAA,CAAA;AAEzB,EAAA,EAAA,EAAI,UAAU,oBAAA,EAAsB;AAAA,IAClC,KAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AC9JA,IAAO,sBAAQF,aAAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,qBAAA;AAAA,EACJ,WAAA,EAAa,gDAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EACkC;AAClC,MAAA,MAAM,EAAE,EAAA,EAAI,QAAA,EAAS,GAAI,GAAA;AAGzB,MAAA,MAAM,KAAA,GAAS,MAAc,KAAA,IAAS,KAAA;AAEtC,MAAA,MAAM,WAAW,CAAA,EAAGC,UAAAA,CAAW,aAAa,CAAA,CAAA,EAAI,KAAA,CAAM,WAAW,KAAK,CAAA,CAAA;AAGtE,MAAA,IAAI,CAAC,MAAM,OAAA,EAAS;AAClB,QAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,KAAA,CAAM,IAAwB,QAAQ,CAAA;AACpE,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,kBAAA,CAAmB,EAAE,GAAG,MAAA,EAAQ,QAAQ,IAAA,EAAK,EAAG,OAAO,EAAE,CAAA;AACzD,UAAA,OAAO,EAAE,UAAU,MAAA,CAAO,WAAA,GAAc,IAAI,CAAA,GAAI,CAAA,EAAG,QAAQ,MAAA,EAAO;AAAA,QACpE;AAAA,MACF;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,YAAA,CAAa,GAAA,CAAI,GAAA,EAAK;AAAA,QACzC,eAAe,KAAA,CAAM,OAAA;AAAA,QACrB,UAAA,EAAY,MAAM,aAAa;AAAA,OAChC,CAAA;AAGD,MAAA,MAAM,SAAS,KAAA,CAAM,GAAA,CAAI,UAAU,MAAA,EAAQ,EAAA,GAAK,KAAK,GAAI,CAAA;AAGzD,MAAA,MAAM,QAAA,CAAS,SAAA,CAAU,KAAA,CAAM,qBAAA,EAAuB;AAAA,QACpD,aAAA,EAAe,MAAM,OAAA,IAAW,KAAA;AAAA,QAChC,eAAe,MAAA,CAAO,aAAA;AAAA,QACtB,aAAa,MAAA,CAAO,WAAA;AAAA,QACpB,aAAa,MAAA,CAAO,WAAA;AAAA,QACpB,MAAA,EAAQ;AAAA,OACT,CAAA;AAGD,MAAA,kBAAA,CAAmB,EAAE,GAAG,MAAA,EAAQ,QAAQ,KAAA,EAAM,EAAG,OAAO,EAAE,CAAA;AAE1D,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,MAAA,CAAO,WAAA,GAAc,CAAA,GAAI,CAAA,GAAI,CAAA;AAAA,QACvC,MAAA;AAAA,QACA,IAAA,EAAM,EAAE,MAAA,EAAQ,KAAA;AAAM,OACxB;AAAA,IACF;AAAA;AAEJ,CAAC;AAKD,SAAS,kBAAA,CACP,MAAA,EACA,KAAA,EACA,EAAA,EACM;AACN,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,EAAA,EAAI,OAAO,MAAM,CAAA;AACjB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,aAAa,CAAA,IAAK,KAAA;AAG3C,EAAA,MAAM,WAAuD,EAAC;AAG9D,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,WAAA,KAAgB,CAAA,GAAI,QAAA,GAAM,QAAA;AACpD,EAAA,MAAM,UAAA,GACJ,MAAA,CAAO,WAAA,KAAgB,CAAA,GAAI,iCAAA,GAAoC,sBAAA;AACjE,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AAAA,IAC3B,CAAA,UAAA,EAAa,OAAO,aAAa,CAAA,WAAA,CAAA;AAAA,IACjC,CAAA,QAAA,EAAW,OAAO,WAAW,CAAA,CAAA;AAAA,IAC7B,CAAA,UAAA,EAAa,OAAO,aAAa,CAAA,CAAA;AAAA,IACjC,CAAA,cAAA,EAAiB,MAAA,CAAO,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,GAChD;AAEA,EAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,oBAAA,EAAsB,KAAA,EAAO,aAAa,CAAA;AAGlE,EAAA,IAAI,MAAA,CAAO,qBAAqB,CAAA,EAAG;AACjC,IAAA,MAAM,aAAuB,EAAC;AAC9B,IAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,QAAA,CAC3B,MAAA,CAAO,CAAC,GAAA,KAAQ,CAAC,UAAA,IAAc,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,CAC7C,KAAA,CAAM,GAAG,EAAE,CAAA;AAEd,IAAA,KAAA,MAAW,OAAO,cAAA,EAAgB;AAChC,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,GAAS,CAAA,GAAI,QAAA,GAAM,QAAA;AACtC,MAAA,UAAA,CAAW,KAAK,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,CAAE,CAAA;AAEvC,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,IAAI,MAAA,GAAS,CAAA,GAAI,CAAA,EAAG,GAAA,CAAI,MAAM,CAAA,SAAA,CAAA,GAAc,IAAA;AAAA,QAC5C,IAAI,QAAA,GAAW,CAAA,GAAI,CAAA,EAAG,GAAA,CAAI,QAAQ,CAAA,WAAA,CAAA,GAAgB,IAAA;AAAA,QAClD,CAAA,EAAG,GAAA,CAAI,QAAA,CAAS,OAAA,CAAQ,CAAC,CAAC,CAAA,UAAA,CAAA;AAAA,QAC1B,IAAI,QAAA,GAAW,CAAA,GAAI,CAAA,EAAG,GAAA,CAAI,QAAQ,CAAA,IAAA,CAAA,GAAS,IAAA;AAAA,QAC3C,IAAI,aAAA,GAAgB,CAAA,GAAI,CAAA,EAAG,GAAA,CAAI,aAAa,CAAA,WAAA,CAAA,GAAgB;AAAA,OAC9D,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,IAAI,CAAA;AAEZ,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,IAChC;AAEA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,EAAA,EAAI;AAC/B,MAAA,UAAA,CAAW,KAAK,CAAA,QAAA,EAAW,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,EAAE,CAAA,cAAA,CAAgB,CAAA;AAAA,IACxE;AAEA,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,CAAA,2BAAA,EAA8B,MAAA,CAAO,kBAAkB,CAAA,CAAA,CAAA;AAAA,MAC/D,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,SAAA,GAAY,OAAO,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,IAAY,EAAE,CAAA,CAAE,MAAA;AAClE,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,IAAY,EAAA,IAAM,CAAA,CAAE,QAAA,GAAW,EAAE,CAAA,CAAE,MAAA;AAChF,EAAA,MAAM,IAAA,GAAO,OAAO,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,GAAW,EAAE,CAAA,CAAE,MAAA;AAE5D,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC9B,IAAA,MAAM,aAAA,GAAgB;AAAA,MACpB,iCAAuB,SAAS,CAAA,WAAA,CAAA;AAAA,MAChC,kCAAwB,IAAI,CAAA,WAAA,CAAA;AAAA,MAC5B,IAAA,GAAO,CAAA,GAAI,CAAA,wBAAA,EAAsB,IAAI,CAAA,WAAA,CAAA,GAAgB;AAAA,KACvD,CAAE,OAAO,OAAO,CAAA;AAEhB,IAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,4BAAA,EAA8B,KAAA,EAAO,eAAe,CAAA;AAAA,EAC9E;AAGA,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,CAAA,gBAAA,EAAmB,OAAO,aAAa,CAAA,CAAA;AAAA,IACvC,cAAc,MAAA,CAAO,QAAA,GAAW,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,IAChD,MAAA,CAAO,SAAS,6CAAA,GAAyC;AAAA,GAC3D;AAEA,EAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAO,cAAc,CAAA;AAExD,EAAA,MAAM,QACJ,MAAA,CAAO,WAAA,KAAgB,IACnB,+BAAA,GACA,CAAA,OAAA,EAAK,OAAO,kBAAkB,CAAA,4BAAA,CAAA;AAEpC,EAAA,EAAA,EAAI,UAAU,yBAAA,EAA2B;AAAA,IACvC,KAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;ACvJA,IAAO,iBAAQD,aAAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,gBAAA;AAAA,EACJ,WAAA,EAAa,0CAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAkD;AACpF,MAAA,MAAM,EAAE,IAAG,GAAI,GAAA;AAGf,MAAA,MAAM,KAAA,GAAS,MAAc,KAAA,IAAS,KAAA;AAGtC,MAAA,MAAM,KAAA,GAAQG,oBAAAA,CAAqB,GAAA,CAAI,GAAG,CAAA;AAG1C,MAAA,MAAM,MAAA,GAAS,yBAAyB,KAAK,CAAA;AAG7C,MAAA,YAAA,CAAa,MAAA,EAAQ,OAAO,EAAE,CAAA;AAE9B,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,CAAA;AAAA,QAClC;AAAA,OACF;AAAA,IACF;AAAA;AAEJ,CAAC;AAKD,SAAS,YAAA,CAAa,MAAA,EAAoB,KAAA,EAAY,EAAA,EAAS;AAC7D,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,EAAA,EAAI,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,CAAO,QAAQ,CAAA;AAC3C,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,EAAA,EAAI,UAAU,gCAAA,EAAkC;AAAA,MAC9C,KAAA,EAAO,oCAAA;AAAA,MACP,QAAA,EAAU;AAAA,QACR;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,KAAA,EAAO,CAAC,0CAAqC;AAAA;AAC/C;AACF,KACD,CAAA;AACD,IAAA;AAAA,EACF;AAGA,EAAA,MAAM,WAAuD,EAAC;AAG9D,EAAA,QAAA,CAAS,IAAA,CAAK;AAAA,IACZ,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,CAAA,mBAAA,EAAY,OAAO,MAAM,CAAA,6BAAA,CAAA;AAAA,MACzB;AAAA;AACF,GACD,CAAA;AAGD,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,IAAA,IAAI,CAAC,KAAA,EAAO;AAAC,MAAA;AAAA,IAAS;AACtB,IAAA,MAAM,aAAuB,EAAC;AAE9B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACnB,MAAA,IAAI,CAAA,KAAM,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC1B,QAAA,UAAA,CAAW,KAAK,CAAA,EAAA,EAAK,CAAA,GAAI,CAAC,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAA;AACpC,QAAA,MAAM,QAAA,GAAW,MAAM,CAAC,CAAA;AACxB,QAAA,UAAA,CAAW,KAAK,CAAA,EAAA,EAAK,CAAA,GAAI,CAAC,CAAA,EAAA,EAAK,QAAA,IAAY,GAAG,CAAA,iBAAA,CAAc,CAAA;AAAA,MAC9D,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,KAAK,CAAA,EAAA,EAAK,CAAA,GAAI,CAAC,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAA;AAAA,MACtC;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,QAAQ,CAAA,MAAA,EAAS,CAAA,GAAI,CAAC,CAAA,EAAA,EAAK,MAAM,MAAM,CAAA,UAAA,CAAA;AAAA,MACvC,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AAGA,EAAA,QAAA,CAAS,IAAA,CAAK;AAAA,IACZ,MAAA,EAAQ,iBAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,2CAAA;AAAA,MACA,2CAAA;AAAA,MACA,kDAAA;AAAA,MACA;AAAA;AACF,GACD,CAAA;AAED,EAAA,EAAA,EAAI,QAAQ,gCAAA,EAAkC;AAAA,IAC5C,KAAA,EAAO,CAAA,6CAAA,EAAsC,MAAA,CAAO,MAAM,CAAA,CAAA,CAAA;AAAA,IAC1D;AAAA,GACD,CAAA;AACH;AClGA,IAAO,oBAAQH,aAAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,mBAAA;AAAA,EACJ,WAAA,EAAa,8DAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EACgC;AAChC,MAAA,MAAM,EAAE,EAAA,EAAI,QAAA,EAAS,GAAI,GAAA;AACzB,MAAA,MAAM,KAAA,GAAS,MAAc,KAAA,IAAS,KAAA;AAKtC,MAAA,IAAI,KAAA,CAAM,cAAc,CAAA,EAAG;AACzB,QAAA,MAAM,OAAA,GAAU,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AACnC,QAAA,IAAI,MAAM,IAAA,EAAM;AACd,UAAA,EAAA,EAAI,OAAO,OAAO,CAAA;AAAA,QACpB,CAAA,MAAO;AACL,UAAA,gBAAA,CAAiB,SAAS,EAAE,CAAA;AAAA,QAC9B;AACA,QAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,MAAA,EAAQ,OAAA,EAAQ;AAAA,MACxC;AAGA,MAAA,IAAI,MAAM,OAAA,EAAS;AACjB,QAAA,IAAI;AACF,UAAA,MAAMI,UAAS,MAAM,iBAAA,CAAkB,GAAA,CAAI,GAAA,EAAK,MAAM,OAAO,CAAA;AAC7D,UAAA,IAAI,MAAM,IAAA,EAAM;AACd,YAAA,EAAA,EAAI,OAAOA,OAAM,CAAA;AAAA,UACnB,CAAA,MAAO;AACL,YAAA,EAAA,EAAI,OAAA,GAAU,YAAYA,OAAAA,CAAO,aAAa,wBAAwB,KAAA,CAAM,OAAO,CAAA,CAAA,EAAI,EAAE,CAAA;AACzF,YAAA,IAAIA,OAAAA,CAAO,kBAAkB,CAAA,EAAG;AAC9B,cAAA,EAAA,EAAI,IAAA,GAAO,CAAA,MAAA,EAASA,OAAAA,CAAO,eAAe,CAAA,8DAAA,CAAgE,CAAA;AAAA,YAC5G;AAAA,UACF;AACA,UAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,QACvB,SAAS,GAAA,EAAU;AACjB,UAAA,IAAI,MAAM,IAAA,EAAM;AACd,YAAA,EAAA,EAAI,IAAA,GAAO,EAAE,KAAA,EAAO,GAAA,CAAI,SAAS,CAAA;AAAA,UACnC,CAAA,MAAO;AACL,YAAA,EAAA,EAAI,KAAA,GAAQ,IAAI,OAAO,CAAA;AAAA,UACzB;AACA,UAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,QACvB;AAAA,MACF;AAKA,MAAA,MAAM,WAAW,CAAA,EAAGH,UAAAA,CAAW,SAAS,CAAA,CAAA,EAAI,KAAA,CAAM,WAAW,KAAK,CAAA,CAAA;AAClE,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,IAAW,CAAC,KAAA,CAAM,aAAa,CAAA,EAAG;AAC3C,QAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,KAAA,CAAM,IAAoB,QAAQ,CAAA;AAChE,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,oBAAA,CAAqB,EAAE,GAAG,MAAA,EAAQ,QAAQ,IAAA,EAAK,EAAG,OAAO,EAAE,CAAA;AAC3D,UAAA,OAAO,EAAE,UAAU,MAAA,CAAO,OAAA,CAAQ,YAAY,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,MAAA,EAAQ,MAAA,EAAO;AAAA,QAC1E;AAAA,MACF;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,GAAA,CAAI,GAAA,EAAK;AAAA,QAC1C,eAAe,KAAA,CAAM,OAAA;AAAA,QACrB,SAAS,KAAA,CAAM;AAAA,OAChB,CAAA;AAGD,MAAA,MAAM,SAAS,KAAA,CAAM,GAAA,CAAI,UAAU,MAAA,EAAQ,CAAA,GAAI,KAAK,GAAI,CAAA;AAGxD,MAAA,MAAM,QAAA,CAAS,SAAA,CAAU,KAAA,CAAM,mBAAA,EAAqB;AAAA,QAClD,aAAA,EAAe,OAAO,OAAA,CAAQ,aAAA;AAAA,QAC9B,UAAA,EAAY,OAAO,OAAA,CAAQ,UAAA;AAAA,QAC3B,SAAA,EAAW,OAAO,OAAA,CAAQ,SAAA;AAAA,QAC1B,cAAA,EAAgB,OAAO,OAAA,CAAQ,cAAA;AAAA,QAC/B,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,UAAA,EAAY,CAAC,CAAC,KAAA,CAAM,aAAa,CAAA;AAAA,QACjC,MAAA,EAAQ,CAAC,CAAC,KAAA,CAAM,SAAS;AAAA,OAC1B,CAAA;AAGD,MAAA,IAAI,KAAA,CAAM,aAAa,CAAA,EAAG;AACxB,QAAA,IAAI,MAAA,CAAO,OAAA,CAAQ,SAAA,KAAc,CAAA,EAAG;AAClC,UAAA,IAAI,MAAM,IAAA,EAAM;AACd,YAAA,EAAA,EAAI,OAAO,EAAE,OAAA,EAAS,qBAAA,EAAuB,GAAG,QAAQ,CAAA;AAAA,UAC1D,CAAA,MAAO;AACL,YAAA,EAAA,EAAI,OAAA,GAAU,yCAAA,EAA2C,EAAE,CAAA;AAAA,UAC7D;AACA,UAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,MAAA,EAAO;AAAA,QAC/B;AAEA,QAAA,MAAM,aAAA,GAAgB,MAAM,eAAA,CAAgB,GAAA,CAAI,KAAK,MAAA,EAAQ;AAAA,UAC3D,MAAA,EAAQ,MAAM,SAAS;AAAA,SACxB,CAAA;AAED,QAAA,IAAI,MAAM,IAAA,EAAM;AACd,UAAA,EAAA,EAAI,OAAO,aAAa,CAAA;AAAA,QAC1B,CAAA,MAAO;AACL,UAAA,mBAAA,CAAoB,aAAA,EAAe,OAAO,EAAE,CAAA;AAAA,QAC9C;AAEA,QAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,MAAA,EAAQ,aAAA,EAAc;AAAA,MAC9C;AAGA,MAAA,oBAAA,CAAqB,EAAE,GAAG,MAAA,EAAQ,QAAQ,KAAA,EAAM,EAAG,OAAO,EAAE,CAAA;AAE5D,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,MAAA,CAAO,OAAA,CAAQ,SAAA,GAAY,IAAI,CAAA,GAAI,CAAA;AAAA,QAC7C;AAAA,OACF;AAAA,IACF;AAAA;AAEJ,CAAC;AAID,SAAS,oBAAA,CACP,MAAA,EACA,KAAA,EACA,EAAA,EACM;AACN,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,EAAA,EAAI,OAAO,MAAM,CAAA;AACjB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,WAAuD,EAAC;AAG9D,EAAA,MAAM,gBAAA,GAAmB,OAAO,QAAA,CAAS,MAAA,CAAO,OAAK,CAAA,CAAE,SAAA,CAAU,SAAS,CAAC,CAAA;AAE3E,EAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAC/B,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,KAAA,MAAW,OAAO,gBAAA,EAAkB;AAClC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,GAAA,CAAI,WAAW,KAAK,GAAA,CAAI,SAAA,CAAU,MAAM,CAAA,UAAA,EAAa,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,GAAI,EAAA,GAAK,GAAG,CAAA,CAAA,CAAG,CAAA;AAC3G,MAAA,KAAA,MAAW,QAAQ,GAAA,CAAI,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG;AAC5C,QAAA,MAAM,MAAA,GAAA,CAAU,IAAA,CAAK,SAAA,GAAY,IAAA,EAAM,QAAQ,CAAC,CAAA;AAChD,QAAA,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,IAAA,CAAK,YAAY,CAAA,EAAA,EAAK,MAAM,CAAA,IAAA,CAAM,CAAA;AAAA,MACpD;AACA,MAAA,IAAI,GAAA,CAAI,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AAC5B,QAAA,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,GAAA,CAAI,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,KAAA,CAAO,CAAA;AAAA,MACzD;AAAA,IACF;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,YAAA,EAAc,OAAO,CAAA;AAAA,EAC/C;AAGA,EAAA,IAAI,MAAM,OAAA,EAAS;AACjB,IAAA,KAAA,MAAW,GAAA,IAAO,OAAO,QAAA,EAAU;AACjC,MAAA,IAAI,GAAA,CAAI,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AAC9B,QAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,GAAA,CAAI,CAAA,EAAA,KAAM,CAAA,EAAA,EAAK,EAAE,CAAA,CAAE,CAAA;AAC9D,QAAA,IAAI,GAAA,CAAI,WAAA,CAAY,MAAA,GAAS,EAAA,EAAI;AAC/B,UAAA,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,GAAA,CAAI,WAAA,CAAY,MAAA,GAAS,EAAE,CAAA,KAAA,CAAO,CAAA;AAAA,QAC5D;AACA,QAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,cAAA,EAAiB,IAAI,WAAW,CAAA,CAAA,EAAI,OAAO,CAAA;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,cAAc,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,CAAA,CAAA,KAAK,EAAE,QAAQ,CAAA;AAC3D,EAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,UAAA;AAAA,MACR,KAAA,EAAO,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,EAAE;AAAA,KAC/B,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,eAAe,MAAA,CAAO,OAAA,CAAQ,cAAA,GAAiB,IAAA,EAAM,QAAQ,CAAC,CAAA;AACpE,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,CAAA,kBAAA,EAAqB,MAAA,CAAO,OAAA,CAAQ,aAAa,CAAA,CAAA;AAAA,IACjD,CAAA,oBAAA,EAAuB,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,CAAA;AAAA,IAChD,CAAA,aAAA,EAAgB,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,CAAA;AAAA,IACzC,CAAA,YAAA,EAAe,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,CAAA;AAAA,IACvC,OAAO,OAAA,CAAQ,SAAA,GAAY,CAAA,GAAI,CAAA,gBAAA,EAAmB,WAAW,CAAA,GAAA,CAAA,GAAQ,IAAA;AAAA,IACrE,MAAA,CAAO,OAAA,CAAQ,gBAAA,CAAiB,MAAA,GAAS,CAAA,GACrC,sBAAsB,MAAA,CAAO,OAAA,CAAQ,gBAAA,CAAiB,MAAM,CAAA,CAAA,GAC5D,IAAA;AAAA,IACJ,cAAc,MAAA,CAAO,QAAA,GAAW,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,IAChD,MAAA,CAAO,SAAS,yCAAA,GAAuC;AAAA,GACzD,CAAE,OAAO,OAAO,CAAA;AAChB,EAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAO,cAAc,CAAA;AAGxD,EAAA,IAAI,MAAA,CAAO,OAAA,CAAQ,SAAA,GAAY,CAAA,EAAG;AAChC,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,YAAA;AAAA,MACR,KAAA,EAAO;AAAA,QACL,qDAAA;AAAA,QACA,oDAAA;AAAA,QACA;AAAA;AACF,KACD,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,KAAA,GACJ,OAAO,OAAA,CAAQ,SAAA,KAAc,IACzB,qBAAA,GACA,CAAA,EAAG,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,mBAAA,CAAA;AAEjC,EAAA,EAAA,EAAI,OAAA,GAAU,8BAAA,EAAgC,EAAE,KAAA,EAAO,UAAU,CAAA;AACnE;AAEA,SAAS,mBAAA,CACP,MAAA,EACA,KAAA,EACA,EAAA,EACM;AACN,EAAA,MAAM,QAAA,GAAW,MAAM,SAAS,CAAA;AAChC,EAAA,MAAM,MAAA,GAAS,WAAW,iBAAA,GAAoB,cAAA;AAE9C,EAAA,MAAM,WAAuD,EAAC;AAE9D,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,CAAA,EAAG,MAAM,CAAA,QAAA,EAAW,MAAA,CAAO,YAAY,CAAA,QAAA,CAAA;AAAA,IACvC,CAAA,EAAG,MAAM,CAAA,MAAA,EAAA,CAAU,MAAA,CAAO,eAAe,IAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA;AAAA,GAC3D;AAEA,EAAA,IAAI,MAAA,CAAO,mBAAmB,CAAA,EAAG;AAC/B,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,QAAA,EAAW,MAAA,CAAO,gBAAgB,CAAA,eAAA,EAAkB,MAAA,CAAO,gBAAA,KAAqB,CAAA,GAAI,GAAA,GAAM,KAAK,CAAA,CAAE,CAAA;AAAA,EACvH;AACA,EAAA,IAAI,MAAA,CAAO,mBAAmB,CAAA,EAAG;AAC/B,IAAA,KAAA,CAAM,KAAK,CAAA,EAAG,MAAM,CAAA,OAAA,EAAU,MAAA,CAAO,gBAAgB,CAAA,uBAAA,CAAyB,CAAA;AAAA,EAChF;AAEA,EAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,WAAW,SAAA,GAAY,kBAAA,EAAoB,OAAO,CAAA;AAE1E,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,QAAA;AAAA,MACR,KAAA,EAAO;AAAA,QACL,CAAA,WAAA,EAAc,OAAO,QAAQ,CAAA,CAAA;AAAA,QAC7B,CAAA,gDAAA,EAAmD,OAAO,QAAQ,CAAA;AAAA;AACpE,KACD,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,YAAsB,EAAC;AAC7B,EAAA,KAAA,MAAW,QAAQ,MAAA,CAAO,QAAA,CAAS,aAAa,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG;AAC5D,IAAA,MAAM,MAAA,GAAA,CAAU,IAAA,CAAK,SAAA,GAAY,IAAA,EAAM,QAAQ,CAAC,CAAA;AAChD,IAAA,SAAA,CAAU,KAAK,CAAA,EAAG,IAAA,CAAK,UAAU,CAAA,EAAA,EAAK,MAAM,CAAA,IAAA,CAAM,CAAA;AAAA,EACpD;AACA,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,YAAA,CAAa,MAAA,GAAS,EAAA,EAAI;AAC5C,IAAA,SAAA,CAAU,KAAK,CAAA,QAAA,EAAW,MAAA,CAAO,SAAS,YAAA,CAAa,MAAA,GAAS,EAAE,CAAA,KAAA,CAAO,CAAA;AAAA,EAC3E;AACA,EAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,WAAW,CAAA;AAEnD,EAAA,MAAM,KAAA,GAAQ,WACV,CAAA,uBAAA,EAA0B,MAAA,CAAO,YAAY,CAAA,QAAA,CAAA,GAC7C,CAAA,QAAA,EAAW,OAAO,YAAY,CAAA,QAAA,CAAA;AAElC,EAAA,EAAA,EAAI,OAAA,GAAU,KAAA,EAAO,EAAE,KAAA,EAAO,UAAU,CAAA;AAC1C;AAEA,SAAS,gBAAA,CACP,SACA,EAAA,EACM;AACN,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,EAAA,EAAI,OAAO,mBAAmB,CAAA;AAC9B,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,WAAuD,EAAC;AAE9D,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,MAAM,OAAO,IAAI,IAAA,CAAK,MAAA,CAAO,SAAS,EAAE,cAAA,EAAe;AACvD,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,SAAS,IAAI,CAAA,CAAA;AAAA,MACb,CAAA,KAAA,EAAQ,OAAO,SAAS,CAAA,GAAA,EAAM,OAAO,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAAA,MACvD,CAAA,OAAA,EAAU,OAAO,iBAAiB,CAAA,CAAA;AAAA,MAClC,UAAU,MAAA,CAAO,iBAAA,GAAoB,IAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,CAAA;AAAA,MACrD,CAAA,6CAAA,EAAgD,OAAO,EAAE,CAAA;AAAA,KAC3D;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,CAAA,QAAA,EAAW,OAAO,EAAE,CAAA,CAAA,EAAI,OAAO,CAAA;AAAA,EACzD;AAEA,EAAA,EAAA,EAAI,OAAA,GAAU,CAAA,EAAG,OAAA,CAAQ,MAAM,CAAA,gBAAA,CAAA,EAAoB;AAAA,IACjD,KAAA,EAAO,mBAAA;AAAA,IACP;AAAA,GACD,CAAA;AACH;ACrRA,IAAO,mBAAQD,aAAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,kBAAA;AAAA,EACJ,WAAA,EAAa,4BAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAoD;AACtF,MAAA,MAAM,EAAE,EAAA,EAAI,QAAA,EAAS,GAAI,GAAA;AAGzB,MAAA,MAAM,KAAA,GAAS,MAAc,KAAA,IAAS,KAAA;AAEtC,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,SAAS,CAAA,IAAK,KAAA;AACnC,MAAA,MAAM,YAAA,GAAe,KAAA,CAAM,eAAe,CAAA,IAAK,KAAA,CAAM,GAAA;AACrD,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,aAAa,CAAA,IAAK,KAAA,CAAM,GAAA;AACjD,MAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,gBAAgB,CAAA,IAAK,KAAA,CAAM,GAAA;AACvD,MAAA,MAAM,YAAY,KAAA,CAAM,KAAA;AAGxB,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,MAAM,KAAA,GAAQ,MAAM,kBAAA,CAAmB,GAAA,CAAI,GAAG,CAAA;AAC9C,QAAA,WAAA,CAAY,KAAA,EAAO,OAAO,EAAE,CAAA;AAC5B,QAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,MACvB;AAGA,MAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,UAAA,IAAc,CAAC,aAAA,EAAe;AAClD,QAAA,EAAA,EAAI,QAAQ,0FAA0F,CAAA;AACtG,QAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,MACvB;AAEA,MAAA,MAAM,MAAA,GAAS,UAAU,sBAAsB,CAAA;AAC/C,MAAA,MAAA,CAAO,KAAA,EAAM;AAEb,MAAA,MAAM,MAAA,GAAoB;AAAA,QACxB,eAAA,EAAiB,CAAA;AAAA,QACjB,aAAa,EAAC;AAAA,QACd,WAAW,EAAC;AAAA,QACZ,aAAa,EAAC;AAAA,QACd;AAAA,OACF;AAEA,MAAA,MAAM,QAAA,GAAW,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AACrC,MAAA,MAAA,CAAO,kBAAkB,QAAA,CAAS,MAAA;AAElC,MAAA,MAAA,CAAO,OAAO,EAAE,IAAA,EAAM,WAAW,QAAA,CAAS,MAAM,aAAa,CAAA;AAG7D,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,MAAA,CAAO,MAAA,CAAO,EAAE,IAAA,EAAM,qCAAA,EAAuC,CAAA;AAC7D,QAAA,MAAM,OAAA,GAAU,MAAM,sBAAA,CAAuB,QAAA,EAAU,MAAM,CAAA;AAC7D,QAAA,MAAA,CAAO,WAAA,GAAc,OAAA;AAAA,MACvB;AAGA,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,MAAA,CAAO,MAAA,CAAO,EAAE,IAAA,EAAM,gDAAA,EAAkD,CAAA;AACxE,QAAA,MAAM,KAAA,GAAQ,MAAM,uBAAA,CAAwB,QAAA,EAAU,MAAM,CAAA;AAC5D,QAAA,MAAA,CAAO,SAAA,GAAY,KAAA;AAAA,MACrB;AAGA,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAA,CAAO,MAAA,CAAO,EAAE,IAAA,EAAM,qCAAA,EAAuC,CAAA;AAC7D,QAAA,MAAM,OAAA,GAAU,MAAM,gBAAA,CAAiB,QAAA,EAAU,MAAM,CAAA;AACvD,QAAA,MAAA,CAAO,WAAA,GAAc,OAAA;AAAA,MACvB;AAEA,MAAA,MAAA,CAAO,QAAQ,+BAA+B,CAAA;AAG9C,MAAA,MAAM,QAAA,CAAS,SAAA,CAAU,KAAA,CAAM,kBAAA,EAAoB;AAAA,QACjD,MAAA;AAAA,QACA,iBAAiB,MAAA,CAAO,eAAA;AAAA,QACxB,YAAA,EAAc,OAAO,WAAA,CAAY,MAAA;AAAA,QACjC,UAAA,EAAY,OAAO,SAAA,CAAU,MAAA;AAAA,QAC7B,YAAA,EAAc,OAAO,WAAA,CAAY;AAAA,OAClC,CAAA;AAGD,MAAA,aAAA,CAAc,MAAA,EAAQ,OAAO,EAAE,CAAA;AAE/B,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,CAAA;AAAA,QACV;AAAA,OACF;AAAA,IACF;AAAA;AAEJ,CAAC;AAKD,SAAS,aAAa,OAAA,EAAmE;AACvF,EAAA,MAAM,WAA6D,EAAC;AAEpE,EAAA,IAAI,CAAC,EAAA,CAAG,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAU,EAAA,CAAG,WAAA,CAAY,SAAS,EAAE,aAAA,EAAe,MAAM,CAAA;AAE/D,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,CAAC,MAAM,WAAA,EAAY,IAAK,CAAC,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,EAAG;AAAC,MAAA;AAAA,IAAS;AAE1E,IAAA,MAAM,QAAA,GAAWK,KAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,CAAA;AAC9C,IAAA,MAAM,WAAA,GAAcA,KAAA,CAAK,IAAA,CAAK,QAAA,EAAU,UAAU,CAAA;AAElD,IAAA,IAAI,CAAC,EAAA,CAAG,UAAA,CAAW,WAAW,CAAA,EAAG;AAAC,MAAA;AAAA,IAAS;AAE3C,IAAA,MAAM,cAAc,EAAA,CAAG,WAAA,CAAY,aAAa,EAAE,aAAA,EAAe,MAAM,CAAA;AAEvE,IAAA,KAAA,MAAW,UAAU,WAAA,EAAa;AAChC,MAAA,IAAI,CAAC,MAAA,CAAO,WAAA,EAAY,EAAG;AAAC,QAAA;AAAA,MAAS;AAErC,MAAA,MAAM,kBAAkBA,KAAA,CAAK,IAAA,CAAK,WAAA,EAAa,MAAA,CAAO,MAAM,cAAc,CAAA;AAE1E,MAAA,IAAI,EAAA,CAAG,UAAA,CAAW,eAAe,CAAA,EAAG;AAClC,QAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,GAAG,YAAA,CAAa,eAAA,EAAiB,OAAO,CAAC,CAAA;AACxE,QAAA,QAAA,CAAS,IAAA,CAAK;AAAA,UACZ,IAAA,EAAM,WAAA,CAAY,IAAA,IAAQ,MAAA,CAAO,IAAA;AAAA,UACjC,IAAA,EAAM,eAAA;AAAA,UACN,IAAA,EAAM;AAAA,SACP,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAKA,eAAe,mBAAmB,OAAA,EAA+B;AAC/D,EAAA,MAAM,QAAA,GAAW,aAAa,OAAO,CAAA;AACrC,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAyB;AAE7C,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,GAAG,IAAI,IAAA,CAAK,YAAA;AAAA,MACZ,GAAG,IAAI,IAAA,CAAK;AAAA,KACd;AAEA,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AACjD,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,kBAAK,IAAI,GAAA,EAAK,CAAA;AAAA,MAC5B;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,CAAG,GAAA,CAAI,OAAiB,CAAA;AAAA,IACzC;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,CAAA,CAC5C,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,QAAQ,CAAA,KAAM,SAAS,IAAA,GAAO,CAAC,CAAA,CAC3C,MAAA,CAAO,CAAC,CAAC,GAAG,CAAA,KAAM,CAAC,GAAA,CAAI,UAAA,CAAW,WAAW,CAAC,CAAA;AAEjD,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAA,CACzC,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,QAAQ,CAAA,MAAO,EAAE,MAAM,KAAA,EAAO,QAAA,CAAS,IAAA,GAAO,CAAA,GAAI,SAAS,IAAA,GAAO,CAAA,EAAE,CAAE,CAAA,CAClF,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,QAAQ,CAAA,CAAE,KAAK,CAAA,CAChC,KAAA,CAAM,GAAG,EAAE,CAAA;AAEd,EAAA,OAAO;AAAA,IACL,eAAe,QAAA,CAAS,MAAA;AAAA,IACxB,WAAW,OAAA,CAAQ,IAAA;AAAA,IACnB,YAAY,UAAA,CAAW,MAAA;AAAA,IACvB;AAAA,GACF;AACF;AAKA,eAAe,sBAAA,CACb,UACA,MAAA,EAC+E;AAC/E,EAAA,MAAM,UAAgF,EAAC;AAGvF,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAsC;AAE9D,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,GAAG,IAAI,IAAA,CAAK,YAAA;AAAA,MACZ,GAAG,IAAI,IAAA,CAAK;AAAA,KACd;AAEA,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AACjD,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAAC,QAAA;AAAA,MAAS;AAE3C,MAAA,IAAI,CAAC,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA,EAAG;AACzB,QAAA,WAAA,CAAY,GAAA,CAAI,GAAA,kBAAK,IAAI,GAAA,EAAK,CAAA;AAAA,MAChC;AAEA,MAAA,MAAM,QAAA,GAAW,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AACpC,MAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,OAAiB,CAAA,EAAG;AACpC,QAAA,QAAA,CAAS,GAAA,CAAI,OAAA,kBAAmB,IAAI,GAAA,EAAK,CAAA;AAAA,MAC3C;AACA,MAAA,QAAA,CAAS,GAAA,CAAI,OAAiB,CAAA,CAAG,GAAA,CAAI,IAAI,IAAI,CAAA;AAAA,IAC/C;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,CAAA,IAAK,WAAA,CAAY,SAAQ,EAAG;AACnD,IAAA,IAAI,QAAA,CAAS,QAAQ,CAAA,EAAG;AAAC,MAAA;AAAA,IAAS;AAGlC,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,IAAI,CAAA,MAAO;AAAA,MACzE,OAAA,EAAS,GAAA;AAAA,MACT,OAAO,IAAA,CAAK,IAAA;AAAA,MACZ,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,IAAI;AAAA,KAC3B,CAAE,CAAA;AAEF,IAAA,aAAA,CAAc,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AAC9C,IAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,CAAC,CAAA,EAAG,OAAA;AACxC,IAAA,IAAI,CAAC,aAAA,EAAe;AAAC,MAAA;AAAA,IAAS;AAG9B,IAAA,KAAA,MAAW,EAAE,SAAS,QAAA,EAAU,QAAA,MAAc,aAAA,CAAc,KAAA,CAAM,CAAC,CAAA,EAAG;AACpE,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,GAAA;AAAA,QACA,IAAA,EAAM,OAAA;AAAA,QACN,EAAA,EAAI,aAAA;AAAA,QACJ,QAAA,EAAU;AAAA,OACX,CAAA;AAED,MAAA,IAAI,CAAC,MAAA,EAAQ;AAEX,QAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,UAAA,MAAM,MAAM,QAAA,CAAS,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,OAAO,CAAA;AACjD,UAAA,IAAI,CAAC,GAAA,EAAK;AAAC,YAAA;AAAA,UAAS;AAEpB,UAAA,IAAI,GAAA,CAAI,IAAA,CAAK,YAAA,GAAe,GAAG,CAAA,EAAG;AAChC,YAAA,GAAA,CAAI,IAAA,CAAK,YAAA,CAAa,GAAG,CAAA,GAAI,aAAA;AAAA,UAC/B;AACA,UAAA,IAAI,GAAA,CAAI,IAAA,CAAK,eAAA,GAAkB,GAAG,CAAA,EAAG;AACnC,YAAA,GAAA,CAAI,IAAA,CAAK,eAAA,CAAgB,GAAG,CAAA,GAAI,aAAA;AAAA,UAClC;AAEA,UAAA,EAAA,CAAG,aAAA,CAAc,GAAA,CAAI,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,GAAI,IAAI,CAAA;AAAA,QACrE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAKA,eAAe,uBAAA,CACb,UACA,MAAA,EACmE;AACnE,EAAA,MAAM,QAAkE,EAAC;AAGzE,EAAA,MAAM,iBAAA,uBAAwB,GAAA,EAAoB;AAClD,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,IAAI,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,WAAW,CAAA,EAAG;AACpC,MAAA,iBAAA,CAAkB,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,aAAa,CAAA;AAAA,IAC/C;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,MAAM,UAAA,GAAaA,KAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AACxC,IAAA,MAAM,MAAA,GAASA,KAAA,CAAK,IAAA,CAAK,UAAA,EAAY,KAAK,CAAA;AAE1C,IAAA,IAAI,CAAC,EAAA,CAAG,UAAA,CAAW,MAAM,CAAA,EAAG;AAAC,MAAA;AAAA,IAAS;AAGtC,IAAA,MAAM,OAAA,GAAU,YAAY,MAAM,CAAA;AAClC,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,GAAG,IAAI,IAAA,CAAK,YAAA;AAAA,MACZ,GAAG,IAAI,IAAA,CAAK;AAAA,KACd;AAEA,IAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,WAAW,CAAA,IAAK,iBAAA,CAAkB,GAAA,CAAI,GAAG,CAAA,IAAK,CAAC,WAAA,CAAY,GAAG,CAAA,EAAG;AAClF,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,SAAS,GAAA,CAAI,IAAA;AAAA,UACb,GAAA,EAAK,GAAA;AAAA,UACL,OAAA,EAAS;AAAA,SACV,CAAA;AAED,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,IAAI,CAAC,GAAA,CAAI,IAAA,CAAK,YAAA,EAAc;AAC1B,YAAA,GAAA,CAAI,IAAA,CAAK,eAAe,EAAC;AAAA,UAC3B;AACA,UAAA,GAAA,CAAI,IAAA,CAAK,YAAA,CAAa,GAAG,CAAA,GAAI,aAAA;AAC7B,UAAA,EAAA,CAAG,aAAA,CAAc,GAAA,CAAI,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,GAAI,IAAI,CAAA;AAAA,QACrE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT;AAKA,eAAe,gBAAA,CACb,UACA,MAAA,EACkD;AAClD,EAAA,MAAM,UAAmD,EAAC;AAE1D,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,MAAM,UAAA,GAAaA,KAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AACxC,IAAA,MAAM,MAAA,GAASA,KAAA,CAAK,IAAA,CAAK,UAAA,EAAY,KAAK,CAAA;AAE1C,IAAA,IAAI,CAAC,EAAA,CAAG,UAAA,CAAW,MAAM,CAAA,EAAG;AAAC,MAAA;AAAA,IAAS;AAGtC,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,WAAA,CAAY,MAAM,CAAC,CAAA;AAE3C,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,GAAG,IAAI,IAAA,CAAK,YAAA;AAAA,MACZ,GAAG,IAAI,IAAA,CAAK;AAAA,KACd;AAEA,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG;AAEnC,MAAA,IAAI,cAAA,CAAe,GAAG,CAAA,EAAG;AAAC,QAAA;AAAA,MAAS;AAGnC,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,SAAS,GAAA,CAAI,IAAA;AAAA,UACb;AAAA,SACD,CAAA;AAED,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,OAAO,GAAA,CAAI,IAAA,CAAK,YAAA,GAAe,GAAG,CAAA;AAClC,UAAA,OAAO,GAAA,CAAI,IAAA,CAAK,eAAA,GAAkB,GAAG,CAAA;AACrC,UAAA,EAAA,CAAG,aAAA,CAAc,GAAA,CAAI,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA,GAAI,IAAI,CAAA;AAAA,QACrE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAKA,SAAS,YAAY,GAAA,EAAuB;AAC1C,EAAA,MAAM,UAAoB,EAAC;AAE3B,EAAA,SAAS,KAAK,UAAA,EAAoB;AAChC,IAAA,MAAM,UAAU,EAAA,CAAG,WAAA,CAAY,YAAY,EAAE,aAAA,EAAe,MAAM,CAAA;AAElE,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAM,QAAA,GAAWA,KAAA,CAAK,IAAA,CAAK,UAAA,EAAY,MAAM,IAAI,CAAA;AAEjD,MAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,QAAA,IAAA,CAAK,QAAQ,CAAA;AAAA,MACf,CAAA,MAAA,IAAW,MAAM,MAAA,EAAO,IAAK,qBAAqB,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,EAAG;AAClE,QAAA,MAAM,OAAA,GAAU,EAAA,CAAG,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AAGjD,QAAA,MAAM,WAAA,GAAc,8CAAA;AACpB,QAAA,IAAI,KAAA;AACJ,QAAA,OAAA,CAAQ,KAAA,GAAQ,WAAA,CAAY,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AACnD,UAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACnB,UAAA,IAAI,CAAC,GAAA,EAAK;AAAC,YAAA;AAAA,UAAS;AAEpB,UAAA,MAAM,OAAA,GAAU,IAAI,UAAA,CAAW,GAAG,IAAI,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA,GAAI,IAAI,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAC7F,UAAA,IAAI,OAAA,EAAS;AACX,YAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAA,CAAK,GAAG,CAAA;AACR,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,OAAO,CAAC,CAAA;AACpC;AAKA,SAAS,eAAe,GAAA,EAAsB;AAC5C,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,YAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO,cAAc,IAAA,CAAK,CAAA,CAAA,KAAK,GAAA,KAAQ,CAAA,IAAK,IAAI,UAAA,CAAW,CAAA,EAAG,CAAC,CAAA,CAAA,CAAG,KAAK,GAAA,CAAI,UAAA,CAAW,CAAA,CAAA,EAAI,CAAC,GAAG,CAAC,CAAA;AACjG;AAKA,SAAS,WAAA,CAAY,KAAA,EAAY,KAAA,EAAY,EAAA,EAAS;AACpD,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,EAAA,EAAI,OAAO,KAAK,CAAA;AAChB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,WAAuD,EAAC;AAE9D,EAAA,QAAA,CAAS,IAAA,CAAK;AAAA,IACZ,MAAA,EAAQ,UAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,CAAA,gBAAA,EAAmB,MAAM,aAAa,CAAA,CAAA;AAAA,MACtC,CAAA,oBAAA,EAAuB,MAAM,SAAS,CAAA,CAAA;AAAA,MACtC,CAAA,oBAAA,EAAuB,MAAM,UAAU,CAAA;AAAA;AACzC,GACD,CAAA;AAED,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC5B,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,kBAAA;AAAA,MACR,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAW,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,UAAA,CAAY;AAAA,KACvE,CAAA;AAAA,EACH;AAEA,EAAA,EAAA,EAAI,UAAU,uBAAA,EAAyB;AAAA,IACrC,KAAA,EAAO,iCAAA;AAAA,IACP;AAAA,GACD,CAAA;AACH;AAKA,SAAS,aAAA,CAAc,MAAA,EAAmB,KAAA,EAAY,EAAA,EAAS;AAC7D,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,EAAA,EAAI,OAAO,MAAM,CAAA;AACjB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,WAAuD,EAAC;AAG9D,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,CAAA,kBAAA,EAAqB,OAAO,eAAe,CAAA,CAAA;AAAA,IAC3C,CAAA,MAAA,EAAS,MAAA,CAAO,MAAA,GAAS,wCAAA,GAAoC,wBAAmB,CAAA;AAAA,GAClF;AACA,EAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAO,cAAc,CAAA;AAGxD,EAAA,IAAI,MAAA,CAAO,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACjC,IAAA,MAAM,YAAA,GAAe,OAAO,WAAA,CAAY,GAAA;AAAA,MACtC,CAAA,CAAA,KAAK,CAAA,EAAG,CAAA,CAAE,GAAG,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,QAAA,EAAM,CAAA,CAAE,EAAE,CAAA,EAAA,EAAK,CAAA,CAAE,SAAS,MAAM,CAAA,UAAA;AAAA,KAC1D;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,kBAAA,EAAoB,KAAA,EAAO,aAAa,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG,CAAA;AAC9E,IAAA,IAAI,MAAA,CAAO,WAAA,CAAY,MAAA,GAAS,EAAA,EAAI;AAClC,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAChD,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,WAAA,CAAY,MAAM,IAAA,CAAK,CAAA,QAAA,EAAW,OAAO,WAAA,CAAY,MAAA,GAAS,EAAE,CAAA,KAAA,CAAO,CAAA;AAAA,MACzE;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AAC/B,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAG,CAAA,CAAE,OAAO,CAAA,GAAA,EAAM,CAAA,CAAE,GAAG,CAAA,CAAE,CAAA;AACtE,IAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,oBAAA,EAAsB,KAAA,EAAO,WAAW,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG,CAAA;AAC9E,IAAA,IAAI,MAAA,CAAO,SAAA,CAAU,MAAA,GAAS,EAAA,EAAI;AAChC,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAChD,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,WAAA,CAAY,MAAM,IAAA,CAAK,CAAA,QAAA,EAAW,OAAO,SAAA,CAAU,MAAA,GAAS,EAAE,CAAA,KAAA,CAAO,CAAA;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,CAAO,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACjC,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,WAAA,CAAY,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAG,CAAA,CAAE,OAAO,CAAA,GAAA,EAAM,CAAA,CAAE,GAAG,CAAA,CAAE,CAAA;AAC1E,IAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,sBAAA,EAAwB,KAAA,EAAO,aAAa,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG,CAAA;AAClF,IAAA,IAAI,MAAA,CAAO,WAAA,CAAY,MAAA,GAAS,EAAA,EAAI;AAClC,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAChD,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,WAAA,CAAY,MAAM,IAAA,CAAK,CAAA,QAAA,EAAW,OAAO,WAAA,CAAY,MAAA,GAAS,EAAE,CAAA,KAAA,CAAO,CAAA;AAAA,MACzE;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IACE,MAAA,CAAO,WAAA,CAAY,MAAA,KAAW,CAAA,IAC9B,MAAA,CAAO,SAAA,CAAU,MAAA,KAAW,CAAA,IAC5B,MAAA,CAAO,WAAA,CAAY,MAAA,KAAW,CAAA,EAC9B;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAC,yBAAoB,GAAG,CAAA;AAAA,EACnE;AAGA,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,MAAA,CAAO,WAAA,CAAY,MAAA,GAAS,CAAA,IAAK,MAAA,CAAO,SAAA,CAAU,MAAA,GAAS,CAAA,IAAK,MAAA,CAAO,WAAA,CAAY,SAAS,CAAA,CAAA,EAAI;AACpH,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,YAAA;AAAA,MACR,KAAA,EAAO,CAAC,wCAAA,EAA0C,2CAA2C;AAAA,KAC9F,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,GAAS,kCAAA,GAA8B,gCAAA;AAE5D,EAAA,EAAA,EAAI,UAAU,0BAAA,EAA4B;AAAA,IACxC,KAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AC3gBA,IAAO,iBAAQL,aAAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,gBAAA;AAAA,EACJ,WAAA,EAAa,6BAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAkD;AACpF,MAAA,MAAM,EAAE,EAAA,EAAI,QAAA,EAAS,GAAI,GAAA;AAGzB,MAAA,MAAM,KAAA,GAAS,MAAc,KAAA,IAAS,KAAA;AAGtC,MAAA,MAAM,SAAS,MAAM,eAAA,CAAgB,GAAA,CAAI,GAAA,EAAK,MAAM,OAAO,CAAA;AAG3D,MAAA,MAAM,QAAA,CAAS,MAAM,GAAA,CAAIC,UAAAA,CAAW,QAAQ,MAAA,EAAQ,CAAA,GAAI,KAAK,GAAI,CAAA;AAGjE,MAAA,MAAM,QAAA,CAAS,SAAA,CAAU,KAAA,CAAM,gBAAA,EAAkB;AAAA,QAC/C,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,UAAA,EAAY,OAAO,MAAA,CAAO,MAAA;AAAA,QAC1B,eAAA,EAAiB,CAAC,CAAC,KAAA,CAAM;AAAA,OAC1B,CAAA;AAGD,MAAA,YAAA,CAAa,MAAA,EAAQ,OAAO,EAAE,CAAA;AAE9B,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,MAAA,CAAO,KAAA,GAAQ,EAAA,GAAK,CAAA,GAAI,CAAA;AAAA,QAClC,MAAA,EAAQ;AAAA,OACV;AAAA,IACF;AAAA;AAEJ,CAAC;AAKD,SAASK,aAAAA,CAAa,SAAiB,eAAA,EAAoC;AACzE,EAAA,MAAM,WAAqB,EAAC;AAE5B,EAAA,IAAI,CAACC,EAAAA,CAAG,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAUA,EAAAA,CAAG,WAAA,CAAY,SAAS,EAAE,aAAA,EAAe,MAAM,CAAA;AAE/D,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,CAAC,MAAM,WAAA,EAAY,IAAK,CAAC,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,EAAG;AAAC,MAAA;AAAA,IAAS;AAE1E,IAAA,MAAM,QAAA,GAAWF,KAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,CAAA;AAC9C,IAAA,MAAM,WAAA,GAAcA,KAAAA,CAAK,IAAA,CAAK,QAAA,EAAU,UAAU,CAAA;AAElD,IAAA,IAAI,CAACE,EAAAA,CAAG,UAAA,CAAW,WAAW,CAAA,EAAG;AAAC,MAAA;AAAA,IAAS;AAE3C,IAAA,MAAM,cAAcA,EAAAA,CAAG,WAAA,CAAY,aAAa,EAAE,aAAA,EAAe,MAAM,CAAA;AAEvE,IAAA,KAAA,MAAW,UAAU,WAAA,EAAa;AAChC,MAAA,IAAI,CAAC,MAAA,CAAO,WAAA,EAAY,EAAG;AAAC,QAAA;AAAA,MAAS;AAErC,MAAA,MAAM,kBAAkBF,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,MAAA,CAAO,MAAM,cAAc,CAAA;AAE1E,MAAA,IAAIE,EAAAA,CAAG,UAAA,CAAW,eAAe,CAAA,EAAG;AAElC,QAAA,IAAI,eAAA,EAAiB;AACnB,UAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAMA,GAAG,YAAA,CAAa,eAAA,EAAiB,OAAO,CAAC,CAAA;AACpE,UAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,eAAA,IAAmB,MAAA,CAAO,SAAS,eAAA,EAAiB;AACvE,YAAA,QAAA,CAAS,KAAK,eAAe,CAAA;AAAA,UAC/B;AAAA,QACF,CAAA,MAAO;AACL,UAAA,QAAA,CAAS,KAAK,eAAe,CAAA;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAKA,eAAe,eAAA,CAAgB,SAAiB,eAAA,EAAgD;AAC9F,EAAA,MAAM,QAAA,GAAWD,aAAAA,CAAa,OAAA,EAAS,eAAe,CAAA;AACtD,EAAA,IAAI,KAAA,GAAQ,GAAA;AACZ,EAAA,MAAM,SAAkB,EAAC;AAGzB,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAyB;AAE7C,EAAA,KAAA,MAAW,eAAe,QAAA,EAAU;AAClC,IAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAMC,GAAG,YAAA,CAAa,WAAA,EAAa,OAAO,CAAC,CAAA;AACpE,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,GAAG,WAAA,CAAY,YAAA;AAAA,MACf,GAAG,WAAA,CAAY;AAAA,KACjB;AAEA,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AACjD,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,kBAAK,IAAI,GAAA,EAAK,CAAA;AAAA,MAC5B;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,CAAG,GAAA,CAAI,OAAiB,CAAA;AAAA,IACzC;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,CAAA,CAC5C,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,QAAQ,CAAA,KAAM,SAAS,IAAA,GAAO,CAAC,CAAA,CAC3C,MAAA,CAAO,CAAC,CAAC,GAAG,CAAA,KAAM,CAAC,GAAA,CAAI,UAAA,CAAW,WAAW,CAAC,CAAA;AAEjD,EAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,IAAA,MAAM,UAAU,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,UAAA,CAAW,SAAS,CAAC,CAAA;AAClD,IAAA,KAAA,IAAS,OAAA;AACT,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,YAAA;AAAA,MACN,QAAA,EAAU,SAAA;AAAA,MACV,OAAA,EAAS,CAAA,EAAG,UAAA,CAAW,MAAM,6BAA6B,OAAO,CAAA,CAAA;AAAA,KAClE,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,cAAA,GAAiB,CAAA;AACrB,EAAA,KAAA,MAAW,eAAe,QAAA,EAAU;AAClC,IAAA,MAAM,UAAA,GAAaF,KAAAA,CAAK,OAAA,CAAQ,WAAW,CAAA;AAC3C,IAAA,MAAM,UAAA,GAAaA,KAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,WAAW,CAAA;AACpD,IAAA,IAAI,CAACE,EAAAA,CAAG,UAAA,CAAW,UAAU,CAAA,EAAG;AAC9B,MAAA,cAAA,EAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,cAAc,CAAA;AAC3C,IAAA,KAAA,IAAS,OAAA;AACT,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,cAAA;AAAA,MACN,QAAA,EAAU,SAAA;AAAA,MACV,OAAA,EAAS,CAAA,EAAG,cAAc,CAAA,2BAAA,EAA8B,OAAO,CAAA,CAAA;AAAA,KAChE,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,KAAA,MAAW,eAAe,QAAA,EAAU;AAClC,IAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAMA,GAAG,YAAA,CAAa,WAAA,EAAa,OAAO,CAAC,CAAA;AACpE,IAAA,MAAM,cAAc,WAAA,CAAY,IAAA;AAEhC,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,WAAA,CAAY,UAAA,CAAW,WAAW,CAAA,EAAG;AACxD,MAAA,YAAA,EAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,eAAe,CAAA,EAAG;AACpB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,eAAe,CAAC,CAAA;AAC7C,IAAA,KAAA,IAAS,OAAA;AACT,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAS,CAAA,EAAG,YAAY,CAAA,+BAAA,EAAkC,OAAO,CAAA,CAAA;AAAA,KAClE,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,YAAA,GAAe,CAAA;AACnB,EAAA,KAAA,MAAW,eAAe,QAAA,EAAU;AAClC,IAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAMA,GAAG,YAAA,CAAa,WAAA,EAAa,OAAO,CAAC,CAAA;AAEpE,IAAA,IAAI,CAAC,WAAA,CAAY,KAAA,IAAS,CAAC,YAAY,OAAA,EAAS;AAC9C,MAAA,YAAA,EAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,eAAe,CAAA,EAAG;AACpB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,YAAY,CAAA;AACzC,IAAA,KAAA,IAAS,OAAA;AACT,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,eAAA;AAAA,MACN,QAAA,EAAU,SAAA;AAAA,MACV,OAAA,EAAS,CAAA,EAAG,YAAY,CAAA,gCAAA,EAAmC,OAAO,CAAA,CAAA;AAAA,KACnE,CAAA;AAAA,EACH;AAGA,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,SAAS,EAAA,EAAI;AAAC,IAAA,KAAA,GAAQ,GAAA;AAAA,EAAI,CAAA,MAAA,IACrB,SAAS,EAAA,EAAI;AAAC,IAAA,KAAA,GAAQ,GAAA;AAAA,EAAI,CAAA,MAAA,IAC1B,SAAS,EAAA,EAAI;AAAC,IAAA,KAAA,GAAQ,GAAA;AAAA,EAAI,CAAA,MAAA,IAC1B,SAAS,EAAA,EAAI;AAAC,IAAA,KAAA,GAAQ,GAAA;AAAA,EAAI,CAAA,MAC9B;AAAC,IAAA,KAAA,GAAQ,GAAA;AAAA,EAAI;AAElB,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAA;AAAA,IACxB,KAAA;AAAA,IACA;AAAA,GACF;AACF;AAKA,SAAS,YAAA,CAAa,MAAA,EAAqB,KAAA,EAAY,EAAA,EAAS;AAC9D,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,EAAA,EAAI,OAAO,MAAM,CAAA;AACjB,IAAA;AAAA,EACF;AAGA,EAAA,MAAM,WAAuD,EAAC;AAG9D,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,CAAA,OAAA,EAAU,OAAO,KAAK,CAAA,IAAA,CAAA;AAAA,IACtB,CAAA,OAAA,EAAU,OAAO,KAAK,CAAA,CAAA;AAAA,IACtB,CAAA,QAAA,EAAW,OAAO,KAAA,IAAS,EAAA,GAAK,mBAAc,MAAA,CAAO,KAAA,IAAS,EAAA,GAAK,8BAAA,GAAuB,iBAAY,CAAA;AAAA,GACxG;AACA,EAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,cAAA,EAAgB,KAAA,EAAO,YAAY,CAAA;AAG3D,EAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC5B,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAA,KAAA,KAAS;AAC5C,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,KAAa,UAAA,GAAa,WAAM,KAAA,CAAM,QAAA,KAAa,YAAY,cAAA,GAAO,cAAA;AACzF,MAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,CAAA,CAAA;AAAA,IACjC,CAAC,CAAA;AAED,IAAA,IAAI,MAAM,QAAA,EAAU;AAClB,MAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,mBAAA,EAAqB,KAAA,EAAO,YAAY,CAAA;AAAA,IAClE,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,QAAA,EAAU,KAAA,EAAO,YAAY,CAAA;AAAA,IACvD;AAAA,EACF,CAAA,MAAO;AACL,IAAA,QAAA,CAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAC,yBAAoB,GAAG,CAAA;AAAA,EACnE;AAGA,EAAA,IAAI,MAAA,CAAO,QAAQ,EAAA,EAAI;AACrB,IAAA,MAAM,kBAA4B,EAAC;AAEnC,IAAA,IAAI,OAAO,MAAA,CAAO,IAAA,CAAK,OAAK,CAAA,CAAE,IAAA,KAAS,YAAY,CAAA,EAAG;AACpD,MAAA,eAAA,CAAgB,KAAK,8DAA8D,CAAA;AAAA,IACrF;AACA,IAAA,IAAI,OAAO,MAAA,CAAO,IAAA,CAAK,OAAK,CAAA,CAAE,IAAA,KAAS,cAAc,CAAA,EAAG;AACtD,MAAA,eAAA,CAAgB,KAAK,iCAAiC,CAAA;AAAA,IACxD;AACA,IAAA,IAAI,OAAO,MAAA,CAAO,IAAA,CAAK,OAAK,CAAA,CAAE,IAAA,KAAS,eAAe,CAAA,EAAG;AACvD,MAAA,eAAA,CAAgB,KAAK,4DAA4D,CAAA;AAAA,IACnF;AAEA,IAAA,IAAI,eAAA,CAAgB,SAAS,CAAA,EAAG;AAC9B,MAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,iBAAA,EAAmB,KAAA,EAAO,iBAAiB,CAAA;AAAA,IACrE;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,EAAA,GAC1B,8CACA,MAAA,CAAO,KAAA,IAAS,KAChB,mDAAA,GACA,+CAAA;AAEJ,EAAA,EAAA,EAAI,UAAU,wBAAA,EAA0B;AAAA,IACtC,KAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;ACpQA,IAAO,gBAAQP,aAAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,eAAA;AAAA,EACJ,WAAA,EAAa,2CAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAgD;AAClF,MAAA,MAAM,EAAE,EAAA,EAAI,QAAA,EAAS,GAAI,GAAA;AAGzB,MAAA,MAAM,KAAA,GAAS,MAAc,KAAA,IAAS,KAAA;AAGtC,MAAA,IAAI,CAAC,MAAM,OAAA,EAAS;AAClB,QAAA,MAAM,SAAS,MAAM,QAAA,CAAS,KAAA,CAAM,GAAA,CAAiBC,WAAW,KAAK,CAAA;AACrE,QAAA,IAAI,MAAA,EAAQ;AACV,UAAAO,YAAAA,CAAY,MAAA,EAAQ,KAAA,EAAO,EAAE,CAAA;AAC7B,UAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,QACvB;AAAA,MACF;AAGA,MAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAGxC,MAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,QAAA,KAAA,CAAM,MAAA,GAAS,qBAAqB,KAAK,CAAA;AAAA,MAC3C;AAGA,MAAA,MAAM,QAAA,CAAS,MAAM,GAAA,CAAIP,UAAAA,CAAW,OAAO,KAAA,EAAO,CAAA,GAAI,KAAK,GAAI,CAAA;AAG/D,MAAA,MAAM,QAAA,CAAS,SAAA,CAAU,KAAA,CAAM,eAAA,EAAiB;AAAA,QAC9C,QAAA,EAAU,MAAM,QAAA,CAAS,aAAA;AAAA,QACzB,YAAA,EAAc,MAAM,QAAA,CAAS,iBAAA;AAAA,QAC7B,UAAA,EAAY,MAAM,MAAA,IAAU;AAAA,OAC7B,CAAA;AAGD,MAAAO,YAAAA,CAAY,KAAA,EAAO,KAAA,EAAO,EAAE,CAAA;AAE5B,MAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,IACvB;AAAA;AAEJ,CAAC;AAKD,SAASF,cAAa,OAAA,EAA2B;AAC/C,EAAA,MAAM,WAAqB,EAAC;AAE5B,EAAA,IAAI,CAACC,EAAAA,CAAG,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAUA,EAAAA,CAAG,WAAA,CAAY,SAAS,EAAE,aAAA,EAAe,MAAM,CAAA;AAE/D,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,IAAI,CAAC,MAAM,WAAA,EAAY,IAAK,CAAC,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,EAAG;AAAC,MAAA;AAAA,IAAS;AAE1E,IAAA,MAAM,QAAA,GAAWF,KAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAM,IAAI,CAAA;AAC9C,IAAA,MAAM,WAAA,GAAcA,KAAAA,CAAK,IAAA,CAAK,QAAA,EAAU,UAAU,CAAA;AAElD,IAAA,IAAI,CAACE,EAAAA,CAAG,UAAA,CAAW,WAAW,CAAA,EAAG;AAAC,MAAA;AAAA,IAAS;AAE3C,IAAA,MAAM,cAAcA,EAAAA,CAAG,WAAA,CAAY,aAAa,EAAE,aAAA,EAAe,MAAM,CAAA;AAEvE,IAAA,KAAA,MAAW,UAAU,WAAA,EAAa;AAChC,MAAA,IAAI,CAAC,MAAA,CAAO,WAAA,EAAY,EAAG;AAAC,QAAA;AAAA,MAAS;AAErC,MAAA,MAAM,kBAAkBF,KAAAA,CAAK,IAAA,CAAK,WAAA,EAAa,MAAA,CAAO,MAAM,cAAc,CAAA;AAE1E,MAAA,IAAIE,EAAAA,CAAG,UAAA,CAAW,eAAe,CAAA,EAAG;AAClC,QAAA,QAAA,CAAS,KAAK,eAAe,CAAA;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAKA,SAAS,cAAc,UAAA,EAAqE;AAC1F,EAAA,MAAM,MAAA,GAASF,KAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,KAAK,CAAA;AAC1C,EAAA,IAAI,CAACE,EAAAA,CAAG,UAAA,CAAW,MAAM,CAAA,EAAG;AAC1B,IAAA,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,EACxC;AAEA,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,SAAS,KAAK,GAAA,EAAa;AACzB,IAAA,MAAM,UAAUA,EAAAA,CAAG,WAAA,CAAY,KAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAE3D,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAM,QAAA,GAAWF,KAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,MAAM,IAAI,CAAA;AAE1C,MAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,QAAA,IAAA,CAAK,QAAQ,CAAA;AAAA,MACf,CAAA,MAAA,IAAW,MAAM,MAAA,EAAO,IAAK,qBAAqB,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,EAAG;AAClE,QAAA,KAAA,EAAA;AACA,QAAA,MAAM,OAAA,GAAUE,EAAAA,CAAG,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AACjD,QAAA,KAAA,IAAS,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA;AAC7B,QAAA,KAAA,IAAS,MAAA,CAAO,UAAA,CAAW,OAAA,EAAS,OAAO,CAAA;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAA,CAAK,MAAM,CAAA;AACX,EAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAC/B;AAKA,eAAe,aAAa,OAAA,EAAuC;AACjE,EAAA,MAAM,QAAA,GAAWD,cAAa,OAAO,CAAA;AAErC,EAAA,MAAM,KAAA,GAAqB;AAAA,IACzB,QAAA,EAAU;AAAA,MACR,aAAA,EAAe,CAAA;AAAA,MACf,iBAAA,EAAmB,CAAA;AAAA,MACnB,UAAA,EAAY,CAAA;AAAA,MACZ,UAAA,EAAY,CAAA;AAAA,MACZ,UAAA,EAAY;AAAA,KACd;AAAA,IACA,cAAc,EAAC;AAAA,IACf,YAAA,EAAc;AAAA,MACZ,KAAA,EAAO,CAAA;AAAA,MACP,SAAA,EAAW,CAAA;AAAA,MACX,QAAA,EAAU,CAAA;AAAA,MACV,UAAA,EAAY,CAAA;AAAA,MACZ,SAAS;AAAC,KACZ;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA,EAAO,CAAA;AAAA,MACP,KAAA,EAAO,GAAA;AAAA,MACP,QAAQ;AAAC,KACX;AAAA,IACA,iBAAiB;AAAC,GACpB;AAEA,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAoB;AAExC,EAAA,KAAA,MAAW,eAAe,QAAA,EAAU;AAClC,IAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAMC,GAAG,YAAA,CAAa,WAAA,EAAa,OAAO,CAAC,CAAA;AACpE,IAAA,MAAM,cAAc,WAAA,CAAY,IAAA;AAEhC,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,WAAA,CAAY,UAAA,CAAW,WAAW,CAAA,EAAG;AAAC,MAAA;AAAA,IAAS;AAEpE,IAAA,KAAA,CAAM,QAAA,CAAS,aAAA,EAAA;AAEf,IAAA,MAAM,UAAA,GAAaF,KAAAA,CAAK,OAAA,CAAQ,WAAW,CAAA;AAC3C,IAAA,MAAM,QAAA,GAAWA,MAAK,QAAA,CAASA,KAAAA,CAAK,QAAQA,KAAAA,CAAK,OAAA,CAAQ,UAAU,CAAC,CAAC,CAAA;AAErE,IAAA,KAAA,CAAM,IAAI,QAAQ,CAAA;AAElB,IAAA,MAAM,IAAA,GAAO,cAAc,UAAU,CAAA;AACrC,IAAA,KAAA,CAAM,QAAA,CAAS,cAAc,IAAA,CAAK,KAAA;AAClC,IAAA,KAAA,CAAM,QAAA,CAAS,cAAc,IAAA,CAAK,KAAA;AAClC,IAAA,KAAA,CAAM,QAAA,CAAS,cAAc,IAAA,CAAK,KAAA;AAGlC,IAAA,IAAI,CAAC,KAAA,CAAM,YAAA,CAAa,QAAQ,CAAA,EAAG;AACjC,MAAA,KAAA,CAAM,YAAA,CAAa,QAAQ,CAAA,GAAI;AAAA,QAC7B,IAAA,EAAM,QAAA;AAAA,QACN,QAAA,EAAU,CAAA;AAAA,QACV,KAAA,EAAO,CAAA;AAAA,QACP,KAAA,EAAO,CAAA;AAAA,QACP,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,YAAA,CAAa,QAAQ,CAAA,CAAE,QAAA,EAAA;AAC7B,IAAA,KAAA,CAAM,YAAA,CAAa,QAAQ,CAAA,CAAE,KAAA,IAAS,IAAA,CAAK,KAAA;AAC3C,IAAA,KAAA,CAAM,YAAA,CAAa,QAAQ,CAAA,CAAE,KAAA,IAAS,IAAA,CAAK,KAAA;AAC3C,IAAA,KAAA,CAAM,YAAA,CAAa,QAAQ,CAAA,CAAE,KAAA,IAAS,IAAA,CAAK,KAAA;AAG3C,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,GAAG,WAAA,CAAY,YAAA;AAAA,MACf,GAAG,WAAA,CAAY;AAAA,KACjB;AAEA,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG;AACnC,MAAA,KAAA,CAAM,YAAA,CAAa,KAAA,EAAA;AAEnB,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC/B,QAAA,KAAA,CAAM,YAAA,CAAa,SAAA,EAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,YAAA,CAAa,QAAA,EAAA;AAAA,MACrB;AAEA,MAAA,OAAA,CAAQ,IAAI,GAAA,EAAA,CAAM,OAAA,CAAQ,IAAI,GAAG,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,IAC9C;AAGA,IAAA,KAAA,CAAM,gBAAgB,IAAA,CAAK;AAAA,MACzB,IAAA,EAAM,WAAA;AAAA,MACN,UAAA,EAAY,QAAA;AAAA,MACZ,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,OAAO,IAAA,CAAK;AAAA,KACb,CAAA;AAAA,EACH;AAEA,EAAA,KAAA,CAAM,QAAA,CAAS,oBAAoB,KAAA,CAAM,IAAA;AAGzC,EAAA,KAAA,CAAM,YAAA,CAAa,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,CAAA,KAAA,KAAS,KAAA,GAAQ,CAAC,CAAA,CAAE,MAAA;AAGxF,EAAA,KAAA,CAAM,YAAA,CAAa,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,QAAQ,OAAA,EAAS,CAAA,CACtD,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAC1B,KAAA,CAAM,CAAA,EAAG,EAAE,EACX,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,MAAO,EAAE,IAAA,EAAM,OAAM,CAAE,CAAA;AAG3C,EAAA,KAAA,CAAM,eAAA,CAAgB,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AACtD,EAAA,KAAA,CAAM,eAAA,GAAkB,KAAA,CAAM,eAAA,CAAgB,KAAA,CAAM,GAAG,EAAE,CAAA;AAEzD,EAAA,OAAO,KAAA;AACT;AAKA,SAAS,qBAAqB,KAAA,EAAoB;AAChD,EAAA,IAAI,KAAA,GAAQ,GAAA;AACZ,EAAA,MAAM,SAAkB,EAAC;AAGzB,EAAA,IAAI,KAAA,CAAM,YAAA,CAAa,UAAA,GAAa,CAAA,EAAG;AACrC,IAAA,MAAM,UAAU,IAAA,CAAK,GAAA,CAAI,IAAI,KAAA,CAAM,YAAA,CAAa,aAAa,CAAC,CAAA;AAC9D,IAAA,KAAA,IAAS,OAAA;AACT,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,IAAA,EAAM,YAAA;AAAA,MACN,QAAA,EAAU,SAAA;AAAA,MACV,SAAS,CAAA,EAAG,KAAA,CAAM,YAAA,CAAa,UAAU,6BAA6B,OAAO,CAAA,CAAA;AAAA,KAC9E,CAAA;AAAA,EACH;AAMA,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,SAAS,EAAA,EAAI;AAAC,IAAA,KAAA,GAAQ,GAAA;AAAA,EAAI,CAAA,MAAA,IACrB,SAAS,EAAA,EAAI;AAAC,IAAA,KAAA,GAAQ,GAAA;AAAA,EAAI,CAAA,MAAA,IAC1B,SAAS,EAAA,EAAI;AAAC,IAAA,KAAA,GAAQ,GAAA;AAAA,EAAI,CAAA,MAAA,IAC1B,SAAS,EAAA,EAAI;AAAC,IAAA,KAAA,GAAQ,GAAA;AAAA,EAAI,CAAA,MAC9B;AAAC,IAAA,KAAA,GAAQ,GAAA;AAAA,EAAI;AAElB,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACF;AAKA,SAASG,YAAAA,CAAY,KAAA,EAAoB,KAAA,EAAY,EAAA,EAAS;AAC5D,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,EAAA,EAAI,OAAO,KAAK,CAAA;AAChB,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,MAAM,EAAA,EAAI;AACZ,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA;AAAA,EACF;AAGA,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,CAAA,UAAA,EAAa,KAAA,CAAM,QAAA,CAAS,aAAa,CAAA,CAAA;AAAA,IACzC,CAAA,cAAA,EAAiB,KAAA,CAAM,QAAA,CAAS,iBAAiB,CAAA,CAAA;AAAA,IACjD,CAAA,eAAA,EAAkB,KAAA,CAAM,QAAA,CAAS,UAAA,CAAW,gBAAgB,CAAA,CAAA;AAAA,IAC5D,CAAA,YAAA,EAAe,WAAA,CAAY,KAAA,CAAM,QAAA,CAAS,UAAU,CAAC,CAAA;AAAA,GACvD;AAEA,EAAA,MAAM,QAAA,GAAuD;AAAA,IAC3D,EAAE,MAAA,EAAQ,UAAA,EAAY,KAAA,EAAO,aAAA;AAAc,GAC7C;AAGA,EAAA,IAAI,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,MAAA,EAAQ;AAChC,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,UAAU,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA,YAAA,EAAe,KAAA,CAAM,OAAO,KAAK,CAAA,CAAA;AAAA,KAC/D;AAEA,IAAA,IAAI,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAClC,MAAA,WAAA,CAAY,KAAK,EAAE,CAAA;AACnB,MAAA,WAAA,CAAY,KAAK,SAAS,CAAA;AAC1B,MAAA,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,CAAA,KAAA,KAAS;AACnC,QAAA,WAAA,CAAY,IAAA,CAAK,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,MACvC,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,cAAA,EAAgB,KAAA,EAAO,aAAa,CAAA;AAAA,EAC9D;AAGA,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA,CAC9C,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,CAAA,CAChC,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CACV,GAAA,CAAI,CAAA,IAAA,KAAQ,CAAA,EAAG,KAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAM,cAAA,EAAgB,CAAA,QAAA,EAAW,IAAA,CAAK,QAAQ,CAAA,OAAA,CAAS,CAAA;AAE5F,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,QAAA,CAAS,KAAK,EAAE,MAAA,EAAQ,kBAAA,EAAoB,KAAA,EAAO,UAAU,CAAA;AAAA,EAC/D;AAEA,EAAA,EAAA,EAAI,UAAU,mCAAA,EAAqC;AAAA,IACjD,KAAA,EAAO,uCAAA;AAAA,IACP;AAAA,GACD,CAAA;AACH;AAKA,SAAS,eAAe,KAAA,EAAoB;AAC1C,EAAA,OAAA,CAAQ,IAAI,iCAAiC,CAAA;AAC7C,EAAA,OAAA,CAAQ,IAAI,eAAe,CAAA;AAC3B,EAAA,OAAA,CAAQ,IAAI,oBAAoB,CAAA;AAChC,EAAA,OAAA,CAAQ,IAAI,oBAAoB,CAAA;AAChC,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,KAAA,CAAM,QAAA,CAAS,aAAa,CAAA,EAAA,CAAI,CAAA;AAC5D,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iBAAA,EAAoB,KAAA,CAAM,QAAA,CAAS,iBAAiB,CAAA,EAAA,CAAI,CAAA;AACpE,EAAA,OAAA,CAAQ,IAAI,CAAA,kBAAA,EAAqB,KAAA,CAAM,SAAS,UAAA,CAAW,cAAA,EAAgB,CAAA,EAAA,CAAI,CAAA;AAC/E,EAAA,OAAA,CAAQ,IAAI,CAAA,eAAA,EAAkB,WAAA,CAAY,KAAA,CAAM,QAAA,CAAS,UAAU,CAAC,CAAA;AAAA,CAAM,CAAA;AAE1E,EAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,IAAA,OAAA,CAAQ,IAAI,mBAAmB,CAAA;AAC/B,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA,cAAA,EAAiB,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,CAAK,CAAA;AAE3E,IAAA,IAAI,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAClC,MAAA,OAAA,CAAQ,IAAI,cAAc,CAAA;AAC1B,MAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,MAAA,CAAO,MAAA,EAAQ;AACvC,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,MAClC;AACA,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,IAAI,oBAAoB,CAAA;AAChC,EAAA,OAAA,CAAQ,IAAI,0CAA0C,CAAA;AACtD,EAAA,OAAA,CAAQ,IAAI,0CAA0C,CAAA;AACtD,EAAA,KAAA,MAAW,CAAC,MAAM,IAAI,CAAA,IAAK,OAAO,OAAA,CAAQ,KAAA,CAAM,YAAY,CAAA,EAAG;AAC7D,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,GAAA,EAAM,IAAA,CAAK,QAAQ,CAAA,GAAA,EAAM,IAAA,CAAK,KAAA,CAAM,cAAA,EAAgB,CAAA,GAAA,EAAM,WAAA,CAAY,IAAA,CAAK,KAAK,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,EAC5G;AACF;AAKA,SAAS,YAAY,KAAA,EAAuB;AAC1C,EAAA,IAAI,UAAU,CAAA,EAAG;AAAC,IAAA,OAAO,KAAA;AAAA,EAAM;AAC/B,EAAA,MAAM,CAAA,GAAI,IAAA;AACV,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAA,EAAK,IAAA,EAAM,MAAM,IAAI,CAAA;AACpC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAClD,EAAA,OAAO,CAAA,EAAA,CAAI,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAC3D;ACvWA,IAAO,oBAAQR,aAAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,mBAAA;AAAA,EACJ,WAAA,EAAa,4BAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAwD;AAC1F,MAAA,MAAM,EAAE,IAAG,GAAI,GAAA;AAGf,MAAA,MAAM,KAAA,GAAS,MAAc,KAAA,IAAS,KAAA;AAGtC,MAAA,MAAM,KAAA,GAAQG,oBAAAA,CAAqB,GAAA,CAAI,GAAG,CAAA;AAG1C,MAAA,IAAI,MAAM,GAAA,EAAK;AACb,QAAA,SAAA,CAAU,KAAA,EAAO,OAAO,EAAE,CAAA;AAAA,MAC5B,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,OAAA,EAAS;AACtC,QAAA,UAAA,CAAW,KAAA,EAAO,KAAA,CAAM,OAAA,EAAS,KAAA,EAAO,EAAE,CAAA;AAAA,MAC5C,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,OAAA,EAAS;AACzC,QAAA,aAAA,CAAc,KAAA,EAAO,KAAA,CAAM,OAAA,EAAS,KAAA,EAAO,EAAE,CAAA;AAAA,MAC/C,CAAA,MAAA,IAAW,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,OAAA,EAAS;AACxC,QAAA,YAAA,CAAa,KAAA,EAAO,KAAA,CAAM,OAAA,EAAS,KAAA,EAAO,EAAE,CAAA;AAAA,MAC9C,CAAA,MAAA,IAAW,MAAM,KAAA,EAAO;AACtB,QAAAK,YAAAA,CAAY,KAAA,EAAO,KAAA,EAAO,EAAE,CAAA;AAAA,MAC9B,CAAA,MAAO;AAEL,QAAAA,YAAAA,CAAY,KAAA,EAAO,KAAA,EAAO,EAAE,CAAA;AAAA,MAC9B;AAEA,MAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,IACvB;AAAA;AAEJ,CAAC;AAKD,SAAS,UAAA,CAAW,KAAA,EAAwB,WAAA,EAAqB,KAAA,EAAY,EAAA,EAAS;AACpF,EAAA,MAAM,EAAE,OAAM,GAAI,KAAA;AAClB,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,CAAI,WAAW,CAAA;AAElC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,EAAA,EAAI,KAAA,GAAQ,CAAA,mBAAA,EAAsB,WAAW,CAAA,CAAE,CAAA;AAC/C,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,WAAuD,EAAC;AAG9D,EAAA,MAAM,OAAA,uBAAc,GAAA,EAAY;AAChC,EAAA,MAAM,YAAsB,EAAC;AAE7B,EAAA,SAAS,SAAA,CAAU,GAAA,EAAa,KAAA,EAAe,MAAA,EAAgB;AAC7D,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAAG;AACpB,MAAA,SAAA,CAAU,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,EAAG,GAAG,CAAA,WAAA,CAAa,CAAA;AAC3C,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,IAAI,GAAG,CAAA;AAEf,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAC7B,IAAA,IAAI,CAAC,OAAA,EAAS;AAAC,MAAA;AAAA,IAAO;AAEtB,IAAA,SAAA,CAAU,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA;AAEhC,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AACpC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,MAAA,IAAI,CAAC,GAAA,EAAK;AAAC,QAAA;AAAA,MAAS;AACpB,MAAA,MAAM,MAAA,GAAS,CAAA,KAAM,IAAA,CAAK,MAAA,GAAS,CAAA;AACnC,MAAA,MAAM,SAAA,GAAY,MAAA,IAAU,MAAA,GAAS,iBAAA,GAAU,iBAAA,CAAA;AAC/C,MAAA,SAAA,CAAU,GAAA,EAAK,KAAA,GAAQ,CAAA,EAAG,SAAS,CAAA;AAAA,IACrC;AAAA,EACF;AAEA,EAAA,SAAA,CAAU,WAAA,EAAa,GAAG,EAAE,CAAA;AAE5B,EAAA,QAAA,CAAS,IAAA,CAAK;AAAA,IACZ,MAAA,EAAQ,iBAAA;AAAA,IACR,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,EAAA,EAAI,UAAU,2BAAA,EAA6B;AAAA,IACzC,KAAA,EAAO,iCAA0B,WAAW,CAAA,CAAA;AAAA,IAC5C;AAAA,GACD,CAAA;AACH;AAKA,SAAS,aAAA,CAAc,KAAA,EAAwB,WAAA,EAAqB,KAAA,EAAY,EAAA,EAAS;AACvF,EAAA,MAAM,WAAA,GAAc,sBAAA,CAAuB,KAAA,EAAO,WAAW,CAAA;AAE7D,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,EAAA,EAAI,IAAA,GAAO,EAAE,OAAA,EAAS,WAAA,EAAa,qBAAqB,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA,EAAG,CAAA;AACjF,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,WAAuD,EAAC;AAE9D,EAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,QAAA;AAAA,MACR,KAAA,EAAO,CAAC,oCAAoC;AAAA,KAC7C,CAAA;AAAA,EACH,CAAA,MAAO;AACL,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,2BAA2B,WAAW,CAAA,CAAA;AAAA,MAC9C,KAAA,EAAO,MAAM,IAAA,CAAK,WAAW,EAAE,GAAA,CAAI,CAAA,GAAA,KAAO,CAAA,OAAA,EAAK,GAAG,CAAA,CAAE;AAAA,KACrD,CAAA;AAAA,EACH;AAEA,EAAA,EAAA,EAAI,UAAU,4BAAA,EAA8B;AAAA,IAC1C,KAAA,EAAO,yCAA+B,WAAW,CAAA,CAAA;AAAA,IACjD;AAAA,GACD,CAAA;AACH;AAKA,SAAS,YAAA,CAAa,KAAA,EAAwB,WAAA,EAAqB,KAAA,EAAY,EAAA,EAAS;AACtF,EAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,KAAA,EAAO,WAAW,CAAA;AAErD,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,EAAA,EAAI,IAAA,GAAO,EAAE,OAAA,EAAS,WAAA,EAAa,kBAAkB,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,EAAG,CAAA;AAC3E,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,WAAuD,EAAC;AAE9D,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,QAAA;AAAA,MACR,KAAA,EAAO,CAAC,uDAAuD;AAAA,KAChE,CAAA;AAAA,EACH,CAAA,MAAO;AACL,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,uBAAuB,WAAW,CAAA,CAAA;AAAA,MAC1C,KAAA,EAAO;AAAA,QACL,CAAA,oCAAA,EAAuC,SAAS,IAAI,CAAA,gBAAA,CAAA;AAAA,QACpD,EAAA;AAAA,QACA,GAAG,MAAM,IAAA,CAAK,QAAQ,EAAE,GAAA,CAAI,CAAA,GAAA,KAAO,CAAA,OAAA,EAAK,GAAG,CAAA,CAAE;AAAA;AAC/C,KACD,CAAA;AAED,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,iBAAA;AAAA,MACR,KAAA,EAAO;AAAA,QACL,0CAAA;AAAA,QACA,qCAAA;AAAA,QACA;AAAA;AACF,KACD,CAAA;AAAA,EACH;AAEA,EAAA,EAAA,EAAI,UAAU,2BAAA,EAA6B;AAAA,IACzC,KAAA,EAAO,iCAA0B,WAAW,CAAA,CAAA;AAAA,IAC5C;AAAA,GACD,CAAA;AACH;AAKA,SAASA,YAAAA,CAAY,KAAA,EAAwB,KAAA,EAAY,EAAA,EAAS;AAChE,EAAA,MAAM,EAAE,OAAM,GAAI,KAAA;AAGlB,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,IAAI,cAAA,GAAiB,EAAA;AACrB,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoB;AAE1C,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAA,EAAO;AAChC,IAAA,MAAM,QAAA,GAAW,KAAK,IAAA,CAAK,IAAA;AAC3B,IAAA,SAAA,IAAa,QAAA;AAEb,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,OAAA,GAAU,QAAA;AACV,MAAA,cAAA,GAAiB,IAAA;AAAA,IACnB;AAEA,IAAA,SAAA,CAAU,IAAI,QAAA,EAAA,CAAW,SAAA,CAAU,IAAI,QAAQ,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,EAC5D;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,GAAO,CAAA,GAAA,CAAK,YAAY,KAAA,CAAM,IAAA,EAAM,OAAA,CAAQ,CAAC,CAAA,GAAI,GAAA;AAEvE,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,EAAA,EAAI,IAAA,GAAO;AAAA,MACT,eAAe,KAAA,CAAM,IAAA;AAAA,MACrB,iBAAA,EAAmB,SAAA;AAAA,MACnB,mBAAA,EAAqB,MAAA,CAAO,UAAA,CAAW,OAAO,CAAA;AAAA,MAC9C,eAAA,EAAiB,OAAA;AAAA,MACjB,sBAAA,EAAwB;AAAA,KACzB,CAAA;AACD,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,WAAuD,EAAC;AAE9D,EAAA,QAAA,CAAS,IAAA,CAAK;AAAA,IACZ,MAAA,EAAQ,kBAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,CAAA,gBAAA,EAAmB,MAAM,IAAI,CAAA,CAAA;AAAA,MAC7B,uBAAuB,SAAS,CAAA,CAAA;AAAA,MAChC,qCAAqC,OAAO,CAAA,CAAA;AAAA,MAC5C,CAAA,kBAAA,EAAqB,OAAO,CAAA,EAAA,EAAK,cAAc,CAAA,CAAA;AAAA;AACjD,GACD,CAAA;AAGD,EAAA,MAAM,oBAA8B,EAAC;AACrC,EAAA,MAAM,eAAe,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAC,CAAA;AAC/E,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,QAAQ,CAAA,IAAK,YAAA,EAAc;AAC5C,IAAA,MAAM,MAAM,QAAA,CAAI,MAAA,CAAO,KAAK,GAAA,CAAI,QAAA,EAAU,EAAE,CAAC,CAAA;AAC7C,IAAA,iBAAA,CAAkB,KAAK,CAAA,EAAG,KAAK,UAAU,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAA,SAAA,CAAW,CAAA;AAAA,EACrE;AAEA,EAAA,QAAA,CAAS,IAAA,CAAK;AAAA,IACZ,MAAA,EAAQ,yBAAA;AAAA,IACR,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,EAAA,EAAI,UAAU,6BAAA,EAA+B;AAAA,IAC3C,KAAA,EAAO,uCAAA;AAAA,IACP;AAAA,GACD,CAAA;AACH;AAKA,SAAS,SAAA,CAAU,KAAA,EAAwB,KAAA,EAAY,EAAA,EAAS;AAC9D,EAAA,MAAM,EAAE,OAAM,GAAI,KAAA;AAElB,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,KAAK,wBAAwB,CAAA;AACnC,EAAA,KAAA,CAAM,KAAK,eAAe,CAAA;AAC1B,EAAA,KAAA,CAAM,KAAK,qBAAqB,CAAA;AAChC,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,IAAI,CAAA,IAAK,KAAA,EAAO;AAChC,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,IAAA,EAAM;AAC3B,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA;AAC3C,MAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA;AACzC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,GAAA,EAAM,QAAQ,CAAA,MAAA,EAAS,OAAO,CAAA,EAAA,CAAI,CAAA;AAAA,IAC/C;AAAA,EACF;AAEA,EAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAEd,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,EAAA,EAAI,OAAO,EAAE,GAAA,EAAK,MAAM,IAAA,CAAK,IAAI,GAAG,CAAA;AAAA,EACtC,CAAA,MAAO;AACL,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,EAAA,EAAI,QAAQ,IAAI,CAAA;AAAA,IAClB;AACA,IAAA,EAAA,EAAI,QAAQ,EAAE,CAAA;AACd,IAAA,EAAA,EAAI,QAAQ,oCAAoC,CAAA;AAChD,IAAA,EAAA,EAAI,QAAQ,kDAAkD,CAAA;AAAA,EAChE;AACF","file":"index.js","sourcesContent":["/**\n * quality:build-order - Calculate build order and dependency layers\n *\n * Uses topological sort to determine correct build order.\n * Shows build layers where each layer can build in parallel.\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport {\n buildDependencyGraph,\n topologicalSort,\n getBuildOrderForPackage,\n type TopologicalSortResult,\n} from '@kb-labs/quality-core/graph';\n\ntype BuildOrderFlags = {\n package?: string;\n layers?: boolean;\n script?: boolean;\n json?: boolean;\n argv?: string[];\n};\n\ntype BuildOrderInput = BuildOrderFlags & { argv?: string[] };\n\ntype BuildOrderCommandResult = {\n exitCode: number;\n result?: TopologicalSortResult;\n};\n\nexport default defineCommand({\n id: 'quality:build-order',\n description: 'Calculate build order using topological sort',\n\n handler: {\n async execute(ctx: PluginContextV3, input: BuildOrderInput): Promise<BuildOrderCommandResult> {\n const { ui } = ctx;\n\n // V3: Flags come in input.flags object (not auto-merged)\n const flags = (input as any).flags ?? input;\n\n // Build dependency graph\n const graph = buildDependencyGraph(ctx.cwd);\n\n // Calculate build order\n let result: TopologicalSortResult;\n if (flags.package) {\n result = getBuildOrderForPackage(graph, flags.package);\n } else {\n result = topologicalSort(graph);\n }\n\n // Check for circular dependencies\n if (result.circular.length > 0) {\n ui?.error?.(\n `Found ${result.circular.length} circular dependencies. Build order cannot be determined.`\n );\n outputCircularDependencies(result.circular, ui);\n return { exitCode: 1, result };\n }\n\n // Output results\n outputBuildOrder(result, flags, ui);\n\n return { exitCode: 0, result };\n },\n },\n});\n\n/**\n * Output build order results\n */\nfunction outputBuildOrder(result: TopologicalSortResult, flags: any, ui: any) {\n if (flags.json) {\n ui?.json?.(result);\n return;\n }\n\n if (flags.script) {\n // Output as shell script\n ui?.write?.('#!/bin/bash');\n ui?.write?.('# Generated build script');\n ui?.write?.('set -e');\n ui?.write?.('');\n\n for (let i = 0; i < result.layers.length; i++) {\n const layer = result.layers[i];\n if (!layer) {continue;}\n ui?.write?.(`# Layer ${i + 1} (${layer.length} packages)`);\n for (const pkg of layer) {\n ui?.write?.(`pnpm --filter \"${pkg}\" run build`);\n }\n ui?.write?.('');\n }\n return;\n }\n\n // Build sections\n const sections: Array<{ header: string; items: string[] }> = [];\n\n if (flags.layers) {\n // Show build layers\n const layerItems: string[] = [];\n for (let i = 0; i < result.layers.length; i++) {\n const layer = result.layers[i];\n if (!layer) {continue;}\n layerItems.push(`Layer ${i + 1}: ${layer.length} packages (can build in parallel)`);\n for (const pkg of layer) {\n layerItems.push(` โ€ข ${pkg}`);\n }\n layerItems.push('');\n }\n sections.push({ header: 'Build Layers', items: layerItems });\n } else {\n // Show sequential order\n const orderItems = result.sorted.map((pkg, idx) => `${idx + 1}. ${pkg}`);\n sections.push({ header: 'Build Order', items: orderItems });\n }\n\n // Summary\n sections.push({\n header: 'Summary',\n items: [\n `Total packages: ${result.sorted.length}`,\n `Build layers: ${result.layers.length}`,\n `Circular dependencies: ${result.circular.length}`,\n ],\n });\n\n const title = flags.package\n ? `๐Ÿ“ฆ Build Order for ${flags.package}`\n : '๐Ÿ“ฆ Monorepo Build Order';\n\n ui?.success?.('Build order calculated successfully', {\n title,\n sections,\n });\n}\n\n/**\n * Output circular dependencies\n */\nfunction outputCircularDependencies(cycles: string[][], ui: any) {\n const sections: Array<{ header: string; items: string[] }> = [];\n\n for (let i = 0; i < cycles.length; i++) {\n const cycle = cycles[i];\n if (!cycle) {continue;}\n sections.push({\n header: `Cycle ${i + 1}`,\n items: cycle.map((pkg, idx) => {\n if (idx === cycle.length - 1) {\n const firstPkg = cycle[0];\n return ` ${pkg} โ†’ ${firstPkg ?? '?'} (circular!)`;\n }\n return ` ${pkg} โ†’`;\n }),\n });\n }\n\n ui?.error?.('Circular dependencies detected', {\n title: 'โš ๏ธ Circular Dependencies',\n sections,\n });\n}\n","/**\n * quality:check-builds - Check build status across monorepo\n *\n * Analyzes build status including:\n * - Build failures with error messages\n * - Stale builds (dist/ older than src/)\n * - Build duration tracking\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport type { BuildCheckResult } from '@kb-labs/quality-contracts';\nimport { CACHE_KEYS } from '@kb-labs/quality-contracts';\nimport { checkBuilds } from '@kb-labs/quality-core/builds';\nimport type { CheckBuildsFlags } from './flags.js';\n\n// Input type with backward compatibility\ntype CheckBuildsInput = CheckBuildsFlags & { argv?: string[] };\n\ntype CheckBuildsCommandResult = {\n exitCode: number;\n result?: BuildCheckResult;\n meta?: Record<string, unknown>;\n};\n\nexport default defineCommand({\n id: 'quality:check-builds',\n description: 'Check build status across monorepo',\n\n handler: {\n async execute(\n ctx: PluginContextV3,\n input: CheckBuildsInput\n ): Promise<CheckBuildsCommandResult> {\n const { ui, platform } = ctx;\n\n // V3: Flags come in input.flags object (not auto-merged)\n const flags = (input as any).flags ?? input;\n\n // Check cache unless refresh requested\n const cacheKey = `${CACHE_KEYS.BUILDS}:${flags.package || 'all'}`;\n\n if (!flags.refresh) {\n const cached = await platform.cache.get<BuildCheckResult>(cacheKey);\n if (cached) {\n outputBuildCheck({ ...cached, cached: true }, flags, ui);\n return { exitCode: cached.failing > 0 ? 1 : 0, result: cached };\n }\n }\n\n // Run build check\n const result = await checkBuilds(ctx.cwd, {\n packageFilter: flags.package,\n timeout: flags.timeout ? Number(flags.timeout) : 30000,\n });\n\n // Cache results for 10 minutes\n await platform.cache.set(cacheKey, result, 10 * 60 * 1000);\n\n // Track analytics\n await platform.analytics.track('quality:check-builds', {\n totalPackages: result.totalPackages,\n passing: result.passing,\n failing: result.failing,\n staleBuilds: result.staleBuilds.length,\n duration: result.duration,\n packageSpecific: !!flags.package,\n });\n\n // Output results\n outputBuildCheck({ ...result, cached: false }, flags, ui);\n\n return {\n exitCode: result.failing > 0 ? 1 : 0,\n result,\n };\n },\n },\n});\n\n/**\n * Output build check results\n */\nfunction outputBuildCheck(\n result: BuildCheckResult & { cached?: boolean },\n flags: any,\n ui: any\n) {\n if (flags.json) {\n ui?.json?.(result);\n return;\n }\n\n // Build sections\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Status section\n const statusIcon = result.failing === 0 ? 'โœ…' : 'โŒ';\n const statusText = result.failing === 0 ? 'All builds passing' : 'Build failures detected';\n const statusItems = [\n `${statusIcon} ${statusText}`,\n `Passing: ${result.passing} package(s)`,\n result.failing > 0 ? `Failing: ${result.failing} package(s)` : null,\n ].filter(Boolean) as string[];\n\n sections.push({ header: 'Build Status', items: statusItems });\n\n // Failed packages\n if (result.failures.length > 0) {\n const failureItems: string[] = [];\n for (const failure of result.failures.slice(0, 5)) {\n failureItems.push(`โ€ข ${failure.package}`);\n // Show first line of error\n const firstLine = failure.error.split('\\n')[0];\n failureItems.push(` ${firstLine?.substring(0, 80) || 'Build failed'}`);\n }\n\n if (result.failures.length > 5) {\n failureItems.push(`... and ${result.failures.length - 5} more failures`);\n }\n\n sections.push({ header: 'โŒ Failed Packages', items: failureItems });\n }\n\n // Stale builds\n if (result.staleBuilds.length > 0) {\n const staleItems = result.staleBuilds.slice(0, 5).map((s) => `โ€ข ${s.package}`);\n\n if (result.staleBuilds.length > 5) {\n staleItems.push(`... and ${result.staleBuilds.length - 5} more`);\n }\n\n sections.push({\n header: 'โš ๏ธ Stale Builds (dist/ older than src/)',\n items: staleItems,\n });\n }\n\n // Summary\n const summaryItems = [\n `Total packages: ${result.totalPackages}`,\n `Duration: ${(result.duration / 1000).toFixed(1)}s`,\n result.cached ? '๐Ÿ’พ Cached (use --refresh to recheck)' : '๐Ÿ”„ Fresh check',\n ];\n\n sections.push({ header: 'Summary', items: summaryItems });\n\n const title =\n result.failing === 0\n ? 'โœ… All Builds Passing'\n : `โŒ ${result.failing} Build Failure(s) Detected`;\n\n ui?.success?.('Build check completed', {\n title,\n sections,\n });\n}\n","/**\n * quality:check-tests - Test execution and coverage tracking\n *\n * Runs tests across monorepo packages and collects coverage statistics.\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport { runTests } from '@kb-labs/quality-core/tests';\nimport { CACHE_KEYS, type TestRunResult } from '@kb-labs/quality-contracts';\nimport { type CheckTestsFlags } from './flags.js';\n\n// Input type with backward compatibility\ntype CheckTestsInput = CheckTestsFlags & { argv?: string[] };\n\ntype CheckTestsCommandResult = {\n exitCode: number;\n result?: TestRunResult;\n meta?: Record<string, unknown>;\n};\n\nexport default defineCommand({\n id: 'quality:check-tests',\n description: 'Run tests and track coverage across monorepo',\n\n handler: {\n async execute(\n ctx: PluginContextV3,\n input: CheckTestsInput\n ): Promise<CheckTestsCommandResult> {\n const { ui, platform } = ctx;\n\n // V3: Flags come in input.flags object (not auto-merged)\n const flags = (input as any).flags ?? input;\n\n const cacheKey = `${CACHE_KEYS.TESTS}:${flags.package || 'all'}`;\n\n // Check cache unless refresh requested\n if (!flags.refresh) {\n const cached = await platform.cache.get<TestRunResult>(cacheKey);\n if (cached) {\n outputTestResults({ ...cached, cached: true }, flags, ui);\n return { exitCode: cached.failing > 0 ? 1 : 0, result: cached };\n }\n }\n\n // Run tests\n const result = await runTests(ctx.cwd, {\n packageFilter: flags.package,\n timeout: flags.timeout ? Number(flags.timeout) : 60000,\n withCoverage: flags['with-coverage'],\n coverageOnly: flags['coverage-only'],\n });\n\n // Cache result (5 min TTL - tests are slower)\n await platform.cache.set(cacheKey, result, 5 * 60 * 1000);\n\n // Track analytics\n await platform.analytics.track('quality:check-tests', {\n packageFilter: flags.package || 'all',\n totalPackages: result.totalPackages,\n passing: result.passing,\n failing: result.failing,\n withCoverage: flags['with-coverage'],\n cached: false,\n });\n\n // Output results\n outputTestResults({ ...result, cached: false }, flags, ui);\n\n return {\n exitCode: result.failing > 0 ? 1 : 0,\n result,\n meta: { cached: false },\n };\n },\n },\n});\n\n/**\n * Output test results\n */\nfunction outputTestResults(\n result: TestRunResult & { cached: boolean },\n flags: CheckTestsInput,\n ui: any\n): void {\n if (flags.json) {\n ui?.json?.(result);\n return;\n }\n\n // Build sections\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Status section\n const statusIcon = result.failing === 0 ? 'โœ…' : 'โŒ';\n const statusText = result.failing === 0 ? 'All tests passing' : 'Test failures detected';\n const statusItems = [\n `${statusIcon} ${statusText}`,\n `Total packages: ${result.totalPackages}`,\n `Passing: ${result.passing}`,\n result.failing > 0 ? `Failing: ${result.failing}` : null,\n result.skipped > 0 ? `Skipped: ${result.skipped} (no test script)` : null,\n ].filter(Boolean) as string[];\n\n sections.push({ header: 'Test Status', items: statusItems });\n\n // Test summary\n if (result.summary.totalTests > 0) {\n const summaryItems = [\n `Total tests: ${result.summary.totalTests}`,\n `Passed: ${result.summary.passedTests}`,\n result.summary.failedTests > 0 ? `Failed: ${result.summary.failedTests}` : null,\n ].filter(Boolean) as string[];\n\n sections.push({ header: 'Test Summary', items: summaryItems });\n }\n\n // Failed packages\n if (result.failures.length > 0) {\n const failureItems: string[] = [];\n for (const failure of result.failures.slice(0, 5)) {\n failureItems.push(`โŒ ${failure.package}`);\n if (failure.failedTests && failure.totalTests) {\n failureItems.push(` ${failure.failedTests}/${failure.totalTests} tests failed`);\n }\n // Show first line of error\n const firstLine = failure.error.split('\\n')[0];\n failureItems.push(` ${firstLine?.substring(0, 80) || 'Test failed'}`);\n }\n\n if (result.failures.length > 5) {\n failureItems.push(`... and ${result.failures.length - 5} more failures`);\n }\n\n sections.push({ header: 'Failed Packages', items: failureItems });\n }\n\n // Coverage section (if available)\n if (result.coverage.packages.length > 0) {\n const coverageItems: string[] = [];\n coverageItems.push(`Average coverage: ${result.coverage.avgCoverage.toFixed(1)}%`);\n coverageItems.push('');\n\n const topPackages = result.coverage.packages\n .sort((a, b) => b.lines - a.lines)\n .slice(0, 5);\n\n for (const pkg of topPackages) {\n coverageItems.push(`${pkg.name}`);\n coverageItems.push(\n ` Lines: ${pkg.lines.toFixed(1)}% | Statements: ${pkg.statements.toFixed(1)}% | Functions: ${pkg.functions.toFixed(1)}% | Branches: ${pkg.branches.toFixed(1)}%`\n );\n }\n\n if (result.coverage.packages.length > 5) {\n coverageItems.push(`... and ${result.coverage.packages.length - 5} more packages`);\n }\n\n sections.push({ header: 'Coverage', items: coverageItems });\n }\n\n // Summary\n const summaryItems = [\n `Duration: ${(result.duration / 1000).toFixed(1)}s`,\n result.cached ? '๐Ÿ’พ Cached (use --refresh to re-run)' : '๐Ÿ”„ Fresh run',\n ];\n\n sections.push({ header: 'Summary', items: summaryItems });\n\n const title =\n result.failing === 0\n ? 'โœ… All Tests Passed'\n : `โŒ ${result.failing} Package(s) with Test Failures`;\n\n ui?.success?.('Test run completed', {\n title,\n sections,\n });\n}\n","/**\n * quality:check-types - TypeScript type safety analysis\n *\n * Analyzes TypeScript type errors, warnings, and coverage across monorepo.\n * Uses TypeScript Compiler API for semantic analysis.\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport { analyzeTypes } from '@kb-labs/quality-core/types';\nimport { CACHE_KEYS, type TypeAnalysisResult } from '@kb-labs/quality-contracts';\nimport { type CheckTypesFlags } from './flags.js';\n\n// Input type with backward compatibility\ntype CheckTypesInput = CheckTypesFlags & { argv?: string[] };\n\ntype CheckTypesCommandResult = {\n exitCode: number;\n result?: TypeAnalysisResult;\n meta?: Record<string, unknown>;\n};\n\nexport default defineCommand({\n id: 'quality:check-types',\n description: 'Analyze TypeScript type safety across monorepo',\n\n handler: {\n async execute(\n ctx: PluginContextV3,\n input: CheckTypesInput\n ): Promise<CheckTypesCommandResult> {\n const { ui, platform } = ctx;\n\n // V3: Flags come in input.flags object (not auto-merged)\n const flags = (input as any).flags ?? input;\n\n const cacheKey = `${CACHE_KEYS.TYPE_ANALYSIS}:${flags.package || 'all'}`;\n\n // Check cache unless refresh requested\n if (!flags.refresh) {\n const cached = await platform.cache.get<TypeAnalysisResult>(cacheKey);\n if (cached) {\n outputTypeAnalysis({ ...cached, cached: true }, flags, ui);\n return { exitCode: cached.totalErrors > 0 ? 1 : 0, result: cached };\n }\n }\n\n // Run type analysis\n const result = await analyzeTypes(ctx.cwd, {\n packageFilter: flags.package,\n errorsOnly: flags['errors-only'],\n });\n\n // Cache result (10 min TTL)\n await platform.cache.set(cacheKey, result, 10 * 60 * 1000);\n\n // Track analytics\n await platform.analytics.track('quality:check-types', {\n packageFilter: flags.package || 'all',\n totalPackages: result.totalPackages,\n totalErrors: result.totalErrors,\n avgCoverage: result.avgCoverage,\n cached: false,\n });\n\n // Output results\n outputTypeAnalysis({ ...result, cached: false }, flags, ui);\n\n return {\n exitCode: result.totalErrors > 0 ? 1 : 0,\n result,\n meta: { cached: false },\n };\n },\n },\n});\n\n/**\n * Output type analysis results\n */\nfunction outputTypeAnalysis(\n result: TypeAnalysisResult & { cached: boolean },\n flags: CheckTypesInput,\n ui: any\n): void {\n if (flags.json) {\n ui?.json?.(result);\n return;\n }\n\n const errorsOnly = flags['errors-only'] || false;\n\n // Build sections\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Status section\n const statusIcon = result.totalErrors === 0 ? 'โœ…' : 'โŒ';\n const statusText =\n result.totalErrors === 0 ? 'All packages passed type checks' : 'Type errors detected';\n const statusItems = [\n `${statusIcon} ${statusText}`,\n `Analyzed: ${result.totalPackages} package(s)`,\n `Errors: ${result.totalErrors}`,\n `Warnings: ${result.totalWarnings}`,\n `Avg Coverage: ${result.avgCoverage.toFixed(1)}%`,\n ];\n\n sections.push({ header: 'Type Safety Status', items: statusItems });\n\n // Packages with errors\n if (result.packagesWithErrors > 0) {\n const errorItems: string[] = [];\n const packagesToShow = result.packages\n .filter((pkg) => !errorsOnly || pkg.errors > 0)\n .slice(0, 10);\n\n for (const pkg of packagesToShow) {\n const status = pkg.errors > 0 ? 'โŒ' : 'โœ…';\n errorItems.push(`${status} ${pkg.name}`);\n\n const details = [\n pkg.errors > 0 ? `${pkg.errors} error(s)` : null,\n pkg.warnings > 0 ? `${pkg.warnings} warning(s)` : null,\n `${pkg.coverage.toFixed(1)}% coverage`,\n pkg.anyCount > 0 ? `${pkg.anyCount} any` : null,\n pkg.tsIgnoreCount > 0 ? `${pkg.tsIgnoreCount} @ts-ignore` : null,\n ]\n .filter(Boolean)\n .join(', ');\n\n errorItems.push(` ${details}`);\n }\n\n if (result.packages.length > 10) {\n errorItems.push(`... and ${result.packages.length - 10} more packages`);\n }\n\n sections.push({\n header: `Packages with Type Errors (${result.packagesWithErrors})`,\n items: errorItems,\n });\n }\n\n // Coverage distribution\n const excellent = result.packages.filter((p) => p.coverage >= 90).length;\n const good = result.packages.filter((p) => p.coverage >= 70 && p.coverage < 90).length;\n const poor = result.packages.filter((p) => p.coverage < 70).length;\n\n if (result.packages.length > 0) {\n const coverageItems = [\n `โœ… Excellent (โ‰ฅ90%): ${excellent} package(s)`,\n `โš ๏ธ Good (70-90%): ${good} package(s)`,\n poor > 0 ? `โŒ Poor (<70%): ${poor} package(s)` : null,\n ].filter(Boolean) as string[];\n\n sections.push({ header: 'Type Coverage Distribution', items: coverageItems });\n }\n\n // Summary\n const summaryItems = [\n `Total packages: ${result.totalPackages}`,\n `Duration: ${(result.duration / 1000).toFixed(1)}s`,\n result.cached ? '๐Ÿ’พ Cached (use --refresh to recheck)' : '๐Ÿ”„ Fresh analysis',\n ];\n\n sections.push({ header: 'Summary', items: summaryItems });\n\n const title =\n result.totalErrors === 0\n ? 'โœ… All Type Checks Passed'\n : `โŒ ${result.packagesWithErrors} Package(s) with Type Errors`;\n\n ui?.success?.('Type analysis completed', {\n title,\n sections,\n });\n}\n","/**\n * quality:cycles - Detect circular dependencies\n *\n * Uses DFS to find all circular dependency chains in the monorepo.\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport {\n buildDependencyGraph,\n findCircularDependencies,\n} from '@kb-labs/quality-core/graph';\n\ntype CyclesFlags = {\n json?: boolean;\n argv?: string[];\n};\n\ntype CyclesInput = CyclesFlags & { argv?: string[] };\n\ntype CyclesCommandResult = {\n exitCode: number;\n cycles?: string[][];\n};\n\nexport default defineCommand({\n id: 'quality:cycles',\n description: 'Detect circular dependencies in monorepo',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CyclesInput): Promise<CyclesCommandResult> {\n const { ui } = ctx;\n\n // V3: Flags come in input.flags object (not auto-merged)\n const flags = (input as any).flags ?? input;\n\n // Build dependency graph\n const graph = buildDependencyGraph(ctx.cwd);\n\n // Find circular dependencies\n const cycles = findCircularDependencies(graph);\n\n // Output results\n outputCycles(cycles, flags, ui);\n\n return {\n exitCode: cycles.length > 0 ? 1 : 0,\n cycles,\n };\n },\n },\n});\n\n/**\n * Output circular dependencies\n */\nfunction outputCycles(cycles: string[][], flags: any, ui: any) {\n if (flags.json) {\n ui?.json?.({ cycles, count: cycles.length });\n return;\n }\n\n if (cycles.length === 0) {\n ui?.success?.('No circular dependencies found', {\n title: 'โœ… Circular Dependencies Check',\n sections: [\n {\n header: 'Result',\n items: ['โœ… No circular dependencies detected'],\n },\n ],\n });\n return;\n }\n\n // Build sections\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Summary\n sections.push({\n header: 'Summary',\n items: [\n `โš ๏ธ Found ${cycles.length} circular dependency chain(s)`,\n 'These must be broken to enable clean builds',\n ],\n });\n\n // Show each cycle\n for (let i = 0; i < cycles.length; i++) {\n const cycle = cycles[i];\n if (!cycle) {continue;}\n const cycleItems: string[] = [];\n\n for (let j = 0; j < cycle.length; j++) {\n const pkg = cycle[j];\n if (j === cycle.length - 1) {\n cycleItems.push(` ${j + 1}. ${pkg}`);\n const firstPkg = cycle[0];\n cycleItems.push(` ${j + 2}. ${firstPkg ?? '?'} โฌ… circular!`);\n } else {\n cycleItems.push(` ${j + 1}. ${pkg}`);\n }\n }\n\n sections.push({\n header: `Cycle ${i + 1} (${cycle.length} packages)`,\n items: cycleItems,\n });\n }\n\n // Recommendations\n sections.push({\n header: 'Recommendations',\n items: [\n '1. Extract shared code into a new package',\n '2. Move one dependency to devDependencies',\n '3. Refactor to remove bidirectional dependencies',\n '4. Use dependency injection patterns',\n ],\n });\n\n ui?.error?.('Circular dependencies detected', {\n title: `โš ๏ธ Circular Dependencies Detected (${cycles.length})`,\n sections,\n });\n}\n","/**\n * quality:dead-code - Detect and optionally remove dead source files\n *\n * Uses reachability analysis: builds import graph, walks from entry points,\n * files not reachable are dead. Zero false positives by design.\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport type { DeadCodeResult, DeadCodeRemovalResult, DeadCodeBackupManifest } from '@kb-labs/quality-contracts';\nimport { CACHE_KEYS } from '@kb-labs/quality-contracts';\nimport {\n scanDeadFiles,\n removeDeadFiles,\n restoreFromBackup,\n listBackups,\n} from '@kb-labs/quality-core/dead-code';\nimport type { DeadCodeFlags } from './flags.js';\n\ntype DeadCodeInput = DeadCodeFlags & { argv?: string[] };\n\ntype DeadCodeCommandResult = {\n exitCode: number;\n result?: DeadCodeResult | DeadCodeRemovalResult | DeadCodeBackupManifest[];\n meta?: Record<string, unknown>;\n};\n\nexport default defineCommand({\n id: 'quality:dead-code',\n description: 'Detect and optionally remove dead (unreachable) source files',\n\n handler: {\n async execute(\n ctx: PluginContextV3,\n input: DeadCodeInput,\n ): Promise<DeadCodeCommandResult> {\n const { ui, platform } = ctx;\n const flags = (input as any).flags ?? input;\n\n // --- Sub-operations ---\n\n // List backups\n if (flags['list-backups']) {\n const backups = listBackups(ctx.cwd);\n if (flags.json) {\n ui?.json?.(backups);\n } else {\n outputBackupList(backups, ui);\n }\n return { exitCode: 0, result: backups };\n }\n\n // Restore from backup\n if (flags.restore) {\n try {\n const result = await restoreFromBackup(ctx.cwd, flags.restore);\n if (flags.json) {\n ui?.json?.(result);\n } else {\n ui?.success?.(`Restored ${result.restoredFiles} file(s) from backup ${flags.restore}`, {});\n if (result.restoredExports > 0) {\n ui?.info?.(`Note: ${result.restoredExports} package.json export(s) were cleaned. You may need to rebuild.`);\n }\n }\n return { exitCode: 0 };\n } catch (err: any) {\n if (flags.json) {\n ui?.json?.({ error: err.message });\n } else {\n ui?.error?.(err.message);\n }\n return { exitCode: 1 };\n }\n }\n\n // --- Main scan flow ---\n\n // Check cache\n const cacheKey = `${CACHE_KEYS.DEAD_CODE}:${flags.package || 'all'}`;\n if (!flags.refresh && !flags['auto-remove']) {\n const cached = await platform.cache.get<DeadCodeResult>(cacheKey);\n if (cached) {\n outputDeadCodeReport({ ...cached, cached: true }, flags, ui);\n return { exitCode: cached.summary.totalDead > 0 ? 1 : 0, result: cached };\n }\n }\n\n // Run scan\n const result = await scanDeadFiles(ctx.cwd, {\n packageFilter: flags.package,\n verbose: flags.verbose,\n });\n\n // Cache results for 5 minutes\n await platform.cache.set(cacheKey, result, 5 * 60 * 1000);\n\n // Track analytics\n await platform.analytics.track('quality:dead-code', {\n totalPackages: result.summary.totalPackages,\n totalFiles: result.summary.totalFiles,\n totalDead: result.summary.totalDead,\n totalDeadBytes: result.summary.totalDeadBytes,\n duration: result.duration,\n autoRemove: !!flags['auto-remove'],\n dryRun: !!flags['dry-run'],\n });\n\n // Auto-remove flow\n if (flags['auto-remove']) {\n if (result.summary.totalDead === 0) {\n if (flags.json) {\n ui?.json?.({ message: 'No dead files found', ...result });\n } else {\n ui?.success?.('No dead files found. Nothing to remove.', {});\n }\n return { exitCode: 0, result };\n }\n\n const removalResult = await removeDeadFiles(ctx.cwd, result, {\n dryRun: flags['dry-run'],\n });\n\n if (flags.json) {\n ui?.json?.(removalResult);\n } else {\n outputRemovalReport(removalResult, flags, ui);\n }\n\n return { exitCode: 0, result: removalResult };\n }\n\n // Output scan results\n outputDeadCodeReport({ ...result, cached: false }, flags, ui);\n\n return {\n exitCode: result.summary.totalDead > 0 ? 1 : 0,\n result,\n };\n },\n },\n});\n\n// --- Output helpers ---\n\nfunction outputDeadCodeReport(\n result: DeadCodeResult & { cached?: boolean },\n flags: any,\n ui: any,\n): void {\n if (flags.json) {\n ui?.json?.(result);\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Per-package results (only packages with dead files)\n const packagesWithDead = result.packages.filter(p => p.deadFiles.length > 0);\n\n if (packagesWithDead.length > 0) {\n const items: string[] = [];\n for (const pkg of packagesWithDead) {\n items.push(`${pkg.packageName} (${pkg.deadFiles.length} dead file${pkg.deadFiles.length === 1 ? '' : 's'})`);\n for (const dead of pkg.deadFiles.slice(0, 5)) {\n const sizeKb = (dead.sizeBytes / 1024).toFixed(1);\n items.push(` ${dead.relativePath} (${sizeKb} KB)`);\n }\n if (pkg.deadFiles.length > 5) {\n items.push(` ... and ${pkg.deadFiles.length - 5} more`);\n }\n }\n sections.push({ header: 'Dead Files', items });\n }\n\n // Verbose: show entry points\n if (flags.verbose) {\n for (const pkg of result.packages) {\n if (pkg.entryPoints.length > 0) {\n const items = pkg.entryPoints.slice(0, 10).map(ep => ` ${ep}`);\n if (pkg.entryPoints.length > 10) {\n items.push(` ... and ${pkg.entryPoints.length - 10} more`);\n }\n sections.push({ header: `Entry Points: ${pkg.packageName}`, items });\n }\n }\n }\n\n // Warnings\n const allWarnings = result.packages.flatMap(p => p.warnings);\n if (allWarnings.length > 0) {\n sections.push({\n header: 'Warnings',\n items: allWarnings.slice(0, 10),\n });\n }\n\n // Summary\n const totalDeadKb = (result.summary.totalDeadBytes / 1024).toFixed(1);\n const summaryItems = [\n `Packages scanned: ${result.summary.totalPackages}`,\n `Total source files: ${result.summary.totalFiles}`,\n `Alive files: ${result.summary.totalAlive}`,\n `Dead files: ${result.summary.totalDead}`,\n result.summary.totalDead > 0 ? `Dead code size: ${totalDeadKb} KB` : null,\n result.summary.emptyDirectories.length > 0\n ? `Empty directories: ${result.summary.emptyDirectories.length}`\n : null,\n `Duration: ${(result.duration / 1000).toFixed(1)}s`,\n result.cached ? '(cached โ€” use --refresh to rescan)' : null,\n ].filter(Boolean) as string[];\n sections.push({ header: 'Summary', items: summaryItems });\n\n // Recommendations\n if (result.summary.totalDead > 0) {\n sections.push({\n header: 'Next Steps',\n items: [\n 'Run with --auto-remove --dry-run to preview removal',\n 'Run with --auto-remove to remove and create backup',\n 'Run with --verbose to see entry points',\n ],\n });\n }\n\n const title =\n result.summary.totalDead === 0\n ? 'No dead files found'\n : `${result.summary.totalDead} dead file(s) found`;\n\n ui?.success?.('Dead code analysis completed', { title, sections });\n}\n\nfunction outputRemovalReport(\n result: DeadCodeRemovalResult,\n flags: any,\n ui: any,\n): void {\n const isDryRun = flags['dry-run'];\n const prefix = isDryRun ? '[DRY RUN] Would' : 'Successfully';\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n const items = [\n `${prefix} remove ${result.filesRemoved} file(s)`,\n `${prefix} free ${(result.bytesRemoved / 1024).toFixed(1)} KB`,\n ];\n\n if (result.emptyDirsRemoved > 0) {\n items.push(`${prefix} remove ${result.emptyDirsRemoved} empty director${result.emptyDirsRemoved === 1 ? 'y' : 'ies'}`);\n }\n if (result.exportsCleanedUp > 0) {\n items.push(`${prefix} clean ${result.exportsCleanedUp} package.json export(s)`);\n }\n\n sections.push({ header: isDryRun ? 'Preview' : 'Removal Complete', items });\n\n if (!isDryRun) {\n sections.push({\n header: 'Backup',\n items: [\n `Backup ID: ${result.backupId}`,\n `To restore: pnpm kb quality:dead-code --restore ${result.backupId}`,\n ],\n });\n }\n\n // Show removed files\n const fileItems: string[] = [];\n for (const file of result.manifest.removedFiles.slice(0, 10)) {\n const sizeKb = (file.sizeBytes / 1024).toFixed(1);\n fileItems.push(`${file.backupPath} (${sizeKb} KB)`);\n }\n if (result.manifest.removedFiles.length > 10) {\n fileItems.push(`... and ${result.manifest.removedFiles.length - 10} more`);\n }\n sections.push({ header: 'Files', items: fileItems });\n\n const title = isDryRun\n ? `[DRY RUN] Would remove ${result.filesRemoved} file(s)`\n : `Removed ${result.filesRemoved} file(s)`;\n\n ui?.success?.(title, { title, sections });\n}\n\nfunction outputBackupList(\n backups: DeadCodeBackupManifest[],\n ui: any,\n): void {\n if (backups.length === 0) {\n ui?.info?.('No backups found.');\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n for (const backup of backups) {\n const date = new Date(backup.createdAt).toLocaleString();\n const items = [\n `Date: ${date}`,\n `Git: ${backup.gitBranch} @ ${backup.gitSha.slice(0, 8)}`,\n `Files: ${backup.totalFilesRemoved}`,\n `Size: ${(backup.totalBytesRemoved / 1024).toFixed(1)} KB`,\n `Restore: pnpm kb quality:dead-code --restore ${backup.id}`,\n ];\n sections.push({ header: `Backup: ${backup.id}`, items });\n }\n\n ui?.success?.(`${backups.length} backup(s) found`, {\n title: 'Dead Code Backups',\n sections,\n });\n}\n","/**\n * quality:fix-deps - Dependency auto-fixer\n *\n * Automatically fixes dependency issues:\n * - Remove unused dependencies\n * - Add missing workspace dependencies\n * - Align duplicate dependency versions\n *\n * Supports --dry-run for previewing changes without applying\n */\n\nimport { defineCommand, type PluginContextV3, useLoader } from '@kb-labs/sdk';\nimport type { FixDepsFlags } from './flags.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n// Input type with backward compatibility\ntype FixDepsInput = FixDepsFlags & { argv?: string[] };\n\ninterface FixResult {\n packagesScanned: number;\n removedDeps: Array<{ package: string; dep: string }>;\n addedDeps: Array<{ package: string; dep: string; version: string }>;\n alignedDeps: Array<{ dep: string; from: string; to: string; packages: string[] }>;\n dryRun: boolean;\n}\n\ntype FixDepsCommandResult = {\n exitCode: number;\n result?: FixResult;\n meta?: Record<string, unknown>;\n};\n\nexport default defineCommand({\n id: 'quality:fix-deps',\n description: 'Auto-fix dependency issues',\n\n handler: {\n async execute(ctx: PluginContextV3, input: FixDepsInput): Promise<FixDepsCommandResult> {\n const { ui, platform } = ctx;\n\n // V3: Flags come in input.flags object (not auto-merged)\n const flags = (input as any).flags ?? input;\n\n const dryRun = flags['dry-run'] ?? false;\n const removeUnused = flags['remove-unused'] || flags.all;\n const addMissing = flags['add-missing'] || flags.all;\n const alignVersions = flags['align-versions'] || flags.all;\n const showStats = flags.stats;\n\n // If stats requested, show dependency statistics\n if (showStats) {\n const stats = await getDependencyStats(ctx.cwd);\n outputStats(stats, flags, ui);\n return { exitCode: 0 };\n }\n\n // If no fix flags specified, show error\n if (!removeUnused && !addMissing && !alignVersions) {\n ui?.error?.('No fix options specified. Use --remove-unused, --add-missing, --align-versions, or --all');\n return { exitCode: 1 };\n }\n\n const loader = useLoader('Scanning packages...');\n loader.start();\n\n const result: FixResult = {\n packagesScanned: 0,\n removedDeps: [],\n addedDeps: [],\n alignedDeps: [],\n dryRun,\n };\n\n const packages = findPackages(ctx.cwd);\n result.packagesScanned = packages.length;\n\n loader.update({ text: `Scanned ${packages.length} packages` });\n\n // 1. Align versions first (if requested)\n if (alignVersions) {\n loader.update({ text: 'Analyzing duplicate dependencies...' });\n const aligned = await alignDuplicateVersions(packages, dryRun);\n result.alignedDeps = aligned;\n }\n\n // 2. Add missing workspace dependencies\n if (addMissing) {\n loader.update({ text: 'Checking for missing workspace dependencies...' });\n const added = await addMissingWorkspaceDeps(packages, dryRun);\n result.addedDeps = added;\n }\n\n // 3. Remove unused dependencies\n if (removeUnused) {\n loader.update({ text: 'Checking for unused dependencies...' });\n const removed = await removeUnusedDeps(packages, dryRun);\n result.removedDeps = removed;\n }\n\n loader.succeed('Dependency analysis completed');\n\n // Track analytics\n await platform.analytics.track('quality:fix-deps', {\n dryRun,\n packagesScanned: result.packagesScanned,\n removedCount: result.removedDeps.length,\n addedCount: result.addedDeps.length,\n alignedCount: result.alignedDeps.length,\n });\n\n // Output results\n outputResults(result, flags, ui);\n\n return {\n exitCode: 0,\n result,\n };\n },\n },\n});\n\n/**\n * Find all packages in the monorepo\n */\nfunction findPackages(rootDir: string): Array<{ name: string; path: string; json: any }> {\n const packages: Array<{ name: string; path: string; json: any }> = [];\n\n if (!fs.existsSync(rootDir)) {\n return packages;\n }\n\n const entries = fs.readdirSync(rootDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (!entry.isDirectory() || !entry.name.startsWith('kb-labs-')) {continue;}\n\n const repoPath = path.join(rootDir, entry.name);\n const packagesDir = path.join(repoPath, 'packages');\n\n if (!fs.existsSync(packagesDir)) {continue;}\n\n const packageDirs = fs.readdirSync(packagesDir, { withFileTypes: true });\n\n for (const pkgDir of packageDirs) {\n if (!pkgDir.isDirectory()) {continue;}\n\n const packageJsonPath = path.join(packagesDir, pkgDir.name, 'package.json');\n\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n packages.push({\n name: packageJson.name || pkgDir.name,\n path: packageJsonPath,\n json: packageJson,\n });\n }\n }\n }\n\n return packages;\n}\n\n/**\n * Get dependency statistics\n */\nasync function getDependencyStats(rootDir: string): Promise<any> {\n const packages = findPackages(rootDir);\n const allDeps = new Map<string, Set<string>>();\n\n for (const pkg of packages) {\n const deps = {\n ...pkg.json.dependencies,\n ...pkg.json.devDependencies,\n };\n\n for (const [dep, version] of Object.entries(deps)) {\n if (!allDeps.has(dep)) {\n allDeps.set(dep, new Set());\n }\n allDeps.get(dep)!.add(version as string);\n }\n }\n\n const duplicates = Array.from(allDeps.entries())\n .filter(([_, versions]) => versions.size > 1)\n .filter(([dep]) => !dep.startsWith('@kb-labs/'));\n\n const topUsed = Array.from(allDeps.entries())\n .map(([name, versions]) => ({ name, count: versions.size > 1 ? versions.size : 1 }))\n .sort((a, b) => b.count - a.count)\n .slice(0, 10);\n\n return {\n totalPackages: packages.length,\n totalDeps: allDeps.size,\n duplicates: duplicates.length,\n topUsed,\n };\n}\n\n/**\n * Align duplicate dependency versions to most common version\n */\nasync function alignDuplicateVersions(\n packages: Array<{ name: string; path: string; json: any }>,\n dryRun: boolean\n): Promise<Array<{ dep: string; from: string; to: string; packages: string[] }>> {\n const aligned: Array<{ dep: string; from: string; to: string; packages: string[] }> = [];\n\n // Find all dependencies and their versions\n const depVersions = new Map<string, Map<string, Set<string>>>();\n\n for (const pkg of packages) {\n const deps = {\n ...pkg.json.dependencies,\n ...pkg.json.devDependencies,\n };\n\n for (const [dep, version] of Object.entries(deps)) {\n if (dep.startsWith('@kb-labs/')) {continue;} // Skip workspace deps\n\n if (!depVersions.has(dep)) {\n depVersions.set(dep, new Map());\n }\n\n const versions = depVersions.get(dep)!;\n if (!versions.has(version as string)) {\n versions.set(version as string, new Set());\n }\n versions.get(version as string)!.add(pkg.name);\n }\n }\n\n // Find duplicates and determine most common version\n for (const [dep, versions] of depVersions.entries()) {\n if (versions.size <= 1) {continue;}\n\n // Find most common version\n const versionCounts = Array.from(versions.entries()).map(([ver, pkgs]) => ({\n version: ver,\n count: pkgs.size,\n packages: Array.from(pkgs),\n }));\n\n versionCounts.sort((a, b) => b.count - a.count);\n const targetVersion = versionCounts[0]?.version;\n if (!targetVersion) {continue;}\n\n // Align all packages to target version\n for (const { version, packages: pkgNames } of versionCounts.slice(1)) {\n aligned.push({\n dep,\n from: version,\n to: targetVersion,\n packages: pkgNames,\n });\n\n if (!dryRun) {\n // Apply changes to package.json files\n for (const pkgName of pkgNames) {\n const pkg = packages.find(p => p.name === pkgName);\n if (!pkg) {continue;}\n\n if (pkg.json.dependencies?.[dep]) {\n pkg.json.dependencies[dep] = targetVersion;\n }\n if (pkg.json.devDependencies?.[dep]) {\n pkg.json.devDependencies[dep] = targetVersion;\n }\n\n fs.writeFileSync(pkg.path, JSON.stringify(pkg.json, null, 2) + '\\n');\n }\n }\n }\n }\n\n return aligned;\n}\n\n/**\n * Add missing workspace dependencies\n */\nasync function addMissingWorkspaceDeps(\n packages: Array<{ name: string; path: string; json: any }>,\n dryRun: boolean\n): Promise<Array<{ package: string; dep: string; version: string }>> {\n const added: Array<{ package: string; dep: string; version: string }> = [];\n\n // Build map of workspace packages\n const workspacePackages = new Map<string, string>();\n for (const pkg of packages) {\n if (pkg.name.startsWith('@kb-labs/')) {\n workspacePackages.set(pkg.name, 'workspace:*');\n }\n }\n\n // Check each package for missing workspace deps\n for (const pkg of packages) {\n const packageDir = path.dirname(pkg.path);\n const srcDir = path.join(packageDir, 'src');\n\n if (!fs.existsSync(srcDir)) {continue;}\n\n // Scan imports\n const imports = scanImports(srcDir);\n const currentDeps = {\n ...pkg.json.dependencies,\n ...pkg.json.devDependencies,\n };\n\n for (const imp of imports) {\n if (imp.startsWith('@kb-labs/') && workspacePackages.has(imp) && !currentDeps[imp]) {\n added.push({\n package: pkg.name,\n dep: imp,\n version: 'workspace:*',\n });\n\n if (!dryRun) {\n if (!pkg.json.dependencies) {\n pkg.json.dependencies = {};\n }\n pkg.json.dependencies[imp] = 'workspace:*';\n fs.writeFileSync(pkg.path, JSON.stringify(pkg.json, null, 2) + '\\n');\n }\n }\n }\n }\n\n return added;\n}\n\n/**\n * Remove unused dependencies\n */\nasync function removeUnusedDeps(\n packages: Array<{ name: string; path: string; json: any }>,\n dryRun: boolean\n): Promise<Array<{ package: string; dep: string }>> {\n const removed: Array<{ package: string; dep: string }> = [];\n\n for (const pkg of packages) {\n const packageDir = path.dirname(pkg.path);\n const srcDir = path.join(packageDir, 'src');\n\n if (!fs.existsSync(srcDir)) {continue;}\n\n // Scan imports\n const imports = new Set(scanImports(srcDir));\n\n const deps = {\n ...pkg.json.dependencies,\n ...pkg.json.devDependencies,\n };\n\n for (const dep of Object.keys(deps)) {\n // Skip protected dependencies\n if (isProtectedDep(dep)) {continue;}\n\n // Check if dependency is used\n if (!imports.has(dep)) {\n removed.push({\n package: pkg.name,\n dep,\n });\n\n if (!dryRun) {\n delete pkg.json.dependencies?.[dep];\n delete pkg.json.devDependencies?.[dep];\n fs.writeFileSync(pkg.path, JSON.stringify(pkg.json, null, 2) + '\\n');\n }\n }\n }\n }\n\n return removed;\n}\n\n/**\n * Scan directory for imports\n */\nfunction scanImports(dir: string): string[] {\n const imports: string[] = [];\n\n function walk(currentDir: string) {\n const entries = fs.readdirSync(currentDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(currentDir, entry.name);\n\n if (entry.isDirectory()) {\n walk(fullPath);\n } else if (entry.isFile() && /\\.(ts|tsx|js|jsx)$/.test(entry.name)) {\n const content = fs.readFileSync(fullPath, 'utf-8');\n\n // Match import statements\n const importRegex = /(?:import|require)\\s*\\(?['\"]([^'\"]+)['\"]\\)?/g;\n let match;\n while ((match = importRegex.exec(content)) !== null) {\n const imp = match[1];\n if (!imp) {continue;}\n // Extract package name (handle scoped packages)\n const pkgName = imp.startsWith('@') ? imp.split('/').slice(0, 2).join('/') : imp.split('/')[0];\n if (pkgName) {\n imports.push(pkgName);\n }\n }\n }\n }\n }\n\n walk(dir);\n return Array.from(new Set(imports));\n}\n\n/**\n * Check if dependency is protected (build tools, etc.)\n */\nfunction isProtectedDep(dep: string): boolean {\n const protectedDeps = [\n 'typescript',\n 'tsup',\n 'esbuild',\n 'vite',\n 'rollup',\n 'rimraf',\n 'vitest',\n 'jest',\n 'playwright',\n 'eslint',\n 'prettier',\n ];\n\n return protectedDeps.some(p => dep === p || dep.startsWith(`${p}-`) || dep.startsWith(`@${p}/`));\n}\n\n/**\n * Output dependency statistics\n */\nfunction outputStats(stats: any, flags: any, ui: any) {\n if (flags.json) {\n ui?.json?.(stats);\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n sections.push({\n header: 'Overview',\n items: [\n `Total Packages: ${stats.totalPackages}`,\n `Total Dependencies: ${stats.totalDeps}`,\n `Duplicate Versions: ${stats.duplicates}`,\n ],\n });\n\n if (stats.topUsed.length > 0) {\n sections.push({\n header: 'Top 10 Most Used',\n items: stats.topUsed.map((d: any) => `${d.name} (${d.count} packages)`),\n });\n }\n\n ui?.success?.('Dependency statistics', {\n title: '๐Ÿ“Š Dependency Statistics',\n sections,\n });\n}\n\n/**\n * Output fix results\n */\nfunction outputResults(result: FixResult, flags: any, ui: any) {\n if (flags.json) {\n ui?.json?.(result);\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Summary\n const summaryItems = [\n `Packages Scanned: ${result.packagesScanned}`,\n `Mode: ${result.dryRun ? '๐Ÿ” Dry Run (no changes applied)' : 'โœ… Changes Applied'}`,\n ];\n sections.push({ header: 'Summary', items: summaryItems });\n\n // Aligned dependencies\n if (result.alignedDeps.length > 0) {\n const alignedItems = result.alignedDeps.map(\n a => `${a.dep}: ${a.from} โ†’ ${a.to} (${a.packages.length} packages)`\n );\n sections.push({ header: 'Aligned Versions', items: alignedItems.slice(0, 10) });\n if (result.alignedDeps.length > 10) {\n const lastSection = sections[sections.length - 1];\n if (lastSection) {\n lastSection.items.push(`... and ${result.alignedDeps.length - 10} more`);\n }\n }\n }\n\n // Added dependencies\n if (result.addedDeps.length > 0) {\n const addedItems = result.addedDeps.map(a => `${a.package}: +${a.dep}`);\n sections.push({ header: 'Added Dependencies', items: addedItems.slice(0, 10) });\n if (result.addedDeps.length > 10) {\n const lastSection = sections[sections.length - 1];\n if (lastSection) {\n lastSection.items.push(`... and ${result.addedDeps.length - 10} more`);\n }\n }\n }\n\n // Removed dependencies\n if (result.removedDeps.length > 0) {\n const removedItems = result.removedDeps.map(r => `${r.package}: -${r.dep}`);\n sections.push({ header: 'Removed Dependencies', items: removedItems.slice(0, 10) });\n if (result.removedDeps.length > 10) {\n const lastSection = sections[sections.length - 1];\n if (lastSection) {\n lastSection.items.push(`... and ${result.removedDeps.length - 10} more`);\n }\n }\n }\n\n // No changes\n if (\n result.alignedDeps.length === 0 &&\n result.addedDeps.length === 0 &&\n result.removedDeps.length === 0\n ) {\n sections.push({ header: 'Result', items: ['โœ… No issues found!'] });\n }\n\n // Next steps for dry run\n if (result.dryRun && (result.alignedDeps.length > 0 || result.addedDeps.length > 0 || result.removedDeps.length > 0)) {\n sections.push({\n header: 'Next Steps',\n items: ['Remove --dry-run flag to apply changes', 'Run `pnpm install` after applying changes'],\n });\n }\n\n const title = result.dryRun ? '๐Ÿ” Dependency Fix Preview' : 'โœ… Dependency Fix Complete';\n\n ui?.success?.('Dependency fix completed', {\n title,\n sections,\n });\n}\n","/**\n * quality:health - Monorepo health check\n *\n * Analyzes monorepo health including:\n * - Dependency issues (duplicates, unused, missing)\n * - Structure problems (missing READMEs, inconsistent naming)\n * - Build health (TypeScript errors, missing types)\n * - Overall health score with grade (A-F)\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport type { HealthScore, Issue } from '@kb-labs/quality-contracts';\nimport { CACHE_KEYS } from '@kb-labs/quality-contracts';\nimport type { HealthFlags } from './flags.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n// Input type with backward compatibility\ntype HealthInput = HealthFlags & { argv?: string[] };\n\ntype HealthCommandResult = {\n exitCode: number;\n result?: HealthScore;\n meta?: Record<string, unknown>;\n};\n\nexport default defineCommand({\n id: 'quality:health',\n description: 'Check monorepo health score',\n\n handler: {\n async execute(ctx: PluginContextV3, input: HealthInput): Promise<HealthCommandResult> {\n const { ui, platform } = ctx;\n\n // V3: Flags come in input.flags object (not auto-merged)\n const flags = (input as any).flags ?? input;\n\n // Calculate health score\n const health = await calculateHealth(ctx.cwd, flags.package);\n\n // Cache results for 5 minutes\n await platform.cache.set(CACHE_KEYS.HEALTH, health, 5 * 60 * 1000);\n\n // Track analytics\n await platform.analytics.track('quality:health', {\n score: health.score,\n grade: health.grade,\n issueCount: health.issues.length,\n packageSpecific: !!flags.package,\n });\n\n // Output results\n outputHealth(health, flags, ui);\n\n return {\n exitCode: health.score < 60 ? 1 : 0,\n result: health,\n };\n },\n },\n});\n\n/**\n * Find all packages in the monorepo\n */\nfunction findPackages(rootDir: string, specificPackage?: string): string[] {\n const packages: string[] = [];\n\n if (!fs.existsSync(rootDir)) {\n return packages;\n }\n\n const entries = fs.readdirSync(rootDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (!entry.isDirectory() || !entry.name.startsWith('kb-labs-')) {continue;}\n\n const repoPath = path.join(rootDir, entry.name);\n const packagesDir = path.join(repoPath, 'packages');\n\n if (!fs.existsSync(packagesDir)) {continue;}\n\n const packageDirs = fs.readdirSync(packagesDir, { withFileTypes: true });\n\n for (const pkgDir of packageDirs) {\n if (!pkgDir.isDirectory()) {continue;}\n\n const packageJsonPath = path.join(packagesDir, pkgDir.name, 'package.json');\n\n if (fs.existsSync(packageJsonPath)) {\n // If specific package requested, filter\n if (specificPackage) {\n const pkgJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n if (pkgJson.name === specificPackage || pkgDir.name === specificPackage) {\n packages.push(packageJsonPath);\n }\n } else {\n packages.push(packageJsonPath);\n }\n }\n }\n }\n\n return packages;\n}\n\n/**\n * Calculate comprehensive health score\n */\nasync function calculateHealth(rootDir: string, specificPackage?: string): Promise<HealthScore> {\n const packages = findPackages(rootDir, specificPackage);\n let score = 100;\n const issues: Issue[] = [];\n\n // 1. Check for duplicate dependencies\n const allDeps = new Map<string, Set<string>>();\n\n for (const packagePath of packages) {\n const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n for (const [dep, version] of Object.entries(deps)) {\n if (!allDeps.has(dep)) {\n allDeps.set(dep, new Set());\n }\n allDeps.get(dep)!.add(version as string);\n }\n }\n\n const duplicates = Array.from(allDeps.entries())\n .filter(([_, versions]) => versions.size > 1)\n .filter(([dep]) => !dep.startsWith('@kb-labs/')); // Ignore workspace deps\n\n if (duplicates.length > 0) {\n const penalty = Math.min(20, duplicates.length * 2);\n score -= penalty;\n issues.push({\n type: 'duplicates',\n severity: 'warning',\n message: `${duplicates.length} duplicate dependencies (-${penalty})`,\n });\n }\n\n // 2. Check for missing READMEs\n let missingReadmes = 0;\n for (const packagePath of packages) {\n const packageDir = path.dirname(packagePath);\n const readmePath = path.join(packageDir, 'README.md');\n if (!fs.existsSync(readmePath)) {\n missingReadmes++;\n }\n }\n\n if (missingReadmes > 0) {\n const penalty = Math.min(15, missingReadmes);\n score -= penalty;\n issues.push({\n type: 'missing-docs',\n severity: 'warning',\n message: `${missingReadmes} packages missing README (-${penalty})`,\n });\n }\n\n // 3. Check for inconsistent naming\n let namingIssues = 0;\n for (const packagePath of packages) {\n const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));\n const packageName = packageJson.name;\n\n if (!packageName || !packageName.startsWith('@kb-labs/')) {\n namingIssues++;\n }\n }\n\n if (namingIssues > 0) {\n const penalty = Math.min(10, namingIssues * 2);\n score -= penalty;\n issues.push({\n type: 'naming',\n severity: 'critical',\n message: `${namingIssues} packages with naming issues (-${penalty})`,\n });\n }\n\n // 4. Check for missing type definitions\n let missingTypes = 0;\n for (const packagePath of packages) {\n const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));\n\n if (!packageJson.types && !packageJson.typings) {\n missingTypes++;\n }\n }\n\n if (missingTypes > 0) {\n const penalty = Math.min(15, missingTypes);\n score -= penalty;\n issues.push({\n type: 'missing-types',\n severity: 'warning',\n message: `${missingTypes} packages missing types field (-${penalty})`,\n });\n }\n\n // Determine grade\n let grade: 'A' | 'B' | 'C' | 'D' | 'F';\n if (score >= 90) {grade = 'A';}\n else if (score >= 80) {grade = 'B';}\n else if (score >= 70) {grade = 'C';}\n else if (score >= 60) {grade = 'D';}\n else {grade = 'F';}\n\n return {\n score: Math.max(0, score),\n grade,\n issues,\n };\n}\n\n/**\n * Output health check results\n */\nfunction outputHealth(health: HealthScore, flags: any, ui: any) {\n if (flags.json) {\n ui?.json?.(health);\n return;\n }\n\n // Build sections\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Score section\n const scoreItems = [\n `Score: ${health.score}/100`,\n `Grade: ${health.grade}`,\n `Status: ${health.score >= 80 ? 'โœ… Healthy' : health.score >= 60 ? 'โš ๏ธ Needs Attention' : 'โŒ Critical'}`,\n ];\n sections.push({ header: 'Health Score', items: scoreItems });\n\n // Issues section\n if (health.issues.length > 0) {\n const issueItems = health.issues.map(issue => {\n const icon = issue.severity === 'critical' ? 'โŒ' : issue.severity === 'warning' ? 'โš ๏ธ' : 'โ„น๏ธ';\n return `${icon} ${issue.message}`;\n });\n\n if (flags.detailed) {\n sections.push({ header: 'Issues (Detailed)', items: issueItems });\n } else {\n sections.push({ header: 'Issues', items: issueItems });\n }\n } else {\n sections.push({ header: 'Issues', items: ['โœ… No issues found!'] });\n }\n\n // Recommendations\n if (health.score < 90) {\n const recommendations: string[] = [];\n\n if (health.issues.some(i => i.type === 'duplicates')) {\n recommendations.push('Run `kb quality:fix-deps --align-versions` to fix duplicates');\n }\n if (health.issues.some(i => i.type === 'missing-docs')) {\n recommendations.push('Add README.md files to packages');\n }\n if (health.issues.some(i => i.type === 'missing-types')) {\n recommendations.push('Add \"types\" field to package.json or enable dts generation');\n }\n\n if (recommendations.length > 0) {\n sections.push({ header: 'Recommendations', items: recommendations });\n }\n }\n\n const title = health.score >= 80\n ? '๐Ÿ’š Monorepo Health Check - Healthy'\n : health.score >= 60\n ? '๐Ÿ’› Monorepo Health Check - Needs Attention'\n : 'โค๏ธ Monorepo Health Check - Critical';\n\n ui?.success?.('Health check completed', {\n title,\n sections,\n });\n}\n","/**\n * quality:stats - Monorepo statistics and health score\n *\n * Collects comprehensive statistics about the monorepo including:\n * - Package count by repository\n * - Total lines of code\n * - File counts\n * - Dependency statistics\n * - Health score (if --health flag provided)\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport type { StatsResult, Issue } from '@kb-labs/quality-contracts';\nimport { CACHE_KEYS } from '@kb-labs/quality-contracts';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport type { StatsFlags } from './flags.js';\n\n// Input type with backward compatibility\ntype StatsInput = StatsFlags & { argv?: string[] };\n\ntype StatsCommandResult = {\n exitCode: number;\n result?: StatsResult;\n meta?: Record<string, unknown>;\n};\n\nexport default defineCommand({\n id: 'quality:stats',\n description: 'Show monorepo statistics and health score',\n\n handler: {\n async execute(ctx: PluginContextV3, input: StatsInput): Promise<StatsCommandResult> {\n const { ui, platform } = ctx;\n\n // V3: Flags come in input.flags object (not auto-merged)\n const flags = (input as any).flags ?? input;\n\n // Check cache unless refresh requested\n if (!flags.refresh) {\n const cached = await platform.cache.get<StatsResult>(CACHE_KEYS.STATS);\n if (cached) {\n outputStats(cached, flags, ui);\n return { exitCode: 0 };\n }\n }\n\n // Collect statistics\n const stats = await collectStats(ctx.cwd);\n\n // Calculate health score if requested\n if (flags.health) {\n stats.health = calculateHealthScore(stats);\n }\n\n // Cache results for 5 minutes\n await platform.cache.set(CACHE_KEYS.STATS, stats, 5 * 60 * 1000);\n\n // Track analytics\n await platform.analytics.track('quality:stats', {\n packages: stats.overview.totalPackages,\n repositories: stats.overview.totalRepositories,\n withHealth: flags.health ?? false,\n });\n\n // Output results\n outputStats(stats, flags, ui);\n\n return { exitCode: 0 };\n },\n },\n});\n\n/**\n * Find all packages in the monorepo\n */\nfunction findPackages(rootDir: string): string[] {\n const packages: string[] = [];\n\n if (!fs.existsSync(rootDir)) {\n return packages;\n }\n\n const entries = fs.readdirSync(rootDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (!entry.isDirectory() || !entry.name.startsWith('kb-labs-')) {continue;}\n\n const repoPath = path.join(rootDir, entry.name);\n const packagesDir = path.join(repoPath, 'packages');\n\n if (!fs.existsSync(packagesDir)) {continue;}\n\n const packageDirs = fs.readdirSync(packagesDir, { withFileTypes: true });\n\n for (const pkgDir of packageDirs) {\n if (!pkgDir.isDirectory()) {continue;}\n\n const packageJsonPath = path.join(packagesDir, pkgDir.name, 'package.json');\n\n if (fs.existsSync(packageJsonPath)) {\n packages.push(packageJsonPath);\n }\n }\n }\n\n return packages;\n}\n\n/**\n * Calculate package size (files, lines, bytes)\n */\nfunction calculateSize(packageDir: string): { files: number; lines: number; bytes: number } {\n const srcDir = path.join(packageDir, 'src');\n if (!fs.existsSync(srcDir)) {\n return { files: 0, lines: 0, bytes: 0 };\n }\n\n let files = 0;\n let lines = 0;\n let bytes = 0;\n\n function walk(dir: string) {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n\n if (entry.isDirectory()) {\n walk(fullPath);\n } else if (entry.isFile() && /\\.(ts|tsx|js|jsx)$/.test(entry.name)) {\n files++;\n const content = fs.readFileSync(fullPath, 'utf-8');\n lines += content.split('\\n').length;\n bytes += Buffer.byteLength(content, 'utf-8');\n }\n }\n }\n\n walk(srcDir);\n return { files, lines, bytes };\n}\n\n/**\n * Collect comprehensive statistics\n */\nasync function collectStats(rootDir: string): Promise<StatsResult> {\n const packages = findPackages(rootDir);\n\n const stats: StatsResult = {\n overview: {\n totalPackages: 0,\n totalRepositories: 0,\n totalFiles: 0,\n totalLines: 0,\n totalBytes: 0,\n },\n byRepository: {},\n dependencies: {\n total: 0,\n workspace: 0,\n external: 0,\n duplicates: 0,\n topUsed: [],\n },\n health: {\n score: 0,\n grade: 'F',\n issues: [],\n },\n largestPackages: [],\n };\n\n const repos = new Set<string>();\n const allDeps = new Map<string, number>();\n\n for (const packagePath of packages) {\n const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));\n const packageName = packageJson.name;\n\n if (!packageName || !packageName.startsWith('@kb-labs/')) {continue;}\n\n stats.overview.totalPackages++;\n\n const packageDir = path.dirname(packagePath);\n const repoName = path.basename(path.dirname(path.dirname(packageDir)));\n\n repos.add(repoName);\n\n const size = calculateSize(packageDir);\n stats.overview.totalFiles += size.files;\n stats.overview.totalLines += size.lines;\n stats.overview.totalBytes += size.bytes;\n\n // Track by repository\n if (!stats.byRepository[repoName]) {\n stats.byRepository[repoName] = {\n name: repoName,\n packages: 0,\n files: 0,\n lines: 0,\n bytes: 0,\n };\n }\n\n stats.byRepository[repoName].packages++;\n stats.byRepository[repoName].files += size.files;\n stats.byRepository[repoName].lines += size.lines;\n stats.byRepository[repoName].bytes += size.bytes;\n\n // Track dependencies\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n for (const dep of Object.keys(deps)) {\n stats.dependencies.total++;\n\n if (dep.startsWith('@kb-labs/')) {\n stats.dependencies.workspace++;\n } else {\n stats.dependencies.external++;\n }\n\n allDeps.set(dep, (allDeps.get(dep) || 0) + 1);\n }\n\n // Track package for largest packages list\n stats.largestPackages.push({\n name: packageName,\n repository: repoName,\n files: size.files,\n lines: size.lines,\n bytes: size.bytes,\n });\n }\n\n stats.overview.totalRepositories = repos.size;\n\n // Find duplicates\n stats.dependencies.duplicates = Array.from(allDeps.values()).filter(count => count > 1).length;\n\n // Top 10 most used dependencies\n stats.dependencies.topUsed = Array.from(allDeps.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10)\n .map(([name, count]) => ({ name, count }));\n\n // Sort largest packages by lines\n stats.largestPackages.sort((a, b) => b.lines - a.lines);\n stats.largestPackages = stats.largestPackages.slice(0, 10);\n\n return stats;\n}\n\n/**\n * Calculate health score\n */\nfunction calculateHealthScore(stats: StatsResult) {\n let score = 100;\n const issues: Issue[] = [];\n\n // Penalize for duplicate dependencies\n if (stats.dependencies.duplicates > 0) {\n const penalty = Math.min(20, stats.dependencies.duplicates * 2);\n score -= penalty;\n issues.push({\n type: 'duplicates',\n severity: 'warning',\n message: `${stats.dependencies.duplicates} duplicate dependencies (-${penalty})`,\n });\n }\n\n // Penalize for missing README files (would need to check, simplified here)\n // This is a placeholder - real implementation would scan for README files\n\n // Determine grade\n let grade: 'A' | 'B' | 'C' | 'D' | 'F';\n if (score >= 90) {grade = 'A';}\n else if (score >= 80) {grade = 'B';}\n else if (score >= 70) {grade = 'C';}\n else if (score >= 60) {grade = 'D';}\n else {grade = 'F';}\n\n return {\n score,\n grade,\n issues,\n };\n}\n\n/**\n * Output statistics in requested format\n */\nfunction outputStats(stats: StatsResult, flags: any, ui: any) {\n if (flags.json) {\n ui?.json?.(stats);\n return;\n }\n\n if (flags.md) {\n outputMarkdown(stats);\n return;\n }\n\n // Default: formatted output using V3 ctx.ui API\n const overviewItems = [\n `Packages: ${stats.overview.totalPackages}`,\n `Repositories: ${stats.overview.totalRepositories}`,\n `Lines of Code: ${stats.overview.totalLines.toLocaleString()}`,\n `Total Size: ${formatBytes(stats.overview.totalBytes)}`,\n ];\n\n const sections: Array<{ header: string; items: string[] }> = [\n { header: 'Overview', items: overviewItems },\n ];\n\n // Add health section if requested\n if (flags.health && stats.health) {\n const healthItems = [\n `Score: ${stats.health.score}/100 (Grade ${stats.health.grade})`,\n ];\n\n if (stats.health.issues.length > 0) {\n healthItems.push('');\n healthItems.push('Issues:');\n stats.health.issues.forEach(issue => {\n healthItems.push(` ${issue.message}`);\n });\n }\n\n sections.push({ header: 'Health Score', items: healthItems });\n }\n\n // Add top repositories\n const topRepos = Object.values(stats.byRepository)\n .sort((a, b) => b.lines - a.lines)\n .slice(0, 5)\n .map(repo => `${repo.name}: ${repo.lines.toLocaleString()} lines, ${repo.packages} pkg(s)`);\n\n if (topRepos.length > 0) {\n sections.push({ header: 'Top Repositories', items: topRepos });\n }\n\n ui?.success?.('Statistics collected successfully', {\n title: '๐Ÿ“Š KB Labs Monorepo Statistics',\n sections,\n });\n}\n\n/**\n * Output Markdown table\n */\nfunction outputMarkdown(stats: StatsResult) {\n console.log('# KB Labs Monorepo Statistics\\n');\n console.log('## Overview\\n');\n console.log('| Metric | Value |');\n console.log('|--------|-------|');\n console.log(`| Packages | ${stats.overview.totalPackages} |`);\n console.log(`| Repositories | ${stats.overview.totalRepositories} |`);\n console.log(`| Lines of Code | ${stats.overview.totalLines.toLocaleString()} |`);\n console.log(`| Total Size | ${formatBytes(stats.overview.totalBytes)} |\\n`);\n\n if (stats.health) {\n console.log('## Health Score\\n');\n console.log(`**${stats.health.score}/100** (Grade ${stats.health.grade})\\n`);\n\n if (stats.health.issues.length > 0) {\n console.log('### Issues\\n');\n for (const issue of stats.health.issues) {\n console.log(`- ${issue.message}`);\n }\n console.log('');\n }\n }\n\n console.log('## By Repository\\n');\n console.log('| Repository | Packages | Lines | Size |');\n console.log('|------------|----------|-------|------|');\n for (const [name, repo] of Object.entries(stats.byRepository)) {\n console.log(`| ${name} | ${repo.packages} | ${repo.lines.toLocaleString()} | ${formatBytes(repo.bytes)} |`);\n }\n}\n\n/**\n * Format bytes to human-readable string\n */\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) {return '0 B';}\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${(bytes / Math.pow(k, i)).toFixed(2)} ${sizes[i]}`;\n}\n","/**\n * quality:visualize - Visualize dependency graph\n *\n * Shows dependency graph in various formats:\n * - Tree view for specific package\n * - DOT format for graphviz\n * - Statistics about the graph\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport {\n buildDependencyGraph,\n getReverseDependencies,\n getImpactAnalysis,\n type DependencyGraph,\n} from '@kb-labs/quality-core/graph';\n\ntype VisualizeFlags = {\n package?: string;\n tree?: boolean;\n dot?: boolean;\n stats?: boolean;\n reverse?: boolean;\n impact?: boolean;\n json?: boolean;\n argv?: string[];\n};\n\ntype VisualizeInput = VisualizeFlags & { argv?: string[] };\n\ntype VisualizeCommandResult = {\n exitCode: number;\n graph?: any;\n};\n\nexport default defineCommand({\n id: 'quality:visualize',\n description: 'Visualize dependency graph',\n\n handler: {\n async execute(ctx: PluginContextV3, input: VisualizeInput): Promise<VisualizeCommandResult> {\n const { ui } = ctx;\n\n // V3: Flags come in input.flags object (not auto-merged)\n const flags = (input as any).flags ?? input;\n\n // Build dependency graph\n const graph = buildDependencyGraph(ctx.cwd);\n\n // Handle different output modes\n if (flags.dot) {\n outputDot(graph, flags, ui);\n } else if (flags.tree && flags.package) {\n outputTree(graph, flags.package, flags, ui);\n } else if (flags.reverse && flags.package) {\n outputReverse(graph, flags.package, flags, ui);\n } else if (flags.impact && flags.package) {\n outputImpact(graph, flags.package, flags, ui);\n } else if (flags.stats) {\n outputStats(graph, flags, ui);\n } else {\n // Default: show stats\n outputStats(graph, flags, ui);\n }\n\n return { exitCode: 0 };\n },\n },\n});\n\n/**\n * Output dependency tree for a package\n */\nfunction outputTree(graph: DependencyGraph, packageName: string, flags: any, ui: any) {\n const { nodes } = graph;\n const node = nodes.get(packageName);\n\n if (!node) {\n ui?.fatal?.(`Package not found: ${packageName}`);\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n // Build tree recursively\n const visited = new Set<string>();\n const treeItems: string[] = [];\n\n function buildTree(pkg: string, depth: number, prefix: string) {\n if (visited.has(pkg)) {\n treeItems.push(`${prefix}${pkg} (circular)`);\n return;\n }\n visited.add(pkg);\n\n const pkgNode = nodes.get(pkg);\n if (!pkgNode) {return;}\n\n treeItems.push(`${prefix}${pkg}`);\n\n const deps = Array.from(pkgNode.deps);\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n if (!dep) {continue;}\n const isLast = i === deps.length - 1;\n const newPrefix = prefix + (isLast ? ' โ””โ”€ ' : ' โ”œโ”€ ');\n buildTree(dep, depth + 1, newPrefix);\n }\n }\n\n buildTree(packageName, 0, '');\n\n sections.push({\n header: 'Dependency Tree',\n items: treeItems,\n });\n\n ui?.success?.('Dependency tree generated', {\n title: `๐Ÿ“ฆ Dependency Tree for ${packageName}`,\n sections,\n });\n}\n\n/**\n * Output reverse dependencies (who depends on this package)\n */\nfunction outputReverse(graph: DependencyGraph, packageName: string, flags: any, ui: any) {\n const reverseDeps = getReverseDependencies(graph, packageName);\n\n if (flags.json) {\n ui?.json?.({ package: packageName, reverseDependencies: Array.from(reverseDeps) });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n if (reverseDeps.size === 0) {\n sections.push({\n header: 'Result',\n items: ['No packages depend on this package'],\n });\n } else {\n sections.push({\n header: `Packages that depend on ${packageName}`,\n items: Array.from(reverseDeps).map(dep => `โ€ข ${dep}`),\n });\n }\n\n ui?.success?.('Reverse dependencies found', {\n title: `โฌ…๏ธ Reverse Dependencies for ${packageName}`,\n sections,\n });\n}\n\n/**\n * Output impact analysis (all packages affected by changes)\n */\nfunction outputImpact(graph: DependencyGraph, packageName: string, flags: any, ui: any) {\n const affected = getImpactAnalysis(graph, packageName);\n\n if (flags.json) {\n ui?.json?.({ package: packageName, affectedPackages: Array.from(affected) });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n if (affected.size === 0) {\n sections.push({\n header: 'Result',\n items: ['No other packages affected by changes to this package'],\n });\n } else {\n sections.push({\n header: `Impact Analysis for ${packageName}`,\n items: [\n `Changes to this package will affect ${affected.size} other packages:`,\n '',\n ...Array.from(affected).map(dep => `โ€ข ${dep}`),\n ],\n });\n\n sections.push({\n header: 'Recommendations',\n items: [\n '๐Ÿงช Run tests in affected packages',\n '๐Ÿ”จ Rebuild affected packages',\n '๐Ÿ“ Update documentation if API changed',\n ],\n });\n }\n\n ui?.success?.('Impact analysis completed', {\n title: `๐Ÿ’ฅ Impact Analysis for ${packageName}`,\n sections,\n });\n}\n\n/**\n * Output dependency graph statistics\n */\nfunction outputStats(graph: DependencyGraph, flags: any, ui: any) {\n const { nodes } = graph;\n\n // Calculate statistics\n let totalDeps = 0;\n let maxDeps = 0;\n let maxDepsPackage = '';\n const depCounts = new Map<number, number>();\n\n for (const [name, node] of nodes) {\n const depCount = node.deps.size;\n totalDeps += depCount;\n\n if (depCount > maxDeps) {\n maxDeps = depCount;\n maxDepsPackage = name;\n }\n\n depCounts.set(depCount, (depCounts.get(depCount) ?? 0) + 1);\n }\n\n const avgDeps = nodes.size > 0 ? (totalDeps / nodes.size).toFixed(2) : '0';\n\n if (flags.json) {\n ui?.json?.({\n totalPackages: nodes.size,\n totalDependencies: totalDeps,\n averageDependencies: Number.parseFloat(avgDeps),\n maxDependencies: maxDeps,\n maxDependenciesPackage: maxDepsPackage,\n });\n return;\n }\n\n const sections: Array<{ header: string; items: string[] }> = [];\n\n sections.push({\n header: 'Graph Statistics',\n items: [\n `Total packages: ${nodes.size}`,\n `Total dependencies: ${totalDeps}`,\n `Average dependencies per package: ${avgDeps}`,\n `Max dependencies: ${maxDeps} (${maxDepsPackage})`,\n ],\n });\n\n // Dependency distribution\n const distributionItems: string[] = [];\n const sortedCounts = Array.from(depCounts.entries()).sort((a, b) => a[0] - b[0]);\n for (const [count, packages] of sortedCounts) {\n const bar = 'โ–ˆ'.repeat(Math.min(packages, 20));\n distributionItems.push(`${count} deps: ${bar} ${packages} packages`);\n }\n\n sections.push({\n header: 'Dependency Distribution',\n items: distributionItems,\n });\n\n ui?.success?.('Graph statistics calculated', {\n title: '๐Ÿ“Š Dependency Graph Statistics',\n sections,\n });\n}\n\n/**\n * Output DOT format for graphviz\n */\nfunction outputDot(graph: DependencyGraph, flags: any, ui: any) {\n const { nodes } = graph;\n\n const lines: string[] = [];\n lines.push('digraph dependencies {');\n lines.push(' rankdir=LR;');\n lines.push(' node [shape=box];');\n lines.push('');\n\n for (const [name, node] of nodes) {\n for (const dep of node.deps) {\n const safeName = name.replace(/[@\\/]/g, '_');\n const safeDep = dep.replace(/[@\\/]/g, '_');\n lines.push(` \"${safeName}\" -> \"${safeDep}\";`);\n }\n }\n\n lines.push('}');\n\n if (flags.json) {\n ui?.json?.({ dot: lines.join('\\n') });\n } else {\n for (const line of lines) {\n ui?.write?.(line);\n }\n ui?.write?.('');\n ui?.write?.('# Save to file and visualize with:');\n ui?.write?.('# dot -Tpng dependencies.dot -o dependencies.png');\n }\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
2
+ import { StatsResult } from '@kb-labs/quality-contracts';
3
+ import { StatsFlags } from './flags.js';
4
+
5
+ type StatsInput = StatsFlags & {
6
+ argv?: string[];
7
+ };
8
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, StatsInput, StatsResult>;
9
+
10
+ export { _default as default };